Skip to content

Commit f128a07

Browse files
committed
Add modify explicit session
1 parent c431e53 commit f128a07

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

packages/wallet/wdk/src/sequence/manager.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -581,6 +581,15 @@ export class Manager {
581581
// Run completeSessionUpdate next
582582
}
583583

584+
public async modifyExplicitSession(
585+
walletAddress: Address.Address,
586+
sessionAddress: Address.Address,
587+
permissions: CoreSigners.Session.ExplicitParams,
588+
): Promise<string> {
589+
return this.shared.modules.sessions.modifyExplicitSession(walletAddress, sessionAddress, permissions)
590+
// Run completeSessionUpdate next
591+
}
592+
584593
public async removeExplicitSession(walletAddress: Address.Address, sessionAddress: Address.Address): Promise<string> {
585594
return this.shared.modules.sessions.removeExplicitSession(walletAddress, sessionAddress)
586595
// Run completeSessionUpdate next

packages/wallet/wdk/src/sequence/sessions.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,25 @@ export class Sessions {
175175
return this.prepareSessionUpdate(walletAddress, newTopology, origin)
176176
}
177177

178+
async modifyExplicitSession(
179+
walletAddress: Address.Address,
180+
sessionAddress: Address.Address,
181+
permissions: CoreSigners.Session.ExplicitParams,
182+
origin?: string,
183+
): Promise<string> {
184+
// This will add the session manager if it's missing
185+
const topology = await this.getSessionTopology(walletAddress, true)
186+
const intermediateTopology = SessionConfig.removeExplicitSession(topology, sessionAddress)
187+
if (!intermediateTopology) {
188+
throw new Error('Incomplete session topology')
189+
}
190+
const newTopology = SessionConfig.addExplicitSession(intermediateTopology, {
191+
...permissions,
192+
signer: sessionAddress,
193+
})
194+
return this.prepareSessionUpdate(walletAddress, newTopology, origin)
195+
}
196+
178197
async removeExplicitSession(
179198
walletAddress: Address.Address,
180199
sessionAddress: Address.Address,
@@ -183,7 +202,7 @@ export class Sessions {
183202
const topology = await this.getSessionTopology(walletAddress)
184203
const newTopology = SessionConfig.removeExplicitSession(topology, sessionAddress)
185204
if (!newTopology) {
186-
throw new Error('Session not found')
205+
throw new Error('Incomplete session topology')
187206
}
188207
return this.prepareSessionUpdate(walletAddress, newTopology, origin)
189208
}

0 commit comments

Comments
 (0)