@meshconnect/uwc-bridge-parent 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/BridgeParent.d.ts +58 -0
- package/dist/BridgeParent.d.ts.map +1 -0
- package/dist/BridgeParent.js +127 -0
- package/dist/BridgeParent.js.map +1 -0
- package/dist/bridge-parent.d.ts +27 -0
- package/dist/bridge-parent.d.ts.map +1 -0
- package/dist/bridge-parent.js +148 -0
- package/dist/bridge-parent.js.map +1 -0
- package/dist/comlink-bridge.d.ts +26 -0
- package/dist/comlink-bridge.d.ts.map +1 -0
- package/dist/comlink-bridge.js +126 -0
- package/dist/comlink-bridge.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/postmate-bridge.d.ts +37 -0
- package/dist/postmate-bridge.d.ts.map +1 -0
- package/dist/postmate-bridge.js +631 -0
- package/dist/postmate-bridge.js.map +1 -0
- package/dist/standard-wallet-adapter.d.ts +17 -0
- package/dist/standard-wallet-adapter.d.ts.map +1 -0
- package/dist/standard-wallet-adapter.js +53 -0
- package/dist/standard-wallet-adapter.js.map +1 -0
- package/dist/types.d.ts +30 -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-parent.d.ts +41 -0
- package/dist/wallet-bridge-parent.d.ts.map +1 -0
- package/dist/wallet-bridge-parent.js +224 -0
- package/dist/wallet-bridge-parent.js.map +1 -0
- package/dist/wallet-bridge.d.ts +38 -0
- package/dist/wallet-bridge.d.ts.map +1 -0
- package/dist/wallet-bridge.js +71 -0
- package/dist/wallet-bridge.js.map +1 -0
- package/package.json +36 -0
- package/src/BridgeParent.ts +216 -0
- package/src/index.ts +2 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { WalletAdapter } from '@solana/wallet-adapter-base';
|
|
2
|
+
export interface EthereumProvider {
|
|
3
|
+
request: (args: {
|
|
4
|
+
method: string;
|
|
5
|
+
params?: unknown[];
|
|
6
|
+
}) => Promise<any>;
|
|
7
|
+
on?: (event: string, handler: (...args: any[]) => void) => void;
|
|
8
|
+
removeListener?: (event: string, handler: (...args: any[]) => void) => void;
|
|
9
|
+
}
|
|
10
|
+
export interface WalletStandardInfo {
|
|
11
|
+
uuid: string;
|
|
12
|
+
name: string;
|
|
13
|
+
chains: string[];
|
|
14
|
+
features: string[];
|
|
15
|
+
adapter: WalletAdapter | undefined;
|
|
16
|
+
}
|
|
17
|
+
export interface EIP6963ProviderInfo {
|
|
18
|
+
uuid: string;
|
|
19
|
+
name: string;
|
|
20
|
+
icon: string;
|
|
21
|
+
rdns: string;
|
|
22
|
+
}
|
|
23
|
+
export interface EIP6963ProviderDetail {
|
|
24
|
+
info: EIP6963ProviderInfo;
|
|
25
|
+
provider: EthereumProvider;
|
|
26
|
+
}
|
|
27
|
+
export interface EIP6963AnnounceProviderEvent extends CustomEvent {
|
|
28
|
+
type: 'eip6963:announceProvider';
|
|
29
|
+
detail: EIP6963ProviderDetail;
|
|
30
|
+
}
|
|
31
|
+
export interface EIP6963RequestProviderEvent extends Event {
|
|
32
|
+
type: 'eip6963:requestProvider';
|
|
33
|
+
}
|
|
34
|
+
export interface DetectedWallet {
|
|
35
|
+
uuid: string;
|
|
36
|
+
name: string;
|
|
37
|
+
icon: string;
|
|
38
|
+
rdns: string;
|
|
39
|
+
provider: EthereumProvider;
|
|
40
|
+
}
|
|
41
|
+
export interface ParentAPI {
|
|
42
|
+
eip6963Wallets: DetectedWallet[];
|
|
43
|
+
eip6963WalletsReady: boolean;
|
|
44
|
+
walletStandardWallets: WalletStandardInfo[];
|
|
45
|
+
walletStandardWalletsReady: boolean;
|
|
46
|
+
}
|
|
47
|
+
export declare class BridgeParent {
|
|
48
|
+
private iframe;
|
|
49
|
+
private handshakeComplete;
|
|
50
|
+
constructor(iframe: HTMLIFrameElement);
|
|
51
|
+
private initializeConnection;
|
|
52
|
+
isConnected(): boolean;
|
|
53
|
+
private discoverWallets;
|
|
54
|
+
private getSolanaWallets;
|
|
55
|
+
private isSolanaWallet;
|
|
56
|
+
private generateWalletId;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=BridgeParent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BridgeParent.d.ts","sourceRoot":"","sources":["../src/BridgeParent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAOhE,MAAM,WAAW,gBAAgB;IAE/B,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEvE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;IAE/D,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;CAC5E;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,EAAE,aAAa,GAAG,SAAS,CAAA;CACnC;AAED,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,qBAAqB;IACpC,IAAI,EAAE,mBAAmB,CAAA;IACzB,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AAED,MAAM,WAAW,4BAA6B,SAAQ,WAAW;IAC/D,IAAI,EAAE,0BAA0B,CAAA;IAChC,MAAM,EAAE,qBAAqB,CAAA;CAC9B;AAED,MAAM,WAAW,2BAA4B,SAAQ,KAAK;IACxD,IAAI,EAAE,yBAAyB,CAAA;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,cAAc,EAAE,CAAA;IAChC,mBAAmB,EAAE,OAAO,CAAA;IAC5B,qBAAqB,EAAE,kBAAkB,EAAE,CAAA;IAC3C,0BAA0B,EAAE,OAAO,CAAA;CACpC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,iBAAiB,CAAQ;gBAErB,MAAM,EAAE,iBAAiB;YASvB,oBAAoB;IA0BlC,WAAW,IAAI,OAAO;YAIR,eAAe;IA2C7B,OAAO,CAAC,gBAAgB;IAyDxB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,gBAAgB;CAIzB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import * as Comlink from 'comlink';
|
|
2
|
+
import { getWallets } from '@wallet-standard/app';
|
|
3
|
+
import { isWalletAdapterCompatibleStandardWallet } from '@solana/wallet-adapter-base';
|
|
4
|
+
import { StandardWalletAdapter } from '@solana/wallet-standard-wallet-adapter-base';
|
|
5
|
+
import { CoinbaseWalletAdapter } from '@solana/wallet-adapter-wallets';
|
|
6
|
+
export class BridgeParent {
|
|
7
|
+
iframe;
|
|
8
|
+
handshakeComplete = false;
|
|
9
|
+
constructor(iframe) {
|
|
10
|
+
if (!iframe) {
|
|
11
|
+
throw new Error('BridgeParent requires an iframe element');
|
|
12
|
+
}
|
|
13
|
+
this.iframe = iframe;
|
|
14
|
+
this.initializeConnection();
|
|
15
|
+
}
|
|
16
|
+
async initializeConnection() {
|
|
17
|
+
// Wait for iframe to be ready
|
|
18
|
+
if (!this.iframe.contentWindow) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const eip6963Wallets = await this.discoverWallets();
|
|
22
|
+
const walletStandardWallets = this.getSolanaWallets();
|
|
23
|
+
// Expose the parent API directly
|
|
24
|
+
const parentAPI = {
|
|
25
|
+
eip6963Wallets: eip6963Wallets,
|
|
26
|
+
eip6963WalletsReady: true,
|
|
27
|
+
walletStandardWallets: walletStandardWallets,
|
|
28
|
+
walletStandardWalletsReady: true
|
|
29
|
+
};
|
|
30
|
+
// Use Comlink's windowEndpoint with proper cross-origin support
|
|
31
|
+
// For cross-origin, we need to listen on the parent window, not access the iframe's window
|
|
32
|
+
Comlink.expose(parentAPI, Comlink.windowEndpoint(this.iframe.contentWindow, window, '*'));
|
|
33
|
+
this.handshakeComplete = true;
|
|
34
|
+
}
|
|
35
|
+
isConnected() {
|
|
36
|
+
return this.handshakeComplete;
|
|
37
|
+
}
|
|
38
|
+
async discoverWallets() {
|
|
39
|
+
return new Promise(resolve => {
|
|
40
|
+
const detectedWallets = [];
|
|
41
|
+
const timeout = 1000; // Wait up to 1 second for wallets to announce
|
|
42
|
+
// Set up listener for wallet announcements
|
|
43
|
+
const handleAnnouncement = (event) => {
|
|
44
|
+
const announcementEvent = event;
|
|
45
|
+
const { info, provider } = announcementEvent.detail;
|
|
46
|
+
// Check if wallet is already detected (by uuid)
|
|
47
|
+
const existingIndex = detectedWallets.findIndex(w => w.uuid === info.uuid);
|
|
48
|
+
if (existingIndex === -1) {
|
|
49
|
+
detectedWallets.push({
|
|
50
|
+
uuid: info.uuid,
|
|
51
|
+
name: info.name,
|
|
52
|
+
icon: info.icon,
|
|
53
|
+
rdns: info.rdns,
|
|
54
|
+
provider
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
// Listen for wallet announcements
|
|
59
|
+
window.addEventListener('eip6963:announceProvider', handleAnnouncement);
|
|
60
|
+
// Request wallets to announce themselves
|
|
61
|
+
window.dispatchEvent(new Event('eip6963:requestProvider'));
|
|
62
|
+
// Clean up and resolve after timeout
|
|
63
|
+
setTimeout(() => {
|
|
64
|
+
window.removeEventListener('eip6963:announceProvider', handleAnnouncement);
|
|
65
|
+
resolve(detectedWallets);
|
|
66
|
+
}, timeout);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
getSolanaWallets() {
|
|
70
|
+
const { get } = getWallets();
|
|
71
|
+
const wallets = get();
|
|
72
|
+
const solanaWallets = [];
|
|
73
|
+
const walletNames = new Set();
|
|
74
|
+
// First, get wallets from Wallet Standard
|
|
75
|
+
for (const wallet of wallets) {
|
|
76
|
+
// Check if this is a Solana wallet
|
|
77
|
+
if (this.isSolanaWallet(wallet)) {
|
|
78
|
+
let adapter;
|
|
79
|
+
if (isWalletAdapterCompatibleStandardWallet(wallet)) {
|
|
80
|
+
adapter = new StandardWalletAdapter({ wallet });
|
|
81
|
+
}
|
|
82
|
+
solanaWallets.push({
|
|
83
|
+
uuid: this.generateWalletId(wallet),
|
|
84
|
+
name: wallet.name,
|
|
85
|
+
chains: (wallet.chains || []),
|
|
86
|
+
features: Object.keys(wallet.features),
|
|
87
|
+
adapter: adapter
|
|
88
|
+
});
|
|
89
|
+
walletNames.add(wallet.name);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Initialize traditional wallet adapters - Only import CBW for now, as it's not using Wallet Standard
|
|
93
|
+
const walletAdapters = [new CoinbaseWalletAdapter()];
|
|
94
|
+
// Add traditional wallet adapters (but skip duplicates)
|
|
95
|
+
for (const adapter of walletAdapters) {
|
|
96
|
+
if (walletNames.has(adapter.name)) {
|
|
97
|
+
// Skipping duplicate wallet already detected via Wallet Standard
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const readyState = adapter.readyState;
|
|
101
|
+
const isDetected = readyState === 'Installed' || readyState === 'Loadable';
|
|
102
|
+
// Only add if installed
|
|
103
|
+
if (isDetected) {
|
|
104
|
+
solanaWallets.push({
|
|
105
|
+
uuid: `${adapter.name}-traditional`
|
|
106
|
+
.toLowerCase()
|
|
107
|
+
.replace(/\s+/g, '-'),
|
|
108
|
+
name: adapter.name,
|
|
109
|
+
chains: ['solana:mainnet'],
|
|
110
|
+
features: [],
|
|
111
|
+
adapter: adapter
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return solanaWallets;
|
|
116
|
+
}
|
|
117
|
+
isSolanaWallet(wallet) {
|
|
118
|
+
const chains = wallet.chains || [];
|
|
119
|
+
const hasSolanaChain = chains.some(chain => chain.startsWith('solana:'));
|
|
120
|
+
return hasSolanaChain;
|
|
121
|
+
}
|
|
122
|
+
generateWalletId(wallet) {
|
|
123
|
+
const chain = wallet.chains?.[0] || 'unknown';
|
|
124
|
+
return `${wallet.name}-${chain}`.toLowerCase().replace(/\s+/g, '-');
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=BridgeParent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BridgeParent.js","sourceRoot":"","sources":["../src/BridgeParent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Wallet } from '@wallet-standard/base';
|
|
2
|
+
import type { DetectedEip6963Wallet, DetectedWalletStandardWallet, EIP6963AnnounceProviderEvent, EIP6963ProviderDetail } from './types';
|
|
3
|
+
import { StandardWalletAdapter } from './standard-wallet-adapter';
|
|
4
|
+
declare global {
|
|
5
|
+
interface WindowEventMap {
|
|
6
|
+
'eip6963:announceProvider': EIP6963AnnounceProviderEvent;
|
|
7
|
+
'eip6963:requestProvider': Event;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export declare class BridgeParent {
|
|
11
|
+
private detectedEip6963Wallets;
|
|
12
|
+
private detectedWalletStandardWallets;
|
|
13
|
+
private walletStandardUnsubscribe?;
|
|
14
|
+
constructor();
|
|
15
|
+
private initialize;
|
|
16
|
+
private detectEIP6963Wallets;
|
|
17
|
+
private detectWalletStandardWallets;
|
|
18
|
+
private logAllWallets;
|
|
19
|
+
getDetectedEip6963Wallets(): Map<string, DetectedEip6963Wallet>;
|
|
20
|
+
getDetectedWalletStandardWallets(): Map<string, DetectedWalletStandardWallet>;
|
|
21
|
+
getEIP6963Providers(): Map<string, EIP6963ProviderDetail>;
|
|
22
|
+
getWalletStandardWallets(): Map<string, Wallet>;
|
|
23
|
+
getWalletStandardAdapters(): Map<string, StandardWalletAdapter>;
|
|
24
|
+
getWalletStandardAdapter(walletName: string): StandardWalletAdapter | undefined;
|
|
25
|
+
refreshDetection(): void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=bridge-parent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-parent.d.ts","sourceRoot":"","sources":["../src/bridge-parent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,KAAK,EACV,qBAAqB,EACrB,4BAA4B,EAC5B,4BAA4B,EAC5B,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAEjE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,cAAc;QACtB,0BAA0B,EAAE,4BAA4B,CAAA;QACxD,yBAAyB,EAAE,KAAK,CAAA;KACjC;CACF;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,sBAAsB,CAAgD;IAC9E,OAAO,CAAC,6BAA6B,CAGxB;IACb,OAAO,CAAC,yBAAyB,CAAC,CAAY;;IAM9C,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,2BAA2B;IA8DnC,OAAO,CAAC,aAAa;IAkCd,yBAAyB,IAAI,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAI/D,gCAAgC,IAAI,GAAG,CAC5C,MAAM,EACN,4BAA4B,CAC7B;IAKM,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAQzD,wBAAwB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAQ/C,yBAAyB,IAAI,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC;IAQ/D,wBAAwB,CAC7B,UAAU,EAAE,MAAM,GACjB,qBAAqB,GAAG,SAAS;IAK7B,gBAAgB,IAAI,IAAI;CAUhC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { getWallets } from '@wallet-standard/app';
|
|
2
|
+
import { StandardWalletAdapter } from './standard-wallet-adapter';
|
|
3
|
+
export class BridgeParent {
|
|
4
|
+
detectedEip6963Wallets = new Map();
|
|
5
|
+
detectedWalletStandardWallets = new Map();
|
|
6
|
+
walletStandardUnsubscribe;
|
|
7
|
+
constructor() {
|
|
8
|
+
this.initialize();
|
|
9
|
+
}
|
|
10
|
+
initialize() {
|
|
11
|
+
this.detectEIP6963Wallets();
|
|
12
|
+
this.detectWalletStandardWallets();
|
|
13
|
+
this.logAllWallets();
|
|
14
|
+
}
|
|
15
|
+
detectEIP6963Wallets() {
|
|
16
|
+
if (typeof window === 'undefined') {
|
|
17
|
+
console.warn('BridgeParent: Window is not available, skipping EIP-6963 detection');
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const handleAnnouncement = (event) => {
|
|
21
|
+
const { info, provider } = event.detail;
|
|
22
|
+
const detectedWallet = {
|
|
23
|
+
info,
|
|
24
|
+
provider
|
|
25
|
+
};
|
|
26
|
+
this.detectedEip6963Wallets.set(info.uuid, detectedWallet);
|
|
27
|
+
console.log(`EIP-6963 wallet detected:`, info, provider);
|
|
28
|
+
};
|
|
29
|
+
window.addEventListener('eip6963:announceProvider', handleAnnouncement);
|
|
30
|
+
window.dispatchEvent(new Event('eip6963:requestProvider'));
|
|
31
|
+
setTimeout(() => {
|
|
32
|
+
window.removeEventListener('eip6963:announceProvider', handleAnnouncement);
|
|
33
|
+
}, 3000);
|
|
34
|
+
}
|
|
35
|
+
detectWalletStandardWallets() {
|
|
36
|
+
if (typeof window === 'undefined') {
|
|
37
|
+
console.warn('BridgeParent: Window is not available, skipping Wallet Standard detection');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const { get, on } = getWallets();
|
|
42
|
+
const handleWallet = (wallet) => {
|
|
43
|
+
// Create adapter for the wallet
|
|
44
|
+
const adapter = new StandardWalletAdapter(wallet);
|
|
45
|
+
// Only add Solana wallets
|
|
46
|
+
if (!adapter.isSolana) {
|
|
47
|
+
console.log(`Skipping non-Solana wallet: ${wallet.name}`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const detectedWallet = {
|
|
51
|
+
wallet,
|
|
52
|
+
adapter
|
|
53
|
+
};
|
|
54
|
+
this.detectedWalletStandardWallets.set(wallet.name, detectedWallet);
|
|
55
|
+
console.log(`Solana Wallet Standard wallet detected:`, wallet);
|
|
56
|
+
console.log(` - Features:`, adapter.getFeatures());
|
|
57
|
+
};
|
|
58
|
+
// Get existing wallets
|
|
59
|
+
const existingWallets = get();
|
|
60
|
+
existingWallets.forEach(handleWallet);
|
|
61
|
+
// Listen for new wallets
|
|
62
|
+
const unsubscribe = on('register', (...wallets) => {
|
|
63
|
+
wallets.forEach(handleWallet);
|
|
64
|
+
});
|
|
65
|
+
// Listen for wallet unregistration
|
|
66
|
+
const unsubscribeUnregister = on('unregister', (...wallets) => {
|
|
67
|
+
wallets.forEach(wallet => {
|
|
68
|
+
this.detectedWalletStandardWallets.delete(wallet.name);
|
|
69
|
+
console.log(`Wallet Standard wallet unregistered: ${wallet.name}`);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
// Store unsubscribe functions for cleanup if needed
|
|
73
|
+
this.walletStandardUnsubscribe = () => {
|
|
74
|
+
unsubscribe();
|
|
75
|
+
unsubscribeUnregister();
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.log('BridgeParent: Wallet Standard not available or error during detection', error);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
logAllWallets() {
|
|
83
|
+
setTimeout(() => {
|
|
84
|
+
console.log('=== All Detected Wallet Providers (Filtered) ===');
|
|
85
|
+
const totalWallets = this.detectedEip6963Wallets.size +
|
|
86
|
+
this.detectedWalletStandardWallets.size;
|
|
87
|
+
console.log(`Total wallets detected: ${totalWallets}`);
|
|
88
|
+
if (this.detectedEip6963Wallets.size > 0) {
|
|
89
|
+
console.log('\nEIP-6963 Wallets:');
|
|
90
|
+
this.detectedEip6963Wallets.forEach((wallet, uuid) => {
|
|
91
|
+
console.log(` - ${wallet.info.name} (UUID: ${uuid}, RDNS: ${wallet.info.rdns})`);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
if (this.detectedWalletStandardWallets.size > 0) {
|
|
95
|
+
console.log('\nSolana Wallet Standard Wallets:');
|
|
96
|
+
this.detectedWalletStandardWallets.forEach((detected, name) => {
|
|
97
|
+
console.log(` - ${name} (Version: ${detected.wallet.version}, Chains: ${detected.wallet.chains.join(', ')})`);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
if (totalWallets === 0) {
|
|
101
|
+
console.log('No wallets detected');
|
|
102
|
+
}
|
|
103
|
+
console.log('=====================================');
|
|
104
|
+
}, 1000);
|
|
105
|
+
}
|
|
106
|
+
getDetectedEip6963Wallets() {
|
|
107
|
+
return new Map(this.detectedEip6963Wallets);
|
|
108
|
+
}
|
|
109
|
+
getDetectedWalletStandardWallets() {
|
|
110
|
+
return new Map(this.detectedWalletStandardWallets);
|
|
111
|
+
}
|
|
112
|
+
// Convenience methods for backward compatibility
|
|
113
|
+
getEIP6963Providers() {
|
|
114
|
+
const providers = new Map();
|
|
115
|
+
this.detectedEip6963Wallets.forEach((wallet, uuid) => {
|
|
116
|
+
providers.set(uuid, { info: wallet.info, provider: wallet.provider });
|
|
117
|
+
});
|
|
118
|
+
return providers;
|
|
119
|
+
}
|
|
120
|
+
getWalletStandardWallets() {
|
|
121
|
+
const wallets = new Map();
|
|
122
|
+
this.detectedWalletStandardWallets.forEach((detected, name) => {
|
|
123
|
+
wallets.set(name, detected.wallet);
|
|
124
|
+
});
|
|
125
|
+
return wallets;
|
|
126
|
+
}
|
|
127
|
+
getWalletStandardAdapters() {
|
|
128
|
+
const adapters = new Map();
|
|
129
|
+
this.detectedWalletStandardWallets.forEach((detected, name) => {
|
|
130
|
+
adapters.set(name, detected.adapter);
|
|
131
|
+
});
|
|
132
|
+
return adapters;
|
|
133
|
+
}
|
|
134
|
+
getWalletStandardAdapter(walletName) {
|
|
135
|
+
const detected = this.detectedWalletStandardWallets.get(walletName);
|
|
136
|
+
return detected?.adapter;
|
|
137
|
+
}
|
|
138
|
+
refreshDetection() {
|
|
139
|
+
// Clean up existing wallet standard subscription if exists
|
|
140
|
+
if (this.walletStandardUnsubscribe) {
|
|
141
|
+
this.walletStandardUnsubscribe();
|
|
142
|
+
}
|
|
143
|
+
this.detectedEip6963Wallets.clear();
|
|
144
|
+
this.detectedWalletStandardWallets.clear();
|
|
145
|
+
this.initialize();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=bridge-parent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-parent.js","sourceRoot":"","sources":["../src/bridge-parent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface WalletProxy {
|
|
2
|
+
uuid: string;
|
|
3
|
+
name: string;
|
|
4
|
+
info?: Record<string, unknown>;
|
|
5
|
+
methods: Record<string, unknown>;
|
|
6
|
+
}
|
|
7
|
+
export interface BridgeAPI {
|
|
8
|
+
getEIP6963Wallets(): Promise<WalletProxy[]>;
|
|
9
|
+
getWalletStandardWallets(): Promise<WalletProxy[]>;
|
|
10
|
+
refreshWallets(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Simple class to initialize Comlink bridge for an iframe
|
|
14
|
+
*/
|
|
15
|
+
export declare class ComlinkBridgeParent {
|
|
16
|
+
private bridge;
|
|
17
|
+
/**
|
|
18
|
+
* Connect to an iframe and set up the Comlink bridge
|
|
19
|
+
*/
|
|
20
|
+
connectToIframe(iframe: HTMLIFrameElement): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Refresh wallet detection
|
|
23
|
+
*/
|
|
24
|
+
refreshWallets(): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=comlink-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comlink-bridge.d.ts","sourceRoot":"","sources":["../src/comlink-bridge.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,SAAS;IACxB,iBAAiB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IAC3C,wBAAwB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IAClD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC;AAwGD;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAA4B;IAE1C;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB/D;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAMtC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import * as Comlink from 'comlink';
|
|
2
|
+
import { BridgeParent } from './bridge-parent';
|
|
3
|
+
class WalletBridge {
|
|
4
|
+
bridgeParent;
|
|
5
|
+
eip6963Wallets = [];
|
|
6
|
+
walletStandardWallets = [];
|
|
7
|
+
constructor() {
|
|
8
|
+
this.bridgeParent = new BridgeParent();
|
|
9
|
+
}
|
|
10
|
+
async initialize() {
|
|
11
|
+
// BridgeParent initializes itself in constructor
|
|
12
|
+
// Just refresh detection to ensure we have latest wallets
|
|
13
|
+
this.bridgeParent.refreshDetection();
|
|
14
|
+
await this.detectWallets();
|
|
15
|
+
}
|
|
16
|
+
async detectWallets() {
|
|
17
|
+
// Get EIP-6963 wallets from BridgeParent
|
|
18
|
+
const eip6963Wallets = this.bridgeParent.getDetectedEip6963Wallets();
|
|
19
|
+
this.eip6963Wallets = Array.from(eip6963Wallets.entries()).map(([uuid, wallet]) => {
|
|
20
|
+
const provider = wallet.provider;
|
|
21
|
+
return {
|
|
22
|
+
uuid,
|
|
23
|
+
name: wallet.info.name,
|
|
24
|
+
info: {
|
|
25
|
+
uuid,
|
|
26
|
+
name: wallet.info.name,
|
|
27
|
+
icon: wallet.info.icon,
|
|
28
|
+
rdns: wallet.info.rdns
|
|
29
|
+
},
|
|
30
|
+
methods: {
|
|
31
|
+
request: Comlink.proxy(provider.request.bind(provider)),
|
|
32
|
+
on: provider.on
|
|
33
|
+
? Comlink.proxy(provider.on.bind(provider))
|
|
34
|
+
: undefined,
|
|
35
|
+
removeListener: provider.removeListener
|
|
36
|
+
? Comlink.proxy(provider.removeListener.bind(provider))
|
|
37
|
+
: undefined
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
// Get Wallet Standard wallets from BridgeParent
|
|
42
|
+
const walletStandardAdapters = this.bridgeParent.getWalletStandardAdapters();
|
|
43
|
+
this.walletStandardWallets = Array.from(walletStandardAdapters.entries())
|
|
44
|
+
.filter(([_, adapter]) => adapter.getSolanaAdapter())
|
|
45
|
+
.map(([name, adapter]) => {
|
|
46
|
+
const solanaAdapter = adapter.getSolanaAdapter();
|
|
47
|
+
return {
|
|
48
|
+
uuid: name.toLowerCase().replace(/\s+/g, '-'),
|
|
49
|
+
name,
|
|
50
|
+
info: {
|
|
51
|
+
name,
|
|
52
|
+
chains: ['solana:mainnet'],
|
|
53
|
+
features: []
|
|
54
|
+
},
|
|
55
|
+
methods: {
|
|
56
|
+
connect: solanaAdapter?.connect
|
|
57
|
+
? Comlink.proxy(solanaAdapter.connect.bind(solanaAdapter))
|
|
58
|
+
: undefined,
|
|
59
|
+
signMessage: solanaAdapter?.signMessage
|
|
60
|
+
? Comlink.proxy(solanaAdapter.signMessage.bind(solanaAdapter))
|
|
61
|
+
: undefined,
|
|
62
|
+
sendTransaction: solanaAdapter?.sendTransaction
|
|
63
|
+
? Comlink.proxy(solanaAdapter.sendTransaction.bind(solanaAdapter))
|
|
64
|
+
: undefined,
|
|
65
|
+
get name() {
|
|
66
|
+
return solanaAdapter?.name;
|
|
67
|
+
},
|
|
68
|
+
get publicKey() {
|
|
69
|
+
return solanaAdapter?.publicKey;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
});
|
|
74
|
+
console.log(`[Comlink Bridge] Found ${this.eip6963Wallets.length} EIP-6963 and ${this.walletStandardWallets.length} Wallet Standard wallets`);
|
|
75
|
+
}
|
|
76
|
+
async getEIP6963Wallets() {
|
|
77
|
+
console.log('[Comlink Bridge] Sending EIP-6963 wallets to child');
|
|
78
|
+
return this.eip6963Wallets;
|
|
79
|
+
}
|
|
80
|
+
async getWalletStandardWallets() {
|
|
81
|
+
console.log('[Comlink Bridge] Sending Wallet Standard wallets to child');
|
|
82
|
+
return this.walletStandardWallets;
|
|
83
|
+
}
|
|
84
|
+
async refreshWallets() {
|
|
85
|
+
console.log('[Comlink Bridge] Refreshing wallets...');
|
|
86
|
+
await this.bridgeParent.refreshDetection();
|
|
87
|
+
await this.detectWallets();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Simple class to initialize Comlink bridge for an iframe
|
|
92
|
+
*/
|
|
93
|
+
export class ComlinkBridgeParent {
|
|
94
|
+
bridge = null;
|
|
95
|
+
/**
|
|
96
|
+
* Connect to an iframe and set up the Comlink bridge
|
|
97
|
+
*/
|
|
98
|
+
async connectToIframe(iframe) {
|
|
99
|
+
// Wait for iframe to load
|
|
100
|
+
await new Promise(resolve => {
|
|
101
|
+
if (iframe.contentWindow) {
|
|
102
|
+
resolve();
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
iframe.addEventListener('load', () => resolve(), { once: true });
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
console.log('[ComlinkBridgeParent] Setting up bridge...');
|
|
109
|
+
// Create and initialize bridge
|
|
110
|
+
this.bridge = new WalletBridge();
|
|
111
|
+
await this.bridge.initialize();
|
|
112
|
+
// Expose bridge to iframe using Comlink
|
|
113
|
+
Comlink.expose(this.bridge, Comlink.windowEndpoint(iframe.contentWindow));
|
|
114
|
+
console.log('[ComlinkBridgeParent] Bridge exposed to iframe');
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Refresh wallet detection
|
|
118
|
+
*/
|
|
119
|
+
async refreshWallets() {
|
|
120
|
+
if (!this.bridge) {
|
|
121
|
+
throw new Error('Bridge not initialized. Call connectToIframe first.');
|
|
122
|
+
}
|
|
123
|
+
await this.bridge.refreshWallets();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=comlink-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comlink-bridge.js","sourceRoot":"","sources":["../src/comlink-bridge.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,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,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,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BridgeParent } from './bridge-parent';
|
|
2
|
+
export interface RPCRequest {
|
|
3
|
+
id: string | number;
|
|
4
|
+
method: string;
|
|
5
|
+
params?: any[];
|
|
6
|
+
target?: {
|
|
7
|
+
type: 'eip6963' | 'wallet-standard' | 'adapter';
|
|
8
|
+
identifier: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export interface RPCResponse {
|
|
12
|
+
id: string | number;
|
|
13
|
+
result?: any;
|
|
14
|
+
error?: {
|
|
15
|
+
code: number;
|
|
16
|
+
message: string;
|
|
17
|
+
data?: any;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export declare class PostmateBridge {
|
|
21
|
+
private bridgeParent;
|
|
22
|
+
private iframe;
|
|
23
|
+
private messageHandlers;
|
|
24
|
+
private pendingRequests;
|
|
25
|
+
private handshakeComplete;
|
|
26
|
+
constructor(bridgeParent: BridgeParent);
|
|
27
|
+
private setupMessageHandlers;
|
|
28
|
+
initializeWithIframe(iframe: HTMLIFrameElement): Promise<void>;
|
|
29
|
+
private sendHandshake;
|
|
30
|
+
private handleMessage;
|
|
31
|
+
private getWalletsMetadata;
|
|
32
|
+
private handleGetProperty;
|
|
33
|
+
private handleRPC;
|
|
34
|
+
private serializeResult;
|
|
35
|
+
destroy(): void;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=postmate-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postmate-bridge.d.ts","sourceRoot":"","sources":["../src/postmate-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,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;AASD,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,eAAe,CAA6C;IACpE,OAAO,CAAC,eAAe,CAAkD;IACzE,OAAO,CAAC,iBAAiB,CAAQ;gBAErB,YAAY,EAAE,YAAY;IAKtC,OAAO,CAAC,oBAAoB;IAetB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBpE,OAAO,CAAC,aAAa;YAkBP,aAAa;IAiO3B,OAAO,CAAC,kBAAkB;YA4MZ,iBAAiB;YAmEjB,SAAS;IA4FvB,OAAO,CAAC,eAAe;IAiFhB,OAAO,IAAI,IAAI;CAOvB"}
|