constants.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.SPECIAL_HEADERS = exports.MINOR = exports.MAJOR = exports.HTAB_SP_VCHAR_OBS_TEXT = exports.QUOTED_STRING = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.HEX = exports.URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.STATUSES_HTTP = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.HEADER_STATE = exports.FINISH = exports.STATUSES = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0;
  4. const utils_1 = require("./utils");
  5. // Emums
  6. exports.ERROR = {
  7. OK: 0,
  8. INTERNAL: 1,
  9. STRICT: 2,
  10. CR_EXPECTED: 25,
  11. LF_EXPECTED: 3,
  12. UNEXPECTED_CONTENT_LENGTH: 4,
  13. UNEXPECTED_SPACE: 30,
  14. CLOSED_CONNECTION: 5,
  15. INVALID_METHOD: 6,
  16. INVALID_URL: 7,
  17. INVALID_CONSTANT: 8,
  18. INVALID_VERSION: 9,
  19. INVALID_HEADER_TOKEN: 10,
  20. INVALID_CONTENT_LENGTH: 11,
  21. INVALID_CHUNK_SIZE: 12,
  22. INVALID_STATUS: 13,
  23. INVALID_EOF_STATE: 14,
  24. INVALID_TRANSFER_ENCODING: 15,
  25. CB_MESSAGE_BEGIN: 16,
  26. CB_HEADERS_COMPLETE: 17,
  27. CB_MESSAGE_COMPLETE: 18,
  28. CB_CHUNK_HEADER: 19,
  29. CB_CHUNK_COMPLETE: 20,
  30. PAUSED: 21,
  31. PAUSED_UPGRADE: 22,
  32. PAUSED_H2_UPGRADE: 23,
  33. USER: 24,
  34. CB_URL_COMPLETE: 26,
  35. CB_STATUS_COMPLETE: 27,
  36. CB_METHOD_COMPLETE: 32,
  37. CB_VERSION_COMPLETE: 33,
  38. CB_HEADER_FIELD_COMPLETE: 28,
  39. CB_HEADER_VALUE_COMPLETE: 29,
  40. CB_CHUNK_EXTENSION_NAME_COMPLETE: 34,
  41. CB_CHUNK_EXTENSION_VALUE_COMPLETE: 35,
  42. CB_RESET: 31,
  43. };
  44. exports.TYPE = {
  45. BOTH: 0, // default
  46. REQUEST: 1,
  47. RESPONSE: 2,
  48. };
  49. exports.FLAGS = {
  50. CONNECTION_KEEP_ALIVE: 1 << 0,
  51. CONNECTION_CLOSE: 1 << 1,
  52. CONNECTION_UPGRADE: 1 << 2,
  53. CHUNKED: 1 << 3,
  54. UPGRADE: 1 << 4,
  55. CONTENT_LENGTH: 1 << 5,
  56. SKIPBODY: 1 << 6,
  57. TRAILING: 1 << 7,
  58. // 1 << 8 is unused
  59. TRANSFER_ENCODING: 1 << 9,
  60. };
  61. exports.LENIENT_FLAGS = {
  62. HEADERS: 1 << 0,
  63. CHUNKED_LENGTH: 1 << 1,
  64. KEEP_ALIVE: 1 << 2,
  65. TRANSFER_ENCODING: 1 << 3,
  66. VERSION: 1 << 4,
  67. DATA_AFTER_CLOSE: 1 << 5,
  68. OPTIONAL_LF_AFTER_CR: 1 << 6,
  69. OPTIONAL_CRLF_AFTER_CHUNK: 1 << 7,
  70. OPTIONAL_CR_BEFORE_LF: 1 << 8,
  71. SPACES_AFTER_CHUNK_SIZE: 1 << 9,
  72. };
  73. exports.METHODS = {
  74. 'DELETE': 0,
  75. 'GET': 1,
  76. 'HEAD': 2,
  77. 'POST': 3,
  78. 'PUT': 4,
  79. /* pathological */
  80. 'CONNECT': 5,
  81. 'OPTIONS': 6,
  82. 'TRACE': 7,
  83. /* WebDAV */
  84. 'COPY': 8,
  85. 'LOCK': 9,
  86. 'MKCOL': 10,
  87. 'MOVE': 11,
  88. 'PROPFIND': 12,
  89. 'PROPPATCH': 13,
  90. 'SEARCH': 14,
  91. 'UNLOCK': 15,
  92. 'BIND': 16,
  93. 'REBIND': 17,
  94. 'UNBIND': 18,
  95. 'ACL': 19,
  96. /* subversion */
  97. 'REPORT': 20,
  98. 'MKACTIVITY': 21,
  99. 'CHECKOUT': 22,
  100. 'MERGE': 23,
  101. /* upnp */
  102. 'M-SEARCH': 24,
  103. 'NOTIFY': 25,
  104. 'SUBSCRIBE': 26,
  105. 'UNSUBSCRIBE': 27,
  106. /* RFC-5789 */
  107. 'PATCH': 28,
  108. 'PURGE': 29,
  109. /* CalDAV */
  110. 'MKCALENDAR': 30,
  111. /* RFC-2068, section 19.6.1.2 */
  112. 'LINK': 31,
  113. 'UNLINK': 32,
  114. /* icecast */
  115. 'SOURCE': 33,
  116. /* RFC-7540, section 11.6 */
  117. 'PRI': 34,
  118. /* RFC-2326 RTSP */
  119. 'DESCRIBE': 35,
  120. 'ANNOUNCE': 36,
  121. 'SETUP': 37,
  122. 'PLAY': 38,
  123. 'PAUSE': 39,
  124. 'TEARDOWN': 40,
  125. 'GET_PARAMETER': 41,
  126. 'SET_PARAMETER': 42,
  127. 'REDIRECT': 43,
  128. 'RECORD': 44,
  129. /* RAOP */
  130. 'FLUSH': 45,
  131. /* DRAFT https://www.ietf.org/archive/id/draft-ietf-httpbis-safe-method-w-body-02.html */
  132. 'QUERY': 46,
  133. };
  134. exports.STATUSES = {
  135. CONTINUE: 100,
  136. SWITCHING_PROTOCOLS: 101,
  137. PROCESSING: 102,
  138. EARLY_HINTS: 103,
  139. RESPONSE_IS_STALE: 110, // Unofficial
  140. REVALIDATION_FAILED: 111, // Unofficial
  141. DISCONNECTED_OPERATION: 112, // Unofficial
  142. HEURISTIC_EXPIRATION: 113, // Unofficial
  143. MISCELLANEOUS_WARNING: 199, // Unofficial
  144. OK: 200,
  145. CREATED: 201,
  146. ACCEPTED: 202,
  147. NON_AUTHORITATIVE_INFORMATION: 203,
  148. NO_CONTENT: 204,
  149. RESET_CONTENT: 205,
  150. PARTIAL_CONTENT: 206,
  151. MULTI_STATUS: 207,
  152. ALREADY_REPORTED: 208,
  153. TRANSFORMATION_APPLIED: 214, // Unofficial
  154. IM_USED: 226,
  155. MISCELLANEOUS_PERSISTENT_WARNING: 299, // Unofficial
  156. MULTIPLE_CHOICES: 300,
  157. MOVED_PERMANENTLY: 301,
  158. FOUND: 302,
  159. SEE_OTHER: 303,
  160. NOT_MODIFIED: 304,
  161. USE_PROXY: 305,
  162. SWITCH_PROXY: 306, // No longer used
  163. TEMPORARY_REDIRECT: 307,
  164. PERMANENT_REDIRECT: 308,
  165. BAD_REQUEST: 400,
  166. UNAUTHORIZED: 401,
  167. PAYMENT_REQUIRED: 402,
  168. FORBIDDEN: 403,
  169. NOT_FOUND: 404,
  170. METHOD_NOT_ALLOWED: 405,
  171. NOT_ACCEPTABLE: 406,
  172. PROXY_AUTHENTICATION_REQUIRED: 407,
  173. REQUEST_TIMEOUT: 408,
  174. CONFLICT: 409,
  175. GONE: 410,
  176. LENGTH_REQUIRED: 411,
  177. PRECONDITION_FAILED: 412,
  178. PAYLOAD_TOO_LARGE: 413,
  179. URI_TOO_LONG: 414,
  180. UNSUPPORTED_MEDIA_TYPE: 415,
  181. RANGE_NOT_SATISFIABLE: 416,
  182. EXPECTATION_FAILED: 417,
  183. IM_A_TEAPOT: 418,
  184. PAGE_EXPIRED: 419, // Unofficial
  185. ENHANCE_YOUR_CALM: 420, // Unofficial
  186. MISDIRECTED_REQUEST: 421,
  187. UNPROCESSABLE_ENTITY: 422,
  188. LOCKED: 423,
  189. FAILED_DEPENDENCY: 424,
  190. TOO_EARLY: 425,
  191. UPGRADE_REQUIRED: 426,
  192. PRECONDITION_REQUIRED: 428,
  193. TOO_MANY_REQUESTS: 429,
  194. REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL: 430, // Unofficial
  195. REQUEST_HEADER_FIELDS_TOO_LARGE: 431,
  196. LOGIN_TIMEOUT: 440, // Unofficial
  197. NO_RESPONSE: 444, // Unofficial
  198. RETRY_WITH: 449, // Unofficial
  199. BLOCKED_BY_PARENTAL_CONTROL: 450, // Unofficial
  200. UNAVAILABLE_FOR_LEGAL_REASONS: 451,
  201. CLIENT_CLOSED_LOAD_BALANCED_REQUEST: 460, // Unofficial
  202. INVALID_X_FORWARDED_FOR: 463, // Unofficial
  203. REQUEST_HEADER_TOO_LARGE: 494, // Unofficial
  204. SSL_CERTIFICATE_ERROR: 495, // Unofficial
  205. SSL_CERTIFICATE_REQUIRED: 496, // Unofficial
  206. HTTP_REQUEST_SENT_TO_HTTPS_PORT: 497, // Unofficial
  207. INVALID_TOKEN: 498, // Unofficial
  208. CLIENT_CLOSED_REQUEST: 499, // Unofficial
  209. INTERNAL_SERVER_ERROR: 500,
  210. NOT_IMPLEMENTED: 501,
  211. BAD_GATEWAY: 502,
  212. SERVICE_UNAVAILABLE: 503,
  213. GATEWAY_TIMEOUT: 504,
  214. HTTP_VERSION_NOT_SUPPORTED: 505,
  215. VARIANT_ALSO_NEGOTIATES: 506,
  216. INSUFFICIENT_STORAGE: 507,
  217. LOOP_DETECTED: 508,
  218. BANDWIDTH_LIMIT_EXCEEDED: 509,
  219. NOT_EXTENDED: 510,
  220. NETWORK_AUTHENTICATION_REQUIRED: 511,
  221. WEB_SERVER_UNKNOWN_ERROR: 520, // Unofficial
  222. WEB_SERVER_IS_DOWN: 521, // Unofficial
  223. CONNECTION_TIMEOUT: 522, // Unofficial
  224. ORIGIN_IS_UNREACHABLE: 523, // Unofficial
  225. TIMEOUT_OCCURED: 524, // Unofficial
  226. SSL_HANDSHAKE_FAILED: 525, // Unofficial
  227. INVALID_SSL_CERTIFICATE: 526, // Unofficial
  228. RAILGUN_ERROR: 527, // Unofficial
  229. SITE_IS_OVERLOADED: 529, // Unofficial
  230. SITE_IS_FROZEN: 530, // Unofficial
  231. IDENTITY_PROVIDER_AUTHENTICATION_ERROR: 561, // Unofficial
  232. NETWORK_READ_TIMEOUT: 598, // Unofficial
  233. NETWORK_CONNECT_TIMEOUT: 599, // Unofficial
  234. };
  235. exports.FINISH = {
  236. SAFE: 0,
  237. SAFE_WITH_CB: 1,
  238. UNSAFE: 2,
  239. };
  240. exports.HEADER_STATE = {
  241. GENERAL: 0,
  242. CONNECTION: 1,
  243. CONTENT_LENGTH: 2,
  244. TRANSFER_ENCODING: 3,
  245. UPGRADE: 4,
  246. CONNECTION_KEEP_ALIVE: 5,
  247. CONNECTION_CLOSE: 6,
  248. CONNECTION_UPGRADE: 7,
  249. TRANSFER_ENCODING_CHUNKED: 8,
  250. };
  251. // C headers
  252. exports.METHODS_HTTP = [
  253. exports.METHODS.DELETE,
  254. exports.METHODS.GET,
  255. exports.METHODS.HEAD,
  256. exports.METHODS.POST,
  257. exports.METHODS.PUT,
  258. exports.METHODS.CONNECT,
  259. exports.METHODS.OPTIONS,
  260. exports.METHODS.TRACE,
  261. exports.METHODS.COPY,
  262. exports.METHODS.LOCK,
  263. exports.METHODS.MKCOL,
  264. exports.METHODS.MOVE,
  265. exports.METHODS.PROPFIND,
  266. exports.METHODS.PROPPATCH,
  267. exports.METHODS.SEARCH,
  268. exports.METHODS.UNLOCK,
  269. exports.METHODS.BIND,
  270. exports.METHODS.REBIND,
  271. exports.METHODS.UNBIND,
  272. exports.METHODS.ACL,
  273. exports.METHODS.REPORT,
  274. exports.METHODS.MKACTIVITY,
  275. exports.METHODS.CHECKOUT,
  276. exports.METHODS.MERGE,
  277. exports.METHODS['M-SEARCH'],
  278. exports.METHODS.NOTIFY,
  279. exports.METHODS.SUBSCRIBE,
  280. exports.METHODS.UNSUBSCRIBE,
  281. exports.METHODS.PATCH,
  282. exports.METHODS.PURGE,
  283. exports.METHODS.MKCALENDAR,
  284. exports.METHODS.LINK,
  285. exports.METHODS.UNLINK,
  286. exports.METHODS.PRI,
  287. // TODO(indutny): should we allow it with HTTP?
  288. exports.METHODS.SOURCE,
  289. exports.METHODS.QUERY,
  290. ];
  291. exports.METHODS_ICE = [
  292. exports.METHODS.SOURCE,
  293. ];
  294. exports.METHODS_RTSP = [
  295. exports.METHODS.OPTIONS,
  296. exports.METHODS.DESCRIBE,
  297. exports.METHODS.ANNOUNCE,
  298. exports.METHODS.SETUP,
  299. exports.METHODS.PLAY,
  300. exports.METHODS.PAUSE,
  301. exports.METHODS.TEARDOWN,
  302. exports.METHODS.GET_PARAMETER,
  303. exports.METHODS.SET_PARAMETER,
  304. exports.METHODS.REDIRECT,
  305. exports.METHODS.RECORD,
  306. exports.METHODS.FLUSH,
  307. // For AirPlay
  308. exports.METHODS.GET,
  309. exports.METHODS.POST,
  310. ];
  311. exports.METHOD_MAP = (0, utils_1.enumToMap)(exports.METHODS);
  312. exports.H_METHOD_MAP = Object.fromEntries(Object.entries(exports.METHODS).filter(([k]) => k.startsWith('H')));
  313. exports.STATUSES_HTTP = [
  314. exports.STATUSES.CONTINUE,
  315. exports.STATUSES.SWITCHING_PROTOCOLS,
  316. exports.STATUSES.PROCESSING,
  317. exports.STATUSES.EARLY_HINTS,
  318. exports.STATUSES.RESPONSE_IS_STALE,
  319. exports.STATUSES.REVALIDATION_FAILED,
  320. exports.STATUSES.DISCONNECTED_OPERATION,
  321. exports.STATUSES.HEURISTIC_EXPIRATION,
  322. exports.STATUSES.MISCELLANEOUS_WARNING,
  323. exports.STATUSES.OK,
  324. exports.STATUSES.CREATED,
  325. exports.STATUSES.ACCEPTED,
  326. exports.STATUSES.NON_AUTHORITATIVE_INFORMATION,
  327. exports.STATUSES.NO_CONTENT,
  328. exports.STATUSES.RESET_CONTENT,
  329. exports.STATUSES.PARTIAL_CONTENT,
  330. exports.STATUSES.MULTI_STATUS,
  331. exports.STATUSES.ALREADY_REPORTED,
  332. exports.STATUSES.TRANSFORMATION_APPLIED,
  333. exports.STATUSES.IM_USED,
  334. exports.STATUSES.MISCELLANEOUS_PERSISTENT_WARNING,
  335. exports.STATUSES.MULTIPLE_CHOICES,
  336. exports.STATUSES.MOVED_PERMANENTLY,
  337. exports.STATUSES.FOUND,
  338. exports.STATUSES.SEE_OTHER,
  339. exports.STATUSES.NOT_MODIFIED,
  340. exports.STATUSES.USE_PROXY,
  341. exports.STATUSES.SWITCH_PROXY,
  342. exports.STATUSES.TEMPORARY_REDIRECT,
  343. exports.STATUSES.PERMANENT_REDIRECT,
  344. exports.STATUSES.BAD_REQUEST,
  345. exports.STATUSES.UNAUTHORIZED,
  346. exports.STATUSES.PAYMENT_REQUIRED,
  347. exports.STATUSES.FORBIDDEN,
  348. exports.STATUSES.NOT_FOUND,
  349. exports.STATUSES.METHOD_NOT_ALLOWED,
  350. exports.STATUSES.NOT_ACCEPTABLE,
  351. exports.STATUSES.PROXY_AUTHENTICATION_REQUIRED,
  352. exports.STATUSES.REQUEST_TIMEOUT,
  353. exports.STATUSES.CONFLICT,
  354. exports.STATUSES.GONE,
  355. exports.STATUSES.LENGTH_REQUIRED,
  356. exports.STATUSES.PRECONDITION_FAILED,
  357. exports.STATUSES.PAYLOAD_TOO_LARGE,
  358. exports.STATUSES.URI_TOO_LONG,
  359. exports.STATUSES.UNSUPPORTED_MEDIA_TYPE,
  360. exports.STATUSES.RANGE_NOT_SATISFIABLE,
  361. exports.STATUSES.EXPECTATION_FAILED,
  362. exports.STATUSES.IM_A_TEAPOT,
  363. exports.STATUSES.PAGE_EXPIRED,
  364. exports.STATUSES.ENHANCE_YOUR_CALM,
  365. exports.STATUSES.MISDIRECTED_REQUEST,
  366. exports.STATUSES.UNPROCESSABLE_ENTITY,
  367. exports.STATUSES.LOCKED,
  368. exports.STATUSES.FAILED_DEPENDENCY,
  369. exports.STATUSES.TOO_EARLY,
  370. exports.STATUSES.UPGRADE_REQUIRED,
  371. exports.STATUSES.PRECONDITION_REQUIRED,
  372. exports.STATUSES.TOO_MANY_REQUESTS,
  373. exports.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE_UNOFFICIAL,
  374. exports.STATUSES.REQUEST_HEADER_FIELDS_TOO_LARGE,
  375. exports.STATUSES.LOGIN_TIMEOUT,
  376. exports.STATUSES.NO_RESPONSE,
  377. exports.STATUSES.RETRY_WITH,
  378. exports.STATUSES.BLOCKED_BY_PARENTAL_CONTROL,
  379. exports.STATUSES.UNAVAILABLE_FOR_LEGAL_REASONS,
  380. exports.STATUSES.CLIENT_CLOSED_LOAD_BALANCED_REQUEST,
  381. exports.STATUSES.INVALID_X_FORWARDED_FOR,
  382. exports.STATUSES.REQUEST_HEADER_TOO_LARGE,
  383. exports.STATUSES.SSL_CERTIFICATE_ERROR,
  384. exports.STATUSES.SSL_CERTIFICATE_REQUIRED,
  385. exports.STATUSES.HTTP_REQUEST_SENT_TO_HTTPS_PORT,
  386. exports.STATUSES.INVALID_TOKEN,
  387. exports.STATUSES.CLIENT_CLOSED_REQUEST,
  388. exports.STATUSES.INTERNAL_SERVER_ERROR,
  389. exports.STATUSES.NOT_IMPLEMENTED,
  390. exports.STATUSES.BAD_GATEWAY,
  391. exports.STATUSES.SERVICE_UNAVAILABLE,
  392. exports.STATUSES.GATEWAY_TIMEOUT,
  393. exports.STATUSES.HTTP_VERSION_NOT_SUPPORTED,
  394. exports.STATUSES.VARIANT_ALSO_NEGOTIATES,
  395. exports.STATUSES.INSUFFICIENT_STORAGE,
  396. exports.STATUSES.LOOP_DETECTED,
  397. exports.STATUSES.BANDWIDTH_LIMIT_EXCEEDED,
  398. exports.STATUSES.NOT_EXTENDED,
  399. exports.STATUSES.NETWORK_AUTHENTICATION_REQUIRED,
  400. exports.STATUSES.WEB_SERVER_UNKNOWN_ERROR,
  401. exports.STATUSES.WEB_SERVER_IS_DOWN,
  402. exports.STATUSES.CONNECTION_TIMEOUT,
  403. exports.STATUSES.ORIGIN_IS_UNREACHABLE,
  404. exports.STATUSES.TIMEOUT_OCCURED,
  405. exports.STATUSES.SSL_HANDSHAKE_FAILED,
  406. exports.STATUSES.INVALID_SSL_CERTIFICATE,
  407. exports.STATUSES.RAILGUN_ERROR,
  408. exports.STATUSES.SITE_IS_OVERLOADED,
  409. exports.STATUSES.SITE_IS_FROZEN,
  410. exports.STATUSES.IDENTITY_PROVIDER_AUTHENTICATION_ERROR,
  411. exports.STATUSES.NETWORK_READ_TIMEOUT,
  412. exports.STATUSES.NETWORK_CONNECT_TIMEOUT,
  413. ];
  414. exports.ALPHA = [];
  415. for (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) {
  416. // Upper case
  417. exports.ALPHA.push(String.fromCharCode(i));
  418. // Lower case
  419. exports.ALPHA.push(String.fromCharCode(i + 0x20));
  420. }
  421. exports.NUM_MAP = {
  422. 0: 0, 1: 1, 2: 2, 3: 3, 4: 4,
  423. 5: 5, 6: 6, 7: 7, 8: 8, 9: 9,
  424. };
  425. exports.HEX_MAP = {
  426. 0: 0, 1: 1, 2: 2, 3: 3, 4: 4,
  427. 5: 5, 6: 6, 7: 7, 8: 8, 9: 9,
  428. A: 0XA, B: 0XB, C: 0XC, D: 0XD, E: 0XE, F: 0XF,
  429. a: 0xa, b: 0xb, c: 0xc, d: 0xd, e: 0xe, f: 0xf,
  430. };
  431. exports.NUM = [
  432. '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  433. ];
  434. exports.ALPHANUM = exports.ALPHA.concat(exports.NUM);
  435. exports.MARK = ['-', '_', '.', '!', '~', '*', '\'', '(', ')'];
  436. exports.USERINFO_CHARS = exports.ALPHANUM
  437. .concat(exports.MARK)
  438. .concat(['%', ';', ':', '&', '=', '+', '$', ',']);
  439. // TODO(indutny): use RFC
  440. exports.URL_CHAR = [
  441. '!', '"', '$', '%', '&', '\'',
  442. '(', ')', '*', '+', ',', '-', '.', '/',
  443. ':', ';', '<', '=', '>',
  444. '@', '[', '\\', ']', '^', '_',
  445. '`',
  446. '{', '|', '}', '~',
  447. ].concat(exports.ALPHANUM);
  448. exports.HEX = exports.NUM.concat(['a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F']);
  449. /* Tokens as defined by rfc 2616. Also lowercases them.
  450. * token = 1*<any CHAR except CTLs or separators>
  451. * separators = "(" | ")" | "<" | ">" | "@"
  452. * | "," | ";" | ":" | "\" | <">
  453. * | "/" | "[" | "]" | "?" | "="
  454. * | "{" | "}" | SP | HT
  455. */
  456. exports.TOKEN = [
  457. '!', '#', '$', '%', '&', '\'',
  458. '*', '+', '-', '.',
  459. '^', '_', '`',
  460. '|', '~',
  461. ].concat(exports.ALPHANUM);
  462. /*
  463. * Verify that a char is a valid visible (printable) US-ASCII
  464. * character or %x80-FF
  465. */
  466. exports.HEADER_CHARS = ['\t'];
  467. for (let i = 32; i <= 255; i++) {
  468. if (i !== 127) {
  469. exports.HEADER_CHARS.push(i);
  470. }
  471. }
  472. // ',' = \x44
  473. exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS.filter((c) => c !== 44);
  474. exports.QUOTED_STRING = ['\t', ' '];
  475. for (let i = 0x21; i <= 0xff; i++) {
  476. if (i !== 0x22 && i !== 0x5c) { // All characters in ASCII except \ and "
  477. exports.QUOTED_STRING.push(i);
  478. }
  479. }
  480. exports.HTAB_SP_VCHAR_OBS_TEXT = ['\t', ' '];
  481. // VCHAR: https://tools.ietf.org/html/rfc5234#appendix-B.1
  482. for (let i = 0x21; i <= 0x7E; i++) {
  483. exports.HTAB_SP_VCHAR_OBS_TEXT.push(i);
  484. }
  485. // OBS_TEXT: https://datatracker.ietf.org/doc/html/rfc9110#name-collected-abnf
  486. for (let i = 0x80; i <= 0xff; i++) {
  487. exports.HTAB_SP_VCHAR_OBS_TEXT.push(i);
  488. }
  489. exports.MAJOR = exports.NUM_MAP;
  490. exports.MINOR = exports.MAJOR;
  491. exports.SPECIAL_HEADERS = {
  492. 'connection': exports.HEADER_STATE.CONNECTION,
  493. 'content-length': exports.HEADER_STATE.CONTENT_LENGTH,
  494. 'proxy-connection': exports.HEADER_STATE.CONNECTION,
  495. 'transfer-encoding': exports.HEADER_STATE.TRANSFER_ENCODING,
  496. 'upgrade': exports.HEADER_STATE.UPGRADE,
  497. };
  498. //# sourceMappingURL=constants.js.map