@push.rocks/smartproxy 21.0.0 → 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.
Files changed (146) hide show
  1. package/changelog.md +9 -0
  2. package/dist_ts/core/utils/proxy-protocol.d.ts +5 -17
  3. package/dist_ts/core/utils/proxy-protocol.js +13 -97
  4. package/dist_ts/core/utils/websocket-utils.d.ts +6 -7
  5. package/dist_ts/core/utils/websocket-utils.js +10 -66
  6. package/dist_ts/detection/detectors/http-detector-v2.d.ts +33 -0
  7. package/dist_ts/detection/detectors/http-detector-v2.js +87 -0
  8. package/dist_ts/detection/detectors/http-detector.d.ts +33 -0
  9. package/dist_ts/detection/detectors/http-detector.js +89 -0
  10. package/dist_ts/detection/detectors/quick-detector.d.ts +28 -0
  11. package/dist_ts/detection/detectors/quick-detector.js +131 -0
  12. package/dist_ts/detection/detectors/routing-extractor.d.ts +28 -0
  13. package/dist_ts/detection/detectors/routing-extractor.js +122 -0
  14. package/dist_ts/detection/detectors/tls-detector-v2.d.ts +33 -0
  15. package/dist_ts/detection/detectors/tls-detector-v2.js +80 -0
  16. package/dist_ts/detection/detectors/tls-detector.d.ts +33 -0
  17. package/dist_ts/detection/detectors/tls-detector.js +106 -0
  18. package/dist_ts/detection/index.d.ts +17 -0
  19. package/dist_ts/detection/index.js +22 -0
  20. package/dist_ts/detection/models/detection-types.d.ts +87 -0
  21. package/dist_ts/detection/models/detection-types.js +5 -0
  22. package/dist_ts/detection/models/interfaces.d.ts +97 -0
  23. package/dist_ts/detection/models/interfaces.js +5 -0
  24. package/dist_ts/detection/protocol-detector-v2.d.ts +46 -0
  25. package/dist_ts/detection/protocol-detector-v2.js +116 -0
  26. package/dist_ts/detection/protocol-detector.d.ts +74 -0
  27. package/dist_ts/detection/protocol-detector.js +173 -0
  28. package/dist_ts/detection/utils/buffer-utils.d.ts +61 -0
  29. package/dist_ts/detection/utils/buffer-utils.js +127 -0
  30. package/dist_ts/detection/utils/fragment-manager.d.ts +31 -0
  31. package/dist_ts/detection/utils/fragment-manager.js +53 -0
  32. package/dist_ts/detection/utils/parser-utils.d.ts +42 -0
  33. package/dist_ts/detection/utils/parser-utils.js +63 -0
  34. package/dist_ts/index.d.ts +2 -0
  35. package/dist_ts/index.js +3 -1
  36. package/dist_ts/protocols/common/fragment-handler.d.ts +73 -0
  37. package/dist_ts/protocols/common/fragment-handler.js +117 -0
  38. package/dist_ts/protocols/common/index.d.ts +7 -0
  39. package/dist_ts/protocols/common/index.js +8 -0
  40. package/dist_ts/protocols/common/types.d.ts +68 -0
  41. package/dist_ts/protocols/common/types.js +7 -0
  42. package/dist_ts/protocols/http/constants.d.ts +119 -0
  43. package/dist_ts/protocols/http/constants.js +200 -0
  44. package/dist_ts/protocols/http/index.d.ts +7 -0
  45. package/dist_ts/protocols/http/index.js +8 -0
  46. package/dist_ts/protocols/http/parser.d.ts +58 -0
  47. package/dist_ts/protocols/http/parser.js +184 -0
  48. package/dist_ts/protocols/http/types.d.ts +62 -0
  49. package/dist_ts/protocols/http/types.js +5 -0
  50. package/dist_ts/protocols/index.d.ts +11 -0
  51. package/dist_ts/protocols/index.js +12 -0
  52. package/dist_ts/protocols/proxy/index.d.ts +6 -0
  53. package/dist_ts/protocols/proxy/index.js +7 -0
  54. package/dist_ts/protocols/proxy/parser.d.ts +44 -0
  55. package/dist_ts/protocols/proxy/parser.js +153 -0
  56. package/dist_ts/protocols/proxy/types.d.ts +47 -0
  57. package/dist_ts/protocols/proxy/types.js +6 -0
  58. package/dist_ts/protocols/tls/alerts/index.d.ts +4 -0
  59. package/dist_ts/protocols/tls/alerts/index.js +5 -0
  60. package/dist_ts/protocols/tls/alerts/tls-alert.d.ts +150 -0
  61. package/dist_ts/protocols/tls/alerts/tls-alert.js +226 -0
  62. package/dist_ts/protocols/tls/constants.d.ts +122 -0
  63. package/dist_ts/protocols/tls/constants.js +135 -0
  64. package/dist_ts/protocols/tls/index.d.ts +12 -0
  65. package/dist_ts/protocols/tls/index.js +27 -0
  66. package/dist_ts/protocols/tls/parser.d.ts +53 -0
  67. package/dist_ts/protocols/tls/parser.js +294 -0
  68. package/dist_ts/protocols/tls/sni/client-hello-parser.d.ts +100 -0
  69. package/dist_ts/protocols/tls/sni/client-hello-parser.js +463 -0
  70. package/dist_ts/protocols/tls/sni/index.d.ts +5 -0
  71. package/dist_ts/protocols/tls/sni/index.js +6 -0
  72. package/dist_ts/protocols/tls/sni/sni-extraction.d.ts +58 -0
  73. package/dist_ts/protocols/tls/sni/sni-extraction.js +275 -0
  74. package/dist_ts/protocols/tls/types.d.ts +65 -0
  75. package/dist_ts/protocols/tls/types.js +5 -0
  76. package/dist_ts/protocols/tls/utils/index.d.ts +4 -0
  77. package/dist_ts/protocols/tls/utils/index.js +5 -0
  78. package/dist_ts/protocols/tls/utils/tls-utils.d.ts +158 -0
  79. package/dist_ts/protocols/tls/utils/tls-utils.js +187 -0
  80. package/dist_ts/protocols/websocket/constants.d.ts +55 -0
  81. package/dist_ts/protocols/websocket/constants.js +58 -0
  82. package/dist_ts/protocols/websocket/index.d.ts +7 -0
  83. package/dist_ts/protocols/websocket/index.js +8 -0
  84. package/dist_ts/protocols/websocket/types.d.ts +47 -0
  85. package/dist_ts/protocols/websocket/types.js +5 -0
  86. package/dist_ts/protocols/websocket/utils.d.ts +25 -0
  87. package/dist_ts/protocols/websocket/utils.js +103 -0
  88. package/dist_ts/proxies/http-proxy/models/http-types.d.ts +25 -27
  89. package/dist_ts/proxies/http-proxy/models/http-types.js +24 -44
  90. package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +5 -0
  91. package/dist_ts/proxies/smart-proxy/route-connection-handler.js +81 -61
  92. package/dist_ts/proxies/smart-proxy/tls-manager.js +2 -1
  93. package/dist_ts/proxies/smart-proxy/utils/route-helpers.d.ts +2 -0
  94. package/dist_ts/proxies/smart-proxy/utils/route-helpers.js +61 -52
  95. package/dist_ts/tls/index.d.ts +5 -7
  96. package/dist_ts/tls/index.js +8 -11
  97. package/dist_ts/tls/sni/client-hello-parser.js +3 -2
  98. package/dist_ts/tls/sni/sni-handler.js +4 -4
  99. package/dist_ts/tls/utils/tls-utils.d.ts +1 -110
  100. package/dist_ts/tls/utils/tls-utils.js +4 -116
  101. package/package.json +17 -8
  102. package/readme.plan.md +0 -0
  103. package/ts/core/utils/proxy-protocol.ts +14 -131
  104. package/ts/core/utils/websocket-utils.ts +12 -60
  105. package/ts/detection/detectors/http-detector.ts +114 -0
  106. package/ts/detection/detectors/quick-detector.ts +148 -0
  107. package/ts/detection/detectors/routing-extractor.ts +147 -0
  108. package/ts/detection/detectors/tls-detector.ts +120 -0
  109. package/ts/detection/index.ts +25 -0
  110. package/ts/detection/models/detection-types.ts +102 -0
  111. package/ts/detection/models/interfaces.ts +115 -0
  112. package/ts/detection/protocol-detector.ts +230 -0
  113. package/ts/detection/utils/buffer-utils.ts +141 -0
  114. package/ts/detection/utils/fragment-manager.ts +64 -0
  115. package/ts/detection/utils/parser-utils.ts +77 -0
  116. package/ts/index.ts +3 -1
  117. package/ts/protocols/common/fragment-handler.ts +163 -0
  118. package/ts/protocols/common/index.ts +8 -0
  119. package/ts/protocols/common/types.ts +76 -0
  120. package/ts/protocols/http/constants.ts +219 -0
  121. package/ts/protocols/http/index.ts +8 -0
  122. package/ts/protocols/http/parser.ts +219 -0
  123. package/ts/protocols/http/types.ts +70 -0
  124. package/ts/protocols/index.ts +12 -0
  125. package/ts/protocols/proxy/index.ts +7 -0
  126. package/ts/protocols/proxy/parser.ts +183 -0
  127. package/ts/protocols/proxy/types.ts +53 -0
  128. package/ts/{tls → protocols/tls}/alerts/tls-alert.ts +1 -1
  129. package/ts/protocols/tls/index.ts +37 -0
  130. package/ts/protocols/tls/sni/index.ts +6 -0
  131. package/ts/{tls → protocols/tls}/utils/tls-utils.ts +1 -1
  132. package/ts/protocols/websocket/constants.ts +60 -0
  133. package/ts/protocols/websocket/index.ts +8 -0
  134. package/ts/protocols/websocket/types.ts +53 -0
  135. package/ts/protocols/websocket/utils.ts +98 -0
  136. package/ts/proxies/http-proxy/models/http-types.ts +29 -46
  137. package/ts/proxies/smart-proxy/models/interfaces.ts +7 -0
  138. package/ts/proxies/smart-proxy/route-connection-handler.ts +91 -68
  139. package/ts/proxies/smart-proxy/tls-manager.ts +1 -0
  140. package/ts/proxies/smart-proxy/utils/route-helpers.ts +72 -56
  141. package/ts/tls/index.ts +8 -12
  142. package/ts/tls/sni/sni-handler.ts +3 -3
  143. /package/ts/{tls → protocols/tls}/alerts/index.ts +0 -0
  144. /package/ts/{tls → protocols/tls}/sni/client-hello-parser.ts +0 -0
  145. /package/ts/{tls → protocols/tls}/sni/sni-extraction.ts +0 -0
  146. /package/ts/{tls → protocols/tls}/utils/index.ts +0 -0
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Protocol-specific modules for smartproxy
3
+ *
4
+ * This directory contains generic protocol knowledge separated from
5
+ * smartproxy-specific implementation details.
6
+ */
7
+ export * as common from './common/index.js';
8
+ export * as tls from './tls/index.js';
9
+ export * as http from './http/index.js';
10
+ export * as proxy from './proxy/index.js';
11
+ export * as websocket from './websocket/index.js';
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Protocol-specific modules for smartproxy
3
+ *
4
+ * This directory contains generic protocol knowledge separated from
5
+ * smartproxy-specific implementation details.
6
+ */
7
+ export * as common from './common/index.js';
8
+ export * as tls from './tls/index.js';
9
+ export * as http from './http/index.js';
10
+ export * as proxy from './proxy/index.js';
11
+ export * as websocket from './websocket/index.js';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9wcm90b2NvbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7QUFFSCxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxTQUFTLE1BQU0sc0JBQXNCLENBQUMifQ==
@@ -0,0 +1,6 @@
1
+ /**
2
+ * PROXY Protocol Module
3
+ * HAProxy PROXY protocol implementation
4
+ */
5
+ export * from './types.js';
6
+ export * from './parser.js';
@@ -0,0 +1,7 @@
1
+ /**
2
+ * PROXY Protocol Module
3
+ * HAProxy PROXY protocol implementation
4
+ */
5
+ export * from './types.js';
6
+ export * from './parser.js';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm90b2NvbHMvcHJveHkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxhQUFhLENBQUMifQ==
@@ -0,0 +1,44 @@
1
+ /**
2
+ * PROXY Protocol Parser
3
+ * Implementation of HAProxy PROXY protocol v1 (text format)
4
+ * Spec: https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt
5
+ */
6
+ import type { IProxyInfo, IProxyParseResult, TProxyProtocol } from './types.js';
7
+ /**
8
+ * PROXY protocol parser
9
+ */
10
+ export declare class ProxyProtocolParser {
11
+ static readonly PROXY_V1_SIGNATURE = "PROXY ";
12
+ static readonly MAX_HEADER_LENGTH = 107;
13
+ static readonly HEADER_TERMINATOR = "\r\n";
14
+ /**
15
+ * Parse PROXY protocol v1 header from buffer
16
+ * Returns proxy info and remaining data after header
17
+ */
18
+ static parse(data: Buffer): IProxyParseResult;
19
+ /**
20
+ * Generate PROXY protocol v1 header
21
+ */
22
+ static generate(info: IProxyInfo): Buffer;
23
+ /**
24
+ * Validate IP address format
25
+ */
26
+ static isValidIP(ip: string, protocol: TProxyProtocol): boolean;
27
+ /**
28
+ * Check if string is valid IPv4
29
+ */
30
+ static isIPv4(ip: string): boolean;
31
+ /**
32
+ * Check if string is valid IPv6
33
+ */
34
+ static isIPv6(ip: string): boolean;
35
+ /**
36
+ * Create a connection ID string for tracking
37
+ */
38
+ static createConnectionId(connectionInfo: {
39
+ sourceIp?: string;
40
+ sourcePort?: number;
41
+ destIp?: string;
42
+ destPort?: number;
43
+ }): string;
44
+ }
@@ -0,0 +1,153 @@
1
+ /**
2
+ * PROXY Protocol Parser
3
+ * Implementation of HAProxy PROXY protocol v1 (text format)
4
+ * Spec: https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt
5
+ */
6
+ /**
7
+ * PROXY protocol parser
8
+ */
9
+ export class ProxyProtocolParser {
10
+ static { this.PROXY_V1_SIGNATURE = 'PROXY '; }
11
+ static { this.MAX_HEADER_LENGTH = 107; } // Max length for v1 header
12
+ static { this.HEADER_TERMINATOR = '\r\n'; }
13
+ /**
14
+ * Parse PROXY protocol v1 header from buffer
15
+ * Returns proxy info and remaining data after header
16
+ */
17
+ static parse(data) {
18
+ // Check if buffer starts with PROXY signature
19
+ if (!data.toString('ascii', 0, 6).startsWith(this.PROXY_V1_SIGNATURE)) {
20
+ return {
21
+ proxyInfo: null,
22
+ remainingData: data
23
+ };
24
+ }
25
+ // Find header terminator
26
+ const headerEndIndex = data.indexOf(this.HEADER_TERMINATOR);
27
+ if (headerEndIndex === -1) {
28
+ // Header incomplete, need more data
29
+ if (data.length > this.MAX_HEADER_LENGTH) {
30
+ // Header too long, invalid
31
+ throw new Error('PROXY protocol header exceeds maximum length');
32
+ }
33
+ return {
34
+ proxyInfo: null,
35
+ remainingData: data
36
+ };
37
+ }
38
+ // Extract header line
39
+ const headerLine = data.toString('ascii', 0, headerEndIndex);
40
+ const remainingData = data.slice(headerEndIndex + 2); // Skip \r\n
41
+ // Parse header
42
+ const parts = headerLine.split(' ');
43
+ if (parts.length < 2) {
44
+ throw new Error(`Invalid PROXY protocol header format: ${headerLine}`);
45
+ }
46
+ const [signature, protocol] = parts;
47
+ // Validate protocol
48
+ if (!['TCP4', 'TCP6', 'UNKNOWN'].includes(protocol)) {
49
+ throw new Error(`Invalid PROXY protocol: ${protocol}`);
50
+ }
51
+ // For UNKNOWN protocol, ignore addresses
52
+ if (protocol === 'UNKNOWN') {
53
+ return {
54
+ proxyInfo: {
55
+ protocol: 'UNKNOWN',
56
+ sourceIP: '',
57
+ sourcePort: 0,
58
+ destinationIP: '',
59
+ destinationPort: 0
60
+ },
61
+ remainingData
62
+ };
63
+ }
64
+ // For TCP4/TCP6, we need all 6 parts
65
+ if (parts.length !== 6) {
66
+ throw new Error(`Invalid PROXY protocol header format: ${headerLine}`);
67
+ }
68
+ const [, , srcIP, dstIP, srcPort, dstPort] = parts;
69
+ // Validate and parse ports
70
+ const sourcePort = parseInt(srcPort, 10);
71
+ const destinationPort = parseInt(dstPort, 10);
72
+ if (isNaN(sourcePort) || sourcePort < 0 || sourcePort > 65535) {
73
+ throw new Error(`Invalid source port: ${srcPort}`);
74
+ }
75
+ if (isNaN(destinationPort) || destinationPort < 0 || destinationPort > 65535) {
76
+ throw new Error(`Invalid destination port: ${dstPort}`);
77
+ }
78
+ // Validate IP addresses
79
+ const protocolType = protocol;
80
+ if (!this.isValidIP(srcIP, protocolType)) {
81
+ throw new Error(`Invalid source IP for ${protocol}: ${srcIP}`);
82
+ }
83
+ if (!this.isValidIP(dstIP, protocolType)) {
84
+ throw new Error(`Invalid destination IP for ${protocol}: ${dstIP}`);
85
+ }
86
+ return {
87
+ proxyInfo: {
88
+ protocol: protocolType,
89
+ sourceIP: srcIP,
90
+ sourcePort,
91
+ destinationIP: dstIP,
92
+ destinationPort
93
+ },
94
+ remainingData
95
+ };
96
+ }
97
+ /**
98
+ * Generate PROXY protocol v1 header
99
+ */
100
+ static generate(info) {
101
+ if (info.protocol === 'UNKNOWN') {
102
+ return Buffer.from(`PROXY UNKNOWN\r\n`, 'ascii');
103
+ }
104
+ const header = `PROXY ${info.protocol} ${info.sourceIP} ${info.destinationIP} ${info.sourcePort} ${info.destinationPort}\r\n`;
105
+ if (header.length > this.MAX_HEADER_LENGTH) {
106
+ throw new Error('Generated PROXY protocol header exceeds maximum length');
107
+ }
108
+ return Buffer.from(header, 'ascii');
109
+ }
110
+ /**
111
+ * Validate IP address format
112
+ */
113
+ static isValidIP(ip, protocol) {
114
+ if (protocol === 'TCP4') {
115
+ return this.isIPv4(ip);
116
+ }
117
+ else if (protocol === 'TCP6') {
118
+ return this.isIPv6(ip);
119
+ }
120
+ return false;
121
+ }
122
+ /**
123
+ * Check if string is valid IPv4
124
+ */
125
+ static isIPv4(ip) {
126
+ const parts = ip.split('.');
127
+ if (parts.length !== 4)
128
+ return false;
129
+ for (const part of parts) {
130
+ const num = parseInt(part, 10);
131
+ if (isNaN(num) || num < 0 || num > 255 || part !== num.toString()) {
132
+ return false;
133
+ }
134
+ }
135
+ return true;
136
+ }
137
+ /**
138
+ * Check if string is valid IPv6
139
+ */
140
+ static isIPv6(ip) {
141
+ // Basic IPv6 validation
142
+ const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;
143
+ return ipv6Regex.test(ip);
144
+ }
145
+ /**
146
+ * Create a connection ID string for tracking
147
+ */
148
+ static createConnectionId(connectionInfo) {
149
+ const { sourceIp, sourcePort, destIp, destPort } = connectionInfo;
150
+ return `${sourceIp}:${sourcePort}-${destIp}:${destPort}`;
151
+ }
152
+ }
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJvdG9jb2xzL3Byb3h5L3BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBSUg7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO2FBQ2QsdUJBQWtCLEdBQUcsUUFBUSxDQUFDO2FBQzlCLHNCQUFpQixHQUFHLEdBQUcsQ0FBQyxHQUFDLDJCQUEyQjthQUNwRCxzQkFBaUIsR0FBRyxNQUFNLENBQUM7SUFFM0M7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFZO1FBQ3ZCLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1lBQ3RFLE9BQU87Z0JBQ0wsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsYUFBYSxFQUFFLElBQUk7YUFDcEIsQ0FBQztRQUNKLENBQUM7UUFFRCx5QkFBeUI7UUFDekIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1RCxJQUFJLGNBQWMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzFCLG9DQUFvQztZQUNwQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pDLDJCQUEyQjtnQkFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7WUFDRCxPQUFPO2dCQUNMLFNBQVMsRUFBRSxJQUFJO2dCQUNmLGFBQWEsRUFBRSxJQUFJO2FBQ3BCLENBQUM7UUFDSixDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxF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
@@ -0,0 +1,47 @@
1
+ /**
2
+ * PROXY Protocol Type Definitions
3
+ * Based on HAProxy PROXY protocol specification
4
+ */
5
+ /**
6
+ * PROXY protocol version
7
+ */
8
+ export type TProxyProtocolVersion = 'v1' | 'v2';
9
+ /**
10
+ * Connection protocol type
11
+ */
12
+ export type TProxyProtocol = 'TCP4' | 'TCP6' | 'UNKNOWN';
13
+ /**
14
+ * Interface representing parsed PROXY protocol information
15
+ */
16
+ export interface IProxyInfo {
17
+ protocol: TProxyProtocol;
18
+ sourceIP: string;
19
+ sourcePort: number;
20
+ destinationIP: string;
21
+ destinationPort: number;
22
+ }
23
+ /**
24
+ * Interface for parse result including remaining data
25
+ */
26
+ export interface IProxyParseResult {
27
+ proxyInfo: IProxyInfo | null;
28
+ remainingData: Buffer;
29
+ }
30
+ /**
31
+ * PROXY protocol v2 header format
32
+ */
33
+ export interface IProxyV2Header {
34
+ signature: Buffer;
35
+ versionCommand: number;
36
+ family: number;
37
+ length: number;
38
+ }
39
+ /**
40
+ * Connection information for PROXY protocol
41
+ */
42
+ export interface IProxyConnectionInfo {
43
+ sourceIp?: string;
44
+ sourcePort?: number;
45
+ destIp?: string;
46
+ destPort?: number;
47
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * PROXY Protocol Type Definitions
3
+ * Based on HAProxy PROXY protocol specification
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm90b2NvbHMvcHJveHkvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHIn0=
@@ -0,0 +1,4 @@
1
+ export {};
2
+ /**
3
+ * TLS alerts
4
+ */
@@ -0,0 +1,5 @@
1
+ export {};
2
+ /**
3
+ * TLS alerts
4
+ */
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9wcm90b2NvbHMvdGxzL2FsZXJ0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUcifQ==
@@ -0,0 +1,150 @@
1
+ import * as plugins from '../../../plugins.js';
2
+ import { TlsAlertLevel, TlsAlertDescription } from '../utils/tls-utils.js';
3
+ /**
4
+ * TlsAlert class for creating and sending TLS alert messages
5
+ */
6
+ export declare class TlsAlert {
7
+ static readonly LEVEL_WARNING = TlsAlertLevel.WARNING;
8
+ static readonly LEVEL_FATAL = TlsAlertLevel.FATAL;
9
+ static readonly CLOSE_NOTIFY = TlsAlertDescription.CLOSE_NOTIFY;
10
+ static readonly UNEXPECTED_MESSAGE = TlsAlertDescription.UNEXPECTED_MESSAGE;
11
+ static readonly BAD_RECORD_MAC = TlsAlertDescription.BAD_RECORD_MAC;
12
+ static readonly DECRYPTION_FAILED = TlsAlertDescription.DECRYPTION_FAILED;
13
+ static readonly RECORD_OVERFLOW = TlsAlertDescription.RECORD_OVERFLOW;
14
+ static readonly DECOMPRESSION_FAILURE = TlsAlertDescription.DECOMPRESSION_FAILURE;
15
+ static readonly HANDSHAKE_FAILURE = TlsAlertDescription.HANDSHAKE_FAILURE;
16
+ static readonly NO_CERTIFICATE = TlsAlertDescription.NO_CERTIFICATE;
17
+ static readonly BAD_CERTIFICATE = TlsAlertDescription.BAD_CERTIFICATE;
18
+ static readonly UNSUPPORTED_CERTIFICATE = TlsAlertDescription.UNSUPPORTED_CERTIFICATE;
19
+ static readonly CERTIFICATE_REVOKED = TlsAlertDescription.CERTIFICATE_REVOKED;
20
+ static readonly CERTIFICATE_EXPIRED = TlsAlertDescription.CERTIFICATE_EXPIRED;
21
+ static readonly CERTIFICATE_UNKNOWN = TlsAlertDescription.CERTIFICATE_UNKNOWN;
22
+ static readonly ILLEGAL_PARAMETER = TlsAlertDescription.ILLEGAL_PARAMETER;
23
+ static readonly UNKNOWN_CA = TlsAlertDescription.UNKNOWN_CA;
24
+ static readonly ACCESS_DENIED = TlsAlertDescription.ACCESS_DENIED;
25
+ static readonly DECODE_ERROR = TlsAlertDescription.DECODE_ERROR;
26
+ static readonly DECRYPT_ERROR = TlsAlertDescription.DECRYPT_ERROR;
27
+ static readonly EXPORT_RESTRICTION = TlsAlertDescription.EXPORT_RESTRICTION;
28
+ static readonly PROTOCOL_VERSION = TlsAlertDescription.PROTOCOL_VERSION;
29
+ static readonly INSUFFICIENT_SECURITY = TlsAlertDescription.INSUFFICIENT_SECURITY;
30
+ static readonly INTERNAL_ERROR = TlsAlertDescription.INTERNAL_ERROR;
31
+ static readonly INAPPROPRIATE_FALLBACK = TlsAlertDescription.INAPPROPRIATE_FALLBACK;
32
+ static readonly USER_CANCELED = TlsAlertDescription.USER_CANCELED;
33
+ static readonly NO_RENEGOTIATION = TlsAlertDescription.NO_RENEGOTIATION;
34
+ static readonly MISSING_EXTENSION = TlsAlertDescription.MISSING_EXTENSION;
35
+ static readonly UNSUPPORTED_EXTENSION = TlsAlertDescription.UNSUPPORTED_EXTENSION;
36
+ static readonly CERTIFICATE_REQUIRED = TlsAlertDescription.CERTIFICATE_REQUIRED;
37
+ static readonly UNRECOGNIZED_NAME = TlsAlertDescription.UNRECOGNIZED_NAME;
38
+ static readonly BAD_CERTIFICATE_STATUS_RESPONSE = TlsAlertDescription.BAD_CERTIFICATE_STATUS_RESPONSE;
39
+ static readonly BAD_CERTIFICATE_HASH_VALUE = TlsAlertDescription.BAD_CERTIFICATE_HASH_VALUE;
40
+ static readonly UNKNOWN_PSK_IDENTITY = TlsAlertDescription.UNKNOWN_PSK_IDENTITY;
41
+ static readonly CERTIFICATE_REQUIRED_1_3 = TlsAlertDescription.CERTIFICATE_REQUIRED_1_3;
42
+ static readonly NO_APPLICATION_PROTOCOL = TlsAlertDescription.NO_APPLICATION_PROTOCOL;
43
+ /**
44
+ * Create a TLS alert buffer with the specified level and description code
45
+ *
46
+ * @param level Alert level (warning or fatal)
47
+ * @param description Alert description code
48
+ * @param tlsVersion TLS version bytes (default is TLS 1.2: 0x0303)
49
+ * @returns Buffer containing the TLS alert message
50
+ */
51
+ static create(level: number, description: number, tlsVersion?: [number, number]): Buffer;
52
+ /**
53
+ * Create a warning-level TLS alert
54
+ *
55
+ * @param description Alert description code
56
+ * @returns Buffer containing the warning-level TLS alert message
57
+ */
58
+ static createWarning(description: number): Buffer;
59
+ /**
60
+ * Create a fatal-level TLS alert
61
+ *
62
+ * @param description Alert description code
63
+ * @returns Buffer containing the fatal-level TLS alert message
64
+ */
65
+ static createFatal(description: number): Buffer;
66
+ /**
67
+ * Send a TLS alert to a socket and optionally close the connection
68
+ *
69
+ * @param socket The socket to send the alert to
70
+ * @param level Alert level (warning or fatal)
71
+ * @param description Alert description code
72
+ * @param closeAfterSend Whether to close the connection after sending the alert
73
+ * @param closeDelay Milliseconds to wait before closing the connection (default: 200ms)
74
+ * @returns Promise that resolves when the alert has been sent
75
+ */
76
+ static send(socket: plugins.net.Socket, level: number, description: number, closeAfterSend?: boolean, closeDelay?: number): Promise<void>;
77
+ /**
78
+ * Pre-defined TLS alert messages
79
+ */
80
+ static readonly alerts: {
81
+ closeNotify: Buffer<ArrayBufferLike>;
82
+ unsupportedExtension: Buffer<ArrayBufferLike>;
83
+ certificateRequired: Buffer<ArrayBufferLike>;
84
+ unrecognizedName: Buffer<ArrayBufferLike>;
85
+ noRenegotiation: Buffer<ArrayBufferLike>;
86
+ userCanceled: Buffer<ArrayBufferLike>;
87
+ certificateExpiredWarning: Buffer<ArrayBufferLike>;
88
+ handshakeFailureWarning: Buffer<ArrayBufferLike>;
89
+ insufficientSecurityWarning: Buffer<ArrayBufferLike>;
90
+ unexpectedMessage: Buffer<ArrayBufferLike>;
91
+ badRecordMac: Buffer<ArrayBufferLike>;
92
+ recordOverflow: Buffer<ArrayBufferLike>;
93
+ handshakeFailure: Buffer<ArrayBufferLike>;
94
+ badCertificate: Buffer<ArrayBufferLike>;
95
+ certificateExpired: Buffer<ArrayBufferLike>;
96
+ certificateUnknown: Buffer<ArrayBufferLike>;
97
+ illegalParameter: Buffer<ArrayBufferLike>;
98
+ unknownCA: Buffer<ArrayBufferLike>;
99
+ accessDenied: Buffer<ArrayBufferLike>;
100
+ decodeError: Buffer<ArrayBufferLike>;
101
+ decryptError: Buffer<ArrayBufferLike>;
102
+ protocolVersion: Buffer<ArrayBufferLike>;
103
+ insufficientSecurity: Buffer<ArrayBufferLike>;
104
+ internalError: Buffer<ArrayBufferLike>;
105
+ unrecognizedNameFatal: Buffer<ArrayBufferLike>;
106
+ };
107
+ /**
108
+ * Utility method to send a warning-level unrecognized_name alert
109
+ * Specifically designed for SNI issues to encourage the client to retry with SNI
110
+ *
111
+ * @param socket The socket to send the alert to
112
+ * @returns Promise that resolves when the alert has been sent
113
+ */
114
+ static sendSniRequired(socket: plugins.net.Socket): Promise<void>;
115
+ /**
116
+ * Utility method to send a close_notify alert and close the connection
117
+ *
118
+ * @param socket The socket to send the alert to
119
+ * @param closeDelay Milliseconds to wait before closing the connection (default: 200ms)
120
+ * @returns Promise that resolves when the alert has been sent and the connection closed
121
+ */
122
+ static sendCloseNotify(socket: plugins.net.Socket, closeDelay?: number): Promise<void>;
123
+ /**
124
+ * Utility method to send a certificate_expired alert to force new TLS session
125
+ *
126
+ * @param socket The socket to send the alert to
127
+ * @param fatal Whether to send as a fatal alert (default: false)
128
+ * @param closeAfterSend Whether to close the connection after sending the alert (default: true)
129
+ * @param closeDelay Milliseconds to wait before closing the connection (default: 200ms)
130
+ * @returns Promise that resolves when the alert has been sent
131
+ */
132
+ static sendCertificateExpired(socket: plugins.net.Socket, fatal?: boolean, closeAfterSend?: boolean, closeDelay?: number): Promise<void>;
133
+ /**
134
+ * Send a sequence of alerts to force SNI from clients
135
+ * This combines multiple alerts to ensure maximum browser compatibility
136
+ *
137
+ * @param socket The socket to send the alerts to
138
+ * @returns Promise that resolves when all alerts have been sent
139
+ */
140
+ static sendForceSniSequence(socket: plugins.net.Socket): Promise<void>;
141
+ /**
142
+ * Send a fatal level alert that immediately terminates the connection
143
+ *
144
+ * @param socket The socket to send the alert to
145
+ * @param description Alert description code
146
+ * @param closeDelay Milliseconds to wait before closing the connection (default: 100ms)
147
+ * @returns Promise that resolves when the alert has been sent and the connection closed
148
+ */
149
+ static sendFatalAndClose(socket: plugins.net.Socket, description: number, closeDelay?: number): Promise<void>;
150
+ }