@aztec/wallet-sdk 0.0.1-commit.d1f2d6c → 0.0.1-commit.d20b825a7
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/dest/base-wallet/base_wallet.d.ts +93 -35
- package/dest/base-wallet/base_wallet.d.ts.map +1 -1
- package/dest/base-wallet/base_wallet.js +253 -69
- package/dest/base-wallet/index.d.ts +3 -2
- package/dest/base-wallet/index.d.ts.map +1 -1
- package/dest/base-wallet/index.js +1 -0
- package/dest/base-wallet/utils.d.ts +50 -0
- package/dest/base-wallet/utils.d.ts.map +1 -0
- package/dest/base-wallet/utils.js +133 -0
- package/dest/crypto.d.ts +39 -1
- package/dest/crypto.d.ts.map +1 -1
- package/dest/crypto.js +88 -0
- package/dest/extension/provider/extension_wallet.d.ts +4 -6
- package/dest/extension/provider/extension_wallet.d.ts.map +1 -1
- package/dest/extension/provider/extension_wallet.js +9 -2
- package/dest/extension/provider/index.d.ts +2 -2
- package/dest/extension/provider/index.d.ts.map +1 -1
- package/dest/iframe/handlers/iframe_connection_handler.d.ts +118 -0
- package/dest/iframe/handlers/iframe_connection_handler.d.ts.map +1 -0
- package/dest/iframe/handlers/iframe_connection_handler.js +228 -0
- package/dest/iframe/handlers/index.d.ts +2 -0
- package/dest/iframe/handlers/index.d.ts.map +1 -0
- package/dest/iframe/handlers/index.js +1 -0
- package/dest/iframe/provider/iframe_discovery.d.ts +25 -0
- package/dest/iframe/provider/iframe_discovery.d.ts.map +1 -0
- package/dest/iframe/provider/iframe_discovery.js +167 -0
- package/dest/iframe/provider/iframe_provider.d.ts +65 -0
- package/dest/iframe/provider/iframe_provider.d.ts.map +1 -0
- package/dest/iframe/provider/iframe_provider.js +257 -0
- package/dest/iframe/provider/iframe_wallet.d.ts +68 -0
- package/dest/iframe/provider/iframe_wallet.d.ts.map +1 -0
- package/dest/iframe/provider/iframe_wallet.js +200 -0
- package/dest/iframe/provider/index.d.ts +4 -0
- package/dest/iframe/provider/index.d.ts.map +1 -0
- package/dest/iframe/provider/index.js +3 -0
- package/dest/manager/types.d.ts +6 -5
- package/dest/manager/types.d.ts.map +1 -1
- package/dest/manager/wallet_manager.d.ts +1 -1
- package/dest/manager/wallet_manager.d.ts.map +1 -1
- package/dest/manager/wallet_manager.js +48 -18
- package/dest/types.d.ts +14 -2
- package/dest/types.d.ts.map +1 -1
- package/dest/types.js +4 -0
- package/package.json +19 -9
- package/src/base-wallet/base_wallet.ts +347 -122
- package/src/base-wallet/index.ts +7 -1
- package/src/base-wallet/utils.ts +240 -0
- package/src/crypto.ts +104 -0
- package/src/extension/provider/extension_wallet.ts +13 -10
- package/src/extension/provider/index.ts +1 -1
- package/src/iframe/handlers/iframe_connection_handler.ts +328 -0
- package/src/iframe/handlers/index.ts +7 -0
- package/src/iframe/provider/iframe_discovery.ts +185 -0
- package/src/iframe/provider/iframe_provider.ts +331 -0
- package/src/iframe/provider/iframe_wallet.ts +229 -0
- package/src/iframe/provider/index.ts +3 -0
- package/src/manager/types.ts +5 -4
- package/src/manager/wallet_manager.ts +55 -23
- package/src/types.ts +13 -0
|
@@ -2,6 +2,7 @@ import type { ChainInfo } from '@aztec/aztec.js/account';
|
|
|
2
2
|
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
3
3
|
|
|
4
4
|
import { type DiscoveredWallet, ExtensionProvider, ExtensionWallet } from '../extension/provider/index.js';
|
|
5
|
+
import { discoverWebWallets } from '../iframe/provider/iframe_discovery.js';
|
|
5
6
|
import { WalletMessageType } from '../types.js';
|
|
6
7
|
import type {
|
|
7
8
|
DiscoverWalletsOptions,
|
|
@@ -88,6 +89,20 @@ export class WalletManager {
|
|
|
88
89
|
|
|
89
90
|
const { promise: donePromise, resolve: resolveDone } = promiseWithResolvers<void>();
|
|
90
91
|
|
|
92
|
+
const pendingSources = new Set<string>();
|
|
93
|
+
|
|
94
|
+
const emit = (provider: WalletProvider) => {
|
|
95
|
+
options.onWalletDiscovered?.(provider);
|
|
96
|
+
|
|
97
|
+
if (pendingResolve) {
|
|
98
|
+
const resolve = pendingResolve;
|
|
99
|
+
pendingResolve = null;
|
|
100
|
+
resolve({ value: provider, done: false });
|
|
101
|
+
} else {
|
|
102
|
+
pendingProviders.push(provider);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
|
|
91
106
|
const markComplete = () => {
|
|
92
107
|
completed = true;
|
|
93
108
|
resolveDone();
|
|
@@ -98,7 +113,15 @@ export class WalletManager {
|
|
|
98
113
|
}
|
|
99
114
|
};
|
|
100
115
|
|
|
116
|
+
const sourceComplete = (source: string) => {
|
|
117
|
+
pendingSources.delete(source);
|
|
118
|
+
if (pendingSources.size === 0) {
|
|
119
|
+
markComplete();
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
101
123
|
if (this.config.extensions?.enabled) {
|
|
124
|
+
pendingSources.add('extensions');
|
|
102
125
|
const extensionConfig = this.config.extensions;
|
|
103
126
|
|
|
104
127
|
void ExtensionProvider.discoverWallets(chainInfo, {
|
|
@@ -107,24 +130,35 @@ export class WalletManager {
|
|
|
107
130
|
signal: abortController.signal,
|
|
108
131
|
onWalletDiscovered: discoveredWallet => {
|
|
109
132
|
const provider = this.createProviderFromDiscoveredWallet(discoveredWallet, chainInfo, extensionConfig);
|
|
110
|
-
if (
|
|
111
|
-
|
|
133
|
+
if (provider) {
|
|
134
|
+
emit(provider);
|
|
112
135
|
}
|
|
136
|
+
},
|
|
137
|
+
}).then(() => sourceComplete('extensions'));
|
|
138
|
+
}
|
|
113
139
|
|
|
114
|
-
|
|
115
|
-
|
|
140
|
+
if (this.config.webWallets?.urls && this.config.webWallets.urls.length > 0) {
|
|
141
|
+
pendingSources.add('webWallets');
|
|
142
|
+
const webSession = discoverWebWallets(this.config.webWallets.urls, chainInfo);
|
|
116
143
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
144
|
+
// Forward discovered web wallets into the shared iterator
|
|
145
|
+
void (async () => {
|
|
146
|
+
try {
|
|
147
|
+
for await (const provider of webSession.wallets) {
|
|
148
|
+
if (abortController.signal.aborted) {
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
emit(provider);
|
|
124
152
|
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
|
|
153
|
+
} finally {
|
|
154
|
+
sourceComplete('webWallets');
|
|
155
|
+
}
|
|
156
|
+
})();
|
|
157
|
+
|
|
158
|
+
abortController.signal.addEventListener('abort', () => webSession.cancel(), { once: true });
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (pendingSources.size === 0) {
|
|
128
162
|
markComplete();
|
|
129
163
|
}
|
|
130
164
|
|
|
@@ -196,15 +230,14 @@ export class WalletManager {
|
|
|
196
230
|
return {
|
|
197
231
|
verificationHash: connection.info.verificationHash!,
|
|
198
232
|
confirm: () => {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
connectAppId,
|
|
206
|
-
),
|
|
233
|
+
extensionWallet = ExtensionWallet.create(
|
|
234
|
+
connection.info.id,
|
|
235
|
+
connection.port,
|
|
236
|
+
connection.sharedKey,
|
|
237
|
+
chainInfo,
|
|
238
|
+
connectAppId,
|
|
207
239
|
);
|
|
240
|
+
return Promise.resolve(extensionWallet.asWallet());
|
|
208
241
|
},
|
|
209
242
|
cancel: () => {
|
|
210
243
|
// Send disconnect to terminate the session on the extension side
|
|
@@ -213,7 +246,6 @@ export class WalletManager {
|
|
|
213
246
|
type: WalletMessageType.DISCONNECT,
|
|
214
247
|
requestId: discoveredWallet.requestId,
|
|
215
248
|
});
|
|
216
|
-
// Don't close the port - allow retry with fresh key exchange
|
|
217
249
|
},
|
|
218
250
|
};
|
|
219
251
|
},
|
package/src/types.ts
CHANGED
|
@@ -17,6 +17,14 @@ export enum WalletMessageType {
|
|
|
17
17
|
KEY_EXCHANGE_REQUEST = 'aztec-wallet-key-exchange-request',
|
|
18
18
|
/** Key exchange response sent over MessageChannel */
|
|
19
19
|
KEY_EXCHANGE_RESPONSE = 'aztec-wallet-key-exchange-response',
|
|
20
|
+
/** Wallet ready signal */
|
|
21
|
+
WALLET_READY = 'aztec-wallet-ready',
|
|
22
|
+
/** Encrypted wallet message wrapper */
|
|
23
|
+
SECURE_MESSAGE = 'aztec-wallet-secure-message',
|
|
24
|
+
/** Encrypted wallet response wrapper */
|
|
25
|
+
SECURE_RESPONSE = 'aztec-wallet-secure-response',
|
|
26
|
+
/** Session disconnected notification */
|
|
27
|
+
SESSION_DISCONNECTED = 'aztec-wallet-session-disconnected',
|
|
20
28
|
}
|
|
21
29
|
|
|
22
30
|
/**
|
|
@@ -130,3 +138,8 @@ export interface KeyExchangeResponse {
|
|
|
130
138
|
/** Wallet's ECDH public key for deriving shared secret */
|
|
131
139
|
publicKey: ExportedPublicKey;
|
|
132
140
|
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Callback invoked when a wallet connection is disconnected.
|
|
144
|
+
*/
|
|
145
|
+
export type DisconnectCallback = () => void;
|