@aztec/wallet-sdk 0.0.1-commit.d6f2b3f94 → 0.0.1-commit.d939eb5aa

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.
Files changed (58) hide show
  1. package/dest/base-wallet/base_wallet.d.ts +58 -39
  2. package/dest/base-wallet/base_wallet.d.ts.map +1 -1
  3. package/dest/base-wallet/base_wallet.js +194 -71
  4. package/dest/base-wallet/index.d.ts +2 -2
  5. package/dest/base-wallet/index.d.ts.map +1 -1
  6. package/dest/base-wallet/utils.d.ts +5 -3
  7. package/dest/base-wallet/utils.d.ts.map +1 -1
  8. package/dest/base-wallet/utils.js +10 -5
  9. package/dest/crypto.d.ts +39 -1
  10. package/dest/crypto.d.ts.map +1 -1
  11. package/dest/crypto.js +88 -0
  12. package/dest/extension/provider/extension_wallet.d.ts +4 -6
  13. package/dest/extension/provider/extension_wallet.d.ts.map +1 -1
  14. package/dest/extension/provider/extension_wallet.js +9 -2
  15. package/dest/extension/provider/index.d.ts +2 -2
  16. package/dest/extension/provider/index.d.ts.map +1 -1
  17. package/dest/iframe/handlers/iframe_connection_handler.d.ts +118 -0
  18. package/dest/iframe/handlers/iframe_connection_handler.d.ts.map +1 -0
  19. package/dest/iframe/handlers/iframe_connection_handler.js +228 -0
  20. package/dest/iframe/handlers/index.d.ts +2 -0
  21. package/dest/iframe/handlers/index.d.ts.map +1 -0
  22. package/dest/iframe/handlers/index.js +1 -0
  23. package/dest/iframe/provider/iframe_discovery.d.ts +25 -0
  24. package/dest/iframe/provider/iframe_discovery.d.ts.map +1 -0
  25. package/dest/iframe/provider/iframe_discovery.js +167 -0
  26. package/dest/iframe/provider/iframe_provider.d.ts +65 -0
  27. package/dest/iframe/provider/iframe_provider.d.ts.map +1 -0
  28. package/dest/iframe/provider/iframe_provider.js +257 -0
  29. package/dest/iframe/provider/iframe_wallet.d.ts +68 -0
  30. package/dest/iframe/provider/iframe_wallet.d.ts.map +1 -0
  31. package/dest/iframe/provider/iframe_wallet.js +200 -0
  32. package/dest/iframe/provider/index.d.ts +4 -0
  33. package/dest/iframe/provider/index.d.ts.map +1 -0
  34. package/dest/iframe/provider/index.js +3 -0
  35. package/dest/manager/types.d.ts +6 -5
  36. package/dest/manager/types.d.ts.map +1 -1
  37. package/dest/manager/wallet_manager.d.ts +1 -1
  38. package/dest/manager/wallet_manager.d.ts.map +1 -1
  39. package/dest/manager/wallet_manager.js +48 -18
  40. package/dest/types.d.ts +14 -2
  41. package/dest/types.d.ts.map +1 -1
  42. package/dest/types.js +4 -0
  43. package/package.json +12 -8
  44. package/src/base-wallet/base_wallet.ts +265 -127
  45. package/src/base-wallet/index.ts +6 -1
  46. package/src/base-wallet/utils.ts +15 -4
  47. package/src/crypto.ts +104 -0
  48. package/src/extension/provider/extension_wallet.ts +13 -10
  49. package/src/extension/provider/index.ts +1 -1
  50. package/src/iframe/handlers/iframe_connection_handler.ts +328 -0
  51. package/src/iframe/handlers/index.ts +7 -0
  52. package/src/iframe/provider/iframe_discovery.ts +185 -0
  53. package/src/iframe/provider/iframe_provider.ts +331 -0
  54. package/src/iframe/provider/iframe_wallet.ts +229 -0
  55. package/src/iframe/provider/index.ts +3 -0
  56. package/src/manager/types.ts +5 -4
  57. package/src/manager/wallet_manager.ts +55 -23
  58. 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 (!provider) {
111
- return;
133
+ if (provider) {
134
+ emit(provider);
112
135
  }
136
+ },
137
+ }).then(() => sourceComplete('extensions'));
138
+ }
113
139
 
114
- // Call user's callback if provided
115
- options.onWalletDiscovered?.(provider);
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
- // Also queue for async iterator
118
- if (pendingResolve) {
119
- const resolve = pendingResolve;
120
- pendingResolve = null;
121
- resolve({ value: provider, done: false });
122
- } else {
123
- pendingProviders.push(provider);
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
- }).then(markComplete);
127
- } else {
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
- return Promise.resolve(
200
- ExtensionWallet.create(
201
- connection.info.id,
202
- connection.port,
203
- connection.sharedKey,
204
- chainInfo,
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;