@distrohelena/canton-typescript-sdk 0.1.16 → 0.1.18

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 (76) hide show
  1. package/README.md +43 -0
  2. package/dist/client/canton-client-options.d.ts +2 -0
  3. package/dist/client/canton-client-options.js +2 -0
  4. package/dist/client/external-party-activation-client.js +34 -20
  5. package/dist/client/external-party-activation-response.d.ts +1 -1
  6. package/dist/core/transports/transport.interface.d.ts +16 -22
  7. package/dist/debugger/replay/ledger-replay-environment-builder.js +1 -1
  8. package/dist/index.d.ts +1 -19
  9. package/dist/index.js +0 -18
  10. package/dist/protobuf/index.d.ts +4075 -0
  11. package/dist/query/grpc/grpc-contract-query-client.d.ts +4 -3
  12. package/dist/query/grpc/grpc-contract-query-client.js +12 -4
  13. package/dist/query/model-types.d.ts +232 -14
  14. package/dist/query/model-types.js +2 -2
  15. package/dist/query/pqs/pqs-query-client.d.ts +14 -3
  16. package/dist/query/pqs/pqs-query-client.js +381 -25
  17. package/dist/query/pqs/pqs-relational-sql-compiler.d.ts +23 -0
  18. package/dist/query/pqs/pqs-relational-sql-compiler.js +146 -0
  19. package/dist/query/pqs/pqs-schema-profile.d.ts +10 -0
  20. package/dist/query/pqs/pqs-schema-profile.js +46 -0
  21. package/dist/query/pqs/pqs-sql-compiler.d.ts +2 -1
  22. package/dist/query/pqs/pqs-sql-compiler.js +212 -10
  23. package/dist/query/query-client.d.ts +20 -16
  24. package/dist/services/party-management/decentralized-party-lifecycle.js +96 -18
  25. package/dist/services/party-management/party-management-service-client.d.ts +2 -2
  26. package/dist/services/party-management/party-management-service-client.js +34 -9
  27. package/dist/services/topology-manager-write/topology-manager-write-service-client.d.ts +5 -16
  28. package/dist/transports/grpc/grpc-call-options-factory.d.ts +1 -1
  29. package/dist/transports/grpc/grpc-call-options-factory.js +8 -4
  30. package/dist/transports/grpc/grpc-channel-factory.js +13 -8
  31. package/dist/transports/grpc/grpc-transport.d.ts +9 -9
  32. package/dist/transports/grpc/grpc-transport.js +12 -13
  33. package/dist/transports/grpc/mappers/topology-common-mapper.d.ts +5 -1
  34. package/dist/transports/grpc/mappers/topology-common-mapper.js +17 -0
  35. package/dist/transports/json/json-transport.d.ts +18 -16
  36. package/node/start-local.sh +197 -2
  37. package/node/stop-local.sh +25 -1
  38. package/node/test-start-local.sh +101 -4
  39. package/node/test-stop-local.sh +8 -1
  40. package/package.json +1 -1
  41. package/dist/core/types/requests/add-topology-transactions-request.d.ts +0 -16
  42. package/dist/core/types/requests/add-topology-transactions-request.js +0 -12
  43. package/dist/core/types/requests/allocate-external-party-request.d.ts +0 -18
  44. package/dist/core/types/requests/allocate-external-party-request.js +0 -16
  45. package/dist/core/types/requests/authorize-topology-transactions-request.d.ts +0 -37
  46. package/dist/core/types/requests/authorize-topology-transactions-request.js +0 -35
  47. package/dist/core/types/requests/generate-external-party-topology-request.d.ts +0 -19
  48. package/dist/core/types/requests/generate-external-party-topology-request.js +0 -21
  49. package/dist/core/types/requests/generate-topology-transactions-request.d.ts +0 -26
  50. package/dist/core/types/requests/generate-topology-transactions-request.js +0 -22
  51. package/dist/core/types/requests/import-topology-snapshot-request.d.ts +0 -12
  52. package/dist/core/types/requests/import-topology-snapshot-request.js +0 -10
  53. package/dist/core/types/requests/import-topology-snapshot-v2-request.d.ts +0 -12
  54. package/dist/core/types/requests/import-topology-snapshot-v2-request.js +0 -10
  55. package/dist/core/types/requests/sign-topology-transactions-request.d.ts +0 -15
  56. package/dist/core/types/requests/sign-topology-transactions-request.js +0 -12
  57. package/dist/core/types/responses/add-topology-transactions-response.d.ts +0 -3
  58. package/dist/core/types/responses/add-topology-transactions-response.js +0 -5
  59. package/dist/core/types/responses/allocate-external-party-response.d.ts +0 -6
  60. package/dist/core/types/responses/allocate-external-party-response.js +0 -6
  61. package/dist/core/types/responses/authorize-topology-transactions-response.d.ts +0 -7
  62. package/dist/core/types/responses/authorize-topology-transactions-response.js +0 -6
  63. package/dist/core/types/responses/generate-external-party-topology-response.d.ts +0 -12
  64. package/dist/core/types/responses/generate-external-party-topology-response.js +0 -12
  65. package/dist/core/types/responses/generate-topology-transactions-response.d.ts +0 -7
  66. package/dist/core/types/responses/generate-topology-transactions-response.js +0 -6
  67. package/dist/core/types/responses/import-topology-snapshot-response.d.ts +0 -3
  68. package/dist/core/types/responses/import-topology-snapshot-response.js +0 -5
  69. package/dist/core/types/responses/import-topology-snapshot-v2-response.d.ts +0 -3
  70. package/dist/core/types/responses/import-topology-snapshot-v2-response.js +0 -5
  71. package/dist/core/types/responses/sign-topology-transactions-response.d.ts +0 -7
  72. package/dist/core/types/responses/sign-topology-transactions-response.js +0 -6
  73. package/dist/transports/grpc/mappers/external-party-management-mapper.d.ts +0 -9
  74. package/dist/transports/grpc/mappers/external-party-management-mapper.js +0 -126
  75. package/dist/transports/grpc/mappers/topology-manager-write-mapper.d.ts +0 -25
  76. package/dist/transports/grpc/mappers/topology-manager-write-mapper.js +0 -475
@@ -1,6 +1,6 @@
1
1
  import { StateServiceClient } from "../../services/state/state-service-client.js";
2
2
  import { QueryCacheStore } from "../cache/query-cache-store.js";
3
- import { ContractCountArgs, ContractFindManyArgs, ContractFindUniqueArgs, ContractRow } from "../model-types.js";
3
+ import { ContractCountArgs, ContractFindManyArgs, ContractFindUniqueArgs, ContractRow, JsonProjectionResult } from "../model-types.js";
4
4
  import { QueryClient } from "../query-client.js";
5
5
  import { QuerySource } from "../query-source.js";
6
6
  type ActiveContractsReader = Pick<StateServiceClient, "getActiveContractsPageAsync">;
@@ -11,10 +11,11 @@ export declare class GrpcContractQueryClient implements QueryClient {
11
11
  private readonly cacheScope;
12
12
  readonly source = QuerySource.grpc;
13
13
  readonly contracts: {
14
- findMany: (args?: ContractFindManyArgs) => Promise<readonly ContractRow[]>;
15
- findUnique: (args: ContractFindUniqueArgs) => Promise<ContractRow>;
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
16
  count: (args?: ContractCountArgs) => Promise<number>;
17
17
  aggregate: () => Promise<never>;
18
+ groupBy: () => Promise<never>;
18
19
  };
19
20
  readonly contractTypes: QueryClient["contractTypes"];
20
21
  readonly events: QueryClient["events"];
@@ -8,9 +8,9 @@ export class GrpcContractQueryClient {
8
8
  cacheScope;
9
9
  source = QuerySource.grpc;
10
10
  contracts = {
11
- findMany: (args = {}) => this.findManyAsync(args),
11
+ findMany: (args = {}) => this.findManyAsync(args).then((rows) => rows),
12
12
  findUnique: (args) => {
13
- if (args.select !== undefined) {
13
+ if (args.select !== undefined || args.include !== undefined) {
14
14
  return Promise.reject(new QueryCapabilityError(QuerySource.grpc, "contracts.findUnique"));
15
15
  }
16
16
  return this.findManyAsync({ where: { contractId: { equals: args.where.contractId } } }).then((rows) => rows[0]);
@@ -19,6 +19,9 @@ export class GrpcContractQueryClient {
19
19
  aggregate: async () => {
20
20
  throw new QueryCapabilityError(QuerySource.grpc, "contracts.aggregate");
21
21
  },
22
+ groupBy: async () => {
23
+ throw new QueryCapabilityError(QuerySource.grpc, "contracts.groupBy");
24
+ },
22
25
  };
23
26
  contractTypes = this.unsupported("contractTypes");
24
27
  events = this.unsupported("events");
@@ -48,7 +51,7 @@ export class GrpcContractQueryClient {
48
51
  throw new QueryCapabilityError(QuerySource.grpc, "contracts.findMany");
49
52
  }
50
53
  const findArgs = args;
51
- if (findArgs.select !== undefined || findArgs.orderBy !== undefined || findArgs.skip !== undefined || findArgs.take !== undefined) {
54
+ if (findArgs.select !== undefined || findArgs.include !== undefined || findArgs.orderBy !== undefined || findArgs.skip !== undefined || findArgs.take !== undefined) {
52
55
  throw new QueryCapabilityError(QuerySource.grpc, "contracts.findMany");
53
56
  }
54
57
  const snapshot = await this.readSnapshotAsync(args.parties);
@@ -73,6 +76,9 @@ export class GrpcContractQueryClient {
73
76
  aggregate: async () => {
74
77
  throw new QueryCapabilityError(QuerySource.grpc, `${operation}.aggregate`);
75
78
  },
79
+ groupBy: async () => {
80
+ throw new QueryCapabilityError(QuerySource.grpc, `${operation}.groupBy`);
81
+ },
76
82
  };
77
83
  }
78
84
  async readSnapshotAsync(parties) {
@@ -90,7 +96,9 @@ export class GrpcContractQueryClient {
90
96
  : { parties, activeAtOffset, pageToken }));
91
97
  activeAtOffset ??= response.activeAtOffset;
92
98
  pageToken = response.nextPageToken;
93
- rows.push(...response.contracts.map(mapGrpcContract));
99
+ rows.push(...response.activeContracts.map((response) => mapGrpcContract(response.contractEntry.oneofKind === "activeContract"
100
+ ? response.contractEntry.activeContract
101
+ : response)));
94
102
  } while (pageToken !== undefined && pageToken.length > 0);
95
103
  if (this.cache !== undefined && this.cacheTtlMs !== undefined) {
96
104
  await this.cache.setAsync(key, rows, this.cacheTtlMs);
@@ -18,16 +18,96 @@ export interface StringFilter extends OrderedFilter<string> {
18
18
  export interface ArrayMembershipFilter {
19
19
  readonly has: string;
20
20
  }
21
+ export interface JsonPathFilter {
22
+ readonly path: readonly [string, ...readonly string[]];
23
+ readonly equals?: string;
24
+ readonly in?: readonly string[];
25
+ readonly lt?: string;
26
+ readonly lte?: string;
27
+ readonly gt?: string;
28
+ readonly gte?: string;
29
+ readonly like?: string;
30
+ readonly ilike?: string;
31
+ readonly is?: null;
32
+ readonly isNot?: null;
33
+ }
34
+ export interface RelationListFilter<TWhere> {
35
+ readonly some?: TWhere;
36
+ readonly none?: TWhere;
37
+ readonly every?: TWhere;
38
+ }
21
39
  export type WhereExpression<TFields> = TFields & {
22
40
  readonly and?: readonly WhereExpression<TFields>[];
23
41
  readonly or?: readonly WhereExpression<TFields>[];
24
42
  readonly not?: WhereExpression<TFields>;
25
43
  };
26
- export type RowWhere<TRow, TOrdered extends keyof TRow = never, TPattern extends keyof TRow = never> = WhereExpression<Partial<{
27
- readonly [TField in keyof TRow]: TRow[TField] extends readonly string[] ? ScalarFilter<TRow[TField]> | ArrayMembershipFilter : TField extends TPattern ? StringFilter : TField extends TOrdered ? OrderedFilter<TRow[TField]> : ScalarFilter<TRow[TField]>;
44
+ export type RowWhere<TRow, TOrdered extends keyof TRow = never, TPattern extends keyof TRow = never, TJson extends keyof TRow = never> = WhereExpression<Partial<{
45
+ readonly [TField in keyof TRow]: TRow[TField] extends readonly string[] ? ScalarFilter<TRow[TField]> | ArrayMembershipFilter : TField extends TJson ? JsonPathFilter : TField extends TPattern ? StringFilter : TField extends TOrdered ? OrderedFilter<TRow[TField]> : ScalarFilter<TRow[TField]>;
28
46
  }>>;
29
- export type RowSelect<TRow> = Partial<Record<keyof TRow, boolean>>;
30
- export type RowOrderBy<TRow> = Partial<Record<keyof TRow, QueryOrder>>;
47
+ export type RowSelect<TRow> = Partial<Record<keyof TRow, boolean>> & {
48
+ readonly json?: Readonly<Record<string, JsonFieldProjection>>;
49
+ };
50
+ export type OneFieldOrderBy<TRow> = {
51
+ readonly [TField in keyof TRow]: Readonly<{
52
+ readonly [TKey in TField]: QueryOrder;
53
+ }> & Partial<Record<Exclude<keyof TRow, TField>, never>>;
54
+ }[keyof TRow];
55
+ export type RowOrderBy<TRow> = readonly [
56
+ OneFieldOrderBy<TRow>,
57
+ ...readonly OneFieldOrderBy<TRow>[]
58
+ ];
59
+ export type TimeBucket = "hour" | "day" | "week" | "month";
60
+ export interface JsonPath {
61
+ readonly path: readonly [string, ...readonly string[]];
62
+ }
63
+ export type JsonScalarType = "text" | "numeric" | "boolean" | "timestamp";
64
+ export interface JsonProjection extends JsonPath {
65
+ readonly as: JsonScalarType;
66
+ }
67
+ export interface JsonFieldProjection extends JsonProjection {
68
+ readonly field: string;
69
+ }
70
+ export type JsonProjectedValue<TProjection> = TProjection extends {
71
+ readonly as: "numeric";
72
+ } ? string | null : TProjection extends {
73
+ readonly as: "boolean";
74
+ } ? boolean | null : TProjection extends {
75
+ readonly as: "timestamp";
76
+ } ? Date | null : string | null;
77
+ export type JsonProjectionResult<TArgs> = TArgs extends {
78
+ readonly select?: {
79
+ readonly json?: infer TSelections;
80
+ };
81
+ } ? TSelections extends Readonly<Record<string, JsonFieldProjection>> ? {
82
+ readonly [TName in keyof TSelections]: JsonProjectedValue<TSelections[TName]>;
83
+ } : {} : {};
84
+ export interface JsonGroupBy extends JsonProjection {
85
+ readonly name: string;
86
+ }
87
+ export type ToOneRelationArgs<TWhere, TSelect, TOrderBy, TInclude> = true | {
88
+ readonly where?: TWhere;
89
+ readonly select?: TSelect;
90
+ readonly orderBy?: TOrderBy;
91
+ readonly include?: TInclude;
92
+ };
93
+ export interface ToManyRelationArgs<TWhere, TSelect, TOrderBy, TInclude> extends QueryPageArgs {
94
+ readonly take: number;
95
+ readonly where?: TWhere;
96
+ readonly select?: TSelect;
97
+ readonly orderBy?: TOrderBy;
98
+ readonly include?: TInclude;
99
+ }
100
+ export interface GroupAggregateArgs<TNumericField extends string> {
101
+ readonly count?: true;
102
+ readonly min?: readonly TNumericField[];
103
+ readonly max?: readonly TNumericField[];
104
+ readonly sum?: readonly TNumericField[];
105
+ }
106
+ export interface GroupByArgs<TWhere, TKey, TNumericField extends string> {
107
+ readonly where?: TWhere;
108
+ readonly by: readonly [TKey, ...readonly TKey[]];
109
+ readonly aggregate: GroupAggregateArgs<TNumericField>;
110
+ }
31
111
  export interface QueryPageArgs {
32
112
  readonly skip?: number;
33
113
  readonly take?: number;
@@ -44,6 +124,13 @@ export interface ContractRow {
44
124
  readonly archivedAt: Date | null;
45
125
  readonly active: boolean;
46
126
  }
127
+ export interface ContractRelationRow {
128
+ readonly contractType?: ContractTypeRow;
129
+ readonly createdTransaction?: TransactionRow;
130
+ readonly archivedTransaction?: TransactionRow | null;
131
+ readonly exercises?: readonly ExerciseRow[];
132
+ }
133
+ export type ContractResult = ContractRow & ContractRelationRow;
47
134
  export interface TemplateId {
48
135
  readonly packageId: string;
49
136
  readonly moduleName: string;
@@ -129,27 +216,41 @@ type ContractWhereFields = {
129
216
  readonly has: string;
130
217
  };
131
218
  readonly payload?: ContractPayloadFilter;
219
+ readonly contractType?: ContractTypeWhere;
220
+ readonly createdTransaction?: TransactionWhere;
221
+ readonly archivedTransaction?: TransactionWhere;
222
+ readonly exercises?: RelationListFilter<ExerciseWhere>;
132
223
  };
133
224
  export type ContractWhere = WhereExpression<ContractWhereFields>;
134
225
  export type ContractOrderField = "contractId" | "createdEventOffset" | "createdAt" | "archivedEventOffset" | "archivedAt";
135
- export type ContractOrderBy = Partial<Record<ContractOrderField, QueryOrder>>;
136
- export type ContractSelect = Partial<Record<keyof ContractRow, boolean>>;
226
+ export type ContractOrderBy = readonly [
227
+ OneFieldOrderBy<Pick<ContractRow, ContractOrderField>>,
228
+ ...readonly OneFieldOrderBy<Pick<ContractRow, ContractOrderField>>[]
229
+ ];
230
+ export type ContractSelect = RowSelect<ContractRow>;
137
231
  export interface ContractFindManyArgs extends QueryPageArgs {
138
232
  readonly parties?: readonly string[];
139
233
  readonly where?: ContractWhere;
140
234
  readonly orderBy?: ContractOrderBy;
141
235
  readonly select?: ContractSelect;
236
+ readonly include?: ContractInclude;
142
237
  }
143
238
  export interface ContractFindUniqueArgs {
144
239
  readonly where: {
145
240
  readonly contractId: string;
146
241
  };
147
242
  readonly select?: ContractSelect;
243
+ readonly include?: ContractInclude;
148
244
  }
149
245
  export interface ContractCountArgs {
150
246
  readonly parties?: readonly string[];
151
247
  readonly where?: ContractWhere;
152
248
  }
249
+ export type ContractGroupByKey = ContractOrderField | "witnesses" | {
250
+ readonly payload: JsonGroupBy;
251
+ };
252
+ export type ContractGroupByArgs = GroupByArgs<ContractWhere, ContractGroupByKey, "createdEventOffset" | "archivedEventOffset">;
253
+ export type ContractGroupRow = Readonly<Record<string, string | number | boolean | Date | null>>;
153
254
  export interface ContractTypeRow {
154
255
  readonly pk: string;
155
256
  readonly payloadType: string;
@@ -176,7 +277,7 @@ export interface ExerciseRow {
176
277
  readonly redactionId: string | null;
177
278
  readonly packagePk: string;
178
279
  readonly controllers: readonly string[];
179
- readonly lastDescendantNodeId: number;
280
+ readonly lastDescendantNodeId: string;
180
281
  readonly witnesses: readonly string[];
181
282
  }
182
283
  export interface ExerciseTypeRow {
@@ -213,28 +314,73 @@ export interface WatermarkRow {
213
314
  readonly offset: string | null;
214
315
  readonly instanceId: string | null;
215
316
  }
216
- export type ContractTypeWhere = RowWhere<ContractTypeRow, "pk", "payloadType" | "packageName" | "moduleName" | "entityName" | "templateFqn">;
317
+ export type ContractTypeResult = ContractTypeRow & {
318
+ readonly contracts?: readonly ContractResult[];
319
+ readonly exercises?: readonly ExerciseResult[];
320
+ };
321
+ export type EventResult = EventRow & {
322
+ readonly transaction?: TransactionResult;
323
+ readonly exercises?: readonly ExerciseResult[];
324
+ };
325
+ export type ExerciseResult = ExerciseRow & {
326
+ readonly exerciseType?: ExerciseTypeResult;
327
+ readonly contractType?: ContractTypeResult;
328
+ readonly event?: EventResult | null;
329
+ readonly transaction?: TransactionResult | null;
330
+ readonly package?: PackageResult;
331
+ readonly contract?: ContractResult;
332
+ };
333
+ export type ExerciseTypeResult = ExerciseTypeRow & {
334
+ readonly exercises?: readonly ExerciseResult[];
335
+ };
336
+ export type PackageResult = PackageRow & {
337
+ readonly exercises?: readonly ExerciseResult[];
338
+ };
339
+ export type TransactionResult = TransactionRow & {
340
+ readonly events?: readonly EventResult[];
341
+ readonly createdContracts?: readonly ContractResult[];
342
+ readonly archivedContracts?: readonly ContractResult[];
343
+ readonly exercises?: readonly ExerciseResult[];
344
+ };
345
+ export type ContractTypeWhere = RowWhere<ContractTypeRow, "pk", "payloadType" | "packageName" | "moduleName" | "entityName" | "templateFqn"> & {
346
+ readonly contracts?: RelationListFilter<ContractWhere>;
347
+ readonly exercises?: RelationListFilter<ExerciseWhere>;
348
+ };
217
349
  export type ContractTypeSelect = RowSelect<ContractTypeRow>;
218
350
  export type ContractTypeOrderBy = RowOrderBy<ContractTypeRow>;
219
351
  export type ContractTypeUnique = {
220
352
  readonly pk: string;
221
353
  };
222
- export type EventWhere = RowWhere<EventRow, "pk" | "txIx", "eventId" | "type">;
354
+ export type EventWhere = RowWhere<EventRow, "pk" | "txIx", "eventId" | "type"> & {
355
+ readonly transaction?: TransactionWhere;
356
+ readonly exercises?: RelationListFilter<ExerciseWhere>;
357
+ };
223
358
  export type EventSelect = RowSelect<EventRow>;
224
359
  export type EventOrderBy = RowOrderBy<EventRow>;
225
360
  export type EventUnique = {
226
361
  readonly pk: string;
227
362
  };
228
- export type ExerciseWhere = RowWhere<ExerciseRow, "tpePk" | "contractTpePk" | "exerciseEventPk" | "exercisedAtIx" | "packagePk" | "lastDescendantNodeId", "contractId" | "redactionId">;
363
+ export type ExerciseWhere = RowWhere<ExerciseRow, "tpePk" | "contractTpePk" | "exerciseEventPk" | "exercisedAtIx" | "packagePk" | "lastDescendantNodeId", "contractId" | "redactionId", "argument" | "result"> & {
364
+ readonly exerciseType?: ExerciseTypeWhere;
365
+ readonly contractType?: ContractTypeWhere;
366
+ readonly event?: EventWhere;
367
+ readonly transaction?: TransactionWhere;
368
+ readonly package?: PackageWhere;
369
+ readonly contract?: ContractWhere;
370
+ };
229
371
  export type ExerciseSelect = RowSelect<ExerciseRow>;
230
372
  export type ExerciseOrderBy = RowOrderBy<ExerciseRow>;
231
- export type ExerciseTypeWhere = RowWhere<ExerciseTypeRow, "pk", "choice" | "packageName" | "moduleName" | "entityName" | "templateFqn" | "choiceFqn">;
373
+ export type ExerciseTypeWhere = RowWhere<ExerciseTypeRow, "pk", "choice" | "packageName" | "moduleName" | "entityName" | "templateFqn" | "choiceFqn"> & {
374
+ readonly exercises?: RelationListFilter<ExerciseWhere>;
375
+ };
232
376
  export type ExerciseTypeSelect = RowSelect<ExerciseTypeRow>;
233
377
  export type ExerciseTypeOrderBy = RowOrderBy<ExerciseTypeRow>;
234
378
  export type ExerciseTypeUnique = {
235
379
  readonly pk: string;
236
380
  };
237
- export type PackageWhere = RowWhere<PackageRow, "pk", "name" | "version" | "id">;
381
+ export type PackageWhere = RowWhere<PackageRow, "pk", "name" | "version" | "id"> & {
382
+ readonly exercises?: RelationListFilter<ExerciseWhere>;
383
+ };
238
384
  export type PackageSelect = RowSelect<PackageRow>;
239
385
  export type PackageOrderBy = RowOrderBy<PackageRow>;
240
386
  export type PackageUnique = {
@@ -242,7 +388,12 @@ export type PackageUnique = {
242
388
  } | {
243
389
  readonly id: string;
244
390
  };
245
- export type TransactionWhere = RowWhere<TransactionRow, "ix" | "offset" | "effectiveAt" | "paidTrafficCost", "transactionId" | "workflowId" | "domainId">;
391
+ export type TransactionWhere = RowWhere<TransactionRow, "ix" | "offset" | "effectiveAt" | "paidTrafficCost", "transactionId" | "workflowId" | "domainId", "traceContext"> & {
392
+ readonly events?: RelationListFilter<EventWhere>;
393
+ readonly createdContracts?: RelationListFilter<ContractWhere>;
394
+ readonly archivedContracts?: RelationListFilter<ContractWhere>;
395
+ readonly exercises?: RelationListFilter<ExerciseWhere>;
396
+ };
246
397
  export type TransactionSelect = RowSelect<TransactionRow>;
247
398
  export type TransactionOrderBy = RowOrderBy<TransactionRow>;
248
399
  export type TransactionUnique = {
@@ -256,6 +407,73 @@ export type WatermarkOrderBy = RowOrderBy<WatermarkRow>;
256
407
  export type WatermarkUnique = {
257
408
  readonly singleton: boolean;
258
409
  };
410
+ export interface ContractInclude {
411
+ readonly contractType?: ToOneRelationArgs<ContractTypeWhere, ContractTypeSelect, ContractTypeOrderBy, ContractTypeInclude>;
412
+ readonly createdTransaction?: ToOneRelationArgs<TransactionWhere, TransactionSelect, TransactionOrderBy, TransactionInclude>;
413
+ readonly archivedTransaction?: ToOneRelationArgs<TransactionWhere, TransactionSelect, TransactionOrderBy, TransactionInclude>;
414
+ readonly exercises?: ToManyRelationArgs<ExerciseWhere, ExerciseSelect, ExerciseOrderBy, ExerciseInclude>;
415
+ }
416
+ export interface ContractTypeInclude {
417
+ readonly contracts?: ToManyRelationArgs<ContractWhere, ContractSelect, ContractOrderBy, ContractInclude>;
418
+ readonly exercises?: ToManyRelationArgs<ExerciseWhere, ExerciseSelect, ExerciseOrderBy, ExerciseInclude>;
419
+ }
420
+ export interface EventInclude {
421
+ readonly transaction?: ToOneRelationArgs<TransactionWhere, TransactionSelect, TransactionOrderBy, TransactionInclude>;
422
+ readonly exercises?: ToManyRelationArgs<ExerciseWhere, ExerciseSelect, ExerciseOrderBy, ExerciseInclude>;
423
+ }
424
+ export interface ExerciseInclude {
425
+ readonly exerciseType?: ToOneRelationArgs<ExerciseTypeWhere, ExerciseTypeSelect, ExerciseTypeOrderBy, ExerciseTypeInclude>;
426
+ readonly contractType?: ToOneRelationArgs<ContractTypeWhere, ContractTypeSelect, ContractTypeOrderBy, ContractTypeInclude>;
427
+ readonly event?: ToOneRelationArgs<EventWhere, EventSelect, EventOrderBy, EventInclude>;
428
+ readonly transaction?: ToOneRelationArgs<TransactionWhere, TransactionSelect, TransactionOrderBy, TransactionInclude>;
429
+ readonly package?: ToOneRelationArgs<PackageWhere, PackageSelect, PackageOrderBy, PackageInclude>;
430
+ readonly contract?: ToOneRelationArgs<ContractWhere, ContractSelect, ContractOrderBy, ContractInclude>;
431
+ }
432
+ export interface ExerciseTypeInclude {
433
+ readonly exercises?: ToManyRelationArgs<ExerciseWhere, ExerciseSelect, ExerciseOrderBy, ExerciseInclude>;
434
+ }
435
+ export interface PackageInclude {
436
+ readonly exercises?: ToManyRelationArgs<ExerciseWhere, ExerciseSelect, ExerciseOrderBy, ExerciseInclude>;
437
+ }
438
+ export interface TransactionInclude {
439
+ readonly events?: ToManyRelationArgs<EventWhere, EventSelect, EventOrderBy, EventInclude>;
440
+ readonly createdContracts?: ToManyRelationArgs<ContractWhere, ContractSelect, ContractOrderBy, ContractInclude>;
441
+ readonly archivedContracts?: ToManyRelationArgs<ContractWhere, ContractSelect, ContractOrderBy, ContractInclude>;
442
+ readonly exercises?: ToManyRelationArgs<ExerciseWhere, ExerciseSelect, ExerciseOrderBy, ExerciseInclude>;
443
+ }
444
+ export type EventGroupByKey = keyof EventRow | {
445
+ readonly transaction: {
446
+ readonly effectiveAt: {
447
+ readonly bucket: TimeBucket;
448
+ };
449
+ };
450
+ };
451
+ export type EventGroupByArgs = GroupByArgs<EventWhere, EventGroupByKey, "pk" | "txIx">;
452
+ export type EventGroupRow = Readonly<Record<string, string | number | Date | null>>;
453
+ export type ExerciseGroupByKey = keyof ExerciseRow | {
454
+ readonly argument: JsonGroupBy;
455
+ } | {
456
+ readonly result: JsonGroupBy;
457
+ };
458
+ export type ExerciseGroupByArgs = GroupByArgs<ExerciseWhere, ExerciseGroupByKey, "tpePk" | "contractTpePk" | "exerciseEventPk" | "exercisedAtIx" | "packagePk" | "lastDescendantNodeId">;
459
+ export type ExerciseGroupRow = Readonly<Record<string, string | number | boolean | Date | null>>;
460
+ export type TransactionGroupByKey = keyof TransactionRow | {
461
+ readonly effectiveAt: {
462
+ readonly bucket: TimeBucket;
463
+ };
464
+ } | {
465
+ readonly traceContext: JsonGroupBy;
466
+ };
467
+ export type TransactionGroupByArgs = GroupByArgs<TransactionWhere, TransactionGroupByKey, "ix" | "offset" | "paidTrafficCost">;
468
+ export type TransactionGroupRow = Readonly<Record<string, string | number | boolean | Date | null>>;
469
+ export type ContractTypeGroupByArgs = GroupByArgs<ContractTypeWhere, keyof ContractTypeRow, "pk">;
470
+ export type ContractTypeGroupRow = Readonly<Record<string, string | number | boolean | Date | null>>;
471
+ export type ExerciseTypeGroupByArgs = GroupByArgs<ExerciseTypeWhere, keyof ExerciseTypeRow, "pk">;
472
+ export type ExerciseTypeGroupRow = Readonly<Record<string, string | number | boolean | Date | null>>;
473
+ export type PackageGroupByArgs = GroupByArgs<PackageWhere, keyof PackageRow, "pk">;
474
+ export type PackageGroupRow = Readonly<Record<string, string | number | boolean | Date | null>>;
475
+ export type WatermarkGroupByArgs = GroupByArgs<WatermarkWhere, keyof WatermarkRow, "ix" | "offset">;
476
+ export type WatermarkGroupRow = Readonly<Record<string, string | number | boolean | Date | null>>;
259
477
  export declare function assertQueryPageArgs(args: QueryPageArgs): void;
260
- export declare function assertQueryOrderBy(orderBy: Readonly<Record<string, QueryOrder>>): void;
478
+ export declare function assertQueryOrderBy(orderBy: readonly Readonly<Record<string, QueryOrder>>[]): void;
261
479
  export {};
@@ -3,8 +3,8 @@ export function assertQueryPageArgs(args) {
3
3
  assertPageValue(args.take, "take");
4
4
  }
5
5
  export function assertQueryOrderBy(orderBy) {
6
- if (Object.keys(orderBy).length !== 1) {
7
- throw new Error("orderBy must specify exactly one field");
6
+ if (orderBy.length === 0 || orderBy.some((entry) => Object.keys(entry).length !== 1)) {
7
+ throw new Error("orderBy must be a non-empty list of one-field entries");
8
8
  }
9
9
  }
10
10
  function assertPageValue(value, name) {
@@ -1,4 +1,4 @@
1
- import { ContractCountArgs, ContractFindManyArgs, ContractFindUniqueArgs, ContractRow } from "../model-types.js";
1
+ import { ContractCountArgs, ContractFindManyArgs, ContractFindUniqueArgs, ContractGroupByArgs, ContractRow, ContractResult, JsonProjectionResult } from "../model-types.js";
2
2
  import { QueryClient } from "../query-client.js";
3
3
  import { QuerySource } from "../query-source.js";
4
4
  import { PqsSchemaProfileV1 } from "./pqs-schema-profile.js";
@@ -13,8 +13,8 @@ export declare class PqsQueryClient implements QueryClient {
13
13
  private readonly ready;
14
14
  readonly source = QuerySource.pqs;
15
15
  readonly contracts: {
16
- findMany: (args?: ContractFindManyArgs) => Promise<readonly ContractRow[]>;
17
- findUnique: (args: ContractFindUniqueArgs) => Promise<ContractRow>;
16
+ findMany: <TArgs extends ContractFindManyArgs>(args?: TArgs) => Promise<readonly (ContractResult & JsonProjectionResult<TArgs>)[]>;
17
+ findUnique: <TArgs extends ContractFindUniqueArgs>(args: TArgs) => Promise<(ContractRow & import("../model-types.js").ContractRelationRow & JsonProjectionResult<TArgs>) | undefined>;
18
18
  count: (args?: ContractCountArgs) => Promise<number>;
19
19
  aggregate: (args: Parameters<QueryClient["contracts"]["aggregate"]>[0]) => Promise<{
20
20
  readonly count?: number;
@@ -22,6 +22,7 @@ export declare class PqsQueryClient implements QueryClient {
22
22
  readonly max?: Readonly<Partial<Record<import("../query-client.js").ContractNumericField, string | null>>>;
23
23
  readonly sum?: Readonly<Partial<Record<import("../query-client.js").ContractNumericField, string | null>>>;
24
24
  }>;
25
+ groupBy: (args: ContractGroupByArgs) => Promise<readonly Readonly<Record<string, string | number | boolean | Date | null>>[]>;
25
26
  };
26
27
  readonly contractTypes: QueryClient["contractTypes"];
27
28
  readonly events: QueryClient["events"];
@@ -33,9 +34,11 @@ export declare class PqsQueryClient implements QueryClient {
33
34
  constructor(executor: PqsQueryExecutor, profile: PqsSchemaProfileV1, ready?: Promise<void>);
34
35
  $queryRaw<TRow>(sql: string, values?: readonly unknown[]): Promise<readonly TRow[]>;
35
36
  private createPhysicalDelegate;
37
+ private groupPhysicalAsync;
36
38
  private readPhysicalAsync;
37
39
  private aggregatePhysicalAsync;
38
40
  private compileWhere;
41
+ private compileLogicalContractWhere;
39
42
  private selectedFields;
40
43
  private compileOrderBy;
41
44
  private assertUniqueWhere;
@@ -43,7 +46,15 @@ export declare class PqsQueryClient implements QueryClient {
43
46
  private field;
44
47
  private assertPage;
45
48
  private mapPhysicalRow;
49
+ private mapRelatedValue;
50
+ private mapLogicalContractValue;
51
+ private compileIncludes;
52
+ private compileJsonSelections;
53
+ private compileIncludedExpression;
54
+ private compileLogicalContractSelections;
55
+ private compileLogicalContractJsonSelections;
46
56
  private findContractsAsync;
47
57
  private aggregateContractsAsync;
58
+ private groupContractsAsync;
48
59
  private wrap;
49
60
  }