The official Lens Storage Node client for JavaScript, TypeScript, and Node.js.
pnpm add @lens-protocol/storage-node-client
# or
npm install @lens-protocol/storage-node-client
# or
yarn add @lens-protocol/storage-node-client
Create an instance of the StorageClient
:
import { StorageClient, testnet } from "@lens-protocol/storage-node-client";
const storageClient = StorageClient.create(testnet);
Assuming you have a signer instance that satisfies the Signer
interface.
interface Signer {
signMessage({ message }): Promise<string>;
}
[!TIP] > Viem's
WalletClient
class satisfies theSigner
interface.
Upload a file:
const { uri, storageKey, gatewayUrl } = await storageClient.uploadFile(file:File);
console.log(uri); // lens://3552f3b6403e06ac89eba06b9f41ad82fd5dfb95c57d35b9446767…
Upload a mutable file:
const { uri, storageKey, gatewayUrl } = await storageClient.uploadFile(file:File, { mutable: true });
Use the lens_account
ACL template:
const { uri, storageKey, gatewayUrl } = await storageClient.uploadFile(file:File, {
acl: {
template: 'lens_account',
lensAccount: '0x1234567890abcdef1234567890abcdef12345678'
}
});
Use the generic_acl
ACL template:
const file: File = ...
const { uri, storageKey, gatewayUrl } = await storageClient.uploadFile(file, {
acl: {
template: 'generic_acl',
contractAddress: '0x1234567890abcdef1234567890abcdef12345678',
chainId: 1,
networkType: 'evm',
functionSig: '0x12345678',
params: [1, 2, 3]
}
});
Upload a folder:
const files: FileList = ...
const {
files, // [ { uri, storageKey, gatewayUrl } ],
folder // { uri, storageKey, gatewayUrl }
} = await storageClient.uploadFolder(files);
console.log(folder.uri); // lens://3552f3b6403e06ac89eba06b9f41ad82fd5dfb95c57d35b9446767…
console.log(files[0].uri); // lens://b53d9c4ea2acbadc00b9d0fc61bafa6ba1bf161dade9ac465667f5…
Delete a file or folder:
const success = await storageClient.delete(
"lens://3552f3b6403e06ac89eba06b9f41ad82fd5dfb95c57d35b9446767…",
walletClient
);
console.log(success); // true
Edit a file:
const file: File = ...
const success = await storageClient.editFile('lens://3552f3b6403e06ac89eba06b9f41ad82fd5dfb95c57d35b9446767…', file, walletClient);
console.log(success); // true
This section is for developers who want to contribute to the SDK.
- Node.js: >= v20. See installation guide.
- pnpm: v9.1.2. See installation guide.
Use nvm to manage your Node.js versions. Run the following command in the project root folder:
nvm use
to switch to the correct Node.js version.
Enable corepack to use the the correct version of pnpm
.
Run the following command in the project root folder:
corepack install
to install the correct version once. After that corepack will automatically use the correct version of pnpm
when entering the project folder.
Clone the repository:
git clone https://github.com/lens-network/lens-storage-node-client-libs.git
cd lens-storage-node-client-libs/typescript
Create .env
file from the .env.example
template:
cp .env.example .env
and populate the PRIVATE_KEY
environment variable:
PRIVATE_KEY=0x…
ACCOUNT=0x…
ADDRESS=
with the details of a Lens Account owner (needed by Lens Account ACL tests).
Install the dependencies:
pnpm install
Run the tests:
pnpm test
Lint the code:
pnpm lint
Compile the code:
pnpm build
Clean the build:
pnpm clean
The project uses Biome to format and lint the code. You can install the Biome extension for your IDE: https://biomejs.dev/guides/editors/first-party-extensions/
-
Create a new release branch using the
release/X.Y.Z
naming convention. -
Bumps up version number and updates the changelog.
pnpm changeset version
-
Commit the changes using
chore: bumps up version number
as the commit message. -
Push the changes to the remote repository.
-
Open a pull request to the
main
branch. -
Wait for all checks to pass and for the pull request to be approved.
-
Publish the package.
pnpm changeset publish
-
Push tags to the remote repository.
git push --follow-tags
-
Merge the pull request to the
main
branch.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Lens Social SDK is MIT licensed.