@windstack/evm 2.3.2 → 2.3.4

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
@@ -6,6 +6,8 @@
6
6
 
7
7
  The client uses announced EIP-6963 providers and can fall back to `window.ethereum`. A particular wallet is preferred only when `preferredRdns` is explicitly configured.
8
8
 
9
+ Embedded DApps can use the same EIP-1193 and EIP-6963 discovery flow through the frame provider. The DApp side binds to one exact wallet-host origin, while the wallet host binds requests to one exact iframe window and DApp origin.
10
+
9
11
  ## Installation
10
12
 
11
13
  ```bash
@@ -36,6 +38,33 @@ client.on("accountsChanged", (nextAccounts) => {
36
38
  await client.switchChain("0x1a50");
37
39
  ```
38
40
 
41
+ For embedded applications, install the provider in the DApp frame and host it from the wallet shell:
42
+
43
+ ```ts
44
+ import {
45
+ createEvmFrameHost,
46
+ createEvmFrameProvider,
47
+ } from "@windstack/evm";
48
+
49
+ const provider = createEvmFrameProvider({
50
+ parentOrigin: "https://wallet.example",
51
+ parentWindow: window.parent,
52
+ providerInfo: {
53
+ uuid: "6fd3e0d4-b77c-4ab8-9a95-b9f4c80db196",
54
+ name: "Example Wallet",
55
+ icon: "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'/>",
56
+ rdns: "com.example.wallet",
57
+ },
58
+ });
59
+
60
+ const host = createEvmFrameHost({
61
+ allowedOrigin: "https://app.example",
62
+ sourceWindow: frame.contentWindow!,
63
+ handleRequest: ({ method, params }) =>
64
+ walletRequest({ method, params }),
65
+ });
66
+ ```
67
+
39
68
  Chain-specific metadata belongs in a chain package. For example, VEX EVM metadata is exported by `@windstack/vexanium` and can be registered with EIP-3085:
40
69
 
41
70
  ```ts
@@ -0,0 +1,26 @@
1
+ import type { RequestArguments } from "@windstack/core";
2
+ import type { EIP1193Provider, EIP6963ProviderInfo, EVMProviderEventMap } from "./types.js";
3
+ export type EvmFrameProvider = EIP1193Provider & {
4
+ announce(): void;
5
+ destroy(): void;
6
+ };
7
+ export type EvmFrameProviderOptions = {
8
+ parentOrigin: string;
9
+ providerInfo: EIP6963ProviderInfo;
10
+ requestTimeoutMs?: number;
11
+ window?: Window;
12
+ parentWindow?: WindowProxy;
13
+ };
14
+ export type EvmFrameHost = {
15
+ emit<TEvent extends keyof EVMProviderEventMap>(event: TEvent, payload: EVMProviderEventMap[TEvent]): void;
16
+ destroy(): void;
17
+ };
18
+ export type EvmFrameHostOptions = {
19
+ allowedOrigin: string;
20
+ sourceWindow: WindowProxy;
21
+ handleRequest(args: RequestArguments<unknown>): Promise<unknown> | unknown;
22
+ window?: Window;
23
+ };
24
+ export declare function createEvmFrameProvider(options: EvmFrameProviderOptions): EvmFrameProvider;
25
+ export declare function createEvmFrameHost(options: EvmFrameHostOptions): EvmFrameHost;
26
+ //# sourceMappingURL=frame-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-provider.d.ts","sourceRoot":"","sources":["../src/frame-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA8B5F,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG;IAC/C,QAAQ,IAAI,IAAI,CAAC;IACjB,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,mBAAmB,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,WAAW,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,MAAM,SAAS,MAAM,mBAAmB,EAC3C,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,mBAAmB,CAAC,MAAM,CAAC,GACnC,IAAI,CAAC;IACR,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AA8DF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,gBAAgB,CAyIzF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAoD7E"}
@@ -0,0 +1,214 @@
1
+ import { EIP6963_ANNOUNCE_PROVIDER_EVENT, EIP6963_REQUEST_PROVIDER_EVENT } from "./constants.js";
2
+ import { isEIP6963ProviderInfo } from "./discovery.js";
3
+ const FRAME_CHANNEL = "windstack:evm:frame:v1";
4
+ const DEFAULT_REQUEST_TIMEOUT_MS = 120_000;
5
+ function exactHttpsOrigin(value, label) {
6
+ const raw = String(value || "").trim();
7
+ let parsed;
8
+ try {
9
+ parsed = new URL(raw);
10
+ }
11
+ catch {
12
+ throw new Error(`${label} must be an HTTPS origin`);
13
+ }
14
+ if (parsed.protocol !== "https:" ||
15
+ parsed.username ||
16
+ parsed.password ||
17
+ parsed.origin !== raw.replace(/\/$/u, "")) {
18
+ throw new Error(`${label} must be an exact credential-free HTTPS origin`);
19
+ }
20
+ return parsed.origin;
21
+ }
22
+ function isFrameMessage(value) {
23
+ return Boolean(value &&
24
+ typeof value === "object" &&
25
+ value.channel === FRAME_CHANNEL &&
26
+ typeof value.type === "string");
27
+ }
28
+ function requestId(counter) {
29
+ return `${Date.now().toString(36)}-${counter.toString(36)}`;
30
+ }
31
+ function errorPayload(error) {
32
+ if (error && typeof error === "object") {
33
+ const value = error;
34
+ return {
35
+ ...(typeof value.code === "number" ? { code: value.code } : {}),
36
+ message: typeof value.message === "string" && value.message
37
+ ? value.message
38
+ : "Wallet provider request failed.",
39
+ ...(value.data !== undefined ? { data: value.data } : {}),
40
+ };
41
+ }
42
+ return {
43
+ message: error instanceof Error ? error.message : String(error || "Wallet provider request failed."),
44
+ };
45
+ }
46
+ function providerError(error) {
47
+ const value = new Error(error.message);
48
+ if (typeof error.code === "number")
49
+ value.code = error.code;
50
+ if (error.data !== undefined)
51
+ value.data = error.data;
52
+ return value;
53
+ }
54
+ export function createEvmFrameProvider(options) {
55
+ const runtimeWindow = options.window ?? globalThis.window;
56
+ if (!runtimeWindow)
57
+ throw new Error("Frame provider requires a browser window");
58
+ const targetWindow = options.parentWindow ?? runtimeWindow.parent;
59
+ if (!targetWindow || targetWindow === runtimeWindow) {
60
+ throw new Error("Frame provider must run inside an embedded DApp frame");
61
+ }
62
+ const parentOrigin = exactHttpsOrigin(options.parentOrigin, "parentOrigin");
63
+ if (!isEIP6963ProviderInfo(options.providerInfo)) {
64
+ throw new Error("providerInfo must implement EIP-6963 provider metadata");
65
+ }
66
+ const info = Object.freeze({ ...options.providerInfo });
67
+ const timeoutMs = Math.max(1_000, Number.isFinite(options.requestTimeoutMs)
68
+ ? Number(options.requestTimeoutMs)
69
+ : DEFAULT_REQUEST_TIMEOUT_MS);
70
+ const listeners = new Map();
71
+ const pending = new Map();
72
+ let counter = 0;
73
+ let destroyed = false;
74
+ const onMessage = (event) => {
75
+ if (destroyed ||
76
+ event.source !== targetWindow ||
77
+ event.origin !== parentOrigin ||
78
+ !isFrameMessage(event.data)) {
79
+ return;
80
+ }
81
+ const message = event.data;
82
+ if (message.type === "response") {
83
+ const current = pending.get(message.id);
84
+ if (!current)
85
+ return;
86
+ pending.delete(message.id);
87
+ clearTimeout(current.timer);
88
+ if (message.error)
89
+ current.reject(providerError(message.error));
90
+ else
91
+ current.resolve(message.result);
92
+ return;
93
+ }
94
+ if (message.type === "event") {
95
+ const current = listeners.get(message.event);
96
+ if (!current)
97
+ return;
98
+ for (const handler of [...current])
99
+ handler(message.payload);
100
+ }
101
+ };
102
+ runtimeWindow.addEventListener("message", onMessage);
103
+ let provider;
104
+ const announce = () => {
105
+ if (destroyed)
106
+ return;
107
+ runtimeWindow.dispatchEvent(new CustomEvent(EIP6963_ANNOUNCE_PROVIDER_EVENT, {
108
+ detail: Object.freeze({ info, provider }),
109
+ }));
110
+ };
111
+ provider = {
112
+ request(args) {
113
+ if (destroyed) {
114
+ return Promise.reject(new Error("Frame provider has been destroyed"));
115
+ }
116
+ if (!args || typeof args.method !== "string" || !args.method.trim()) {
117
+ return Promise.reject(Object.assign(new Error("Provider request method is required"), {
118
+ code: -32602,
119
+ }));
120
+ }
121
+ const id = requestId(++counter);
122
+ return new Promise((resolve, reject) => {
123
+ const timer = setTimeout(() => {
124
+ pending.delete(id);
125
+ reject(new Error(`Wallet provider request timed out: ${args.method}`));
126
+ }, timeoutMs);
127
+ pending.set(id, {
128
+ resolve: (value) => resolve(value),
129
+ reject,
130
+ timer,
131
+ });
132
+ targetWindow.postMessage({
133
+ channel: FRAME_CHANNEL,
134
+ type: "request",
135
+ id,
136
+ args: args,
137
+ }, parentOrigin);
138
+ });
139
+ },
140
+ on(event, handler) {
141
+ const current = listeners.get(event) ?? new Set();
142
+ current.add(handler);
143
+ listeners.set(event, current);
144
+ },
145
+ off(event, handler) {
146
+ listeners.get(event)?.delete(handler);
147
+ },
148
+ removeListener(event, handler) {
149
+ listeners.get(event)?.delete(handler);
150
+ },
151
+ announce,
152
+ destroy() {
153
+ if (destroyed)
154
+ return;
155
+ destroyed = true;
156
+ runtimeWindow.removeEventListener("message", onMessage);
157
+ runtimeWindow.removeEventListener(EIP6963_REQUEST_PROVIDER_EVENT, announce);
158
+ for (const current of pending.values()) {
159
+ clearTimeout(current.timer);
160
+ current.reject(new Error("Frame provider was destroyed"));
161
+ }
162
+ pending.clear();
163
+ listeners.clear();
164
+ },
165
+ };
166
+ runtimeWindow.addEventListener(EIP6963_REQUEST_PROVIDER_EVENT, announce);
167
+ announce();
168
+ return provider;
169
+ }
170
+ export function createEvmFrameHost(options) {
171
+ const runtimeWindow = options.window ?? globalThis.window;
172
+ if (!runtimeWindow)
173
+ throw new Error("Frame host requires a browser window");
174
+ const allowedOrigin = exactHttpsOrigin(options.allowedOrigin, "allowedOrigin");
175
+ let destroyed = false;
176
+ const post = (message) => {
177
+ if (!destroyed)
178
+ options.sourceWindow.postMessage(message, allowedOrigin);
179
+ };
180
+ const onMessage = (event) => {
181
+ if (destroyed ||
182
+ event.source !== options.sourceWindow ||
183
+ event.origin !== allowedOrigin ||
184
+ !isFrameMessage(event.data) ||
185
+ event.data.type !== "request") {
186
+ return;
187
+ }
188
+ const message = event.data;
189
+ void Promise.resolve(options.handleRequest(message.args)).then((result) => post({
190
+ channel: FRAME_CHANNEL,
191
+ type: "response",
192
+ id: message.id,
193
+ result,
194
+ }), (error) => post({
195
+ channel: FRAME_CHANNEL,
196
+ type: "response",
197
+ id: message.id,
198
+ error: errorPayload(error),
199
+ }));
200
+ };
201
+ runtimeWindow.addEventListener("message", onMessage);
202
+ return {
203
+ emit(event, payload) {
204
+ post({ channel: FRAME_CHANNEL, type: "event", event, payload });
205
+ },
206
+ destroy() {
207
+ if (destroyed)
208
+ return;
209
+ destroyed = true;
210
+ runtimeWindow.removeEventListener("message", onMessage);
211
+ },
212
+ };
213
+ }
214
+ //# sourceMappingURL=frame-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-provider.js","sourceRoot":"","sources":["../src/frame-provider.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export { createEVMClient } from "./client.js";
2
+ export { createEvmFrameHost, createEvmFrameProvider, } from "./frame-provider.js";
3
+ export type { EvmFrameHost, EvmFrameHostOptions, EvmFrameProvider, EvmFrameProviderOptions, } from "./frame-provider.js";
2
4
  export { evmChainIdsEqual, formatEvmAddress, isEvmAddress, isEvmTransactionHash, normalizeEvmAddress, normalizeEvmChainId, normalizeEvmTransactionHash, } from "./address.js";
3
5
  export { EvmRpcClient, EvmRpcError, EvmRpcTransportError } from "./rpc.js";
4
6
  export type { EvmFetch, EvmRpcClientOptions, EvmRpcRequestOptions } from "./rpc.js";
@@ -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,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAC3E,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACpF,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,WAAW,EACX,mBAAmB,GACpB,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"}
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,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAC3E,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACpF,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,WAAW,EACX,mBAAmB,GACpB,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,5 @@
1
1
  export { createEVMClient } from "./client.js";
2
+ export { createEvmFrameHost, createEvmFrameProvider, } from "./frame-provider.js";
2
3
  export { evmChainIdsEqual, formatEvmAddress, isEvmAddress, isEvmTransactionHash, normalizeEvmAddress, normalizeEvmChainId, normalizeEvmTransactionHash, } from "./address.js";
3
4
  export { EvmRpcClient, EvmRpcError, EvmRpcTransportError } from "./rpc.js";
4
5
  export { DEFAULT_EVM_DISCOVERY_TIMEOUT_MS, EIP6963_ANNOUNCE_PROVIDER_EVENT, EIP6963_REQUEST_PROVIDER_EVENT, EVM_METHODS, EVM_PROVIDER_GLOBAL, } from "./constants.js";
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,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAE3E,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,WAAW,EACX,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,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,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAE3E,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAC/B,8BAA8B,EAC9B,WAAW,EACX,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windstack/evm",
3
- "version": "2.3.2",
3
+ "version": "2.3.4",
4
4
  "description": "Generic EVM address, JSON-RPC, EIP-1193, and EIP-6963 provider utilities.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -23,7 +23,7 @@
23
23
  "prepack": "npm run build"
24
24
  },
25
25
  "dependencies": {
26
- "@windstack/core": "2.3.2"
26
+ "@windstack/core": "2.3.4"
27
27
  },
28
28
  "sideEffects": false,
29
29
  "keywords": [