@native-knowledge/knowledge-sdk 0.0.0-stage → 0.1.0-rc.2

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 (203) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +29 -0
  3. package/README.md +34 -2
  4. package/dist/agent-entry.d.ts +291 -0
  5. package/dist/agent-entry.js +153 -0
  6. package/dist/agent-guidance-error.d.ts +15 -0
  7. package/dist/agent-guidance-error.js +46 -0
  8. package/dist/auth.d.ts +124 -0
  9. package/dist/auth.js +165 -0
  10. package/dist/index.d.ts +290 -0
  11. package/dist/index.js +166 -0
  12. package/dist/internal/contracts/artifact.d.ts +120 -0
  13. package/dist/internal/contracts/artifact.js +103 -0
  14. package/dist/internal/contracts/collection-control.d.ts +160 -0
  15. package/dist/internal/contracts/collection-control.js +69 -0
  16. package/dist/internal/contracts/collection.d.ts +263 -0
  17. package/dist/internal/contracts/collection.js +174 -0
  18. package/dist/internal/contracts/common.d.ts +17 -0
  19. package/dist/internal/contracts/common.js +16 -0
  20. package/dist/internal/contracts/currentness.d.ts +477 -0
  21. package/dist/internal/contracts/currentness.js +221 -0
  22. package/dist/internal/contracts/event.d.ts +60 -0
  23. package/dist/internal/contracts/event.js +35 -0
  24. package/dist/internal/contracts/evidence.d.ts +202 -0
  25. package/dist/internal/contracts/evidence.js +171 -0
  26. package/dist/internal/contracts/index.d.ts +54 -0
  27. package/dist/internal/contracts/index.js +54 -0
  28. package/dist/internal/contracts/material-capability.d.ts +88 -0
  29. package/dist/internal/contracts/material-capability.js +8 -0
  30. package/dist/internal/contracts/material-carrier.d.ts +104 -0
  31. package/dist/internal/contracts/material-carrier.js +15 -0
  32. package/dist/internal/contracts/material-context.d.ts +28 -0
  33. package/dist/internal/contracts/material-context.js +9 -0
  34. package/dist/internal/contracts/material-read.d.ts +152 -0
  35. package/dist/internal/contracts/material-read.js +12 -0
  36. package/dist/internal/contracts/observation.d.ts +75 -0
  37. package/dist/internal/contracts/observation.js +39 -0
  38. package/dist/internal/contracts/persistence.d.ts +370 -0
  39. package/dist/internal/contracts/persistence.js +239 -0
  40. package/dist/internal/contracts/project-intent.d.ts +218 -0
  41. package/dist/internal/contracts/project-intent.js +121 -0
  42. package/dist/internal/contracts/projection.d.ts +380 -0
  43. package/dist/internal/contracts/projection.js +194 -0
  44. package/dist/internal/contracts/public-reference.d.ts +237 -0
  45. package/dist/internal/contracts/public-reference.js +87 -0
  46. package/dist/internal/contracts/reference-record.d.ts +124 -0
  47. package/dist/internal/contracts/reference-record.js +55 -0
  48. package/dist/internal/contracts/remote-file.d.ts +128 -0
  49. package/dist/internal/contracts/remote-file.js +159 -0
  50. package/dist/internal/contracts/resource-scope.d.ts +40 -0
  51. package/dist/internal/contracts/resource-scope.js +38 -0
  52. package/dist/internal/contracts/review-packet.d.ts +274 -0
  53. package/dist/internal/contracts/review-packet.js +61 -0
  54. package/dist/internal/contracts/review-plane.d.ts +90 -0
  55. package/dist/internal/contracts/review-plane.js +89 -0
  56. package/dist/internal/contracts/rich-document.d.ts +641 -0
  57. package/dist/internal/contracts/rich-document.js +184 -0
  58. package/dist/internal/contracts/runtime-compatibility.d.ts +22 -0
  59. package/dist/internal/contracts/runtime-compatibility.js +55 -0
  60. package/dist/internal/contracts/runtime.d.ts +59 -0
  61. package/dist/internal/contracts/runtime.js +68 -0
  62. package/dist/internal/contracts/scheduler.d.ts +348 -0
  63. package/dist/internal/contracts/scheduler.js +256 -0
  64. package/dist/internal/contracts/signal.d.ts +113 -0
  65. package/dist/internal/contracts/signal.js +77 -0
  66. package/dist/internal/contracts/source-governance.d.ts +375 -0
  67. package/dist/internal/contracts/source-governance.js +194 -0
  68. package/dist/internal/contracts/source.d.ts +62 -0
  69. package/dist/internal/contracts/source.js +32 -0
  70. package/dist/internal/contracts/tenant-budget.d.ts +59 -0
  71. package/dist/internal/contracts/tenant-budget.js +34 -0
  72. package/dist/internal/contracts/tenant-collection-request.d.ts +209 -0
  73. package/dist/internal/contracts/tenant-collection-request.js +58 -0
  74. package/dist/internal/contracts/tenant-collection.d.ts +199 -0
  75. package/dist/internal/contracts/tenant-collection.js +66 -0
  76. package/dist/internal/contracts/tenant-currentness.d.ts +117 -0
  77. package/dist/internal/contracts/tenant-currentness.js +26 -0
  78. package/dist/internal/contracts/tenant-management.d.ts +286 -0
  79. package/dist/internal/contracts/tenant-management.js +27 -0
  80. package/dist/internal/contracts/tenant-material-api.d.ts +584 -0
  81. package/dist/internal/contracts/tenant-material-api.js +46 -0
  82. package/dist/internal/contracts/tenant-material-json-schema.js +16 -0
  83. package/dist/internal/contracts/tenant-pdf-text.d.ts +27 -0
  84. package/dist/internal/contracts/tenant-pdf-text.js +13 -0
  85. package/dist/internal/contracts/tenant-project-control.d.ts +94 -0
  86. package/dist/internal/contracts/tenant-project-control.js +19 -0
  87. package/dist/internal/contracts/tenant-public-reference.d.ts +179 -0
  88. package/dist/internal/contracts/tenant-public-reference.js +26 -0
  89. package/dist/internal/contracts/tenant-resource-api.d.ts +738 -0
  90. package/dist/internal/contracts/tenant-resource-api.js +70 -0
  91. package/dist/internal/contracts/tenant-resource.d.ts +298 -0
  92. package/dist/internal/contracts/tenant-resource.js +118 -0
  93. package/dist/internal/contracts/tenant-rich-document.d.ts +317 -0
  94. package/dist/internal/contracts/tenant-rich-document.js +17 -0
  95. package/dist/internal/contracts/tenant-source-binding.d.ts +44 -0
  96. package/dist/internal/contracts/tenant-source-binding.js +33 -0
  97. package/dist/internal/contracts/tenant-source-bridge.d.ts +70 -0
  98. package/dist/internal/contracts/tenant-source-bridge.js +9 -0
  99. package/dist/internal/contracts/tenant-source-cutover.d.ts +226 -0
  100. package/dist/internal/contracts/tenant-source-cutover.js +26 -0
  101. package/dist/internal/contracts/tenant-source-document.d.ts +163 -0
  102. package/dist/internal/contracts/tenant-source-document.js +38 -0
  103. package/dist/internal/contracts/tenant-source-lease.d.ts +1 -0
  104. package/dist/internal/contracts/tenant-source-lease.js +5 -0
  105. package/dist/internal/contracts/tenant-source.d.ts +223 -0
  106. package/dist/internal/contracts/tenant-source.js +83 -0
  107. package/dist/internal/contracts/tenant-web-collection.d.ts +287 -0
  108. package/dist/internal/contracts/tenant-web-collection.js +118 -0
  109. package/dist/internal/contracts/tenant-web-content-plan.d.ts +86 -0
  110. package/dist/internal/contracts/tenant-web-content-plan.js +39 -0
  111. package/dist/internal/contracts/tenant-web-content-result.d.ts +63 -0
  112. package/dist/internal/contracts/tenant-web-content-result.js +15 -0
  113. package/dist/internal/contracts/tenant-web-content.d.ts +383 -0
  114. package/dist/internal/contracts/tenant-web-content.js +16 -0
  115. package/dist/internal/contracts/tenant-web-crawl.d.ts +310 -0
  116. package/dist/internal/contracts/tenant-web-crawl.js +55 -0
  117. package/dist/internal/contracts/tenant-web-dynamic.d.ts +698 -0
  118. package/dist/internal/contracts/tenant-web-dynamic.js +68 -0
  119. package/dist/internal/contracts/tenant-web-results.d.ts +66 -0
  120. package/dist/internal/contracts/tenant-web-results.js +41 -0
  121. package/dist/internal/contracts/tenant-web-workflow.d.ts +494 -0
  122. package/dist/internal/contracts/tenant-web-workflow.js +29 -0
  123. package/dist/internal/serving-contracts/agent-catalog.d.ts +70 -0
  124. package/dist/internal/serving-contracts/agent-catalog.js +56 -0
  125. package/dist/internal/serving-contracts/agent-entry.d.ts +13148 -0
  126. package/dist/internal/serving-contracts/agent-entry.js +57 -0
  127. package/dist/internal/serving-contracts/agent-guidance-shapes.d.ts +263 -0
  128. package/dist/internal/serving-contracts/agent-guidance-shapes.js +12 -0
  129. package/dist/internal/serving-contracts/agent-input-hints.d.ts +24 -0
  130. package/dist/internal/serving-contracts/agent-input-hints.js +104 -0
  131. package/dist/internal/serving-contracts/body-search.d.ts +231 -0
  132. package/dist/internal/serving-contracts/body-search.js +16 -0
  133. package/dist/internal/serving-contracts/consumer.d.ts +989 -0
  134. package/dist/internal/serving-contracts/consumer.js +45 -0
  135. package/dist/internal/serving-contracts/core.d.ts +333 -0
  136. package/dist/internal/serving-contracts/core.js +76 -0
  137. package/dist/internal/serving-contracts/http.d.ts +2874 -0
  138. package/dist/internal/serving-contracts/http.js +64 -0
  139. package/dist/internal/serving-contracts/index.d.ts +24 -0
  140. package/dist/internal/serving-contracts/index.js +25 -0
  141. package/dist/internal/serving-contracts/management.d.ts +424 -0
  142. package/dist/internal/serving-contracts/management.js +15 -0
  143. package/dist/internal/serving-contracts/material-capabilities.d.ts +508 -0
  144. package/dist/internal/serving-contracts/material-capabilities.js +14 -0
  145. package/dist/internal/serving-contracts/material-index-status.d.ts +55 -0
  146. package/dist/internal/serving-contracts/material-index-status.js +5 -0
  147. package/dist/internal/serving-contracts/mcp.d.ts +2218 -0
  148. package/dist/internal/serving-contracts/mcp.js +140 -0
  149. package/dist/internal/serving-contracts/tenant-governance.d.ts +236 -0
  150. package/dist/internal/serving-contracts/tenant-governance.js +13 -0
  151. package/dist/internal/serving-contracts/tenant-management.d.ts +6276 -0
  152. package/dist/internal/serving-contracts/tenant-management.js +89 -0
  153. package/dist/internal/serving-contracts/tenant-project.d.ts +7550 -0
  154. package/dist/internal/serving-contracts/tenant-project.js +39 -0
  155. package/dist/internal/serving-contracts/tenant-runtime.d.ts +9674 -0
  156. package/dist/internal/serving-contracts/tenant-runtime.js +37 -0
  157. package/dist/internal/serving-contracts/tenant-session.d.ts +87 -0
  158. package/dist/internal/serving-contracts/tenant-session.js +8 -0
  159. package/dist/internal/serving-contracts/tenant-web-content.d.ts +4606 -0
  160. package/dist/internal/serving-contracts/tenant-web-content.js +20 -0
  161. package/dist/internal/serving-contracts/tenant-web-crawl.d.ts +2958 -0
  162. package/dist/internal/serving-contracts/tenant-web-crawl.js +13 -0
  163. package/dist/internal/serving-contracts/tenant-web-dynamic.d.ts +3902 -0
  164. package/dist/internal/serving-contracts/tenant-web-dynamic.js +20 -0
  165. package/dist/internal/serving-contracts/tenant-web-workflow.d.ts +5750 -0
  166. package/dist/internal/serving-contracts/tenant-web-workflow.js +36 -0
  167. package/dist/internal/serving-contracts/tenant-web.d.ts +6418 -0
  168. package/dist/internal/serving-contracts/tenant-web.js +53 -0
  169. package/dist/internal/serving-contracts/tenant-workspace.d.ts +6451 -0
  170. package/dist/internal/serving-contracts/tenant-workspace.js +28 -0
  171. package/dist/internal/serving-contracts/workflow.d.ts +439 -0
  172. package/dist/internal/serving-contracts/workflow.js +37 -0
  173. package/dist/material-stream.d.ts +18 -0
  174. package/dist/material-stream.js +29 -0
  175. package/dist/oauth.d.ts +268 -0
  176. package/dist/oauth.js +539 -0
  177. package/dist/resource.d.ts +88 -0
  178. package/dist/resource.js +123 -0
  179. package/dist/session.d.ts +4 -0
  180. package/dist/session.js +3 -0
  181. package/dist/tenant-client.d.ts +169 -0
  182. package/dist/tenant-client.js +58 -0
  183. package/dist/tenant-management.d.ts +240 -0
  184. package/dist/tenant-management.js +149 -0
  185. package/dist/tenant-project.d.ts +57 -0
  186. package/dist/tenant-project.js +63 -0
  187. package/dist/tenant-runtime.d.ts +174 -0
  188. package/dist/tenant-runtime.js +17 -0
  189. package/dist/tenant-web-content.d.ts +44 -0
  190. package/dist/tenant-web-content.js +70 -0
  191. package/dist/tenant-web-crawl.d.ts +42 -0
  192. package/dist/tenant-web-crawl.js +39 -0
  193. package/dist/tenant-web-dynamic.d.ts +42 -0
  194. package/dist/tenant-web-dynamic.js +39 -0
  195. package/dist/tenant-web-workflow.d.ts +43 -0
  196. package/dist/tenant-web-workflow.js +63 -0
  197. package/dist/tenant-web.d.ts +42 -0
  198. package/dist/tenant-web.js +39 -0
  199. package/dist/tenant-workspace.d.ts +36 -0
  200. package/dist/tenant-workspace.js +21 -0
  201. package/dist/token-provider.d.ts +14 -0
  202. package/dist/token-provider.js +21 -0
  203. package/package.json +45 -3
@@ -0,0 +1,174 @@
1
+ import { z } from 'zod';
2
+ import { idSchema, isoDateTimeSchema, projectKeySchema, schemaVersionSchema, sha256Schema, stableUriSchema, } from './common.js';
3
+ import { acquisitionTargetSchema, collectionRefreshSchema } from './project-intent.js';
4
+ export const collectionBatchSourceBindingSchema = z.object({
5
+ sourceId: idSchema,
6
+ sourceRef: stableUriSchema,
7
+ sourceRevisionRef: stableUriSchema,
8
+ targetId: sha256Schema,
9
+ }).strict();
10
+ /** The collector-facing task deliberately contains no project/source-family semantics. */
11
+ export const collectionTaskSchema = z.object({
12
+ taskId: idSchema,
13
+ targetId: sha256Schema,
14
+ target: acquisitionTargetSchema,
15
+ }).strict();
16
+ export const collectionBatchTriggerSchema = z.enum(['MANUAL', 'DUE']);
17
+ export const collectionBatchSchema = z.object({
18
+ schemaVersion: schemaVersionSchema,
19
+ projectKey: projectKeySchema,
20
+ projectRef: stableUriSchema,
21
+ projectIntentRef: stableUriSchema,
22
+ requestId: idSchema,
23
+ batchId: idSchema,
24
+ batchRef: stableUriSchema,
25
+ trigger: collectionBatchTriggerSchema.default('MANUAL'),
26
+ createdAt: isoDateTimeSchema,
27
+ sourceBindings: z.array(collectionBatchSourceBindingSchema).min(1).max(10_000),
28
+ tasks: z.array(collectionTaskSchema).min(1).max(10_000),
29
+ }).strict().superRefine((value, ctx) => {
30
+ const sourceIds = new Set(), bindingTargets = new Set(), taskIds = new Set(), taskTargets = new Set();
31
+ for (let i = 0; i < value.sourceBindings.length; i += 1) {
32
+ const row = value.sourceBindings[i];
33
+ if (sourceIds.has(row.sourceId))
34
+ ctx.addIssue({ code: 'custom', path: ['sourceBindings', i, 'sourceId'], message: 'sourceId must be unique in a batch' });
35
+ if (bindingTargets.has(row.targetId))
36
+ ctx.addIssue({ code: 'custom', path: ['sourceBindings', i, 'targetId'], message: 'targetId must be unique in project source bindings' });
37
+ sourceIds.add(row.sourceId);
38
+ bindingTargets.add(row.targetId);
39
+ }
40
+ for (let i = 0; i < value.tasks.length; i += 1) {
41
+ const row = value.tasks[i];
42
+ if (taskIds.has(row.taskId))
43
+ ctx.addIssue({ code: 'custom', path: ['tasks', i, 'taskId'], message: 'taskId must be unique in a batch' });
44
+ if (taskTargets.has(row.targetId))
45
+ ctx.addIssue({ code: 'custom', path: ['tasks', i, 'targetId'], message: 'targetId must be unique in a batch' });
46
+ taskIds.add(row.taskId);
47
+ taskTargets.add(row.targetId);
48
+ }
49
+ for (let i = 0; i < value.tasks.length; i += 1)
50
+ if (!bindingTargets.has(value.tasks[i].targetId))
51
+ ctx.addIssue({ code: 'custom', path: ['tasks', i, 'targetId'], message: 'task target must have a source binding' });
52
+ for (let i = 0; i < value.sourceBindings.length; i += 1)
53
+ if (!taskTargets.has(value.sourceBindings[i].targetId))
54
+ ctx.addIssue({ code: 'custom', path: ['sourceBindings', i, 'targetId'], message: 'source binding must have a collector task' });
55
+ });
56
+ export const collectorBatchViewSchema = z.object({
57
+ schemaVersion: schemaVersionSchema,
58
+ batchId: idSchema,
59
+ tasks: z.array(collectionTaskSchema).min(1).max(10_000),
60
+ }).strict();
61
+ export const sourceCollectionDueReasonSchema = z.enum([
62
+ 'DISABLED',
63
+ 'MANUAL',
64
+ 'PENDING_BATCH',
65
+ 'SPECIALIZED_EXECUTOR',
66
+ 'SPECIALIZED_COLLECTOR',
67
+ 'NEVER_ATTEMPTED',
68
+ 'INTERVAL_WAIT',
69
+ 'INTERVAL_ELAPSED',
70
+ ]);
71
+ export const sourceCollectionDueEntrySchema = z.object({
72
+ sourceId: idSchema,
73
+ sourceRef: stableUriSchema,
74
+ sourceRevisionRef: stableUriSchema,
75
+ enabled: z.boolean(),
76
+ refresh: collectionRefreshSchema,
77
+ lastAttemptAt: isoDateTimeSchema.nullable(),
78
+ lastState: z.enum(['ACQUIRED', 'ACCESS_CONTROLLED', 'HTTP_TERMINAL', 'FAILED']).nullable(),
79
+ lastBatchRef: stableUriSchema.nullable(),
80
+ lastRunId: idSchema.nullable(),
81
+ pendingBatchRef: stableUriSchema.nullable(),
82
+ nextDueAt: isoDateTimeSchema.nullable(),
83
+ due: z.boolean(),
84
+ reason: sourceCollectionDueReasonSchema,
85
+ }).strict().superRefine((value, ctx) => {
86
+ if (value.reason === 'PENDING_BATCH' && !value.pendingBatchRef)
87
+ ctx.addIssue({ code: 'custom', path: ['pendingBatchRef'], message: 'PENDING_BATCH requires pendingBatchRef' });
88
+ if (value.reason !== 'PENDING_BATCH' && value.pendingBatchRef)
89
+ ctx.addIssue({ code: 'custom', path: ['pendingBatchRef'], message: 'pendingBatchRef is only valid for PENDING_BATCH' });
90
+ if (value.due && !['NEVER_ATTEMPTED', 'INTERVAL_ELAPSED'].includes(value.reason))
91
+ ctx.addIssue({ code: 'custom', path: ['due'], message: 'due source must be never attempted or interval elapsed' });
92
+ if (value.refresh.mode === 'MANUAL' && value.nextDueAt !== null)
93
+ ctx.addIssue({ code: 'custom', path: ['nextDueAt'], message: 'MANUAL source has no automatic nextDueAt' });
94
+ });
95
+ export const projectCollectionDuePlanSchema = z.object({
96
+ schemaVersion: schemaVersionSchema,
97
+ projectKey: projectKeySchema,
98
+ projectRef: stableUriSchema,
99
+ projectIntentRef: stableUriSchema,
100
+ assessedAt: isoDateTimeSchema,
101
+ sourceCount: z.number().int().nonnegative(),
102
+ dueSourceCount: z.number().int().nonnegative(),
103
+ dueSourceIds: z.array(idSchema).max(10_000),
104
+ sources: z.array(sourceCollectionDueEntrySchema).max(10_000),
105
+ }).strict().superRefine((value, ctx) => {
106
+ const due = value.sources.filter((row) => row.due).map((row) => row.sourceId);
107
+ if (value.sourceCount !== value.sources.length)
108
+ ctx.addIssue({ code: 'custom', path: ['sourceCount'], message: 'sourceCount must match sources' });
109
+ if (value.dueSourceCount !== due.length)
110
+ ctx.addIssue({ code: 'custom', path: ['dueSourceCount'], message: 'dueSourceCount must match due sources' });
111
+ if (JSON.stringify(value.dueSourceIds) !== JSON.stringify(due))
112
+ ctx.addIssue({ code: 'custom', path: ['dueSourceIds'], message: 'dueSourceIds must match ordered due sources' });
113
+ });
114
+ export const collectionTaskRunResultSchema = z.object({
115
+ taskId: idSchema,
116
+ targetId: sha256Schema,
117
+ sourceId: idSchema,
118
+ sourceRevisionRef: stableUriSchema,
119
+ observedAt: isoDateTimeSchema,
120
+ state: z.enum(['ACQUIRED', 'ACCESS_CONTROLLED', 'HTTP_TERMINAL', 'FAILED']),
121
+ finalLocator: stableUriSchema.nullable(),
122
+ httpStatus: z.number().int().min(100).max(599).nullable(),
123
+ evidenceRef: stableUriSchema.nullable(),
124
+ contentHash: sha256Schema.nullable(),
125
+ byteLength: z.number().int().nonnegative().nullable(),
126
+ mediaType: z.string().trim().min(1).max(256).nullable(),
127
+ reusedEvidence: z.boolean(),
128
+ relatedEvidenceRefs: z.array(stableUriSchema).max(512).default([]),
129
+ richDocumentRef: stableUriSchema.nullable().default(null),
130
+ projectionJobId: idSchema.optional(),
131
+ projectionState: z.enum(['PENDING', 'SUCCEEDED', 'PARTIAL', 'FAILED', 'NOT_REQUIRED']).optional(),
132
+ errorCode: z.string().trim().min(1).max(256).nullable(),
133
+ }).strict().superRefine((value, ctx) => {
134
+ const acquired = value.state === 'ACQUIRED';
135
+ if (acquired && (!value.evidenceRef || !value.contentHash || value.byteLength === null || !value.mediaType))
136
+ ctx.addIssue({ code: 'custom', path: ['evidenceRef'], message: 'ACQUIRED result requires persisted Evidence identity' });
137
+ if (!acquired && (value.evidenceRef || value.contentHash || value.byteLength !== null || value.mediaType || value.reusedEvidence || value.relatedEvidenceRefs.length || value.richDocumentRef))
138
+ ctx.addIssue({ code: 'custom', path: ['evidenceRef'], message: 'non-ACQUIRED result cannot claim persisted Evidence' });
139
+ if (value.projectionState === 'PENDING' && (!value.projectionJobId || value.richDocumentRef || value.relatedEvidenceRefs.length || value.errorCode))
140
+ ctx.addIssue({ code: 'custom', path: ['projectionState'], message: 'pending projection requires a job and no derived result' });
141
+ if (value.projectionState === 'SUCCEEDED' && !value.richDocumentRef)
142
+ ctx.addIssue({ code: 'custom', path: ['projectionState'], message: 'successful projection requires a document' });
143
+ if (value.projectionState === 'PARTIAL' && (!acquired || !value.errorCode || !value.richDocumentRef))
144
+ ctx.addIssue({ code: 'custom', path: ['projectionState'], message: 'partial projection requires acquired Evidence, document and error' });
145
+ if (value.projectionState === 'NOT_REQUIRED' && value.richDocumentRef)
146
+ ctx.addIssue({ code: 'custom', path: ['projectionState'], message: 'unrequired projection cannot claim a document' });
147
+ if (value.projectionState === 'FAILED' && (!acquired || !value.errorCode || value.richDocumentRef))
148
+ ctx.addIssue({ code: 'custom', path: ['projectionState'], message: 'failed projection requires acquired raw Evidence, error and no document' });
149
+ if (!acquired && value.projectionState)
150
+ ctx.addIssue({ code: 'custom', path: ['projectionState'], message: 'projection requires acquired raw Evidence' });
151
+ if (value.state === 'FAILED' && !value.errorCode)
152
+ ctx.addIssue({ code: 'custom', path: ['errorCode'], message: 'FAILED result requires errorCode' });
153
+ });
154
+ export const collectionRunReceiptSchema = z.object({
155
+ schemaVersion: schemaVersionSchema,
156
+ projectKey: projectKeySchema,
157
+ projectRef: stableUriSchema,
158
+ batchId: idSchema,
159
+ batchRef: stableUriSchema,
160
+ runId: idSchema,
161
+ runtimeNodeId: idSchema,
162
+ startedAt: isoDateTimeSchema,
163
+ finishedAt: isoDateTimeSchema,
164
+ status: z.enum(['SUCCEEDED', 'PARTIAL', 'FAILED']),
165
+ results: z.array(collectionTaskRunResultSchema).min(1).max(10_000),
166
+ }).strict().superRefine((value, ctx) => {
167
+ if (Date.parse(value.finishedAt) < Date.parse(value.startedAt))
168
+ ctx.addIssue({ code: 'custom', path: ['finishedAt'], message: 'finishedAt must not precede startedAt' });
169
+ const acquired = value.results.filter((row) => row.state === 'ACQUIRED').length;
170
+ const incomplete = value.results.some(row => row.projectionState === 'FAILED' || row.projectionState === 'PARTIAL');
171
+ const expected = acquired === 0 ? 'FAILED' : acquired === value.results.length && !incomplete ? 'SUCCEEDED' : 'PARTIAL';
172
+ if (value.status !== expected)
173
+ ctx.addIssue({ code: 'custom', path: ['status'], message: `status must be ${expected} for task results` });
174
+ });
@@ -0,0 +1,17 @@
1
+ import { z } from 'zod';
2
+ export declare const schemaVersionSchema: z.ZodLiteral<1>;
3
+ export declare const idSchema: z.ZodString;
4
+ export declare const projectKeySchema: z.ZodString;
5
+ export declare const isoDateTimeSchema: z.ZodISODateTime;
6
+ export declare const sha256Schema: z.ZodString;
7
+ export declare const stableUriSchema: z.ZodString;
8
+ export declare const accessClassificationSchema: z.ZodEnum<{
9
+ PUBLIC: "PUBLIC";
10
+ PUBLIC_METADATA: "PUBLIC_METADATA";
11
+ TENANT: "TENANT";
12
+ INTERNAL: "INTERNAL";
13
+ FDE_INTERNAL: "FDE_INTERNAL";
14
+ ACCESS_CONTROLLED: "ACCESS_CONTROLLED";
15
+ UNKNOWN: "UNKNOWN";
16
+ }>;
17
+ export type AccessClassification = z.infer<typeof accessClassificationSchema>;
@@ -0,0 +1,16 @@
1
+ import { z } from 'zod';
2
+ export const schemaVersionSchema = z.literal(1);
3
+ export const idSchema = z.string().trim().min(1).max(256);
4
+ export const projectKeySchema = z.string().trim().min(1).max(128).regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/);
5
+ export const isoDateTimeSchema = z.iso.datetime({ offset: true });
6
+ export const sha256Schema = z.string().regex(/^sha256:[a-f0-9]{64}$/);
7
+ export const stableUriSchema = z.string().trim().min(1).max(2048).regex(/^[a-z][a-z0-9+.-]*:\/\/.+/i);
8
+ export const accessClassificationSchema = z.enum([
9
+ 'PUBLIC',
10
+ 'PUBLIC_METADATA',
11
+ 'TENANT',
12
+ 'INTERNAL',
13
+ 'FDE_INTERNAL',
14
+ 'ACCESS_CONTROLLED',
15
+ 'UNKNOWN',
16
+ ]);