@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.
- package/LICENSE +202 -0
- package/NOTICE +29 -0
- package/README.md +34 -2
- package/dist/agent-entry.d.ts +291 -0
- package/dist/agent-entry.js +153 -0
- package/dist/agent-guidance-error.d.ts +15 -0
- package/dist/agent-guidance-error.js +46 -0
- package/dist/auth.d.ts +124 -0
- package/dist/auth.js +165 -0
- package/dist/index.d.ts +290 -0
- package/dist/index.js +166 -0
- package/dist/internal/contracts/artifact.d.ts +120 -0
- package/dist/internal/contracts/artifact.js +103 -0
- package/dist/internal/contracts/collection-control.d.ts +160 -0
- package/dist/internal/contracts/collection-control.js +69 -0
- package/dist/internal/contracts/collection.d.ts +263 -0
- package/dist/internal/contracts/collection.js +174 -0
- package/dist/internal/contracts/common.d.ts +17 -0
- package/dist/internal/contracts/common.js +16 -0
- package/dist/internal/contracts/currentness.d.ts +477 -0
- package/dist/internal/contracts/currentness.js +221 -0
- package/dist/internal/contracts/event.d.ts +60 -0
- package/dist/internal/contracts/event.js +35 -0
- package/dist/internal/contracts/evidence.d.ts +202 -0
- package/dist/internal/contracts/evidence.js +171 -0
- package/dist/internal/contracts/index.d.ts +54 -0
- package/dist/internal/contracts/index.js +54 -0
- package/dist/internal/contracts/material-capability.d.ts +88 -0
- package/dist/internal/contracts/material-capability.js +8 -0
- package/dist/internal/contracts/material-carrier.d.ts +104 -0
- package/dist/internal/contracts/material-carrier.js +15 -0
- package/dist/internal/contracts/material-context.d.ts +28 -0
- package/dist/internal/contracts/material-context.js +9 -0
- package/dist/internal/contracts/material-read.d.ts +152 -0
- package/dist/internal/contracts/material-read.js +12 -0
- package/dist/internal/contracts/observation.d.ts +75 -0
- package/dist/internal/contracts/observation.js +39 -0
- package/dist/internal/contracts/persistence.d.ts +370 -0
- package/dist/internal/contracts/persistence.js +239 -0
- package/dist/internal/contracts/project-intent.d.ts +218 -0
- package/dist/internal/contracts/project-intent.js +121 -0
- package/dist/internal/contracts/projection.d.ts +380 -0
- package/dist/internal/contracts/projection.js +194 -0
- package/dist/internal/contracts/public-reference.d.ts +237 -0
- package/dist/internal/contracts/public-reference.js +87 -0
- package/dist/internal/contracts/reference-record.d.ts +124 -0
- package/dist/internal/contracts/reference-record.js +55 -0
- package/dist/internal/contracts/remote-file.d.ts +128 -0
- package/dist/internal/contracts/remote-file.js +159 -0
- package/dist/internal/contracts/resource-scope.d.ts +40 -0
- package/dist/internal/contracts/resource-scope.js +38 -0
- package/dist/internal/contracts/review-packet.d.ts +274 -0
- package/dist/internal/contracts/review-packet.js +61 -0
- package/dist/internal/contracts/review-plane.d.ts +90 -0
- package/dist/internal/contracts/review-plane.js +89 -0
- package/dist/internal/contracts/rich-document.d.ts +641 -0
- package/dist/internal/contracts/rich-document.js +184 -0
- package/dist/internal/contracts/runtime-compatibility.d.ts +22 -0
- package/dist/internal/contracts/runtime-compatibility.js +55 -0
- package/dist/internal/contracts/runtime.d.ts +59 -0
- package/dist/internal/contracts/runtime.js +68 -0
- package/dist/internal/contracts/scheduler.d.ts +348 -0
- package/dist/internal/contracts/scheduler.js +256 -0
- package/dist/internal/contracts/signal.d.ts +113 -0
- package/dist/internal/contracts/signal.js +77 -0
- package/dist/internal/contracts/source-governance.d.ts +375 -0
- package/dist/internal/contracts/source-governance.js +194 -0
- package/dist/internal/contracts/source.d.ts +62 -0
- package/dist/internal/contracts/source.js +32 -0
- package/dist/internal/contracts/tenant-budget.d.ts +59 -0
- package/dist/internal/contracts/tenant-budget.js +34 -0
- package/dist/internal/contracts/tenant-collection-request.d.ts +209 -0
- package/dist/internal/contracts/tenant-collection-request.js +58 -0
- package/dist/internal/contracts/tenant-collection.d.ts +199 -0
- package/dist/internal/contracts/tenant-collection.js +66 -0
- package/dist/internal/contracts/tenant-currentness.d.ts +117 -0
- package/dist/internal/contracts/tenant-currentness.js +26 -0
- package/dist/internal/contracts/tenant-management.d.ts +286 -0
- package/dist/internal/contracts/tenant-management.js +27 -0
- package/dist/internal/contracts/tenant-material-api.d.ts +584 -0
- package/dist/internal/contracts/tenant-material-api.js +46 -0
- package/dist/internal/contracts/tenant-material-json-schema.js +16 -0
- package/dist/internal/contracts/tenant-pdf-text.d.ts +27 -0
- package/dist/internal/contracts/tenant-pdf-text.js +13 -0
- package/dist/internal/contracts/tenant-project-control.d.ts +94 -0
- package/dist/internal/contracts/tenant-project-control.js +19 -0
- package/dist/internal/contracts/tenant-public-reference.d.ts +179 -0
- package/dist/internal/contracts/tenant-public-reference.js +26 -0
- package/dist/internal/contracts/tenant-resource-api.d.ts +738 -0
- package/dist/internal/contracts/tenant-resource-api.js +70 -0
- package/dist/internal/contracts/tenant-resource.d.ts +298 -0
- package/dist/internal/contracts/tenant-resource.js +118 -0
- package/dist/internal/contracts/tenant-rich-document.d.ts +317 -0
- package/dist/internal/contracts/tenant-rich-document.js +17 -0
- package/dist/internal/contracts/tenant-source-binding.d.ts +44 -0
- package/dist/internal/contracts/tenant-source-binding.js +33 -0
- package/dist/internal/contracts/tenant-source-bridge.d.ts +70 -0
- package/dist/internal/contracts/tenant-source-bridge.js +9 -0
- package/dist/internal/contracts/tenant-source-cutover.d.ts +226 -0
- package/dist/internal/contracts/tenant-source-cutover.js +26 -0
- package/dist/internal/contracts/tenant-source-document.d.ts +163 -0
- package/dist/internal/contracts/tenant-source-document.js +38 -0
- package/dist/internal/contracts/tenant-source-lease.d.ts +1 -0
- package/dist/internal/contracts/tenant-source-lease.js +5 -0
- package/dist/internal/contracts/tenant-source.d.ts +223 -0
- package/dist/internal/contracts/tenant-source.js +83 -0
- package/dist/internal/contracts/tenant-web-collection.d.ts +287 -0
- package/dist/internal/contracts/tenant-web-collection.js +118 -0
- package/dist/internal/contracts/tenant-web-content-plan.d.ts +86 -0
- package/dist/internal/contracts/tenant-web-content-plan.js +39 -0
- package/dist/internal/contracts/tenant-web-content-result.d.ts +63 -0
- package/dist/internal/contracts/tenant-web-content-result.js +15 -0
- package/dist/internal/contracts/tenant-web-content.d.ts +383 -0
- package/dist/internal/contracts/tenant-web-content.js +16 -0
- package/dist/internal/contracts/tenant-web-crawl.d.ts +310 -0
- package/dist/internal/contracts/tenant-web-crawl.js +55 -0
- package/dist/internal/contracts/tenant-web-dynamic.d.ts +698 -0
- package/dist/internal/contracts/tenant-web-dynamic.js +68 -0
- package/dist/internal/contracts/tenant-web-results.d.ts +66 -0
- package/dist/internal/contracts/tenant-web-results.js +41 -0
- package/dist/internal/contracts/tenant-web-workflow.d.ts +494 -0
- package/dist/internal/contracts/tenant-web-workflow.js +29 -0
- package/dist/internal/serving-contracts/agent-catalog.d.ts +70 -0
- package/dist/internal/serving-contracts/agent-catalog.js +56 -0
- package/dist/internal/serving-contracts/agent-entry.d.ts +13148 -0
- package/dist/internal/serving-contracts/agent-entry.js +57 -0
- package/dist/internal/serving-contracts/agent-guidance-shapes.d.ts +263 -0
- package/dist/internal/serving-contracts/agent-guidance-shapes.js +12 -0
- package/dist/internal/serving-contracts/agent-input-hints.d.ts +24 -0
- package/dist/internal/serving-contracts/agent-input-hints.js +104 -0
- package/dist/internal/serving-contracts/body-search.d.ts +231 -0
- package/dist/internal/serving-contracts/body-search.js +16 -0
- package/dist/internal/serving-contracts/consumer.d.ts +989 -0
- package/dist/internal/serving-contracts/consumer.js +45 -0
- package/dist/internal/serving-contracts/core.d.ts +333 -0
- package/dist/internal/serving-contracts/core.js +76 -0
- package/dist/internal/serving-contracts/http.d.ts +2874 -0
- package/dist/internal/serving-contracts/http.js +64 -0
- package/dist/internal/serving-contracts/index.d.ts +24 -0
- package/dist/internal/serving-contracts/index.js +25 -0
- package/dist/internal/serving-contracts/management.d.ts +424 -0
- package/dist/internal/serving-contracts/management.js +15 -0
- package/dist/internal/serving-contracts/material-capabilities.d.ts +508 -0
- package/dist/internal/serving-contracts/material-capabilities.js +14 -0
- package/dist/internal/serving-contracts/material-index-status.d.ts +55 -0
- package/dist/internal/serving-contracts/material-index-status.js +5 -0
- package/dist/internal/serving-contracts/mcp.d.ts +2218 -0
- package/dist/internal/serving-contracts/mcp.js +140 -0
- package/dist/internal/serving-contracts/tenant-governance.d.ts +236 -0
- package/dist/internal/serving-contracts/tenant-governance.js +13 -0
- package/dist/internal/serving-contracts/tenant-management.d.ts +6276 -0
- package/dist/internal/serving-contracts/tenant-management.js +89 -0
- package/dist/internal/serving-contracts/tenant-project.d.ts +7550 -0
- package/dist/internal/serving-contracts/tenant-project.js +39 -0
- package/dist/internal/serving-contracts/tenant-runtime.d.ts +9674 -0
- package/dist/internal/serving-contracts/tenant-runtime.js +37 -0
- package/dist/internal/serving-contracts/tenant-session.d.ts +87 -0
- package/dist/internal/serving-contracts/tenant-session.js +8 -0
- package/dist/internal/serving-contracts/tenant-web-content.d.ts +4606 -0
- package/dist/internal/serving-contracts/tenant-web-content.js +20 -0
- package/dist/internal/serving-contracts/tenant-web-crawl.d.ts +2958 -0
- package/dist/internal/serving-contracts/tenant-web-crawl.js +13 -0
- package/dist/internal/serving-contracts/tenant-web-dynamic.d.ts +3902 -0
- package/dist/internal/serving-contracts/tenant-web-dynamic.js +20 -0
- package/dist/internal/serving-contracts/tenant-web-workflow.d.ts +5750 -0
- package/dist/internal/serving-contracts/tenant-web-workflow.js +36 -0
- package/dist/internal/serving-contracts/tenant-web.d.ts +6418 -0
- package/dist/internal/serving-contracts/tenant-web.js +53 -0
- package/dist/internal/serving-contracts/tenant-workspace.d.ts +6451 -0
- package/dist/internal/serving-contracts/tenant-workspace.js +28 -0
- package/dist/internal/serving-contracts/workflow.d.ts +439 -0
- package/dist/internal/serving-contracts/workflow.js +37 -0
- package/dist/material-stream.d.ts +18 -0
- package/dist/material-stream.js +29 -0
- package/dist/oauth.d.ts +268 -0
- package/dist/oauth.js +539 -0
- package/dist/resource.d.ts +88 -0
- package/dist/resource.js +123 -0
- package/dist/session.d.ts +4 -0
- package/dist/session.js +3 -0
- package/dist/tenant-client.d.ts +169 -0
- package/dist/tenant-client.js +58 -0
- package/dist/tenant-management.d.ts +240 -0
- package/dist/tenant-management.js +149 -0
- package/dist/tenant-project.d.ts +57 -0
- package/dist/tenant-project.js +63 -0
- package/dist/tenant-runtime.d.ts +174 -0
- package/dist/tenant-runtime.js +17 -0
- package/dist/tenant-web-content.d.ts +44 -0
- package/dist/tenant-web-content.js +70 -0
- package/dist/tenant-web-crawl.d.ts +42 -0
- package/dist/tenant-web-crawl.js +39 -0
- package/dist/tenant-web-dynamic.d.ts +42 -0
- package/dist/tenant-web-dynamic.js +39 -0
- package/dist/tenant-web-workflow.d.ts +43 -0
- package/dist/tenant-web-workflow.js +63 -0
- package/dist/tenant-web.d.ts +42 -0
- package/dist/tenant-web.js +39 -0
- package/dist/tenant-workspace.d.ts +36 -0
- package/dist/tenant-workspace.js +21 -0
- package/dist/token-provider.d.ts +14 -0
- package/dist/token-provider.js +21 -0
- package/package.json +45 -3
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { accessClassificationSchema, idSchema, isoDateTimeSchema, projectKeySchema, schemaVersionSchema, sha256Schema, stableUriSchema, } from './common.js';
|
|
3
|
+
export const evidenceModalitySchema = z.enum(['TEXT', 'PDF', 'IMAGE', 'AUDIO', 'VIDEO', 'BINARY']);
|
|
4
|
+
export const evidenceReviewModeSchema = z.enum(['TEXT_NATIVE', 'MULTIMODAL_NATIVE', 'EXTERNAL_EXTRACTOR_REQUIRED']);
|
|
5
|
+
export const evidenceReviewInstructionSchema = z.enum([
|
|
6
|
+
'READ_ORIGINAL_TEXT',
|
|
7
|
+
'INSPECT_ORIGINAL_DOCUMENT',
|
|
8
|
+
'INSPECT_ORIGINAL_IMAGE',
|
|
9
|
+
'LISTEN_TO_ORIGINAL_AUDIO',
|
|
10
|
+
'INSPECT_ORIGINAL_VIDEO',
|
|
11
|
+
'USE_APPROVED_EXTERNAL_EXTRACTOR',
|
|
12
|
+
]);
|
|
13
|
+
const pageRangeSchema = z.object({
|
|
14
|
+
startPage: z.number().int().positive(),
|
|
15
|
+
endPage: z.number().int().positive(),
|
|
16
|
+
}).strict().superRefine((value, ctx) => {
|
|
17
|
+
if (value.endPage < value.startPage)
|
|
18
|
+
ctx.addIssue({ code: 'custom', path: ['endPage'], message: 'endPage must be >= startPage' });
|
|
19
|
+
});
|
|
20
|
+
const timeRangeSchema = z.object({
|
|
21
|
+
startMs: z.number().int().nonnegative(),
|
|
22
|
+
endMs: z.number().int().nonnegative(),
|
|
23
|
+
}).strict().superRefine((value, ctx) => {
|
|
24
|
+
if (value.endMs < value.startMs)
|
|
25
|
+
ctx.addIssue({ code: 'custom', path: ['endMs'], message: 'endMs must be >= startMs' });
|
|
26
|
+
});
|
|
27
|
+
export const evidenceReviewHintsSchema = z.object({
|
|
28
|
+
pageRanges: z.array(pageRangeSchema).max(64).default([]),
|
|
29
|
+
timeRanges: z.array(timeRangeSchema).max(64).default([]),
|
|
30
|
+
frameTimestampsMs: z.array(z.number().int().nonnegative()).max(64).default([]),
|
|
31
|
+
}).strict();
|
|
32
|
+
export const evidenceReviewAttachmentSchema = z.object({
|
|
33
|
+
evidenceRef: stableUriSchema,
|
|
34
|
+
contentHash: sha256Schema,
|
|
35
|
+
mediaType: z.string().trim().min(1).max(256),
|
|
36
|
+
byteLength: z.number().int().nonnegative().nullable(),
|
|
37
|
+
modality: evidenceModalitySchema,
|
|
38
|
+
reviewMode: evidenceReviewModeSchema,
|
|
39
|
+
instruction: evidenceReviewInstructionSchema,
|
|
40
|
+
rawBytesEmbedded: z.literal(false),
|
|
41
|
+
materializationRequired: z.literal(true),
|
|
42
|
+
reviewHints: evidenceReviewHintsSchema.optional(),
|
|
43
|
+
}).strict().superRefine((value, ctx) => {
|
|
44
|
+
const expected = value.modality === 'TEXT' ? ['TEXT_NATIVE', 'READ_ORIGINAL_TEXT']
|
|
45
|
+
: value.modality === 'PDF' ? ['MULTIMODAL_NATIVE', 'INSPECT_ORIGINAL_DOCUMENT']
|
|
46
|
+
: value.modality === 'IMAGE' ? ['MULTIMODAL_NATIVE', 'INSPECT_ORIGINAL_IMAGE']
|
|
47
|
+
: value.modality === 'AUDIO' ? ['MULTIMODAL_NATIVE', 'LISTEN_TO_ORIGINAL_AUDIO']
|
|
48
|
+
: value.modality === 'VIDEO' ? ['MULTIMODAL_NATIVE', 'INSPECT_ORIGINAL_VIDEO']
|
|
49
|
+
: ['EXTERNAL_EXTRACTOR_REQUIRED', 'USE_APPROVED_EXTERNAL_EXTRACTOR'];
|
|
50
|
+
if (value.reviewMode !== expected[0])
|
|
51
|
+
ctx.addIssue({ code: 'custom', path: ['reviewMode'], message: `reviewMode must be ${expected[0]} for ${value.modality}` });
|
|
52
|
+
if (value.instruction !== expected[1])
|
|
53
|
+
ctx.addIssue({ code: 'custom', path: ['instruction'], message: `instruction must be ${expected[1]} for ${value.modality}` });
|
|
54
|
+
const hints = value.reviewHints;
|
|
55
|
+
if (hints?.pageRanges.length && value.modality !== 'PDF')
|
|
56
|
+
ctx.addIssue({ code: 'custom', path: ['reviewHints', 'pageRanges'], message: 'pageRanges require PDF modality' });
|
|
57
|
+
if (hints?.timeRanges.length && !['AUDIO', 'VIDEO'].includes(value.modality))
|
|
58
|
+
ctx.addIssue({ code: 'custom', path: ['reviewHints', 'timeRanges'], message: 'timeRanges require AUDIO or VIDEO modality' });
|
|
59
|
+
if (hints?.frameTimestampsMs.length && value.modality !== 'VIDEO')
|
|
60
|
+
ctx.addIssue({ code: 'custom', path: ['reviewHints', 'frameTimestampsMs'], message: 'frameTimestampsMs require VIDEO modality' });
|
|
61
|
+
});
|
|
62
|
+
export const evidenceMaterializationReceiptSchema = z.object({
|
|
63
|
+
schemaVersion: schemaVersionSchema,
|
|
64
|
+
evidenceRef: stableUriSchema,
|
|
65
|
+
contentHash: sha256Schema,
|
|
66
|
+
mediaType: z.string().trim().min(1).max(256),
|
|
67
|
+
byteLength: z.number().int().nonnegative(),
|
|
68
|
+
modality: evidenceModalitySchema,
|
|
69
|
+
reviewMode: evidenceReviewModeSchema,
|
|
70
|
+
instruction: evidenceReviewInstructionSchema,
|
|
71
|
+
reviewHints: evidenceReviewHintsSchema.optional(),
|
|
72
|
+
access: accessClassificationSchema,
|
|
73
|
+
runtimeNodeId: idSchema,
|
|
74
|
+
materializedAt: isoDateTimeSchema,
|
|
75
|
+
runtimeLocalPath: z.string().trim().min(1).max(4096).startsWith('/'),
|
|
76
|
+
reused: z.boolean(),
|
|
77
|
+
}).strict();
|
|
78
|
+
export const collectorIdentitySchema = z.object({
|
|
79
|
+
collectorId: idSchema,
|
|
80
|
+
version: z.string().trim().min(1).max(128),
|
|
81
|
+
}).strict();
|
|
82
|
+
/** 附属媒体沿用 Source 身份,但不能替代该 Source 的主文档。 */
|
|
83
|
+
export const RICH_MEDIA_COLLECTOR_ID = 'knowledge-v2.rich-document-media';
|
|
84
|
+
// 中文职责:保存只读 POST 的请求体对象索引,响应 contentHash 始终代表原始响应。
|
|
85
|
+
export const evidenceRequestSchema = z.object({
|
|
86
|
+
schemaVersion: z.literal(1), method: z.literal('POST'),
|
|
87
|
+
bodyContentHash: sha256Schema, bodyMediaType: z.literal('application/x-www-form-urlencoded'),
|
|
88
|
+
bodyByteLength: z.number().int().nonnegative().max(16 * 1024),
|
|
89
|
+
}).strict();
|
|
90
|
+
export const evidenceRefSchema = z.object({
|
|
91
|
+
// Re-admission preserves acquisition facts; this link records reuse rather than a new download.
|
|
92
|
+
recoveryProvenance: z.object({ mode: z.literal('REUSED_PRIOR_EVIDENCE'), originEvidenceRef: stableUriSchema, originProjectRef: stableUriSchema, originSourceRevisionRef: stableUriSchema, originRuntimeNodeId: idSchema, handoffReceiptRef: stableUriSchema }).strict().optional(),
|
|
93
|
+
request: evidenceRequestSchema.optional(),
|
|
94
|
+
schemaVersion: schemaVersionSchema,
|
|
95
|
+
evidenceId: idSchema,
|
|
96
|
+
sourceId: idSchema,
|
|
97
|
+
sourceIds: z.array(idSchema).min(1).max(64).optional(),
|
|
98
|
+
projectKey: projectKeySchema.optional(),
|
|
99
|
+
projectRef: stableUriSchema.optional(),
|
|
100
|
+
collector: collectorIdentitySchema,
|
|
101
|
+
contentHash: sha256Schema,
|
|
102
|
+
observedAt: isoDateTimeSchema,
|
|
103
|
+
runtimeNodeId: idSchema,
|
|
104
|
+
access: accessClassificationSchema,
|
|
105
|
+
canonicalUri: stableUriSchema.optional(),
|
|
106
|
+
mediaType: z.string().trim().min(1).max(256).optional(),
|
|
107
|
+
byteLength: z.number().int().nonnegative().optional(),
|
|
108
|
+
sourceSetRef: stableUriSchema.optional(),
|
|
109
|
+
sourceItemId: idSchema.optional(),
|
|
110
|
+
sourceRevisionRef: stableUriSchema.optional(),
|
|
111
|
+
collectionBatchRef: stableUriSchema.optional(),
|
|
112
|
+
collectionTaskId: idSchema.optional(),
|
|
113
|
+
reviewHints: evidenceReviewHintsSchema.optional(),
|
|
114
|
+
}).strict().superRefine((value, ctx) => {
|
|
115
|
+
if (value.recoveryProvenance) {
|
|
116
|
+
const origin = value.recoveryProvenance;
|
|
117
|
+
if (value.access !== 'PUBLIC')
|
|
118
|
+
ctx.addIssue({ code: 'custom', path: ['recoveryProvenance'], message: 'Recovery re-admission requires PUBLIC evidence' });
|
|
119
|
+
for (const [key, protocol] of [['originEvidenceRef', 'evidence:'], ['originProjectRef', 'knowledge-project:'], ['originSourceRevisionRef', 'project-source:'], ['handoffReceiptRef', 'runtime-handoff:']]) {
|
|
120
|
+
const url = new URL(origin[key]);
|
|
121
|
+
if (url.protocol !== protocol || url.hostname !== value.projectKey)
|
|
122
|
+
ctx.addIssue({ code: 'custom', path: ['recoveryProvenance', key], message: 'Recovery provenance must retain the same project and expected reference type' });
|
|
123
|
+
}
|
|
124
|
+
if (origin.originEvidenceRef === `evidence://${value.projectKey}/${encodeURIComponent(value.evidenceId)}`)
|
|
125
|
+
ctx.addIssue({ code: 'custom', path: ['recoveryProvenance'], message: 'Recovery origin cannot be self' });
|
|
126
|
+
}
|
|
127
|
+
if (Boolean(value.sourceSetRef) !== Boolean(value.sourceItemId))
|
|
128
|
+
ctx.addIssue({ code: 'custom', path: ['sourceSetRef'], message: 'sourceSetRef and sourceItemId must be provided together' });
|
|
129
|
+
if (Boolean(value.collectionBatchRef) !== Boolean(value.collectionTaskId))
|
|
130
|
+
ctx.addIssue({ code: 'custom', path: ['collectionBatchRef'], message: 'collectionBatchRef and collectionTaskId must be provided together' });
|
|
131
|
+
if (value.projectRef && value.projectKey) {
|
|
132
|
+
try {
|
|
133
|
+
const url = new URL(value.projectRef);
|
|
134
|
+
if (url.protocol !== 'knowledge-project:' || url.hostname.toLowerCase() !== value.projectKey.toLowerCase())
|
|
135
|
+
ctx.addIssue({ code: 'custom', path: ['projectRef'], message: 'projectRef project must match Evidence project' });
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
ctx.addIssue({ code: 'custom', path: ['projectRef'], message: 'Invalid projectRef' });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (value.sourceSetRef && value.projectKey) {
|
|
142
|
+
try {
|
|
143
|
+
const url = new URL(value.sourceSetRef);
|
|
144
|
+
if (url.protocol !== 'source-set:' || url.hostname.toLowerCase() !== value.projectKey.toLowerCase())
|
|
145
|
+
ctx.addIssue({ code: 'custom', path: ['sourceSetRef'], message: 'sourceSetRef project must match Evidence project' });
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
ctx.addIssue({ code: 'custom', path: ['sourceSetRef'], message: 'Invalid sourceSetRef' });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (value.sourceRevisionRef && value.projectKey) {
|
|
152
|
+
try {
|
|
153
|
+
const url = new URL(value.sourceRevisionRef);
|
|
154
|
+
if (url.protocol !== 'project-source:' || url.hostname.toLowerCase() !== value.projectKey.toLowerCase())
|
|
155
|
+
ctx.addIssue({ code: 'custom', path: ['sourceRevisionRef'], message: 'sourceRevisionRef project must match Evidence project' });
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
ctx.addIssue({ code: 'custom', path: ['sourceRevisionRef'], message: 'Invalid sourceRevisionRef' });
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (value.collectionBatchRef && value.projectKey) {
|
|
162
|
+
try {
|
|
163
|
+
const url = new URL(value.collectionBatchRef);
|
|
164
|
+
if (url.protocol !== 'collection-batch:' || url.hostname.toLowerCase() !== value.projectKey.toLowerCase())
|
|
165
|
+
ctx.addIssue({ code: 'custom', path: ['collectionBatchRef'], message: 'collectionBatchRef project must match Evidence project' });
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
ctx.addIssue({ code: 'custom', path: ['collectionBatchRef'], message: 'Invalid collectionBatchRef' });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export * from './common.js';
|
|
2
|
+
export * from './source.js';
|
|
3
|
+
export * from './evidence.js';
|
|
4
|
+
export * from './observation.js';
|
|
5
|
+
export * from './runtime.js';
|
|
6
|
+
export * from './event.js';
|
|
7
|
+
export * from './signal.js';
|
|
8
|
+
export * from './artifact.js';
|
|
9
|
+
export * from './review-packet.js';
|
|
10
|
+
export * from './scheduler.js';
|
|
11
|
+
export * from './currentness.js';
|
|
12
|
+
export * from './projection.js';
|
|
13
|
+
export * from './source-governance.js';
|
|
14
|
+
export * from './review-plane.js';
|
|
15
|
+
export * from './persistence.js';
|
|
16
|
+
export * from './remote-file.js';
|
|
17
|
+
export * from './project-intent.js';
|
|
18
|
+
export * from './collection.js';
|
|
19
|
+
export * from './collection-control.js';
|
|
20
|
+
export * from './rich-document.js';
|
|
21
|
+
export * from './material-carrier.js';
|
|
22
|
+
export * from './reference-record.js';
|
|
23
|
+
export * from './material-read.js';
|
|
24
|
+
export * from './material-context.js';
|
|
25
|
+
export * from './tenant-material-api.js';
|
|
26
|
+
export * from './material-capability.js';
|
|
27
|
+
export * from './public-reference.js';
|
|
28
|
+
export * from './resource-scope.js';
|
|
29
|
+
export * from './tenant-resource.js';
|
|
30
|
+
export * from './tenant-resource-api.js';
|
|
31
|
+
export * from './tenant-source.js';
|
|
32
|
+
export * from './tenant-collection.js';
|
|
33
|
+
export * from './tenant-collection-request.js';
|
|
34
|
+
export * from './tenant-source-document.js';
|
|
35
|
+
export * from './tenant-source-bridge.js';
|
|
36
|
+
export * from './tenant-source-binding.js';
|
|
37
|
+
export * from './tenant-source-cutover.js';
|
|
38
|
+
export * from './tenant-rich-document.js';
|
|
39
|
+
export * from './tenant-management.js';
|
|
40
|
+
export * from './tenant-currentness.js';
|
|
41
|
+
export * from './tenant-public-reference.js';
|
|
42
|
+
export * from './tenant-project-control.js';
|
|
43
|
+
export * from './tenant-budget.js';
|
|
44
|
+
export * from './runtime-compatibility.js';
|
|
45
|
+
export * from './tenant-web-collection.js';
|
|
46
|
+
export * from './tenant-web-results.js';
|
|
47
|
+
export * from './tenant-web-crawl.js';
|
|
48
|
+
export * from './tenant-source-lease.js';
|
|
49
|
+
export * from './tenant-web-dynamic.js';
|
|
50
|
+
export * from './tenant-pdf-text.js';
|
|
51
|
+
export * from './tenant-web-content-plan.js';
|
|
52
|
+
export * from './tenant-web-content-result.js';
|
|
53
|
+
export * from './tenant-web-content.js';
|
|
54
|
+
export * from './tenant-web-workflow.js';
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export * from './common.js';
|
|
2
|
+
export * from './source.js';
|
|
3
|
+
export * from './evidence.js';
|
|
4
|
+
export * from './observation.js';
|
|
5
|
+
export * from './runtime.js';
|
|
6
|
+
export * from './event.js';
|
|
7
|
+
export * from './signal.js';
|
|
8
|
+
export * from './artifact.js';
|
|
9
|
+
export * from './review-packet.js';
|
|
10
|
+
export * from './scheduler.js';
|
|
11
|
+
export * from './currentness.js';
|
|
12
|
+
export * from './projection.js';
|
|
13
|
+
export * from './source-governance.js';
|
|
14
|
+
export * from './review-plane.js';
|
|
15
|
+
export * from './persistence.js';
|
|
16
|
+
export * from './remote-file.js';
|
|
17
|
+
export * from './project-intent.js';
|
|
18
|
+
export * from './collection.js';
|
|
19
|
+
export * from './collection-control.js';
|
|
20
|
+
export * from './rich-document.js';
|
|
21
|
+
export * from './material-carrier.js';
|
|
22
|
+
export * from './reference-record.js';
|
|
23
|
+
export * from './material-read.js';
|
|
24
|
+
export * from './material-context.js';
|
|
25
|
+
export * from './tenant-material-api.js';
|
|
26
|
+
export * from './material-capability.js';
|
|
27
|
+
export * from './public-reference.js';
|
|
28
|
+
export * from './resource-scope.js';
|
|
29
|
+
export * from './tenant-resource.js';
|
|
30
|
+
export * from './tenant-resource-api.js';
|
|
31
|
+
export * from './tenant-source.js';
|
|
32
|
+
export * from './tenant-collection.js';
|
|
33
|
+
export * from './tenant-collection-request.js';
|
|
34
|
+
export * from './tenant-source-document.js';
|
|
35
|
+
export * from './tenant-source-bridge.js';
|
|
36
|
+
export * from './tenant-source-binding.js';
|
|
37
|
+
export * from './tenant-source-cutover.js';
|
|
38
|
+
export * from './tenant-rich-document.js';
|
|
39
|
+
export * from './tenant-management.js';
|
|
40
|
+
export * from './tenant-currentness.js';
|
|
41
|
+
export * from './tenant-public-reference.js';
|
|
42
|
+
export * from './tenant-project-control.js';
|
|
43
|
+
export * from './tenant-budget.js';
|
|
44
|
+
export * from './runtime-compatibility.js';
|
|
45
|
+
export * from './tenant-web-collection.js';
|
|
46
|
+
export * from './tenant-web-results.js';
|
|
47
|
+
export * from './tenant-web-crawl.js';
|
|
48
|
+
export * from './tenant-source-lease.js';
|
|
49
|
+
export * from './tenant-web-dynamic.js';
|
|
50
|
+
export * from './tenant-pdf-text.js';
|
|
51
|
+
export * from './tenant-web-content-plan.js';
|
|
52
|
+
export * from './tenant-web-content-result.js';
|
|
53
|
+
export * from './tenant-web-content.js';
|
|
54
|
+
export * from './tenant-web-workflow.js';
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const materialReadStateSchema: z.ZodEnum<{
|
|
3
|
+
MISSING: "MISSING";
|
|
4
|
+
INTEGRITY_MISMATCH: "INTEGRITY_MISMATCH";
|
|
5
|
+
READY: "READY";
|
|
6
|
+
UNSUPPORTED: "UNSUPPORTED";
|
|
7
|
+
DENIED: "DENIED";
|
|
8
|
+
}>;
|
|
9
|
+
export declare const materialCapabilitySchema: z.ZodObject<{
|
|
10
|
+
item: z.ZodObject<{
|
|
11
|
+
ref: z.ZodString;
|
|
12
|
+
resourceType: z.ZodString;
|
|
13
|
+
sourceProjectKey: z.ZodString;
|
|
14
|
+
identityHash: z.ZodString;
|
|
15
|
+
kind: z.ZodString;
|
|
16
|
+
classification: z.ZodEnum<{
|
|
17
|
+
PUBLIC: "PUBLIC";
|
|
18
|
+
PUBLIC_METADATA: "PUBLIC_METADATA";
|
|
19
|
+
TENANT: "TENANT";
|
|
20
|
+
INTERNAL: "INTERNAL";
|
|
21
|
+
FDE_INTERNAL: "FDE_INTERNAL";
|
|
22
|
+
ACCESS_CONTROLLED: "ACCESS_CONTROLLED";
|
|
23
|
+
UNKNOWN: "UNKNOWN";
|
|
24
|
+
}>;
|
|
25
|
+
mediaType: z.ZodString;
|
|
26
|
+
decision: z.ZodObject<{
|
|
27
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
28
|
+
action: z.ZodEnum<{
|
|
29
|
+
ALLOW: "ALLOW";
|
|
30
|
+
DENY: "DENY";
|
|
31
|
+
}>;
|
|
32
|
+
reasonCodes: z.ZodArray<z.ZodEnum<{
|
|
33
|
+
UNAVAILABLE: "UNAVAILABLE";
|
|
34
|
+
NOT_FOUND: "NOT_FOUND";
|
|
35
|
+
CONTENT_ACCESS_DENIED: "CONTENT_ACCESS_DENIED";
|
|
36
|
+
INTEGRITY_MISMATCH: "INTEGRITY_MISMATCH";
|
|
37
|
+
UNSUPPORTED_RESOURCE: "UNSUPPORTED_RESOURCE";
|
|
38
|
+
}>>;
|
|
39
|
+
assessedAt: z.ZodISODateTime;
|
|
40
|
+
}, z.core.$strict>;
|
|
41
|
+
}, z.core.$strict>;
|
|
42
|
+
materialAccess: z.ZodObject<{
|
|
43
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
44
|
+
action: z.ZodEnum<{
|
|
45
|
+
ALLOW: "ALLOW";
|
|
46
|
+
DENY: "DENY";
|
|
47
|
+
}>;
|
|
48
|
+
reasonCodes: z.ZodArray<z.ZodEnum<{
|
|
49
|
+
UNAVAILABLE: "UNAVAILABLE";
|
|
50
|
+
NOT_FOUND: "NOT_FOUND";
|
|
51
|
+
CONTENT_ACCESS_DENIED: "CONTENT_ACCESS_DENIED";
|
|
52
|
+
INTEGRITY_MISMATCH: "INTEGRITY_MISMATCH";
|
|
53
|
+
UNSUPPORTED_RESOURCE: "UNSUPPORTED_RESOURCE";
|
|
54
|
+
}>>;
|
|
55
|
+
assessedAt: z.ZodISODateTime;
|
|
56
|
+
}, z.core.$strict>;
|
|
57
|
+
representation: z.ZodObject<{
|
|
58
|
+
state: z.ZodEnum<{
|
|
59
|
+
MISSING: "MISSING";
|
|
60
|
+
INTEGRITY_MISMATCH: "INTEGRITY_MISMATCH";
|
|
61
|
+
READY: "READY";
|
|
62
|
+
UNSUPPORTED: "UNSUPPORTED";
|
|
63
|
+
DENIED: "DENIED";
|
|
64
|
+
}>;
|
|
65
|
+
format: z.ZodEnum<{
|
|
66
|
+
BYTES: "BYTES";
|
|
67
|
+
JSON: "JSON";
|
|
68
|
+
}>;
|
|
69
|
+
transfer: z.ZodEnum<{
|
|
70
|
+
UNSUPPORTED: "UNSUPPORTED";
|
|
71
|
+
VERIFIED_STREAM: "VERIFIED_STREAM";
|
|
72
|
+
BUFFERED_JSON: "BUFFERED_JSON";
|
|
73
|
+
}>;
|
|
74
|
+
contentHash: z.ZodNullable<z.ZodString>;
|
|
75
|
+
mediaType: z.ZodString;
|
|
76
|
+
byteLength: z.ZodNullable<z.ZodNumber>;
|
|
77
|
+
methods: z.ZodArray<z.ZodEnum<{
|
|
78
|
+
GET: "GET";
|
|
79
|
+
HEAD: "HEAD";
|
|
80
|
+
}>>;
|
|
81
|
+
range: z.ZodEnum<{
|
|
82
|
+
NONE: "NONE";
|
|
83
|
+
SINGLE: "SINGLE";
|
|
84
|
+
}>;
|
|
85
|
+
verification: z.ZodLiteral<"ON_READ">;
|
|
86
|
+
verificationChunkBytes: z.ZodNullable<z.ZodNumber>;
|
|
87
|
+
}, z.core.$strict>;
|
|
88
|
+
}, z.core.$strict>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { rawRetrievalDecisionSchema, rawMaterialDirectoryItemSchema } from './material-read.js';
|
|
3
|
+
import { sha256Schema } from './common.js';
|
|
4
|
+
export const materialReadStateSchema = z.enum(['READY', 'UNSUPPORTED', 'MISSING', 'INTEGRITY_MISMATCH', 'DENIED']);
|
|
5
|
+
export const materialCapabilitySchema = z.object({
|
|
6
|
+
item: rawMaterialDirectoryItemSchema, materialAccess: rawRetrievalDecisionSchema,
|
|
7
|
+
representation: z.object({ state: materialReadStateSchema, format: z.enum(['BYTES', 'JSON']), transfer: z.enum(['VERIFIED_STREAM', 'BUFFERED_JSON', 'UNSUPPORTED']), contentHash: sha256Schema.nullable(), mediaType: z.string().min(1).max(256), byteLength: z.number().int().nonnegative().safe().nullable(), methods: z.array(z.enum(['GET', 'HEAD'])).max(2), range: z.enum(['SINGLE', 'NONE']), verification: z.literal('ON_READ'), verificationChunkBytes: z.number().int().positive().nullable() }).strict(),
|
|
8
|
+
}).strict();
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const materialResourceTypeSchema: z.ZodString;
|
|
3
|
+
/** Provenance-bearing immutable metadata; original bytes live only in the shared CAS. */
|
|
4
|
+
export declare const materialCarrierManifestSchema: z.ZodObject<{
|
|
5
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
6
|
+
ref: z.ZodString;
|
|
7
|
+
projectKey: z.ZodString;
|
|
8
|
+
resourceType: z.ZodString;
|
|
9
|
+
kind: z.ZodString;
|
|
10
|
+
access: z.ZodEnum<{
|
|
11
|
+
PUBLIC: "PUBLIC";
|
|
12
|
+
PUBLIC_METADATA: "PUBLIC_METADATA";
|
|
13
|
+
TENANT: "TENANT";
|
|
14
|
+
INTERNAL: "INTERNAL";
|
|
15
|
+
FDE_INTERNAL: "FDE_INTERNAL";
|
|
16
|
+
ACCESS_CONTROLLED: "ACCESS_CONTROLLED";
|
|
17
|
+
UNKNOWN: "UNKNOWN";
|
|
18
|
+
}>;
|
|
19
|
+
title: z.ZodString;
|
|
20
|
+
summary: z.ZodString;
|
|
21
|
+
observedAt: z.ZodISODateTime;
|
|
22
|
+
sourceRefs: z.ZodArray<z.ZodString>;
|
|
23
|
+
sourceUri: z.ZodNullable<z.ZodString>;
|
|
24
|
+
sourceSetRef: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
25
|
+
storage: z.ZodLiteral<"CAS">;
|
|
26
|
+
contentHash: z.ZodString;
|
|
27
|
+
mediaType: z.ZodString;
|
|
28
|
+
byteLength: z.ZodNumber;
|
|
29
|
+
}, z.core.$strict>;
|
|
30
|
+
export type MaterialCarrierManifest = z.infer<typeof materialCarrierManifestSchema>;
|
|
31
|
+
export declare const materialRegistrationMetadataSchema: z.ZodObject<{
|
|
32
|
+
kind: z.ZodString;
|
|
33
|
+
projectKey: z.ZodString;
|
|
34
|
+
ref: z.ZodString;
|
|
35
|
+
access: z.ZodEnum<{
|
|
36
|
+
PUBLIC: "PUBLIC";
|
|
37
|
+
PUBLIC_METADATA: "PUBLIC_METADATA";
|
|
38
|
+
TENANT: "TENANT";
|
|
39
|
+
INTERNAL: "INTERNAL";
|
|
40
|
+
FDE_INTERNAL: "FDE_INTERNAL";
|
|
41
|
+
ACCESS_CONTROLLED: "ACCESS_CONTROLLED";
|
|
42
|
+
UNKNOWN: "UNKNOWN";
|
|
43
|
+
}>;
|
|
44
|
+
title: z.ZodString;
|
|
45
|
+
observedAt: z.ZodISODateTime;
|
|
46
|
+
mediaType: z.ZodString;
|
|
47
|
+
summary: z.ZodString;
|
|
48
|
+
sourceSetRef: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
49
|
+
sourceUri: z.ZodNullable<z.ZodString>;
|
|
50
|
+
resourceType: z.ZodString;
|
|
51
|
+
sourceRefs: z.ZodArray<z.ZodString>;
|
|
52
|
+
}, z.core.$strip>;
|
|
53
|
+
export declare const materialRegistrationRequestSchema: z.ZodObject<{
|
|
54
|
+
projectRef: z.ZodString;
|
|
55
|
+
metadata: z.ZodObject<{
|
|
56
|
+
kind: z.ZodString;
|
|
57
|
+
projectKey: z.ZodString;
|
|
58
|
+
ref: z.ZodString;
|
|
59
|
+
access: z.ZodEnum<{
|
|
60
|
+
PUBLIC: "PUBLIC";
|
|
61
|
+
PUBLIC_METADATA: "PUBLIC_METADATA";
|
|
62
|
+
TENANT: "TENANT";
|
|
63
|
+
INTERNAL: "INTERNAL";
|
|
64
|
+
FDE_INTERNAL: "FDE_INTERNAL";
|
|
65
|
+
ACCESS_CONTROLLED: "ACCESS_CONTROLLED";
|
|
66
|
+
UNKNOWN: "UNKNOWN";
|
|
67
|
+
}>;
|
|
68
|
+
title: z.ZodString;
|
|
69
|
+
observedAt: z.ZodISODateTime;
|
|
70
|
+
mediaType: z.ZodString;
|
|
71
|
+
summary: z.ZodString;
|
|
72
|
+
sourceSetRef: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
73
|
+
sourceUri: z.ZodNullable<z.ZodString>;
|
|
74
|
+
resourceType: z.ZodString;
|
|
75
|
+
sourceRefs: z.ZodArray<z.ZodString>;
|
|
76
|
+
}, z.core.$strip>;
|
|
77
|
+
contentBase64: z.ZodString;
|
|
78
|
+
}, z.core.$strict>;
|
|
79
|
+
export declare const materialRegistrationInputJsonSchema: z.core.ZodStandardJSONSchemaPayload<z.ZodObject<{
|
|
80
|
+
projectRef: z.ZodString;
|
|
81
|
+
metadata: z.ZodObject<{
|
|
82
|
+
kind: z.ZodString;
|
|
83
|
+
projectKey: z.ZodString;
|
|
84
|
+
ref: z.ZodString;
|
|
85
|
+
access: z.ZodEnum<{
|
|
86
|
+
PUBLIC: "PUBLIC";
|
|
87
|
+
PUBLIC_METADATA: "PUBLIC_METADATA";
|
|
88
|
+
TENANT: "TENANT";
|
|
89
|
+
INTERNAL: "INTERNAL";
|
|
90
|
+
FDE_INTERNAL: "FDE_INTERNAL";
|
|
91
|
+
ACCESS_CONTROLLED: "ACCESS_CONTROLLED";
|
|
92
|
+
UNKNOWN: "UNKNOWN";
|
|
93
|
+
}>;
|
|
94
|
+
title: z.ZodString;
|
|
95
|
+
observedAt: z.ZodISODateTime;
|
|
96
|
+
mediaType: z.ZodString;
|
|
97
|
+
summary: z.ZodString;
|
|
98
|
+
sourceSetRef: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
99
|
+
sourceUri: z.ZodNullable<z.ZodString>;
|
|
100
|
+
resourceType: z.ZodString;
|
|
101
|
+
sourceRefs: z.ZodArray<z.ZodString>;
|
|
102
|
+
}, z.core.$strip>;
|
|
103
|
+
contentBase64: z.ZodString;
|
|
104
|
+
}, z.core.$strict>>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { accessClassificationSchema, isoDateTimeSchema, projectKeySchema, sha256Schema, stableUriSchema } from './common.js';
|
|
3
|
+
export const materialResourceTypeSchema = z.string().regex(/^[a-z][a-z0-9._-]{0,63}$/);
|
|
4
|
+
/** Provenance-bearing immutable metadata; original bytes live only in the shared CAS. */
|
|
5
|
+
export const materialCarrierManifestSchema = z.object({
|
|
6
|
+
schemaVersion: z.literal(1), ref: stableUriSchema, projectKey: projectKeySchema, resourceType: materialResourceTypeSchema,
|
|
7
|
+
kind: z.string().min(1).max(128), access: accessClassificationSchema, title: z.string().max(512), summary: z.string().max(1024),
|
|
8
|
+
observedAt: isoDateTimeSchema, sourceRefs: z.array(stableUriSchema).min(1).max(128), sourceUri: stableUriSchema.nullable(), sourceSetRef: stableUriSchema.nullable().default(null),
|
|
9
|
+
storage: z.literal('CAS'), contentHash: sha256Schema, mediaType: z.string().min(1).max(256), byteLength: z.number().int().nonnegative().safe(),
|
|
10
|
+
}).strict().superRefine((value, ctx) => { if (value.sourceSetRef && !value.sourceSetRef.startsWith(`source-set://${value.projectKey}/`))
|
|
11
|
+
ctx.addIssue({ code: 'custom', path: ['sourceSetRef'], message: 'Source Set must belong to the material source project' }); if (['artifact', 'evidence', 'reference', 'media'].includes(value.resourceType))
|
|
12
|
+
ctx.addIssue({ code: 'custom', path: ['resourceType'], message: 'built-in carriers retain their existing canonical stores' }); });
|
|
13
|
+
export const materialRegistrationMetadataSchema = z.object({ ...materialCarrierManifestSchema.shape }).omit({ schemaVersion: true, contentHash: true, byteLength: true, storage: true });
|
|
14
|
+
export const materialRegistrationRequestSchema = z.object({ projectRef: stableUriSchema, metadata: materialRegistrationMetadataSchema, contentBase64: z.string().max(87384) }).strict();
|
|
15
|
+
export const materialRegistrationInputJsonSchema = z.toJSONSchema(materialRegistrationRequestSchema, { target: 'draft-07' });
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const materialTenantIdSchema: z.ZodString;
|
|
3
|
+
export declare const materialContextSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
4
|
+
type: z.ZodLiteral<"TENANT">;
|
|
5
|
+
tenantId: z.ZodString;
|
|
6
|
+
tenantRef: z.ZodString;
|
|
7
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
8
|
+
type: z.ZodLiteral<"PROJECT">;
|
|
9
|
+
tenantId: z.ZodString;
|
|
10
|
+
projectKey: z.ZodString;
|
|
11
|
+
projectRef: z.ZodString;
|
|
12
|
+
}, z.core.$strict>], "type">;
|
|
13
|
+
export type MaterialContext = z.infer<typeof materialContextSchema>;
|
|
14
|
+
export declare const materialProjectScopeInputSchema: z.ZodObject<{
|
|
15
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
16
|
+
TENANT: "TENANT";
|
|
17
|
+
EXPLICIT: "EXPLICIT";
|
|
18
|
+
}>>;
|
|
19
|
+
selectors: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
20
|
+
type: z.ZodEnum<{
|
|
21
|
+
SOURCE_PROJECT: "SOURCE_PROJECT";
|
|
22
|
+
REF: "REF";
|
|
23
|
+
}>;
|
|
24
|
+
value: z.ZodString;
|
|
25
|
+
enabled: z.ZodBoolean;
|
|
26
|
+
}, z.core.$strict>>>;
|
|
27
|
+
}, z.core.$strict>;
|
|
28
|
+
export type MaterialProjectScopeInput = z.infer<typeof materialProjectScopeInputSchema>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { projectKeySchema, stableUriSchema } from './common.js';
|
|
3
|
+
export const materialTenantIdSchema = z.string().min(1).max(256).regex(/^[A-Za-z0-9][A-Za-z0-9._:-]*$/);
|
|
4
|
+
export const materialContextSchema = z.discriminatedUnion('type', [
|
|
5
|
+
z.object({ type: z.literal('TENANT'), tenantId: materialTenantIdSchema, tenantRef: stableUriSchema }).strict(),
|
|
6
|
+
z.object({ type: z.literal('PROJECT'), tenantId: materialTenantIdSchema, projectKey: projectKeySchema, projectRef: stableUriSchema }).strict(),
|
|
7
|
+
]);
|
|
8
|
+
export const materialProjectScopeInputSchema = z.object({ mode: z.enum(['TENANT', 'EXPLICIT']).optional(), selectors: z.array(z.object({ type: z.enum(['SOURCE_PROJECT', 'REF']), value: z.string().min(1).max(4096), enabled: z.boolean() }).strict()).max(100).default([]) }).strict().superRefine((value, ctx) => { if (!value.mode && !value.selectors.length)
|
|
9
|
+
ctx.addIssue({ code: 'custom', message: 'An explicit scope mutation is required' }); });
|