@push.rocks/smartproxy 21.0.0 → 21.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/changelog.md +18 -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 +55 -0
  17. package/dist_ts/detection/detectors/tls-detector.js +206 -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 +1 -1
  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 +252 -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,73 @@
1
+ /**
2
+ * Shared Fragment Handler for Protocol Detection
3
+ *
4
+ * Provides unified fragment buffering and reassembly for protocols
5
+ * that may span multiple TCP packets.
6
+ */
7
+ import { Buffer } from 'buffer';
8
+ /**
9
+ * Fragment tracking information
10
+ */
11
+ export interface IFragmentInfo {
12
+ buffer: Buffer;
13
+ timestamp: number;
14
+ connectionId: string;
15
+ }
16
+ /**
17
+ * Options for fragment handling
18
+ */
19
+ export interface IFragmentOptions {
20
+ maxBufferSize?: number;
21
+ timeout?: number;
22
+ cleanupInterval?: number;
23
+ }
24
+ /**
25
+ * Result of fragment processing
26
+ */
27
+ export interface IFragmentResult {
28
+ isComplete: boolean;
29
+ buffer?: Buffer;
30
+ needsMoreData: boolean;
31
+ error?: string;
32
+ }
33
+ /**
34
+ * Shared fragment handler for protocol detection
35
+ */
36
+ export declare class FragmentHandler {
37
+ private options;
38
+ private fragments;
39
+ private cleanupTimer?;
40
+ constructor(options?: IFragmentOptions);
41
+ /**
42
+ * Add a fragment for a connection
43
+ */
44
+ addFragment(connectionId: string, fragment: Buffer): IFragmentResult;
45
+ /**
46
+ * Get the current buffer for a connection
47
+ */
48
+ getBuffer(connectionId: string): Buffer | undefined;
49
+ /**
50
+ * Mark a connection as complete and clean up
51
+ */
52
+ complete(connectionId: string): void;
53
+ /**
54
+ * Check if we're tracking a connection
55
+ */
56
+ hasConnection(connectionId: string): boolean;
57
+ /**
58
+ * Clean up expired fragments
59
+ */
60
+ cleanup(): void;
61
+ /**
62
+ * Clear all fragments
63
+ */
64
+ clear(): void;
65
+ /**
66
+ * Destroy the handler and clean up resources
67
+ */
68
+ destroy(): void;
69
+ /**
70
+ * Get the number of tracked connections
71
+ */
72
+ get size(): number;
73
+ }
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Shared Fragment Handler for Protocol Detection
3
+ *
4
+ * Provides unified fragment buffering and reassembly for protocols
5
+ * that may span multiple TCP packets.
6
+ */
7
+ import { Buffer } from 'buffer';
8
+ /**
9
+ * Shared fragment handler for protocol detection
10
+ */
11
+ export class FragmentHandler {
12
+ constructor(options = {}) {
13
+ this.options = options;
14
+ this.fragments = new Map();
15
+ // Start cleanup timer if not already running
16
+ if (options.cleanupInterval && !this.cleanupTimer) {
17
+ this.cleanupTimer = setInterval(() => this.cleanup(), options.cleanupInterval);
18
+ }
19
+ }
20
+ /**
21
+ * Add a fragment for a connection
22
+ */
23
+ addFragment(connectionId, fragment) {
24
+ const existing = this.fragments.get(connectionId);
25
+ if (existing) {
26
+ // Append to existing buffer
27
+ const newBuffer = Buffer.concat([existing.buffer, fragment]);
28
+ // Check size limit
29
+ const maxSize = this.options.maxBufferSize || 65536;
30
+ if (newBuffer.length > maxSize) {
31
+ this.fragments.delete(connectionId);
32
+ return {
33
+ isComplete: false,
34
+ needsMoreData: false,
35
+ error: 'Buffer size exceeded maximum allowed'
36
+ };
37
+ }
38
+ // Update fragment info
39
+ this.fragments.set(connectionId, {
40
+ buffer: newBuffer,
41
+ timestamp: Date.now(),
42
+ connectionId
43
+ });
44
+ return {
45
+ isComplete: false,
46
+ buffer: newBuffer,
47
+ needsMoreData: true
48
+ };
49
+ }
50
+ else {
51
+ // New fragment
52
+ this.fragments.set(connectionId, {
53
+ buffer: fragment,
54
+ timestamp: Date.now(),
55
+ connectionId
56
+ });
57
+ return {
58
+ isComplete: false,
59
+ buffer: fragment,
60
+ needsMoreData: true
61
+ };
62
+ }
63
+ }
64
+ /**
65
+ * Get the current buffer for a connection
66
+ */
67
+ getBuffer(connectionId) {
68
+ return this.fragments.get(connectionId)?.buffer;
69
+ }
70
+ /**
71
+ * Mark a connection as complete and clean up
72
+ */
73
+ complete(connectionId) {
74
+ this.fragments.delete(connectionId);
75
+ }
76
+ /**
77
+ * Check if we're tracking a connection
78
+ */
79
+ hasConnection(connectionId) {
80
+ return this.fragments.has(connectionId);
81
+ }
82
+ /**
83
+ * Clean up expired fragments
84
+ */
85
+ cleanup() {
86
+ const now = Date.now();
87
+ const timeout = this.options.timeout || 5000;
88
+ for (const [connectionId, info] of this.fragments.entries()) {
89
+ if (now - info.timestamp > timeout) {
90
+ this.fragments.delete(connectionId);
91
+ }
92
+ }
93
+ }
94
+ /**
95
+ * Clear all fragments
96
+ */
97
+ clear() {
98
+ this.fragments.clear();
99
+ }
100
+ /**
101
+ * Destroy the handler and clean up resources
102
+ */
103
+ destroy() {
104
+ if (this.cleanupTimer) {
105
+ clearInterval(this.cleanupTimer);
106
+ this.cleanupTimer = undefined;
107
+ }
108
+ this.clear();
109
+ }
110
+ /**
111
+ * Get the number of tracked connections
112
+ */
113
+ get size() {
114
+ return this.fragments.size;
115
+ }
116
+ }
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhZ21lbnQtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3Byb3RvY29scy9jb21tb24vZnJhZ21lbnQtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUE4QmhDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFBb0IsVUFBNEIsRUFBRTtRQUE5QixZQUFPLEdBQVAsT0FBTyxDQUF1QjtRQUgxQyxjQUFTLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7UUFJbkQsNkNBQTZDO1FBQzdDLElBQUksT0FBTyxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FDN0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUNwQixPQUFPLENBQUMsZUFBZSxDQUN4QixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxZQUFvQixFQUFFLFFBQWdCO1FBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWxELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYiw0QkFBNEI7WUFDNUIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUU3RCxtQkFBbUI7WUFDbkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDO1lBQ3BELElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3BDLE9BQU87b0JBQ0wsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLGFBQWEsRUFBRSxLQUFLO29CQUNwQixLQUFLLEVBQUUsc0NBQXNDO2lCQUM5QyxDQUFDO1lBQ0osQ0FBQztZQUVELHVCQUF1QjtZQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUU7Z0JBQy9CLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDckIsWUFBWTthQUNiLENBQUMsQ0FBQztZQUVILE9BQU87Z0JBQ0wsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixhQUFhLEVBQUUsSUFBSTthQUNwQixDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixlQUFlO1lBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFO2dCQUMvQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JCLFlBQVk7YUFDYixDQUFDLENBQUM7WUFFSCxPQUFPO2dCQUNMLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsYUFBYSxFQUFFLElBQUk7YUFDcEIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsWUFBb0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUSxDQUFDLFlBQW9CO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWEsQ0FBQyxZQUFvQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDTCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO1FBRTdDLEtBQUssTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDNUQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztJQUM3QixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Common Protocol Infrastructure
3
+ *
4
+ * Shared utilities and types for protocol handling
5
+ */
6
+ export * from './fragment-handler.js';
7
+ export * from './types.js';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Common Protocol Infrastructure
3
+ *
4
+ * Shared utilities and types for protocol handling
5
+ */
6
+ export * from './fragment-handler.js';
7
+ export * from './types.js';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm90b2NvbHMvY29tbW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsWUFBWSxDQUFDIn0=
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Common Protocol Types
3
+ *
4
+ * Shared types used across different protocol implementations
5
+ */
6
+ /**
7
+ * Supported protocol types
8
+ */
9
+ export type TProtocolType = 'tls' | 'http' | 'https' | 'websocket' | 'unknown';
10
+ /**
11
+ * Protocol detection result
12
+ */
13
+ export interface IProtocolDetectionResult {
14
+ protocol: TProtocolType;
15
+ confidence: number;
16
+ requiresMoreData?: boolean;
17
+ metadata?: {
18
+ version?: string;
19
+ method?: string;
20
+ [key: string]: any;
21
+ };
22
+ }
23
+ /**
24
+ * Routing information extracted from protocols
25
+ */
26
+ export interface IRoutingInfo {
27
+ domain?: string;
28
+ port?: number;
29
+ path?: string;
30
+ protocol: TProtocolType;
31
+ }
32
+ /**
33
+ * Connection context for protocol operations
34
+ */
35
+ export interface IConnectionContext {
36
+ id: string;
37
+ sourceIp?: string;
38
+ sourcePort?: number;
39
+ destIp?: string;
40
+ destPort?: number;
41
+ timestamp?: number;
42
+ }
43
+ /**
44
+ * Protocol detection options
45
+ */
46
+ export interface IProtocolDetectionOptions {
47
+ quickMode?: boolean;
48
+ extractRouting?: boolean;
49
+ maxWaitTime?: number;
50
+ maxBufferSize?: number;
51
+ }
52
+ /**
53
+ * Base interface for protocol detectors
54
+ */
55
+ export interface IProtocolDetector {
56
+ /**
57
+ * Check if this detector can handle the data
58
+ */
59
+ canHandle(data: Buffer): boolean;
60
+ /**
61
+ * Perform quick detection (first few bytes only)
62
+ */
63
+ quickDetect(data: Buffer): IProtocolDetectionResult;
64
+ /**
65
+ * Extract routing information if possible
66
+ */
67
+ extractRouting?(data: Buffer, context?: IConnectionContext): IRoutingInfo | null;
68
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Common Protocol Types
3
+ *
4
+ * Shared types used across different protocol implementations
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm90b2NvbHMvY29tbW9uL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUcifQ==
@@ -0,0 +1,119 @@
1
+ /**
2
+ * HTTP Protocol Constants
3
+ */
4
+ /**
5
+ * HTTP methods
6
+ */
7
+ export declare const HTTP_METHODS: readonly ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "CONNECT", "TRACE"];
8
+ export type THttpMethod = typeof HTTP_METHODS[number];
9
+ /**
10
+ * HTTP version strings
11
+ */
12
+ export declare const HTTP_VERSIONS: readonly ["HTTP/1.0", "HTTP/1.1", "HTTP/2", "HTTP/3"];
13
+ export type THttpVersion = typeof HTTP_VERSIONS[number];
14
+ /**
15
+ * HTTP status codes
16
+ */
17
+ export declare enum HttpStatus {
18
+ CONTINUE = 100,
19
+ SWITCHING_PROTOCOLS = 101,
20
+ PROCESSING = 102,
21
+ EARLY_HINTS = 103,
22
+ OK = 200,
23
+ CREATED = 201,
24
+ ACCEPTED = 202,
25
+ NON_AUTHORITATIVE_INFORMATION = 203,
26
+ NO_CONTENT = 204,
27
+ RESET_CONTENT = 205,
28
+ PARTIAL_CONTENT = 206,
29
+ MULTI_STATUS = 207,
30
+ ALREADY_REPORTED = 208,
31
+ IM_USED = 226,
32
+ MULTIPLE_CHOICES = 300,
33
+ MOVED_PERMANENTLY = 301,
34
+ FOUND = 302,
35
+ SEE_OTHER = 303,
36
+ NOT_MODIFIED = 304,
37
+ USE_PROXY = 305,
38
+ TEMPORARY_REDIRECT = 307,
39
+ PERMANENT_REDIRECT = 308,
40
+ BAD_REQUEST = 400,
41
+ UNAUTHORIZED = 401,
42
+ PAYMENT_REQUIRED = 402,
43
+ FORBIDDEN = 403,
44
+ NOT_FOUND = 404,
45
+ METHOD_NOT_ALLOWED = 405,
46
+ NOT_ACCEPTABLE = 406,
47
+ PROXY_AUTHENTICATION_REQUIRED = 407,
48
+ REQUEST_TIMEOUT = 408,
49
+ CONFLICT = 409,
50
+ GONE = 410,
51
+ LENGTH_REQUIRED = 411,
52
+ PRECONDITION_FAILED = 412,
53
+ PAYLOAD_TOO_LARGE = 413,
54
+ URI_TOO_LONG = 414,
55
+ UNSUPPORTED_MEDIA_TYPE = 415,
56
+ RANGE_NOT_SATISFIABLE = 416,
57
+ EXPECTATION_FAILED = 417,
58
+ IM_A_TEAPOT = 418,
59
+ MISDIRECTED_REQUEST = 421,
60
+ UNPROCESSABLE_ENTITY = 422,
61
+ LOCKED = 423,
62
+ FAILED_DEPENDENCY = 424,
63
+ TOO_EARLY = 425,
64
+ UPGRADE_REQUIRED = 426,
65
+ PRECONDITION_REQUIRED = 428,
66
+ TOO_MANY_REQUESTS = 429,
67
+ REQUEST_HEADER_FIELDS_TOO_LARGE = 431,
68
+ UNAVAILABLE_FOR_LEGAL_REASONS = 451,
69
+ INTERNAL_SERVER_ERROR = 500,
70
+ NOT_IMPLEMENTED = 501,
71
+ BAD_GATEWAY = 502,
72
+ SERVICE_UNAVAILABLE = 503,
73
+ GATEWAY_TIMEOUT = 504,
74
+ HTTP_VERSION_NOT_SUPPORTED = 505,
75
+ VARIANT_ALSO_NEGOTIATES = 506,
76
+ INSUFFICIENT_STORAGE = 507,
77
+ LOOP_DETECTED = 508,
78
+ NOT_EXTENDED = 510,
79
+ NETWORK_AUTHENTICATION_REQUIRED = 511
80
+ }
81
+ /**
82
+ * HTTP status text mapping
83
+ */
84
+ export declare const HTTP_STATUS_TEXT: Record<HttpStatus, string>;
85
+ /**
86
+ * Common HTTP headers
87
+ */
88
+ export declare const HTTP_HEADERS: {
89
+ readonly HOST: "host";
90
+ readonly USER_AGENT: "user-agent";
91
+ readonly ACCEPT: "accept";
92
+ readonly ACCEPT_LANGUAGE: "accept-language";
93
+ readonly ACCEPT_ENCODING: "accept-encoding";
94
+ readonly AUTHORIZATION: "authorization";
95
+ readonly CACHE_CONTROL: "cache-control";
96
+ readonly CONNECTION: "connection";
97
+ readonly CONTENT_TYPE: "content-type";
98
+ readonly CONTENT_LENGTH: "content-length";
99
+ readonly COOKIE: "cookie";
100
+ readonly SET_COOKIE: "set-cookie";
101
+ readonly LOCATION: "location";
102
+ readonly SERVER: "server";
103
+ readonly DATE: "date";
104
+ readonly EXPIRES: "expires";
105
+ readonly LAST_MODIFIED: "last-modified";
106
+ readonly ETAG: "etag";
107
+ readonly ACCESS_CONTROL_ALLOW_ORIGIN: "access-control-allow-origin";
108
+ readonly ACCESS_CONTROL_ALLOW_METHODS: "access-control-allow-methods";
109
+ readonly ACCESS_CONTROL_ALLOW_HEADERS: "access-control-allow-headers";
110
+ readonly STRICT_TRANSPORT_SECURITY: "strict-transport-security";
111
+ readonly X_CONTENT_TYPE_OPTIONS: "x-content-type-options";
112
+ readonly X_FRAME_OPTIONS: "x-frame-options";
113
+ readonly X_XSS_PROTECTION: "x-xss-protection";
114
+ readonly CONTENT_SECURITY_POLICY: "content-security-policy";
115
+ };
116
+ /**
117
+ * Get HTTP status text
118
+ */
119
+ export declare function getStatusText(status: HttpStatus): string;
@@ -0,0 +1,200 @@
1
+ /**
2
+ * HTTP Protocol Constants
3
+ */
4
+ /**
5
+ * HTTP methods
6
+ */
7
+ export const HTTP_METHODS = [
8
+ 'GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS', 'CONNECT', 'TRACE'
9
+ ];
10
+ /**
11
+ * HTTP version strings
12
+ */
13
+ export const HTTP_VERSIONS = ['HTTP/1.0', 'HTTP/1.1', 'HTTP/2', 'HTTP/3'];
14
+ /**
15
+ * HTTP status codes
16
+ */
17
+ export var HttpStatus;
18
+ (function (HttpStatus) {
19
+ // 1xx Informational
20
+ HttpStatus[HttpStatus["CONTINUE"] = 100] = "CONTINUE";
21
+ HttpStatus[HttpStatus["SWITCHING_PROTOCOLS"] = 101] = "SWITCHING_PROTOCOLS";
22
+ HttpStatus[HttpStatus["PROCESSING"] = 102] = "PROCESSING";
23
+ HttpStatus[HttpStatus["EARLY_HINTS"] = 103] = "EARLY_HINTS";
24
+ // 2xx Success
25
+ HttpStatus[HttpStatus["OK"] = 200] = "OK";
26
+ HttpStatus[HttpStatus["CREATED"] = 201] = "CREATED";
27
+ HttpStatus[HttpStatus["ACCEPTED"] = 202] = "ACCEPTED";
28
+ HttpStatus[HttpStatus["NON_AUTHORITATIVE_INFORMATION"] = 203] = "NON_AUTHORITATIVE_INFORMATION";
29
+ HttpStatus[HttpStatus["NO_CONTENT"] = 204] = "NO_CONTENT";
30
+ HttpStatus[HttpStatus["RESET_CONTENT"] = 205] = "RESET_CONTENT";
31
+ HttpStatus[HttpStatus["PARTIAL_CONTENT"] = 206] = "PARTIAL_CONTENT";
32
+ HttpStatus[HttpStatus["MULTI_STATUS"] = 207] = "MULTI_STATUS";
33
+ HttpStatus[HttpStatus["ALREADY_REPORTED"] = 208] = "ALREADY_REPORTED";
34
+ HttpStatus[HttpStatus["IM_USED"] = 226] = "IM_USED";
35
+ // 3xx Redirection
36
+ HttpStatus[HttpStatus["MULTIPLE_CHOICES"] = 300] = "MULTIPLE_CHOICES";
37
+ HttpStatus[HttpStatus["MOVED_PERMANENTLY"] = 301] = "MOVED_PERMANENTLY";
38
+ HttpStatus[HttpStatus["FOUND"] = 302] = "FOUND";
39
+ HttpStatus[HttpStatus["SEE_OTHER"] = 303] = "SEE_OTHER";
40
+ HttpStatus[HttpStatus["NOT_MODIFIED"] = 304] = "NOT_MODIFIED";
41
+ HttpStatus[HttpStatus["USE_PROXY"] = 305] = "USE_PROXY";
42
+ HttpStatus[HttpStatus["TEMPORARY_REDIRECT"] = 307] = "TEMPORARY_REDIRECT";
43
+ HttpStatus[HttpStatus["PERMANENT_REDIRECT"] = 308] = "PERMANENT_REDIRECT";
44
+ // 4xx Client Error
45
+ HttpStatus[HttpStatus["BAD_REQUEST"] = 400] = "BAD_REQUEST";
46
+ HttpStatus[HttpStatus["UNAUTHORIZED"] = 401] = "UNAUTHORIZED";
47
+ HttpStatus[HttpStatus["PAYMENT_REQUIRED"] = 402] = "PAYMENT_REQUIRED";
48
+ HttpStatus[HttpStatus["FORBIDDEN"] = 403] = "FORBIDDEN";
49
+ HttpStatus[HttpStatus["NOT_FOUND"] = 404] = "NOT_FOUND";
50
+ HttpStatus[HttpStatus["METHOD_NOT_ALLOWED"] = 405] = "METHOD_NOT_ALLOWED";
51
+ HttpStatus[HttpStatus["NOT_ACCEPTABLE"] = 406] = "NOT_ACCEPTABLE";
52
+ HttpStatus[HttpStatus["PROXY_AUTHENTICATION_REQUIRED"] = 407] = "PROXY_AUTHENTICATION_REQUIRED";
53
+ HttpStatus[HttpStatus["REQUEST_TIMEOUT"] = 408] = "REQUEST_TIMEOUT";
54
+ HttpStatus[HttpStatus["CONFLICT"] = 409] = "CONFLICT";
55
+ HttpStatus[HttpStatus["GONE"] = 410] = "GONE";
56
+ HttpStatus[HttpStatus["LENGTH_REQUIRED"] = 411] = "LENGTH_REQUIRED";
57
+ HttpStatus[HttpStatus["PRECONDITION_FAILED"] = 412] = "PRECONDITION_FAILED";
58
+ HttpStatus[HttpStatus["PAYLOAD_TOO_LARGE"] = 413] = "PAYLOAD_TOO_LARGE";
59
+ HttpStatus[HttpStatus["URI_TOO_LONG"] = 414] = "URI_TOO_LONG";
60
+ HttpStatus[HttpStatus["UNSUPPORTED_MEDIA_TYPE"] = 415] = "UNSUPPORTED_MEDIA_TYPE";
61
+ HttpStatus[HttpStatus["RANGE_NOT_SATISFIABLE"] = 416] = "RANGE_NOT_SATISFIABLE";
62
+ HttpStatus[HttpStatus["EXPECTATION_FAILED"] = 417] = "EXPECTATION_FAILED";
63
+ HttpStatus[HttpStatus["IM_A_TEAPOT"] = 418] = "IM_A_TEAPOT";
64
+ HttpStatus[HttpStatus["MISDIRECTED_REQUEST"] = 421] = "MISDIRECTED_REQUEST";
65
+ HttpStatus[HttpStatus["UNPROCESSABLE_ENTITY"] = 422] = "UNPROCESSABLE_ENTITY";
66
+ HttpStatus[HttpStatus["LOCKED"] = 423] = "LOCKED";
67
+ HttpStatus[HttpStatus["FAILED_DEPENDENCY"] = 424] = "FAILED_DEPENDENCY";
68
+ HttpStatus[HttpStatus["TOO_EARLY"] = 425] = "TOO_EARLY";
69
+ HttpStatus[HttpStatus["UPGRADE_REQUIRED"] = 426] = "UPGRADE_REQUIRED";
70
+ HttpStatus[HttpStatus["PRECONDITION_REQUIRED"] = 428] = "PRECONDITION_REQUIRED";
71
+ HttpStatus[HttpStatus["TOO_MANY_REQUESTS"] = 429] = "TOO_MANY_REQUESTS";
72
+ HttpStatus[HttpStatus["REQUEST_HEADER_FIELDS_TOO_LARGE"] = 431] = "REQUEST_HEADER_FIELDS_TOO_LARGE";
73
+ HttpStatus[HttpStatus["UNAVAILABLE_FOR_LEGAL_REASONS"] = 451] = "UNAVAILABLE_FOR_LEGAL_REASONS";
74
+ // 5xx Server Error
75
+ HttpStatus[HttpStatus["INTERNAL_SERVER_ERROR"] = 500] = "INTERNAL_SERVER_ERROR";
76
+ HttpStatus[HttpStatus["NOT_IMPLEMENTED"] = 501] = "NOT_IMPLEMENTED";
77
+ HttpStatus[HttpStatus["BAD_GATEWAY"] = 502] = "BAD_GATEWAY";
78
+ HttpStatus[HttpStatus["SERVICE_UNAVAILABLE"] = 503] = "SERVICE_UNAVAILABLE";
79
+ HttpStatus[HttpStatus["GATEWAY_TIMEOUT"] = 504] = "GATEWAY_TIMEOUT";
80
+ HttpStatus[HttpStatus["HTTP_VERSION_NOT_SUPPORTED"] = 505] = "HTTP_VERSION_NOT_SUPPORTED";
81
+ HttpStatus[HttpStatus["VARIANT_ALSO_NEGOTIATES"] = 506] = "VARIANT_ALSO_NEGOTIATES";
82
+ HttpStatus[HttpStatus["INSUFFICIENT_STORAGE"] = 507] = "INSUFFICIENT_STORAGE";
83
+ HttpStatus[HttpStatus["LOOP_DETECTED"] = 508] = "LOOP_DETECTED";
84
+ HttpStatus[HttpStatus["NOT_EXTENDED"] = 510] = "NOT_EXTENDED";
85
+ HttpStatus[HttpStatus["NETWORK_AUTHENTICATION_REQUIRED"] = 511] = "NETWORK_AUTHENTICATION_REQUIRED";
86
+ })(HttpStatus || (HttpStatus = {}));
87
+ /**
88
+ * HTTP status text mapping
89
+ */
90
+ export const HTTP_STATUS_TEXT = {
91
+ // 1xx
92
+ [HttpStatus.CONTINUE]: 'Continue',
93
+ [HttpStatus.SWITCHING_PROTOCOLS]: 'Switching Protocols',
94
+ [HttpStatus.PROCESSING]: 'Processing',
95
+ [HttpStatus.EARLY_HINTS]: 'Early Hints',
96
+ // 2xx
97
+ [HttpStatus.OK]: 'OK',
98
+ [HttpStatus.CREATED]: 'Created',
99
+ [HttpStatus.ACCEPTED]: 'Accepted',
100
+ [HttpStatus.NON_AUTHORITATIVE_INFORMATION]: 'Non-Authoritative Information',
101
+ [HttpStatus.NO_CONTENT]: 'No Content',
102
+ [HttpStatus.RESET_CONTENT]: 'Reset Content',
103
+ [HttpStatus.PARTIAL_CONTENT]: 'Partial Content',
104
+ [HttpStatus.MULTI_STATUS]: 'Multi-Status',
105
+ [HttpStatus.ALREADY_REPORTED]: 'Already Reported',
106
+ [HttpStatus.IM_USED]: 'IM Used',
107
+ // 3xx
108
+ [HttpStatus.MULTIPLE_CHOICES]: 'Multiple Choices',
109
+ [HttpStatus.MOVED_PERMANENTLY]: 'Moved Permanently',
110
+ [HttpStatus.FOUND]: 'Found',
111
+ [HttpStatus.SEE_OTHER]: 'See Other',
112
+ [HttpStatus.NOT_MODIFIED]: 'Not Modified',
113
+ [HttpStatus.USE_PROXY]: 'Use Proxy',
114
+ [HttpStatus.TEMPORARY_REDIRECT]: 'Temporary Redirect',
115
+ [HttpStatus.PERMANENT_REDIRECT]: 'Permanent Redirect',
116
+ // 4xx
117
+ [HttpStatus.BAD_REQUEST]: 'Bad Request',
118
+ [HttpStatus.UNAUTHORIZED]: 'Unauthorized',
119
+ [HttpStatus.PAYMENT_REQUIRED]: 'Payment Required',
120
+ [HttpStatus.FORBIDDEN]: 'Forbidden',
121
+ [HttpStatus.NOT_FOUND]: 'Not Found',
122
+ [HttpStatus.METHOD_NOT_ALLOWED]: 'Method Not Allowed',
123
+ [HttpStatus.NOT_ACCEPTABLE]: 'Not Acceptable',
124
+ [HttpStatus.PROXY_AUTHENTICATION_REQUIRED]: 'Proxy Authentication Required',
125
+ [HttpStatus.REQUEST_TIMEOUT]: 'Request Timeout',
126
+ [HttpStatus.CONFLICT]: 'Conflict',
127
+ [HttpStatus.GONE]: 'Gone',
128
+ [HttpStatus.LENGTH_REQUIRED]: 'Length Required',
129
+ [HttpStatus.PRECONDITION_FAILED]: 'Precondition Failed',
130
+ [HttpStatus.PAYLOAD_TOO_LARGE]: 'Payload Too Large',
131
+ [HttpStatus.URI_TOO_LONG]: 'URI Too Long',
132
+ [HttpStatus.UNSUPPORTED_MEDIA_TYPE]: 'Unsupported Media Type',
133
+ [HttpStatus.RANGE_NOT_SATISFIABLE]: 'Range Not Satisfiable',
134
+ [HttpStatus.EXPECTATION_FAILED]: 'Expectation Failed',
135
+ [HttpStatus.IM_A_TEAPOT]: "I'm a teapot",
136
+ [HttpStatus.MISDIRECTED_REQUEST]: 'Misdirected Request',
137
+ [HttpStatus.UNPROCESSABLE_ENTITY]: 'Unprocessable Entity',
138
+ [HttpStatus.LOCKED]: 'Locked',
139
+ [HttpStatus.FAILED_DEPENDENCY]: 'Failed Dependency',
140
+ [HttpStatus.TOO_EARLY]: 'Too Early',
141
+ [HttpStatus.UPGRADE_REQUIRED]: 'Upgrade Required',
142
+ [HttpStatus.PRECONDITION_REQUIRED]: 'Precondition Required',
143
+ [HttpStatus.TOO_MANY_REQUESTS]: 'Too Many Requests',
144
+ [HttpStatus.REQUEST_HEADER_FIELDS_TOO_LARGE]: 'Request Header Fields Too Large',
145
+ [HttpStatus.UNAVAILABLE_FOR_LEGAL_REASONS]: 'Unavailable For Legal Reasons',
146
+ // 5xx
147
+ [HttpStatus.INTERNAL_SERVER_ERROR]: 'Internal Server Error',
148
+ [HttpStatus.NOT_IMPLEMENTED]: 'Not Implemented',
149
+ [HttpStatus.BAD_GATEWAY]: 'Bad Gateway',
150
+ [HttpStatus.SERVICE_UNAVAILABLE]: 'Service Unavailable',
151
+ [HttpStatus.GATEWAY_TIMEOUT]: 'Gateway Timeout',
152
+ [HttpStatus.HTTP_VERSION_NOT_SUPPORTED]: 'HTTP Version Not Supported',
153
+ [HttpStatus.VARIANT_ALSO_NEGOTIATES]: 'Variant Also Negotiates',
154
+ [HttpStatus.INSUFFICIENT_STORAGE]: 'Insufficient Storage',
155
+ [HttpStatus.LOOP_DETECTED]: 'Loop Detected',
156
+ [HttpStatus.NOT_EXTENDED]: 'Not Extended',
157
+ [HttpStatus.NETWORK_AUTHENTICATION_REQUIRED]: 'Network Authentication Required',
158
+ };
159
+ /**
160
+ * Common HTTP headers
161
+ */
162
+ export const HTTP_HEADERS = {
163
+ // Request headers
164
+ HOST: 'host',
165
+ USER_AGENT: 'user-agent',
166
+ ACCEPT: 'accept',
167
+ ACCEPT_LANGUAGE: 'accept-language',
168
+ ACCEPT_ENCODING: 'accept-encoding',
169
+ AUTHORIZATION: 'authorization',
170
+ CACHE_CONTROL: 'cache-control',
171
+ CONNECTION: 'connection',
172
+ CONTENT_TYPE: 'content-type',
173
+ CONTENT_LENGTH: 'content-length',
174
+ COOKIE: 'cookie',
175
+ // Response headers
176
+ SET_COOKIE: 'set-cookie',
177
+ LOCATION: 'location',
178
+ SERVER: 'server',
179
+ DATE: 'date',
180
+ EXPIRES: 'expires',
181
+ LAST_MODIFIED: 'last-modified',
182
+ ETAG: 'etag',
183
+ // CORS headers
184
+ ACCESS_CONTROL_ALLOW_ORIGIN: 'access-control-allow-origin',
185
+ ACCESS_CONTROL_ALLOW_METHODS: 'access-control-allow-methods',
186
+ ACCESS_CONTROL_ALLOW_HEADERS: 'access-control-allow-headers',
187
+ // Security headers
188
+ STRICT_TRANSPORT_SECURITY: 'strict-transport-security',
189
+ X_CONTENT_TYPE_OPTIONS: 'x-content-type-options',
190
+ X_FRAME_OPTIONS: 'x-frame-options',
191
+ X_XSS_PROTECTION: 'x-xss-protection',
192
+ CONTENT_SECURITY_POLICY: 'content-security-policy',
193
+ };
194
+ /**
195
+ * Get HTTP status text
196
+ */
197
+ export function getStatusText(status) {
198
+ return HTTP_STATUS_TEXT[status] || 'Unknown';
199
+ }
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJvdG9jb2xzL2h0dHAvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPO0NBQ3RFLENBQUM7QUFJWDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBVSxDQUFDO0FBSW5GOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksVUF3RVg7QUF4RUQsV0FBWSxVQUFVO0lBQ3BCLG9CQUFvQjtJQUNwQixxREFBYyxDQUFBO0lBQ2QsMkVBQXlCLENBQUE7SUFDekIseURBQWdCLENBQUE7SUFDaEIsMkRBQWlCLENBQUE7SUFFakIsY0FBYztJQUNkLHlDQUFRLENBQUE7SUFDUixtREFBYSxDQUFBO0lBQ2IscURBQWMsQ0FBQTtJQUNkLCtGQUFtQyxDQUFBO0lBQ25DLHlEQUFnQixDQUFBO0lBQ2hCLCtEQUFtQixDQUFBO0lBQ25CLG1FQUFxQixDQUFBO0lBQ3JCLDZEQUFrQixDQUFBO0lBQ2xCLHFFQUFzQixDQUFBO0lBQ3RCLG1EQUFhLENBQUE7SUFFYixrQkFBa0I7SUFDbEIscUVBQXNCLENBQUE7SUFDdEIsdUVBQXVCLENBQUE7SUFDdkIsK0NBQVcsQ0FBQTtJQUNYLHVEQUFlLENBQUE7SUFDZiw2REFBa0IsQ0FBQTtJQUNsQix1REFBZSxDQUFBO0lBQ2YseUVBQXdCLENBQUE7SUFDeEIseUVBQXdCLENBQUE7SUFFeEIsbUJBQW1CO0lBQ25CLDJEQUFpQixDQUFBO0lBQ2pCLDZEQUFrQixDQUFBO0lBQ2xCLHFF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
@@ -0,0 +1,7 @@
1
+ /**
2
+ * HTTP Protocol Module
3
+ * Generic HTTP protocol knowledge and parsing utilities
4
+ */
5
+ export * from './constants.js';
6
+ export * from './types.js';
7
+ export * from './parser.js';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * HTTP Protocol Module
3
+ * Generic HTTP protocol knowledge and parsing utilities
4
+ */
5
+ export * from './constants.js';
6
+ export * from './types.js';
7
+ export * from './parser.js';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm90b2NvbHMvaHR0cC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsYUFBYSxDQUFDIn0=