@0xsequence/wallet-wdk 3.0.2 → 3.0.4

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 (47) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-lint.log +1 -1
  3. package/.turbo/turbo-typecheck.log +1 -1
  4. package/CHANGELOG.md +24 -0
  5. package/dist/sequence/handlers/authcode.d.ts.map +1 -1
  6. package/dist/sequence/handlers/authcode.js +6 -0
  7. package/dist/sequence/handlers/identity.d.ts +1 -0
  8. package/dist/sequence/handlers/identity.d.ts.map +1 -1
  9. package/dist/sequence/handlers/identity.js +3 -0
  10. package/dist/sequence/handlers/idtoken.d.ts +33 -0
  11. package/dist/sequence/handlers/idtoken.d.ts.map +1 -0
  12. package/dist/sequence/handlers/idtoken.js +113 -0
  13. package/dist/sequence/handlers/index.d.ts +1 -0
  14. package/dist/sequence/handlers/index.d.ts.map +1 -1
  15. package/dist/sequence/handlers/index.js +1 -0
  16. package/dist/sequence/manager.d.ts +23 -14
  17. package/dist/sequence/manager.d.ts.map +1 -1
  18. package/dist/sequence/manager.js +28 -4
  19. package/dist/sequence/sessions.d.ts.map +1 -1
  20. package/dist/sequence/sessions.js +5 -1
  21. package/dist/sequence/signers.d.ts.map +1 -1
  22. package/dist/sequence/signers.js +4 -0
  23. package/dist/sequence/types/signer.d.ts +1 -1
  24. package/dist/sequence/types/signer.js +1 -1
  25. package/dist/sequence/types/wallet.d.ts +1 -1
  26. package/dist/sequence/wallets.d.ts +7 -1
  27. package/dist/sequence/wallets.d.ts.map +1 -1
  28. package/dist/sequence/wallets.js +73 -7
  29. package/package.json +6 -6
  30. package/src/sequence/handlers/authcode.ts +6 -0
  31. package/src/sequence/handlers/identity.ts +4 -0
  32. package/src/sequence/handlers/idtoken.ts +146 -0
  33. package/src/sequence/handlers/index.ts +1 -0
  34. package/src/sequence/manager.ts +110 -43
  35. package/src/sequence/sessions.ts +7 -1
  36. package/src/sequence/signers.ts +5 -0
  37. package/src/sequence/types/signer.ts +1 -1
  38. package/src/sequence/types/wallet.ts +1 -1
  39. package/src/sequence/wallets.ts +98 -9
  40. package/test/authcode-pkce.test.ts +1 -1
  41. package/test/authcode.test.ts +2 -2
  42. package/test/identity-auth-dbs.test.ts +122 -2
  43. package/test/identity-signer.test.ts +1 -1
  44. package/test/idtoken.test.ts +343 -0
  45. package/test/sessions-idtoken.test.ts +98 -0
  46. package/test/signers-kindof.test.ts +22 -0
  47. package/test/wallets.test.ts +202 -1
@@ -1 +1 @@
1
- {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/sequence/wallets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/sequence/wallets.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,41 @@
1
1
  import { Wallet as CoreWallet, Envelope, Signers, State } from '@0xsequence/wallet-core';
2
2
  import { Config, Constants, Payload } from '@0xsequence/wallet-primitives';
3
3
  import { Address, Provider, RpcTransport } from 'ox';
4
+ import { AuthCodeHandler } from './handlers/authcode.js';
5
+ import { IdTokenHandler } from './handlers/idtoken.js';
4
6
  import { MnemonicHandler } from './handlers/mnemonic.js';
5
7
  import { Kinds } from './types/signer.js';
8
+ function getSignupHandlerKey(kind) {
9
+ if (kind === 'google-pkce') {
10
+ return Kinds.LoginGoogle;
11
+ }
12
+ if (kind.startsWith('custom-')) {
13
+ return kind;
14
+ }
15
+ return 'login-' + kind;
16
+ }
17
+ function getSignerKindForSignup(kind) {
18
+ if (kind === 'google-id-token' || kind === 'google-pkce') {
19
+ return Kinds.LoginGoogle;
20
+ }
21
+ if (kind === 'apple-id-token' || kind === 'apple') {
22
+ return Kinds.LoginApple;
23
+ }
24
+ if (kind.startsWith('custom-')) {
25
+ return kind;
26
+ }
27
+ return ('login-' + kind);
28
+ }
29
+ function getIdTokenSignupHandler(shared, kind) {
30
+ const handler = shared.handlers.get(kind);
31
+ if (!handler) {
32
+ throw new Error('handler-not-registered');
33
+ }
34
+ if (!(handler instanceof IdTokenHandler)) {
35
+ throw new Error('handler-does-not-support-id-token');
36
+ }
37
+ return handler;
38
+ }
6
39
  export function isLoginToWalletArgs(args) {
7
40
  return 'wallet' in args;
8
41
  }
@@ -13,7 +46,10 @@ export function isLoginToPasskeyArgs(args) {
13
46
  return 'kind' in args && args.kind === 'passkey';
14
47
  }
15
48
  export function isAuthCodeArgs(args) {
16
- return 'kind' in args && (args.kind === 'google-pkce' || args.kind === 'apple');
49
+ return 'code' in args && 'commitment' in args;
50
+ }
51
+ export function isIdTokenArgs(args) {
52
+ return 'idToken' in args;
17
53
  }
18
54
  function buildCappedTree(members) {
19
55
  const loginMemberWeight = 1n;
@@ -277,9 +313,23 @@ export class Wallets {
277
313
  loginEmail: returnedEmail,
278
314
  };
279
315
  }
316
+ case 'google-id-token':
317
+ case 'apple-id-token': {
318
+ const handler = getIdTokenSignupHandler(this.shared, args.kind === 'google-id-token' ? Kinds.LoginGoogle : Kinds.LoginApple);
319
+ const [signer, metadata] = await handler.completeAuth(args.idToken);
320
+ const loginEmail = metadata.email;
321
+ this.shared.modules.logger.log('Created new id token signer:', signer.address);
322
+ return {
323
+ signer,
324
+ extra: {
325
+ signerKind: getSignerKindForSignup(args.kind),
326
+ },
327
+ loginEmail,
328
+ };
329
+ }
280
330
  case 'google-pkce':
281
331
  case 'apple': {
282
- const handler = this.shared.handlers.get('login-' + args.kind);
332
+ const handler = this.shared.handlers.get(getSignupHandlerKey(args.kind));
283
333
  if (!handler) {
284
334
  throw new Error('handler-not-registered');
285
335
  }
@@ -289,14 +339,24 @@ export class Wallets {
289
339
  return {
290
340
  signer,
291
341
  extra: {
292
- signerKind: 'login-' + args.kind,
342
+ signerKind: getSignerKindForSignup(args.kind),
293
343
  },
294
344
  loginEmail,
295
345
  };
296
346
  }
297
347
  }
298
348
  if (args.kind.startsWith('custom-')) {
299
- // TODO: support other custom auth methods (e.g. id-token)
349
+ if (isIdTokenArgs(args)) {
350
+ const handler = getIdTokenSignupHandler(this.shared, args.kind);
351
+ const [signer, metadata] = await handler.completeAuth(args.idToken);
352
+ return {
353
+ signer,
354
+ extra: {
355
+ signerKind: args.kind,
356
+ },
357
+ loginEmail: metadata.email,
358
+ };
359
+ }
300
360
  const handler = this.shared.handlers.get(args.kind);
301
361
  if (!handler) {
302
362
  throw new Error('handler-not-registered');
@@ -313,11 +373,14 @@ export class Wallets {
313
373
  throw new Error('invalid-signup-kind');
314
374
  }
315
375
  async startSignUpWithRedirect(args) {
316
- const kind = args.kind.startsWith('custom-') ? args.kind : 'login-' + args.kind;
376
+ const kind = getSignupHandlerKey(args.kind);
317
377
  const handler = this.shared.handlers.get(kind);
318
378
  if (!handler) {
319
379
  throw new Error('handler-not-registered');
320
380
  }
381
+ if (!(handler instanceof AuthCodeHandler)) {
382
+ throw new Error('handler-does-not-support-redirect');
383
+ }
321
384
  return handler.commitAuth(args.target, true);
322
385
  }
323
386
  async completeRedirect(args) {
@@ -338,11 +401,14 @@ export class Wallets {
338
401
  });
339
402
  }
340
403
  else {
341
- const kind = commitment.kind.startsWith('custom-') ? commitment.kind : 'login-' + commitment.kind;
342
- const handler = this.shared.handlers.get(kind);
404
+ const handlerKind = getSignupHandlerKey(commitment.kind);
405
+ const handler = this.shared.handlers.get(handlerKind);
343
406
  if (!handler) {
344
407
  throw new Error('handler-not-registered');
345
408
  }
409
+ if (!(handler instanceof AuthCodeHandler)) {
410
+ throw new Error('handler-does-not-support-redirect');
411
+ }
346
412
  await handler.completeAuth(commitment, args.code);
347
413
  }
348
414
  if (!commitment.target) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xsequence/wallet-wdk",
3
- "version": "3.0.2",
3
+ "version": "3.0.4",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -30,11 +30,11 @@
30
30
  "jwt-decode": "^4.0.0",
31
31
  "ox": "^0.9.17",
32
32
  "uuid": "^13.0.0",
33
- "@0xsequence/guard": "^3.0.2",
34
- "@0xsequence/relayer": "^3.0.2",
35
- "@0xsequence/identity-instrument": "^3.0.2",
36
- "@0xsequence/wallet-primitives": "^3.0.2",
37
- "@0xsequence/wallet-core": "^3.0.2"
33
+ "@0xsequence/guard": "^3.0.4",
34
+ "@0xsequence/identity-instrument": "^3.0.4",
35
+ "@0xsequence/wallet-core": "^3.0.4",
36
+ "@0xsequence/relayer": "^3.0.4",
37
+ "@0xsequence/wallet-primitives": "^3.0.4"
38
38
  },
39
39
  "scripts": {
40
40
  "build": "tsc",
@@ -6,6 +6,7 @@ import * as Identity from '@0xsequence/identity-instrument'
6
6
  import { SignerUnavailable, SignerReady, SignerActionable, BaseSignatureRequest } from '../types/signature-request.js'
7
7
  import { IdentitySigner } from '../../identity/signer.js'
8
8
  import { IdentityHandler } from './identity.js'
9
+ import { Kinds } from '../types/signer.js'
9
10
  import type { NavigationLike, WdkEnv } from '../../env.js'
10
11
 
11
12
  export class AuthCodeHandler extends IdentityHandler implements Handler {
@@ -26,6 +27,11 @@ export class AuthCodeHandler extends IdentityHandler implements Handler {
26
27
  }
27
28
 
28
29
  public get kind() {
30
+ if (this.signupKind === 'google-pkce') {
31
+ // Keep Google PKCE on the canonical kind so Google signers created before
32
+ // canonicalization still resolve as `login-google`.
33
+ return Kinds.LoginGoogle
34
+ }
29
35
  return 'login-' + this.signupKind
30
36
  }
31
37
 
@@ -81,6 +81,10 @@ export class IdentityHandler {
81
81
  return new IdentitySigner(this.nitro, authKey, this.env.crypto)
82
82
  }
83
83
 
84
+ protected async clearAuthKeySigner(address: string): Promise<void> {
85
+ await this.authKeys.delBySigner(address)
86
+ }
87
+
84
88
  private async getAuthKey(signer: string): Promise<Db.AuthKey | undefined> {
85
89
  let authKey = await this.authKeys.getBySigner(signer)
86
90
  if (!signer && !authKey) {
@@ -0,0 +1,146 @@
1
+ import { Address, Hex } from 'ox'
2
+ import { Signers } from '@0xsequence/wallet-core'
3
+ import { Handler } from './handler.js'
4
+ import * as Identity from '@0xsequence/identity-instrument'
5
+ import * as Db from '../../dbs/index.js'
6
+ import { Signatures } from '../signatures.js'
7
+ import { SignerActionable, SignerReady, SignerUnavailable, BaseSignatureRequest } from '../types/signature-request.js'
8
+ import { IdentitySigner } from '../../identity/signer.js'
9
+ import { IdentityHandler } from './identity.js'
10
+ import { Kinds } from '../types/signer.js'
11
+ import type { WdkEnv } from '../../env.js'
12
+
13
+ type RespondFn = (idToken: string) => Promise<void>
14
+
15
+ export type PromptIdTokenHandler = (
16
+ kind: 'google-id-token' | 'apple-id-token' | `custom-${string}`,
17
+ respond: RespondFn,
18
+ ) => Promise<void>
19
+
20
+ export class IdTokenHandler extends IdentityHandler implements Handler {
21
+ private onPromptIdToken: undefined | PromptIdTokenHandler
22
+
23
+ constructor(
24
+ public readonly signupKind: 'google-id-token' | 'apple-id-token' | `custom-${string}`,
25
+ public readonly issuer: string,
26
+ public readonly audience: string,
27
+ nitro: Identity.IdentityInstrument,
28
+ signatures: Signatures,
29
+ authKeys: Db.AuthKeys,
30
+ env?: WdkEnv,
31
+ ) {
32
+ super(nitro, authKeys, signatures, Identity.IdentityType.OIDC, env)
33
+ }
34
+
35
+ public get kind() {
36
+ if (this.signupKind === 'google-id-token') {
37
+ return Kinds.LoginGoogle
38
+ }
39
+ if (this.signupKind === 'apple-id-token') {
40
+ return Kinds.LoginApple
41
+ }
42
+ return 'login-' + this.signupKind
43
+ }
44
+
45
+ public registerUI(onPromptIdToken: PromptIdTokenHandler) {
46
+ this.onPromptIdToken = onPromptIdToken
47
+ return () => {
48
+ this.onPromptIdToken = undefined
49
+ }
50
+ }
51
+
52
+ public unregisterUI() {
53
+ this.onPromptIdToken = undefined
54
+ }
55
+
56
+ public async completeAuth(idToken: string): Promise<[IdentitySigner, { [key: string]: string }]> {
57
+ const challenge = new Identity.IdTokenChallenge(this.issuer, this.audience, idToken)
58
+ await this.nitroCommitVerifier(challenge)
59
+ const { signer: identitySigner, email } = await this.nitroCompleteAuth(challenge)
60
+
61
+ return [identitySigner, { email }]
62
+ }
63
+
64
+ public async getSigner(): Promise<{ signer: Signers.Signer & Signers.Witnessable; email: string }> {
65
+ const onPromptIdToken = this.onPromptIdToken
66
+ if (!onPromptIdToken) {
67
+ throw new Error('id-token-handler-ui-not-registered')
68
+ }
69
+
70
+ return await this.handleAuth(onPromptIdToken)
71
+ }
72
+
73
+ async status(
74
+ address: Address.Address,
75
+ _imageHash: Hex.Hex | undefined,
76
+ request: BaseSignatureRequest,
77
+ ): Promise<SignerUnavailable | SignerReady | SignerActionable> {
78
+ const signer = await this.getAuthKeySigner(address)
79
+ if (signer) {
80
+ return {
81
+ address,
82
+ handler: this,
83
+ status: 'ready',
84
+ handle: async () => {
85
+ await this.sign(signer, request)
86
+ return true
87
+ },
88
+ }
89
+ }
90
+
91
+ const onPromptIdToken = this.onPromptIdToken
92
+ if (!onPromptIdToken) {
93
+ return {
94
+ address,
95
+ handler: this,
96
+ reason: 'ui-not-registered',
97
+ status: 'unavailable',
98
+ }
99
+ }
100
+
101
+ return {
102
+ address,
103
+ handler: this,
104
+ status: 'actionable',
105
+ message: 'request-id-token',
106
+ handle: async () => {
107
+ try {
108
+ const { signer } = await this.handleAuth(onPromptIdToken)
109
+ const signerAddress = (await signer.address) as Address.Address
110
+ if (!Address.isEqual(signerAddress, address)) {
111
+ // ID-token auth prompts are keyed by provider kind, not the requested signer address.
112
+ // For example, a user can pick a different Google account in the account picker and
113
+ // return a token for a different identity than this request expects.
114
+ await this.clearAuthKeySigner(signerAddress)
115
+ throw new Error('id-token-signer-mismatch')
116
+ }
117
+ return true
118
+ } catch {
119
+ return false
120
+ }
121
+ },
122
+ }
123
+ }
124
+
125
+ private handleAuth(
126
+ onPromptIdToken: PromptIdTokenHandler,
127
+ ): Promise<{ signer: Signers.Signer & Signers.Witnessable; email: string }> {
128
+ // eslint-disable-next-line no-async-promise-executor
129
+ return new Promise(async (resolve, reject) => {
130
+ try {
131
+ const respond: RespondFn = async (idToken) => {
132
+ try {
133
+ const [signer, metadata] = await this.completeAuth(idToken)
134
+ resolve({ signer, email: metadata.email || '' })
135
+ } catch (error) {
136
+ reject(error)
137
+ }
138
+ }
139
+
140
+ await onPromptIdToken(this.signupKind, respond)
141
+ } catch (error) {
142
+ reject(error)
143
+ }
144
+ })
145
+ }
146
+ }
@@ -3,4 +3,5 @@ export { DevicesHandler } from './devices.js'
3
3
  export { PasskeysHandler } from './passkeys.js'
4
4
  export { OtpHandler } from './otp.js'
5
5
  export { AuthCodePkceHandler } from './authcode-pkce.js'
6
+ export { IdTokenHandler } from './idtoken.js'
6
7
  export { MnemonicHandler } from './mnemonic.js'
@@ -14,6 +14,7 @@ import {
14
14
  AuthCodePkceHandler,
15
15
  DevicesHandler,
16
16
  Handler,
17
+ IdTokenHandler,
17
18
  MnemonicHandler,
18
19
  OtpHandler,
19
20
  PasskeysHandler,
@@ -31,9 +32,25 @@ import { Wallets, WalletsInterface } from './wallets.js'
31
32
  import { GuardHandler, PromptCodeHandler } from './handlers/guard.js'
32
33
  import { PasskeyCredential } from '../dbs/index.js'
33
34
  import { PromptMnemonicHandler } from './handlers/mnemonic.js'
35
+ import { PromptIdTokenHandler } from './handlers/idtoken.js'
34
36
  import { PromptOtpHandler } from './handlers/otp.js'
35
37
  import { defaultPasskeyProvider, type PasskeyProvider } from './passkeys-provider.js'
36
38
 
39
+ type CustomIdentityProvider =
40
+ | {
41
+ kind: `custom-${string}`
42
+ authMethod: 'id-token'
43
+ issuer: string
44
+ clientId: string
45
+ }
46
+ | {
47
+ kind: `custom-${string}`
48
+ authMethod: 'authcode' | 'authcode-pkce'
49
+ issuer: string
50
+ oauthUrl: string
51
+ clientId: string
52
+ }
53
+
37
54
  export type ManagerOptions = {
38
55
  verbose?: boolean
39
56
 
@@ -85,18 +102,14 @@ export type ManagerOptions = {
85
102
  google?: {
86
103
  enabled: boolean
87
104
  clientId: string
105
+ authMethod?: 'authcode-pkce' | 'id-token'
88
106
  }
89
107
  apple?: {
90
108
  enabled: boolean
91
109
  clientId: string
110
+ authMethod?: 'authcode' | 'id-token'
92
111
  }
93
- customProviders?: {
94
- kind: `custom-${string}`
95
- authMethod: 'id-token' | 'authcode' | 'authcode-pkce'
96
- issuer: string
97
- oauthUrl: string
98
- clientId: string
99
- }[]
112
+ customProviders?: CustomIdentityProvider[]
100
113
  }
101
114
  }
102
115
 
@@ -112,18 +125,14 @@ export type ResolvedIdentityOptions = {
112
125
  google: {
113
126
  enabled: boolean
114
127
  clientId: string
128
+ authMethod: 'authcode-pkce' | 'id-token'
115
129
  }
116
130
  apple: {
117
131
  enabled: boolean
118
132
  clientId: string
133
+ authMethod: 'authcode' | 'id-token'
119
134
  }
120
- customProviders?: {
121
- kind: `custom-${string}`
122
- authMethod: 'id-token' | 'authcode' | 'authcode-pkce'
123
- issuer: string
124
- oauthUrl: string
125
- clientId: string
126
- }[]
135
+ customProviders?: CustomIdentityProvider[]
127
136
  }
128
137
 
129
138
  export type ResolvedManagerOptions = {
@@ -248,10 +257,12 @@ export const ManagerOptionsDefaults = {
248
257
  google: {
249
258
  enabled: false,
250
259
  clientId: '',
260
+ authMethod: 'authcode-pkce' as const,
251
261
  },
252
262
  apple: {
253
263
  enabled: false,
254
264
  clientId: '',
265
+ authMethod: 'authcode' as const,
255
266
  },
256
267
  },
257
268
  }
@@ -677,42 +688,84 @@ export class Manager {
677
688
  shared.handlers.set(Kinds.LoginEmailOtp, this.otpHandler)
678
689
  }
679
690
  if (ops.identity.google?.enabled) {
680
- shared.handlers.set(
681
- Kinds.LoginGooglePkce,
682
- new AuthCodePkceHandler(
683
- 'google-pkce',
684
- 'https://accounts.google.com',
685
- 'https://accounts.google.com/o/oauth2/v2/auth',
686
- ops.identity.google.clientId,
687
- identityInstrument,
688
- modules.signatures,
689
- shared.databases.authCommitments,
690
- shared.databases.authKeys,
691
- shared.env,
692
- ),
693
- )
691
+ if (ops.identity.google.authMethod === 'id-token') {
692
+ shared.handlers.set(
693
+ Kinds.LoginGoogle,
694
+ new IdTokenHandler(
695
+ 'google-id-token',
696
+ 'https://accounts.google.com',
697
+ ops.identity.google.clientId,
698
+ identityInstrument,
699
+ modules.signatures,
700
+ shared.databases.authKeys,
701
+ shared.env,
702
+ ),
703
+ )
704
+ } else {
705
+ shared.handlers.set(
706
+ Kinds.LoginGoogle,
707
+ new AuthCodePkceHandler(
708
+ 'google-pkce',
709
+ 'https://accounts.google.com',
710
+ 'https://accounts.google.com/o/oauth2/v2/auth',
711
+ ops.identity.google.clientId,
712
+ identityInstrument,
713
+ modules.signatures,
714
+ shared.databases.authCommitments,
715
+ shared.databases.authKeys,
716
+ shared.env,
717
+ ),
718
+ )
719
+ }
694
720
  }
695
721
  if (ops.identity.apple?.enabled) {
696
- shared.handlers.set(
697
- Kinds.LoginApple,
698
- new AuthCodeHandler(
699
- 'apple',
700
- 'https://appleid.apple.com',
701
- 'https://appleid.apple.com/auth/authorize',
702
- ops.identity.apple.clientId,
703
- identityInstrument,
704
- modules.signatures,
705
- shared.databases.authCommitments,
706
- shared.databases.authKeys,
707
- shared.env,
708
- ),
709
- )
722
+ if (ops.identity.apple.authMethod === 'id-token') {
723
+ shared.handlers.set(
724
+ Kinds.LoginApple,
725
+ new IdTokenHandler(
726
+ 'apple-id-token',
727
+ 'https://appleid.apple.com',
728
+ ops.identity.apple.clientId,
729
+ identityInstrument,
730
+ modules.signatures,
731
+ shared.databases.authKeys,
732
+ shared.env,
733
+ ),
734
+ )
735
+ } else {
736
+ shared.handlers.set(
737
+ Kinds.LoginApple,
738
+ new AuthCodeHandler(
739
+ 'apple',
740
+ 'https://appleid.apple.com',
741
+ 'https://appleid.apple.com/auth/authorize',
742
+ ops.identity.apple.clientId,
743
+ identityInstrument,
744
+ modules.signatures,
745
+ shared.databases.authCommitments,
746
+ shared.databases.authKeys,
747
+ shared.env,
748
+ ),
749
+ )
750
+ }
710
751
  }
711
752
  if (ops.identity.customProviders?.length) {
712
753
  for (const provider of ops.identity.customProviders) {
713
754
  switch (provider.authMethod) {
714
755
  case 'id-token':
715
- throw new Error('id-token is not supported yet')
756
+ shared.handlers.set(
757
+ provider.kind,
758
+ new IdTokenHandler(
759
+ provider.kind,
760
+ provider.issuer,
761
+ provider.clientId,
762
+ identityInstrument,
763
+ modules.signatures,
764
+ shared.databases.authKeys,
765
+ shared.env,
766
+ ),
767
+ )
768
+ break
716
769
  case 'authcode':
717
770
  shared.handlers.set(
718
771
  provider.kind,
@@ -770,6 +823,20 @@ export class Manager {
770
823
  return this.otpHandler?.registerUI(onPromptOtp) || (() => {})
771
824
  }
772
825
 
826
+ public registerIdTokenUI(onPromptIdToken: PromptIdTokenHandler) {
827
+ const unregisters: (() => void)[] = []
828
+
829
+ this.shared.handlers.forEach((handler) => {
830
+ if (handler instanceof IdTokenHandler) {
831
+ unregisters.push(handler.registerUI(onPromptIdToken))
832
+ }
833
+ })
834
+
835
+ return () => {
836
+ unregisters.forEach((unregister) => unregister())
837
+ }
838
+ }
839
+
773
840
  public registerGuardUI(onPromptCode: PromptCodeHandler) {
774
841
  return this.guardHandler?.registerUI(onPromptCode) || (() => {})
775
842
  }
@@ -9,7 +9,9 @@ import {
9
9
  SessionConfig,
10
10
  } from '@0xsequence/wallet-primitives'
11
11
  import { Address, Bytes, Hash, Hex } from 'ox'
12
+ import { AuthCodeHandler } from './handlers/authcode.js'
12
13
  import { AuthCodePkceHandler } from './handlers/authcode-pkce.js'
14
+ import { IdTokenHandler } from './handlers/idtoken.js'
13
15
  import { IdentityHandler, identityTypeToHex } from './handlers/identity.js'
14
16
  import { Handler } from './handlers/index.js'
15
17
  import { ManagerOptionsDefaults, Shared } from './manager.js'
@@ -362,7 +364,11 @@ export class Sessions implements SessionsInterface {
362
364
  let audienceHash: Hex.Hex = '0x'
363
365
  if (handler instanceof IdentityHandler) {
364
366
  identityType = handler.identityType
365
- if (handler instanceof AuthCodePkceHandler) {
367
+ if (
368
+ handler instanceof AuthCodeHandler ||
369
+ handler instanceof AuthCodePkceHandler ||
370
+ handler instanceof IdTokenHandler
371
+ ) {
366
372
  issuerHash = Hash.keccak256(Hex.fromString(handler.issuer))
367
373
  audienceHash = Hash.keccak256(Hex.fromString(handler.audience))
368
374
  }
@@ -12,6 +12,11 @@ function toKnownKind(kind: string): Kind {
12
12
  return kind as Kind
13
13
  }
14
14
 
15
+ if (kind === 'login-google-pkce') {
16
+ // Normalize legacy Google PKCE witnesses while the canonical signer kind is `login-google`.
17
+ return Kinds.LoginGoogle
18
+ }
19
+
15
20
  if (Object.values(Kinds).includes(kind as (typeof Kinds)[keyof typeof Kinds])) {
16
21
  return kind as Kind
17
22
  }
@@ -5,7 +5,7 @@ export const Kinds = {
5
5
  LoginPasskey: 'login-passkey',
6
6
  LoginMnemonic: 'login-mnemonic', // Todo: do not name it login-mnemonic, just mnemonic
7
7
  LoginEmailOtp: 'login-email-otp',
8
- LoginGooglePkce: 'login-google-pkce',
8
+ LoginGoogle: 'login-google',
9
9
  LoginApple: 'login-apple',
10
10
  Recovery: 'recovery-extension',
11
11
  Guard: 'guard-extension',
@@ -36,7 +36,7 @@ export interface Wallet {
36
36
 
37
37
  /**
38
38
  * A string identifier for the authentication method used for this session.
39
- * Examples: 'login-mnemonic', 'login-passkey', 'login-google-pkce'.
39
+ * Examples: 'login-mnemonic', 'login-passkey', 'login-google'.
40
40
  * @property
41
41
  */
42
42
  loginType: string