@canton-network/core-wallet-store-inmemory 0.21.2 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/StoreInternal.d.ts +4 -2
- package/dist/StoreInternal.d.ts.map +1 -1
- package/dist/index.cjs +53 -25
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +53 -25
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/dist/StoreInternal.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Logger } from 'pino';
|
|
2
2
|
import { AuthContext, UserId, AuthAware, Idp } from '@canton-network/core-wallet-auth';
|
|
3
3
|
import { Store, Wallet, PartyId, Session, WalletFilter, Transaction, Network, UpdateWallet } from '@canton-network/core-wallet-store';
|
|
4
|
+
import { CurrentNetworkWalletFilter } from '@canton-network/core-wallet-store';
|
|
4
5
|
interface UserStorage {
|
|
5
6
|
wallets: Array<Wallet>;
|
|
6
7
|
transactions: Map<string, Transaction>;
|
|
@@ -23,11 +24,12 @@ export declare class StoreInternal implements Store, AuthAware<StoreInternal> {
|
|
|
23
24
|
private getStorage;
|
|
24
25
|
private updateStorage;
|
|
25
26
|
private syncWallets;
|
|
26
|
-
|
|
27
|
+
getAllWallets(filter?: WalletFilter): Promise<Array<Wallet>>;
|
|
28
|
+
getWallets(filter?: CurrentNetworkWalletFilter): Promise<Array<Wallet>>;
|
|
27
29
|
getPrimaryWallet(): Promise<Wallet | undefined>;
|
|
28
30
|
setPrimaryWallet(partyId: PartyId): Promise<void>;
|
|
29
31
|
addWallet(wallet: Wallet): Promise<void>;
|
|
30
|
-
updateWallet({ status, partyId, externalTxId, }: UpdateWallet): Promise<void>;
|
|
32
|
+
updateWallet({ status, partyId, networkId, externalTxId, }: UpdateWallet): Promise<void>;
|
|
31
33
|
removeWallet(partyId: PartyId): Promise<void>;
|
|
32
34
|
getSession(): Promise<Session | undefined>;
|
|
33
35
|
setSession(session: Session): Promise<void>;
|
|
@@ -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,EAGT,GAAG,EACN,MAAM,kCAAkC,CAAA;AACzC,OAAO,EACH,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,YAAY,EACZ,WAAW,EACX,OAAO,EACP,YAAY,EACf,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"StoreInternal.d.ts","sourceRoot":"","sources":["../src/StoreInternal.ts"],"names":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -75,12 +75,16 @@ var StoreInternal = class _StoreInternal {
|
|
|
75
75
|
}
|
|
76
76
|
throw new Error("Unexpected right kind");
|
|
77
77
|
});
|
|
78
|
-
const existingWallets = await this.
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
const existingWallets = await this.getAllWallets({
|
|
79
|
+
networkIds: [network.id]
|
|
80
|
+
});
|
|
81
|
+
const existingPartyNetworkPairs = new Set(
|
|
82
|
+
existingWallets.map((w) => `${w.partyId}:${w.networkId}`)
|
|
81
83
|
);
|
|
82
84
|
const participantWallets = parties?.filter(
|
|
83
|
-
(party) => !
|
|
85
|
+
(party) => !existingPartyNetworkPairs.has(
|
|
86
|
+
`${party}:${network.id}`
|
|
87
|
+
)
|
|
84
88
|
// todo: filter on idp id
|
|
85
89
|
).map((party) => {
|
|
86
90
|
const [hint, namespace] = party.split("::");
|
|
@@ -98,9 +102,12 @@ var StoreInternal = class _StoreInternal {
|
|
|
98
102
|
}) || [];
|
|
99
103
|
const storage = this.getStorage();
|
|
100
104
|
const wallets = [...storage.wallets, ...participantWallets];
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
105
|
+
const networkWallets = wallets.filter(
|
|
106
|
+
(w) => w.networkId === network.id
|
|
107
|
+
);
|
|
108
|
+
const hasPrimary = networkWallets.some((w) => w.primary);
|
|
109
|
+
if (!hasPrimary && networkWallets.length > 0) {
|
|
110
|
+
networkWallets[0].primary = true;
|
|
104
111
|
}
|
|
105
112
|
this.logger.debug(wallets, "Wallets synchronized");
|
|
106
113
|
storage.wallets = wallets;
|
|
@@ -109,7 +116,7 @@ var StoreInternal = class _StoreInternal {
|
|
|
109
116
|
return;
|
|
110
117
|
}
|
|
111
118
|
}
|
|
112
|
-
async
|
|
119
|
+
async getAllWallets(filter = {}) {
|
|
113
120
|
const { networkIds, signingProviderIds } = filter;
|
|
114
121
|
const networkIdSet = networkIds ? new Set(networkIds) : null;
|
|
115
122
|
const signingProviderIdSet = signingProviderIds ? new Set(signingProviderIds) : null;
|
|
@@ -119,20 +126,35 @@ var StoreInternal = class _StoreInternal {
|
|
|
119
126
|
return matchedNetworkIds && matchedSigningProviderIds;
|
|
120
127
|
});
|
|
121
128
|
}
|
|
129
|
+
async getWallets(filter = {}) {
|
|
130
|
+
const network = await this.getCurrentNetwork();
|
|
131
|
+
return this.getAllWallets({
|
|
132
|
+
...filter,
|
|
133
|
+
networkIds: [network.id]
|
|
134
|
+
});
|
|
135
|
+
}
|
|
122
136
|
async getPrimaryWallet() {
|
|
123
137
|
const wallets = await this.getWallets();
|
|
124
138
|
return wallets.find((w) => w.primary === true);
|
|
125
139
|
}
|
|
126
140
|
async setPrimaryWallet(partyId) {
|
|
141
|
+
const network = await this.getCurrentNetwork();
|
|
127
142
|
const storage = this.getStorage();
|
|
128
|
-
|
|
129
|
-
|
|
143
|
+
const networkWallets = storage.wallets.filter(
|
|
144
|
+
(w) => w.networkId === network.id
|
|
145
|
+
);
|
|
146
|
+
if (!networkWallets.some((w) => w.partyId === partyId)) {
|
|
147
|
+
throw new Error(
|
|
148
|
+
`Wallet with partyId "${partyId}" not found in network "${network.id}"`
|
|
149
|
+
);
|
|
130
150
|
}
|
|
131
151
|
const wallets = storage.wallets.map((w) => {
|
|
132
|
-
if (w.
|
|
133
|
-
w.
|
|
134
|
-
|
|
135
|
-
|
|
152
|
+
if (w.networkId === network.id) {
|
|
153
|
+
if (w.partyId === partyId) {
|
|
154
|
+
w.primary = true;
|
|
155
|
+
} else {
|
|
156
|
+
w.primary = false;
|
|
157
|
+
}
|
|
136
158
|
}
|
|
137
159
|
return w;
|
|
138
160
|
});
|
|
@@ -141,38 +163,44 @@ var StoreInternal = class _StoreInternal {
|
|
|
141
163
|
}
|
|
142
164
|
async addWallet(wallet) {
|
|
143
165
|
const storage = this.getStorage();
|
|
144
|
-
if (storage.wallets.some(
|
|
166
|
+
if (storage.wallets.some(
|
|
167
|
+
(w) => w.partyId === wallet.partyId && w.networkId === wallet.networkId
|
|
168
|
+
)) {
|
|
145
169
|
throw new Error(
|
|
146
|
-
`Wallet with partyId "${wallet.partyId}" already exists`
|
|
170
|
+
`Wallet with partyId "${wallet.partyId}" already exists in network "${wallet.networkId}"`
|
|
147
171
|
);
|
|
148
172
|
}
|
|
149
|
-
const
|
|
150
|
-
|
|
173
|
+
const networkWallets = await this.getAllWallets({
|
|
174
|
+
networkIds: [wallet.networkId]
|
|
175
|
+
});
|
|
176
|
+
if (networkWallets.length === 0) {
|
|
151
177
|
wallet.primary = true;
|
|
152
178
|
}
|
|
153
179
|
if (wallet.primary) {
|
|
154
|
-
storage.wallets.map((w) => w.primary = false);
|
|
180
|
+
storage.wallets.filter((w) => w.networkId === wallet.networkId).map((w) => w.primary = false);
|
|
155
181
|
}
|
|
156
|
-
wallets.push(wallet);
|
|
157
|
-
storage.wallets = wallets;
|
|
182
|
+
storage.wallets.push(wallet);
|
|
158
183
|
this.updateStorage(storage);
|
|
159
184
|
}
|
|
160
185
|
async updateWallet({
|
|
161
186
|
status,
|
|
162
187
|
partyId,
|
|
188
|
+
networkId,
|
|
163
189
|
externalTxId
|
|
164
190
|
}) {
|
|
165
191
|
const storage = this.getStorage();
|
|
166
|
-
const
|
|
167
|
-
|
|
192
|
+
const targetNetworkId = networkId ?? (await this.getCurrentNetwork()).id;
|
|
193
|
+
const wallets = storage.wallets.map(
|
|
194
|
+
(wallet) => wallet.partyId === partyId && wallet.networkId === targetNetworkId ? { ...wallet, status, externalTxId } : wallet
|
|
168
195
|
);
|
|
169
196
|
storage.wallets = wallets;
|
|
170
197
|
this.updateStorage(storage);
|
|
171
198
|
}
|
|
172
199
|
async removeWallet(partyId) {
|
|
200
|
+
const network = await this.getCurrentNetwork();
|
|
173
201
|
const storage = this.getStorage();
|
|
174
|
-
const wallets =
|
|
175
|
-
(w) => w.partyId
|
|
202
|
+
const wallets = storage.wallets.filter(
|
|
203
|
+
(w) => !(w.partyId === partyId && w.networkId === network.id)
|
|
176
204
|
);
|
|
177
205
|
storage.wallets = wallets;
|
|
178
206
|
this.updateStorage(storage);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/StoreInternal.ts"],"names":["assertConnected","LedgerClient","defaultRetryableOptions"],"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 AccessTokenProvider,\n Idp,\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} from '@canton-network/core-wallet-store'\nimport {\n LedgerClient,\n defaultRetryableOptions,\n} from '@canton-network/core-ledger-client'\n\ninterface UserStorage {\n wallets: Array<Wallet>\n transactions: Map<string, Transaction>\n session: Session | undefined\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 }\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: AccessTokenProvider = {\n getUserAccessToken: async () => this.authContext!.accessToken,\n getAdminAccessToken: async () => this.authContext!.accessToken,\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 parties = rights.rights\n ?.filter((right) => 'CanActAs' in right.kind)\n .map((right) => {\n if ('CanActAs' in right.kind) {\n return right.kind.CanActAs.value.party\n }\n throw new Error('Unexpected right kind')\n })\n\n // Merge Wallets\n const existingWallets = await this.getWallets()\n const existingPartyIds = new Set(\n existingWallets.map((w) => w.partyId)\n )\n const participantWallets: Array<Wallet> =\n parties\n ?.filter(\n (party) => !existingPartyIds.has(party)\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 }\n }) || []\n const storage = this.getStorage()\n const wallets = [...storage.wallets, ...participantWallets]\n\n // Set primary wallet if none exists\n const hasPrimary = wallets.some((w) => w.primary)\n if (!hasPrimary && wallets.length > 0) {\n wallets[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 getWallets(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 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 storage = this.getStorage()\n if (!storage.wallets.some((w) => w.partyId === partyId)) {\n throw new Error(`Wallet with partyId \"${partyId}\" not found`)\n }\n const wallets = storage.wallets.map((w) => {\n if (w.partyId === partyId) {\n w.primary = true\n } else {\n w.primary = false\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 (storage.wallets.some((w) => w.partyId === wallet.partyId)) {\n throw new Error(\n `Wallet with partyId \"${wallet.partyId}\" already exists`\n )\n }\n const wallets = await this.getWallets()\n\n if (wallets.length === 0) {\n // If this is the first wallet, set it as primary automatically\n wallet.primary = true\n }\n\n if (wallet.primary) {\n // If the new wallet is primary, set all others to non-primary\n storage.wallets.map((w) => (w.primary = false))\n }\n wallets.push(wallet)\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async updateWallet({\n status,\n partyId,\n externalTxId,\n }: UpdateWallet): Promise<void> {\n const storage = this.getStorage()\n const wallets = (await this.getWallets()).map((wallet) =>\n wallet.partyId === partyId\n ? { ...wallet, status, externalTxId }\n : wallet\n )\n\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async removeWallet(partyId: PartyId): Promise<void> {\n const storage = this.getStorage()\n const wallets = (await this.getWallets()).filter(\n (w) => w.partyId !== partyId\n )\n\n storage.wallets = wallets\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/StoreInternal.ts"],"names":["assertConnected","LedgerClient","defaultRetryableOptions"],"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 AccessTokenProvider,\n Idp,\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} 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}\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 }\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: AccessTokenProvider = {\n getUserAccessToken: async () => this.authContext!.accessToken,\n getAdminAccessToken: async () => this.authContext!.accessToken,\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 parties = rights.rights\n ?.filter((right) => 'CanActAs' in right.kind)\n .map((right) => {\n if ('CanActAs' in right.kind) {\n return right.kind.CanActAs.value.party\n }\n throw new Error('Unexpected right kind')\n })\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 }\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({\n status,\n partyId,\n networkId,\n externalTxId,\n }: UpdateWallet): Promise<void> {\n const storage = this.getStorage()\n // Use provided networkId or get current network from session\n const targetNetworkId = networkId ?? (await this.getCurrentNetwork()).id\n\n const wallets = storage.wallets.map((wallet) =>\n wallet.partyId === partyId && wallet.networkId === targetNetworkId\n ? { ...wallet, status, externalTxId }\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 // 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"]}
|
package/dist/index.js
CHANGED
|
@@ -73,12 +73,16 @@ var StoreInternal = class _StoreInternal {
|
|
|
73
73
|
}
|
|
74
74
|
throw new Error("Unexpected right kind");
|
|
75
75
|
});
|
|
76
|
-
const existingWallets = await this.
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
const existingWallets = await this.getAllWallets({
|
|
77
|
+
networkIds: [network.id]
|
|
78
|
+
});
|
|
79
|
+
const existingPartyNetworkPairs = new Set(
|
|
80
|
+
existingWallets.map((w) => `${w.partyId}:${w.networkId}`)
|
|
79
81
|
);
|
|
80
82
|
const participantWallets = parties?.filter(
|
|
81
|
-
(party) => !
|
|
83
|
+
(party) => !existingPartyNetworkPairs.has(
|
|
84
|
+
`${party}:${network.id}`
|
|
85
|
+
)
|
|
82
86
|
// todo: filter on idp id
|
|
83
87
|
).map((party) => {
|
|
84
88
|
const [hint, namespace] = party.split("::");
|
|
@@ -96,9 +100,12 @@ var StoreInternal = class _StoreInternal {
|
|
|
96
100
|
}) || [];
|
|
97
101
|
const storage = this.getStorage();
|
|
98
102
|
const wallets = [...storage.wallets, ...participantWallets];
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
103
|
+
const networkWallets = wallets.filter(
|
|
104
|
+
(w) => w.networkId === network.id
|
|
105
|
+
);
|
|
106
|
+
const hasPrimary = networkWallets.some((w) => w.primary);
|
|
107
|
+
if (!hasPrimary && networkWallets.length > 0) {
|
|
108
|
+
networkWallets[0].primary = true;
|
|
102
109
|
}
|
|
103
110
|
this.logger.debug(wallets, "Wallets synchronized");
|
|
104
111
|
storage.wallets = wallets;
|
|
@@ -107,7 +114,7 @@ var StoreInternal = class _StoreInternal {
|
|
|
107
114
|
return;
|
|
108
115
|
}
|
|
109
116
|
}
|
|
110
|
-
async
|
|
117
|
+
async getAllWallets(filter = {}) {
|
|
111
118
|
const { networkIds, signingProviderIds } = filter;
|
|
112
119
|
const networkIdSet = networkIds ? new Set(networkIds) : null;
|
|
113
120
|
const signingProviderIdSet = signingProviderIds ? new Set(signingProviderIds) : null;
|
|
@@ -117,20 +124,35 @@ var StoreInternal = class _StoreInternal {
|
|
|
117
124
|
return matchedNetworkIds && matchedSigningProviderIds;
|
|
118
125
|
});
|
|
119
126
|
}
|
|
127
|
+
async getWallets(filter = {}) {
|
|
128
|
+
const network = await this.getCurrentNetwork();
|
|
129
|
+
return this.getAllWallets({
|
|
130
|
+
...filter,
|
|
131
|
+
networkIds: [network.id]
|
|
132
|
+
});
|
|
133
|
+
}
|
|
120
134
|
async getPrimaryWallet() {
|
|
121
135
|
const wallets = await this.getWallets();
|
|
122
136
|
return wallets.find((w) => w.primary === true);
|
|
123
137
|
}
|
|
124
138
|
async setPrimaryWallet(partyId) {
|
|
139
|
+
const network = await this.getCurrentNetwork();
|
|
125
140
|
const storage = this.getStorage();
|
|
126
|
-
|
|
127
|
-
|
|
141
|
+
const networkWallets = storage.wallets.filter(
|
|
142
|
+
(w) => w.networkId === network.id
|
|
143
|
+
);
|
|
144
|
+
if (!networkWallets.some((w) => w.partyId === partyId)) {
|
|
145
|
+
throw new Error(
|
|
146
|
+
`Wallet with partyId "${partyId}" not found in network "${network.id}"`
|
|
147
|
+
);
|
|
128
148
|
}
|
|
129
149
|
const wallets = storage.wallets.map((w) => {
|
|
130
|
-
if (w.
|
|
131
|
-
w.
|
|
132
|
-
|
|
133
|
-
|
|
150
|
+
if (w.networkId === network.id) {
|
|
151
|
+
if (w.partyId === partyId) {
|
|
152
|
+
w.primary = true;
|
|
153
|
+
} else {
|
|
154
|
+
w.primary = false;
|
|
155
|
+
}
|
|
134
156
|
}
|
|
135
157
|
return w;
|
|
136
158
|
});
|
|
@@ -139,38 +161,44 @@ var StoreInternal = class _StoreInternal {
|
|
|
139
161
|
}
|
|
140
162
|
async addWallet(wallet) {
|
|
141
163
|
const storage = this.getStorage();
|
|
142
|
-
if (storage.wallets.some(
|
|
164
|
+
if (storage.wallets.some(
|
|
165
|
+
(w) => w.partyId === wallet.partyId && w.networkId === wallet.networkId
|
|
166
|
+
)) {
|
|
143
167
|
throw new Error(
|
|
144
|
-
`Wallet with partyId "${wallet.partyId}" already exists`
|
|
168
|
+
`Wallet with partyId "${wallet.partyId}" already exists in network "${wallet.networkId}"`
|
|
145
169
|
);
|
|
146
170
|
}
|
|
147
|
-
const
|
|
148
|
-
|
|
171
|
+
const networkWallets = await this.getAllWallets({
|
|
172
|
+
networkIds: [wallet.networkId]
|
|
173
|
+
});
|
|
174
|
+
if (networkWallets.length === 0) {
|
|
149
175
|
wallet.primary = true;
|
|
150
176
|
}
|
|
151
177
|
if (wallet.primary) {
|
|
152
|
-
storage.wallets.map((w) => w.primary = false);
|
|
178
|
+
storage.wallets.filter((w) => w.networkId === wallet.networkId).map((w) => w.primary = false);
|
|
153
179
|
}
|
|
154
|
-
wallets.push(wallet);
|
|
155
|
-
storage.wallets = wallets;
|
|
180
|
+
storage.wallets.push(wallet);
|
|
156
181
|
this.updateStorage(storage);
|
|
157
182
|
}
|
|
158
183
|
async updateWallet({
|
|
159
184
|
status,
|
|
160
185
|
partyId,
|
|
186
|
+
networkId,
|
|
161
187
|
externalTxId
|
|
162
188
|
}) {
|
|
163
189
|
const storage = this.getStorage();
|
|
164
|
-
const
|
|
165
|
-
|
|
190
|
+
const targetNetworkId = networkId ?? (await this.getCurrentNetwork()).id;
|
|
191
|
+
const wallets = storage.wallets.map(
|
|
192
|
+
(wallet) => wallet.partyId === partyId && wallet.networkId === targetNetworkId ? { ...wallet, status, externalTxId } : wallet
|
|
166
193
|
);
|
|
167
194
|
storage.wallets = wallets;
|
|
168
195
|
this.updateStorage(storage);
|
|
169
196
|
}
|
|
170
197
|
async removeWallet(partyId) {
|
|
198
|
+
const network = await this.getCurrentNetwork();
|
|
171
199
|
const storage = this.getStorage();
|
|
172
|
-
const wallets =
|
|
173
|
-
(w) => w.partyId
|
|
200
|
+
const wallets = storage.wallets.filter(
|
|
201
|
+
(w) => !(w.partyId === partyId && w.networkId === network.id)
|
|
174
202
|
);
|
|
175
203
|
storage.wallets = wallets;
|
|
176
204
|
this.updateStorage(storage);
|
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 AccessTokenProvider,\n Idp,\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} from '@canton-network/core-wallet-store'\nimport {\n LedgerClient,\n defaultRetryableOptions,\n} from '@canton-network/core-ledger-client'\n\ninterface UserStorage {\n wallets: Array<Wallet>\n transactions: Map<string, Transaction>\n session: Session | undefined\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 }\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: AccessTokenProvider = {\n getUserAccessToken: async () => this.authContext!.accessToken,\n getAdminAccessToken: async () => this.authContext!.accessToken,\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 parties = rights.rights\n ?.filter((right) => 'CanActAs' in right.kind)\n .map((right) => {\n if ('CanActAs' in right.kind) {\n return right.kind.CanActAs.value.party\n }\n throw new Error('Unexpected right kind')\n })\n\n // Merge Wallets\n const existingWallets = await this.getWallets()\n const existingPartyIds = new Set(\n existingWallets.map((w) => w.partyId)\n )\n const participantWallets: Array<Wallet> =\n parties\n ?.filter(\n (party) => !existingPartyIds.has(party)\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 }\n }) || []\n const storage = this.getStorage()\n const wallets = [...storage.wallets, ...participantWallets]\n\n // Set primary wallet if none exists\n const hasPrimary = wallets.some((w) => w.primary)\n if (!hasPrimary && wallets.length > 0) {\n wallets[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 getWallets(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 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 storage = this.getStorage()\n if (!storage.wallets.some((w) => w.partyId === partyId)) {\n throw new Error(`Wallet with partyId \"${partyId}\" not found`)\n }\n const wallets = storage.wallets.map((w) => {\n if (w.partyId === partyId) {\n w.primary = true\n } else {\n w.primary = false\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 (storage.wallets.some((w) => w.partyId === wallet.partyId)) {\n throw new Error(\n `Wallet with partyId \"${wallet.partyId}\" already exists`\n )\n }\n const wallets = await this.getWallets()\n\n if (wallets.length === 0) {\n // If this is the first wallet, set it as primary automatically\n wallet.primary = true\n }\n\n if (wallet.primary) {\n // If the new wallet is primary, set all others to non-primary\n storage.wallets.map((w) => (w.primary = false))\n }\n wallets.push(wallet)\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async updateWallet({\n status,\n partyId,\n externalTxId,\n }: UpdateWallet): Promise<void> {\n const storage = this.getStorage()\n const wallets = (await this.getWallets()).map((wallet) =>\n wallet.partyId === partyId\n ? { ...wallet, status, externalTxId }\n : wallet\n )\n\n storage.wallets = wallets\n this.updateStorage(storage)\n }\n\n async removeWallet(partyId: PartyId): Promise<void> {\n const storage = this.getStorage()\n const wallets = (await this.getWallets()).filter(\n (w) => w.partyId !== partyId\n )\n\n storage.wallets = wallets\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"]}
|
|
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 AccessTokenProvider,\n Idp,\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} 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}\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 }\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: AccessTokenProvider = {\n getUserAccessToken: async () => this.authContext!.accessToken,\n getAdminAccessToken: async () => this.authContext!.accessToken,\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 parties = rights.rights\n ?.filter((right) => 'CanActAs' in right.kind)\n .map((right) => {\n if ('CanActAs' in right.kind) {\n return right.kind.CanActAs.value.party\n }\n throw new Error('Unexpected right kind')\n })\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 }\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({\n status,\n partyId,\n networkId,\n externalTxId,\n }: UpdateWallet): Promise<void> {\n const storage = this.getStorage()\n // Use provided networkId or get current network from session\n const targetNetworkId = networkId ?? (await this.getCurrentNetwork()).id\n\n const wallets = storage.wallets.map((wallet) =>\n wallet.partyId === partyId && wallet.networkId === targetNetworkId\n ? { ...wallet, status, externalTxId }\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 // 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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@canton-network/core-wallet-store-inmemory",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.23.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "In-memory implementation of the Store API",
|
|
6
6
|
"author": "Marc Juchli <marc.juchli@digitalasset.com>",
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
"test": "yarn node --experimental-vm-modules $(yarn bin jest)"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@canton-network/core-ledger-client": "^0.
|
|
20
|
-
"@canton-network/core-rpc-errors": "^0.
|
|
21
|
-
"@canton-network/core-types": "^0.
|
|
22
|
-
"@canton-network/core-wallet-auth": "^0.
|
|
23
|
-
"@canton-network/core-wallet-store": "^0.
|
|
19
|
+
"@canton-network/core-ledger-client": "^0.27.0",
|
|
20
|
+
"@canton-network/core-rpc-errors": "^0.15.0",
|
|
21
|
+
"@canton-network/core-types": "^0.18.0",
|
|
22
|
+
"@canton-network/core-wallet-auth": "^0.19.0",
|
|
23
|
+
"@canton-network/core-wallet-store": "^0.22.0",
|
|
24
24
|
"pino": "^10.2.1",
|
|
25
25
|
"zod": "^4.3.5"
|
|
26
26
|
},
|