@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.
- package/dist/BridgeChild.d.ts +18 -0
- package/dist/BridgeChild.d.ts.map +1 -0
- package/dist/BridgeChild.js +111 -0
- package/dist/BridgeChild.js.map +1 -0
- package/dist/bridge-child.d.ts +19 -0
- package/dist/bridge-child.d.ts.map +1 -0
- package/dist/bridge-child.js +169 -0
- package/dist/bridge-child.js.map +1 -0
- package/dist/comlink-bridge-child.d.ts +15 -0
- package/dist/comlink-bridge-child.d.ts.map +1 -0
- package/dist/comlink-bridge-child.js +108 -0
- package/dist/comlink-bridge-child.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/wallet-bridge-child.d.ts +75 -0
- package/dist/wallet-bridge-child.d.ts.map +1 -0
- package/dist/wallet-bridge-child.js +168 -0
- package/dist/wallet-bridge-child.js.map +1 -0
- package/dist/wallet-proxy.d.ts +45 -0
- package/dist/wallet-proxy.d.ts.map +1 -0
- package/dist/wallet-proxy.js +88 -0
- package/dist/wallet-proxy.js.map +1 -0
- package/package.json +32 -0
- package/src/BridgeChild.ts +148 -0
- package/src/index.ts +1 -0
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AA+BlC;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,GAAqC,IAAI,CAAA;IAC/C,UAAU,GAAY,KAAK,CAAA;IAC3B,WAAW,GAAyB,IAAI,CAAA;IACxC,cAAc,GAAyB,EAAE,CAAA;IACzC,qBAAqB,GAA0B,EAAE,CAAA;IAEzD;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAExC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CACT,uEAAuE,CACxE,CAAA;YACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QACtC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAA;QACnE,CAAC;IACH,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC;YACH,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,CAAA;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU;QACtB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAA;QAEpE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAA;YAC3D,OAAM;QACR,CAAC;QAED,6CAA6C;QAC7C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;QAEvD,IAAI,CAAC;YACH,kCAAkC;YAClC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CACxB,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CACtC,CAAA;YAED,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAA;YAExE,4BAA4B;YAC5B,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;YAEzB,kCAAkC;YAClC,IAAI,CAAC,kBAAkB,EAAE,CAAA;YAEzB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAA;QAC5D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAA;QACnE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,WAAW,CAAA;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,CACL,IAAI,CAAC,MAAM,KAAK,IAAI;YACpB,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC,CAC1E,CAAA;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,UAAU,CAAA;IACxB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAA;YAC3D,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,yBAAyB;YACzB,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAA;YAC/D,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAA;YAC3D,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,aAAa,CAAC,CAAA;YAClE,IAAI,CAAC,cAAc,GAAG,aAAa,IAAI,EAAE,CAAA;YACzC,OAAO,CAAC,GAAG,CACT,gCAAgC,IAAI,CAAC,cAAc,CAAC,MAAM,mBAAmB,EAC7E,IAAI,CAAC,cAAc,CACpB,CAAA;YAED,gCAAgC;YAChC,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAA;YACtE,IAAI,CAAC,qBAAqB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAA;YACzE,OAAO,CAAC,GAAG,CACT,gCAAgC,IAAI,CAAC,qBAAqB,CAAC,MAAM,0BAA0B,CAC5F,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAA;QACtE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,0BAA0B;QAC1B,MAAM,oBAAoB,GAAU,EAAE,CAAA;QAEtC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzC,oBAAoB,CAAC,IAAI,CAAC;gBACxB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC,CAAA;QACJ,CAAC;QAED,gCAAgC;QAChC,CAAC;QAAC,MAAc,CAAC,cAAc,GAAG,oBAAoB,CAAA;QACtD,OAAO,CAAC,GAAG,CACT,2BAA2B,oBAAoB,CAAC,MAAM,4CAA4C,CACnG,CAAA;QAED,iCAAiC;QACjC,MAAM,qBAAqB,GAAU,EAAE,CAAA;QAEvC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChD,qBAAqB,CAAC,IAAI,CAAC;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAA;QACJ,CAAC;QAED,gCAAgC;QAChC,CAAC;QAAC,MAAc,CAAC,qBAAqB,GAAG,qBAAqB,CAAA;QAC9D,OAAO,CAAC,GAAG,CACT,2BAA2B,qBAAqB,CAAC,MAAM,0DAA0D,CAClH,CAAA;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;QAExB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAA;YAC3D,OAAM;QACR,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;QAExD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAA;YAClC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;YACzB,IAAI,CAAC,kBAAkB,EAAE,CAAA;YACzB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAA;QACxE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,wBAAwB;QACtB,OAAO,IAAI,CAAC,qBAAqB,CAAA;IACnC,CAAC;CACF;AAED,kDAAkD;AAClD,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAA"}
|
|
@@ -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'
|