@push.rocks/smartproxy 20.0.1 → 21.1.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/changelog.md +26 -0
- package/dist_ts/core/utils/proxy-protocol.d.ts +5 -17
- package/dist_ts/core/utils/proxy-protocol.js +13 -97
- package/dist_ts/core/utils/websocket-utils.d.ts +6 -7
- package/dist_ts/core/utils/websocket-utils.js +10 -66
- package/dist_ts/detection/detectors/http-detector-v2.d.ts +33 -0
- package/dist_ts/detection/detectors/http-detector-v2.js +87 -0
- package/dist_ts/detection/detectors/http-detector.d.ts +33 -0
- package/dist_ts/detection/detectors/http-detector.js +89 -0
- package/dist_ts/detection/detectors/quick-detector.d.ts +28 -0
- package/dist_ts/detection/detectors/quick-detector.js +131 -0
- package/dist_ts/detection/detectors/routing-extractor.d.ts +28 -0
- package/dist_ts/detection/detectors/routing-extractor.js +122 -0
- package/dist_ts/detection/detectors/tls-detector-v2.d.ts +33 -0
- package/dist_ts/detection/detectors/tls-detector-v2.js +80 -0
- package/dist_ts/detection/detectors/tls-detector.d.ts +33 -0
- package/dist_ts/detection/detectors/tls-detector.js +106 -0
- package/dist_ts/detection/index.d.ts +17 -0
- package/dist_ts/detection/index.js +22 -0
- package/dist_ts/detection/models/detection-types.d.ts +87 -0
- package/dist_ts/detection/models/detection-types.js +5 -0
- package/dist_ts/detection/models/interfaces.d.ts +97 -0
- package/dist_ts/detection/models/interfaces.js +5 -0
- package/dist_ts/detection/protocol-detector-v2.d.ts +46 -0
- package/dist_ts/detection/protocol-detector-v2.js +116 -0
- package/dist_ts/detection/protocol-detector.d.ts +74 -0
- package/dist_ts/detection/protocol-detector.js +173 -0
- package/dist_ts/detection/utils/buffer-utils.d.ts +61 -0
- package/dist_ts/detection/utils/buffer-utils.js +127 -0
- package/dist_ts/detection/utils/fragment-manager.d.ts +31 -0
- package/dist_ts/detection/utils/fragment-manager.js +53 -0
- package/dist_ts/detection/utils/parser-utils.d.ts +42 -0
- package/dist_ts/detection/utils/parser-utils.js +63 -0
- package/dist_ts/index.d.ts +2 -1
- package/dist_ts/index.js +3 -2
- package/dist_ts/protocols/common/fragment-handler.d.ts +73 -0
- package/dist_ts/protocols/common/fragment-handler.js +117 -0
- package/dist_ts/protocols/common/index.d.ts +7 -0
- package/dist_ts/protocols/common/index.js +8 -0
- package/dist_ts/protocols/common/types.d.ts +68 -0
- package/dist_ts/protocols/common/types.js +7 -0
- package/dist_ts/protocols/http/constants.d.ts +119 -0
- package/dist_ts/protocols/http/constants.js +200 -0
- package/dist_ts/protocols/http/index.d.ts +7 -0
- package/dist_ts/protocols/http/index.js +8 -0
- package/dist_ts/protocols/http/parser.d.ts +58 -0
- package/dist_ts/protocols/http/parser.js +184 -0
- package/dist_ts/protocols/http/types.d.ts +62 -0
- package/dist_ts/protocols/http/types.js +5 -0
- package/dist_ts/protocols/index.d.ts +11 -0
- package/dist_ts/protocols/index.js +12 -0
- package/dist_ts/protocols/proxy/index.d.ts +6 -0
- package/dist_ts/protocols/proxy/index.js +7 -0
- package/dist_ts/protocols/proxy/parser.d.ts +44 -0
- package/dist_ts/protocols/proxy/parser.js +153 -0
- package/dist_ts/protocols/proxy/types.d.ts +47 -0
- package/dist_ts/protocols/proxy/types.js +6 -0
- package/dist_ts/protocols/tls/alerts/index.d.ts +4 -0
- package/dist_ts/protocols/tls/alerts/index.js +5 -0
- package/dist_ts/protocols/tls/alerts/tls-alert.d.ts +150 -0
- package/dist_ts/protocols/tls/alerts/tls-alert.js +226 -0
- package/dist_ts/protocols/tls/constants.d.ts +122 -0
- package/dist_ts/protocols/tls/constants.js +135 -0
- package/dist_ts/protocols/tls/index.d.ts +12 -0
- package/dist_ts/protocols/tls/index.js +27 -0
- package/dist_ts/protocols/tls/parser.d.ts +53 -0
- package/dist_ts/protocols/tls/parser.js +294 -0
- package/dist_ts/protocols/tls/sni/client-hello-parser.d.ts +100 -0
- package/dist_ts/protocols/tls/sni/client-hello-parser.js +463 -0
- package/dist_ts/protocols/tls/sni/index.d.ts +5 -0
- package/dist_ts/protocols/tls/sni/index.js +6 -0
- package/dist_ts/protocols/tls/sni/sni-extraction.d.ts +58 -0
- package/dist_ts/protocols/tls/sni/sni-extraction.js +275 -0
- package/dist_ts/protocols/tls/types.d.ts +65 -0
- package/dist_ts/protocols/tls/types.js +5 -0
- package/dist_ts/protocols/tls/utils/index.d.ts +4 -0
- package/dist_ts/protocols/tls/utils/index.js +5 -0
- package/dist_ts/protocols/tls/utils/tls-utils.d.ts +158 -0
- package/dist_ts/protocols/tls/utils/tls-utils.js +187 -0
- package/dist_ts/protocols/websocket/constants.d.ts +55 -0
- package/dist_ts/protocols/websocket/constants.js +58 -0
- package/dist_ts/protocols/websocket/index.d.ts +7 -0
- package/dist_ts/protocols/websocket/index.js +8 -0
- package/dist_ts/protocols/websocket/types.d.ts +47 -0
- package/dist_ts/protocols/websocket/types.js +5 -0
- package/dist_ts/protocols/websocket/utils.d.ts +25 -0
- package/dist_ts/protocols/websocket/utils.js +103 -0
- package/dist_ts/proxies/http-proxy/models/http-types.d.ts +25 -27
- package/dist_ts/proxies/http-proxy/models/http-types.js +24 -44
- package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +5 -0
- package/dist_ts/proxies/smart-proxy/models/route-types.js +1 -1
- package/dist_ts/proxies/smart-proxy/route-connection-handler.js +81 -61
- package/dist_ts/proxies/smart-proxy/tls-manager.js +2 -1
- package/dist_ts/proxies/smart-proxy/utils/index.d.ts +1 -2
- package/dist_ts/proxies/smart-proxy/utils/index.js +3 -4
- package/dist_ts/proxies/smart-proxy/utils/route-helpers.d.ts +112 -8
- package/dist_ts/proxies/smart-proxy/utils/route-helpers.js +231 -76
- package/dist_ts/tls/index.d.ts +5 -7
- package/dist_ts/tls/index.js +8 -11
- package/dist_ts/tls/sni/client-hello-parser.js +3 -2
- package/dist_ts/tls/sni/sni-handler.js +4 -4
- package/dist_ts/tls/utils/tls-utils.d.ts +1 -110
- package/dist_ts/tls/utils/tls-utils.js +4 -116
- package/package.json +17 -8
- package/readme.md +471 -2345
- package/readme.plan.md +0 -0
- package/ts/core/utils/proxy-protocol.ts +14 -131
- package/ts/core/utils/websocket-utils.ts +12 -60
- package/ts/detection/detectors/http-detector.ts +114 -0
- package/ts/detection/detectors/quick-detector.ts +148 -0
- package/ts/detection/detectors/routing-extractor.ts +147 -0
- package/ts/detection/detectors/tls-detector.ts +120 -0
- package/ts/detection/index.ts +25 -0
- package/ts/detection/models/detection-types.ts +102 -0
- package/ts/detection/models/interfaces.ts +115 -0
- package/ts/detection/protocol-detector.ts +230 -0
- package/ts/detection/utils/buffer-utils.ts +141 -0
- package/ts/detection/utils/fragment-manager.ts +64 -0
- package/ts/detection/utils/parser-utils.ts +77 -0
- package/ts/index.ts +3 -2
- package/ts/protocols/common/fragment-handler.ts +163 -0
- package/ts/protocols/common/index.ts +8 -0
- package/ts/protocols/common/types.ts +76 -0
- package/ts/protocols/http/constants.ts +219 -0
- package/ts/protocols/http/index.ts +8 -0
- package/ts/protocols/http/parser.ts +219 -0
- package/ts/protocols/http/types.ts +70 -0
- package/ts/protocols/index.ts +12 -0
- package/ts/protocols/proxy/index.ts +7 -0
- package/ts/protocols/proxy/parser.ts +183 -0
- package/ts/protocols/proxy/types.ts +53 -0
- package/ts/{tls → protocols/tls}/alerts/tls-alert.ts +1 -1
- package/ts/protocols/tls/index.ts +37 -0
- package/ts/protocols/tls/sni/index.ts +6 -0
- package/ts/{tls → protocols/tls}/utils/tls-utils.ts +1 -1
- package/ts/protocols/websocket/constants.ts +60 -0
- package/ts/protocols/websocket/index.ts +8 -0
- package/ts/protocols/websocket/types.ts +53 -0
- package/ts/protocols/websocket/utils.ts +98 -0
- package/ts/proxies/http-proxy/models/http-types.ts +29 -46
- package/ts/proxies/smart-proxy/models/interfaces.ts +7 -1
- package/ts/proxies/smart-proxy/models/route-types.ts +0 -1
- package/ts/proxies/smart-proxy/route-connection-handler.ts +91 -68
- package/ts/proxies/smart-proxy/tls-manager.ts +1 -0
- package/ts/proxies/smart-proxy/utils/index.ts +2 -13
- package/ts/proxies/smart-proxy/utils/route-helpers.ts +323 -86
- package/ts/tls/index.ts +8 -12
- package/ts/tls/sni/sni-handler.ts +3 -3
- package/ts/forwarding/config/forwarding-types.ts +0 -76
- package/ts/forwarding/config/index.ts +0 -26
- package/ts/forwarding/factory/forwarding-factory.ts +0 -189
- package/ts/forwarding/factory/index.ts +0 -5
- package/ts/forwarding/handlers/base-handler.ts +0 -155
- package/ts/forwarding/handlers/http-handler.ts +0 -163
- package/ts/forwarding/handlers/https-passthrough-handler.ts +0 -185
- package/ts/forwarding/handlers/https-terminate-to-http-handler.ts +0 -312
- package/ts/forwarding/handlers/https-terminate-to-https-handler.ts +0 -297
- package/ts/forwarding/handlers/index.ts +0 -9
- package/ts/forwarding/index.ts +0 -35
- package/ts/proxies/smart-proxy/utils/route-patterns.ts +0 -403
- /package/ts/{tls → protocols/tls}/alerts/index.ts +0 -0
- /package/ts/{tls → protocols/tls}/sni/client-hello-parser.ts +0 -0
- /package/ts/{tls → protocols/tls}/sni/sni-extraction.ts +0 -0
- /package/ts/{tls → protocols/tls}/utils/index.ts +0 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import * as plugins from '../../../plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* TLS record types as defined in various RFCs
|
|
4
|
+
*/
|
|
5
|
+
export var TlsRecordType;
|
|
6
|
+
(function (TlsRecordType) {
|
|
7
|
+
TlsRecordType[TlsRecordType["CHANGE_CIPHER_SPEC"] = 20] = "CHANGE_CIPHER_SPEC";
|
|
8
|
+
TlsRecordType[TlsRecordType["ALERT"] = 21] = "ALERT";
|
|
9
|
+
TlsRecordType[TlsRecordType["HANDSHAKE"] = 22] = "HANDSHAKE";
|
|
10
|
+
TlsRecordType[TlsRecordType["APPLICATION_DATA"] = 23] = "APPLICATION_DATA";
|
|
11
|
+
TlsRecordType[TlsRecordType["HEARTBEAT"] = 24] = "HEARTBEAT";
|
|
12
|
+
})(TlsRecordType || (TlsRecordType = {}));
|
|
13
|
+
/**
|
|
14
|
+
* TLS handshake message types
|
|
15
|
+
*/
|
|
16
|
+
export var TlsHandshakeType;
|
|
17
|
+
(function (TlsHandshakeType) {
|
|
18
|
+
TlsHandshakeType[TlsHandshakeType["HELLO_REQUEST"] = 0] = "HELLO_REQUEST";
|
|
19
|
+
TlsHandshakeType[TlsHandshakeType["CLIENT_HELLO"] = 1] = "CLIENT_HELLO";
|
|
20
|
+
TlsHandshakeType[TlsHandshakeType["SERVER_HELLO"] = 2] = "SERVER_HELLO";
|
|
21
|
+
TlsHandshakeType[TlsHandshakeType["NEW_SESSION_TICKET"] = 4] = "NEW_SESSION_TICKET";
|
|
22
|
+
TlsHandshakeType[TlsHandshakeType["ENCRYPTED_EXTENSIONS"] = 8] = "ENCRYPTED_EXTENSIONS";
|
|
23
|
+
TlsHandshakeType[TlsHandshakeType["CERTIFICATE"] = 11] = "CERTIFICATE";
|
|
24
|
+
TlsHandshakeType[TlsHandshakeType["SERVER_KEY_EXCHANGE"] = 12] = "SERVER_KEY_EXCHANGE";
|
|
25
|
+
TlsHandshakeType[TlsHandshakeType["CERTIFICATE_REQUEST"] = 13] = "CERTIFICATE_REQUEST";
|
|
26
|
+
TlsHandshakeType[TlsHandshakeType["SERVER_HELLO_DONE"] = 14] = "SERVER_HELLO_DONE";
|
|
27
|
+
TlsHandshakeType[TlsHandshakeType["CERTIFICATE_VERIFY"] = 15] = "CERTIFICATE_VERIFY";
|
|
28
|
+
TlsHandshakeType[TlsHandshakeType["CLIENT_KEY_EXCHANGE"] = 16] = "CLIENT_KEY_EXCHANGE";
|
|
29
|
+
TlsHandshakeType[TlsHandshakeType["FINISHED"] = 20] = "FINISHED";
|
|
30
|
+
})(TlsHandshakeType || (TlsHandshakeType = {}));
|
|
31
|
+
/**
|
|
32
|
+
* TLS extension types
|
|
33
|
+
*/
|
|
34
|
+
export var TlsExtensionType;
|
|
35
|
+
(function (TlsExtensionType) {
|
|
36
|
+
TlsExtensionType[TlsExtensionType["SERVER_NAME"] = 0] = "SERVER_NAME";
|
|
37
|
+
TlsExtensionType[TlsExtensionType["MAX_FRAGMENT_LENGTH"] = 1] = "MAX_FRAGMENT_LENGTH";
|
|
38
|
+
TlsExtensionType[TlsExtensionType["CLIENT_CERTIFICATE_URL"] = 2] = "CLIENT_CERTIFICATE_URL";
|
|
39
|
+
TlsExtensionType[TlsExtensionType["TRUSTED_CA_KEYS"] = 3] = "TRUSTED_CA_KEYS";
|
|
40
|
+
TlsExtensionType[TlsExtensionType["TRUNCATED_HMAC"] = 4] = "TRUNCATED_HMAC";
|
|
41
|
+
TlsExtensionType[TlsExtensionType["STATUS_REQUEST"] = 5] = "STATUS_REQUEST";
|
|
42
|
+
TlsExtensionType[TlsExtensionType["SUPPORTED_GROUPS"] = 10] = "SUPPORTED_GROUPS";
|
|
43
|
+
TlsExtensionType[TlsExtensionType["EC_POINT_FORMATS"] = 11] = "EC_POINT_FORMATS";
|
|
44
|
+
TlsExtensionType[TlsExtensionType["SIGNATURE_ALGORITHMS"] = 13] = "SIGNATURE_ALGORITHMS";
|
|
45
|
+
TlsExtensionType[TlsExtensionType["APPLICATION_LAYER_PROTOCOL_NEGOTIATION"] = 16] = "APPLICATION_LAYER_PROTOCOL_NEGOTIATION";
|
|
46
|
+
TlsExtensionType[TlsExtensionType["SIGNED_CERTIFICATE_TIMESTAMP"] = 18] = "SIGNED_CERTIFICATE_TIMESTAMP";
|
|
47
|
+
TlsExtensionType[TlsExtensionType["PADDING"] = 21] = "PADDING";
|
|
48
|
+
TlsExtensionType[TlsExtensionType["SESSION_TICKET"] = 35] = "SESSION_TICKET";
|
|
49
|
+
TlsExtensionType[TlsExtensionType["PRE_SHARED_KEY"] = 41] = "PRE_SHARED_KEY";
|
|
50
|
+
TlsExtensionType[TlsExtensionType["EARLY_DATA"] = 42] = "EARLY_DATA";
|
|
51
|
+
TlsExtensionType[TlsExtensionType["SUPPORTED_VERSIONS"] = 43] = "SUPPORTED_VERSIONS";
|
|
52
|
+
TlsExtensionType[TlsExtensionType["COOKIE"] = 44] = "COOKIE";
|
|
53
|
+
TlsExtensionType[TlsExtensionType["PSK_KEY_EXCHANGE_MODES"] = 45] = "PSK_KEY_EXCHANGE_MODES";
|
|
54
|
+
TlsExtensionType[TlsExtensionType["CERTIFICATE_AUTHORITIES"] = 47] = "CERTIFICATE_AUTHORITIES";
|
|
55
|
+
TlsExtensionType[TlsExtensionType["POST_HANDSHAKE_AUTH"] = 49] = "POST_HANDSHAKE_AUTH";
|
|
56
|
+
TlsExtensionType[TlsExtensionType["SIGNATURE_ALGORITHMS_CERT"] = 50] = "SIGNATURE_ALGORITHMS_CERT";
|
|
57
|
+
TlsExtensionType[TlsExtensionType["KEY_SHARE"] = 51] = "KEY_SHARE";
|
|
58
|
+
})(TlsExtensionType || (TlsExtensionType = {}));
|
|
59
|
+
/**
|
|
60
|
+
* TLS alert levels
|
|
61
|
+
*/
|
|
62
|
+
export var TlsAlertLevel;
|
|
63
|
+
(function (TlsAlertLevel) {
|
|
64
|
+
TlsAlertLevel[TlsAlertLevel["WARNING"] = 1] = "WARNING";
|
|
65
|
+
TlsAlertLevel[TlsAlertLevel["FATAL"] = 2] = "FATAL";
|
|
66
|
+
})(TlsAlertLevel || (TlsAlertLevel = {}));
|
|
67
|
+
/**
|
|
68
|
+
* TLS alert description codes
|
|
69
|
+
*/
|
|
70
|
+
export var TlsAlertDescription;
|
|
71
|
+
(function (TlsAlertDescription) {
|
|
72
|
+
TlsAlertDescription[TlsAlertDescription["CLOSE_NOTIFY"] = 0] = "CLOSE_NOTIFY";
|
|
73
|
+
TlsAlertDescription[TlsAlertDescription["UNEXPECTED_MESSAGE"] = 10] = "UNEXPECTED_MESSAGE";
|
|
74
|
+
TlsAlertDescription[TlsAlertDescription["BAD_RECORD_MAC"] = 20] = "BAD_RECORD_MAC";
|
|
75
|
+
TlsAlertDescription[TlsAlertDescription["DECRYPTION_FAILED"] = 21] = "DECRYPTION_FAILED";
|
|
76
|
+
TlsAlertDescription[TlsAlertDescription["RECORD_OVERFLOW"] = 22] = "RECORD_OVERFLOW";
|
|
77
|
+
TlsAlertDescription[TlsAlertDescription["DECOMPRESSION_FAILURE"] = 30] = "DECOMPRESSION_FAILURE";
|
|
78
|
+
TlsAlertDescription[TlsAlertDescription["HANDSHAKE_FAILURE"] = 40] = "HANDSHAKE_FAILURE";
|
|
79
|
+
TlsAlertDescription[TlsAlertDescription["NO_CERTIFICATE"] = 41] = "NO_CERTIFICATE";
|
|
80
|
+
TlsAlertDescription[TlsAlertDescription["BAD_CERTIFICATE"] = 42] = "BAD_CERTIFICATE";
|
|
81
|
+
TlsAlertDescription[TlsAlertDescription["UNSUPPORTED_CERTIFICATE"] = 43] = "UNSUPPORTED_CERTIFICATE";
|
|
82
|
+
TlsAlertDescription[TlsAlertDescription["CERTIFICATE_REVOKED"] = 44] = "CERTIFICATE_REVOKED";
|
|
83
|
+
TlsAlertDescription[TlsAlertDescription["CERTIFICATE_EXPIRED"] = 45] = "CERTIFICATE_EXPIRED";
|
|
84
|
+
TlsAlertDescription[TlsAlertDescription["CERTIFICATE_UNKNOWN"] = 46] = "CERTIFICATE_UNKNOWN";
|
|
85
|
+
TlsAlertDescription[TlsAlertDescription["ILLEGAL_PARAMETER"] = 47] = "ILLEGAL_PARAMETER";
|
|
86
|
+
TlsAlertDescription[TlsAlertDescription["UNKNOWN_CA"] = 48] = "UNKNOWN_CA";
|
|
87
|
+
TlsAlertDescription[TlsAlertDescription["ACCESS_DENIED"] = 49] = "ACCESS_DENIED";
|
|
88
|
+
TlsAlertDescription[TlsAlertDescription["DECODE_ERROR"] = 50] = "DECODE_ERROR";
|
|
89
|
+
TlsAlertDescription[TlsAlertDescription["DECRYPT_ERROR"] = 51] = "DECRYPT_ERROR";
|
|
90
|
+
TlsAlertDescription[TlsAlertDescription["EXPORT_RESTRICTION"] = 60] = "EXPORT_RESTRICTION";
|
|
91
|
+
TlsAlertDescription[TlsAlertDescription["PROTOCOL_VERSION"] = 70] = "PROTOCOL_VERSION";
|
|
92
|
+
TlsAlertDescription[TlsAlertDescription["INSUFFICIENT_SECURITY"] = 71] = "INSUFFICIENT_SECURITY";
|
|
93
|
+
TlsAlertDescription[TlsAlertDescription["INTERNAL_ERROR"] = 80] = "INTERNAL_ERROR";
|
|
94
|
+
TlsAlertDescription[TlsAlertDescription["INAPPROPRIATE_FALLBACK"] = 86] = "INAPPROPRIATE_FALLBACK";
|
|
95
|
+
TlsAlertDescription[TlsAlertDescription["USER_CANCELED"] = 90] = "USER_CANCELED";
|
|
96
|
+
TlsAlertDescription[TlsAlertDescription["NO_RENEGOTIATION"] = 100] = "NO_RENEGOTIATION";
|
|
97
|
+
TlsAlertDescription[TlsAlertDescription["MISSING_EXTENSION"] = 109] = "MISSING_EXTENSION";
|
|
98
|
+
TlsAlertDescription[TlsAlertDescription["UNSUPPORTED_EXTENSION"] = 110] = "UNSUPPORTED_EXTENSION";
|
|
99
|
+
TlsAlertDescription[TlsAlertDescription["CERTIFICATE_REQUIRED"] = 111] = "CERTIFICATE_REQUIRED";
|
|
100
|
+
TlsAlertDescription[TlsAlertDescription["UNRECOGNIZED_NAME"] = 112] = "UNRECOGNIZED_NAME";
|
|
101
|
+
TlsAlertDescription[TlsAlertDescription["BAD_CERTIFICATE_STATUS_RESPONSE"] = 113] = "BAD_CERTIFICATE_STATUS_RESPONSE";
|
|
102
|
+
TlsAlertDescription[TlsAlertDescription["BAD_CERTIFICATE_HASH_VALUE"] = 114] = "BAD_CERTIFICATE_HASH_VALUE";
|
|
103
|
+
TlsAlertDescription[TlsAlertDescription["UNKNOWN_PSK_IDENTITY"] = 115] = "UNKNOWN_PSK_IDENTITY";
|
|
104
|
+
TlsAlertDescription[TlsAlertDescription["CERTIFICATE_REQUIRED_1_3"] = 116] = "CERTIFICATE_REQUIRED_1_3";
|
|
105
|
+
TlsAlertDescription[TlsAlertDescription["NO_APPLICATION_PROTOCOL"] = 120] = "NO_APPLICATION_PROTOCOL";
|
|
106
|
+
})(TlsAlertDescription || (TlsAlertDescription = {}));
|
|
107
|
+
/**
|
|
108
|
+
* TLS version codes (major.minor)
|
|
109
|
+
*/
|
|
110
|
+
export const TlsVersion = {
|
|
111
|
+
SSL3: [0x03, 0x00],
|
|
112
|
+
TLS1_0: [0x03, 0x01],
|
|
113
|
+
TLS1_1: [0x03, 0x02],
|
|
114
|
+
TLS1_2: [0x03, 0x03],
|
|
115
|
+
TLS1_3: [0x03, 0x04],
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Utility functions for TLS protocol operations
|
|
119
|
+
*/
|
|
120
|
+
export class TlsUtils {
|
|
121
|
+
/**
|
|
122
|
+
* Checks if a buffer contains a TLS handshake record
|
|
123
|
+
* @param buffer The buffer to check
|
|
124
|
+
* @returns true if the buffer starts with a TLS handshake record
|
|
125
|
+
*/
|
|
126
|
+
static isTlsHandshake(buffer) {
|
|
127
|
+
return buffer.length > 0 && buffer[0] === TlsRecordType.HANDSHAKE;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Checks if a buffer contains TLS application data
|
|
131
|
+
* @param buffer The buffer to check
|
|
132
|
+
* @returns true if the buffer starts with a TLS application data record
|
|
133
|
+
*/
|
|
134
|
+
static isTlsApplicationData(buffer) {
|
|
135
|
+
return buffer.length > 0 && buffer[0] === TlsRecordType.APPLICATION_DATA;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Checks if a buffer contains a TLS alert record
|
|
139
|
+
* @param buffer The buffer to check
|
|
140
|
+
* @returns true if the buffer starts with a TLS alert record
|
|
141
|
+
*/
|
|
142
|
+
static isTlsAlert(buffer) {
|
|
143
|
+
return buffer.length > 0 && buffer[0] === TlsRecordType.ALERT;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Checks if a buffer contains a TLS ClientHello message
|
|
147
|
+
* @param buffer The buffer to check
|
|
148
|
+
* @returns true if the buffer appears to be a ClientHello message
|
|
149
|
+
*/
|
|
150
|
+
static isClientHello(buffer) {
|
|
151
|
+
// Minimum ClientHello size (TLS record header + handshake header)
|
|
152
|
+
if (buffer.length < 9) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
// Check record type (must be TLS_HANDSHAKE_RECORD_TYPE)
|
|
156
|
+
if (buffer[0] !== TlsRecordType.HANDSHAKE) {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
// Skip version and length in TLS record header (5 bytes total)
|
|
160
|
+
// Check handshake type at byte 5 (must be CLIENT_HELLO)
|
|
161
|
+
return buffer[5] === TlsHandshakeType.CLIENT_HELLO;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Gets the record length from a TLS record header
|
|
165
|
+
* @param buffer Buffer containing a TLS record
|
|
166
|
+
* @returns The record length if the buffer is valid, -1 otherwise
|
|
167
|
+
*/
|
|
168
|
+
static getTlsRecordLength(buffer) {
|
|
169
|
+
if (buffer.length < 5) {
|
|
170
|
+
return -1;
|
|
171
|
+
}
|
|
172
|
+
// Bytes 3-4 contain the record length (big-endian)
|
|
173
|
+
return (buffer[3] << 8) + buffer[4];
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Creates a connection ID based on source/destination information
|
|
177
|
+
* Used to track fragmented ClientHello messages across multiple packets
|
|
178
|
+
*
|
|
179
|
+
* @param connectionInfo Object containing connection identifiers
|
|
180
|
+
* @returns A string ID for the connection
|
|
181
|
+
*/
|
|
182
|
+
static createConnectionId(connectionInfo) {
|
|
183
|
+
const { sourceIp, sourcePort, destIp, destPort } = connectionInfo;
|
|
184
|
+
return `${sourceIp}:${sourcePort}-${destIp}:${destPort}`;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxzLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvcHJvdG9jb2xzL3Rscy91dGlscy90bHMtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUUvQzs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGFBTVg7QUFORCxXQUFZLGFBQWE7SUFDdkIsOEVBQXVCLENBQUE7SUFDdkIsb0RBQVUsQ0FBQTtJQUNWLDREQUFjLENBQUE7SUFDZCwwRUFBcUIsQ0FBQTtJQUNyQiw0REFBYyxDQUFBO0FBQ2hCLENBQUMsRUFOVyxhQUFhLEtBQWIsYUFBYSxRQU14QjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksZ0JBYVg7QUFiRCxXQUFZLGdCQUFnQjtJQUMxQix5RUFBaUIsQ0FBQTtJQUNqQix1RUFBZ0IsQ0FBQTtJQUNoQix1RUFBZ0IsQ0FBQTtJQUNoQixtRkFBc0IsQ0FBQTtJQUN0Qix1RkFBd0IsQ0FBQTtJQUN4QixzRUFBZ0IsQ0FBQTtJQUNoQixzRkFBd0IsQ0FBQTtJQUN4QixzRkFBd0IsQ0FBQTtJQUN4QixrRkFBc0IsQ0FBQTtJQUN0QixvRkFBdUIsQ0FBQTtJQUN2QixzRkFBd0IsQ0FBQTtJQUN4QixnRUFBYSxDQUFBO0FBQ2YsQ0FBQyxFQWJXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFhM0I7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGdCQXVCWDtBQXZCRCxXQUFZLGdCQUFnQjtJQUMxQixxRUFBZSxDQUFBO0lBQ2YscUZBQXVCLENBQUE7SUFDdkIsMkZBQTBCLENBQUE7SUFDMUIsNkVBQW1CLENBQUE7SUFDbkIsMkVBQWtCLENBQUE7SUFDbEIsMkVBQWtCLENBQUE7SUFDbEIsZ0ZBQXFCLENBQUE7SUFDckIsZ0ZBQXFCLENBQUE7SUFDckIsd0ZBQXlCLENBQUE7SUFDekIsNEhBQTJDLENBQUE7SUFDM0Msd0dB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
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket Protocol Constants
|
|
3
|
+
* Based on RFC 6455
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* WebSocket opcode types
|
|
7
|
+
*/
|
|
8
|
+
export declare enum WebSocketOpcode {
|
|
9
|
+
CONTINUATION = 0,
|
|
10
|
+
TEXT = 1,
|
|
11
|
+
BINARY = 2,
|
|
12
|
+
CLOSE = 8,
|
|
13
|
+
PING = 9,
|
|
14
|
+
PONG = 10
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* WebSocket close codes
|
|
18
|
+
*/
|
|
19
|
+
export declare enum WebSocketCloseCode {
|
|
20
|
+
NORMAL_CLOSURE = 1000,
|
|
21
|
+
GOING_AWAY = 1001,
|
|
22
|
+
PROTOCOL_ERROR = 1002,
|
|
23
|
+
UNSUPPORTED_DATA = 1003,
|
|
24
|
+
NO_STATUS_RECEIVED = 1005,
|
|
25
|
+
ABNORMAL_CLOSURE = 1006,
|
|
26
|
+
INVALID_FRAME_PAYLOAD_DATA = 1007,
|
|
27
|
+
POLICY_VIOLATION = 1008,
|
|
28
|
+
MESSAGE_TOO_BIG = 1009,
|
|
29
|
+
MISSING_EXTENSION = 1010,
|
|
30
|
+
INTERNAL_ERROR = 1011,
|
|
31
|
+
SERVICE_RESTART = 1012,
|
|
32
|
+
TRY_AGAIN_LATER = 1013,
|
|
33
|
+
BAD_GATEWAY = 1014,
|
|
34
|
+
TLS_HANDSHAKE = 1015
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* WebSocket protocol version
|
|
38
|
+
*/
|
|
39
|
+
export declare const WEBSOCKET_VERSION = 13;
|
|
40
|
+
/**
|
|
41
|
+
* WebSocket magic string for handshake
|
|
42
|
+
*/
|
|
43
|
+
export declare const WEBSOCKET_MAGIC_STRING = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
|
|
44
|
+
/**
|
|
45
|
+
* WebSocket headers
|
|
46
|
+
*/
|
|
47
|
+
export declare const WEBSOCKET_HEADERS: {
|
|
48
|
+
readonly UPGRADE: "upgrade";
|
|
49
|
+
readonly CONNECTION: "connection";
|
|
50
|
+
readonly SEC_WEBSOCKET_KEY: "sec-websocket-key";
|
|
51
|
+
readonly SEC_WEBSOCKET_VERSION: "sec-websocket-version";
|
|
52
|
+
readonly SEC_WEBSOCKET_ACCEPT: "sec-websocket-accept";
|
|
53
|
+
readonly SEC_WEBSOCKET_PROTOCOL: "sec-websocket-protocol";
|
|
54
|
+
readonly SEC_WEBSOCKET_EXTENSIONS: "sec-websocket-extensions";
|
|
55
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket Protocol Constants
|
|
3
|
+
* Based on RFC 6455
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* WebSocket opcode types
|
|
7
|
+
*/
|
|
8
|
+
export var WebSocketOpcode;
|
|
9
|
+
(function (WebSocketOpcode) {
|
|
10
|
+
WebSocketOpcode[WebSocketOpcode["CONTINUATION"] = 0] = "CONTINUATION";
|
|
11
|
+
WebSocketOpcode[WebSocketOpcode["TEXT"] = 1] = "TEXT";
|
|
12
|
+
WebSocketOpcode[WebSocketOpcode["BINARY"] = 2] = "BINARY";
|
|
13
|
+
WebSocketOpcode[WebSocketOpcode["CLOSE"] = 8] = "CLOSE";
|
|
14
|
+
WebSocketOpcode[WebSocketOpcode["PING"] = 9] = "PING";
|
|
15
|
+
WebSocketOpcode[WebSocketOpcode["PONG"] = 10] = "PONG";
|
|
16
|
+
})(WebSocketOpcode || (WebSocketOpcode = {}));
|
|
17
|
+
/**
|
|
18
|
+
* WebSocket close codes
|
|
19
|
+
*/
|
|
20
|
+
export var WebSocketCloseCode;
|
|
21
|
+
(function (WebSocketCloseCode) {
|
|
22
|
+
WebSocketCloseCode[WebSocketCloseCode["NORMAL_CLOSURE"] = 1000] = "NORMAL_CLOSURE";
|
|
23
|
+
WebSocketCloseCode[WebSocketCloseCode["GOING_AWAY"] = 1001] = "GOING_AWAY";
|
|
24
|
+
WebSocketCloseCode[WebSocketCloseCode["PROTOCOL_ERROR"] = 1002] = "PROTOCOL_ERROR";
|
|
25
|
+
WebSocketCloseCode[WebSocketCloseCode["UNSUPPORTED_DATA"] = 1003] = "UNSUPPORTED_DATA";
|
|
26
|
+
WebSocketCloseCode[WebSocketCloseCode["NO_STATUS_RECEIVED"] = 1005] = "NO_STATUS_RECEIVED";
|
|
27
|
+
WebSocketCloseCode[WebSocketCloseCode["ABNORMAL_CLOSURE"] = 1006] = "ABNORMAL_CLOSURE";
|
|
28
|
+
WebSocketCloseCode[WebSocketCloseCode["INVALID_FRAME_PAYLOAD_DATA"] = 1007] = "INVALID_FRAME_PAYLOAD_DATA";
|
|
29
|
+
WebSocketCloseCode[WebSocketCloseCode["POLICY_VIOLATION"] = 1008] = "POLICY_VIOLATION";
|
|
30
|
+
WebSocketCloseCode[WebSocketCloseCode["MESSAGE_TOO_BIG"] = 1009] = "MESSAGE_TOO_BIG";
|
|
31
|
+
WebSocketCloseCode[WebSocketCloseCode["MISSING_EXTENSION"] = 1010] = "MISSING_EXTENSION";
|
|
32
|
+
WebSocketCloseCode[WebSocketCloseCode["INTERNAL_ERROR"] = 1011] = "INTERNAL_ERROR";
|
|
33
|
+
WebSocketCloseCode[WebSocketCloseCode["SERVICE_RESTART"] = 1012] = "SERVICE_RESTART";
|
|
34
|
+
WebSocketCloseCode[WebSocketCloseCode["TRY_AGAIN_LATER"] = 1013] = "TRY_AGAIN_LATER";
|
|
35
|
+
WebSocketCloseCode[WebSocketCloseCode["BAD_GATEWAY"] = 1014] = "BAD_GATEWAY";
|
|
36
|
+
WebSocketCloseCode[WebSocketCloseCode["TLS_HANDSHAKE"] = 1015] = "TLS_HANDSHAKE";
|
|
37
|
+
})(WebSocketCloseCode || (WebSocketCloseCode = {}));
|
|
38
|
+
/**
|
|
39
|
+
* WebSocket protocol version
|
|
40
|
+
*/
|
|
41
|
+
export const WEBSOCKET_VERSION = 13;
|
|
42
|
+
/**
|
|
43
|
+
* WebSocket magic string for handshake
|
|
44
|
+
*/
|
|
45
|
+
export const WEBSOCKET_MAGIC_STRING = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
|
|
46
|
+
/**
|
|
47
|
+
* WebSocket headers
|
|
48
|
+
*/
|
|
49
|
+
export const WEBSOCKET_HEADERS = {
|
|
50
|
+
UPGRADE: 'upgrade',
|
|
51
|
+
CONNECTION: 'connection',
|
|
52
|
+
SEC_WEBSOCKET_KEY: 'sec-websocket-key',
|
|
53
|
+
SEC_WEBSOCKET_VERSION: 'sec-websocket-version',
|
|
54
|
+
SEC_WEBSOCKET_ACCEPT: 'sec-websocket-accept',
|
|
55
|
+
SEC_WEBSOCKET_PROTOCOL: 'sec-websocket-protocol',
|
|
56
|
+
SEC_WEBSOCKET_EXTENSIONS: 'sec-websocket-extensions',
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJvdG9jb2xzL3dlYnNvY2tldC9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxlQU9YO0FBUEQsV0FBWSxlQUFlO0lBQ3pCLHFFQUFrQixDQUFBO0lBQ2xCLHFEQUFVLENBQUE7SUFDVix5REFBWSxDQUFBO0lBQ1osdURBQVcsQ0FBQTtJQUNYLHFEQUFVLENBQUE7SUFDVixzREFBVSxDQUFBO0FBQ1osQ0FBQyxFQVBXLGVBQWUsS0FBZixlQUFlLFFBTzFCO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxrQkFnQlg7QUFoQkQsV0FBWSxrQkFBa0I7SUFDNUIsa0ZBQXFCLENBQUE7SUFDckIsMEVBQWlCLENBQUE7SUFDakIsa0ZBQXFCLENBQUE7SUFDckIsc0ZBQXVCLENBQUE7SUFDdkIsMEZBQXlCLENBQUE7SUFDekIsc0ZBQXVCLENBQUE7SUFDdkIsMEdBQWlDLENBQUE7SUFDakMsc0ZBQXVCLENBQUE7SUFDdkIsb0ZBQXNCLENBQUE7SUFDdEIsd0ZBQXdCLENBQUE7SUFDeEIsa0ZBQXFCLENBQUE7SUFDckIsb0ZBQXNCLENBQUE7SUFDdEIsb0ZBQXNCLENBQUE7SUFDdEIsNEVBQWtCLENBQUE7SUFDbEIsZ0ZBQW9CLENBQUE7QUFDdEIsQ0FBQyxFQWhCVyxrQkFBa0IsS0FBbEIsa0JBQWtCLFFBZ0I3QjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBRXBDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsc0NBQXNDLENBQUM7QUFFN0U7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRztJQUMvQixPQUFPLEVBQUUsU0FBUztJQUNsQixVQUFVLEVBQUUsWUFBWTtJQUN4QixpQkFBaUIsRUFBRSxtQkFBbUI7SUFDdEMscUJBQXFCLEVBQUUsdUJBQXVCO0lBQzlDLG9CQUFvQixFQUFFLHNCQUFzQjtJQUM1QyxzQkFBc0IsRUFBRSx3QkFBd0I7SUFDaEQsd0JBQXdCLEVBQUUsMEJBQTBCO0NBQzVDLENBQUMifQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket Protocol Module
|
|
3
|
+
* WebSocket protocol utilities and constants
|
|
4
|
+
*/
|
|
5
|
+
export * from './constants.js';
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export * from './utils.js';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm90b2NvbHMvd2Vic29ja2V0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxZQUFZLENBQUMifQ==
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket Protocol Type Definitions
|
|
3
|
+
*/
|
|
4
|
+
import type { WebSocketOpcode, WebSocketCloseCode } from './constants.js';
|
|
5
|
+
/**
|
|
6
|
+
* WebSocket frame header
|
|
7
|
+
*/
|
|
8
|
+
export interface IWebSocketFrameHeader {
|
|
9
|
+
fin: boolean;
|
|
10
|
+
rsv1: boolean;
|
|
11
|
+
rsv2: boolean;
|
|
12
|
+
rsv3: boolean;
|
|
13
|
+
opcode: WebSocketOpcode;
|
|
14
|
+
masked: boolean;
|
|
15
|
+
payloadLength: number;
|
|
16
|
+
maskingKey?: Buffer;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* WebSocket frame
|
|
20
|
+
*/
|
|
21
|
+
export interface IWebSocketFrame {
|
|
22
|
+
header: IWebSocketFrameHeader;
|
|
23
|
+
payload: Buffer;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* WebSocket close frame payload
|
|
27
|
+
*/
|
|
28
|
+
export interface IWebSocketClosePayload {
|
|
29
|
+
code: WebSocketCloseCode;
|
|
30
|
+
reason?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* WebSocket handshake request headers
|
|
34
|
+
*/
|
|
35
|
+
export interface IWebSocketHandshakeHeaders {
|
|
36
|
+
upgrade: string;
|
|
37
|
+
connection: string;
|
|
38
|
+
'sec-websocket-key': string;
|
|
39
|
+
'sec-websocket-version': string;
|
|
40
|
+
'sec-websocket-protocol'?: string;
|
|
41
|
+
'sec-websocket-extensions'?: string;
|
|
42
|
+
[key: string]: string | undefined;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Type for WebSocket raw data (matching ws library)
|
|
46
|
+
*/
|
|
47
|
+
export type RawData = Buffer | ArrayBuffer | Buffer[] | any;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket Protocol Type Definitions
|
|
3
|
+
*/
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm90b2NvbHMvd2Vic29ja2V0L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHIn0=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket Protocol Utilities
|
|
3
|
+
*/
|
|
4
|
+
import type { RawData } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Get the length of a WebSocket message regardless of its type
|
|
7
|
+
* (handles all possible WebSocket message data types)
|
|
8
|
+
*/
|
|
9
|
+
export declare function getMessageSize(data: RawData): number;
|
|
10
|
+
/**
|
|
11
|
+
* Convert any raw WebSocket data to Buffer for consistent handling
|
|
12
|
+
*/
|
|
13
|
+
export declare function toBuffer(data: RawData): Buffer;
|
|
14
|
+
/**
|
|
15
|
+
* Generate WebSocket accept key from client key
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateAcceptKey(clientKey: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Validate WebSocket upgrade request
|
|
20
|
+
*/
|
|
21
|
+
export declare function isWebSocketUpgrade(headers: Record<string, string>): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Generate random WebSocket key for client handshake
|
|
24
|
+
*/
|
|
25
|
+
export declare function generateWebSocketKey(): string;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket Protocol Utilities
|
|
3
|
+
*/
|
|
4
|
+
import * as crypto from 'crypto';
|
|
5
|
+
import { WEBSOCKET_MAGIC_STRING } from './constants.js';
|
|
6
|
+
/**
|
|
7
|
+
* Get the length of a WebSocket message regardless of its type
|
|
8
|
+
* (handles all possible WebSocket message data types)
|
|
9
|
+
*/
|
|
10
|
+
export function getMessageSize(data) {
|
|
11
|
+
if (typeof data === 'string') {
|
|
12
|
+
// For string data, get the byte length
|
|
13
|
+
return Buffer.from(data, 'utf8').length;
|
|
14
|
+
}
|
|
15
|
+
else if (data instanceof Buffer) {
|
|
16
|
+
// For Node.js Buffer
|
|
17
|
+
return data.length;
|
|
18
|
+
}
|
|
19
|
+
else if (data instanceof ArrayBuffer) {
|
|
20
|
+
// For ArrayBuffer
|
|
21
|
+
return data.byteLength;
|
|
22
|
+
}
|
|
23
|
+
else if (Array.isArray(data)) {
|
|
24
|
+
// For array of buffers, sum their lengths
|
|
25
|
+
return data.reduce((sum, chunk) => {
|
|
26
|
+
if (chunk instanceof Buffer) {
|
|
27
|
+
return sum + chunk.length;
|
|
28
|
+
}
|
|
29
|
+
else if (chunk instanceof ArrayBuffer) {
|
|
30
|
+
return sum + chunk.byteLength;
|
|
31
|
+
}
|
|
32
|
+
return sum;
|
|
33
|
+
}, 0);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// For other types, try to determine the size or return 0
|
|
37
|
+
try {
|
|
38
|
+
return Buffer.from(data).length;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Convert any raw WebSocket data to Buffer for consistent handling
|
|
47
|
+
*/
|
|
48
|
+
export function toBuffer(data) {
|
|
49
|
+
if (typeof data === 'string') {
|
|
50
|
+
return Buffer.from(data, 'utf8');
|
|
51
|
+
}
|
|
52
|
+
else if (data instanceof Buffer) {
|
|
53
|
+
return data;
|
|
54
|
+
}
|
|
55
|
+
else if (data instanceof ArrayBuffer) {
|
|
56
|
+
return Buffer.from(data);
|
|
57
|
+
}
|
|
58
|
+
else if (Array.isArray(data)) {
|
|
59
|
+
// For array of buffers, concatenate them
|
|
60
|
+
return Buffer.concat(data.map(chunk => {
|
|
61
|
+
if (chunk instanceof Buffer) {
|
|
62
|
+
return chunk;
|
|
63
|
+
}
|
|
64
|
+
else if (chunk instanceof ArrayBuffer) {
|
|
65
|
+
return Buffer.from(chunk);
|
|
66
|
+
}
|
|
67
|
+
return Buffer.from(chunk);
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// For other types, try to convert to Buffer or return empty Buffer
|
|
72
|
+
try {
|
|
73
|
+
return Buffer.from(data);
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
return Buffer.alloc(0);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Generate WebSocket accept key from client key
|
|
82
|
+
*/
|
|
83
|
+
export function generateAcceptKey(clientKey) {
|
|
84
|
+
const hash = crypto.createHash('sha1');
|
|
85
|
+
hash.update(clientKey + WEBSOCKET_MAGIC_STRING);
|
|
86
|
+
return hash.digest('base64');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Validate WebSocket upgrade request
|
|
90
|
+
*/
|
|
91
|
+
export function isWebSocketUpgrade(headers) {
|
|
92
|
+
const upgrade = headers['upgrade'];
|
|
93
|
+
const connection = headers['connection'];
|
|
94
|
+
return upgrade?.toLowerCase() === 'websocket' &&
|
|
95
|
+
connection?.toLowerCase().includes('upgrade');
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Generate random WebSocket key for client handshake
|
|
99
|
+
*/
|
|
100
|
+
export function generateWebSocketKey() {
|
|
101
|
+
return crypto.randomBytes(16).toString('base64');
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm90b2NvbHMvd2Vic29ja2V0L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFhO0lBQzFDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsdUNBQXVDO1FBQ3ZDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzFDLENBQUM7U0FBTSxJQUFJLElBQUksWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUNsQyxxQkFBcUI7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7U0FBTSxJQUFJLElBQUksWUFBWSxXQUFXLEVBQUUsQ0FBQztRQUN2QyxrQkFBa0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMvQiwwQ0FBMEM7UUFDMUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hDLElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRSxDQUFDO2dCQUM1QixPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzVCLENBQUM7aUJBQU0sSUFBSSxLQUFLLFlBQVksV0FBVyxFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sR0FBRyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDaEMsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FB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
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as plugins from '../../../plugins.js';
|
|
2
|
+
import { HttpStatus as ProtocolHttpStatus } from '../../../protocols/http/index.js';
|
|
2
3
|
/**
|
|
3
4
|
* HTTP-specific event types
|
|
4
5
|
*/
|
|
@@ -8,34 +9,31 @@ export declare enum HttpEvents {
|
|
|
8
9
|
REQUEST_HANDLED = "request-handled",
|
|
9
10
|
REQUEST_ERROR = "request-error"
|
|
10
11
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
SERVICE_UNAVAILABLE = 503,
|
|
31
|
-
GATEWAY_TIMEOUT = 504
|
|
32
|
-
}
|
|
12
|
+
export declare const HttpStatus: {
|
|
13
|
+
readonly OK: ProtocolHttpStatus.OK;
|
|
14
|
+
readonly MOVED_PERMANENTLY: ProtocolHttpStatus.MOVED_PERMANENTLY;
|
|
15
|
+
readonly FOUND: ProtocolHttpStatus.FOUND;
|
|
16
|
+
readonly TEMPORARY_REDIRECT: ProtocolHttpStatus.TEMPORARY_REDIRECT;
|
|
17
|
+
readonly PERMANENT_REDIRECT: ProtocolHttpStatus.PERMANENT_REDIRECT;
|
|
18
|
+
readonly BAD_REQUEST: ProtocolHttpStatus.BAD_REQUEST;
|
|
19
|
+
readonly UNAUTHORIZED: ProtocolHttpStatus.UNAUTHORIZED;
|
|
20
|
+
readonly FORBIDDEN: ProtocolHttpStatus.FORBIDDEN;
|
|
21
|
+
readonly NOT_FOUND: ProtocolHttpStatus.NOT_FOUND;
|
|
22
|
+
readonly METHOD_NOT_ALLOWED: ProtocolHttpStatus.METHOD_NOT_ALLOWED;
|
|
23
|
+
readonly REQUEST_TIMEOUT: ProtocolHttpStatus.REQUEST_TIMEOUT;
|
|
24
|
+
readonly TOO_MANY_REQUESTS: ProtocolHttpStatus.TOO_MANY_REQUESTS;
|
|
25
|
+
readonly INTERNAL_SERVER_ERROR: ProtocolHttpStatus.INTERNAL_SERVER_ERROR;
|
|
26
|
+
readonly NOT_IMPLEMENTED: ProtocolHttpStatus.NOT_IMPLEMENTED;
|
|
27
|
+
readonly BAD_GATEWAY: ProtocolHttpStatus.BAD_GATEWAY;
|
|
28
|
+
readonly SERVICE_UNAVAILABLE: ProtocolHttpStatus.SERVICE_UNAVAILABLE;
|
|
29
|
+
readonly GATEWAY_TIMEOUT: ProtocolHttpStatus.GATEWAY_TIMEOUT;
|
|
30
|
+
};
|
|
33
31
|
/**
|
|
34
32
|
* Base error class for HTTP-related errors
|
|
35
33
|
*/
|
|
36
34
|
export declare class HttpError extends Error {
|
|
37
|
-
readonly statusCode:
|
|
38
|
-
constructor(message: string, statusCode?:
|
|
35
|
+
readonly statusCode: number;
|
|
36
|
+
constructor(message: string, statusCode?: number);
|
|
39
37
|
}
|
|
40
38
|
/**
|
|
41
39
|
* Error related to certificate operations
|
|
@@ -50,7 +48,7 @@ export declare class CertificateError extends HttpError {
|
|
|
50
48
|
*/
|
|
51
49
|
export declare class ServerError extends HttpError {
|
|
52
50
|
readonly code?: string;
|
|
53
|
-
constructor(message: string, code?: string, statusCode?:
|
|
51
|
+
constructor(message: string, code?: string, statusCode?: number);
|
|
54
52
|
}
|
|
55
53
|
/**
|
|
56
54
|
* Error for bad requests
|
|
@@ -70,7 +68,7 @@ export declare class NotFoundError extends HttpError {
|
|
|
70
68
|
export interface IRedirectConfig {
|
|
71
69
|
source: string;
|
|
72
70
|
destination: string;
|
|
73
|
-
type:
|
|
71
|
+
type: number;
|
|
74
72
|
preserveQuery?: boolean;
|
|
75
73
|
}
|
|
76
74
|
/**
|
|
@@ -92,7 +90,7 @@ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' |
|
|
|
92
90
|
/**
|
|
93
91
|
* Helper function to get HTTP status text
|
|
94
92
|
*/
|
|
95
|
-
export declare function getStatusText(status:
|
|
93
|
+
export declare function getStatusText(status: number): string;
|
|
96
94
|
export interface IDomainOptions {
|
|
97
95
|
domainName: string;
|
|
98
96
|
sslRedirect: boolean;
|