@qlever-llc/trellis 0.10.8 → 0.10.10

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 (210) hide show
  1. package/esm/contract_support/mod.d.ts +1 -1
  2. package/esm/contract_support/mod.d.ts.map +1 -1
  3. package/esm/contract_support/mod.js +1 -1
  4. package/esm/contract_support/protocol.d.ts +67 -0
  5. package/esm/contract_support/protocol.d.ts.map +1 -1
  6. package/esm/contract_support/protocol.js +90 -0
  7. package/esm/generated-sdk/auth/api.d.ts.map +1 -1
  8. package/esm/generated-sdk/auth/client.d.ts.map +1 -1
  9. package/esm/generated-sdk/auth/contract.d.ts.map +1 -1
  10. package/esm/generated-sdk/auth/contract.js +9590 -7
  11. package/esm/generated-sdk/auth/mod.d.ts +3 -3
  12. package/esm/generated-sdk/auth/mod.d.ts.map +1 -1
  13. package/esm/generated-sdk/auth/mod.js +1 -1
  14. package/esm/generated-sdk/auth/owned_api.d.ts.map +1 -1
  15. package/esm/generated-sdk/auth/owned_api.js +305 -62
  16. package/esm/generated-sdk/auth/schemas.d.ts.map +1 -1
  17. package/esm/generated-sdk/auth/schemas.js +6492 -139
  18. package/esm/generated-sdk/auth/types.d.ts +254 -254
  19. package/esm/generated-sdk/auth/types.d.ts.map +1 -1
  20. package/esm/generated-sdk/health/api.d.ts.map +1 -1
  21. package/esm/generated-sdk/health/client.d.ts.map +1 -1
  22. package/esm/generated-sdk/health/contract.d.ts.map +1 -1
  23. package/esm/generated-sdk/health/contract.js +117 -7
  24. package/esm/generated-sdk/health/mod.d.ts +2 -2
  25. package/esm/generated-sdk/health/mod.d.ts.map +1 -1
  26. package/esm/generated-sdk/health/mod.js +1 -1
  27. package/esm/generated-sdk/health/owned_api.d.ts.map +1 -1
  28. package/esm/generated-sdk/health/schemas.d.ts.map +1 -1
  29. package/esm/generated-sdk/health/schemas.js +79 -1
  30. package/esm/generated-sdk/health/types.d.ts +4 -4
  31. package/esm/generated-sdk/health/types.d.ts.map +1 -1
  32. package/esm/generated-sdk/jobs/api.d.ts.map +1 -1
  33. package/esm/generated-sdk/jobs/api.js +12 -4
  34. package/esm/generated-sdk/jobs/client.d.ts.map +1 -1
  35. package/esm/generated-sdk/jobs/contract.d.ts.map +1 -1
  36. package/esm/generated-sdk/jobs/contract.js +1080 -7
  37. package/esm/generated-sdk/jobs/mod.d.ts +2 -2
  38. package/esm/generated-sdk/jobs/mod.d.ts.map +1 -1
  39. package/esm/generated-sdk/jobs/mod.js +1 -1
  40. package/esm/generated-sdk/jobs/owned_api.d.ts.map +1 -1
  41. package/esm/generated-sdk/jobs/owned_api.js +26 -6
  42. package/esm/generated-sdk/jobs/schemas.d.ts.map +1 -1
  43. package/esm/generated-sdk/jobs/schemas.js +768 -18
  44. package/esm/generated-sdk/jobs/types.d.ts +14 -14
  45. package/esm/generated-sdk/jobs/types.d.ts.map +1 -1
  46. package/esm/generated-sdk/state/api.d.ts.map +1 -1
  47. package/esm/generated-sdk/state/api.js +3 -1
  48. package/esm/generated-sdk/state/client.d.ts.map +1 -1
  49. package/esm/generated-sdk/state/contract.d.ts.map +1 -1
  50. package/esm/generated-sdk/state/contract.js +638 -7
  51. package/esm/generated-sdk/state/mod.d.ts +2 -2
  52. package/esm/generated-sdk/state/mod.d.ts.map +1 -1
  53. package/esm/generated-sdk/state/mod.js +1 -1
  54. package/esm/generated-sdk/state/owned_api.d.ts.map +1 -1
  55. package/esm/generated-sdk/state/owned_api.js +36 -8
  56. package/esm/generated-sdk/state/schemas.d.ts.map +1 -1
  57. package/esm/generated-sdk/state/schemas.js +441 -14
  58. package/esm/generated-sdk/state/types.d.ts +15 -15
  59. package/esm/generated-sdk/state/types.d.ts.map +1 -1
  60. package/esm/generated-sdk/trellis-core/api.d.ts.map +1 -1
  61. package/esm/generated-sdk/trellis-core/client.d.ts.map +1 -1
  62. package/esm/generated-sdk/trellis-core/contract.d.ts.map +1 -1
  63. package/esm/generated-sdk/trellis-core/contract.js +744 -7
  64. package/esm/generated-sdk/trellis-core/mod.d.ts +2 -2
  65. package/esm/generated-sdk/trellis-core/mod.d.ts.map +1 -1
  66. package/esm/generated-sdk/trellis-core/mod.js +1 -1
  67. package/esm/generated-sdk/trellis-core/owned_api.d.ts.map +1 -1
  68. package/esm/generated-sdk/trellis-core/owned_api.js +1 -1
  69. package/esm/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
  70. package/esm/generated-sdk/trellis-core/schemas.js +626 -8
  71. package/esm/generated-sdk/trellis-core/types.d.ts +14 -14
  72. package/esm/generated-sdk/trellis-core/types.d.ts.map +1 -1
  73. package/esm/index.d.ts +2 -2
  74. package/esm/index.d.ts.map +1 -1
  75. package/esm/index.js +1 -1
  76. package/esm/server/service.d.ts +40 -9
  77. package/esm/server/service.d.ts.map +1 -1
  78. package/esm/server/service.js +28 -4
  79. package/esm/service/deno.d.ts +1 -1
  80. package/esm/service/deno.d.ts.map +1 -1
  81. package/esm/service/mod.d.ts +1 -1
  82. package/esm/service/mod.d.ts.map +1 -1
  83. package/esm/service/node.d.ts +1 -1
  84. package/esm/service/node.d.ts.map +1 -1
  85. package/package.json +2 -2
  86. package/script/contract_support/mod.d.ts +1 -1
  87. package/script/contract_support/mod.d.ts.map +1 -1
  88. package/script/contract_support/mod.js +8 -1
  89. package/script/contract_support/protocol.d.ts +67 -0
  90. package/script/contract_support/protocol.d.ts.map +1 -1
  91. package/script/contract_support/protocol.js +96 -1
  92. package/script/generated-sdk/auth/api.d.ts.map +1 -1
  93. package/script/generated-sdk/auth/client.d.ts.map +1 -1
  94. package/script/generated-sdk/auth/contract.d.ts.map +1 -1
  95. package/script/generated-sdk/auth/contract.js +9590 -7
  96. package/script/generated-sdk/auth/mod.d.ts +3 -3
  97. package/script/generated-sdk/auth/mod.d.ts.map +1 -1
  98. package/script/generated-sdk/auth/mod.js +2 -2
  99. package/script/generated-sdk/auth/owned_api.d.ts.map +1 -1
  100. package/script/generated-sdk/auth/owned_api.js +304 -61
  101. package/script/generated-sdk/auth/schemas.d.ts.map +1 -1
  102. package/script/generated-sdk/auth/schemas.js +6492 -139
  103. package/script/generated-sdk/auth/types.d.ts +254 -254
  104. package/script/generated-sdk/auth/types.d.ts.map +1 -1
  105. package/script/generated-sdk/health/api.d.ts.map +1 -1
  106. package/script/generated-sdk/health/client.d.ts.map +1 -1
  107. package/script/generated-sdk/health/contract.d.ts.map +1 -1
  108. package/script/generated-sdk/health/contract.js +117 -7
  109. package/script/generated-sdk/health/mod.d.ts +2 -2
  110. package/script/generated-sdk/health/mod.d.ts.map +1 -1
  111. package/script/generated-sdk/health/mod.js +2 -2
  112. package/script/generated-sdk/health/owned_api.d.ts.map +1 -1
  113. package/script/generated-sdk/health/schemas.d.ts.map +1 -1
  114. package/script/generated-sdk/health/schemas.js +79 -1
  115. package/script/generated-sdk/health/types.d.ts +4 -4
  116. package/script/generated-sdk/health/types.d.ts.map +1 -1
  117. package/script/generated-sdk/jobs/api.d.ts.map +1 -1
  118. package/script/generated-sdk/jobs/api.js +12 -4
  119. package/script/generated-sdk/jobs/client.d.ts.map +1 -1
  120. package/script/generated-sdk/jobs/contract.d.ts.map +1 -1
  121. package/script/generated-sdk/jobs/contract.js +1080 -7
  122. package/script/generated-sdk/jobs/mod.d.ts +2 -2
  123. package/script/generated-sdk/jobs/mod.d.ts.map +1 -1
  124. package/script/generated-sdk/jobs/mod.js +2 -2
  125. package/script/generated-sdk/jobs/owned_api.d.ts.map +1 -1
  126. package/script/generated-sdk/jobs/owned_api.js +25 -5
  127. package/script/generated-sdk/jobs/schemas.d.ts.map +1 -1
  128. package/script/generated-sdk/jobs/schemas.js +768 -18
  129. package/script/generated-sdk/jobs/types.d.ts +14 -14
  130. package/script/generated-sdk/jobs/types.d.ts.map +1 -1
  131. package/script/generated-sdk/state/api.d.ts.map +1 -1
  132. package/script/generated-sdk/state/api.js +3 -1
  133. package/script/generated-sdk/state/client.d.ts.map +1 -1
  134. package/script/generated-sdk/state/contract.d.ts.map +1 -1
  135. package/script/generated-sdk/state/contract.js +638 -7
  136. package/script/generated-sdk/state/mod.d.ts +2 -2
  137. package/script/generated-sdk/state/mod.d.ts.map +1 -1
  138. package/script/generated-sdk/state/mod.js +2 -2
  139. package/script/generated-sdk/state/owned_api.d.ts.map +1 -1
  140. package/script/generated-sdk/state/owned_api.js +35 -7
  141. package/script/generated-sdk/state/schemas.d.ts.map +1 -1
  142. package/script/generated-sdk/state/schemas.js +441 -14
  143. package/script/generated-sdk/state/types.d.ts +15 -15
  144. package/script/generated-sdk/state/types.d.ts.map +1 -1
  145. package/script/generated-sdk/trellis-core/api.d.ts.map +1 -1
  146. package/script/generated-sdk/trellis-core/client.d.ts.map +1 -1
  147. package/script/generated-sdk/trellis-core/contract.d.ts.map +1 -1
  148. package/script/generated-sdk/trellis-core/contract.js +744 -7
  149. package/script/generated-sdk/trellis-core/mod.d.ts +2 -2
  150. package/script/generated-sdk/trellis-core/mod.d.ts.map +1 -1
  151. package/script/generated-sdk/trellis-core/mod.js +2 -2
  152. package/script/generated-sdk/trellis-core/owned_api.d.ts.map +1 -1
  153. package/script/generated-sdk/trellis-core/schemas.d.ts.map +1 -1
  154. package/script/generated-sdk/trellis-core/schemas.js +626 -8
  155. package/script/generated-sdk/trellis-core/types.d.ts +14 -14
  156. package/script/generated-sdk/trellis-core/types.d.ts.map +1 -1
  157. package/script/index.d.ts +2 -2
  158. package/script/index.d.ts.map +1 -1
  159. package/script/index.js +9 -2
  160. package/script/server/service.d.ts +40 -9
  161. package/script/server/service.d.ts.map +1 -1
  162. package/script/server/service.js +27 -3
  163. package/script/service/deno.d.ts +1 -1
  164. package/script/service/deno.d.ts.map +1 -1
  165. package/script/service/mod.d.ts +1 -1
  166. package/script/service/mod.d.ts.map +1 -1
  167. package/script/service/node.d.ts +1 -1
  168. package/script/service/node.d.ts.map +1 -1
  169. package/src/contract_support/mod.ts +12 -0
  170. package/src/contract_support/protocol.ts +137 -0
  171. package/src/index.ts +12 -0
  172. package/src/sdk/_generated/auth/api.ts +10 -21
  173. package/src/sdk/_generated/auth/client.ts +1178 -160
  174. package/src/sdk/_generated/auth/contract.ts +9637 -13
  175. package/src/sdk/_generated/auth/mod.ts +22 -3
  176. package/src/sdk/_generated/auth/owned_api.ts +897 -264
  177. package/src/sdk/_generated/auth/schemas.ts +6630 -278
  178. package/src/sdk/_generated/auth/types.ts +2950 -359
  179. package/src/sdk/_generated/core/api.ts +10 -21
  180. package/src/sdk/_generated/core/client.ts +105 -12
  181. package/src/sdk/_generated/core/contract.ts +774 -13
  182. package/src/sdk/_generated/core/mod.ts +17 -2
  183. package/src/sdk/_generated/core/owned_api.ts +40 -24
  184. package/src/sdk/_generated/core/schemas.ts +626 -9
  185. package/src/sdk/_generated/core/types.ts +233 -18
  186. package/src/sdk/_generated/health/api.ts +10 -21
  187. package/src/sdk/_generated/health/client.ts +104 -8
  188. package/src/sdk/_generated/health/contract.ts +144 -13
  189. package/src/sdk/_generated/health/mod.ts +17 -2
  190. package/src/sdk/_generated/health/owned_api.ts +4 -9
  191. package/src/sdk/_generated/health/schemas.ts +79 -2
  192. package/src/sdk/_generated/health/types.ts +31 -4
  193. package/src/sdk/_generated/jobs/api.ts +20 -18
  194. package/src/sdk/_generated/jobs/client.ts +199 -28
  195. package/src/sdk/_generated/jobs/contract.ts +1119 -13
  196. package/src/sdk/_generated/jobs/mod.ts +17 -2
  197. package/src/sdk/_generated/jobs/owned_api.ts +64 -27
  198. package/src/sdk/_generated/jobs/schemas.ts +776 -20
  199. package/src/sdk/_generated/jobs/types.ts +407 -34
  200. package/src/sdk/_generated/state/api.ts +11 -18
  201. package/src/sdk/_generated/state/client.ts +169 -22
  202. package/src/sdk/_generated/state/contract.ts +670 -13
  203. package/src/sdk/_generated/state/mod.ts +17 -2
  204. package/src/sdk/_generated/state/owned_api.ts +65 -25
  205. package/src/sdk/_generated/state/schemas.ts +441 -15
  206. package/src/sdk/_generated/state/types.ts +229 -26
  207. package/src/server/service.ts +133 -7
  208. package/src/service/deno.ts +4 -0
  209. package/src/service/mod.ts +4 -0
  210. package/src/service/node.ts +4 -0
@@ -280,3 +280,140 @@ export type PageResponse<TEntry> = {
280
280
  limit: number;
281
281
  nextOffset?: number;
282
282
  };
283
+
284
+ /**
285
+ * Validates and normalizes an offset pagination query.
286
+ *
287
+ * Ensures `offset` and `limit` are non-negative integers within bounds. Throws
288
+ * `RangeError` on invalid input.
289
+ */
290
+ export function normalizePageQuery(
291
+ query: PageRequest,
292
+ maxLimit: number = Number.MAX_SAFE_INTEGER,
293
+ ): Required<PageRequest> {
294
+ if (!Number.isInteger(query.limit) || query.limit < 0) {
295
+ throw new RangeError("list limit must be a non-negative integer");
296
+ }
297
+ if (query.limit > maxLimit) {
298
+ throw new RangeError(`list limit must be <= ${maxLimit}`);
299
+ }
300
+ const offset = query.offset ?? 0;
301
+ if (!Number.isInteger(offset) || offset < 0) {
302
+ throw new RangeError("list offset must be a non-negative integer");
303
+ }
304
+ return { offset, limit: query.limit };
305
+ }
306
+
307
+ /**
308
+ * Builds a {@link PageResponse} from a pre-sliced offset page.
309
+ *
310
+ * @param entries - The entries for the current page, already sliced by the caller.
311
+ * @param totalCount - Total number of matching entries before slicing.
312
+ * @param query - The original pagination query used to produce the page.
313
+ * @param maxLimit - Optional maximum limit accepted by the endpoint.
314
+ */
315
+ export function buildPageResponse<T>(
316
+ entries: T[],
317
+ totalCount: number,
318
+ query: PageRequest,
319
+ maxLimit?: number,
320
+ ): PageResponse<T> {
321
+ const { offset, limit } = normalizePageQuery(query, maxLimit);
322
+ return {
323
+ entries,
324
+ count: totalCount,
325
+ offset,
326
+ limit,
327
+ nextOffset: limit <= 0 || offset + limit >= totalCount
328
+ ? undefined
329
+ : offset + limit,
330
+ };
331
+ }
332
+
333
+ /** Schema for a cursor pagination query. */
334
+ export const CursorQuerySchema = Type.Object({
335
+ cursor: Type.Optional(Type.String({ minLength: 1 })),
336
+ limit: Type.Optional(Type.Integer({ minimum: 0 })),
337
+ });
338
+
339
+ /** Cursor pagination query. */
340
+ export type CursorQuery = Static<typeof CursorQuerySchema>;
341
+
342
+ /** Schema for cursor pagination response metadata. */
343
+ export const CursorPageInfoSchema = Type.Object({
344
+ nextCursor: Type.Optional(Type.String({ minLength: 1 })),
345
+ });
346
+
347
+ /** Cursor pagination response metadata. */
348
+ export type CursorPageInfo = Static<typeof CursorPageInfoSchema>;
349
+
350
+ /** Create a schema for a cursor page response with typed items. */
351
+ export function CursorPageSchema<TItem extends TSchema>(item: TItem) {
352
+ return Type.Object({
353
+ items: Type.Array(item, { default: [] }),
354
+ page: CursorPageInfoSchema,
355
+ });
356
+ }
357
+
358
+ /** Cursor pagination response with typed items. */
359
+ export type CursorPage<TItem> = {
360
+ items: TItem[];
361
+ page: CursorPageInfo;
362
+ };
363
+
364
+ /** Options for normalizing a cursor pagination query. */
365
+ export type CursorQueryOptions = {
366
+ /** Limit used when the query does not specify one. Defaults to `100`. */
367
+ defaultLimit?: number;
368
+ /** Maximum accepted limit. Defaults to `500`. */
369
+ maxLimit?: number;
370
+ };
371
+
372
+ /** Cursor query after defaults and validation have been applied. */
373
+ export type NormalizedCursorQuery = {
374
+ cursor?: string;
375
+ limit: number;
376
+ };
377
+
378
+ /**
379
+ * Validates and normalizes a cursor pagination query.
380
+ *
381
+ * Defaults `limit` to `100`, rejects limits above `500` unless `maxLimit` is
382
+ * overridden, and preserves a non-empty optional cursor.
383
+ */
384
+ export function normalizeCursorQuery(
385
+ query: CursorQuery,
386
+ options: CursorQueryOptions = {},
387
+ ): NormalizedCursorQuery {
388
+ const maxLimit = options.maxLimit ?? 500;
389
+ const limit = query.limit ?? options.defaultLimit ?? 100;
390
+ if (!Number.isInteger(limit) || limit < 0) {
391
+ throw new RangeError("list limit must be a non-negative integer");
392
+ }
393
+ if (limit > maxLimit) {
394
+ throw new RangeError(`list limit must be <= ${maxLimit}`);
395
+ }
396
+ if (query.cursor === undefined) {
397
+ return { limit };
398
+ }
399
+ if (query.cursor.length === 0) {
400
+ throw new RangeError("list cursor must be a non-empty string");
401
+ }
402
+ return { cursor: query.cursor, limit };
403
+ }
404
+
405
+ /**
406
+ * Builds a {@link CursorPage} from items and an optional next cursor.
407
+ *
408
+ * @param items - The items for the current page.
409
+ * @param nextCursor - Cursor clients can use to request the next page.
410
+ */
411
+ export function buildCursorPage<T>(
412
+ items: T[],
413
+ nextCursor?: string,
414
+ ): CursorPage<T> {
415
+ return {
416
+ items,
417
+ page: nextCursor === undefined ? {} : { nextCursor },
418
+ };
419
+ }
package/src/index.ts CHANGED
@@ -57,12 +57,24 @@ export {
57
57
  } from "./health.js";
58
58
  export { defineError } from "./contract_support/mod.js";
59
59
  export {
60
+ buildCursorPage,
61
+ buildPageResponse,
62
+ CursorPageInfoSchema,
63
+ CursorPageSchema,
64
+ CursorQuerySchema,
65
+ normalizeCursorQuery,
66
+ normalizePageQuery,
60
67
  PageRequestSchema,
61
68
  PageResponseSchema,
62
69
  } from "./contract_support/mod.js";
63
70
  export type {
71
+ CursorPage,
72
+ CursorPageInfo,
73
+ CursorQuery,
74
+ CursorQueryOptions,
64
75
  ErrorClass,
65
76
  InferRuntimeRpcError,
77
+ NormalizedCursorQuery,
66
78
  PageRequest,
67
79
  PageResponse,
68
80
  RpcErrorClass,
@@ -4,29 +4,19 @@ import { OWNED_API } from "./owned_api.js";
4
4
  export { OWNED_API };
5
5
 
6
6
  export type UsedApi = {
7
- rpc: {
8
- };
9
- operations: {
10
- };
11
- events: {
12
- };
13
- feeds: {
14
- };
15
- subjects: {
16
- };
7
+ rpc: {};
8
+ operations: {};
9
+ events: {};
10
+ feeds: {};
11
+ subjects: {};
17
12
  };
18
13
 
19
14
  export const USED_API: UsedApi = {
20
- rpc: {
21
- },
22
- operations: {
23
- },
24
- events: {
25
- },
26
- feeds: {
27
- },
28
- subjects: {
29
- },
15
+ rpc: {},
16
+ operations: {},
17
+ events: {},
18
+ feeds: {},
19
+ subjects: {},
30
20
  };
31
21
 
32
22
  export type OwnedApi = typeof OWNED_API;
@@ -44,4 +34,3 @@ export const API = {
44
34
  } as const;
45
35
 
46
36
  export type ApiViews = typeof API;
47
-