diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index d42f42df..00000000
--- a/.eslintignore
+++ /dev/null
@@ -1,3 +0,0 @@
-node_modules/
-dist/
-docs/
diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index 4cf0f6c2..00000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "extends": [
- "eslint:recommended",
- "plugin:@typescript-eslint/recommended",
- "plugin:prettier/recommended"
- ],
- "rules": {
- "@typescript-eslint/no-explicit-any": "off"
- }
-}
\ No newline at end of file
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 90ff037b..acd5c448 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -20,11 +20,11 @@ jobs:
- name: Setup node
uses: actions/setup-node@v3
with:
- node-version: 18.x
+ node-version: 20.x
cache: npm
- name: Install dependencies
run: npm install
- name: Run build
- run: npm run build
\ No newline at end of file
+ run: npm run build
diff --git a/.github/workflows/doc.yaml b/.github/workflows/doc.yaml
index 32d88aee..a82b92eb 100644
--- a/.github/workflows/doc.yaml
+++ b/.github/workflows/doc.yaml
@@ -18,11 +18,14 @@ jobs:
- name: Setup node
uses: actions/setup-node@v3
with:
- node-version: 18.x
+ node-version: 20.x
cache: npm
- name: Install dependencies
- run: npm install
+ run: npm ci
+
+ - name: Build packages
+ run: npm run build
- name: Create Doc
run: npm run doc
diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml
index ff7c794d..a5706f4d 100644
--- a/.github/workflows/lint.yaml
+++ b/.github/workflows/lint.yaml
@@ -20,11 +20,14 @@ jobs:
- name: Setup node
uses: actions/setup-node@v3
with:
- node-version: 18.x
+ node-version: 20.x
cache: npm
- name: Install dependencies
- run: npm install
+ run: npm ci
+
+ - name: Build packages
+ run: npm run build
- name: Run lint
- run: npm run lint
\ No newline at end of file
+ run: npm run lint
diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index b513741b..9fa7aa3a 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- node-version: [18, 20]
+ node-version: [20, 22]
steps:
- name: Checkout repository
@@ -28,6 +28,9 @@ jobs:
- name: Install dependencies
run: npm ci
+ - name: Build packages
+ run: npm run build
+
- name: Run tests
run: npm run test
env:
diff --git a/README.md b/README.md
index e157bbac..6f566560 100644
--- a/README.md
+++ b/README.md
@@ -12,24 +12,24 @@ Written in Typescript it is meant as a drop in replacement for the [aleph-js lib
npm install aleph-sdk-ts
```
-- An API reference [on the repository github pages](https://aleph-im.github.io/aleph-sdk-ts/index.html)
-- For guides and use-cases check the [Aleph TS SDK Gitbook](https://aleph-im.gitbook.io/ts-sdk/)
-- Some examples are available in the `/examples` directory.
+- An API reference [on the repository github pages](https://aleph-im.github.io/aleph-sdk-ts/index.html)
+- For guides and use-cases check the [Aleph TS SDK Gitbook](https://aleph-im.gitbook.io/ts-sdk/)
+- Some examples are available in the `/examples` directory.
## Supported chains
This is the list of currently supported Account types. For each of them you can:
-- Retrieve an account from a private key or mnemonic (or generate one on the fly).
-- Sign and send messages on the Aleph Network
-- Some allow you to retrieve an account from a **browser based** wallet (ex: Metamask), or from a **Ledger** wallet.
+- Retrieve an account from a private key or mnemonic (or generate one on the fly).
+- Sign and send messages on the Aleph Network
+- Some allow you to retrieve an account from a **browser based** wallet (ex: Metamask), or from a **Ledger** wallet.
[Previous versions](https://npmjs.com/package/aleph-sdk-ts) of the Typescript SDK allowed you to **encrypt** messages.
-This has been
| Chain | Encryption | Browser Wallet | Ledger |
-|----------------------|------------|--------------------| ------------------ |
+| -------------------- | ---------- | ------------------ | ------------------ |
| Avalanche | :x: | :heavy_check_mark: | :x: |
+| Base | :x: | :heavy_check_mark: | :x: |
| Cosmos | :x: | :heavy_check_mark: | :x: |
| Ethereum | :x: | :heavy_check_mark: | :heavy_check_mark: |
| NULS2 | :x: | :x: | :x: |
@@ -64,6 +64,7 @@ This SDK is tested and works, with the following Node.js versions:
| v16.x | :heavy_check_mark: **Full working support** |
| v18.x | :heavy_multiplication_x: Some feature may not work (see notes) |
| v20.x | :heavy_check_mark: **Full working support** |
+| v22.x | :heavy_check_mark: **Full working support** |
\* Due to changes in OpenSSL in Node v18, some chains helper may not work. If you encounter bugs using Node v18, you might want to consider using the `--openssl-legacy-provider` feature flag while running your project.
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 00000000..72f647d5
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,62 @@
+import { fixupConfigRules } from "@eslint/compat";
+import path from "node:path";
+import { fileURLToPath } from "node:url";
+import js from "@eslint/js";
+import { FlatCompat } from "@eslint/eslintrc";
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const compat = new FlatCompat({
+ baseDirectory: __dirname,
+ recommendedConfig: js.configs.recommended,
+ allConfig: js.configs.all
+});
+
+export default [{
+ ignores: ["**/node_modules/", "**/dist/", "**/docs/"],
+}, ...fixupConfigRules(compat.extends(
+ "eslint:recommended",
+ "plugin:@typescript-eslint/recommended",
+ "plugin:prettier/recommended",
+ "plugin:import/recommended",
+)), {
+ settings: {
+ "import/resolver": {
+ node: {
+ paths: ["packages/**"],
+ extensions: [".ts", ".tsx", ".js", ".jsx", ".json"],
+ },
+ },
+
+ "import/ignore": ["./node_modules", "./dist"],
+ },
+
+ rules: {
+ "@typescript-eslint/no-explicit-any": "off",
+
+ "import/order": ["error", {
+ "newlines-between": "always",
+ groups: [["builtin", "external"], ["internal"]],
+
+ pathGroups: [{
+ pattern: "react",
+ group: "external",
+ position: "before",
+ }, {
+ pattern: "@/**",
+ group: "internal",
+ position: "before",
+ }],
+
+ alphabetize: {
+ order: "asc",
+ caseInsensitive: true,
+ },
+ }],
+ },
+}, {
+ files: ["examples/**/*.{ts,tsx}"],
+ rules: {
+ "import/no-unresolved": "off",
+ },
+}];
\ No newline at end of file
diff --git a/examples/stake-on-me/cli.ts b/examples/stake-on-me/cli.ts
index 3db604d0..64ace568 100644
--- a/examples/stake-on-me/cli.ts
+++ b/examples/stake-on-me/cli.ts
@@ -1,8 +1,8 @@
-import { logo, separator } from './src/logo'
import { askChoices, getNodeList, getRandomNode, keypress } from './src/helpers'
-import { GetAccountFromLedger } from '../../src/accounts/providers/Ledger/ethereum'
-import { ItemType } from '../../src/messages/types'
-import * as post from '../../src/messages/post'
+import { logo, separator } from './src/logo'
+import { AuthenticatedAlephHttpClient } from '../../packages/client/src'
+import { GetAccountFromLedger } from '../../packages/ethereum-ledger/src'
+import { ItemType } from '../../packages/message/src/types'
const main = async () => {
console.log(logo)
@@ -46,9 +46,8 @@ const main = async () => {
console.log(separator)
console.log('Sending a stake message on selected Node. Please check your Ledger to sign the message.')
- const stakeMessage = await post.Publish({
- account,
- APIServer: 'https://api2.aleph.im',
+ const client = new AuthenticatedAlephHttpClient(account)
+ const stakeMessage = await client.createPost({
channel: 'FOUNDATION',
storageEngine: ItemType.inline,
postType: 'corechan-operation',
diff --git a/examples/stake-on-me/src/helpers.ts b/examples/stake-on-me/src/helpers.ts
index b15eb7d9..36caa75a 100644
--- a/examples/stake-on-me/src/helpers.ts
+++ b/examples/stake-on-me/src/helpers.ts
@@ -1,6 +1,7 @@
-import * as readline from 'readline'
import { stdin as input, stdout as output } from 'process'
-import * as aggregate from '../../../src/messages/aggregate'
+import * as readline from 'readline'
+
+import { AlephHttpClient } from '../../../packages/client/src'
type NodeListResponse = {
corechannel: {
@@ -9,10 +10,11 @@ type NodeListResponse = {
}
export const getNodeList = async () => {
- const list: NodeListResponse = await aggregate.Get({
- address: '0xa1B3bb7d2332383D96b7796B908fB7f7F3c2Be10',
- keys: ['corechannel'],
- })
+ const client = new AlephHttpClient()
+ const list: NodeListResponse = await client.fetchAggregate(
+ '0xa1B3bb7d2332383D96b7796B908fB7f7F3c2Be10',
+ 'corechannel',
+ )
return list.corechannel.nodes.filter((node) => node.status === 'active' && !node.locked)
}
diff --git a/examples/toolshed/package-lock.json b/examples/toolshed/package-lock.json
index eebf09d8..da4697ac 100644
--- a/examples/toolshed/package-lock.json
+++ b/examples/toolshed/package-lock.json
@@ -9,6 +9,7 @@
"version": "0.0.0",
"dependencies": {
"@esbuild-plugins/node-globals-polyfill": "^0.1.1",
+ "@metamask/providers": "^17.2.0",
"buffer": "^6.0.3",
"react": "^18.2.0",
"react-dom": "^18.2.0",
@@ -907,6 +908,53 @@
"node": ">=12"
}
},
+ "node_modules/@ethereumjs/common": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz",
+ "integrity": "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==",
+ "dependencies": {
+ "@ethereumjs/util": "^8.1.0",
+ "crc-32": "^1.2.0"
+ }
+ },
+ "node_modules/@ethereumjs/rlp": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz",
+ "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==",
+ "bin": {
+ "rlp": "bin/rlp"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@ethereumjs/tx": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz",
+ "integrity": "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==",
+ "dependencies": {
+ "@ethereumjs/common": "^3.2.0",
+ "@ethereumjs/rlp": "^4.0.1",
+ "@ethereumjs/util": "^8.1.0",
+ "ethereum-cryptography": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@ethereumjs/util": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz",
+ "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==",
+ "dependencies": {
+ "@ethereumjs/rlp": "^4.0.1",
+ "ethereum-cryptography": "^2.0.0",
+ "micro-ftch": "^0.3.1"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/@floating-ui/core": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.1.tgz",
@@ -962,6 +1010,228 @@
"@jridgewell/sourcemap-codec": "1.4.14"
}
},
+ "node_modules/@metamask/json-rpc-engine": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-9.0.3.tgz",
+ "integrity": "sha512-efeRXW7KaL0BJcAeudSGhzu6sD3hMpxx9nl3V+Yemm1bsyc66yVUhYPR+XH+Y6ZvB2p05ywgvd1Ev5PBwFzr/g==",
+ "dependencies": {
+ "@metamask/rpc-errors": "^6.3.1",
+ "@metamask/safe-event-emitter": "^3.0.0",
+ "@metamask/utils": "^9.1.0"
+ },
+ "engines": {
+ "node": "^18.18 || >=20"
+ }
+ },
+ "node_modules/@metamask/json-rpc-middleware-stream": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/@metamask/json-rpc-middleware-stream/-/json-rpc-middleware-stream-8.0.3.tgz",
+ "integrity": "sha512-x0rh4EzzLtkpBi7adrAZ2qSAXBwk4knARZdR1j5YOyXYN7r0AeoTiTgmw7pfrUIF62x2si+WAOMm9R1hWNteGw==",
+ "dependencies": {
+ "@metamask/json-rpc-engine": "^9.0.3",
+ "@metamask/safe-event-emitter": "^3.0.0",
+ "@metamask/utils": "^9.1.0",
+ "readable-stream": "^3.6.2"
+ },
+ "engines": {
+ "node": "^18.18 || >=20"
+ }
+ },
+ "node_modules/@metamask/object-multiplex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@metamask/object-multiplex/-/object-multiplex-2.0.0.tgz",
+ "integrity": "sha512-+ItrieVZie3j2LfYE0QkdW3dsEMfMEp419IGx1zyeLqjRZ14iQUPRO0H6CGgfAAoC0x6k2PfCAGRwJUA9BMrqA==",
+ "dependencies": {
+ "once": "^1.4.0",
+ "readable-stream": "^3.6.2"
+ },
+ "engines": {
+ "node": "^16.20 || ^18.16 || >=20"
+ }
+ },
+ "node_modules/@metamask/providers": {
+ "version": "17.2.0",
+ "resolved": "https://registry.npmjs.org/@metamask/providers/-/providers-17.2.0.tgz",
+ "integrity": "sha512-99EIsZo1vIuA7Wc9ruWOd9LGr0GCqEY9lR0/hcjasUZH31MGUe0H/0NdMcz2tRXhsYRvt6M+2lsM4dDG1+atRw==",
+ "dependencies": {
+ "@metamask/json-rpc-engine": "^9.0.1",
+ "@metamask/json-rpc-middleware-stream": "^8.0.1",
+ "@metamask/object-multiplex": "^2.0.0",
+ "@metamask/rpc-errors": "^6.3.1",
+ "@metamask/safe-event-emitter": "^3.1.1",
+ "@metamask/utils": "^9.0.0",
+ "detect-browser": "^5.2.0",
+ "extension-port-stream": "^4.1.0",
+ "fast-deep-equal": "^3.1.3",
+ "is-stream": "^2.0.0",
+ "readable-stream": "^3.6.2"
+ },
+ "engines": {
+ "node": "^18.18 || >=20"
+ },
+ "peerDependencies": {
+ "webextension-polyfill": "^0.10.0 || ^0.11.0 || ^0.12.0"
+ }
+ },
+ "node_modules/@metamask/rpc-errors": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/@metamask/rpc-errors/-/rpc-errors-6.3.1.tgz",
+ "integrity": "sha512-ugDY7cKjF4/yH5LtBaOIKHw/AiGGSAmzptAUEiAEGr/78LwuzcXAxmzEQfSfMIfI+f9Djr8cttq1pRJJKfTuCg==",
+ "dependencies": {
+ "@metamask/utils": "^9.0.0",
+ "fast-safe-stringify": "^2.0.6"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@metamask/safe-event-emitter": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.1.tgz",
+ "integrity": "sha512-ihb3B0T/wJm1eUuArYP4lCTSEoZsClHhuWyfo/kMX3m/odpqNcPfsz5O2A3NT7dXCAgWPGDQGPqygCpgeniKMw==",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@metamask/superstruct": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@metamask/superstruct/-/superstruct-3.1.0.tgz",
+ "integrity": "sha512-N08M56HdOgBfRKkrgCMZvQppkZGcArEop3kixNEtVbJKm6P9Cfg0YkI6X0s1g78sNrj2fWUwvJADdZuzJgFttA==",
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@metamask/utils": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-9.2.1.tgz",
+ "integrity": "sha512-/u663aUaB6+Xe75i3Mt/1cCljm41HDYIsna5oBrwGvgkY2zH7/9k9Zjd706cxoAbxN7QgLSVAReUiGnuxCuXrQ==",
+ "dependencies": {
+ "@ethereumjs/tx": "^4.2.0",
+ "@metamask/superstruct": "^3.1.0",
+ "@noble/hashes": "^1.3.1",
+ "@scure/base": "^1.1.3",
+ "@types/debug": "^4.1.7",
+ "debug": "^4.3.4",
+ "pony-cause": "^2.1.10",
+ "semver": "^7.5.4",
+ "uuid": "^9.0.1"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@metamask/utils/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@noble/curves": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz",
+ "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==",
+ "dependencies": {
+ "@noble/hashes": "1.4.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@noble/curves/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@noble/hashes": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz",
+ "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==",
+ "engines": {
+ "node": "^14.21.3 || >=16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/base": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz",
+ "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==",
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip32": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz",
+ "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==",
+ "dependencies": {
+ "@noble/curves": "~1.4.0",
+ "@noble/hashes": "~1.4.0",
+ "@scure/base": "~1.1.6"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip32/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip39": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz",
+ "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==",
+ "dependencies": {
+ "@noble/hashes": "~1.4.0",
+ "@scure/base": "~1.1.6"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@scure/bip39/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@types/debug": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
+ "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
+ "dependencies": {
+ "@types/ms": "*"
+ }
+ },
+ "node_modules/@types/ms": {
+ "version": "0.7.34",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
+ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
+ },
"node_modules/@types/node": {
"version": "18.13.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz",
@@ -1306,6 +1576,17 @@
"node": ">=10"
}
},
+ "node_modules/crc-32": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
+ "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+ "bin": {
+ "crc32": "bin/crc32.njs"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
"node_modules/create-ecdh": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
@@ -1402,6 +1683,11 @@
"minimalistic-assert": "^1.0.0"
}
},
+ "node_modules/detect-browser": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz",
+ "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w=="
+ },
"node_modules/diffie-hellman": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
@@ -1835,6 +2121,28 @@
"node": ">=0.8.0"
}
},
+ "node_modules/ethereum-cryptography": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz",
+ "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==",
+ "dependencies": {
+ "@noble/curves": "1.4.2",
+ "@noble/hashes": "1.4.0",
+ "@scure/bip32": "1.4.0",
+ "@scure/bip39": "1.3.0"
+ }
+ },
+ "node_modules/ethereum-cryptography/node_modules/@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
"node_modules/evp_bytestokey": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
@@ -1845,6 +2153,30 @@
"safe-buffer": "^5.1.1"
}
},
+ "node_modules/extension-port-stream": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/extension-port-stream/-/extension-port-stream-4.2.0.tgz",
+ "integrity": "sha512-i5IgiPVMVrHN+Zx8PRjvFsOw8L1A3sboVwPZghDjW9Yp1BMmBDE6mCcTNu4xMXPYduBOwI3CBK7wd72LcOyD6g==",
+ "dependencies": {
+ "readable-stream": "^3.6.2 || ^4.4.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "webextension-polyfill": "^0.10.0 || ^0.11.0 || ^0.12.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "node_modules/fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
+ },
"node_modules/find-root": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
@@ -1984,8 +2316,7 @@
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/is-arrayish": {
"version": "0.2.1",
@@ -2003,6 +2334,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -2087,6 +2429,11 @@
"resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
},
+ "node_modules/micro-ftch": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz",
+ "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg=="
+ },
"node_modules/miller-rabin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
@@ -2148,6 +2495,14 @@
"node": ">=0.10.0"
}
},
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -2223,6 +2578,14 @@
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
},
+ "node_modules/pony-cause": {
+ "version": "2.1.11",
+ "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.11.tgz",
+ "integrity": "sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg==",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/postcss": {
"version": "8.4.21",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
@@ -2369,10 +2732,9 @@
}
},
"node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -2440,7 +2802,6 @@
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -2519,7 +2880,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
"dependencies": {
"safe-buffer": "~5.2.0"
}
@@ -2613,8 +2973,19 @@
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
},
"node_modules/vite": {
"version": "3.2.5",
@@ -2734,6 +3105,17 @@
"esbuild-windows-arm64": "0.15.18"
}
},
+ "node_modules/webextension-polyfill": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.12.0.tgz",
+ "integrity": "sha512-97TBmpoWJEE+3nFBQ4VocyCdLKfw54rFaJ6EVQYLBCXqCIpLSZkwGgASpv4oPt9gdKCJ80RJlcmNzNn008Ag6Q==",
+ "peer": true
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -3296,6 +3678,41 @@
"optional": true,
"peer": true
},
+ "@ethereumjs/common": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz",
+ "integrity": "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==",
+ "requires": {
+ "@ethereumjs/util": "^8.1.0",
+ "crc-32": "^1.2.0"
+ }
+ },
+ "@ethereumjs/rlp": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz",
+ "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw=="
+ },
+ "@ethereumjs/tx": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz",
+ "integrity": "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==",
+ "requires": {
+ "@ethereumjs/common": "^3.2.0",
+ "@ethereumjs/rlp": "^4.0.1",
+ "@ethereumjs/util": "^8.1.0",
+ "ethereum-cryptography": "^2.0.0"
+ }
+ },
+ "@ethereumjs/util": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz",
+ "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==",
+ "requires": {
+ "@ethereumjs/rlp": "^4.0.1",
+ "ethereum-cryptography": "^2.0.0",
+ "micro-ftch": "^0.3.1"
+ }
+ },
"@floating-ui/core": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.1.tgz",
@@ -3342,6 +3759,167 @@
"@jridgewell/sourcemap-codec": "1.4.14"
}
},
+ "@metamask/json-rpc-engine": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/@metamask/json-rpc-engine/-/json-rpc-engine-9.0.3.tgz",
+ "integrity": "sha512-efeRXW7KaL0BJcAeudSGhzu6sD3hMpxx9nl3V+Yemm1bsyc66yVUhYPR+XH+Y6ZvB2p05ywgvd1Ev5PBwFzr/g==",
+ "requires": {
+ "@metamask/rpc-errors": "^6.3.1",
+ "@metamask/safe-event-emitter": "^3.0.0",
+ "@metamask/utils": "^9.1.0"
+ }
+ },
+ "@metamask/json-rpc-middleware-stream": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/@metamask/json-rpc-middleware-stream/-/json-rpc-middleware-stream-8.0.3.tgz",
+ "integrity": "sha512-x0rh4EzzLtkpBi7adrAZ2qSAXBwk4knARZdR1j5YOyXYN7r0AeoTiTgmw7pfrUIF62x2si+WAOMm9R1hWNteGw==",
+ "requires": {
+ "@metamask/json-rpc-engine": "^9.0.3",
+ "@metamask/safe-event-emitter": "^3.0.0",
+ "@metamask/utils": "^9.1.0",
+ "readable-stream": "^3.6.2"
+ }
+ },
+ "@metamask/object-multiplex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@metamask/object-multiplex/-/object-multiplex-2.0.0.tgz",
+ "integrity": "sha512-+ItrieVZie3j2LfYE0QkdW3dsEMfMEp419IGx1zyeLqjRZ14iQUPRO0H6CGgfAAoC0x6k2PfCAGRwJUA9BMrqA==",
+ "requires": {
+ "once": "^1.4.0",
+ "readable-stream": "^3.6.2"
+ }
+ },
+ "@metamask/providers": {
+ "version": "17.2.0",
+ "resolved": "https://registry.npmjs.org/@metamask/providers/-/providers-17.2.0.tgz",
+ "integrity": "sha512-99EIsZo1vIuA7Wc9ruWOd9LGr0GCqEY9lR0/hcjasUZH31MGUe0H/0NdMcz2tRXhsYRvt6M+2lsM4dDG1+atRw==",
+ "requires": {
+ "@metamask/json-rpc-engine": "^9.0.1",
+ "@metamask/json-rpc-middleware-stream": "^8.0.1",
+ "@metamask/object-multiplex": "^2.0.0",
+ "@metamask/rpc-errors": "^6.3.1",
+ "@metamask/safe-event-emitter": "^3.1.1",
+ "@metamask/utils": "^9.0.0",
+ "detect-browser": "^5.2.0",
+ "extension-port-stream": "^4.1.0",
+ "fast-deep-equal": "^3.1.3",
+ "is-stream": "^2.0.0",
+ "readable-stream": "^3.6.2"
+ }
+ },
+ "@metamask/rpc-errors": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/@metamask/rpc-errors/-/rpc-errors-6.3.1.tgz",
+ "integrity": "sha512-ugDY7cKjF4/yH5LtBaOIKHw/AiGGSAmzptAUEiAEGr/78LwuzcXAxmzEQfSfMIfI+f9Djr8cttq1pRJJKfTuCg==",
+ "requires": {
+ "@metamask/utils": "^9.0.0",
+ "fast-safe-stringify": "^2.0.6"
+ }
+ },
+ "@metamask/safe-event-emitter": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-3.1.1.tgz",
+ "integrity": "sha512-ihb3B0T/wJm1eUuArYP4lCTSEoZsClHhuWyfo/kMX3m/odpqNcPfsz5O2A3NT7dXCAgWPGDQGPqygCpgeniKMw=="
+ },
+ "@metamask/superstruct": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@metamask/superstruct/-/superstruct-3.1.0.tgz",
+ "integrity": "sha512-N08M56HdOgBfRKkrgCMZvQppkZGcArEop3kixNEtVbJKm6P9Cfg0YkI6X0s1g78sNrj2fWUwvJADdZuzJgFttA=="
+ },
+ "@metamask/utils": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-9.2.1.tgz",
+ "integrity": "sha512-/u663aUaB6+Xe75i3Mt/1cCljm41HDYIsna5oBrwGvgkY2zH7/9k9Zjd706cxoAbxN7QgLSVAReUiGnuxCuXrQ==",
+ "requires": {
+ "@ethereumjs/tx": "^4.2.0",
+ "@metamask/superstruct": "^3.1.0",
+ "@noble/hashes": "^1.3.1",
+ "@scure/base": "^1.1.3",
+ "@types/debug": "^4.1.7",
+ "debug": "^4.3.4",
+ "pony-cause": "^2.1.10",
+ "semver": "^7.5.4",
+ "uuid": "^9.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A=="
+ }
+ }
+ },
+ "@noble/curves": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz",
+ "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==",
+ "requires": {
+ "@noble/hashes": "1.4.0"
+ },
+ "dependencies": {
+ "@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="
+ }
+ }
+ },
+ "@noble/hashes": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz",
+ "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA=="
+ },
+ "@scure/base": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz",
+ "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg=="
+ },
+ "@scure/bip32": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz",
+ "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==",
+ "requires": {
+ "@noble/curves": "~1.4.0",
+ "@noble/hashes": "~1.4.0",
+ "@scure/base": "~1.1.6"
+ },
+ "dependencies": {
+ "@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="
+ }
+ }
+ },
+ "@scure/bip39": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz",
+ "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==",
+ "requires": {
+ "@noble/hashes": "~1.4.0",
+ "@scure/base": "~1.1.6"
+ },
+ "dependencies": {
+ "@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="
+ }
+ }
+ },
+ "@types/debug": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
+ "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
+ "requires": {
+ "@types/ms": "*"
+ }
+ },
+ "@types/ms": {
+ "version": "0.7.34",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
+ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
+ },
"@types/node": {
"version": "18.13.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz",
@@ -3612,6 +4190,11 @@
"yaml": "^1.10.0"
}
},
+ "crc-32": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
+ "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="
+ },
"create-ecdh": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
@@ -3699,6 +4282,11 @@
"minimalistic-assert": "^1.0.0"
}
},
+ "detect-browser": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz",
+ "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w=="
+ },
"diffie-hellman": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
@@ -3943,6 +4531,24 @@
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
},
+ "ethereum-cryptography": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz",
+ "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==",
+ "requires": {
+ "@noble/curves": "1.4.2",
+ "@noble/hashes": "1.4.0",
+ "@scure/bip32": "1.4.0",
+ "@scure/bip39": "1.3.0"
+ },
+ "dependencies": {
+ "@noble/hashes": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
+ "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg=="
+ }
+ }
+ },
"evp_bytestokey": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
@@ -3953,6 +4559,24 @@
"safe-buffer": "^5.1.1"
}
},
+ "extension-port-stream": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/extension-port-stream/-/extension-port-stream-4.2.0.tgz",
+ "integrity": "sha512-i5IgiPVMVrHN+Zx8PRjvFsOw8L1A3sboVwPZghDjW9Yp1BMmBDE6mCcTNu4xMXPYduBOwI3CBK7wd72LcOyD6g==",
+ "requires": {
+ "readable-stream": "^3.6.2 || ^4.4.2"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
+ },
"find-root": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
@@ -4050,8 +4674,7 @@
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"is-arrayish": {
"version": "0.2.1",
@@ -4066,6 +4689,11 @@
"has": "^1.0.3"
}
},
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
+ },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -4132,6 +4760,11 @@
"resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
},
+ "micro-ftch": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz",
+ "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg=="
+ },
"miller-rabin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
@@ -4183,6 +4816,14 @@
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
},
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
"parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -4243,6 +4884,11 @@
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
},
+ "pony-cause": {
+ "version": "2.1.11",
+ "resolved": "https://registry.npmjs.org/pony-cause/-/pony-cause-2.1.11.tgz",
+ "integrity": "sha512-M7LhCsdNbNgiLYiP4WjsfLUuFmCfnjdF6jKe2R9NKl4WFN+HZPGHJZ9lnLP7f9ZnKe3U9nuWD0szirmj+migUg=="
+ },
"postcss": {
"version": "8.4.21",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
@@ -4361,10 +5007,9 @@
}
},
"readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -4413,8 +5058,7 @@
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"safer-buffer": {
"version": "2.1.2",
@@ -4466,7 +5110,6 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
"requires": {
"safe-buffer": "~5.2.0"
}
@@ -4518,8 +5161,12 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="
},
"vite": {
"version": "3.2.5",
@@ -4580,6 +5227,17 @@
}
}
},
+ "webextension-polyfill": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/webextension-polyfill/-/webextension-polyfill-0.12.0.tgz",
+ "integrity": "sha512-97TBmpoWJEE+3nFBQ4VocyCdLKfw54rFaJ6EVQYLBCXqCIpLSZkwGgASpv4oPt9gdKCJ80RJlcmNzNn008Ag6Q==",
+ "peer": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
diff --git a/examples/toolshed/package.json b/examples/toolshed/package.json
index 749a53e3..a87c9666 100644
--- a/examples/toolshed/package.json
+++ b/examples/toolshed/package.json
@@ -10,6 +10,7 @@
},
"dependencies": {
"@esbuild-plugins/node-globals-polyfill": "^0.1.1",
+ "@metamask/providers": "^17.2.0",
"buffer": "^6.0.3",
"react": "^18.2.0",
"react-dom": "^18.2.0",
diff --git a/examples/toolshed/readme.md b/examples/toolshed/readme.md
index 71d87b71..3648e1c3 100644
--- a/examples/toolshed/readme.md
+++ b/examples/toolshed/readme.md
@@ -8,7 +8,7 @@ You must install all the dependencies from the typescript sdk at the root of the
```shell
# assumes you are in the root of the project
-npm install && npm build
+npm install && npm run build
# now we can go to the toolshed example
cd examples/toolshed
diff --git a/examples/toolshed/src/App.tsx b/examples/toolshed/src/App.tsx
index 40b2c235..be36b86e 100644
--- a/examples/toolshed/src/App.tsx
+++ b/examples/toolshed/src/App.tsx
@@ -1,25 +1,40 @@
-import { useReducer } from 'react'
+import { useCallback, useReducer } from 'react'
-import { initState, reducer } from './reducer'
-
-import SelectProvider from './components/SelectProvider'
+import BalanceConfig from './components/BalanceConfig'
+import HardwareConfig from './components/HardwareConfig'
import KeypairConfig from './components/KeypairConfig'
-import WalletConfig from './components/WalletConfig'
import MessageConfig from './components/MessageConfig'
+import SelectProvider from './components/SelectProvider'
+import WalletConfig from './components/WalletConfig'
import WebSocket from './components/WebSocket'
-import HardwareConfig from './components/HardwareConfig'
+import { HardwareChains, KeypairChains, WalletChains } from './model/chains'
+import { initState, reducer } from './reducer'
import { ECIESAccount } from '../../../packages/account/src'
+import { ChainMetadata, EVMAccount } from '../../../packages/evm/src'
function App() {
const [state, dispatch] = useReducer(reducer, initState)
+ const connectedChain = useCallback(
+ () =>
+ (state?.account as EVMAccount)?.selectedRpcId !== undefined
+ ? `${ChainMetadata[(state.account as EVMAccount).selectedRpcId!].chainName}`
+ : undefined,
+ [state?.account],
+ )
const connection = () => {
if (state.account) {
return (
+ {connectedChain() ? (
+ <>
+
Connected to:
+
{connectedChain()}
+ >
+ ) : null}
Your address is:
{state.account.address}
- {state.account instanceof ECIESAccount && (
+ {state.account instanceof ECIESAccount && state.account.publicKey && (
<>
Your public key is:
{state.account.publicKey}
@@ -65,7 +80,16 @@ function App() {
{state.account &&
}
-
+ {state.account &&
+ [
+ HardwareChains.Ethereum,
+ KeypairChains.Ethereum,
+ KeypairChains.Avalanche,
+ KeypairChains.Base,
+ WalletChains.Ethereum,
+ WalletChains.Avalanche,
+ WalletChains.Base,
+ ].includes(state.selectedChain) &&
}
{
+ if (!evmAccount.address) setBalance(-2)
+ else
+ evmAccount
+ .getALEPHBalance()
+ .then(Number)
+ .then(setBalance)
+ .catch(async (err) => {
+ console.error(err)
+ if (err.message.startsWith('No token address found')) setBalance(-2)
+ else if (err.message.startsWith('underlying network changed')) {
+ const rpcId = evmAccount.selectedRpcId!
+ const _account = [RpcId.AVAX, RpcId.AVAX_TESTNET].includes(rpcId)
+ ? avalanche
+ : [RpcId.BASE, RpcId.BASE_TESTNET].includes(rpcId)
+ ? base
+ : ethereum
+ dispatch({
+ type: Actions.SET_ACCOUNT,
+ payload: await _account.getAccountFromProvider(window.ethereum as any, rpcId),
+ })
+ } else {
+ setBalance(-3)
+ console.error(err)
+ }
+ })
+ }, [evmAccount])
+
+ return (
+
+
+ ALEPH Balance:{' '}
+ {balance >= 0
+ ? balance.toString()
+ : balance === -1
+ ? 'Loading...'
+ : balance === -2
+ ? 'No token address on this chain'
+ : 'Error'}
+
+
+ )
+}
+
+export default BalanceConfig
diff --git a/examples/toolshed/src/components/KeypairConfig.tsx b/examples/toolshed/src/components/KeypairConfig.tsx
index ef2e69ee..5bae6787 100644
--- a/examples/toolshed/src/components/KeypairConfig.tsx
+++ b/examples/toolshed/src/components/KeypairConfig.tsx
@@ -1,9 +1,11 @@
import { useState } from 'react'
-import * as ethereum from '../../../../packages/ethereum/src'
+
import * as avalanche from '../../../../packages/avalanche/src'
-import * as substrate from '../../../../packages/substrate/src'
-import * as solana from '../../../../packages/solana/src'
+import * as base from '../../../../packages/base/src'
+import * as ethereum from '../../../../packages/ethereum/src'
import * as nuls2 from '../../../../packages/nuls2/src'
+import * as solana from '../../../../packages/solana/src'
+import * as substrate from '../../../../packages/substrate/src'
import { KeypairChains } from '../model/chains'
import { dispatchAndConsume } from '../model/componentProps'
import { Actions } from '../reducer'
@@ -12,20 +14,22 @@ function KeypairConfig({ state, dispatch }: dispatchAndConsume) {
const [mnemonicOrPk, setMnemonicOrPk] = useState('')
const _account = (() =>
- state.selectedChain === KeypairChains.Avalanche
- ? avalanche
- : state.selectedChain === KeypairChains.Ethereum
- ? ethereum
- : state.selectedChain === KeypairChains.NULS2
- ? nuls2
- : state.selectedChain === KeypairChains.Polkadot
- ? substrate
- : state.selectedChain === KeypairChains.Solana
- ? solana
- : null)()
+ state.selectedChain === KeypairChains.Ethereum
+ ? ethereum
+ : state.selectedChain === KeypairChains.Avalanche
+ ? avalanche
+ : state.selectedChain === KeypairChains.Base
+ ? base
+ : state.selectedChain === KeypairChains.Solana
+ ? solana
+ : state.selectedChain === KeypairChains.NULS2
+ ? nuls2
+ : state.selectedChain === KeypairChains.Polkadot
+ ? substrate
+ : undefined)()
const getKeypair = async () => {
- if (_account === null) return console.error('Internal error')
+ if (!_account) return console.error('Internal error')
const { account } = await _account.newAccount()
dispatch({
diff --git a/examples/toolshed/src/components/MessageConfig.tsx b/examples/toolshed/src/components/MessageConfig.tsx
index d8de7409..25950965 100644
--- a/examples/toolshed/src/components/MessageConfig.tsx
+++ b/examples/toolshed/src/components/MessageConfig.tsx
@@ -1,13 +1,15 @@
import { useState } from 'react'
+import { Account } from '../../../../packages/account/src'
+import { AuthenticatedAlephHttpClient } from '../../../../packages/client/src'
+import { ItemType } from '../../../../packages/message/src'
import { consumeProps } from '../model/componentProps'
-import { ItemType, PostMessageClient } from '../../../../packages/message'
function MessageConfig({ state }: consumeProps) {
const [messageHash, setMessageHash]: [string | null, any] = useState(null)
const [isSending, setIsSending] = useState(false)
const [messageContent, setMessageContent] = useState('Did the quick brown fox jump over the lazy dog?!')
- const postClient = new PostMessageClient()
+ const client = new AuthenticatedAlephHttpClient(state.account as Account)
const handleChange = (e: any) => {
setMessageContent(e.target.value)
@@ -19,10 +21,9 @@ function MessageConfig({ state }: consumeProps) {
if (!state.account) return alert('No account selected')
- const message = await postClient.send({
+ const message = await client.createPost({
channel: 'Typescript-SDK-Toolshed',
storageEngine: ItemType.inline,
- account: state.account,
postType: 'Toolshed',
content: messageContent,
})
diff --git a/examples/toolshed/src/components/SelectProvider.tsx b/examples/toolshed/src/components/SelectProvider.tsx
index 3cee5597..6fd87a14 100644
--- a/examples/toolshed/src/components/SelectProvider.tsx
+++ b/examples/toolshed/src/components/SelectProvider.tsx
@@ -1,4 +1,5 @@
-import Select, { SingleValue } from 'react-select'
+import Select, { type SingleValue } from 'react-select'
+
import { HardwareChains, KeypairChains, WalletChains } from '../model/chains'
import { dispatchProps } from '../model/componentProps'
import { Actions } from '../reducer'
@@ -10,19 +11,20 @@ type Option = {
}
export const availableKeypairs: Option[] = [
+ { label: 'Ethereum', value: KeypairChains.Ethereum },
{ label: 'Avalanche', value: KeypairChains.Avalanche },
+ { label: 'Base', value: KeypairChains.Base },
+ { label: 'Solana', value: KeypairChains.Solana },
+ { label: 'Tezos', value: KeypairChains.Tezos },
{ label: 'Cosmos', value: 'CSDK_KP' },
- { label: 'Ethereum', value: KeypairChains.Ethereum },
{ label: 'NULS2', value: KeypairChains.NULS2 },
{ label: 'Polkadot/Substrate', value: KeypairChains.Polkadot },
- { label: 'Solana', value: KeypairChains.Solana },
- { label: 'Tezos', value: KeypairChains.Tezos },
]
export const availableWallets: Option[] = [
- { label: 'PolkaDot (via Polka.js)', value: WalletChains.Substrate },
- { label: 'Ethereum (via Metamask)', value: WalletChains.Ethereum },
+ { label: 'EVM (via Metamask)', value: WalletChains.Ethereum },
{ label: 'Solana (via Phantom)', value: WalletChains.Solana },
+ { label: 'PolkaDot (via Polka.js)', value: WalletChains.Substrate },
]
export const availableHardware: Option[] = [{ label: 'Ethereum (via Ledger)', value: HardwareChains.Ethereum }]
diff --git a/examples/toolshed/src/components/WalletConfig.tsx b/examples/toolshed/src/components/WalletConfig.tsx
index cb21020a..65552aee 100644
--- a/examples/toolshed/src/components/WalletConfig.tsx
+++ b/examples/toolshed/src/components/WalletConfig.tsx
@@ -1,13 +1,15 @@
-import { WalletChains } from '../model/chains'
-import { dispatchAndConsume } from '../model/componentProps'
-import { Actions } from '../reducer'
-import Select, { SingleValue } from 'react-select'
-import { useState } from 'react'
-import { RpcId } from '../../../../packages/evm'
+import { useCallback, useState } from 'react'
+import Select, { type SingleValue } from 'react-select'
+
import * as avalanche from '../../../../packages/avalanche/src'
+import * as base from '../../../../packages/base/src'
import * as ethereum from '../../../../packages/ethereum/src'
-import * as substrate from '../../../../packages/substrate/src'
+import { RpcId } from '../../../../packages/evm/src'
import * as solana from '../../../../packages/solana/src'
+import * as substrate from '../../../../packages/substrate/src'
+import { WalletChains } from '../model/chains'
+import { dispatchAndConsume } from '../model/componentProps'
+import { Actions } from '../reducer'
type Option = {
readonly label: string
@@ -18,34 +20,35 @@ type Option = {
const availableChains: Option[] = [
{ label: 'Ethereum Mainnet', value: RpcId.ETH },
{ label: 'Ethereum Mainnet (FLASHBOT)', value: RpcId.ETH_FLASHBOTS },
+ { label: 'Ethereum Sepolia (Testnet)', value: RpcId.ETH_SEPOLIA },
{ label: 'Avalanche Mainnet', value: RpcId.AVAX },
+ { label: 'Avalanche Fuji (Testnet)', value: RpcId.AVAX_TESTNET },
+ { label: 'Base Mainnet', value: RpcId.BASE },
+ { label: 'Base Sepolia (Testnet)', value: RpcId.BASE_TESTNET },
{ label: 'Polygon Mainnet', value: RpcId.POLYGON },
{ label: 'BSC Mainnet', value: RpcId.BSC },
]
-function WalletConfig({ dispatch, state }: dispatchAndConsume) {
- const [customEndpoint, setCustomEndpoint] = useState(availableChains[0].value)
+function WalletConfig({ state, dispatch }: dispatchAndConsume) {
+ const [rpcId, setRpcId] = useState(availableChains[0].value)
+
const getAccountClass = () =>
- state.selectedChain === WalletChains.Avalanche
- ? [avalanche, window.ethereum]
+ state.selectedChain === WalletChains.Solana
+ ? [solana, window.phantom?.solana]
: state.selectedChain === WalletChains.Substrate
? [substrate, null]
- : state.selectedChain === WalletChains.Ethereum
- ? [ethereum, window.ethereum]
- : state.selectedChain === WalletChains.Solana
- ? [solana, window.phantom?.solana]
- : [null, null]
+ : [RpcId.AVAX, RpcId.AVAX_TESTNET].includes(rpcId)
+ ? [avalanche, window.ethereum]
+ : [RpcId.BASE, RpcId.BASE_TESTNET].includes(rpcId)
+ ? [base, window.ethereum]
+ : [ethereum, window.ethereum]
- const connectToMetamask = async () => {
+ const connectToMetamask = useCallback(async () => {
const [_account, provider] = getAccountClass()
-
if (_account === null) return
try {
- const account =
- state.selectedChain === WalletChains.Ethereum
- ? await _account.getAccountFromProvider(provider, customEndpoint)
- : await _account.getAccountFromProvider(provider)
+ const account = await _account.getAccountFromProvider(provider, rpcId)
dispatch({
type: Actions.SET_ACCOUNT,
payload: account,
@@ -53,10 +56,10 @@ function WalletConfig({ dispatch, state }: dispatchAndConsume) {
} catch (err) {
alert(err)
}
- }
+ }, [rpcId])
const handleChange = (x: SingleValue