@distrohelena/canton-typescript-sdk 0.1.0 → 0.1.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.
Files changed (104) hide show
  1. package/README.md +60 -0
  2. package/dist/client/canton-client.d.ts +2 -0
  3. package/dist/client/canton-client.js +2 -0
  4. package/dist/client/service-registry.d.ts +2 -0
  5. package/dist/client/service-registry.js +104 -0
  6. package/dist/core/transports/transport.interface.d.ts +40 -0
  7. package/dist/core/types/external-party/external-party-crypto-key-format.d.ts +6 -0
  8. package/dist/core/types/external-party/external-party-crypto-key-format.js +7 -0
  9. package/dist/core/types/external-party/external-party-onboarding-transaction.d.ts +9 -0
  10. package/dist/core/types/external-party/external-party-onboarding-transaction.js +8 -0
  11. package/dist/core/types/external-party/external-party-signature-format.d.ts +7 -0
  12. package/dist/core/types/external-party/external-party-signature-format.js +8 -0
  13. package/dist/core/types/external-party/external-party-signature.d.ts +14 -0
  14. package/dist/core/types/external-party/external-party-signature.js +16 -0
  15. package/dist/core/types/external-party/external-party-signing-algorithm-spec.d.ts +7 -0
  16. package/dist/core/types/external-party/external-party-signing-algorithm-spec.js +8 -0
  17. package/dist/core/types/external-party/external-party-signing-key-spec.d.ts +8 -0
  18. package/dist/core/types/external-party/external-party-signing-key-spec.js +9 -0
  19. package/dist/core/types/external-party/external-party-signing-public-key.d.ts +12 -0
  20. package/dist/core/types/external-party/external-party-signing-public-key.js +12 -0
  21. package/dist/core/types/requests/add-topology-transactions-request.d.ts +16 -0
  22. package/dist/core/types/requests/add-topology-transactions-request.js +12 -0
  23. package/dist/core/types/requests/allocate-external-party-request.d.ts +18 -0
  24. package/dist/core/types/requests/allocate-external-party-request.js +16 -0
  25. package/dist/core/types/requests/assemble-signed-topology-transactions-request.d.ts +10 -0
  26. package/dist/core/types/requests/assemble-signed-topology-transactions-request.js +8 -0
  27. package/dist/core/types/requests/authorize-topology-transactions-request.d.ts +37 -0
  28. package/dist/core/types/requests/authorize-topology-transactions-request.js +35 -0
  29. package/dist/core/types/requests/create-temporary-topology-store-request.d.ts +8 -0
  30. package/dist/core/types/requests/create-temporary-topology-store-request.js +8 -0
  31. package/dist/core/types/requests/drop-temporary-topology-store-request.d.ts +7 -0
  32. package/dist/core/types/requests/drop-temporary-topology-store-request.js +6 -0
  33. package/dist/core/types/requests/generate-external-party-topology-request.d.ts +19 -0
  34. package/dist/core/types/requests/generate-external-party-topology-request.js +21 -0
  35. package/dist/core/types/requests/generate-topology-transactions-request.d.ts +26 -0
  36. package/dist/core/types/requests/generate-topology-transactions-request.js +22 -0
  37. package/dist/core/types/requests/import-topology-snapshot-request.d.ts +12 -0
  38. package/dist/core/types/requests/import-topology-snapshot-request.js +10 -0
  39. package/dist/core/types/requests/import-topology-snapshot-v2-request.d.ts +12 -0
  40. package/dist/core/types/requests/import-topology-snapshot-v2-request.js +10 -0
  41. package/dist/core/types/requests/sign-topology-transactions-request.d.ts +15 -0
  42. package/dist/core/types/requests/sign-topology-transactions-request.js +12 -0
  43. package/dist/core/types/responses/add-topology-transactions-response.d.ts +3 -0
  44. package/dist/core/types/responses/add-topology-transactions-response.js +5 -0
  45. package/dist/core/types/responses/allocate-external-party-response.d.ts +6 -0
  46. package/dist/core/types/responses/allocate-external-party-response.js +6 -0
  47. package/dist/core/types/responses/authorize-topology-transactions-response.d.ts +7 -0
  48. package/dist/core/types/responses/authorize-topology-transactions-response.js +6 -0
  49. package/dist/core/types/responses/create-temporary-topology-store-response.d.ts +7 -0
  50. package/dist/core/types/responses/create-temporary-topology-store-response.js +6 -0
  51. package/dist/core/types/responses/drop-temporary-topology-store-response.d.ts +3 -0
  52. package/dist/core/types/responses/drop-temporary-topology-store-response.js +5 -0
  53. package/dist/core/types/responses/generate-external-party-topology-response.d.ts +12 -0
  54. package/dist/core/types/responses/generate-external-party-topology-response.js +12 -0
  55. package/dist/core/types/responses/generate-topology-transactions-response.d.ts +7 -0
  56. package/dist/core/types/responses/generate-topology-transactions-response.js +6 -0
  57. package/dist/core/types/responses/import-topology-snapshot-response.d.ts +3 -0
  58. package/dist/core/types/responses/import-topology-snapshot-response.js +5 -0
  59. package/dist/core/types/responses/import-topology-snapshot-v2-response.d.ts +3 -0
  60. package/dist/core/types/responses/import-topology-snapshot-v2-response.js +5 -0
  61. package/dist/core/types/responses/sign-topology-transactions-response.d.ts +7 -0
  62. package/dist/core/types/responses/sign-topology-transactions-response.js +6 -0
  63. package/dist/core/types/topology/external-topology-signature.d.ts +18 -0
  64. package/dist/core/types/topology/external-topology-signature.js +16 -0
  65. package/dist/core/types/topology/generated-topology-transaction.d.ts +8 -0
  66. package/dist/core/types/topology/generated-topology-transaction.js +8 -0
  67. package/dist/core/types/topology/multi-topology-transaction-signature.d.ts +9 -0
  68. package/dist/core/types/topology/multi-topology-transaction-signature.js +8 -0
  69. package/dist/core/types/topology/prepared-topology-transaction.d.ts +10 -0
  70. package/dist/core/types/topology/prepared-topology-transaction.js +10 -0
  71. package/dist/core/types/topology/signed-topology-transaction.d.ts +14 -0
  72. package/dist/core/types/topology/signed-topology-transaction.js +14 -0
  73. package/dist/core/types/topology/topology-force-flag.d.ts +8 -0
  74. package/dist/core/types/topology/topology-force-flag.js +9 -0
  75. package/dist/core/types/topology/topology-mapping.d.ts +16 -0
  76. package/dist/core/types/topology/topology-mapping.js +1 -0
  77. package/dist/core/types/topology/topology-signature-delegation.d.ts +18 -0
  78. package/dist/core/types/topology/topology-signature-delegation.js +20 -0
  79. package/dist/core/types/topology/topology-signature-format.d.ts +3 -0
  80. package/dist/core/types/topology/topology-signature-format.js +4 -0
  81. package/dist/core/types/topology/topology-transaction-signature.d.ts +15 -0
  82. package/dist/core/types/topology/topology-transaction-signature.js +14 -0
  83. package/dist/daml-lf/container/dar-archive-loader.js +9 -0
  84. package/dist/index.d.ts +41 -0
  85. package/dist/index.js +40 -0
  86. package/dist/services/party-management/party-management-service-client.d.ts +8 -0
  87. package/dist/services/party-management/party-management-service-client.js +8 -0
  88. package/dist/services/topology-manager-write/topology-manager-write-service-client.d.ts +42 -0
  89. package/dist/services/topology-manager-write/topology-manager-write-service-client.js +44 -0
  90. package/dist/services/topology-manager-write/topology-signed-transaction-assembler.d.ts +3 -0
  91. package/dist/services/topology-manager-write/topology-signed-transaction-assembler.js +78 -0
  92. package/dist/transports/grpc/grpc-channel-factory.d.ts +13 -1
  93. package/dist/transports/grpc/grpc-channel-factory.js +48 -0
  94. package/dist/transports/grpc/grpc-transport.d.ts +14 -0
  95. package/dist/transports/grpc/grpc-transport.js +52 -0
  96. package/dist/transports/grpc/mappers/external-party-management-mapper.d.ts +9 -0
  97. package/dist/transports/grpc/mappers/external-party-management-mapper.js +126 -0
  98. package/dist/transports/grpc/mappers/topology-manager-write-mapper.d.ts +33 -0
  99. package/dist/transports/grpc/mappers/topology-manager-write-mapper.js +436 -0
  100. package/dist/transports/json/json-transport.d.ts +14 -0
  101. package/dist/transports/json/json-transport.js +43 -6
  102. package/dist/transports/json/mappers/parties-mapper.d.ts +13 -2
  103. package/dist/transports/json/mappers/parties-mapper.js +15 -1
  104. package/package.json +3 -2
package/README.md CHANGED
@@ -13,6 +13,48 @@ TypeScript SDK for Canton with:
13
13
  npm install @distrohelena/canton-typescript-sdk
14
14
  ```
15
15
 
16
+ ## Live Integration Tests
17
+
18
+ The repository also supports a live SDK validation suite against an already-running CN quickstart localnet.
19
+
20
+ The live suite runs single-worker with an extended timeout because it mutates and reads a shared localnet.
21
+
22
+ Prerequisites:
23
+
24
+ - CN quickstart is already running on your machine
25
+ - the suite is expected to fail fast if the configured node is unreachable
26
+
27
+ Default local endpoints:
28
+
29
+ - gRPC ledger: `http://localhost:3901`
30
+ - gRPC ledger admin: `http://localhost:3901`
31
+ - gRPC participant admin: `http://localhost:3902`
32
+ - JSON ledger and ledger admin: `http://localhost:3975`
33
+
34
+ Override environment variables:
35
+
36
+ - `SDK_TEST_LEDGER_ENDPOINT`
37
+ - `SDK_TEST_LEDGER_ADMIN_ENDPOINT`
38
+ - `SDK_TEST_PARTICIPANT_ADMIN_ENDPOINT`
39
+
40
+ The live harness also supports bearer-token overrides:
41
+
42
+ - `SDK_TEST_LEDGER_BEARER_TOKEN`
43
+ - `SDK_TEST_LEDGER_ADMIN_BEARER_TOKEN`
44
+ - `SDK_TEST_PARTICIPANT_ADMIN_BEARER_TOKEN`
45
+
46
+ For CN quickstart shared-secret mode, the harness generates a default bearer token automatically using:
47
+
48
+ - subject `ledger-api-user`
49
+ - audience `https://canton.network.global`
50
+ - shared secret `unsafe`
51
+
52
+ Run:
53
+
54
+ ```bash
55
+ npm run test:live
56
+ ```
57
+
16
58
  ## Shared Client
17
59
 
18
60
  ```ts
@@ -98,6 +140,10 @@ For gRPC, channel security resolves per surface:
98
140
  - Ledger Admin endpoint:
99
141
  - `partyManagementService.allocatePartyAsync(...)`: `json`, `grpc`
100
142
  - `partyManagementService.listKnownPartiesAsync(...)`: `json`, `grpc`
143
+ - `partyManagementService.getParticipantIdAsync(...)`: `grpc` only
144
+ - `partyManagementService.getPartiesAsync(...)`: `grpc` only
145
+ - `partyManagementService.generateExternalPartyTopologyAsync(...)`: `grpc` only
146
+ - `partyManagementService.allocateExternalPartyAsync(...)`: `grpc` only
101
147
  - `userManagementService.grantUserRightsAsync(...)`: `json`, `grpc`
102
148
  - `packageManagementService.uploadDarFileAsync(...)`: `json`, `grpc`
103
149
 
@@ -106,6 +152,19 @@ For gRPC, channel security resolves per surface:
106
152
  - `participantPackageService.getPackageContentsAsync(...)`: `grpc` only
107
153
  - `participantPackageService.getPackageReferencesAsync(...)`: `grpc` only
108
154
  - `participantStatusService.getParticipantStatusAsync(...)`: `grpc` only
155
+ - `topologyManagerReadService.*`: `grpc` only
156
+ - `topologyAggregationService.*`: `grpc` only
157
+ - `topologyManagerWriteService.authorizeAsync(...)`: `grpc` only
158
+ - `topologyManagerWriteService.addTransactionsAsync(...)`: `grpc` only
159
+ - `topologyManagerWriteService.importTopologySnapshotAsync(...)`: `grpc` only
160
+ - `topologyManagerWriteService.importTopologySnapshotV2Async(...)`: `grpc` only
161
+ - `topologyManagerWriteService.signTransactionsAsync(...)`: `grpc` only
162
+ - `topologyManagerWriteService.generateTransactionsAsync(...)`: `grpc` only
163
+ - `topologyManagerWriteService.createTemporaryTopologyStoreAsync(...)`: `grpc` only
164
+ - `topologyManagerWriteService.dropTemporaryTopologyStoreAsync(...)`: `grpc` only
165
+ - `topologyManagerWriteService.assembleSignedTransactions(...)`: SDK-local on any client
166
+
167
+ Raw topology-write mapping support currently starts with `PartyToParticipant`. The detached-signature assembler is transport-independent, but the actual participant-admin write RPCs are `grpc` only and JSON rejects them with `NotSupportedError`.
109
168
 
110
169
  ## Protocol-Specific Clients
111
170
 
@@ -120,6 +179,7 @@ Subpath exports are available when you want to construct directly over a transpo
120
179
 
121
180
  JSON does not provide a `grpc.health.v1.Health.Check` equivalent. The shared SDK still exposes `healthService`, but JSON rejects calls with `NotSupportedError`.
122
181
  JSON also does not provide a participant-admin status equivalent, so `participantStatusService` is currently `grpc` only.
182
+ JSON also does not expose the ledger-admin external-party RPCs, so `partyManagementService.generateExternalPartyTopologyAsync(...)` and `partyManagementService.allocateExternalPartyAsync(...)` are `grpc` only.
123
183
 
124
184
  ## DAML-LF Parser
125
185
 
@@ -20,6 +20,7 @@ import { ResourceManagementServiceClient } from "../services/resource-management
20
20
  import { StateServiceClient } from "../services/state/state-service-client.js";
21
21
  import { TopologyAggregationServiceClient } from "../services/topology-aggregation/topology-aggregation-service-client.js";
22
22
  import { TopologyManagerReadServiceClient } from "../services/topology-manager-read/topology-manager-read-service-client.js";
23
+ import { TopologyManagerWriteServiceClient } from "../services/topology-manager-write/topology-manager-write-service-client.js";
23
24
  import { TrafficControlServiceClient } from "../services/traffic-control/traffic-control-service-client.js";
24
25
  import { UpdateServiceClient } from "../services/update/update-service-client.js";
25
26
  import { UserManagementServiceClient } from "../services/user-management/user-management-service-client.js";
@@ -48,6 +49,7 @@ export declare class CantonClient {
48
49
  readonly identityInitializationService: IdentityInitializationServiceClient;
49
50
  readonly synchronizerConnectivityService: SynchronizerConnectivityServiceClient;
50
51
  readonly topologyManagerReadService: TopologyManagerReadServiceClient;
52
+ readonly topologyManagerWriteService: TopologyManagerWriteServiceClient;
51
53
  readonly trafficControlService: TrafficControlServiceClient;
52
54
  readonly topologyAggregationService: TopologyAggregationServiceClient;
53
55
  readonly commandService: CommandServiceClient;
@@ -23,6 +23,7 @@ export class CantonClient {
23
23
  identityInitializationService;
24
24
  synchronizerConnectivityService;
25
25
  topologyManagerReadService;
26
+ topologyManagerWriteService;
26
27
  trafficControlService;
27
28
  topologyAggregationService;
28
29
  commandService;
@@ -61,6 +62,7 @@ export class CantonClient {
61
62
  this.synchronizerConnectivityService =
62
63
  services.synchronizerConnectivityService;
63
64
  this.topologyManagerReadService = services.topologyManagerReadService;
65
+ this.topologyManagerWriteService = services.topologyManagerWriteService;
64
66
  this.trafficControlService = services.trafficControlService;
65
67
  this.topologyAggregationService = services.topologyAggregationService;
66
68
  this.commandService = services.commandService;
@@ -22,6 +22,7 @@ import { ResourceManagementServiceClient } from "../services/resource-management
22
22
  import { StateServiceClient } from "../services/state/state-service-client.js";
23
23
  import { TopologyAggregationServiceClient } from "../services/topology-aggregation/topology-aggregation-service-client.js";
24
24
  import { TopologyManagerReadServiceClient } from "../services/topology-manager-read/topology-manager-read-service-client.js";
25
+ import { TopologyManagerWriteServiceClient } from "../services/topology-manager-write/topology-manager-write-service-client.js";
25
26
  import { TrafficControlServiceClient } from "../services/traffic-control/traffic-control-service-client.js";
26
27
  import { UpdateServiceClient } from "../services/update/update-service-client.js";
27
28
  import { UserManagementServiceClient } from "../services/user-management/user-management-service-client.js";
@@ -47,6 +48,7 @@ export interface ServiceRegistry {
47
48
  readonly identityInitializationService: IdentityInitializationServiceClient;
48
49
  readonly synchronizerConnectivityService: SynchronizerConnectivityServiceClient;
49
50
  readonly topologyManagerReadService: TopologyManagerReadServiceClient;
51
+ readonly topologyManagerWriteService: TopologyManagerWriteServiceClient;
50
52
  readonly trafficControlService: TrafficControlServiceClient;
51
53
  readonly topologyAggregationService: TopologyAggregationServiceClient;
52
54
  readonly commandService: CommandServiceClient;
@@ -25,6 +25,7 @@ import { ResourceManagementServiceClient } from "../services/resource-management
25
25
  import { StateServiceClient } from "../services/state/state-service-client.js";
26
26
  import { TopologyAggregationServiceClient } from "../services/topology-aggregation/topology-aggregation-service-client.js";
27
27
  import { TopologyManagerReadServiceClient } from "../services/topology-manager-read/topology-manager-read-service-client.js";
28
+ import { TopologyManagerWriteServiceClient } from "../services/topology-manager-write/topology-manager-write-service-client.js";
28
29
  import { TrafficControlServiceClient } from "../services/traffic-control/traffic-control-service-client.js";
29
30
  import { UpdateServiceClient } from "../services/update/update-service-client.js";
30
31
  import { UserManagementServiceClient } from "../services/user-management/user-management-service-client.js";
@@ -55,6 +56,14 @@ class PlaceholderTransport {
55
56
  this.throwIfDisposed();
56
57
  throw new TransportError("party allocation is not available yet");
57
58
  }
59
+ async generateExternalPartyTopologyAsync(_request, _options) {
60
+ this.throwIfDisposed();
61
+ throw new TransportError("external party topology generation is not available yet");
62
+ }
63
+ async allocateExternalPartyAsync(_request, _options) {
64
+ this.throwIfDisposed();
65
+ throw new TransportError("external party allocation is not available yet");
66
+ }
58
67
  async listKnownPartiesAsync(_request, _options) {
59
68
  this.throwIfDisposed();
60
69
  throw new TransportError("known party listing is not available yet");
@@ -263,6 +272,38 @@ class PlaceholderTransport {
263
272
  this.throwIfDisposed();
264
273
  throw new TransportError("topology participant synchronizer permissions are not available yet");
265
274
  }
275
+ async authorizeTopologyTransactionsAsync(_request, _options) {
276
+ this.throwIfDisposed();
277
+ throw new TransportError("topology transaction authorization is not available yet");
278
+ }
279
+ async addTopologyTransactionsAsync(_request, _options) {
280
+ this.throwIfDisposed();
281
+ throw new TransportError("topology transaction writes are not available yet");
282
+ }
283
+ async importTopologySnapshotAsync(_request, _options) {
284
+ this.throwIfDisposed();
285
+ throw new TransportError("topology snapshot import is not available yet");
286
+ }
287
+ async importTopologySnapshotV2Async(_request, _options) {
288
+ this.throwIfDisposed();
289
+ throw new TransportError("topology snapshot import v2 is not available yet");
290
+ }
291
+ async signTopologyTransactionsAsync(_request, _options) {
292
+ this.throwIfDisposed();
293
+ throw new TransportError("topology transaction signing is not available yet");
294
+ }
295
+ async generateTopologyTransactionsAsync(_request, _options) {
296
+ this.throwIfDisposed();
297
+ throw new TransportError("topology transaction generation is not available yet");
298
+ }
299
+ async createTemporaryTopologyStoreAsync(_request, _options) {
300
+ this.throwIfDisposed();
301
+ throw new TransportError("temporary topology stores are not available yet");
302
+ }
303
+ async dropTemporaryTopologyStoreAsync(_request, _options) {
304
+ this.throwIfDisposed();
305
+ throw new TransportError("temporary topology store deletion is not available yet");
306
+ }
266
307
  async listPartyHostingLimitsAsync(_request, _options) {
267
308
  this.throwIfDisposed();
268
309
  throw new TransportError("topology party hosting limits are not available yet");
@@ -396,6 +437,12 @@ class MissingEndpointTransport {
396
437
  async allocatePartyAsync() {
397
438
  this.throwMissingEndpoint();
398
439
  }
440
+ async generateExternalPartyTopologyAsync() {
441
+ this.throwMissingEndpoint();
442
+ }
443
+ async allocateExternalPartyAsync() {
444
+ this.throwMissingEndpoint();
445
+ }
399
446
  async listKnownPartiesAsync() {
400
447
  this.throwMissingEndpoint();
401
448
  }
@@ -552,6 +599,30 @@ class MissingEndpointTransport {
552
599
  async listParticipantSynchronizerPermissionAsync() {
553
600
  this.throwMissingEndpoint();
554
601
  }
602
+ async authorizeTopologyTransactionsAsync() {
603
+ this.throwMissingEndpoint();
604
+ }
605
+ async addTopologyTransactionsAsync() {
606
+ this.throwMissingEndpoint();
607
+ }
608
+ async importTopologySnapshotAsync() {
609
+ this.throwMissingEndpoint();
610
+ }
611
+ async importTopologySnapshotV2Async() {
612
+ this.throwMissingEndpoint();
613
+ }
614
+ async signTopologyTransactionsAsync() {
615
+ this.throwMissingEndpoint();
616
+ }
617
+ async generateTopologyTransactionsAsync() {
618
+ this.throwMissingEndpoint();
619
+ }
620
+ async createTemporaryTopologyStoreAsync() {
621
+ this.throwMissingEndpoint();
622
+ }
623
+ async dropTemporaryTopologyStoreAsync() {
624
+ this.throwMissingEndpoint();
625
+ }
555
626
  async listPartyHostingLimitsAsync() {
556
627
  this.throwMissingEndpoint();
557
628
  }
@@ -655,6 +726,12 @@ class CompositeTransport {
655
726
  async allocatePartyAsync() {
656
727
  throw new TransportError("Composite transport does not forward service calls.");
657
728
  }
729
+ async generateExternalPartyTopologyAsync() {
730
+ throw new TransportError("Composite transport does not forward service calls.");
731
+ }
732
+ async allocateExternalPartyAsync() {
733
+ throw new TransportError("Composite transport does not forward service calls.");
734
+ }
658
735
  async listKnownPartiesAsync() {
659
736
  throw new TransportError("Composite transport does not forward service calls.");
660
737
  }
@@ -811,6 +888,30 @@ class CompositeTransport {
811
888
  async listParticipantSynchronizerPermissionAsync() {
812
889
  throw new TransportError("Composite transport does not forward service calls.");
813
890
  }
891
+ async authorizeTopologyTransactionsAsync() {
892
+ throw new TransportError("Composite transport does not forward service calls.");
893
+ }
894
+ async addTopologyTransactionsAsync() {
895
+ throw new TransportError("Composite transport does not forward service calls.");
896
+ }
897
+ async importTopologySnapshotAsync() {
898
+ throw new TransportError("Composite transport does not forward service calls.");
899
+ }
900
+ async importTopologySnapshotV2Async() {
901
+ throw new TransportError("Composite transport does not forward service calls.");
902
+ }
903
+ async signTopologyTransactionsAsync() {
904
+ throw new TransportError("Composite transport does not forward service calls.");
905
+ }
906
+ async generateTopologyTransactionsAsync() {
907
+ throw new TransportError("Composite transport does not forward service calls.");
908
+ }
909
+ async createTemporaryTopologyStoreAsync() {
910
+ throw new TransportError("Composite transport does not forward service calls.");
911
+ }
912
+ async dropTemporaryTopologyStoreAsync() {
913
+ throw new TransportError("Composite transport does not forward service calls.");
914
+ }
814
915
  async listPartyHostingLimitsAsync() {
815
916
  throw new TransportError("Composite transport does not forward service calls.");
816
917
  }
@@ -989,6 +1090,8 @@ export function createServiceRegistry(options) {
989
1090
  ?? createMissingParticipantAdminTransport(options, "trafficControlService");
990
1091
  const topologyManagerReadTransport = participantAdminTransport
991
1092
  ?? createMissingParticipantAdminTransport(options, "topologyManagerReadService");
1093
+ const topologyManagerWriteTransport = participantAdminTransport
1094
+ ?? createMissingParticipantAdminTransport(options, "topologyManagerWriteService");
992
1095
  const topologyAggregationTransport = participantAdminTransport
993
1096
  ?? createMissingParticipantAdminTransport(options, "topologyAggregationService");
994
1097
  const transport = new CompositeTransport([
@@ -1016,6 +1119,7 @@ export function createServiceRegistry(options) {
1016
1119
  identityInitializationService: new IdentityInitializationServiceClient(identityInitializationTransport),
1017
1120
  synchronizerConnectivityService: new SynchronizerConnectivityServiceClient(synchronizerConnectivityTransport),
1018
1121
  topologyManagerReadService: new TopologyManagerReadServiceClient(topologyManagerReadTransport),
1122
+ topologyManagerWriteService: new TopologyManagerWriteServiceClient(topologyManagerWriteTransport),
1019
1123
  trafficControlService: new TrafficControlServiceClient(trafficControlTransport),
1020
1124
  topologyAggregationService: new TopologyAggregationServiceClient(topologyAggregationTransport),
1021
1125
  commandService: new CommandServiceClient(commandTransport, options.commandSigner),
@@ -1,6 +1,10 @@
1
1
  import { TransportFeatures } from "./transport-features.interface.js";
2
+ import { AllocateExternalPartyRequest } from "../types/requests/allocate-external-party-request.js";
2
3
  import { AllocatePartyRequest } from "../types/requests/allocate-party-request.js";
4
+ import { AddTopologyTransactionsRequest } from "../types/requests/add-topology-transactions-request.js";
5
+ import { AuthorizeTopologyTransactionsRequest } from "../types/requests/authorize-topology-transactions-request.js";
3
6
  import { GrantUserRightsRequest } from "../types/requests/grant-user-rights-request.js";
7
+ import { CreateTemporaryTopologyStoreRequest } from "../types/requests/create-temporary-topology-store-request.js";
4
8
  import { GetActiveContractsPageRequest } from "../types/requests/get-active-contracts-page-request.js";
5
9
  import { GetActiveContractsRequest } from "../types/requests/get-active-contracts-request.js";
6
10
  import { GetCompletionsRequest } from "../types/requests/get-completions-request.js";
@@ -41,7 +45,12 @@ import { GetUpdateByOffsetRequest } from "../types/requests/get-update-by-offset
41
45
  import { GetUpdatesRequest } from "../types/requests/get-updates-request.js";
42
46
  import { GetUpdatesPageRequest } from "../types/requests/get-updates-page-request.js";
43
47
  import { GetUserRequest } from "../types/requests/get-user-request.js";
48
+ import { DropTemporaryTopologyStoreRequest } from "../types/requests/drop-temporary-topology-store-request.js";
49
+ import { GenerateTopologyTransactionsRequest } from "../types/requests/generate-topology-transactions-request.js";
50
+ import { GenerateExternalPartyTopologyRequest } from "../types/requests/generate-external-party-topology-request.js";
44
51
  import { HealthCheckRequest } from "../types/requests/health-check-request.js";
52
+ import { ImportTopologySnapshotRequest } from "../types/requests/import-topology-snapshot-request.js";
53
+ import { ImportTopologySnapshotV2Request } from "../types/requests/import-topology-snapshot-v2-request.js";
45
54
  import { ListAllRequest } from "../types/requests/list-all-request.js";
46
55
  import { ListAllV2Request } from "../types/requests/list-all-v2-request.js";
47
56
  import { ListAvailableStoresRequest } from "../types/requests/list-available-stores-request.js";
@@ -79,6 +88,7 @@ import { TopologyListVettedPackagesRequest } from "../types/requests/topology-li
79
88
  import { TrafficControlStateRequest } from "../types/requests/traffic-control-state-request.js";
80
89
  import { UploadDarFileRequest } from "../types/requests/upload-dar-file-request.js";
81
90
  import { ParticipantListPackagesRequest } from "../types/requests/participant-list-packages-request.js";
91
+ import { SignTopologyTransactionsRequest } from "../types/requests/sign-topology-transactions-request.js";
82
92
  import { GetPackageContentsResponse } from "../types/responses/get-package-contents-response.js";
83
93
  import { GetConnectedSynchronizersResponse } from "../types/responses/get-connected-synchronizers-response.js";
84
94
  import { CountInFlightResponse } from "../types/responses/count-in-flight-response.js";
@@ -104,6 +114,7 @@ import { GetParticipantPruningScheduleResponse } from "../types/responses/get-pa
104
114
  import { GetParticipantIdResponse } from "../types/responses/get-participant-id-response.js";
105
115
  import { GetParticipantStatusResponse } from "../types/responses/get-participant-status-response.js";
106
116
  import { GetPartiesResponse } from "../types/responses/get-parties-response.js";
117
+ import { GenerateExternalPartyTopologyResponse } from "../types/responses/generate-external-party-topology-response.js";
107
118
  import { GetPruningScheduleResponse } from "../types/responses/get-pruning-schedule-response.js";
108
119
  import { GetResourceLimitsResponse } from "../types/responses/get-resource-limits-response.js";
109
120
  import { GetSafePruningOffsetResponse } from "../types/responses/get-safe-pruning-offset-response.js";
@@ -116,8 +127,16 @@ import { GetActiveContractsPageResponse } from "../types/responses/get-active-co
116
127
  import { GetLedgerApiVersionResponse } from "../types/responses/get-ledger-api-version-response.js";
117
128
  import { GetUpdatesPageResponse } from "../types/responses/get-updates-page-response.js";
118
129
  import { GetUserResponse } from "../types/responses/get-user-response.js";
130
+ import { AddTopologyTransactionsResponse } from "../types/responses/add-topology-transactions-response.js";
131
+ import { AllocateExternalPartyResponse } from "../types/responses/allocate-external-party-response.js";
132
+ import { AuthorizeTopologyTransactionsResponse } from "../types/responses/authorize-topology-transactions-response.js";
133
+ import { CreateTemporaryTopologyStoreResponse } from "../types/responses/create-temporary-topology-store-response.js";
134
+ import { DropTemporaryTopologyStoreResponse } from "../types/responses/drop-temporary-topology-store-response.js";
135
+ import { GenerateTopologyTransactionsResponse } from "../types/responses/generate-topology-transactions-response.js";
119
136
  import { GrantUserRightsResponse } from "../types/responses/grant-user-rights-response.js";
120
137
  import { HealthCheckResponse } from "../types/responses/health-check-response.js";
138
+ import { ImportTopologySnapshotResponse } from "../types/responses/import-topology-snapshot-response.js";
139
+ import { ImportTopologySnapshotV2Response } from "../types/responses/import-topology-snapshot-v2-response.js";
121
140
  import { ListAllResponse } from "../types/responses/list-all-response.js";
122
141
  import { ListAllV2Response } from "../types/responses/list-all-v2-response.js";
123
142
  import { ListAvailableStoresResponse } from "../types/responses/list-available-stores-response.js";
@@ -150,6 +169,7 @@ import { LookupReceivedAcsCommitmentsResponse } from "../types/responses/lookup-
150
169
  import { LookupSentAcsCommitmentsResponse } from "../types/responses/lookup-sent-acs-commitments-response.js";
151
170
  import { LookupOffsetByTimeResponse } from "../types/responses/lookup-offset-by-time-response.js";
152
171
  import { OpenCommitmentResponse } from "../types/responses/open-commitment-response.js";
172
+ import { SignTopologyTransactionsResponse } from "../types/responses/sign-topology-transactions-response.js";
153
173
  import { TopologyListPartiesResponse } from "../types/responses/topology-list-parties-response.js";
154
174
  import { ListVettedPackagesResponse } from "../types/responses/list-vetted-packages-response.js";
155
175
  import { TopologyListVettedPackagesResponse } from "../types/responses/topology-list-vetted-packages-response.js";
@@ -174,6 +194,10 @@ export interface ITransport {
174
194
  checkHealthAsync(request: HealthCheckRequest, options?: RequestOptions): Promise<HealthCheckResponse>;
175
195
  /** Allocates a party. Supported on JSON and gRPC. */
176
196
  allocatePartyAsync(request: AllocatePartyRequest, options?: RequestOptions): Promise<AllocatePartyResponse>;
197
+ /** Generates external-party topology through the ledger-admin API. Supported on gRPC; JSON rejects it. */
198
+ generateExternalPartyTopologyAsync(request: GenerateExternalPartyTopologyRequest, options?: RequestOptions): Promise<GenerateExternalPartyTopologyResponse>;
199
+ /** Allocates an external party through the ledger-admin API. Supported on gRPC; JSON rejects it. */
200
+ allocateExternalPartyAsync(request: AllocateExternalPartyRequest, options?: RequestOptions): Promise<AllocateExternalPartyResponse>;
177
201
  /** Lists known parties. Supported on JSON and gRPC. */
178
202
  listKnownPartiesAsync(request: ListKnownPartiesRequest, options?: RequestOptions): Promise<ListKnownPartiesResponse>;
179
203
  /** Reads the host participant identifier. Supported on gRPC; JSON rejects it. */
@@ -278,6 +302,22 @@ export interface ITransport {
278
302
  listSynchronizerTrustCertificateAsync(request: ListSynchronizerTrustCertificateRequest, options?: RequestOptions): Promise<ListSynchronizerTrustCertificateResponse>;
279
303
  /** Reads participant synchronizer permissions. Supported on gRPC; JSON rejects it. */
280
304
  listParticipantSynchronizerPermissionAsync(request: ListParticipantSynchronizerPermissionRequest, options?: RequestOptions): Promise<ListParticipantSynchronizerPermissionResponse>;
305
+ /** Authorizes topology transactions. Supported on gRPC; JSON rejects it. */
306
+ authorizeTopologyTransactionsAsync(request: AuthorizeTopologyTransactionsRequest, options?: RequestOptions): Promise<AuthorizeTopologyTransactionsResponse>;
307
+ /** Adds topology transactions to a topology store. Supported on gRPC; JSON rejects it. */
308
+ addTopologyTransactionsAsync(request: AddTopologyTransactionsRequest, options?: RequestOptions): Promise<AddTopologyTransactionsResponse>;
309
+ /** Imports a serialized topology snapshot. Supported on gRPC; JSON rejects it. */
310
+ importTopologySnapshotAsync(request: ImportTopologySnapshotRequest, options?: RequestOptions): Promise<ImportTopologySnapshotResponse>;
311
+ /** Imports a serialized topology snapshot using the V2 RPC. Supported on gRPC; JSON rejects it. */
312
+ importTopologySnapshotV2Async(request: ImportTopologySnapshotV2Request, options?: RequestOptions): Promise<ImportTopologySnapshotV2Response>;
313
+ /** Adds local signatures to topology transactions. Supported on gRPC; JSON rejects it. */
314
+ signTopologyTransactionsAsync(request: SignTopologyTransactionsRequest, options?: RequestOptions): Promise<SignTopologyTransactionsResponse>;
315
+ /** Generates topology transactions from raw proposals. Supported on gRPC; JSON rejects it. */
316
+ generateTopologyTransactionsAsync(request: GenerateTopologyTransactionsRequest, options?: RequestOptions): Promise<GenerateTopologyTransactionsResponse>;
317
+ /** Creates a temporary topology store. Supported on gRPC; JSON rejects it. */
318
+ createTemporaryTopologyStoreAsync(request: CreateTemporaryTopologyStoreRequest, options?: RequestOptions): Promise<CreateTemporaryTopologyStoreResponse>;
319
+ /** Drops a temporary topology store. Supported on gRPC; JSON rejects it. */
320
+ dropTemporaryTopologyStoreAsync(request: DropTemporaryTopologyStoreRequest, options?: RequestOptions): Promise<DropTemporaryTopologyStoreResponse>;
281
321
  /** Reads party hosting limits. Supported on gRPC; JSON rejects it. */
282
322
  listPartyHostingLimitsAsync(request: ListPartyHostingLimitsRequest, options?: RequestOptions): Promise<ListPartyHostingLimitsResponse>;
283
323
  /** Reads topology vetted packages. Supported on gRPC; JSON rejects it. */
@@ -0,0 +1,6 @@
1
+ export declare enum ExternalPartyCryptoKeyFormat {
2
+ unspecified = "unspecified",
3
+ der = "der",
4
+ raw = "raw",
5
+ derX509SubjectPublicKeyInfo = "derX509SubjectPublicKeyInfo"
6
+ }
@@ -0,0 +1,7 @@
1
+ export var ExternalPartyCryptoKeyFormat;
2
+ (function (ExternalPartyCryptoKeyFormat) {
3
+ ExternalPartyCryptoKeyFormat["unspecified"] = "unspecified";
4
+ ExternalPartyCryptoKeyFormat["der"] = "der";
5
+ ExternalPartyCryptoKeyFormat["raw"] = "raw";
6
+ ExternalPartyCryptoKeyFormat["derX509SubjectPublicKeyInfo"] = "derX509SubjectPublicKeyInfo";
7
+ })(ExternalPartyCryptoKeyFormat || (ExternalPartyCryptoKeyFormat = {}));
@@ -0,0 +1,9 @@
1
+ import { ExternalPartySignature } from "./external-party-signature.js";
2
+ export declare class ExternalPartyOnboardingTransaction {
3
+ readonly transaction: Uint8Array;
4
+ readonly signatures: ExternalPartySignature[];
5
+ constructor(init?: {
6
+ transaction?: Uint8Array;
7
+ signatures?: ExternalPartySignature[];
8
+ });
9
+ }
@@ -0,0 +1,8 @@
1
+ export class ExternalPartyOnboardingTransaction {
2
+ transaction;
3
+ signatures;
4
+ constructor(init = {}) {
5
+ this.transaction = new Uint8Array(init.transaction ?? []);
6
+ this.signatures = [...(init.signatures ?? [])];
7
+ }
8
+ }
@@ -0,0 +1,7 @@
1
+ export declare enum ExternalPartySignatureFormat {
2
+ unspecified = "unspecified",
3
+ raw = "raw",
4
+ der = "der",
5
+ concat = "concat",
6
+ symbolic = "symbolic"
7
+ }
@@ -0,0 +1,8 @@
1
+ export var ExternalPartySignatureFormat;
2
+ (function (ExternalPartySignatureFormat) {
3
+ ExternalPartySignatureFormat["unspecified"] = "unspecified";
4
+ ExternalPartySignatureFormat["raw"] = "raw";
5
+ ExternalPartySignatureFormat["der"] = "der";
6
+ ExternalPartySignatureFormat["concat"] = "concat";
7
+ ExternalPartySignatureFormat["symbolic"] = "symbolic";
8
+ })(ExternalPartySignatureFormat || (ExternalPartySignatureFormat = {}));
@@ -0,0 +1,14 @@
1
+ import { ExternalPartySignatureFormat } from "./external-party-signature-format.js";
2
+ import { ExternalPartySigningAlgorithmSpec } from "./external-party-signing-algorithm-spec.js";
3
+ export declare class ExternalPartySignature {
4
+ readonly format: ExternalPartySignatureFormat;
5
+ readonly signature: Uint8Array;
6
+ readonly signedByFingerprint: string;
7
+ readonly signingAlgorithmSpec: ExternalPartySigningAlgorithmSpec;
8
+ constructor(init?: {
9
+ format?: ExternalPartySignatureFormat;
10
+ signature?: Uint8Array;
11
+ signedByFingerprint?: string;
12
+ signingAlgorithmSpec?: ExternalPartySigningAlgorithmSpec;
13
+ });
14
+ }
@@ -0,0 +1,16 @@
1
+ import { ExternalPartySignatureFormat } from "./external-party-signature-format.js";
2
+ import { ExternalPartySigningAlgorithmSpec } from "./external-party-signing-algorithm-spec.js";
3
+ export class ExternalPartySignature {
4
+ format;
5
+ signature;
6
+ signedByFingerprint;
7
+ signingAlgorithmSpec;
8
+ constructor(init = {}) {
9
+ this.format = init.format ?? ExternalPartySignatureFormat.unspecified;
10
+ this.signature = new Uint8Array(init.signature ?? []);
11
+ this.signedByFingerprint = init.signedByFingerprint ?? "";
12
+ this.signingAlgorithmSpec =
13
+ init.signingAlgorithmSpec
14
+ ?? ExternalPartySigningAlgorithmSpec.unspecified;
15
+ }
16
+ }
@@ -0,0 +1,7 @@
1
+ export declare enum ExternalPartySigningAlgorithmSpec {
2
+ unspecified = "unspecified",
3
+ ed25519 = "ed25519",
4
+ ecDsaSha256 = "ecDsaSha256",
5
+ ecDsaSha384 = "ecDsaSha384",
6
+ mlDsa65 = "mlDsa65"
7
+ }
@@ -0,0 +1,8 @@
1
+ export var ExternalPartySigningAlgorithmSpec;
2
+ (function (ExternalPartySigningAlgorithmSpec) {
3
+ ExternalPartySigningAlgorithmSpec["unspecified"] = "unspecified";
4
+ ExternalPartySigningAlgorithmSpec["ed25519"] = "ed25519";
5
+ ExternalPartySigningAlgorithmSpec["ecDsaSha256"] = "ecDsaSha256";
6
+ ExternalPartySigningAlgorithmSpec["ecDsaSha384"] = "ecDsaSha384";
7
+ ExternalPartySigningAlgorithmSpec["mlDsa65"] = "mlDsa65";
8
+ })(ExternalPartySigningAlgorithmSpec || (ExternalPartySigningAlgorithmSpec = {}));
@@ -0,0 +1,8 @@
1
+ export declare enum ExternalPartySigningKeySpec {
2
+ unspecified = "unspecified",
3
+ ecCurve25519 = "ecCurve25519",
4
+ ecP256 = "ecP256",
5
+ ecP384 = "ecP384",
6
+ ecSecp256k1 = "ecSecp256k1",
7
+ mlDsa65 = "mlDsa65"
8
+ }
@@ -0,0 +1,9 @@
1
+ export var ExternalPartySigningKeySpec;
2
+ (function (ExternalPartySigningKeySpec) {
3
+ ExternalPartySigningKeySpec["unspecified"] = "unspecified";
4
+ ExternalPartySigningKeySpec["ecCurve25519"] = "ecCurve25519";
5
+ ExternalPartySigningKeySpec["ecP256"] = "ecP256";
6
+ ExternalPartySigningKeySpec["ecP384"] = "ecP384";
7
+ ExternalPartySigningKeySpec["ecSecp256k1"] = "ecSecp256k1";
8
+ ExternalPartySigningKeySpec["mlDsa65"] = "mlDsa65";
9
+ })(ExternalPartySigningKeySpec || (ExternalPartySigningKeySpec = {}));
@@ -0,0 +1,12 @@
1
+ import { ExternalPartyCryptoKeyFormat } from "./external-party-crypto-key-format.js";
2
+ import { ExternalPartySigningKeySpec } from "./external-party-signing-key-spec.js";
3
+ export declare class ExternalPartySigningPublicKey {
4
+ readonly format: ExternalPartyCryptoKeyFormat;
5
+ readonly keyData: Uint8Array;
6
+ readonly keySpec: ExternalPartySigningKeySpec;
7
+ constructor(init?: {
8
+ format?: ExternalPartyCryptoKeyFormat;
9
+ keyData?: Uint8Array;
10
+ keySpec?: ExternalPartySigningKeySpec;
11
+ });
12
+ }
@@ -0,0 +1,12 @@
1
+ import { ExternalPartyCryptoKeyFormat } from "./external-party-crypto-key-format.js";
2
+ import { ExternalPartySigningKeySpec } from "./external-party-signing-key-spec.js";
3
+ export class ExternalPartySigningPublicKey {
4
+ format;
5
+ keyData;
6
+ keySpec;
7
+ constructor(init = {}) {
8
+ this.format = init.format ?? ExternalPartyCryptoKeyFormat.unspecified;
9
+ this.keyData = new Uint8Array(init.keyData ?? []);
10
+ this.keySpec = init.keySpec ?? ExternalPartySigningKeySpec.unspecified;
11
+ }
12
+ }
@@ -0,0 +1,16 @@
1
+ import { SignedTopologyTransaction } from "../topology/signed-topology-transaction.js";
2
+ import { TopologyDuration } from "../topology/topology-duration.js";
3
+ import { TopologyForceFlag } from "../topology/topology-force-flag.js";
4
+ import { TopologyStoreId } from "../topology/topology-store-id.js";
5
+ export declare class AddTopologyTransactionsRequest {
6
+ readonly transactions: SignedTopologyTransaction[];
7
+ readonly forceChanges: TopologyForceFlag[];
8
+ readonly store?: TopologyStoreId;
9
+ readonly waitToBecomeEffective?: TopologyDuration;
10
+ constructor(init?: {
11
+ transactions?: SignedTopologyTransaction[];
12
+ forceChanges?: TopologyForceFlag[];
13
+ store?: TopologyStoreId;
14
+ waitToBecomeEffective?: TopologyDuration;
15
+ });
16
+ }
@@ -0,0 +1,12 @@
1
+ export class AddTopologyTransactionsRequest {
2
+ transactions;
3
+ forceChanges;
4
+ store;
5
+ waitToBecomeEffective;
6
+ constructor(init = {}) {
7
+ this.transactions = [...(init.transactions ?? [])];
8
+ this.forceChanges = [...(init.forceChanges ?? [])];
9
+ this.store = init.store;
10
+ this.waitToBecomeEffective = init.waitToBecomeEffective;
11
+ }
12
+ }
@@ -0,0 +1,18 @@
1
+ import { ExternalPartyOnboardingTransaction } from "../external-party/external-party-onboarding-transaction.js";
2
+ import { ExternalPartySignature } from "../external-party/external-party-signature.js";
3
+ export declare class AllocateExternalPartyRequest {
4
+ readonly synchronizer: string;
5
+ readonly onboardingTransactions: ExternalPartyOnboardingTransaction[];
6
+ readonly multiHashSignatures: ExternalPartySignature[];
7
+ readonly identityProviderId?: string;
8
+ readonly waitForAllocation?: boolean;
9
+ readonly userId?: string;
10
+ constructor(init?: {
11
+ synchronizer?: string;
12
+ onboardingTransactions?: ExternalPartyOnboardingTransaction[];
13
+ multiHashSignatures?: ExternalPartySignature[];
14
+ identityProviderId?: string;
15
+ waitForAllocation?: boolean;
16
+ userId?: string;
17
+ });
18
+ }
@@ -0,0 +1,16 @@
1
+ export class AllocateExternalPartyRequest {
2
+ synchronizer;
3
+ onboardingTransactions;
4
+ multiHashSignatures;
5
+ identityProviderId;
6
+ waitForAllocation;
7
+ userId;
8
+ constructor(init = {}) {
9
+ this.synchronizer = init.synchronizer ?? "";
10
+ this.onboardingTransactions = [...(init.onboardingTransactions ?? [])];
11
+ this.multiHashSignatures = [...(init.multiHashSignatures ?? [])];
12
+ this.identityProviderId = init.identityProviderId;
13
+ this.waitForAllocation = init.waitForAllocation;
14
+ this.userId = init.userId;
15
+ }
16
+ }
@@ -0,0 +1,10 @@
1
+ import { ExternalTopologySignature } from "../topology/external-topology-signature.js";
2
+ import { PreparedTopologyTransaction } from "../topology/prepared-topology-transaction.js";
3
+ export declare class AssembleSignedTopologyTransactionsRequest {
4
+ readonly preparedTransactions: PreparedTopologyTransaction[];
5
+ readonly signatures: ExternalTopologySignature[];
6
+ constructor(init?: {
7
+ preparedTransactions?: PreparedTopologyTransaction[];
8
+ signatures?: ExternalTopologySignature[];
9
+ });
10
+ }