@tearleads/client-sdk 0.1.69 → 0.1.72

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 (102) hide show
  1. package/data/shared/userTiming.js +42 -0
  2. package/data/shared/userTiming.js.map +1 -0
  3. package/data/sqlite/sqlExec.js +27 -3
  4. package/data/sqlite/sqlExec.js.map +1 -1
  5. package/data/sync/coordinatorLaneRun.js +29 -6
  6. package/data/sync/coordinatorLaneRun.js.map +1 -1
  7. package/data/sync/coordinatorState.d.ts +3 -1
  8. package/data/sync/coordinatorState.js +1 -0
  9. package/data/sync/coordinatorState.js.map +1 -1
  10. package/data/sync/syncTelemetry.d.ts +15 -0
  11. package/data/sync/syncTelemetry.js +10 -0
  12. package/data/sync/syncTelemetry.js.map +1 -1
  13. package/data/sync/uploadLane.js +20 -3
  14. package/data/sync/uploadLane.js.map +1 -1
  15. package/internal/api-client/ApiClient.d.ts +73 -3
  16. package/internal/api-client/apiRequestMetrics.d.ts +18 -4
  17. package/internal/api-client/apiRequestMetrics.js +55 -5
  18. package/internal/api-client/apiRequestMetrics.js.map +1 -1
  19. package/internal/api-client/durationSampleWindow.d.ts +26 -0
  20. package/internal/api-client/durationSampleWindow.js +42 -0
  21. package/internal/api-client/durationSampleWindow.js.map +1 -0
  22. package/internal/api-client/measureApiRequest.js +9 -4
  23. package/internal/api-client/measureApiRequest.js.map +1 -1
  24. package/internal/api-client/serverTiming.d.ts +12 -0
  25. package/internal/api-client/serverTiming.js +49 -0
  26. package/internal/api-client/serverTiming.js.map +1 -0
  27. package/internal/validators/documentCreateSeedRefinements.js +9 -0
  28. package/internal/validators/documentCreateSeedRefinements.js.map +1 -0
  29. package/internal/validators/operation/auth.d.ts +120 -0
  30. package/internal/validators/operation/containerMutations.d.ts +355 -0
  31. package/internal/validators/operation/containerMutations.js +7 -1
  32. package/internal/validators/operation/containerMutations.js.map +1 -1
  33. package/internal/validators/operation/documentMutations.d.ts +356 -0
  34. package/internal/validators/operation/documentMutations.js +6 -1
  35. package/internal/validators/operation/documentMutations.js.map +1 -1
  36. package/internal/validators/operation/documentSync.d.ts +9 -9
  37. package/internal/validators/operation/organizations.d.ts +120 -0
  38. package/internal/validators/request/containerMetadata.d.ts +313 -0
  39. package/internal/validators/request/containerMetadata.js +20 -3
  40. package/internal/validators/request/containerMetadata.js.map +1 -1
  41. package/internal/validators/request/document.d.ts +571 -0
  42. package/internal/validators/request/document.js +19 -1
  43. package/internal/validators/request/document.js.map +1 -1
  44. package/internal/validators/request/documentCreateSeed.js +35 -0
  45. package/internal/validators/request/documentCreateSeed.js.map +1 -0
  46. package/internal/validators/request/organizationProvisioning.js +9 -22
  47. package/internal/validators/request/organizationProvisioning.js.map +1 -1
  48. package/internal/validators/response/containerMetadata.d.ts +20 -0
  49. package/internal/validators/response/documentMutation.d.ts +43 -0
  50. package/internal/validators/response/documentMutation.js +12 -1
  51. package/internal/validators/response/documentMutation.js.map +1 -1
  52. package/internal/validators/response/documentSyncSchema.d.ts +13 -9
  53. package/internal/validators/response/documentSyncSchema.js +23 -18
  54. package/internal/validators/response/documentSyncSchema.js.map +1 -1
  55. package/internal/validators/response/index.d.ts +1 -1
  56. package/internal/validators/response/index.js.map +1 -1
  57. package/internal/validators/response/organizationProvisioning.d.ts +350 -0
  58. package/internal/validators/response/registration.d.ts +120 -0
  59. package/package.json +1 -1
  60. package/stores/container-contents/containerState/containerStatePersistence.js +2 -0
  61. package/stores/container-contents/containerState/containerStatePersistence.js.map +1 -1
  62. package/stores/container-contents/remoteEvents/remoteEventSync.js +1 -1
  63. package/stores/container-contents/remoteEvents/remoteEventSync.js.map +1 -1
  64. package/stores/container-contents/state.js +2 -0
  65. package/stores/container-contents/state.js.map +1 -1
  66. package/stores/container-contents/syncAgent/syncAgentTypes.d.ts +5 -0
  67. package/stores/container-contents/syncAgent/syncAgentTypes.js.map +1 -1
  68. package/stores/documents/documentStore/sync/createdDocumentPersistence.js +71 -0
  69. package/stores/documents/documentStore/sync/createdDocumentPersistence.js.map +1 -0
  70. package/stores/documents/documentStore/sync/index.js +13 -2
  71. package/stores/documents/documentStore/sync/index.js.map +1 -1
  72. package/stores/documents/documentStore/sync/syncRemoteSignals.js +21 -3
  73. package/stores/documents/documentStore/sync/syncRemoteSignals.js.map +1 -1
  74. package/stores/documents/documentStore/sync/syncSeededCreate.js +50 -0
  75. package/stores/documents/documentStore/sync/syncSeededCreate.js.map +1 -0
  76. package/stores/documents/documentStore/sync/syncShared.js +16 -8
  77. package/stores/documents/documentStore/sync/syncShared.js.map +1 -1
  78. package/workflows/container-contents/container-state/create/createIntentSeed.js +60 -0
  79. package/workflows/container-contents/container-state/create/createIntentSeed.js.map +1 -0
  80. package/workflows/container-contents/container-state/create/createIntentSync.js +18 -19
  81. package/workflows/container-contents/container-state/create/createIntentSync.js.map +1 -1
  82. package/workflows/container-contents/container-state/create/createWithMetadata.js +43 -6
  83. package/workflows/container-contents/container-state/create/createWithMetadata.js.map +1 -1
  84. package/workflows/container-contents/container-state/create/createWithMetadataPlan.js +5 -1
  85. package/workflows/container-contents/container-state/create/createWithMetadataPlan.js.map +1 -1
  86. package/workflows/container-contents/container-state/remote.js +15 -0
  87. package/workflows/container-contents/container-state/remote.js.map +1 -1
  88. package/workflows/container-contents/container-state/types.js.map +1 -1
  89. package/workflows/container-contents/metadata/metadataEvents.d.ts +7 -1
  90. package/workflows/container-contents/metadata/metadataEvents.js +8 -2
  91. package/workflows/container-contents/metadata/metadataEvents.js.map +1 -1
  92. package/workflows/container-contents/remoteHydration/types.d.ts +3 -0
  93. package/workflows/container-contents/remoteHydration/types.js.map +1 -1
  94. package/workflows/documents/create/index.d.ts +7 -0
  95. package/workflows/documents/create/index.js +40 -2
  96. package/workflows/documents/create/index.js.map +1 -1
  97. package/workflows/documents/index.d.ts +1 -0
  98. package/workflows/documents/index.js +1 -0
  99. package/workflows/documents/index.js.map +1 -1
  100. package/workflows/documents/sync/initialSync.d.ts +39 -0
  101. package/workflows/documents/sync/initialSync.js +39 -6
  102. package/workflows/documents/sync/initialSync.js.map +1 -1
@@ -145,6 +145,269 @@ export declare const documentCreateRequestShape: {
145
145
  manifestHash: string;
146
146
  }[]>>;
147
147
  };
148
+ /** A document create with no seed: a container's metadata document. */
149
+ export declare const DocumentCreateBaseRequestSchema: z.ZodType<{
150
+ body: unknown;
151
+ contentKeyBundle: {
152
+ contentKeyEpoch: number;
153
+ linkSetManifestHash: string;
154
+ targetHash: string;
155
+ targets: {
156
+ containerId: string;
157
+ containerKeyEpoch: number;
158
+ containerKeyEpochId: string;
159
+ containerManifestHash: string;
160
+ wrappedKey: string;
161
+ wrappingMetadata: Record<string, unknown>;
162
+ }[];
163
+ };
164
+ event: Record<string, unknown>;
165
+ expectedManifestHash: string;
166
+ manifest: Record<string, unknown>;
167
+ authorizingContainerPathRefs?: {
168
+ containerId: string;
169
+ manifestHash: string;
170
+ }[][] | undefined;
171
+ containerRekeys?: {
172
+ body: unknown;
173
+ event: Record<string, unknown>;
174
+ expectedManifestHash: string;
175
+ keyEpoch: Record<string, unknown>;
176
+ keyring: Record<string, unknown> | null;
177
+ manifest: Record<string, unknown>;
178
+ predecessorBridge: Record<string, unknown> | null;
179
+ principalPolicyRefs: {
180
+ principalType: "group" | "organization";
181
+ principalId: string;
182
+ version: number;
183
+ stateHash: string;
184
+ }[];
185
+ wraps: Record<string, unknown>[];
186
+ containerManifestHistoryRefs?: {
187
+ containerId: string;
188
+ manifestHash: string;
189
+ }[] | undefined;
190
+ destinationParentContainerPathRefs?: {
191
+ containerId: string;
192
+ manifestHash: string;
193
+ }[] | undefined;
194
+ parentContainerPathRefs?: {
195
+ containerId: string;
196
+ manifestHash: string;
197
+ }[] | undefined;
198
+ parentKekState?: Record<string, unknown> | null | undefined;
199
+ previousContainerPathRefs?: {
200
+ containerId: string;
201
+ manifestHash: string;
202
+ }[] | undefined;
203
+ previousManifestRef?: {
204
+ containerId: string;
205
+ manifestHash: string;
206
+ } | null | undefined;
207
+ userRecipientKeys?: Record<string, unknown>[] | undefined;
208
+ }[] | undefined;
209
+ targetContainerPathRefs?: {
210
+ containerId: string;
211
+ manifestHash: string;
212
+ }[] | undefined;
213
+ }, {
214
+ body: unknown;
215
+ contentKeyBundle: {
216
+ contentKeyEpoch: number;
217
+ linkSetManifestHash: string;
218
+ targetHash: string;
219
+ targets: {
220
+ containerId: string;
221
+ containerKeyEpoch: number;
222
+ containerKeyEpochId: string;
223
+ containerManifestHash: string;
224
+ wrappedKey: string;
225
+ wrappingMetadata: Record<string, unknown>;
226
+ }[];
227
+ };
228
+ event: Record<string, unknown>;
229
+ expectedManifestHash: string;
230
+ manifest: Record<string, unknown>;
231
+ authorizingContainerPathRefs?: {
232
+ containerId: string;
233
+ manifestHash: string;
234
+ }[][] | undefined;
235
+ containerRekeys?: {
236
+ body: unknown;
237
+ event: Record<string, unknown>;
238
+ expectedManifestHash: string;
239
+ keyEpoch: Record<string, unknown>;
240
+ keyring: Record<string, unknown> | null;
241
+ manifest: Record<string, unknown>;
242
+ predecessorBridge: Record<string, unknown> | null;
243
+ principalPolicyRefs: {
244
+ principalType: "group" | "organization";
245
+ principalId: string;
246
+ version: number;
247
+ stateHash: string;
248
+ }[];
249
+ wraps: Record<string, unknown>[];
250
+ containerManifestHistoryRefs?: {
251
+ containerId: string;
252
+ manifestHash: string;
253
+ }[] | undefined;
254
+ destinationParentContainerPathRefs?: {
255
+ containerId: string;
256
+ manifestHash: string;
257
+ }[] | undefined;
258
+ parentContainerPathRefs?: {
259
+ containerId: string;
260
+ manifestHash: string;
261
+ }[] | undefined;
262
+ parentKekState?: Record<string, unknown> | null | undefined;
263
+ previousContainerPathRefs?: {
264
+ containerId: string;
265
+ manifestHash: string;
266
+ }[] | undefined;
267
+ previousManifestRef?: {
268
+ containerId: string;
269
+ manifestHash: string;
270
+ } | null | undefined;
271
+ userRecipientKeys?: Record<string, unknown>[] | undefined;
272
+ }[] | undefined;
273
+ targetContainerPathRefs?: {
274
+ containerId: string;
275
+ manifestHash: string;
276
+ }[] | undefined;
277
+ }, z.core.$ZodTypeInternals<{
278
+ body: unknown;
279
+ contentKeyBundle: {
280
+ contentKeyEpoch: number;
281
+ linkSetManifestHash: string;
282
+ targetHash: string;
283
+ targets: {
284
+ containerId: string;
285
+ containerKeyEpoch: number;
286
+ containerKeyEpochId: string;
287
+ containerManifestHash: string;
288
+ wrappedKey: string;
289
+ wrappingMetadata: Record<string, unknown>;
290
+ }[];
291
+ };
292
+ event: Record<string, unknown>;
293
+ expectedManifestHash: string;
294
+ manifest: Record<string, unknown>;
295
+ authorizingContainerPathRefs?: {
296
+ containerId: string;
297
+ manifestHash: string;
298
+ }[][] | undefined;
299
+ containerRekeys?: {
300
+ body: unknown;
301
+ event: Record<string, unknown>;
302
+ expectedManifestHash: string;
303
+ keyEpoch: Record<string, unknown>;
304
+ keyring: Record<string, unknown> | null;
305
+ manifest: Record<string, unknown>;
306
+ predecessorBridge: Record<string, unknown> | null;
307
+ principalPolicyRefs: {
308
+ principalType: "group" | "organization";
309
+ principalId: string;
310
+ version: number;
311
+ stateHash: string;
312
+ }[];
313
+ wraps: Record<string, unknown>[];
314
+ containerManifestHistoryRefs?: {
315
+ containerId: string;
316
+ manifestHash: string;
317
+ }[] | undefined;
318
+ destinationParentContainerPathRefs?: {
319
+ containerId: string;
320
+ manifestHash: string;
321
+ }[] | undefined;
322
+ parentContainerPathRefs?: {
323
+ containerId: string;
324
+ manifestHash: string;
325
+ }[] | undefined;
326
+ parentKekState?: Record<string, unknown> | null | undefined;
327
+ previousContainerPathRefs?: {
328
+ containerId: string;
329
+ manifestHash: string;
330
+ }[] | undefined;
331
+ previousManifestRef?: {
332
+ containerId: string;
333
+ manifestHash: string;
334
+ } | null | undefined;
335
+ userRecipientKeys?: Record<string, unknown>[] | undefined;
336
+ }[] | undefined;
337
+ targetContainerPathRefs?: {
338
+ containerId: string;
339
+ manifestHash: string;
340
+ }[] | undefined;
341
+ }, {
342
+ body: unknown;
343
+ contentKeyBundle: {
344
+ contentKeyEpoch: number;
345
+ linkSetManifestHash: string;
346
+ targetHash: string;
347
+ targets: {
348
+ containerId: string;
349
+ containerKeyEpoch: number;
350
+ containerKeyEpochId: string;
351
+ containerManifestHash: string;
352
+ wrappedKey: string;
353
+ wrappingMetadata: Record<string, unknown>;
354
+ }[];
355
+ };
356
+ event: Record<string, unknown>;
357
+ expectedManifestHash: string;
358
+ manifest: Record<string, unknown>;
359
+ authorizingContainerPathRefs?: {
360
+ containerId: string;
361
+ manifestHash: string;
362
+ }[][] | undefined;
363
+ containerRekeys?: {
364
+ body: unknown;
365
+ event: Record<string, unknown>;
366
+ expectedManifestHash: string;
367
+ keyEpoch: Record<string, unknown>;
368
+ keyring: Record<string, unknown> | null;
369
+ manifest: Record<string, unknown>;
370
+ predecessorBridge: Record<string, unknown> | null;
371
+ principalPolicyRefs: {
372
+ principalType: "group" | "organization";
373
+ principalId: string;
374
+ version: number;
375
+ stateHash: string;
376
+ }[];
377
+ wraps: Record<string, unknown>[];
378
+ containerManifestHistoryRefs?: {
379
+ containerId: string;
380
+ manifestHash: string;
381
+ }[] | undefined;
382
+ destinationParentContainerPathRefs?: {
383
+ containerId: string;
384
+ manifestHash: string;
385
+ }[] | undefined;
386
+ parentContainerPathRefs?: {
387
+ containerId: string;
388
+ manifestHash: string;
389
+ }[] | undefined;
390
+ parentKekState?: Record<string, unknown> | null | undefined;
391
+ previousContainerPathRefs?: {
392
+ containerId: string;
393
+ manifestHash: string;
394
+ }[] | undefined;
395
+ previousManifestRef?: {
396
+ containerId: string;
397
+ manifestHash: string;
398
+ } | null | undefined;
399
+ userRecipientKeys?: Record<string, unknown>[] | undefined;
400
+ }[] | undefined;
401
+ targetContainerPathRefs?: {
402
+ containerId: string;
403
+ manifestHash: string;
404
+ }[] | undefined;
405
+ }>>;
406
+ /**
407
+ * `POST /documents`. The optional seed is the create's first queued update,
408
+ * committed in the create transaction under the same checks as a standalone
409
+ * sync, so a new document needs no follow-up sync round trip.
410
+ */
148
411
  export declare const DocumentCreateRequestSchema: z.ZodType<{
149
412
  body: unknown;
150
413
  contentKeyBundle: {
@@ -163,6 +426,83 @@ export declare const DocumentCreateRequestSchema: z.ZodType<{
163
426
  event: Record<string, unknown>;
164
427
  expectedManifestHash: string;
165
428
  manifest: Record<string, unknown>;
429
+ initialSync?: {
430
+ contentKeyEpoch: number;
431
+ expectedLinkSetManifestHash: string;
432
+ expectedTargetHash: string;
433
+ localVersionVector: string | null;
434
+ outgoingUpdates: {
435
+ encryptedData: string;
436
+ id: string;
437
+ partialEndVersionVector: string;
438
+ partialStartVersionVector: string;
439
+ plaintextHash: string;
440
+ writeHeader: Record<string, unknown>;
441
+ checkpointKind?: "rotate_baseline" | undefined;
442
+ checkpointPayloadKind?: "full_history_snapshot" | undefined;
443
+ sourceVersionVector?: string | undefined;
444
+ }[];
445
+ supportsPullPagination: true;
446
+ authorizingContainerPathRefs?: {
447
+ containerId: string;
448
+ manifestHash: string;
449
+ }[][] | undefined;
450
+ containerRekeys?: {
451
+ body: unknown;
452
+ event: Record<string, unknown>;
453
+ expectedManifestHash: string;
454
+ keyEpoch: Record<string, unknown>;
455
+ keyring: Record<string, unknown> | null;
456
+ manifest: Record<string, unknown>;
457
+ predecessorBridge: Record<string, unknown> | null;
458
+ principalPolicyRefs: {
459
+ principalType: "group" | "organization";
460
+ principalId: string;
461
+ version: number;
462
+ stateHash: string;
463
+ }[];
464
+ wraps: Record<string, unknown>[];
465
+ containerManifestHistoryRefs?: {
466
+ containerId: string;
467
+ manifestHash: string;
468
+ }[] | undefined;
469
+ destinationParentContainerPathRefs?: {
470
+ containerId: string;
471
+ manifestHash: string;
472
+ }[] | undefined;
473
+ parentContainerPathRefs?: {
474
+ containerId: string;
475
+ manifestHash: string;
476
+ }[] | undefined;
477
+ parentKekState?: Record<string, unknown> | null | undefined;
478
+ previousContainerPathRefs?: {
479
+ containerId: string;
480
+ manifestHash: string;
481
+ }[] | undefined;
482
+ previousManifestRef?: {
483
+ containerId: string;
484
+ manifestHash: string;
485
+ } | null | undefined;
486
+ userRecipientKeys?: Record<string, unknown>[] | undefined;
487
+ }[] | undefined;
488
+ contentKeyBundle?: {
489
+ contentKeyEpoch: number;
490
+ linkSetManifestHash: string;
491
+ targetHash: string;
492
+ targets: {
493
+ containerId: string;
494
+ containerKeyEpoch: number;
495
+ containerKeyEpochId: string;
496
+ containerManifestHash: string;
497
+ wrappedKey: string;
498
+ wrappingMetadata: Record<string, unknown>;
499
+ }[];
500
+ } | undefined;
501
+ historyMode?: "raw" | undefined;
502
+ inlineRekeyCommitId?: string | undefined;
503
+ minLsn?: string | undefined;
504
+ pullCursor?: string | undefined;
505
+ } | undefined;
166
506
  authorizingContainerPathRefs?: {
167
507
  containerId: string;
168
508
  manifestHash: string;
@@ -227,6 +567,83 @@ export declare const DocumentCreateRequestSchema: z.ZodType<{
227
567
  event: Record<string, unknown>;
228
568
  expectedManifestHash: string;
229
569
  manifest: Record<string, unknown>;
570
+ initialSync?: {
571
+ contentKeyEpoch: number;
572
+ expectedLinkSetManifestHash: string;
573
+ expectedTargetHash: string;
574
+ localVersionVector: string | null;
575
+ outgoingUpdates: {
576
+ encryptedData: string;
577
+ id: string;
578
+ partialEndVersionVector: string;
579
+ partialStartVersionVector: string;
580
+ plaintextHash: string;
581
+ writeHeader: Record<string, unknown>;
582
+ checkpointKind?: "rotate_baseline" | undefined;
583
+ checkpointPayloadKind?: "full_history_snapshot" | undefined;
584
+ sourceVersionVector?: string | undefined;
585
+ }[];
586
+ supportsPullPagination: true;
587
+ authorizingContainerPathRefs?: {
588
+ containerId: string;
589
+ manifestHash: string;
590
+ }[][] | undefined;
591
+ containerRekeys?: {
592
+ body: unknown;
593
+ event: Record<string, unknown>;
594
+ expectedManifestHash: string;
595
+ keyEpoch: Record<string, unknown>;
596
+ keyring: Record<string, unknown> | null;
597
+ manifest: Record<string, unknown>;
598
+ predecessorBridge: Record<string, unknown> | null;
599
+ principalPolicyRefs: {
600
+ principalType: "group" | "organization";
601
+ principalId: string;
602
+ version: number;
603
+ stateHash: string;
604
+ }[];
605
+ wraps: Record<string, unknown>[];
606
+ containerManifestHistoryRefs?: {
607
+ containerId: string;
608
+ manifestHash: string;
609
+ }[] | undefined;
610
+ destinationParentContainerPathRefs?: {
611
+ containerId: string;
612
+ manifestHash: string;
613
+ }[] | undefined;
614
+ parentContainerPathRefs?: {
615
+ containerId: string;
616
+ manifestHash: string;
617
+ }[] | undefined;
618
+ parentKekState?: Record<string, unknown> | null | undefined;
619
+ previousContainerPathRefs?: {
620
+ containerId: string;
621
+ manifestHash: string;
622
+ }[] | undefined;
623
+ previousManifestRef?: {
624
+ containerId: string;
625
+ manifestHash: string;
626
+ } | null | undefined;
627
+ userRecipientKeys?: Record<string, unknown>[] | undefined;
628
+ }[] | undefined;
629
+ contentKeyBundle?: {
630
+ contentKeyEpoch: number;
631
+ linkSetManifestHash: string;
632
+ targetHash: string;
633
+ targets: {
634
+ containerId: string;
635
+ containerKeyEpoch: number;
636
+ containerKeyEpochId: string;
637
+ containerManifestHash: string;
638
+ wrappedKey: string;
639
+ wrappingMetadata: Record<string, unknown>;
640
+ }[];
641
+ } | undefined;
642
+ historyMode?: "raw" | undefined;
643
+ inlineRekeyCommitId?: string | undefined;
644
+ minLsn?: string | undefined;
645
+ pullCursor?: string | undefined;
646
+ } | undefined;
230
647
  authorizingContainerPathRefs?: {
231
648
  containerId: string;
232
649
  manifestHash: string;
@@ -291,6 +708,83 @@ export declare const DocumentCreateRequestSchema: z.ZodType<{
291
708
  event: Record<string, unknown>;
292
709
  expectedManifestHash: string;
293
710
  manifest: Record<string, unknown>;
711
+ initialSync?: {
712
+ contentKeyEpoch: number;
713
+ expectedLinkSetManifestHash: string;
714
+ expectedTargetHash: string;
715
+ localVersionVector: string | null;
716
+ outgoingUpdates: {
717
+ encryptedData: string;
718
+ id: string;
719
+ partialEndVersionVector: string;
720
+ partialStartVersionVector: string;
721
+ plaintextHash: string;
722
+ writeHeader: Record<string, unknown>;
723
+ checkpointKind?: "rotate_baseline" | undefined;
724
+ checkpointPayloadKind?: "full_history_snapshot" | undefined;
725
+ sourceVersionVector?: string | undefined;
726
+ }[];
727
+ supportsPullPagination: true;
728
+ authorizingContainerPathRefs?: {
729
+ containerId: string;
730
+ manifestHash: string;
731
+ }[][] | undefined;
732
+ containerRekeys?: {
733
+ body: unknown;
734
+ event: Record<string, unknown>;
735
+ expectedManifestHash: string;
736
+ keyEpoch: Record<string, unknown>;
737
+ keyring: Record<string, unknown> | null;
738
+ manifest: Record<string, unknown>;
739
+ predecessorBridge: Record<string, unknown> | null;
740
+ principalPolicyRefs: {
741
+ principalType: "group" | "organization";
742
+ principalId: string;
743
+ version: number;
744
+ stateHash: string;
745
+ }[];
746
+ wraps: Record<string, unknown>[];
747
+ containerManifestHistoryRefs?: {
748
+ containerId: string;
749
+ manifestHash: string;
750
+ }[] | undefined;
751
+ destinationParentContainerPathRefs?: {
752
+ containerId: string;
753
+ manifestHash: string;
754
+ }[] | undefined;
755
+ parentContainerPathRefs?: {
756
+ containerId: string;
757
+ manifestHash: string;
758
+ }[] | undefined;
759
+ parentKekState?: Record<string, unknown> | null | undefined;
760
+ previousContainerPathRefs?: {
761
+ containerId: string;
762
+ manifestHash: string;
763
+ }[] | undefined;
764
+ previousManifestRef?: {
765
+ containerId: string;
766
+ manifestHash: string;
767
+ } | null | undefined;
768
+ userRecipientKeys?: Record<string, unknown>[] | undefined;
769
+ }[] | undefined;
770
+ contentKeyBundle?: {
771
+ contentKeyEpoch: number;
772
+ linkSetManifestHash: string;
773
+ targetHash: string;
774
+ targets: {
775
+ containerId: string;
776
+ containerKeyEpoch: number;
777
+ containerKeyEpochId: string;
778
+ containerManifestHash: string;
779
+ wrappedKey: string;
780
+ wrappingMetadata: Record<string, unknown>;
781
+ }[];
782
+ } | undefined;
783
+ historyMode?: "raw" | undefined;
784
+ inlineRekeyCommitId?: string | undefined;
785
+ minLsn?: string | undefined;
786
+ pullCursor?: string | undefined;
787
+ } | undefined;
294
788
  authorizingContainerPathRefs?: {
295
789
  containerId: string;
296
790
  manifestHash: string;
@@ -355,6 +849,83 @@ export declare const DocumentCreateRequestSchema: z.ZodType<{
355
849
  event: Record<string, unknown>;
356
850
  expectedManifestHash: string;
357
851
  manifest: Record<string, unknown>;
852
+ initialSync?: {
853
+ contentKeyEpoch: number;
854
+ expectedLinkSetManifestHash: string;
855
+ expectedTargetHash: string;
856
+ localVersionVector: string | null;
857
+ outgoingUpdates: {
858
+ encryptedData: string;
859
+ id: string;
860
+ partialEndVersionVector: string;
861
+ partialStartVersionVector: string;
862
+ plaintextHash: string;
863
+ writeHeader: Record<string, unknown>;
864
+ checkpointKind?: "rotate_baseline" | undefined;
865
+ checkpointPayloadKind?: "full_history_snapshot" | undefined;
866
+ sourceVersionVector?: string | undefined;
867
+ }[];
868
+ supportsPullPagination: true;
869
+ authorizingContainerPathRefs?: {
870
+ containerId: string;
871
+ manifestHash: string;
872
+ }[][] | undefined;
873
+ containerRekeys?: {
874
+ body: unknown;
875
+ event: Record<string, unknown>;
876
+ expectedManifestHash: string;
877
+ keyEpoch: Record<string, unknown>;
878
+ keyring: Record<string, unknown> | null;
879
+ manifest: Record<string, unknown>;
880
+ predecessorBridge: Record<string, unknown> | null;
881
+ principalPolicyRefs: {
882
+ principalType: "group" | "organization";
883
+ principalId: string;
884
+ version: number;
885
+ stateHash: string;
886
+ }[];
887
+ wraps: Record<string, unknown>[];
888
+ containerManifestHistoryRefs?: {
889
+ containerId: string;
890
+ manifestHash: string;
891
+ }[] | undefined;
892
+ destinationParentContainerPathRefs?: {
893
+ containerId: string;
894
+ manifestHash: string;
895
+ }[] | undefined;
896
+ parentContainerPathRefs?: {
897
+ containerId: string;
898
+ manifestHash: string;
899
+ }[] | undefined;
900
+ parentKekState?: Record<string, unknown> | null | undefined;
901
+ previousContainerPathRefs?: {
902
+ containerId: string;
903
+ manifestHash: string;
904
+ }[] | undefined;
905
+ previousManifestRef?: {
906
+ containerId: string;
907
+ manifestHash: string;
908
+ } | null | undefined;
909
+ userRecipientKeys?: Record<string, unknown>[] | undefined;
910
+ }[] | undefined;
911
+ contentKeyBundle?: {
912
+ contentKeyEpoch: number;
913
+ linkSetManifestHash: string;
914
+ targetHash: string;
915
+ targets: {
916
+ containerId: string;
917
+ containerKeyEpoch: number;
918
+ containerKeyEpochId: string;
919
+ containerManifestHash: string;
920
+ wrappedKey: string;
921
+ wrappingMetadata: Record<string, unknown>;
922
+ }[];
923
+ } | undefined;
924
+ historyMode?: "raw" | undefined;
925
+ inlineRekeyCommitId?: string | undefined;
926
+ minLsn?: string | undefined;
927
+ pullCursor?: string | undefined;
928
+ } | undefined;
358
929
  authorizingContainerPathRefs?: {
359
930
  containerId: string;
360
931
  manifestHash: string;
@@ -1,8 +1,10 @@
1
+ import { documentCreateSeedRefinement } from "../documentCreateSeedRefinements.js";
1
2
  import { documentLinkSetPathRefinement } from "../documentSyncRefinements.js";
2
3
  import { registerJsonSchemaRuntimeRefinements } from "../jsonSchema.js";
3
4
  import { arraySchema, loosePlainObject, nonEmptyStringSchema, plainObjectSchema, requiredUnknownSchema, } from "../schema.js";
4
5
  import { MAX_CONTAINER_PATH_LENGTH, MAX_DOCUMENT_SYNC_AUTHORIZATION_PATH_REFS, MAX_DOCUMENT_SYNC_AUTHORIZATION_PATHS, MAX_INLINE_CONTAINER_REKEYS, } from "../util/index.js";
5
6
  import { ContainerMutationRequestSchema } from "./container.js";
7
+ import { refineSeedWithinSyncRequestLimit, refineSingleUpdateSeed, } from "./documentCreateSeed.js";
6
8
  import { ContainerManifestPathSchema, ContainerManifestRefArrayArraySchema, DocumentContentKeyBundleRequestSchema, DocumentOutgoingUpdateSchema, DocumentSyncRequestSchema, } from "./documentSyncSchema.js";
7
9
  export { ContainerManifestRefArrayArraySchema, ContainerManifestRefSchema, DocumentContentKeyBundleRequestSchema, DocumentContentKeyTargetEnvelopeSchema, DocumentOutgoingUpdateSchema, DocumentSyncRequestSchema, } from "./documentSyncSchema.js";
8
10
  export const documentCreateRequestShape = {
@@ -15,7 +17,23 @@ export const documentCreateRequestShape = {
15
17
  manifest: plainObjectSchema,
16
18
  targetContainerPathRefs: ContainerManifestPathSchema.optional(),
17
19
  };
18
- export const DocumentCreateRequestSchema = loosePlainObject(documentCreateRequestShape);
20
+ /** A document create with no seed: a container's metadata document. */
21
+ export const DocumentCreateBaseRequestSchema = loosePlainObject(documentCreateRequestShape);
22
+ /**
23
+ * `POST /documents`. The optional seed is the create's first queued update,
24
+ * committed in the create transaction under the same checks as a standalone
25
+ * sync, so a new document needs no follow-up sync round trip.
26
+ */
27
+ export const DocumentCreateRequestSchema = registerJsonSchemaRuntimeRefinements(loosePlainObject({
28
+ ...documentCreateRequestShape,
29
+ initialSync: DocumentSyncRequestSchema.optional(),
30
+ }).superRefine((value, context) => {
31
+ refineSingleUpdateSeed(value.initialSync, context, {
32
+ message: "document create seed requires one update and no container rekeys",
33
+ path: "initialSync",
34
+ });
35
+ refineSeedWithinSyncRequestLimit(value.initialSync, context, "initialSync");
36
+ }), [documentCreateSeedRefinement]);
19
37
  // The prior link-set manifest is the document's current head. The server
20
38
  // resolves it from its own store, while the signed event's previous manifest
21
39
  // hash pins freshness, so the writer does not echo the bundle back.
@@ -1 +1 @@
1
- {"version":3,"file":"document.js","sourceRoot":"","sources":["document.ts"],"names":[],"mappings":"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","sourcesContent":["import type { z } from \"zod\";\nimport { documentLinkSetPathRefinement } from \"../documentSyncRefinements\";\nimport { registerJsonSchemaRuntimeRefinements } from \"../jsonSchema\";\nimport {\n arraySchema,\n loosePlainObject,\n nonEmptyStringSchema,\n plainObjectSchema,\n requiredUnknownSchema,\n} from \"../schema\";\nimport {\n MAX_CONTAINER_PATH_LENGTH,\n MAX_DOCUMENT_SYNC_AUTHORIZATION_PATH_REFS,\n MAX_DOCUMENT_SYNC_AUTHORIZATION_PATHS,\n MAX_INLINE_CONTAINER_REKEYS,\n} from \"../util\";\nimport { ContainerMutationRequestSchema } from \"./container\";\nimport {\n ContainerManifestPathSchema,\n type ContainerManifestRef,\n ContainerManifestRefArrayArraySchema,\n type DocumentContentKeyBundleRequest,\n DocumentContentKeyBundleRequestSchema,\n DocumentOutgoingUpdateSchema,\n type DocumentSyncRequest,\n DocumentSyncRequestSchema,\n} from \"./documentSyncSchema\";\n\nexport {\n type ContainerManifestRef,\n ContainerManifestRefArrayArraySchema,\n ContainerManifestRefSchema,\n type DocumentContentKeyBundleRequest,\n DocumentContentKeyBundleRequestSchema,\n type DocumentContentKeyTargetEnvelope,\n DocumentContentKeyTargetEnvelopeSchema,\n type DocumentOutgoingUpdate,\n DocumentOutgoingUpdateSchema,\n type DocumentSyncRequest,\n DocumentSyncRequestSchema,\n} from \"./documentSyncSchema\";\n\nexport const documentCreateRequestShape = {\n authorizingContainerPathRefs: ContainerManifestRefArrayArraySchema.optional(),\n body: requiredUnknownSchema,\n containerRekeys: arraySchema(\n ContainerMutationRequestSchema,\n MAX_INLINE_CONTAINER_REKEYS,\n ).optional(),\n contentKeyBundle: DocumentContentKeyBundleRequestSchema,\n event: plainObjectSchema,\n expectedManifestHash: nonEmptyStringSchema,\n manifest: plainObjectSchema,\n targetContainerPathRefs: ContainerManifestPathSchema.optional(),\n} satisfies z.ZodRawShape;\n\nexport const DocumentCreateRequestSchema = loosePlainObject(\n documentCreateRequestShape,\n);\n\nexport type DocumentCreateRequest = z.infer<typeof DocumentCreateRequestSchema>;\n\n// The prior link-set manifest is the document's current head. The server\n// resolves it from its own store, while the signed event's previous manifest\n// hash pins freshness, so the writer does not echo the bundle back.\nexport const DocumentLinkSetMutationRequestSchema =\n registerJsonSchemaRuntimeRefinements(\n loosePlainObject({\n authorizingContainerPathRefs: ContainerManifestRefArrayArraySchema,\n body: requiredUnknownSchema,\n containerRekeys: arraySchema(\n ContainerMutationRequestSchema,\n MAX_INLINE_CONTAINER_REKEYS,\n ).optional(),\n contentKeyBundle: DocumentContentKeyBundleRequestSchema,\n event: plainObjectSchema,\n expectedManifestHash: nonEmptyStringSchema,\n manifest: plainObjectSchema,\n rotationBaseline: DocumentOutgoingUpdateSchema.optional(),\n // A container path (root→leaf chain) must carry at least one manifest\n // reference; an empty path authorizes nothing and is never legitimately built.\n targetContainerPathRefs: ContainerManifestPathSchema,\n }).superRefine((request, context) => {\n if (\n !Array.isArray(request.authorizingContainerPathRefs) ||\n !Array.isArray(request.targetContainerPathRefs)\n ) {\n return;\n }\n // The nested schemas have already reported their shape/cardinality\n // errors. Keep this aggregate refinement bounded and never dereference a\n // malformed path after those continuable issues have been replayed.\n if (\n request.authorizingContainerPathRefs.length >\n MAX_DOCUMENT_SYNC_AUTHORIZATION_PATHS ||\n request.targetContainerPathRefs.length > MAX_CONTAINER_PATH_LENGTH ||\n request.authorizingContainerPathRefs.some(\n (path) =>\n !Array.isArray(path) || path.length > MAX_CONTAINER_PATH_LENGTH,\n )\n ) {\n return;\n }\n const totalReferences = request.authorizingContainerPathRefs.reduce(\n (total, path) => total + path.length,\n request.targetContainerPathRefs.length,\n );\n if (totalReferences > MAX_DOCUMENT_SYNC_AUTHORIZATION_PATH_REFS) {\n context.addIssue({\n code: \"custom\",\n message: documentLinkSetPathRefinement.description,\n path: [\"authorizingContainerPathRefs\"],\n });\n }\n }),\n [documentLinkSetPathRefinement],\n );\n\nexport type DocumentLinkSetMutationRequest = z.infer<\n typeof DocumentLinkSetMutationRequestSchema\n>;\n\nexport const DocumentPurgeRequestSchema = loosePlainObject({\n authorizingContainerPathRefs: ContainerManifestPathSchema,\n body: requiredUnknownSchema,\n event: plainObjectSchema,\n});\n\nexport type DocumentPurgeRequest = z.infer<typeof DocumentPurgeRequestSchema>;\n\nexport function isContainerManifestRefArrayArray(\n value: unknown,\n): value is ContainerManifestRef[][] {\n return ContainerManifestRefArrayArraySchema.safeParse(value).success;\n}\n\nexport function isDocumentContentKeyBundleRequest(\n value: unknown,\n): value is DocumentContentKeyBundleRequest {\n return DocumentContentKeyBundleRequestSchema.safeParse(value).success;\n}\n\nexport function isDocumentCreateRequest(\n value: unknown,\n): value is DocumentCreateRequest {\n return DocumentCreateRequestSchema.safeParse(value).success;\n}\n\nexport function isDocumentLinkSetMutationRequest(\n value: unknown,\n): value is DocumentLinkSetMutationRequest {\n return DocumentLinkSetMutationRequestSchema.safeParse(value).success;\n}\n\nexport function isDocumentPurgeRequest(\n value: unknown,\n): value is DocumentPurgeRequest {\n return DocumentPurgeRequestSchema.safeParse(value).success;\n}\n\nexport function isDocumentSyncRequest(\n value: unknown,\n): value is DocumentSyncRequest {\n return DocumentSyncRequestSchema.safeParse(value).success;\n}\n"]}
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["document.ts"],"names":[],"mappings":"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","sourcesContent":["import type { z } from \"zod\";\nimport { documentCreateSeedRefinement } from \"../documentCreateSeedRefinements\";\nimport { documentLinkSetPathRefinement } from \"../documentSyncRefinements\";\nimport { registerJsonSchemaRuntimeRefinements } from \"../jsonSchema\";\nimport {\n arraySchema,\n loosePlainObject,\n nonEmptyStringSchema,\n plainObjectSchema,\n requiredUnknownSchema,\n} from \"../schema\";\nimport {\n MAX_CONTAINER_PATH_LENGTH,\n MAX_DOCUMENT_SYNC_AUTHORIZATION_PATH_REFS,\n MAX_DOCUMENT_SYNC_AUTHORIZATION_PATHS,\n MAX_INLINE_CONTAINER_REKEYS,\n} from \"../util\";\nimport { ContainerMutationRequestSchema } from \"./container\";\nimport {\n refineSeedWithinSyncRequestLimit,\n refineSingleUpdateSeed,\n} from \"./documentCreateSeed\";\nimport {\n ContainerManifestPathSchema,\n type ContainerManifestRef,\n ContainerManifestRefArrayArraySchema,\n type DocumentContentKeyBundleRequest,\n DocumentContentKeyBundleRequestSchema,\n DocumentOutgoingUpdateSchema,\n type DocumentSyncRequest,\n DocumentSyncRequestSchema,\n} from \"./documentSyncSchema\";\n\nexport {\n type ContainerManifestRef,\n ContainerManifestRefArrayArraySchema,\n ContainerManifestRefSchema,\n type DocumentContentKeyBundleRequest,\n DocumentContentKeyBundleRequestSchema,\n type DocumentContentKeyTargetEnvelope,\n DocumentContentKeyTargetEnvelopeSchema,\n type DocumentOutgoingUpdate,\n DocumentOutgoingUpdateSchema,\n type DocumentSyncRequest,\n DocumentSyncRequestSchema,\n} from \"./documentSyncSchema\";\n\nexport const documentCreateRequestShape = {\n authorizingContainerPathRefs: ContainerManifestRefArrayArraySchema.optional(),\n body: requiredUnknownSchema,\n containerRekeys: arraySchema(\n ContainerMutationRequestSchema,\n MAX_INLINE_CONTAINER_REKEYS,\n ).optional(),\n contentKeyBundle: DocumentContentKeyBundleRequestSchema,\n event: plainObjectSchema,\n expectedManifestHash: nonEmptyStringSchema,\n manifest: plainObjectSchema,\n targetContainerPathRefs: ContainerManifestPathSchema.optional(),\n} satisfies z.ZodRawShape;\n\n/** A document create with no seed: a container's metadata document. */\nexport const DocumentCreateBaseRequestSchema = loosePlainObject(\n documentCreateRequestShape,\n);\n\n/**\n * `POST /documents`. The optional seed is the create's first queued update,\n * committed in the create transaction under the same checks as a standalone\n * sync, so a new document needs no follow-up sync round trip.\n */\nexport const DocumentCreateRequestSchema = registerJsonSchemaRuntimeRefinements(\n loosePlainObject({\n ...documentCreateRequestShape,\n initialSync: DocumentSyncRequestSchema.optional(),\n }).superRefine((value, context) => {\n refineSingleUpdateSeed(value.initialSync, context, {\n message:\n \"document create seed requires one update and no container rekeys\",\n path: \"initialSync\",\n });\n refineSeedWithinSyncRequestLimit(value.initialSync, context, \"initialSync\");\n }),\n [documentCreateSeedRefinement],\n);\n\nexport type DocumentCreateRequest = z.infer<typeof DocumentCreateRequestSchema>;\n\n// The prior link-set manifest is the document's current head. The server\n// resolves it from its own store, while the signed event's previous manifest\n// hash pins freshness, so the writer does not echo the bundle back.\nexport const DocumentLinkSetMutationRequestSchema =\n registerJsonSchemaRuntimeRefinements(\n loosePlainObject({\n authorizingContainerPathRefs: ContainerManifestRefArrayArraySchema,\n body: requiredUnknownSchema,\n containerRekeys: arraySchema(\n ContainerMutationRequestSchema,\n MAX_INLINE_CONTAINER_REKEYS,\n ).optional(),\n contentKeyBundle: DocumentContentKeyBundleRequestSchema,\n event: plainObjectSchema,\n expectedManifestHash: nonEmptyStringSchema,\n manifest: plainObjectSchema,\n rotationBaseline: DocumentOutgoingUpdateSchema.optional(),\n // A container path (root→leaf chain) must carry at least one manifest\n // reference; an empty path authorizes nothing and is never legitimately built.\n targetContainerPathRefs: ContainerManifestPathSchema,\n }).superRefine((request, context) => {\n if (\n !Array.isArray(request.authorizingContainerPathRefs) ||\n !Array.isArray(request.targetContainerPathRefs)\n ) {\n return;\n }\n // The nested schemas have already reported their shape/cardinality\n // errors. Keep this aggregate refinement bounded and never dereference a\n // malformed path after those continuable issues have been replayed.\n if (\n request.authorizingContainerPathRefs.length >\n MAX_DOCUMENT_SYNC_AUTHORIZATION_PATHS ||\n request.targetContainerPathRefs.length > MAX_CONTAINER_PATH_LENGTH ||\n request.authorizingContainerPathRefs.some(\n (path) =>\n !Array.isArray(path) || path.length > MAX_CONTAINER_PATH_LENGTH,\n )\n ) {\n return;\n }\n const totalReferences = request.authorizingContainerPathRefs.reduce(\n (total, path) => total + path.length,\n request.targetContainerPathRefs.length,\n );\n if (totalReferences > MAX_DOCUMENT_SYNC_AUTHORIZATION_PATH_REFS) {\n context.addIssue({\n code: \"custom\",\n message: documentLinkSetPathRefinement.description,\n path: [\"authorizingContainerPathRefs\"],\n });\n }\n }),\n [documentLinkSetPathRefinement],\n );\n\nexport type DocumentLinkSetMutationRequest = z.infer<\n typeof DocumentLinkSetMutationRequestSchema\n>;\n\nexport const DocumentPurgeRequestSchema = loosePlainObject({\n authorizingContainerPathRefs: ContainerManifestPathSchema,\n body: requiredUnknownSchema,\n event: plainObjectSchema,\n});\n\nexport type DocumentPurgeRequest = z.infer<typeof DocumentPurgeRequestSchema>;\n\nexport function isContainerManifestRefArrayArray(\n value: unknown,\n): value is ContainerManifestRef[][] {\n return ContainerManifestRefArrayArraySchema.safeParse(value).success;\n}\n\nexport function isDocumentContentKeyBundleRequest(\n value: unknown,\n): value is DocumentContentKeyBundleRequest {\n return DocumentContentKeyBundleRequestSchema.safeParse(value).success;\n}\n\nexport function isDocumentCreateRequest(\n value: unknown,\n): value is DocumentCreateRequest {\n return DocumentCreateRequestSchema.safeParse(value).success;\n}\n\nexport function isDocumentLinkSetMutationRequest(\n value: unknown,\n): value is DocumentLinkSetMutationRequest {\n return DocumentLinkSetMutationRequestSchema.safeParse(value).success;\n}\n\nexport function isDocumentPurgeRequest(\n value: unknown,\n): value is DocumentPurgeRequest {\n return DocumentPurgeRequestSchema.safeParse(value).success;\n}\n\nexport function isDocumentSyncRequest(\n value: unknown,\n): value is DocumentSyncRequest {\n return DocumentSyncRequestSchema.safeParse(value).success;\n}\n"]}