Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/LIT-Protocol/js-sdk
The Lit Protocol SDK provides developers with a framework for implementing Lit functionality into their own applications.
https://github.com/LIT-Protocol/js-sdk
blockchain bls-signatures cosmosos dapp decentralized-applications ecdsa ethereum javascript lit-protocol sdk threshold-cryptography typescript
Last synced: about 2 months ago
JSON representation
The Lit Protocol SDK provides developers with a framework for implementing Lit functionality into their own applications.
- Host: GitHub
- URL: https://github.com/LIT-Protocol/js-sdk
- Owner: LIT-Protocol
- License: mit
- Created: 2022-08-19T13:24:40.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-10-18T18:07:22.000Z (about 2 months ago)
- Last Synced: 2024-10-19T11:44:00.986Z (about 2 months ago)
- Topics: blockchain, bls-signatures, cosmosos, dapp, decentralized-applications, ecdsa, ethereum, javascript, lit-protocol, sdk, threshold-cryptography, typescript
- Language: TypeScript
- Homepage: https://developer.litprotocol.com
- Size: 83.7 MB
- Stars: 99
- Watchers: 6
- Forks: 60
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
- Security: security.txt
Awesome Lists containing this project
- awesome - LIT-Protocol/js-sdk - The Lit Protocol SDK provides developers with a framework for implementing Lit functionality into their own applications. (TypeScript)
- awesome-decentralized-database - Lit - Create and manage distributed cryptographic key-pairs for condition-based encryption and programmatic signing. (Encryption and Security / Peer-to-Peer)
- awesome - JavaScript SDK
README
Lit Protocol Javascript/Typescript SDK V6.5.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
```# 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 |
| -------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [@lit-protocol/lit-node-client-nodejs](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/lit-node-client-nodejs) | ![lit-node-client-nodejs](https://img.shields.io/badge/-nodejs-2E8B57 'lit-node-client-nodejs') | |
| [@lit-protocol/lit-node-client](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/lit-node-client) | ![lit-node-client](https://img.shields.io/badge/-universal-8A6496 '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::
| 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/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/bls-sdk](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/bls-sdk) | ![bls-sdk](https://img.shields.io/badge/-universal-8A6496 'bls-sdk') | |
| [@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/contracts-sdk](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/contracts-sdk) | ![contracts-sdk](https://img.shields.io/badge/-universal-8A6496 'contracts-sdk') | |
| [@lit-protocol/core](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/core) | ![core](https://img.shields.io/badge/-universal-8A6496 'core') | |
| [@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/ecdsa-sdk](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/ecdsa-sdk) | ![ecdsa-sdk](https://img.shields.io/badge/-universal-8A6496 'ecdsa-sdk') | |
| [@lit-protocol/encryption](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/encryption) | ![encryption](https://img.shields.io/badge/-universal-8A6496 'encryption') | |
| [@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/misc](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/misc) | ![misc](https://img.shields.io/badge/-universal-8A6496 'misc') | |
| [@lit-protocol/nacl](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/nacl) | ![nacl](https://img.shields.io/badge/-universal-8A6496 'nacl') | |
| [@lit-protocol/pkp-base](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/pkp-base) | ![pkp-base](https://img.shields.io/badge/-universal-8A6496 'pkp-base') | |
| [@lit-protocol/pkp-client](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/pkp-client) | ![pkp-client](https://img.shields.io/badge/-universal-8A6496 'pkp-client') | |
| [@lit-protocol/pkp-cosmos](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/pkp-cosmos) | ![pkp-cosmos](https://img.shields.io/badge/-universal-8A6496 'pkp-cosmos') | |
| [@lit-protocol/pkp-ethers](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/pkp-ethers) | ![pkp-ethers](https://img.shields.io/badge/-universal-8A6496 'pkp-ethers') | |
| [@lit-protocol/pkp-sui](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/pkp-sui) | ![pkp-sui](https://img.shields.io/badge/-universal-8A6496 'pkp-sui') | |
| [@lit-protocol/pkp-walletconnect](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/pkp-walletconnect) | ![pkp-walletconnect](https://img.shields.io/badge/-universal-8A6496 'pkp-walletconnect') | |
| [@lit-protocol/sev-snp-utils-sdk](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/sev-snp-utils-sdk) | ![sev-snp-utils-sdk](https://img.shields.io/badge/-universal-8A6496 'sev-snp-utils-sdk') | |
| [@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/uint8arrays](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/uint8arrays) | ![uint8arrays](https://img.shields.io/badge/-universal-8A6496 'uint8arrays') | |
| [@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') | |
| [@lit-protocol/auth-browser](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/auth-browser) | ![auth-browser](https://img.shields.io/badge/-browser-E98869 'auth-browser') | |
| [@lit-protocol/misc-browser](https://github.com/LIT-Protocol/js-sdk/tree/master/packages/misc-browser) | ![misc-browser](https://img.shields.io/badge/-browser-E98869 'misc-browser') | |## API Doc
| Version | Link |
| ---------------- | -------------------------------------------------------- |
| V6 (Beta) | [6.x.x docs](https://v6-api-doc-lit-js-sdk.vercel.app/) |
| V5 (**Current**) | [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
- node (v19.x or above)
## 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
```js
yarn tools --create --react contracts-sdk --demo
```## Deleting a package or app
```
// delete an app from ./app/
yarn delete:app// delete a package from ./packages/
yarn delete:package
```## Building
```jsx
yarn build
```### Building target package
```jsx
yarn nx run :build
```## Building Local Changes
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:
1. Run `npm link` at the root of the specific package you are making code changes in.
```
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
```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.
```
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.## 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
5. Update the docs with `yarn gen:docs --push`
6. Finally, publish with the `@cayenne` tag: `yarn publish:cayenne`
7. Commit these changes "Published version X.X.X"
### Publishing to Serrano / Jalapno
```sh
git checkout serrano
yarn bump
yarn build
yarn node ./tools/scripts/pub.mjs --tag serrano-jalapeno
```## 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
```### Unit Tests
```jsx
yarn test:unit
```## 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.
Set these two env vars:
```sh
export LIT_JS_SDK_LOCAL_NODE_DEV="true"
export LIT_JS_SDK_FUNDED_WALLET_PRIVATE_KEY="putAFundedPrivateKeyOnChronicleHere"
```Run:
```sh
yarn update:contracts-sdk --fetch
yarn update:contracts-sdk --gen
yarn build:packages
```To run manual tests:
```sh
yarn nx run nodejs:serve
```## 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# 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.
```
"scripts": {
"start": "GENERATE_SOURCEMAP=false react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
```Web bundling using esbuild
Itβs currently using a custom plugin [@websaam/nx-esbuild](https://www.npmjs.com/package/@websaam/nx-esbuild) which is a fork from [@wanews/nx-esbuild](https://www.npmjs.com/package/@wanews/nx-esbuild)
```json
"_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"
}
]
}
}
```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