@canton-network/core-provider-ledger 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"LedgerProvider.d.ts","sourceRoot":"","sources":["../src/LedgerProvider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAA;AAOtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAEtE,qBAAa,cAAe,SAAQ,gBAAgB,CAAC,WAAW,CAAC;IAC7D,OAAO,CAAC,MAAM,CAAc;gBAEhB,EACR,OAAO,EACP,mBAAmB,GACtB,EAAE;QACC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAA;QACrB,mBAAmB,EAAE,mBAAmB,CAAA;KAC3C;IAUD;;;;;;;;;;;;;;;;;;;OAmBG;IACU,OAAO,CAAC,CAAC,SAAS,WAAW,EACtC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,GAClC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC;IAuCpC,OAAO,CAAC,eAAe;CAgB1B"}
1
+ {"version":3,"file":"LedgerProvider.d.ts","sourceRoot":"","sources":["../src/LedgerProvider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAA;AAOtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAEtE,qBAAa,cAAe,SAAQ,gBAAgB,CAAC,WAAW,CAAC;IAC7D,OAAO,CAAC,MAAM,CAAc;gBAEhB,EACR,OAAO,EACP,mBAAmB,GACtB,EAAE;QACC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAA;QACrB,mBAAmB,EAAE,mBAAmB,CAAA;KAC3C;IAUD;;;;;;;;;;;;;;;;;;;OAmBG;IACU,OAAO,CAAC,CAAC,SAAS,WAAW,EACtC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,GAClC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC;IAmDpC,OAAO,CAAC,eAAe;CAgB1B"}
package/dist/index.cjs CHANGED
@@ -47,7 +47,6 @@ var LedgerProvider = class extends coreSpliceProvider.AbstractProvider {
47
47
  * @returns
48
48
  */
49
49
  async request(args) {
50
- console.log("Received request:", args);
51
50
  if (args.method === "ledgerApi" && "params" in args) {
52
51
  switch (args.params.requestMethod) {
53
52
  case "get": {
@@ -62,13 +61,19 @@ var LedgerProvider = class extends coreSpliceProvider.AbstractProvider {
62
61
  case "post": {
63
62
  const params = this.getLedgerParams(args.params);
64
63
  const body = "body" in args.params ? args.params.body : {};
64
+ const headers = "headers" in args.params ? args.params.headers : { "Content-Type": "application/json" };
65
+ const additionalOptions = headers["Content-Type"] === "application/octet-stream" ? {
66
+ bodySerializer: (b) => b,
67
+ headers
68
+ } : { headers };
65
69
  return await this.client.postWithRetry(
66
70
  args.params.resource,
67
71
  // TODO: casting is necessary b/c of v3.3/v3.4 differences
68
72
  body,
69
73
  // TODO: need to fix client typing
70
74
  void 0,
71
- params
75
+ params,
76
+ additionalOptions
72
77
  );
73
78
  }
74
79
  // TODO: generalize LedgerClient to support any HTTP method
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/LedgerProvider.ts"],"names":["AbstractProvider","LedgerClient","pino"],"mappings":";;;;;;;;;;;;;;AAcO,IAAM,cAAA,GAAN,cAA6BA,mCAAA,CAA8B;AAAA,EAG9D,WAAA,CAAY;AAAA,IACR,OAAA;AAAA,IACA;AAAA,GACJ,EAGG;AACC,IAAA,KAAA,EAAM;AATV,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AAUJ,IAAA,IAAA,CAAK,MAAA,GAAS,IAAIC,6BAAA,CAAa;AAAA,MAC3B,SAAS,OAAO,OAAA,KAAY,WAAW,IAAI,GAAA,CAAI,OAAO,CAAA,GAAI,OAAA;AAAA,MAC1D,mBAAA;AAAA;AAAA,MAEA,MAAA,EAAQC,qBAAA,CAAK,EAAE,IAAA,EAAM,kBAAkB;AAAA,KAC1C,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,MAAa,QACT,IAAA,EACiC;AACjC,IAAA,OAAA,CAAQ,GAAA,CAAI,qBAAqB,IAAI,CAAA;AAErC,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,WAAA,IAAe,QAAA,IAAY,IAAA,EAAM;AACjD,MAAA,QAAQ,IAAA,CAAK,OAAO,aAAA;AAAe,QAC/B,KAAK,KAAA,EAAO;AACR,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,MAAM,CAAA;AAE/C,UAAA,OAAO,MAAM,KAAK,MAAA,CAAO,YAAA;AAAA,YACrB,KAAK,MAAA,CAAO,QAAA;AAAA;AAAA,YACZ,MAAA;AAAA,YACA;AAAA,WACJ;AAAA,QACJ;AAAA,QACA,KAAK,MAAA,EAAQ;AACT,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,MAAM,CAAA;AAC/C,UAAA,MAAM,OAAO,MAAA,IAAU,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA,CAAO,OAAO,EAAC;AAEzD,UAAA,OAAO,MAAM,KAAK,MAAA,CAAO,aAAA;AAAA,YACrB,KAAK,MAAA,CAAO,QAAA;AAAA;AAAA,YACZ,IAAA;AAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA,WACJ;AAAA,QACJ;AAAA;AAAA,QAEA,KAAK,QAAA;AAAA,QACL,KAAK,OAAA;AAAA,QACL,SAAS;AACL,UAAA,MAAM,IAAI,KAAA;AAAA,YACN,CAAA,4BAAA,EAA+B,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA;AAAA,WAC5D;AAAA,QACJ;AAAA;AACJ,IACJ,CAAA,MAAO;AACH,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAAA,IACxD;AAAA,EACJ;AAAA,EAEQ,gBAAgB,MAAA,EAGtB;AACE,IAAA,MAAM,YAAY,EAAC;AAEnB,IAAA,IAAI,UAAU,MAAA,EAAQ;AAClB,MAAA,MAAA,CAAO,OAAO,SAAA,EAAW,EAAE,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA;AAAA,IAClD;AAEA,IAAA,IAAI,WAAW,MAAA,EAAQ;AACnB,MAAA,MAAA,CAAO,OAAO,SAAA,EAAW,EAAE,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA;AAAA,IACpD;AAEA,IAAA,OAAO,SAAA;AAAA,EACX;AACJ","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 { AbstractProvider } from '@canton-network/core-splice-provider'\nimport { RequestArgs } from '@canton-network/core-types'\nimport { LedgerTypes } from '@canton-network/core-ledger-client-types'\nimport {\n GetEndpoint,\n LedgerClient,\n PostEndpoint,\n} from '@canton-network/core-ledger-client'\nimport pino from 'pino'\nimport { AccessTokenProvider } from '@canton-network/core-wallet-auth'\n\nexport class LedgerProvider extends AbstractProvider<LedgerTypes> {\n private client: LedgerClient\n\n constructor({\n baseUrl,\n accessTokenProvider,\n }: {\n baseUrl: string | URL\n accessTokenProvider: AccessTokenProvider\n }) {\n super()\n this.client = new LedgerClient({\n baseUrl: typeof baseUrl === 'string' ? new URL(baseUrl) : baseUrl,\n accessTokenProvider,\n // TODO: use some generalized logger\n logger: pino({ name: 'LedgerProvider' }),\n })\n }\n\n /**\n *\n * Example usage:\n *\n * const provider = new LedgerProvider(...)\n *\n * // Caveat: TypeScript can infer the correct params body based on the method + API path, but the result will be typed as `unknown` without a type argument:\n *\n * const result1 = await provider.request({ method: 'ledgerApi', params: { ... } });\n * // ^ type = `unknown`\n *\n *\n * // Specify an operation type to get a fully typed result:\n *\n * const result2 = await provider.request<Ops.PostV2Parties>({ method: 'ledgerApi', params: { ... } });\n * // ^ type = `PostV2Parties['ledgerApi']['result']`\n *\n * @param args\n * @returns\n */\n public async request<L extends LedgerTypes>(\n args: RequestArgs<L, 'ledgerApi'>\n ): Promise<L['ledgerApi']['result']> {\n console.log('Received request:', args)\n\n if (args.method === 'ledgerApi' && 'params' in args) {\n switch (args.params.requestMethod) {\n case 'get': {\n const params = this.getLedgerParams(args.params)\n\n return await this.client.getWithRetry(\n args.params.resource as GetEndpoint, // TODO: casting is necessary b/c of v3.3/v3.4 differences\n undefined,\n params\n )\n }\n case 'post': {\n const params = this.getLedgerParams(args.params)\n const body = 'body' in args.params ? args.params.body : {}\n\n return await this.client.postWithRetry(\n args.params.resource as PostEndpoint, // TODO: casting is necessary b/c of v3.3/v3.4 differences\n body as never, // TODO: need to fix client typing\n undefined,\n params\n )\n }\n // TODO: generalize LedgerClient to support any HTTP method\n case 'delete':\n case 'patch':\n default: {\n throw new Error(\n `Unsupported request method: ${args.params.requestMethod}`\n )\n }\n }\n } else {\n throw new Error(`Unsupported method: ${args.method}`)\n }\n }\n\n private getLedgerParams(params: object): {\n path?: Record<string, string>\n query?: Record<string, string>\n } {\n const extracted = {}\n\n if ('path' in params) {\n Object.assign(extracted, { path: params.path })\n }\n\n if ('query' in params) {\n Object.assign(extracted, { query: params.query })\n }\n\n return extracted\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/LedgerProvider.ts"],"names":["AbstractProvider","LedgerClient","pino"],"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 { AbstractProvider } from '@canton-network/core-splice-provider'\nimport { RequestArgs } from '@canton-network/core-types'\nimport { LedgerTypes } from '@canton-network/core-ledger-client-types'\nimport {\n GetEndpoint,\n LedgerClient,\n PostEndpoint,\n} from '@canton-network/core-ledger-client'\nimport pino from 'pino'\nimport { AccessTokenProvider } from '@canton-network/core-wallet-auth'\n\nexport class LedgerProvider extends AbstractProvider<LedgerTypes> {\n private client: LedgerClient\n\n constructor({\n baseUrl,\n accessTokenProvider,\n }: {\n baseUrl: string | URL\n accessTokenProvider: AccessTokenProvider\n }) {\n super()\n this.client = new LedgerClient({\n baseUrl: typeof baseUrl === 'string' ? new URL(baseUrl) : baseUrl,\n accessTokenProvider,\n // TODO: use some generalized logger\n logger: pino({ name: 'LedgerProvider' }),\n })\n }\n\n /**\n *\n * Example usage:\n *\n * const provider = new LedgerProvider(...)\n *\n * // Caveat: TypeScript can infer the correct params body based on the method + API path, but the result will be typed as `unknown` without a type argument:\n *\n * const result1 = await provider.request({ method: 'ledgerApi', params: { ... } });\n * // ^ type = `unknown`\n *\n *\n * // Specify an operation type to get a fully typed result:\n *\n * const result2 = await provider.request<Ops.PostV2Parties>({ method: 'ledgerApi', params: { ... } });\n * // ^ type = `PostV2Parties['ledgerApi']['result']`\n *\n * @param args\n * @returns\n */\n public async request<L extends LedgerTypes>(\n args: RequestArgs<L, 'ledgerApi'>\n ): Promise<L['ledgerApi']['result']> {\n if (args.method === 'ledgerApi' && 'params' in args) {\n switch (args.params.requestMethod) {\n case 'get': {\n const params = this.getLedgerParams(args.params)\n\n return await this.client.getWithRetry(\n args.params.resource as GetEndpoint, // TODO: casting is necessary b/c of v3.3/v3.4 differences\n undefined,\n params\n )\n }\n case 'post': {\n const params = this.getLedgerParams(args.params)\n const body = 'body' in args.params ? args.params.body : {}\n\n const headers =\n 'headers' in args.params\n ? args.params.headers\n : { 'Content-Type': 'application/json' }\n\n const additionalOptions =\n headers['Content-Type'] === 'application/octet-stream'\n ? {\n bodySerializer: (b: unknown) => b as BodyInit,\n headers,\n }\n : { headers }\n\n return await this.client.postWithRetry(\n args.params.resource as PostEndpoint, // TODO: casting is necessary b/c of v3.3/v3.4 differences\n body as never, // TODO: need to fix client typing\n undefined,\n params,\n additionalOptions as never\n )\n }\n // TODO: generalize LedgerClient to support any HTTP method\n case 'delete':\n case 'patch':\n default: {\n throw new Error(\n `Unsupported request method: ${args.params.requestMethod}`\n )\n }\n }\n } else {\n throw new Error(`Unsupported method: ${args.method}`)\n }\n }\n\n private getLedgerParams(params: object): {\n path?: Record<string, string>\n query?: Record<string, string>\n } {\n const extracted = {}\n\n if ('path' in params) {\n Object.assign(extracted, { path: params.path })\n }\n\n if ('query' in params) {\n Object.assign(extracted, { query: params.query })\n }\n\n return extracted\n }\n}\n"]}
package/dist/index.js CHANGED
@@ -41,7 +41,6 @@ var LedgerProvider = class extends AbstractProvider {
41
41
  * @returns
42
42
  */
43
43
  async request(args) {
44
- console.log("Received request:", args);
45
44
  if (args.method === "ledgerApi" && "params" in args) {
46
45
  switch (args.params.requestMethod) {
47
46
  case "get": {
@@ -56,13 +55,19 @@ var LedgerProvider = class extends AbstractProvider {
56
55
  case "post": {
57
56
  const params = this.getLedgerParams(args.params);
58
57
  const body = "body" in args.params ? args.params.body : {};
58
+ const headers = "headers" in args.params ? args.params.headers : { "Content-Type": "application/json" };
59
+ const additionalOptions = headers["Content-Type"] === "application/octet-stream" ? {
60
+ bodySerializer: (b) => b,
61
+ headers
62
+ } : { headers };
59
63
  return await this.client.postWithRetry(
60
64
  args.params.resource,
61
65
  // TODO: casting is necessary b/c of v3.3/v3.4 differences
62
66
  body,
63
67
  // TODO: need to fix client typing
64
68
  void 0,
65
- params
69
+ params,
70
+ additionalOptions
66
71
  );
67
72
  }
68
73
  // TODO: generalize LedgerClient to support any HTTP method
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/LedgerProvider.ts"],"names":[],"mappings":";;;;;;;;AAcO,IAAM,cAAA,GAAN,cAA6B,gBAAA,CAA8B;AAAA,EAG9D,WAAA,CAAY;AAAA,IACR,OAAA;AAAA,IACA;AAAA,GACJ,EAGG;AACC,IAAA,KAAA,EAAM;AATV,IAAA,aAAA,CAAA,IAAA,EAAQ,QAAA,CAAA;AAUJ,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,YAAA,CAAa;AAAA,MAC3B,SAAS,OAAO,OAAA,KAAY,WAAW,IAAI,GAAA,CAAI,OAAO,CAAA,GAAI,OAAA;AAAA,MAC1D,mBAAA;AAAA;AAAA,MAEA,MAAA,EAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,kBAAkB;AAAA,KAC1C,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,MAAa,QACT,IAAA,EACiC;AACjC,IAAA,OAAA,CAAQ,GAAA,CAAI,qBAAqB,IAAI,CAAA;AAErC,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,WAAA,IAAe,QAAA,IAAY,IAAA,EAAM;AACjD,MAAA,QAAQ,IAAA,CAAK,OAAO,aAAA;AAAe,QAC/B,KAAK,KAAA,EAAO;AACR,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,MAAM,CAAA;AAE/C,UAAA,OAAO,MAAM,KAAK,MAAA,CAAO,YAAA;AAAA,YACrB,KAAK,MAAA,CAAO,QAAA;AAAA;AAAA,YACZ,MAAA;AAAA,YACA;AAAA,WACJ;AAAA,QACJ;AAAA,QACA,KAAK,MAAA,EAAQ;AACT,UAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,MAAM,CAAA;AAC/C,UAAA,MAAM,OAAO,MAAA,IAAU,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA,CAAO,OAAO,EAAC;AAEzD,UAAA,OAAO,MAAM,KAAK,MAAA,CAAO,aAAA;AAAA,YACrB,KAAK,MAAA,CAAO,QAAA;AAAA;AAAA,YACZ,IAAA;AAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA,WACJ;AAAA,QACJ;AAAA;AAAA,QAEA,KAAK,QAAA;AAAA,QACL,KAAK,OAAA;AAAA,QACL,SAAS;AACL,UAAA,MAAM,IAAI,KAAA;AAAA,YACN,CAAA,4BAAA,EAA+B,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA;AAAA,WAC5D;AAAA,QACJ;AAAA;AACJ,IACJ,CAAA,MAAO;AACH,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAAA,IACxD;AAAA,EACJ;AAAA,EAEQ,gBAAgB,MAAA,EAGtB;AACE,IAAA,MAAM,YAAY,EAAC;AAEnB,IAAA,IAAI,UAAU,MAAA,EAAQ;AAClB,MAAA,MAAA,CAAO,OAAO,SAAA,EAAW,EAAE,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA;AAAA,IAClD;AAEA,IAAA,IAAI,WAAW,MAAA,EAAQ;AACnB,MAAA,MAAA,CAAO,OAAO,SAAA,EAAW,EAAE,KAAA,EAAO,MAAA,CAAO,OAAO,CAAA;AAAA,IACpD;AAEA,IAAA,OAAO,SAAA;AAAA,EACX;AACJ","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 { AbstractProvider } from '@canton-network/core-splice-provider'\nimport { RequestArgs } from '@canton-network/core-types'\nimport { LedgerTypes } from '@canton-network/core-ledger-client-types'\nimport {\n GetEndpoint,\n LedgerClient,\n PostEndpoint,\n} from '@canton-network/core-ledger-client'\nimport pino from 'pino'\nimport { AccessTokenProvider } from '@canton-network/core-wallet-auth'\n\nexport class LedgerProvider extends AbstractProvider<LedgerTypes> {\n private client: LedgerClient\n\n constructor({\n baseUrl,\n accessTokenProvider,\n }: {\n baseUrl: string | URL\n accessTokenProvider: AccessTokenProvider\n }) {\n super()\n this.client = new LedgerClient({\n baseUrl: typeof baseUrl === 'string' ? new URL(baseUrl) : baseUrl,\n accessTokenProvider,\n // TODO: use some generalized logger\n logger: pino({ name: 'LedgerProvider' }),\n })\n }\n\n /**\n *\n * Example usage:\n *\n * const provider = new LedgerProvider(...)\n *\n * // Caveat: TypeScript can infer the correct params body based on the method + API path, but the result will be typed as `unknown` without a type argument:\n *\n * const result1 = await provider.request({ method: 'ledgerApi', params: { ... } });\n * // ^ type = `unknown`\n *\n *\n * // Specify an operation type to get a fully typed result:\n *\n * const result2 = await provider.request<Ops.PostV2Parties>({ method: 'ledgerApi', params: { ... } });\n * // ^ type = `PostV2Parties['ledgerApi']['result']`\n *\n * @param args\n * @returns\n */\n public async request<L extends LedgerTypes>(\n args: RequestArgs<L, 'ledgerApi'>\n ): Promise<L['ledgerApi']['result']> {\n console.log('Received request:', args)\n\n if (args.method === 'ledgerApi' && 'params' in args) {\n switch (args.params.requestMethod) {\n case 'get': {\n const params = this.getLedgerParams(args.params)\n\n return await this.client.getWithRetry(\n args.params.resource as GetEndpoint, // TODO: casting is necessary b/c of v3.3/v3.4 differences\n undefined,\n params\n )\n }\n case 'post': {\n const params = this.getLedgerParams(args.params)\n const body = 'body' in args.params ? args.params.body : {}\n\n return await this.client.postWithRetry(\n args.params.resource as PostEndpoint, // TODO: casting is necessary b/c of v3.3/v3.4 differences\n body as never, // TODO: need to fix client typing\n undefined,\n params\n )\n }\n // TODO: generalize LedgerClient to support any HTTP method\n case 'delete':\n case 'patch':\n default: {\n throw new Error(\n `Unsupported request method: ${args.params.requestMethod}`\n )\n }\n }\n } else {\n throw new Error(`Unsupported method: ${args.method}`)\n }\n }\n\n private getLedgerParams(params: object): {\n path?: Record<string, string>\n query?: Record<string, string>\n } {\n const extracted = {}\n\n if ('path' in params) {\n Object.assign(extracted, { path: params.path })\n }\n\n if ('query' in params) {\n Object.assign(extracted, { query: params.query })\n }\n\n return extracted\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/LedgerProvider.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 { AbstractProvider } from '@canton-network/core-splice-provider'\nimport { RequestArgs } from '@canton-network/core-types'\nimport { LedgerTypes } from '@canton-network/core-ledger-client-types'\nimport {\n GetEndpoint,\n LedgerClient,\n PostEndpoint,\n} from '@canton-network/core-ledger-client'\nimport pino from 'pino'\nimport { AccessTokenProvider } from '@canton-network/core-wallet-auth'\n\nexport class LedgerProvider extends AbstractProvider<LedgerTypes> {\n private client: LedgerClient\n\n constructor({\n baseUrl,\n accessTokenProvider,\n }: {\n baseUrl: string | URL\n accessTokenProvider: AccessTokenProvider\n }) {\n super()\n this.client = new LedgerClient({\n baseUrl: typeof baseUrl === 'string' ? new URL(baseUrl) : baseUrl,\n accessTokenProvider,\n // TODO: use some generalized logger\n logger: pino({ name: 'LedgerProvider' }),\n })\n }\n\n /**\n *\n * Example usage:\n *\n * const provider = new LedgerProvider(...)\n *\n * // Caveat: TypeScript can infer the correct params body based on the method + API path, but the result will be typed as `unknown` without a type argument:\n *\n * const result1 = await provider.request({ method: 'ledgerApi', params: { ... } });\n * // ^ type = `unknown`\n *\n *\n * // Specify an operation type to get a fully typed result:\n *\n * const result2 = await provider.request<Ops.PostV2Parties>({ method: 'ledgerApi', params: { ... } });\n * // ^ type = `PostV2Parties['ledgerApi']['result']`\n *\n * @param args\n * @returns\n */\n public async request<L extends LedgerTypes>(\n args: RequestArgs<L, 'ledgerApi'>\n ): Promise<L['ledgerApi']['result']> {\n if (args.method === 'ledgerApi' && 'params' in args) {\n switch (args.params.requestMethod) {\n case 'get': {\n const params = this.getLedgerParams(args.params)\n\n return await this.client.getWithRetry(\n args.params.resource as GetEndpoint, // TODO: casting is necessary b/c of v3.3/v3.4 differences\n undefined,\n params\n )\n }\n case 'post': {\n const params = this.getLedgerParams(args.params)\n const body = 'body' in args.params ? args.params.body : {}\n\n const headers =\n 'headers' in args.params\n ? args.params.headers\n : { 'Content-Type': 'application/json' }\n\n const additionalOptions =\n headers['Content-Type'] === 'application/octet-stream'\n ? {\n bodySerializer: (b: unknown) => b as BodyInit,\n headers,\n }\n : { headers }\n\n return await this.client.postWithRetry(\n args.params.resource as PostEndpoint, // TODO: casting is necessary b/c of v3.3/v3.4 differences\n body as never, // TODO: need to fix client typing\n undefined,\n params,\n additionalOptions as never\n )\n }\n // TODO: generalize LedgerClient to support any HTTP method\n case 'delete':\n case 'patch':\n default: {\n throw new Error(\n `Unsupported request method: ${args.params.requestMethod}`\n )\n }\n }\n } else {\n throw new Error(`Unsupported method: ${args.method}`)\n }\n }\n\n private getLedgerParams(params: object): {\n path?: Record<string, string>\n query?: Record<string, string>\n } {\n const extracted = {}\n\n if ('path' in params) {\n Object.assign(extracted, { path: params.path })\n }\n\n if ('query' in params) {\n Object.assign(extracted, { query: params.query })\n }\n\n return extracted\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canton-network/core-provider-ledger",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "type": "module",
5
5
  "description": "A Splice Provider implementation for direct ledger access.",
6
6
  "license": "Apache-2.0",
@@ -36,11 +36,11 @@
36
36
  "typescript": "^5.9.3"
37
37
  },
38
38
  "dependencies": {
39
- "@canton-network/core-ledger-client": "^0.30.0",
40
- "@canton-network/core-ledger-client-types": "^0.23.0",
41
- "@canton-network/core-splice-provider": "^0.27.0",
42
- "@canton-network/core-types": "^0.21.0",
43
- "@canton-network/core-wallet-auth": "^0.22.0",
39
+ "@canton-network/core-ledger-client": "^0.31.0",
40
+ "@canton-network/core-ledger-client-types": "^0.24.0",
41
+ "@canton-network/core-splice-provider": "^0.28.0",
42
+ "@canton-network/core-types": "^0.22.0",
43
+ "@canton-network/core-wallet-auth": "^0.23.0",
44
44
  "pino": "^10.3.1"
45
45
  },
46
46
  "files": [