@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,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJvdG9jb2xzL2h0dHAvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPO0NBQ3RFLENBQUM7QUFJWDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBVSxDQUFDO0FBSW5GOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksVUF3RVg7QUF4RUQsV0FBWSxVQUFVO0lBQ3BCLG9CQUFvQjtJQUNwQixxREFBYyxDQUFBO0lBQ2QsMkVBQXlCLENBQUE7SUFDekIseURBQWdCLENBQUE7SUFDaEIsMkRBQWlCLENBQUE7SUFFakIsY0FBYztJQUNkLHlDQUFRLENBQUE7SUFDUixtREFBYSxDQUFBO0lBQ2IscURBQWMsQ0FBQTtJQUNkLCtGQUFtQyxDQUFBO0lBQ25DLHlEQUFnQixDQUFBO0lBQ2hCLCtEQUFtQixDQUFBO0lBQ25CLG1FQUFxQixDQUFBO0lBQ3JCLDZEQUFrQixDQUFBO0lBQ2xCLHFFQUFzQixDQUFBO0lBQ3RCLG1EQUFhLENBQUE7SUFFYixrQkFBa0I7SUFDbEIscUVBQXNCLENBQUE7SUFDdEIsdUVBQXVCLENBQUE7SUFDdkIsK0NBQVcsQ0FBQTtJQUNYLHVEQUFlLENBQUE7SUFDZiw2REFBa0IsQ0FBQTtJQUNsQix1REFBZSxDQUFBO0lBQ2YseUVBQXdCLENBQUE7SUFDeEIseUVBQXdCLENBQUE7SUFFeEIsbUJBQW1CO0lBQ25CLDJEQUFpQixDQUFBO0lBQ2pCLDZEQUFrQixDQUFBO0lBQ2xCLHFFQUFzQixDQUFBO0lBQ3RCLHVEQUFlLENBQUE7SUFDZix1REFBZSxDQUFBO0lBQ2YseUVBQXdCLENBQUE7SUFDeEIsaUVBQW9CLENBQUE7SUFDcEIsK0ZBQW1DLENBQUE7SUFDbkMsbUVBQXFCLENBQUE7SUFDckIscURBQWMsQ0FBQTtJQUNkLDZDQUFVLENBQUE7SUFDVixtRUFBcUIsQ0FBQTtJQUNyQiwyRUFBeUIsQ0FBQTtJQUN6Qix1RUFBdUIsQ0FBQTtJQUN2Qiw2REFBa0IsQ0FBQTtJQUNsQixpRkFBNEIsQ0FBQTtJQUM1QiwrRUFBMkIsQ0FBQTtJQUMzQix5RUFBd0IsQ0FBQTtJQUN4QiwyREFBaUIsQ0FBQTtJQUNqQiwyRUFBeUIsQ0FBQTtJQUN6Qiw2RUFBMEIsQ0FBQTtJQUMxQixpREFBWSxDQUFBO0lBQ1osdUVBQXVCLENBQUE7SUFDdkIsdURBQWUsQ0FBQTtJQUNmLHFFQUFzQixDQUFBO0lBQ3RCLCtFQUEyQixDQUFBO0lBQzNCLHVFQUF1QixDQUFBO0lBQ3ZCLG1HQUFxQyxDQUFBO0lBQ3JDLCtGQUFtQyxDQUFBO0lBRW5DLG1CQUFtQjtJQUNuQiwrRUFBMkIsQ0FBQTtJQUMzQixtRUFBcUIsQ0FBQTtJQUNyQiwyREFBaUIsQ0FBQTtJQUNqQiwyRUFBeUIsQ0FBQTtJQUN6QixtRUFBcUIsQ0FBQTtJQUNyQix5RkFBZ0MsQ0FBQTtJQUNoQyxtRkFBNkIsQ0FBQTtJQUM3Qiw2RUFBMEIsQ0FBQTtJQUMxQiwrREFBbUIsQ0FBQTtJQUNuQiw2REFBa0IsQ0FBQTtJQUNsQixtR0FBcUMsQ0FBQTtBQUN2QyxDQUFDLEVBeEVXLFVBQVUsS0FBVixVQUFVLFFBd0VyQjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQStCO0lBQzFELE1BQU07SUFDTixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVO0lBQ2pDLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUUscUJBQXFCO0lBQ3ZELENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFlBQVk7SUFDckMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsYUFBYTtJQUV2QyxNQUFNO0lBQ04sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSTtJQUNyQixDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTO0lBQy9CLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVU7SUFDakMsQ0FBQyxVQUFVLENBQUMsNkJBQTZCLENBQUMsRUFBRSwrQkFBK0I7SUFDM0UsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsWUFBWTtJQUNyQyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxlQUFlO0lBQzNDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFLGlCQUFpQjtJQUMvQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxjQUFjO0lBQ3pDLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsa0JBQWtCO0lBQ2pELENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVM7SUFFL0IsTUFBTTtJQUNOLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsa0JBQWtCO0lBQ2pELENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsbUJBQW1CO0lBQ25ELENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU87SUFDM0IsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsV0FBVztJQUNuQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxjQUFjO0lBQ3pDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFdBQVc7SUFDbkMsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFBRSxvQkFBb0I7SUFDckQsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFBRSxvQkFBb0I7SUFFckQsTUFBTTtJQUNOLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLGFBQWE7SUFDdkMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsY0FBYztJQUN6QyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLGtCQUFrQjtJQUNqRCxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxXQUFXO0lBQ25DLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFdBQVc7SUFDbkMsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFBRSxvQkFBb0I7SUFDckQsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsZ0JBQWdCO0lBQzdDLENBQUMsVUFBVSxDQUFDLDZCQUE2QixDQUFDLEVBQUUsK0JBQStCO0lBQzNFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFLGlCQUFpQjtJQUMvQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVO0lBQ2pDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU07SUFDekIsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEVBQUUsaUJBQWlCO0lBQy9DLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUUscUJBQXFCO0lBQ3ZELENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsbUJBQW1CO0lBQ25ELENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLGNBQWM7SUFDekMsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsRUFBRSx3QkFBd0I7SUFDN0QsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsRUFBRSx1QkFBdUI7SUFDM0QsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFBRSxvQkFBb0I7SUFDckQsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsY0FBYztJQUN4QyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLHFCQUFxQjtJQUN2RCxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLHNCQUFzQjtJQUN6RCxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRO0lBQzdCLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsbUJBQW1CO0lBQ25ELENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFdBQVc7SUFDbkMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxrQkFBa0I7SUFDakQsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsRUFBRSx1QkFBdUI7SUFDM0QsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxtQkFBbUI7SUFDbkQsQ0FBQyxVQUFVLENBQUMsK0JBQStCLENBQUMsRUFBRSxpQ0FBaUM7SUFDL0UsQ0FBQyxVQUFVLENBQUMsNkJBQTZCLENBQUMsRUFBRSwrQkFBK0I7SUFFM0UsTUFBTTtJQUNOLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsdUJBQXVCO0lBQzNELENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFLGlCQUFpQjtJQUMvQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxhQUFhO0lBQ3ZDLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUUscUJBQXFCO0lBQ3ZELENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFLGlCQUFpQjtJQUMvQyxDQUFDLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLDRCQUE0QjtJQUNyRSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLHlCQUF5QjtJQUMvRCxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLHNCQUFzQjtJQUN6RCxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxlQUFlO0lBQzNDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLGNBQWM7SUFDekMsQ0FBQyxVQUFVLENBQUMsK0JBQStCLENBQUMsRUFBRSxpQ0FBaUM7Q0FDaEYsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHO0lBQzFCLGtCQUFrQjtJQUNsQixJQUFJLEVBQUUsTUFBTTtJQUNaLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsZUFBZSxFQUFFLGlCQUFpQjtJQUNsQyxhQUFhLEVBQUUsZUFBZTtJQUM5QixhQUFhLEVBQUUsZUFBZTtJQUM5QixVQUFVLEVBQUUsWUFBWTtJQUN4QixZQUFZLEVBQUUsY0FBYztJQUM1QixjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLE1BQU0sRUFBRSxRQUFRO0lBRWhCLG1CQUFtQjtJQUNuQixVQUFVLEVBQUUsWUFBWTtJQUN4QixRQUFRLEVBQUUsVUFBVTtJQUNwQixNQUFNLEVBQUUsUUFBUTtJQUNoQixJQUFJLEVBQUUsTUFBTTtJQUNaLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLGFBQWEsRUFBRSxlQUFlO0lBQzlCLElBQUksRUFBRSxNQUFNO0lBRVosZUFBZTtJQUNmLDJCQUEyQixFQUFFLDZCQUE2QjtJQUMxRCw0QkFBNEIsRUFBRSw4QkFBOEI7SUFDNUQsNEJBQTRCLEVBQUUsOEJBQThCO0lBRTVELG1CQUFtQjtJQUNuQix5QkFBeUIsRUFBRSwyQkFBMkI7SUFDdEQsc0JBQXNCLEVBQUUsd0JBQXdCO0lBQ2hELGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsZ0JBQWdCLEVBQUUsa0JBQWtCO0lBQ3BDLHVCQUF1QixFQUFFLHlCQUF5QjtDQUMxQyxDQUFDO0FBRVg7O0dBRUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLE1BQWtCO0lBQzlDLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDO0FBQy9DLENBQUMifQ==
@@ -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=
@@ -0,0 +1,58 @@
1
+ /**
2
+ * HTTP Protocol Parser
3
+ * Generic HTTP parsing utilities
4
+ */
5
+ import { type THttpMethod } from './constants.js';
6
+ import type { IHttpRequestLine, IHttpHeader } from './types.js';
7
+ /**
8
+ * HTTP parser utilities
9
+ */
10
+ export declare class HttpParser {
11
+ /**
12
+ * Check if string is a valid HTTP method
13
+ */
14
+ static isHttpMethod(str: string): str is THttpMethod;
15
+ /**
16
+ * Parse HTTP request line
17
+ */
18
+ static parseRequestLine(line: string): IHttpRequestLine | null;
19
+ /**
20
+ * Parse HTTP header line
21
+ */
22
+ static parseHeaderLine(line: string): IHttpHeader | null;
23
+ /**
24
+ * Parse HTTP headers from lines
25
+ */
26
+ static parseHeaders(lines: string[]): Record<string, string>;
27
+ /**
28
+ * Extract domain from Host header value
29
+ */
30
+ static extractDomainFromHost(hostHeader: string): string;
31
+ /**
32
+ * Validate domain name
33
+ */
34
+ static isValidDomain(domain: string): boolean;
35
+ /**
36
+ * Extract line from buffer
37
+ */
38
+ static extractLine(buffer: Buffer, offset?: number): {
39
+ line: string;
40
+ nextOffset: number;
41
+ } | null;
42
+ /**
43
+ * Check if buffer contains printable ASCII
44
+ */
45
+ static isPrintableAscii(buffer: Buffer, length?: number): boolean;
46
+ /**
47
+ * Quick check if buffer starts with HTTP method
48
+ */
49
+ static quickCheck(buffer: Buffer): boolean;
50
+ /**
51
+ * Parse query string
52
+ */
53
+ static parseQueryString(queryString: string): Record<string, string>;
54
+ /**
55
+ * Build query string from params
56
+ */
57
+ static buildQueryString(params: Record<string, string>): string;
58
+ }
@@ -0,0 +1,184 @@
1
+ /**
2
+ * HTTP Protocol Parser
3
+ * Generic HTTP parsing utilities
4
+ */
5
+ import { HTTP_METHODS } from './constants.js';
6
+ /**
7
+ * HTTP parser utilities
8
+ */
9
+ export class HttpParser {
10
+ /**
11
+ * Check if string is a valid HTTP method
12
+ */
13
+ static isHttpMethod(str) {
14
+ return HTTP_METHODS.includes(str);
15
+ }
16
+ /**
17
+ * Parse HTTP request line
18
+ */
19
+ static parseRequestLine(line) {
20
+ const parts = line.trim().split(' ');
21
+ if (parts.length !== 3) {
22
+ return null;
23
+ }
24
+ const [method, path, version] = parts;
25
+ // Validate method
26
+ if (!this.isHttpMethod(method)) {
27
+ return null;
28
+ }
29
+ // Validate version
30
+ if (!version.startsWith('HTTP/')) {
31
+ return null;
32
+ }
33
+ return {
34
+ method: method,
35
+ path,
36
+ version: version
37
+ };
38
+ }
39
+ /**
40
+ * Parse HTTP header line
41
+ */
42
+ static parseHeaderLine(line) {
43
+ const colonIndex = line.indexOf(':');
44
+ if (colonIndex === -1) {
45
+ return null;
46
+ }
47
+ const name = line.slice(0, colonIndex).trim();
48
+ const value = line.slice(colonIndex + 1).trim();
49
+ if (!name) {
50
+ return null;
51
+ }
52
+ return { name, value };
53
+ }
54
+ /**
55
+ * Parse HTTP headers from lines
56
+ */
57
+ static parseHeaders(lines) {
58
+ const headers = {};
59
+ for (const line of lines) {
60
+ const header = this.parseHeaderLine(line);
61
+ if (header) {
62
+ // Convert header names to lowercase for consistency
63
+ headers[header.name.toLowerCase()] = header.value;
64
+ }
65
+ }
66
+ return headers;
67
+ }
68
+ /**
69
+ * Extract domain from Host header value
70
+ */
71
+ static extractDomainFromHost(hostHeader) {
72
+ // Remove port if present
73
+ const colonIndex = hostHeader.lastIndexOf(':');
74
+ if (colonIndex !== -1) {
75
+ // Check if it's not part of IPv6 address
76
+ const beforeColon = hostHeader.slice(0, colonIndex);
77
+ if (!beforeColon.includes(']')) {
78
+ return beforeColon;
79
+ }
80
+ }
81
+ return hostHeader;
82
+ }
83
+ /**
84
+ * Validate domain name
85
+ */
86
+ static isValidDomain(domain) {
87
+ // Basic domain validation
88
+ if (!domain || domain.length > 253) {
89
+ return false;
90
+ }
91
+ // Check for valid characters and structure
92
+ const domainRegex = /^(?!-)[A-Za-z0-9-]{1,63}(?<!-)(\.[A-Za-z0-9-]{1,63})*$/;
93
+ return domainRegex.test(domain);
94
+ }
95
+ /**
96
+ * Extract line from buffer
97
+ */
98
+ static extractLine(buffer, offset = 0) {
99
+ // Look for CRLF
100
+ const crlfIndex = buffer.indexOf('\r\n', offset);
101
+ if (crlfIndex === -1) {
102
+ // Look for just LF
103
+ const lfIndex = buffer.indexOf('\n', offset);
104
+ if (lfIndex === -1) {
105
+ return null;
106
+ }
107
+ return {
108
+ line: buffer.slice(offset, lfIndex).toString('utf8'),
109
+ nextOffset: lfIndex + 1
110
+ };
111
+ }
112
+ return {
113
+ line: buffer.slice(offset, crlfIndex).toString('utf8'),
114
+ nextOffset: crlfIndex + 2
115
+ };
116
+ }
117
+ /**
118
+ * Check if buffer contains printable ASCII
119
+ */
120
+ static isPrintableAscii(buffer, length) {
121
+ const checkLength = Math.min(length || buffer.length, buffer.length);
122
+ for (let i = 0; i < checkLength; i++) {
123
+ const byte = buffer[i];
124
+ // Allow printable ASCII (32-126) plus tab (9), LF (10), and CR (13)
125
+ if (byte < 32 || byte > 126) {
126
+ if (byte !== 9 && byte !== 10 && byte !== 13) {
127
+ return false;
128
+ }
129
+ }
130
+ }
131
+ return true;
132
+ }
133
+ /**
134
+ * Quick check if buffer starts with HTTP method
135
+ */
136
+ static quickCheck(buffer) {
137
+ if (buffer.length < 3) {
138
+ return false;
139
+ }
140
+ // Check common HTTP methods
141
+ const start = buffer.slice(0, 7).toString('ascii');
142
+ return start.startsWith('GET ') ||
143
+ start.startsWith('POST ') ||
144
+ start.startsWith('PUT ') ||
145
+ start.startsWith('DELETE ') ||
146
+ start.startsWith('HEAD ') ||
147
+ start.startsWith('OPTIONS') ||
148
+ start.startsWith('PATCH ') ||
149
+ start.startsWith('CONNECT') ||
150
+ start.startsWith('TRACE ');
151
+ }
152
+ /**
153
+ * Parse query string
154
+ */
155
+ static parseQueryString(queryString) {
156
+ const params = {};
157
+ if (!queryString) {
158
+ return params;
159
+ }
160
+ // Remove leading '?' if present
161
+ if (queryString.startsWith('?')) {
162
+ queryString = queryString.slice(1);
163
+ }
164
+ const pairs = queryString.split('&');
165
+ for (const pair of pairs) {
166
+ const [key, value] = pair.split('=');
167
+ if (key) {
168
+ params[decodeURIComponent(key)] = value ? decodeURIComponent(value) : '';
169
+ }
170
+ }
171
+ return params;
172
+ }
173
+ /**
174
+ * Build query string from params
175
+ */
176
+ static buildQueryString(params) {
177
+ const pairs = [];
178
+ for (const [key, value] of Object.entries(params)) {
179
+ pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
180
+ }
181
+ return pairs.length > 0 ? '?' + pairs.join('&') : '';
182
+ }
183
+ }
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJvdG9jb2xzL2h0dHAvcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQXVDLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkY7O0dBRUc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUNyQjs7T0FFRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBVztRQUM3QixPQUFPLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBa0IsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFZO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFckMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUV0QyxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPO1lBQ0wsTUFBTSxFQUFFLE1BQXFCO1lBQzdCLElBQUk7WUFDSixPQUFPLEVBQUUsT0FBdUI7U0FDakMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBWTtRQUNqQyxNQUFNLFVBQVUs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
@@ -0,0 +1,62 @@
1
+ /**
2
+ * HTTP Protocol Type Definitions
3
+ */
4
+ import type { THttpMethod, THttpVersion, HttpStatus } from './constants.js';
5
+ /**
6
+ * HTTP request line structure
7
+ */
8
+ export interface IHttpRequestLine {
9
+ method: THttpMethod;
10
+ path: string;
11
+ version: THttpVersion;
12
+ }
13
+ /**
14
+ * HTTP response line structure
15
+ */
16
+ export interface IHttpResponseLine {
17
+ version: THttpVersion;
18
+ status: HttpStatus;
19
+ statusText: string;
20
+ }
21
+ /**
22
+ * HTTP header structure
23
+ */
24
+ export interface IHttpHeader {
25
+ name: string;
26
+ value: string;
27
+ }
28
+ /**
29
+ * HTTP message structure (base for request and response)
30
+ */
31
+ export interface IHttpMessage {
32
+ headers: Record<string, string>;
33
+ body?: Buffer;
34
+ }
35
+ /**
36
+ * HTTP request structure
37
+ */
38
+ export interface IHttpRequest extends IHttpMessage {
39
+ method: THttpMethod;
40
+ path: string;
41
+ version: THttpVersion;
42
+ query?: Record<string, string>;
43
+ }
44
+ /**
45
+ * HTTP response structure
46
+ */
47
+ export interface IHttpResponse extends IHttpMessage {
48
+ status: HttpStatus;
49
+ statusText: string;
50
+ version: THttpVersion;
51
+ }
52
+ /**
53
+ * Parsed URL structure
54
+ */
55
+ export interface IParsedUrl {
56
+ protocol?: string;
57
+ hostname?: string;
58
+ port?: number;
59
+ path?: string;
60
+ query?: string;
61
+ fragment?: string;
62
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * HTTP Protocol Type Definitions
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm90b2NvbHMvaHR0cC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRyJ9