@canton-network/core-signing-blockdaemon 0.17.3 → 0.18.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/index.cjs CHANGED
@@ -172,7 +172,8 @@ var BlockdaemonSigningDriver = class {
172
172
  getTransaction: async (params) => {
173
173
  try {
174
174
  const tx = await this.client.getTransaction({
175
- txId: params.txId
175
+ txId: params.txId,
176
+ userIdentifier: userId
176
177
  });
177
178
  return {
178
179
  txId: tx.txId,
@@ -196,7 +197,8 @@ var BlockdaemonSigningDriver = class {
196
197
  try {
197
198
  const transactions = await this.client.getTransactions({
198
199
  txIds: params.txIds,
199
- publicKeys: params.publicKeys
200
+ publicKeys: params.publicKeys,
201
+ userIdentifier: userId
200
202
  });
201
203
  return {
202
204
  transactions: transactions.map((tx) => ({
@@ -226,7 +228,8 @@ var BlockdaemonSigningDriver = class {
226
228
  keys: keys.map((k) => ({
227
229
  id: k.id,
228
230
  name: k.name,
229
- publicKey: k.publicKey
231
+ publicKey: k.publicKey,
232
+ userIdentifier: userId
230
233
  }))
231
234
  };
232
235
  } catch (error) {
@@ -239,7 +242,8 @@ var BlockdaemonSigningDriver = class {
239
242
  createKey: async (params) => {
240
243
  try {
241
244
  const key = await this.client.createKey({
242
- name: params.name
245
+ name: params.name,
246
+ userIdentifier: userId
243
247
  });
244
248
  return {
245
249
  id: key.id,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/signing-api-sdk.ts","../src/index.ts"],"names":["PartyMode","SigningProvider","buildController"],"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 type {\n Key,\n Transaction,\n SignTransactionParams,\n GetTransactionParams,\n GetTransactionsParams,\n CreateKeyParams,\n Tx,\n TxHash,\n KeyIdentifier,\n InternalTxId,\n PublicKey,\n} from '@canton-network/core-signing-lib'\n\n/**\n * A TypeScript SDK client for the Wallet Signing API.\n */\nexport class SigningAPIClient {\n private baseUrl: string\n private apiKey: string | undefined\n private masterKey: string\n private testNetwork: boolean\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl\n this.masterKey = 'Default'\n this.testNetwork = true\n }\n\n private async post<I extends Record<string, unknown>, O>(\n endpoint: string,\n params: I\n ): Promise<O> {\n const url = `${this.baseUrl}${endpoint}`\n\n // Merge context params (masterKey and testNetwork) into the request body\n const bodyToSend = {\n ...params,\n masterKey: this.masterKey,\n testNetwork: this.testNetwork,\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n }\n\n if (this.apiKey) {\n headers['Authorization'] = `Bearer ${this.apiKey}`\n }\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(bodyToSend),\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(\n `API call to ${endpoint} failed (${response.status}): ${errorText}`\n )\n }\n\n // Handle 204 No Content for methods that return empty objects or null/void\n if (\n response.status === 204 ||\n response.headers.get('content-length') === '0'\n ) {\n // SetConfiguration/GetConfiguration return map[string]any which might be empty\n return {} as O\n }\n\n return response.json() as Promise<O>\n }\n\n /**\n * Uses the Wallet Provider to sign a transaction.\n * @param params - The transaction signing parameters.\n */\n public async signTransaction(\n params: SignTransactionParams\n ): Promise<Transaction> {\n return this.post<BlockDaemonSignTransactionParams, Transaction>(\n '/signTransaction',\n {\n publicKey: params.keyIdentifier.publicKey!,\n ...params,\n }\n )\n }\n\n /**\n * Get the status of a single transaction by its ID.\n * @param params - The transaction ID parameters.\n */\n public async getTransaction(\n params: GetTransactionParams\n ): Promise<Transaction> {\n return this.post<GetTransactionParams, Transaction>(\n '/getTransaction',\n params\n )\n }\n\n /**\n * Get the status of multiple transactions.\n * @param params - Filters for transactions.\n */\n public async getTransactions(\n params: GetTransactionsParams\n ): Promise<Transaction[]> {\n // Note: The Go handler returns []Transaction, the HTTP handler wraps it in JSON array.\n return this.post<GetTransactionsParams, Transaction[]>(\n '/getTransactions',\n params\n )\n }\n\n /**\n * Get a list of public keys available for signing.\n */\n public async getKeys(): Promise<Key[]> {\n // Go's addDummyArg is used for no-arg handlers, so we send an empty body.\n return this.post<Record<string, never>, Key[]>('/getKeys', {})\n }\n\n /**\n * Create a new key at the Wallet Provider.\n * @param params - The key creation parameters.\n */\n public async createKey(params: CreateKeyParams): Promise<Key> {\n return this.post<CreateKeyParams, Key>('/createKey', params)\n }\n\n /**\n * Get configuration parameters (client-side only).\n * Returns the current BaseURL, ApiKey, MasterKey, and TestNetwork settings.\n */\n public getConfiguration(): Record<string, unknown> {\n return {\n BaseURL: this.baseUrl,\n ApiKey: this.apiKey,\n MasterKey: this.masterKey,\n TestNetwork: this.testNetwork,\n }\n }\n\n /**\n * Set configuration parameters (client-side only).\n * Updates only the provided configuration fields.\n * @param params - Configuration parameters to set. All fields are optional.\n */\n public setConfiguration(params: {\n BaseURL?: string\n ApiKey?: string\n MasterKey?: string\n TestNetwork?: boolean\n }): Record<string, unknown> {\n if (params.BaseURL !== undefined) {\n this.baseUrl = params.BaseURL.endsWith('/')\n ? params.BaseURL.slice(0, -1)\n : params.BaseURL\n }\n if (params.ApiKey !== undefined) {\n this.apiKey = params.ApiKey\n }\n if (params.MasterKey !== undefined) {\n this.masterKey = params.MasterKey\n }\n if (params.TestNetwork !== undefined) {\n this.testNetwork = params.TestNetwork\n }\n return this.getConfiguration()\n }\n}\n\n//todo: remove once blockdaemon supports keyIdentifier instead of publicKey\ninterface BlockDaemonSignTransactionParams {\n tx: Tx\n txHash: TxHash\n publicKey: PublicKey\n keyIdentifier: KeyIdentifier\n internalTxId?: InternalTxId\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n [k: string]: any\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n buildController,\n type CreateKeyParams,\n type CreateKeyResult,\n type GetConfigurationResult,\n type GetKeysResult,\n type GetTransactionParams,\n type GetTransactionResult,\n type GetTransactionsParams,\n type GetTransactionsResult,\n PartyMode,\n type SetConfigurationParams,\n type SetConfigurationResult,\n type SigningDriverInterface,\n SigningProvider,\n type SignTransactionParams,\n type SignTransactionResult,\n type SubscribeTransactionsParams,\n type SubscribeTransactionsResult,\n} from '@canton-network/core-signing-lib'\nimport { AuthContext } from '@canton-network/core-wallet-auth'\nimport { SigningAPIClient } from './signing-api-sdk.js'\n\nexport { SigningAPIClient } from './signing-api-sdk.js'\n\nexport interface BlockdaemonConfig {\n baseUrl: string\n apiKey: string\n}\n\nexport default class BlockdaemonSigningDriver implements SigningDriverInterface {\n private client: SigningAPIClient\n\n constructor(config: BlockdaemonConfig) {\n this.client = new SigningAPIClient(config.baseUrl)\n this.client.setConfiguration({ ApiKey: config.apiKey })\n }\n\n public partyMode = PartyMode.EXTERNAL\n public signingProvider = SigningProvider.BLOCKDAEMON\n\n public controller = (userId: AuthContext['userId'] | undefined) =>\n buildController({\n signTransaction: async (\n params: SignTransactionParams\n ): Promise<SignTransactionResult> => {\n try {\n if (!params.keyIdentifier.publicKey) {\n return {\n error: 'key_not_found',\n error_description:\n 'The provided key identifier must include a publicKey.',\n }\n }\n const tx = await this.client.signTransaction({\n tx: params.tx,\n txHash: params.txHash,\n keyIdentifier: params.keyIdentifier,\n ...(params.internalTxId !== undefined && {\n internalTxId: params.internalTxId,\n }),\n userIdentifier: userId,\n })\n return {\n txId: tx.txId,\n status: tx.status,\n ...(tx.signature !== undefined && {\n signature: tx.signature,\n }),\n ...(tx.publicKey !== undefined && {\n publicKey: tx.publicKey,\n }),\n }\n } catch (error) {\n return {\n error: 'signing_error',\n error_description: (error as Error).message,\n }\n }\n },\n\n getTransaction: async (\n params: GetTransactionParams\n ): Promise<GetTransactionResult> => {\n try {\n const tx = await this.client.getTransaction({\n txId: params.txId,\n })\n return {\n txId: tx.txId,\n status: tx.status,\n ...(tx.signature !== undefined && {\n signature: tx.signature,\n }),\n ...(tx.publicKey !== undefined && {\n publicKey: tx.publicKey,\n }),\n }\n } catch (error) {\n return {\n error: 'transaction_not_found',\n error_description: (error as Error).message,\n }\n }\n },\n\n getTransactions: async (\n params: GetTransactionsParams\n ): Promise<GetTransactionsResult> => {\n if (params.publicKeys || params.txIds) {\n try {\n const transactions = await this.client.getTransactions({\n txIds: params.txIds!,\n publicKeys: params.publicKeys!,\n })\n return {\n transactions: transactions.map((tx) => ({\n txId: tx.txId,\n status: tx.status,\n signature: tx.signature!,\n publicKey: tx.publicKey!,\n })),\n }\n } catch (error) {\n return {\n error: 'fetch_error',\n error_description: (error as Error).message,\n }\n }\n } else {\n return {\n error: 'bad_arguments',\n error_description:\n 'either public key or txIds must be supplied',\n }\n }\n },\n\n getKeys: async (): Promise<GetKeysResult> => {\n try {\n const keys = await this.client.getKeys()\n return {\n keys: keys.map((k) => ({\n id: k.id,\n name: k.name,\n publicKey: k.publicKey,\n })),\n }\n } catch (error) {\n return {\n error: 'fetch_error',\n error_description: (error as Error).message,\n }\n }\n },\n\n createKey: async (\n params: CreateKeyParams\n ): Promise<CreateKeyResult> => {\n try {\n const key = await this.client.createKey({\n name: params.name,\n })\n return {\n id: key.id,\n name: key.name,\n publicKey: key.publicKey,\n }\n } catch (error) {\n return {\n error: 'create_key_error',\n error_description: (error as Error).message,\n }\n }\n },\n\n getConfiguration: async (): Promise<GetConfigurationResult> => {\n const config = this.client.getConfiguration()\n return {\n ...config,\n ApiKey: config.ApiKey ? '***HIDDEN***' : undefined,\n MasterKey: config.MasterKey ? '***HIDDEN***' : undefined,\n }\n },\n\n setConfiguration: async (\n params: SetConfigurationParams\n ): Promise<SetConfigurationResult> => {\n this.client.setConfiguration({\n BaseURL: params['BaseURL'] as string,\n ApiKey: params['ApiKey'] as string,\n MasterKey: params['MasterKey'] as string,\n TestNetwork: params['TestNetwork'] as boolean,\n })\n return params\n },\n\n subscribeTransactions: async (\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _params: SubscribeTransactionsParams\n ): Promise<SubscribeTransactionsResult> =>\n Promise.resolve({} as SubscribeTransactionsResult),\n })\n}\n"]}
1
+ {"version":3,"sources":["../src/signing-api-sdk.ts","../src/index.ts"],"names":["PartyMode","SigningProvider","buildController"],"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 type {\n Key,\n Transaction,\n SignTransactionParams,\n GetTransactionParams,\n GetTransactionsParams,\n CreateKeyParams,\n Tx,\n TxHash,\n KeyIdentifier,\n InternalTxId,\n PublicKey,\n} from '@canton-network/core-signing-lib'\n\n/**\n * A TypeScript SDK client for the Wallet Signing API.\n */\nexport class SigningAPIClient {\n private baseUrl: string\n private apiKey: string | undefined\n private masterKey: string\n private testNetwork: boolean\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl\n this.masterKey = 'Default'\n this.testNetwork = true\n }\n\n private async post<I extends Record<string, unknown>, O>(\n endpoint: string,\n params: I\n ): Promise<O> {\n const url = `${this.baseUrl}${endpoint}`\n\n // Merge context params (masterKey and testNetwork) into the request body\n const bodyToSend = {\n ...params,\n masterKey: this.masterKey,\n testNetwork: this.testNetwork,\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n }\n\n if (this.apiKey) {\n headers['Authorization'] = `Bearer ${this.apiKey}`\n }\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(bodyToSend),\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(\n `API call to ${endpoint} failed (${response.status}): ${errorText}`\n )\n }\n\n // Handle 204 No Content for methods that return empty objects or null/void\n if (\n response.status === 204 ||\n response.headers.get('content-length') === '0'\n ) {\n // SetConfiguration/GetConfiguration return map[string]any which might be empty\n return {} as O\n }\n\n return response.json() as Promise<O>\n }\n\n /**\n * Uses the Wallet Provider to sign a transaction.\n * @param params - The transaction signing parameters.\n */\n public async signTransaction(\n params: SignTransactionParams\n ): Promise<Transaction> {\n return this.post<BlockDaemonSignTransactionParams, Transaction>(\n '/signTransaction',\n {\n publicKey: params.keyIdentifier.publicKey!,\n ...params,\n }\n )\n }\n\n /**\n * Get the status of a single transaction by its ID.\n * @param params - The transaction ID parameters.\n */\n public async getTransaction(\n params: GetTransactionParams\n ): Promise<Transaction> {\n return this.post<GetTransactionParams, Transaction>(\n '/getTransaction',\n params\n )\n }\n\n /**\n * Get the status of multiple transactions.\n * @param params - Filters for transactions.\n */\n public async getTransactions(\n params: GetTransactionsParams\n ): Promise<Transaction[]> {\n // Note: The Go handler returns []Transaction, the HTTP handler wraps it in JSON array.\n return this.post<GetTransactionsParams, Transaction[]>(\n '/getTransactions',\n params\n )\n }\n\n /**\n * Get a list of public keys available for signing.\n */\n public async getKeys(): Promise<Key[]> {\n // Go's addDummyArg is used for no-arg handlers, so we send an empty body.\n return this.post<Record<string, never>, Key[]>('/getKeys', {})\n }\n\n /**\n * Create a new key at the Wallet Provider.\n * @param params - The key creation parameters.\n */\n public async createKey(params: CreateKeyParams): Promise<Key> {\n return this.post<CreateKeyParams, Key>('/createKey', params)\n }\n\n /**\n * Get configuration parameters (client-side only).\n * Returns the current BaseURL, ApiKey, MasterKey, and TestNetwork settings.\n */\n public getConfiguration(): Record<string, unknown> {\n return {\n BaseURL: this.baseUrl,\n ApiKey: this.apiKey,\n MasterKey: this.masterKey,\n TestNetwork: this.testNetwork,\n }\n }\n\n /**\n * Set configuration parameters (client-side only).\n * Updates only the provided configuration fields.\n * @param params - Configuration parameters to set. All fields are optional.\n */\n public setConfiguration(params: {\n BaseURL?: string\n ApiKey?: string\n MasterKey?: string\n TestNetwork?: boolean\n }): Record<string, unknown> {\n if (params.BaseURL !== undefined) {\n this.baseUrl = params.BaseURL.endsWith('/')\n ? params.BaseURL.slice(0, -1)\n : params.BaseURL\n }\n if (params.ApiKey !== undefined) {\n this.apiKey = params.ApiKey\n }\n if (params.MasterKey !== undefined) {\n this.masterKey = params.MasterKey\n }\n if (params.TestNetwork !== undefined) {\n this.testNetwork = params.TestNetwork\n }\n return this.getConfiguration()\n }\n}\n\n//todo: remove once blockdaemon supports keyIdentifier instead of publicKey\ninterface BlockDaemonSignTransactionParams {\n tx: Tx\n txHash: TxHash\n publicKey: PublicKey\n keyIdentifier: KeyIdentifier\n internalTxId?: InternalTxId\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n [k: string]: any\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n buildController,\n type CreateKeyParams,\n type CreateKeyResult,\n type GetConfigurationResult,\n type GetKeysResult,\n type GetTransactionParams,\n type GetTransactionResult,\n type GetTransactionsParams,\n type GetTransactionsResult,\n PartyMode,\n type SetConfigurationParams,\n type SetConfigurationResult,\n type SigningDriverInterface,\n SigningProvider,\n type SignTransactionParams,\n type SignTransactionResult,\n type SubscribeTransactionsParams,\n type SubscribeTransactionsResult,\n} from '@canton-network/core-signing-lib'\nimport { AuthContext } from '@canton-network/core-wallet-auth'\nimport { SigningAPIClient } from './signing-api-sdk.js'\n\nexport { SigningAPIClient } from './signing-api-sdk.js'\n\nexport interface BlockdaemonConfig {\n baseUrl: string\n apiKey: string\n}\n\nexport default class BlockdaemonSigningDriver implements SigningDriverInterface {\n private client: SigningAPIClient\n\n constructor(config: BlockdaemonConfig) {\n this.client = new SigningAPIClient(config.baseUrl)\n this.client.setConfiguration({ ApiKey: config.apiKey })\n }\n\n public partyMode = PartyMode.EXTERNAL\n public signingProvider = SigningProvider.BLOCKDAEMON\n\n public controller = (userId: AuthContext['userId'] | undefined) =>\n buildController({\n signTransaction: async (\n params: SignTransactionParams\n ): Promise<SignTransactionResult> => {\n try {\n if (!params.keyIdentifier.publicKey) {\n return {\n error: 'key_not_found',\n error_description:\n 'The provided key identifier must include a publicKey.',\n }\n }\n const tx = await this.client.signTransaction({\n tx: params.tx,\n txHash: params.txHash,\n keyIdentifier: params.keyIdentifier,\n ...(params.internalTxId !== undefined && {\n internalTxId: params.internalTxId,\n }),\n userIdentifier: userId,\n })\n return {\n txId: tx.txId,\n status: tx.status,\n ...(tx.signature !== undefined && {\n signature: tx.signature,\n }),\n ...(tx.publicKey !== undefined && {\n publicKey: tx.publicKey,\n }),\n }\n } catch (error) {\n return {\n error: 'signing_error',\n error_description: (error as Error).message,\n }\n }\n },\n\n getTransaction: async (\n params: GetTransactionParams\n ): Promise<GetTransactionResult> => {\n try {\n const tx = await this.client.getTransaction({\n txId: params.txId,\n userIdentifier: userId,\n })\n return {\n txId: tx.txId,\n status: tx.status,\n ...(tx.signature !== undefined && {\n signature: tx.signature,\n }),\n ...(tx.publicKey !== undefined && {\n publicKey: tx.publicKey,\n }),\n }\n } catch (error) {\n return {\n error: 'transaction_not_found',\n error_description: (error as Error).message,\n }\n }\n },\n\n getTransactions: async (\n params: GetTransactionsParams\n ): Promise<GetTransactionsResult> => {\n if (params.publicKeys || params.txIds) {\n try {\n const transactions = await this.client.getTransactions({\n txIds: params.txIds!,\n publicKeys: params.publicKeys!,\n userIdentifier: userId,\n })\n return {\n transactions: transactions.map((tx) => ({\n txId: tx.txId,\n status: tx.status,\n signature: tx.signature!,\n publicKey: tx.publicKey!,\n })),\n }\n } catch (error) {\n return {\n error: 'fetch_error',\n error_description: (error as Error).message,\n }\n }\n } else {\n return {\n error: 'bad_arguments',\n error_description:\n 'either public key or txIds must be supplied',\n }\n }\n },\n\n getKeys: async (): Promise<GetKeysResult> => {\n try {\n const keys = await this.client.getKeys()\n return {\n keys: keys.map((k) => ({\n id: k.id,\n name: k.name,\n publicKey: k.publicKey,\n userIdentifier: userId,\n })),\n }\n } catch (error) {\n return {\n error: 'fetch_error',\n error_description: (error as Error).message,\n }\n }\n },\n\n createKey: async (\n params: CreateKeyParams\n ): Promise<CreateKeyResult> => {\n try {\n const key = await this.client.createKey({\n name: params.name,\n userIdentifier: userId,\n })\n return {\n id: key.id,\n name: key.name,\n publicKey: key.publicKey,\n }\n } catch (error) {\n return {\n error: 'create_key_error',\n error_description: (error as Error).message,\n }\n }\n },\n\n getConfiguration: async (): Promise<GetConfigurationResult> => {\n const config = this.client.getConfiguration()\n return {\n ...config,\n ApiKey: config.ApiKey ? '***HIDDEN***' : undefined,\n MasterKey: config.MasterKey ? '***HIDDEN***' : undefined,\n }\n },\n\n setConfiguration: async (\n params: SetConfigurationParams\n ): Promise<SetConfigurationResult> => {\n this.client.setConfiguration({\n BaseURL: params['BaseURL'] as string,\n ApiKey: params['ApiKey'] as string,\n MasterKey: params['MasterKey'] as string,\n TestNetwork: params['TestNetwork'] as boolean,\n })\n return params\n },\n\n subscribeTransactions: async (\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _params: SubscribeTransactionsParams\n ): Promise<SubscribeTransactionsResult> =>\n Promise.resolve({} as SubscribeTransactionsResult),\n })\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAUH,SAAS,EAGT,KAAK,sBAAsB,EAC3B,eAAe,EAKlB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAG9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,CAAC,OAAO,OAAO,wBAAyB,YAAW,sBAAsB;IAC3E,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,iBAAiB;IAK9B,SAAS,YAAqB;IAC9B,eAAe,kBAA8B;IAE7C,UAAU,GAAI,QAAQ,WAAW,CAAC,QAAQ,CAAC,GAAG,SAAS;;;;;;;;;MAiKxD;CACT"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAUH,SAAS,EAGT,KAAK,sBAAsB,EAC3B,eAAe,EAKlB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAG9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAEvD,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,CAAC,OAAO,OAAO,wBAAyB,YAAW,sBAAsB;IAC3E,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,iBAAiB;IAK9B,SAAS,YAAqB;IAC9B,eAAe,kBAA8B;IAE7C,UAAU,GAAI,QAAQ,WAAW,CAAC,QAAQ,CAAC,GAAG,SAAS;;;;;;;;;MAqKxD;CACT"}
package/dist/index.js CHANGED
@@ -168,7 +168,8 @@ var BlockdaemonSigningDriver = class {
168
168
  getTransaction: async (params) => {
169
169
  try {
170
170
  const tx = await this.client.getTransaction({
171
- txId: params.txId
171
+ txId: params.txId,
172
+ userIdentifier: userId
172
173
  });
173
174
  return {
174
175
  txId: tx.txId,
@@ -192,7 +193,8 @@ var BlockdaemonSigningDriver = class {
192
193
  try {
193
194
  const transactions = await this.client.getTransactions({
194
195
  txIds: params.txIds,
195
- publicKeys: params.publicKeys
196
+ publicKeys: params.publicKeys,
197
+ userIdentifier: userId
196
198
  });
197
199
  return {
198
200
  transactions: transactions.map((tx) => ({
@@ -222,7 +224,8 @@ var BlockdaemonSigningDriver = class {
222
224
  keys: keys.map((k) => ({
223
225
  id: k.id,
224
226
  name: k.name,
225
- publicKey: k.publicKey
227
+ publicKey: k.publicKey,
228
+ userIdentifier: userId
226
229
  }))
227
230
  };
228
231
  } catch (error) {
@@ -235,7 +238,8 @@ var BlockdaemonSigningDriver = class {
235
238
  createKey: async (params) => {
236
239
  try {
237
240
  const key = await this.client.createKey({
238
- name: params.name
241
+ name: params.name,
242
+ userIdentifier: userId
239
243
  });
240
244
  return {
241
245
  id: key.id,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/signing-api-sdk.ts","../src/index.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 type {\n Key,\n Transaction,\n SignTransactionParams,\n GetTransactionParams,\n GetTransactionsParams,\n CreateKeyParams,\n Tx,\n TxHash,\n KeyIdentifier,\n InternalTxId,\n PublicKey,\n} from '@canton-network/core-signing-lib'\n\n/**\n * A TypeScript SDK client for the Wallet Signing API.\n */\nexport class SigningAPIClient {\n private baseUrl: string\n private apiKey: string | undefined\n private masterKey: string\n private testNetwork: boolean\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl\n this.masterKey = 'Default'\n this.testNetwork = true\n }\n\n private async post<I extends Record<string, unknown>, O>(\n endpoint: string,\n params: I\n ): Promise<O> {\n const url = `${this.baseUrl}${endpoint}`\n\n // Merge context params (masterKey and testNetwork) into the request body\n const bodyToSend = {\n ...params,\n masterKey: this.masterKey,\n testNetwork: this.testNetwork,\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n }\n\n if (this.apiKey) {\n headers['Authorization'] = `Bearer ${this.apiKey}`\n }\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(bodyToSend),\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(\n `API call to ${endpoint} failed (${response.status}): ${errorText}`\n )\n }\n\n // Handle 204 No Content for methods that return empty objects or null/void\n if (\n response.status === 204 ||\n response.headers.get('content-length') === '0'\n ) {\n // SetConfiguration/GetConfiguration return map[string]any which might be empty\n return {} as O\n }\n\n return response.json() as Promise<O>\n }\n\n /**\n * Uses the Wallet Provider to sign a transaction.\n * @param params - The transaction signing parameters.\n */\n public async signTransaction(\n params: SignTransactionParams\n ): Promise<Transaction> {\n return this.post<BlockDaemonSignTransactionParams, Transaction>(\n '/signTransaction',\n {\n publicKey: params.keyIdentifier.publicKey!,\n ...params,\n }\n )\n }\n\n /**\n * Get the status of a single transaction by its ID.\n * @param params - The transaction ID parameters.\n */\n public async getTransaction(\n params: GetTransactionParams\n ): Promise<Transaction> {\n return this.post<GetTransactionParams, Transaction>(\n '/getTransaction',\n params\n )\n }\n\n /**\n * Get the status of multiple transactions.\n * @param params - Filters for transactions.\n */\n public async getTransactions(\n params: GetTransactionsParams\n ): Promise<Transaction[]> {\n // Note: The Go handler returns []Transaction, the HTTP handler wraps it in JSON array.\n return this.post<GetTransactionsParams, Transaction[]>(\n '/getTransactions',\n params\n )\n }\n\n /**\n * Get a list of public keys available for signing.\n */\n public async getKeys(): Promise<Key[]> {\n // Go's addDummyArg is used for no-arg handlers, so we send an empty body.\n return this.post<Record<string, never>, Key[]>('/getKeys', {})\n }\n\n /**\n * Create a new key at the Wallet Provider.\n * @param params - The key creation parameters.\n */\n public async createKey(params: CreateKeyParams): Promise<Key> {\n return this.post<CreateKeyParams, Key>('/createKey', params)\n }\n\n /**\n * Get configuration parameters (client-side only).\n * Returns the current BaseURL, ApiKey, MasterKey, and TestNetwork settings.\n */\n public getConfiguration(): Record<string, unknown> {\n return {\n BaseURL: this.baseUrl,\n ApiKey: this.apiKey,\n MasterKey: this.masterKey,\n TestNetwork: this.testNetwork,\n }\n }\n\n /**\n * Set configuration parameters (client-side only).\n * Updates only the provided configuration fields.\n * @param params - Configuration parameters to set. All fields are optional.\n */\n public setConfiguration(params: {\n BaseURL?: string\n ApiKey?: string\n MasterKey?: string\n TestNetwork?: boolean\n }): Record<string, unknown> {\n if (params.BaseURL !== undefined) {\n this.baseUrl = params.BaseURL.endsWith('/')\n ? params.BaseURL.slice(0, -1)\n : params.BaseURL\n }\n if (params.ApiKey !== undefined) {\n this.apiKey = params.ApiKey\n }\n if (params.MasterKey !== undefined) {\n this.masterKey = params.MasterKey\n }\n if (params.TestNetwork !== undefined) {\n this.testNetwork = params.TestNetwork\n }\n return this.getConfiguration()\n }\n}\n\n//todo: remove once blockdaemon supports keyIdentifier instead of publicKey\ninterface BlockDaemonSignTransactionParams {\n tx: Tx\n txHash: TxHash\n publicKey: PublicKey\n keyIdentifier: KeyIdentifier\n internalTxId?: InternalTxId\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n [k: string]: any\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n buildController,\n type CreateKeyParams,\n type CreateKeyResult,\n type GetConfigurationResult,\n type GetKeysResult,\n type GetTransactionParams,\n type GetTransactionResult,\n type GetTransactionsParams,\n type GetTransactionsResult,\n PartyMode,\n type SetConfigurationParams,\n type SetConfigurationResult,\n type SigningDriverInterface,\n SigningProvider,\n type SignTransactionParams,\n type SignTransactionResult,\n type SubscribeTransactionsParams,\n type SubscribeTransactionsResult,\n} from '@canton-network/core-signing-lib'\nimport { AuthContext } from '@canton-network/core-wallet-auth'\nimport { SigningAPIClient } from './signing-api-sdk.js'\n\nexport { SigningAPIClient } from './signing-api-sdk.js'\n\nexport interface BlockdaemonConfig {\n baseUrl: string\n apiKey: string\n}\n\nexport default class BlockdaemonSigningDriver implements SigningDriverInterface {\n private client: SigningAPIClient\n\n constructor(config: BlockdaemonConfig) {\n this.client = new SigningAPIClient(config.baseUrl)\n this.client.setConfiguration({ ApiKey: config.apiKey })\n }\n\n public partyMode = PartyMode.EXTERNAL\n public signingProvider = SigningProvider.BLOCKDAEMON\n\n public controller = (userId: AuthContext['userId'] | undefined) =>\n buildController({\n signTransaction: async (\n params: SignTransactionParams\n ): Promise<SignTransactionResult> => {\n try {\n if (!params.keyIdentifier.publicKey) {\n return {\n error: 'key_not_found',\n error_description:\n 'The provided key identifier must include a publicKey.',\n }\n }\n const tx = await this.client.signTransaction({\n tx: params.tx,\n txHash: params.txHash,\n keyIdentifier: params.keyIdentifier,\n ...(params.internalTxId !== undefined && {\n internalTxId: params.internalTxId,\n }),\n userIdentifier: userId,\n })\n return {\n txId: tx.txId,\n status: tx.status,\n ...(tx.signature !== undefined && {\n signature: tx.signature,\n }),\n ...(tx.publicKey !== undefined && {\n publicKey: tx.publicKey,\n }),\n }\n } catch (error) {\n return {\n error: 'signing_error',\n error_description: (error as Error).message,\n }\n }\n },\n\n getTransaction: async (\n params: GetTransactionParams\n ): Promise<GetTransactionResult> => {\n try {\n const tx = await this.client.getTransaction({\n txId: params.txId,\n })\n return {\n txId: tx.txId,\n status: tx.status,\n ...(tx.signature !== undefined && {\n signature: tx.signature,\n }),\n ...(tx.publicKey !== undefined && {\n publicKey: tx.publicKey,\n }),\n }\n } catch (error) {\n return {\n error: 'transaction_not_found',\n error_description: (error as Error).message,\n }\n }\n },\n\n getTransactions: async (\n params: GetTransactionsParams\n ): Promise<GetTransactionsResult> => {\n if (params.publicKeys || params.txIds) {\n try {\n const transactions = await this.client.getTransactions({\n txIds: params.txIds!,\n publicKeys: params.publicKeys!,\n })\n return {\n transactions: transactions.map((tx) => ({\n txId: tx.txId,\n status: tx.status,\n signature: tx.signature!,\n publicKey: tx.publicKey!,\n })),\n }\n } catch (error) {\n return {\n error: 'fetch_error',\n error_description: (error as Error).message,\n }\n }\n } else {\n return {\n error: 'bad_arguments',\n error_description:\n 'either public key or txIds must be supplied',\n }\n }\n },\n\n getKeys: async (): Promise<GetKeysResult> => {\n try {\n const keys = await this.client.getKeys()\n return {\n keys: keys.map((k) => ({\n id: k.id,\n name: k.name,\n publicKey: k.publicKey,\n })),\n }\n } catch (error) {\n return {\n error: 'fetch_error',\n error_description: (error as Error).message,\n }\n }\n },\n\n createKey: async (\n params: CreateKeyParams\n ): Promise<CreateKeyResult> => {\n try {\n const key = await this.client.createKey({\n name: params.name,\n })\n return {\n id: key.id,\n name: key.name,\n publicKey: key.publicKey,\n }\n } catch (error) {\n return {\n error: 'create_key_error',\n error_description: (error as Error).message,\n }\n }\n },\n\n getConfiguration: async (): Promise<GetConfigurationResult> => {\n const config = this.client.getConfiguration()\n return {\n ...config,\n ApiKey: config.ApiKey ? '***HIDDEN***' : undefined,\n MasterKey: config.MasterKey ? '***HIDDEN***' : undefined,\n }\n },\n\n setConfiguration: async (\n params: SetConfigurationParams\n ): Promise<SetConfigurationResult> => {\n this.client.setConfiguration({\n BaseURL: params['BaseURL'] as string,\n ApiKey: params['ApiKey'] as string,\n MasterKey: params['MasterKey'] as string,\n TestNetwork: params['TestNetwork'] as boolean,\n })\n return params\n },\n\n subscribeTransactions: async (\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _params: SubscribeTransactionsParams\n ): Promise<SubscribeTransactionsResult> =>\n Promise.resolve({} as SubscribeTransactionsResult),\n })\n}\n"]}
1
+ {"version":3,"sources":["../src/signing-api-sdk.ts","../src/index.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 type {\n Key,\n Transaction,\n SignTransactionParams,\n GetTransactionParams,\n GetTransactionsParams,\n CreateKeyParams,\n Tx,\n TxHash,\n KeyIdentifier,\n InternalTxId,\n PublicKey,\n} from '@canton-network/core-signing-lib'\n\n/**\n * A TypeScript SDK client for the Wallet Signing API.\n */\nexport class SigningAPIClient {\n private baseUrl: string\n private apiKey: string | undefined\n private masterKey: string\n private testNetwork: boolean\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl\n this.masterKey = 'Default'\n this.testNetwork = true\n }\n\n private async post<I extends Record<string, unknown>, O>(\n endpoint: string,\n params: I\n ): Promise<O> {\n const url = `${this.baseUrl}${endpoint}`\n\n // Merge context params (masterKey and testNetwork) into the request body\n const bodyToSend = {\n ...params,\n masterKey: this.masterKey,\n testNetwork: this.testNetwork,\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n }\n\n if (this.apiKey) {\n headers['Authorization'] = `Bearer ${this.apiKey}`\n }\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(bodyToSend),\n })\n\n if (!response.ok) {\n const errorText = await response.text()\n throw new Error(\n `API call to ${endpoint} failed (${response.status}): ${errorText}`\n )\n }\n\n // Handle 204 No Content for methods that return empty objects or null/void\n if (\n response.status === 204 ||\n response.headers.get('content-length') === '0'\n ) {\n // SetConfiguration/GetConfiguration return map[string]any which might be empty\n return {} as O\n }\n\n return response.json() as Promise<O>\n }\n\n /**\n * Uses the Wallet Provider to sign a transaction.\n * @param params - The transaction signing parameters.\n */\n public async signTransaction(\n params: SignTransactionParams\n ): Promise<Transaction> {\n return this.post<BlockDaemonSignTransactionParams, Transaction>(\n '/signTransaction',\n {\n publicKey: params.keyIdentifier.publicKey!,\n ...params,\n }\n )\n }\n\n /**\n * Get the status of a single transaction by its ID.\n * @param params - The transaction ID parameters.\n */\n public async getTransaction(\n params: GetTransactionParams\n ): Promise<Transaction> {\n return this.post<GetTransactionParams, Transaction>(\n '/getTransaction',\n params\n )\n }\n\n /**\n * Get the status of multiple transactions.\n * @param params - Filters for transactions.\n */\n public async getTransactions(\n params: GetTransactionsParams\n ): Promise<Transaction[]> {\n // Note: The Go handler returns []Transaction, the HTTP handler wraps it in JSON array.\n return this.post<GetTransactionsParams, Transaction[]>(\n '/getTransactions',\n params\n )\n }\n\n /**\n * Get a list of public keys available for signing.\n */\n public async getKeys(): Promise<Key[]> {\n // Go's addDummyArg is used for no-arg handlers, so we send an empty body.\n return this.post<Record<string, never>, Key[]>('/getKeys', {})\n }\n\n /**\n * Create a new key at the Wallet Provider.\n * @param params - The key creation parameters.\n */\n public async createKey(params: CreateKeyParams): Promise<Key> {\n return this.post<CreateKeyParams, Key>('/createKey', params)\n }\n\n /**\n * Get configuration parameters (client-side only).\n * Returns the current BaseURL, ApiKey, MasterKey, and TestNetwork settings.\n */\n public getConfiguration(): Record<string, unknown> {\n return {\n BaseURL: this.baseUrl,\n ApiKey: this.apiKey,\n MasterKey: this.masterKey,\n TestNetwork: this.testNetwork,\n }\n }\n\n /**\n * Set configuration parameters (client-side only).\n * Updates only the provided configuration fields.\n * @param params - Configuration parameters to set. All fields are optional.\n */\n public setConfiguration(params: {\n BaseURL?: string\n ApiKey?: string\n MasterKey?: string\n TestNetwork?: boolean\n }): Record<string, unknown> {\n if (params.BaseURL !== undefined) {\n this.baseUrl = params.BaseURL.endsWith('/')\n ? params.BaseURL.slice(0, -1)\n : params.BaseURL\n }\n if (params.ApiKey !== undefined) {\n this.apiKey = params.ApiKey\n }\n if (params.MasterKey !== undefined) {\n this.masterKey = params.MasterKey\n }\n if (params.TestNetwork !== undefined) {\n this.testNetwork = params.TestNetwork\n }\n return this.getConfiguration()\n }\n}\n\n//todo: remove once blockdaemon supports keyIdentifier instead of publicKey\ninterface BlockDaemonSignTransactionParams {\n tx: Tx\n txHash: TxHash\n publicKey: PublicKey\n keyIdentifier: KeyIdentifier\n internalTxId?: InternalTxId\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n [k: string]: any\n}\n","// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n buildController,\n type CreateKeyParams,\n type CreateKeyResult,\n type GetConfigurationResult,\n type GetKeysResult,\n type GetTransactionParams,\n type GetTransactionResult,\n type GetTransactionsParams,\n type GetTransactionsResult,\n PartyMode,\n type SetConfigurationParams,\n type SetConfigurationResult,\n type SigningDriverInterface,\n SigningProvider,\n type SignTransactionParams,\n type SignTransactionResult,\n type SubscribeTransactionsParams,\n type SubscribeTransactionsResult,\n} from '@canton-network/core-signing-lib'\nimport { AuthContext } from '@canton-network/core-wallet-auth'\nimport { SigningAPIClient } from './signing-api-sdk.js'\n\nexport { SigningAPIClient } from './signing-api-sdk.js'\n\nexport interface BlockdaemonConfig {\n baseUrl: string\n apiKey: string\n}\n\nexport default class BlockdaemonSigningDriver implements SigningDriverInterface {\n private client: SigningAPIClient\n\n constructor(config: BlockdaemonConfig) {\n this.client = new SigningAPIClient(config.baseUrl)\n this.client.setConfiguration({ ApiKey: config.apiKey })\n }\n\n public partyMode = PartyMode.EXTERNAL\n public signingProvider = SigningProvider.BLOCKDAEMON\n\n public controller = (userId: AuthContext['userId'] | undefined) =>\n buildController({\n signTransaction: async (\n params: SignTransactionParams\n ): Promise<SignTransactionResult> => {\n try {\n if (!params.keyIdentifier.publicKey) {\n return {\n error: 'key_not_found',\n error_description:\n 'The provided key identifier must include a publicKey.',\n }\n }\n const tx = await this.client.signTransaction({\n tx: params.tx,\n txHash: params.txHash,\n keyIdentifier: params.keyIdentifier,\n ...(params.internalTxId !== undefined && {\n internalTxId: params.internalTxId,\n }),\n userIdentifier: userId,\n })\n return {\n txId: tx.txId,\n status: tx.status,\n ...(tx.signature !== undefined && {\n signature: tx.signature,\n }),\n ...(tx.publicKey !== undefined && {\n publicKey: tx.publicKey,\n }),\n }\n } catch (error) {\n return {\n error: 'signing_error',\n error_description: (error as Error).message,\n }\n }\n },\n\n getTransaction: async (\n params: GetTransactionParams\n ): Promise<GetTransactionResult> => {\n try {\n const tx = await this.client.getTransaction({\n txId: params.txId,\n userIdentifier: userId,\n })\n return {\n txId: tx.txId,\n status: tx.status,\n ...(tx.signature !== undefined && {\n signature: tx.signature,\n }),\n ...(tx.publicKey !== undefined && {\n publicKey: tx.publicKey,\n }),\n }\n } catch (error) {\n return {\n error: 'transaction_not_found',\n error_description: (error as Error).message,\n }\n }\n },\n\n getTransactions: async (\n params: GetTransactionsParams\n ): Promise<GetTransactionsResult> => {\n if (params.publicKeys || params.txIds) {\n try {\n const transactions = await this.client.getTransactions({\n txIds: params.txIds!,\n publicKeys: params.publicKeys!,\n userIdentifier: userId,\n })\n return {\n transactions: transactions.map((tx) => ({\n txId: tx.txId,\n status: tx.status,\n signature: tx.signature!,\n publicKey: tx.publicKey!,\n })),\n }\n } catch (error) {\n return {\n error: 'fetch_error',\n error_description: (error as Error).message,\n }\n }\n } else {\n return {\n error: 'bad_arguments',\n error_description:\n 'either public key or txIds must be supplied',\n }\n }\n },\n\n getKeys: async (): Promise<GetKeysResult> => {\n try {\n const keys = await this.client.getKeys()\n return {\n keys: keys.map((k) => ({\n id: k.id,\n name: k.name,\n publicKey: k.publicKey,\n userIdentifier: userId,\n })),\n }\n } catch (error) {\n return {\n error: 'fetch_error',\n error_description: (error as Error).message,\n }\n }\n },\n\n createKey: async (\n params: CreateKeyParams\n ): Promise<CreateKeyResult> => {\n try {\n const key = await this.client.createKey({\n name: params.name,\n userIdentifier: userId,\n })\n return {\n id: key.id,\n name: key.name,\n publicKey: key.publicKey,\n }\n } catch (error) {\n return {\n error: 'create_key_error',\n error_description: (error as Error).message,\n }\n }\n },\n\n getConfiguration: async (): Promise<GetConfigurationResult> => {\n const config = this.client.getConfiguration()\n return {\n ...config,\n ApiKey: config.ApiKey ? '***HIDDEN***' : undefined,\n MasterKey: config.MasterKey ? '***HIDDEN***' : undefined,\n }\n },\n\n setConfiguration: async (\n params: SetConfigurationParams\n ): Promise<SetConfigurationResult> => {\n this.client.setConfiguration({\n BaseURL: params['BaseURL'] as string,\n ApiKey: params['ApiKey'] as string,\n MasterKey: params['MasterKey'] as string,\n TestNetwork: params['TestNetwork'] as boolean,\n })\n return params\n },\n\n subscribeTransactions: async (\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _params: SubscribeTransactionsParams\n ): Promise<SubscribeTransactionsResult> =>\n Promise.resolve({} as SubscribeTransactionsResult),\n })\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canton-network/core-signing-blockdaemon",
3
- "version": "0.17.3",
3
+ "version": "0.18.1",
4
4
  "type": "module",
5
5
  "description": "Wallet Gateway signing driver for Blockdaemon",
6
6
  "license": "Apache-2.0",
@@ -22,8 +22,8 @@
22
22
  "test": "jest"
23
23
  },
24
24
  "dependencies": {
25
- "@canton-network/core-signing-lib": "^0.20.3",
26
- "@canton-network/core-wallet-auth": "^0.17.3"
25
+ "@canton-network/core-signing-lib": "^0.20.4",
26
+ "@canton-network/core-wallet-auth": "^0.17.4"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@jest/globals": "^30.2.0",