@distrohelena/canton-typescript-sdk 0.1.36 → 0.1.37

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 (99) hide show
  1. package/README.md +104 -34
  2. package/dist/cjs/core/types/requests/{submit-command-request.js → submit-commands-request.js} +10 -6
  3. package/dist/cjs/index.js +10 -8
  4. package/dist/cjs/query/canonical/in-memory-query-evaluator.js +291 -0
  5. package/dist/cjs/query/canonical/public-identity.js +41 -0
  6. package/dist/cjs/query/canonical/query-ast.js +2 -0
  7. package/dist/cjs/query/canonical/query-dataset.js +351 -0
  8. package/dist/cjs/query/canonical/query-normalizer.js +655 -0
  9. package/dist/cjs/query/canonical/query-schema.js +86 -0
  10. package/dist/cjs/query/canton-manager.js +14 -5
  11. package/dist/cjs/query/errors/query-snapshot-incomplete-error.js +19 -0
  12. package/dist/cjs/query/grpc/grpc-contract-cache.js +484 -0
  13. package/dist/cjs/query/grpc/grpc-package-relation-reader.js +218 -0
  14. package/dist/cjs/query/grpc/grpc-query-client.js +249 -0
  15. package/dist/cjs/query/grpc/grpc-query-snapshot-reader.js +238 -0
  16. package/dist/cjs/query/grpc/grpc-query-value-mapper.js +204 -0
  17. package/dist/cjs/query/grpc/grpc-relation-mapper.js +794 -0
  18. package/dist/cjs/query/pqs/pqs-query-client.js +151 -582
  19. package/dist/cjs/query/pqs/pqs-relational-sql-compiler.js +138 -95
  20. package/dist/cjs/query/pqs/pqs-result-shape.js +28 -0
  21. package/dist/cjs/query/pqs/pqs-schema-profile.js +49 -48
  22. package/dist/cjs/query/pqs/pqs-sql-compiler.js +343 -289
  23. package/dist/cjs/query/pqs/pqs-sql-syntax.js +10 -0
  24. package/dist/cjs/services/command/command-service-client.js +16 -3
  25. package/dist/cjs/services/commands/command-payload-builder.js +1 -1
  26. package/dist/cjs/services/commands/command-submission-pipeline.js +21 -6
  27. package/dist/cjs/testing/runtime/declarative-action-executor.js +3 -3
  28. package/dist/cjs/transports/grpc/grpc-transport.js +2 -2
  29. package/dist/cjs/transports/grpc/mappers/commands-mapper.js +6 -6
  30. package/dist/cjs/transports/grpc/mappers/interactive-command-mapper.js +1 -1
  31. package/dist/cjs/transports/json/json-transport.js +1 -1
  32. package/dist/cjs/transports/json/mappers/commands-mapper.js +3 -3
  33. package/dist/core/transports/transport.interface.d.ts +4 -4
  34. package/dist/core/types/prepared-command-submission.d.ts +3 -3
  35. package/dist/core/types/requests/{submit-command-request.d.ts → submit-commands-request.d.ts} +8 -4
  36. package/dist/core/types/requests/{submit-command-request.js → submit-commands-request.js} +8 -4
  37. package/dist/index.d.ts +5 -2
  38. package/dist/index.js +2 -1
  39. package/dist/query/canonical/in-memory-query-evaluator.d.ts +22 -0
  40. package/dist/query/canonical/in-memory-query-evaluator.js +287 -0
  41. package/dist/query/canonical/public-identity.d.ts +14 -0
  42. package/dist/query/canonical/public-identity.js +35 -0
  43. package/dist/query/canonical/query-ast.d.ts +104 -0
  44. package/dist/query/canonical/query-ast.js +1 -0
  45. package/dist/query/canonical/query-dataset.d.ts +63 -0
  46. package/dist/query/canonical/query-dataset.js +343 -0
  47. package/dist/query/canonical/query-normalizer.d.ts +10 -0
  48. package/dist/query/canonical/query-normalizer.js +646 -0
  49. package/dist/query/canonical/query-schema.d.ts +25 -0
  50. package/dist/query/canonical/query-schema.js +83 -0
  51. package/dist/query/canton-manager.js +14 -5
  52. package/dist/query/errors/query-snapshot-incomplete-error.d.ts +14 -0
  53. package/dist/query/errors/query-snapshot-incomplete-error.js +15 -0
  54. package/dist/query/grpc/grpc-contract-cache.d.ts +27 -0
  55. package/dist/query/grpc/grpc-contract-cache.js +479 -0
  56. package/dist/query/grpc/grpc-package-relation-reader.d.ts +43 -0
  57. package/dist/query/grpc/grpc-package-relation-reader.js +213 -0
  58. package/dist/query/grpc/grpc-query-client.d.ts +42 -0
  59. package/dist/query/grpc/grpc-query-client.js +245 -0
  60. package/dist/query/grpc/grpc-query-snapshot-reader.d.ts +33 -0
  61. package/dist/query/grpc/grpc-query-snapshot-reader.js +233 -0
  62. package/dist/query/grpc/grpc-query-value-mapper.d.ts +15 -0
  63. package/dist/query/grpc/grpc-query-value-mapper.js +195 -0
  64. package/dist/query/grpc/grpc-relation-mapper.d.ts +67 -0
  65. package/dist/query/grpc/grpc-relation-mapper.js +789 -0
  66. package/dist/query/pqs/pqs-query-client.d.ts +10 -20
  67. package/dist/query/pqs/pqs-query-client.js +154 -585
  68. package/dist/query/pqs/pqs-relational-sql-compiler.d.ts +9 -17
  69. package/dist/query/pqs/pqs-relational-sql-compiler.js +136 -95
  70. package/dist/query/pqs/pqs-result-shape.d.ts +25 -0
  71. package/dist/query/pqs/pqs-result-shape.js +25 -0
  72. package/dist/query/pqs/pqs-schema-profile.js +49 -48
  73. package/dist/query/pqs/pqs-sql-compiler.d.ts +18 -3
  74. package/dist/query/pqs/pqs-sql-compiler.js +337 -288
  75. package/dist/query/pqs/pqs-sql-syntax.d.ts +2 -0
  76. package/dist/query/pqs/pqs-sql-syntax.js +6 -0
  77. package/dist/query/query-client.d.ts +15 -0
  78. package/dist/services/command/command-service-client.d.ts +9 -4
  79. package/dist/services/command/command-service-client.js +16 -3
  80. package/dist/services/command-submission/command-submission-service-client.d.ts +2 -2
  81. package/dist/services/commands/command-payload-builder.d.ts +2 -2
  82. package/dist/services/commands/command-payload-builder.js +1 -1
  83. package/dist/services/commands/command-submission-pipeline.d.ts +5 -4
  84. package/dist/services/commands/command-submission-pipeline.js +21 -6
  85. package/dist/testing/runtime/declarative-action-executor.js +3 -3
  86. package/dist/transports/grpc/grpc-transport.d.ts +4 -4
  87. package/dist/transports/grpc/grpc-transport.js +3 -3
  88. package/dist/transports/grpc/mappers/commands-mapper.d.ts +3 -3
  89. package/dist/transports/grpc/mappers/commands-mapper.js +4 -4
  90. package/dist/transports/grpc/mappers/interactive-command-mapper.d.ts +3 -3
  91. package/dist/transports/grpc/mappers/interactive-command-mapper.js +1 -1
  92. package/dist/transports/json/json-transport.d.ts +2 -2
  93. package/dist/transports/json/json-transport.js +2 -2
  94. package/dist/transports/json/mappers/commands-mapper.d.ts +2 -2
  95. package/dist/transports/json/mappers/commands-mapper.js +2 -2
  96. package/package.json +4 -3
  97. package/dist/cjs/query/grpc/grpc-contract-query-client.js +0 -178
  98. package/dist/query/grpc/grpc-contract-query-client.d.ts +0 -33
  99. package/dist/query/grpc/grpc-contract-query-client.js +0 -174
@@ -1,33 +0,0 @@
1
- import { StateServiceClient } from "../../services/state/state-service-client.js";
2
- import { QueryCacheStore } from "../cache/query-cache-store.js";
3
- import { ContractCountArgs, ContractFindManyArgs, ContractFindUniqueArgs, ContractRow, JsonProjectionResult } from "../model-types.js";
4
- import { QueryClient } from "../query-client.js";
5
- import { QuerySource } from "../query-source.js";
6
- type ActiveContractsReader = Pick<StateServiceClient, "getActiveContractsPageAsync">;
7
- export declare class GrpcContractQueryClient implements QueryClient {
8
- private readonly stateService;
9
- private readonly cache;
10
- private readonly cacheTtlMs;
11
- private readonly cacheScope;
12
- readonly source = QuerySource.grpc;
13
- readonly contracts: {
14
- findMany: <TArgs extends ContractFindManyArgs>(args?: TArgs) => Promise<readonly (ContractRow & import("../model-types.js").ContractRelationRow & JsonProjectionResult<TArgs>)[]>;
15
- findUnique: <TArgs extends ContractFindUniqueArgs>(args: TArgs) => Promise<(ContractRow & import("../model-types.js").ContractRelationRow & JsonProjectionResult<TArgs>) | undefined>;
16
- count: (args?: ContractCountArgs) => Promise<number>;
17
- aggregate: () => Promise<never>;
18
- groupBy: () => Promise<never>;
19
- };
20
- readonly contractTypes: QueryClient["contractTypes"];
21
- readonly events: QueryClient["events"];
22
- readonly exercises: QueryClient["exercises"];
23
- readonly exerciseTypes: QueryClient["exerciseTypes"];
24
- readonly packages: QueryClient["packages"];
25
- readonly transactions: QueryClient["transactions"];
26
- readonly watermark: QueryClient["watermark"];
27
- constructor(stateService: ActiveContractsReader, cache: QueryCacheStore | undefined, cacheTtlMs: number | undefined, cacheScope: string);
28
- $queryRaw<TRow>(_sql: string, _values?: readonly unknown[]): Promise<readonly TRow[]>;
29
- private findManyAsync;
30
- private unsupported;
31
- private readSnapshotAsync;
32
- }
33
- export {};
@@ -1,174 +0,0 @@
1
- import { mapGrpcQueryContractsRequest } from "../../transports/grpc/mappers/contracts-mapper.js";
2
- import { QueryCapabilityError } from "../errors/query-capability-error.js";
3
- import { QuerySource } from "../query-source.js";
4
- export class GrpcContractQueryClient {
5
- stateService;
6
- cache;
7
- cacheTtlMs;
8
- cacheScope;
9
- source = QuerySource.grpc;
10
- contracts = {
11
- findMany: (args = {}) => this.findManyAsync(args).then((rows) => rows),
12
- findUnique: (args) => {
13
- if (args.select !== undefined || args.include !== undefined) {
14
- return Promise.reject(new QueryCapabilityError(QuerySource.grpc, "contracts.findUnique"));
15
- }
16
- return this.findManyAsync({ where: { contractId: { equals: args.where.contractId } } }).then((rows) => rows[0]);
17
- },
18
- count: async (args = {}) => (await this.findManyAsync(args)).length,
19
- aggregate: async () => {
20
- throw new QueryCapabilityError(QuerySource.grpc, "contracts.aggregate");
21
- },
22
- groupBy: async () => {
23
- throw new QueryCapabilityError(QuerySource.grpc, "contracts.groupBy");
24
- },
25
- };
26
- contractTypes = this.unsupported("contractTypes");
27
- events = this.unsupported("events");
28
- exercises = this.unsupported("exercises");
29
- exerciseTypes = this.unsupported("exerciseTypes");
30
- packages = this.unsupported("packages");
31
- transactions = this.unsupported("transactions");
32
- watermark = this.unsupported("watermark");
33
- constructor(stateService, cache, cacheTtlMs, cacheScope) {
34
- this.stateService = stateService;
35
- this.cache = cache;
36
- this.cacheTtlMs = cacheTtlMs;
37
- this.cacheScope = cacheScope;
38
- }
39
- async $queryRaw(_sql, _values = []) {
40
- throw new QueryCapabilityError(QuerySource.grpc, "query.$queryRaw");
41
- }
42
- async findManyAsync(args) {
43
- if (hasUnsupportedFilter(args.where) ||
44
- args.where?.active === false ||
45
- args.where?.packageId !== undefined ||
46
- args.where?.witnesses !== undefined ||
47
- args.where?.contractId?.in !== undefined ||
48
- args.where?.contractId?.is !== undefined ||
49
- args.where?.contractId?.isNot !== undefined ||
50
- args.where?.templateId !== undefined) {
51
- throw new QueryCapabilityError(QuerySource.grpc, "contracts.findMany");
52
- }
53
- const findArgs = args;
54
- if (findArgs.select !== undefined || findArgs.include !== undefined || findArgs.orderBy !== undefined || findArgs.skip !== undefined || findArgs.take !== undefined) {
55
- throw new QueryCapabilityError(QuerySource.grpc, "contracts.findMany");
56
- }
57
- const snapshot = await this.readSnapshotAsync(args.parties);
58
- let rows = snapshot.filter((row) => args.where?.contractId?.equals === undefined
59
- ? true
60
- : row.contractId === args.where.contractId.equals);
61
- if (args.where?.payload !== undefined) {
62
- rows = rows.filter((row) => matchesPayload(row.payload, args.where.payload));
63
- }
64
- return rows;
65
- }
66
- unsupported(operation) {
67
- return {
68
- findMany: async () => {
69
- throw new QueryCapabilityError(QuerySource.grpc, `${operation}.findMany`);
70
- },
71
- findUnique: async () => {
72
- throw new QueryCapabilityError(QuerySource.grpc, `${operation}.findUnique`);
73
- },
74
- count: async () => {
75
- throw new QueryCapabilityError(QuerySource.grpc, `${operation}.count`);
76
- },
77
- aggregate: async () => {
78
- throw new QueryCapabilityError(QuerySource.grpc, `${operation}.aggregate`);
79
- },
80
- groupBy: async () => {
81
- throw new QueryCapabilityError(QuerySource.grpc, `${operation}.groupBy`);
82
- },
83
- };
84
- }
85
- async readSnapshotAsync(parties) {
86
- const key = `${this.cacheScope}:${parties?.join(",") ?? "*"}`;
87
- const cached = this.cache === undefined ? undefined : await this.cache.getAsync(key);
88
- if (cached !== undefined) {
89
- return cached;
90
- }
91
- const rows = [];
92
- let pageToken;
93
- let activeAtOffset;
94
- do {
95
- const response = await this.stateService.getActiveContractsPageAsync(mapGrpcQueryContractsRequest(parties === undefined
96
- ? { allParties: true, activeAtOffset, pageToken }
97
- : { parties, activeAtOffset, pageToken }));
98
- activeAtOffset ??= response.activeAtOffset;
99
- pageToken = response.nextPageToken;
100
- rows.push(...response.activeContracts.map((response) => mapGrpcContract(response.contractEntry.oneofKind === "activeContract"
101
- ? response.contractEntry.activeContract
102
- : response)));
103
- } while (pageToken !== undefined && pageToken.length > 0);
104
- if (this.cache !== undefined && this.cacheTtlMs !== undefined) {
105
- await this.cache.setAsync(key, rows, this.cacheTtlMs);
106
- }
107
- return rows;
108
- }
109
- }
110
- function hasUnsupportedFilter(where) {
111
- if (where === undefined) {
112
- return false;
113
- }
114
- else if ("and" in where || "or" in where || "not" in where || "createdEventOffset" in where || "createdAt" in where || "archivedEventOffset" in where || "archivedAt" in where) {
115
- return true;
116
- }
117
- for (const field of ["contractId", "templateId"]) {
118
- const filter = where[field];
119
- if (filter !== undefined && Object.keys(filter).some((key) => key !== "equals")) {
120
- return true;
121
- }
122
- }
123
- return false;
124
- }
125
- function mapGrpcContract(value) {
126
- const row = value;
127
- const template = row.templateId;
128
- return {
129
- contractId: row.contractId ?? "",
130
- templateId: { packageId: template?.packageId ?? "", moduleName: template?.moduleName ?? "", entityName: template?.entityName ?? "" },
131
- packageId: null,
132
- payload: row.payload,
133
- witnesses: [],
134
- createdEventOffset: "",
135
- createdAt: null,
136
- archivedEventOffset: null,
137
- archivedAt: null,
138
- active: true,
139
- };
140
- }
141
- function matchesPayload(value, filter) {
142
- const match = filter.match;
143
- if (match === undefined) {
144
- return false;
145
- }
146
- const visit = (current, node) => Object.entries(node).every(([key, child]) => {
147
- const next = current !== null && typeof current === "object" ? current[key] : undefined;
148
- const predicate = child;
149
- if (Object.keys(predicate).some((name) => ["equals", "lt", "lte", "gt", "gte", "like", "ilike"].includes(name))) {
150
- return compare(String(next ?? ""), predicate);
151
- }
152
- return visit(next, predicate);
153
- });
154
- return visit(value, match);
155
- }
156
- function compare(value, filter) {
157
- if (filter.equals !== undefined) {
158
- return value === filter.equals;
159
- }
160
- else if (filter.like !== undefined || filter.ilike !== undefined) {
161
- const pattern = String(filter.like ?? filter.ilike).replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replaceAll("%", ".*").replaceAll("_", ".");
162
- return new RegExp(`^${pattern}$`, filter.ilike === undefined ? "" : "i").test(value);
163
- }
164
- else if (filter.lt !== undefined) {
165
- return value < String(filter.lt);
166
- }
167
- else if (filter.lte !== undefined) {
168
- return value <= String(filter.lte);
169
- }
170
- else if (filter.gt !== undefined) {
171
- return value > String(filter.gt);
172
- }
173
- return value >= String(filter.gte);
174
- }