Skip to content

Commit 241efd0

Browse files
committed
Completing configuration update deletes other pending updates
1 parent b1a4fe9 commit 241efd0

1 file changed

Lines changed: 18 additions & 5 deletions

File tree

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

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
import { Address, Bytes, Hex } from 'ox'
2-
import * as Db from '../dbs'
3-
import { Config, Payload } from '@0xsequence/wallet-primitives'
41
import { Envelope } from '@0xsequence/wallet-core'
2+
import { Config } from '@0xsequence/wallet-primitives'
3+
import { Hex } from 'ox'
54
import { v7 as uuidv7 } from 'uuid'
5+
import * as Db from '../dbs'
66
import { Shared } from './manager'
7-
import { Handler } from './handlers'
87
import { BaseSignatureRequest, SignatureRequest, SignerBase, SignerSigned, SignerUnavailable } from './types'
98

109
export class Signatures {
@@ -142,7 +141,21 @@ export class Signatures {
142141
}
143142

144143
async complete(requestId: string) {
145-
await this.shared.databases.signatures.del(requestId)
144+
const request = await this.shared.databases.signatures.get(requestId)
145+
if (request?.envelope.payload.type === 'config-update') {
146+
// Clear pending config updates for the same wallet with a checkpoint equal or lower than the completed update
147+
const pendingRequests = await this.shared.databases.signatures.list()
148+
const pendingConfigUpdatesToClear = pendingRequests.filter(
149+
(sig) =>
150+
sig.wallet === request.wallet &&
151+
sig.envelope.payload.type === 'config-update' &&
152+
sig.envelope.configuration.checkpoint <= request.envelope.configuration.checkpoint,
153+
)
154+
// This also deletes the requested id
155+
await Promise.all(pendingConfigUpdatesToClear.map((sig) => this.shared.modules.signatures.delete(sig.id)))
156+
} else {
157+
await this.shared.databases.signatures.del(requestId)
158+
}
146159
}
147160

148161
async request<A extends Db.Action>(

0 commit comments

Comments
 (0)