@clowder-ai/plugin-contract 0.1.0-beta.3 → 0.1.0-beta.37
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/dist/codegen/generate-contract.d.ts +10 -0
- package/dist/codegen/generate-contract.d.ts.map +1 -1
- package/dist/codegen/generate-contract.js +362 -21
- package/dist/codegen/generate-contract.js.map +1 -1
- package/dist/conformance/fixtures.d.ts +11 -0
- package/dist/conformance/fixtures.d.ts.map +1 -0
- package/dist/conformance/fixtures.js +9 -0
- package/dist/conformance/fixtures.js.map +1 -0
- package/dist/conformance/index.d.ts +4 -1
- package/dist/conformance/index.d.ts.map +1 -1
- package/dist/conformance/index.js +3 -1
- package/dist/conformance/index.js.map +1 -1
- package/dist/conformance/messaging-behavior-fixture.d.ts +12 -0
- package/dist/conformance/messaging-behavior-fixture.d.ts.map +1 -0
- package/dist/conformance/messaging-behavior-fixture.js +30 -0
- package/dist/conformance/messaging-behavior-fixture.js.map +1 -0
- package/dist/conformance/runner.d.ts.map +1 -1
- package/dist/conformance/runner.js +23 -3
- package/dist/conformance/runner.js.map +1 -1
- package/dist/conformance/stdio-harness/child-process-harness.d.ts +6 -0
- package/dist/conformance/stdio-harness/child-process-harness.d.ts.map +1 -1
- package/dist/conformance/stdio-harness/child-process-harness.js +26 -9
- package/dist/conformance/stdio-harness/child-process-harness.js.map +1 -1
- package/dist/conformance/stdio-harness/index.d.ts +1 -1
- package/dist/conformance/stdio-harness/index.d.ts.map +1 -1
- package/dist/conformance/stdio-harness/index.js +1 -1
- package/dist/conformance/stdio-harness/index.js.map +1 -1
- package/dist/conformance/stdio-harness/ndjson-frame.d.ts +6 -1
- package/dist/conformance/stdio-harness/ndjson-frame.d.ts.map +1 -1
- package/dist/conformance/stdio-harness/ndjson-frame.js +7 -1
- package/dist/conformance/stdio-harness/ndjson-frame.js.map +1 -1
- package/dist/conformance/stdio-harness/wire-shape.d.ts +1 -1
- package/dist/docx-materialization.d.ts +8 -0
- package/dist/docx-materialization.d.ts.map +1 -0
- package/dist/docx-materialization.js +19 -0
- package/dist/docx-materialization.js.map +1 -0
- package/dist/generated/contract.generated.d.ts +1793 -32
- package/dist/generated/contract.generated.d.ts.map +1 -1
- package/dist/generated/contract.generated.js +72 -3
- package/dist/generated/contract.generated.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/validation/catalog.d.ts +21 -0
- package/dist/validation/catalog.d.ts.map +1 -0
- package/dist/validation/catalog.js +140 -0
- package/dist/validation/catalog.js.map +1 -0
- package/dist/validation/cloud-conversation-host.d.ts +18 -0
- package/dist/validation/cloud-conversation-host.d.ts.map +1 -0
- package/dist/validation/cloud-conversation-host.js +83 -0
- package/dist/validation/cloud-conversation-host.js.map +1 -0
- package/dist/validation/companion-bridge.d.ts +6 -0
- package/dist/validation/companion-bridge.d.ts.map +1 -0
- package/dist/validation/companion-bridge.js +198 -0
- package/dist/validation/companion-bridge.js.map +1 -0
- package/dist/validation/docx-materialization.d.ts +6 -0
- package/dist/validation/docx-materialization.d.ts.map +1 -0
- package/dist/validation/docx-materialization.js +36 -0
- package/dist/validation/docx-materialization.js.map +1 -0
- package/dist/validation/index.d.ts +10 -0
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +10 -0
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/manifest.d.ts +23 -0
- package/dist/validation/manifest.d.ts.map +1 -0
- package/dist/validation/manifest.js +273 -0
- package/dist/validation/manifest.js.map +1 -0
- package/dist/validation/members.d.ts +4 -0
- package/dist/validation/members.d.ts.map +1 -0
- package/dist/validation/members.js +11 -0
- package/dist/validation/members.js.map +1 -0
- package/dist/validation/messaging-semantic.d.ts.map +1 -1
- package/dist/validation/messaging-semantic.js +98 -0
- package/dist/validation/messaging-semantic.js.map +1 -1
- package/dist/validation/messaging-wire.d.ts +42 -0
- package/dist/validation/messaging-wire.d.ts.map +1 -0
- package/dist/validation/messaging-wire.js +184 -0
- package/dist/validation/messaging-wire.js.map +1 -0
- package/dist/validation/operation-rows.d.ts +25 -0
- package/dist/validation/operation-rows.d.ts.map +1 -0
- package/dist/validation/operation-rows.js +135 -0
- package/dist/validation/operation-rows.js.map +1 -0
- package/dist/validation/signals.d.ts +17 -0
- package/dist/validation/signals.d.ts.map +1 -0
- package/dist/validation/signals.js +32 -0
- package/dist/validation/signals.js.map +1 -0
- package/dist/wire/constants.d.ts +2 -1
- package/dist/wire/constants.d.ts.map +1 -1
- package/dist/wire/constants.js +2 -1
- package/dist/wire/constants.js.map +1 -1
- package/dist/wire/dispatch.d.ts +49 -0
- package/dist/wire/dispatch.d.ts.map +1 -0
- package/dist/wire/dispatch.js +880 -0
- package/dist/wire/dispatch.js.map +1 -0
- package/dist/wire/disposition-fixtures.d.ts +19 -2
- package/dist/wire/disposition-fixtures.d.ts.map +1 -1
- package/dist/wire/disposition-fixtures.js +1110 -77
- package/dist/wire/disposition-fixtures.js.map +1 -1
- package/dist/wire/disposition.d.ts +10 -8
- package/dist/wire/disposition.d.ts.map +1 -1
- package/dist/wire/disposition.js +20 -8
- package/dist/wire/disposition.js.map +1 -1
- package/dist/wire/envelope.d.ts +31 -0
- package/dist/wire/envelope.d.ts.map +1 -1
- package/dist/wire/envelope.js +48 -1
- package/dist/wire/envelope.js.map +1 -1
- package/dist/wire/errors.d.ts +31 -1
- package/dist/wire/errors.d.ts.map +1 -1
- package/dist/wire/errors.js +36 -0
- package/dist/wire/errors.js.map +1 -1
- package/dist/wire/grants.d.ts +4 -4
- package/dist/wire/grants.js +3 -3
- package/dist/wire/handshake-byte-bounds.d.ts +69 -0
- package/dist/wire/handshake-byte-bounds.d.ts.map +1 -0
- package/dist/wire/handshake-byte-bounds.js +176 -0
- package/dist/wire/handshake-byte-bounds.js.map +1 -0
- package/dist/wire/handshake.d.ts +59 -7
- package/dist/wire/handshake.d.ts.map +1 -1
- package/dist/wire/handshake.js +132 -10
- package/dist/wire/handshake.js.map +1 -1
- package/dist/wire/index.d.ts +18 -7
- package/dist/wire/index.d.ts.map +1 -1
- package/dist/wire/index.js +35 -6
- package/dist/wire/index.js.map +1 -1
- package/dist/wire/lifecycle-byte-bounds.d.ts +40 -0
- package/dist/wire/lifecycle-byte-bounds.d.ts.map +1 -0
- package/dist/wire/lifecycle-byte-bounds.js +149 -0
- package/dist/wire/lifecycle-byte-bounds.js.map +1 -0
- package/dist/wire/messaging-byte-bounds.d.ts +62 -0
- package/dist/wire/messaging-byte-bounds.d.ts.map +1 -0
- package/dist/wire/messaging-byte-bounds.js +581 -0
- package/dist/wire/messaging-byte-bounds.js.map +1 -0
- package/dist/wire/registry.d.ts +192 -35
- package/dist/wire/registry.d.ts.map +1 -1
- package/dist/wire/registry.js +57 -79
- package/dist/wire/registry.js.map +1 -1
- package/dist/wire/row-shapes.d.ts +98 -81
- package/dist/wire/row-shapes.d.ts.map +1 -1
- package/dist/wire/row-shapes.js +31 -4
- package/dist/wire/row-shapes.js.map +1 -1
- package/fixtures/behavior/messaging/adversarial-invariants.json +92 -2
- package/fixtures/manifest/invalid/duplicate-signal-type.json +35 -0
- package/fixtures/manifest/invalid/icon-package-escape.json +22 -0
- package/fixtures/manifest/valid/localized-product-metadata.json +27 -0
- package/fixtures/messaging/valid/subscription-delivery.json +1 -1
- package/fixtures/signals/invalid/dynamic-schema-url.json +10 -0
- package/fixtures/signals/invalid/forbidden-raw-privacy.json +10 -0
- package/fixtures/signals/valid/remote-service-declaration.json +10 -0
- package/package.json +18 -5
- package/src/schemas/behavior-fixture.schema.json +903 -116
- package/src/schemas/catalog.schema.json +91 -0
- package/src/schemas/companion-bridge.schema.json +2256 -0
- package/src/schemas/docx-materialization.schema.json +302 -0
- package/src/schemas/manifest.schema.json +2223 -89
- package/src/schemas/messaging.schema.json +692 -40
- package/src/schemas/physical-limb.schema.json +319 -0
- package/src/schemas/plugin-metadata.schema.json +62 -0
- package/src/schemas/signal.schema.json +119 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
const Ajv2020 = require('ajv/dist/2020');
|
|
4
|
+
const addFormats = require('ajv-formats');
|
|
5
|
+
const manifestSchema = require('@clowder-ai/plugin-contract/schemas/manifest');
|
|
6
|
+
const messagingSchema = require('@clowder-ai/plugin-contract/schemas/messaging');
|
|
7
|
+
const pluginMetadataSchema = require('@clowder-ai/plugin-contract/schemas/plugin-metadata');
|
|
8
|
+
const signalSchema = require('@clowder-ai/plugin-contract/schemas/signals');
|
|
9
|
+
const ajv = new Ajv2020({ allErrors: true, strict: false });
|
|
10
|
+
addFormats(ajv);
|
|
11
|
+
const schemaId = manifestSchema['$id'];
|
|
12
|
+
ajv.addSchema(pluginMetadataSchema, pluginMetadataSchema['$id']);
|
|
13
|
+
ajv.addSchema(signalSchema, signalSchema['$id']);
|
|
14
|
+
ajv.addSchema(messagingSchema, messagingSchema['$id']);
|
|
15
|
+
ajv.addSchema(manifestSchema, schemaId);
|
|
16
|
+
function definitionValidator(name) {
|
|
17
|
+
return ajv.compile({ $ref: `${schemaId}#/$defs/${name}` });
|
|
18
|
+
}
|
|
19
|
+
const validateAppendMessageInput = definitionValidator('CloudConversationAppendMessageInput');
|
|
20
|
+
const validateAppendMessageResult = definitionValidator('CloudConversationAppendMessageResult');
|
|
21
|
+
const validateListInput = definitionValidator('CloudConversationListInput');
|
|
22
|
+
const validateListResult = definitionValidator('CloudConversationListResult');
|
|
23
|
+
const validateAckInput = definitionValidator('CloudConversationAckInput');
|
|
24
|
+
const validateAckResult = definitionValidator('CloudConversationAckResult');
|
|
25
|
+
const validateFailureDiagnostic = definitionValidator('CloudBridgeFailureDiagnosticV1');
|
|
26
|
+
export function isCloudConversationAppendMessageInput(value) {
|
|
27
|
+
return (validateAppendMessageInput(value) &&
|
|
28
|
+
isCloudConversationTextBudget(value.text));
|
|
29
|
+
}
|
|
30
|
+
export function isCloudConversationAppendMessageResult(value) {
|
|
31
|
+
if (!validateAppendMessageResult(value))
|
|
32
|
+
return false;
|
|
33
|
+
const result = value;
|
|
34
|
+
return (result.status !== 'failed' ||
|
|
35
|
+
result.diagnostic === undefined ||
|
|
36
|
+
isCloudBridgeFailureDiagnosticV1(result.diagnostic));
|
|
37
|
+
}
|
|
38
|
+
export function isCloudConversationListInput(value) {
|
|
39
|
+
return validateListInput(value);
|
|
40
|
+
}
|
|
41
|
+
export function isCloudConversationListResult(value) {
|
|
42
|
+
return (validateListResult(value) &&
|
|
43
|
+
value.returns.every((result) => isCloudConversationTextBudget(result.content)));
|
|
44
|
+
}
|
|
45
|
+
export function isCloudConversationAckInput(value) {
|
|
46
|
+
return validateAckInput(value);
|
|
47
|
+
}
|
|
48
|
+
export function isCloudConversationAckResult(value) {
|
|
49
|
+
if (!validateAckResult(value))
|
|
50
|
+
return false;
|
|
51
|
+
const result = value;
|
|
52
|
+
return (result.status !== 'failed' ||
|
|
53
|
+
result.diagnostic === undefined ||
|
|
54
|
+
isCloudBridgeFailureDiagnosticV1(result.diagnostic));
|
|
55
|
+
}
|
|
56
|
+
export const CLOUD_CONVERSATION_MAX_TEXT_BYTES = 128 * 1024;
|
|
57
|
+
const textEncoder = new TextEncoder();
|
|
58
|
+
/**
|
|
59
|
+
* Text / content budget check that mirrors the native host protocol: the JSON
|
|
60
|
+
* schema bounds character count (maxLength 131072), while this function bounds
|
|
61
|
+
* the UTF-8 byte size (<= 128 KiB) and requires non-empty content after trim.
|
|
62
|
+
* Both the Host and the package run this check.
|
|
63
|
+
*/
|
|
64
|
+
export function isCloudConversationTextBudget(value) {
|
|
65
|
+
if (typeof value !== 'string')
|
|
66
|
+
return false;
|
|
67
|
+
if (value.trim().length === 0)
|
|
68
|
+
return false;
|
|
69
|
+
return textEncoder.encode(value).length <= CLOUD_CONVERSATION_MAX_TEXT_BYTES;
|
|
70
|
+
}
|
|
71
|
+
const MAX_DOM_CHILD_INDEX = 0xffff_ffff;
|
|
72
|
+
export function isCloudBridgeFailureDiagnosticV1(value) {
|
|
73
|
+
if (!validateFailureDiagnostic(value))
|
|
74
|
+
return false;
|
|
75
|
+
const diagnostic = value;
|
|
76
|
+
const paths = [
|
|
77
|
+
diagnostic.fingerprint.firstUnsupportedPath,
|
|
78
|
+
...diagnostic.fingerprint.nodes.map((node) => node.path),
|
|
79
|
+
];
|
|
80
|
+
return paths.every((path) => path === undefined ||
|
|
81
|
+
[...path.matchAll(/\[(\d+)\]/g)].every((match) => Number(match[1]) <= MAX_DOM_CHILD_INDEX));
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=cloud-conversation-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-conversation-host.js","sourceRoot":"","sources":["../../src/validation/cloud-conversation-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CompanionCommand, CompanionEvent, CompanionReply } from '../generated/contract.generated.js';
|
|
2
|
+
/** Structural validation never substitutes for a current Host lease or a user gesture. */
|
|
3
|
+
export declare function validateCompanionCommand(value: unknown): value is CompanionCommand;
|
|
4
|
+
export declare function validateCompanionReply(value: unknown): value is CompanionReply;
|
|
5
|
+
export declare function validateCompanionEvent(value: unknown): value is CompanionEvent;
|
|
6
|
+
//# sourceMappingURL=companion-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"companion-bridge.d.ts","sourceRoot":"","sources":["../../src/validation/companion-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAmB3G,0FAA0F;AAC1F,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAOlF;AACD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAyH9E;AACD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAA2C"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
const schema = require('@clowder-ai/plugin-contract/schemas/companion-bridge');
|
|
4
|
+
const Ajv = require('ajv/dist/2020');
|
|
5
|
+
const formats = require('ajv-formats');
|
|
6
|
+
const ajv = new Ajv({ strict: false, allErrors: false, ownProperties: true });
|
|
7
|
+
formats(ajv);
|
|
8
|
+
ajv.addSchema(schema);
|
|
9
|
+
const command = ajv.compile({ $ref: `${schema.$id}#/$defs/CompanionCommand` });
|
|
10
|
+
const reply = ajv.compile({ $ref: `${schema.$id}#/$defs/CompanionReply` });
|
|
11
|
+
const event = ajv.compile({ $ref: `${schema.$id}#/$defs/CompanionEvent` });
|
|
12
|
+
function bounded(value) {
|
|
13
|
+
try {
|
|
14
|
+
const json = JSON.stringify(value);
|
|
15
|
+
return typeof json === 'string' && Buffer.byteLength(json) <= 1_500_000;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Structural validation never substitutes for a current Host lease or a user gesture. */
|
|
22
|
+
export function validateCompanionCommand(value) {
|
|
23
|
+
if (!bounded(value) || !command(value))
|
|
24
|
+
return false;
|
|
25
|
+
const parsed = value;
|
|
26
|
+
if (parsed.kind === 'view.layout' && parsed.call !== undefined && parsed.panel !== 'actions')
|
|
27
|
+
return false;
|
|
28
|
+
if (parsed.kind === 'text')
|
|
29
|
+
return parsed.text.trim().length > 0;
|
|
30
|
+
if (parsed.kind === 'screen.frame')
|
|
31
|
+
return /^data:image\/(jpeg|png|webp);base64,[A-Za-z0-9+/]+={0,2}$/.test(parsed.frame.image);
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
export function validateCompanionReply(value) {
|
|
35
|
+
if (!bounded(value) || !reply(value))
|
|
36
|
+
return false;
|
|
37
|
+
const parsed = value;
|
|
38
|
+
if (parsed.kind === 'conversation') {
|
|
39
|
+
if ('status' in parsed) {
|
|
40
|
+
if (parsed.status === 'stale')
|
|
41
|
+
return true;
|
|
42
|
+
if (new Set(parsed.messages.map((message) => message.id)).size !== parsed.messages.length)
|
|
43
|
+
return false;
|
|
44
|
+
if (parsed.messages.reduce((total, message) => total + message.text.length, 0) > 24000)
|
|
45
|
+
return false;
|
|
46
|
+
return parsed.messages.every((message) => {
|
|
47
|
+
const identity = message.companionIdentity;
|
|
48
|
+
if (identity !== undefined && identity.partner.catId !== identity.deep.catId)
|
|
49
|
+
return false;
|
|
50
|
+
if (message.role === 'user') {
|
|
51
|
+
return message.inputMessageIds.length === 0 && message.responsePhase === null
|
|
52
|
+
&& (message.deliveryReceipt === undefined || message.deliveryReceipt.messageId === message.id);
|
|
53
|
+
}
|
|
54
|
+
return message.deliveryReceipt === undefined
|
|
55
|
+
&& (message.inputMessageIds.length === 0) === (message.responsePhase === null);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
if (new Set(parsed.messages.map((message) => message.id)).size !== parsed.messages.length)
|
|
59
|
+
return false;
|
|
60
|
+
return parsed.messages.every((message) => {
|
|
61
|
+
const identity = message.companionIdentity;
|
|
62
|
+
return identity === undefined || identity.partner.catId === identity.deep.catId;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
if (parsed.kind === 'conversation-draft') {
|
|
66
|
+
if (parsed.status !== 'available')
|
|
67
|
+
return true;
|
|
68
|
+
if (parsed.text.length > 8000 && parsed.writable)
|
|
69
|
+
return false;
|
|
70
|
+
const ids = parsed.submissions.map((submission) => submission.clientMessageId);
|
|
71
|
+
if (new Set(ids).size !== ids.length)
|
|
72
|
+
return false;
|
|
73
|
+
if (parsed.submissions.filter((submission) => submission.receipt.delivery === 'accepted').length > 1)
|
|
74
|
+
return false;
|
|
75
|
+
return parsed.submissions.every((submission) => submission.receipt.clientMessageId === submission.clientMessageId);
|
|
76
|
+
}
|
|
77
|
+
if (parsed.kind === 'transcript') {
|
|
78
|
+
if (new Set(parsed.rows.map((row) => row.messageId)).size !== parsed.rows.length)
|
|
79
|
+
return false;
|
|
80
|
+
if (parsed.rows.reduce((total, row) => total + row.text.length, 0) > 24000)
|
|
81
|
+
return false;
|
|
82
|
+
return parsed.rows.every((row) => row.source.kind === 'voice'
|
|
83
|
+
? row.source.realtimeSessionId === parsed.scope.realtimeSessionId
|
|
84
|
+
: row.source.callId === parsed.scope.callId);
|
|
85
|
+
}
|
|
86
|
+
if (parsed.kind === 'settings') {
|
|
87
|
+
if (parsed.status === 'unavailable')
|
|
88
|
+
return true;
|
|
89
|
+
if (new Set(parsed.companions.map((entry) => entry.catProfileId)).size !== parsed.companions.length)
|
|
90
|
+
return false;
|
|
91
|
+
const selected = parsed.companions.find((entry) => entry.catProfileId === parsed.values.dutyCatProfileId);
|
|
92
|
+
return (selected?.available === true) === (parsed.selectedCompanionStatus === 'available');
|
|
93
|
+
}
|
|
94
|
+
if (parsed.kind === 'settings-update') {
|
|
95
|
+
const stopsCall = parsed.field === 'dutyCatProfileId' || parsed.field === 'householdReadsAllowed';
|
|
96
|
+
if (!stopsCall && parsed.callStatus !== 'unchanged')
|
|
97
|
+
return false;
|
|
98
|
+
if (parsed.outcome === 'saved') {
|
|
99
|
+
return parsed.field === 'personaTone' ? parsed.applies === 'next_call' : parsed.applies === 'now';
|
|
100
|
+
}
|
|
101
|
+
if (parsed.outcome === 'rejected') {
|
|
102
|
+
return (parsed.callStatus === 'stop_failed') === (parsed.reason === 'call_stop_failed');
|
|
103
|
+
}
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
if (parsed.kind === 'work') {
|
|
107
|
+
const coverage = new Map(parsed.coverage.map((entry) => [entry.source, entry.status]));
|
|
108
|
+
if (coverage.size !== 3)
|
|
109
|
+
return false;
|
|
110
|
+
const statuses = [...coverage.values()];
|
|
111
|
+
const allAvailable = statuses.every((source) => source === 'available');
|
|
112
|
+
const anyAvailable = statuses.some((source) => source !== 'unavailable');
|
|
113
|
+
if (parsed.status === 'available' && !allAvailable)
|
|
114
|
+
return false;
|
|
115
|
+
if (parsed.status === 'partial' && (!anyAvailable || allAvailable))
|
|
116
|
+
return false;
|
|
117
|
+
if (parsed.status === 'unavailable' && (anyAvailable || parsed.active.length > 0 || parsed.recentDeliveries.length > 0)) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
if (coverage.get('tasks') === 'unavailable' && parsed.active.length > 0)
|
|
121
|
+
return false;
|
|
122
|
+
if (coverage.get('messages') === 'unavailable' && parsed.recentDeliveries.length > 0)
|
|
123
|
+
return false;
|
|
124
|
+
if (coverage.get('artifacts') === 'unavailable'
|
|
125
|
+
&& parsed.recentDeliveries.some((entry) => entry.artifact !== null))
|
|
126
|
+
return false;
|
|
127
|
+
if (parsed.recentDeliveries.some((entry) => entry.artifact !== null
|
|
128
|
+
&& entry.artifact.version === null && entry.artifact.versionState !== 'unknown'))
|
|
129
|
+
return false;
|
|
130
|
+
const entryRefs = [...parsed.active, ...parsed.recentDeliveries].map((entry) => entry.entryRef);
|
|
131
|
+
return new Set(entryRefs).size === entryRefs.length;
|
|
132
|
+
}
|
|
133
|
+
if (parsed.kind === 'decisions') {
|
|
134
|
+
if (!('version' in parsed))
|
|
135
|
+
return true;
|
|
136
|
+
const variantRefs = parsed.items.map((item) => item.variantRef);
|
|
137
|
+
if (new Set(variantRefs).size !== variantRefs.length)
|
|
138
|
+
return false;
|
|
139
|
+
if (parsed.items.some((item) => new Set(item.navigation.targets).size !== item.navigation.targets.length)) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
if (parsed.items.length > parsed.page.limit)
|
|
143
|
+
return false;
|
|
144
|
+
if (parsed.page.hasMore && parsed.items.length !== parsed.page.limit)
|
|
145
|
+
return false;
|
|
146
|
+
const sources = Object.values(parsed.sources);
|
|
147
|
+
if (sources.some((source) => source.status !== 'available' && source.coverage !== 'unknown'))
|
|
148
|
+
return false;
|
|
149
|
+
const complete = sources.every((source) => source.status === 'available' && source.coverage === 'complete');
|
|
150
|
+
const anyAvailable = sources.some((source) => source.status === 'available');
|
|
151
|
+
if (parsed.status === 'available' && !complete)
|
|
152
|
+
return false;
|
|
153
|
+
if (parsed.status === 'partial' && (!anyAvailable || complete))
|
|
154
|
+
return false;
|
|
155
|
+
if (parsed.status === 'unavailable' && (anyAvailable || parsed.items.length > 0 || parsed.page.hasMore))
|
|
156
|
+
return false;
|
|
157
|
+
if (parsed.totalCount !== undefined) {
|
|
158
|
+
if (parsed.status !== 'available' || !complete || parsed.totalCount < parsed.items.length)
|
|
159
|
+
return false;
|
|
160
|
+
const expectedRows = Math.min(parsed.page.limit, Math.max(0, parsed.totalCount - parsed.page.offset));
|
|
161
|
+
if (parsed.items.length !== expectedRows)
|
|
162
|
+
return false;
|
|
163
|
+
const knownEnd = parsed.page.offset + parsed.items.length;
|
|
164
|
+
if (parsed.page.hasMore !== (knownEnd < parsed.totalCount))
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
if (parsed.kind !== 'state')
|
|
170
|
+
return true;
|
|
171
|
+
if (parsed.audio) {
|
|
172
|
+
if (!parsed.audio.supportedModes.includes('duplex'))
|
|
173
|
+
return false;
|
|
174
|
+
if (parsed.audio.activeMode !== null && !parsed.audio.supportedModes.includes(parsed.audio.activeMode))
|
|
175
|
+
return false;
|
|
176
|
+
if ((parsed.phase === 'talking') !== (parsed.audio.activeMode !== null))
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
const work = parsed.nativeWork;
|
|
180
|
+
if (work.scopeId === null && (work.active.length > 0 || work.recent.length > 0))
|
|
181
|
+
return false;
|
|
182
|
+
if (new Set(work.active.map((entry) => entry.taskId)).size !== work.active.length)
|
|
183
|
+
return false;
|
|
184
|
+
if (new Set(work.recent.map((event) => event.eventId)).size !== work.recent.length)
|
|
185
|
+
return false;
|
|
186
|
+
if (work.active.some((entry) => entry.expiresAt <= entry.startedAt))
|
|
187
|
+
return false;
|
|
188
|
+
return work.recent.every((event) => {
|
|
189
|
+
if (event.expiresAt <= event.occurredAt)
|
|
190
|
+
return false;
|
|
191
|
+
const handed = event.phase === 'result_handed_to_voice';
|
|
192
|
+
const result = event.kind === 'result';
|
|
193
|
+
const attributed = event.resultId !== undefined && event.nativeCarrierCatId !== undefined;
|
|
194
|
+
return handed === result && result === attributed;
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
export function validateCompanionEvent(value) { return bounded(value) && event(value); }
|
|
198
|
+
//# sourceMappingURL=companion-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"companion-bridge.js","sourceRoot":"","sources":["../../src/validation/companion-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DocxMaterializationRequest, DocxMaterializationResponse } from '../generated/contract.generated.js';
|
|
2
|
+
export { DOCX_MATERIALIZATION_MAX_BYTES, DOCX_MATERIALIZATION_MAX_WIRE_BYTES } from '../docx-materialization.js';
|
|
3
|
+
/** Validate at both Host boundaries; worker output is untrusted even for an admitted package. */
|
|
4
|
+
export declare function validateDocxMaterializationRequest(value: unknown): value is DocxMaterializationRequest;
|
|
5
|
+
export declare function validateDocxMaterializationResponse(value: unknown): value is DocxMaterializationResponse;
|
|
6
|
+
//# sourceMappingURL=docx-materialization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docx-materialization.d.ts","sourceRoot":"","sources":["../../src/validation/docx-materialization.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAElH,OAAO,EAAE,8BAA8B,EAAE,mCAAmC,EAAE,MAAM,4BAA4B,CAAC;AA+BjH,iGAAiG;AACjG,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,0BAA0B,CAEtG;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,2BAA2B,CAIxG"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { DOCX_MATERIALIZATION_MAX_BYTES, DOCX_MATERIALIZATION_MAX_WIRE_BYTES } from '../docx-materialization.js';
|
|
3
|
+
export { DOCX_MATERIALIZATION_MAX_BYTES, DOCX_MATERIALIZATION_MAX_WIRE_BYTES } from '../docx-materialization.js';
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
5
|
+
const schema = require('@clowder-ai/plugin-contract/schemas/docx-materialization');
|
|
6
|
+
const Ajv2020 = require('ajv/dist/2020');
|
|
7
|
+
const addFormats = require('ajv-formats');
|
|
8
|
+
const ajv = new Ajv2020({ strict: false, allErrors: false, ownProperties: true });
|
|
9
|
+
addFormats(ajv);
|
|
10
|
+
ajv.addSchema(schema);
|
|
11
|
+
const requestValidator = ajv.compile({ $ref: `${schema.$id}#/$defs/DocxMaterializationRequest` });
|
|
12
|
+
const responseValidator = ajv.compile({ $ref: `${schema.$id}#/$defs/DocxMaterializationResponse` });
|
|
13
|
+
function boundedJson(value) {
|
|
14
|
+
try {
|
|
15
|
+
const json = JSON.stringify(value);
|
|
16
|
+
return typeof json === 'string' && Buffer.byteLength(json) <= DOCX_MATERIALIZATION_MAX_WIRE_BYTES;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function canonicalBytes(value) {
|
|
23
|
+
const bytes = Buffer.from(value, 'base64');
|
|
24
|
+
return bytes.length > 0 && bytes.length <= DOCX_MATERIALIZATION_MAX_BYTES && bytes.toString('base64') === value;
|
|
25
|
+
}
|
|
26
|
+
/** Validate at both Host boundaries; worker output is untrusted even for an admitted package. */
|
|
27
|
+
export function validateDocxMaterializationRequest(value) {
|
|
28
|
+
return boundedJson(value) && requestValidator(value) && canonicalBytes(value.bytesBase64);
|
|
29
|
+
}
|
|
30
|
+
export function validateDocxMaterializationResponse(value) {
|
|
31
|
+
if (!boundedJson(value) || !responseValidator(value))
|
|
32
|
+
return false;
|
|
33
|
+
const result = value.result;
|
|
34
|
+
return result.kind !== 'document' || canonicalBytes(result.bytesBase64);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=docx-materialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docx-materialization.js","sourceRoot":"","sources":["../../src/validation/docx-materialization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,8BAA8B,EAAE,mCAAmC,EAAE,MAAM,4BAA4B,CAAC;AACjH,OAAO,EAAE,8BAA8B,EAAE,mCAAmC,EAAE,MAAM,4BAA4B,CAAC;AAEjH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,0DAA0D,CAA4B,CAAC;AAM9G,MAAM,OAAO,GAA0D,OAAO,CAAC,eAAe,CAAC,CAAC;AAChG,MAAM,UAAU,GAA+B,OAAO,CAAC,aAAa,CAAC,CAAC;AACtE,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AAClF,UAAU,CAAC,GAAG,CAAC,CAAC;AAChB,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACtB,MAAM,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,oCAAoC,EAAE,CAAC,CAAC;AAClG,MAAM,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,qCAAqC,EAAE,CAAC,CAAC;AAEpG,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,mCAAmC,CAAC;IACpG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,8BAA8B,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC;AAClH,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,kCAAkC,CAAC,KAAc;IAC/D,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,cAAc,CAAE,KAAoC,CAAC,WAAW,CAAC,CAAC;AAC5H,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,KAAc;IAChE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnE,MAAM,MAAM,GAAI,KAAqC,CAAC,MAAM,CAAC;IAC7D,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -1,2 +1,12 @@
|
|
|
1
|
+
export { validateCompanionCommand, validateCompanionReply, validateCompanionEvent, } from './companion-bridge.js';
|
|
1
2
|
export { validateMessagingSemantics, type SemanticValidationError, type SemanticValidationResult, } from './messaging-semantic.js';
|
|
3
|
+
export { MESSAGING_ROW_METHODS, validateMessagingRowInput, validateMessagingRowResult, type MessagingRowInputByMethod, type MessagingRowMethod, type MessagingRowResultByMethod, type MessagingRowValidationError, type MessagingRowValidationResult, } from './messaging-wire.js';
|
|
4
|
+
export { validateManifest, type ManifestValidationError, type ManifestValidationResult, } from './manifest.js';
|
|
5
|
+
export { CLOUD_CONVERSATION_MAX_TEXT_BYTES, isCloudBridgeFailureDiagnosticV1, isCloudConversationAckInput, isCloudConversationAckResult, isCloudConversationAppendMessageInput, isCloudConversationAppendMessageResult, isCloudConversationListInput, isCloudConversationListResult, isCloudConversationTextBudget, type CloudBridgeDomFingerprintV1, type CloudBridgeFailureDiagnosticV1, } from './cloud-conversation-host.js';
|
|
6
|
+
export { validateOperationRowsResult, type OperationRowsValidationError, type OperationRowsValidationResult, } from './operation-rows.js';
|
|
7
|
+
export { getCatalogPlugin, listCatalogPlugins, searchCatalogPlugins, validatePluginCatalog, type CatalogValidationError, type CatalogValidationResult, } from './catalog.js';
|
|
8
|
+
export { validateSignalDeclaration, type SignalValidationError, type SignalValidationResult, } from './signals.js';
|
|
9
|
+
export { DOCX_MATERIALIZATION_MAX_BYTES, DOCX_MATERIALIZATION_MAX_WIRE_BYTES, validateDocxMaterializationRequest, validateDocxMaterializationResponse, } from './docx-materialization.js';
|
|
10
|
+
export * from './members.js';
|
|
11
|
+
export { isPluginDeliveryInput, isPluginDeliveryReceipt } from './messaging-wire.js';
|
|
2
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,0BAA0B,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,GAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,GAClC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,GAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iCAAiC,EACjC,gCAAgC,EAChC,2BAA2B,EAC3B,4BAA4B,EAC5B,qCAAqC,EACrC,sCAAsC,EACtC,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC7B,KAAK,2BAA2B,EAChC,KAAK,8BAA8B,GACpC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,2BAA2B,EAC3B,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,GACnC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,GAC7B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,yBAAyB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,8BAA8B,EAC9B,mCAAmC,EACnC,kCAAkC,EAClC,mCAAmC,GACpC,MAAM,2BAA2B,CAAC;AAKnC,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/validation/index.js
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
|
+
export { validateCompanionCommand, validateCompanionReply, validateCompanionEvent, } from './companion-bridge.js';
|
|
1
2
|
export { validateMessagingSemantics, } from './messaging-semantic.js';
|
|
3
|
+
export { MESSAGING_ROW_METHODS, validateMessagingRowInput, validateMessagingRowResult, } from './messaging-wire.js';
|
|
4
|
+
export { validateManifest, } from './manifest.js';
|
|
5
|
+
export { CLOUD_CONVERSATION_MAX_TEXT_BYTES, isCloudBridgeFailureDiagnosticV1, isCloudConversationAckInput, isCloudConversationAckResult, isCloudConversationAppendMessageInput, isCloudConversationAppendMessageResult, isCloudConversationListInput, isCloudConversationListResult, isCloudConversationTextBudget, } from './cloud-conversation-host.js';
|
|
6
|
+
export { validateOperationRowsResult, } from './operation-rows.js';
|
|
7
|
+
export { getCatalogPlugin, listCatalogPlugins, searchCatalogPlugins, validatePluginCatalog, } from './catalog.js';
|
|
8
|
+
export { validateSignalDeclaration, } from './signals.js';
|
|
9
|
+
export { DOCX_MATERIALIZATION_MAX_BYTES, DOCX_MATERIALIZATION_MAX_WIRE_BYTES, validateDocxMaterializationRequest, validateDocxMaterializationResponse, } from './docx-materialization.js';
|
|
10
|
+
export * from './members.js';
|
|
11
|
+
export { isPluginDeliveryInput, isPluginDeliveryReceipt } from './messaging-wire.js';
|
|
2
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,GAG3B,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,0BAA0B,GAG3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,GAM3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,GAGjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iCAAiC,EACjC,gCAAgC,EAChC,2BAA2B,EAC3B,4BAA4B,EAC5B,qCAAqC,EACrC,sCAAsC,EACtC,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,GAG9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,2BAA2B,GAG5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GAGtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,yBAAyB,GAG1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,8BAA8B,EAC9B,mCAAmC,EACnC,kCAAkC,EAClC,mCAAmC,GACpC,MAAM,2BAA2B,CAAC;AAKnC,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { PluginManifest } from '../generated/contract.generated.js';
|
|
2
|
+
export interface ManifestValidationError {
|
|
3
|
+
readonly instancePath: string;
|
|
4
|
+
readonly schemaPath: string;
|
|
5
|
+
readonly keyword: string;
|
|
6
|
+
readonly message: string;
|
|
7
|
+
}
|
|
8
|
+
export type ManifestValidationResult = {
|
|
9
|
+
readonly valid: true;
|
|
10
|
+
readonly manifest: PluginManifest;
|
|
11
|
+
readonly errors: readonly [];
|
|
12
|
+
} | {
|
|
13
|
+
readonly valid: false;
|
|
14
|
+
readonly errors: readonly ManifestValidationError[];
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Validates an untrusted plugin manifest against the contract-owned schema.
|
|
18
|
+
*
|
|
19
|
+
* The schema is resolved through the package's public export so runtime users
|
|
20
|
+
* and the conformance suite share one manifest definition and Ajv policy.
|
|
21
|
+
*/
|
|
22
|
+
export declare function validateManifest(value: unknown): ManifestValidationResult;
|
|
23
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/validation/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAyCzE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,wBAAwB,GAChC;IACE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;CAC9B,GACD;IACE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACrD,CAAC;AAuCN;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,wBAAwB,CAkZzE"}
|