@distrohelena/canton-typescript-sdk 0.1.36 → 0.1.38
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/README.md +143 -34
- package/dist/cjs/core/types/requests/{submit-command-request.js → submit-commands-request.js} +10 -6
- package/dist/cjs/index.js +10 -8
- package/dist/cjs/query/canonical/in-memory-query-evaluator.js +291 -0
- package/dist/cjs/query/canonical/public-identity.js +41 -0
- package/dist/cjs/query/canonical/query-ast.js +2 -0
- package/dist/cjs/query/canonical/query-dataset.js +351 -0
- package/dist/cjs/query/canonical/query-normalizer.js +657 -0
- package/dist/cjs/query/canonical/query-schema.js +86 -0
- package/dist/cjs/query/canton-manager.js +14 -5
- package/dist/cjs/query/errors/query-snapshot-incomplete-error.js +19 -0
- package/dist/cjs/query/grpc/grpc-contract-cache.js +484 -0
- package/dist/cjs/query/grpc/grpc-package-relation-reader.js +218 -0
- package/dist/cjs/query/grpc/grpc-query-client.js +249 -0
- package/dist/cjs/query/grpc/grpc-query-snapshot-reader.js +238 -0
- package/dist/cjs/query/grpc/grpc-query-value-mapper.js +204 -0
- package/dist/cjs/query/grpc/grpc-relation-mapper.js +794 -0
- package/dist/cjs/query/pqs/pqs-query-client.js +151 -582
- package/dist/cjs/query/pqs/pqs-relational-sql-compiler.js +138 -95
- package/dist/cjs/query/pqs/pqs-result-shape.js +28 -0
- package/dist/cjs/query/pqs/pqs-schema-profile.js +49 -48
- package/dist/cjs/query/pqs/pqs-sql-compiler.js +343 -289
- package/dist/cjs/query/pqs/pqs-sql-syntax.js +10 -0
- package/dist/cjs/services/command/command-service-client.js +16 -3
- package/dist/cjs/services/commands/command-payload-builder.js +1 -1
- package/dist/cjs/services/commands/command-submission-pipeline.js +21 -6
- package/dist/cjs/testing/runtime/declarative-action-executor.js +3 -3
- package/dist/cjs/transports/grpc/grpc-transport.js +2 -2
- package/dist/cjs/transports/grpc/mappers/commands-mapper.js +6 -6
- package/dist/cjs/transports/grpc/mappers/interactive-command-mapper.js +1 -1
- package/dist/cjs/transports/json/json-transport.js +1 -1
- package/dist/cjs/transports/json/mappers/commands-mapper.js +3 -3
- package/dist/core/transports/transport.interface.d.ts +4 -4
- package/dist/core/types/prepared-command-submission.d.ts +3 -3
- package/dist/core/types/requests/{submit-command-request.d.ts → submit-commands-request.d.ts} +8 -4
- package/dist/core/types/requests/{submit-command-request.js → submit-commands-request.js} +8 -4
- package/dist/index.d.ts +5 -2
- package/dist/index.js +2 -1
- package/dist/query/canonical/in-memory-query-evaluator.d.ts +22 -0
- package/dist/query/canonical/in-memory-query-evaluator.js +287 -0
- package/dist/query/canonical/public-identity.d.ts +14 -0
- package/dist/query/canonical/public-identity.js +35 -0
- package/dist/query/canonical/query-ast.d.ts +104 -0
- package/dist/query/canonical/query-ast.js +1 -0
- package/dist/query/canonical/query-dataset.d.ts +63 -0
- package/dist/query/canonical/query-dataset.js +343 -0
- package/dist/query/canonical/query-normalizer.d.ts +10 -0
- package/dist/query/canonical/query-normalizer.js +648 -0
- package/dist/query/canonical/query-schema.d.ts +25 -0
- package/dist/query/canonical/query-schema.js +83 -0
- package/dist/query/canton-manager.js +14 -5
- package/dist/query/errors/query-snapshot-incomplete-error.d.ts +14 -0
- package/dist/query/errors/query-snapshot-incomplete-error.js +15 -0
- package/dist/query/grpc/grpc-contract-cache.d.ts +27 -0
- package/dist/query/grpc/grpc-contract-cache.js +479 -0
- package/dist/query/grpc/grpc-package-relation-reader.d.ts +43 -0
- package/dist/query/grpc/grpc-package-relation-reader.js +213 -0
- package/dist/query/grpc/grpc-query-client.d.ts +42 -0
- package/dist/query/grpc/grpc-query-client.js +245 -0
- package/dist/query/grpc/grpc-query-snapshot-reader.d.ts +33 -0
- package/dist/query/grpc/grpc-query-snapshot-reader.js +233 -0
- package/dist/query/grpc/grpc-query-value-mapper.d.ts +15 -0
- package/dist/query/grpc/grpc-query-value-mapper.js +195 -0
- package/dist/query/grpc/grpc-relation-mapper.d.ts +67 -0
- package/dist/query/grpc/grpc-relation-mapper.js +789 -0
- package/dist/query/model-types.d.ts +2 -0
- package/dist/query/pqs/pqs-query-client.d.ts +10 -20
- package/dist/query/pqs/pqs-query-client.js +154 -585
- package/dist/query/pqs/pqs-relational-sql-compiler.d.ts +9 -17
- package/dist/query/pqs/pqs-relational-sql-compiler.js +136 -95
- package/dist/query/pqs/pqs-result-shape.d.ts +25 -0
- package/dist/query/pqs/pqs-result-shape.js +25 -0
- package/dist/query/pqs/pqs-schema-profile.js +49 -48
- package/dist/query/pqs/pqs-sql-compiler.d.ts +18 -3
- package/dist/query/pqs/pqs-sql-compiler.js +337 -288
- package/dist/query/pqs/pqs-sql-syntax.d.ts +2 -0
- package/dist/query/pqs/pqs-sql-syntax.js +6 -0
- package/dist/query/query-client.d.ts +16 -0
- package/dist/services/command/command-service-client.d.ts +9 -4
- package/dist/services/command/command-service-client.js +16 -3
- package/dist/services/command-submission/command-submission-service-client.d.ts +2 -2
- package/dist/services/commands/command-payload-builder.d.ts +2 -2
- package/dist/services/commands/command-payload-builder.js +1 -1
- package/dist/services/commands/command-submission-pipeline.d.ts +5 -4
- package/dist/services/commands/command-submission-pipeline.js +21 -6
- package/dist/testing/runtime/declarative-action-executor.js +3 -3
- package/dist/transports/grpc/grpc-transport.d.ts +4 -4
- package/dist/transports/grpc/grpc-transport.js +3 -3
- package/dist/transports/grpc/mappers/commands-mapper.d.ts +3 -3
- package/dist/transports/grpc/mappers/commands-mapper.js +4 -4
- package/dist/transports/grpc/mappers/interactive-command-mapper.d.ts +3 -3
- package/dist/transports/grpc/mappers/interactive-command-mapper.js +1 -1
- package/dist/transports/json/json-transport.d.ts +2 -2
- package/dist/transports/json/json-transport.js +2 -2
- package/dist/transports/json/mappers/commands-mapper.d.ts +2 -2
- package/dist/transports/json/mappers/commands-mapper.js +2 -2
- package/node/start-local-splice-0.6.12.sh +6 -0
- package/node/start-local-splice-0.6.13.sh +6 -0
- package/node/start-local-splice-0.6.14.sh +6 -0
- package/node/start-local-splice-0.7.0.sh +6 -0
- package/node/stop-local-splice-0.6.12.sh +6 -0
- package/node/stop-local-splice-0.6.13.sh +6 -0
- package/node/stop-local-splice-0.6.14.sh +6 -0
- package/node/stop-local-splice-0.7.0.sh +6 -0
- package/node/test-start-local-splice-0.6.12.sh +28 -0
- package/node/test-start-local-splice-0.6.13.sh +28 -0
- package/node/test-start-local-splice-0.6.14.sh +28 -0
- package/node/test-start-local-splice-0.7.0.sh +28 -0
- package/node/test-stop-local-splice-0.6.12.sh +28 -0
- package/node/test-stop-local-splice-0.6.13.sh +28 -0
- package/node/test-stop-local-splice-0.6.14.sh +28 -0
- package/node/test-stop-local-splice-0.7.0.sh +28 -0
- package/package.json +29 -4
- package/dist/cjs/query/grpc/grpc-contract-query-client.js +0 -178
- package/dist/query/grpc/grpc-contract-query-client.d.ts +0 -33
- package/dist/query/grpc/grpc-contract-query-client.js +0 -174
package/README.md
CHANGED
|
@@ -132,7 +132,7 @@ npm run example:topology:party-hosting
|
|
|
132
132
|
|
|
133
133
|
### Workflow examples
|
|
134
134
|
|
|
135
|
-
The
|
|
135
|
+
The eight stateful workflow examples are standalone proofs, not a sequence:
|
|
136
136
|
each uploads or verifies the fixture DAR, resolves a party, reads the
|
|
137
137
|
participant status, and creates its own run-scoped data. First make a Canton
|
|
138
138
|
participant available and verify the source with `npm run examples:check`; the
|
|
@@ -149,14 +149,33 @@ npm run example:workflow:command-completion
|
|
|
149
149
|
npm run example:workflow:contract-lifecycle-audit
|
|
150
150
|
npm run example:workflow:update-lookup-reconciliation
|
|
151
151
|
npm run example:workflow:pruning-preflight
|
|
152
|
+
npm run example:workflow:participant-local
|
|
152
153
|
```
|
|
153
154
|
|
|
154
|
-
Those
|
|
155
|
+
Those eight established stateful workflows intentionally leave durable state behind. A missing `SDK_EXAMPLE_PARTY`
|
|
155
156
|
causes fallback party allocation, which creates durable topology state; every
|
|
156
157
|
one also creates durable contracts. Set `SDK_EXAMPLE_PARTY` to an existing
|
|
157
158
|
party to rerun the established workflows against that party and avoid fallback
|
|
158
159
|
allocation. The fixture DAR remains installed after a run.
|
|
159
160
|
|
|
161
|
+
The participant-local command-submission workflow
|
|
162
|
+
(`npm run example:workflow:participant-local`) is a standalone gRPC-only proof
|
|
163
|
+
of the ordinary participant submission authorization route. It uses the normal
|
|
164
|
+
`SDK_EXAMPLE_*` endpoint, authentication, party, and timeout configuration:
|
|
165
|
+
`SDK_EXAMPLE_LEDGER_ENDPOINT`, `SDK_EXAMPLE_LEDGER_ADMIN_ENDPOINT`,
|
|
166
|
+
`SDK_EXAMPLE_PARTICIPANT_ADMIN_ENDPOINT`, `SDK_EXAMPLE_BEARER_TOKEN`,
|
|
167
|
+
`SDK_EXAMPLE_LEDGER_BEARER_TOKEN`, `SDK_EXAMPLE_LEDGER_ADMIN_BEARER_TOKEN`,
|
|
168
|
+
`SDK_EXAMPLE_PARTICIPANT_ADMIN_BEARER_TOKEN`, `SDK_EXAMPLE_PARTY`,
|
|
169
|
+
`SDK_EXAMPLE_PARTY_PREFIX`, `SDK_EXAMPLE_TIMEOUT_MS`, and
|
|
170
|
+
`SDK_EXAMPLE_TLS_ROOT_CERTIFICATE`. It configures a command signer that throws
|
|
171
|
+
if touched, then successfully creates and finds one exact active Message through
|
|
172
|
+
`commandService.submitParticipantLocalAndWaitAsync`; that success proves the
|
|
173
|
+
configured external signer was bypassed. An explicit party is reused, while
|
|
174
|
+
fallback allocation creates durable topology; the fixture upload leaves a
|
|
175
|
+
durable DAR and the proof leaves a durable contract. The unchanged
|
|
176
|
+
implementation uses the common compatibility path on Participant 3.5.7 and
|
|
177
|
+
the isolated Participant 3.5.8 sidecar.
|
|
178
|
+
|
|
160
179
|
The completion-correlation workflow (`npm run example:workflow:command-completion`)
|
|
161
180
|
is a standalone successful proof that creates durable Message state. It uses the
|
|
162
181
|
same normal `SDK_EXAMPLE_*` configuration: `SDK_EXAMPLE_LEDGER_ENDPOINT`,
|
|
@@ -185,16 +204,17 @@ The update-lookup reconciliation workflow (`npm run example:workflow:update-look
|
|
|
185
204
|
|
|
186
205
|
The pruning-preflight workflow (`npm run example:workflow:pruning-preflight`) is a standalone gRPC-only, read-only operator check. It requires `SDK_EXAMPLE_OFFSET` to be a canonical positive decimal integer and uses the normal endpoint, authentication, and timeout variables: `SDK_EXAMPLE_LEDGER_ENDPOINT`, `SDK_EXAMPLE_LEDGER_ADMIN_ENDPOINT`, `SDK_EXAMPLE_PARTICIPANT_ADMIN_ENDPOINT`, `SDK_EXAMPLE_BEARER_TOKEN`, `SDK_EXAMPLE_LEDGER_BEARER_TOKEN`, `SDK_EXAMPLE_LEDGER_ADMIN_BEARER_TOKEN`, `SDK_EXAMPLE_PARTICIPANT_ADMIN_BEARER_TOKEN`, and `SDK_EXAMPLE_TIMEOUT_MS`. The participant-admin credential is required for the schedule and safe-pruning context reads. Its safe-pruning context request sends the saved ledger end and a validated current timestamp encoded in `beforeOrAt`; it leaves commitment-state absent. It does not mutate the participant or create durable state: no party, DAR, command, update query, schedule change, or pruning request is made. The later participant watermark classifies the supplied offset as `alreadyPruned`, `beyondLedgerEnd`, or `notObservedPruned`; all-divulged watermarks and schedule/safe-pruning context are reported separately and do not alter that result. `notObservedPruned` is not proven queryable, because pruning can race after the later observation and other query preconditions can still fail. The unchanged implementation is supported on Participant 3.5.7 and the isolated Participant 3.5.8 sidecar.
|
|
187
206
|
|
|
188
|
-
Each of the
|
|
207
|
+
Each of the eight established stateful workflows prints its actor plus the full participant version returned by the
|
|
189
208
|
authenticated status API, its parsed release core, and its selected path:
|
|
190
209
|
`Participant version:`, `Release core:`, and `Compatibility path:`. The current
|
|
191
210
|
stateful-workflow implementation uses one common-code path for release cores 3.5.7 and 3.5.8. It
|
|
192
211
|
adds a version-specific behavioral difference only after live evidence proves
|
|
193
212
|
one; it does not infer compatibility from a container tag or endpoint.
|
|
194
213
|
|
|
195
|
-
- `example:workflow:atomic` first proves that
|
|
196
|
-
|
|
197
|
-
and
|
|
214
|
+
- `example:workflow:atomic` first proves that a two-command batch with an
|
|
215
|
+
invalid second command is rejected without creating its valid first Message,
|
|
216
|
+
then proves that two independent creates commit atomically and remain active
|
|
217
|
+
with their exact payloads.
|
|
198
218
|
- `example:workflow:retry` submits a caller-controlled command ID with a
|
|
199
219
|
deduplication duration, retries the exact same request, classifies the
|
|
200
220
|
duplicate outcome, and proves that exactly one matching contract is active.
|
|
@@ -212,7 +232,7 @@ request and is not a retry proof. The resume example treats the saved offset as
|
|
|
212
232
|
exclusive, so its resumed stream must observe only updates after the saved
|
|
213
233
|
ledger end.
|
|
214
234
|
|
|
215
|
-
The
|
|
235
|
+
The eight established stateful workflow sources and unit contracts were developed
|
|
216
236
|
and live-tested against authenticated Participant 3.5.7 and the isolated
|
|
217
237
|
Participant 3.5.8. Both final-tree matrices selected the same unchanged implementation and common
|
|
218
238
|
compatibility path. The normalized outcome comparison is identical: atomic
|
|
@@ -220,7 +240,7 @@ reports `invalidChoice` before its replacement proof, retry reports
|
|
|
220
240
|
`duplicateCommand` with one active contract, resume reports `idle-timeout` and
|
|
221
241
|
a post-offset update, and stale-contract reports `staleContract`.
|
|
222
242
|
|
|
223
|
-
For those
|
|
243
|
+
For those eight established stateful workflows, the best multi-version path reads the authenticated full version, parses its
|
|
224
244
|
release core, and uses data-only structured compatibility for observed
|
|
225
245
|
outcomes. A behavioral difference is introduced only after live proof; it is
|
|
226
246
|
never inferred from a container tag, endpoint, or prose error message. For the
|
|
@@ -349,6 +369,45 @@ localnet and is never part of the normal test suite:
|
|
|
349
369
|
PARTICIPANT_358_SMOKE_TEST=1 npm run test:participant-358-sidecar-smoke
|
|
350
370
|
```
|
|
351
371
|
|
|
372
|
+
### Optional Splice image overrides
|
|
373
|
+
|
|
374
|
+
`canton-localnet-start` normally launches the Canton and Splice images pinned
|
|
375
|
+
by the CN Quickstart checkout's own `.env` (`SPLICE_VERSION`). To exercise the
|
|
376
|
+
SDK against a different Splice release instead, without editing that
|
|
377
|
+
checkout, use one of:
|
|
378
|
+
|
|
379
|
+
```bash
|
|
380
|
+
canton-localnet-splice-0.7.0-start
|
|
381
|
+
canton-localnet-splice-0.7.0-stop
|
|
382
|
+
|
|
383
|
+
canton-localnet-splice-0.6.14-start
|
|
384
|
+
canton-localnet-splice-0.6.14-stop
|
|
385
|
+
|
|
386
|
+
canton-localnet-splice-0.6.13-start
|
|
387
|
+
canton-localnet-splice-0.6.13-stop
|
|
388
|
+
|
|
389
|
+
canton-localnet-splice-0.6.12-start
|
|
390
|
+
canton-localnet-splice-0.6.12-stop
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
These are thin wrappers around the normal launchers that default `IMAGE_TAG`
|
|
394
|
+
to `0.7.0`, `0.6.14`, `0.6.13`, or `0.6.12` respectively before delegating to
|
|
395
|
+
them; every other launcher option (extra participants, ES256, TLS,
|
|
396
|
+
`AUTH_MODE`) still applies. Set `IMAGE_TAG` yourself beforehand to target a
|
|
397
|
+
different version through the same wrappers.
|
|
398
|
+
|
|
399
|
+
`npm run test:live` (with `EXTRA_PARTICIPANTS=4`) has been run against each of
|
|
400
|
+
`0.7.0`, `0.6.14`, `0.6.13`, and `0.6.12` and passes on all four. Two
|
|
401
|
+
intermittent failures were observed and are environment-timing issues
|
|
402
|
+
unrelated to the Splice version under test: a PQS/scribe first-boot ingestion
|
|
403
|
+
race (`live-query-parity`, self-resolves on retry) and a dedicated
|
|
404
|
+
participant needing the domain's ACS reconciliation interval to elapse before
|
|
405
|
+
a safe pruning point exists (`live-query-pruning`). Separately, Splice 0.7.0
|
|
406
|
+
ships a Canton participant reporting Ledger API version `3.5.11`, which the
|
|
407
|
+
workflow examples' compatibility guard (`examples/shared/workflow-compatibility.ts`)
|
|
408
|
+
does not yet accept (it allows only `3.5.7`/`3.5.8`); those examples fail
|
|
409
|
+
against the `0.7.0` launcher until that guard is updated.
|
|
410
|
+
|
|
352
411
|
### Optional ES256 bearer tokens
|
|
353
412
|
|
|
354
413
|
Set `LOCALNET_ES256_JWT=1` when starting the localnet to add ES256 JWT
|
|
@@ -682,53 +741,103 @@ signature format and algorithm. This convenience operation is gRPC-only.
|
|
|
682
741
|
|
|
683
742
|
## Canton Manager queries
|
|
684
743
|
|
|
685
|
-
`CantonManager` keeps gRPC as the write path and selects
|
|
686
|
-
at initialization.
|
|
687
|
-
|
|
744
|
+
`CantonManager` keeps gRPC as the write path and selects one typed-query source
|
|
745
|
+
at initialization. The same typed query function works with either gRPC or
|
|
746
|
+
PQS; source selection changes how the data is read, not the query grammar.
|
|
688
747
|
|
|
689
748
|
```ts
|
|
690
749
|
import {
|
|
750
|
+
CantonClientOptions,
|
|
691
751
|
CantonManager,
|
|
752
|
+
CreateCommand,
|
|
753
|
+
DamlRecord,
|
|
692
754
|
MemoryQueryCache,
|
|
693
755
|
QuerySource,
|
|
756
|
+
SubmitCommandsRequest,
|
|
694
757
|
TransportKind,
|
|
695
758
|
} from "@distrohelena/canton-typescript-sdk";
|
|
696
759
|
|
|
697
|
-
const
|
|
698
|
-
grpc: {
|
|
699
|
-
|
|
760
|
+
const options = {
|
|
761
|
+
grpc: new CantonClientOptions({
|
|
762
|
+
transportKind: TransportKind.grpc,
|
|
763
|
+
ledgerEndpoint: "localhost:6865",
|
|
764
|
+
}),
|
|
700
765
|
pqs: { connectionString: process.env.PQS_URL!, schema: "public" },
|
|
701
766
|
cache: { store: new MemoryQueryCache(), ttlMs: 5_000 },
|
|
702
|
-
}
|
|
767
|
+
};
|
|
703
768
|
|
|
704
|
-
const
|
|
705
|
-
where: { templateId: { equals: "
|
|
769
|
+
const readIous = (manager: CantonManager) => manager.query.contracts.findMany({
|
|
770
|
+
where: { templateId: { moduleName: { equals: "Main" }, entityName: { equals: "Iou" } } },
|
|
771
|
+
orderBy: [{ createdAt: "desc" }],
|
|
706
772
|
take: 50,
|
|
707
773
|
});
|
|
708
774
|
|
|
709
|
-
|
|
710
|
-
|
|
775
|
+
const pqsManager = new CantonManager({ ...options, querySource: QuerySource.pqs });
|
|
776
|
+
const grpcManager = new CantonManager({ ...options, querySource: QuerySource.grpc });
|
|
777
|
+
const pqsContracts = await readIous(pqsManager);
|
|
778
|
+
const grpcContracts = await readIous(grpcManager);
|
|
779
|
+
|
|
780
|
+
// gRPC caching is explicit and point-in-time; ordinary reads never populate it.
|
|
781
|
+
await grpcManager.query.cacheContracts({ parties: ["Alice"] });
|
|
782
|
+
await grpcManager.query.invalidateContractsCache({ parties: ["Alice"] });
|
|
783
|
+
|
|
784
|
+
// A SubmitCommandsRequest contains a non-empty ordered atomic command batch:
|
|
785
|
+
// all commands commit together, or none of them do.
|
|
786
|
+
await grpcManager.grpc.commandService.submitAndWaitAsync(
|
|
787
|
+
new SubmitCommandsRequest({
|
|
788
|
+
applicationId: "example-app",
|
|
789
|
+
actAs: ["Alice"],
|
|
790
|
+
commands: [
|
|
791
|
+
new CreateCommand({
|
|
792
|
+
templateId: { packageId: "", moduleName: "Main", entityName: "Message" },
|
|
793
|
+
createArguments: new DamlRecord({ author: "Alice", body: "Hello" }),
|
|
794
|
+
}),
|
|
795
|
+
],
|
|
796
|
+
}),
|
|
797
|
+
);
|
|
798
|
+
await Promise.all([pqsManager.disposeAsync(), grpcManager.disposeAsync()]);
|
|
711
799
|
```
|
|
712
800
|
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
801
|
+
To migrate a prior singleton submission, pass `commands: [previousCommand]`.
|
|
802
|
+
There is no compatibility alias; put multiple independent commands in that
|
|
803
|
+
array in their required atomic order.
|
|
804
|
+
|
|
805
|
+
An options object may contain both `grpc` and `pqs`; the PQS setting is used
|
|
806
|
+
only when `querySource` is `pqs`. Both sources expose `contracts`,
|
|
807
|
+
`contractTypes`, `events`, `exercises`, `exerciseTypes`, `packages`,
|
|
808
|
+
`transactions`, and `watermark`, including filters, includes, ordering,
|
|
809
|
+
pagination, projections, grouping, and aggregates. Literal parity requires
|
|
810
|
+
PQS and gRPC to observe the same participant-visible data; independently
|
|
811
|
+
configured participants can legitimately see different contracts.
|
|
812
|
+
|
|
813
|
+
`cacheContracts` is a gRPC-only explicit prewarm of active contracts for one
|
|
814
|
+
party scope. It needs a cache store and a positive TTL; reads may use a valid
|
|
815
|
+
entry but never renew it. A cached gRPC result is internally consistent at its
|
|
816
|
+
`activeAtOffset`, so it can be stale until expiry, refresh, or
|
|
817
|
+
`invalidateContractsCache`. Under PQS the same lifecycle calls are safe no-ops
|
|
818
|
+
and `cacheContracts` returns `{ source: QuerySource.pqs, cached: false }`.
|
|
819
|
+
|
|
820
|
+
Typed-query `pk`/`ix` values are canonical and source-independent. Transaction
|
|
821
|
+
and watermark keys are ledger offsets; event, package, contract-type, and
|
|
822
|
+
exercise-type keys are lossless positive-decimal encodings of their stable
|
|
823
|
+
semantic identities. PQS physical keys are retained only for internal joins.
|
|
824
|
+
If pruning has removed history needed by a gRPC typed query, it rejects with
|
|
825
|
+
`QuerySnapshotIncompleteError` rather than returning partial rows, groups, or
|
|
826
|
+
aggregates.
|
|
827
|
+
|
|
828
|
+
Raw SQL is the sole PQS-only query operation: use
|
|
829
|
+
`pqsManager.query.$queryRaw(...)` for one read-only statement with positional
|
|
830
|
+
parameters and a read-only PostgreSQL role. `$queryRaw` on a gRPC manager
|
|
831
|
+
rejects with `QueryCapabilityError`.
|
|
832
|
+
|
|
833
|
+
The typed relation delegates use a Prisma-like surface: `findMany({ where,
|
|
724
834
|
select, orderBy, skip, take })`, `findUnique({ where, select })`, `count`, and
|
|
725
835
|
`aggregate({ count, min, max, sum })`. Filters support `equals`, `in`,
|
|
726
836
|
`{ is: null }`, `{ isNot: null }`, and `{ has: party }` on array fields.
|
|
727
|
-
Ordering accepts one
|
|
837
|
+
Ordering accepts an ordered list of one-field entries, so multi-field ordering
|
|
838
|
+
uses `[{ createdAt: "desc" }, { contractId: "asc" }]`. `exercises` intentionally has no `findUnique`
|
|
728
839
|
because the v1 PQS profile does not declare a stable key. The manager validates
|
|
729
|
-
the selected PQS schema profile before its first query.
|
|
730
|
-
active-contract `findMany`, `findUnique`, and `count` subset is available;
|
|
731
|
-
unsupported query features reject with `QueryCapabilityError`.
|
|
840
|
+
the selected PQS schema profile before its first PQS query.
|
|
732
841
|
|
|
733
842
|
- Ledger endpoint:
|
|
734
843
|
- `versionService.getLedgerApiVersionAsync(...)`: `json`, `grpc`
|
package/dist/cjs/core/types/requests/{submit-command-request.js → submit-commands-request.js}
RENAMED
|
@@ -1,22 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.SubmitCommandsRequest = void 0;
|
|
4
4
|
const validation_error_js_1 = require("../../errors/validation-error.js");
|
|
5
5
|
const ledgerStringPattern = /^[A-Za-z0-9#:\-_/ ]+$/;
|
|
6
6
|
const canonicalOffsetPattern = /^(0|[1-9][0-9]*)$/;
|
|
7
7
|
const maximumInt64Offset = "9223372036854775807";
|
|
8
|
-
class
|
|
8
|
+
class SubmitCommandsRequest {
|
|
9
9
|
applicationId;
|
|
10
10
|
userId;
|
|
11
11
|
actAs;
|
|
12
12
|
readAs;
|
|
13
|
-
|
|
13
|
+
commands;
|
|
14
14
|
commandId;
|
|
15
15
|
deduplicationPeriod;
|
|
16
16
|
disclosedContracts;
|
|
17
17
|
synchronizerId;
|
|
18
18
|
constructor(init) {
|
|
19
|
-
|
|
19
|
+
const commands = init.commands;
|
|
20
|
+
if (!Array.isArray(commands) || commands.length === 0) {
|
|
21
|
+
throw new validation_error_js_1.ValidationError("submit requests require at least one command");
|
|
22
|
+
}
|
|
23
|
+
else if (init.actAs.length === 0) {
|
|
20
24
|
throw new validation_error_js_1.ValidationError("submit requests require at least one actAs party");
|
|
21
25
|
}
|
|
22
26
|
else if (init.commandId !== undefined &&
|
|
@@ -30,14 +34,14 @@ class SubmitCommandRequest {
|
|
|
30
34
|
this.userId = init.userId;
|
|
31
35
|
this.actAs = init.actAs;
|
|
32
36
|
this.readAs = init.readAs ?? [];
|
|
33
|
-
this.
|
|
37
|
+
this.commands = Object.freeze([...commands]);
|
|
34
38
|
this.commandId = init.commandId;
|
|
35
39
|
this.deduplicationPeriod = deduplicationPeriod;
|
|
36
40
|
this.disclosedContracts = init.disclosedContracts ?? [];
|
|
37
41
|
this.synchronizerId = init.synchronizerId;
|
|
38
42
|
}
|
|
39
43
|
}
|
|
40
|
-
exports.
|
|
44
|
+
exports.SubmitCommandsRequest = SubmitCommandsRequest;
|
|
41
45
|
function freezeDeduplicationPeriod(value) {
|
|
42
46
|
if (value === undefined) {
|
|
43
47
|
return undefined;
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
5
|
-
exports.
|
|
6
|
-
exports.
|
|
7
|
-
exports.
|
|
8
|
-
exports.EndpointNotConfiguredError = exports.ObjectDisposedError = exports.NotSupportedError = exports.ConflictError = exports.TimeoutError = exports.SigningError = exports.GrpcTransportError = exports.TransportError = exports.AuthorizationError = exports.AuthenticationError = exports.ActiveContractsTraversalError = exports.ValidationError = exports.CantonError = exports.SynchronizerTime = exports.ParticipantNodeStatus = exports.PartyDetails = exports.UploadDarFileResponse = exports.GrantUserRightsResponse = exports.SubmitCommandResponse = exports.TopologyListPartiesResponse = exports.TopologyListVettedPackagesResponse = exports.ListVettedPackagesResponse = exports.ListUsersResponse = exports.ListUserRightsResponse = exports.ListSynchronizerTrustCertificateResponse = exports.ListSynchronizerParametersStateResponse = exports.ListSequencingParametersStateResponse = exports.ListSequencerSynchronizerStateResponse = exports.ListPartyToParticipantResponse = exports.ListPartyToKeyMappingResponse = exports.ListPartyHostingLimitsResponse = exports.ListParticipantSynchronizerPermissionResponse = exports.ListKeyOwnersResponse = exports.ListKnownPartiesResponse = exports.ListKnownPackagesResponse = exports.ListIdentityProviderConfigsResponse = exports.ListDarsResponse = exports.ListPackagesResponse = exports.ListOwnerToKeyMappingResponse = exports.ListNamespaceDelegationResponse = exports.ListMediatorSynchronizerStateResponse = exports.ListLsuSequencerConnectionSuccessorResponse = exports.ListLsuAnnouncementResponse = void 0;
|
|
3
|
+
exports.ExternalPartySignatureFormat = exports.ExternalPartySignature = exports.ExternalPartyOnboardingTransaction = exports.ExternalPartyCryptoKeyFormat = exports.TransportKind = exports.TransportCapability = exports.SignCommandResult = exports.SignCommandRequest = exports.BearerTokenAuthProvider = exports.SynchronizerConnectivityServiceClient = exports.VersionServiceClient = exports.UserManagementServiceClient = exports.UpdateServiceClient = exports.TrafficControlServiceClient = exports.TopologyManagerWriteServiceClient = exports.TopologyManagerReadServiceClient = exports.TopologyAggregationServiceClient = exports.StateServiceClient = exports.ResourceManagementServiceClient = exports.PruningServiceClient = exports.PartyManagementServiceClient = exports.ParticipantStatusServiceClient = exports.ParticipantRepairServiceClient = exports.ParticipantPackageServiceClient = exports.ParticipantPartyManagementServiceClient = exports.ParticipantInspectionServiceClient = exports.PackageServiceClient = exports.PackageManagementServiceClient = exports.IdentityProviderConfigServiceClient = exports.IdentityInitializationServiceClient = exports.HealthServiceClient = exports.EventQueryServiceClient = exports.ContractServiceClient = exports.CommandSubmissionServiceClient = exports.CommandServiceClient = exports.CommandInspectionServiceClient = exports.CommandCompletionServiceClient = exports.ExternalPartyActivationResponse = exports.ExternalPartyActivationRequest = exports.ExternalPartyActivationClient = exports.CantonClientOptions = exports.CantonHashingClient = exports.PqsSchemaProfileError = exports.PqsQueryError = exports.QuerySnapshotIncompleteError = exports.QueryCapabilityError = exports.MemoryQueryCache = exports.QuerySource = exports.CantonManager = exports.CantonClient = void 0;
|
|
4
|
+
exports.PackageReference = exports.PackageMetadataFilter = exports.ActiveContractsTraversalOptions = exports.OperationDeadline = exports.RequestOptions = exports.ReceivedAcsCommitmentState = exports.ReceivedAcsCommitmentPerSynchronizer = exports.ReceivedAcsCommitment = exports.PruningSchedule = exports.ParticipantPruningSchedule = exports.PendingOperationMetadata = exports.PackageStatus = exports.CantonHashPurpose = exports.HashFunction = exports.PackageFormat = exports.OffsetCheckpoint = exports.ObjectMeta = exports.LedgerUser = exports.KnownPackageDetails = exports.IdentityProviderConfig = exports.UserRightKind = exports.EventStreamKind = exports.DamlParty = exports.DamlNumeric = exports.ContractCreated = exports.ContractArchived = exports.CounterParticipantInfo = exports.CommitmentTimeRange = exports.CommitmentInterval = exports.Completion = exports.CommandUpdateSummary = exports.CommandTiming = exports.CommandStatus = exports.CommandState = exports.CommandRequestStatistics = exports.CommandInspectionContract = exports.ConnectedSynchronizerStatus = exports.ConnectedSynchronizer = exports.ConnectedSynchronizerHealth = exports.AdminTopologyQueueStatus = exports.AdminNotInitializedStatus = exports.AdminNotInitializedExternalInputKind = exports.AdminNodeStatus = exports.AdminComponentStatus = exports.AdminComponentHealthKind = exports.SubmissionMode = exports.GrpcChannelSecurity = exports.ExternalPartySigningPublicKey = exports.ExternalPartySigningKeySpec = exports.ExternalPartySigningAlgorithmSpec = void 0;
|
|
5
|
+
exports.TopologyPublicKey = exports.TopologyPartyResult = exports.TopologyPartyParticipantSynchronizerPermission = exports.TopologyPartyParticipant = exports.TopologyMappingResult = exports.TopologyMappingOperation = exports.TopologyMappingCode = exports.TopologyKeyOwnerResult = exports.MultiTopologyTransactionSignature = exports.GeneratedTopologyTransaction = exports.TopologyEncryptionPublicKey = exports.ExternalTopologySignature = exports.TopologyDuration = exports.TopologyBaseResult = exports.TopologyBaseQuery = exports.SynchronizerTrustCertificate = exports.SequencerSynchronizerState = exports.PartyToParticipantParticipant = exports.PartyToParticipantOnboarding = exports.PartyToParticipant = exports.PartyToKeyMapping = exports.PartyHostingLimits = exports.ParticipantSynchronizerPermission = exports.ParticipantSynchronizerLimits = exports.ParticipantPermission = exports.OwnerToKeyMapping = exports.OnboardingRestriction = exports.NamespaceDelegationRestrictionKind = exports.NamespaceDelegationRestriction = exports.NamespaceDelegation = exports.MediatorSynchronizerState = exports.LsuSequencerConnectionSuccessor = exports.LsuSequencerConnection = exports.LsuAnnouncement = exports.DynamicSynchronizerParameters = exports.DynamicSequencingParameters = exports.DecentralizedNamespaceDefinition = exports.AcsCommitmentsCatchUpConfig = exports.WaitCommitmentsSetup = exports.TopologyStateFilter = exports.SynchronizerTimeRange = exports.SlowCounterParticipantSynchronizerConfig = exports.SentAcsCommitmentState = exports.SentAcsCommitmentPerSynchronizer = exports.SentAcsCommitment = exports.SdkCommand = exports.SafeToPruneCommitmentState = exports.ParticipantPackageDescription = exports.ParticipantModuleDescription = exports.ParticipantDarDescription = void 0;
|
|
6
|
+
exports.ListAllRequest = exports.ListPackagesRequest = exports.GetCommandStatusRequest = exports.GetActiveContractsRequest = exports.GetActiveContractsPageRequest = exports.GetDarRequest = exports.GetDarContentsRequest = exports.AssembleSignedTopologyTransactionsRequest = exports.SubmitCommandTransactionResponse = exports.DamlRecord = exports.DamlEnum = exports.DamlVariant = exports.DamlGenMap = exports.DamlTextMap = exports.DamlTimestamp = exports.DamlDate = exports.DamlUnit = exports.DamlContractId = exports.PreparedCommandSubmission = exports.DisclosedContract = exports.AllocatePartyRequest = exports.CreateExternalPartyRequest = exports.PreparedDecentralizedParty = exports.FinalizeDecentralizedPartyRequest = exports.CreateDecentralizedPartyRequest = exports.ExerciseCommand = exports.ExerciseByKeyCommand = exports.CreateCommand = exports.CreateAndExerciseCommand = exports.SignedTopologyTransaction = exports.PreparedTopologyTransaction = exports.VettedPackages = exports.VettedPackage = exports.TrafficControlParameters = exports.TopologyVettedPackages = exports.TopologyVettedPackage = exports.TopologyTransactions = exports.TopologyTransactionItem = exports.TopologyTransactionSignature = exports.TopologyTimeRange = exports.TopologyStoreTemporary = exports.TopologyStoreSynchronizer = exports.TopologyStoreKind = exports.TopologyStoreId = exports.TopologyStoreAuthorized = exports.TopologySigningPublicKey = exports.TopologySigningKeysWithThreshold = exports.TopologySignatureFormat = exports.TopologySignatureDelegation = exports.TopologyForceFlag = void 0;
|
|
7
|
+
exports.ListAllResponse = exports.GetUserResponse = exports.GetPartiesResponse = exports.GetPackageStatusResponse = exports.GetPackageResponse = exports.GetLedgerEndResponse = exports.GetLatestPrunedOffsetsResponse = exports.GetIdentityProviderConfigResponse = exports.GetCommandStatusResponse = exports.GetConnectedSynchronizersResponse = exports.GetActiveContractsPageResponse = exports.GetDarResponse = exports.GetDarContentsResponse = exports.AllocatePartyResponse = exports.UploadDarFileRequest = exports.GrantUserRightsRequest = exports.WaitForPartyHostingRequest = exports.TopologyListPartiesRequest = exports.SubmitCommandsRequest = exports.ListUsersRequest = exports.ListUserRightsRequest = exports.ListKeyOwnersRequest = exports.ListIdentityProviderConfigsRequest = exports.ListDarsRequest = exports.ListKnownPackagesRequest = exports.ListKnownPartiesRequest = exports.TopologyListVettedPackagesRequest = exports.ListSynchronizerTrustCertificateRequest = exports.ListSynchronizerParametersStateRequest = exports.ListSequencingParametersStateRequest = exports.ListSequencerSynchronizerStateRequest = exports.ListPartyToParticipantRequest = exports.ListPartyToKeyMappingRequest = exports.ListVettedPackagesRequest = exports.ListPartyHostingLimitsRequest = exports.ListParticipantSynchronizerPermissionRequest = exports.ListOwnerToKeyMappingRequest = exports.ListNamespaceDelegationRequest = exports.ListMediatorSynchronizerStateRequest = exports.ListLsuSequencerConnectionSuccessorRequest = exports.ListLsuAnnouncementRequest = exports.GetUserRequest = exports.GetPartiesRequest = exports.GetLedgerEndRequest = exports.GetLatestPrunedOffsetsRequest = exports.GetConnectedSynchronizersRequest = exports.GetPackageStatusRequest = exports.GetPackageRequest = exports.GetIdentityProviderConfigRequest = exports.ListDecentralizedNamespaceDefinitionRequest = void 0;
|
|
8
|
+
exports.EndpointNotConfiguredError = exports.ObjectDisposedError = exports.NotSupportedError = exports.ConflictError = exports.TimeoutError = exports.SigningError = exports.GrpcTransportError = exports.TransportError = exports.AuthorizationError = exports.AuthenticationError = exports.ActiveContractsTraversalError = exports.ValidationError = exports.CantonError = exports.SynchronizerTime = exports.ParticipantNodeStatus = exports.PartyDetails = exports.UploadDarFileResponse = exports.GrantUserRightsResponse = exports.SubmitCommandResponse = exports.TopologyListPartiesResponse = exports.TopologyListVettedPackagesResponse = exports.ListVettedPackagesResponse = exports.ListUsersResponse = exports.ListUserRightsResponse = exports.ListSynchronizerTrustCertificateResponse = exports.ListSynchronizerParametersStateResponse = exports.ListSequencingParametersStateResponse = exports.ListSequencerSynchronizerStateResponse = exports.ListPartyToParticipantResponse = exports.ListPartyToKeyMappingResponse = exports.ListPartyHostingLimitsResponse = exports.ListParticipantSynchronizerPermissionResponse = exports.ListKeyOwnersResponse = exports.ListKnownPartiesResponse = exports.ListKnownPackagesResponse = exports.ListIdentityProviderConfigsResponse = exports.ListDarsResponse = exports.ListPackagesResponse = exports.ListOwnerToKeyMappingResponse = exports.ListNamespaceDelegationResponse = exports.ListMediatorSynchronizerStateResponse = exports.ListLsuSequencerConnectionSuccessorResponse = exports.ListLsuAnnouncementResponse = exports.ListDecentralizedNamespaceDefinitionResponse = void 0;
|
|
9
9
|
var canton_client_js_1 = require("./client/canton-client.js");
|
|
10
10
|
Object.defineProperty(exports, "CantonClient", { enumerable: true, get: function () { return canton_client_js_1.CantonClient; } });
|
|
11
11
|
var canton_manager_js_1 = require("./query/canton-manager.js");
|
|
@@ -16,6 +16,8 @@ var memory_query_cache_js_1 = require("./query/cache/memory-query-cache.js");
|
|
|
16
16
|
Object.defineProperty(exports, "MemoryQueryCache", { enumerable: true, get: function () { return memory_query_cache_js_1.MemoryQueryCache; } });
|
|
17
17
|
var query_capability_error_js_1 = require("./query/errors/query-capability-error.js");
|
|
18
18
|
Object.defineProperty(exports, "QueryCapabilityError", { enumerable: true, get: function () { return query_capability_error_js_1.QueryCapabilityError; } });
|
|
19
|
+
var query_snapshot_incomplete_error_js_1 = require("./query/errors/query-snapshot-incomplete-error.js");
|
|
20
|
+
Object.defineProperty(exports, "QuerySnapshotIncompleteError", { enumerable: true, get: function () { return query_snapshot_incomplete_error_js_1.QuerySnapshotIncompleteError; } });
|
|
19
21
|
var pqs_query_error_js_1 = require("./query/errors/pqs-query-error.js");
|
|
20
22
|
Object.defineProperty(exports, "PqsQueryError", { enumerable: true, get: function () { return pqs_query_error_js_1.PqsQueryError; } });
|
|
21
23
|
var pqs_schema_profile_error_js_1 = require("./query/errors/pqs-schema-profile-error.js");
|
|
@@ -458,8 +460,8 @@ var list_user_rights_request_js_1 = require("./core/types/requests/list-user-rig
|
|
|
458
460
|
Object.defineProperty(exports, "ListUserRightsRequest", { enumerable: true, get: function () { return list_user_rights_request_js_1.ListUserRightsRequest; } });
|
|
459
461
|
var list_users_request_js_1 = require("./core/types/requests/list-users-request.js");
|
|
460
462
|
Object.defineProperty(exports, "ListUsersRequest", { enumerable: true, get: function () { return list_users_request_js_1.ListUsersRequest; } });
|
|
461
|
-
var
|
|
462
|
-
Object.defineProperty(exports, "
|
|
463
|
+
var submit_commands_request_js_1 = require("./core/types/requests/submit-commands-request.js");
|
|
464
|
+
Object.defineProperty(exports, "SubmitCommandsRequest", { enumerable: true, get: function () { return submit_commands_request_js_1.SubmitCommandsRequest; } });
|
|
463
465
|
var topology_list_parties_request_js_1 = require("./core/types/requests/topology-list-parties-request.js");
|
|
464
466
|
Object.defineProperty(exports, "TopologyListPartiesRequest", { enumerable: true, get: function () { return topology_list_parties_request_js_1.TopologyListPartiesRequest; } });
|
|
465
467
|
var wait_for_party_hosting_request_js_1 = require("./core/types/requests/wait-for-party-hosting-request.js");
|