dropspace 0.1.0 → 0.1.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/dist/automerge/index.d.ts +6 -1
- package/dist/automerge/index.d.ts.map +1 -1
- package/dist/automerge/index.js +57 -14
- package/dist/automerge/index.js.map +1 -1
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +372 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/channel.d.ts +23 -1
- package/dist/client/channel.d.ts.map +1 -1
- package/dist/client/channel.js +172 -34
- package/dist/client/channel.js.map +1 -1
- package/dist/client/client.d.ts +67 -1
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +287 -42
- package/dist/client/client.js.map +1 -1
- package/dist/client/peer-connection.d.ts +8 -0
- package/dist/client/peer-connection.d.ts.map +1 -1
- package/dist/client/peer-connection.js +72 -18
- package/dist/client/peer-connection.js.map +1 -1
- package/dist/files/index.d.ts +4 -0
- package/dist/files/index.d.ts.map +1 -1
- package/dist/files/index.js +61 -11
- package/dist/files/index.js.map +1 -1
- package/dist/files/sha256.d.ts.map +1 -1
- package/dist/files/sha256.js +22 -8
- package/dist/files/sha256.js.map +1 -1
- package/dist/protocol/envelope.d.ts +1 -1
- package/dist/protocol/envelope.d.ts.map +1 -1
- package/dist/protocol/envelope.js +8 -0
- package/dist/protocol/envelope.js.map +1 -1
- package/dist/protocol/framing.d.ts +15 -2
- package/dist/protocol/framing.d.ts.map +1 -1
- package/dist/protocol/framing.js +66 -14
- package/dist/protocol/framing.js.map +1 -1
- package/package.json +10 -2
package/dist/protocol/framing.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ProtocolValidationError } from "./envelope.js";
|
|
2
2
|
export const WIRE_MAGIC_BYTE = 0xd5;
|
|
3
|
+
export const WIRE_PREFIX_BYTES = 6;
|
|
3
4
|
export var WireFrameType;
|
|
4
5
|
(function (WireFrameType) {
|
|
5
6
|
WireFrameType[WireFrameType["CONTROL_JSON"] = 1] = "CONTROL_JSON";
|
|
@@ -11,9 +12,36 @@ export var WireFrameType;
|
|
|
11
12
|
WireFrameType[WireFrameType["HUB_RELAY"] = 7] = "HUB_RELAY";
|
|
12
13
|
})(WireFrameType || (WireFrameType = {}));
|
|
13
14
|
const textEncoder = new TextEncoder();
|
|
14
|
-
const textDecoder = new TextDecoder();
|
|
15
|
+
const textDecoder = new TextDecoder("utf-8", { fatal: true });
|
|
15
16
|
export const MAX_HEADER_BYTES = 16 * 1024; // 16 KiB header limit
|
|
16
|
-
export const
|
|
17
|
+
export const DEFAULT_MAX_TOTAL_FRAME_BYTES = 64 * 1024; // 64 KiB safe WebRTC SCTP baseline
|
|
18
|
+
export const DEFAULT_MAX_FRAME_PAYLOAD_BYTES = 48 * 1024; // 48 KiB payload leaves room for prefix + header within 64 KiB
|
|
19
|
+
export const MAX_DECODE_FRAME_BYTES = 256 * 1024; // 256 KiB max incoming frame guard
|
|
20
|
+
function validateFrameTypeSpecificHeader(frameType, header) {
|
|
21
|
+
if (typeof header.timestamp !== "number" || !Number.isFinite(header.timestamp)) {
|
|
22
|
+
throw new ProtocolValidationError("Wire frame header requires finite numeric timestamp", "header.timestamp");
|
|
23
|
+
}
|
|
24
|
+
if (frameType === WireFrameType.TRANSFER_CHUNK) {
|
|
25
|
+
if (!header.transferId || typeof header.transferId !== "string") {
|
|
26
|
+
throw new ProtocolValidationError("TRANSFER_CHUNK frame requires header.transferId", "header.transferId");
|
|
27
|
+
}
|
|
28
|
+
if (typeof header.byteOffset !== "number" ||
|
|
29
|
+
!Number.isFinite(header.byteOffset) ||
|
|
30
|
+
header.byteOffset < 0) {
|
|
31
|
+
throw new ProtocolValidationError("TRANSFER_CHUNK frame requires non-negative header.byteOffset", "header.byteOffset");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else if (frameType === WireFrameType.CRDT_SYNC) {
|
|
35
|
+
if (!header.documentId || typeof header.documentId !== "string") {
|
|
36
|
+
throw new ProtocolValidationError("CRDT_SYNC frame requires header.documentId", "header.documentId");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else if (frameType === WireFrameType.HUB_RELAY) {
|
|
40
|
+
if (!header.targetDeviceId || typeof header.targetDeviceId !== "string") {
|
|
41
|
+
throw new ProtocolValidationError("HUB_RELAY frame requires header.targetDeviceId", "header.targetDeviceId");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
17
45
|
/**
|
|
18
46
|
* Binary frame layout:
|
|
19
47
|
* Byte 0: WIRE_MAGIC_BYTE (0xD5)
|
|
@@ -21,34 +49,48 @@ export const DEFAULT_MAX_FRAME_PAYLOAD_BYTES = 64 * 1024; // 64 KiB safe WebRTC
|
|
|
21
49
|
* Bytes 2..5: Header byte length (uint32 big-endian)
|
|
22
50
|
* Bytes 6..(6 + headerLen - 1): UTF-8 JSON encoded WireFrameHeader
|
|
23
51
|
* Remaining bytes: Raw binary payload (Uint8Array)
|
|
52
|
+
*
|
|
53
|
+
* totalFrameBytes = WIRE_PREFIX_BYTES (6) + encodedHeaderBytes + payloadBytes
|
|
24
54
|
*/
|
|
25
|
-
export function encodeWireFrame(frameType, header, payload = new Uint8Array(0)) {
|
|
55
|
+
export function encodeWireFrame(frameType, header, payload = new Uint8Array(0), options) {
|
|
56
|
+
if (frameType < WireFrameType.CONTROL_JSON || frameType > WireFrameType.HUB_RELAY) {
|
|
57
|
+
throw new ProtocolValidationError(`Unknown wire frame type: 0x${Number(frameType).toString(16)}`, "frameType");
|
|
58
|
+
}
|
|
26
59
|
if (!header.messageId || typeof header.messageId !== "string") {
|
|
27
60
|
throw new ProtocolValidationError("WireFrameHeader requires messageId", "header.messageId");
|
|
28
61
|
}
|
|
29
62
|
if (!header.channel || typeof header.channel !== "string") {
|
|
30
63
|
throw new ProtocolValidationError("WireFrameHeader requires channel", "header.channel");
|
|
31
64
|
}
|
|
65
|
+
validateFrameTypeSpecificHeader(frameType, header);
|
|
32
66
|
const headerBytes = textEncoder.encode(JSON.stringify(header));
|
|
33
67
|
if (headerBytes.byteLength > MAX_HEADER_BYTES) {
|
|
34
68
|
throw new ProtocolValidationError(`WireFrameHeader exceeds ${MAX_HEADER_BYTES} bytes`, "header", "MESSAGE_TOO_LARGE");
|
|
35
69
|
}
|
|
36
|
-
const totalLength =
|
|
70
|
+
const totalLength = WIRE_PREFIX_BYTES + headerBytes.byteLength + payload.byteLength;
|
|
71
|
+
const maxTotal = options?.maxTotalFrameBytes ?? DEFAULT_MAX_TOTAL_FRAME_BYTES;
|
|
72
|
+
if (totalLength > maxTotal) {
|
|
73
|
+
throw new ProtocolValidationError(`Wire frame total size (${totalLength} bytes) exceeds limit (${maxTotal} bytes)`, "frame", "MESSAGE_TOO_LARGE");
|
|
74
|
+
}
|
|
37
75
|
const buffer = new Uint8Array(totalLength);
|
|
38
76
|
const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
|
|
39
77
|
view.setUint8(0, WIRE_MAGIC_BYTE);
|
|
40
78
|
view.setUint8(1, frameType);
|
|
41
79
|
view.setUint32(2, headerBytes.byteLength, false);
|
|
42
|
-
buffer.set(headerBytes,
|
|
80
|
+
buffer.set(headerBytes, WIRE_PREFIX_BYTES);
|
|
43
81
|
if (payload.byteLength > 0) {
|
|
44
|
-
buffer.set(payload,
|
|
82
|
+
buffer.set(payload, WIRE_PREFIX_BYTES + headerBytes.byteLength);
|
|
45
83
|
}
|
|
46
84
|
return buffer;
|
|
47
85
|
}
|
|
48
|
-
export function decodeWireFrame(raw) {
|
|
86
|
+
export function decodeWireFrame(raw, options) {
|
|
49
87
|
const bytes = raw instanceof Uint8Array ? raw : new Uint8Array(raw);
|
|
50
|
-
|
|
51
|
-
|
|
88
|
+
const maxTotal = options?.maxTotalFrameBytes ?? MAX_DECODE_FRAME_BYTES;
|
|
89
|
+
if (bytes.byteLength > maxTotal) {
|
|
90
|
+
throw new ProtocolValidationError(`Wire frame size (${bytes.byteLength} bytes) exceeds limit (${maxTotal} bytes)`, "frame", "MESSAGE_TOO_LARGE");
|
|
91
|
+
}
|
|
92
|
+
if (bytes.byteLength < WIRE_PREFIX_BYTES) {
|
|
93
|
+
throw new ProtocolValidationError(`Wire frame too short (${bytes.byteLength} bytes, minimum ${WIRE_PREFIX_BYTES})`, "frame");
|
|
52
94
|
}
|
|
53
95
|
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
54
96
|
const magic = view.getUint8(0);
|
|
@@ -60,13 +102,20 @@ export function decodeWireFrame(raw) {
|
|
|
60
102
|
throw new ProtocolValidationError(`Unknown wire frame type: 0x${frameType.toString(16)}`, "frameType");
|
|
61
103
|
}
|
|
62
104
|
const headerLength = view.getUint32(2, false);
|
|
63
|
-
if (headerLength > MAX_HEADER_BYTES ||
|
|
105
|
+
if (headerLength === 0 || headerLength > MAX_HEADER_BYTES || WIRE_PREFIX_BYTES + headerLength > bytes.byteLength) {
|
|
64
106
|
throw new ProtocolValidationError(`Invalid wire frame header length: ${headerLength}`, "headerLength");
|
|
65
107
|
}
|
|
66
|
-
const headerSlice = bytes.subarray(
|
|
108
|
+
const headerSlice = bytes.subarray(WIRE_PREFIX_BYTES, WIRE_PREFIX_BYTES + headerLength);
|
|
109
|
+
let headerJson;
|
|
110
|
+
try {
|
|
111
|
+
headerJson = textDecoder.decode(headerSlice);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
throw new ProtocolValidationError("Invalid UTF-8 in wire frame header", "header");
|
|
115
|
+
}
|
|
67
116
|
let header;
|
|
68
117
|
try {
|
|
69
|
-
header = JSON.parse(
|
|
118
|
+
header = JSON.parse(headerJson);
|
|
70
119
|
}
|
|
71
120
|
catch {
|
|
72
121
|
throw new ProtocolValidationError("Malformed JSON in wire frame header", "header");
|
|
@@ -74,10 +123,13 @@ export function decodeWireFrame(raw) {
|
|
|
74
123
|
if (typeof header !== "object" ||
|
|
75
124
|
header === null ||
|
|
76
125
|
typeof header.messageId !== "string" ||
|
|
77
|
-
|
|
126
|
+
header.messageId.length === 0 ||
|
|
127
|
+
typeof header.channel !== "string" ||
|
|
128
|
+
header.channel.length === 0) {
|
|
78
129
|
throw new ProtocolValidationError("Wire frame header missing messageId or channel", "header");
|
|
79
130
|
}
|
|
80
|
-
|
|
131
|
+
validateFrameTypeSpecificHeader(frameType, header);
|
|
132
|
+
const payload = bytes.subarray(WIRE_PREFIX_BYTES + headerLength);
|
|
81
133
|
return {
|
|
82
134
|
frameType,
|
|
83
135
|
header,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framing.js","sourceRoot":"","sources":["../../src/protocol/framing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"framing.js","sourceRoot":"","sources":["../../src/protocol/framing.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dropspace",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "End-to-end encrypted peer-to-peer rooms, resumable file transfers, and Automerge CRDT sync over WebRTC & WebSocket.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "./dist/index.js",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
|
+
"bin": {
|
|
10
|
+
"dropspace": "./dist/cli.js"
|
|
11
|
+
},
|
|
9
12
|
"files": [
|
|
10
13
|
"dist",
|
|
11
14
|
"fixtures",
|
|
@@ -35,7 +38,12 @@
|
|
|
35
38
|
"./fixtures/envelopes.json": "./fixtures/envelopes.json"
|
|
36
39
|
},
|
|
37
40
|
"dependencies": {
|
|
38
|
-
"@automerge/automerge": "^2.2.8"
|
|
41
|
+
"@automerge/automerge": "^2.2.8",
|
|
42
|
+
"ws": "^8.18.0"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/node": "^20.17.0",
|
|
46
|
+
"@types/ws": "^8.5.13"
|
|
39
47
|
},
|
|
40
48
|
"scripts": {
|
|
41
49
|
"build": "tsc -p tsconfig.json",
|