@canton-network/core-wallet-store-inmemory 1.2.3 → 1.3.1
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 +8 -1
- package/dist/StoreInternal.d.ts.map +1 -1
- package/dist/index.cjs +54 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
package/dist/StoreInternal.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
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, TransactionStatusUpdate, UserLevelRight } from '@canton-network/core-wallet-store';
|
|
3
|
+
import { Store, Wallet, PartyId, Session, WalletFilter, Transaction, Network, UpdateWallet, TransactionStatusUpdate, UserLevelRight, MessageRaw, MessageRawStatusUpdate } 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>;
|
|
7
7
|
transactions: Map<string, Transaction>;
|
|
8
|
+
messageRaws: Map<string, MessageRaw>;
|
|
8
9
|
session: Session | undefined;
|
|
9
10
|
userRightsByNetwork: Map<string, Set<UserLevelRight>>;
|
|
10
11
|
}
|
|
@@ -56,6 +57,12 @@ export declare class StoreInternal implements Store, AuthAware<StoreInternal> {
|
|
|
56
57
|
getLatestTransactionByCommandId(commandId: string): Promise<Transaction | undefined>;
|
|
57
58
|
listTransactions(): Promise<Array<Transaction>>;
|
|
58
59
|
removeTransaction(transactionId: string): Promise<void>;
|
|
60
|
+
private mergeMessageRawStatusUpdate;
|
|
61
|
+
setMessageRaw(message: MessageRaw): Promise<void>;
|
|
62
|
+
setMessageRawStatus(messageId: string, status: MessageRaw['status'], updates?: MessageRawStatusUpdate): Promise<void>;
|
|
63
|
+
getMessageRaw(messageId: string): Promise<MessageRaw | undefined>;
|
|
64
|
+
listMessageRaws(): Promise<Array<MessageRaw>>;
|
|
65
|
+
removeMessageRaw(messageId: string): Promise<void>;
|
|
59
66
|
}
|
|
60
67
|
export {};
|
|
61
68
|
//# sourceMappingURL=StoreInternal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreInternal.d.ts","sourceRoot":"","sources":["../src/StoreInternal.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EACH,WAAW,EACX,MAAM,EACN,SAAS,EAET,GAAG,EAEN,MAAM,kCAAkC,CAAA;AACzC,OAAO,EACH,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,YAAY,EACZ,WAAW,EACX,OAAO,EACP,YAAY,EAEZ,uBAAuB,EACvB,cAAc,
|
|
1
|
+
{"version":3,"file":"StoreInternal.d.ts","sourceRoot":"","sources":["../src/StoreInternal.ts"],"names":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -31,6 +31,7 @@ var StoreInternal = class _StoreInternal {
|
|
|
31
31
|
return {
|
|
32
32
|
wallets: [],
|
|
33
33
|
transactions: /* @__PURE__ */ new Map(),
|
|
34
|
+
messageRaws: /* @__PURE__ */ new Map(),
|
|
34
35
|
session: void 0,
|
|
35
36
|
userRightsByNetwork: /* @__PURE__ */ new Map()
|
|
36
37
|
};
|
|
@@ -411,6 +412,59 @@ var StoreInternal = class _StoreInternal {
|
|
|
411
412
|
storage.transactions.delete(transactionId);
|
|
412
413
|
this.updateStorage(storage);
|
|
413
414
|
}
|
|
415
|
+
mergeMessageRawStatusUpdate(existing, status, updates = {}) {
|
|
416
|
+
const signedAt = updates.signedAt ?? existing.signedAt;
|
|
417
|
+
const signature = updates.signature ?? existing.signature;
|
|
418
|
+
return {
|
|
419
|
+
...existing,
|
|
420
|
+
status,
|
|
421
|
+
...signedAt !== void 0 && { signedAt },
|
|
422
|
+
...signature !== void 0 && { signature }
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
// Message signing request methods
|
|
426
|
+
async setMessageRaw(message) {
|
|
427
|
+
const userId = this.assertConnected();
|
|
428
|
+
if (message.userId !== userId) {
|
|
429
|
+
throw new Error(
|
|
430
|
+
`MessageRaw userId mismatch: expected ${userId}, got ${message.userId}`
|
|
431
|
+
);
|
|
432
|
+
}
|
|
433
|
+
const storage = this.getStorage();
|
|
434
|
+
storage.messageRaws.set(message.id, message);
|
|
435
|
+
this.updateStorage(storage);
|
|
436
|
+
}
|
|
437
|
+
async setMessageRawStatus(messageId, status, updates = {}) {
|
|
438
|
+
this.assertConnected();
|
|
439
|
+
const storage = this.getStorage();
|
|
440
|
+
const existing = storage.messageRaws.get(messageId);
|
|
441
|
+
if (!existing) {
|
|
442
|
+
throw new Error(`MessageRaw not found with id: ${messageId}`);
|
|
443
|
+
}
|
|
444
|
+
const updated = this.mergeMessageRawStatusUpdate(
|
|
445
|
+
existing,
|
|
446
|
+
status,
|
|
447
|
+
updates
|
|
448
|
+
);
|
|
449
|
+
storage.messageRaws.set(messageId, updated);
|
|
450
|
+
this.updateStorage(storage);
|
|
451
|
+
}
|
|
452
|
+
async getMessageRaw(messageId) {
|
|
453
|
+
this.assertConnected();
|
|
454
|
+
const storage = this.getStorage();
|
|
455
|
+
return storage.messageRaws.get(messageId);
|
|
456
|
+
}
|
|
457
|
+
async listMessageRaws() {
|
|
458
|
+
this.assertConnected();
|
|
459
|
+
const storage = this.getStorage();
|
|
460
|
+
return Array.from(storage.messageRaws.values());
|
|
461
|
+
}
|
|
462
|
+
async removeMessageRaw(messageId) {
|
|
463
|
+
this.assertConnected();
|
|
464
|
+
const storage = this.getStorage();
|
|
465
|
+
storage.messageRaws.delete(messageId);
|
|
466
|
+
this.updateStorage(storage);
|
|
467
|
+
}
|
|
414
468
|
};
|
|
415
469
|
|
|
416
470
|
exports.StoreInternal = StoreInternal;
|
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 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"]}
|
|
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 MessageRaw,\n MessageRawStatusUpdate,\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 messageRaws: Map<string, MessageRaw>\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 messageRaws: new Map<string, MessageRaw>(),\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 private mergeMessageRawStatusUpdate(\n existing: MessageRaw,\n status: MessageRaw['status'],\n updates: MessageRawStatusUpdate = {}\n ): MessageRaw {\n const signedAt = updates.signedAt ?? existing.signedAt\n const signature = updates.signature ?? existing.signature\n\n return {\n ...existing,\n status,\n ...(signedAt !== undefined && { signedAt }),\n ...(signature !== undefined && { signature }),\n }\n }\n\n // Message signing request methods\n async setMessageRaw(message: MessageRaw): Promise<void> {\n const userId = this.assertConnected()\n if (message.userId !== userId) {\n throw new Error(\n `MessageRaw userId mismatch: expected ${userId}, got ${message.userId}`\n )\n }\n const storage = this.getStorage()\n storage.messageRaws.set(message.id, message)\n this.updateStorage(storage)\n }\n\n async setMessageRawStatus(\n messageId: string,\n status: MessageRaw['status'],\n updates: MessageRawStatusUpdate = {}\n ): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n const existing = storage.messageRaws.get(messageId)\n if (!existing) {\n throw new Error(`MessageRaw not found with id: ${messageId}`)\n }\n const updated = this.mergeMessageRawStatusUpdate(\n existing,\n status,\n updates\n )\n storage.messageRaws.set(messageId, updated)\n this.updateStorage(storage)\n }\n\n async getMessageRaw(messageId: string): Promise<MessageRaw | undefined> {\n this.assertConnected()\n const storage = this.getStorage()\n return storage.messageRaws.get(messageId)\n }\n\n async listMessageRaws(): Promise<Array<MessageRaw>> {\n this.assertConnected()\n const storage = this.getStorage()\n return Array.from(storage.messageRaws.values())\n }\n\n async removeMessageRaw(messageId: string): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n storage.messageRaws.delete(messageId)\n this.updateStorage(storage)\n }\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -29,6 +29,7 @@ var StoreInternal = class _StoreInternal {
|
|
|
29
29
|
return {
|
|
30
30
|
wallets: [],
|
|
31
31
|
transactions: /* @__PURE__ */ new Map(),
|
|
32
|
+
messageRaws: /* @__PURE__ */ new Map(),
|
|
32
33
|
session: void 0,
|
|
33
34
|
userRightsByNetwork: /* @__PURE__ */ new Map()
|
|
34
35
|
};
|
|
@@ -409,6 +410,59 @@ var StoreInternal = class _StoreInternal {
|
|
|
409
410
|
storage.transactions.delete(transactionId);
|
|
410
411
|
this.updateStorage(storage);
|
|
411
412
|
}
|
|
413
|
+
mergeMessageRawStatusUpdate(existing, status, updates = {}) {
|
|
414
|
+
const signedAt = updates.signedAt ?? existing.signedAt;
|
|
415
|
+
const signature = updates.signature ?? existing.signature;
|
|
416
|
+
return {
|
|
417
|
+
...existing,
|
|
418
|
+
status,
|
|
419
|
+
...signedAt !== void 0 && { signedAt },
|
|
420
|
+
...signature !== void 0 && { signature }
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
// Message signing request methods
|
|
424
|
+
async setMessageRaw(message) {
|
|
425
|
+
const userId = this.assertConnected();
|
|
426
|
+
if (message.userId !== userId) {
|
|
427
|
+
throw new Error(
|
|
428
|
+
`MessageRaw userId mismatch: expected ${userId}, got ${message.userId}`
|
|
429
|
+
);
|
|
430
|
+
}
|
|
431
|
+
const storage = this.getStorage();
|
|
432
|
+
storage.messageRaws.set(message.id, message);
|
|
433
|
+
this.updateStorage(storage);
|
|
434
|
+
}
|
|
435
|
+
async setMessageRawStatus(messageId, status, updates = {}) {
|
|
436
|
+
this.assertConnected();
|
|
437
|
+
const storage = this.getStorage();
|
|
438
|
+
const existing = storage.messageRaws.get(messageId);
|
|
439
|
+
if (!existing) {
|
|
440
|
+
throw new Error(`MessageRaw not found with id: ${messageId}`);
|
|
441
|
+
}
|
|
442
|
+
const updated = this.mergeMessageRawStatusUpdate(
|
|
443
|
+
existing,
|
|
444
|
+
status,
|
|
445
|
+
updates
|
|
446
|
+
);
|
|
447
|
+
storage.messageRaws.set(messageId, updated);
|
|
448
|
+
this.updateStorage(storage);
|
|
449
|
+
}
|
|
450
|
+
async getMessageRaw(messageId) {
|
|
451
|
+
this.assertConnected();
|
|
452
|
+
const storage = this.getStorage();
|
|
453
|
+
return storage.messageRaws.get(messageId);
|
|
454
|
+
}
|
|
455
|
+
async listMessageRaws() {
|
|
456
|
+
this.assertConnected();
|
|
457
|
+
const storage = this.getStorage();
|
|
458
|
+
return Array.from(storage.messageRaws.values());
|
|
459
|
+
}
|
|
460
|
+
async removeMessageRaw(messageId) {
|
|
461
|
+
this.assertConnected();
|
|
462
|
+
const storage = this.getStorage();
|
|
463
|
+
storage.messageRaws.delete(messageId);
|
|
464
|
+
this.updateStorage(storage);
|
|
465
|
+
}
|
|
412
466
|
};
|
|
413
467
|
|
|
414
468
|
export { StoreInternal };
|
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 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"]}
|
|
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 MessageRaw,\n MessageRawStatusUpdate,\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 messageRaws: Map<string, MessageRaw>\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 messageRaws: new Map<string, MessageRaw>(),\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 private mergeMessageRawStatusUpdate(\n existing: MessageRaw,\n status: MessageRaw['status'],\n updates: MessageRawStatusUpdate = {}\n ): MessageRaw {\n const signedAt = updates.signedAt ?? existing.signedAt\n const signature = updates.signature ?? existing.signature\n\n return {\n ...existing,\n status,\n ...(signedAt !== undefined && { signedAt }),\n ...(signature !== undefined && { signature }),\n }\n }\n\n // Message signing request methods\n async setMessageRaw(message: MessageRaw): Promise<void> {\n const userId = this.assertConnected()\n if (message.userId !== userId) {\n throw new Error(\n `MessageRaw userId mismatch: expected ${userId}, got ${message.userId}`\n )\n }\n const storage = this.getStorage()\n storage.messageRaws.set(message.id, message)\n this.updateStorage(storage)\n }\n\n async setMessageRawStatus(\n messageId: string,\n status: MessageRaw['status'],\n updates: MessageRawStatusUpdate = {}\n ): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n const existing = storage.messageRaws.get(messageId)\n if (!existing) {\n throw new Error(`MessageRaw not found with id: ${messageId}`)\n }\n const updated = this.mergeMessageRawStatusUpdate(\n existing,\n status,\n updates\n )\n storage.messageRaws.set(messageId, updated)\n this.updateStorage(storage)\n }\n\n async getMessageRaw(messageId: string): Promise<MessageRaw | undefined> {\n this.assertConnected()\n const storage = this.getStorage()\n return storage.messageRaws.get(messageId)\n }\n\n async listMessageRaws(): Promise<Array<MessageRaw>> {\n this.assertConnected()\n const storage = this.getStorage()\n return Array.from(storage.messageRaws.values())\n }\n\n async removeMessageRaw(messageId: string): Promise<void> {\n this.assertConnected()\n const storage = this.getStorage()\n storage.messageRaws.delete(messageId)\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": "1.
|
|
3
|
+
"version": "1.3.1",
|
|
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": "^1.
|
|
21
|
-
"@canton-network/core-rpc-errors": "^1.
|
|
22
|
-
"@canton-network/core-types": "^1.
|
|
23
|
-
"@canton-network/core-wallet-auth": "^1.
|
|
24
|
-
"@canton-network/core-wallet-store": "^1.
|
|
20
|
+
"@canton-network/core-ledger-client": "^1.3.1",
|
|
21
|
+
"@canton-network/core-rpc-errors": "^1.3.1",
|
|
22
|
+
"@canton-network/core-types": "^1.3.1",
|
|
23
|
+
"@canton-network/core-wallet-auth": "^1.3.1",
|
|
24
|
+
"@canton-network/core-wallet-store": "^1.3.1",
|
|
25
25
|
"pino": "^10.3.1",
|
|
26
26
|
"zod": "^4.3.6"
|
|
27
27
|
},
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"repository": {
|
|
43
43
|
"type": "git",
|
|
44
|
-
"url": "git+https://github.com/canton-network/wallet
|
|
44
|
+
"url": "git+https://github.com/canton-network/wallet.git",
|
|
45
45
|
"directory": "core/wallet-store-inmemory"
|
|
46
46
|
}
|
|
47
47
|
}
|