@agentplat/mesh-protocol 0.3.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +35 -0
- package/dist/canonical-json.d.ts +12 -0
- package/dist/canonical-json.d.ts.map +1 -0
- package/dist/canonical-json.js +179 -0
- package/dist/canonical-json.js.map +1 -0
- package/dist/contracts.d.ts +154 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +68 -0
- package/dist/contracts.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/strict-json.d.ts +23 -0
- package/dist/strict-json.d.ts.map +1 -0
- package/dist/strict-json.js +311 -0
- package/dist/strict-json.js.map +1 -0
- package/dist/validation.d.ts +31 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +613 -0
- package/dist/validation.js.map +1 -0
- package/fixtures/v0/README.md +9 -0
- package/fixtures/v0/peer-hello.json +30 -0
- package/fixtures/v0/peer-ping-ack.json +29 -0
- package/fixtures/v0/peer-ping.json +28 -0
- package/package.json +37 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/** Public protocol contracts shared by parsing and validation. */
|
|
2
|
+
/** Exact protocol identifier signed by every Mesh peer. */
|
|
3
|
+
export const MESH_PROTOCOL = 'agentplat.mesh';
|
|
4
|
+
/** Alpha releases use wire version zero until beta fixtures are frozen. */
|
|
5
|
+
export const MESH_WIRE_VERSION = 0;
|
|
6
|
+
/** Reference signature suite for the initial protocol. */
|
|
7
|
+
export const MESH_SIGNATURE_ALGORITHM = 'Ed25519';
|
|
8
|
+
/** Closed audience topics recognized by protocol v0. */
|
|
9
|
+
export const MESH_AUDIENCE_TOPICS = Object.freeze([
|
|
10
|
+
'membership',
|
|
11
|
+
'capability',
|
|
12
|
+
'objective',
|
|
13
|
+
'work',
|
|
14
|
+
'evidence',
|
|
15
|
+
]);
|
|
16
|
+
/** Closed message registry; later alphas implement additional payload families. */
|
|
17
|
+
export const MESH_MESSAGE_TYPES = Object.freeze([
|
|
18
|
+
'peer.hello',
|
|
19
|
+
'peer.card',
|
|
20
|
+
'peer.ping',
|
|
21
|
+
'peer.ping_ack',
|
|
22
|
+
'peer.digest',
|
|
23
|
+
'peer.sync_request',
|
|
24
|
+
'peer.sync_response',
|
|
25
|
+
'peer.goodbye',
|
|
26
|
+
'capability.advertise',
|
|
27
|
+
'capability.withdraw',
|
|
28
|
+
'objective.announce',
|
|
29
|
+
'objective.revise',
|
|
30
|
+
'objective.cancel',
|
|
31
|
+
'work.offer',
|
|
32
|
+
'work.bid',
|
|
33
|
+
'work.award',
|
|
34
|
+
'work.accept',
|
|
35
|
+
'work.decline',
|
|
36
|
+
'work.progress',
|
|
37
|
+
'work.checkpoint',
|
|
38
|
+
'work.result',
|
|
39
|
+
'work.release',
|
|
40
|
+
'work.cancel',
|
|
41
|
+
'lease.renew',
|
|
42
|
+
'lease.takeover_proposal',
|
|
43
|
+
'lease.vote',
|
|
44
|
+
'lease.certificate',
|
|
45
|
+
'evidence.claim',
|
|
46
|
+
'evidence.attest',
|
|
47
|
+
'evidence.challenge',
|
|
48
|
+
'evidence.retract',
|
|
49
|
+
'trust.observation',
|
|
50
|
+
]);
|
|
51
|
+
/** Default bounds from the protocol v0 design contract. */
|
|
52
|
+
export const DEFAULT_MESH_PROTOCOL_LIMITS = Object.freeze({
|
|
53
|
+
maximumEnvelopeBytes: 262_144,
|
|
54
|
+
maximumPayloadBytes: 196_608,
|
|
55
|
+
maximumNestingDepth: 32,
|
|
56
|
+
maximumTotalObjectKeys: 2_048,
|
|
57
|
+
maximumObjectKeys: 256,
|
|
58
|
+
maximumTotalArrayItems: 4_096,
|
|
59
|
+
maximumArrayItems: 1_024,
|
|
60
|
+
maximumStringBytes: 65_536,
|
|
61
|
+
maximumExtensions: 16,
|
|
62
|
+
maximumCriticalExtensions: 8,
|
|
63
|
+
maximumIdBytes: 256,
|
|
64
|
+
maximumLifetimeMs: 10 * 60 * 1_000,
|
|
65
|
+
clockSkewAllowanceMs: 2 * 60 * 1_000,
|
|
66
|
+
replayWindowSize: 2_048,
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,2DAA2D;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAyB,CAAC;AAEvD,2EAA2E;AAC3E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAU,CAAC;AAE5C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,SAAkB,CAAC;AAE3D,wDAAwD;AACxD,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,MAAM;IACN,UAAU;CACF,CAAC,CAAC;AAEZ,mFAAmF;AACnF,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,YAAY;IACZ,WAAW;IACX,WAAW;IACX,eAAe;IACf,aAAa;IACb,mBAAmB;IACnB,oBAAoB;IACpB,cAAc;IACd,sBAAsB;IACtB,qBAAqB;IACrB,oBAAoB;IACpB,kBAAkB;IAClB,kBAAkB;IAClB,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,aAAa;IACb,cAAc;IACd,eAAe;IACf,iBAAiB;IACjB,aAAa;IACb,cAAc;IACd,aAAa;IACb,aAAa;IACb,yBAAyB;IACzB,YAAY;IACZ,mBAAmB;IACnB,gBAAgB;IAChB,iBAAiB;IACjB,oBAAoB;IACpB,kBAAkB;IAClB,mBAAmB;CACX,CAAC,CAAC;AAwJZ,2DAA2D;AAC3D,MAAM,CAAC,MAAM,4BAA4B,GACvC,MAAM,CAAC,MAAM,CAAC;IACZ,oBAAoB,EAAE,OAAO;IAC7B,mBAAmB,EAAE,OAAO;IAC5B,mBAAmB,EAAE,EAAE;IACvB,sBAAsB,EAAE,KAAK;IAC7B,iBAAiB,EAAE,GAAG;IACtB,sBAAsB,EAAE,KAAK;IAC7B,iBAAiB,EAAE,KAAK;IACxB,kBAAkB,EAAE,MAAM;IAC1B,iBAAiB,EAAE,EAAE;IACrB,yBAAyB,EAAE,CAAC;IAC5B,cAAc,EAAE,GAAG;IACnB,iBAAiB,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK;IAClC,oBAAoB,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK;IACpC,gBAAgB,EAAE,KAAK;CACxB,CAAC,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './contracts.js';
|
|
2
|
+
export { canonicalizeMeshJson, canonicalizeMeshJsonBytes, canonicalizeMeshPayload, canonicalizeMeshSigningDocument, compareMeshTimestamps, createMeshSigningDocument, parseMeshJson, parseSignedMeshEnvelope, validateMeshEnvelopeContext, validateSignedMeshEnvelope, } from './validation.js';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,+BAA+B,EAC/B,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,uBAAuB,EACvB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './contracts.js';
|
|
2
|
+
export { canonicalizeMeshJson, canonicalizeMeshJsonBytes, canonicalizeMeshPayload, canonicalizeMeshSigningDocument, compareMeshTimestamps, createMeshSigningDocument, parseMeshJson, parseSignedMeshEnvelope, validateMeshEnvelopeContext, validateSignedMeshEnvelope, } from './validation.js';
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,+BAA+B,EAC/B,qBAAqB,EACrB,yBAAyB,EACzB,aAAa,EACb,uBAAuB,EACvB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface StrictJsonLimits {
|
|
2
|
+
readonly maximumEnvelopeBytes: number;
|
|
3
|
+
readonly maximumNestingDepth: number;
|
|
4
|
+
readonly maximumTotalObjectKeys: number;
|
|
5
|
+
readonly maximumObjectKeys: number;
|
|
6
|
+
readonly maximumTotalArrayItems: number;
|
|
7
|
+
readonly maximumArrayItems: number;
|
|
8
|
+
readonly maximumStringBytes: number;
|
|
9
|
+
}
|
|
10
|
+
export type StrictJsonErrorCode = 'invalid_json' | 'duplicate_object_key' | 'structural_limit_exceeded';
|
|
11
|
+
export type StrictJsonDocumentResult = {
|
|
12
|
+
readonly ok: true;
|
|
13
|
+
readonly value: unknown;
|
|
14
|
+
readonly payloadByteLength?: number;
|
|
15
|
+
} | {
|
|
16
|
+
readonly ok: false;
|
|
17
|
+
readonly code: StrictJsonErrorCode;
|
|
18
|
+
readonly path: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function parseStrictJsonDocument(input: string | Uint8Array, limits: StrictJsonLimits): StrictJsonDocumentResult;
|
|
21
|
+
export declare function isWellFormedUnicode(value: string): boolean;
|
|
22
|
+
export declare function formatJsonPath(path: readonly (string | number)[]): string;
|
|
23
|
+
//# sourceMappingURL=strict-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strict-json.d.ts","sourceRoot":"","sources":["../src/strict-json.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,MAAM,mBAAmB,GAC7B,cAAc,GAAG,sBAAsB,GAAG,2BAA2B,CAAC;AAExE,MAAM,MAAM,wBAAwB,GAChC;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC,GACD;IACE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAmBN,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,GAAG,UAAU,EAC1B,MAAM,EAAE,gBAAgB,GACvB,wBAAwB,CA8C1B;AA8PD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAY1D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,CAQzE"}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
const utf8Encoder = new TextEncoder();
|
|
2
|
+
const utf8Decoder = new TextDecoder('utf-8', {
|
|
3
|
+
fatal: true,
|
|
4
|
+
ignoreBOM: true,
|
|
5
|
+
});
|
|
6
|
+
const numberPattern = /-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/y;
|
|
7
|
+
const hexadecimalPattern = /^[0-9a-fA-F]{4}$/;
|
|
8
|
+
class StrictJsonFailure extends Error {
|
|
9
|
+
code;
|
|
10
|
+
path;
|
|
11
|
+
constructor(code, path) {
|
|
12
|
+
super(code);
|
|
13
|
+
this.code = code;
|
|
14
|
+
this.path = path;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function parseStrictJsonDocument(input, limits) {
|
|
18
|
+
let source;
|
|
19
|
+
try {
|
|
20
|
+
if (typeof input === 'string') {
|
|
21
|
+
if (utf8Encoder.encode(input).byteLength > limits.maximumEnvelopeBytes) {
|
|
22
|
+
return {
|
|
23
|
+
ok: false,
|
|
24
|
+
code: 'structural_limit_exceeded',
|
|
25
|
+
path: '$',
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
source = input;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
if (input.byteLength > limits.maximumEnvelopeBytes) {
|
|
32
|
+
return {
|
|
33
|
+
ok: false,
|
|
34
|
+
code: 'structural_limit_exceeded',
|
|
35
|
+
path: '$',
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
source = utf8Decoder.decode(input);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return {
|
|
43
|
+
ok: false,
|
|
44
|
+
code: 'invalid_json',
|
|
45
|
+
path: '$',
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
return new StrictJsonParser(source, limits).parse();
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (error instanceof StrictJsonFailure) {
|
|
53
|
+
return {
|
|
54
|
+
ok: false,
|
|
55
|
+
code: error.code,
|
|
56
|
+
path: error.path,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
ok: false,
|
|
61
|
+
code: 'invalid_json',
|
|
62
|
+
path: '$',
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
class StrictJsonParser {
|
|
67
|
+
source;
|
|
68
|
+
limits;
|
|
69
|
+
index = 0;
|
|
70
|
+
totalObjectKeys = 0;
|
|
71
|
+
totalArrayItems = 0;
|
|
72
|
+
payloadByteLength;
|
|
73
|
+
constructor(source, limits) {
|
|
74
|
+
this.source = source;
|
|
75
|
+
this.limits = limits;
|
|
76
|
+
}
|
|
77
|
+
parse() {
|
|
78
|
+
this.skipWhitespace();
|
|
79
|
+
const value = this.parseValue([], 0);
|
|
80
|
+
this.skipWhitespace();
|
|
81
|
+
if (this.index !== this.source.length) {
|
|
82
|
+
this.fail('invalid_json', []);
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
ok: true,
|
|
86
|
+
value,
|
|
87
|
+
...(this.payloadByteLength === undefined
|
|
88
|
+
? {}
|
|
89
|
+
: { payloadByteLength: this.payloadByteLength }),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
parseValue(path, depth) {
|
|
93
|
+
const character = this.source[this.index];
|
|
94
|
+
if (character === '{')
|
|
95
|
+
return this.parseObject(path, depth + 1);
|
|
96
|
+
if (character === '[')
|
|
97
|
+
return this.parseArray(path, depth + 1);
|
|
98
|
+
if (character === '"')
|
|
99
|
+
return this.parseString(path);
|
|
100
|
+
if (character === 't')
|
|
101
|
+
return this.parseLiteral('true', true, path);
|
|
102
|
+
if (character === 'f')
|
|
103
|
+
return this.parseLiteral('false', false, path);
|
|
104
|
+
if (character === 'n')
|
|
105
|
+
return this.parseLiteral('null', null, path);
|
|
106
|
+
if (character === '-' || isDigit(character)) {
|
|
107
|
+
return this.parseNumber(path);
|
|
108
|
+
}
|
|
109
|
+
return this.fail('invalid_json', path);
|
|
110
|
+
}
|
|
111
|
+
parseObject(path, depth) {
|
|
112
|
+
this.assertDepth(depth, path);
|
|
113
|
+
this.index += 1;
|
|
114
|
+
this.skipWhitespace();
|
|
115
|
+
const result = Object.create(null);
|
|
116
|
+
const keys = new Set();
|
|
117
|
+
let objectKeyCount = 0;
|
|
118
|
+
if (this.source[this.index] === '}') {
|
|
119
|
+
this.index += 1;
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
while (this.index < this.source.length) {
|
|
123
|
+
if (this.source[this.index] !== '"') {
|
|
124
|
+
return this.fail('invalid_json', path);
|
|
125
|
+
}
|
|
126
|
+
const key = this.parseString(path);
|
|
127
|
+
const keyPath = [...path, key];
|
|
128
|
+
if (keys.has(key)) {
|
|
129
|
+
return this.fail('duplicate_object_key', keyPath);
|
|
130
|
+
}
|
|
131
|
+
keys.add(key);
|
|
132
|
+
objectKeyCount += 1;
|
|
133
|
+
this.totalObjectKeys += 1;
|
|
134
|
+
if (objectKeyCount > this.limits.maximumObjectKeys ||
|
|
135
|
+
this.totalObjectKeys > this.limits.maximumTotalObjectKeys) {
|
|
136
|
+
return this.fail('structural_limit_exceeded', keyPath);
|
|
137
|
+
}
|
|
138
|
+
this.skipWhitespace();
|
|
139
|
+
if (this.source[this.index] !== ':') {
|
|
140
|
+
return this.fail('invalid_json', keyPath);
|
|
141
|
+
}
|
|
142
|
+
this.index += 1;
|
|
143
|
+
this.skipWhitespace();
|
|
144
|
+
const valueStart = this.index;
|
|
145
|
+
result[key] = this.parseValue(keyPath, depth);
|
|
146
|
+
const valueEnd = this.index;
|
|
147
|
+
if (depth === 1 && key === 'payload') {
|
|
148
|
+
this.payloadByteLength = utf8Encoder.encode(this.source.slice(valueStart, valueEnd)).byteLength;
|
|
149
|
+
}
|
|
150
|
+
this.skipWhitespace();
|
|
151
|
+
const delimiter = this.source[this.index];
|
|
152
|
+
if (delimiter === '}') {
|
|
153
|
+
this.index += 1;
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
if (delimiter !== ',') {
|
|
157
|
+
return this.fail('invalid_json', path);
|
|
158
|
+
}
|
|
159
|
+
this.index += 1;
|
|
160
|
+
this.skipWhitespace();
|
|
161
|
+
}
|
|
162
|
+
return this.fail('invalid_json', path);
|
|
163
|
+
}
|
|
164
|
+
parseArray(path, depth) {
|
|
165
|
+
this.assertDepth(depth, path);
|
|
166
|
+
this.index += 1;
|
|
167
|
+
this.skipWhitespace();
|
|
168
|
+
const result = [];
|
|
169
|
+
if (this.source[this.index] === ']') {
|
|
170
|
+
this.index += 1;
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
while (this.index < this.source.length) {
|
|
174
|
+
const itemPath = [...path, result.length];
|
|
175
|
+
if (result.length + 1 > this.limits.maximumArrayItems ||
|
|
176
|
+
this.totalArrayItems + 1 > this.limits.maximumTotalArrayItems) {
|
|
177
|
+
return this.fail('structural_limit_exceeded', itemPath);
|
|
178
|
+
}
|
|
179
|
+
this.totalArrayItems += 1;
|
|
180
|
+
result.push(this.parseValue(itemPath, depth));
|
|
181
|
+
this.skipWhitespace();
|
|
182
|
+
const delimiter = this.source[this.index];
|
|
183
|
+
if (delimiter === ']') {
|
|
184
|
+
this.index += 1;
|
|
185
|
+
return result;
|
|
186
|
+
}
|
|
187
|
+
if (delimiter !== ',') {
|
|
188
|
+
return this.fail('invalid_json', path);
|
|
189
|
+
}
|
|
190
|
+
this.index += 1;
|
|
191
|
+
this.skipWhitespace();
|
|
192
|
+
}
|
|
193
|
+
return this.fail('invalid_json', path);
|
|
194
|
+
}
|
|
195
|
+
parseString(path) {
|
|
196
|
+
const start = this.index;
|
|
197
|
+
this.index += 1;
|
|
198
|
+
while (this.index < this.source.length) {
|
|
199
|
+
const code = this.source.charCodeAt(this.index);
|
|
200
|
+
if (code === 0x22) {
|
|
201
|
+
this.index += 1;
|
|
202
|
+
const raw = this.source.slice(start, this.index);
|
|
203
|
+
let value;
|
|
204
|
+
try {
|
|
205
|
+
value = JSON.parse(raw);
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
return this.fail('invalid_json', path);
|
|
209
|
+
}
|
|
210
|
+
if (!isWellFormedUnicode(value) ||
|
|
211
|
+
utf8Encoder.encode(value).byteLength > this.limits.maximumStringBytes) {
|
|
212
|
+
return this.fail(isWellFormedUnicode(value)
|
|
213
|
+
? 'structural_limit_exceeded'
|
|
214
|
+
: 'invalid_json', path);
|
|
215
|
+
}
|
|
216
|
+
return value;
|
|
217
|
+
}
|
|
218
|
+
if (code <= 0x1f) {
|
|
219
|
+
return this.fail('invalid_json', path);
|
|
220
|
+
}
|
|
221
|
+
if (code === 0x5c) {
|
|
222
|
+
this.index += 1;
|
|
223
|
+
const escape = this.source[this.index];
|
|
224
|
+
if (escape === 'u') {
|
|
225
|
+
const hexadecimal = this.source.slice(this.index + 1, this.index + 5);
|
|
226
|
+
if (!hexadecimalPattern.test(hexadecimal)) {
|
|
227
|
+
return this.fail('invalid_json', path);
|
|
228
|
+
}
|
|
229
|
+
this.index += 5;
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
if (!'"\\/bfnrt'.includes(escape ?? '')) {
|
|
233
|
+
return this.fail('invalid_json', path);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
this.index += 1;
|
|
237
|
+
}
|
|
238
|
+
return this.fail('invalid_json', path);
|
|
239
|
+
}
|
|
240
|
+
parseNumber(path) {
|
|
241
|
+
numberPattern.lastIndex = this.index;
|
|
242
|
+
const match = numberPattern.exec(this.source);
|
|
243
|
+
if (!match)
|
|
244
|
+
return this.fail('invalid_json', path);
|
|
245
|
+
this.index = numberPattern.lastIndex;
|
|
246
|
+
const value = Number(match[0]);
|
|
247
|
+
if (!Number.isFinite(value)) {
|
|
248
|
+
return this.fail('invalid_json', path);
|
|
249
|
+
}
|
|
250
|
+
return value;
|
|
251
|
+
}
|
|
252
|
+
parseLiteral(token, value, path) {
|
|
253
|
+
if (this.source.slice(this.index, this.index + token.length) !== token) {
|
|
254
|
+
return this.fail('invalid_json', path);
|
|
255
|
+
}
|
|
256
|
+
this.index += token.length;
|
|
257
|
+
return value;
|
|
258
|
+
}
|
|
259
|
+
assertDepth(depth, path) {
|
|
260
|
+
if (depth > this.limits.maximumNestingDepth) {
|
|
261
|
+
this.fail('structural_limit_exceeded', path);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
skipWhitespace() {
|
|
265
|
+
while (this.source[this.index] === ' ' ||
|
|
266
|
+
this.source[this.index] === '\n' ||
|
|
267
|
+
this.source[this.index] === '\r' ||
|
|
268
|
+
this.source[this.index] === '\t') {
|
|
269
|
+
this.index += 1;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
fail(code, path) {
|
|
273
|
+
throw new StrictJsonFailure(code, formatJsonPath(path));
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
function isDigit(character) {
|
|
277
|
+
return character !== undefined && character >= '0' && character <= '9';
|
|
278
|
+
}
|
|
279
|
+
export function isWellFormedUnicode(value) {
|
|
280
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
281
|
+
const code = value.charCodeAt(index);
|
|
282
|
+
if (code >= 0xd800 && code <= 0xdbff) {
|
|
283
|
+
const following = value.charCodeAt(index + 1);
|
|
284
|
+
if (!(following >= 0xdc00 && following <= 0xdfff))
|
|
285
|
+
return false;
|
|
286
|
+
index += 1;
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
if (code >= 0xdc00 && code <= 0xdfff)
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
export function formatJsonPath(path) {
|
|
295
|
+
let formatted = '$';
|
|
296
|
+
for (const part of path) {
|
|
297
|
+
formatted +=
|
|
298
|
+
typeof part === 'number' ? `[${part}]` : `[${JSON.stringify(part)}]`;
|
|
299
|
+
if (formatted.length > 256)
|
|
300
|
+
return truncatePath(formatted);
|
|
301
|
+
}
|
|
302
|
+
return formatted;
|
|
303
|
+
}
|
|
304
|
+
function truncatePath(path) {
|
|
305
|
+
let end = 253;
|
|
306
|
+
const finalCodeUnit = path.charCodeAt(end - 1);
|
|
307
|
+
if (finalCodeUnit >= 0xd800 && finalCodeUnit <= 0xdbff)
|
|
308
|
+
end -= 1;
|
|
309
|
+
return `${path.slice(0, end)}...`;
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=strict-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strict-json.js","sourceRoot":"","sources":["../src/strict-json.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type MeshEnvelope, type MeshEnvelopeContext, type MeshJsonValue, type MeshMessagePayload, type MeshProtocolOptions, type MeshProtocolResult, type MeshSigningDocument, type MeshTimestampOrder, type SignedMeshEnvelope } from './contracts.js';
|
|
2
|
+
/** Strictly parses any bounded JSON value without losing duplicate-key data. */
|
|
3
|
+
export declare function parseMeshJson(input: string | Uint8Array, options?: MeshProtocolOptions): MeshProtocolResult<MeshJsonValue>;
|
|
4
|
+
/** Canonicalizes an I-JSON-compatible value using RFC 8785 ordering rules. */
|
|
5
|
+
export declare function canonicalizeMeshJson(input: unknown, options?: MeshProtocolOptions): MeshProtocolResult<string>;
|
|
6
|
+
/** Canonicalizes a value and returns the exact UTF-8 bytes used by hashing. */
|
|
7
|
+
export declare function canonicalizeMeshJsonBytes(input: unknown, options?: MeshProtocolOptions): MeshProtocolResult<Uint8Array>;
|
|
8
|
+
/** Compares two timestamps using the exact protocol v0 timestamp profile. */
|
|
9
|
+
export declare function compareMeshTimestamps(left: string, right: string): MeshProtocolResult<MeshTimestampOrder>;
|
|
10
|
+
/**
|
|
11
|
+
* Parses and statically validates one complete Alpha 1 envelope.
|
|
12
|
+
* This stage does not verify the payload digest or proof.
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseSignedMeshEnvelope(input: Uint8Array, options?: MeshProtocolOptions): MeshProtocolResult<SignedMeshEnvelope>;
|
|
15
|
+
/**
|
|
16
|
+
* Validates an in-memory envelope and returns a deeply frozen signed value.
|
|
17
|
+
* This stage does not verify the payload digest or proof.
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateSignedMeshEnvelope(input: unknown, options?: MeshProtocolOptions): MeshProtocolResult<SignedMeshEnvelope>;
|
|
20
|
+
/**
|
|
21
|
+
* Applies receiver scope, freshness and critical-extension support.
|
|
22
|
+
* This stage does not perform peer admission or replay acceptance.
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateMeshEnvelopeContext(envelope: SignedMeshEnvelope, context: MeshEnvelopeContext, options?: MeshProtocolOptions): MeshProtocolResult<SignedMeshEnvelope>;
|
|
25
|
+
/** Builds the closed document whose canonical bytes are signed. */
|
|
26
|
+
export declare function createMeshSigningDocument<TPayload extends MeshMessagePayload>(envelope: MeshEnvelope<TPayload>): MeshSigningDocument<TPayload>;
|
|
27
|
+
/** Returns canonical signing-document bytes without the payload or signature. */
|
|
28
|
+
export declare function canonicalizeMeshSigningDocument(envelope: MeshEnvelope, options?: MeshProtocolOptions): MeshProtocolResult<Uint8Array>;
|
|
29
|
+
/** Returns canonical payload bytes used by the reference digest contract. */
|
|
30
|
+
export declare function canonicalizeMeshPayload(payload: MeshMessagePayload, options?: MeshProtocolOptions): MeshProtocolResult<Uint8Array>;
|
|
31
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AACA,OAAO,EASL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EAIvB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAIvB,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAkDxB,gFAAgF;AAChF,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,GAAG,UAAU,EAC1B,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAAC,aAAa,CAAC,CAKnC;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAAC,MAAM,CAAC,CAG5B;AAED,+EAA+E;AAC/E,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAAC,UAAU,CAAC,CAGhC;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,kBAAkB,CAAC,kBAAkB,CAAC,CAgBxC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAAC,kBAAkB,CAAC,CAWxC;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAAC,kBAAkB,CAAC,CA8BxC;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,mBAAmB,EAC5B,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAAC,kBAAkB,CAAC,CAgExC;AAED,mEAAmE;AACnE,wBAAgB,yBAAyB,CAAC,QAAQ,SAAS,kBAAkB,EAC3E,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,GAC/B,mBAAmB,CAAC,QAAQ,CAAC,CAmC/B;AAED,iFAAiF;AACjF,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAAC,UAAU,CAAC,CAKhC;AAED,6EAA6E;AAC7E,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAAC,UAAU,CAAC,CAQhC"}
|