@canton-network/core-wallet-store-inmemory 0.31.1 → 0.32.0
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/dist/StoreInternal.d.ts +5 -4
- package/dist/StoreInternal.d.ts.map +1 -1
- package/dist/index.cjs +24 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +24 -19
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/dist/StoreInternal.d.ts
CHANGED
|
@@ -50,11 +50,12 @@ export declare class StoreInternal implements Store, AuthAware<StoreInternal> {
|
|
|
50
50
|
removeNetwork(networkId: string): Promise<void>;
|
|
51
51
|
private mergeTransactionStatusUpdate;
|
|
52
52
|
setTransaction(transaction: Transaction): Promise<void>;
|
|
53
|
-
setTransactionSigned(
|
|
54
|
-
setTransactionStatus(
|
|
55
|
-
getTransaction(
|
|
53
|
+
setTransactionSigned(transactionId: string, signedAt: Date, externalTxId?: string): Promise<void>;
|
|
54
|
+
setTransactionStatus(transactionId: string, status: Transaction['status'], updates?: TransactionStatusUpdate): Promise<void>;
|
|
55
|
+
getTransaction(transactionId: string): Promise<Transaction | undefined>;
|
|
56
|
+
getLatestTransactionByCommandId(commandId: string): Promise<Transaction | undefined>;
|
|
56
57
|
listTransactions(): Promise<Array<Transaction>>;
|
|
57
|
-
removeTransaction(
|
|
58
|
+
removeTransaction(transactionId: string): Promise<void>;
|
|
58
59
|
}
|
|
59
60
|
export {};
|
|
60
61
|
//# sourceMappingURL=StoreInternal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreInternal.d.ts","sourceRoot":"","sources":["../src/StoreInternal.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"StoreInternal.d.ts","sourceRoot":"","sources":["../src/StoreInternal.ts"],"names":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -341,6 +341,7 @@ var StoreInternal = class _StoreInternal {
|
|
|
341
341
|
const signedAt = updates.signedAt ?? existing.signedAt;
|
|
342
342
|
const externalTxId = updates.externalTxId ?? existing.externalTxId;
|
|
343
343
|
return {
|
|
344
|
+
id: existing.id,
|
|
344
345
|
commandId: existing.commandId,
|
|
345
346
|
status,
|
|
346
347
|
preparedTransaction: existing.preparedTransaction,
|
|
@@ -358,52 +359,56 @@ var StoreInternal = class _StoreInternal {
|
|
|
358
359
|
async setTransaction(transaction) {
|
|
359
360
|
this.assertConnected();
|
|
360
361
|
const storage = this.getStorage();
|
|
361
|
-
|
|
362
|
-
if (existing) {
|
|
363
|
-
throw new Error(
|
|
364
|
-
`Transaction with commandId "${transaction.commandId}" already exists`
|
|
365
|
-
);
|
|
366
|
-
}
|
|
367
|
-
storage.transactions.set(transaction.commandId, transaction);
|
|
362
|
+
storage.transactions.set(transaction.id, transaction);
|
|
368
363
|
this.updateStorage(storage);
|
|
369
364
|
}
|
|
370
|
-
async setTransactionSigned(
|
|
371
|
-
await this.setTransactionStatus(
|
|
365
|
+
async setTransactionSigned(transactionId, signedAt, externalTxId) {
|
|
366
|
+
await this.setTransactionStatus(transactionId, "signed", {
|
|
372
367
|
signedAt,
|
|
373
368
|
...externalTxId !== void 0 && { externalTxId }
|
|
374
369
|
});
|
|
375
370
|
}
|
|
376
|
-
async setTransactionStatus(
|
|
371
|
+
async setTransactionStatus(transactionId, status, updates = {}) {
|
|
377
372
|
this.assertConnected();
|
|
378
373
|
const storage = this.getStorage();
|
|
379
|
-
const existing = storage.transactions.get(
|
|
374
|
+
const existing = storage.transactions.get(transactionId);
|
|
380
375
|
if (!existing) {
|
|
381
|
-
throw new Error(
|
|
382
|
-
`Transaction not found with commandId: ${commandId}`
|
|
383
|
-
);
|
|
376
|
+
throw new Error(`Transaction not found with id: ${transactionId}`);
|
|
384
377
|
}
|
|
385
378
|
const updated = this.mergeTransactionStatusUpdate(
|
|
386
379
|
existing,
|
|
387
380
|
status,
|
|
388
381
|
updates
|
|
389
382
|
);
|
|
390
|
-
storage.transactions.set(
|
|
383
|
+
storage.transactions.set(transactionId, updated);
|
|
391
384
|
this.updateStorage(storage);
|
|
392
385
|
}
|
|
393
|
-
async getTransaction(
|
|
386
|
+
async getTransaction(transactionId) {
|
|
394
387
|
this.assertConnected();
|
|
395
388
|
const storage = this.getStorage();
|
|
396
|
-
return storage.transactions.get(
|
|
389
|
+
return storage.transactions.get(transactionId);
|
|
390
|
+
}
|
|
391
|
+
async getLatestTransactionByCommandId(commandId) {
|
|
392
|
+
this.assertConnected();
|
|
393
|
+
const storage = this.getStorage();
|
|
394
|
+
return Array.from(storage.transactions.values()).filter((tx) => tx.commandId === commandId).sort((a, b) => {
|
|
395
|
+
const aTime = a.createdAt?.getTime() ?? 0;
|
|
396
|
+
const bTime = b.createdAt?.getTime() ?? 0;
|
|
397
|
+
if (aTime !== bTime) {
|
|
398
|
+
return bTime - aTime;
|
|
399
|
+
}
|
|
400
|
+
return b.id.localeCompare(a.id);
|
|
401
|
+
})[0];
|
|
397
402
|
}
|
|
398
403
|
async listTransactions() {
|
|
399
404
|
this.assertConnected();
|
|
400
405
|
const storage = this.getStorage();
|
|
401
406
|
return Array.from(storage.transactions.values());
|
|
402
407
|
}
|
|
403
|
-
async removeTransaction(
|
|
408
|
+
async removeTransaction(transactionId) {
|
|
404
409
|
this.assertConnected();
|
|
405
410
|
const storage = this.getStorage();
|
|
406
|
-
storage.transactions.delete(
|
|
411
|
+
storage.transactions.delete(transactionId);
|
|
407
412
|
this.updateStorage(storage);
|
|
408
413
|
}
|
|
409
414
|
};
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/StoreInternal.ts"],"names":["assertConnected","AuthTokenProvider","LedgerClient","defaultRetryableOptions","PartyLevelRight"],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Logger } from 'pino'\nimport {\n AuthContext,\n UserId,\n AuthAware,\n assertConnected,\n Idp,\n AuthTokenProvider,\n} from '@canton-network/core-wallet-auth'\nimport {\n Store,\n Wallet,\n PartyId,\n Session,\n WalletFilter,\n Transaction,\n Network,\n UpdateWallet,\n PartyLevelRight,\n TransactionStatusUpdate,\n UserLevelRight,\n} from '@canton-network/core-wallet-store'\nimport {\n LedgerClient,\n defaultRetryableOptions,\n} from '@canton-network/core-ledger-client'\nimport { CurrentNetworkWalletFilter } from '@canton-network/core-wallet-store'\n\ninterface UserStorage {\n wallets: Array<Wallet>\n transactions: Map<string, Transaction>\n session: Session | undefined\n userRightsByNetwork: Map<string, Set<UserLevelRight>>\n}\n\nexport interface StoreInternalConfig {\n idps: Array<Idp>\n networks: Array<Network>\n}\n\ntype Memory = Map<UserId, UserStorage>\n\n// TODO: remove AuthAware and instead provide wrapper in clients\nexport class StoreInternal implements Store, AuthAware<StoreInternal> {\n private logger: Logger\n private systemStorage: StoreInternalConfig\n private userStorage: Memory\n\n authContext: AuthContext | undefined\n\n constructor(\n config: StoreInternalConfig,\n logger: Logger,\n authContext?: AuthContext,\n userStorage?: Memory\n ) {\n this.logger = logger.child({ component: 'StoreInternal' })\n this.systemStorage = config\n this.authContext = authContext\n this.userStorage = userStorage || new Map()\n\n this.syncWallets()\n }\n\n withAuthContext(context?: AuthContext): StoreInternal {\n return new StoreInternal(\n this.systemStorage,\n this.logger,\n context,\n this.userStorage\n )\n }\n\n static createStorage(): UserStorage {\n return {\n wallets: [],\n transactions: new Map<string, Transaction>(),\n session: undefined,\n userRightsByNetwork: new Map<string, Set<UserLevelRight>>(),\n }\n }\n\n private assertConnected(): UserId {\n return assertConnected(this.authContext).userId\n }\n\n private getStorage(): UserStorage {\n const userId = this.assertConnected()\n if (!this.userStorage.has(userId)) {\n this.userStorage.set(userId, StoreInternal.createStorage())\n }\n return this.userStorage.get(userId)!\n }\n\n private updateStorage(storage: UserStorage): void {\n const userId = this.assertConnected()\n this.userStorage.set(userId, storage)\n }\n\n // Wallet methods\n\n private async syncWallets(): Promise<void> {\n try {\n const network = await this.getCurrentNetwork()\n\n // Get existing parties from participant\n const userAccessTokenProvider = AuthTokenProvider.fromToken(\n this.authContext!.accessToken,\n this.logger\n )\n\n const ledgerClient = new LedgerClient({\n baseUrl: new URL(network.ledgerApi.baseUrl),\n logger: this.logger,\n accessTokenProvider: userAccessTokenProvider,\n })\n const rights = await ledgerClient.getWithRetry(\n '/v2/users/{user-id}/rights',\n defaultRetryableOptions,\n {\n path: {\n 'user-id': this.authContext!.userId,\n },\n }\n )\n const rightsByParty = new Map<string, Set<PartyLevelRight>>()\n const getRights = (party: string) => {\n const existing = rightsByParty.get(party)\n if (existing) return existing\n const created = new Set<PartyLevelRight>()\n rightsByParty.set(party, created)\n return created\n }\n rights.rights?.forEach((right) => {\n if (!right || !right.kind) {\n return\n }\n if ('CanActAs' in right.kind) {\n getRights(right.kind.CanActAs.value.party).add(\n PartyLevelRight.CanActAs\n )\n } else if ('CanReadAs' in right.kind) {\n getRights(right.kind.CanReadAs.value.party).add(\n PartyLevelRight.CanReadAs\n )\n } else if ('CanExecuteAs' in right.kind) {\n getRights(right.kind.CanExecuteAs.value.party).add(\n PartyLevelRight.CanExecuteAs\n )\n }\n })\n const parties = Array.from(rightsByParty.keys())\n\n // Merge Wallets - check for duplicates by (partyId, networkId)\n const existingWallets = await this.getAllWallets({\n networkIds: [network.id],\n })\n const existingPartyNetworkPairs = new Set(\n existingWallets.map((w) => `${w.partyId}:${w.networkId}`)\n )\n const participantWallets: Array<Wallet> =\n parties\n ?.filter(\n (party) =>\n !existingPartyNetworkPairs.has(\n `${party}:${network.id}`\n )\n // todo: filter on idp id\n )\n .map((party) => {\n const [hint, namespace] = party.split('::')\n return {\n primary: false,\n partyId: party,\n status: 'allocated',\n hint: hint,\n publicKey: namespace,\n namespace: namespace,\n networkId: network.id,\n signingProviderId: 'participant', // todo: determine based on partyDetails.isLocal\n rights: [...(rightsByParty.get(party) ?? [])],\n }\n }) || []\n const storage = this.getStorage()\n const wallets = [...storage.wallets, ...participantWallets]\n\n // Set primary wallet if none exists in this network\n const networkWallets = wallets.filter(\n (w) => w.networkId === network.id\n )\n const hasPrimary = networkWallets.some((w) => w.primary)\n if (!hasPrimary && networkWallets.length > 0) {\n networkWallets[0].primary = true\n }\n\n this.logger.debug(wallets, 'Wallets synchronized')\n\n // Update storage with new wallets\n storage.wallets = wallets\n this.updateStorage(storage)\n } catch {\n return\n }\n }\n\n async getAllWallets(filter: WalletFilter = {}): Promise<Array<Wallet>> {\n const { networkIds, signingProviderIds } = filter\n const networkIdSet = networkIds ? new Set(networkIds) : null\n const signingProviderIdSet = signingProviderIds\n ? new Set(signingProviderIds)\n : null\n\n return this.getStorage().wallets.filter((wallet) => {\n const matchedNetworkIds = networkIdSet\n ? networkIdSet.has(wallet.networkId)\n : true\n const matchedSigningProviderIds = signingProviderIdSet\n ? signingProviderIdSet.has(wallet.signingProviderId)\n : true\n return matchedNetworkIds && matchedSigningProviderIds\n })\n }\n\n async getWallets(\n filter: CurrentNetworkWalletFilter = {}\n ): Promise<Array<Wallet>> {\n const network = await this.getCurrentNetwork()\n return this.getAllWallets({\n ...filter,\n networkIds: [network.id],\n })\n }\n\n async getPrimaryWallet(): Promise<Wallet | undefined> {\n const wallets = await this.getWallets()\n return wallets.find((w) => w.primary === true)\n }\n\n async setPrimaryWallet(partyId: PartyId): Promise<void> {\n const network = await this.getCurrentNetwork()\n const storage = this.getStorage()\n const networkWallets = storage.wallets.filter(\n (w) => w.networkId === network.id\n )\n\n if (!networkWallets.some((w) => w.partyId === partyId)) {\n throw new Error(\n `Wallet with partyId \"${partyId}\" not found in network \"${network.id}\"`\n )\n }\n\n const wallets = storage.wallets.map((w) => {\n if (w.networkId === network.id) {\n if (w.partyId === partyId) {\n w.primary = true\n } else {\n w.primary = false\n }\n }\n return w\n })\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async addWallet(wallet: Wallet): Promise<void> {\n const storage = this.getStorage()\n if (\n storage.wallets.some(\n (w) =>\n w.partyId === wallet.partyId &&\n w.networkId === wallet.networkId\n )\n ) {\n throw new Error(\n `Wallet with partyId \"${wallet.partyId}\" already exists in network \"${wallet.networkId}\"`\n )\n }\n const networkWallets = await this.getAllWallets({\n networkIds: [wallet.networkId],\n })\n\n // If this is the first wallet in this network, set it as primary automatically\n if (networkWallets.length === 0) {\n wallet.primary = true\n }\n\n if (wallet.primary) {\n // If the new wallet is primary, set all others in the same network to non-primary\n storage.wallets\n .filter((w) => w.networkId === wallet.networkId)\n .map((w) => (w.primary = false))\n }\n storage.wallets.push(wallet)\n this.updateStorage(storage)\n }\n\n async updateWallet(params: UpdateWallet): Promise<void> {\n const storage = this.getStorage()\n const { partyId, networkId, ...updates } = params\n const targetNetworkId = networkId ?? (await this.getCurrentNetwork()).id\n if (Object.keys(updates).length === 0) return\n\n const wallets = storage.wallets.map((wallet) =>\n wallet.partyId === partyId && wallet.networkId === targetNetworkId\n ? { ...wallet, ...updates }\n : wallet\n )\n\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async removeWallet(partyId: PartyId): Promise<void> {\n const network = await this.getCurrentNetwork()\n const storage = this.getStorage()\n const wallets = storage.wallets.filter(\n (w) => !(w.partyId === partyId && w.networkId === network.id)\n )\n\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async getUserRights(networkId?: string): Promise<Array<UserLevelRight>> {\n const targetNetworkId = networkId ?? (await this.getCurrentNetwork()).id\n const rights =\n this.getStorage().userRightsByNetwork.get(targetNetworkId) ??\n new Set<UserLevelRight>()\n return [...rights]\n }\n\n async setUserRights(\n networkId: string,\n rights: Array<UserLevelRight>\n ): Promise<void> {\n const storage = this.getStorage()\n storage.userRightsByNetwork.set(networkId, new Set(rights))\n this.updateStorage(storage)\n }\n\n // Session methods\n async getSession(): Promise<Session | undefined> {\n return this.getStorage().session\n }\n\n async setSession(session: Session): Promise<void> {\n const storage = this.getStorage()\n storage.session = session\n this.updateStorage(storage)\n }\n\n async removeSession(): Promise<void> {\n const storage = this.getStorage()\n storage.session = undefined\n this.updateStorage(storage)\n }\n\n // IDP methods\n async getIdp(idpId: string): Promise<Idp> {\n this.assertConnected()\n const idps = await this.listIdps()\n const idp = idps.find((i) => i.id === idpId)\n if (!idp) {\n throw new Error(`IdP \"${idpId}\" not found`)\n }\n return idp\n }\n\n async listIdps(): Promise<Array<Idp>> {\n this.assertConnected()\n return this.systemStorage.idps\n }\n\n async addIdp(idp: Idp): Promise<void> {\n this.assertConnected()\n const existingIdp = await this.listIdps()\n\n if (existingIdp.find((i) => i.id === idp.id)) {\n throw new Error(`IdP \"${idp.id}\" already exists`)\n }\n\n this.systemStorage.idps.push(idp)\n }\n\n async updateIdp(idp: Idp): Promise<void> {\n this.assertConnected()\n const existingIdps = await this.listIdps()\n const index = existingIdps.findIndex((i) => i.id === idp.id)\n if (index === -1) {\n throw new Error(`IdP \"${idp.id}\" not found`)\n }\n this.systemStorage.idps[index] = idp\n }\n\n async removeIdp(idpId: string): Promise<void> {\n this.assertConnected()\n this.systemStorage.idps = this.systemStorage.idps.filter(\n (i) => i.id !== idpId\n )\n }\n\n // Network methods\n async getNetwork(networkId: string): Promise<Network> {\n this.assertConnected()\n\n const networks = await this.listNetworks()\n if (!networks) throw new Error('No networks available')\n\n const network = networks.find((n) => n.id === networkId)\n if (!network) throw new Error(`Network \"${networkId}\" not found`)\n return network\n }\n\n async getCurrentNetwork(): Promise<Network> {\n const session = this.getStorage().session\n if (!session) {\n throw new Error('No session found')\n }\n const networkId = session.network\n if (!networkId) {\n throw new Error('No current network set in session')\n }\n\n const networks = await this.listNetworks()\n const network = networks.find((n) => n.id === networkId)\n if (!network) {\n throw new Error(`Network \"${networkId}\" not found`)\n }\n return network\n }\n\n async listNetworks(): Promise<Array<Network>> {\n return this.systemStorage.networks\n }\n\n async updateNetwork(network: Network): Promise<void> {\n this.assertConnected()\n this.removeNetwork(network.id) // Ensure no duplicates\n this.systemStorage.networks.push(network)\n }\n\n async addNetwork(network: Network): Promise<void> {\n const networkAlreadyExists = this.systemStorage.networks.find(\n (n) => n.id === network.id\n )\n if (networkAlreadyExists) {\n throw new Error(`Network ${network.id} already exists`)\n } else {\n this.systemStorage.networks.push(network)\n }\n }\n\n async removeNetwork(networkId: string): Promise<void> {\n this.assertConnected()\n this.systemStorage.networks = this.systemStorage.networks.filter(\n (n) => n.id !== networkId\n )\n }\n\n private mergeTransactionStatusUpdate(\n existing: Transaction,\n status: Transaction['status'],\n updates: TransactionStatusUpdate = {}\n ): Transaction {\n const payload = updates.payload ?? existing.payload\n const signedAt = updates.signedAt ?? existing.signedAt\n const externalTxId = updates.externalTxId ?? existing.externalTxId\n\n return {\n commandId: existing.commandId,\n status,\n preparedTransaction: existing.preparedTransaction,\n preparedTransactionHash: existing.preparedTransactionHash,\n origin: existing.origin,\n ...(payload !== undefined && { payload }),\n ...(existing.createdAt !== undefined && {\n createdAt: existing.createdAt,\n }),\n ...(signedAt !== undefined && { signedAt }),\n ...(externalTxId !== undefined && { externalTxId }),\n }\n }\n\n // Transaction methods\n async setTransaction(transaction: Transaction): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n\n const existing = storage.transactions.get(transaction.commandId)\n if (existing) {\n throw new Error(\n `Transaction with commandId \"${transaction.commandId}\" already exists`\n )\n }\n\n storage.transactions.set(transaction.commandId, transaction)\n this.updateStorage(storage)\n }\n\n async setTransactionSigned(\n commandId: string,\n signedAt: Date,\n externalTxId?: string\n ): Promise<void> {\n await this.setTransactionStatus(commandId, 'signed', {\n signedAt,\n ...(externalTxId !== undefined && { externalTxId }),\n })\n }\n\n async setTransactionStatus(\n commandId: string,\n status: Transaction['status'],\n updates: TransactionStatusUpdate = {}\n ): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n const existing = storage.transactions.get(commandId)\n if (!existing) {\n throw new Error(\n `Transaction not found with commandId: ${commandId}`\n )\n }\n\n const updated = this.mergeTransactionStatusUpdate(\n existing,\n status,\n updates\n )\n\n storage.transactions.set(commandId, updated)\n this.updateStorage(storage)\n }\n\n async getTransaction(commandId: string): Promise<Transaction | undefined> {\n this.assertConnected()\n const storage = this.getStorage()\n\n return storage.transactions.get(commandId)\n }\n\n async listTransactions(): Promise<Array<Transaction>> {\n this.assertConnected()\n const storage = this.getStorage()\n\n return Array.from(storage.transactions.values())\n }\n\n async removeTransaction(commandId: string): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n\n storage.transactions.delete(commandId)\n this.updateStorage(storage)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/StoreInternal.ts"],"names":["assertConnected","AuthTokenProvider","LedgerClient","defaultRetryableOptions","PartyLevelRight"],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Logger } from 'pino'\nimport {\n AuthContext,\n UserId,\n AuthAware,\n assertConnected,\n Idp,\n AuthTokenProvider,\n} from '@canton-network/core-wallet-auth'\nimport {\n Store,\n Wallet,\n PartyId,\n Session,\n WalletFilter,\n Transaction,\n Network,\n UpdateWallet,\n PartyLevelRight,\n TransactionStatusUpdate,\n UserLevelRight,\n} from '@canton-network/core-wallet-store'\nimport {\n LedgerClient,\n defaultRetryableOptions,\n} from '@canton-network/core-ledger-client'\nimport { CurrentNetworkWalletFilter } from '@canton-network/core-wallet-store'\n\ninterface UserStorage {\n wallets: Array<Wallet>\n transactions: Map<string, Transaction>\n session: Session | undefined\n userRightsByNetwork: Map<string, Set<UserLevelRight>>\n}\n\nexport interface StoreInternalConfig {\n idps: Array<Idp>\n networks: Array<Network>\n}\n\ntype Memory = Map<UserId, UserStorage>\n\n// TODO: remove AuthAware and instead provide wrapper in clients\nexport class StoreInternal implements Store, AuthAware<StoreInternal> {\n private logger: Logger\n private systemStorage: StoreInternalConfig\n private userStorage: Memory\n\n authContext: AuthContext | undefined\n\n constructor(\n config: StoreInternalConfig,\n logger: Logger,\n authContext?: AuthContext,\n userStorage?: Memory\n ) {\n this.logger = logger.child({ component: 'StoreInternal' })\n this.systemStorage = config\n this.authContext = authContext\n this.userStorage = userStorage || new Map()\n\n this.syncWallets()\n }\n\n withAuthContext(context?: AuthContext): StoreInternal {\n return new StoreInternal(\n this.systemStorage,\n this.logger,\n context,\n this.userStorage\n )\n }\n\n static createStorage(): UserStorage {\n return {\n wallets: [],\n transactions: new Map<string, Transaction>(),\n session: undefined,\n userRightsByNetwork: new Map<string, Set<UserLevelRight>>(),\n }\n }\n\n private assertConnected(): UserId {\n return assertConnected(this.authContext).userId\n }\n\n private getStorage(): UserStorage {\n const userId = this.assertConnected()\n if (!this.userStorage.has(userId)) {\n this.userStorage.set(userId, StoreInternal.createStorage())\n }\n return this.userStorage.get(userId)!\n }\n\n private updateStorage(storage: UserStorage): void {\n const userId = this.assertConnected()\n this.userStorage.set(userId, storage)\n }\n\n // Wallet methods\n\n private async syncWallets(): Promise<void> {\n try {\n const network = await this.getCurrentNetwork()\n\n // Get existing parties from participant\n const userAccessTokenProvider = AuthTokenProvider.fromToken(\n this.authContext!.accessToken,\n this.logger\n )\n\n const ledgerClient = new LedgerClient({\n baseUrl: new URL(network.ledgerApi.baseUrl),\n logger: this.logger,\n accessTokenProvider: userAccessTokenProvider,\n })\n const rights = await ledgerClient.getWithRetry(\n '/v2/users/{user-id}/rights',\n defaultRetryableOptions,\n {\n path: {\n 'user-id': this.authContext!.userId,\n },\n }\n )\n const rightsByParty = new Map<string, Set<PartyLevelRight>>()\n const getRights = (party: string) => {\n const existing = rightsByParty.get(party)\n if (existing) return existing\n const created = new Set<PartyLevelRight>()\n rightsByParty.set(party, created)\n return created\n }\n rights.rights?.forEach((right) => {\n if (!right || !right.kind) {\n return\n }\n if ('CanActAs' in right.kind) {\n getRights(right.kind.CanActAs.value.party).add(\n PartyLevelRight.CanActAs\n )\n } else if ('CanReadAs' in right.kind) {\n getRights(right.kind.CanReadAs.value.party).add(\n PartyLevelRight.CanReadAs\n )\n } else if ('CanExecuteAs' in right.kind) {\n getRights(right.kind.CanExecuteAs.value.party).add(\n PartyLevelRight.CanExecuteAs\n )\n }\n })\n const parties = Array.from(rightsByParty.keys())\n\n // Merge Wallets - check for duplicates by (partyId, networkId)\n const existingWallets = await this.getAllWallets({\n networkIds: [network.id],\n })\n const existingPartyNetworkPairs = new Set(\n existingWallets.map((w) => `${w.partyId}:${w.networkId}`)\n )\n const participantWallets: Array<Wallet> =\n parties\n ?.filter(\n (party) =>\n !existingPartyNetworkPairs.has(\n `${party}:${network.id}`\n )\n // todo: filter on idp id\n )\n .map((party) => {\n const [hint, namespace] = party.split('::')\n return {\n primary: false,\n partyId: party,\n status: 'allocated',\n hint: hint,\n publicKey: namespace,\n namespace: namespace,\n networkId: network.id,\n signingProviderId: 'participant', // todo: determine based on partyDetails.isLocal\n rights: [...(rightsByParty.get(party) ?? [])],\n }\n }) || []\n const storage = this.getStorage()\n const wallets = [...storage.wallets, ...participantWallets]\n\n // Set primary wallet if none exists in this network\n const networkWallets = wallets.filter(\n (w) => w.networkId === network.id\n )\n const hasPrimary = networkWallets.some((w) => w.primary)\n if (!hasPrimary && networkWallets.length > 0) {\n networkWallets[0].primary = true\n }\n\n this.logger.debug(wallets, 'Wallets synchronized')\n\n // Update storage with new wallets\n storage.wallets = wallets\n this.updateStorage(storage)\n } catch {\n return\n }\n }\n\n async getAllWallets(filter: WalletFilter = {}): Promise<Array<Wallet>> {\n const { networkIds, signingProviderIds } = filter\n const networkIdSet = networkIds ? new Set(networkIds) : null\n const signingProviderIdSet = signingProviderIds\n ? new Set(signingProviderIds)\n : null\n\n return this.getStorage().wallets.filter((wallet) => {\n const matchedNetworkIds = networkIdSet\n ? networkIdSet.has(wallet.networkId)\n : true\n const matchedSigningProviderIds = signingProviderIdSet\n ? signingProviderIdSet.has(wallet.signingProviderId)\n : true\n return matchedNetworkIds && matchedSigningProviderIds\n })\n }\n\n async getWallets(\n filter: CurrentNetworkWalletFilter = {}\n ): Promise<Array<Wallet>> {\n const network = await this.getCurrentNetwork()\n return this.getAllWallets({\n ...filter,\n networkIds: [network.id],\n })\n }\n\n async getPrimaryWallet(): Promise<Wallet | undefined> {\n const wallets = await this.getWallets()\n return wallets.find((w) => w.primary === true)\n }\n\n async setPrimaryWallet(partyId: PartyId): Promise<void> {\n const network = await this.getCurrentNetwork()\n const storage = this.getStorage()\n const networkWallets = storage.wallets.filter(\n (w) => w.networkId === network.id\n )\n\n if (!networkWallets.some((w) => w.partyId === partyId)) {\n throw new Error(\n `Wallet with partyId \"${partyId}\" not found in network \"${network.id}\"`\n )\n }\n\n const wallets = storage.wallets.map((w) => {\n if (w.networkId === network.id) {\n if (w.partyId === partyId) {\n w.primary = true\n } else {\n w.primary = false\n }\n }\n return w\n })\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async addWallet(wallet: Wallet): Promise<void> {\n const storage = this.getStorage()\n if (\n storage.wallets.some(\n (w) =>\n w.partyId === wallet.partyId &&\n w.networkId === wallet.networkId\n )\n ) {\n throw new Error(\n `Wallet with partyId \"${wallet.partyId}\" already exists in network \"${wallet.networkId}\"`\n )\n }\n const networkWallets = await this.getAllWallets({\n networkIds: [wallet.networkId],\n })\n\n // If this is the first wallet in this network, set it as primary automatically\n if (networkWallets.length === 0) {\n wallet.primary = true\n }\n\n if (wallet.primary) {\n // If the new wallet is primary, set all others in the same network to non-primary\n storage.wallets\n .filter((w) => w.networkId === wallet.networkId)\n .map((w) => (w.primary = false))\n }\n storage.wallets.push(wallet)\n this.updateStorage(storage)\n }\n\n async updateWallet(params: UpdateWallet): Promise<void> {\n const storage = this.getStorage()\n const { partyId, networkId, ...updates } = params\n const targetNetworkId = networkId ?? (await this.getCurrentNetwork()).id\n if (Object.keys(updates).length === 0) return\n\n const wallets = storage.wallets.map((wallet) =>\n wallet.partyId === partyId && wallet.networkId === targetNetworkId\n ? { ...wallet, ...updates }\n : wallet\n )\n\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async removeWallet(partyId: PartyId): Promise<void> {\n const network = await this.getCurrentNetwork()\n const storage = this.getStorage()\n const wallets = storage.wallets.filter(\n (w) => !(w.partyId === partyId && w.networkId === network.id)\n )\n\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async getUserRights(networkId?: string): Promise<Array<UserLevelRight>> {\n const targetNetworkId = networkId ?? (await this.getCurrentNetwork()).id\n const rights =\n this.getStorage().userRightsByNetwork.get(targetNetworkId) ??\n new Set<UserLevelRight>()\n return [...rights]\n }\n\n async setUserRights(\n networkId: string,\n rights: Array<UserLevelRight>\n ): Promise<void> {\n const storage = this.getStorage()\n storage.userRightsByNetwork.set(networkId, new Set(rights))\n this.updateStorage(storage)\n }\n\n // Session methods\n async getSession(): Promise<Session | undefined> {\n return this.getStorage().session\n }\n\n async setSession(session: Session): Promise<void> {\n const storage = this.getStorage()\n storage.session = session\n this.updateStorage(storage)\n }\n\n async removeSession(): Promise<void> {\n const storage = this.getStorage()\n storage.session = undefined\n this.updateStorage(storage)\n }\n\n // IDP methods\n async getIdp(idpId: string): Promise<Idp> {\n this.assertConnected()\n const idps = await this.listIdps()\n const idp = idps.find((i) => i.id === idpId)\n if (!idp) {\n throw new Error(`IdP \"${idpId}\" not found`)\n }\n return idp\n }\n\n async listIdps(): Promise<Array<Idp>> {\n this.assertConnected()\n return this.systemStorage.idps\n }\n\n async addIdp(idp: Idp): Promise<void> {\n this.assertConnected()\n const existingIdp = await this.listIdps()\n\n if (existingIdp.find((i) => i.id === idp.id)) {\n throw new Error(`IdP \"${idp.id}\" already exists`)\n }\n\n this.systemStorage.idps.push(idp)\n }\n\n async updateIdp(idp: Idp): Promise<void> {\n this.assertConnected()\n const existingIdps = await this.listIdps()\n const index = existingIdps.findIndex((i) => i.id === idp.id)\n if (index === -1) {\n throw new Error(`IdP \"${idp.id}\" not found`)\n }\n this.systemStorage.idps[index] = idp\n }\n\n async removeIdp(idpId: string): Promise<void> {\n this.assertConnected()\n this.systemStorage.idps = this.systemStorage.idps.filter(\n (i) => i.id !== idpId\n )\n }\n\n // Network methods\n async getNetwork(networkId: string): Promise<Network> {\n this.assertConnected()\n\n const networks = await this.listNetworks()\n if (!networks) throw new Error('No networks available')\n\n const network = networks.find((n) => n.id === networkId)\n if (!network) throw new Error(`Network \"${networkId}\" not found`)\n return network\n }\n\n async getCurrentNetwork(): Promise<Network> {\n const session = this.getStorage().session\n if (!session) {\n throw new Error('No session found')\n }\n const networkId = session.network\n if (!networkId) {\n throw new Error('No current network set in session')\n }\n\n const networks = await this.listNetworks()\n const network = networks.find((n) => n.id === networkId)\n if (!network) {\n throw new Error(`Network \"${networkId}\" not found`)\n }\n return network\n }\n\n async listNetworks(): Promise<Array<Network>> {\n return this.systemStorage.networks\n }\n\n async updateNetwork(network: Network): Promise<void> {\n this.assertConnected()\n this.removeNetwork(network.id) // Ensure no duplicates\n this.systemStorage.networks.push(network)\n }\n\n async addNetwork(network: Network): Promise<void> {\n const networkAlreadyExists = this.systemStorage.networks.find(\n (n) => n.id === network.id\n )\n if (networkAlreadyExists) {\n throw new Error(`Network ${network.id} already exists`)\n } else {\n this.systemStorage.networks.push(network)\n }\n }\n\n async removeNetwork(networkId: string): Promise<void> {\n this.assertConnected()\n this.systemStorage.networks = this.systemStorage.networks.filter(\n (n) => n.id !== networkId\n )\n }\n\n private mergeTransactionStatusUpdate(\n existing: Transaction,\n status: Transaction['status'],\n updates: TransactionStatusUpdate = {}\n ): Transaction {\n const payload = updates.payload ?? existing.payload\n const signedAt = updates.signedAt ?? existing.signedAt\n const externalTxId = updates.externalTxId ?? existing.externalTxId\n\n return {\n id: existing.id,\n commandId: existing.commandId,\n status,\n preparedTransaction: existing.preparedTransaction,\n preparedTransactionHash: existing.preparedTransactionHash,\n origin: existing.origin,\n ...(payload !== undefined && { payload }),\n ...(existing.createdAt !== undefined && {\n createdAt: existing.createdAt,\n }),\n ...(signedAt !== undefined && { signedAt }),\n ...(externalTxId !== undefined && { externalTxId }),\n }\n }\n\n // Transaction methods\n async setTransaction(transaction: Transaction): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n\n storage.transactions.set(transaction.id, transaction)\n this.updateStorage(storage)\n }\n\n async setTransactionSigned(\n transactionId: string,\n signedAt: Date,\n externalTxId?: string\n ): Promise<void> {\n await this.setTransactionStatus(transactionId, 'signed', {\n signedAt,\n ...(externalTxId !== undefined && { externalTxId }),\n })\n }\n\n async setTransactionStatus(\n transactionId: string,\n status: Transaction['status'],\n updates: TransactionStatusUpdate = {}\n ): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n const existing = storage.transactions.get(transactionId)\n if (!existing) {\n throw new Error(`Transaction not found with id: ${transactionId}`)\n }\n\n const updated = this.mergeTransactionStatusUpdate(\n existing,\n status,\n updates\n )\n\n storage.transactions.set(transactionId, updated)\n this.updateStorage(storage)\n }\n\n async getTransaction(\n transactionId: string\n ): Promise<Transaction | undefined> {\n this.assertConnected()\n const storage = this.getStorage()\n\n return storage.transactions.get(transactionId)\n }\n\n async getLatestTransactionByCommandId(\n commandId: string\n ): Promise<Transaction | undefined> {\n this.assertConnected()\n const storage = this.getStorage()\n\n return Array.from(storage.transactions.values())\n .filter((tx) => tx.commandId === commandId)\n .sort((a, b) => {\n const aTime = a.createdAt?.getTime() ?? 0\n const bTime = b.createdAt?.getTime() ?? 0\n if (aTime !== bTime) {\n return bTime - aTime\n }\n return b.id.localeCompare(a.id)\n })[0]\n }\n\n async listTransactions(): Promise<Array<Transaction>> {\n this.assertConnected()\n const storage = this.getStorage()\n\n return Array.from(storage.transactions.values())\n }\n\n async removeTransaction(transactionId: string): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n\n storage.transactions.delete(transactionId)\n this.updateStorage(storage)\n }\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -339,6 +339,7 @@ var StoreInternal = class _StoreInternal {
|
|
|
339
339
|
const signedAt = updates.signedAt ?? existing.signedAt;
|
|
340
340
|
const externalTxId = updates.externalTxId ?? existing.externalTxId;
|
|
341
341
|
return {
|
|
342
|
+
id: existing.id,
|
|
342
343
|
commandId: existing.commandId,
|
|
343
344
|
status,
|
|
344
345
|
preparedTransaction: existing.preparedTransaction,
|
|
@@ -356,52 +357,56 @@ var StoreInternal = class _StoreInternal {
|
|
|
356
357
|
async setTransaction(transaction) {
|
|
357
358
|
this.assertConnected();
|
|
358
359
|
const storage = this.getStorage();
|
|
359
|
-
|
|
360
|
-
if (existing) {
|
|
361
|
-
throw new Error(
|
|
362
|
-
`Transaction with commandId "${transaction.commandId}" already exists`
|
|
363
|
-
);
|
|
364
|
-
}
|
|
365
|
-
storage.transactions.set(transaction.commandId, transaction);
|
|
360
|
+
storage.transactions.set(transaction.id, transaction);
|
|
366
361
|
this.updateStorage(storage);
|
|
367
362
|
}
|
|
368
|
-
async setTransactionSigned(
|
|
369
|
-
await this.setTransactionStatus(
|
|
363
|
+
async setTransactionSigned(transactionId, signedAt, externalTxId) {
|
|
364
|
+
await this.setTransactionStatus(transactionId, "signed", {
|
|
370
365
|
signedAt,
|
|
371
366
|
...externalTxId !== void 0 && { externalTxId }
|
|
372
367
|
});
|
|
373
368
|
}
|
|
374
|
-
async setTransactionStatus(
|
|
369
|
+
async setTransactionStatus(transactionId, status, updates = {}) {
|
|
375
370
|
this.assertConnected();
|
|
376
371
|
const storage = this.getStorage();
|
|
377
|
-
const existing = storage.transactions.get(
|
|
372
|
+
const existing = storage.transactions.get(transactionId);
|
|
378
373
|
if (!existing) {
|
|
379
|
-
throw new Error(
|
|
380
|
-
`Transaction not found with commandId: ${commandId}`
|
|
381
|
-
);
|
|
374
|
+
throw new Error(`Transaction not found with id: ${transactionId}`);
|
|
382
375
|
}
|
|
383
376
|
const updated = this.mergeTransactionStatusUpdate(
|
|
384
377
|
existing,
|
|
385
378
|
status,
|
|
386
379
|
updates
|
|
387
380
|
);
|
|
388
|
-
storage.transactions.set(
|
|
381
|
+
storage.transactions.set(transactionId, updated);
|
|
389
382
|
this.updateStorage(storage);
|
|
390
383
|
}
|
|
391
|
-
async getTransaction(
|
|
384
|
+
async getTransaction(transactionId) {
|
|
392
385
|
this.assertConnected();
|
|
393
386
|
const storage = this.getStorage();
|
|
394
|
-
return storage.transactions.get(
|
|
387
|
+
return storage.transactions.get(transactionId);
|
|
388
|
+
}
|
|
389
|
+
async getLatestTransactionByCommandId(commandId) {
|
|
390
|
+
this.assertConnected();
|
|
391
|
+
const storage = this.getStorage();
|
|
392
|
+
return Array.from(storage.transactions.values()).filter((tx) => tx.commandId === commandId).sort((a, b) => {
|
|
393
|
+
const aTime = a.createdAt?.getTime() ?? 0;
|
|
394
|
+
const bTime = b.createdAt?.getTime() ?? 0;
|
|
395
|
+
if (aTime !== bTime) {
|
|
396
|
+
return bTime - aTime;
|
|
397
|
+
}
|
|
398
|
+
return b.id.localeCompare(a.id);
|
|
399
|
+
})[0];
|
|
395
400
|
}
|
|
396
401
|
async listTransactions() {
|
|
397
402
|
this.assertConnected();
|
|
398
403
|
const storage = this.getStorage();
|
|
399
404
|
return Array.from(storage.transactions.values());
|
|
400
405
|
}
|
|
401
|
-
async removeTransaction(
|
|
406
|
+
async removeTransaction(transactionId) {
|
|
402
407
|
this.assertConnected();
|
|
403
408
|
const storage = this.getStorage();
|
|
404
|
-
storage.transactions.delete(
|
|
409
|
+
storage.transactions.delete(transactionId);
|
|
405
410
|
this.updateStorage(storage);
|
|
406
411
|
}
|
|
407
412
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/StoreInternal.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Logger } from 'pino'\nimport {\n AuthContext,\n UserId,\n AuthAware,\n assertConnected,\n Idp,\n AuthTokenProvider,\n} from '@canton-network/core-wallet-auth'\nimport {\n Store,\n Wallet,\n PartyId,\n Session,\n WalletFilter,\n Transaction,\n Network,\n UpdateWallet,\n PartyLevelRight,\n TransactionStatusUpdate,\n UserLevelRight,\n} from '@canton-network/core-wallet-store'\nimport {\n LedgerClient,\n defaultRetryableOptions,\n} from '@canton-network/core-ledger-client'\nimport { CurrentNetworkWalletFilter } from '@canton-network/core-wallet-store'\n\ninterface UserStorage {\n wallets: Array<Wallet>\n transactions: Map<string, Transaction>\n session: Session | undefined\n userRightsByNetwork: Map<string, Set<UserLevelRight>>\n}\n\nexport interface StoreInternalConfig {\n idps: Array<Idp>\n networks: Array<Network>\n}\n\ntype Memory = Map<UserId, UserStorage>\n\n// TODO: remove AuthAware and instead provide wrapper in clients\nexport class StoreInternal implements Store, AuthAware<StoreInternal> {\n private logger: Logger\n private systemStorage: StoreInternalConfig\n private userStorage: Memory\n\n authContext: AuthContext | undefined\n\n constructor(\n config: StoreInternalConfig,\n logger: Logger,\n authContext?: AuthContext,\n userStorage?: Memory\n ) {\n this.logger = logger.child({ component: 'StoreInternal' })\n this.systemStorage = config\n this.authContext = authContext\n this.userStorage = userStorage || new Map()\n\n this.syncWallets()\n }\n\n withAuthContext(context?: AuthContext): StoreInternal {\n return new StoreInternal(\n this.systemStorage,\n this.logger,\n context,\n this.userStorage\n )\n }\n\n static createStorage(): UserStorage {\n return {\n wallets: [],\n transactions: new Map<string, Transaction>(),\n session: undefined,\n userRightsByNetwork: new Map<string, Set<UserLevelRight>>(),\n }\n }\n\n private assertConnected(): UserId {\n return assertConnected(this.authContext).userId\n }\n\n private getStorage(): UserStorage {\n const userId = this.assertConnected()\n if (!this.userStorage.has(userId)) {\n this.userStorage.set(userId, StoreInternal.createStorage())\n }\n return this.userStorage.get(userId)!\n }\n\n private updateStorage(storage: UserStorage): void {\n const userId = this.assertConnected()\n this.userStorage.set(userId, storage)\n }\n\n // Wallet methods\n\n private async syncWallets(): Promise<void> {\n try {\n const network = await this.getCurrentNetwork()\n\n // Get existing parties from participant\n const userAccessTokenProvider = AuthTokenProvider.fromToken(\n this.authContext!.accessToken,\n this.logger\n )\n\n const ledgerClient = new LedgerClient({\n baseUrl: new URL(network.ledgerApi.baseUrl),\n logger: this.logger,\n accessTokenProvider: userAccessTokenProvider,\n })\n const rights = await ledgerClient.getWithRetry(\n '/v2/users/{user-id}/rights',\n defaultRetryableOptions,\n {\n path: {\n 'user-id': this.authContext!.userId,\n },\n }\n )\n const rightsByParty = new Map<string, Set<PartyLevelRight>>()\n const getRights = (party: string) => {\n const existing = rightsByParty.get(party)\n if (existing) return existing\n const created = new Set<PartyLevelRight>()\n rightsByParty.set(party, created)\n return created\n }\n rights.rights?.forEach((right) => {\n if (!right || !right.kind) {\n return\n }\n if ('CanActAs' in right.kind) {\n getRights(right.kind.CanActAs.value.party).add(\n PartyLevelRight.CanActAs\n )\n } else if ('CanReadAs' in right.kind) {\n getRights(right.kind.CanReadAs.value.party).add(\n PartyLevelRight.CanReadAs\n )\n } else if ('CanExecuteAs' in right.kind) {\n getRights(right.kind.CanExecuteAs.value.party).add(\n PartyLevelRight.CanExecuteAs\n )\n }\n })\n const parties = Array.from(rightsByParty.keys())\n\n // Merge Wallets - check for duplicates by (partyId, networkId)\n const existingWallets = await this.getAllWallets({\n networkIds: [network.id],\n })\n const existingPartyNetworkPairs = new Set(\n existingWallets.map((w) => `${w.partyId}:${w.networkId}`)\n )\n const participantWallets: Array<Wallet> =\n parties\n ?.filter(\n (party) =>\n !existingPartyNetworkPairs.has(\n `${party}:${network.id}`\n )\n // todo: filter on idp id\n )\n .map((party) => {\n const [hint, namespace] = party.split('::')\n return {\n primary: false,\n partyId: party,\n status: 'allocated',\n hint: hint,\n publicKey: namespace,\n namespace: namespace,\n networkId: network.id,\n signingProviderId: 'participant', // todo: determine based on partyDetails.isLocal\n rights: [...(rightsByParty.get(party) ?? [])],\n }\n }) || []\n const storage = this.getStorage()\n const wallets = [...storage.wallets, ...participantWallets]\n\n // Set primary wallet if none exists in this network\n const networkWallets = wallets.filter(\n (w) => w.networkId === network.id\n )\n const hasPrimary = networkWallets.some((w) => w.primary)\n if (!hasPrimary && networkWallets.length > 0) {\n networkWallets[0].primary = true\n }\n\n this.logger.debug(wallets, 'Wallets synchronized')\n\n // Update storage with new wallets\n storage.wallets = wallets\n this.updateStorage(storage)\n } catch {\n return\n }\n }\n\n async getAllWallets(filter: WalletFilter = {}): Promise<Array<Wallet>> {\n const { networkIds, signingProviderIds } = filter\n const networkIdSet = networkIds ? new Set(networkIds) : null\n const signingProviderIdSet = signingProviderIds\n ? new Set(signingProviderIds)\n : null\n\n return this.getStorage().wallets.filter((wallet) => {\n const matchedNetworkIds = networkIdSet\n ? networkIdSet.has(wallet.networkId)\n : true\n const matchedSigningProviderIds = signingProviderIdSet\n ? signingProviderIdSet.has(wallet.signingProviderId)\n : true\n return matchedNetworkIds && matchedSigningProviderIds\n })\n }\n\n async getWallets(\n filter: CurrentNetworkWalletFilter = {}\n ): Promise<Array<Wallet>> {\n const network = await this.getCurrentNetwork()\n return this.getAllWallets({\n ...filter,\n networkIds: [network.id],\n })\n }\n\n async getPrimaryWallet(): Promise<Wallet | undefined> {\n const wallets = await this.getWallets()\n return wallets.find((w) => w.primary === true)\n }\n\n async setPrimaryWallet(partyId: PartyId): Promise<void> {\n const network = await this.getCurrentNetwork()\n const storage = this.getStorage()\n const networkWallets = storage.wallets.filter(\n (w) => w.networkId === network.id\n )\n\n if (!networkWallets.some((w) => w.partyId === partyId)) {\n throw new Error(\n `Wallet with partyId \"${partyId}\" not found in network \"${network.id}\"`\n )\n }\n\n const wallets = storage.wallets.map((w) => {\n if (w.networkId === network.id) {\n if (w.partyId === partyId) {\n w.primary = true\n } else {\n w.primary = false\n }\n }\n return w\n })\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async addWallet(wallet: Wallet): Promise<void> {\n const storage = this.getStorage()\n if (\n storage.wallets.some(\n (w) =>\n w.partyId === wallet.partyId &&\n w.networkId === wallet.networkId\n )\n ) {\n throw new Error(\n `Wallet with partyId \"${wallet.partyId}\" already exists in network \"${wallet.networkId}\"`\n )\n }\n const networkWallets = await this.getAllWallets({\n networkIds: [wallet.networkId],\n })\n\n // If this is the first wallet in this network, set it as primary automatically\n if (networkWallets.length === 0) {\n wallet.primary = true\n }\n\n if (wallet.primary) {\n // If the new wallet is primary, set all others in the same network to non-primary\n storage.wallets\n .filter((w) => w.networkId === wallet.networkId)\n .map((w) => (w.primary = false))\n }\n storage.wallets.push(wallet)\n this.updateStorage(storage)\n }\n\n async updateWallet(params: UpdateWallet): Promise<void> {\n const storage = this.getStorage()\n const { partyId, networkId, ...updates } = params\n const targetNetworkId = networkId ?? (await this.getCurrentNetwork()).id\n if (Object.keys(updates).length === 0) return\n\n const wallets = storage.wallets.map((wallet) =>\n wallet.partyId === partyId && wallet.networkId === targetNetworkId\n ? { ...wallet, ...updates }\n : wallet\n )\n\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async removeWallet(partyId: PartyId): Promise<void> {\n const network = await this.getCurrentNetwork()\n const storage = this.getStorage()\n const wallets = storage.wallets.filter(\n (w) => !(w.partyId === partyId && w.networkId === network.id)\n )\n\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async getUserRights(networkId?: string): Promise<Array<UserLevelRight>> {\n const targetNetworkId = networkId ?? (await this.getCurrentNetwork()).id\n const rights =\n this.getStorage().userRightsByNetwork.get(targetNetworkId) ??\n new Set<UserLevelRight>()\n return [...rights]\n }\n\n async setUserRights(\n networkId: string,\n rights: Array<UserLevelRight>\n ): Promise<void> {\n const storage = this.getStorage()\n storage.userRightsByNetwork.set(networkId, new Set(rights))\n this.updateStorage(storage)\n }\n\n // Session methods\n async getSession(): Promise<Session | undefined> {\n return this.getStorage().session\n }\n\n async setSession(session: Session): Promise<void> {\n const storage = this.getStorage()\n storage.session = session\n this.updateStorage(storage)\n }\n\n async removeSession(): Promise<void> {\n const storage = this.getStorage()\n storage.session = undefined\n this.updateStorage(storage)\n }\n\n // IDP methods\n async getIdp(idpId: string): Promise<Idp> {\n this.assertConnected()\n const idps = await this.listIdps()\n const idp = idps.find((i) => i.id === idpId)\n if (!idp) {\n throw new Error(`IdP \"${idpId}\" not found`)\n }\n return idp\n }\n\n async listIdps(): Promise<Array<Idp>> {\n this.assertConnected()\n return this.systemStorage.idps\n }\n\n async addIdp(idp: Idp): Promise<void> {\n this.assertConnected()\n const existingIdp = await this.listIdps()\n\n if (existingIdp.find((i) => i.id === idp.id)) {\n throw new Error(`IdP \"${idp.id}\" already exists`)\n }\n\n this.systemStorage.idps.push(idp)\n }\n\n async updateIdp(idp: Idp): Promise<void> {\n this.assertConnected()\n const existingIdps = await this.listIdps()\n const index = existingIdps.findIndex((i) => i.id === idp.id)\n if (index === -1) {\n throw new Error(`IdP \"${idp.id}\" not found`)\n }\n this.systemStorage.idps[index] = idp\n }\n\n async removeIdp(idpId: string): Promise<void> {\n this.assertConnected()\n this.systemStorage.idps = this.systemStorage.idps.filter(\n (i) => i.id !== idpId\n )\n }\n\n // Network methods\n async getNetwork(networkId: string): Promise<Network> {\n this.assertConnected()\n\n const networks = await this.listNetworks()\n if (!networks) throw new Error('No networks available')\n\n const network = networks.find((n) => n.id === networkId)\n if (!network) throw new Error(`Network \"${networkId}\" not found`)\n return network\n }\n\n async getCurrentNetwork(): Promise<Network> {\n const session = this.getStorage().session\n if (!session) {\n throw new Error('No session found')\n }\n const networkId = session.network\n if (!networkId) {\n throw new Error('No current network set in session')\n }\n\n const networks = await this.listNetworks()\n const network = networks.find((n) => n.id === networkId)\n if (!network) {\n throw new Error(`Network \"${networkId}\" not found`)\n }\n return network\n }\n\n async listNetworks(): Promise<Array<Network>> {\n return this.systemStorage.networks\n }\n\n async updateNetwork(network: Network): Promise<void> {\n this.assertConnected()\n this.removeNetwork(network.id) // Ensure no duplicates\n this.systemStorage.networks.push(network)\n }\n\n async addNetwork(network: Network): Promise<void> {\n const networkAlreadyExists = this.systemStorage.networks.find(\n (n) => n.id === network.id\n )\n if (networkAlreadyExists) {\n throw new Error(`Network ${network.id} already exists`)\n } else {\n this.systemStorage.networks.push(network)\n }\n }\n\n async removeNetwork(networkId: string): Promise<void> {\n this.assertConnected()\n this.systemStorage.networks = this.systemStorage.networks.filter(\n (n) => n.id !== networkId\n )\n }\n\n private mergeTransactionStatusUpdate(\n existing: Transaction,\n status: Transaction['status'],\n updates: TransactionStatusUpdate = {}\n ): Transaction {\n const payload = updates.payload ?? existing.payload\n const signedAt = updates.signedAt ?? existing.signedAt\n const externalTxId = updates.externalTxId ?? existing.externalTxId\n\n return {\n commandId: existing.commandId,\n status,\n preparedTransaction: existing.preparedTransaction,\n preparedTransactionHash: existing.preparedTransactionHash,\n origin: existing.origin,\n ...(payload !== undefined && { payload }),\n ...(existing.createdAt !== undefined && {\n createdAt: existing.createdAt,\n }),\n ...(signedAt !== undefined && { signedAt }),\n ...(externalTxId !== undefined && { externalTxId }),\n }\n }\n\n // Transaction methods\n async setTransaction(transaction: Transaction): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n\n const existing = storage.transactions.get(transaction.commandId)\n if (existing) {\n throw new Error(\n `Transaction with commandId \"${transaction.commandId}\" already exists`\n )\n }\n\n storage.transactions.set(transaction.commandId, transaction)\n this.updateStorage(storage)\n }\n\n async setTransactionSigned(\n commandId: string,\n signedAt: Date,\n externalTxId?: string\n ): Promise<void> {\n await this.setTransactionStatus(commandId, 'signed', {\n signedAt,\n ...(externalTxId !== undefined && { externalTxId }),\n })\n }\n\n async setTransactionStatus(\n commandId: string,\n status: Transaction['status'],\n updates: TransactionStatusUpdate = {}\n ): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n const existing = storage.transactions.get(commandId)\n if (!existing) {\n throw new Error(\n `Transaction not found with commandId: ${commandId}`\n )\n }\n\n const updated = this.mergeTransactionStatusUpdate(\n existing,\n status,\n updates\n )\n\n storage.transactions.set(commandId, updated)\n this.updateStorage(storage)\n }\n\n async getTransaction(commandId: string): Promise<Transaction | undefined> {\n this.assertConnected()\n const storage = this.getStorage()\n\n return storage.transactions.get(commandId)\n }\n\n async listTransactions(): Promise<Array<Transaction>> {\n this.assertConnected()\n const storage = this.getStorage()\n\n return Array.from(storage.transactions.values())\n }\n\n async removeTransaction(commandId: string): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n\n storage.transactions.delete(commandId)\n this.updateStorage(storage)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/StoreInternal.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Logger } from 'pino'\nimport {\n AuthContext,\n UserId,\n AuthAware,\n assertConnected,\n Idp,\n AuthTokenProvider,\n} from '@canton-network/core-wallet-auth'\nimport {\n Store,\n Wallet,\n PartyId,\n Session,\n WalletFilter,\n Transaction,\n Network,\n UpdateWallet,\n PartyLevelRight,\n TransactionStatusUpdate,\n UserLevelRight,\n} from '@canton-network/core-wallet-store'\nimport {\n LedgerClient,\n defaultRetryableOptions,\n} from '@canton-network/core-ledger-client'\nimport { CurrentNetworkWalletFilter } from '@canton-network/core-wallet-store'\n\ninterface UserStorage {\n wallets: Array<Wallet>\n transactions: Map<string, Transaction>\n session: Session | undefined\n userRightsByNetwork: Map<string, Set<UserLevelRight>>\n}\n\nexport interface StoreInternalConfig {\n idps: Array<Idp>\n networks: Array<Network>\n}\n\ntype Memory = Map<UserId, UserStorage>\n\n// TODO: remove AuthAware and instead provide wrapper in clients\nexport class StoreInternal implements Store, AuthAware<StoreInternal> {\n private logger: Logger\n private systemStorage: StoreInternalConfig\n private userStorage: Memory\n\n authContext: AuthContext | undefined\n\n constructor(\n config: StoreInternalConfig,\n logger: Logger,\n authContext?: AuthContext,\n userStorage?: Memory\n ) {\n this.logger = logger.child({ component: 'StoreInternal' })\n this.systemStorage = config\n this.authContext = authContext\n this.userStorage = userStorage || new Map()\n\n this.syncWallets()\n }\n\n withAuthContext(context?: AuthContext): StoreInternal {\n return new StoreInternal(\n this.systemStorage,\n this.logger,\n context,\n this.userStorage\n )\n }\n\n static createStorage(): UserStorage {\n return {\n wallets: [],\n transactions: new Map<string, Transaction>(),\n session: undefined,\n userRightsByNetwork: new Map<string, Set<UserLevelRight>>(),\n }\n }\n\n private assertConnected(): UserId {\n return assertConnected(this.authContext).userId\n }\n\n private getStorage(): UserStorage {\n const userId = this.assertConnected()\n if (!this.userStorage.has(userId)) {\n this.userStorage.set(userId, StoreInternal.createStorage())\n }\n return this.userStorage.get(userId)!\n }\n\n private updateStorage(storage: UserStorage): void {\n const userId = this.assertConnected()\n this.userStorage.set(userId, storage)\n }\n\n // Wallet methods\n\n private async syncWallets(): Promise<void> {\n try {\n const network = await this.getCurrentNetwork()\n\n // Get existing parties from participant\n const userAccessTokenProvider = AuthTokenProvider.fromToken(\n this.authContext!.accessToken,\n this.logger\n )\n\n const ledgerClient = new LedgerClient({\n baseUrl: new URL(network.ledgerApi.baseUrl),\n logger: this.logger,\n accessTokenProvider: userAccessTokenProvider,\n })\n const rights = await ledgerClient.getWithRetry(\n '/v2/users/{user-id}/rights',\n defaultRetryableOptions,\n {\n path: {\n 'user-id': this.authContext!.userId,\n },\n }\n )\n const rightsByParty = new Map<string, Set<PartyLevelRight>>()\n const getRights = (party: string) => {\n const existing = rightsByParty.get(party)\n if (existing) return existing\n const created = new Set<PartyLevelRight>()\n rightsByParty.set(party, created)\n return created\n }\n rights.rights?.forEach((right) => {\n if (!right || !right.kind) {\n return\n }\n if ('CanActAs' in right.kind) {\n getRights(right.kind.CanActAs.value.party).add(\n PartyLevelRight.CanActAs\n )\n } else if ('CanReadAs' in right.kind) {\n getRights(right.kind.CanReadAs.value.party).add(\n PartyLevelRight.CanReadAs\n )\n } else if ('CanExecuteAs' in right.kind) {\n getRights(right.kind.CanExecuteAs.value.party).add(\n PartyLevelRight.CanExecuteAs\n )\n }\n })\n const parties = Array.from(rightsByParty.keys())\n\n // Merge Wallets - check for duplicates by (partyId, networkId)\n const existingWallets = await this.getAllWallets({\n networkIds: [network.id],\n })\n const existingPartyNetworkPairs = new Set(\n existingWallets.map((w) => `${w.partyId}:${w.networkId}`)\n )\n const participantWallets: Array<Wallet> =\n parties\n ?.filter(\n (party) =>\n !existingPartyNetworkPairs.has(\n `${party}:${network.id}`\n )\n // todo: filter on idp id\n )\n .map((party) => {\n const [hint, namespace] = party.split('::')\n return {\n primary: false,\n partyId: party,\n status: 'allocated',\n hint: hint,\n publicKey: namespace,\n namespace: namespace,\n networkId: network.id,\n signingProviderId: 'participant', // todo: determine based on partyDetails.isLocal\n rights: [...(rightsByParty.get(party) ?? [])],\n }\n }) || []\n const storage = this.getStorage()\n const wallets = [...storage.wallets, ...participantWallets]\n\n // Set primary wallet if none exists in this network\n const networkWallets = wallets.filter(\n (w) => w.networkId === network.id\n )\n const hasPrimary = networkWallets.some((w) => w.primary)\n if (!hasPrimary && networkWallets.length > 0) {\n networkWallets[0].primary = true\n }\n\n this.logger.debug(wallets, 'Wallets synchronized')\n\n // Update storage with new wallets\n storage.wallets = wallets\n this.updateStorage(storage)\n } catch {\n return\n }\n }\n\n async getAllWallets(filter: WalletFilter = {}): Promise<Array<Wallet>> {\n const { networkIds, signingProviderIds } = filter\n const networkIdSet = networkIds ? new Set(networkIds) : null\n const signingProviderIdSet = signingProviderIds\n ? new Set(signingProviderIds)\n : null\n\n return this.getStorage().wallets.filter((wallet) => {\n const matchedNetworkIds = networkIdSet\n ? networkIdSet.has(wallet.networkId)\n : true\n const matchedSigningProviderIds = signingProviderIdSet\n ? signingProviderIdSet.has(wallet.signingProviderId)\n : true\n return matchedNetworkIds && matchedSigningProviderIds\n })\n }\n\n async getWallets(\n filter: CurrentNetworkWalletFilter = {}\n ): Promise<Array<Wallet>> {\n const network = await this.getCurrentNetwork()\n return this.getAllWallets({\n ...filter,\n networkIds: [network.id],\n })\n }\n\n async getPrimaryWallet(): Promise<Wallet | undefined> {\n const wallets = await this.getWallets()\n return wallets.find((w) => w.primary === true)\n }\n\n async setPrimaryWallet(partyId: PartyId): Promise<void> {\n const network = await this.getCurrentNetwork()\n const storage = this.getStorage()\n const networkWallets = storage.wallets.filter(\n (w) => w.networkId === network.id\n )\n\n if (!networkWallets.some((w) => w.partyId === partyId)) {\n throw new Error(\n `Wallet with partyId \"${partyId}\" not found in network \"${network.id}\"`\n )\n }\n\n const wallets = storage.wallets.map((w) => {\n if (w.networkId === network.id) {\n if (w.partyId === partyId) {\n w.primary = true\n } else {\n w.primary = false\n }\n }\n return w\n })\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async addWallet(wallet: Wallet): Promise<void> {\n const storage = this.getStorage()\n if (\n storage.wallets.some(\n (w) =>\n w.partyId === wallet.partyId &&\n w.networkId === wallet.networkId\n )\n ) {\n throw new Error(\n `Wallet with partyId \"${wallet.partyId}\" already exists in network \"${wallet.networkId}\"`\n )\n }\n const networkWallets = await this.getAllWallets({\n networkIds: [wallet.networkId],\n })\n\n // If this is the first wallet in this network, set it as primary automatically\n if (networkWallets.length === 0) {\n wallet.primary = true\n }\n\n if (wallet.primary) {\n // If the new wallet is primary, set all others in the same network to non-primary\n storage.wallets\n .filter((w) => w.networkId === wallet.networkId)\n .map((w) => (w.primary = false))\n }\n storage.wallets.push(wallet)\n this.updateStorage(storage)\n }\n\n async updateWallet(params: UpdateWallet): Promise<void> {\n const storage = this.getStorage()\n const { partyId, networkId, ...updates } = params\n const targetNetworkId = networkId ?? (await this.getCurrentNetwork()).id\n if (Object.keys(updates).length === 0) return\n\n const wallets = storage.wallets.map((wallet) =>\n wallet.partyId === partyId && wallet.networkId === targetNetworkId\n ? { ...wallet, ...updates }\n : wallet\n )\n\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async removeWallet(partyId: PartyId): Promise<void> {\n const network = await this.getCurrentNetwork()\n const storage = this.getStorage()\n const wallets = storage.wallets.filter(\n (w) => !(w.partyId === partyId && w.networkId === network.id)\n )\n\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async getUserRights(networkId?: string): Promise<Array<UserLevelRight>> {\n const targetNetworkId = networkId ?? (await this.getCurrentNetwork()).id\n const rights =\n this.getStorage().userRightsByNetwork.get(targetNetworkId) ??\n new Set<UserLevelRight>()\n return [...rights]\n }\n\n async setUserRights(\n networkId: string,\n rights: Array<UserLevelRight>\n ): Promise<void> {\n const storage = this.getStorage()\n storage.userRightsByNetwork.set(networkId, new Set(rights))\n this.updateStorage(storage)\n }\n\n // Session methods\n async getSession(): Promise<Session | undefined> {\n return this.getStorage().session\n }\n\n async setSession(session: Session): Promise<void> {\n const storage = this.getStorage()\n storage.session = session\n this.updateStorage(storage)\n }\n\n async removeSession(): Promise<void> {\n const storage = this.getStorage()\n storage.session = undefined\n this.updateStorage(storage)\n }\n\n // IDP methods\n async getIdp(idpId: string): Promise<Idp> {\n this.assertConnected()\n const idps = await this.listIdps()\n const idp = idps.find((i) => i.id === idpId)\n if (!idp) {\n throw new Error(`IdP \"${idpId}\" not found`)\n }\n return idp\n }\n\n async listIdps(): Promise<Array<Idp>> {\n this.assertConnected()\n return this.systemStorage.idps\n }\n\n async addIdp(idp: Idp): Promise<void> {\n this.assertConnected()\n const existingIdp = await this.listIdps()\n\n if (existingIdp.find((i) => i.id === idp.id)) {\n throw new Error(`IdP \"${idp.id}\" already exists`)\n }\n\n this.systemStorage.idps.push(idp)\n }\n\n async updateIdp(idp: Idp): Promise<void> {\n this.assertConnected()\n const existingIdps = await this.listIdps()\n const index = existingIdps.findIndex((i) => i.id === idp.id)\n if (index === -1) {\n throw new Error(`IdP \"${idp.id}\" not found`)\n }\n this.systemStorage.idps[index] = idp\n }\n\n async removeIdp(idpId: string): Promise<void> {\n this.assertConnected()\n this.systemStorage.idps = this.systemStorage.idps.filter(\n (i) => i.id !== idpId\n )\n }\n\n // Network methods\n async getNetwork(networkId: string): Promise<Network> {\n this.assertConnected()\n\n const networks = await this.listNetworks()\n if (!networks) throw new Error('No networks available')\n\n const network = networks.find((n) => n.id === networkId)\n if (!network) throw new Error(`Network \"${networkId}\" not found`)\n return network\n }\n\n async getCurrentNetwork(): Promise<Network> {\n const session = this.getStorage().session\n if (!session) {\n throw new Error('No session found')\n }\n const networkId = session.network\n if (!networkId) {\n throw new Error('No current network set in session')\n }\n\n const networks = await this.listNetworks()\n const network = networks.find((n) => n.id === networkId)\n if (!network) {\n throw new Error(`Network \"${networkId}\" not found`)\n }\n return network\n }\n\n async listNetworks(): Promise<Array<Network>> {\n return this.systemStorage.networks\n }\n\n async updateNetwork(network: Network): Promise<void> {\n this.assertConnected()\n this.removeNetwork(network.id) // Ensure no duplicates\n this.systemStorage.networks.push(network)\n }\n\n async addNetwork(network: Network): Promise<void> {\n const networkAlreadyExists = this.systemStorage.networks.find(\n (n) => n.id === network.id\n )\n if (networkAlreadyExists) {\n throw new Error(`Network ${network.id} already exists`)\n } else {\n this.systemStorage.networks.push(network)\n }\n }\n\n async removeNetwork(networkId: string): Promise<void> {\n this.assertConnected()\n this.systemStorage.networks = this.systemStorage.networks.filter(\n (n) => n.id !== networkId\n )\n }\n\n private mergeTransactionStatusUpdate(\n existing: Transaction,\n status: Transaction['status'],\n updates: TransactionStatusUpdate = {}\n ): Transaction {\n const payload = updates.payload ?? existing.payload\n const signedAt = updates.signedAt ?? existing.signedAt\n const externalTxId = updates.externalTxId ?? existing.externalTxId\n\n return {\n id: existing.id,\n commandId: existing.commandId,\n status,\n preparedTransaction: existing.preparedTransaction,\n preparedTransactionHash: existing.preparedTransactionHash,\n origin: existing.origin,\n ...(payload !== undefined && { payload }),\n ...(existing.createdAt !== undefined && {\n createdAt: existing.createdAt,\n }),\n ...(signedAt !== undefined && { signedAt }),\n ...(externalTxId !== undefined && { externalTxId }),\n }\n }\n\n // Transaction methods\n async setTransaction(transaction: Transaction): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n\n storage.transactions.set(transaction.id, transaction)\n this.updateStorage(storage)\n }\n\n async setTransactionSigned(\n transactionId: string,\n signedAt: Date,\n externalTxId?: string\n ): Promise<void> {\n await this.setTransactionStatus(transactionId, 'signed', {\n signedAt,\n ...(externalTxId !== undefined && { externalTxId }),\n })\n }\n\n async setTransactionStatus(\n transactionId: string,\n status: Transaction['status'],\n updates: TransactionStatusUpdate = {}\n ): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n const existing = storage.transactions.get(transactionId)\n if (!existing) {\n throw new Error(`Transaction not found with id: ${transactionId}`)\n }\n\n const updated = this.mergeTransactionStatusUpdate(\n existing,\n status,\n updates\n )\n\n storage.transactions.set(transactionId, updated)\n this.updateStorage(storage)\n }\n\n async getTransaction(\n transactionId: string\n ): Promise<Transaction | undefined> {\n this.assertConnected()\n const storage = this.getStorage()\n\n return storage.transactions.get(transactionId)\n }\n\n async getLatestTransactionByCommandId(\n commandId: string\n ): Promise<Transaction | undefined> {\n this.assertConnected()\n const storage = this.getStorage()\n\n return Array.from(storage.transactions.values())\n .filter((tx) => tx.commandId === commandId)\n .sort((a, b) => {\n const aTime = a.createdAt?.getTime() ?? 0\n const bTime = b.createdAt?.getTime() ?? 0\n if (aTime !== bTime) {\n return bTime - aTime\n }\n return b.id.localeCompare(a.id)\n })[0]\n }\n\n async listTransactions(): Promise<Array<Transaction>> {\n this.assertConnected()\n const storage = this.getStorage()\n\n return Array.from(storage.transactions.values())\n }\n\n async removeTransaction(transactionId: string): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n\n storage.transactions.delete(transactionId)\n this.updateStorage(storage)\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@canton-network/core-wallet-store-inmemory",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "In-memory implementation of the Store API",
|
|
6
6
|
"author": "Marc Juchli <marc.juchli@digitalasset.com>",
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
"test:coverage": "vitest run --project node --project browser --coverage"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@canton-network/core-ledger-client": "^0.
|
|
21
|
-
"@canton-network/core-rpc-errors": "^0.
|
|
22
|
-
"@canton-network/core-types": "^0.
|
|
23
|
-
"@canton-network/core-wallet-auth": "^0.
|
|
24
|
-
"@canton-network/core-wallet-store": "^0.
|
|
20
|
+
"@canton-network/core-ledger-client": "^0.36.0",
|
|
21
|
+
"@canton-network/core-rpc-errors": "^0.22.0",
|
|
22
|
+
"@canton-network/core-types": "^0.26.0",
|
|
23
|
+
"@canton-network/core-wallet-auth": "^0.27.0",
|
|
24
|
+
"@canton-network/core-wallet-store": "^0.31.0",
|
|
25
25
|
"pino": "^10.3.1",
|
|
26
26
|
"zod": "^4.3.6"
|
|
27
27
|
},
|