@clowder-ai/plugin-contract 0.1.0-beta.1 → 0.1.0-beta.10
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 +5 -0
- package/dist/codegen/generate-contract.d.ts.map +1 -1
- package/dist/codegen/generate-contract.js +45 -4
- package/dist/codegen/generate-contract.js.map +1 -1
- package/dist/conformance/behavior-executor.d.ts +18 -0
- package/dist/conformance/behavior-executor.d.ts.map +1 -0
- package/dist/conformance/behavior-executor.js +52 -0
- package/dist/conformance/behavior-executor.js.map +1 -0
- package/dist/conformance/fixtures.d.ts +9 -0
- package/dist/conformance/fixtures.d.ts.map +1 -0
- package/dist/conformance/fixtures.js +8 -0
- package/dist/conformance/fixtures.js.map +1 -0
- package/dist/conformance/index.d.ts +5 -0
- package/dist/conformance/index.d.ts.map +1 -1
- package/dist/conformance/index.js +4 -0
- package/dist/conformance/index.js.map +1 -1
- package/dist/conformance/messaging-loopback-adapter.d.ts +23 -0
- package/dist/conformance/messaging-loopback-adapter.d.ts.map +1 -0
- package/dist/conformance/messaging-loopback-adapter.js +389 -0
- package/dist/conformance/messaging-loopback-adapter.js.map +1 -0
- package/dist/conformance/messaging-loopback-state.d.ts +22 -0
- package/dist/conformance/messaging-loopback-state.d.ts.map +1 -0
- package/dist/conformance/messaging-loopback-state.js +101 -0
- package/dist/conformance/messaging-loopback-state.js.map +1 -0
- package/dist/conformance/runner.d.ts +18 -1
- package/dist/conformance/runner.d.ts.map +1 -1
- package/dist/conformance/runner.js +153 -66
- package/dist/conformance/runner.js.map +1 -1
- package/dist/conformance/stdio-harness/child-process-harness.d.ts +65 -0
- package/dist/conformance/stdio-harness/child-process-harness.d.ts.map +1 -0
- package/dist/conformance/stdio-harness/child-process-harness.js +296 -0
- package/dist/conformance/stdio-harness/child-process-harness.js.map +1 -0
- package/dist/conformance/stdio-harness/dual-transport-oracle.d.ts +26 -0
- package/dist/conformance/stdio-harness/dual-transport-oracle.d.ts.map +1 -0
- package/dist/conformance/stdio-harness/dual-transport-oracle.js +32 -0
- package/dist/conformance/stdio-harness/dual-transport-oracle.js.map +1 -0
- package/dist/conformance/stdio-harness/harness-process-spawn.d.ts +27 -0
- package/dist/conformance/stdio-harness/harness-process-spawn.d.ts.map +1 -0
- package/dist/conformance/stdio-harness/harness-process-spawn.js +43 -0
- package/dist/conformance/stdio-harness/harness-process-spawn.js.map +1 -0
- package/dist/conformance/stdio-harness/index.d.ts +5 -0
- package/dist/conformance/stdio-harness/index.d.ts.map +1 -0
- package/dist/conformance/stdio-harness/index.js +4 -0
- package/dist/conformance/stdio-harness/index.js.map +1 -0
- package/dist/conformance/stdio-harness/ndjson-frame.d.ts +31 -0
- package/dist/conformance/stdio-harness/ndjson-frame.d.ts.map +1 -0
- package/dist/conformance/stdio-harness/ndjson-frame.js +125 -0
- package/dist/conformance/stdio-harness/ndjson-frame.js.map +1 -0
- package/dist/conformance/stdio-harness/node-process-tree-runtime.d.ts +15 -0
- package/dist/conformance/stdio-harness/node-process-tree-runtime.d.ts.map +1 -0
- package/dist/conformance/stdio-harness/node-process-tree-runtime.js +78 -0
- package/dist/conformance/stdio-harness/node-process-tree-runtime.js.map +1 -0
- package/dist/conformance/stdio-harness/process-tree-controller.d.ts +51 -0
- package/dist/conformance/stdio-harness/process-tree-controller.d.ts.map +1 -0
- package/dist/conformance/stdio-harness/process-tree-controller.js +162 -0
- package/dist/conformance/stdio-harness/process-tree-controller.js.map +1 -0
- package/dist/conformance/stdio-harness/windows-sentinel.d.ts +15 -0
- package/dist/conformance/stdio-harness/windows-sentinel.d.ts.map +1 -0
- package/dist/conformance/stdio-harness/windows-sentinel.js +160 -0
- package/dist/conformance/stdio-harness/windows-sentinel.js.map +1 -0
- package/dist/conformance/stdio-harness/wire-shape.d.ts +18 -0
- package/dist/conformance/stdio-harness/wire-shape.d.ts.map +1 -0
- package/dist/conformance/stdio-harness/wire-shape.js +2 -0
- package/dist/conformance/stdio-harness/wire-shape.js.map +1 -0
- package/dist/generated/contract.generated.d.ts +305 -1
- package/dist/generated/contract.generated.d.ts.map +1 -1
- package/dist/generated/contract.generated.js +1 -1
- package/dist/generated/contract.generated.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/validation/index.d.ts +2 -0
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +2 -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 +53 -0
- package/dist/validation/manifest.js.map +1 -0
- package/dist/validation/signals.d.ts +26 -0
- package/dist/validation/signals.d.ts.map +1 -0
- package/dist/validation/signals.js +206 -0
- package/dist/validation/signals.js.map +1 -0
- package/dist/wire/constants.d.ts +36 -0
- package/dist/wire/constants.d.ts.map +1 -0
- package/dist/wire/constants.js +36 -0
- package/dist/wire/constants.js.map +1 -0
- package/dist/wire/disposition-fixtures.d.ts +110 -0
- package/dist/wire/disposition-fixtures.d.ts.map +1 -0
- package/dist/wire/disposition-fixtures.js +1462 -0
- package/dist/wire/disposition-fixtures.js.map +1 -0
- package/dist/wire/disposition.d.ts +102 -0
- package/dist/wire/disposition.d.ts.map +1 -0
- package/dist/wire/disposition.js +217 -0
- package/dist/wire/disposition.js.map +1 -0
- package/dist/wire/envelope.d.ts +253 -0
- package/dist/wire/envelope.d.ts.map +1 -0
- package/dist/wire/envelope.js +19 -0
- package/dist/wire/envelope.js.map +1 -0
- package/dist/wire/errors.d.ts +222 -0
- package/dist/wire/errors.d.ts.map +1 -0
- package/dist/wire/errors.js +153 -0
- package/dist/wire/errors.js.map +1 -0
- package/dist/wire/grants.d.ts +57 -0
- package/dist/wire/grants.d.ts.map +1 -0
- package/dist/wire/grants.js +59 -0
- package/dist/wire/grants.js.map +1 -0
- 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 +173 -0
- package/dist/wire/handshake-byte-bounds.js.map +1 -0
- package/dist/wire/handshake.d.ts +146 -0
- package/dist/wire/handshake.d.ts.map +1 -0
- package/dist/wire/handshake.js +189 -0
- package/dist/wire/handshake.js.map +1 -0
- package/dist/wire/index.d.ts +35 -0
- package/dist/wire/index.d.ts.map +1 -0
- package/dist/wire/index.js +53 -0
- package/dist/wire/index.js.map +1 -0
- package/dist/wire/lifecycle-byte-bounds.d.ts +55 -0
- package/dist/wire/lifecycle-byte-bounds.d.ts.map +1 -0
- package/dist/wire/lifecycle-byte-bounds.js +209 -0
- package/dist/wire/lifecycle-byte-bounds.js.map +1 -0
- package/dist/wire/registry.d.ts +283 -0
- package/dist/wire/registry.d.ts.map +1 -0
- package/dist/wire/registry.js +258 -0
- package/dist/wire/registry.js.map +1 -0
- package/dist/wire/request-id.d.ts +34 -0
- package/dist/wire/request-id.d.ts.map +1 -0
- package/dist/wire/request-id.js +40 -0
- package/dist/wire/request-id.js.map +1 -0
- package/dist/wire/row-shapes.d.ts +212 -0
- package/dist/wire/row-shapes.d.ts.map +1 -0
- package/dist/wire/row-shapes.js +59 -0
- package/dist/wire/row-shapes.js.map +1 -0
- package/dist/wire/signal-byte-bounds.d.ts +97 -0
- package/dist/wire/signal-byte-bounds.d.ts.map +1 -0
- package/dist/wire/signal-byte-bounds.js +229 -0
- package/dist/wire/signal-byte-bounds.js.map +1 -0
- package/dist/wire/wire-uint53.d.ts +26 -0
- package/dist/wire/wire-uint53.d.ts.map +1 -0
- package/dist/wire/wire-uint53.js +32 -0
- package/dist/wire/wire-uint53.js.map +1 -0
- package/fixtures/behavior/messaging/adversarial-invariants.json +56 -5
- package/fixtures/manifest/invalid/duplicate-signal-type.json +33 -0
- package/fixtures/signals/invalid/destination-injection.json +15 -0
- package/fixtures/signals/invalid/dynamic-schema-url.json +10 -0
- package/fixtures/signals/invalid/forbidden-raw-privacy.json +10 -0
- package/fixtures/signals/invalid/non-utc-occurred-at.json +12 -0
- package/fixtures/signals/valid/feishu-meeting-artifact.json +18 -0
- package/fixtures/signals/valid/remote-service-declaration.json +10 -0
- package/package.json +13 -5
- package/src/schemas/manifest.schema.json +5 -2
- package/src/schemas/messaging.schema.json +1 -0
- package/src/schemas/physical-limb.schema.json +319 -0
- package/src/schemas/signal.schema.json +129 -0
|
@@ -0,0 +1,173 @@
|
|
|
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 { 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
|
+
const MAX_EFFECTIVE_GRANTS = [...VALID_CAPABILITIES];
|
|
30
|
+
const MAX_HANDSHAKE_REJECT_REASON = HANDSHAKE_REJECT_REASONS.reduce((longest, value) => (value.length > longest.length ? value : longest));
|
|
31
|
+
function valueFor(family, leaf, nPlusOneLeaf) {
|
|
32
|
+
const codePoint = leaf.asciiOnly ? FAMILY_CODE_POINT.ascii : FAMILY_CODE_POINT[family];
|
|
33
|
+
return codePoint.repeat(leaf.maxCodePoints + Number(leaf.id === nPlusOneLeaf));
|
|
34
|
+
}
|
|
35
|
+
function semverFor(nPlusOneLeaf, leaf) {
|
|
36
|
+
return `0.0.0-${'a'.repeat(HANDSHAKE_VERSION_MAX_LENGTH - 6 + Number(nPlusOneLeaf === leaf))}`;
|
|
37
|
+
}
|
|
38
|
+
function measureProof(leaves, frameFor) {
|
|
39
|
+
const cases = HANDSHAKE_BYTE_PROOF_ENCODING_FAMILIES.map((family) => {
|
|
40
|
+
const encodedBytes = Buffer.byteLength(JSON.stringify(frameFor(family)), 'utf8');
|
|
41
|
+
return {
|
|
42
|
+
family,
|
|
43
|
+
encodedBytes,
|
|
44
|
+
fitsFrame: encodedBytes <= MAX_FRAME_BYTES,
|
|
45
|
+
nPlusOne: leaves.map((leaf) => {
|
|
46
|
+
const nPlusOneBytes = Buffer.byteLength(JSON.stringify(frameFor(family, leaf.id)), 'utf8');
|
|
47
|
+
return {
|
|
48
|
+
leaf: leaf.id,
|
|
49
|
+
encodedBytes: nPlusOneBytes,
|
|
50
|
+
fitsFrame: nPlusOneBytes <= MAX_FRAME_BYTES,
|
|
51
|
+
};
|
|
52
|
+
}),
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
return {
|
|
56
|
+
maxEncodedBytes: Math.max(...cases.map(({ encodedBytes }) => encodedBytes)),
|
|
57
|
+
cases,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const HELLO_REQUEST_LEAVES = [
|
|
61
|
+
{ id: 'requestId', maxCodePoints: REQUEST_ID_MAX_LENGTH, asciiOnly: true },
|
|
62
|
+
{ id: 'pluginId', maxCodePoints: PLUGIN_ID_MAX_LENGTH },
|
|
63
|
+
{ id: 'contractVersion', maxCodePoints: HANDSHAKE_VERSION_MAX_LENGTH, asciiOnly: true },
|
|
64
|
+
{ id: 'wireVersion', maxCodePoints: HANDSHAKE_VERSION_MAX_LENGTH, asciiOnly: true },
|
|
65
|
+
];
|
|
66
|
+
const HELLO_RESULT_LEAVES = [
|
|
67
|
+
{ id: 'requestId', maxCodePoints: REQUEST_ID_MAX_LENGTH, asciiOnly: true },
|
|
68
|
+
{ id: 'pluginId', maxCodePoints: PLUGIN_ID_MAX_LENGTH },
|
|
69
|
+
{ id: 'contractVersion', maxCodePoints: HANDSHAKE_VERSION_MAX_LENGTH, asciiOnly: true },
|
|
70
|
+
{ id: 'wireVersion', maxCodePoints: HANDSHAKE_VERSION_MAX_LENGTH, asciiOnly: true },
|
|
71
|
+
{ id: 'pluginInstanceId', maxCodePoints: HOST_IDENTIFIER_MAX_LENGTH },
|
|
72
|
+
{ id: 'brokerSessionId', maxCodePoints: HOST_IDENTIFIER_MAX_LENGTH },
|
|
73
|
+
{ id: 'bindingNonce', maxCodePoints: BINDING_NONCE_MAX_LENGTH },
|
|
74
|
+
];
|
|
75
|
+
const READY_REQUEST_LEAVES = [
|
|
76
|
+
{ id: 'requestId', maxCodePoints: REQUEST_ID_MAX_LENGTH, asciiOnly: true },
|
|
77
|
+
{ id: 'bindingNonce', maxCodePoints: BINDING_NONCE_MAX_LENGTH },
|
|
78
|
+
];
|
|
79
|
+
const HANDSHAKE_ERROR_LEAVES = [
|
|
80
|
+
{ id: 'requestId', maxCodePoints: REQUEST_ID_MAX_LENGTH, asciiOnly: true },
|
|
81
|
+
];
|
|
82
|
+
function helloRequestFrame(family, nPlusOneLeaf) {
|
|
83
|
+
const leaf = (entry) => valueFor(family, entry, nPlusOneLeaf);
|
|
84
|
+
return {
|
|
85
|
+
jsonrpc: '2.0',
|
|
86
|
+
id: leaf(HELLO_REQUEST_LEAVES[0]),
|
|
87
|
+
method: 'broker.hello',
|
|
88
|
+
params: {
|
|
89
|
+
meta: { deadlineUnixMs: WIRE_UINT53_MAX },
|
|
90
|
+
input: {
|
|
91
|
+
pluginId: leaf(HELLO_REQUEST_LEAVES[1]),
|
|
92
|
+
packageDigest: MAX_PACKAGE_DIGEST,
|
|
93
|
+
contractVersion: semverFor(nPlusOneLeaf, 'contractVersion'),
|
|
94
|
+
wireVersion: semverFor(nPlusOneLeaf, 'wireVersion'),
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function helloResultFrame(family, nPlusOneLeaf) {
|
|
100
|
+
const leaf = (entry) => valueFor(family, entry, nPlusOneLeaf);
|
|
101
|
+
return {
|
|
102
|
+
jsonrpc: '2.0',
|
|
103
|
+
id: leaf(HELLO_RESULT_LEAVES[0]),
|
|
104
|
+
result: {
|
|
105
|
+
pluginId: leaf(HELLO_RESULT_LEAVES[1]),
|
|
106
|
+
packageDigest: MAX_PACKAGE_DIGEST,
|
|
107
|
+
contractVersion: semverFor(nPlusOneLeaf, 'contractVersion'),
|
|
108
|
+
wireVersion: semverFor(nPlusOneLeaf, 'wireVersion'),
|
|
109
|
+
pluginInstanceId: leaf(HELLO_RESULT_LEAVES[4]),
|
|
110
|
+
brokerSessionId: leaf(HELLO_RESULT_LEAVES[5]),
|
|
111
|
+
grantRevision: WIRE_UINT53_MAX,
|
|
112
|
+
effectiveGrants: MAX_EFFECTIVE_GRANTS,
|
|
113
|
+
bindingNonce: leaf(HELLO_RESULT_LEAVES[6]),
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function readyRequestFrame(family, nPlusOneLeaf) {
|
|
118
|
+
const leaf = (entry) => valueFor(family, entry, nPlusOneLeaf);
|
|
119
|
+
return {
|
|
120
|
+
jsonrpc: '2.0',
|
|
121
|
+
id: leaf(READY_REQUEST_LEAVES[0]),
|
|
122
|
+
method: 'broker.ready',
|
|
123
|
+
params: {
|
|
124
|
+
meta: { deadlineUnixMs: WIRE_UINT53_MAX },
|
|
125
|
+
input: { bindingNonce: leaf(READY_REQUEST_LEAVES[1]) },
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function handshakeRejectedFrame(family, nPlusOneLeaf) {
|
|
130
|
+
const requestId = valueFor(family, HANDSHAKE_ERROR_LEAVES[0], nPlusOneLeaf);
|
|
131
|
+
return {
|
|
132
|
+
jsonrpc: '2.0',
|
|
133
|
+
id: requestId,
|
|
134
|
+
error: {
|
|
135
|
+
code: HANDSHAKE_REJECTED_CODE,
|
|
136
|
+
message: HANDSHAKE_REJECTED_MESSAGE,
|
|
137
|
+
data: { reason: MAX_HANDSHAKE_REJECT_REASON },
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/** Raw proof of the largest legal broker.hello request. */
|
|
142
|
+
export const BROKER_HELLO_REQUEST_BYTE_PROOF = measureProof(HELLO_REQUEST_LEAVES, helloRequestFrame);
|
|
143
|
+
/** Raw proof of the largest legal broker.hello success result. */
|
|
144
|
+
export const BROKER_HELLO_RESULT_BYTE_PROOF = measureProof(HELLO_RESULT_LEAVES, helloResultFrame);
|
|
145
|
+
/** Raw proof of the largest legal broker.ready request. */
|
|
146
|
+
export const BROKER_READY_REQUEST_BYTE_PROOF = measureProof(READY_REQUEST_LEAVES, readyRequestFrame);
|
|
147
|
+
/** Raw proof of the largest handshake rejection envelope. */
|
|
148
|
+
export const HANDSHAKE_REJECTED_ERROR_BYTE_PROOF = measureProof(HANDSHAKE_ERROR_LEAVES, handshakeRejectedFrame);
|
|
149
|
+
/** broker.ready succeeds with the exact JSON-RPC result `null`. */
|
|
150
|
+
export const BROKER_READY_MAX_ENCODED_RESULT_BYTES = Buffer.byteLength(JSON.stringify({ jsonrpc: '2.0', id: MAX_REQUEST_ID, result: null }), 'utf8');
|
|
151
|
+
export const BROKER_HELLO_MAX_ENCODED_REQUEST_BYTES = BROKER_HELLO_REQUEST_BYTE_PROOF.maxEncodedBytes;
|
|
152
|
+
export const BROKER_HELLO_MAX_ENCODED_RESULT_BYTES = BROKER_HELLO_RESULT_BYTE_PROOF.maxEncodedBytes;
|
|
153
|
+
export const BROKER_HELLO_MAX_ENCODED_ERROR_BYTES = HANDSHAKE_REJECTED_ERROR_BYTE_PROOF.maxEncodedBytes;
|
|
154
|
+
export const BROKER_READY_MAX_ENCODED_REQUEST_BYTES = BROKER_READY_REQUEST_BYTE_PROOF.maxEncodedBytes;
|
|
155
|
+
export const BROKER_READY_MAX_ENCODED_ERROR_BYTES = HANDSHAKE_REJECTED_ERROR_BYTE_PROOF.maxEncodedBytes;
|
|
156
|
+
/**
|
|
157
|
+
* The exact per-row summary consumed by the registry. No byte value is
|
|
158
|
+
* hand-entered in the registry; all maxima are derived above from the closed
|
|
159
|
+
* grammar and raw UTF-8 serialization.
|
|
160
|
+
*/
|
|
161
|
+
export const HANDSHAKE_ROW_ENCODED_BYTE_BOUNDS = {
|
|
162
|
+
'broker.hello': {
|
|
163
|
+
maxEncodedRequestBytes: BROKER_HELLO_MAX_ENCODED_REQUEST_BYTES,
|
|
164
|
+
maxEncodedResultBytes: BROKER_HELLO_MAX_ENCODED_RESULT_BYTES,
|
|
165
|
+
maxEncodedErrorBytes: BROKER_HELLO_MAX_ENCODED_ERROR_BYTES,
|
|
166
|
+
},
|
|
167
|
+
'broker.ready': {
|
|
168
|
+
maxEncodedRequestBytes: BROKER_READY_MAX_ENCODED_REQUEST_BYTES,
|
|
169
|
+
maxEncodedResultBytes: BROKER_READY_MAX_ENCODED_RESULT_BYTES,
|
|
170
|
+
maxEncodedErrorBytes: BROKER_READY_MAX_ENCODED_ERROR_BYTES,
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
//# 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":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,8DAA8D;AAC9D,MAAM,CAAC,MAAM,sCAAsC,GAAG;IACpD,OAAO;IACP,WAAW;IACX,UAAU;CACF,CAAC;AAuCX,MAAM,iBAAiB,GAAqD;IAC1E,KAAK,EAAE,GAAG;IACV,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,QAAQ;CACnB,CAAC;AAEF,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;AACzD,MAAM,kBAAkB,GAAG,UAAU,GAAG,CAAC,MAAM,CAAC,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC;AAC/E,MAAM,oBAAoB,GAAG,CAAC,GAAG,kBAAkB,CAAC,CAAC;AACrD,MAAM,2BAA2B,GAAG,wBAAwB,CAAC,MAAM,CACjE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CACtE,CAAC;AAEF,SAAS,QAAQ,CACf,MAAwC,EACxC,IAAiB,EACjB,YAAqB;IAErB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACvF,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,SAAS,CAAC,YAAqB,EAAE,IAAwC;IAChF,OAAO,SAAS,GAAG,CAAC,MAAM,CACxB,4BAA4B,GAAG,CAAC,GAAG,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC,CACjE,EAAE,CAAC;AACN,CAAC;AAED,SAAS,YAAY,CACnB,MAA8B,EAC9B,QAGW;IAEX,MAAM,KAAK,GAAG,sCAAsC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAClE,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACjF,OAAO;YACL,MAAM;YACN,YAAY;YACZ,SAAS,EAAE,YAAY,IAAI,eAAe;YAC1C,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC5B,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CACrC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EACzC,MAAM,CACP,CAAC;gBACF,OAAO;oBACL,IAAI,EAAE,IAAI,CAAC,EAAE;oBACb,YAAY,EAAE,aAAa;oBAC3B,SAAS,EAAE,aAAa,IAAI,eAAe;iBAC5C,CAAC;YACJ,CAAC,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC;QAC3E,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,oBAAoB,GAAG;IAC3B,EAAE,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,EAAE,SAAS,EAAE,IAAI,EAAE;IAC1E,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,oBAAoB,EAAE;IACvD,EAAE,EAAE,EAAE,iBAAiB,EAAE,aAAa,EAAE,4BAA4B,EAAE,SAAS,EAAE,IAAI,EAAE;IACvF,EAAE,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,4BAA4B,EAAE,SAAS,EAAE,IAAI,EAAE;CAC3E,CAAC;AAEX,MAAM,mBAAmB,GAAG;IAC1B,EAAE,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,EAAE,SAAS,EAAE,IAAI,EAAE;IAC1E,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,oBAAoB,EAAE;IACvD,EAAE,EAAE,EAAE,iBAAiB,EAAE,aAAa,EAAE,4BAA4B,EAAE,SAAS,EAAE,IAAI,EAAE;IACvF,EAAE,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,4BAA4B,EAAE,SAAS,EAAE,IAAI,EAAE;IACnF,EAAE,EAAE,EAAE,kBAAkB,EAAE,aAAa,EAAE,0BAA0B,EAAE;IACrE,EAAE,EAAE,EAAE,iBAAiB,EAAE,aAAa,EAAE,0BAA0B,EAAE;IACpE,EAAE,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE,wBAAwB,EAAE;CACvD,CAAC;AAEX,MAAM,oBAAoB,GAAG;IAC3B,EAAE,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,EAAE,SAAS,EAAE,IAAI,EAAE;IAC1E,EAAE,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE,wBAAwB,EAAE;CACvD,CAAC;AAEX,MAAM,sBAAsB,GAAG;IAC7B,EAAE,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,EAAE,SAAS,EAAE,IAAI,EAAE;CAClE,CAAC;AAEX,SAAS,iBAAiB,CACxB,MAAwC,EACxC,YAAqB;IAErB,MAAM,IAAI,GAAG,CAAC,KAA4C,EAAE,EAAE,CAC5D,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IACxC,OAAO;QACL,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE;YACN,IAAI,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE;YACzC,KAAK,EAAE;gBACL,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;gBACvC,aAAa,EAAE,kBAAkB;gBACjC,eAAe,EAAE,SAAS,CAAC,YAAY,EAAE,iBAAiB,CAAC;gBAC3D,WAAW,EAAE,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC;aACpD;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,MAAwC,EACxC,YAAqB;IAErB,MAAM,IAAI,GAAG,CAAC,KAA2C,EAAE,EAAE,CAC3D,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IACxC,OAAO;QACL,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,EAAE;YACN,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACtC,aAAa,EAAE,kBAAkB;YACjC,eAAe,EAAE,SAAS,CAAC,YAAY,EAAE,iBAAiB,CAAC;YAC3D,WAAW,EAAE,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC;YACnD,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAC9C,eAAe,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;YAC7C,aAAa,EAAE,eAAe;YAC9B,eAAe,EAAE,oBAAoB;YACrC,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;SAC3C;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,MAAwC,EACxC,YAAqB;IAErB,MAAM,IAAI,GAAG,CAAC,KAA4C,EAAE,EAAE,CAC5D,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IACxC,OAAO;QACL,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE;YACN,IAAI,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE;YACzC,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE;SACvD;KACF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAAwC,EACxC,YAAqB;IAErB,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC5E,OAAO;QACL,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,SAAS;QACb,KAAK,EAAE;YACL,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,0BAA0B;YACnC,IAAI,EAAE,EAAE,MAAM,EAAE,2BAA2B,EAAE;SAC9C;KACF,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,MAAM,+BAA+B,GAAG,YAAY,CACzD,oBAAoB,EACpB,iBAAiB,CAClB,CAAC;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,8BAA8B,GAAG,YAAY,CACxD,mBAAmB,EACnB,gBAAgB,CACjB,CAAC;AAEF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,+BAA+B,GAAG,YAAY,CACzD,oBAAoB,EACpB,iBAAiB,CAClB,CAAC;AAEF,6DAA6D;AAC7D,MAAM,CAAC,MAAM,mCAAmC,GAAG,YAAY,CAC7D,sBAAsB,EACtB,sBAAsB,CACvB,CAAC;AAEF,mEAAmE;AACnE,MAAM,CAAC,MAAM,qCAAqC,GAAG,MAAM,CAAC,UAAU,CACpE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EACpE,MAAM,CACP,CAAC;AAEF,MAAM,CAAC,MAAM,sCAAsC,GACjD,+BAA+B,CAAC,eAAe,CAAC;AAClD,MAAM,CAAC,MAAM,qCAAqC,GAChD,8BAA8B,CAAC,eAAe,CAAC;AACjD,MAAM,CAAC,MAAM,oCAAoC,GAC/C,mCAAmC,CAAC,eAAe,CAAC;AACtD,MAAM,CAAC,MAAM,sCAAsC,GACjD,+BAA+B,CAAC,eAAe,CAAC;AAClD,MAAM,CAAC,MAAM,oCAAoC,GAC/C,mCAAmC,CAAC,eAAe,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC/C,cAAc,EAAE;QACd,sBAAsB,EAAE,sCAAsC;QAC9D,qBAAqB,EAAE,qCAAqC;QAC5D,oBAAoB,EAAE,oCAAoC;KAC3D;IACD,cAAc,EAAE;QACd,sBAAsB,EAAE,sCAAsC;QAC9D,qBAAqB,EAAE,qCAAqC;QAC5D,oBAAoB,EAAE,oCAAoC;KAC3D;CACwF,CAAC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handshake types — CandidateHello, SessionBinding, BrokerReadyParams.
|
|
3
|
+
* Mechanized verbatim from #1165 frozen shape.
|
|
4
|
+
*
|
|
5
|
+
* Handshake flow:
|
|
6
|
+
* 1. Plugin sends CandidateHello (candidate claims only, no grants/session).
|
|
7
|
+
* 2. Host validates, mints instance/session ids, replies with SessionBinding.
|
|
8
|
+
* 3. Plugin sends broker.ready with the bindingNonce to activate.
|
|
9
|
+
*
|
|
10
|
+
* CandidateHello and BrokerReadyParams REJECT any additional
|
|
11
|
+
* identity/instance/grant/session fields (closed surface).
|
|
12
|
+
*/
|
|
13
|
+
import type { Capability } from '../generated/contract.generated.js';
|
|
14
|
+
/** Exact character length of a sha512 SRI digest. */
|
|
15
|
+
export declare const PACKAGE_DIGEST_LENGTH: 95;
|
|
16
|
+
/**
|
|
17
|
+
* Pattern for a valid sha512 SRI package digest.
|
|
18
|
+
* 85 base64 chars + one of [AQgw] + '==' suffix.
|
|
19
|
+
*/
|
|
20
|
+
export declare const PACKAGE_DIGEST_PATTERN: RegExp;
|
|
21
|
+
/**
|
|
22
|
+
* Compact-JSON encoded byte count for the digest string.
|
|
23
|
+
* 95 chars (all ASCII) + 2 surrounding quotes = 97 bytes.
|
|
24
|
+
*/
|
|
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;
|
|
44
|
+
/** Minimum code-point length for bindingNonce. */
|
|
45
|
+
export declare const BINDING_NONCE_MIN_LENGTH: 1;
|
|
46
|
+
/** Maximum code-point length for bindingNonce. */
|
|
47
|
+
export declare const BINDING_NONCE_MAX_LENGTH: 512;
|
|
48
|
+
/**
|
|
49
|
+
* Maximum compact-JSON encoded bytes for bindingNonce.
|
|
50
|
+
* Worst case: every code point is a 6-byte escape (\uXXXX) → 6 * 512 + 2 quotes.
|
|
51
|
+
*/
|
|
52
|
+
export declare const BINDING_NONCE_MAX_ENCODED_BYTES: 3074;
|
|
53
|
+
/**
|
|
54
|
+
* CandidateHello is sent by the plugin at connection open.
|
|
55
|
+
* It carries only the plugin's candidate claims; no instance ids,
|
|
56
|
+
* grant state, or session identifiers may appear.
|
|
57
|
+
*
|
|
58
|
+
* Additional identity/instance/grant/session fields are REJECTED.
|
|
59
|
+
*/
|
|
60
|
+
export interface CandidateHello {
|
|
61
|
+
/** CLOSED (H1) — manifest pluginId, 1..256 Unicode code points. */
|
|
62
|
+
readonly pluginId: string;
|
|
63
|
+
/** CLOSED (H2) — exactly 95 chars, sha512 SRI digest. */
|
|
64
|
+
readonly packageDigest: string;
|
|
65
|
+
/** CLOSED (H3) — SemVer contract version, at most 256 ASCII characters. */
|
|
66
|
+
readonly contractVersion: string;
|
|
67
|
+
/** CLOSED (H4) — SemVer wire protocol version, at most 256 ASCII characters. */
|
|
68
|
+
readonly wireVersion: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* SessionBinding is the Host's authoritative response to CandidateHello.
|
|
72
|
+
* It echoes the four hello fields, then adds Host-minted identifiers
|
|
73
|
+
* and the effective grant snapshot.
|
|
74
|
+
*/
|
|
75
|
+
export interface SessionBinding {
|
|
76
|
+
/** Echoed from CandidateHello. */
|
|
77
|
+
readonly pluginId: string;
|
|
78
|
+
/** Echoed from CandidateHello. */
|
|
79
|
+
readonly packageDigest: string;
|
|
80
|
+
/** Echoed from CandidateHello. */
|
|
81
|
+
readonly contractVersion: string;
|
|
82
|
+
/** Echoed from CandidateHello. */
|
|
83
|
+
readonly wireVersion: string;
|
|
84
|
+
/** CLOSED (H5) — Host-minted instance id, 1..512 Unicode code points. */
|
|
85
|
+
readonly pluginInstanceId: string;
|
|
86
|
+
/** CLOSED (H6) — Host-minted session id, 1..512 Unicode code points. */
|
|
87
|
+
readonly brokerSessionId: string;
|
|
88
|
+
/** CLOSED (H7) — WireUInt53(0, 9_007_199_254_740_991), monotonically increasing. */
|
|
89
|
+
readonly grantRevision: number;
|
|
90
|
+
/** CLOSED (H8) — unique Capability[], 0..17 items. */
|
|
91
|
+
readonly effectiveGrants: readonly Capability[];
|
|
92
|
+
/** CLOSED (H9) — opaque nonce, 1..512 code points. */
|
|
93
|
+
readonly bindingNonce: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* BrokerReadyParams is the params object for the broker.ready request.
|
|
97
|
+
* It carries only bindingNonce for activation; it is NOT a resume carrier.
|
|
98
|
+
*
|
|
99
|
+
* Additional identity/instance/grant/session fields are REJECTED.
|
|
100
|
+
*/
|
|
101
|
+
export interface BrokerReadyParams {
|
|
102
|
+
/** CLOSED (H9) — activation-only; echoes the nonce from SessionBinding. */
|
|
103
|
+
readonly bindingNonce: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Validate a string as a conformant sha512 SRI package digest.
|
|
107
|
+
* Checks exact length (95) and pattern match.
|
|
108
|
+
*/
|
|
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;
|
|
120
|
+
/**
|
|
121
|
+
* Validate a string as a conformant binding nonce.
|
|
122
|
+
* Checks code-point count is within [1, 512].
|
|
123
|
+
*
|
|
124
|
+
* Note: uses spread to count code points (not .length, which counts
|
|
125
|
+
* UTF-16 code units and misreports surrogate pairs).
|
|
126
|
+
*/
|
|
127
|
+
export declare function validateBindingNonce(value: unknown): value is string;
|
|
128
|
+
/**
|
|
129
|
+
* Detect caller-supplied fields that belong exclusively to the Host's
|
|
130
|
+
* SessionBinding authority. These are a closed handshake rejection rather
|
|
131
|
+
* than an ordinary grammar error.
|
|
132
|
+
*/
|
|
133
|
+
export declare function hasHandshakeAuthorityInjection(value: unknown): boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Validate the closed plugin-to-Host CandidateHello object. It deliberately
|
|
136
|
+
* validates only grammar: the Host decides whether the candidate is allowed.
|
|
137
|
+
*/
|
|
138
|
+
export declare function validateCandidateHello(value: unknown): value is CandidateHello;
|
|
139
|
+
/**
|
|
140
|
+
* Validate the closed Host-to-plugin SessionBinding object. Candidate echo
|
|
141
|
+
* equality and nonce-use state are peer protocol checks, not schema grammar.
|
|
142
|
+
*/
|
|
143
|
+
export declare function validateSessionBinding(value: unknown): value is SessionBinding;
|
|
144
|
+
/** Validate the closed activation-only broker.ready input object. */
|
|
145
|
+
export declare function validateBrokerReadyParams(value: unknown): value is BrokerReadyParams;
|
|
146
|
+
//# sourceMappingURL=handshake.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../src/wire/handshake.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handshake types — CandidateHello, SessionBinding, BrokerReadyParams.
|
|
3
|
+
* Mechanized verbatim from #1165 frozen shape.
|
|
4
|
+
*
|
|
5
|
+
* Handshake flow:
|
|
6
|
+
* 1. Plugin sends CandidateHello (candidate claims only, no grants/session).
|
|
7
|
+
* 2. Host validates, mints instance/session ids, replies with SessionBinding.
|
|
8
|
+
* 3. Plugin sends broker.ready with the bindingNonce to activate.
|
|
9
|
+
*
|
|
10
|
+
* CandidateHello and BrokerReadyParams REJECT any additional
|
|
11
|
+
* identity/instance/grant/session fields (closed surface).
|
|
12
|
+
*/
|
|
13
|
+
import { validateEffectiveGrants } from './grants.js';
|
|
14
|
+
import { isWireUInt53 } from './wire-uint53.js';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Package digest constants (CLOSED — H2)
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/** Exact character length of a sha512 SRI digest. */
|
|
19
|
+
export const PACKAGE_DIGEST_LENGTH = 95;
|
|
20
|
+
/**
|
|
21
|
+
* Pattern for a valid sha512 SRI package digest.
|
|
22
|
+
* 85 base64 chars + one of [AQgw] + '==' suffix.
|
|
23
|
+
*/
|
|
24
|
+
export const PACKAGE_DIGEST_PATTERN = /^sha512-[A-Za-z0-9+/]{85}[AQgw]==$/;
|
|
25
|
+
/**
|
|
26
|
+
* Compact-JSON encoded byte count for the digest string.
|
|
27
|
+
* 95 chars (all ASCII) + 2 surrounding quotes = 97 bytes.
|
|
28
|
+
*/
|
|
29
|
+
export const PACKAGE_DIGEST_ENCODED_BYTES = 97;
|
|
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
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
// Binding nonce bounds (CLOSED — H9)
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
/** Minimum code-point length for bindingNonce. */
|
|
55
|
+
export const BINDING_NONCE_MIN_LENGTH = 1;
|
|
56
|
+
/** Maximum code-point length for bindingNonce. */
|
|
57
|
+
export const BINDING_NONCE_MAX_LENGTH = 512;
|
|
58
|
+
/**
|
|
59
|
+
* Maximum compact-JSON encoded bytes for bindingNonce.
|
|
60
|
+
* Worst case: every code point is a 6-byte escape (\uXXXX) → 6 * 512 + 2 quotes.
|
|
61
|
+
*/
|
|
62
|
+
export const BINDING_NONCE_MAX_ENCODED_BYTES = 3074;
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// Validators
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
/**
|
|
67
|
+
* Validate a string as a conformant sha512 SRI package digest.
|
|
68
|
+
* Checks exact length (95) and pattern match.
|
|
69
|
+
*/
|
|
70
|
+
export function validatePackageDigest(value) {
|
|
71
|
+
if (typeof value !== 'string' || value.length !== PACKAGE_DIGEST_LENGTH)
|
|
72
|
+
return false;
|
|
73
|
+
return PACKAGE_DIGEST_PATTERN.test(value);
|
|
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
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Validate a string as a conformant binding nonce.
|
|
113
|
+
* Checks code-point count is within [1, 512].
|
|
114
|
+
*
|
|
115
|
+
* Note: uses spread to count code points (not .length, which counts
|
|
116
|
+
* UTF-16 code units and misreports surrogate pairs).
|
|
117
|
+
*/
|
|
118
|
+
export function validateBindingNonce(value) {
|
|
119
|
+
return hasCodePointLength(value, BINDING_NONCE_MIN_LENGTH, BINDING_NONCE_MAX_LENGTH);
|
|
120
|
+
}
|
|
121
|
+
const CANDIDATE_HELLO_KEYS = new Set([
|
|
122
|
+
'pluginId', 'packageDigest', 'contractVersion', 'wireVersion',
|
|
123
|
+
]);
|
|
124
|
+
const SESSION_BINDING_KEYS = new Set([
|
|
125
|
+
'pluginId', 'packageDigest', 'contractVersion', 'wireVersion',
|
|
126
|
+
'pluginInstanceId', 'brokerSessionId', 'grantRevision', 'effectiveGrants',
|
|
127
|
+
'bindingNonce',
|
|
128
|
+
]);
|
|
129
|
+
const BROKER_READY_PARAMS_KEYS = new Set(['bindingNonce']);
|
|
130
|
+
const HANDSHAKE_AUTHORITY_KEYS = new Set([
|
|
131
|
+
'pluginInstanceId',
|
|
132
|
+
'brokerSessionId',
|
|
133
|
+
'grantRevision',
|
|
134
|
+
'effectiveGrants',
|
|
135
|
+
]);
|
|
136
|
+
function isRecord(value) {
|
|
137
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Detect caller-supplied fields that belong exclusively to the Host's
|
|
141
|
+
* SessionBinding authority. These are a closed handshake rejection rather
|
|
142
|
+
* than an ordinary grammar error.
|
|
143
|
+
*/
|
|
144
|
+
export function hasHandshakeAuthorityInjection(value) {
|
|
145
|
+
return isRecord(value) && Object.keys(value).some(key => HANDSHAKE_AUTHORITY_KEYS.has(key));
|
|
146
|
+
}
|
|
147
|
+
function hasExactKeys(value, expected) {
|
|
148
|
+
const keys = Object.keys(value);
|
|
149
|
+
return keys.length === expected.size && keys.every(key => expected.has(key));
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Validate the closed plugin-to-Host CandidateHello object. It deliberately
|
|
153
|
+
* validates only grammar: the Host decides whether the candidate is allowed.
|
|
154
|
+
*/
|
|
155
|
+
export function validateCandidateHello(value) {
|
|
156
|
+
return (isRecord(value) &&
|
|
157
|
+
hasExactKeys(value, CANDIDATE_HELLO_KEYS) &&
|
|
158
|
+
validatePluginId(value.pluginId) &&
|
|
159
|
+
validatePackageDigest(value.packageDigest) &&
|
|
160
|
+
validateContractVersion(value.contractVersion) &&
|
|
161
|
+
validateWireVersion(value.wireVersion));
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Validate the closed Host-to-plugin SessionBinding object. Candidate echo
|
|
165
|
+
* equality and nonce-use state are peer protocol checks, not schema grammar.
|
|
166
|
+
*/
|
|
167
|
+
export function validateSessionBinding(value) {
|
|
168
|
+
return (isRecord(value) &&
|
|
169
|
+
hasExactKeys(value, SESSION_BINDING_KEYS) &&
|
|
170
|
+
validatePluginId(value.pluginId) &&
|
|
171
|
+
validatePackageDigest(value.packageDigest) &&
|
|
172
|
+
validateContractVersion(value.contractVersion) &&
|
|
173
|
+
validateWireVersion(value.wireVersion) &&
|
|
174
|
+
validatePluginInstanceId(value.pluginInstanceId) &&
|
|
175
|
+
validateBrokerSessionId(value.brokerSessionId) &&
|
|
176
|
+
typeof value.grantRevision === 'number' &&
|
|
177
|
+
isWireUInt53(value.grantRevision) &&
|
|
178
|
+
Array.isArray(value.effectiveGrants) &&
|
|
179
|
+
value.effectiveGrants.every(grant => typeof grant === 'string') &&
|
|
180
|
+
validateEffectiveGrants(value.effectiveGrants) &&
|
|
181
|
+
validateBindingNonce(value.bindingNonce));
|
|
182
|
+
}
|
|
183
|
+
/** Validate the closed activation-only broker.ready input object. */
|
|
184
|
+
export function validateBrokerReadyParams(value) {
|
|
185
|
+
return (isRecord(value) &&
|
|
186
|
+
hasExactKeys(value, BROKER_READY_PARAMS_KEYS) &&
|
|
187
|
+
validateBindingNonce(value.bindingNonce));
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=handshake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handshake.js","sourceRoot":"","sources":["../../src/wire/handshake.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire protocol module barrel export.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports all wire-protocol types, constants, validators, and registry
|
|
5
|
+
* entries mechanized from the #1165 frozen shape (rev11).
|
|
6
|
+
*
|
|
7
|
+
* This module defines nothing new — it is a pure re-export surface.
|
|
8
|
+
*/
|
|
9
|
+
export { MAX_FRAME_BYTES, WIRE_VERSION, CONTRACT_VERSION, JSONRPC_VERSION, MAX_ELEMENT_PAYLOAD_BYTES, MAX_TOTAL_PAYLOAD_BYTES, MAX_ELEMENTS_PER_OPERATION, MAX_ELEMENTS_PER_MESSAGE, MAX_WHISPER_TARGETS, } from './constants.js';
|
|
10
|
+
export type { RequestId } from './request-id.js';
|
|
11
|
+
export { REQUEST_ID_PATTERN, REQUEST_ID_MIN_LENGTH, REQUEST_ID_MAX_LENGTH, REQUEST_ID_MIN_ENCODED_BYTES, REQUEST_ID_MAX_ENCODED_BYTES, validateRequestId, isRequestIdShaped, } from './request-id.js';
|
|
12
|
+
export { WIRE_UINT53_MAX, WIRE_UINT53_RAW_PATTERN, WIRE_UINT53_MAX_RAW_LENGTH, isWireUInt53, isCanonicalUInt53Token, } from './wire-uint53.js';
|
|
13
|
+
export { HANDSHAKE_REJECTED_CODE, DELIVERY_REJECTED_CODE, DOMAIN_ERROR_CODE, DEADLINE_EXPIRED_CODE, SNAPSHOT_UNAVAILABLE_CODE, HANDSHAKE_REJECTED_MESSAGE, DELIVERY_REJECTED_MESSAGE, DOMAIN_ERROR_MESSAGE, DEADLINE_EXPIRED_MESSAGE, SNAPSHOT_UNAVAILABLE_MESSAGE, PARSE_ERROR_CODE, INVALID_REQUEST_CODE, METHOD_NOT_FOUND_CODE, INVALID_PARAMS_CODE, INTERNAL_ERROR_CODE, PARSE_ERROR_MESSAGE, INVALID_REQUEST_MESSAGE, METHOD_NOT_FOUND_MESSAGE, INVALID_PARAMS_MESSAGE, INTERNAL_ERROR_MESSAGE, ERROR_CODE_TO_MESSAGE, HANDSHAKE_REJECT_REASONS, DELIVERY_REJECT_REASONS, SNAPSHOT_UNAVAILABLE_REASONS, APPLICATION_ERROR_CODES, STANDARD_ERROR_CODES, ALL_ERROR_CODES, } from './errors.js';
|
|
14
|
+
export type { HandshakeRejectReason, DeliveryRejectReason, SnapshotUnavailableReason, MessagingErrorCode, HandshakeRejectedError, DeliveryRejectedError, DomainError, DeadlineExpiredError, SnapshotUnavailableError, ApplicationWireError, ParseError, InvalidRequestError, MethodNotFoundError, InvalidParamsError, InternalError, StandardWireError, WireError, } from './errors.js';
|
|
15
|
+
export { DISPOSITION_CLASSES, DISPOSITION_TABLE, CLOSE_CLASSES, RESPOND_CLASSES, ACCEPT_CLASSES, } from './disposition.js';
|
|
16
|
+
export { DISPOSITION_FIXTURE_VECTORS, BETA8_HANDSHAKE_VECTOR_IDS, BETA9_EVENTS_PUBLISH_VECTOR_IDS, BETA10_LIFECYCLE_VECTOR_IDS, CLOSED_ERROR_ARM_NAMES, RESPONSE_CANDIDATE_CASES, NOTIFICATION_PARTITION_CASES, } from './disposition-fixtures.js';
|
|
17
|
+
export type { ClosedErrorArmName, RequestSnapshot, InFlightRecord, FixturePreState, DispositionFixtureVector, PartitionCase, } from './disposition-fixtures.js';
|
|
18
|
+
export type { DispositionClass, DispositionOutcome, DispositionEntry, } from './disposition.js';
|
|
19
|
+
export { PACKAGE_DIGEST_LENGTH, PACKAGE_DIGEST_PATTERN, PACKAGE_DIGEST_ENCODED_BYTES, PLUGIN_ID_MIN_LENGTH, PLUGIN_ID_MAX_LENGTH, PLUGIN_ID_MAX_ENCODED_BYTES, HANDSHAKE_VERSION_MAX_LENGTH, HANDSHAKE_VERSION_MAX_ENCODED_BYTES, HANDSHAKE_SEMVER_PATTERN, HOST_IDENTIFIER_MIN_LENGTH, HOST_IDENTIFIER_MAX_LENGTH, HOST_IDENTIFIER_MAX_ENCODED_BYTES, BINDING_NONCE_MIN_LENGTH, BINDING_NONCE_MAX_LENGTH, BINDING_NONCE_MAX_ENCODED_BYTES, validatePackageDigest, validatePluginId, validateContractVersion, validateWireVersion, validatePluginInstanceId, validateBrokerSessionId, validateBindingNonce, hasHandshakeAuthorityInjection, validateCandidateHello, validateSessionBinding, validateBrokerReadyParams, } from './handshake.js';
|
|
20
|
+
export type { CandidateHello, SessionBinding, BrokerReadyParams, } from './handshake.js';
|
|
21
|
+
export { HANDSHAKE_BYTE_PROOF_ENCODING_FAMILIES, BROKER_HELLO_REQUEST_BYTE_PROOF, BROKER_HELLO_RESULT_BYTE_PROOF, BROKER_READY_REQUEST_BYTE_PROOF, HANDSHAKE_REJECTED_ERROR_BYTE_PROOF, BROKER_HELLO_MAX_ENCODED_REQUEST_BYTES, BROKER_HELLO_MAX_ENCODED_RESULT_BYTES, BROKER_HELLO_MAX_ENCODED_ERROR_BYTES, BROKER_READY_MAX_ENCODED_REQUEST_BYTES, BROKER_READY_MAX_ENCODED_RESULT_BYTES, BROKER_READY_MAX_ENCODED_ERROR_BYTES, HANDSHAKE_ROW_ENCODED_BYTE_BOUNDS, } from './handshake-byte-bounds.js';
|
|
22
|
+
export { EVENTS_PUBLISH_BYTE_PROOF_ENCODING_FAMILIES, SIGNAL_TYPE_MAX_LENGTH, SIGNAL_EVENT_ID_MAX_LENGTH, SIGNAL_IDEMPOTENCY_KEY_MAX_LENGTH, SIGNAL_OCCURRED_AT_MAX_LENGTH, SIGNAL_SOURCE_HANDLE_MAX_LENGTH, EVENTS_PUBLISH_REQUEST_BYTE_PROOF, EVENTS_PUBLISH_RESULT_BYTE_PROOF, EVENTS_PUBLISH_ERROR_BYTE_PROOF, EVENTS_PUBLISH_ROW_ENCODED_BYTE_BOUNDS, } from './signal-byte-bounds.js';
|
|
23
|
+
export { LIFECYCLE_BYTE_PROOF_ENCODING_FAMILIES, HOST_GRANTS_CHANGED_NOTIFICATION_BYTE_PROOF, HOST_LIFECYCLE_PING_REQUEST_BYTE_PROOF, HOST_LIFECYCLE_PING_RESULT_BYTE_PROOF, HOST_LIFECYCLE_PING_ERROR_BYTE_PROOF, HOST_LIFECYCLE_DRAIN_REQUEST_BYTE_PROOF, HOST_LIFECYCLE_DRAIN_RESULT_BYTE_PROOF, HOST_LIFECYCLE_DRAIN_ERROR_BYTE_PROOF, LIFECYCLE_ROW_ENCODED_BYTE_BOUNDS, } from './lifecycle-byte-bounds.js';
|
|
24
|
+
export type { LifecycleByteProofEncodingFamily, LifecycleNPlusOneByteProof, LifecycleEncodedByteProofCase, LifecycleEncodedByteProof, LifecycleRequestRowEncodedByteBounds, LifecycleNotificationRowEncodedByteBounds, } from './lifecycle-byte-bounds.js';
|
|
25
|
+
export type { EventsPublishByteProofEncodingFamily, EventsPublishNPlusOneWitness, EventsPublishEncodedByteProofCase, EventsPublishEncodedByteProof, EventsPublishRowEncodedByteBounds, } from './signal-byte-bounds.js';
|
|
26
|
+
export type { HandshakeByteProofEncodingFamily, HandshakeNPlusOneByteProof, HandshakeEncodedByteProofCase, HandshakeEncodedByteProof, HandshakeRowEncodedByteBounds, } from './handshake-byte-bounds.js';
|
|
27
|
+
export { MAX_GRANT_ITEMS, validateEffectiveGrants, VALID_CAPABILITIES, } from './grants.js';
|
|
28
|
+
export type { GrantSnapshot } from './grants.js';
|
|
29
|
+
export type { CallMeta, WireSuccessResponse, HandshakeRejectedEnvelope, DeliveryRejectedEnvelope, DomainErrorEnvelope, DeadlineExpiredEnvelope, SnapshotUnavailableEnvelope, ParseErrorEnvelope, InvalidRequestNullIdEnvelope, InvalidRequestValidIdEnvelope, MethodNotFoundEnvelope, InvalidParamsEnvelope, InternalErrorEnvelope, ClosedWireErrorResponse, WireErrorResponse, WireResponse, } from './envelope.js';
|
|
30
|
+
export { WIRE_METHOD_NAMES, WIRE_METHOD_REGISTRY, WIRE_METHOD_COUNT, PLUGIN_TO_HOST_METHODS, HOST_TO_PLUGIN_METHODS, NOTIFICATION_METHODS, CLOSED_LEAF_ROWS, RESERVED_LEAF_ROWS, READY_ROWS, getRegistryRow, isWireMethod, getMethodGrant, } from './registry.js';
|
|
31
|
+
export type { MethodDirection, GrantRequirement, LeafClosureStatus, RegistryRow, ReadyRegistryRow, UnreadyRegistryRow, WireMethodRegistry, WireMethodName, } from './registry.js';
|
|
32
|
+
export type { HelloInput, HelloResult, ReadyInput, ReadyResult, SubscribeInput, SubscribeResult, MessagingAckRequest, MessagingAckResult, GrantsChangedInput, PingInput, PingResult, DrainInput, DrainResult, SendInput, SendResult, AppendInput, AppendResult, ReadInput, ReadResult, SnapshotInput, SnapshotResult, DeliverInput, DeliverResult, } from './row-shapes.js';
|
|
33
|
+
export type { EventsPublishInput, EventsPublishResult, } from '../generated/contract.generated.js';
|
|
34
|
+
export { SUBSCRIBE_HANDLE_MIN_LENGTH, SUBSCRIBE_HANDLE_MAX_LENGTH, SUBSCRIBE_HANDLE_MAX_ENCODED_BYTES, SUBSCRIBE_SUBSCRIPTION_ID_MIN_LENGTH, SUBSCRIBE_SUBSCRIPTION_ID_MAX_LENGTH, SUBSCRIBE_SUBSCRIPTION_ID_MAX_ENCODED_BYTES, ACK_SUBSCRIPTION_ID_MIN_LENGTH, ACK_SUBSCRIPTION_ID_MAX_LENGTH, ACK_SUBSCRIPTION_ID_MAX_ENCODED_BYTES, ACK_TOKEN_MIN_LENGTH, ACK_TOKEN_MAX_LENGTH, ACK_TOKEN_MAX_ENCODED_BYTES, PING_NONCE_MIN_LENGTH, PING_NONCE_MAX_LENGTH, PING_NONCE_MAX_ENCODED_BYTES, } from './row-shapes.js';
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wire/index.ts"],"names":[],"mappings":"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"}
|