@meshconnect/uwc-bridge-child 0.0.2

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.
@@ -0,0 +1,18 @@
1
+ import * as Comlink from 'comlink';
2
+ interface ParentAPI {
3
+ eip6963Wallets: unknown[];
4
+ eip6963WalletsReady: boolean;
5
+ walletStandardWallets: unknown[];
6
+ walletStandardWalletsReady: boolean;
7
+ }
8
+ export declare class BridgeChild {
9
+ private parentAPI?;
10
+ constructor();
11
+ private initializeConnection;
12
+ private pollForWallets;
13
+ private checkWallets;
14
+ getParentAPI(): Comlink.Remote<ParentAPI> | undefined;
15
+ isConnected(): boolean;
16
+ }
17
+ export {};
18
+ //# sourceMappingURL=BridgeChild.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BridgeChild.d.ts","sourceRoot":"","sources":["../src/BridgeChild.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAGlC,UAAU,SAAS;IACjB,cAAc,EAAE,OAAO,EAAE,CAAA;IACzB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,qBAAqB,EAAE,OAAO,EAAE,CAAA;IAChC,0BAA0B,EAAE,OAAO,CAAA;CACpC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAC,CAA2B;;YAM/B,oBAAoB;YAapB,cAAc;YAiDd,YAAY;IA0D1B,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS;IAIrD,WAAW,IAAI,OAAO;CAGvB"}
@@ -0,0 +1,111 @@
1
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
2
+ // @ts-nocheck
3
+ import * as Comlink from 'comlink';
4
+ export class BridgeChild {
5
+ parentAPI;
6
+ constructor() {
7
+ this.initializeConnection();
8
+ }
9
+ async initializeConnection() {
10
+ if (!window.parent || window.parent === window) {
11
+ return;
12
+ }
13
+ window.UWCBridgeInitialized = true;
14
+ this.parentAPI = Comlink.wrap(Comlink.windowEndpoint(window.parent, self, '*'));
15
+ this.pollForWallets();
16
+ }
17
+ async pollForWallets() {
18
+ const pollInterval = 100;
19
+ const maxPollTime = 10000; // Poll for maximum 10 seconds
20
+ const startTime = Date.now();
21
+ const poll = () => {
22
+ // Check if we've exceeded the max poll time
23
+ if (Date.now() - startTime > maxPollTime) {
24
+ return;
25
+ }
26
+ // Check if global variables are already set
27
+ if ((window.eip6963Wallets && window.eip6963Wallets.length > 0) ||
28
+ (window.walletStandardWallets &&
29
+ window.walletStandardWallets.length > 0)) {
30
+ return;
31
+ }
32
+ if (!this.parentAPI) {
33
+ setTimeout(poll, pollInterval);
34
+ return;
35
+ }
36
+ // Create a timeout promise to prevent hanging
37
+ const timeoutPromise = new Promise((_, reject) => {
38
+ setTimeout(() => reject(new Error('Timeout accessing parent API')), 200);
39
+ });
40
+ // Try to check wallets with a timeout
41
+ Promise.race([this.checkWallets(), timeoutPromise])
42
+ .then(result => {
43
+ if (result === 'continue') {
44
+ // Continue polling
45
+ setTimeout(poll, pollInterval);
46
+ }
47
+ // If result is 'stop', polling will stop
48
+ })
49
+ .catch(_error => {
50
+ // Continue polling on error
51
+ setTimeout(poll, pollInterval);
52
+ });
53
+ };
54
+ // Start polling immediately
55
+ poll();
56
+ }
57
+ async checkWallets() {
58
+ try {
59
+ // Check if both EIP6963 and Wallet Standard wallets are ready
60
+ const eip6963Ready = await this.parentAPI?.eip6963WalletsReady;
61
+ const walletStandardReady = await this.parentAPI?.walletStandardWalletsReady;
62
+ if (!eip6963Ready || !walletStandardReady) {
63
+ return 'continue';
64
+ }
65
+ // Get EIP6963 wallets
66
+ const availableEip6963Wallets = await this.parentAPI?.eip6963Wallets.length;
67
+ const eip6963Wallets = [];
68
+ if (availableEip6963Wallets > 0) {
69
+ for (let index = 0; index < availableEip6963Wallets; index++) {
70
+ const wallet = {
71
+ uuid: await this.parentAPI.eip6963Wallets[index].uuid,
72
+ name: await this.parentAPI.eip6963Wallets[index].name,
73
+ icon: await this.parentAPI.eip6963Wallets[index].icon,
74
+ rdns: await this.parentAPI.eip6963Wallets[index].rdns,
75
+ provider: this.parentAPI.eip6963Wallets[index].provider
76
+ };
77
+ eip6963Wallets.push(wallet);
78
+ }
79
+ }
80
+ // Get Wallet Standard wallets
81
+ const availableWalletStandardWallets = await this.parentAPI.walletStandardWallets.length;
82
+ const walletStandardWallets = [];
83
+ if (availableWalletStandardWallets > 0) {
84
+ for (let index = 0; index < availableWalletStandardWallets; index++) {
85
+ const wallet = {
86
+ uuid: await this.parentAPI.walletStandardWallets[index].uuid,
87
+ name: await this.parentAPI.walletStandardWallets[index].name,
88
+ chains: await this.parentAPI.walletStandardWallets[index].chains,
89
+ features: await this.parentAPI.walletStandardWallets[index].features,
90
+ adapter: this.parentAPI.walletStandardWallets[index].adapter
91
+ };
92
+ walletStandardWallets.push(wallet);
93
+ }
94
+ }
95
+ // Set both wallet types on window
96
+ window.eip6963Wallets = eip6963Wallets;
97
+ window.walletStandardWallets = walletStandardWallets;
98
+ return 'stop';
99
+ }
100
+ catch {
101
+ return 'continue';
102
+ }
103
+ }
104
+ getParentAPI() {
105
+ return this.parentAPI;
106
+ }
107
+ isConnected() {
108
+ return this.parentAPI !== undefined;
109
+ }
110
+ }
111
+ //# sourceMappingURL=BridgeChild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BridgeChild.js","sourceRoot":"","sources":["../src/BridgeChild.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { WalletMetadata } from './types';
2
+ export declare class BridgeChild {
3
+ private requestId;
4
+ private pendingRequests;
5
+ private initialized;
6
+ initialize(): Promise<void>;
7
+ private handleMessage;
8
+ private callParentMethod;
9
+ getWallets(): Promise<WalletMetadata>;
10
+ refreshDetection(): Promise<WalletMetadata>;
11
+ getProperty(targetType: 'eip6963' | 'wallet-standard' | 'adapter', identifier: string, property: string): Promise<any>;
12
+ callProviderMethod(providerUuid: string, method: string, params?: any[]): Promise<any>;
13
+ callWalletMethod(walletName: string, method: string, params?: any[]): Promise<any>;
14
+ callAdapterMethod(adapterName: string, method: string, params?: any[]): Promise<any>;
15
+ private sendRPC;
16
+ private deserializeResult;
17
+ destroy(): void;
18
+ }
19
+ //# sourceMappingURL=bridge-child.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-child.d.ts","sourceRoot":"","sources":["../src/bridge-child.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA2B,cAAc,EAAE,MAAM,SAAS,CAAA;AAYtE,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,eAAe,CAGV;IACb,OAAO,CAAC,WAAW,CAAQ;IAErB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBjC,OAAO,CAAC,aAAa;YAoBP,gBAAgB;IA+BxB,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IAIrC,gBAAgB,IAAI,OAAO,CAAC,cAAc,CAAC;IAI3C,WAAW,CACf,UAAU,EAAE,SAAS,GAAG,iBAAiB,GAAG,SAAS,EACrD,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,GAAG,CAAC;IAgBT,kBAAkB,CACtB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,GAAG,EAAO,GACjB,OAAO,CAAC,GAAG,CAAC;IAcT,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,GAAG,EAAO,GACjB,OAAO,CAAC,GAAG,CAAC;IAcT,iBAAiB,CACrB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,GAAG,EAAO,GACjB,OAAO,CAAC,GAAG,CAAC;YAcD,OAAO;IAkBrB,OAAO,CAAC,iBAAiB;IAmClB,OAAO,IAAI,IAAI;CAKvB"}
@@ -0,0 +1,169 @@
1
+ export class BridgeChild {
2
+ requestId = 0;
3
+ pendingRequests = new Map();
4
+ initialized = false;
5
+ async initialize() {
6
+ // Listen for messages from parent
7
+ window.addEventListener('message', this.handleMessage.bind(this));
8
+ // Wait for handshake from parent
9
+ return new Promise(resolve => {
10
+ const checkHandshake = () => {
11
+ if (this.initialized) {
12
+ resolve();
13
+ }
14
+ else {
15
+ setTimeout(checkHandshake, 100);
16
+ }
17
+ };
18
+ checkHandshake();
19
+ });
20
+ }
21
+ handleMessage(event) {
22
+ const message = event.data;
23
+ if (message.type === 'postmate-handshake') {
24
+ // Handshake received from parent
25
+ this.initialized = true;
26
+ }
27
+ else if (message.type === 'response') {
28
+ // Handle response from parent
29
+ const pending = this.pendingRequests.get(message.id);
30
+ if (pending) {
31
+ if (message.error) {
32
+ pending.reject(new Error(message.error));
33
+ }
34
+ else {
35
+ pending.resolve(message.result);
36
+ }
37
+ this.pendingRequests.delete(message.id);
38
+ }
39
+ }
40
+ }
41
+ async callParentMethod(method, args) {
42
+ if (!this.initialized) {
43
+ throw new Error('BridgeChild not initialized');
44
+ }
45
+ const id = `req-${++this.requestId}`;
46
+ return new Promise((resolve, reject) => {
47
+ this.pendingRequests.set(id, { resolve, reject });
48
+ // Send message to parent
49
+ window.parent.postMessage({
50
+ id,
51
+ type: 'call',
52
+ method,
53
+ args
54
+ }, '*');
55
+ // Timeout after 30 seconds
56
+ setTimeout(() => {
57
+ if (this.pendingRequests.has(id)) {
58
+ this.pendingRequests.delete(id);
59
+ reject(new Error(`Request ${id} timed out`));
60
+ }
61
+ }, 30000);
62
+ });
63
+ }
64
+ async getWallets() {
65
+ return this.callParentMethod('getWallets');
66
+ }
67
+ async refreshDetection() {
68
+ return this.callParentMethod('refreshDetection');
69
+ }
70
+ async getProperty(targetType, identifier, property) {
71
+ const result = await this.callParentMethod('getProperty', [
72
+ {
73
+ target: { type: targetType, identifier },
74
+ property
75
+ }
76
+ ]);
77
+ // If there was an error, throw it
78
+ if (result?.error) {
79
+ throw new Error(result.error.message);
80
+ }
81
+ return this.deserializeResult(result);
82
+ }
83
+ async callProviderMethod(providerUuid, method, params = []) {
84
+ const request = {
85
+ id: ++this.requestId,
86
+ method,
87
+ params,
88
+ target: {
89
+ type: 'eip6963',
90
+ identifier: providerUuid
91
+ }
92
+ };
93
+ return this.sendRPC(request);
94
+ }
95
+ async callWalletMethod(walletName, method, params = []) {
96
+ const request = {
97
+ id: ++this.requestId,
98
+ method,
99
+ params,
100
+ target: {
101
+ type: 'wallet-standard',
102
+ identifier: walletName
103
+ }
104
+ };
105
+ return this.sendRPC(request);
106
+ }
107
+ async callAdapterMethod(adapterName, method, params = []) {
108
+ const request = {
109
+ id: ++this.requestId,
110
+ method,
111
+ params,
112
+ target: {
113
+ type: 'adapter',
114
+ identifier: adapterName
115
+ }
116
+ };
117
+ return this.sendRPC(request);
118
+ }
119
+ async sendRPC(request) {
120
+ console.log('[BridgeChild] Sending RPC:', request);
121
+ const response = await this.callParentMethod('rpc', [request]);
122
+ console.log('[BridgeChild] RPC Response:', response);
123
+ // Handle undefined or null response
124
+ if (!response) {
125
+ return undefined;
126
+ }
127
+ // Check for error in response
128
+ if (response.error) {
129
+ throw new Error(`RPC Error: ${response.error.message}`);
130
+ }
131
+ return this.deserializeResult(response.result);
132
+ }
133
+ deserializeResult(result) {
134
+ if (result === null || result === undefined) {
135
+ return result;
136
+ }
137
+ // Handle special serialized types
138
+ if (result && typeof result === 'object' && result._type) {
139
+ switch (result._type) {
140
+ case 'PublicKey':
141
+ // Return as string for now (can be converted to actual PublicKey if needed)
142
+ return result.value;
143
+ case 'Uint8Array':
144
+ return new Uint8Array(result.value);
145
+ default:
146
+ return result;
147
+ }
148
+ }
149
+ // Handle arrays
150
+ if (Array.isArray(result)) {
151
+ return result.map(item => this.deserializeResult(item));
152
+ }
153
+ // Handle objects
154
+ if (typeof result === 'object') {
155
+ const deserialized = {};
156
+ for (const key in result) {
157
+ deserialized[key] = this.deserializeResult(result[key]);
158
+ }
159
+ return deserialized;
160
+ }
161
+ return result;
162
+ }
163
+ destroy() {
164
+ window.removeEventListener('message', this.handleMessage.bind(this));
165
+ this.pendingRequests.clear();
166
+ this.initialized = false;
167
+ }
168
+ }
169
+ //# sourceMappingURL=bridge-child.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-child.js","sourceRoot":"","sources":["../src/bridge-child.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export declare class ComlinkBridgeChild {
2
+ private bridge;
3
+ private isInIframe;
4
+ private initPromise;
5
+ constructor();
6
+ private checkIfInIframe;
7
+ private initialize;
8
+ private setupWallets;
9
+ refreshWallets(): Promise<void>;
10
+ waitForInit(): Promise<void>;
11
+ isReady(): boolean;
12
+ isRunningInIframe(): boolean;
13
+ }
14
+ export declare const bridgeChild: ComlinkBridgeChild;
15
+ //# sourceMappingURL=comlink-bridge-child.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comlink-bridge-child.d.ts","sourceRoot":"","sources":["../src/comlink-bridge-child.ts"],"names":[],"mappings":"AAeA,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,WAAW,CAA6B;;IAShD,OAAO,CAAC,eAAe;YAQT,UAAU;YAiBV,YAAY;IAwDpB,cAAc;IAWd,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC,OAAO,IAAI,OAAO;IAIlB,iBAAiB,IAAI,OAAO;CAG7B;AAGD,eAAO,MAAM,WAAW,oBAA2B,CAAA"}
@@ -0,0 +1,108 @@
1
+ import * as Comlink from 'comlink';
2
+ export class ComlinkBridgeChild {
3
+ bridge = null;
4
+ isInIframe = false;
5
+ initPromise = null;
6
+ constructor() {
7
+ this.isInIframe = this.checkIfInIframe();
8
+ if (this.isInIframe) {
9
+ this.initPromise = this.initialize();
10
+ }
11
+ }
12
+ checkIfInIframe() {
13
+ try {
14
+ return window.self !== window.top;
15
+ }
16
+ catch {
17
+ return true;
18
+ }
19
+ }
20
+ async initialize() {
21
+ console.log('[ComlinkBridgeChild] Initializing...');
22
+ if (!window.parent) {
23
+ console.error('[ComlinkBridgeChild] No parent window found');
24
+ return;
25
+ }
26
+ // Connect to parent using Comlink
27
+ console.log('[ComlinkBridgeChild] Connecting to parent via Comlink...');
28
+ this.bridge = Comlink.wrap(Comlink.windowEndpoint(window.parent));
29
+ // Automatically set up wallets
30
+ console.log('[ComlinkBridgeChild] Setting up wallets...');
31
+ await this.setupWallets();
32
+ console.log('[ComlinkBridgeChild] Initialization complete');
33
+ }
34
+ async setupWallets() {
35
+ if (!this.bridge) {
36
+ console.log('[ComlinkBridgeChild] No bridge available');
37
+ return;
38
+ }
39
+ try {
40
+ // Get EIP-6963 wallets
41
+ console.log('[ComlinkBridgeChild] Fetching EIP-6963 wallets from parent...');
42
+ const eip6963Wallets = await this.bridge.getEIP6963Wallets();
43
+ console.log('[ComlinkBridgeChild] Received EIP-6963 wallets:', eip6963Wallets);
44
+ const eip6963WalletProxies = [];
45
+ for (const wallet of eip6963Wallets) {
46
+ eip6963WalletProxies.push({
47
+ info: wallet.info,
48
+ provider: {
49
+ request: wallet.methods['request'],
50
+ on: wallet.methods['on'],
51
+ removeListener: wallet.methods['removeListener']
52
+ }
53
+ });
54
+ }
55
+ // Save to window
56
+ ;
57
+ window.eip6963Wallets = eip6963WalletProxies;
58
+ // Get Wallet Standard wallets
59
+ const walletStandardWallets = await this.bridge.getWalletStandardWallets();
60
+ const walletStandardProxies = [];
61
+ for (const wallet of walletStandardWallets) {
62
+ walletStandardProxies.push({
63
+ name: wallet.name,
64
+ adapter: {
65
+ name: wallet.methods['name'],
66
+ publicKey: wallet.methods['publicKey'],
67
+ connect: wallet.methods['connect'],
68
+ signMessage: wallet.methods['signMessage'],
69
+ sendTransaction: wallet.methods['sendTransaction']
70
+ }
71
+ });
72
+ }
73
+ // Save to window
74
+ ;
75
+ window.walletStandardWallets = walletStandardProxies;
76
+ console.log('[ComlinkBridgeChild] Wallets loaded:', {
77
+ eip6963: eip6963WalletProxies.length,
78
+ walletStandard: walletStandardProxies.length
79
+ });
80
+ }
81
+ catch (error) {
82
+ console.error('[ComlinkBridgeChild] Failed to setup wallets:', error);
83
+ }
84
+ }
85
+ async refreshWallets() {
86
+ await this.waitForInit();
87
+ if (!this.bridge) {
88
+ console.error('[ComlinkBridgeChild] Bridge not initialized');
89
+ return;
90
+ }
91
+ await this.bridge.refreshWallets();
92
+ await this.setupWallets();
93
+ }
94
+ async waitForInit() {
95
+ if (this.initPromise) {
96
+ await this.initPromise;
97
+ }
98
+ }
99
+ isReady() {
100
+ return this.bridge !== null;
101
+ }
102
+ isRunningInIframe() {
103
+ return this.isInIframe;
104
+ }
105
+ }
106
+ // Auto-initialize on import
107
+ export const bridgeChild = new ComlinkBridgeChild();
108
+ //# sourceMappingURL=comlink-bridge-child.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comlink-bridge-child.js","sourceRoot":"","sources":["../src/comlink-bridge-child.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { BridgeChild } from './BridgeChild';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { BridgeChild } from './BridgeChild';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,58 @@
1
+ export interface RPCRequest {
2
+ id: string | number;
3
+ method: string;
4
+ params?: any[];
5
+ target?: {
6
+ type: 'eip6963' | 'wallet-standard' | 'adapter';
7
+ identifier: string;
8
+ };
9
+ }
10
+ export interface RPCResponse {
11
+ id: string | number;
12
+ result?: any;
13
+ error?: {
14
+ code: number;
15
+ message: string;
16
+ data?: any;
17
+ };
18
+ }
19
+ export interface Eip6963WalletInfo {
20
+ uuid: string;
21
+ info: {
22
+ uuid: string;
23
+ name: string;
24
+ icon: string;
25
+ rdns: string;
26
+ };
27
+ availableFunctions: string[];
28
+ availableProperties: string[];
29
+ propertyValues?: Record<string, any>;
30
+ }
31
+ export interface WalletStandardInfo {
32
+ name: string;
33
+ icon: string;
34
+ version: string;
35
+ chains: readonly string[];
36
+ features: string[];
37
+ availableFunctions: string[];
38
+ availableProperties: string[];
39
+ propertyValues?: Record<string, any>;
40
+ adapter: {
41
+ name: string;
42
+ icon: string;
43
+ version: string;
44
+ chains: readonly string[];
45
+ isSolana: boolean;
46
+ connected: boolean;
47
+ features: string[];
48
+ availableFunctions: string[];
49
+ availableProperties: string[];
50
+ propertyValues?: Record<string, any>;
51
+ };
52
+ }
53
+ export interface WalletMetadata {
54
+ eip6963: Eip6963WalletInfo[];
55
+ walletStandard: WalletStandardInfo[];
56
+ adapters: any[];
57
+ }
58
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAAA;QAC/C,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,GAAG,CAAA;KACX,CAAA;CACF;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IACD,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,kBAAkB,EAAE,MAAM,EAAE,CAAA;IAC5B,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACpC,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;QACzB,QAAQ,EAAE,OAAO,CAAA;QACjB,SAAS,EAAE,OAAO,CAAA;QAClB,QAAQ,EAAE,MAAM,EAAE,CAAA;QAClB,kBAAkB,EAAE,MAAM,EAAE,CAAA;QAC5B,mBAAmB,EAAE,MAAM,EAAE,CAAA;QAC7B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KACrC,CAAA;CACF;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,iBAAiB,EAAE,CAAA;IAC5B,cAAc,EAAE,kBAAkB,EAAE,CAAA;IACpC,QAAQ,EAAE,GAAG,EAAE,CAAA;CAChB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ export interface EIP6963ProviderInfo {
2
+ uuid: string;
3
+ name: string;
4
+ icon: string;
5
+ rdns: string;
6
+ }
7
+ export interface EIP6963WalletProxy {
8
+ uuid: string;
9
+ info: EIP6963ProviderInfo;
10
+ provider: Record<string, any>;
11
+ }
12
+ export interface WalletStandardProxy {
13
+ name: string;
14
+ icon: string;
15
+ chains: string[];
16
+ features: string[];
17
+ wallet: Record<string, any>;
18
+ adapter: Record<string, any>;
19
+ }
20
+ export interface BridgeAPI {
21
+ getEIP6963Wallets(): Promise<EIP6963WalletProxy[]>;
22
+ getWalletStandardWallets(): Promise<WalletStandardProxy[]>;
23
+ refreshWallets(): Promise<void>;
24
+ }
25
+ /**
26
+ * WalletBridgeChild - Automatically initializes when running in iframe
27
+ * and retrieves wallets from parent window
28
+ */
29
+ export declare class WalletBridgeChild {
30
+ private bridge;
31
+ private isInIframe;
32
+ private initPromise;
33
+ private eip6963Wallets;
34
+ private walletStandardWallets;
35
+ constructor();
36
+ private checkIfInIframe;
37
+ /**
38
+ * Initialize connection to parent window
39
+ */
40
+ private initialize;
41
+ /**
42
+ * Wait for initialization to complete
43
+ */
44
+ waitForInit(): Promise<void>;
45
+ /**
46
+ * Check if bridge is ready
47
+ */
48
+ isReady(): boolean;
49
+ /**
50
+ * Check if running in iframe
51
+ */
52
+ isRunningInIframe(): boolean;
53
+ /**
54
+ * Fetch wallets from parent
55
+ */
56
+ private fetchWallets;
57
+ /**
58
+ * Set up wallets in global window for discovery
59
+ */
60
+ private setupGlobalWallets;
61
+ /**
62
+ * Refresh wallets from parent
63
+ */
64
+ refreshWallets(): Promise<void>;
65
+ /**
66
+ * Get EIP-6963 wallets
67
+ */
68
+ getEIP6963Wallets(): EIP6963WalletProxy[];
69
+ /**
70
+ * Get Wallet Standard wallets
71
+ */
72
+ getWalletStandardWallets(): WalletStandardProxy[];
73
+ }
74
+ export declare const walletBridgeChild: WalletBridgeChild;
75
+ //# sourceMappingURL=wallet-bridge-child.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-bridge-child.d.ts","sourceRoot":"","sources":["../src/wallet-bridge-child.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,mBAAmB,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC7B;AAED,MAAM,WAAW,SAAS;IACxB,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAA;IAClD,wBAAwB,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAA;IAC1D,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,qBAAqB,CAA4B;;IAezD,OAAO,CAAC,eAAe;IAQvB;;OAEG;YACW,UAAU;IA+BxB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC;;OAEG;IACH,OAAO,IAAI,OAAO;IAOlB;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;OAEG;YACW,YAAY;IA4B1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsC1B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBrC;;OAEG;IACH,iBAAiB,IAAI,kBAAkB,EAAE;IAIzC;;OAEG;IACH,wBAAwB,IAAI,mBAAmB,EAAE;CAGlD;AAGD,eAAO,MAAM,iBAAiB,mBAA0B,CAAA"}
@@ -0,0 +1,168 @@
1
+ import * as Comlink from 'comlink';
2
+ /**
3
+ * WalletBridgeChild - Automatically initializes when running in iframe
4
+ * and retrieves wallets from parent window
5
+ */
6
+ export class WalletBridgeChild {
7
+ bridge = null;
8
+ isInIframe = false;
9
+ initPromise = null;
10
+ eip6963Wallets = [];
11
+ walletStandardWallets = [];
12
+ constructor() {
13
+ this.isInIframe = this.checkIfInIframe();
14
+ if (this.isInIframe) {
15
+ console.log('[WalletBridgeChild] Detected iframe environment, auto-initializing...');
16
+ this.initPromise = this.initialize();
17
+ }
18
+ else {
19
+ console.log('[WalletBridgeChild] Not in iframe, bridge disabled');
20
+ }
21
+ }
22
+ checkIfInIframe() {
23
+ try {
24
+ return window.self !== window.top;
25
+ }
26
+ catch {
27
+ return true;
28
+ }
29
+ }
30
+ /**
31
+ * Initialize connection to parent window
32
+ */
33
+ async initialize() {
34
+ console.log('[WalletBridgeChild] Initializing bridge connection...');
35
+ if (!window.parent) {
36
+ console.error('[WalletBridgeChild] No parent window found');
37
+ return;
38
+ }
39
+ // Wait a bit for parent to set up the bridge
40
+ await new Promise(resolve => setTimeout(resolve, 1000));
41
+ try {
42
+ // Connect to parent using Comlink
43
+ this.bridge = Comlink.wrap(Comlink.windowEndpoint(window.parent));
44
+ console.log('[WalletBridgeChild] Bridge connected, fetching wallets...');
45
+ // Fetch wallets from parent
46
+ await this.fetchWallets();
47
+ // Set up wallets in global window
48
+ this.setupGlobalWallets();
49
+ console.log('[WalletBridgeChild] Initialization complete');
50
+ }
51
+ catch (error) {
52
+ console.error('[WalletBridgeChild] Failed to initialize:', error);
53
+ }
54
+ }
55
+ /**
56
+ * Wait for initialization to complete
57
+ */
58
+ async waitForInit() {
59
+ if (this.initPromise) {
60
+ await this.initPromise;
61
+ }
62
+ }
63
+ /**
64
+ * Check if bridge is ready
65
+ */
66
+ isReady() {
67
+ return (this.bridge !== null &&
68
+ (this.eip6963Wallets.length > 0 || this.walletStandardWallets.length > 0));
69
+ }
70
+ /**
71
+ * Check if running in iframe
72
+ */
73
+ isRunningInIframe() {
74
+ return this.isInIframe;
75
+ }
76
+ /**
77
+ * Fetch wallets from parent
78
+ */
79
+ async fetchWallets() {
80
+ if (!this.bridge) {
81
+ console.error('[WalletBridgeChild] Bridge not initialized');
82
+ return;
83
+ }
84
+ try {
85
+ // Fetch EIP-6963 wallets
86
+ console.log('[WalletBridgeChild] Fetching EIP-6963 wallets...');
87
+ const eip6963Result = await this.bridge.getEIP6963Wallets();
88
+ console.log('[WalletBridgeChild] EIP-6963 result:', eip6963Result);
89
+ this.eip6963Wallets = eip6963Result || [];
90
+ console.log(`[WalletBridgeChild] Received ${this.eip6963Wallets.length} EIP-6963 wallets`, this.eip6963Wallets);
91
+ // Fetch Wallet Standard wallets
92
+ console.log('[WalletBridgeChild] Fetching Wallet Standard wallets...');
93
+ this.walletStandardWallets = await this.bridge.getWalletStandardWallets();
94
+ console.log(`[WalletBridgeChild] Received ${this.walletStandardWallets.length} Wallet Standard wallets`);
95
+ }
96
+ catch (error) {
97
+ console.error('[WalletBridgeChild] Failed to fetch wallets:', error);
98
+ }
99
+ }
100
+ /**
101
+ * Set up wallets in global window for discovery
102
+ */
103
+ setupGlobalWallets() {
104
+ // Set up EIP-6963 wallets
105
+ const eip6963WalletProxies = [];
106
+ for (const wallet of this.eip6963Wallets) {
107
+ eip6963WalletProxies.push({
108
+ info: wallet.info,
109
+ provider: wallet.provider
110
+ });
111
+ }
112
+ // Store in window for discovery
113
+ ;
114
+ window.eip6963Wallets = eip6963WalletProxies;
115
+ console.log(`[WalletBridgeChild] Set ${eip6963WalletProxies.length} EIP-6963 wallets in window.eip6963Wallets`);
116
+ // Set up Wallet Standard wallets
117
+ const walletStandardProxies = [];
118
+ for (const wallet of this.walletStandardWallets) {
119
+ walletStandardProxies.push({
120
+ name: wallet.name,
121
+ icon: wallet.icon,
122
+ chains: wallet.chains,
123
+ features: wallet.features,
124
+ wallet: wallet.wallet,
125
+ adapter: wallet.adapter
126
+ });
127
+ }
128
+ // Store in window for discovery
129
+ ;
130
+ window.walletStandardWallets = walletStandardProxies;
131
+ console.log(`[WalletBridgeChild] Set ${walletStandardProxies.length} Wallet Standard wallets in window.walletStandardWallets`);
132
+ }
133
+ /**
134
+ * Refresh wallets from parent
135
+ */
136
+ async refreshWallets() {
137
+ await this.waitForInit();
138
+ if (!this.bridge) {
139
+ console.error('[WalletBridgeChild] Bridge not initialized');
140
+ return;
141
+ }
142
+ console.log('[WalletBridgeChild] Refreshing wallets...');
143
+ try {
144
+ await this.bridge.refreshWallets();
145
+ await this.fetchWallets();
146
+ this.setupGlobalWallets();
147
+ console.log('[WalletBridgeChild] Wallets refreshed');
148
+ }
149
+ catch (error) {
150
+ console.error('[WalletBridgeChild] Failed to refresh wallets:', error);
151
+ }
152
+ }
153
+ /**
154
+ * Get EIP-6963 wallets
155
+ */
156
+ getEIP6963Wallets() {
157
+ return this.eip6963Wallets;
158
+ }
159
+ /**
160
+ * Get Wallet Standard wallets
161
+ */
162
+ getWalletStandardWallets() {
163
+ return this.walletStandardWallets;
164
+ }
165
+ }
166
+ // Export singleton instance that auto-initializes
167
+ export const walletBridgeChild = new WalletBridgeChild();
168
+ //# sourceMappingURL=wallet-bridge-child.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-bridge-child.js","sourceRoot":"","sources":["../src/wallet-bridge-child.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { BridgeChild } from './bridge-child';
2
+ /**
3
+ * Proxy class that provides a wallet-like interface for RPC calls
4
+ */
5
+ export declare class WalletProxy {
6
+ private child;
7
+ private type;
8
+ private identifier;
9
+ private metadata;
10
+ constructor(child: BridgeChild, type: 'eip6963' | 'wallet-standard' | 'adapter', identifier: string, metadata: any);
11
+ /**
12
+ * Call any method on the remote wallet/provider/adapter
13
+ */
14
+ call(method: string, ...params: any[]): Promise<any>;
15
+ /**
16
+ * Get wallet/provider name
17
+ */
18
+ get name(): string;
19
+ /**
20
+ * Get wallet/provider icon
21
+ */
22
+ get icon(): string;
23
+ /**
24
+ * Get full metadata
25
+ */
26
+ getMetadata(): any;
27
+ /**
28
+ * Create a function that calls a specific method
29
+ */
30
+ createMethod(methodName: string): (...args: any[]) => Promise<any>;
31
+ /**
32
+ * Common wallet methods (shortcuts)
33
+ */
34
+ connect(): Promise<any>;
35
+ disconnect(): Promise<any>;
36
+ signMessage(message: any): Promise<any>;
37
+ signTransaction(transaction: any): Promise<any>;
38
+ signAndSendTransaction(transaction: any): Promise<any>;
39
+ request(args: {
40
+ method: string;
41
+ params?: any[];
42
+ }): Promise<any>;
43
+ isConnected(): Promise<boolean>;
44
+ }
45
+ //# sourceMappingURL=wallet-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-proxy.d.ts","sourceRoot":"","sources":["../src/wallet-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C;;GAEG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ;gBAHR,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,SAAS,GAAG,iBAAiB,GAAG,SAAS,EAC/C,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,GAAG;IAGvB;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAW1D;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,WAAW,IAAI,GAAG;IAIlB;;OAEG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC;IAIlE;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;IAIvB,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IAI1B,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAIvC,eAAe,CAAC,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAI/C,sBAAsB,CAAC,WAAW,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAKtD,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAK/D,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAUtC"}
@@ -0,0 +1,88 @@
1
+ import { BridgeChild } from './bridge-child';
2
+ /**
3
+ * Proxy class that provides a wallet-like interface for RPC calls
4
+ */
5
+ export class WalletProxy {
6
+ child;
7
+ type;
8
+ identifier;
9
+ metadata;
10
+ constructor(child, type, identifier, metadata) {
11
+ this.child = child;
12
+ this.type = type;
13
+ this.identifier = identifier;
14
+ this.metadata = metadata;
15
+ }
16
+ /**
17
+ * Call any method on the remote wallet/provider/adapter
18
+ */
19
+ async call(method, ...params) {
20
+ switch (this.type) {
21
+ case 'eip6963':
22
+ return this.child.callProviderMethod(this.identifier, method, params);
23
+ case 'wallet-standard':
24
+ return this.child.callWalletMethod(this.identifier, method, params);
25
+ case 'adapter':
26
+ return this.child.callAdapterMethod(this.identifier, method, params);
27
+ }
28
+ }
29
+ /**
30
+ * Get wallet/provider name
31
+ */
32
+ get name() {
33
+ return this.metadata.name;
34
+ }
35
+ /**
36
+ * Get wallet/provider icon
37
+ */
38
+ get icon() {
39
+ return this.metadata.icon;
40
+ }
41
+ /**
42
+ * Get full metadata
43
+ */
44
+ getMetadata() {
45
+ return this.metadata;
46
+ }
47
+ /**
48
+ * Create a function that calls a specific method
49
+ */
50
+ createMethod(methodName) {
51
+ return (...args) => this.call(methodName, ...args);
52
+ }
53
+ /**
54
+ * Common wallet methods (shortcuts)
55
+ */
56
+ async connect() {
57
+ return this.call('connect');
58
+ }
59
+ async disconnect() {
60
+ return this.call('disconnect');
61
+ }
62
+ async signMessage(message) {
63
+ return this.call('signMessage', message);
64
+ }
65
+ async signTransaction(transaction) {
66
+ return this.call('signTransaction', transaction);
67
+ }
68
+ async signAndSendTransaction(transaction) {
69
+ return this.call('signAndSendTransaction', transaction);
70
+ }
71
+ // For EIP-6963 providers (Ethereum)
72
+ async request(args) {
73
+ return this.call('request', args);
74
+ }
75
+ // Get connected status (for adapters)
76
+ async isConnected() {
77
+ if (this.type === 'adapter') {
78
+ return this.metadata.connected || false;
79
+ }
80
+ try {
81
+ return await this.call('isConnected');
82
+ }
83
+ catch {
84
+ return false;
85
+ }
86
+ }
87
+ }
88
+ //# sourceMappingURL=wallet-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-proxy.js","sourceRoot":"","sources":["../src/wallet-proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C;;GAEG;AACH,MAAM,OAAO,WAAW;IAEZ;IACA;IACA;IACA;IAJV,YACU,KAAkB,EAClB,IAA+C,EAC/C,UAAkB,EAClB,QAAa;QAHb,UAAK,GAAL,KAAK,CAAa;QAClB,SAAI,GAAJ,IAAI,CAA2C;QAC/C,eAAU,GAAV,UAAU,CAAQ;QAClB,aAAQ,GAAR,QAAQ,CAAK;IACpB,CAAC;IAEJ;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,GAAG,MAAa;QACzC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;YACvE,KAAK,iBAAiB;gBACpB,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;YACrE,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QACxE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA;IAC3B,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA;IAC3B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,UAAkB;QAC7B,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAA;IAC3D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAY;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,WAAgB;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAA;IAClD,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,WAAgB;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAA;IACzD,CAAC;IAED,oCAAoC;IACpC,KAAK,CAAC,OAAO,CAAC,IAAwC;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IACnC,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,WAAW;QACf,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,KAAK,CAAA;QACzC,CAAC;QACD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@meshconnect/uwc-bridge-child",
3
+ "version": "0.0.2",
4
+ "description": "Child iframe bridge for Universal Wallet Connector",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "default": "./dist/index.js"
11
+ }
12
+ },
13
+ "dependencies": {
14
+ "comlink": "^4.4.1"
15
+ },
16
+ "devDependencies": {
17
+ "typescript": "^5.3.3",
18
+ "eslint": "^8.56.0"
19
+ },
20
+ "peerDependencies": {},
21
+ "files": [
22
+ "dist",
23
+ "src"
24
+ ],
25
+ "license": "MIT",
26
+ "scripts": {
27
+ "build": "tsc",
28
+ "dev": "tsc --watch",
29
+ "lint": "eslint src",
30
+ "type-check": "tsc --noEmit"
31
+ }
32
+ }
@@ -0,0 +1,148 @@
1
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
2
+ // @ts-nocheck
3
+
4
+ import * as Comlink from 'comlink'
5
+
6
+ // Define the expected parent API interface locally
7
+ interface ParentAPI {
8
+ eip6963Wallets: unknown[]
9
+ eip6963WalletsReady: boolean
10
+ walletStandardWallets: unknown[]
11
+ walletStandardWalletsReady: boolean
12
+ }
13
+
14
+ export class BridgeChild {
15
+ private parentAPI?: Comlink.Remote<ParentAPI>
16
+
17
+ constructor() {
18
+ this.initializeConnection()
19
+ }
20
+
21
+ private async initializeConnection(): Promise<void> {
22
+ if (!window.parent || window.parent === window) {
23
+ return
24
+ }
25
+ window.UWCBridgeInitialized = true
26
+
27
+ this.parentAPI = Comlink.wrap<ParentAPI>(
28
+ Comlink.windowEndpoint(window.parent, self, '*')
29
+ )
30
+
31
+ this.pollForWallets()
32
+ }
33
+
34
+ private async pollForWallets(): Promise<void> {
35
+ const pollInterval = 100
36
+ const maxPollTime = 10000 // Poll for maximum 10 seconds
37
+ const startTime = Date.now()
38
+
39
+ const poll = () => {
40
+ // Check if we've exceeded the max poll time
41
+ if (Date.now() - startTime > maxPollTime) {
42
+ return
43
+ }
44
+
45
+ // Check if global variables are already set
46
+ if (
47
+ (window.eip6963Wallets && window.eip6963Wallets.length > 0) ||
48
+ (window.walletStandardWallets &&
49
+ window.walletStandardWallets.length > 0)
50
+ ) {
51
+ return
52
+ }
53
+
54
+ if (!this.parentAPI) {
55
+ setTimeout(poll, pollInterval)
56
+ return
57
+ }
58
+
59
+ // Create a timeout promise to prevent hanging
60
+ const timeoutPromise = new Promise((_, reject) => {
61
+ setTimeout(() => reject(new Error('Timeout accessing parent API')), 200)
62
+ })
63
+
64
+ // Try to check wallets with a timeout
65
+ Promise.race([this.checkWallets(), timeoutPromise])
66
+ .then(result => {
67
+ if (result === 'continue') {
68
+ // Continue polling
69
+ setTimeout(poll, pollInterval)
70
+ }
71
+ // If result is 'stop', polling will stop
72
+ })
73
+ .catch(_error => {
74
+ // Continue polling on error
75
+ setTimeout(poll, pollInterval)
76
+ })
77
+ }
78
+
79
+ // Start polling immediately
80
+ poll()
81
+ }
82
+
83
+ private async checkWallets(): Promise<string> {
84
+ try {
85
+ // Check if both EIP6963 and Wallet Standard wallets are ready
86
+ const eip6963Ready = await this.parentAPI?.eip6963WalletsReady
87
+ const walletStandardReady =
88
+ await this.parentAPI?.walletStandardWalletsReady
89
+
90
+ if (!eip6963Ready || !walletStandardReady) {
91
+ return 'continue'
92
+ }
93
+
94
+ // Get EIP6963 wallets
95
+ const availableEip6963Wallets =
96
+ await this.parentAPI?.eip6963Wallets.length
97
+ const eip6963Wallets = []
98
+
99
+ if (availableEip6963Wallets > 0) {
100
+ for (let index = 0; index < availableEip6963Wallets; index++) {
101
+ const wallet = {
102
+ uuid: await this.parentAPI.eip6963Wallets[index].uuid,
103
+ name: await this.parentAPI.eip6963Wallets[index].name,
104
+ icon: await this.parentAPI.eip6963Wallets[index].icon,
105
+ rdns: await this.parentAPI.eip6963Wallets[index].rdns,
106
+ provider: this.parentAPI.eip6963Wallets[index].provider
107
+ }
108
+ eip6963Wallets.push(wallet)
109
+ }
110
+ }
111
+
112
+ // Get Wallet Standard wallets
113
+ const availableWalletStandardWallets =
114
+ await this.parentAPI.walletStandardWallets.length
115
+ const walletStandardWallets = []
116
+
117
+ if (availableWalletStandardWallets > 0) {
118
+ for (let index = 0; index < availableWalletStandardWallets; index++) {
119
+ const wallet = {
120
+ uuid: await this.parentAPI.walletStandardWallets[index].uuid,
121
+ name: await this.parentAPI.walletStandardWallets[index].name,
122
+ chains: await this.parentAPI.walletStandardWallets[index].chains,
123
+ features:
124
+ await this.parentAPI.walletStandardWallets[index].features,
125
+ adapter: this.parentAPI.walletStandardWallets[index].adapter
126
+ }
127
+ walletStandardWallets.push(wallet)
128
+ }
129
+ }
130
+
131
+ // Set both wallet types on window
132
+ window.eip6963Wallets = eip6963Wallets
133
+ window.walletStandardWallets = walletStandardWallets
134
+
135
+ return 'stop'
136
+ } catch {
137
+ return 'continue'
138
+ }
139
+ }
140
+
141
+ getParentAPI(): Comlink.Remote<ParentAPI> | undefined {
142
+ return this.parentAPI
143
+ }
144
+
145
+ isConnected(): boolean {
146
+ return this.parentAPI !== undefined
147
+ }
148
+ }
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export { BridgeChild } from './BridgeChild'