nlcurl 0.1.0 → 0.2.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/README.md +5 -13
- package/dist/cli/args.d.ts +37 -5
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +6 -17
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/index.d.ts +3 -3
- package/dist/cli/index.js +25 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/output.d.ts +24 -7
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +24 -12
- package/dist/cli/output.js.map +1 -1
- package/dist/cookies/jar.d.ts +45 -13
- package/dist/cookies/jar.d.ts.map +1 -1
- package/dist/cookies/jar.js +88 -29
- package/dist/cookies/jar.js.map +1 -1
- package/dist/cookies/parser.d.ts +25 -3
- package/dist/cookies/parser.d.ts.map +1 -1
- package/dist/cookies/parser.js +12 -7
- package/dist/cookies/parser.js.map +1 -1
- package/dist/core/client.d.ts +49 -33
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +64 -38
- package/dist/core/client.js.map +1 -1
- package/dist/core/errors.d.ts +94 -6
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +95 -6
- package/dist/core/errors.js.map +1 -1
- package/dist/core/request.d.ts +96 -30
- package/dist/core/request.d.ts.map +1 -1
- package/dist/core/request.js +0 -3
- package/dist/core/request.js.map +1 -1
- package/dist/core/response.d.ts +92 -8
- package/dist/core/response.d.ts.map +1 -1
- package/dist/core/response.js +92 -7
- package/dist/core/response.js.map +1 -1
- package/dist/core/session.d.ts +109 -14
- package/dist/core/session.d.ts.map +1 -1
- package/dist/core/session.js +124 -46
- package/dist/core/session.js.map +1 -1
- package/dist/fingerprints/akamai.d.ts +11 -11
- package/dist/fingerprints/akamai.d.ts.map +1 -1
- package/dist/fingerprints/akamai.js +10 -14
- package/dist/fingerprints/akamai.js.map +1 -1
- package/dist/fingerprints/database.d.ts +14 -15
- package/dist/fingerprints/database.d.ts.map +1 -1
- package/dist/fingerprints/database.js +14 -19
- package/dist/fingerprints/database.js.map +1 -1
- package/dist/fingerprints/extensions.d.ts +121 -27
- package/dist/fingerprints/extensions.d.ts.map +1 -1
- package/dist/fingerprints/extensions.js +132 -49
- package/dist/fingerprints/extensions.js.map +1 -1
- package/dist/fingerprints/ja3.d.ts +34 -18
- package/dist/fingerprints/ja3.d.ts.map +1 -1
- package/dist/fingerprints/ja3.js +34 -18
- package/dist/fingerprints/ja3.js.map +1 -1
- package/dist/fingerprints/profiles/chrome.d.ts +21 -10
- package/dist/fingerprints/profiles/chrome.d.ts.map +1 -1
- package/dist/fingerprints/profiles/chrome.js +25 -22
- package/dist/fingerprints/profiles/chrome.js.map +1 -1
- package/dist/fingerprints/profiles/edge.d.ts +10 -7
- package/dist/fingerprints/profiles/edge.d.ts.map +1 -1
- package/dist/fingerprints/profiles/edge.js +10 -10
- package/dist/fingerprints/profiles/edge.js.map +1 -1
- package/dist/fingerprints/profiles/firefox.d.ts +11 -3
- package/dist/fingerprints/profiles/firefox.d.ts.map +1 -1
- package/dist/fingerprints/profiles/firefox.js +15 -14
- package/dist/fingerprints/profiles/firefox.js.map +1 -1
- package/dist/fingerprints/profiles/safari.d.ts +14 -3
- package/dist/fingerprints/profiles/safari.d.ts.map +1 -1
- package/dist/fingerprints/profiles/safari.js +16 -13
- package/dist/fingerprints/profiles/safari.js.map +1 -1
- package/dist/fingerprints/profiles/tor.d.ts +8 -7
- package/dist/fingerprints/profiles/tor.d.ts.map +1 -1
- package/dist/fingerprints/profiles/tor.js +8 -14
- package/dist/fingerprints/profiles/tor.js.map +1 -1
- package/dist/fingerprints/types.d.ts +70 -47
- package/dist/fingerprints/types.d.ts.map +1 -1
- package/dist/fingerprints/types.js +0 -7
- package/dist/fingerprints/types.js.map +1 -1
- package/dist/http/h1/client.d.ts +30 -9
- package/dist/http/h1/client.d.ts.map +1 -1
- package/dist/http/h1/client.js +152 -15
- package/dist/http/h1/client.js.map +1 -1
- package/dist/http/h1/encoder.d.ts +9 -6
- package/dist/http/h1/encoder.d.ts.map +1 -1
- package/dist/http/h1/encoder.js +8 -12
- package/dist/http/h1/encoder.js.map +1 -1
- package/dist/http/h1/parser.d.ts +68 -14
- package/dist/http/h1/parser.d.ts.map +1 -1
- package/dist/http/h1/parser.js +92 -37
- package/dist/http/h1/parser.js.map +1 -1
- package/dist/http/h2/client.d.ts +81 -14
- package/dist/http/h2/client.d.ts.map +1 -1
- package/dist/http/h2/client.js +465 -63
- package/dist/http/h2/client.js.map +1 -1
- package/dist/http/h2/frames.d.ts +103 -6
- package/dist/http/h2/frames.d.ts.map +1 -1
- package/dist/http/h2/frames.js +96 -17
- package/dist/http/h2/frames.js.map +1 -1
- package/dist/http/h2/hpack.d.ts +30 -5
- package/dist/http/h2/hpack.d.ts.map +1 -1
- package/dist/http/h2/hpack.js +39 -35
- package/dist/http/h2/hpack.js.map +1 -1
- package/dist/http/negotiator.d.ts +35 -12
- package/dist/http/negotiator.d.ts.map +1 -1
- package/dist/http/negotiator.js +89 -24
- package/dist/http/negotiator.js.map +1 -1
- package/dist/http/pool.d.ts +66 -17
- package/dist/http/pool.d.ts.map +1 -1
- package/dist/http/pool.js +47 -20
- package/dist/http/pool.js.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -13
- package/dist/index.js.map +1 -1
- package/dist/middleware/interceptor.d.ts +40 -8
- package/dist/middleware/interceptor.d.ts.map +1 -1
- package/dist/middleware/interceptor.js +28 -6
- package/dist/middleware/interceptor.js.map +1 -1
- package/dist/middleware/rate-limiter.d.ts +18 -5
- package/dist/middleware/rate-limiter.d.ts.map +1 -1
- package/dist/middleware/rate-limiter.js +12 -7
- package/dist/middleware/rate-limiter.js.map +1 -1
- package/dist/middleware/retry.d.ts +17 -5
- package/dist/middleware/retry.d.ts.map +1 -1
- package/dist/middleware/retry.js +13 -11
- package/dist/middleware/retry.js.map +1 -1
- package/dist/proxy/http-proxy.d.ts +17 -9
- package/dist/proxy/http-proxy.d.ts.map +1 -1
- package/dist/proxy/http-proxy.js +9 -13
- package/dist/proxy/http-proxy.js.map +1 -1
- package/dist/proxy/socks.d.ts +20 -9
- package/dist/proxy/socks.d.ts.map +1 -1
- package/dist/proxy/socks.js +20 -31
- package/dist/proxy/socks.js.map +1 -1
- package/dist/tls/constants.d.ts +74 -4
- package/dist/tls/constants.d.ts.map +1 -1
- package/dist/tls/constants.js +75 -21
- package/dist/tls/constants.js.map +1 -1
- package/dist/tls/node-engine.d.ts +17 -16
- package/dist/tls/node-engine.d.ts.map +1 -1
- package/dist/tls/node-engine.js +20 -27
- package/dist/tls/node-engine.js.map +1 -1
- package/dist/tls/stealth/client-hello.d.ts +32 -16
- package/dist/tls/stealth/client-hello.d.ts.map +1 -1
- package/dist/tls/stealth/client-hello.js +13 -37
- package/dist/tls/stealth/client-hello.js.map +1 -1
- package/dist/tls/stealth/engine.d.ts +18 -10
- package/dist/tls/stealth/engine.d.ts.map +1 -1
- package/dist/tls/stealth/engine.js +18 -24
- package/dist/tls/stealth/engine.js.map +1 -1
- package/dist/tls/stealth/handshake.d.ts +31 -17
- package/dist/tls/stealth/handshake.d.ts.map +1 -1
- package/dist/tls/stealth/handshake.js +173 -74
- package/dist/tls/stealth/handshake.js.map +1 -1
- package/dist/tls/stealth/key-schedule.d.ts +89 -32
- package/dist/tls/stealth/key-schedule.d.ts.map +1 -1
- package/dist/tls/stealth/key-schedule.js +62 -42
- package/dist/tls/stealth/key-schedule.js.map +1 -1
- package/dist/tls/stealth/record-layer.d.ts +76 -25
- package/dist/tls/stealth/record-layer.d.ts.map +1 -1
- package/dist/tls/stealth/record-layer.js +66 -36
- package/dist/tls/stealth/record-layer.js.map +1 -1
- package/dist/tls/types.d.ts +33 -25
- package/dist/tls/types.d.ts.map +1 -1
- package/dist/tls/types.js +0 -4
- package/dist/tls/types.js.map +1 -1
- package/dist/utils/buffer-reader.d.ts +99 -7
- package/dist/utils/buffer-reader.d.ts.map +1 -1
- package/dist/utils/buffer-reader.js +99 -7
- package/dist/utils/buffer-reader.js.map +1 -1
- package/dist/utils/buffer-writer.d.ts +99 -10
- package/dist/utils/buffer-writer.d.ts.map +1 -1
- package/dist/utils/buffer-writer.js +101 -12
- package/dist/utils/buffer-writer.js.map +1 -1
- package/dist/utils/encoding.d.ts +33 -8
- package/dist/utils/encoding.d.ts.map +1 -1
- package/dist/utils/encoding.js +58 -13
- package/dist/utils/encoding.js.map +1 -1
- package/dist/utils/logger.d.ts +61 -2
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +52 -4
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/url.d.ts +47 -7
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +47 -7
- package/dist/utils/url.js.map +1 -1
- package/dist/ws/client.d.ts +59 -15
- package/dist/ws/client.d.ts.map +1 -1
- package/dist/ws/client.js +34 -27
- package/dist/ws/client.js.map +1 -1
- package/dist/ws/frame.d.ts +43 -9
- package/dist/ws/frame.d.ts.map +1 -1
- package/dist/ws/frame.js +35 -19
- package/dist/ws/frame.js.map +1 -1
- package/package.json +2 -2
package/dist/ws/frame.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* WebSocket frame
|
|
2
|
+
* WebSocket frame opcode values as defined in RFC 6455 §5.2.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* @enum {number}
|
|
5
5
|
*/
|
|
6
6
|
export declare const enum Opcode {
|
|
7
7
|
CONTINUATION = 0,
|
|
@@ -11,6 +11,15 @@ export declare const enum Opcode {
|
|
|
11
11
|
PING = 9,
|
|
12
12
|
PONG = 10
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* A parsed WebSocket frame.
|
|
16
|
+
*
|
|
17
|
+
* @typedef {Object} WebSocketFrame
|
|
18
|
+
* @property {boolean} fin - Whether the FIN bit is set (final fragment).
|
|
19
|
+
* @property {Opcode} opcode - Frame opcode.
|
|
20
|
+
* @property {boolean} masked - Whether the payload is masked.
|
|
21
|
+
* @property {Buffer} payload - Unmasked payload bytes.
|
|
22
|
+
*/
|
|
14
23
|
export interface WebSocketFrame {
|
|
15
24
|
fin: boolean;
|
|
16
25
|
opcode: Opcode;
|
|
@@ -18,27 +27,52 @@ export interface WebSocketFrame {
|
|
|
18
27
|
payload: Buffer;
|
|
19
28
|
}
|
|
20
29
|
/**
|
|
21
|
-
*
|
|
30
|
+
* Encodes a WebSocket frame into a `Buffer` ready to be written to a socket.
|
|
31
|
+
* The payload is masked by default using a cryptographically random 4-byte key
|
|
32
|
+
* as required by RFC 6455 for client-to-server frames.
|
|
22
33
|
*
|
|
23
|
-
*
|
|
34
|
+
* @param {Opcode} opcode - Frame opcode.
|
|
35
|
+
* @param {Buffer} payload - Frame payload.
|
|
36
|
+
* @param {boolean} [mask=true] - Whether to mask the payload.
|
|
37
|
+
* @returns {Buffer} Encoded frame bytes.
|
|
24
38
|
*/
|
|
25
39
|
export declare function encodeFrame(opcode: Opcode, payload: Buffer, mask?: boolean): Buffer;
|
|
26
40
|
/**
|
|
27
|
-
* Incremental WebSocket frame parser.
|
|
28
|
-
*
|
|
29
|
-
*
|
|
41
|
+
* Incremental WebSocket frame parser. Feed incoming data with
|
|
42
|
+
* {@link FrameParser.push} and retrieve complete frames via
|
|
43
|
+
* {@link FrameParser.pull}.
|
|
30
44
|
*/
|
|
31
45
|
export declare class FrameParser {
|
|
32
46
|
private buffer;
|
|
47
|
+
/**
|
|
48
|
+
* Appends `data` to the internal buffer.
|
|
49
|
+
*
|
|
50
|
+
* @param {Buffer} data - Bytes received from the transport socket.
|
|
51
|
+
*/
|
|
33
52
|
push(data: Buffer): void;
|
|
53
|
+
/**
|
|
54
|
+
* Attempts to parse and return one complete WebSocket frame from the
|
|
55
|
+
* internal buffer. If a complete frame is available, it is removed from
|
|
56
|
+
* the buffer and returned. Returns `null` when more data is needed.
|
|
57
|
+
*
|
|
58
|
+
* @returns {WebSocketFrame | null} Parsed frame, or `null` if incomplete.
|
|
59
|
+
* @throws {Error} If a frame payload exceeds the 128 MiB hard limit.
|
|
60
|
+
*/
|
|
34
61
|
pull(): WebSocketFrame | null;
|
|
35
62
|
}
|
|
36
63
|
/**
|
|
37
|
-
*
|
|
64
|
+
* Generates a cryptographically random WebSocket handshake key.
|
|
65
|
+
* The key is 16 random bytes encoded as Base64, as required by RFC 6455 §4.1.
|
|
66
|
+
*
|
|
67
|
+
* @returns {string} Base64-encoded 16-byte random key.
|
|
38
68
|
*/
|
|
39
69
|
export declare function generateWebSocketKey(): string;
|
|
40
70
|
/**
|
|
41
|
-
*
|
|
71
|
+
* Computes the expected `Sec-WebSocket-Accept` header value for the given
|
|
72
|
+
* `Sec-WebSocket-Key` using the algorithm defined in RFC 6455 §4.2.2.
|
|
73
|
+
*
|
|
74
|
+
* @param {string} key - The `Sec-WebSocket-Key` value from the upgrade request.
|
|
75
|
+
* @returns {string} Base64-encoded SHA-1 digest of the key concatenated with the GUID.
|
|
42
76
|
*/
|
|
43
77
|
export declare function computeAcceptKey(key: string): string;
|
|
44
78
|
//# sourceMappingURL=frame.d.ts.map
|
package/dist/ws/frame.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/ws/frame.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/ws/frame.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,0BAAkB,MAAM;IACtB,YAAY,IAAM;IAClB,IAAI,IAAM;IACV,MAAM,IAAM;IACZ,KAAK,IAAM;IACX,IAAI,IAAM;IACV,IAAI,KAAM;CACX;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,UAAO,GAAG,MAAM,CA8ChF;AAED;;;;GAIG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAmB;IAEjC;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxB;;;;;;;OAOG;IACH,IAAI,IAAI,cAAc,GAAG,IAAI;CAiD9B;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKpD"}
|
package/dist/ws/frame.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
+
import * as crypto from 'node:crypto';
|
|
1
2
|
/**
|
|
2
|
-
* WebSocket frame
|
|
3
|
+
* WebSocket frame opcode values as defined in RFC 6455 §5.2.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
+
* @enum {number}
|
|
5
6
|
*/
|
|
6
|
-
import * as crypto from 'node:crypto';
|
|
7
|
-
// ---- Opcodes ----
|
|
8
7
|
export var Opcode;
|
|
9
8
|
(function (Opcode) {
|
|
10
9
|
Opcode[Opcode["CONTINUATION"] = 0] = "CONTINUATION";
|
|
@@ -15,9 +14,14 @@ export var Opcode;
|
|
|
15
14
|
Opcode[Opcode["PONG"] = 10] = "PONG";
|
|
16
15
|
})(Opcode || (Opcode = {}));
|
|
17
16
|
/**
|
|
18
|
-
*
|
|
17
|
+
* Encodes a WebSocket frame into a `Buffer` ready to be written to a socket.
|
|
18
|
+
* The payload is masked by default using a cryptographically random 4-byte key
|
|
19
|
+
* as required by RFC 6455 for client-to-server frames.
|
|
19
20
|
*
|
|
20
|
-
*
|
|
21
|
+
* @param {Opcode} opcode - Frame opcode.
|
|
22
|
+
* @param {Buffer} payload - Frame payload.
|
|
23
|
+
* @param {boolean} [mask=true] - Whether to mask the payload.
|
|
24
|
+
* @returns {Buffer} Encoded frame bytes.
|
|
21
25
|
*/
|
|
22
26
|
export function encodeFrame(opcode, payload, mask = true) {
|
|
23
27
|
const payloadLen = payload.length;
|
|
@@ -33,14 +37,11 @@ export function encodeFrame(opcode, payload, mask = true) {
|
|
|
33
37
|
if (mask)
|
|
34
38
|
headerLen += 4;
|
|
35
39
|
const frame = Buffer.allocUnsafe(headerLen + payloadLen);
|
|
36
|
-
// Byte 0: FIN + opcode
|
|
37
40
|
frame[0] = 0x80 | opcode;
|
|
38
|
-
// Byte 1: MASK + payload length
|
|
39
41
|
let offset = 1;
|
|
40
42
|
if (payloadLen > 65535) {
|
|
41
43
|
frame[offset] = (mask ? 0x80 : 0) | 127;
|
|
42
44
|
offset++;
|
|
43
|
-
// 8-byte extended payload length (big-endian)
|
|
44
45
|
frame.writeBigUInt64BE(BigInt(payloadLen), offset);
|
|
45
46
|
offset += 8;
|
|
46
47
|
}
|
|
@@ -54,11 +55,9 @@ export function encodeFrame(opcode, payload, mask = true) {
|
|
|
54
55
|
frame[offset] = (mask ? 0x80 : 0) | payloadLen;
|
|
55
56
|
offset++;
|
|
56
57
|
}
|
|
57
|
-
// Mask key
|
|
58
58
|
if (maskKey) {
|
|
59
59
|
maskKey.copy(frame, offset);
|
|
60
60
|
offset += 4;
|
|
61
|
-
// Mask the payload
|
|
62
61
|
for (let i = 0; i < payloadLen; i++) {
|
|
63
62
|
frame[offset + i] = payload[i] ^ maskKey[i & 3];
|
|
64
63
|
}
|
|
@@ -69,15 +68,28 @@ export function encodeFrame(opcode, payload, mask = true) {
|
|
|
69
68
|
return frame;
|
|
70
69
|
}
|
|
71
70
|
/**
|
|
72
|
-
* Incremental WebSocket frame parser.
|
|
73
|
-
*
|
|
74
|
-
*
|
|
71
|
+
* Incremental WebSocket frame parser. Feed incoming data with
|
|
72
|
+
* {@link FrameParser.push} and retrieve complete frames via
|
|
73
|
+
* {@link FrameParser.pull}.
|
|
75
74
|
*/
|
|
76
75
|
export class FrameParser {
|
|
77
76
|
buffer = Buffer.alloc(0);
|
|
77
|
+
/**
|
|
78
|
+
* Appends `data` to the internal buffer.
|
|
79
|
+
*
|
|
80
|
+
* @param {Buffer} data - Bytes received from the transport socket.
|
|
81
|
+
*/
|
|
78
82
|
push(data) {
|
|
79
83
|
this.buffer = Buffer.concat([this.buffer, data]);
|
|
80
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Attempts to parse and return one complete WebSocket frame from the
|
|
87
|
+
* internal buffer. If a complete frame is available, it is removed from
|
|
88
|
+
* the buffer and returned. Returns `null` when more data is needed.
|
|
89
|
+
*
|
|
90
|
+
* @returns {WebSocketFrame | null} Parsed frame, or `null` if incomplete.
|
|
91
|
+
* @throws {Error} If a frame payload exceeds the 128 MiB hard limit.
|
|
92
|
+
*/
|
|
81
93
|
pull() {
|
|
82
94
|
if (this.buffer.length < 2)
|
|
83
95
|
return null;
|
|
@@ -98,7 +110,6 @@ export class FrameParser {
|
|
|
98
110
|
if (this.buffer.length < 10)
|
|
99
111
|
return null;
|
|
100
112
|
const len64 = this.buffer.readBigUInt64BE(2);
|
|
101
|
-
// Guard against unreasonably large frames (128 MB)
|
|
102
113
|
if (len64 > 128n * 1024n * 1024n) {
|
|
103
114
|
throw new Error('WebSocket frame too large');
|
|
104
115
|
}
|
|
@@ -116,26 +127,31 @@ export class FrameParser {
|
|
|
116
127
|
if (this.buffer.length < totalLen)
|
|
117
128
|
return null;
|
|
118
129
|
let payload = this.buffer.subarray(offset, totalLen);
|
|
119
|
-
// Unmask
|
|
120
130
|
if (maskKey) {
|
|
121
131
|
payload = Buffer.from(payload);
|
|
122
132
|
for (let i = 0; i < payload.length; i++) {
|
|
123
133
|
payload[i] = payload[i] ^ maskKey[i & 3];
|
|
124
134
|
}
|
|
125
135
|
}
|
|
126
|
-
// Advance buffer
|
|
127
136
|
this.buffer = this.buffer.subarray(totalLen);
|
|
128
137
|
return { fin, opcode, masked, payload };
|
|
129
138
|
}
|
|
130
139
|
}
|
|
131
140
|
/**
|
|
132
|
-
*
|
|
141
|
+
* Generates a cryptographically random WebSocket handshake key.
|
|
142
|
+
* The key is 16 random bytes encoded as Base64, as required by RFC 6455 §4.1.
|
|
143
|
+
*
|
|
144
|
+
* @returns {string} Base64-encoded 16-byte random key.
|
|
133
145
|
*/
|
|
134
146
|
export function generateWebSocketKey() {
|
|
135
147
|
return crypto.randomBytes(16).toString('base64');
|
|
136
148
|
}
|
|
137
149
|
/**
|
|
138
|
-
*
|
|
150
|
+
* Computes the expected `Sec-WebSocket-Accept` header value for the given
|
|
151
|
+
* `Sec-WebSocket-Key` using the algorithm defined in RFC 6455 §4.2.2.
|
|
152
|
+
*
|
|
153
|
+
* @param {string} key - The `Sec-WebSocket-Key` value from the upgrade request.
|
|
154
|
+
* @returns {string} Base64-encoded SHA-1 digest of the key concatenated with the GUID.
|
|
139
155
|
*/
|
|
140
156
|
export function computeAcceptKey(key) {
|
|
141
157
|
return crypto
|
package/dist/ws/frame.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/ws/frame.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/ws/frame.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC;;;;GAIG;AACH,MAAM,CAAN,IAAkB,MAOjB;AAPD,WAAkB,MAAM;IACtB,mDAAkB,CAAA;IAClB,mCAAU,CAAA;IACV,uCAAY,CAAA;IACZ,qCAAW,CAAA;IACX,mCAAU,CAAA;IACV,oCAAU,CAAA;AACZ,CAAC,EAPiB,MAAM,KAAN,MAAM,QAOvB;AAkBD;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,OAAe,EAAE,IAAI,GAAG,IAAI;IACtE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAClC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,qBAAqB,GAAG,CAAC,CAAC;IAE9B,IAAI,UAAU,GAAG,KAAK,EAAE,CAAC;QACvB,SAAS,IAAI,CAAC,CAAC;IACjB,CAAC;SAAM,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QAC5B,SAAS,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,IAAI,IAAI;QAAE,SAAS,IAAI,CAAC,CAAC;IAEzB,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC;IAEzD,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC;IAEzB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,UAAU,GAAG,KAAK,EAAE,CAAC;QACvB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACxC,MAAM,EAAE,CAAC;QACT,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;SAAM,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QAC5B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACxC,MAAM,EAAE,CAAC;QACT,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;QAC/C,MAAM,EAAE,CAAC;IACX,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5B,MAAM,IAAI,CAAC,CAAC;QAEZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QACpD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjC;;;;OAIG;IACH,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAED;;;;;;;OAOG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAExC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;QAE9B,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,CAAW,CAAC;QACxC,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC;QAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YACxC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,GAAG,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE;gBAAE,OAAO,IAAI,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YACD,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;QAED,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YACjD,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;YACnD,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;QACrC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE/C,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAErD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE7C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC1C,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,MAAM;SACV,UAAU,CAAC,MAAM,CAAC;SAClB,MAAM,CAAC,GAAG,GAAG,sCAAsC,CAAC;SACpD,MAAM,CAAC,QAAQ,CAAC,CAAC;AACtB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nlcurl",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Next-level HTTP client with native TLS fingerprint impersonation. Pure TypeScript, zero dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"author": "devAlphaSystem",
|
|
51
51
|
"license": "MIT",
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@types/node": "^
|
|
53
|
+
"@types/node": "^25.3.3",
|
|
54
54
|
"tsx": "^4.21.0",
|
|
55
55
|
"typescript": "^5.9.3"
|
|
56
56
|
}
|