@canton-network/core-wallet-store-inmemory 0.31.0 → 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.
@@ -1,6 +1,6 @@
1
1
  import { Logger } from 'pino';
2
2
  import { AuthContext, UserId, AuthAware, Idp } from '@canton-network/core-wallet-auth';
3
- import { Store, Wallet, PartyId, Session, WalletFilter, Transaction, Network, UpdateWallet, UserLevelRight } from '@canton-network/core-wallet-store';
3
+ import { Store, Wallet, PartyId, Session, WalletFilter, Transaction, Network, UpdateWallet, TransactionStatusUpdate, UserLevelRight } from '@canton-network/core-wallet-store';
4
4
  import { CurrentNetworkWalletFilter } from '@canton-network/core-wallet-store';
5
5
  interface UserStorage {
6
6
  wallets: Array<Wallet>;
@@ -48,10 +48,14 @@ export declare class StoreInternal implements Store, AuthAware<StoreInternal> {
48
48
  updateNetwork(network: Network): Promise<void>;
49
49
  addNetwork(network: Network): Promise<void>;
50
50
  removeNetwork(networkId: string): Promise<void>;
51
+ private mergeTransactionStatusUpdate;
51
52
  setTransaction(transaction: Transaction): Promise<void>;
52
- getTransaction(commandId: string): Promise<Transaction | undefined>;
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>;
53
57
  listTransactions(): Promise<Array<Transaction>>;
54
- removeTransaction(commandId: string): Promise<void>;
58
+ removeTransaction(transactionId: string): Promise<void>;
55
59
  }
56
60
  export {};
57
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
@@ -336,27 +336,79 @@ var StoreInternal = class _StoreInternal {
336
336
  (n) => n.id !== networkId
337
337
  );
338
338
  }
339
+ mergeTransactionStatusUpdate(existing, status, updates = {}) {
340
+ const payload = updates.payload ?? existing.payload;
341
+ const signedAt = updates.signedAt ?? existing.signedAt;
342
+ const externalTxId = updates.externalTxId ?? existing.externalTxId;
343
+ return {
344
+ id: existing.id,
345
+ commandId: existing.commandId,
346
+ status,
347
+ preparedTransaction: existing.preparedTransaction,
348
+ preparedTransactionHash: existing.preparedTransactionHash,
349
+ origin: existing.origin,
350
+ ...payload !== void 0 && { payload },
351
+ ...existing.createdAt !== void 0 && {
352
+ createdAt: existing.createdAt
353
+ },
354
+ ...signedAt !== void 0 && { signedAt },
355
+ ...externalTxId !== void 0 && { externalTxId }
356
+ };
357
+ }
339
358
  // Transaction methods
340
359
  async setTransaction(transaction) {
341
360
  this.assertConnected();
342
361
  const storage = this.getStorage();
343
- storage.transactions.set(transaction.commandId, transaction);
362
+ storage.transactions.set(transaction.id, transaction);
344
363
  this.updateStorage(storage);
345
364
  }
346
- async getTransaction(commandId) {
365
+ async setTransactionSigned(transactionId, signedAt, externalTxId) {
366
+ await this.setTransactionStatus(transactionId, "signed", {
367
+ signedAt,
368
+ ...externalTxId !== void 0 && { externalTxId }
369
+ });
370
+ }
371
+ async setTransactionStatus(transactionId, status, updates = {}) {
347
372
  this.assertConnected();
348
373
  const storage = this.getStorage();
349
- return storage.transactions.get(commandId);
374
+ const existing = storage.transactions.get(transactionId);
375
+ if (!existing) {
376
+ throw new Error(`Transaction not found with id: ${transactionId}`);
377
+ }
378
+ const updated = this.mergeTransactionStatusUpdate(
379
+ existing,
380
+ status,
381
+ updates
382
+ );
383
+ storage.transactions.set(transactionId, updated);
384
+ this.updateStorage(storage);
385
+ }
386
+ async getTransaction(transactionId) {
387
+ this.assertConnected();
388
+ const storage = this.getStorage();
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];
350
402
  }
351
403
  async listTransactions() {
352
404
  this.assertConnected();
353
405
  const storage = this.getStorage();
354
406
  return Array.from(storage.transactions.values());
355
407
  }
356
- async removeTransaction(commandId) {
408
+ async removeTransaction(transactionId) {
357
409
  this.assertConnected();
358
410
  const storage = this.getStorage();
359
- storage.transactions.delete(commandId);
411
+ storage.transactions.delete(transactionId);
360
412
  this.updateStorage(storage);
361
413
  }
362
414
  };
@@ -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 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 // Transaction methods\n async setTransaction(transaction: Transaction): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n\n storage.transactions.set(transaction.commandId, transaction)\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
@@ -334,27 +334,79 @@ var StoreInternal = class _StoreInternal {
334
334
  (n) => n.id !== networkId
335
335
  );
336
336
  }
337
+ mergeTransactionStatusUpdate(existing, status, updates = {}) {
338
+ const payload = updates.payload ?? existing.payload;
339
+ const signedAt = updates.signedAt ?? existing.signedAt;
340
+ const externalTxId = updates.externalTxId ?? existing.externalTxId;
341
+ return {
342
+ id: existing.id,
343
+ commandId: existing.commandId,
344
+ status,
345
+ preparedTransaction: existing.preparedTransaction,
346
+ preparedTransactionHash: existing.preparedTransactionHash,
347
+ origin: existing.origin,
348
+ ...payload !== void 0 && { payload },
349
+ ...existing.createdAt !== void 0 && {
350
+ createdAt: existing.createdAt
351
+ },
352
+ ...signedAt !== void 0 && { signedAt },
353
+ ...externalTxId !== void 0 && { externalTxId }
354
+ };
355
+ }
337
356
  // Transaction methods
338
357
  async setTransaction(transaction) {
339
358
  this.assertConnected();
340
359
  const storage = this.getStorage();
341
- storage.transactions.set(transaction.commandId, transaction);
360
+ storage.transactions.set(transaction.id, transaction);
342
361
  this.updateStorage(storage);
343
362
  }
344
- async getTransaction(commandId) {
363
+ async setTransactionSigned(transactionId, signedAt, externalTxId) {
364
+ await this.setTransactionStatus(transactionId, "signed", {
365
+ signedAt,
366
+ ...externalTxId !== void 0 && { externalTxId }
367
+ });
368
+ }
369
+ async setTransactionStatus(transactionId, status, updates = {}) {
345
370
  this.assertConnected();
346
371
  const storage = this.getStorage();
347
- return storage.transactions.get(commandId);
372
+ const existing = storage.transactions.get(transactionId);
373
+ if (!existing) {
374
+ throw new Error(`Transaction not found with id: ${transactionId}`);
375
+ }
376
+ const updated = this.mergeTransactionStatusUpdate(
377
+ existing,
378
+ status,
379
+ updates
380
+ );
381
+ storage.transactions.set(transactionId, updated);
382
+ this.updateStorage(storage);
383
+ }
384
+ async getTransaction(transactionId) {
385
+ this.assertConnected();
386
+ const storage = this.getStorage();
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];
348
400
  }
349
401
  async listTransactions() {
350
402
  this.assertConnected();
351
403
  const storage = this.getStorage();
352
404
  return Array.from(storage.transactions.values());
353
405
  }
354
- async removeTransaction(commandId) {
406
+ async removeTransaction(transactionId) {
355
407
  this.assertConnected();
356
408
  const storage = this.getStorage();
357
- storage.transactions.delete(commandId);
409
+ storage.transactions.delete(transactionId);
358
410
  this.updateStorage(storage);
359
411
  }
360
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 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 // Transaction methods\n async setTransaction(transaction: Transaction): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n\n storage.transactions.set(transaction.commandId, transaction)\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.31.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>",
@@ -13,28 +13,25 @@
13
13
  "dev": "tsup --watch --onSuccess \"tsc -p tsconfig.types.json\"",
14
14
  "flatpack": "yarn pack --out \"$FLATPACK_OUTDIR\"",
15
15
  "clean": "tsc -b --clean; rm -rf dist",
16
- "test": "yarn node --experimental-vm-modules $(yarn bin jest)"
16
+ "test": "vitest run --project node --project browser",
17
+ "test:coverage": "vitest run --project node --project browser --coverage"
17
18
  },
18
19
  "dependencies": {
19
- "@canton-network/core-ledger-client": "^0.35.0",
20
- "@canton-network/core-rpc-errors": "^0.21.0",
21
- "@canton-network/core-types": "^0.25.0",
22
- "@canton-network/core-wallet-auth": "^0.26.0",
23
- "@canton-network/core-wallet-store": "^0.30.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",
24
25
  "pino": "^10.3.1",
25
26
  "zod": "^4.3.6"
26
27
  },
27
28
  "devDependencies": {
28
- "@jest/globals": "^30.2.0",
29
- "@swc/core": "^1.15.18",
30
- "@swc/jest": "^0.2.39",
31
- "@types/jest": "^30.0.0",
32
- "jest": "^30.2.0",
33
- "pino-test": "^1.1.0",
34
- "ts-jest": "^29.4.6",
35
- "ts-jest-resolver": "^2.0.1",
29
+ "@vitest/browser-playwright": "^4.1.2",
30
+ "@vitest/coverage-v8": "^4.1.2",
31
+ "playwright": "^1.58.2",
36
32
  "tsup": "^8.5.1",
37
- "typescript": "^5.9.3"
33
+ "typescript": "^5.9.3",
34
+ "vitest": "^4.1.2"
38
35
  },
39
36
  "files": [
40
37
  "dist/**"