@thenewlabs/entangle-protocol 1.0.0
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/constants.d.ts +20 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +20 -0
- package/dist/constants.js.map +1 -0
- package/dist/frame.d.ts +15 -0
- package/dist/frame.d.ts.map +1 -0
- package/dist/frame.js +74 -0
- package/dist/frame.js.map +1 -0
- package/dist/frame.test.d.ts +2 -0
- package/dist/frame.test.d.ts.map +1 -0
- package/dist/frame.test.js +166 -0
- package/dist/frame.test.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/messages.d.ts +850 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +219 -0
- package/dist/messages.js.map +1 -0
- package/dist/types.d.ts +121 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +51 -0
- package/dist/types.js.map +1 -0
- package/package.json +23 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const PROTOCOL_VERSION = 1;
|
|
2
|
+
export declare const MAX_FRAME_BYTES = 1048576;
|
|
3
|
+
export declare const NAMESPACE_PREFIX = "ns_";
|
|
4
|
+
export declare const NAMESPACE_LENGTH = 10;
|
|
5
|
+
export declare const DEFAULT_LIMITS: {
|
|
6
|
+
readonly MAX_ARG_COUNT: 64;
|
|
7
|
+
readonly MAX_ARG_LEN: 4096;
|
|
8
|
+
readonly MAX_CPU_MS: 60000;
|
|
9
|
+
readonly MAX_MEM_MB: 512;
|
|
10
|
+
readonly MAX_WALL_MS: 300000;
|
|
11
|
+
readonly MAX_OUT_BYTES: 10485760;
|
|
12
|
+
};
|
|
13
|
+
export declare const CRYPTO_PARAMS: {
|
|
14
|
+
readonly SALT_CAP_BYTES: 16;
|
|
15
|
+
readonly CAP_RAND_BYTES: 16;
|
|
16
|
+
readonly NONCE_BYTES: 24;
|
|
17
|
+
readonly KEY_BYTES: 32;
|
|
18
|
+
readonly HMAC_BYTES: 32;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,eAAO,MAAM,cAAc;;;;;;;CAOjB,CAAC;AAEX,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const PROTOCOL_VERSION = 1;
|
|
2
|
+
export const MAX_FRAME_BYTES = 1048576; // 1MB default
|
|
3
|
+
export const NAMESPACE_PREFIX = 'ns_';
|
|
4
|
+
export const NAMESPACE_LENGTH = 10; // base32 chars after prefix
|
|
5
|
+
export const DEFAULT_LIMITS = {
|
|
6
|
+
MAX_ARG_COUNT: 64,
|
|
7
|
+
MAX_ARG_LEN: 4096,
|
|
8
|
+
MAX_CPU_MS: 60000,
|
|
9
|
+
MAX_MEM_MB: 512,
|
|
10
|
+
MAX_WALL_MS: 300000, // 5 minutes
|
|
11
|
+
MAX_OUT_BYTES: 10485760, // 10MB
|
|
12
|
+
};
|
|
13
|
+
export const CRYPTO_PARAMS = {
|
|
14
|
+
SALT_CAP_BYTES: 16,
|
|
15
|
+
CAP_RAND_BYTES: 16,
|
|
16
|
+
NONCE_BYTES: 24,
|
|
17
|
+
KEY_BYTES: 32,
|
|
18
|
+
HMAC_BYTES: 32,
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,cAAc;AACtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC,CAAC,4BAA4B;AAEhE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,aAAa,EAAE,EAAE;IACjB,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,GAAG;IACf,WAAW,EAAE,MAAM,EAAE,YAAY;IACjC,aAAa,EAAE,QAAQ,EAAE,OAAO;CACxB,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,cAAc,EAAE,EAAE;IAClB,cAAc,EAAE,EAAE;IAClB,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,EAAE;CACN,CAAC"}
|
package/dist/frame.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { FrameType, type Frame } from './types.js';
|
|
2
|
+
export declare function encodeFrame(type: FrameType, payload: Uint8Array): Uint8Array;
|
|
3
|
+
export declare function decodeFrameHeader(header: Uint8Array): {
|
|
4
|
+
type: FrameType;
|
|
5
|
+
length: bigint;
|
|
6
|
+
} | null;
|
|
7
|
+
export declare class FrameReader {
|
|
8
|
+
private buffer;
|
|
9
|
+
private headerParsed;
|
|
10
|
+
private currentType;
|
|
11
|
+
private currentLength;
|
|
12
|
+
private droppingOversize;
|
|
13
|
+
push(chunk: Uint8Array): Frame[];
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAS5E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQhG;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,gBAAgB,CAAS;IAEjC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,EAAE;CAwDjC"}
|
package/dist/frame.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { MAX_FRAME_BYTES } from './constants.js';
|
|
2
|
+
export function encodeFrame(type, payload) {
|
|
3
|
+
const frame = new Uint8Array(9 + payload.length);
|
|
4
|
+
const view = new DataView(frame.buffer);
|
|
5
|
+
frame[0] = type;
|
|
6
|
+
view.setBigUint64(1, BigInt(payload.length), false);
|
|
7
|
+
frame.set(payload, 9);
|
|
8
|
+
return frame;
|
|
9
|
+
}
|
|
10
|
+
export function decodeFrameHeader(header) {
|
|
11
|
+
if (header.length < 9)
|
|
12
|
+
return null;
|
|
13
|
+
const view = new DataView(header.buffer, header.byteOffset, header.byteLength);
|
|
14
|
+
const type = header[0];
|
|
15
|
+
const length = view.getBigUint64(1, false);
|
|
16
|
+
return { type, length };
|
|
17
|
+
}
|
|
18
|
+
export class FrameReader {
|
|
19
|
+
buffer = new Uint8Array(0);
|
|
20
|
+
headerParsed = false;
|
|
21
|
+
currentType;
|
|
22
|
+
currentLength;
|
|
23
|
+
droppingOversize = false;
|
|
24
|
+
push(chunk) {
|
|
25
|
+
const frames = [];
|
|
26
|
+
const newBuffer = new Uint8Array(this.buffer.length + chunk.length);
|
|
27
|
+
newBuffer.set(this.buffer);
|
|
28
|
+
newBuffer.set(chunk, this.buffer.length);
|
|
29
|
+
this.buffer = newBuffer;
|
|
30
|
+
while (true) {
|
|
31
|
+
if (!this.headerParsed) {
|
|
32
|
+
if (this.buffer.length < 9)
|
|
33
|
+
break;
|
|
34
|
+
const header = decodeFrameHeader(this.buffer.slice(0, 9));
|
|
35
|
+
if (!header)
|
|
36
|
+
break;
|
|
37
|
+
this.currentType = header.type;
|
|
38
|
+
this.currentLength = header.length;
|
|
39
|
+
this.headerParsed = true;
|
|
40
|
+
this.buffer = this.buffer.slice(9);
|
|
41
|
+
// Enforce maximum frame size; if exceeded, drop this frame
|
|
42
|
+
const lengthNum = Number(this.currentLength);
|
|
43
|
+
if (lengthNum > MAX_FRAME_BYTES) {
|
|
44
|
+
// Enter dropping mode: discard remaining buffered data for this frame
|
|
45
|
+
this.droppingOversize = true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (this.headerParsed && this.currentLength !== undefined) {
|
|
49
|
+
const length = Number(this.currentLength);
|
|
50
|
+
if (this.buffer.length < length)
|
|
51
|
+
break;
|
|
52
|
+
if (this.droppingOversize) {
|
|
53
|
+
// Discard the oversize payload without emitting a frame
|
|
54
|
+
this.buffer = this.buffer.slice(length);
|
|
55
|
+
this.headerParsed = false;
|
|
56
|
+
this.currentType = undefined;
|
|
57
|
+
this.currentLength = undefined;
|
|
58
|
+
this.droppingOversize = false;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
frames.push({
|
|
62
|
+
type: this.currentType,
|
|
63
|
+
payload: this.buffer.slice(0, length),
|
|
64
|
+
});
|
|
65
|
+
this.buffer = this.buffer.slice(length);
|
|
66
|
+
this.headerParsed = false;
|
|
67
|
+
this.currentType = undefined;
|
|
68
|
+
this.currentLength = undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return frames;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.test.d.ts","sourceRoot":"","sources":["../src/frame.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { FrameType } from './types.js';
|
|
3
|
+
import { encodeFrame, decodeFrameHeader, FrameReader } from './frame.js';
|
|
4
|
+
describe('Frame Codec', () => {
|
|
5
|
+
describe('encodeFrame', () => {
|
|
6
|
+
it('should encode frame with correct header', () => {
|
|
7
|
+
const type = FrameType.RUN;
|
|
8
|
+
const payload = new Uint8Array([1, 2, 3, 4]);
|
|
9
|
+
const frame = encodeFrame(type, payload);
|
|
10
|
+
expect(frame).toHaveLength(9 + payload.length);
|
|
11
|
+
expect(frame[0]).toBe(type);
|
|
12
|
+
const view = new DataView(frame.buffer);
|
|
13
|
+
const length = view.getBigUint64(1, false);
|
|
14
|
+
expect(length).toBe(BigInt(payload.length));
|
|
15
|
+
const extractedPayload = frame.slice(9);
|
|
16
|
+
expect(extractedPayload).toEqual(payload);
|
|
17
|
+
});
|
|
18
|
+
it('should handle empty payload', () => {
|
|
19
|
+
const type = FrameType.KEEPALIVE;
|
|
20
|
+
const payload = new Uint8Array(0);
|
|
21
|
+
const frame = encodeFrame(type, payload);
|
|
22
|
+
expect(frame).toHaveLength(9);
|
|
23
|
+
expect(frame[0]).toBe(type);
|
|
24
|
+
const view = new DataView(frame.buffer);
|
|
25
|
+
const length = view.getBigUint64(1, false);
|
|
26
|
+
expect(length).toBe(0n);
|
|
27
|
+
});
|
|
28
|
+
it('should handle large payload', () => {
|
|
29
|
+
const type = FrameType.STDOUT;
|
|
30
|
+
const payload = new Uint8Array(100000);
|
|
31
|
+
payload.fill(42);
|
|
32
|
+
const frame = encodeFrame(type, payload);
|
|
33
|
+
expect(frame).toHaveLength(9 + 100000);
|
|
34
|
+
expect(frame[0]).toBe(type);
|
|
35
|
+
const view = new DataView(frame.buffer, 0, 9);
|
|
36
|
+
const length = view.getBigUint64(1, false);
|
|
37
|
+
expect(length).toBe(100000n);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe('decodeFrameHeader', () => {
|
|
41
|
+
it('should decode valid header', () => {
|
|
42
|
+
const type = FrameType.AUTH1;
|
|
43
|
+
const payloadLength = 1234n;
|
|
44
|
+
const header = new Uint8Array(9);
|
|
45
|
+
header[0] = type;
|
|
46
|
+
const view = new DataView(header.buffer);
|
|
47
|
+
view.setBigUint64(1, payloadLength, false);
|
|
48
|
+
const decoded = decodeFrameHeader(header);
|
|
49
|
+
expect(decoded).not.toBeNull();
|
|
50
|
+
expect(decoded.type).toBe(type);
|
|
51
|
+
expect(decoded.length).toBe(payloadLength);
|
|
52
|
+
});
|
|
53
|
+
it('should return null for incomplete header', () => {
|
|
54
|
+
const header = new Uint8Array(8);
|
|
55
|
+
const decoded = decodeFrameHeader(header);
|
|
56
|
+
expect(decoded).toBeNull();
|
|
57
|
+
});
|
|
58
|
+
it('should handle all frame types', () => {
|
|
59
|
+
const types = [
|
|
60
|
+
FrameType.AUTH1, FrameType.AUTH2, FrameType.AUTH3,
|
|
61
|
+
FrameType.RUN, FrameType.STDIN, FrameType.STDOUT,
|
|
62
|
+
FrameType.STDERR, FrameType.EXIT, FrameType.ERROR,
|
|
63
|
+
FrameType.ABORT, FrameType.KEEPALIVE,
|
|
64
|
+
];
|
|
65
|
+
for (const type of types) {
|
|
66
|
+
const header = new Uint8Array(9);
|
|
67
|
+
header[0] = type;
|
|
68
|
+
const decoded = decodeFrameHeader(header);
|
|
69
|
+
expect(decoded).not.toBeNull();
|
|
70
|
+
expect(decoded.type).toBe(type);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('FrameReader', () => {
|
|
75
|
+
it('should parse single complete frame', () => {
|
|
76
|
+
const reader = new FrameReader();
|
|
77
|
+
const type = FrameType.RUN;
|
|
78
|
+
const payload = new Uint8Array([1, 2, 3]);
|
|
79
|
+
const frame = encodeFrame(type, payload);
|
|
80
|
+
const frames = reader.push(frame);
|
|
81
|
+
expect(frames).toHaveLength(1);
|
|
82
|
+
expect(frames[0].type).toBe(type);
|
|
83
|
+
expect(frames[0].payload).toEqual(payload);
|
|
84
|
+
});
|
|
85
|
+
it('should handle fragmented frames', () => {
|
|
86
|
+
const reader = new FrameReader();
|
|
87
|
+
const type = FrameType.STDOUT;
|
|
88
|
+
const payload = new Uint8Array([10, 20, 30, 40]);
|
|
89
|
+
const frame = encodeFrame(type, payload);
|
|
90
|
+
// Split frame into chunks
|
|
91
|
+
const chunk1 = frame.slice(0, 5);
|
|
92
|
+
const chunk2 = frame.slice(5, 9);
|
|
93
|
+
const chunk3 = frame.slice(9);
|
|
94
|
+
let frames = reader.push(chunk1);
|
|
95
|
+
expect(frames).toHaveLength(0);
|
|
96
|
+
frames = reader.push(chunk2);
|
|
97
|
+
expect(frames).toHaveLength(0);
|
|
98
|
+
frames = reader.push(chunk3);
|
|
99
|
+
expect(frames).toHaveLength(1);
|
|
100
|
+
expect(frames[0].type).toBe(type);
|
|
101
|
+
expect(frames[0].payload).toEqual(payload);
|
|
102
|
+
});
|
|
103
|
+
it('should handle multiple frames in one push', () => {
|
|
104
|
+
const reader = new FrameReader();
|
|
105
|
+
const frame1 = encodeFrame(FrameType.AUTH1, new Uint8Array([1]));
|
|
106
|
+
const frame2 = encodeFrame(FrameType.AUTH2, new Uint8Array([2, 3]));
|
|
107
|
+
const frame3 = encodeFrame(FrameType.AUTH3, new Uint8Array([4, 5, 6]));
|
|
108
|
+
const combined = new Uint8Array(frame1.length + frame2.length + frame3.length);
|
|
109
|
+
combined.set(frame1, 0);
|
|
110
|
+
combined.set(frame2, frame1.length);
|
|
111
|
+
combined.set(frame3, frame1.length + frame2.length);
|
|
112
|
+
const frames = reader.push(combined);
|
|
113
|
+
expect(frames).toHaveLength(3);
|
|
114
|
+
expect(frames[0].type).toBe(FrameType.AUTH1);
|
|
115
|
+
expect(frames[0].payload).toEqual(new Uint8Array([1]));
|
|
116
|
+
expect(frames[1].type).toBe(FrameType.AUTH2);
|
|
117
|
+
expect(frames[1].payload).toEqual(new Uint8Array([2, 3]));
|
|
118
|
+
expect(frames[2].type).toBe(FrameType.AUTH3);
|
|
119
|
+
expect(frames[2].payload).toEqual(new Uint8Array([4, 5, 6]));
|
|
120
|
+
});
|
|
121
|
+
it('should handle partial header then complete frame', () => {
|
|
122
|
+
const reader = new FrameReader();
|
|
123
|
+
const type = FrameType.EXIT;
|
|
124
|
+
const payload = new Uint8Array([99]);
|
|
125
|
+
const frame = encodeFrame(type, payload);
|
|
126
|
+
// Send partial header first
|
|
127
|
+
let frames = reader.push(frame.slice(0, 3));
|
|
128
|
+
expect(frames).toHaveLength(0);
|
|
129
|
+
// Send rest of frame
|
|
130
|
+
frames = reader.push(frame.slice(3));
|
|
131
|
+
expect(frames).toHaveLength(1);
|
|
132
|
+
expect(frames[0].type).toBe(type);
|
|
133
|
+
expect(frames[0].payload).toEqual(payload);
|
|
134
|
+
});
|
|
135
|
+
it('should handle zero-length payload', () => {
|
|
136
|
+
const reader = new FrameReader();
|
|
137
|
+
const type = FrameType.KEEPALIVE;
|
|
138
|
+
const payload = new Uint8Array(0);
|
|
139
|
+
const frame = encodeFrame(type, payload);
|
|
140
|
+
const frames = reader.push(frame);
|
|
141
|
+
expect(frames).toHaveLength(1);
|
|
142
|
+
expect(frames[0].type).toBe(type);
|
|
143
|
+
expect(frames[0].payload).toHaveLength(0);
|
|
144
|
+
});
|
|
145
|
+
it('should maintain state across multiple pushes', () => {
|
|
146
|
+
const reader = new FrameReader();
|
|
147
|
+
const frame1 = encodeFrame(FrameType.RUN, new Uint8Array([1, 2]));
|
|
148
|
+
const frame2 = encodeFrame(FrameType.STDOUT, new Uint8Array([3, 4, 5]));
|
|
149
|
+
// Split across weird boundaries
|
|
150
|
+
const chunk1 = frame1.slice(0, 7);
|
|
151
|
+
const chunk2 = new Uint8Array(frame1.length - 7 + 4);
|
|
152
|
+
chunk2.set(frame1.slice(7), 0);
|
|
153
|
+
chunk2.set(frame2.slice(0, 4), frame1.length - 7);
|
|
154
|
+
const chunk3 = frame2.slice(4);
|
|
155
|
+
let frames = reader.push(chunk1);
|
|
156
|
+
expect(frames).toHaveLength(0);
|
|
157
|
+
frames = reader.push(chunk2);
|
|
158
|
+
expect(frames).toHaveLength(1);
|
|
159
|
+
expect(frames[0].type).toBe(FrameType.RUN);
|
|
160
|
+
frames = reader.push(chunk3);
|
|
161
|
+
expect(frames).toHaveLength(1);
|
|
162
|
+
expect(frames[0].type).toBe(FrameType.STDOUT);
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
//# sourceMappingURL=frame.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.test.js","sourceRoot":"","sources":["../src/frame.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
|