@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
package/dist/wire/grants.js
CHANGED
|
@@ -17,10 +17,10 @@ import { L0_CAPABILITIES, L1_CAPABILITIES, L2_CAPABILITIES, } from '../generated
|
|
|
17
17
|
// ---------------------------------------------------------------------------
|
|
18
18
|
/**
|
|
19
19
|
* Maximum number of items in effectiveGrants.
|
|
20
|
-
* Derived from the
|
|
20
|
+
* Derived from the signed Capability enum — a plugin cannot hold
|
|
21
21
|
* more capabilities than exist.
|
|
22
22
|
*/
|
|
23
|
-
export const MAX_GRANT_ITEMS =
|
|
23
|
+
export const MAX_GRANT_ITEMS = 28;
|
|
24
24
|
// ---------------------------------------------------------------------------
|
|
25
25
|
// Validators
|
|
26
26
|
// ---------------------------------------------------------------------------
|
|
@@ -35,7 +35,7 @@ export const VALID_CAPABILITIES = new Set([
|
|
|
35
35
|
]);
|
|
36
36
|
/**
|
|
37
37
|
* Validate that effectiveGrants:
|
|
38
|
-
* 1. Does not exceed MAX_GRANT_ITEMS (
|
|
38
|
+
* 1. Does not exceed MAX_GRANT_ITEMS (28).
|
|
39
39
|
* 2. Contains no duplicates.
|
|
40
40
|
* 3. Contains only valid Capability enum members (closed-enum check).
|
|
41
41
|
*
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derived compact-JSON byte bounds for the beta.8 handshake rows.
|
|
3
|
+
*
|
|
4
|
+
* This production module owns only the published summary metadata. The
|
|
5
|
+
* generic byte-proof kernel remains test-only; keeping it out of the packed
|
|
6
|
+
* artifact prevents consumers from accidentally treating a proof generator
|
|
7
|
+
* as a runtime protocol dependency. The test-only templates independently
|
|
8
|
+
* recompute these values from the same closed grammar.
|
|
9
|
+
*/
|
|
10
|
+
/** Encoding families used for raw UTF-8 boundary evidence. */
|
|
11
|
+
export declare const HANDSHAKE_BYTE_PROOF_ENCODING_FAMILIES: readonly ["ascii", "multibyte", "escaping"];
|
|
12
|
+
export type HandshakeByteProofEncodingFamily = (typeof HANDSHAKE_BYTE_PROOF_ENCODING_FAMILIES)[number];
|
|
13
|
+
/** One rejected N+1 candidate measured alongside a maximum frame. */
|
|
14
|
+
export interface HandshakeNPlusOneByteProof {
|
|
15
|
+
readonly leaf: string;
|
|
16
|
+
readonly encodedBytes: number;
|
|
17
|
+
readonly fitsFrame: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** Raw UTF-8 measurement for one encoding family. */
|
|
20
|
+
export interface HandshakeEncodedByteProofCase {
|
|
21
|
+
readonly family: HandshakeByteProofEncodingFamily;
|
|
22
|
+
readonly encodedBytes: number;
|
|
23
|
+
readonly fitsFrame: boolean;
|
|
24
|
+
readonly nPlusOne: readonly HandshakeNPlusOneByteProof[];
|
|
25
|
+
}
|
|
26
|
+
/** Published max plus the raw-family proof cases from which it is derived. */
|
|
27
|
+
export interface HandshakeEncodedByteProof {
|
|
28
|
+
readonly maxEncodedBytes: number;
|
|
29
|
+
readonly cases: readonly HandshakeEncodedByteProofCase[];
|
|
30
|
+
}
|
|
31
|
+
/** Per-row frame maxima consumed by the public method registry. */
|
|
32
|
+
export interface HandshakeRowEncodedByteBounds {
|
|
33
|
+
readonly maxEncodedRequestBytes: number;
|
|
34
|
+
readonly maxEncodedResultBytes: number;
|
|
35
|
+
readonly maxEncodedErrorBytes: number;
|
|
36
|
+
}
|
|
37
|
+
/** Raw proof of the largest legal broker.hello request. */
|
|
38
|
+
export declare const BROKER_HELLO_REQUEST_BYTE_PROOF: HandshakeEncodedByteProof;
|
|
39
|
+
/** Raw proof of the largest legal broker.hello success result. */
|
|
40
|
+
export declare const BROKER_HELLO_RESULT_BYTE_PROOF: HandshakeEncodedByteProof;
|
|
41
|
+
/** Raw proof of the largest legal broker.ready request. */
|
|
42
|
+
export declare const BROKER_READY_REQUEST_BYTE_PROOF: HandshakeEncodedByteProof;
|
|
43
|
+
/** Raw proof of the largest handshake rejection envelope. */
|
|
44
|
+
export declare const HANDSHAKE_REJECTED_ERROR_BYTE_PROOF: HandshakeEncodedByteProof;
|
|
45
|
+
/** broker.ready succeeds with the exact JSON-RPC result `null`. */
|
|
46
|
+
export declare const BROKER_READY_MAX_ENCODED_RESULT_BYTES: number;
|
|
47
|
+
export declare const BROKER_HELLO_MAX_ENCODED_REQUEST_BYTES: number;
|
|
48
|
+
export declare const BROKER_HELLO_MAX_ENCODED_RESULT_BYTES: number;
|
|
49
|
+
export declare const BROKER_HELLO_MAX_ENCODED_ERROR_BYTES: number;
|
|
50
|
+
export declare const BROKER_READY_MAX_ENCODED_REQUEST_BYTES: number;
|
|
51
|
+
export declare const BROKER_READY_MAX_ENCODED_ERROR_BYTES: number;
|
|
52
|
+
/**
|
|
53
|
+
* The exact per-row summary consumed by the registry. No byte value is
|
|
54
|
+
* hand-entered in the registry; all maxima are derived above from the closed
|
|
55
|
+
* grammar and raw UTF-8 serialization.
|
|
56
|
+
*/
|
|
57
|
+
export declare const HANDSHAKE_ROW_ENCODED_BYTE_BOUNDS: {
|
|
58
|
+
readonly 'broker.hello': {
|
|
59
|
+
readonly maxEncodedRequestBytes: number;
|
|
60
|
+
readonly maxEncodedResultBytes: number;
|
|
61
|
+
readonly maxEncodedErrorBytes: number;
|
|
62
|
+
};
|
|
63
|
+
readonly 'broker.ready': {
|
|
64
|
+
readonly maxEncodedRequestBytes: number;
|
|
65
|
+
readonly maxEncodedResultBytes: number;
|
|
66
|
+
readonly maxEncodedErrorBytes: number;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=handshake-byte-bounds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handshake-byte-bounds.d.ts","sourceRoot":"","sources":["../../src/wire/handshake-byte-bounds.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH,8DAA8D;AAC9D,eAAO,MAAM,sCAAsC,6CAIzC,CAAC;AAEX,MAAM,MAAM,gCAAgC,GAC1C,CAAC,OAAO,sCAAsC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,qEAAqE;AACrE,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,qDAAqD;AACrD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE,gCAAgC,CAAC;IAClD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,0BAA0B,EAAE,CAAC;CAC1D;AAED,8EAA8E;AAC9E,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,6BAA6B,EAAE,CAAC;CAC1D;AAED,mEAAmE;AACnE,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACvC;AAgLD,2DAA2D;AAC3D,eAAO,MAAM,+BAA+B,2BAG3C,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,8BAA8B,2BAG1C,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,+BAA+B,2BAG3C,CAAC;AAEF,6DAA6D;AAC7D,eAAO,MAAM,mCAAmC,2BAG/C,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,qCAAqC,QAGjD,CAAC;AAEF,eAAO,MAAM,sCAAsC,QACF,CAAC;AAClD,eAAO,MAAM,qCAAqC,QACF,CAAC;AACjD,eAAO,MAAM,oCAAoC,QACI,CAAC;AACtD,eAAO,MAAM,sCAAsC,QACF,CAAC;AAClD,eAAO,MAAM,oCAAoC,QACI,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,iCAAiC;;;;;;;;;;;CAW6C,CAAC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derived compact-JSON byte bounds for the beta.8 handshake rows.
|
|
3
|
+
*
|
|
4
|
+
* This production module owns only the published summary metadata. The
|
|
5
|
+
* generic byte-proof kernel remains test-only; keeping it out of the packed
|
|
6
|
+
* artifact prevents consumers from accidentally treating a proof generator
|
|
7
|
+
* as a runtime protocol dependency. The test-only templates independently
|
|
8
|
+
* recompute these values from the same closed grammar.
|
|
9
|
+
*/
|
|
10
|
+
import { MAX_FRAME_BYTES } from './constants.js';
|
|
11
|
+
import { HANDSHAKE_REJECTED_CODE, HANDSHAKE_REJECTED_MESSAGE, HANDSHAKE_REJECT_REASONS, } from './errors.js';
|
|
12
|
+
import { BINDING_NONCE_MAX_LENGTH, HANDSHAKE_VERSION_MAX_LENGTH, HOST_IDENTIFIER_MAX_LENGTH, PACKAGE_DIGEST_LENGTH, PLUGIN_ID_MAX_LENGTH, } from './handshake.js';
|
|
13
|
+
import { MAX_GRANT_ITEMS, VALID_CAPABILITIES } from './grants.js';
|
|
14
|
+
import { REQUEST_ID_MAX_LENGTH } from './request-id.js';
|
|
15
|
+
import { WIRE_UINT53_MAX } from './wire-uint53.js';
|
|
16
|
+
/** Encoding families used for raw UTF-8 boundary evidence. */
|
|
17
|
+
export const HANDSHAKE_BYTE_PROOF_ENCODING_FAMILIES = [
|
|
18
|
+
'ascii',
|
|
19
|
+
'multibyte',
|
|
20
|
+
'escaping',
|
|
21
|
+
];
|
|
22
|
+
const FAMILY_CODE_POINT = {
|
|
23
|
+
ascii: 'a',
|
|
24
|
+
multibyte: '😀',
|
|
25
|
+
escaping: '\u0000',
|
|
26
|
+
};
|
|
27
|
+
const MAX_REQUEST_ID = 'a'.repeat(REQUEST_ID_MAX_LENGTH);
|
|
28
|
+
const MAX_PACKAGE_DIGEST = `sha512-${'A'.repeat(PACKAGE_DIGEST_LENGTH - 9)}==`;
|
|
29
|
+
// Vocabulary may grow without changing the frozen per-frame cardinality limit.
|
|
30
|
+
const MAX_EFFECTIVE_GRANTS = [...VALID_CAPABILITIES]
|
|
31
|
+
.sort((a, b) => Buffer.byteLength(JSON.stringify(b)) - Buffer.byteLength(JSON.stringify(a)) || a.localeCompare(b))
|
|
32
|
+
.slice(0, MAX_GRANT_ITEMS);
|
|
33
|
+
const MAX_HANDSHAKE_REJECT_REASON = HANDSHAKE_REJECT_REASONS.reduce((longest, value) => (value.length > longest.length ? value : longest));
|
|
34
|
+
function valueFor(family, leaf, nPlusOneLeaf) {
|
|
35
|
+
const codePoint = leaf.asciiOnly ? FAMILY_CODE_POINT.ascii : FAMILY_CODE_POINT[family];
|
|
36
|
+
return codePoint.repeat(leaf.maxCodePoints + Number(leaf.id === nPlusOneLeaf));
|
|
37
|
+
}
|
|
38
|
+
function semverFor(nPlusOneLeaf, leaf) {
|
|
39
|
+
return `0.0.0-${'a'.repeat(HANDSHAKE_VERSION_MAX_LENGTH - 6 + Number(nPlusOneLeaf === leaf))}`;
|
|
40
|
+
}
|
|
41
|
+
function measureProof(leaves, frameFor) {
|
|
42
|
+
const cases = HANDSHAKE_BYTE_PROOF_ENCODING_FAMILIES.map((family) => {
|
|
43
|
+
const encodedBytes = Buffer.byteLength(JSON.stringify(frameFor(family)), 'utf8');
|
|
44
|
+
return {
|
|
45
|
+
family,
|
|
46
|
+
encodedBytes,
|
|
47
|
+
fitsFrame: encodedBytes <= MAX_FRAME_BYTES,
|
|
48
|
+
nPlusOne: leaves.map((leaf) => {
|
|
49
|
+
const nPlusOneBytes = Buffer.byteLength(JSON.stringify(frameFor(family, leaf.id)), 'utf8');
|
|
50
|
+
return {
|
|
51
|
+
leaf: leaf.id,
|
|
52
|
+
encodedBytes: nPlusOneBytes,
|
|
53
|
+
fitsFrame: nPlusOneBytes <= MAX_FRAME_BYTES,
|
|
54
|
+
};
|
|
55
|
+
}),
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
maxEncodedBytes: Math.max(...cases.map(({ encodedBytes }) => encodedBytes)),
|
|
60
|
+
cases,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const HELLO_REQUEST_LEAVES = [
|
|
64
|
+
{ id: 'requestId', maxCodePoints: REQUEST_ID_MAX_LENGTH, asciiOnly: true },
|
|
65
|
+
{ id: 'pluginId', maxCodePoints: PLUGIN_ID_MAX_LENGTH },
|
|
66
|
+
{ id: 'contractVersion', maxCodePoints: HANDSHAKE_VERSION_MAX_LENGTH, asciiOnly: true },
|
|
67
|
+
{ id: 'wireVersion', maxCodePoints: HANDSHAKE_VERSION_MAX_LENGTH, asciiOnly: true },
|
|
68
|
+
];
|
|
69
|
+
const HELLO_RESULT_LEAVES = [
|
|
70
|
+
{ id: 'requestId', maxCodePoints: REQUEST_ID_MAX_LENGTH, asciiOnly: true },
|
|
71
|
+
{ id: 'pluginId', maxCodePoints: PLUGIN_ID_MAX_LENGTH },
|
|
72
|
+
{ id: 'contractVersion', maxCodePoints: HANDSHAKE_VERSION_MAX_LENGTH, asciiOnly: true },
|
|
73
|
+
{ id: 'wireVersion', maxCodePoints: HANDSHAKE_VERSION_MAX_LENGTH, asciiOnly: true },
|
|
74
|
+
{ id: 'pluginInstanceId', maxCodePoints: HOST_IDENTIFIER_MAX_LENGTH },
|
|
75
|
+
{ id: 'brokerSessionId', maxCodePoints: HOST_IDENTIFIER_MAX_LENGTH },
|
|
76
|
+
{ id: 'bindingNonce', maxCodePoints: BINDING_NONCE_MAX_LENGTH },
|
|
77
|
+
];
|
|
78
|
+
const READY_REQUEST_LEAVES = [
|
|
79
|
+
{ id: 'requestId', maxCodePoints: REQUEST_ID_MAX_LENGTH, asciiOnly: true },
|
|
80
|
+
{ id: 'bindingNonce', maxCodePoints: BINDING_NONCE_MAX_LENGTH },
|
|
81
|
+
];
|
|
82
|
+
const HANDSHAKE_ERROR_LEAVES = [
|
|
83
|
+
{ id: 'requestId', maxCodePoints: REQUEST_ID_MAX_LENGTH, asciiOnly: true },
|
|
84
|
+
];
|
|
85
|
+
function helloRequestFrame(family, nPlusOneLeaf) {
|
|
86
|
+
const leaf = (entry) => valueFor(family, entry, nPlusOneLeaf);
|
|
87
|
+
return {
|
|
88
|
+
jsonrpc: '2.0',
|
|
89
|
+
id: leaf(HELLO_REQUEST_LEAVES[0]),
|
|
90
|
+
method: 'broker.hello',
|
|
91
|
+
params: {
|
|
92
|
+
meta: { deadlineUnixMs: WIRE_UINT53_MAX },
|
|
93
|
+
input: {
|
|
94
|
+
pluginId: leaf(HELLO_REQUEST_LEAVES[1]),
|
|
95
|
+
packageDigest: MAX_PACKAGE_DIGEST,
|
|
96
|
+
contractVersion: semverFor(nPlusOneLeaf, 'contractVersion'),
|
|
97
|
+
wireVersion: semverFor(nPlusOneLeaf, 'wireVersion'),
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function helloResultFrame(family, nPlusOneLeaf) {
|
|
103
|
+
const leaf = (entry) => valueFor(family, entry, nPlusOneLeaf);
|
|
104
|
+
return {
|
|
105
|
+
jsonrpc: '2.0',
|
|
106
|
+
id: leaf(HELLO_RESULT_LEAVES[0]),
|
|
107
|
+
result: {
|
|
108
|
+
pluginId: leaf(HELLO_RESULT_LEAVES[1]),
|
|
109
|
+
packageDigest: MAX_PACKAGE_DIGEST,
|
|
110
|
+
contractVersion: semverFor(nPlusOneLeaf, 'contractVersion'),
|
|
111
|
+
wireVersion: semverFor(nPlusOneLeaf, 'wireVersion'),
|
|
112
|
+
pluginInstanceId: leaf(HELLO_RESULT_LEAVES[4]),
|
|
113
|
+
brokerSessionId: leaf(HELLO_RESULT_LEAVES[5]),
|
|
114
|
+
grantRevision: WIRE_UINT53_MAX,
|
|
115
|
+
effectiveGrants: MAX_EFFECTIVE_GRANTS,
|
|
116
|
+
bindingNonce: leaf(HELLO_RESULT_LEAVES[6]),
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function readyRequestFrame(family, nPlusOneLeaf) {
|
|
121
|
+
const leaf = (entry) => valueFor(family, entry, nPlusOneLeaf);
|
|
122
|
+
return {
|
|
123
|
+
jsonrpc: '2.0',
|
|
124
|
+
id: leaf(READY_REQUEST_LEAVES[0]),
|
|
125
|
+
method: 'broker.ready',
|
|
126
|
+
params: {
|
|
127
|
+
meta: { deadlineUnixMs: WIRE_UINT53_MAX },
|
|
128
|
+
input: { bindingNonce: leaf(READY_REQUEST_LEAVES[1]) },
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function handshakeRejectedFrame(family, nPlusOneLeaf) {
|
|
133
|
+
const requestId = valueFor(family, HANDSHAKE_ERROR_LEAVES[0], nPlusOneLeaf);
|
|
134
|
+
return {
|
|
135
|
+
jsonrpc: '2.0',
|
|
136
|
+
id: requestId,
|
|
137
|
+
error: {
|
|
138
|
+
code: HANDSHAKE_REJECTED_CODE,
|
|
139
|
+
message: HANDSHAKE_REJECTED_MESSAGE,
|
|
140
|
+
data: { reason: MAX_HANDSHAKE_REJECT_REASON },
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/** Raw proof of the largest legal broker.hello request. */
|
|
145
|
+
export const BROKER_HELLO_REQUEST_BYTE_PROOF = measureProof(HELLO_REQUEST_LEAVES, helloRequestFrame);
|
|
146
|
+
/** Raw proof of the largest legal broker.hello success result. */
|
|
147
|
+
export const BROKER_HELLO_RESULT_BYTE_PROOF = measureProof(HELLO_RESULT_LEAVES, helloResultFrame);
|
|
148
|
+
/** Raw proof of the largest legal broker.ready request. */
|
|
149
|
+
export const BROKER_READY_REQUEST_BYTE_PROOF = measureProof(READY_REQUEST_LEAVES, readyRequestFrame);
|
|
150
|
+
/** Raw proof of the largest handshake rejection envelope. */
|
|
151
|
+
export const HANDSHAKE_REJECTED_ERROR_BYTE_PROOF = measureProof(HANDSHAKE_ERROR_LEAVES, handshakeRejectedFrame);
|
|
152
|
+
/** broker.ready succeeds with the exact JSON-RPC result `null`. */
|
|
153
|
+
export const BROKER_READY_MAX_ENCODED_RESULT_BYTES = Buffer.byteLength(JSON.stringify({ jsonrpc: '2.0', id: MAX_REQUEST_ID, result: null }), 'utf8');
|
|
154
|
+
export const BROKER_HELLO_MAX_ENCODED_REQUEST_BYTES = BROKER_HELLO_REQUEST_BYTE_PROOF.maxEncodedBytes;
|
|
155
|
+
export const BROKER_HELLO_MAX_ENCODED_RESULT_BYTES = BROKER_HELLO_RESULT_BYTE_PROOF.maxEncodedBytes;
|
|
156
|
+
export const BROKER_HELLO_MAX_ENCODED_ERROR_BYTES = HANDSHAKE_REJECTED_ERROR_BYTE_PROOF.maxEncodedBytes;
|
|
157
|
+
export const BROKER_READY_MAX_ENCODED_REQUEST_BYTES = BROKER_READY_REQUEST_BYTE_PROOF.maxEncodedBytes;
|
|
158
|
+
export const BROKER_READY_MAX_ENCODED_ERROR_BYTES = HANDSHAKE_REJECTED_ERROR_BYTE_PROOF.maxEncodedBytes;
|
|
159
|
+
/**
|
|
160
|
+
* The exact per-row summary consumed by the registry. No byte value is
|
|
161
|
+
* hand-entered in the registry; all maxima are derived above from the closed
|
|
162
|
+
* grammar and raw UTF-8 serialization.
|
|
163
|
+
*/
|
|
164
|
+
export const HANDSHAKE_ROW_ENCODED_BYTE_BOUNDS = {
|
|
165
|
+
'broker.hello': {
|
|
166
|
+
maxEncodedRequestBytes: BROKER_HELLO_MAX_ENCODED_REQUEST_BYTES,
|
|
167
|
+
maxEncodedResultBytes: BROKER_HELLO_MAX_ENCODED_RESULT_BYTES,
|
|
168
|
+
maxEncodedErrorBytes: BROKER_HELLO_MAX_ENCODED_ERROR_BYTES,
|
|
169
|
+
},
|
|
170
|
+
'broker.ready': {
|
|
171
|
+
maxEncodedRequestBytes: BROKER_READY_MAX_ENCODED_REQUEST_BYTES,
|
|
172
|
+
maxEncodedResultBytes: BROKER_READY_MAX_ENCODED_RESULT_BYTES,
|
|
173
|
+
maxEncodedErrorBytes: BROKER_READY_MAX_ENCODED_ERROR_BYTES,
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=handshake-byte-bounds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handshake-byte-bounds.js","sourceRoot":"","sources":["../../src/wire/handshake-byte-bounds.ts"],"names":[],"mappings":"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"}
|
package/dist/wire/handshake.d.ts
CHANGED
|
@@ -23,6 +23,24 @@ export declare const PACKAGE_DIGEST_PATTERN: RegExp;
|
|
|
23
23
|
* 95 chars (all ASCII) + 2 surrounding quotes = 97 bytes.
|
|
24
24
|
*/
|
|
25
25
|
export declare const PACKAGE_DIGEST_ENCODED_BYTES: 97;
|
|
26
|
+
/** H1 wire pluginId minimum length in Unicode code points. */
|
|
27
|
+
export declare const PLUGIN_ID_MIN_LENGTH: 1;
|
|
28
|
+
/** H1 wire pluginId maximum length in Unicode code points. */
|
|
29
|
+
export declare const PLUGIN_ID_MAX_LENGTH: 256;
|
|
30
|
+
/** Worst compact-JSON encoded bytes for H1 pluginId. */
|
|
31
|
+
export declare const PLUGIN_ID_MAX_ENCODED_BYTES: 1538;
|
|
32
|
+
/** Shared H3/H4 SemVer maximum length (the grammar is ASCII-only). */
|
|
33
|
+
export declare const HANDSHAKE_VERSION_MAX_LENGTH: 256;
|
|
34
|
+
/** Worst compact-JSON encoded bytes for H3/H4 version strings. */
|
|
35
|
+
export declare const HANDSHAKE_VERSION_MAX_ENCODED_BYTES: 258;
|
|
36
|
+
/** Exact SemVer 2.0.0 grammar copied from manifest.schema.json $defs.SemVer. */
|
|
37
|
+
export declare const HANDSHAKE_SEMVER_PATTERN: RegExp;
|
|
38
|
+
/** H5/H6 opaque Host-minted identifier minimum length in code points. */
|
|
39
|
+
export declare const HOST_IDENTIFIER_MIN_LENGTH: 1;
|
|
40
|
+
/** H5/H6 opaque Host-minted identifier maximum length in code points. */
|
|
41
|
+
export declare const HOST_IDENTIFIER_MAX_LENGTH: 512;
|
|
42
|
+
/** Worst compact-JSON encoded bytes for either opaque Host identifier. */
|
|
43
|
+
export declare const HOST_IDENTIFIER_MAX_ENCODED_BYTES: 3074;
|
|
26
44
|
/** Minimum code-point length for bindingNonce. */
|
|
27
45
|
export declare const BINDING_NONCE_MIN_LENGTH: 1;
|
|
28
46
|
/** Maximum code-point length for bindingNonce. */
|
|
@@ -40,13 +58,13 @@ export declare const BINDING_NONCE_MAX_ENCODED_BYTES: 3074;
|
|
|
40
58
|
* Additional identity/instance/grant/session fields are REJECTED.
|
|
41
59
|
*/
|
|
42
60
|
export interface CandidateHello {
|
|
43
|
-
/**
|
|
61
|
+
/** CLOSED (H1) — manifest pluginId, 1..256 Unicode code points. */
|
|
44
62
|
readonly pluginId: string;
|
|
45
63
|
/** CLOSED (H2) — exactly 95 chars, sha512 SRI digest. */
|
|
46
64
|
readonly packageDigest: string;
|
|
47
|
-
/**
|
|
65
|
+
/** CLOSED (H3) — SemVer contract version, at most 256 ASCII characters. */
|
|
48
66
|
readonly contractVersion: string;
|
|
49
|
-
/**
|
|
67
|
+
/** CLOSED (H4) — SemVer wire protocol version, at most 256 ASCII characters. */
|
|
50
68
|
readonly wireVersion: string;
|
|
51
69
|
}
|
|
52
70
|
/**
|
|
@@ -63,9 +81,9 @@ export interface SessionBinding {
|
|
|
63
81
|
readonly contractVersion: string;
|
|
64
82
|
/** Echoed from CandidateHello. */
|
|
65
83
|
readonly wireVersion: string;
|
|
66
|
-
/**
|
|
84
|
+
/** CLOSED (H5) — Host-minted instance id, 1..512 Unicode code points. */
|
|
67
85
|
readonly pluginInstanceId: string;
|
|
68
|
-
/**
|
|
86
|
+
/** CLOSED (H6) — Host-minted session id, 1..512 Unicode code points. */
|
|
69
87
|
readonly brokerSessionId: string;
|
|
70
88
|
/** CLOSED (H7) — WireUInt53(0, 9_007_199_254_740_991), monotonically increasing. */
|
|
71
89
|
readonly grantRevision: number;
|
|
@@ -88,7 +106,17 @@ export interface BrokerReadyParams {
|
|
|
88
106
|
* Validate a string as a conformant sha512 SRI package digest.
|
|
89
107
|
* Checks exact length (95) and pattern match.
|
|
90
108
|
*/
|
|
91
|
-
export declare function validatePackageDigest(value:
|
|
109
|
+
export declare function validatePackageDigest(value: unknown): value is string;
|
|
110
|
+
/** Validate H1's bounded wire representation without narrowing manifest syntax. */
|
|
111
|
+
export declare function validatePluginId(value: unknown): value is string;
|
|
112
|
+
/** Validate H3 contractVersion. Ranges and non-SemVer values are rejected. */
|
|
113
|
+
export declare function validateContractVersion(value: unknown): value is string;
|
|
114
|
+
/** Validate H4 wireVersion. Compatibility negotiation is Host policy, not syntax. */
|
|
115
|
+
export declare function validateWireVersion(value: unknown): value is string;
|
|
116
|
+
/** Validate H5 pluginInstanceId as an opaque Host-minted bounded value. */
|
|
117
|
+
export declare function validatePluginInstanceId(value: unknown): value is string;
|
|
118
|
+
/** Validate H6 brokerSessionId as an opaque Host-minted bounded value. */
|
|
119
|
+
export declare function validateBrokerSessionId(value: unknown): value is string;
|
|
92
120
|
/**
|
|
93
121
|
* Validate a string as a conformant binding nonce.
|
|
94
122
|
* Checks code-point count is within [1, 512].
|
|
@@ -96,5 +124,29 @@ export declare function validatePackageDigest(value: string): boolean;
|
|
|
96
124
|
* Note: uses spread to count code points (not .length, which counts
|
|
97
125
|
* UTF-16 code units and misreports surrogate pairs).
|
|
98
126
|
*/
|
|
99
|
-
export declare function validateBindingNonce(value:
|
|
127
|
+
export declare function validateBindingNonce(value: unknown): value is string;
|
|
128
|
+
/** Runtime key set mirror of the {@link CandidateHello} interface. */
|
|
129
|
+
export declare const CANDIDATE_HELLO_KEYS: Set<string>;
|
|
130
|
+
/** Runtime key set mirror of the {@link SessionBinding} interface. */
|
|
131
|
+
export declare const SESSION_BINDING_KEYS: Set<string>;
|
|
132
|
+
/** Runtime key set mirror of the {@link BrokerReadyParams} interface. */
|
|
133
|
+
export declare const BROKER_READY_PARAMS_KEYS: Set<string>;
|
|
134
|
+
/**
|
|
135
|
+
* Detect caller-supplied fields that belong exclusively to the Host's
|
|
136
|
+
* SessionBinding authority. These are a closed handshake rejection rather
|
|
137
|
+
* than an ordinary grammar error.
|
|
138
|
+
*/
|
|
139
|
+
export declare function hasHandshakeAuthorityInjection(value: unknown): boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Validate the closed plugin-to-Host CandidateHello object. It deliberately
|
|
142
|
+
* validates only grammar: the Host decides whether the candidate is allowed.
|
|
143
|
+
*/
|
|
144
|
+
export declare function validateCandidateHello(value: unknown): value is CandidateHello;
|
|
145
|
+
/**
|
|
146
|
+
* Validate the closed Host-to-plugin SessionBinding object. Candidate echo
|
|
147
|
+
* equality and nonce-use state are peer protocol checks, not schema grammar.
|
|
148
|
+
*/
|
|
149
|
+
export declare function validateSessionBinding(value: unknown): value is SessionBinding;
|
|
150
|
+
/** Validate the closed activation-only broker.ready input object. */
|
|
151
|
+
export declare function validateBrokerReadyParams(value: unknown): value is BrokerReadyParams;
|
|
100
152
|
//# sourceMappingURL=handshake.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../src/wire/handshake.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../src/wire/handshake.ts"],"names":[],"mappings":"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"}
|
package/dist/wire/handshake.js
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
* CandidateHello and BrokerReadyParams REJECT any additional
|
|
11
11
|
* identity/instance/grant/session fields (closed surface).
|
|
12
12
|
*/
|
|
13
|
+
import { validateEffectiveGrants } from './grants.js';
|
|
14
|
+
import { isWireUInt53 } from './wire-uint53.js';
|
|
13
15
|
// ---------------------------------------------------------------------------
|
|
14
16
|
// Package digest constants (CLOSED — H2)
|
|
15
17
|
// ---------------------------------------------------------------------------
|
|
@@ -26,6 +28,27 @@ export const PACKAGE_DIGEST_PATTERN = /^sha512-[A-Za-z0-9+/]{85}[AQgw]==$/;
|
|
|
26
28
|
*/
|
|
27
29
|
export const PACKAGE_DIGEST_ENCODED_BYTES = 97;
|
|
28
30
|
// ---------------------------------------------------------------------------
|
|
31
|
+
// H1/H3/H4/H5/H6 closure bounds
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
/** H1 wire pluginId minimum length in Unicode code points. */
|
|
34
|
+
export const PLUGIN_ID_MIN_LENGTH = 1;
|
|
35
|
+
/** H1 wire pluginId maximum length in Unicode code points. */
|
|
36
|
+
export const PLUGIN_ID_MAX_LENGTH = 256;
|
|
37
|
+
/** Worst compact-JSON encoded bytes for H1 pluginId. */
|
|
38
|
+
export const PLUGIN_ID_MAX_ENCODED_BYTES = 1538;
|
|
39
|
+
/** Shared H3/H4 SemVer maximum length (the grammar is ASCII-only). */
|
|
40
|
+
export const HANDSHAKE_VERSION_MAX_LENGTH = 256;
|
|
41
|
+
/** Worst compact-JSON encoded bytes for H3/H4 version strings. */
|
|
42
|
+
export const HANDSHAKE_VERSION_MAX_ENCODED_BYTES = 258;
|
|
43
|
+
/** Exact SemVer 2.0.0 grammar copied from manifest.schema.json $defs.SemVer. */
|
|
44
|
+
export const HANDSHAKE_SEMVER_PATTERN = /^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-(0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*)(\.(0|[1-9][0-9]*|[0-9]*[A-Za-z-][0-9A-Za-z-]*))*)?(\+[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?$/;
|
|
45
|
+
/** H5/H6 opaque Host-minted identifier minimum length in code points. */
|
|
46
|
+
export const HOST_IDENTIFIER_MIN_LENGTH = 1;
|
|
47
|
+
/** H5/H6 opaque Host-minted identifier maximum length in code points. */
|
|
48
|
+
export const HOST_IDENTIFIER_MAX_LENGTH = 512;
|
|
49
|
+
/** Worst compact-JSON encoded bytes for either opaque Host identifier. */
|
|
50
|
+
export const HOST_IDENTIFIER_MAX_ENCODED_BYTES = 3074;
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
29
52
|
// Binding nonce bounds (CLOSED — H9)
|
|
30
53
|
// ---------------------------------------------------------------------------
|
|
31
54
|
/** Minimum code-point length for bindingNonce. */
|
|
@@ -45,10 +68,46 @@ export const BINDING_NONCE_MAX_ENCODED_BYTES = 3074;
|
|
|
45
68
|
* Checks exact length (95) and pattern match.
|
|
46
69
|
*/
|
|
47
70
|
export function validatePackageDigest(value) {
|
|
48
|
-
if (value.length !== PACKAGE_DIGEST_LENGTH)
|
|
71
|
+
if (typeof value !== 'string' || value.length !== PACKAGE_DIGEST_LENGTH)
|
|
49
72
|
return false;
|
|
50
73
|
return PACKAGE_DIGEST_PATTERN.test(value);
|
|
51
74
|
}
|
|
75
|
+
/** Test a string's code-point length using the established H9 convention. */
|
|
76
|
+
function hasCodePointLength(value, min, max) {
|
|
77
|
+
if (typeof value !== 'string' || value.length === 0)
|
|
78
|
+
return false;
|
|
79
|
+
if (value.length <= max)
|
|
80
|
+
return value.length >= min;
|
|
81
|
+
const codePointCount = [...value].length;
|
|
82
|
+
return codePointCount >= min && codePointCount <= max;
|
|
83
|
+
}
|
|
84
|
+
/** Validate H1's bounded wire representation without narrowing manifest syntax. */
|
|
85
|
+
export function validatePluginId(value) {
|
|
86
|
+
return hasCodePointLength(value, PLUGIN_ID_MIN_LENGTH, PLUGIN_ID_MAX_LENGTH);
|
|
87
|
+
}
|
|
88
|
+
/** Validate an exact, bounded SemVer candidate used by H3 and H4. */
|
|
89
|
+
function validateHandshakeVersion(value) {
|
|
90
|
+
return (typeof value === 'string' &&
|
|
91
|
+
value.length >= 1 &&
|
|
92
|
+
value.length <= HANDSHAKE_VERSION_MAX_LENGTH &&
|
|
93
|
+
HANDSHAKE_SEMVER_PATTERN.test(value));
|
|
94
|
+
}
|
|
95
|
+
/** Validate H3 contractVersion. Ranges and non-SemVer values are rejected. */
|
|
96
|
+
export function validateContractVersion(value) {
|
|
97
|
+
return validateHandshakeVersion(value);
|
|
98
|
+
}
|
|
99
|
+
/** Validate H4 wireVersion. Compatibility negotiation is Host policy, not syntax. */
|
|
100
|
+
export function validateWireVersion(value) {
|
|
101
|
+
return validateHandshakeVersion(value);
|
|
102
|
+
}
|
|
103
|
+
/** Validate H5 pluginInstanceId as an opaque Host-minted bounded value. */
|
|
104
|
+
export function validatePluginInstanceId(value) {
|
|
105
|
+
return hasCodePointLength(value, HOST_IDENTIFIER_MIN_LENGTH, HOST_IDENTIFIER_MAX_LENGTH);
|
|
106
|
+
}
|
|
107
|
+
/** Validate H6 brokerSessionId as an opaque Host-minted bounded value. */
|
|
108
|
+
export function validateBrokerSessionId(value) {
|
|
109
|
+
return hasCodePointLength(value, HOST_IDENTIFIER_MIN_LENGTH, HOST_IDENTIFIER_MAX_LENGTH);
|
|
110
|
+
}
|
|
52
111
|
/**
|
|
53
112
|
* Validate a string as a conformant binding nonce.
|
|
54
113
|
* Checks code-point count is within [1, 512].
|
|
@@ -57,14 +116,77 @@ export function validatePackageDigest(value) {
|
|
|
57
116
|
* UTF-16 code units and misreports surrogate pairs).
|
|
58
117
|
*/
|
|
59
118
|
export function validateBindingNonce(value) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
119
|
+
return hasCodePointLength(value, BINDING_NONCE_MIN_LENGTH, BINDING_NONCE_MAX_LENGTH);
|
|
120
|
+
}
|
|
121
|
+
/** Runtime key set mirror of the {@link CandidateHello} interface. */
|
|
122
|
+
export const CANDIDATE_HELLO_KEYS = new Set([
|
|
123
|
+
'pluginId', 'packageDigest', 'contractVersion', 'wireVersion',
|
|
124
|
+
]);
|
|
125
|
+
/** Runtime key set mirror of the {@link SessionBinding} interface. */
|
|
126
|
+
export const SESSION_BINDING_KEYS = new Set([
|
|
127
|
+
'pluginId', 'packageDigest', 'contractVersion', 'wireVersion',
|
|
128
|
+
'pluginInstanceId', 'brokerSessionId', 'grantRevision', 'effectiveGrants',
|
|
129
|
+
'bindingNonce',
|
|
130
|
+
]);
|
|
131
|
+
/** Runtime key set mirror of the {@link BrokerReadyParams} interface. */
|
|
132
|
+
export const BROKER_READY_PARAMS_KEYS = new Set(['bindingNonce']);
|
|
133
|
+
const HANDSHAKE_AUTHORITY_KEYS = new Set([
|
|
134
|
+
'pluginInstanceId',
|
|
135
|
+
'brokerSessionId',
|
|
136
|
+
'grantRevision',
|
|
137
|
+
'effectiveGrants',
|
|
138
|
+
]);
|
|
139
|
+
function isRecord(value) {
|
|
140
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Detect caller-supplied fields that belong exclusively to the Host's
|
|
144
|
+
* SessionBinding authority. These are a closed handshake rejection rather
|
|
145
|
+
* than an ordinary grammar error.
|
|
146
|
+
*/
|
|
147
|
+
export function hasHandshakeAuthorityInjection(value) {
|
|
148
|
+
return isRecord(value) && Object.keys(value).some(key => HANDSHAKE_AUTHORITY_KEYS.has(key));
|
|
149
|
+
}
|
|
150
|
+
function hasExactKeys(value, expected) {
|
|
151
|
+
const keys = Object.keys(value);
|
|
152
|
+
return keys.length === expected.size && keys.every(key => expected.has(key));
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Validate the closed plugin-to-Host CandidateHello object. It deliberately
|
|
156
|
+
* validates only grammar: the Host decides whether the candidate is allowed.
|
|
157
|
+
*/
|
|
158
|
+
export function validateCandidateHello(value) {
|
|
159
|
+
return (isRecord(value) &&
|
|
160
|
+
hasExactKeys(value, CANDIDATE_HELLO_KEYS) &&
|
|
161
|
+
validatePluginId(value.pluginId) &&
|
|
162
|
+
validatePackageDigest(value.packageDigest) &&
|
|
163
|
+
validateContractVersion(value.contractVersion) &&
|
|
164
|
+
validateWireVersion(value.wireVersion));
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Validate the closed Host-to-plugin SessionBinding object. Candidate echo
|
|
168
|
+
* equality and nonce-use state are peer protocol checks, not schema grammar.
|
|
169
|
+
*/
|
|
170
|
+
export function validateSessionBinding(value) {
|
|
171
|
+
return (isRecord(value) &&
|
|
172
|
+
hasExactKeys(value, SESSION_BINDING_KEYS) &&
|
|
173
|
+
validatePluginId(value.pluginId) &&
|
|
174
|
+
validatePackageDigest(value.packageDigest) &&
|
|
175
|
+
validateContractVersion(value.contractVersion) &&
|
|
176
|
+
validateWireVersion(value.wireVersion) &&
|
|
177
|
+
validatePluginInstanceId(value.pluginInstanceId) &&
|
|
178
|
+
validateBrokerSessionId(value.brokerSessionId) &&
|
|
179
|
+
typeof value.grantRevision === 'number' &&
|
|
180
|
+
isWireUInt53(value.grantRevision) &&
|
|
181
|
+
Array.isArray(value.effectiveGrants) &&
|
|
182
|
+
value.effectiveGrants.every(grant => typeof grant === 'string') &&
|
|
183
|
+
validateEffectiveGrants(value.effectiveGrants) &&
|
|
184
|
+
validateBindingNonce(value.bindingNonce));
|
|
185
|
+
}
|
|
186
|
+
/** Validate the closed activation-only broker.ready input object. */
|
|
187
|
+
export function validateBrokerReadyParams(value) {
|
|
188
|
+
return (isRecord(value) &&
|
|
189
|
+
hasExactKeys(value, BROKER_READY_PARAMS_KEYS) &&
|
|
190
|
+
validateBindingNonce(value.bindingNonce));
|
|
69
191
|
}
|
|
70
192
|
//# sourceMappingURL=handshake.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handshake.js","sourceRoot":"","sources":["../../src/wire/handshake.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"handshake.js","sourceRoot":"","sources":["../../src/wire/handshake.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E,qDAAqD;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAW,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,oCAAoC,CAAC;AAE3E;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAW,CAAC;AAExD,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,8DAA8D;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAU,CAAC;AAE/C,8DAA8D;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAY,CAAC;AAEjD,wDAAwD;AACxD,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAa,CAAC;AAEzD,sEAAsE;AACtE,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAY,CAAC;AAEzD,kEAAkE;AAClE,MAAM,CAAC,MAAM,mCAAmC,GAAG,GAAY,CAAC;AAEhE,gFAAgF;AAChF,MAAM,CAAC,MAAM,wBAAwB,GAAG,0LAA0L,CAAC;AAEnO,yEAAyE;AACzE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAU,CAAC;AAErD,yEAAyE;AACzE,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAY,CAAC;AAEvD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,iCAAiC,GAAG,IAAa,CAAC;AAE/D,8EAA8E;AAC9E,qCAAqC;AACrC,8EAA8E;AAE9E,kDAAkD;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAU,CAAC;AAEnD,kDAAkD;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAY,CAAC;AAErD;;;GAGG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAa,CAAC;AAqE7D,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,qBAAqB;QAAE,OAAO,KAAK,CAAC;IACtF,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,6EAA6E;AAC7E,SAAS,kBAAkB,CAAC,KAAc,EAAE,GAAW,EAAE,GAAW;IAClE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;IACpD,MAAM,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,cAAc,IAAI,GAAG,IAAI,cAAc,IAAI,GAAG,CAAC;AACxD,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,kBAAkB,CAAC,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;AAC/E,CAAC;AAED,qEAAqE;AACrE,SAAS,wBAAwB,CAAC,KAAc;IAC9C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,MAAM,IAAI,CAAC;QACjB,KAAK,CAAC,MAAM,IAAI,4BAA4B;QAC5C,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CACrC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,OAAO,kBAAkB,CAAC,KAAK,EAAE,0BAA0B,EAAE,0BAA0B,CAAC,CAAC;AAC3F,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,kBAAkB,CAAC,KAAK,EAAE,0BAA0B,EAAE,0BAA0B,CAAC,CAAC;AAC3F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,kBAAkB,CAAC,KAAK,EAAE,wBAAwB,EAAE,wBAAwB,CAAC,CAAC;AACvF,CAAC;AAQD,sEAAsE;AACtE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IAC1C,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa;CAC9D,CAAC,CAAC;AACH,sEAAsE;AACtE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IAC1C,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAAa;IAC7D,kBAAkB,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB;IACzE,cAAc;CACf,CAAC,CAAC;AACH,yEAAyE;AACzE,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;AAClE,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,kBAAkB;IAClB,iBAAiB;IACjB,eAAe;IACf,iBAAiB;CAClB,CAAC,CAAC;AAEH,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,KAAc;IAC3D,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,YAAY,CAAC,KAAoB,EAAE,QAA6B;IACvE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,YAAY,CAAC,KAAK,EAAE,oBAAoB,CAAC;QACzC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC;QAChC,qBAAqB,CAAC,KAAK,CAAC,aAAa,CAAC;QAC1C,uBAAuB,CAAC,KAAK,CAAC,eAAe,CAAC;QAC9C,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC,CACvC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,YAAY,CAAC,KAAK,EAAE,oBAAoB,CAAC;QACzC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC;QAChC,qBAAqB,CAAC,KAAK,CAAC,aAAa,CAAC;QAC1C,uBAAuB,CAAC,KAAK,CAAC,eAAe,CAAC;QAC9C,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC;QACtC,wBAAwB,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAChD,uBAAuB,CAAC,KAAK,CAAC,eAAe,CAAC;QAC9C,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ;QACvC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;QACjC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC;QACpC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;QAC/D,uBAAuB,CAAC,KAAK,CAAC,eAAe,CAAC;QAC9C,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CACzC,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,YAAY,CAAC,KAAK,EAAE,wBAAwB,CAAC;QAC7C,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CACzC,CAAC;AACJ,CAAC"}
|