@sideband/secure-relay 0.2.1 → 0.2.3
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/README.md +27 -8
- package/dist/.tsbuildinfo +1 -0
- package/dist/constants.d.ts +49 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +51 -0
- package/dist/constants.js.map +1 -0
- package/dist/crypto.d.ts +70 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +144 -0
- package/dist/crypto.js.map +1 -0
- package/dist/frame.d.ts +213 -0
- package/dist/frame.d.ts.map +1 -0
- package/dist/frame.js +547 -0
- package/dist/frame.js.map +1 -0
- package/dist/handshake.d.ts +39 -0
- package/dist/handshake.d.ts.map +1 -0
- package/dist/handshake.js +93 -0
- package/dist/handshake.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/replay.d.ts +32 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/replay.js +88 -0
- package/dist/replay.js.map +1 -0
- package/dist/session.d.ts +67 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +122 -0
- package/dist/session.js.map +1 -0
- package/dist/types.d.ts +119 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +80 -0
- package/dist/types.js.map +1 -0
- package/package.json +4 -4
- package/src/constants.ts +3 -3
- package/src/crypto.test.ts +5 -5
- package/src/crypto.ts +9 -9
- package/src/frame.test.ts +59 -10
- package/src/frame.ts +101 -77
- package/src/handshake.test.ts +29 -41
- package/src/handshake.ts +25 -27
- package/src/index.ts +4 -10
- package/src/integration.test.ts +97 -138
- package/src/session.test.ts +12 -10
- package/src/types.ts +1 -12
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
|
package/dist/frame.d.ts
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import type { EncryptedMessage, HandshakeAccept, HandshakeInit, SessionId } from "./types.js";
|
|
2
|
+
import { SbrpErrorCode, SignalCode, SignalReason } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Frame type discriminant (wire byte).
|
|
5
|
+
*
|
|
6
|
+
* Frame types are organized by authority:
|
|
7
|
+
* - Endpoint frames (0x01-0x03): Forwarded by relay, E2EE
|
|
8
|
+
* - Signal frame (0x04): Daemon → Relay only
|
|
9
|
+
* - Keepalive frames (0x10-0x11): Connection-scoped, never forwarded
|
|
10
|
+
* - Control frame (0x20): Relay → Endpoint only
|
|
11
|
+
*/
|
|
12
|
+
export declare const FrameType: {
|
|
13
|
+
readonly HandshakeInit: 1;
|
|
14
|
+
readonly HandshakeAccept: 2;
|
|
15
|
+
readonly Data: 3;
|
|
16
|
+
readonly Signal: 4;
|
|
17
|
+
readonly Ping: 16;
|
|
18
|
+
readonly Pong: 17;
|
|
19
|
+
readonly Control: 32;
|
|
20
|
+
};
|
|
21
|
+
export type FrameType = (typeof FrameType)[keyof typeof FrameType];
|
|
22
|
+
/**
|
|
23
|
+
* Wire control codes (uint16, §14).
|
|
24
|
+
*
|
|
25
|
+
* Codes use ranges for categorization:
|
|
26
|
+
* - 0x01xx: Authentication (terminal)
|
|
27
|
+
* - 0x02xx: Routing (varies)
|
|
28
|
+
* - 0x03xx: Session (terminal)
|
|
29
|
+
* - 0x04xx: Wire format (terminal)
|
|
30
|
+
* - 0x09xx: Rate limiting (non-terminal)
|
|
31
|
+
* - 0x10xx: Session state (non-terminal)
|
|
32
|
+
*/
|
|
33
|
+
export declare const WireControlCode: {
|
|
34
|
+
readonly Unauthorized: 257;
|
|
35
|
+
readonly Forbidden: 258;
|
|
36
|
+
readonly DaemonNotFound: 513;
|
|
37
|
+
readonly DaemonOffline: 514;
|
|
38
|
+
readonly SessionNotFound: 769;
|
|
39
|
+
readonly SessionExpired: 770;
|
|
40
|
+
readonly MalformedFrame: 1025;
|
|
41
|
+
readonly PayloadTooLarge: 1026;
|
|
42
|
+
readonly InvalidFrameType: 1027;
|
|
43
|
+
readonly InvalidSessionId: 1028;
|
|
44
|
+
readonly DisallowedSender: 1029;
|
|
45
|
+
readonly InternalError: 1537;
|
|
46
|
+
readonly RateLimited: 2305;
|
|
47
|
+
readonly SessionPaused: 4097;
|
|
48
|
+
readonly SessionResumed: 4098;
|
|
49
|
+
readonly SessionEnded: 4099;
|
|
50
|
+
readonly SessionPending: 4100;
|
|
51
|
+
};
|
|
52
|
+
export type WireControlCode = (typeof WireControlCode)[keyof typeof WireControlCode];
|
|
53
|
+
/** Check if a control code is terminal (closes connection) */
|
|
54
|
+
export declare function isTerminalCode(code: WireControlCode): boolean;
|
|
55
|
+
/** Decoded frame header */
|
|
56
|
+
export interface FrameHeader {
|
|
57
|
+
type: FrameType;
|
|
58
|
+
length: number;
|
|
59
|
+
sessionId: SessionId;
|
|
60
|
+
}
|
|
61
|
+
/** Decoded frame (header + payload) */
|
|
62
|
+
export interface Frame extends FrameHeader {
|
|
63
|
+
payload: Uint8Array;
|
|
64
|
+
}
|
|
65
|
+
/** Decoded Control frame payload */
|
|
66
|
+
export interface ControlPayload {
|
|
67
|
+
code: WireControlCode;
|
|
68
|
+
message: string;
|
|
69
|
+
}
|
|
70
|
+
/** Decoded Signal frame payload */
|
|
71
|
+
export interface SignalPayload {
|
|
72
|
+
signal: SignalCode;
|
|
73
|
+
reason: SignalReason;
|
|
74
|
+
}
|
|
75
|
+
/** Convert SbrpErrorCode to wire format (for relay-transmittable codes only) */
|
|
76
|
+
export declare function toWireControlCode(code: SbrpErrorCode): WireControlCode;
|
|
77
|
+
/** Convert wire control code to SbrpErrorCode */
|
|
78
|
+
export declare function fromWireControlCode(code: WireControlCode): SbrpErrorCode;
|
|
79
|
+
/**
|
|
80
|
+
* Encode a frame to binary wire format.
|
|
81
|
+
*
|
|
82
|
+
* @throws {SbrpError} if payload exceeds MAX_PAYLOAD_SIZE or sessionId is invalid
|
|
83
|
+
*/
|
|
84
|
+
export declare function encodeFrame(type: FrameType, sessionId: SessionId, payload: Uint8Array): Uint8Array;
|
|
85
|
+
/**
|
|
86
|
+
* Read frame header without decoding payload.
|
|
87
|
+
* Useful for routing decisions before full decode.
|
|
88
|
+
*
|
|
89
|
+
* Validates wire format constraints including non-zero sessionId
|
|
90
|
+
* for session-bound frames (§13.2).
|
|
91
|
+
*
|
|
92
|
+
* @throws {SbrpError} if buffer is too short, length exceeds max, or sessionId invalid
|
|
93
|
+
*/
|
|
94
|
+
export declare function readFrameHeader(data: Uint8Array): FrameHeader;
|
|
95
|
+
/**
|
|
96
|
+
* Decode a complete frame from binary data.
|
|
97
|
+
*
|
|
98
|
+
* Rejects trailing bytes to catch framing mistakes. Use `FrameDecoder`
|
|
99
|
+
* for streaming scenarios with multiple frames per buffer.
|
|
100
|
+
*
|
|
101
|
+
* @throws {SbrpError} if frame is malformed or has trailing bytes
|
|
102
|
+
*/
|
|
103
|
+
export declare function decodeFrame(data: Uint8Array): Frame;
|
|
104
|
+
/**
|
|
105
|
+
* Encode HandshakeInit to wire frame.
|
|
106
|
+
*
|
|
107
|
+
* @throws {SbrpError} if initPublicKey is not exactly 32 bytes or sessionId is invalid
|
|
108
|
+
*/
|
|
109
|
+
export declare function encodeHandshakeInit(sessionId: SessionId, init: HandshakeInit): Uint8Array;
|
|
110
|
+
/**
|
|
111
|
+
* Encode HandshakeAccept to wire frame.
|
|
112
|
+
*
|
|
113
|
+
* Wire layout (128 bytes): identityPublicKey(32) + acceptPublicKey(32) + signature(64)
|
|
114
|
+
*
|
|
115
|
+
* @throws {SbrpError} if field sizes are wrong or sessionId is invalid
|
|
116
|
+
*/
|
|
117
|
+
export declare function encodeHandshakeAccept(sessionId: SessionId, accept: HandshakeAccept): Uint8Array;
|
|
118
|
+
/**
|
|
119
|
+
* Encode Data frame (encrypted message).
|
|
120
|
+
*
|
|
121
|
+
* @throws {SbrpError} if data is too short (< nonce + authTag) or sessionId is invalid
|
|
122
|
+
*/
|
|
123
|
+
export declare function encodeData(sessionId: SessionId, message: EncryptedMessage): Uint8Array;
|
|
124
|
+
/**
|
|
125
|
+
* Encode Signal frame (daemon → relay).
|
|
126
|
+
*
|
|
127
|
+
* @param sessionId Session being signaled
|
|
128
|
+
* @param signal Signal code (ready or close)
|
|
129
|
+
* @param reason Reason code (for close signal)
|
|
130
|
+
*/
|
|
131
|
+
export declare function encodeSignal(sessionId: SessionId, signal: SignalCode, reason?: SignalReason): Uint8Array;
|
|
132
|
+
/**
|
|
133
|
+
* Encode Ping frame (connection-scoped keepalive).
|
|
134
|
+
*
|
|
135
|
+
* @param payload Optional 0-8 byte payload for RTT measurement
|
|
136
|
+
*/
|
|
137
|
+
export declare function encodePing(payload?: Uint8Array): Uint8Array;
|
|
138
|
+
/**
|
|
139
|
+
* Encode Pong frame (connection-scoped keepalive response).
|
|
140
|
+
*
|
|
141
|
+
* @param payload Payload from corresponding Ping (must be copied)
|
|
142
|
+
*/
|
|
143
|
+
export declare function encodePong(payload?: Uint8Array): Uint8Array;
|
|
144
|
+
/**
|
|
145
|
+
* Encode Control frame (relay → endpoint).
|
|
146
|
+
*
|
|
147
|
+
* @param sessionId Session ID (non-zero for session events, 0 for connection errors)
|
|
148
|
+
* @param code Control code from WireControlCode
|
|
149
|
+
* @param message Optional diagnostic message (for errors only)
|
|
150
|
+
*/
|
|
151
|
+
export declare function encodeControl(sessionId: SessionId, code: WireControlCode, message?: string): Uint8Array;
|
|
152
|
+
/**
|
|
153
|
+
* Decode HandshakeInit from frame.
|
|
154
|
+
*
|
|
155
|
+
* @throws {SbrpError} if frame type or payload size is invalid
|
|
156
|
+
*/
|
|
157
|
+
export declare function decodeHandshakeInit(frame: Frame): HandshakeInit;
|
|
158
|
+
/**
|
|
159
|
+
* Decode HandshakeAccept from frame.
|
|
160
|
+
*
|
|
161
|
+
* Wire layout (128 bytes): identityPublicKey(32) + acceptPublicKey(32) + signature(64)
|
|
162
|
+
*
|
|
163
|
+
* @throws {SbrpError} if frame type or payload size is invalid
|
|
164
|
+
*/
|
|
165
|
+
export declare function decodeHandshakeAccept(frame: Frame): HandshakeAccept;
|
|
166
|
+
/**
|
|
167
|
+
* Decode Data frame (encrypted message).
|
|
168
|
+
*
|
|
169
|
+
* @throws {SbrpError} if frame type or payload is invalid
|
|
170
|
+
*/
|
|
171
|
+
export declare function decodeData(frame: Frame): EncryptedMessage;
|
|
172
|
+
/**
|
|
173
|
+
* Decode Signal frame (daemon → relay).
|
|
174
|
+
*
|
|
175
|
+
* @throws {SbrpError} if frame type, payload size, or signal values are invalid
|
|
176
|
+
*/
|
|
177
|
+
export declare function decodeSignal(frame: Frame): SignalPayload;
|
|
178
|
+
/**
|
|
179
|
+
* Decode Control frame (relay → endpoint).
|
|
180
|
+
*
|
|
181
|
+
* Invalid UTF-8 sequences in message are replaced with U+FFFD.
|
|
182
|
+
*
|
|
183
|
+
* @throws {SbrpError} if frame type or payload is invalid
|
|
184
|
+
*/
|
|
185
|
+
export declare function decodeControl(frame: Frame): ControlPayload;
|
|
186
|
+
/**
|
|
187
|
+
* Streaming frame decoder for incremental parsing.
|
|
188
|
+
*
|
|
189
|
+
* Accumulates bytes and yields complete frames. Useful when frames
|
|
190
|
+
* may be fragmented across WebSocket messages or TCP reads.
|
|
191
|
+
*
|
|
192
|
+
* @example
|
|
193
|
+
* ```typescript
|
|
194
|
+
* const decoder = new FrameDecoder();
|
|
195
|
+
* ws.on("message", (data) => {
|
|
196
|
+
* for (const frame of decoder.push(data)) {
|
|
197
|
+
* handleFrame(frame);
|
|
198
|
+
* }
|
|
199
|
+
* });
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
202
|
+
export declare class FrameDecoder {
|
|
203
|
+
private buffer;
|
|
204
|
+
/**
|
|
205
|
+
* Push data and yield any complete frames.
|
|
206
|
+
*/
|
|
207
|
+
push(data: Uint8Array): Generator<Frame>;
|
|
208
|
+
/** Reset decoder state, discarding any buffered data */
|
|
209
|
+
reset(): void;
|
|
210
|
+
/** Number of bytes currently buffered */
|
|
211
|
+
get bufferedBytes(): number;
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"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"}
|