Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/decentldotland/mem-sdk
JS SDK for MEM Serverless Functions
https://github.com/decentldotland/mem-sdk
js mem sdk
Last synced: 3 days ago
JSON representation
JS SDK for MEM Serverless Functions
- Host: GitHub
- URL: https://github.com/decentldotland/mem-sdk
- Owner: decentldotland
- License: mit
- Created: 2024-01-14T12:29:20.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-01-29T23:21:41.000Z (10 months ago)
- Last Synced: 2024-11-01T23:33:06.329Z (14 days ago)
- Topics: js, mem, sdk
- Language: TypeScript
- Homepage: https://mem.tech
- Size: 206 KB
- Stars: 0
- Watchers: 0
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
@decentldotland/mem-sdk
JS SDK for MEM Serverless Functions
## Build Locally
```bash
git clone https://github.com/decentldotland/mem-sdk.gitcd mem-sdk
npm install && npm run build
```#### Build size
- `dist/index.cjs.js` 3.46 kB │ gzip: 1.07 kB
- `dist/index.umd.js` 3.66 kB │ gzip: 1.17 kB
- `dist/index.es.js` 4.74 kB │ gzip: 1.18 kB## Install
```bash
npm install mem-sdk
```## Usage Guide
### Import MEM SDK
#### React, and other frameworks (also check out [React Version](https://github.com/decentldotland/react-mem-api/)):
```ts
import Mem from "mem-sdk";const mem : Mem = new Mem({
network: "mainnet" || "testnet"
});
```#### Node (TS)
```ts
const { Mem } = require("mem-sdk");
const mem: Mem = new Mem({
network: "mainnet" || "testnet"
});
```#### Node (ES6)
```ts
import { Mem } from "mem-sdk"
const mem = new Mem({
network: "mainnet" || "testnet"
});
```### Retrieve a function state
```ts
const FUNCTION_ID = "...";
const state = await mem.read(FUNCTION_ID);
```### Send an interaction (only works on server-side)
```ts
const FUNCTION_ID = "...";
const inputs = { function: "test", inputA: "valueA" };const txid = await mem.write(FUNCTION_ID, inputs);
```
### Deploy a function
```ts
const SRC = `export async function handle(state, action) {
const input = action.input;if (input.function === "save") {
const { username, bio } = input;ContractAssert(username.trim().length, "ERROR_INVALID_INPUT");
ContractAssert(typeof username === "string" && typeof bio === "string");
state.logs.push ({ username, bio });
return { state }
}
}`;const INIT_STATE = '{"logs": []}';
const id = await mem.deploy(SRC, INIT_STATE);
```### Fork a function to mainnet or testnet
While the SDK should be initialized for `mainnet` using this method, the `fork` functionality allows forking ***mainnet*** deployed function to either mainnet or carbon testnet:```ts
const MAINNET_FUNCTION_ID = "...";
const FORK_IT_TO = "mainnet" || "testnet";
const OVERWRITE_INIT_STATE = btoa('{"new": "state"}'); // optionalconst id = await mem.fork(MAINNET_FUNCTION_ID, FORK_IT_TO, OVERWRITE_INIT_STATE?);
```
### Get a function's KV object (only `mainnet`)
```ts
const MAINNET_FUNCTION_ID = "...";
const kv = await mem.kvGet(MAINNET_FUNCTION_ID);
```### Named functions resolving DX (only `mainnet`)
It is possible to assign a memorable name to a function ID using the [function registry tool](https://mem.tech/function-registry) (e.g., `ans.mem` instead of `Tih...I5M`). These `.mem` names are resolvable with the MEM SDK the same way you would pass a function ID:
```ts
await mem.read("ans.mem");
```## License
This repository is licensed under the [MIT License](./LICENSE)