@0xsequence/wallet-wdk 0.0.0-20250520201059

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 (173) hide show
  1. package/.env.test +3 -0
  2. package/.turbo/turbo-build.log +5 -0
  3. package/CHANGELOG.md +11 -0
  4. package/LICENSE +202 -0
  5. package/dist/dbs/auth-commitments.d.ts +17 -0
  6. package/dist/dbs/auth-commitments.d.ts.map +1 -0
  7. package/dist/dbs/auth-commitments.js +13 -0
  8. package/dist/dbs/auth-keys.d.ts +19 -0
  9. package/dist/dbs/auth-keys.d.ts.map +1 -0
  10. package/dist/dbs/auth-keys.js +67 -0
  11. package/dist/dbs/generic.d.ts +33 -0
  12. package/dist/dbs/generic.d.ts.map +1 -0
  13. package/dist/dbs/generic.js +170 -0
  14. package/dist/dbs/index.d.ts +12 -0
  15. package/dist/dbs/index.d.ts.map +1 -0
  16. package/dist/dbs/index.js +8 -0
  17. package/dist/dbs/messages.d.ts +6 -0
  18. package/dist/dbs/messages.d.ts.map +1 -0
  19. package/dist/dbs/messages.js +13 -0
  20. package/dist/dbs/recovery.d.ts +6 -0
  21. package/dist/dbs/recovery.d.ts.map +1 -0
  22. package/dist/dbs/recovery.js +13 -0
  23. package/dist/dbs/signatures.d.ts +6 -0
  24. package/dist/dbs/signatures.d.ts.map +1 -0
  25. package/dist/dbs/signatures.js +13 -0
  26. package/dist/dbs/transactions.d.ts +6 -0
  27. package/dist/dbs/transactions.d.ts.map +1 -0
  28. package/dist/dbs/transactions.js +13 -0
  29. package/dist/dbs/wallets.d.ts +6 -0
  30. package/dist/dbs/wallets.d.ts.map +1 -0
  31. package/dist/dbs/wallets.js +13 -0
  32. package/dist/identity/signer.d.ts +17 -0
  33. package/dist/identity/signer.d.ts.map +1 -0
  34. package/dist/identity/signer.js +58 -0
  35. package/dist/index.d.ts +3 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +2 -0
  38. package/dist/sequence/cron.d.ts +19 -0
  39. package/dist/sequence/cron.d.ts.map +1 -0
  40. package/dist/sequence/cron.js +118 -0
  41. package/dist/sequence/devices.d.ts +14 -0
  42. package/dist/sequence/devices.d.ts.map +1 -0
  43. package/dist/sequence/devices.js +43 -0
  44. package/dist/sequence/handlers/authcode-pkce.d.ts +14 -0
  45. package/dist/sequence/handlers/authcode-pkce.d.ts.map +1 -0
  46. package/dist/sequence/handlers/authcode-pkce.js +48 -0
  47. package/dist/sequence/handlers/authcode.d.ts +25 -0
  48. package/dist/sequence/handlers/authcode.d.ts.map +1 -0
  49. package/dist/sequence/handlers/authcode.js +91 -0
  50. package/dist/sequence/handlers/devices.d.ts +14 -0
  51. package/dist/sequence/handlers/devices.d.ts.map +1 -0
  52. package/dist/sequence/handlers/devices.js +39 -0
  53. package/dist/sequence/handlers/handler.d.ts +8 -0
  54. package/dist/sequence/handlers/handler.d.ts.map +1 -0
  55. package/dist/sequence/handlers/handler.js +1 -0
  56. package/dist/sequence/handlers/identity.d.ts +21 -0
  57. package/dist/sequence/handlers/identity.d.ts.map +1 -0
  58. package/dist/sequence/handlers/identity.js +86 -0
  59. package/dist/sequence/handlers/index.d.ts +7 -0
  60. package/dist/sequence/handlers/index.d.ts.map +1 -0
  61. package/dist/sequence/handlers/index.js +5 -0
  62. package/dist/sequence/handlers/mnemonic.d.ts +19 -0
  63. package/dist/sequence/handlers/mnemonic.d.ts.map +1 -0
  64. package/dist/sequence/handlers/mnemonic.js +67 -0
  65. package/dist/sequence/handlers/otp.d.ts +20 -0
  66. package/dist/sequence/handlers/otp.d.ts.map +1 -0
  67. package/dist/sequence/handlers/otp.js +83 -0
  68. package/dist/sequence/handlers/passkeys.d.ts +17 -0
  69. package/dist/sequence/handlers/passkeys.d.ts.map +1 -0
  70. package/dist/sequence/handlers/passkeys.js +63 -0
  71. package/dist/sequence/handlers/recovery.d.ts +15 -0
  72. package/dist/sequence/handlers/recovery.d.ts.map +1 -0
  73. package/dist/sequence/handlers/recovery.js +72 -0
  74. package/dist/sequence/index.d.ts +12 -0
  75. package/dist/sequence/index.d.ts.map +1 -0
  76. package/dist/sequence/index.js +9 -0
  77. package/dist/sequence/logger.d.ts +7 -0
  78. package/dist/sequence/logger.d.ts.map +1 -0
  79. package/dist/sequence/logger.js +11 -0
  80. package/dist/sequence/manager.d.ts +287 -0
  81. package/dist/sequence/manager.d.ts.map +1 -0
  82. package/dist/sequence/manager.js +356 -0
  83. package/dist/sequence/messages.d.ts +18 -0
  84. package/dist/sequence/messages.d.ts.map +1 -0
  85. package/dist/sequence/messages.js +115 -0
  86. package/dist/sequence/recovery.d.ts +30 -0
  87. package/dist/sequence/recovery.d.ts.map +1 -0
  88. package/dist/sequence/recovery.js +314 -0
  89. package/dist/sequence/sessions.d.ts +26 -0
  90. package/dist/sequence/sessions.d.ts.map +1 -0
  91. package/dist/sequence/sessions.js +169 -0
  92. package/dist/sequence/signatures.d.ts +21 -0
  93. package/dist/sequence/signatures.d.ts.map +1 -0
  94. package/dist/sequence/signatures.js +192 -0
  95. package/dist/sequence/signers.d.ts +14 -0
  96. package/dist/sequence/signers.d.ts.map +1 -0
  97. package/dist/sequence/signers.js +74 -0
  98. package/dist/sequence/transactions.d.ts +26 -0
  99. package/dist/sequence/transactions.d.ts.map +1 -0
  100. package/dist/sequence/transactions.js +201 -0
  101. package/dist/sequence/types/index.d.ts +9 -0
  102. package/dist/sequence/types/index.d.ts.map +1 -0
  103. package/dist/sequence/types/index.js +2 -0
  104. package/dist/sequence/types/message-request.d.ts +23 -0
  105. package/dist/sequence/types/message-request.d.ts.map +1 -0
  106. package/dist/sequence/types/message-request.js +1 -0
  107. package/dist/sequence/types/recovery.d.ts +15 -0
  108. package/dist/sequence/types/recovery.d.ts.map +1 -0
  109. package/dist/sequence/types/recovery.js +1 -0
  110. package/dist/sequence/types/signature-request.d.ts +76 -0
  111. package/dist/sequence/types/signature-request.d.ts.map +1 -0
  112. package/dist/sequence/types/signature-request.js +11 -0
  113. package/dist/sequence/types/signer.d.ts +28 -0
  114. package/dist/sequence/types/signer.d.ts.map +1 -0
  115. package/dist/sequence/types/signer.js +10 -0
  116. package/dist/sequence/types/transaction-request.d.ts +41 -0
  117. package/dist/sequence/types/transaction-request.d.ts.map +1 -0
  118. package/dist/sequence/types/transaction-request.js +1 -0
  119. package/dist/sequence/types/wallet.d.ts +21 -0
  120. package/dist/sequence/types/wallet.d.ts.map +1 -0
  121. package/dist/sequence/types/wallet.js +1 -0
  122. package/dist/sequence/wallets.d.ts +121 -0
  123. package/dist/sequence/wallets.d.ts.map +1 -0
  124. package/dist/sequence/wallets.js +632 -0
  125. package/package.json +40 -0
  126. package/src/dbs/auth-commitments.ts +26 -0
  127. package/src/dbs/auth-keys.ts +85 -0
  128. package/src/dbs/generic.ts +194 -0
  129. package/src/dbs/index.ts +13 -0
  130. package/src/dbs/messages.ts +16 -0
  131. package/src/dbs/recovery.ts +15 -0
  132. package/src/dbs/signatures.ts +15 -0
  133. package/src/dbs/transactions.ts +16 -0
  134. package/src/dbs/wallets.ts +16 -0
  135. package/src/identity/signer.ts +78 -0
  136. package/src/index.ts +2 -0
  137. package/src/sequence/cron.ts +134 -0
  138. package/src/sequence/devices.ts +53 -0
  139. package/src/sequence/handlers/authcode-pkce.ts +70 -0
  140. package/src/sequence/handlers/authcode.ts +116 -0
  141. package/src/sequence/handlers/devices.ts +53 -0
  142. package/src/sequence/handlers/handler.ts +14 -0
  143. package/src/sequence/handlers/identity.ts +101 -0
  144. package/src/sequence/handlers/index.ts +6 -0
  145. package/src/sequence/handlers/mnemonic.ts +88 -0
  146. package/src/sequence/handlers/otp.ts +107 -0
  147. package/src/sequence/handlers/passkeys.ts +84 -0
  148. package/src/sequence/handlers/recovery.ts +88 -0
  149. package/src/sequence/index.ts +25 -0
  150. package/src/sequence/logger.ts +11 -0
  151. package/src/sequence/manager.ts +634 -0
  152. package/src/sequence/messages.ts +146 -0
  153. package/src/sequence/recovery.ts +429 -0
  154. package/src/sequence/sessions.ts +238 -0
  155. package/src/sequence/signatures.ts +263 -0
  156. package/src/sequence/signers.ts +88 -0
  157. package/src/sequence/transactions.ts +281 -0
  158. package/src/sequence/types/index.ts +27 -0
  159. package/src/sequence/types/message-request.ts +26 -0
  160. package/src/sequence/types/recovery.ts +15 -0
  161. package/src/sequence/types/signature-request.ts +89 -0
  162. package/src/sequence/types/signer.ts +32 -0
  163. package/src/sequence/types/transaction-request.ts +47 -0
  164. package/src/sequence/types/wallet.ts +24 -0
  165. package/src/sequence/wallets.ts +853 -0
  166. package/test/constants.ts +62 -0
  167. package/test/recovery.test.ts +211 -0
  168. package/test/sessions.test.ts +324 -0
  169. package/test/setup.ts +63 -0
  170. package/test/transactions.test.ts +464 -0
  171. package/test/wallets.test.ts +381 -0
  172. package/tsconfig.json +10 -0
  173. package/vitest.config.ts +11 -0
@@ -0,0 +1,634 @@
1
+ import { Signers as CoreSigners, Relayer, State } from '@0xsequence/wallet-core'
2
+
3
+ import { IdentityInstrument } from '@0xsequence/identity-instrument'
4
+ import { createAttestationVerifyingFetch } from '@0xsequence/tee-verifier'
5
+ import {
6
+ Attestation,
7
+ Config,
8
+ Constants,
9
+ Context,
10
+ Extensions,
11
+ Network,
12
+ Payload,
13
+ Signature as SequenceSignature,
14
+ SessionConfig,
15
+ } from '@0xsequence/wallet-primitives'
16
+ import { Address } from 'ox'
17
+ import * as Db from '../dbs/index.js'
18
+ import { Cron } from './cron.js'
19
+ import { Devices } from './devices.js'
20
+ import { AuthCodeHandler } from './handlers/authcode.js'
21
+ import {
22
+ AuthCodePkceHandler,
23
+ DevicesHandler,
24
+ Handler,
25
+ MnemonicHandler,
26
+ OtpHandler,
27
+ PasskeysHandler,
28
+ } from './handlers/index.js'
29
+ import { RecoveryHandler } from './handlers/recovery.js'
30
+ import { Logger } from './logger.js'
31
+ import { Messages } from './messages.js'
32
+ import { Recovery } from './recovery.js'
33
+ import { AuthorizeImplicitSessionArgs, Sessions } from './sessions.js'
34
+ import { Signatures } from './signatures.js'
35
+ import { Signers } from './signers.js'
36
+ import { Transactions } from './transactions.js'
37
+ import { BaseSignatureRequest, QueuedRecoveryPayload, SignatureRequest, Wallet } from './types/index.js'
38
+ import { Message, MessageRequest } from './types/message-request.js'
39
+ import { Kinds, RecoverySigner } from './types/signer.js'
40
+ import { Transaction, TransactionRequest } from './types/transaction-request.js'
41
+ import { WalletSelectionUiHandler } from './types/wallet.js'
42
+ import { CompleteRedirectArgs, LoginArgs, SignupArgs, StartSignUpWithRedirectArgs, Wallets } from './wallets.js'
43
+
44
+ export type ManagerOptions = {
45
+ verbose?: boolean
46
+
47
+ extensions?: Extensions.Extensions
48
+ context?: Context.Context
49
+ guest?: Address.Address
50
+
51
+ encryptedPksDb?: CoreSigners.Pk.Encrypted.EncryptedPksDb
52
+ managerDb?: Db.Wallets
53
+ transactionsDb?: Db.Transactions
54
+ signaturesDb?: Db.Signatures
55
+ messagesDb?: Db.Messages
56
+ authCommitmentsDb?: Db.AuthCommitments
57
+ authKeysDb?: Db.AuthKeys
58
+ recoveryDb?: Db.Recovery
59
+
60
+ dbPruningInterval?: number
61
+
62
+ stateProvider?: State.Provider
63
+ networks?: Network.Network[]
64
+ relayers?: Relayer.Relayer[] | (() => Relayer.Relayer[])
65
+
66
+ defaultGuardTopology?: Config.Topology
67
+ defaultRecoverySettings?: RecoverySettings
68
+
69
+ identity?: {
70
+ url?: string
71
+ fetch?: typeof window.fetch
72
+ verifyAttestation?: boolean
73
+ expectedPcr0?: string[]
74
+ email?: {
75
+ enabled: boolean
76
+ }
77
+ google?: {
78
+ enabled: boolean
79
+ clientId: string
80
+ }
81
+ apple?: {
82
+ enabled: boolean
83
+ clientId: string
84
+ }
85
+ }
86
+ }
87
+
88
+ export const ManagerOptionsDefaults = {
89
+ verbose: false,
90
+
91
+ extensions: Extensions.Dev1,
92
+ context: Context.Dev1,
93
+ guest: Constants.DefaultGuest,
94
+
95
+ encryptedPksDb: new CoreSigners.Pk.Encrypted.EncryptedPksDb(),
96
+ managerDb: new Db.Wallets(),
97
+ signaturesDb: new Db.Signatures(),
98
+ transactionsDb: new Db.Transactions(),
99
+ messagesDb: new Db.Messages(),
100
+ authCommitmentsDb: new Db.AuthCommitments(),
101
+ recoveryDb: new Db.Recovery(),
102
+ authKeysDb: new Db.AuthKeys(),
103
+
104
+ dbPruningInterval: 1000 * 60 * 60 * 24, // 24 hours
105
+
106
+ stateProvider: new State.Local.Provider(new State.Local.IndexedDbStore()),
107
+ networks: Network.All,
108
+ relayers: () => [Relayer.Local.LocalRelayer.createFromWindow(window)].filter((r) => r !== undefined),
109
+
110
+ defaultGuardTopology: {
111
+ // TODO: Move this somewhere else
112
+ type: 'signer',
113
+ address: '0xf71eC72C8C03a0857DD7601ACeF1e42b85983e99',
114
+ weight: 1n,
115
+ } as Config.SignerLeaf,
116
+
117
+ defaultSessionsTopology: {
118
+ // TODO: Move this somewhere else
119
+ type: 'sapient-signer',
120
+ address: Constants.DefaultSessionManager,
121
+ weight: 10n,
122
+ } as Omit<Config.SapientSignerLeaf, 'imageHash'>,
123
+
124
+ defaultRecoverySettings: {
125
+ requiredDeltaTime: 2592000n, // 30 days (in seconds)
126
+ minTimestamp: 0n,
127
+ },
128
+
129
+ identity: {
130
+ // TODO: change to prod url once deployed
131
+ url: 'https://dev-identity.sequence-dev.app',
132
+ fetch: window.fetch,
133
+ verifyAttestation: true,
134
+ email: {
135
+ enabled: false,
136
+ },
137
+ google: {
138
+ enabled: false,
139
+ clientId: '',
140
+ },
141
+ apple: {
142
+ enabled: false,
143
+ clientId: '',
144
+ },
145
+ },
146
+ }
147
+
148
+ export const CreateWalletOptionsDefaults = {
149
+ useGuard: false,
150
+ }
151
+
152
+ export function applyManagerOptionsDefaults(options?: ManagerOptions) {
153
+ return {
154
+ ...ManagerOptionsDefaults,
155
+ ...options,
156
+ identity: { ...ManagerOptionsDefaults.identity, ...options?.identity },
157
+ }
158
+ }
159
+
160
+ export type RecoverySettings = {
161
+ requiredDeltaTime: bigint
162
+ minTimestamp: bigint
163
+ }
164
+
165
+ export type Databases = {
166
+ readonly encryptedPks: CoreSigners.Pk.Encrypted.EncryptedPksDb
167
+ readonly manager: Db.Wallets
168
+ readonly signatures: Db.Signatures
169
+ readonly messages: Db.Messages
170
+ readonly transactions: Db.Transactions
171
+ readonly authCommitments: Db.AuthCommitments
172
+ readonly authKeys: Db.AuthKeys
173
+ readonly recovery: Db.Recovery
174
+
175
+ readonly pruningInterval: number
176
+ }
177
+
178
+ export type Sequence = {
179
+ readonly context: Context.Context
180
+ readonly extensions: Extensions.Extensions
181
+ readonly guest: Address.Address
182
+
183
+ readonly stateProvider: State.Provider
184
+
185
+ readonly networks: Network.Network[]
186
+ readonly relayers: Relayer.Relayer[]
187
+
188
+ readonly defaultGuardTopology: Config.Topology
189
+ readonly defaultSessionsTopology: Omit<Config.SapientSignerLeaf, 'imageHash'>
190
+ readonly defaultRecoverySettings: RecoverySettings
191
+ }
192
+
193
+ export type Modules = {
194
+ readonly logger: Logger
195
+ readonly devices: Devices
196
+ readonly wallets: Wallets
197
+ readonly sessions: Sessions
198
+ readonly signers: Signers
199
+ readonly signatures: Signatures
200
+ readonly transactions: Transactions
201
+ readonly messages: Messages
202
+ readonly recovery: Recovery
203
+ readonly cron: Cron
204
+ }
205
+
206
+ export type Shared = {
207
+ readonly verbose: boolean
208
+
209
+ readonly sequence: Sequence
210
+ readonly databases: Databases
211
+
212
+ readonly handlers: Map<string, Handler>
213
+
214
+ modules: Modules
215
+ }
216
+
217
+ export class Manager {
218
+ private readonly shared: Shared
219
+
220
+ private readonly mnemonicHandler: MnemonicHandler
221
+ private readonly devicesHandler: DevicesHandler
222
+ private readonly passkeysHandler: PasskeysHandler
223
+ private readonly recoveryHandler: RecoveryHandler
224
+
225
+ private readonly otpHandler?: OtpHandler
226
+
227
+ constructor(options?: ManagerOptions) {
228
+ const ops = applyManagerOptionsDefaults(options)
229
+
230
+ const shared: Shared = {
231
+ verbose: ops.verbose,
232
+
233
+ sequence: {
234
+ context: ops.context,
235
+ extensions: ops.extensions,
236
+ guest: ops.guest,
237
+
238
+ stateProvider: ops.stateProvider,
239
+ networks: ops.networks,
240
+ relayers: typeof ops.relayers === 'function' ? ops.relayers() : ops.relayers,
241
+
242
+ defaultGuardTopology: ops.defaultGuardTopology,
243
+ defaultSessionsTopology: ops.defaultSessionsTopology,
244
+ defaultRecoverySettings: ops.defaultRecoverySettings,
245
+ },
246
+
247
+ databases: {
248
+ encryptedPks: ops.encryptedPksDb,
249
+ manager: ops.managerDb,
250
+ signatures: ops.signaturesDb,
251
+ transactions: ops.transactionsDb,
252
+ messages: ops.messagesDb,
253
+ authCommitments: ops.authCommitmentsDb,
254
+ authKeys: ops.authKeysDb,
255
+ recovery: ops.recoveryDb,
256
+
257
+ pruningInterval: ops.dbPruningInterval,
258
+ },
259
+
260
+ modules: {} as any,
261
+ handlers: new Map(),
262
+ }
263
+
264
+ const modules: Modules = {
265
+ cron: new Cron(shared),
266
+ logger: new Logger(shared),
267
+ devices: new Devices(shared),
268
+ wallets: new Wallets(shared),
269
+ sessions: new Sessions(shared),
270
+ signers: new Signers(shared),
271
+ signatures: new Signatures(shared),
272
+ transactions: new Transactions(shared),
273
+ messages: new Messages(shared),
274
+ recovery: new Recovery(shared),
275
+ }
276
+
277
+ this.devicesHandler = new DevicesHandler(modules.signatures, modules.devices)
278
+ shared.handlers.set(Kinds.LocalDevice, this.devicesHandler)
279
+
280
+ this.passkeysHandler = new PasskeysHandler(
281
+ modules.signatures,
282
+ shared.sequence.extensions,
283
+ shared.sequence.stateProvider,
284
+ )
285
+ shared.handlers.set(Kinds.LoginPasskey, this.passkeysHandler)
286
+
287
+ this.mnemonicHandler = new MnemonicHandler(modules.signatures)
288
+ shared.handlers.set(Kinds.LoginMnemonic, this.mnemonicHandler)
289
+
290
+ this.recoveryHandler = new RecoveryHandler(modules.signatures, modules.recovery)
291
+ shared.handlers.set(Kinds.Recovery, this.recoveryHandler)
292
+
293
+ const verifyingFetch = ops.identity.verifyAttestation
294
+ ? createAttestationVerifyingFetch({
295
+ fetch: ops.identity.fetch,
296
+ expectedPCRs: ops.identity.expectedPcr0 ? new Map([[0, ops.identity.expectedPcr0]]) : undefined,
297
+ logTiming: true,
298
+ })
299
+ : ops.identity.fetch
300
+ const identityInstrument = new IdentityInstrument(ops.identity.url, verifyingFetch)
301
+
302
+ if (ops.identity.email?.enabled) {
303
+ this.otpHandler = new OtpHandler(identityInstrument, modules.signatures, shared.databases.authKeys)
304
+ shared.handlers.set(Kinds.LoginEmailOtp, this.otpHandler)
305
+ }
306
+ if (ops.identity.google?.enabled) {
307
+ shared.handlers.set(
308
+ Kinds.LoginGooglePkce,
309
+ new AuthCodePkceHandler(
310
+ 'google-pkce',
311
+ 'https://accounts.google.com',
312
+ ops.identity.google.clientId,
313
+ identityInstrument,
314
+ modules.signatures,
315
+ shared.databases.authCommitments,
316
+ shared.databases.authKeys,
317
+ ),
318
+ )
319
+ }
320
+ if (ops.identity.apple?.enabled) {
321
+ shared.handlers.set(
322
+ Kinds.LoginApple,
323
+ new AuthCodeHandler(
324
+ 'apple',
325
+ 'https://appleid.apple.com',
326
+ ops.identity.apple.clientId,
327
+ identityInstrument,
328
+ modules.signatures,
329
+ shared.databases.authCommitments,
330
+ shared.databases.authKeys,
331
+ ),
332
+ )
333
+ }
334
+
335
+ shared.modules = modules
336
+ this.shared = shared
337
+
338
+ // Initialize modules
339
+ for (const module of Object.values(modules)) {
340
+ if ('initialize' in module && typeof module.initialize === 'function') {
341
+ module.initialize()
342
+ }
343
+ }
344
+ }
345
+
346
+ // Wallets
347
+
348
+ public async startSignUpWithRedirect(args: StartSignUpWithRedirectArgs) {
349
+ return this.shared.modules.wallets.startSignUpWithRedirect(args)
350
+ }
351
+
352
+ public async completeRedirect(args: CompleteRedirectArgs) {
353
+ return this.shared.modules.wallets.completeRedirect(args)
354
+ }
355
+
356
+ public async signUp(options: SignupArgs) {
357
+ return this.shared.modules.wallets.signUp(options)
358
+ }
359
+
360
+ public async logout(wallet: Address.Address, options?: { skipRemoveDevice?: boolean }) {
361
+ return this.shared.modules.wallets.logout(wallet, options)
362
+ }
363
+
364
+ public async completeLogout(requestId: string, options?: { skipValidateSave?: boolean }) {
365
+ return this.shared.modules.wallets.completeLogout(requestId, options)
366
+ }
367
+
368
+ public async login(args: LoginArgs) {
369
+ return this.shared.modules.wallets.login(args)
370
+ }
371
+
372
+ public async completeLogin(requestId: string) {
373
+ return this.shared.modules.wallets.completeLogin(requestId)
374
+ }
375
+
376
+ public async listWallets() {
377
+ return this.shared.modules.wallets.list()
378
+ }
379
+
380
+ public async hasWallet(address: Address.Address) {
381
+ return this.shared.modules.wallets.exists(address)
382
+ }
383
+
384
+ public onWalletsUpdate(cb: (wallets: Wallet[]) => void, trigger?: boolean) {
385
+ return this.shared.modules.wallets.onWalletsUpdate(cb, trigger)
386
+ }
387
+
388
+ public registerWalletSelector(handler: WalletSelectionUiHandler) {
389
+ return this.shared.modules.wallets.registerWalletSelector(handler)
390
+ }
391
+
392
+ public unregisterWalletSelector(handler?: WalletSelectionUiHandler) {
393
+ return this.shared.modules.wallets.unregisterWalletSelector(handler)
394
+ }
395
+
396
+ public async getConfiguration(wallet: Address.Address) {
397
+ return this.shared.modules.wallets.getConfiguration(wallet)
398
+ }
399
+
400
+ public async getOnchainConfiguration(wallet: Address.Address, chainId: bigint) {
401
+ return this.shared.modules.wallets.getOnchainConfiguration(wallet, chainId)
402
+ }
403
+
404
+ public async isUpdatedOnchain(wallet: Address.Address, chainId: bigint) {
405
+ return this.shared.modules.wallets.isUpdatedOnchain(wallet, chainId)
406
+ }
407
+
408
+ // Signatures
409
+
410
+ public async listSignatureRequests(): Promise<SignatureRequest[]> {
411
+ return this.shared.modules.signatures.list()
412
+ }
413
+
414
+ public async getSignatureRequest(requestId: string): Promise<SignatureRequest> {
415
+ return this.shared.modules.signatures.get(requestId)
416
+ }
417
+
418
+ public onSignatureRequestsUpdate(cb: (requests: BaseSignatureRequest[]) => void, trigger?: boolean) {
419
+ return this.shared.modules.signatures.onSignatureRequestsUpdate(cb, trigger)
420
+ }
421
+
422
+ public onSignatureRequestUpdate(
423
+ requestId: string,
424
+ cb: (requests: SignatureRequest) => void,
425
+ onError?: (error: Error) => void,
426
+ trigger?: boolean,
427
+ ) {
428
+ return this.shared.modules.signatures.onSignatureRequestUpdate(requestId, cb, onError, trigger)
429
+ }
430
+
431
+ public async cancelSignatureRequest(requestId: string) {
432
+ return this.shared.modules.signatures.cancel(requestId)
433
+ }
434
+
435
+ // Transactions
436
+
437
+ public async requestTransaction(
438
+ from: Address.Address,
439
+ chainId: bigint,
440
+ txs: TransactionRequest[],
441
+ options?: { skipDefineGas?: boolean; source?: string; noConfigUpdate?: boolean },
442
+ ) {
443
+ return this.shared.modules.transactions.request(from, chainId, txs, options)
444
+ }
445
+
446
+ public async defineTransaction(
447
+ transactionId: string,
448
+ changes?: { nonce?: bigint; space?: bigint; calls?: Pick<Payload.Call, 'gasLimit'>[] },
449
+ ) {
450
+ return this.shared.modules.transactions.define(transactionId, changes)
451
+ }
452
+
453
+ public async selectTransactionRelayer(transactionId: string, relayerOptionId: string) {
454
+ return this.shared.modules.transactions.selectRelayer(transactionId, relayerOptionId)
455
+ }
456
+
457
+ public async relayTransaction(transactionOrSignatureId: string) {
458
+ return this.shared.modules.transactions.relay(transactionOrSignatureId)
459
+ }
460
+
461
+ public async deleteTransaction(transactionId: string) {
462
+ return this.shared.modules.transactions.delete(transactionId)
463
+ }
464
+
465
+ public onTransactionsUpdate(cb: (transactions: Transaction[]) => void, trigger?: boolean) {
466
+ return this.shared.modules.transactions.onTransactionsUpdate(cb, trigger)
467
+ }
468
+
469
+ public onTransactionUpdate(transactionId: string, cb: (transaction: Transaction) => void, trigger?: boolean) {
470
+ return this.shared.modules.transactions.onTransactionUpdate(transactionId, cb, trigger)
471
+ }
472
+
473
+ public getTransaction(transactionId: string): Promise<Transaction> {
474
+ return this.shared.modules.transactions.get(transactionId)
475
+ }
476
+
477
+ public registerMnemonicUI(onPromptMnemonic: (respond: (mnemonic: string) => Promise<void>) => Promise<void>) {
478
+ return this.mnemonicHandler.registerUI(onPromptMnemonic)
479
+ }
480
+
481
+ public registerOtpUI(onPromptOtp: (recipient: string, respond: (otp: string) => Promise<void>) => Promise<void>) {
482
+ return this.otpHandler?.registerUI(onPromptOtp) || (() => {})
483
+ }
484
+
485
+ public async setRedirectPrefix(prefix: string) {
486
+ this.shared.handlers.forEach((handler) => {
487
+ if (handler instanceof AuthCodeHandler) {
488
+ handler.setRedirectUri(prefix + '/' + handler.signupKind)
489
+ }
490
+ })
491
+ }
492
+
493
+ // Messages
494
+
495
+ public async listMessageRequests() {
496
+ return this.shared.modules.messages.list()
497
+ }
498
+
499
+ public async getMessageRequest(messageOrSignatureId: string) {
500
+ return this.shared.modules.messages.get(messageOrSignatureId)
501
+ }
502
+
503
+ public onMessageRequestsUpdate(cb: (messages: Message[]) => void, trigger?: boolean) {
504
+ return this.shared.modules.messages.onMessagesUpdate(cb, trigger)
505
+ }
506
+
507
+ public onMessageRequestUpdate(messageOrSignatureId: string, cb: (message: Message) => void, trigger?: boolean) {
508
+ return this.shared.modules.messages.onMessageUpdate(messageOrSignatureId, cb, trigger)
509
+ }
510
+
511
+ public async requestMessageSignature(
512
+ wallet: Address.Address,
513
+ message: MessageRequest,
514
+ chainId?: bigint,
515
+ options?: { source?: string },
516
+ ) {
517
+ return this.shared.modules.messages.request(wallet, message, chainId, options)
518
+ }
519
+
520
+ public async completedMessageSignature(messageOrSignatureId: string) {
521
+ return this.shared.modules.messages.complete(messageOrSignatureId)
522
+ }
523
+
524
+ public async deleteMessageRequest(messageOrSignatureId: string) {
525
+ return this.shared.modules.messages.delete(messageOrSignatureId)
526
+ }
527
+
528
+ // Sessions
529
+
530
+ public async getSessionTopology(walletAddress: Address.Address): Promise<SessionConfig.SessionsTopology> {
531
+ return this.shared.modules.sessions.getSessionTopology(walletAddress)
532
+ }
533
+
534
+ public async prepareAuthorizeImplicitSession(
535
+ walletAddress: Address.Address,
536
+ sessionAddress: Address.Address,
537
+ args: AuthorizeImplicitSessionArgs,
538
+ ): Promise<string> {
539
+ return this.shared.modules.sessions.prepareAuthorizeImplicitSession(walletAddress, sessionAddress, args)
540
+ // Run completeAuthorizeImplicitSession next
541
+ }
542
+
543
+ public async completeAuthorizeImplicitSession(requestId: string): Promise<{
544
+ attestation: Attestation.Attestation
545
+ signature: SequenceSignature.RSY
546
+ }> {
547
+ return this.shared.modules.sessions.completeAuthorizeImplicitSession(requestId)
548
+ }
549
+
550
+ public async addExplicitSession(
551
+ walletAddress: Address.Address,
552
+ sessionAddress: Address.Address,
553
+ permissions: CoreSigners.Session.ExplicitParams,
554
+ ): Promise<string> {
555
+ return this.shared.modules.sessions.addExplicitSession(walletAddress, sessionAddress, permissions)
556
+ // Run completeSessionUpdate next
557
+ }
558
+
559
+ public async removeExplicitSession(walletAddress: Address.Address, sessionAddress: Address.Address): Promise<string> {
560
+ return this.shared.modules.sessions.removeExplicitSession(walletAddress, sessionAddress)
561
+ // Run completeSessionUpdate next
562
+ }
563
+
564
+ public async addBlacklistAddress(walletAddress: Address.Address, address: Address.Address): Promise<string> {
565
+ return this.shared.modules.sessions.addBlacklistAddress(walletAddress, address)
566
+ // Run completeSessionUpdate next
567
+ }
568
+
569
+ public async removeBlacklistAddress(walletAddress: Address.Address, address: Address.Address): Promise<string> {
570
+ return this.shared.modules.sessions.removeBlacklistAddress(walletAddress, address)
571
+ // Run completeSessionUpdate next
572
+ }
573
+
574
+ public async completeSessionUpdate(requestId: string) {
575
+ return this.shared.modules.sessions.completeSessionUpdate(requestId)
576
+ }
577
+
578
+ // Recovery
579
+
580
+ public async getRecoverySigners(wallet: Address.Address): Promise<RecoverySigner[] | undefined> {
581
+ return this.shared.modules.recovery.getRecoverySigners(wallet)
582
+ }
583
+
584
+ public onQueuedRecoveryPayloadsUpdate(
585
+ wallet: Address.Address,
586
+ cb: (payloads: QueuedRecoveryPayload[]) => void,
587
+ trigger?: boolean,
588
+ ) {
589
+ return this.shared.modules.recovery.onQueuedRecoveryPayloadsUpdate(wallet, cb, trigger)
590
+ }
591
+
592
+ public async queueRecoveryPayload(wallet: Address.Address, chainId: bigint, payload: Payload.Calls) {
593
+ return this.shared.modules.recovery.queueRecoveryPayload(wallet, chainId, payload)
594
+ }
595
+
596
+ public async completeRecoveryPayload(requestId: string) {
597
+ return this.shared.modules.recovery.completeRecoveryPayload(requestId)
598
+ }
599
+
600
+ public async addRecoveryMnemonic(wallet: Address.Address, mnemonic: string) {
601
+ return this.shared.modules.recovery.addRecoveryMnemonic(wallet, mnemonic)
602
+ }
603
+
604
+ public async addRecoverySigner(wallet: Address.Address, address: Address.Address) {
605
+ return this.shared.modules.recovery.addRecoverySigner(wallet, address)
606
+ }
607
+
608
+ public async removeRecoverySigner(wallet: Address.Address, address: Address.Address) {
609
+ return this.shared.modules.recovery.removeRecoverySigner(wallet, address)
610
+ }
611
+
612
+ public async completeRecoveryUpdate(requestId: string) {
613
+ return this.shared.modules.recovery.completeRecoveryUpdate(requestId)
614
+ }
615
+
616
+ public async updateQueuedRecoveryPayloads() {
617
+ return this.shared.modules.recovery.updateQueuedRecoveryPayloads()
618
+ }
619
+
620
+ // DBs
621
+
622
+ public async stop() {
623
+ await this.shared.modules.cron.stop()
624
+
625
+ await Promise.all([
626
+ this.shared.databases.authKeys.close(),
627
+ this.shared.databases.authCommitments.close(),
628
+ this.shared.databases.manager.close(),
629
+ this.shared.databases.recovery.close(),
630
+ this.shared.databases.signatures.close(),
631
+ this.shared.databases.transactions.close(),
632
+ ])
633
+ }
634
+ }