@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.
- package/.turbo/turbo-build.log +1 -1
- package/.turbo/turbo-lint.log +1 -1
- package/.turbo/turbo-typecheck.log +1 -1
- package/CHANGELOG.md +24 -0
- package/dist/sequence/handlers/authcode.d.ts.map +1 -1
- package/dist/sequence/handlers/authcode.js +6 -0
- package/dist/sequence/handlers/identity.d.ts +1 -0
- package/dist/sequence/handlers/identity.d.ts.map +1 -1
- package/dist/sequence/handlers/identity.js +3 -0
- package/dist/sequence/handlers/idtoken.d.ts +33 -0
- package/dist/sequence/handlers/idtoken.d.ts.map +1 -0
- package/dist/sequence/handlers/idtoken.js +113 -0
- package/dist/sequence/handlers/index.d.ts +1 -0
- package/dist/sequence/handlers/index.d.ts.map +1 -1
- package/dist/sequence/handlers/index.js +1 -0
- package/dist/sequence/manager.d.ts +23 -14
- package/dist/sequence/manager.d.ts.map +1 -1
- package/dist/sequence/manager.js +28 -4
- package/dist/sequence/sessions.d.ts.map +1 -1
- package/dist/sequence/sessions.js +5 -1
- package/dist/sequence/signers.d.ts.map +1 -1
- package/dist/sequence/signers.js +4 -0
- package/dist/sequence/types/signer.d.ts +1 -1
- package/dist/sequence/types/signer.js +1 -1
- package/dist/sequence/types/wallet.d.ts +1 -1
- package/dist/sequence/wallets.d.ts +7 -1
- package/dist/sequence/wallets.d.ts.map +1 -1
- package/dist/sequence/wallets.js +73 -7
- package/package.json +6 -6
- package/src/sequence/handlers/authcode.ts +6 -0
- package/src/sequence/handlers/identity.ts +4 -0
- package/src/sequence/handlers/idtoken.ts +146 -0
- package/src/sequence/handlers/index.ts +1 -0
- package/src/sequence/manager.ts +110 -43
- package/src/sequence/sessions.ts +7 -1
- package/src/sequence/signers.ts +5 -0
- package/src/sequence/types/signer.ts +1 -1
- package/src/sequence/types/wallet.ts +1 -1
- package/src/sequence/wallets.ts +98 -9
- package/test/authcode-pkce.test.ts +1 -1
- package/test/authcode.test.ts +2 -2
- package/test/identity-auth-dbs.test.ts +122 -2
- package/test/identity-signer.test.ts +1 -1
- package/test/idtoken.test.ts +343 -0
- package/test/sessions-idtoken.test.ts +98 -0
- package/test/signers-kindof.test.ts +22 -0
- package/test/wallets.test.ts +202 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/sequence/wallets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAsB,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,OAAO,EAA+B,MAAM,IAAI,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/sequence/wallets.ts"],"names":[],"mappings":"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"}
|
package/dist/sequence/wallets.js
CHANGED
|
@@ -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 '
|
|
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(
|
|
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:
|
|
342
|
+
signerKind: getSignerKindForSignup(args.kind),
|
|
293
343
|
},
|
|
294
344
|
loginEmail,
|
|
295
345
|
};
|
|
296
346
|
}
|
|
297
347
|
}
|
|
298
348
|
if (args.kind.startsWith('custom-')) {
|
|
299
|
-
|
|
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
|
|
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
|
|
342
|
-
const handler = this.shared.handlers.get(
|
|
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.
|
|
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.
|
|
34
|
-
"@0xsequence/
|
|
35
|
-
"@0xsequence/
|
|
36
|
-
"@0xsequence/
|
|
37
|
-
"@0xsequence/wallet-
|
|
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'
|
package/src/sequence/manager.ts
CHANGED
|
@@ -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
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
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
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
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
|
-
|
|
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
|
}
|
package/src/sequence/sessions.ts
CHANGED
|
@@ -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 (
|
|
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
|
}
|
package/src/sequence/signers.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
39
|
+
* Examples: 'login-mnemonic', 'login-passkey', 'login-google'.
|
|
40
40
|
* @property
|
|
41
41
|
*/
|
|
42
42
|
loginType: string
|