diff --git a/packages/services/api/CHANGELOG.md b/packages/services/api/CHANGELOG.md index abf1bac7a..12115dd1b 100644 --- a/packages/services/api/CHANGELOG.md +++ b/packages/services/api/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/api +## 3.0.12 + +### Patch Changes + +- WDK fix + ## 3.0.11 ### Patch Changes diff --git a/packages/services/api/package.json b/packages/services/api/package.json index f17292579..ac1f75fcb 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/api", - "version": "3.0.11", + "version": "3.0.12", "description": "api sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/api", "author": "Sequence Platforms ULC", diff --git a/packages/services/builder/CHANGELOG.md b/packages/services/builder/CHANGELOG.md index 501288464..106229a8f 100644 --- a/packages/services/builder/CHANGELOG.md +++ b/packages/services/builder/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/builder +## 3.0.12 + +### Patch Changes + +- WDK fix + ## 3.0.11 ### Patch Changes diff --git a/packages/services/builder/package.json b/packages/services/builder/package.json index 84cf23976..ee4ae02f8 100644 --- a/packages/services/builder/package.json +++ b/packages/services/builder/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/builder", - "version": "3.0.11", + "version": "3.0.12", "description": "builder sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/builder", "author": "Sequence Platforms ULC", diff --git a/packages/services/guard/CHANGELOG.md b/packages/services/guard/CHANGELOG.md index f9125f1be..31a84379e 100644 --- a/packages/services/guard/CHANGELOG.md +++ b/packages/services/guard/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/guard +## 3.0.12 + +### Patch Changes + +- WDK fix + ## 3.0.11 ### Patch Changes diff --git a/packages/services/guard/package.json b/packages/services/guard/package.json index ab119bf89..77c8e8217 100644 --- a/packages/services/guard/package.json +++ b/packages/services/guard/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/guard", - "version": "3.0.11", + "version": "3.0.12", "description": "guard sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/guard", "author": "Sequence Platforms ULC", diff --git a/packages/services/identity-instrument/package.json b/packages/services/identity-instrument/package.json index 7940885bb..7593c5c4e 100644 --- a/packages/services/identity-instrument/package.json +++ b/packages/services/identity-instrument/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/identity-instrument", - "version": "3.0.11", + "version": "3.0.12", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/services/indexer/CHANGELOG.md b/packages/services/indexer/CHANGELOG.md index 34389ffed..c6a1e0d33 100644 --- a/packages/services/indexer/CHANGELOG.md +++ b/packages/services/indexer/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/indexer +## 3.0.12 + +### Patch Changes + +- WDK fix + ## 3.0.11 ### Patch Changes diff --git a/packages/services/indexer/package.json b/packages/services/indexer/package.json index f8b17dac8..9aa8ed4f4 100644 --- a/packages/services/indexer/package.json +++ b/packages/services/indexer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/indexer", - "version": "3.0.11", + "version": "3.0.12", "description": "indexer sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/indexer", "author": "Sequence Platforms ULC", diff --git a/packages/services/marketplace/CHANGELOG.md b/packages/services/marketplace/CHANGELOG.md index 56b3ea4a6..e7c04d933 100644 --- a/packages/services/marketplace/CHANGELOG.md +++ b/packages/services/marketplace/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/marketplace +## 3.0.12 + +### Patch Changes + +- WDK fix + ## 3.0.11 ### Patch Changes diff --git a/packages/services/marketplace/package.json b/packages/services/marketplace/package.json index 23a7866f8..117539eca 100644 --- a/packages/services/marketplace/package.json +++ b/packages/services/marketplace/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/marketplace", - "version": "3.0.11", + "version": "3.0.12", "description": "marketplace sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/marketplace", "author": "Sequence Platforms ULC", diff --git a/packages/services/metadata/CHANGELOG.md b/packages/services/metadata/CHANGELOG.md index 74d47b401..e2b877a57 100644 --- a/packages/services/metadata/CHANGELOG.md +++ b/packages/services/metadata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/metadata +## 3.0.12 + +### Patch Changes + +- WDK fix + ## 3.0.11 ### Patch Changes diff --git a/packages/services/metadata/package.json b/packages/services/metadata/package.json index 234b7ea9c..d28f855fa 100644 --- a/packages/services/metadata/package.json +++ b/packages/services/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/metadata", - "version": "3.0.11", + "version": "3.0.12", "publishConfig": { "access": "public" }, diff --git a/packages/services/relayer/CHANGELOG.md b/packages/services/relayer/CHANGELOG.md index 951a31f26..321204d54 100644 --- a/packages/services/relayer/CHANGELOG.md +++ b/packages/services/relayer/CHANGELOG.md @@ -1,5 +1,13 @@ # @0xsequence/relayer +## 3.1.1 + +### Patch Changes + +- WDK fix +- Updated dependencies + - @0xsequence/wallet-primitives@3.0.12 + ## 3.1.0 ### Minor Changes diff --git a/packages/services/relayer/package.json b/packages/services/relayer/package.json index a04d1bb17..22e669101 100644 --- a/packages/services/relayer/package.json +++ b/packages/services/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/relayer", - "version": "3.1.0", + "version": "3.1.1", "type": "module", "publishConfig": { "access": "public" diff --git a/packages/utils/abi/CHANGELOG.md b/packages/utils/abi/CHANGELOG.md index fca1d35a4..dcdd1a635 100644 --- a/packages/utils/abi/CHANGELOG.md +++ b/packages/utils/abi/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/abi +## 3.0.12 + +### Patch Changes + +- WDK fix + ## 3.0.11 ### Patch Changes diff --git a/packages/utils/abi/package.json b/packages/utils/abi/package.json index 6b6023abd..9e9e8fb33 100644 --- a/packages/utils/abi/package.json +++ b/packages/utils/abi/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/abi", - "version": "3.0.11", + "version": "3.0.12", "description": "abi sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/utils/abi", "author": "Sequence Platforms ULC", diff --git a/packages/wallet/core/package.json b/packages/wallet/core/package.json index 8fbcb9948..6b30011cb 100644 --- a/packages/wallet/core/package.json +++ b/packages/wallet/core/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-core", - "version": "3.0.11", + "version": "3.0.12", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index 71fb1098d..c7a4d1ffd 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/dapp-client", - "version": "3.1.0", + "version": "3.1.1", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/primitives-cli/src/subcommands/server.ts b/packages/wallet/primitives-cli/src/subcommands/server.ts index f42c1b440..6f932fcd7 100644 --- a/packages/wallet/primitives-cli/src/subcommands/server.ts +++ b/packages/wallet/primitives-cli/src/subcommands/server.ts @@ -137,11 +137,10 @@ const rpcMethods: Record Promise> = { return result }, async session_encodeCallSignatures(params) { - const { sessionTopology, callSignatures, explicitSigners, implicitSigners, identitySigner } = params + const { sessionTopology, callSignatures, explicitSigners, implicitSigners } = params const result = await session.doEncodeSessionCallSignatures( JSON.stringify(sessionTopology), callSignatures.map(JSON.stringify), - identitySigner, explicitSigners, implicitSigners, ) diff --git a/packages/wallet/primitives/package.json b/packages/wallet/primitives/package.json index 030a752f9..26aa2adba 100644 --- a/packages/wallet/primitives/package.json +++ b/packages/wallet/primitives/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-primitives", - "version": "3.0.11", + "version": "3.0.12", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 9f6c02084..4f5136aed 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-wdk", - "version": "3.1.0", + "version": "3.1.1", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/wdk/src/sequence/index.ts b/packages/wallet/wdk/src/sequence/index.ts index d2afe15a3..b3081a2a9 100644 --- a/packages/wallet/wdk/src/sequence/index.ts +++ b/packages/wallet/wdk/src/sequence/index.ts @@ -15,6 +15,8 @@ export type { MnemonicSignupArgs, EmailOtpSignupArgs, CompleteRedirectArgs, + CompleteRedirectWithMetadataArgs, + CompleteRedirectMetadataResult, SignupArgs, AddLoginSignerArgs, RemoveLoginSignerArgs, diff --git a/packages/wallet/wdk/src/sequence/wallets.ts b/packages/wallet/wdk/src/sequence/wallets.ts index 5746f7a83..2d3af321b 100644 --- a/packages/wallet/wdk/src/sequence/wallets.ts +++ b/packages/wallet/wdk/src/sequence/wallets.ts @@ -101,6 +101,23 @@ export type IdTokenSignupArgs = CommonSignupArgs & { export type CompleteRedirectArgs = CommonSignupArgs & { state: string code: string + includeMetadata?: false +} + +export type CompleteRedirectWithMetadataArgs = Omit & { + includeMetadata: true +} + +export type CompleteRedirectMetadataResult = { + target: string + addedLoginSigner?: { + wallet: Address.Address + signer: { + address: Address.Address + kind: string + email?: string + } + } } export type AuthCodeSignupArgs = CommonSignupArgs & { @@ -278,6 +295,7 @@ export interface WalletsInterface { * @param args The arguments containing the `state` and `code` from the redirect, along with original sign-up options. * @returns A promise that resolves to target path that should be redirected to. */ + completeRedirect(args: CompleteRedirectWithMetadataArgs): Promise completeRedirect(args: CompleteRedirectArgs): Promise /** @@ -923,12 +941,18 @@ export class Wallets implements WalletsInterface { return handler.commitAuth(args.target, { type: 'add-signer', wallet: args.wallet }) } - async completeRedirect(args: CompleteRedirectArgs): Promise { + async completeRedirect(args: CompleteRedirectWithMetadataArgs): Promise + async completeRedirect(args: CompleteRedirectArgs): Promise + async completeRedirect( + args: CompleteRedirectArgs | CompleteRedirectWithMetadataArgs, + ): Promise { const commitment = await this.shared.databases.authCommitments.get(args.state) if (!commitment) { throw new Error('invalid-state') } + let addedLoginSigner: CompleteRedirectMetadataResult['addedLoginSigner'] + switch (commitment.type) { case 'add-signer': { const handlerKind = getSignupHandlerKey(commitment.kind) @@ -949,13 +973,31 @@ export class Wallets implements WalletsInterface { throw new Error('wallet-not-ready') } - const [signer] = await handler.completeAuth(commitment, args.code) + const [signer, metadata] = await handler.completeAuth(commitment, args.code) const signerKind = getSignerKindForSignup(commitment.kind) + const signerAddress = await signer.address await this.addLoginSignerFromPrepared(walletAddress, { signer, extra: { signerKind }, }) + + const addedSigner: { + address: Address.Address + kind: string + email?: string + } = { + address: signerAddress, + kind: signerKind, + } + if (metadata?.email !== undefined) { + addedSigner.email = metadata.email + } + + addedLoginSigner = { + wallet: walletAddress, + signer: addedSigner, + } break } @@ -991,6 +1033,16 @@ export class Wallets implements WalletsInterface { throw new Error('invalid-state') } + if (args.includeMetadata) { + const result: CompleteRedirectMetadataResult = { + target: commitment.target, + } + if (addedLoginSigner) { + result.addedLoginSigner = addedLoginSigner + } + return result + } + return commitment.target } diff --git a/packages/wallet/wdk/test/wallets.test.ts b/packages/wallet/wdk/test/wallets.test.ts index d686ac257..d2d1a6ee8 100644 --- a/packages/wallet/wdk/test/wallets.test.ts +++ b/packages/wallet/wdk/test/wallets.test.ts @@ -163,6 +163,109 @@ describe('Wallets', () => { expect(commitAuthSpy).toHaveBeenCalledWith('/auth/return', { type: 'auth' }) }) + it('Should expose added login signer metadata from redirect when requested', async () => { + manager = newManager({ + identity: { + google: { + enabled: true, + clientId: 'test-google-client-id', + }, + }, + }) + + const wallet = await manager.wallets.signUp({ + mnemonic: Mnemonic.random(Mnemonic.english), + kind: 'mnemonic', + noGuard: true, + }) + expect(wallet).toBeDefined() + + const handler = (manager as any).shared.handlers.get(Kinds.LoginGoogle) as AuthCodePkceHandler + const addedSigner = MnemonicHandler.toSigner(Mnemonic.random(Mnemonic.english)) + if (!addedSigner) { + throw new Error('Failed to create added login signer for test') + } + + const completeAuthSpy = vi + .spyOn(handler, 'completeAuth') + .mockResolvedValue([addedSigner as unknown as IdentitySigner, { email: 'secondary-google-user@example.com' }]) + + const state = 'add-signer-state-with-metadata' + await (manager as any).shared.databases.authCommitments.set({ + id: state, + kind: 'google-pkce', + metadata: {}, + target: '/account/signers', + type: 'add-signer', + wallet: wallet!, + }) + + const result = await manager.wallets.completeRedirect({ + state, + code: 'auth-code', + includeMetadata: true, + }) + + expect(completeAuthSpy).toHaveBeenCalledWith(expect.objectContaining({ id: state }), 'auth-code') + expect(result).toEqual({ + target: '/account/signers', + addedLoginSigner: { + wallet, + signer: { + address: await addedSigner.address, + kind: Kinds.LoginGoogle, + email: 'secondary-google-user@example.com', + }, + }, + }) + }) + + it('Should keep returning the redirect target string when metadata is not requested', async () => { + manager = newManager({ + identity: { + google: { + enabled: true, + clientId: 'test-google-client-id', + }, + }, + }) + + const wallet = await manager.wallets.signUp({ + mnemonic: Mnemonic.random(Mnemonic.english), + kind: 'mnemonic', + noGuard: true, + }) + expect(wallet).toBeDefined() + + const handler = (manager as any).shared.handlers.get(Kinds.LoginGoogle) as AuthCodePkceHandler + const addedSigner = MnemonicHandler.toSigner(Mnemonic.random(Mnemonic.english)) + if (!addedSigner) { + throw new Error('Failed to create added login signer for test') + } + + vi.spyOn(handler, 'completeAuth').mockResolvedValue([ + addedSigner as unknown as IdentitySigner, + { email: 'secondary-google-user@example.com' }, + ]) + + const state = 'add-signer-state-without-metadata' + await (manager as any).shared.databases.authCommitments.set({ + id: state, + kind: 'google-pkce', + metadata: {}, + target: '/account/signers', + type: 'add-signer', + wallet: wallet!, + }) + + const result = await manager.wallets.completeRedirect({ + state, + code: 'auth-code', + }) + + expect(result).toBe('/account/signers') + }) + it('Should reject google-id-token signup when Google is configured for redirect auth', async () => { manager = newManager({ identity: {