From 0b055fac36b43fecf78a39bd9438248ba8f4418f Mon Sep 17 00:00:00 2001 From: anson Date: Mon, 8 Sep 2025 16:26:53 +0100 Subject: [PATCH] doc(README): initialise new README --- README.md | 430 +++++++++--------------------------------------------- 1 file changed, 73 insertions(+), 357 deletions(-) diff --git a/README.md b/README.md index 693c80a70..17630e070 100644 --- a/README.md +++ b/README.md @@ -1,400 +1,116 @@
-

Lit Protocol Javascript/Typescript SDK V8.x.x

- - - -
- -
-
-The Lit JavaScript SDK provides developers with a framework for implementing Lit functionality into their own applications. Find installation instructions in the docs to get started with the Lit SDK based on your use case: -
-
- ---- - -
-

Lit Protocol Javascript/Typescript SDK V7.x.x

- - -
- -
-
-The Lit JavaScript SDK provides developers with a framework for implementing Lit functionality into their own applications. Find installation instructions in the docs to get started with the Lit SDK based on your use case: -
-
- - - - - -https://developer.litprotocol.com/SDK/Explanation/installation - - -
- -
- -# Quick Start - -### NodeJS Exclusive - -Removed browser-specific methods, e.g., checkAndSignAuthSig - -``` -yarn add @lit-protocol/lit-node-client-nodejs -``` - -or.. - -### Isomorphic Implementation - -Operable in both Node.js and the browser - -``` -yarn add @lit-protocol/lit-node-client -``` - +

Lit Protocol SDK

+ + +
+ + +

+
+ Explore the docs » | +
+
+ Explorer + · + E2E Test Dapp + · + Report Bug + · + Request Feature +

-
- -# Packages - -📝 If you're looking to use the Lit SDK, you're probably all set with just the lit-node-client .
Get started with interacting with Lit network! - - - -| Package | Category | Download | -| ------- | -------- | -------- | - -If you're a tech-savvy user and wish to utilize only specific submodules that our main module relies upon, you can find individual packages listed below. This way, you can import only the necessary packages that cater to your specific use case:: - -| Package | Category | Download | -| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [@lit-protocol/access-control-conditions](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/access-control-conditions) | ![access-control-conditions](https://img.shields.io/badge/-universal-8A6496 'access-control-conditions') | | -| [@lit-protocol/access-control-conditions-schemas](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/access-control-conditions-schemas) | ![access-control-conditions-schemas](https://img.shields.io/badge/-universal-8A6496 'access-control-conditions-schemas') | | -| [@lit-protocol/auth](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/auth) | ![auth](https://img.shields.io/badge/-universal-8A6496 'auth') | | -| [@lit-protocol/auth-helpers](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/auth-helpers) | ![auth-helpers](https://img.shields.io/badge/-universal-8A6496 'auth-helpers') | | -| [@lit-protocol/constants](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/constants) | ![constants](https://img.shields.io/badge/-universal-8A6496 'constants') | | -| [@lit-protocol/crypto](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/crypto) | ![crypto](https://img.shields.io/badge/-universal-8A6496 'crypto') | | -| [@lit-protocol/lit-client](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/lit-client) | ![lit-client](https://img.shields.io/badge/-universal-8A6496 'lit-client') | | -| [@lit-protocol/logger](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/logger) | ![logger](https://img.shields.io/badge/-universal-8A6496 'logger') | | -| [@lit-protocol/networks](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/networks) | ![networks](https://img.shields.io/badge/-universal-8A6496 'networks') | | -| [@lit-protocol/schemas](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/schemas) | ![schemas](https://img.shields.io/badge/-universal-8A6496 'schemas') | | -| [@lit-protocol/types](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/types) | ![types](https://img.shields.io/badge/-universal-8A6496 'types') | | -| [@lit-protocol/wasm](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/wasm) | ![wasm](https://img.shields.io/badge/-universal-8A6496 'wasm') | | -| [@lit-protocol/wrapped-keys](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/wrapped-keys) | ![wrapped-keys](https://img.shields.io/badge/-universal-8A6496 'wrapped-keys') | | -| [@lit-protocol/wrapped-keys-lit-actions](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/wrapped-keys-lit-actions) | ![wrapped-keys-lit-actions](https://img.shields.io/badge/-universal-8A6496 'wrapped-keys-lit-actions') | | - - - -## API Doc - -| Version | Link | -| ------------ | -------------------------------------------------------- | -| V7 (Current) | [7.x.x docs](https://v7-api-doc-lit-js-sdk.vercel.app/) | -| V6 | [6.x.x docs](https://v6-api-doc-lit-js-sdk.vercel.app/) | -| V5 | [5.x.x docs](https://v3.api-docs.getlit.dev/) | -| V2 | [2.x.x docs](http://docs.lit-js-sdk-v2.litprotocol.com/) | - -
- -# Contributing and developing to this SDK - -## Prerequisite +# Prerequisite - node (v20.x or above) - rust (v1.70.00 or above) - [wasm-pack](https://github.com/rustwasm/wasm-pack) -## Recommended - -- NX Console: https://nx.dev/core-features/integrate-with-editors - -# Quick Start - -The following commands will help you start developing with this repository. - -First, install the dependencies via yarn: - -``` -yarn -``` - -## Building - -You can build the project with the following commands: - -``` -// for local development - It stripped away operations that don't matter for local dev -yarn build:dev - -// you should never need to use yarn build unless you want to test or publish it -yarn build -``` - -## Run unit tests - -``` -yarn test:unit -``` - -## Run E2E tests in nodejs - -``` -yarn test:local -``` - -# Advanced - -## Creating a new library - -`nx generate @nx/js:library` - -## Create a new react demo app using the Lit JS SDK - -```sh -yarn tools --create --react contracts-sdk --demo -``` +# Getting started -## Deleting a package or app +> **Note:** ❗️Bun is currently used for package management, but npm will become the default soon. (Mon 8 Sep, 2025) ``` -// delete an app from ./app/ -yarn delete:app - -// delete a package from ./packages/ -yarn delete:package -``` - -## Building - -```sh -yarn build -``` - -### Building target package - -```sh -yarn nx run :build +bun install && bun run build ``` -## Building Local Changes +# Running E2E Tests -During development you may wish to build your code changes in `packages/` in a client application to test the correctness of the functionality. +## Required Environment Variables -If you would like to establish a dependency between packages within this monorepo and an external client application that consumes these packages: +```bash +# (Optional) Request a private rpc url from +# https://hub.conduit.xyz/chronicle-yellowstone-testnet-9qgmzfcohk +LIT_YELLOWSTONE_PRIVATE_RPC_URL= -1. Run `npm link` at the root of the specific package you are making code changes in. +# For live networks (naga-dev, naga-staging) +LIVE_MASTER_ACCOUNT= -``` -cd ./packages/*/ -npm link -``` - -2. Build the packages with or without dependencies - -``` -yarn build -# or -yarn nx run lit-node-client-nodejs:build --with-deps=false +# For local network (naga-local) (default Anvil account) +LOCAL_MASTER_ACCOUNT=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 ``` -3. In the client application, run `npm link --save` to ensure that the `package.json` of the client application is updated with a `file:` link to the dependency. This effectively creates a symlink in the `node_modules` of the client application to the local dependency in this repository. +## Command +```bash +// eg. naga-dev +NETWORK= bun run test:e2e all ``` -cd path/to/client-application -npm link --save -``` - -Having done this setup, this is what the development cycle looks like moving forward: - -1. Make code change -2. Rebuild specific package -3. Rebuild client application. - -### Building changes to Rust source - -If changes are made to `packages/wasm` see [here](./packages/wasm/README.md) for info on building from source. - -## Publishing - -You must have at least nodejs v18 to do this. - -1. Install the latest packages with `yarn install` - -2. Run `yarn bump` to bump the version - -3. Build all the packages with `yarn build` -4. Run the unit tests with `yarn test:unit` & e2e node tests `yarn test:local` locally & ensure that they pass +# Running it against a local network -5. Update the docs with `yarn gen:docs --push` +## Required Environment Variables -6. Finally, publish with `yarn publish:packages` +```bash +# path to the networkContext.json file +NETWORK_CONFIG=//lit-assets/blockchain/contracts/networkContext.json -7. Commit these changes "Published version X.X.X" +# name of the output file +NETWORK_NAME=naga-develop -## Testing - -### Quick Start on E2E Testing - -The following will serve the react testing app and launch the cypress e2e testing after - -```sh -yarn test:local +# target directory +DIRECTORY_NAME=naga-local ``` -### Unit Tests +## Command -```sh -yarn test:unit +```bash +NETWORK=naga-local bun run test:e2e all ``` -## Testing with a Local Lit Node - -First, deploy your Lit Node Contracts, since the correct addresses will be pulled from the `../lit-assets/blockchain/contracts/deployed-lit-node-contracts-temp.json` file. +# Publishing -Set these two env vars: +```bash +# Generate a changeset +bunx changeset -```sh -export LIT_JS_SDK_LOCAL_NODE_DEV="true" -export LIT_JS_SDK_FUNDED_WALLET_PRIVATE_KEY="putAFundedPrivateKeyOnChronicleHere" -``` - -Run: +# Version the changeset +bunx changeset version -```sh -yarn update:contracts-sdk --fetch -yarn update:contracts-sdk --gen -yarn build:packages -``` +# Build the packages +bun run build -To run manual tests: +# Commit the changes +git add . +git commit -m "chore: release v0.0.1" -```sh - yarn nx run nodejs:serve +# Publish the packages +bunx changeset publish ``` -## ENV Vars - -- LIT_JS_SDK_GITHUB_ACCESS_TOKEN - a github access token to get the contract ABIs from a private repo -- LIT_JS_SDK_LOCAL_NODE_DEV - set to true to use a local node -- LIT_JS_SDK_FUNDED_WALLET_PRIVATE_KEY - set to a funded wallet on Chronicle Testnet - -# Error Handling - -This SDK uses custom error classes derived from [@openagenda/verror](https://github.com/OpenAgenda/verror) to handle errors between packages and to the SDK consumers. -Normal error handling is also supported as VError extends the native Error class, but using VError allows for better error composition and information propagation. -You can check their documentation for the extra fields that are added to the error object and methods on how to handle them in a safe way. - -## Example - -```ts -import { VError } from '@openagenda/verror'; -import { LitNodeClientBadConfigError } from '@lit-protocol/constants'; - -try { - const someNativeError = new Error('some native error'); - - throw new LitNodeClientBadConfigError( - { - cause: someNativeError, - info: { - foo: 'bar', - }, - meta: { - baz: 'qux', - }, - }, - 'some useful message' - ); -} catch (e) { - console.log(e.name); // LitNodeClientBadConfigError - console.log(e.message); // some useful message: some native error - console.log(e.info); // { foo: 'bar' } - console.log(e.baz); // qux - // VError.cause(e) is someNativeError - // VError.info(e) is { foo: 'bar' } - // VError.meta(e) is { baz: 'qux', code: 'lit_node_client_bad_config_error', kind: 'Config' } - // Verror.fullStack(e) is the full stack trace composed of the error chain including the causes -} -``` - -## Creating a new error - -In file `packages/constants/src/lib/errors.ts` you can find the list of errors that are currently supported and add new ones if needed. - -To create and use a new error, you need to: - -1. Add the error information to the `LIT_ERROR` object in `packages/constants/src/lib/errors.ts` -2. Export the error from the `errors.ts` file at the end of the file -3. Import the error where you need it -4. Throw the error in your code adding all the information a user might need to know about the error such as the cause, the info, etc. - -# Dockerfile - -...coming soon - -## Other Commands - -### Interactive graph dependencies using NX - -``` -yarn graph -``` - -![](https://i.ibb.co/2dLyMTW/Screenshot-2022-11-15-at-15-18-46.png) - -# FAQs & Common Errors - -
-(React) Failed to parse source map from - -In your React package.json, add `GENERATE_SOURCEMAP=false` to your start script +--- -eg. +# Legacy Documentation for V7 and Earlier -``` - "scripts": { - "start": "GENERATE_SOURCEMAP=false react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, -``` +| Version | Link | +| ------- | -------------------------------------------------------- | +| V7 | [7.x.x docs](https://v7-api-doc-lit-js-sdk.vercel.app/) | +| V6 | [6.x.x docs](https://v6-api-doc-lit-js-sdk.vercel.app/) | +| V5 | [5.x.x docs](https://v3.api-docs.getlit.dev/) | +| V2 | [2.x.x docs](http://docs.lit-js-sdk-v2.litprotocol.com/) | -
- -
-Reference Error: crypto is not defined - -```js -import crypto, { createHash } from 'crypto'; -Object.defineProperty(globalThis, 'crypto', { - value: { - getRandomValues: (arr: any) => crypto.randomBytes(arr.length), - subtle: { - digest: (algorithm: string, data: Uint8Array) => { - return new Promise((resolve, reject) => - resolve( - createHash(algorithm.toLowerCase().replace('-', '')) - .update(data) - .digest() - ) - ); - }, - }, - }, -}); -``` - -
-
-error Command failed with exit code 13. +
-Make sure your node version is above v18.0.0 +# Contact - +You can reach the Lit Protocol team through [Telegram](https://t.me/+aa73FAF9Vp82ZjJh), [Discord](https://litgateway.com/discord), or [X](https://x.com/litprotocol). \ No newline at end of file