commit 8462fb5c4b7b3b34acba4a15b3049688c4d9021a Author: Derrick Hammer Date: Mon Mar 27 08:54:11 2023 -0400 *Initial version diff --git a/package.json b/package.json new file mode 100644 index 0000000..9345ae5 --- /dev/null +++ b/package.json @@ -0,0 +1,24 @@ +{ + "name": "@lumeweb/kernel-eth-client", + "version": "0.1.0", + "type": "module", + "main": "dist/index.js", + "dependencies": { + "@lumeweb/libkernel-universal": "git+https://git.lumeweb.com/LumeWeb/libkernel-universal.git", + "@lumeweb/rpc-client": "git+https://git.lumeweb.com/LumeWeb/rpc-client.git", + "buffer": "^6.0.3", + "ethers": "^6.2.2", + "libkernel": "^0.1.48", + "libkmodule": "^0.2.53", + "libskynet": "^0.0.62" + }, + "devDependencies": { + "@lumeweb/cfg": "git+https://git.lumeweb.com/LumeWeb/cfg.git", + "@lumeweb/interface-relay": "git+https://git.lumeweb.com/LumeWeb/interface-relay.git", + "@types/b4a": "^1.6.0", + "@types/node": "^18.15.5", + "@types/node-cache": "^4.2.5", + "prettier": "^2.8.6", + "typescript": "^5.0.2" + } +} diff --git a/src/client.ts b/src/client.ts new file mode 100644 index 0000000..c8b6deb --- /dev/null +++ b/src/client.ts @@ -0,0 +1,14 @@ +import { Client, factory } from "@lumeweb/libkernel-universal"; + +const RPC_MODULE = "AAAkzekB6FeX9sW2oBKOZ32G_2oU2oQWJIE9Iv4p6xBVGw"; + +export class EthClient extends Client { + public async ready() { + return this.callModuleReturn("ready"); + } + public async method(method: string, params: any) { + return this.callModuleReturn("method", params); + } +} + +export const createClient = factory(EthClient, RPC_MODULE); diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..6484bd2 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,2 @@ +export { createClient } from "./client.js"; +export { createProvider } from "./provider.js"; diff --git a/src/provider.ts b/src/provider.ts new file mode 100644 index 0000000..fdff1f8 --- /dev/null +++ b/src/provider.ts @@ -0,0 +1,19 @@ +import { Eip1193Provider, ethers } from "ethers"; +import { createClient, EthClient } from "./client.js"; + +export class Provider implements Eip1193Provider { + private client: EthClient = createClient(); + + public async request(args: RequestArguments): Promise { + return this.client.method(args.method, args.params); + } +} + +interface RequestArguments { + readonly method: string; + readonly params?: readonly unknown[] | object; +} + +export function createProvider(): ethers.BrowserProvider { + return new ethers.BrowserProvider(new Provider()); +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..fc3bd35 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "declaration": true, + "strict": true, + "module": "esnext", + "target": "esnext", + "esModuleInterop": true, + "sourceMap": false, + "rootDir": "src", + "outDir": "dist", + "typeRoots": [ + "node_modules/@types", + ], + "moduleResolution": "nodenext", + "declarationMap": true, + "declarationDir": "dist", + "emitDeclarationOnly": false, + "allowJs": true + }, + "include": [ + "src" + ] +}