@push.rocks/smartproxy 22.6.0 → 23.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 (196) hide show
  1. package/changelog.md +18 -0
  2. package/dist_rust/{rustproxy → rustproxy_linux_amd64} +0 -0
  3. package/dist_rust/rustproxy_linux_arm64 +0 -0
  4. package/dist_ts/00_commitinfo_data.js +1 -1
  5. package/dist_ts/index.d.ts +0 -1
  6. package/dist_ts/index.js +1 -3
  7. package/dist_ts/plugins.d.ts +2 -1
  8. package/dist_ts/plugins.js +3 -2
  9. package/dist_ts/proxies/index.d.ts +0 -1
  10. package/dist_ts/proxies/index.js +1 -3
  11. package/dist_ts/proxies/smart-proxy/models/route-types.js +1 -1
  12. package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.d.ts +9 -21
  13. package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.js +83 -212
  14. package/dist_ts/proxies/smart-proxy/smart-proxy.js +2 -3
  15. package/npmextra.json +3 -0
  16. package/package.json +13 -11
  17. package/readme.md +35 -31
  18. package/ts/00_commitinfo_data.ts +1 -1
  19. package/ts/index.ts +0 -3
  20. package/ts/plugins.ts +2 -0
  21. package/ts/proxies/index.ts +0 -3
  22. package/ts/proxies/smart-proxy/models/route-types.ts +0 -2
  23. package/ts/proxies/smart-proxy/rust-proxy-bridge.ts +102 -233
  24. package/ts/proxies/smart-proxy/smart-proxy.ts +1 -2
  25. package/dist_ts/common/eventUtils.d.ts +0 -14
  26. package/dist_ts/common/eventUtils.js +0 -20
  27. package/dist_ts/common/types.d.ts +0 -82
  28. package/dist_ts/common/types.js +0 -15
  29. package/dist_ts/core/utils/event-system.d.ts +0 -200
  30. package/dist_ts/core/utils/event-system.js +0 -224
  31. package/dist_ts/core/utils/event-utils.d.ts +0 -15
  32. package/dist_ts/core/utils/event-utils.js +0 -11
  33. package/dist_ts/core/utils/route-manager.d.ts +0 -88
  34. package/dist_ts/core/utils/route-manager.js +0 -342
  35. package/dist_ts/core/utils/route-utils.d.ts +0 -28
  36. package/dist_ts/core/utils/route-utils.js +0 -67
  37. package/dist_ts/detection/detectors/http-detector-v2.d.ts +0 -33
  38. package/dist_ts/detection/detectors/http-detector-v2.js +0 -87
  39. package/dist_ts/detection/detectors/tls-detector-v2.d.ts +0 -33
  40. package/dist_ts/detection/detectors/tls-detector-v2.js +0 -80
  41. package/dist_ts/detection/protocol-detector-v2.d.ts +0 -46
  42. package/dist_ts/detection/protocol-detector-v2.js +0 -116
  43. package/dist_ts/forwarding/config/forwarding-types.d.ts +0 -42
  44. package/dist_ts/forwarding/config/forwarding-types.js +0 -18
  45. package/dist_ts/forwarding/config/index.d.ts +0 -9
  46. package/dist_ts/forwarding/config/index.js +0 -10
  47. package/dist_ts/forwarding/factory/forwarding-factory.d.ts +0 -25
  48. package/dist_ts/forwarding/factory/forwarding-factory.js +0 -172
  49. package/dist_ts/forwarding/factory/index.d.ts +0 -4
  50. package/dist_ts/forwarding/factory/index.js +0 -5
  51. package/dist_ts/forwarding/handlers/base-handler.d.ts +0 -62
  52. package/dist_ts/forwarding/handlers/base-handler.js +0 -121
  53. package/dist_ts/forwarding/handlers/http-handler.d.ts +0 -30
  54. package/dist_ts/forwarding/handlers/http-handler.js +0 -143
  55. package/dist_ts/forwarding/handlers/https-passthrough-handler.d.ts +0 -29
  56. package/dist_ts/forwarding/handlers/https-passthrough-handler.js +0 -156
  57. package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.d.ts +0 -36
  58. package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.js +0 -276
  59. package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.d.ts +0 -35
  60. package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.js +0 -261
  61. package/dist_ts/forwarding/handlers/index.d.ts +0 -8
  62. package/dist_ts/forwarding/handlers/index.js +0 -9
  63. package/dist_ts/forwarding/index.d.ts +0 -13
  64. package/dist_ts/forwarding/index.js +0 -16
  65. package/dist_ts/http/index.d.ts +0 -5
  66. package/dist_ts/http/index.js +0 -8
  67. package/dist_ts/http/models/http-types.d.ts +0 -6
  68. package/dist_ts/http/models/http-types.js +0 -7
  69. package/dist_ts/http/router/index.d.ts +0 -8
  70. package/dist_ts/http/router/index.js +0 -7
  71. package/dist_ts/http/router/proxy-router.d.ts +0 -115
  72. package/dist_ts/http/router/proxy-router.js +0 -325
  73. package/dist_ts/http/router/route-router.d.ts +0 -108
  74. package/dist_ts/http/router/route-router.js +0 -393
  75. package/dist_ts/protocols/tls/constants.d.ts +0 -122
  76. package/dist_ts/protocols/tls/constants.js +0 -135
  77. package/dist_ts/protocols/tls/parser.d.ts +0 -53
  78. package/dist_ts/protocols/tls/parser.js +0 -294
  79. package/dist_ts/protocols/tls/types.d.ts +0 -65
  80. package/dist_ts/protocols/tls/types.js +0 -5
  81. package/dist_ts/proxies/http-proxy/certificate-manager.d.ts +0 -95
  82. package/dist_ts/proxies/http-proxy/certificate-manager.js +0 -214
  83. package/dist_ts/proxies/http-proxy/connection-pool.d.ts +0 -47
  84. package/dist_ts/proxies/http-proxy/connection-pool.js +0 -195
  85. package/dist_ts/proxies/http-proxy/context-creator.d.ts +0 -34
  86. package/dist_ts/proxies/http-proxy/context-creator.js +0 -108
  87. package/dist_ts/proxies/http-proxy/default-certificates.d.ts +0 -54
  88. package/dist_ts/proxies/http-proxy/default-certificates.js +0 -127
  89. package/dist_ts/proxies/http-proxy/function-cache.d.ts +0 -95
  90. package/dist_ts/proxies/http-proxy/function-cache.js +0 -215
  91. package/dist_ts/proxies/http-proxy/handlers/index.d.ts +0 -4
  92. package/dist_ts/proxies/http-proxy/handlers/index.js +0 -6
  93. package/dist_ts/proxies/http-proxy/handlers/redirect-handler.d.ts +0 -18
  94. package/dist_ts/proxies/http-proxy/handlers/redirect-handler.js +0 -78
  95. package/dist_ts/proxies/http-proxy/handlers/static-handler.d.ts +0 -19
  96. package/dist_ts/proxies/http-proxy/handlers/static-handler.js +0 -211
  97. package/dist_ts/proxies/http-proxy/http-proxy.d.ts +0 -117
  98. package/dist_ts/proxies/http-proxy/http-proxy.js +0 -521
  99. package/dist_ts/proxies/http-proxy/http-request-handler.d.ts +0 -40
  100. package/dist_ts/proxies/http-proxy/http-request-handler.js +0 -257
  101. package/dist_ts/proxies/http-proxy/http2-request-handler.d.ts +0 -24
  102. package/dist_ts/proxies/http-proxy/http2-request-handler.js +0 -201
  103. package/dist_ts/proxies/http-proxy/index.d.ts +0 -14
  104. package/dist_ts/proxies/http-proxy/index.js +0 -16
  105. package/dist_ts/proxies/http-proxy/models/http-types.d.ts +0 -117
  106. package/dist_ts/proxies/http-proxy/models/http-types.js +0 -92
  107. package/dist_ts/proxies/http-proxy/models/index.d.ts +0 -5
  108. package/dist_ts/proxies/http-proxy/models/index.js +0 -6
  109. package/dist_ts/proxies/http-proxy/models/types.d.ts +0 -75
  110. package/dist_ts/proxies/http-proxy/models/types.js +0 -35
  111. package/dist_ts/proxies/http-proxy/request-handler.d.ts +0 -97
  112. package/dist_ts/proxies/http-proxy/request-handler.js +0 -737
  113. package/dist_ts/proxies/http-proxy/security-manager.d.ts +0 -98
  114. package/dist_ts/proxies/http-proxy/security-manager.js +0 -341
  115. package/dist_ts/proxies/http-proxy/websocket-handler.d.ts +0 -50
  116. package/dist_ts/proxies/http-proxy/websocket-handler.js +0 -505
  117. package/dist_ts/proxies/nftables-proxy/index.d.ts +0 -6
  118. package/dist_ts/proxies/nftables-proxy/index.js +0 -7
  119. package/dist_ts/proxies/nftables-proxy/models/errors.d.ts +0 -15
  120. package/dist_ts/proxies/nftables-proxy/models/errors.js +0 -28
  121. package/dist_ts/proxies/nftables-proxy/models/index.d.ts +0 -5
  122. package/dist_ts/proxies/nftables-proxy/models/index.js +0 -6
  123. package/dist_ts/proxies/nftables-proxy/models/interfaces.d.ts +0 -75
  124. package/dist_ts/proxies/nftables-proxy/models/interfaces.js +0 -5
  125. package/dist_ts/proxies/nftables-proxy/nftables-proxy.d.ts +0 -124
  126. package/dist_ts/proxies/nftables-proxy/nftables-proxy.js +0 -1374
  127. package/dist_ts/proxies/nftables-proxy/utils/index.d.ts +0 -9
  128. package/dist_ts/proxies/nftables-proxy/utils/index.js +0 -12
  129. package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.d.ts +0 -66
  130. package/dist_ts/proxies/nftables-proxy/utils/nft-command-executor.js +0 -131
  131. package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.d.ts +0 -39
  132. package/dist_ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.js +0 -112
  133. package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.d.ts +0 -59
  134. package/dist_ts/proxies/nftables-proxy/utils/nft-rule-validator.js +0 -130
  135. package/dist_ts/proxies/smart-proxy/acme-state-manager.d.ts +0 -42
  136. package/dist_ts/proxies/smart-proxy/acme-state-manager.js +0 -101
  137. package/dist_ts/proxies/smart-proxy/cert-store.d.ts +0 -10
  138. package/dist_ts/proxies/smart-proxy/cert-store.js +0 -72
  139. package/dist_ts/proxies/smart-proxy/certificate-manager.d.ts +0 -164
  140. package/dist_ts/proxies/smart-proxy/certificate-manager.js +0 -745
  141. package/dist_ts/proxies/smart-proxy/connection-manager.d.ts +0 -128
  142. package/dist_ts/proxies/smart-proxy/connection-manager.js +0 -689
  143. package/dist_ts/proxies/smart-proxy/http-proxy-bridge.d.ts +0 -43
  144. package/dist_ts/proxies/smart-proxy/http-proxy-bridge.js +0 -180
  145. package/dist_ts/proxies/smart-proxy/metrics-collector.d.ts +0 -98
  146. package/dist_ts/proxies/smart-proxy/metrics-collector.js +0 -355
  147. package/dist_ts/proxies/smart-proxy/nftables-manager.d.ts +0 -82
  148. package/dist_ts/proxies/smart-proxy/nftables-manager.js +0 -237
  149. package/dist_ts/proxies/smart-proxy/port-manager.d.ts +0 -117
  150. package/dist_ts/proxies/smart-proxy/port-manager.js +0 -318
  151. package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +0 -60
  152. package/dist_ts/proxies/smart-proxy/route-connection-handler.js +0 -1407
  153. package/dist_ts/proxies/smart-proxy/route-manager.d.ts +0 -112
  154. package/dist_ts/proxies/smart-proxy/route-manager.js +0 -453
  155. package/dist_ts/proxies/smart-proxy/route-orchestrator.d.ts +0 -56
  156. package/dist_ts/proxies/smart-proxy/route-orchestrator.js +0 -204
  157. package/dist_ts/proxies/smart-proxy/rust-binary-locator.d.ts +0 -23
  158. package/dist_ts/proxies/smart-proxy/rust-binary-locator.js +0 -104
  159. package/dist_ts/proxies/smart-proxy/security-manager.d.ts +0 -74
  160. package/dist_ts/proxies/smart-proxy/security-manager.js +0 -227
  161. package/dist_ts/proxies/smart-proxy/throughput-tracker.d.ts +0 -36
  162. package/dist_ts/proxies/smart-proxy/throughput-tracker.js +0 -115
  163. package/dist_ts/proxies/smart-proxy/timeout-manager.d.ts +0 -48
  164. package/dist_ts/proxies/smart-proxy/timeout-manager.js +0 -158
  165. package/dist_ts/proxies/smart-proxy/tls-manager.d.ts +0 -50
  166. package/dist_ts/proxies/smart-proxy/tls-manager.js +0 -110
  167. package/dist_ts/proxies/smart-proxy/utils/route-patterns.d.ts +0 -161
  168. package/dist_ts/proxies/smart-proxy/utils/route-patterns.js +0 -282
  169. package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +0 -73
  170. package/dist_ts/proxies/smart-proxy/utils/route-validators.js +0 -259
  171. package/dist_ts/routing/router/proxy-router.d.ts +0 -115
  172. package/dist_ts/routing/router/proxy-router.js +0 -325
  173. package/dist_ts/routing/router/route-router.d.ts +0 -108
  174. package/dist_ts/routing/router/route-router.js +0 -393
  175. package/dist_ts/tls/alerts/index.d.ts +0 -4
  176. package/dist_ts/tls/alerts/index.js +0 -5
  177. package/dist_ts/tls/alerts/tls-alert.d.ts +0 -150
  178. package/dist_ts/tls/alerts/tls-alert.js +0 -226
  179. package/dist_ts/tls/sni/client-hello-parser.d.ts +0 -100
  180. package/dist_ts/tls/sni/client-hello-parser.js +0 -464
  181. package/dist_ts/tls/sni/sni-extraction.d.ts +0 -58
  182. package/dist_ts/tls/sni/sni-extraction.js +0 -275
  183. package/dist_ts/tls/utils/index.d.ts +0 -4
  184. package/dist_ts/tls/utils/index.js +0 -5
  185. package/dist_ts/tls/utils/tls-utils.d.ts +0 -49
  186. package/dist_ts/tls/utils/tls-utils.js +0 -75
  187. package/ts/proxies/nftables-proxy/index.ts +0 -6
  188. package/ts/proxies/nftables-proxy/models/errors.ts +0 -30
  189. package/ts/proxies/nftables-proxy/models/index.ts +0 -5
  190. package/ts/proxies/nftables-proxy/models/interfaces.ts +0 -94
  191. package/ts/proxies/nftables-proxy/nftables-proxy.ts +0 -1754
  192. package/ts/proxies/nftables-proxy/utils/index.ts +0 -38
  193. package/ts/proxies/nftables-proxy/utils/nft-command-executor.ts +0 -162
  194. package/ts/proxies/nftables-proxy/utils/nft-port-spec-normalizer.ts +0 -125
  195. package/ts/proxies/nftables-proxy/utils/nft-rule-validator.ts +0 -156
  196. package/ts/proxies/smart-proxy/rust-binary-locator.ts +0 -112
@@ -1,135 +0,0 @@
1
- /**
2
- * TLS Protocol Constants
3
- * Based on various TLS RFCs
4
- */
5
- /**
6
- * TLS record types as defined in various RFCs
7
- */
8
- export var TlsRecordType;
9
- (function (TlsRecordType) {
10
- TlsRecordType[TlsRecordType["CHANGE_CIPHER_SPEC"] = 20] = "CHANGE_CIPHER_SPEC";
11
- TlsRecordType[TlsRecordType["ALERT"] = 21] = "ALERT";
12
- TlsRecordType[TlsRecordType["HANDSHAKE"] = 22] = "HANDSHAKE";
13
- TlsRecordType[TlsRecordType["APPLICATION_DATA"] = 23] = "APPLICATION_DATA";
14
- TlsRecordType[TlsRecordType["HEARTBEAT"] = 24] = "HEARTBEAT";
15
- })(TlsRecordType || (TlsRecordType = {}));
16
- /**
17
- * TLS handshake message types
18
- */
19
- export var TlsHandshakeType;
20
- (function (TlsHandshakeType) {
21
- TlsHandshakeType[TlsHandshakeType["HELLO_REQUEST"] = 0] = "HELLO_REQUEST";
22
- TlsHandshakeType[TlsHandshakeType["CLIENT_HELLO"] = 1] = "CLIENT_HELLO";
23
- TlsHandshakeType[TlsHandshakeType["SERVER_HELLO"] = 2] = "SERVER_HELLO";
24
- TlsHandshakeType[TlsHandshakeType["NEW_SESSION_TICKET"] = 4] = "NEW_SESSION_TICKET";
25
- TlsHandshakeType[TlsHandshakeType["ENCRYPTED_EXTENSIONS"] = 8] = "ENCRYPTED_EXTENSIONS";
26
- TlsHandshakeType[TlsHandshakeType["CERTIFICATE"] = 11] = "CERTIFICATE";
27
- TlsHandshakeType[TlsHandshakeType["SERVER_KEY_EXCHANGE"] = 12] = "SERVER_KEY_EXCHANGE";
28
- TlsHandshakeType[TlsHandshakeType["CERTIFICATE_REQUEST"] = 13] = "CERTIFICATE_REQUEST";
29
- TlsHandshakeType[TlsHandshakeType["SERVER_HELLO_DONE"] = 14] = "SERVER_HELLO_DONE";
30
- TlsHandshakeType[TlsHandshakeType["CERTIFICATE_VERIFY"] = 15] = "CERTIFICATE_VERIFY";
31
- TlsHandshakeType[TlsHandshakeType["CLIENT_KEY_EXCHANGE"] = 16] = "CLIENT_KEY_EXCHANGE";
32
- TlsHandshakeType[TlsHandshakeType["FINISHED"] = 20] = "FINISHED";
33
- })(TlsHandshakeType || (TlsHandshakeType = {}));
34
- /**
35
- * TLS extension types
36
- */
37
- export var TlsExtensionType;
38
- (function (TlsExtensionType) {
39
- TlsExtensionType[TlsExtensionType["SERVER_NAME"] = 0] = "SERVER_NAME";
40
- TlsExtensionType[TlsExtensionType["MAX_FRAGMENT_LENGTH"] = 1] = "MAX_FRAGMENT_LENGTH";
41
- TlsExtensionType[TlsExtensionType["CLIENT_CERTIFICATE_URL"] = 2] = "CLIENT_CERTIFICATE_URL";
42
- TlsExtensionType[TlsExtensionType["TRUSTED_CA_KEYS"] = 3] = "TRUSTED_CA_KEYS";
43
- TlsExtensionType[TlsExtensionType["TRUNCATED_HMAC"] = 4] = "TRUNCATED_HMAC";
44
- TlsExtensionType[TlsExtensionType["STATUS_REQUEST"] = 5] = "STATUS_REQUEST";
45
- TlsExtensionType[TlsExtensionType["SUPPORTED_GROUPS"] = 10] = "SUPPORTED_GROUPS";
46
- TlsExtensionType[TlsExtensionType["EC_POINT_FORMATS"] = 11] = "EC_POINT_FORMATS";
47
- TlsExtensionType[TlsExtensionType["SIGNATURE_ALGORITHMS"] = 13] = "SIGNATURE_ALGORITHMS";
48
- TlsExtensionType[TlsExtensionType["APPLICATION_LAYER_PROTOCOL_NEGOTIATION"] = 16] = "APPLICATION_LAYER_PROTOCOL_NEGOTIATION";
49
- TlsExtensionType[TlsExtensionType["SIGNED_CERTIFICATE_TIMESTAMP"] = 18] = "SIGNED_CERTIFICATE_TIMESTAMP";
50
- TlsExtensionType[TlsExtensionType["PADDING"] = 21] = "PADDING";
51
- TlsExtensionType[TlsExtensionType["SESSION_TICKET"] = 35] = "SESSION_TICKET";
52
- TlsExtensionType[TlsExtensionType["PRE_SHARED_KEY"] = 41] = "PRE_SHARED_KEY";
53
- TlsExtensionType[TlsExtensionType["EARLY_DATA"] = 42] = "EARLY_DATA";
54
- TlsExtensionType[TlsExtensionType["SUPPORTED_VERSIONS"] = 43] = "SUPPORTED_VERSIONS";
55
- TlsExtensionType[TlsExtensionType["COOKIE"] = 44] = "COOKIE";
56
- TlsExtensionType[TlsExtensionType["PSK_KEY_EXCHANGE_MODES"] = 45] = "PSK_KEY_EXCHANGE_MODES";
57
- TlsExtensionType[TlsExtensionType["CERTIFICATE_AUTHORITIES"] = 47] = "CERTIFICATE_AUTHORITIES";
58
- TlsExtensionType[TlsExtensionType["POST_HANDSHAKE_AUTH"] = 49] = "POST_HANDSHAKE_AUTH";
59
- TlsExtensionType[TlsExtensionType["SIGNATURE_ALGORITHMS_CERT"] = 50] = "SIGNATURE_ALGORITHMS_CERT";
60
- TlsExtensionType[TlsExtensionType["KEY_SHARE"] = 51] = "KEY_SHARE";
61
- })(TlsExtensionType || (TlsExtensionType = {}));
62
- /**
63
- * TLS alert levels
64
- */
65
- export var TlsAlertLevel;
66
- (function (TlsAlertLevel) {
67
- TlsAlertLevel[TlsAlertLevel["WARNING"] = 1] = "WARNING";
68
- TlsAlertLevel[TlsAlertLevel["FATAL"] = 2] = "FATAL";
69
- })(TlsAlertLevel || (TlsAlertLevel = {}));
70
- /**
71
- * TLS alert description codes
72
- */
73
- export var TlsAlertDescription;
74
- (function (TlsAlertDescription) {
75
- TlsAlertDescription[TlsAlertDescription["CLOSE_NOTIFY"] = 0] = "CLOSE_NOTIFY";
76
- TlsAlertDescription[TlsAlertDescription["UNEXPECTED_MESSAGE"] = 10] = "UNEXPECTED_MESSAGE";
77
- TlsAlertDescription[TlsAlertDescription["BAD_RECORD_MAC"] = 20] = "BAD_RECORD_MAC";
78
- TlsAlertDescription[TlsAlertDescription["DECRYPTION_FAILED"] = 21] = "DECRYPTION_FAILED";
79
- TlsAlertDescription[TlsAlertDescription["RECORD_OVERFLOW"] = 22] = "RECORD_OVERFLOW";
80
- TlsAlertDescription[TlsAlertDescription["DECOMPRESSION_FAILURE"] = 30] = "DECOMPRESSION_FAILURE";
81
- TlsAlertDescription[TlsAlertDescription["HANDSHAKE_FAILURE"] = 40] = "HANDSHAKE_FAILURE";
82
- TlsAlertDescription[TlsAlertDescription["NO_CERTIFICATE"] = 41] = "NO_CERTIFICATE";
83
- TlsAlertDescription[TlsAlertDescription["BAD_CERTIFICATE"] = 42] = "BAD_CERTIFICATE";
84
- TlsAlertDescription[TlsAlertDescription["UNSUPPORTED_CERTIFICATE"] = 43] = "UNSUPPORTED_CERTIFICATE";
85
- TlsAlertDescription[TlsAlertDescription["CERTIFICATE_REVOKED"] = 44] = "CERTIFICATE_REVOKED";
86
- TlsAlertDescription[TlsAlertDescription["CERTIFICATE_EXPIRED"] = 45] = "CERTIFICATE_EXPIRED";
87
- TlsAlertDescription[TlsAlertDescription["CERTIFICATE_UNKNOWN"] = 46] = "CERTIFICATE_UNKNOWN";
88
- TlsAlertDescription[TlsAlertDescription["ILLEGAL_PARAMETER"] = 47] = "ILLEGAL_PARAMETER";
89
- TlsAlertDescription[TlsAlertDescription["UNKNOWN_CA"] = 48] = "UNKNOWN_CA";
90
- TlsAlertDescription[TlsAlertDescription["ACCESS_DENIED"] = 49] = "ACCESS_DENIED";
91
- TlsAlertDescription[TlsAlertDescription["DECODE_ERROR"] = 50] = "DECODE_ERROR";
92
- TlsAlertDescription[TlsAlertDescription["DECRYPT_ERROR"] = 51] = "DECRYPT_ERROR";
93
- TlsAlertDescription[TlsAlertDescription["EXPORT_RESTRICTION"] = 60] = "EXPORT_RESTRICTION";
94
- TlsAlertDescription[TlsAlertDescription["PROTOCOL_VERSION"] = 70] = "PROTOCOL_VERSION";
95
- TlsAlertDescription[TlsAlertDescription["INSUFFICIENT_SECURITY"] = 71] = "INSUFFICIENT_SECURITY";
96
- TlsAlertDescription[TlsAlertDescription["INTERNAL_ERROR"] = 80] = "INTERNAL_ERROR";
97
- TlsAlertDescription[TlsAlertDescription["INAPPROPRIATE_FALLBACK"] = 86] = "INAPPROPRIATE_FALLBACK";
98
- TlsAlertDescription[TlsAlertDescription["USER_CANCELED"] = 90] = "USER_CANCELED";
99
- TlsAlertDescription[TlsAlertDescription["NO_RENEGOTIATION"] = 100] = "NO_RENEGOTIATION";
100
- TlsAlertDescription[TlsAlertDescription["MISSING_EXTENSION"] = 109] = "MISSING_EXTENSION";
101
- TlsAlertDescription[TlsAlertDescription["UNSUPPORTED_EXTENSION"] = 110] = "UNSUPPORTED_EXTENSION";
102
- TlsAlertDescription[TlsAlertDescription["CERTIFICATE_REQUIRED"] = 111] = "CERTIFICATE_REQUIRED";
103
- TlsAlertDescription[TlsAlertDescription["UNRECOGNIZED_NAME"] = 112] = "UNRECOGNIZED_NAME";
104
- TlsAlertDescription[TlsAlertDescription["BAD_CERTIFICATE_STATUS_RESPONSE"] = 113] = "BAD_CERTIFICATE_STATUS_RESPONSE";
105
- TlsAlertDescription[TlsAlertDescription["BAD_CERTIFICATE_HASH_VALUE"] = 114] = "BAD_CERTIFICATE_HASH_VALUE";
106
- TlsAlertDescription[TlsAlertDescription["UNKNOWN_PSK_IDENTITY"] = 115] = "UNKNOWN_PSK_IDENTITY";
107
- TlsAlertDescription[TlsAlertDescription["CERTIFICATE_REQUIRED_1_3"] = 116] = "CERTIFICATE_REQUIRED_1_3";
108
- TlsAlertDescription[TlsAlertDescription["NO_APPLICATION_PROTOCOL"] = 120] = "NO_APPLICATION_PROTOCOL";
109
- })(TlsAlertDescription || (TlsAlertDescription = {}));
110
- /**
111
- * TLS version codes (major.minor)
112
- */
113
- export const TlsVersion = {
114
- SSL3: [0x03, 0x00],
115
- TLS1_0: [0x03, 0x01],
116
- TLS1_1: [0x03, 0x02],
117
- TLS1_2: [0x03, 0x03],
118
- TLS1_3: [0x03, 0x04],
119
- };
120
- /**
121
- * Convert TLS version bytes to version string
122
- */
123
- export function tlsVersionToString(major, minor) {
124
- if (major === 0x03) {
125
- switch (minor) {
126
- case 0x00: return 'SSLv3';
127
- case 0x01: return 'TLSv1.0';
128
- case 0x02: return 'TLSv1.1';
129
- case 0x03: return 'TLSv1.2';
130
- case 0x04: return 'TLSv1.3';
131
- }
132
- }
133
- return null;
134
- }
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJvdG9jb2xzL3Rscy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxhQU1YO0FBTkQsV0FBWSxhQUFhO0lBQ3ZCLDhFQUF1QixDQUFBO0lBQ3ZCLG9EQUFVLENBQUE7SUFDViw0REFBYyxDQUFBO0lBQ2QsMEVBQXFCLENBQUE7SUFDckIsNERBQWMsQ0FBQTtBQUNoQixDQUFDLEVBTlcsYUFBYSxLQUFiLGFBQWEsUUFNeEI7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGdCQWFYO0FBYkQsV0FBWSxnQkFBZ0I7SUFDMUIseUVBQWlCLENBQUE7SUFDakIsdUVBQWdCLENBQUE7SUFDaEIsdUVBQWdCLENBQUE7SUFDaEIsbUZBQXNCLENBQUE7SUFDdEIsdUZBQXdCLENBQUE7SUFDeEIsc0VBQWdCLENBQUE7SUFDaEIsc0ZBQXdCLENBQUE7SUFDeEIsc0ZBQXdCLENBQUE7SUFDeEIsa0ZBQXNCLENBQUE7SUFDdEIsb0ZBQXVCLENBQUE7SUFDdkIsc0ZBQXdCLENBQUE7SUFDeEIsZ0VBQWEsQ0FBQTtBQUNmLENBQUMsRUFiVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBYTNCO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxnQkF1Qlg7QUF2QkQsV0FBWSxnQkFBZ0I7SUFDMUIscUVBQWUsQ0FBQTtJQUNmLHFGQUF1QixDQUFBO0lBQ3ZCLDJGQUEwQixDQUFBO0lBQzFCLDZFQUFtQixDQUFBO0lBQ25CLDJFQUFrQixDQUFBO0lBQ2xCLDJFQUFrQixDQUFBO0lBQ2xCLGdGQUFxQixDQUFBO0lBQ3JCLGdGQUFxQixDQUFBO0lBQ3JCLHdGQUF5QixDQUFBO0lBQ3pCLDRIQUEyQyxDQUFBO0lBQzNDLHdHQUFpQyxDQUFBO0lBQ2pDLDhEQUFZLENBQUE7SUFDWiw0RUFB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
@@ -1,53 +0,0 @@
1
- /**
2
- * TLS Protocol Parser
3
- * Generic TLS parsing utilities separated from implementation logic
4
- */
5
- import { Buffer } from 'buffer';
6
- import type { ITlsExtension } from './types.js';
7
- /**
8
- * Result of a ClientHello parse operation
9
- */
10
- export interface IClientHelloParseResult {
11
- isValid: boolean;
12
- version?: [number, number];
13
- random?: Buffer;
14
- sessionId?: Buffer;
15
- hasSessionId: boolean;
16
- cipherSuites?: Buffer;
17
- compressionMethods?: Buffer;
18
- extensions: ITlsExtension[];
19
- serverNameList?: string[];
20
- hasSessionTicket: boolean;
21
- hasPsk: boolean;
22
- hasEarlyData: boolean;
23
- error?: string;
24
- }
25
- /**
26
- * TLS protocol parser utilities
27
- */
28
- export declare class TlsParser {
29
- /**
30
- * Checks if a buffer contains a TLS handshake record
31
- */
32
- static isTlsHandshake(buffer: Buffer): boolean;
33
- /**
34
- * Checks if a buffer contains a TLS ClientHello message
35
- */
36
- static isClientHello(buffer: Buffer): boolean;
37
- /**
38
- * Gets the record length from a TLS record header
39
- */
40
- static getTlsRecordLength(buffer: Buffer): number;
41
- /**
42
- * Parses a TLS ClientHello message and extracts all components
43
- */
44
- static parseClientHello(buffer: Buffer): IClientHelloParseResult;
45
- /**
46
- * Parses the server name extension data and extracts hostnames
47
- */
48
- static parseServerNameExtension(data: Buffer): string[];
49
- /**
50
- * Extract SNI (Server Name Indication) from ClientHello
51
- */
52
- static extractSNI(buffer: Buffer): string | null;
53
- }
@@ -1,294 +0,0 @@
1
- /**
2
- * TLS Protocol Parser
3
- * Generic TLS parsing utilities separated from implementation logic
4
- */
5
- import { Buffer } from 'buffer';
6
- import { TlsRecordType, TlsHandshakeType, TlsExtensionType } from './constants.js';
7
- /**
8
- * TLS protocol parser utilities
9
- */
10
- export class TlsParser {
11
- /**
12
- * Checks if a buffer contains a TLS handshake record
13
- */
14
- static isTlsHandshake(buffer) {
15
- return buffer.length > 0 && buffer[0] === TlsRecordType.HANDSHAKE;
16
- }
17
- /**
18
- * Checks if a buffer contains a TLS ClientHello message
19
- */
20
- static isClientHello(buffer) {
21
- // Minimum ClientHello size (TLS record header + handshake header)
22
- if (buffer.length < 9) {
23
- return false;
24
- }
25
- // Check record type (must be TLS_HANDSHAKE_RECORD_TYPE)
26
- if (buffer[0] !== TlsRecordType.HANDSHAKE) {
27
- return false;
28
- }
29
- // Check handshake type at byte 5 (must be CLIENT_HELLO)
30
- return buffer[5] === TlsHandshakeType.CLIENT_HELLO;
31
- }
32
- /**
33
- * Gets the record length from a TLS record header
34
- */
35
- static getTlsRecordLength(buffer) {
36
- if (buffer.length < 5) {
37
- return -1;
38
- }
39
- // Bytes 3-4 contain the record length (big-endian)
40
- return (buffer[3] << 8) + buffer[4];
41
- }
42
- /**
43
- * Parses a TLS ClientHello message and extracts all components
44
- */
45
- static parseClientHello(buffer) {
46
- const result = {
47
- isValid: false,
48
- hasSessionId: false,
49
- extensions: [],
50
- hasSessionTicket: false,
51
- hasPsk: false,
52
- hasEarlyData: false
53
- };
54
- try {
55
- // Check basic validity
56
- if (buffer.length < 5) {
57
- result.error = 'Buffer too small for TLS record header';
58
- return result;
59
- }
60
- // Check record type (must be HANDSHAKE)
61
- if (buffer[0] !== TlsRecordType.HANDSHAKE) {
62
- result.error = `Not a TLS handshake record: ${buffer[0]}`;
63
- return result;
64
- }
65
- // Get TLS version from record header
66
- const majorVersion = buffer[1];
67
- const minorVersion = buffer[2];
68
- result.version = [majorVersion, minorVersion];
69
- // Parse record length (bytes 3-4, big-endian)
70
- const recordLength = (buffer[3] << 8) + buffer[4];
71
- // Validate record length against buffer size
72
- if (buffer.length < recordLength + 5) {
73
- result.error = 'Buffer smaller than expected record length';
74
- return result;
75
- }
76
- // Start of handshake message in the buffer
77
- let pos = 5;
78
- // Check handshake type (must be CLIENT_HELLO)
79
- if (buffer[pos] !== TlsHandshakeType.CLIENT_HELLO) {
80
- result.error = `Not a ClientHello message: ${buffer[pos]}`;
81
- return result;
82
- }
83
- // Skip handshake type (1 byte)
84
- pos += 1;
85
- // Parse handshake length (3 bytes, big-endian)
86
- const handshakeLength = (buffer[pos] << 16) + (buffer[pos + 1] << 8) + buffer[pos + 2];
87
- // Skip handshake length (3 bytes)
88
- pos += 3;
89
- // Skip client version (2 bytes)
90
- pos += 2;
91
- // Extract client random (32 bytes)
92
- if (pos + 32 > buffer.length) {
93
- result.error = 'Buffer too small for client random';
94
- return result;
95
- }
96
- result.random = buffer.slice(pos, pos + 32);
97
- // Skip client random (32 bytes)
98
- pos += 32;
99
- // Parse session ID
100
- if (pos + 1 > buffer.length) {
101
- result.error = 'Buffer too small for session ID length';
102
- return result;
103
- }
104
- const sessionIdLength = buffer[pos];
105
- pos += 1;
106
- result.hasSessionId = sessionIdLength > 0;
107
- if (sessionIdLength > 0) {
108
- if (pos + sessionIdLength > buffer.length) {
109
- result.error = 'Buffer too small for session ID';
110
- return result;
111
- }
112
- result.sessionId = buffer.slice(pos, pos + sessionIdLength);
113
- }
114
- // Skip session ID
115
- pos += sessionIdLength;
116
- // Check if we have enough bytes left for cipher suites
117
- if (pos + 2 > buffer.length) {
118
- result.error = 'Buffer too small for cipher suites length';
119
- return result;
120
- }
121
- // Parse cipher suites length (2 bytes, big-endian)
122
- const cipherSuitesLength = (buffer[pos] << 8) + buffer[pos + 1];
123
- pos += 2;
124
- // Extract cipher suites
125
- if (pos + cipherSuitesLength > buffer.length) {
126
- result.error = 'Buffer too small for cipher suites';
127
- return result;
128
- }
129
- result.cipherSuites = buffer.slice(pos, pos + cipherSuitesLength);
130
- // Skip cipher suites
131
- pos += cipherSuitesLength;
132
- // Check if we have enough bytes left for compression methods
133
- if (pos + 1 > buffer.length) {
134
- result.error = 'Buffer too small for compression methods length';
135
- return result;
136
- }
137
- // Parse compression methods length (1 byte)
138
- const compressionMethodsLength = buffer[pos];
139
- pos += 1;
140
- // Extract compression methods
141
- if (pos + compressionMethodsLength > buffer.length) {
142
- result.error = 'Buffer too small for compression methods';
143
- return result;
144
- }
145
- result.compressionMethods = buffer.slice(pos, pos + compressionMethodsLength);
146
- // Skip compression methods
147
- pos += compressionMethodsLength;
148
- // Check if we have enough bytes for extensions length
149
- if (pos + 2 > buffer.length) {
150
- // No extensions present - this is valid for older TLS versions
151
- result.isValid = true;
152
- return result;
153
- }
154
- // Parse extensions length (2 bytes, big-endian)
155
- const extensionsLength = (buffer[pos] << 8) + buffer[pos + 1];
156
- pos += 2;
157
- // Extensions end position
158
- const extensionsEnd = pos + extensionsLength;
159
- // Check if extensions length is valid
160
- if (extensionsEnd > buffer.length) {
161
- result.error = 'Extensions length exceeds buffer size';
162
- return result;
163
- }
164
- // Iterate through extensions
165
- const serverNames = [];
166
- while (pos + 4 <= extensionsEnd) {
167
- // Parse extension type (2 bytes, big-endian)
168
- const extensionType = (buffer[pos] << 8) + buffer[pos + 1];
169
- pos += 2;
170
- // Parse extension length (2 bytes, big-endian)
171
- const extensionLength = (buffer[pos] << 8) + buffer[pos + 1];
172
- pos += 2;
173
- // Extract extension data
174
- if (pos + extensionLength > extensionsEnd) {
175
- result.error = `Extension ${extensionType} data exceeds bounds`;
176
- return result;
177
- }
178
- const extensionData = buffer.slice(pos, pos + extensionLength);
179
- // Record all extensions
180
- result.extensions.push({
181
- type: extensionType,
182
- data: extensionData
183
- });
184
- // Track specific extension types
185
- if (extensionType === TlsExtensionType.SERVER_NAME) {
186
- // Server Name Indication (SNI)
187
- const sniNames = this.parseServerNameExtension(extensionData);
188
- serverNames.push(...sniNames);
189
- }
190
- else if (extensionType === TlsExtensionType.SESSION_TICKET) {
191
- // Session ticket
192
- result.hasSessionTicket = true;
193
- }
194
- else if (extensionType === TlsExtensionType.PRE_SHARED_KEY) {
195
- // TLS 1.3 PSK
196
- result.hasPsk = true;
197
- }
198
- else if (extensionType === TlsExtensionType.EARLY_DATA) {
199
- // TLS 1.3 Early Data (0-RTT)
200
- result.hasEarlyData = true;
201
- }
202
- // Move to next extension
203
- pos += extensionLength;
204
- }
205
- // Store any server names found
206
- if (serverNames.length > 0) {
207
- result.serverNameList = serverNames;
208
- }
209
- // Mark as valid if we get here
210
- result.isValid = true;
211
- return result;
212
- }
213
- catch (error) {
214
- const errorMessage = error instanceof Error ? error.message : String(error);
215
- result.error = errorMessage;
216
- return result;
217
- }
218
- }
219
- /**
220
- * Parses the server name extension data and extracts hostnames
221
- */
222
- static parseServerNameExtension(data) {
223
- const serverNames = [];
224
- try {
225
- // Need at least 2 bytes for server name list length
226
- if (data.length < 2) {
227
- return serverNames;
228
- }
229
- // Parse server name list length (2 bytes)
230
- const listLength = (data[0] << 8) + data[1];
231
- // Skip to first name entry
232
- let pos = 2;
233
- // End of list
234
- const listEnd = pos + listLength;
235
- // Validate length
236
- if (listEnd > data.length) {
237
- return serverNames;
238
- }
239
- // Process all name entries
240
- while (pos + 3 <= listEnd) {
241
- // Name type (1 byte)
242
- const nameType = data[pos];
243
- pos += 1;
244
- // For hostname, type must be 0
245
- if (nameType !== 0) {
246
- // Skip this entry
247
- if (pos + 2 <= listEnd) {
248
- const nameLength = (data[pos] << 8) + data[pos + 1];
249
- pos += 2 + nameLength;
250
- continue;
251
- }
252
- else {
253
- return serverNames;
254
- }
255
- }
256
- // Parse hostname length (2 bytes)
257
- if (pos + 2 > listEnd) {
258
- return serverNames;
259
- }
260
- const nameLength = (data[pos] << 8) + data[pos + 1];
261
- pos += 2;
262
- // Extract hostname
263
- if (pos + nameLength > listEnd) {
264
- return serverNames;
265
- }
266
- // Extract the hostname as UTF-8
267
- try {
268
- const hostname = data.slice(pos, pos + nameLength).toString('utf8');
269
- serverNames.push(hostname);
270
- }
271
- catch (err) {
272
- // Ignore invalid hostnames
273
- }
274
- // Move to next entry
275
- pos += nameLength;
276
- }
277
- return serverNames;
278
- }
279
- catch (error) {
280
- return serverNames;
281
- }
282
- }
283
- /**
284
- * Extract SNI (Server Name Indication) from ClientHello
285
- */
286
- static extractSNI(buffer) {
287
- const parseResult = this.parseClientHello(buffer);
288
- if (!parseResult.isValid || !parseResult.serverNameList || parseResult.serverNameList.length === 0) {
289
- return null;
290
- }
291
- return parseResult.serverNameList[0];
292
- }
293
- }
294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvcHJvdG9jb2xzL3Rscy9wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFzQm5GOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFDcEI7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQWM7UUFDbEMsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQWM7UUFDakMsa0VBQWtFO1FBQ2xFLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELHdEQUF3RDtRQUN4RCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQWM7UUFDdEMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDWixDQUFDO1FBRUQsbURBQW1EO1FBQ25ELE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFD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
@@ -1,65 +0,0 @@
1
- /**
2
- * TLS Protocol Type Definitions
3
- */
4
- import type { TTlsVersionString } from './constants.js';
5
- /**
6
- * TLS record header structure
7
- */
8
- export interface ITlsRecordHeader {
9
- type: number;
10
- version: {
11
- major: number;
12
- minor: number;
13
- };
14
- length: number;
15
- }
16
- /**
17
- * TLS handshake header structure
18
- */
19
- export interface ITlsHandshakeHeader {
20
- type: number;
21
- length: number;
22
- }
23
- /**
24
- * TLS extension structure
25
- */
26
- export interface ITlsExtension {
27
- type: number;
28
- data: Buffer;
29
- }
30
- /**
31
- * Server Name Indication (SNI) hostname
32
- */
33
- export interface ISniHostname {
34
- type: number;
35
- hostname: string;
36
- }
37
- /**
38
- * Parsed ClientHello information
39
- */
40
- export interface IClientHelloInfo {
41
- version: TTlsVersionString | null;
42
- sessionId: Buffer | null;
43
- cipherSuites: number[];
44
- compressionMethods: number[];
45
- extensions: ITlsExtension[];
46
- sni?: string;
47
- alpn?: string[];
48
- supportedVersions?: TTlsVersionString[];
49
- }
50
- /**
51
- * TLS alert structure
52
- */
53
- export interface ITlsAlert {
54
- level: number;
55
- description: number;
56
- }
57
- /**
58
- * Connection information for TLS tracking
59
- */
60
- export interface ITlsConnectionInfo {
61
- sourceIp?: string;
62
- sourcePort?: number;
63
- destIp?: string;
64
- destPort?: number;
65
- }
@@ -1,5 +0,0 @@
1
- /**
2
- * TLS Protocol Type Definitions
3
- */
4
- export {};
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm90b2NvbHMvdGxzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHIn0=
@@ -1,95 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- import { type IHttpProxyOptions } from './models/types.js';
3
- import type { IRouteConfig } from '../smart-proxy/models/route-types.js';
4
- /**
5
- * @deprecated This class is deprecated. Use SmartCertManager instead.
6
- *
7
- * This is a stub implementation that maintains backward compatibility
8
- * while the functionality has been moved to SmartCertManager.
9
- */
10
- export declare class CertificateManager {
11
- private options;
12
- private defaultCertificates;
13
- private certificateCache;
14
- private certificateStoreDir;
15
- private logger;
16
- private httpsServer;
17
- private initialized;
18
- constructor(options: IHttpProxyOptions);
19
- /**
20
- * Synchronous initialization for backward compatibility
21
- * @deprecated This uses sync filesystem operations which block the event loop
22
- */
23
- private initializeSync;
24
- /**
25
- * Async initialization - preferred method
26
- */
27
- initialize(): Promise<void>;
28
- /**
29
- * Loads default certificates from the filesystem
30
- * @deprecated This uses sync filesystem operations which block the event loop
31
- */
32
- loadDefaultCertificates(): void;
33
- /**
34
- * Loads default certificates from the filesystem asynchronously
35
- */
36
- loadDefaultCertificatesAsync(): Promise<void>;
37
- /**
38
- * Generates self-signed certificates as fallback
39
- */
40
- private generateSelfSignedCertificate;
41
- /**
42
- * Gets the default certificates
43
- */
44
- getDefaultCertificates(): {
45
- key: string;
46
- cert: string;
47
- };
48
- /**
49
- * @deprecated Use SmartCertManager instead
50
- */
51
- setExternalPort80Handler(handler: any): void;
52
- /**
53
- * @deprecated Use SmartCertManager instead
54
- */
55
- updateRoutes(routes: IRouteConfig[]): Promise<void>;
56
- /**
57
- * Handles SNI callback to provide appropriate certificate
58
- */
59
- handleSNI(domain: string, cb: (err: Error | null, ctx: plugins.tls.SecureContext) => void): void;
60
- /**
61
- * Updates a certificate in the cache
62
- */
63
- updateCertificate(domain: string, cert: string, key: string): void;
64
- /**
65
- * Gets a cached certificate
66
- */
67
- private getCachedCertificate;
68
- /**
69
- * @deprecated Use SmartCertManager instead
70
- */
71
- initializePort80Handler(): Promise<any>;
72
- /**
73
- * @deprecated Use SmartCertManager instead
74
- */
75
- stopPort80Handler(): Promise<void>;
76
- /**
77
- * @deprecated Use SmartCertManager instead
78
- */
79
- registerDomainsWithPort80Handler(domains: string[]): void;
80
- /**
81
- * @deprecated Use SmartCertManager instead
82
- */
83
- registerRoutesWithPort80Handler(routes: IRouteConfig[]): void;
84
- /**
85
- * Sets the HTTPS server for certificate updates
86
- */
87
- setHttpsServer(server: plugins.https.Server): void;
88
- /**
89
- * Gets statistics for metrics
90
- */
91
- getStats(): {
92
- cachedCertificates: number;
93
- defaultCertEnabled: boolean;
94
- };
95
- }