@clowder-ai/plugin-contract 0.1.0-beta.7 → 0.1.0-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/codegen/generate-contract.d.ts +1 -0
  2. package/dist/codegen/generate-contract.d.ts.map +1 -1
  3. package/dist/codegen/generate-contract.js +8 -1
  4. package/dist/codegen/generate-contract.js.map +1 -1
  5. package/dist/conformance/fixtures.d.ts +9 -0
  6. package/dist/conformance/fixtures.d.ts.map +1 -0
  7. package/dist/conformance/fixtures.js +8 -0
  8. package/dist/conformance/fixtures.js.map +1 -0
  9. package/dist/conformance/index.d.ts +2 -0
  10. package/dist/conformance/index.d.ts.map +1 -1
  11. package/dist/conformance/index.js +1 -0
  12. package/dist/conformance/index.js.map +1 -1
  13. package/dist/conformance/runner.d.ts.map +1 -1
  14. package/dist/conformance/runner.js +20 -2
  15. package/dist/conformance/runner.js.map +1 -1
  16. package/dist/conformance/stdio-harness/wire-shape.d.ts +1 -1
  17. package/dist/generated/contract.generated.d.ts +38 -1
  18. package/dist/generated/contract.generated.d.ts.map +1 -1
  19. package/dist/generated/contract.generated.js +1 -1
  20. package/dist/generated/contract.generated.js.map +1 -1
  21. package/dist/index.d.ts +2 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +2 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/validation/index.d.ts +1 -0
  26. package/dist/validation/index.d.ts.map +1 -1
  27. package/dist/validation/index.js +1 -0
  28. package/dist/validation/index.js.map +1 -1
  29. package/dist/validation/manifest.d.ts.map +1 -1
  30. package/dist/validation/manifest.js +21 -1
  31. package/dist/validation/manifest.js.map +1 -1
  32. package/dist/validation/signals.d.ts +26 -0
  33. package/dist/validation/signals.d.ts.map +1 -0
  34. package/dist/validation/signals.js +206 -0
  35. package/dist/validation/signals.js.map +1 -0
  36. package/dist/wire/disposition-fixtures.d.ts +11 -2
  37. package/dist/wire/disposition-fixtures.d.ts.map +1 -1
  38. package/dist/wire/disposition-fixtures.js +510 -4
  39. package/dist/wire/disposition-fixtures.js.map +1 -1
  40. package/dist/wire/disposition.d.ts +10 -8
  41. package/dist/wire/disposition.d.ts.map +1 -1
  42. package/dist/wire/disposition.js +20 -8
  43. package/dist/wire/disposition.js.map +1 -1
  44. package/dist/wire/handshake-byte-bounds.d.ts +69 -0
  45. package/dist/wire/handshake-byte-bounds.d.ts.map +1 -0
  46. package/dist/wire/handshake-byte-bounds.js +173 -0
  47. package/dist/wire/handshake-byte-bounds.js.map +1 -0
  48. package/dist/wire/handshake.d.ts +53 -7
  49. package/dist/wire/handshake.d.ts.map +1 -1
  50. package/dist/wire/handshake.js +129 -10
  51. package/dist/wire/handshake.js.map +1 -1
  52. package/dist/wire/index.d.ts +11 -4
  53. package/dist/wire/index.d.ts.map +1 -1
  54. package/dist/wire/index.js +9 -3
  55. package/dist/wire/index.js.map +1 -1
  56. package/dist/wire/registry.d.ts +190 -12
  57. package/dist/wire/registry.d.ts.map +1 -1
  58. package/dist/wire/registry.js +31 -15
  59. package/dist/wire/registry.js.map +1 -1
  60. package/dist/wire/row-shapes.d.ts +12 -12
  61. package/dist/wire/row-shapes.d.ts.map +1 -1
  62. package/dist/wire/row-shapes.js +3 -3
  63. package/dist/wire/row-shapes.js.map +1 -1
  64. package/dist/wire/signal-byte-bounds.d.ts +97 -0
  65. package/dist/wire/signal-byte-bounds.d.ts.map +1 -0
  66. package/dist/wire/signal-byte-bounds.js +229 -0
  67. package/dist/wire/signal-byte-bounds.js.map +1 -0
  68. package/fixtures/manifest/invalid/duplicate-signal-type.json +33 -0
  69. package/fixtures/signals/invalid/destination-injection.json +15 -0
  70. package/fixtures/signals/invalid/dynamic-schema-url.json +10 -0
  71. package/fixtures/signals/invalid/forbidden-raw-privacy.json +10 -0
  72. package/fixtures/signals/invalid/non-utc-occurred-at.json +12 -0
  73. package/fixtures/signals/valid/feishu-meeting-artifact.json +18 -0
  74. package/fixtures/signals/valid/remote-service-declaration.json +10 -0
  75. package/package.json +2 -1
  76. package/src/schemas/manifest.schema.json +5 -2
  77. package/src/schemas/signal.schema.json +129 -0
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/validation/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,OAAO,GAGO,OAAO,CAAC,eAAe,CAAC,CAAC;AAC7C,MAAM,UAAU,GAA+B,OAAO,CAAC,aAAa,CAAC,CAAC;AACtE,MAAM,cAAc,GAAG,OAAO,CAAC,8CAA8C,CAG5E,CAAC;AAoCF,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5D,UAAU,CAAC,GAAG,CAAC,CAAC;AAChB,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,KAAuB;YACjC,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,CAAC,cAAc,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACpD,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,4BAA4B;SACvD,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/validation/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,OAAO,GAGO,OAAO,CAAC,eAAe,CAAC,CAAC;AAC7C,MAAM,UAAU,GAA+B,OAAO,CAAC,aAAa,CAAC,CAAC;AACtE,MAAM,cAAc,GAAG,OAAO,CAAC,8CAA8C,CAG5E,CAAC;AACF,MAAM,YAAY,GAAG,OAAO,CAAC,6CAA6C,CAGzE,CAAC;AAqCF,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5D,UAAU,CAAC,GAAG,CAAC,CAAC;AAChB,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,KAAK,CAAW,CAAC,CAAC;AAC3D,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,KAAuB,CAAC;QACzC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YAChF,IAAI,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE;wBACN;4BACE,YAAY,EAAE,qBAAqB,KAAK,OAAO;4BAC/C,UAAU,EAAE,8CAA8C;4BAC1D,OAAO,EAAE,mBAAmB;4BAC5B,OAAO,EAAE,wDAAwD;yBAClE;qBACF;iBACF,CAAC;YACJ,CAAC;YACD,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,OAAO;YACL,KAAK,EAAE,IAAI;YACX,QAAQ;YACR,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,CAAC,cAAc,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACpD,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,4BAA4B;SACvD,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { EventsPublishInput, EventsPublishResult, SignalDeclaration } from '../generated/contract.generated.js';
2
+ export interface SignalValidationError {
3
+ readonly instancePath: string;
4
+ readonly schemaPath: string;
5
+ readonly keyword: string;
6
+ readonly message: string;
7
+ }
8
+ export type SignalValidationResult<Value> = {
9
+ readonly valid: true;
10
+ readonly value: Value;
11
+ readonly errors: readonly [];
12
+ } | {
13
+ readonly valid: false;
14
+ readonly errors: readonly SignalValidationError[];
15
+ };
16
+ export declare const SIGNAL_PAYLOAD_MAX_ENCODED_BYTES: 65536;
17
+ export type SignalSchemaCatalog = Readonly<Record<string, Readonly<Record<string, unknown>>>>;
18
+ export declare function validateSignalDeclaration(value: unknown): SignalValidationResult<SignalDeclaration>;
19
+ export declare function validateEventsPublishInput(value: unknown): SignalValidationResult<EventsPublishInput>;
20
+ /**
21
+ * Cross-document admission: a structurally legal publish is still forbidden
22
+ * unless its signalType appears in this plugin manifest's declared provides.
23
+ */
24
+ export declare function validateDeclaredEventsPublishInput(declarations: readonly unknown[], signalSchemas: SignalSchemaCatalog, value: unknown): SignalValidationResult<EventsPublishInput>;
25
+ export declare function validateEventsPublishResult(value: unknown): SignalValidationResult<EventsPublishResult>;
26
+ //# sourceMappingURL=signals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/validation/signals.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,oCAAoC,CAAC;AA+B5C,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,sBAAsB,CAAC,KAAK,IACpC;IAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE,GAC7E;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAA;CAAE,CAAC;AAEjF,eAAO,MAAM,gCAAgC,EAAG,KAAe,CAAC;AAEhE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CACxC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAClD,CAAC;AAyDF,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,GACb,sBAAsB,CAAC,iBAAiB,CAAC,CAE3C;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,GACb,sBAAsB,CAAC,kBAAkB,CAAC,CAuD5C;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,CAChD,YAAY,EAAE,SAAS,OAAO,EAAE,EAChC,aAAa,EAAE,mBAAmB,EAClC,KAAK,EAAE,OAAO,GACb,sBAAsB,CAAC,kBAAkB,CAAC,CA4F5C;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,OAAO,GACb,sBAAsB,CAAC,mBAAmB,CAAC,CAE7C"}
@@ -0,0 +1,206 @@
1
+ import { createRequire } from 'node:module';
2
+ const require = createRequire(import.meta.url);
3
+ const Ajv2020 = require('ajv/dist/2020');
4
+ const addFormats = require('ajv-formats');
5
+ const signalSchema = require('@clowder-ai/plugin-contract/schemas/signals');
6
+ export const SIGNAL_PAYLOAD_MAX_ENCODED_BYTES = 65_536;
7
+ const ajv = new Ajv2020({ allErrors: true, strict: false });
8
+ addFormats(ajv);
9
+ ajv.addSchema(signalSchema, signalSchema['$id']);
10
+ function validator(definition) {
11
+ const validate = ajv.getSchema(`${String(signalSchema['$id'])}#/$defs/${definition}`);
12
+ if (!validate)
13
+ throw new Error(`missing signal schema definition: ${definition}`);
14
+ return validate;
15
+ }
16
+ const validateDeclarationSchema = validator('SignalDeclaration');
17
+ const validatePublishInputSchema = validator('EventsPublishInput');
18
+ const validatePublishResultSchema = validator('EventsPublishResult');
19
+ const resolvedSchemaValidators = new WeakMap();
20
+ function errorsOf(validate) {
21
+ return (validate.errors ?? []).map((error) => ({
22
+ instancePath: error.instancePath,
23
+ schemaPath: error.schemaPath,
24
+ keyword: error.keyword,
25
+ message: error.message ?? 'signal validation failed',
26
+ }));
27
+ }
28
+ function validateWith(validate, value) {
29
+ if (!validate(value))
30
+ return { valid: false, errors: errorsOf(validate) };
31
+ return { valid: true, value: value, errors: [] };
32
+ }
33
+ function isJsonValue(value, ancestors = new Set()) {
34
+ if (value === null ||
35
+ typeof value === 'string' ||
36
+ typeof value === 'boolean') {
37
+ return true;
38
+ }
39
+ if (typeof value === 'number')
40
+ return Number.isFinite(value);
41
+ if (typeof value !== 'object')
42
+ return false;
43
+ if (ancestors.has(value))
44
+ return false;
45
+ ancestors.add(value);
46
+ const valid = Array.isArray(value)
47
+ ? value.every((item) => isJsonValue(item, ancestors))
48
+ : Object.values(value).every((item) => isJsonValue(item, ancestors));
49
+ ancestors.delete(value);
50
+ return valid;
51
+ }
52
+ export function validateSignalDeclaration(value) {
53
+ return validateWith(validateDeclarationSchema, value);
54
+ }
55
+ export function validateEventsPublishInput(value) {
56
+ const structural = validateWith(validatePublishInputSchema, value);
57
+ if (!structural.valid)
58
+ return structural;
59
+ let validJsonValue = false;
60
+ try {
61
+ validJsonValue = isJsonValue(structural.value.payload);
62
+ }
63
+ catch {
64
+ validJsonValue = false;
65
+ }
66
+ if (!validJsonValue) {
67
+ return {
68
+ valid: false,
69
+ errors: [
70
+ {
71
+ instancePath: '/payload',
72
+ schemaPath: '#/$defs/EventsPublishInput/properties/payload',
73
+ keyword: 'jsonValue',
74
+ message: 'payload must contain only finite JSON values without cycles',
75
+ },
76
+ ],
77
+ };
78
+ }
79
+ let encodedPayloadBytes;
80
+ try {
81
+ encodedPayloadBytes = Buffer.byteLength(JSON.stringify(structural.value.payload), 'utf8');
82
+ }
83
+ catch {
84
+ return {
85
+ valid: false,
86
+ errors: [
87
+ {
88
+ instancePath: '/payload',
89
+ schemaPath: '#/$defs/EventsPublishInput/properties/payload',
90
+ keyword: 'jsonValue',
91
+ message: 'payload could not be safely serialized as JSON',
92
+ },
93
+ ],
94
+ };
95
+ }
96
+ if (encodedPayloadBytes > SIGNAL_PAYLOAD_MAX_ENCODED_BYTES) {
97
+ return {
98
+ valid: false,
99
+ errors: [
100
+ {
101
+ instancePath: '/payload',
102
+ schemaPath: '#/x-clowder-payload-max-encoded-bytes',
103
+ keyword: 'maxEncodedBytes',
104
+ message: `payload exceeds ${SIGNAL_PAYLOAD_MAX_ENCODED_BYTES} encoded bytes`,
105
+ },
106
+ ],
107
+ };
108
+ }
109
+ return structural;
110
+ }
111
+ /**
112
+ * Cross-document admission: a structurally legal publish is still forbidden
113
+ * unless its signalType appears in this plugin manifest's declared provides.
114
+ */
115
+ export function validateDeclaredEventsPublishInput(declarations, signalSchemas, value) {
116
+ const input = validateEventsPublishInput(value);
117
+ if (!input.valid)
118
+ return input;
119
+ let matchingDeclaration;
120
+ for (const candidate of declarations) {
121
+ const declaration = validateSignalDeclaration(candidate);
122
+ if (!declaration.valid) {
123
+ return {
124
+ valid: false,
125
+ errors: [
126
+ {
127
+ instancePath: '/signals/provides',
128
+ schemaPath: '#/$defs/SignalContribution/properties/provides',
129
+ keyword: 'signalDeclaration',
130
+ message: 'declared signal metadata is invalid',
131
+ },
132
+ ],
133
+ };
134
+ }
135
+ if (declaration.value.type === input.value.signalType) {
136
+ matchingDeclaration = declaration.value;
137
+ }
138
+ }
139
+ if (matchingDeclaration === undefined) {
140
+ return {
141
+ valid: false,
142
+ errors: [
143
+ {
144
+ instancePath: '/signalType',
145
+ schemaPath: '#/$defs/SignalContribution/properties/provides',
146
+ keyword: 'declaredSignalType',
147
+ message: 'signalType is not declared by the plugin manifest',
148
+ },
149
+ ],
150
+ };
151
+ }
152
+ const resolvedSchema = signalSchemas[matchingDeclaration.schemaRef];
153
+ if (typeof resolvedSchema !== 'object' ||
154
+ resolvedSchema === null ||
155
+ Array.isArray(resolvedSchema)) {
156
+ return {
157
+ valid: false,
158
+ errors: [
159
+ {
160
+ instancePath: '/signalType',
161
+ schemaPath: matchingDeclaration.schemaRef,
162
+ keyword: 'signalSchemaUnresolved',
163
+ message: 'declared signal schema is not resolved from the installed package',
164
+ },
165
+ ],
166
+ };
167
+ }
168
+ let validateResolved = resolvedSchemaValidators.get(resolvedSchema);
169
+ if (validateResolved === undefined) {
170
+ try {
171
+ const schemaAjv = new Ajv2020({ allErrors: true, strict: false });
172
+ addFormats(schemaAjv);
173
+ validateResolved = schemaAjv.compile(resolvedSchema);
174
+ resolvedSchemaValidators.set(resolvedSchema, validateResolved);
175
+ }
176
+ catch {
177
+ resolvedSchemaValidators.set(resolvedSchema, null);
178
+ validateResolved = null;
179
+ }
180
+ }
181
+ if (validateResolved === null) {
182
+ return {
183
+ valid: false,
184
+ errors: [
185
+ {
186
+ instancePath: '/signalType',
187
+ schemaPath: matchingDeclaration.schemaRef,
188
+ keyword: 'signalSchemaInvalid',
189
+ message: 'declared signal schema could not be compiled safely',
190
+ },
191
+ ],
192
+ };
193
+ }
194
+ const content = {
195
+ payload: input.value.payload,
196
+ source: input.value.source,
197
+ };
198
+ if (!validateResolved(content)) {
199
+ return { valid: false, errors: errorsOf(validateResolved) };
200
+ }
201
+ return input;
202
+ }
203
+ export function validateEventsPublishResult(value) {
204
+ return validateWith(validatePublishResultSchema, value);
205
+ }
206
+ //# sourceMappingURL=signals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../src/validation/signals.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Disposition conformance fixture vectors — machine-readable test data
3
- * for the pre-dispatch disposition table (T-A through T-L).
3
+ * for the pre-dispatch disposition table (T-A through T-M).
4
4
  *
5
5
  * Mechanized VERBATIM from §3.8-1 of the #1165 frozen plan (rev11,
6
6
  * SHA 7e26e5af). Each vector carries:
@@ -19,7 +19,7 @@
19
19
  * - 7 notification-partition sub-cases (NOTIFICATION_PARTITION_CASES)
20
20
  * "your correction #4's five, the idless-envelope fixture,
21
21
  * and the R8 row-10 value-failure fixture"
22
- * - All 12 T-classes have ≥1 vector
22
+ * - All 13 T-classes have ≥1 vector
23
23
  * - Pre-state mutual-exclusivity proof pairs:
24
24
  * ping nonce (T-H-3 / T-L-2), row-9 deliveryId (T-H-9 / T-L-4)
25
25
  *
@@ -30,6 +30,7 @@
30
30
  * Tests verify both existence AND class correctness per key.
31
31
  */
32
32
  import type { DispositionClass, DispositionOutcome } from './disposition.js';
33
+ import type { CandidateHello } from './handshake.js';
33
34
  import type { WireMethodName } from './registry.js';
34
35
  export declare const CLOSED_ERROR_ARM_NAMES: readonly ["ParseErrorEnvelope", "InvalidRequestNullIdEnvelope", "InvalidRequestValidIdEnvelope", "MethodNotFoundEnvelope", "InvalidParamsEnvelope", "InternalErrorEnvelope", "HandshakeRejectedEnvelope", "DeliveryRejectedEnvelope", "DomainErrorEnvelope", "DeadlineExpiredEnvelope", "SnapshotUnavailableEnvelope"];
35
36
  export type ClosedErrorArmName = (typeof CLOSED_ERROR_ARM_NAMES)[number];
@@ -42,6 +43,8 @@ export interface RequestSnapshot {
42
43
  readonly nonce?: string;
43
44
  /** Row 9 deliver: the deliveryId that must match byte-equal in the ack. */
44
45
  readonly deliveryId?: string;
46
+ /** Row 1 hello: the candidate claims that SessionBinding must echo byte-equal. */
47
+ readonly candidateHello?: CandidateHello;
45
48
  }
46
49
  /**
47
50
  * A single in-flight request record for pre-state correlation.
@@ -71,6 +74,8 @@ export interface DispositionFixtureVector {
71
74
  readonly expectedErrorArm: ClosedErrorArmName | null;
72
75
  readonly expectedErrorCode: number | null;
73
76
  readonly expectedResponseFrame: string | null;
77
+ /** This vector must not allocate state, enqueue work, or activate. */
78
+ readonly zeroSideEffects?: true;
74
79
  readonly description: string;
75
80
  }
76
81
  /**
@@ -96,4 +101,8 @@ export declare const RESPONSE_CANDIDATE_CASES: Readonly<Record<string, Partition
96
101
  */
97
102
  export declare const NOTIFICATION_PARTITION_CASES: Readonly<Record<string, PartitionCase>>;
98
103
  export declare const DISPOSITION_FIXTURE_VECTORS: readonly DispositionFixtureVector[];
104
+ /** Complete beta.8 handshake safety surface exported for downstream runners. */
105
+ export declare const BETA8_HANDSHAKE_VECTOR_IDS: readonly ["T-C-2", "T-M-1", "T-M-2", "T-M-3", "T-M-4", "T-M-5", "T-M-6", "T-M-7", "T-M-8", "T-G-2", "T-G-3", "T-G-4", "T-G-5", "T-G-6", "T-G-7", "T-G-8", "T-G-9", "T-G-10", "T-G-11", "T-G-12", "T-G-13", "T-G-14", "T-H-10", "T-H-11", "T-L-5", "T-L-6"];
106
+ /** Complete beta.9 C-2 publish safety surface exported for downstream runners. */
107
+ export declare const BETA9_EVENTS_PUBLISH_VECTOR_IDS: readonly ["T-M-9", "T-G-15", "T-H-12", "T-L-7"];
99
108
  //# sourceMappingURL=disposition-fixtures.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"disposition-fixtures.d.ts","sourceRoot":"","sources":["../../src/wire/disposition-fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAmBpD,eAAO,MAAM,sBAAsB,wTAYzB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAkDzE;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;CAC5C;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,cAAc,EAAE,CAAC;CACtD;AAMD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,kBAAkB,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACrD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAUD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAmB5E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAehF,CAAC;AAMF,eAAO,MAAM,2BAA2B,EAAE,SAAS,wBAAwB,EA2hB1E,CAAC"}
1
+ {"version":3,"file":"disposition-fixtures.d.ts","sourceRoot":"","sources":["../../src/wire/disposition-fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAK7E,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,gBAAgB,CAAC;AAErE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAqBpD,eAAO,MAAM,sBAAsB,wTAYzB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAkHzE;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;CAC1C;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;CAC5C;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,cAAc,EAAE,CAAC;CACtD;AAMD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,KAAK,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,kBAAkB,CAAC;IAC7C,QAAQ,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACrD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,sEAAsE;IACtE,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAUD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAmB5E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAehF,CAAC;AAMF,eAAO,MAAM,2BAA2B,EAAE,SAAS,wBAAwB,EA68B1E,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,0BAA0B,4PAO7B,CAAC;AAEX,kFAAkF;AAClF,eAAO,MAAM,+BAA+B,iDAKlC,CAAC"}