@windstack/evm 0.3.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,33 +1,42 @@
1
1
  # @windstack/evm
2
2
 
3
- EVM provider client helpers for Wisp Wallet-compatible dApps.
4
-
5
- The client works with EIP-1193 providers and uses EIP-6963 discovery when available. It prefers a provider with `rdns: "com.wisp.wallet"`, then falls back to injected providers.
6
-
7
- ## Install
3
+ Small EIP-1193 client with EIP-6963 discovery for browser wallets.
8
4
 
9
5
  ```bash
10
6
  npm install @windstack/core @windstack/evm
11
7
  ```
12
8
 
13
- ## Usage
14
-
15
9
  ```ts
16
- import { createEVMClient } from '@windstack/evm';
10
+ import { createEVMClient } from "@windstack/evm";
17
11
 
18
12
  const client = await createEVMClient();
19
-
20
- const accounts = await client.requestAccounts();
13
+ const accounts = await client.connect();
21
14
  const chainId = await client.getChainId();
22
15
 
23
- await client.switchChain('0x1');
16
+ client.on("accountsChanged", (nextAccounts) => {
17
+ // Update application state.
18
+ });
19
+ ```
20
+
21
+ `connect()` calls `eth_requestAccounts`. `getAccounts()` calls the silent `eth_accounts` method.
22
+
23
+ ## Chain requests
24
+
25
+ ```ts
26
+ await client.switchChain("0x1a50");
27
+
28
+ await client.addChain({
29
+ chainId: "0x1a50",
30
+ chainName: "VEX EVM",
31
+ nativeCurrency: { name: "Vexanium", symbol: "VEX", decimals: 18 },
32
+ rpcUrls: ["https://rpc.example"],
33
+ });
24
34
  ```
25
35
 
26
- ## Notes
36
+ Chain IDs must be canonical `0x`-prefixed hexadecimal values. Chain metadata URLs must use HTTPS. Always verify an RPC endpoint's `eth_chainId` response before presenting it to users.
27
37
 
28
- - EVM uses `window.ethereum` and standard EVM JSON-RPC methods.
29
- - This package is independent from Vexanium, VSR, and WharfKit.
38
+ EIP-6963 announcements are retained for the lifetime of the page, as required by the specification. `window.ethereum` is only used as a fallback when no announced provider is available.
30
39
 
31
40
  ## License
32
41
 
33
- MIT © 2026 PT WIND KRIPTOGRAFI TEKNOLOGI
42
+ MIT, PT WIND KRIPTOGRAFI TEKNOLOGI.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,SAAS,EAAE,gBAAgB,EAAuB,MAAM,YAAY,CAAC;AAEpG,wBAAsB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC,CAoDxF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAGV,SAAS,EACT,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AA6CpB,wBAAsB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC,CAsDxF"}
package/dist/client.js CHANGED
@@ -1,6 +1,47 @@
1
- import { WISP_ERROR_CODES, WispProviderError, normalizeProviderError } from "@windstack/core";
1
+ import { WISP_ERROR_CODES, WispProviderError, invalidParams, normalizeProviderError, } from "@windstack/core";
2
2
  import { EVM_METHODS } from "./constants.js";
3
3
  import { getEVMProvider, getInjectedEVMProvider } from "./discovery.js";
4
+ const HEX_CHAIN_ID_PATTERN = /^0x(?:0|[1-9a-f][0-9a-f]*)$/i;
5
+ function assertHexChainId(chainId) {
6
+ if (typeof chainId !== "string" || !HEX_CHAIN_ID_PATTERN.test(chainId)) {
7
+ throw invalidParams("EVM chainId must be a canonical 0x-prefixed hexadecimal integer", { chainId });
8
+ }
9
+ }
10
+ function assertSecureUrls(values, field) {
11
+ if (!values)
12
+ return;
13
+ if (!Array.isArray(values) || values.length === 0)
14
+ throw invalidParams(`${field} must be a non-empty array`);
15
+ for (const value of values) {
16
+ try {
17
+ const url = new URL(value);
18
+ if (url.protocol !== "https:" || url.username || url.password) {
19
+ throw new Error("Unsupported URL");
20
+ }
21
+ }
22
+ catch {
23
+ throw invalidParams(`${field} must contain valid HTTPS URLs`, { value });
24
+ }
25
+ }
26
+ }
27
+ function assertAddChainParams(params) {
28
+ if (typeof params !== "object" || params === null)
29
+ throw invalidParams("Chain parameters are required");
30
+ assertHexChainId(params.chainId);
31
+ assertSecureUrls(params.rpcUrls, "rpcUrls");
32
+ assertSecureUrls(params.blockExplorerUrls, "blockExplorerUrls");
33
+ assertSecureUrls(params.iconUrls, "iconUrls");
34
+ if (params.nativeCurrency && !Number.isInteger(params.nativeCurrency.decimals)) {
35
+ throw invalidParams("nativeCurrency.decimals must be a non-negative integer");
36
+ }
37
+ if (params.nativeCurrency && params.nativeCurrency.decimals < 0) {
38
+ throw invalidParams("nativeCurrency.decimals must be a non-negative integer");
39
+ }
40
+ if (params.nativeCurrency && (!params.nativeCurrency.name?.trim() ||
41
+ !params.nativeCurrency.symbol?.trim())) {
42
+ throw invalidParams("nativeCurrency name and symbol are required");
43
+ }
44
+ }
4
45
  export async function createEVMClient(options = {}) {
5
46
  let provider = options.provider ?? await getEVMProvider(options.discoveryTimeoutMs);
6
47
  const requireProvider = () => {
@@ -36,14 +77,16 @@ export async function createEVMClient(options = {}) {
36
77
  getChainId() {
37
78
  return request({ method: EVM_METHODS.GET_CHAIN_ID });
38
79
  },
39
- switchChain(chainId) {
40
- return request({ method: EVM_METHODS.SWITCH_CHAIN, params: [{ chainId }] });
80
+ async switchChain(chainId) {
81
+ assertHexChainId(chainId);
82
+ return await request({ method: EVM_METHODS.SWITCH_CHAIN, params: [{ chainId }] });
41
83
  },
42
- addChain(params) {
43
- return request({ method: EVM_METHODS.ADD_CHAIN, params: [params] });
84
+ async addChain(params) {
85
+ assertAddChainParams(params);
86
+ return await request({ method: EVM_METHODS.ADD_CHAIN, params: [params] });
44
87
  },
45
88
  on(event, handler) {
46
- requireProvider().on?.(event, handler);
89
+ requireProvider().on(event, handler);
47
90
  },
48
91
  off(event, handler) {
49
92
  const current = requireProvider();
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE9F,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAGxE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAA4B,EAAE;IAClE,IAAI,QAAQ,GAA2B,OAAO,CAAC,QAAQ,IAAI,MAAM,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE5G,MAAM,eAAe,GAAG,GAAoB,EAAE;QAC5C,QAAQ,GAAG,QAAQ,IAAI,sBAAsB,EAAE,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,iBAAiB,CAAC,gBAAgB,CAAC,cAAc,EAAE,8BAA8B,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,EAAwC,IAA+B,EAAoB,EAAE;QAChH,IAAI,CAAC;YACH,OAAO,MAAM,eAAe,EAAE,CAAC,OAAO,CAAmB,IAAI,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,WAAW;YACT,OAAO,OAAO,CAAC,QAAQ,EAAE,OAAO,IAAI,sBAAsB,EAAE,EAAE,OAAO,CAAC,CAAC;QACzE,CAAC;QACD,WAAW;YACT,QAAQ,GAAG,QAAQ,IAAI,sBAAsB,EAAE,CAAC;YAChD,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO;QACP,OAAO;YACL,OAAO,OAAO,CAAW,EAAE,MAAM,EAAE,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,WAAW;YACT,OAAO,OAAO,CAAW,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,UAAU;YACR,OAAO,OAAO,CAAS,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,WAAW,CAAC,OAAe;YACzB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,QAAQ,CAAC,MAA+B;YACtC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,EAAE,CAA2C,KAAa,EAAE,OAAuD;YACjH,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,GAAG,CAA2C,KAAa,EAAE,OAAuD;YAClH,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;YAClC,IAAI,OAAO,CAAC,GAAG;gBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;;gBACxC,OAAO,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,EAAG,UAAmB,CAAC;AACvD,eAAO,MAAM,8BAA8B,EAAG,yBAAkC,CAAC;AACjF,eAAO,MAAM,+BAA+B,EAAG,0BAAmC,CAAC;AACnF,eAAO,MAAM,gCAAgC,MAAM,CAAC;AACpD,eAAO,MAAM,sBAAsB,EAAG,iBAA0B,CAAC;AAEjE,eAAO,MAAM,WAAW;;;;;;CAMd,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,EAAG,UAAmB,CAAC;AACvD,eAAO,MAAM,8BAA8B,EAAG,yBAAkC,CAAC;AACjF,eAAO,MAAM,+BAA+B,EAAG,0BAAmC,CAAC;AACnF,eAAO,MAAM,gCAAgC,MAAM,CAAC;AACpD,eAAO,MAAM,sBAAsB,EAAG,iBAA0B,CAAC;AAEjE,eAAO,MAAM,WAAW;aACtB,gBAAgB,EAAE,qBAAqB;aACvC,YAAY,EAAE,cAAc;aAC5B,YAAY,EAAE,aAAa;aAC3B,YAAY,EAAE,4BAA4B;aAC1C,SAAS,EAAE,yBAAyB;CAC5B,CAAC"}
@@ -1,4 +1,6 @@
1
- import type { EIP1193Provider, EIP6963ProviderDetail } from "./types.js";
1
+ import type { EIP1193Provider, EIP6963ProviderDetail, EIP6963ProviderInfo } from "./types.js";
2
+ export declare function isEIP6963ProviderInfo(value: unknown): value is EIP6963ProviderInfo;
3
+ export declare function isEIP6963ProviderDetail(value: unknown): value is EIP6963ProviderDetail;
2
4
  export declare function getInjectedEVMProvider(): EIP1193Provider | null;
3
5
  export declare function requestEIP6963Providers(): void;
4
6
  export declare function discoverEVMProviders(timeoutMs?: number): Promise<EIP6963ProviderDetail[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEzE,wBAAgB,sBAAsB,IAAI,eAAe,GAAG,IAAI,CAM/D;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAQ9C;AAED,wBAAsB,oBAAoB,CAAC,SAAS,SAAmC,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CA+BzH;AAED,wBAAsB,cAAc,CAAC,SAAS,SAAmC,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAIlH"}
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAuBpB,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,mBAAmB,CAalF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,qBAAqB,CAItF;AAiCD,wBAAgB,sBAAsB,IAAI,eAAe,GAAG,IAAI,CAK/D;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAQ9C;AAED,wBAAsB,oBAAoB,CACxC,SAAS,SAAmC,GAC3C,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAWlC;AAED,wBAAsB,cAAc,CAClC,SAAS,SAAmC,GAC3C,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAIjC"}
package/dist/discovery.js CHANGED
@@ -1,13 +1,69 @@
1
- import { getRuntimeWindow } from "@windstack/core";
1
+ import { getRuntimeWindow, invalidParams } from "@windstack/core";
2
2
  import { DEFAULT_EVM_DISCOVERY_TIMEOUT_MS, EIP6963_ANNOUNCE_PROVIDER_EVENT, EIP6963_REQUEST_PROVIDER_EVENT, EVM_PROVIDER_GLOBAL, WISP_EVM_PROVIDER_RDNS, } from "./constants.js";
3
+ const UUID_V4_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
4
+ const RDNS_PATTERN = /^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i;
5
+ const providerRegistries = new WeakMap();
6
+ function isEIP1193Provider(value) {
7
+ if (typeof value !== "object" || value === null)
8
+ return false;
9
+ const provider = value;
10
+ return (typeof provider.request === "function" &&
11
+ typeof provider.on === "function" &&
12
+ typeof provider.removeListener === "function");
13
+ }
14
+ export function isEIP6963ProviderInfo(value) {
15
+ if (typeof value !== "object" || value === null)
16
+ return false;
17
+ const info = value;
18
+ return (typeof info.uuid === "string" &&
19
+ UUID_V4_PATTERN.test(info.uuid) &&
20
+ typeof info.name === "string" &&
21
+ info.name.trim().length > 0 &&
22
+ typeof info.icon === "string" &&
23
+ info.icon.startsWith("data:image/") &&
24
+ typeof info.rdns === "string" &&
25
+ RDNS_PATTERN.test(info.rdns));
26
+ }
27
+ export function isEIP6963ProviderDetail(value) {
28
+ if (typeof value !== "object" || value === null)
29
+ return false;
30
+ const detail = value;
31
+ return isEIP6963ProviderInfo(detail.info) && isEIP1193Provider(detail.provider);
32
+ }
33
+ function getProviderRegistry(runtimeWindow) {
34
+ const existing = providerRegistries.get(runtimeWindow);
35
+ if (existing)
36
+ return existing;
37
+ const registry = {
38
+ details: [],
39
+ providers: new Set(),
40
+ uuids: new Set(),
41
+ };
42
+ runtimeWindow.addEventListener(EIP6963_ANNOUNCE_PROVIDER_EVENT, (event) => {
43
+ const detail = event.detail;
44
+ if (!isEIP6963ProviderDetail(detail))
45
+ return;
46
+ if (registry.providers.has(detail.provider) || registry.uuids.has(detail.info.uuid))
47
+ return;
48
+ const info = Object.freeze({ ...detail.info });
49
+ registry.providers.add(detail.provider);
50
+ registry.uuids.add(info.uuid);
51
+ registry.details.push(Object.freeze({ info, provider: detail.provider }));
52
+ });
53
+ providerRegistries.set(runtimeWindow, registry);
54
+ return registry;
55
+ }
56
+ function assertDiscoveryTimeout(timeoutMs) {
57
+ if (!Number.isFinite(timeoutMs) || timeoutMs < 0) {
58
+ throw invalidParams("EVM discovery timeout must be a non-negative finite number", { timeoutMs });
59
+ }
60
+ }
3
61
  export function getInjectedEVMProvider() {
4
62
  const runtimeWindow = getRuntimeWindow();
5
63
  if (!runtimeWindow)
6
64
  return null;
7
65
  const provider = runtimeWindow[EVM_PROVIDER_GLOBAL];
8
- if (provider?.request)
9
- return provider;
10
- return null;
66
+ return isEIP1193Provider(provider) ? provider : null;
11
67
  }
12
68
  export function requestEIP6963Providers() {
13
69
  const runtimeWindow = getRuntimeWindow();
@@ -17,42 +73,24 @@ export function requestEIP6963Providers() {
17
73
  runtimeWindow.dispatchEvent(new Event(EIP6963_REQUEST_PROVIDER_EVENT));
18
74
  }
19
75
  catch {
20
- // Provider discovery is optional and must not break the dApp.
76
+ // Discovery is optional; a broken injected wallet must not stop the dApp.
21
77
  }
22
78
  }
23
79
  export async function discoverEVMProviders(timeoutMs = DEFAULT_EVM_DISCOVERY_TIMEOUT_MS) {
80
+ assertDiscoveryTimeout(timeoutMs);
24
81
  const runtimeWindow = getRuntimeWindow();
25
82
  if (!runtimeWindow)
26
83
  return [];
27
- const discovered = [];
28
- const seen = new Set();
29
- const addProvider = (detail) => {
30
- if (!detail.provider?.request || seen.has(detail.provider))
31
- return;
32
- seen.add(detail.provider);
33
- discovered.push(detail);
34
- };
35
- await new Promise((resolve) => {
36
- const onAnnounce = (event) => {
37
- if (event.detail)
38
- addProvider(event.detail);
39
- };
40
- runtimeWindow.addEventListener(EIP6963_ANNOUNCE_PROVIDER_EVENT, onAnnounce);
41
- requestEIP6963Providers();
42
- setTimeout(() => {
43
- runtimeWindow.removeEventListener(EIP6963_ANNOUNCE_PROVIDER_EVENT, onAnnounce);
44
- resolve();
45
- }, timeoutMs);
46
- });
47
- const injected = getInjectedEVMProvider();
48
- if (injected && !seen.has(injected)) {
49
- addProvider({ info: { name: "Injected EVM Provider", rdns: "injected.evm" }, provider: injected });
84
+ const registry = getProviderRegistry(runtimeWindow);
85
+ requestEIP6963Providers();
86
+ if (timeoutMs > 0) {
87
+ await new Promise((resolve) => setTimeout(resolve, timeoutMs));
50
88
  }
51
- return discovered;
89
+ return [...registry.details];
52
90
  }
53
91
  export async function getEVMProvider(timeoutMs = DEFAULT_EVM_DISCOVERY_TIMEOUT_MS) {
54
92
  const providers = await discoverEVMProviders(timeoutMs);
55
- const wispProvider = providers.find((entry) => entry.info.rdns === WISP_EVM_PROVIDER_RDNS)?.provider;
93
+ const wispProvider = providers.find(({ info }) => info.rdns === WISP_EVM_PROVIDER_RDNS)?.provider;
56
94
  return wispProvider ?? providers[0]?.provider ?? getInjectedEVMProvider();
57
95
  }
58
96
  //# sourceMappingURL=discovery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { createEVMClient } from "./client.js";
2
2
  export { DEFAULT_EVM_DISCOVERY_TIMEOUT_MS, EIP6963_ANNOUNCE_PROVIDER_EVENT, EIP6963_REQUEST_PROVIDER_EVENT, EVM_METHODS, EVM_PROVIDER_GLOBAL, WISP_EVM_PROVIDER_RDNS, } from "./constants.js";
3
- export { discoverEVMProviders, getEVMProvider, getInjectedEVMProvider, requestEIP6963Providers, } from "./discovery.js";
4
- export type { EIP1193Provider, EIP6963ProviderDetail, EIP6963ProviderInfo, EVMClient, EVMClientOptions, EVMProviderEventMap, } from "./types.js";
3
+ export { discoverEVMProviders, getEVMProvider, getInjectedEVMProvider, isEIP6963ProviderDetail, isEIP6963ProviderInfo, requestEIP6963Providers, } from "./discovery.js";
4
+ export type { AddEthereumChainParameter, EIP1193Provider, EIP6963ProviderDetail, EIP6963ProviderInfo, EVMClient, EVMClientOptions, EVMProviderEventMap, } from "./types.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,WAAW,EACX,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,SAAS,EACT,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,WAAW,EACX,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,yBAAyB,EACzB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,SAAS,EACT,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export { createEVMClient } from "./client.js";
2
2
  export { DEFAULT_EVM_DISCOVERY_TIMEOUT_MS, EIP6963_ANNOUNCE_PROVIDER_EVENT, EIP6963_REQUEST_PROVIDER_EVENT, EVM_METHODS, EVM_PROVIDER_GLOBAL, WISP_EVM_PROVIDER_RDNS, } from "./constants.js";
3
- export { discoverEVMProviders, getEVMProvider, getInjectedEVMProvider, requestEIP6963Providers, } from "./discovery.js";
3
+ export { discoverEVMProviders, getEVMProvider, getInjectedEVMProvider, isEIP6963ProviderDetail, isEIP6963ProviderInfo, requestEIP6963Providers, } from "./discovery.js";
4
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,WAAW,EACX,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,WAAW,EACX,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { DappMetadataInput, ProviderDetail, ProviderInfo, RequestArguments } from "@windstack/core";
1
+ import type { ProviderDetail, RequestArguments } from "@windstack/core";
2
2
  export type EVMProviderEventMap = {
3
3
  connect: {
4
4
  chainId: string;
@@ -9,26 +9,43 @@ export type EVMProviderEventMap = {
9
9
  };
10
10
  accountsChanged: string[];
11
11
  chainChanged: string;
12
- message: unknown;
12
+ message: {
13
+ type: string;
14
+ data: unknown;
15
+ };
13
16
  };
14
17
  export type EIP1193Provider = {
15
18
  isMetaMask?: boolean;
16
19
  selectedAddress?: string | null;
17
20
  chainId?: string;
18
21
  request<TResult = unknown, TParams = unknown>(args: RequestArguments<TParams>): Promise<TResult>;
19
- on?<TEvent extends keyof EVMProviderEventMap>(event: TEvent, handler: (payload: EVMProviderEventMap[TEvent]) => void): void;
22
+ on<TEvent extends keyof EVMProviderEventMap>(event: TEvent, handler: (payload: EVMProviderEventMap[TEvent]) => void): void;
20
23
  off?<TEvent extends keyof EVMProviderEventMap>(event: TEvent, handler: (payload: EVMProviderEventMap[TEvent]) => void): void;
21
- removeListener?<TEvent extends keyof EVMProviderEventMap>(event: TEvent, handler: (payload: EVMProviderEventMap[TEvent]) => void): void;
24
+ removeListener<TEvent extends keyof EVMProviderEventMap>(event: TEvent, handler: (payload: EVMProviderEventMap[TEvent]) => void): void;
22
25
  };
23
- export type EIP6963ProviderInfo = ProviderInfo & {
26
+ export type EIP6963ProviderInfo = {
27
+ uuid: string;
28
+ name: string;
29
+ icon: string;
24
30
  rdns: string;
25
31
  };
26
32
  export type EIP6963ProviderDetail = ProviderDetail<EIP1193Provider, EIP6963ProviderInfo>;
27
33
  export type EVMClientOptions = {
28
- dapp?: DappMetadataInput;
29
34
  provider?: EIP1193Provider;
30
35
  discoveryTimeoutMs?: number;
31
36
  };
37
+ export type AddEthereumChainParameter = {
38
+ chainId: string;
39
+ blockExplorerUrls?: string[];
40
+ chainName?: string;
41
+ iconUrls?: string[];
42
+ nativeCurrency?: {
43
+ name: string;
44
+ symbol: string;
45
+ decimals: number;
46
+ };
47
+ rpcUrls?: string[];
48
+ };
32
49
  export type EVMClient = {
33
50
  isAvailable(): boolean;
34
51
  getProvider(): EIP1193Provider | null;
@@ -37,7 +54,7 @@ export type EVMClient = {
37
54
  getAccounts(): Promise<string[]>;
38
55
  getChainId(): Promise<string>;
39
56
  switchChain(chainId: string): Promise<unknown>;
40
- addChain(params: Record<string, unknown>): Promise<unknown>;
57
+ addChain(params: AddEthereumChainParameter): Promise<unknown>;
41
58
  on<TEvent extends keyof EVMProviderEventMap>(event: TEvent, handler: (payload: EVMProviderEventMap[TEvent]) => void): void;
42
59
  off<TEvent extends keyof EVMProviderEventMap>(event: TEvent, handler: (payload: EVMProviderEventMap[TEvent]) => void): void;
43
60
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,9 @@
1
1
  {
2
2
  "name": "@windstack/evm",
3
- "version": "0.3.0",
3
+ "version": "0.6.1",
4
4
  "description": "EIP-1193 and EIP-6963 EVM provider client for Wisp Wallet-compatible dApps.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
- "module": "./dist/index.js",
8
7
  "types": "./dist/index.d.ts",
9
8
  "exports": {
10
9
  ".": {
@@ -24,7 +23,7 @@
24
23
  "prepack": "npm run build"
25
24
  },
26
25
  "dependencies": {
27
- "@windstack/core": "0.3.0"
26
+ "@windstack/core": "0.6.1"
28
27
  },
29
28
  "sideEffects": false,
30
29
  "keywords": [
@@ -41,6 +40,15 @@
41
40
  ],
42
41
  "license": "MIT",
43
42
  "author": "PT WIND KRIPTOGRAFI TEKNOLOGI",
43
+ "homepage": "https://github.com/windvex/windstack-sdk/tree/main/packages/evm#readme",
44
+ "repository": {
45
+ "type": "git",
46
+ "url": "git+https://github.com/windvex/windstack-sdk.git",
47
+ "directory": "packages/evm"
48
+ },
49
+ "bugs": {
50
+ "url": "https://github.com/windvex/windstack-sdk/issues"
51
+ },
44
52
  "publishConfig": {
45
53
  "access": "public",
46
54
  "registry": "https://registry.npmjs.org/"