@push.rocks/smartproxy 12.0.0 → 13.1.2
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.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/certificate/acme/acme-factory.d.ts +17 -0
- package/dist_ts/certificate/acme/acme-factory.js +40 -0
- package/dist_ts/certificate/acme/challenge-handler.d.ts +44 -0
- package/dist_ts/certificate/acme/challenge-handler.js +92 -0
- package/dist_ts/certificate/acme/index.d.ts +4 -0
- package/dist_ts/certificate/acme/index.js +5 -0
- package/dist_ts/certificate/events/certificate-events.d.ts +33 -0
- package/dist_ts/certificate/events/certificate-events.js +38 -0
- package/dist_ts/certificate/index.d.ts +24 -0
- package/dist_ts/certificate/index.js +39 -0
- package/dist_ts/certificate/models/certificate-types.d.ts +77 -0
- package/dist_ts/certificate/models/certificate-types.js +2 -0
- package/dist_ts/certificate/providers/cert-provisioner.d.ts +93 -0
- package/dist_ts/certificate/providers/cert-provisioner.js +262 -0
- package/dist_ts/certificate/providers/index.d.ts +4 -0
- package/dist_ts/certificate/providers/index.js +5 -0
- package/dist_ts/certificate/storage/file-storage.d.ts +66 -0
- package/dist_ts/certificate/storage/file-storage.js +194 -0
- package/dist_ts/certificate/storage/index.d.ts +4 -0
- package/dist_ts/certificate/storage/index.js +5 -0
- package/dist_ts/certificate/utils/certificate-helpers.d.ts +17 -0
- package/dist_ts/certificate/utils/certificate-helpers.js +45 -0
- package/dist_ts/common/eventUtils.d.ts +1 -1
- package/dist_ts/common/port80-adapter.d.ts +1 -1
- package/dist_ts/core/events/index.d.ts +4 -0
- package/dist_ts/core/events/index.js +5 -0
- package/dist_ts/core/index.d.ts +6 -0
- package/dist_ts/core/index.js +8 -0
- package/dist_ts/core/models/common-types.d.ts +82 -0
- package/dist_ts/core/models/common-types.js +15 -0
- package/dist_ts/core/models/index.d.ts +4 -0
- package/dist_ts/core/models/index.js +5 -0
- package/dist_ts/core/utils/event-utils.d.ts +15 -0
- package/dist_ts/core/utils/event-utils.js +19 -0
- package/dist_ts/core/utils/index.d.ts +6 -0
- package/dist_ts/core/utils/index.js +7 -0
- package/dist_ts/core/utils/ip-utils.d.ts +53 -0
- package/dist_ts/core/utils/ip-utils.js +153 -0
- package/dist_ts/core/utils/validation-utils.d.ts +61 -0
- package/dist_ts/core/utils/validation-utils.js +149 -0
- package/dist_ts/forwarding/config/domain-config.d.ts +12 -0
- package/dist_ts/forwarding/config/domain-config.js +12 -0
- package/dist_ts/forwarding/config/domain-manager.d.ts +86 -0
- package/dist_ts/forwarding/config/domain-manager.js +242 -0
- package/dist_ts/forwarding/config/forwarding-types.d.ts +104 -0
- package/dist_ts/forwarding/config/forwarding-types.js +50 -0
- package/dist_ts/forwarding/config/index.d.ts +6 -0
- package/dist_ts/forwarding/config/index.js +7 -0
- package/dist_ts/forwarding/factory/forwarding-factory.d.ts +25 -0
- package/dist_ts/forwarding/factory/forwarding-factory.js +138 -0
- package/dist_ts/forwarding/factory/index.d.ts +4 -0
- package/dist_ts/forwarding/factory/index.js +5 -0
- package/dist_ts/forwarding/handlers/base-handler.d.ts +55 -0
- package/dist_ts/forwarding/handlers/base-handler.js +94 -0
- package/dist_ts/forwarding/handlers/http-handler.d.ts +30 -0
- package/dist_ts/forwarding/handlers/http-handler.js +131 -0
- package/dist_ts/forwarding/handlers/https-passthrough-handler.d.ts +29 -0
- package/dist_ts/forwarding/handlers/https-passthrough-handler.js +162 -0
- package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.d.ts +36 -0
- package/dist_ts/forwarding/handlers/https-terminate-to-http-handler.js +229 -0
- package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.d.ts +35 -0
- package/dist_ts/forwarding/handlers/https-terminate-to-https-handler.js +254 -0
- package/dist_ts/forwarding/handlers/index.d.ts +8 -0
- package/dist_ts/forwarding/handlers/index.js +9 -0
- package/dist_ts/forwarding/index.d.ts +19 -0
- package/dist_ts/forwarding/index.js +25 -0
- package/dist_ts/http/index.d.ts +15 -0
- package/dist_ts/http/index.js +20 -0
- package/dist_ts/http/models/http-types.d.ts +81 -0
- package/dist_ts/http/models/http-types.js +62 -0
- package/dist_ts/http/port80/acme-interfaces.d.ts +78 -0
- package/dist_ts/http/port80/acme-interfaces.js +6 -0
- package/dist_ts/http/port80/challenge-responder.d.ts +53 -0
- package/dist_ts/http/port80/challenge-responder.js +203 -0
- package/dist_ts/http/port80/index.d.ts +6 -0
- package/dist_ts/http/port80/index.js +9 -0
- package/dist_ts/http/port80/port80-handler.d.ts +121 -0
- package/dist_ts/http/port80/port80-handler.js +554 -0
- package/dist_ts/http/redirects/index.d.ts +4 -0
- package/dist_ts/http/redirects/index.js +5 -0
- package/dist_ts/http/router/index.d.ts +4 -0
- package/dist_ts/http/router/index.js +5 -0
- package/dist_ts/http/router/proxy-router.d.ts +115 -0
- package/dist_ts/http/router/proxy-router.js +325 -0
- package/dist_ts/index.d.ts +15 -8
- package/dist_ts/index.js +26 -10
- package/dist_ts/networkproxy/classes.np.certificatemanager.js +2 -2
- package/dist_ts/networkproxy/index.d.ts +1 -6
- package/dist_ts/networkproxy/index.js +4 -8
- package/dist_ts/plugins.d.ts +2 -1
- package/dist_ts/plugins.js +3 -2
- package/dist_ts/port80handler/classes.port80handler.d.ts +8 -136
- package/dist_ts/port80handler/classes.port80handler.js +14 -567
- package/dist_ts/proxies/index.d.ts +6 -0
- package/dist_ts/proxies/index.js +8 -0
- package/dist_ts/proxies/network-proxy/certificate-manager.d.ts +77 -0
- package/dist_ts/proxies/network-proxy/certificate-manager.js +373 -0
- package/dist_ts/proxies/network-proxy/connection-pool.d.ts +47 -0
- package/dist_ts/proxies/network-proxy/connection-pool.js +210 -0
- package/dist_ts/proxies/network-proxy/index.d.ts +10 -0
- package/dist_ts/proxies/network-proxy/index.js +12 -0
- package/dist_ts/proxies/network-proxy/models/index.d.ts +4 -0
- package/dist_ts/proxies/network-proxy/models/index.js +5 -0
- package/dist_ts/proxies/network-proxy/models/types.d.ts +80 -0
- package/dist_ts/proxies/network-proxy/models/types.js +35 -0
- package/dist_ts/proxies/network-proxy/network-proxy.d.ts +118 -0
- package/dist_ts/proxies/network-proxy/network-proxy.js +387 -0
- package/dist_ts/proxies/network-proxy/request-handler.d.ts +57 -0
- package/dist_ts/proxies/network-proxy/request-handler.js +394 -0
- package/dist_ts/proxies/network-proxy/websocket-handler.d.ts +38 -0
- package/dist_ts/proxies/network-proxy/websocket-handler.js +188 -0
- package/dist_ts/proxies/nftables-proxy/index.d.ts +5 -0
- package/dist_ts/proxies/nftables-proxy/index.js +6 -0
- package/dist_ts/proxies/nftables-proxy/models/errors.d.ts +15 -0
- package/dist_ts/proxies/nftables-proxy/models/errors.js +28 -0
- package/dist_ts/proxies/nftables-proxy/models/index.d.ts +5 -0
- package/dist_ts/proxies/nftables-proxy/models/index.js +6 -0
- package/dist_ts/proxies/nftables-proxy/models/interfaces.d.ts +75 -0
- package/dist_ts/proxies/nftables-proxy/models/interfaces.js +5 -0
- package/dist_ts/proxies/nftables-proxy/nftables-proxy.d.ts +136 -0
- package/dist_ts/proxies/nftables-proxy/nftables-proxy.js +1516 -0
- package/dist_ts/proxies/smart-proxy/connection-handler.d.ts +39 -0
- package/dist_ts/proxies/smart-proxy/connection-handler.js +894 -0
- package/dist_ts/proxies/smart-proxy/connection-manager.d.ts +78 -0
- package/dist_ts/proxies/smart-proxy/connection-manager.js +378 -0
- package/dist_ts/proxies/smart-proxy/domain-config-manager.d.ts +95 -0
- package/dist_ts/proxies/smart-proxy/domain-config-manager.js +255 -0
- package/dist_ts/proxies/smart-proxy/index.d.ts +13 -0
- package/dist_ts/proxies/smart-proxy/index.js +17 -0
- package/dist_ts/proxies/smart-proxy/models/index.d.ts +4 -0
- package/dist_ts/proxies/smart-proxy/models/index.js +5 -0
- package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +107 -0
- package/dist_ts/proxies/smart-proxy/models/interfaces.js +2 -0
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +62 -0
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +316 -0
- package/dist_ts/proxies/smart-proxy/port-range-manager.d.ts +56 -0
- package/dist_ts/proxies/smart-proxy/port-range-manager.js +176 -0
- package/dist_ts/proxies/smart-proxy/security-manager.d.ts +64 -0
- package/dist_ts/proxies/smart-proxy/security-manager.js +149 -0
- package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +63 -0
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +523 -0
- package/dist_ts/proxies/smart-proxy/timeout-manager.d.ts +47 -0
- package/dist_ts/proxies/smart-proxy/timeout-manager.js +154 -0
- package/dist_ts/proxies/smart-proxy/tls-manager.d.ts +57 -0
- package/dist_ts/proxies/smart-proxy/tls-manager.js +132 -0
- package/dist_ts/smartproxy/classes.pp.networkproxybridge.d.ts +2 -2
- package/dist_ts/smartproxy/classes.pp.networkproxybridge.js +1 -1
- package/dist_ts/smartproxy/classes.pp.tlsmanager.js +2 -2
- package/dist_ts/smartproxy/classes.smartproxy.js +3 -3
- package/dist_ts/tls/alerts/index.d.ts +4 -0
- package/dist_ts/tls/alerts/index.js +5 -0
- package/dist_ts/tls/alerts/tls-alert.d.ts +150 -0
- package/dist_ts/tls/alerts/tls-alert.js +226 -0
- package/dist_ts/tls/index.d.ts +18 -0
- package/dist_ts/tls/index.js +27 -0
- package/dist_ts/tls/sni/client-hello-parser.d.ts +100 -0
- package/dist_ts/tls/sni/client-hello-parser.js +463 -0
- package/dist_ts/tls/sni/index.d.ts +4 -0
- package/dist_ts/tls/sni/index.js +5 -0
- package/dist_ts/tls/sni/sni-extraction.d.ts +58 -0
- package/dist_ts/tls/sni/sni-extraction.js +275 -0
- package/dist_ts/tls/sni/sni-handler.d.ts +154 -0
- package/dist_ts/tls/sni/sni-handler.js +191 -0
- package/dist_ts/tls/utils/index.d.ts +4 -0
- package/dist_ts/tls/utils/index.js +5 -0
- package/dist_ts/tls/utils/tls-utils.d.ts +158 -0
- package/dist_ts/tls/utils/tls-utils.js +187 -0
- package/package.json +1 -1
- package/readme.md +89 -21
- package/readme.plan.md +253 -469
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/certificate/acme/acme-factory.ts +48 -0
- package/ts/certificate/acme/challenge-handler.ts +110 -0
- package/ts/certificate/acme/index.ts +3 -0
- package/ts/certificate/events/certificate-events.ts +36 -0
- package/ts/certificate/index.ts +67 -0
- package/ts/certificate/models/certificate-types.ts +88 -0
- package/ts/certificate/providers/cert-provisioner.ts +326 -0
- package/ts/certificate/providers/index.ts +3 -0
- package/ts/certificate/storage/file-storage.ts +234 -0
- package/ts/certificate/storage/index.ts +3 -0
- package/ts/certificate/utils/certificate-helpers.ts +50 -0
- package/ts/common/eventUtils.ts +1 -1
- package/ts/common/port80-adapter.ts +1 -1
- package/ts/core/events/index.ts +3 -0
- package/ts/core/index.ts +8 -0
- package/ts/core/models/common-types.ts +91 -0
- package/ts/core/models/index.ts +5 -0
- package/ts/core/utils/event-utils.ts +34 -0
- package/ts/core/utils/index.ts +7 -0
- package/ts/core/utils/ip-utils.ts +175 -0
- package/ts/core/utils/validation-utils.ts +177 -0
- package/ts/{smartproxy/forwarding → forwarding/config}/domain-config.ts +1 -1
- package/ts/{smartproxy/forwarding → forwarding/config}/domain-manager.ts +8 -8
- package/ts/{smartproxy/types/forwarding.types.ts → forwarding/config/forwarding-types.ts} +6 -6
- package/ts/forwarding/config/index.ts +7 -0
- package/ts/{smartproxy/forwarding/forwarding.factory.ts → forwarding/factory/forwarding-factory.ts} +12 -11
- package/ts/forwarding/factory/index.ts +5 -0
- package/ts/{smartproxy/forwarding/forwarding.handler.ts → forwarding/handlers/base-handler.ts} +2 -2
- package/ts/{smartproxy/forwarding/http.handler.ts → forwarding/handlers/http-handler.ts} +13 -4
- package/ts/{smartproxy/forwarding/https-passthrough.handler.ts → forwarding/handlers/https-passthrough-handler.ts} +13 -4
- package/ts/{smartproxy/forwarding/https-terminate-to-http.handler.ts → forwarding/handlers/https-terminate-to-http-handler.ts} +3 -3
- package/ts/{smartproxy/forwarding/https-terminate-to-https.handler.ts → forwarding/handlers/https-terminate-to-https-handler.ts} +3 -3
- package/ts/forwarding/handlers/index.ts +9 -0
- package/ts/forwarding/index.ts +34 -0
- package/ts/http/index.ts +23 -0
- package/ts/http/models/http-types.ts +105 -0
- package/ts/http/port80/acme-interfaces.ts +85 -0
- package/ts/http/port80/challenge-responder.ts +246 -0
- package/ts/http/port80/index.ts +13 -0
- package/ts/{port80handler/classes.port80handler.ts → http/port80/port80-handler.ts} +164 -161
- package/ts/http/redirects/index.ts +3 -0
- package/ts/http/router/index.ts +5 -0
- package/ts/{classes.router.ts → http/router/proxy-router.ts} +27 -20
- package/ts/index.ts +32 -9
- package/ts/plugins.ts +2 -1
- package/ts/proxies/index.ts +8 -0
- package/ts/{networkproxy/classes.np.certificatemanager.ts → proxies/network-proxy/certificate-manager.ts} +17 -16
- package/ts/{networkproxy/classes.np.connectionpool.ts → proxies/network-proxy/connection-pool.ts} +3 -3
- package/ts/proxies/network-proxy/index.ts +13 -0
- package/ts/proxies/network-proxy/models/index.ts +4 -0
- package/ts/{networkproxy/classes.np.types.ts → proxies/network-proxy/models/types.ts} +7 -11
- package/ts/{networkproxy/classes.np.networkproxy.ts → proxies/network-proxy/network-proxy.ts} +31 -24
- package/ts/{networkproxy/classes.np.requesthandler.ts → proxies/network-proxy/request-handler.ts} +12 -7
- package/ts/{networkproxy/classes.np.websockethandler.ts → proxies/network-proxy/websocket-handler.ts} +6 -6
- package/ts/proxies/nftables-proxy/index.ts +5 -0
- package/ts/proxies/nftables-proxy/models/errors.ts +30 -0
- package/ts/proxies/nftables-proxy/models/index.ts +5 -0
- package/ts/proxies/nftables-proxy/models/interfaces.ts +94 -0
- package/ts/{nfttablesproxy/classes.nftablesproxy.ts → proxies/nftables-proxy/nftables-proxy.ts} +24 -126
- package/ts/{smartproxy/classes.pp.connectionhandler.ts → proxies/smart-proxy/connection-handler.ts} +12 -12
- package/ts/{smartproxy/classes.pp.connectionmanager.ts → proxies/smart-proxy/connection-manager.ts} +8 -8
- package/ts/{smartproxy/classes.pp.domainconfigmanager.ts → proxies/smart-proxy/domain-config-manager.ts} +15 -14
- package/ts/proxies/smart-proxy/index.ts +18 -0
- package/ts/proxies/smart-proxy/models/index.ts +4 -0
- package/ts/{smartproxy/classes.pp.interfaces.ts → proxies/smart-proxy/models/interfaces.ts} +12 -8
- package/ts/{smartproxy/classes.pp.networkproxybridge.ts → proxies/smart-proxy/network-proxy-bridge.ts} +14 -14
- package/ts/{smartproxy/classes.pp.portrangemanager.ts → proxies/smart-proxy/port-range-manager.ts} +1 -1
- package/ts/{smartproxy/classes.pp.securitymanager.ts → proxies/smart-proxy/security-manager.ts} +3 -3
- package/ts/{smartproxy/classes.smartproxy.ts → proxies/smart-proxy/smart-proxy.ts} +29 -24
- package/ts/{smartproxy/classes.pp.timeoutmanager.ts → proxies/smart-proxy/timeout-manager.ts} +3 -3
- package/ts/{smartproxy/classes.pp.tlsmanager.ts → proxies/smart-proxy/tls-manager.ts} +3 -3
- package/ts/tls/alerts/index.ts +3 -0
- package/ts/{smartproxy/classes.pp.tlsalert.ts → tls/alerts/tls-alert.ts} +44 -43
- package/ts/tls/index.ts +33 -0
- package/ts/tls/sni/client-hello-parser.ts +629 -0
- package/ts/tls/sni/index.ts +3 -0
- package/ts/tls/sni/sni-extraction.ts +353 -0
- package/ts/tls/sni/sni-handler.ts +264 -0
- package/ts/tls/utils/index.ts +3 -0
- package/ts/tls/utils/tls-utils.ts +201 -0
- package/ts/common/acmeFactory.ts +0 -23
- package/ts/helpers.certificates.ts +0 -30
- package/ts/networkproxy/index.ts +0 -7
- package/ts/smartproxy/classes.pp.certprovisioner.ts +0 -200
- package/ts/smartproxy/classes.pp.snihandler.ts +0 -1281
- package/ts/smartproxy/forwarding/index.ts +0 -52
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
/**
|
|
3
|
+
* Common event definitions
|
|
4
|
+
*/
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb3JlL2V2ZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUcifQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core functionality module
|
|
3
|
+
*/
|
|
4
|
+
// Export submodules
|
|
5
|
+
export * from './models/index.js';
|
|
6
|
+
export * from './utils/index.js';
|
|
7
|
+
export * from './events/index.js';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9jb3JlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsb0JBQW9CO0FBQ3BCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLG1CQUFtQixDQUFDIn0=
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for certificate management and domain options
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Domain forwarding configuration
|
|
6
|
+
*/
|
|
7
|
+
export interface IForwardConfig {
|
|
8
|
+
ip: string;
|
|
9
|
+
port: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Domain configuration options
|
|
13
|
+
*/
|
|
14
|
+
export interface IDomainOptions {
|
|
15
|
+
domainName: string;
|
|
16
|
+
sslRedirect: boolean;
|
|
17
|
+
acmeMaintenance: boolean;
|
|
18
|
+
forward?: IForwardConfig;
|
|
19
|
+
acmeForward?: IForwardConfig;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Certificate data that can be emitted via events or set from outside
|
|
23
|
+
*/
|
|
24
|
+
export interface ICertificateData {
|
|
25
|
+
domain: string;
|
|
26
|
+
certificate: string;
|
|
27
|
+
privateKey: string;
|
|
28
|
+
expiryDate: Date;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Events emitted by the Port80Handler
|
|
32
|
+
*/
|
|
33
|
+
export declare enum Port80HandlerEvents {
|
|
34
|
+
CERTIFICATE_ISSUED = "certificate-issued",
|
|
35
|
+
CERTIFICATE_RENEWED = "certificate-renewed",
|
|
36
|
+
CERTIFICATE_FAILED = "certificate-failed",
|
|
37
|
+
CERTIFICATE_EXPIRING = "certificate-expiring",
|
|
38
|
+
MANAGER_STARTED = "manager-started",
|
|
39
|
+
MANAGER_STOPPED = "manager-stopped",
|
|
40
|
+
REQUEST_FORWARDED = "request-forwarded"
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Certificate failure payload type
|
|
44
|
+
*/
|
|
45
|
+
export interface ICertificateFailure {
|
|
46
|
+
domain: string;
|
|
47
|
+
error: string;
|
|
48
|
+
isRenewal: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Certificate expiry payload type
|
|
52
|
+
*/
|
|
53
|
+
export interface ICertificateExpiring {
|
|
54
|
+
domain: string;
|
|
55
|
+
expiryDate: Date;
|
|
56
|
+
daysRemaining: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Forwarding configuration for specific domains in ACME setup
|
|
60
|
+
*/
|
|
61
|
+
export interface IDomainForwardConfig {
|
|
62
|
+
domain: string;
|
|
63
|
+
forwardConfig?: IForwardConfig;
|
|
64
|
+
acmeForwardConfig?: IForwardConfig;
|
|
65
|
+
sslRedirect?: boolean;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Unified ACME configuration options used across proxies and handlers
|
|
69
|
+
*/
|
|
70
|
+
export interface IAcmeOptions {
|
|
71
|
+
accountEmail?: string;
|
|
72
|
+
enabled?: boolean;
|
|
73
|
+
port?: number;
|
|
74
|
+
useProduction?: boolean;
|
|
75
|
+
httpsRedirectPort?: number;
|
|
76
|
+
renewThresholdDays?: number;
|
|
77
|
+
renewCheckIntervalHours?: number;
|
|
78
|
+
autoRenew?: boolean;
|
|
79
|
+
certificateStore?: string;
|
|
80
|
+
skipConfiguredCerts?: boolean;
|
|
81
|
+
domainForwards?: IDomainForwardConfig[];
|
|
82
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* Events emitted by the Port80Handler
|
|
4
|
+
*/
|
|
5
|
+
export var Port80HandlerEvents;
|
|
6
|
+
(function (Port80HandlerEvents) {
|
|
7
|
+
Port80HandlerEvents["CERTIFICATE_ISSUED"] = "certificate-issued";
|
|
8
|
+
Port80HandlerEvents["CERTIFICATE_RENEWED"] = "certificate-renewed";
|
|
9
|
+
Port80HandlerEvents["CERTIFICATE_FAILED"] = "certificate-failed";
|
|
10
|
+
Port80HandlerEvents["CERTIFICATE_EXPIRING"] = "certificate-expiring";
|
|
11
|
+
Port80HandlerEvents["MANAGER_STARTED"] = "manager-started";
|
|
12
|
+
Port80HandlerEvents["MANAGER_STOPPED"] = "manager-stopped";
|
|
13
|
+
Port80HandlerEvents["REQUEST_FORWARDED"] = "request-forwarded";
|
|
14
|
+
})(Port80HandlerEvents || (Port80HandlerEvents = {}));
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvY29yZS9tb2RlbHMvY29tbW9uLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFtQzVDOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksbUJBUVg7QUFSRCxXQUFZLG1CQUFtQjtJQUM3QixnRUFBeUMsQ0FBQTtJQUN6QyxrRUFBMkMsQ0FBQTtJQUMzQyxnRUFBeUMsQ0FBQTtJQUN6QyxvRUFBNkMsQ0FBQTtJQUM3QywwREFBbUMsQ0FBQTtJQUNuQywwREFBbUMsQ0FBQTtJQUNuQyw4REFBdUMsQ0FBQTtBQUN6QyxDQUFDLEVBUlcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQVE5QiJ9
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core data models and interfaces
|
|
3
|
+
*/
|
|
4
|
+
export * from './common-types.js';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb3JlL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsbUJBQW1CLENBQUMifQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Port80Handler } from '../../http/port80/port80-handler.js';
|
|
2
|
+
import type { ICertificateData, ICertificateFailure, ICertificateExpiring } from '../models/common-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Subscribers callback definitions for Port80Handler events
|
|
5
|
+
*/
|
|
6
|
+
export interface IPort80HandlerSubscribers {
|
|
7
|
+
onCertificateIssued?: (data: ICertificateData) => void;
|
|
8
|
+
onCertificateRenewed?: (data: ICertificateData) => void;
|
|
9
|
+
onCertificateFailed?: (data: ICertificateFailure) => void;
|
|
10
|
+
onCertificateExpiring?: (data: ICertificateExpiring) => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Subscribes to Port80Handler events based on provided callbacks
|
|
14
|
+
*/
|
|
15
|
+
export declare function subscribeToPort80Handler(handler: Port80Handler, subscribers: IPort80HandlerSubscribers): void;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Port80HandlerEvents } from '../models/common-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Subscribes to Port80Handler events based on provided callbacks
|
|
4
|
+
*/
|
|
5
|
+
export function subscribeToPort80Handler(handler, subscribers) {
|
|
6
|
+
if (subscribers.onCertificateIssued) {
|
|
7
|
+
handler.on(Port80HandlerEvents.CERTIFICATE_ISSUED, subscribers.onCertificateIssued);
|
|
8
|
+
}
|
|
9
|
+
if (subscribers.onCertificateRenewed) {
|
|
10
|
+
handler.on(Port80HandlerEvents.CERTIFICATE_RENEWED, subscribers.onCertificateRenewed);
|
|
11
|
+
}
|
|
12
|
+
if (subscribers.onCertificateFailed) {
|
|
13
|
+
handler.on(Port80HandlerEvents.CERTIFICATE_FAILED, subscribers.onCertificateFailed);
|
|
14
|
+
}
|
|
15
|
+
if (subscribers.onCertificateExpiring) {
|
|
16
|
+
handler.on(Port80HandlerEvents.CERTIFICATE_EXPIRING, subscribers.onCertificateExpiring);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb3JlL3V0aWxzL2V2ZW50LXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBYWhFOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUN0QyxPQUFzQixFQUN0QixXQUFzQztJQUV0QyxJQUFJLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDckMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBQ0QsSUFBSSxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNwQyxPQUFPLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFDRCxJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLEVBQUUsV0FBVyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDMUYsQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core utility functions
|
|
3
|
+
*/
|
|
4
|
+
export * from './event-utils.js';
|
|
5
|
+
export * from './validation-utils.js';
|
|
6
|
+
export * from './ip-utils.js';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb3JlL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsZUFBZSxDQUFDIn0=
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility class for IP address operations
|
|
3
|
+
*/
|
|
4
|
+
export declare class IpUtils {
|
|
5
|
+
/**
|
|
6
|
+
* Check if the IP matches any of the glob patterns
|
|
7
|
+
*
|
|
8
|
+
* This method checks IP addresses against glob patterns and handles IPv4/IPv6 normalization.
|
|
9
|
+
* It's used to implement IP filtering based on security configurations.
|
|
10
|
+
*
|
|
11
|
+
* @param ip - The IP address to check
|
|
12
|
+
* @param patterns - Array of glob patterns
|
|
13
|
+
* @returns true if IP matches any pattern, false otherwise
|
|
14
|
+
*/
|
|
15
|
+
static isGlobIPMatch(ip: string, patterns: string[]): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Normalize IP addresses for consistent comparison
|
|
18
|
+
*
|
|
19
|
+
* @param ip The IP address to normalize
|
|
20
|
+
* @returns Array of normalized IP forms
|
|
21
|
+
*/
|
|
22
|
+
static normalizeIP(ip: string): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Check if an IP is authorized using security rules
|
|
25
|
+
*
|
|
26
|
+
* @param ip - The IP address to check
|
|
27
|
+
* @param allowedIPs - Array of allowed IP patterns
|
|
28
|
+
* @param blockedIPs - Array of blocked IP patterns
|
|
29
|
+
* @returns true if IP is authorized, false if blocked
|
|
30
|
+
*/
|
|
31
|
+
static isIPAuthorized(ip: string, allowedIPs?: string[], blockedIPs?: string[]): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Check if an IP address is a private network address
|
|
34
|
+
*
|
|
35
|
+
* @param ip The IP address to check
|
|
36
|
+
* @returns true if the IP is a private network address, false otherwise
|
|
37
|
+
*/
|
|
38
|
+
static isPrivateIP(ip: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Check if an IP address is a public network address
|
|
41
|
+
*
|
|
42
|
+
* @param ip The IP address to check
|
|
43
|
+
* @returns true if the IP is a public network address, false otherwise
|
|
44
|
+
*/
|
|
45
|
+
static isPublicIP(ip: string): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Convert a subnet CIDR to an IP range for filtering
|
|
48
|
+
*
|
|
49
|
+
* @param cidr The CIDR notation (e.g., "192.168.1.0/24")
|
|
50
|
+
* @returns Array of glob patterns that match the CIDR range
|
|
51
|
+
*/
|
|
52
|
+
static cidrToGlobPatterns(cidr: string): string[];
|
|
53
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* Utility class for IP address operations
|
|
4
|
+
*/
|
|
5
|
+
export class IpUtils {
|
|
6
|
+
/**
|
|
7
|
+
* Check if the IP matches any of the glob patterns
|
|
8
|
+
*
|
|
9
|
+
* This method checks IP addresses against glob patterns and handles IPv4/IPv6 normalization.
|
|
10
|
+
* It's used to implement IP filtering based on security configurations.
|
|
11
|
+
*
|
|
12
|
+
* @param ip - The IP address to check
|
|
13
|
+
* @param patterns - Array of glob patterns
|
|
14
|
+
* @returns true if IP matches any pattern, false otherwise
|
|
15
|
+
*/
|
|
16
|
+
static isGlobIPMatch(ip, patterns) {
|
|
17
|
+
if (!ip || !patterns || patterns.length === 0)
|
|
18
|
+
return false;
|
|
19
|
+
// Normalize the IP being checked
|
|
20
|
+
const normalizedIPVariants = this.normalizeIP(ip);
|
|
21
|
+
if (normalizedIPVariants.length === 0)
|
|
22
|
+
return false;
|
|
23
|
+
// Normalize the pattern IPs for consistent comparison
|
|
24
|
+
const expandedPatterns = patterns.flatMap(pattern => this.normalizeIP(pattern));
|
|
25
|
+
// Check for any match between normalized IP variants and patterns
|
|
26
|
+
return normalizedIPVariants.some((ipVariant) => expandedPatterns.some((pattern) => plugins.minimatch(ipVariant, pattern)));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Normalize IP addresses for consistent comparison
|
|
30
|
+
*
|
|
31
|
+
* @param ip The IP address to normalize
|
|
32
|
+
* @returns Array of normalized IP forms
|
|
33
|
+
*/
|
|
34
|
+
static normalizeIP(ip) {
|
|
35
|
+
if (!ip)
|
|
36
|
+
return [];
|
|
37
|
+
// Handle IPv4-mapped IPv6 addresses (::ffff:127.0.0.1)
|
|
38
|
+
if (ip.startsWith('::ffff:')) {
|
|
39
|
+
const ipv4 = ip.slice(7);
|
|
40
|
+
return [ip, ipv4];
|
|
41
|
+
}
|
|
42
|
+
// Handle IPv4 addresses by also checking IPv4-mapped form
|
|
43
|
+
if (/^\d{1,3}(\.\d{1,3}){3}$/.test(ip)) {
|
|
44
|
+
return [ip, `::ffff:${ip}`];
|
|
45
|
+
}
|
|
46
|
+
return [ip];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if an IP is authorized using security rules
|
|
50
|
+
*
|
|
51
|
+
* @param ip - The IP address to check
|
|
52
|
+
* @param allowedIPs - Array of allowed IP patterns
|
|
53
|
+
* @param blockedIPs - Array of blocked IP patterns
|
|
54
|
+
* @returns true if IP is authorized, false if blocked
|
|
55
|
+
*/
|
|
56
|
+
static isIPAuthorized(ip, allowedIPs = [], blockedIPs = []) {
|
|
57
|
+
// Skip IP validation if no rules are defined
|
|
58
|
+
if (!ip || (allowedIPs.length === 0 && blockedIPs.length === 0)) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
// First check if IP is blocked - blocked IPs take precedence
|
|
62
|
+
if (blockedIPs.length > 0 && this.isGlobIPMatch(ip, blockedIPs)) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
// Then check if IP is allowed (if no allowed IPs are specified, all non-blocked IPs are allowed)
|
|
66
|
+
return allowedIPs.length === 0 || this.isGlobIPMatch(ip, allowedIPs);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if an IP address is a private network address
|
|
70
|
+
*
|
|
71
|
+
* @param ip The IP address to check
|
|
72
|
+
* @returns true if the IP is a private network address, false otherwise
|
|
73
|
+
*/
|
|
74
|
+
static isPrivateIP(ip) {
|
|
75
|
+
if (!ip)
|
|
76
|
+
return false;
|
|
77
|
+
// Handle IPv4-mapped IPv6 addresses
|
|
78
|
+
if (ip.startsWith('::ffff:')) {
|
|
79
|
+
ip = ip.slice(7);
|
|
80
|
+
}
|
|
81
|
+
// Check IPv4 private ranges
|
|
82
|
+
if (/^\d{1,3}(\.\d{1,3}){3}$/.test(ip)) {
|
|
83
|
+
const parts = ip.split('.').map(Number);
|
|
84
|
+
// Check common private ranges
|
|
85
|
+
// 10.0.0.0/8
|
|
86
|
+
if (parts[0] === 10)
|
|
87
|
+
return true;
|
|
88
|
+
// 172.16.0.0/12
|
|
89
|
+
if (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31)
|
|
90
|
+
return true;
|
|
91
|
+
// 192.168.0.0/16
|
|
92
|
+
if (parts[0] === 192 && parts[1] === 168)
|
|
93
|
+
return true;
|
|
94
|
+
// 127.0.0.0/8 (localhost)
|
|
95
|
+
if (parts[0] === 127)
|
|
96
|
+
return true;
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
// IPv6 local addresses
|
|
100
|
+
return ip === '::1' || ip.startsWith('fc00:') || ip.startsWith('fd00:') || ip.startsWith('fe80:');
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Check if an IP address is a public network address
|
|
104
|
+
*
|
|
105
|
+
* @param ip The IP address to check
|
|
106
|
+
* @returns true if the IP is a public network address, false otherwise
|
|
107
|
+
*/
|
|
108
|
+
static isPublicIP(ip) {
|
|
109
|
+
return !this.isPrivateIP(ip);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Convert a subnet CIDR to an IP range for filtering
|
|
113
|
+
*
|
|
114
|
+
* @param cidr The CIDR notation (e.g., "192.168.1.0/24")
|
|
115
|
+
* @returns Array of glob patterns that match the CIDR range
|
|
116
|
+
*/
|
|
117
|
+
static cidrToGlobPatterns(cidr) {
|
|
118
|
+
if (!cidr || !cidr.includes('/'))
|
|
119
|
+
return [];
|
|
120
|
+
const [ipPart, prefixPart] = cidr.split('/');
|
|
121
|
+
const prefix = parseInt(prefixPart, 10);
|
|
122
|
+
if (isNaN(prefix) || prefix < 0 || prefix > 32)
|
|
123
|
+
return [];
|
|
124
|
+
// For IPv4 only for now
|
|
125
|
+
if (!/^\d{1,3}(\.\d{1,3}){3}$/.test(ipPart))
|
|
126
|
+
return [];
|
|
127
|
+
const ipParts = ipPart.split('.').map(Number);
|
|
128
|
+
const fullMask = Math.pow(2, 32 - prefix) - 1;
|
|
129
|
+
// Convert IP to a numeric value
|
|
130
|
+
const ipNum = (ipParts[0] << 24) | (ipParts[1] << 16) | (ipParts[2] << 8) | ipParts[3];
|
|
131
|
+
// Calculate network address (IP & ~fullMask)
|
|
132
|
+
const networkNum = ipNum & ~fullMask;
|
|
133
|
+
// For large ranges, return wildcard patterns
|
|
134
|
+
if (prefix <= 8) {
|
|
135
|
+
return [`${(networkNum >>> 24) & 255}.*.*.*`];
|
|
136
|
+
}
|
|
137
|
+
else if (prefix <= 16) {
|
|
138
|
+
return [`${(networkNum >>> 24) & 255}.${(networkNum >>> 16) & 255}.*.*`];
|
|
139
|
+
}
|
|
140
|
+
else if (prefix <= 24) {
|
|
141
|
+
return [`${(networkNum >>> 24) & 255}.${(networkNum >>> 16) & 255}.${(networkNum >>> 8) & 255}.*`];
|
|
142
|
+
}
|
|
143
|
+
// For small ranges, create individual IP patterns
|
|
144
|
+
const patterns = [];
|
|
145
|
+
const maxAddresses = Math.min(256, Math.pow(2, 32 - prefix));
|
|
146
|
+
for (let i = 0; i < maxAddresses; i++) {
|
|
147
|
+
const currentIpNum = networkNum + i;
|
|
148
|
+
patterns.push(`${(currentIpNum >>> 24) & 255}.${(currentIpNum >>> 16) & 255}.${(currentIpNum >>> 8) & 255}.${currentIpNum & 255}`);
|
|
149
|
+
}
|
|
150
|
+
return patterns;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXAtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb3JlL3V0aWxzL2lwLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFFNUM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sT0FBTztJQUNsQjs7Ozs7Ozs7O09BU0c7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQVUsRUFBRSxRQUFrQjtRQUN4RCxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTVELGlDQUFpQztRQUNqQyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEQsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXBELHNEQUFzRDtRQUN0RCxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFaEYsa0VBQWtFO1FBQ2xFLE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDN0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUMxRSxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFVO1FBQ2xDLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFbkIsdURBQXVEO1FBQ3ZELElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFT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
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { IDomainOptions, IAcmeOptions } from '../models/common-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Collection of validation utilities for configuration and domain options
|
|
4
|
+
*/
|
|
5
|
+
export declare class ValidationUtils {
|
|
6
|
+
/**
|
|
7
|
+
* Validates domain configuration options
|
|
8
|
+
*
|
|
9
|
+
* @param domainOptions The domain options to validate
|
|
10
|
+
* @returns An object with validation result and error message if invalid
|
|
11
|
+
*/
|
|
12
|
+
static validateDomainOptions(domainOptions: IDomainOptions): {
|
|
13
|
+
isValid: boolean;
|
|
14
|
+
error?: string;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Validates ACME configuration options
|
|
18
|
+
*
|
|
19
|
+
* @param acmeOptions The ACME options to validate
|
|
20
|
+
* @returns An object with validation result and error message if invalid
|
|
21
|
+
*/
|
|
22
|
+
static validateAcmeOptions(acmeOptions: IAcmeOptions): {
|
|
23
|
+
isValid: boolean;
|
|
24
|
+
error?: string;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Validates a port number
|
|
28
|
+
*
|
|
29
|
+
* @param port The port to validate
|
|
30
|
+
* @returns true if the port is valid, false otherwise
|
|
31
|
+
*/
|
|
32
|
+
static isValidPort(port: number): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Validates a domain name
|
|
35
|
+
*
|
|
36
|
+
* @param domain The domain name to validate
|
|
37
|
+
* @returns true if the domain name is valid, false otherwise
|
|
38
|
+
*/
|
|
39
|
+
static isValidDomainName(domain: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Validates an email address
|
|
42
|
+
*
|
|
43
|
+
* @param email The email to validate
|
|
44
|
+
* @returns true if the email is valid, false otherwise
|
|
45
|
+
*/
|
|
46
|
+
static isValidEmail(email: string): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Validates a certificate format (PEM)
|
|
49
|
+
*
|
|
50
|
+
* @param cert The certificate content to validate
|
|
51
|
+
* @returns true if the certificate appears to be in PEM format, false otherwise
|
|
52
|
+
*/
|
|
53
|
+
static isValidCertificate(cert: string): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Validates a private key format (PEM)
|
|
56
|
+
*
|
|
57
|
+
* @param key The private key content to validate
|
|
58
|
+
* @returns true if the key appears to be in PEM format, false otherwise
|
|
59
|
+
*/
|
|
60
|
+
static isValidPrivateKey(key: string): boolean;
|
|
61
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
/**
|
|
3
|
+
* Collection of validation utilities for configuration and domain options
|
|
4
|
+
*/
|
|
5
|
+
export class ValidationUtils {
|
|
6
|
+
/**
|
|
7
|
+
* Validates domain configuration options
|
|
8
|
+
*
|
|
9
|
+
* @param domainOptions The domain options to validate
|
|
10
|
+
* @returns An object with validation result and error message if invalid
|
|
11
|
+
*/
|
|
12
|
+
static validateDomainOptions(domainOptions) {
|
|
13
|
+
if (!domainOptions) {
|
|
14
|
+
return { isValid: false, error: 'Domain options cannot be null or undefined' };
|
|
15
|
+
}
|
|
16
|
+
if (!domainOptions.domainName) {
|
|
17
|
+
return { isValid: false, error: 'Domain name is required' };
|
|
18
|
+
}
|
|
19
|
+
// Check domain pattern
|
|
20
|
+
if (!this.isValidDomainName(domainOptions.domainName)) {
|
|
21
|
+
return { isValid: false, error: `Invalid domain name: ${domainOptions.domainName}` };
|
|
22
|
+
}
|
|
23
|
+
// Validate forward config if provided
|
|
24
|
+
if (domainOptions.forward) {
|
|
25
|
+
if (!domainOptions.forward.ip) {
|
|
26
|
+
return { isValid: false, error: 'Forward IP is required when forward is specified' };
|
|
27
|
+
}
|
|
28
|
+
if (!domainOptions.forward.port) {
|
|
29
|
+
return { isValid: false, error: 'Forward port is required when forward is specified' };
|
|
30
|
+
}
|
|
31
|
+
if (!this.isValidPort(domainOptions.forward.port)) {
|
|
32
|
+
return { isValid: false, error: `Invalid forward port: ${domainOptions.forward.port}` };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Validate ACME forward config if provided
|
|
36
|
+
if (domainOptions.acmeForward) {
|
|
37
|
+
if (!domainOptions.acmeForward.ip) {
|
|
38
|
+
return { isValid: false, error: 'ACME forward IP is required when acmeForward is specified' };
|
|
39
|
+
}
|
|
40
|
+
if (!domainOptions.acmeForward.port) {
|
|
41
|
+
return { isValid: false, error: 'ACME forward port is required when acmeForward is specified' };
|
|
42
|
+
}
|
|
43
|
+
if (!this.isValidPort(domainOptions.acmeForward.port)) {
|
|
44
|
+
return { isValid: false, error: `Invalid ACME forward port: ${domainOptions.acmeForward.port}` };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return { isValid: true };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Validates ACME configuration options
|
|
51
|
+
*
|
|
52
|
+
* @param acmeOptions The ACME options to validate
|
|
53
|
+
* @returns An object with validation result and error message if invalid
|
|
54
|
+
*/
|
|
55
|
+
static validateAcmeOptions(acmeOptions) {
|
|
56
|
+
if (!acmeOptions) {
|
|
57
|
+
return { isValid: false, error: 'ACME options cannot be null or undefined' };
|
|
58
|
+
}
|
|
59
|
+
if (acmeOptions.enabled) {
|
|
60
|
+
if (!acmeOptions.accountEmail) {
|
|
61
|
+
return { isValid: false, error: 'Account email is required when ACME is enabled' };
|
|
62
|
+
}
|
|
63
|
+
if (!this.isValidEmail(acmeOptions.accountEmail)) {
|
|
64
|
+
return { isValid: false, error: `Invalid email: ${acmeOptions.accountEmail}` };
|
|
65
|
+
}
|
|
66
|
+
if (acmeOptions.port && !this.isValidPort(acmeOptions.port)) {
|
|
67
|
+
return { isValid: false, error: `Invalid ACME port: ${acmeOptions.port}` };
|
|
68
|
+
}
|
|
69
|
+
if (acmeOptions.httpsRedirectPort && !this.isValidPort(acmeOptions.httpsRedirectPort)) {
|
|
70
|
+
return { isValid: false, error: `Invalid HTTPS redirect port: ${acmeOptions.httpsRedirectPort}` };
|
|
71
|
+
}
|
|
72
|
+
if (acmeOptions.renewThresholdDays && acmeOptions.renewThresholdDays < 1) {
|
|
73
|
+
return { isValid: false, error: 'Renew threshold days must be greater than 0' };
|
|
74
|
+
}
|
|
75
|
+
if (acmeOptions.renewCheckIntervalHours && acmeOptions.renewCheckIntervalHours < 1) {
|
|
76
|
+
return { isValid: false, error: 'Renew check interval hours must be greater than 0' };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return { isValid: true };
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Validates a port number
|
|
83
|
+
*
|
|
84
|
+
* @param port The port to validate
|
|
85
|
+
* @returns true if the port is valid, false otherwise
|
|
86
|
+
*/
|
|
87
|
+
static isValidPort(port) {
|
|
88
|
+
return typeof port === 'number' && port > 0 && port <= 65535 && Number.isInteger(port);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Validates a domain name
|
|
92
|
+
*
|
|
93
|
+
* @param domain The domain name to validate
|
|
94
|
+
* @returns true if the domain name is valid, false otherwise
|
|
95
|
+
*/
|
|
96
|
+
static isValidDomainName(domain) {
|
|
97
|
+
if (!domain || typeof domain !== 'string') {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
// Wildcard domain check (*.example.com)
|
|
101
|
+
if (domain.startsWith('*.')) {
|
|
102
|
+
domain = domain.substring(2);
|
|
103
|
+
}
|
|
104
|
+
// Simple domain validation pattern
|
|
105
|
+
const domainPattern = /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/;
|
|
106
|
+
return domainPattern.test(domain);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Validates an email address
|
|
110
|
+
*
|
|
111
|
+
* @param email The email to validate
|
|
112
|
+
* @returns true if the email is valid, false otherwise
|
|
113
|
+
*/
|
|
114
|
+
static isValidEmail(email) {
|
|
115
|
+
if (!email || typeof email !== 'string') {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
// Basic email validation pattern
|
|
119
|
+
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
120
|
+
return emailPattern.test(email);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Validates a certificate format (PEM)
|
|
124
|
+
*
|
|
125
|
+
* @param cert The certificate content to validate
|
|
126
|
+
* @returns true if the certificate appears to be in PEM format, false otherwise
|
|
127
|
+
*/
|
|
128
|
+
static isValidCertificate(cert) {
|
|
129
|
+
if (!cert || typeof cert !== 'string') {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
return cert.includes('-----BEGIN CERTIFICATE-----') &&
|
|
133
|
+
cert.includes('-----END CERTIFICATE-----');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Validates a private key format (PEM)
|
|
137
|
+
*
|
|
138
|
+
* @param key The private key content to validate
|
|
139
|
+
* @returns true if the key appears to be in PEM format, false otherwise
|
|
140
|
+
*/
|
|
141
|
+
static isValidPrivateKey(key) {
|
|
142
|
+
if (!key || typeof key !== 'string') {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
return key.includes('-----BEGIN PRIVATE KEY-----') &&
|
|
146
|
+
key.includes('-----END PRIVATE KEY-----');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2NvcmUvdXRpbHMvdmFsaWRhdGlvbi11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBRzVDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDMUI7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMscUJBQXFCLENBQUMsYUFBNkI7UUFDL0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSw0Q0FBNEMsRUFBRSxDQUFDO1FBQ2pGLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzlCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxDQUFDO1FBQzlELENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsd0JBQXdCLGFBQWEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQ3ZGLENBQUM7UUFFRCxzQ0FBc0M7UUFDdEMsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxrREFBa0QsRUFBRSxDQUFDO1lBQ3ZGLENBQUM7WUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxL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
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IForwardConfig } from './forwarding-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Domain configuration with unified forwarding configuration
|
|
4
|
+
*/
|
|
5
|
+
export interface IDomainConfig {
|
|
6
|
+
domains: string[];
|
|
7
|
+
forwarding: IForwardConfig;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Helper function to create a domain configuration
|
|
11
|
+
*/
|
|
12
|
+
export declare function createDomainConfig(domains: string | string[], forwarding: IForwardConfig): IDomainConfig;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper function to create a domain configuration
|
|
3
|
+
*/
|
|
4
|
+
export function createDomainConfig(domains, forwarding) {
|
|
5
|
+
// Normalize domains to an array
|
|
6
|
+
const domainArray = Array.isArray(domains) ? domains : [domains];
|
|
7
|
+
return {
|
|
8
|
+
domains: domainArray,
|
|
9
|
+
forwarding
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ZvcndhcmRpbmcvY29uZmlnL2RvbWFpbi1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUE7O0dBRUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLE9BQTBCLEVBQzFCLFVBQTBCO0lBRTFCLGdDQUFnQztJQUNoQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFakUsT0FBTztRQUNMLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLFVBQVU7S0FDWCxDQUFDO0FBQ0osQ0FBQyJ9
|