This new V3 SDK is written in Typescript and is a complete rewrite of the old SDK. It is much more modular and easier to use, and has a much smaller bundle size.
ChangeLog: All notable changes to this project will be documented in this file.
Removed browser-specific methods, e.g., checkAndSignAuthSig
yarn add @lit-protocol/lit-node-client-nodejs
or..
Operable in both Node.js and the browser
yarn add @lit-protocol/lit-node-client
📝 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 |
---|---|---|
@lit-protocol/lit-node-client-nodejs | ||
@lit-protocol/lit-node-client |
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::
The following commands will help you start developing with this repository.
First, install the dependencies via yarn:
yarn
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
The test apps are configured to automatically import all modules and expose all module functions. For browsers, you can access these functions using window.LitJsSdk_<package_name>.<function_name>
// Running apps...
// react: http://localhost:4003
// nodejs: in the terminal
yarn apps
or running individually
// react
yarn nx run react:serve
// nodejs
yarn nx run nodejs:serve
yarn test:unit
// -- web
yarn test:e2e:web
// -- node
yarn test:e2e:node
By default, NX provides a command to generate a library
nx generate @nx/js:library
. However, it doesn't have an esbuild built-in so that we've created a custom tool that modify the build commands.
yarn gen:lib <package-name> <tag>
yarn tools --create --react contracts-sdk --demo
// delete an app from ./app/<app-name>
yarn delete:app <app-name>
// delete a package from ./packages/<package-name>
yarn delete:package <package-name>
yarn build
yarn nx run <project-name>:build
During development you may wish to build your code changes in packages/
in a client application to test the correctness of the functionality.
If you would like to establish a dependency between packages within this monorepo and an external client application that consumes these packages:
npm link
at the root of the specific package you are making code changes in.cd ./packages/*/<package-name>
npm link
yarn build
# or
yarn nx run lit-node-client-nodejs:build --with-deps=false
npm link <package> --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.cd path/to/client-application
npm link <package> --save
Having done this setup, this is what the development cycle looks like moving forward:
You must have at least nodejs v18 to do this.
Install the latest packages with yarn install
Run yarn bump
to bump the version
Build all the packages with yarn build
Run the unit tests with yarn test:unit
& e2e node tests yarn test:e2e:nodejs
locally & ensure that they pass
Update the docs with yarn gen:docs --push
Finally, publish with the @cayenne
tag: yarn publish:cayenne
Commit these changes "Published version X.X.X"
git checkout serrano
yarn bump
yarn build
yarn node ./tools/scripts/pub.mjs --tag serrano-jalapeno
The following will serve the react testing app and launch the cypress e2e testing after
yarn test:e2e:web
or
yarn test:e2e:node
There are currently three environments can be tested on, each of which can be generated from a custom command, which would automatically import all the libraries in ./packages/*
. The UI of HTML & React are visually identical but they are using different libraries.
Environment | Generate Command | Test Location |
---|---|---|
React | yarn gen:react |
http://localhost:4003 |
NodeJs | yarn gen:nodejs |
yarn nx run nodejs:serve |
yarn test:unit
React
// E2E React
yarn tools --test --e2e react
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.
Set these two env vars:
export LIT_JS_SDK_LOCAL_NODE_DEV="true"
export LIT_JS_SDK_FUNDED_WALLET_PRIVATE_KEY="putAFundedPrivateKeyOnChronicleHere"
Run:
yarn update:contracts-sdk --fetch
yarn update:contracts-sdk --gen
yarn build:packages
To run manual tests:
yarn nx run nodejs:serve
...coming soon
yarn graph
In your React package.json, add GENERATE_SOURCEMAP=false
to your start script
eg.
"scripts": {
"start": "GENERATE_SOURCEMAP=false react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
It’s currently using a custom plugin @websaam/nx-esbuild which is a fork from @wanews/nx-esbuild
"_buildWeb": {
"executor": "@websaam/nx-esbuild:package",
"options": {
"banner": {
"js": "import { createRequire } from 'module';const require = createRequire(import.meta.url);"
},
"globalName": "LitJsSdk_CoreBrowser",
"outfile":"dist/packages/core-browser-vanilla/core-browser.js",
"entryPoints": ["./packages/core-browser/src/index.ts"],
"define": { "global": "window" },
"plugins":[
{
"package": "esbuild-node-builtins",
"function": "nodeBuiltIns"
}
]
}
}
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()
)
);
},
},
},
});
Make sure your node version is above v18.0.0
Generated using TypeDoc