@@ -6,13 +6,18 @@ import {
66} from '@0xsequence/wallet-primitives'
77import { Address , Hex } from 'ox'
88
9- export const createDefaultV3Topology = (
9+ export type ConvertOptions = {
1010 loginSigner : {
1111 address : Address . Address
1212 imageHash ?: Hex . Hex
13- } ,
14- extensions ?: V3Extensions . Extensions ,
15- ) : V3Config . Topology => {
13+ }
14+ noWalletGuard ?: boolean
15+ noSessions ?: boolean
16+ extensions ?: V3Extensions . Extensions
17+ }
18+
19+ export const createDefaultV3Topology = ( options : ConvertOptions ) : V3Config . Topology => {
20+ const { loginSigner, extensions } = options
1621 // Login topology
1722 const loginTopology : V3Config . SapientSignerLeaf | V3Config . SignerLeaf = loginSigner . imageHash
1823 ? {
@@ -28,11 +33,13 @@ export const createDefaultV3Topology = (
2833 }
2934
3035 // Wallet guard topology
31- const walletGuardTopology : V3Config . SignerLeaf = {
32- type : 'signer' ,
33- address : '0xa2e70CeaB3Eb145F32d110383B75B330fA4e288a' , // Guard wallet signer
34- weight : 1n ,
35- }
36+ const walletGuardTopology : V3Config . SignerLeaf | undefined = options . noWalletGuard
37+ ? undefined
38+ : {
39+ type : 'signer' ,
40+ address : '0xa2e70CeaB3Eb145F32d110383B75B330fA4e288a' , // Guard wallet signer
41+ weight : 1n ,
42+ }
3643
3744 // Placeholder recovery topology
3845 const recoveryTopology : V3Config . SapientSignerLeaf = {
@@ -43,36 +50,39 @@ export const createDefaultV3Topology = (
4350 }
4451
4552 // Session topology
46- let sessionsImageHash : Hex . Hex = '0x0000000000000000000000000000000000000000000000000000000000000000'
47- if ( ! loginSigner . imageHash ) {
48- // We can't use the login signer with sessions if it is a sapient signer
49- const sessionsTopology = V3SessionConfig . emptySessionsTopology ( loginSigner . address )
50- const sessionsConfig = V3SessionConfig . sessionsTopologyToConfigurationTree ( sessionsTopology )
51- sessionsImageHash = V3GenericTree . hash ( sessionsConfig )
52- }
53- const sessionTopology : V3Config . SapientSignerLeaf = {
54- type : 'sapient-signer' ,
55- address : ( extensions ?? V3Extensions . Rc3 ) . sessions ,
56- weight : 1n ,
57- imageHash : sessionsImageHash ,
58- }
53+ let nestedSessionTopology : V3Config . NestedLeaf | undefined = undefined
54+ if ( ! options . noSessions ) {
55+ let sessionsImageHash : Hex . Hex = '0x0000000000000000000000000000000000000000000000000000000000000000'
56+ if ( ! loginSigner . imageHash ) {
57+ // We can't use the login signer with sessions if it is a sapient signer
58+ const sessionsTopology = V3SessionConfig . emptySessionsTopology ( loginSigner . address )
59+ const sessionsConfig = V3SessionConfig . sessionsTopologyToConfigurationTree ( sessionsTopology )
60+ sessionsImageHash = V3GenericTree . hash ( sessionsConfig )
61+ }
62+ const sessionTopology : V3Config . SapientSignerLeaf = {
63+ type : 'sapient-signer' ,
64+ address : ( extensions ?? V3Extensions . Rc3 ) . sessions ,
65+ weight : 1n ,
66+ imageHash : sessionsImageHash ,
67+ }
5968
60- // Sessions are protected by a guard signer
61- const sessionGuardTopology : V3Config . SignerLeaf = {
62- type : 'signer' ,
63- address : '0x18002Fc09deF9A47437cc64e270843dE094f5984' , // Guard session signer
64- weight : 1n ,
65- }
66- const nestedSessionTopology : V3Config . NestedLeaf = {
67- type : 'nested' ,
68- weight : 255n ,
69- threshold : 2n ,
70- tree : [ sessionTopology , sessionGuardTopology ] ,
69+ // Sessions are protected by a guard signer
70+ const sessionGuardTopology : V3Config . SignerLeaf = {
71+ type : 'signer' ,
72+ address : '0x18002Fc09deF9A47437cc64e270843dE094f5984' , // Guard session signer
73+ weight : 1n ,
74+ }
75+ nestedSessionTopology = {
76+ type : 'nested' ,
77+ weight : 255n ,
78+ threshold : 2n ,
79+ tree : [ sessionTopology , sessionGuardTopology ] ,
80+ }
7181 }
7282
7383 // Return the wallet topology
7484 return [
75- [ loginTopology , walletGuardTopology ] ,
76- [ recoveryTopology , nestedSessionTopology ] ,
85+ walletGuardTopology ? [ loginTopology , walletGuardTopology ] : loginTopology ,
86+ nestedSessionTopology ? [ recoveryTopology , nestedSessionTopology ] : recoveryTopology ,
7787 ]
7888}
0 commit comments