@push.rocks/smartproxy 15.0.2 → 16.0.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/index.d.ts +10 -4
- package/dist_ts/certificate/index.js +5 -7
- package/dist_ts/certificate/models/certificate-types.d.ts +35 -15
- package/dist_ts/certificate/providers/cert-provisioner.d.ts +41 -15
- package/dist_ts/certificate/providers/cert-provisioner.js +201 -41
- package/dist_ts/forwarding/config/forwarding-types.d.ts +40 -76
- package/dist_ts/forwarding/config/forwarding-types.js +19 -18
- package/dist_ts/forwarding/config/index.d.ts +4 -2
- package/dist_ts/forwarding/config/index.js +5 -3
- package/dist_ts/forwarding/handlers/base-handler.js +3 -1
- package/dist_ts/forwarding/index.d.ts +5 -6
- package/dist_ts/forwarding/index.js +3 -3
- package/dist_ts/http/models/http-types.js +1 -1
- package/dist_ts/http/port80/acme-interfaces.d.ts +30 -0
- package/dist_ts/http/port80/acme-interfaces.js +46 -1
- package/dist_ts/http/port80/port80-handler.d.ts +17 -2
- package/dist_ts/http/port80/port80-handler.js +49 -11
- package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +2 -61
- package/dist_ts/proxies/smart-proxy/models/interfaces.js +5 -4
- package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +118 -4
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +70 -4
- package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +193 -43
- package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +2 -5
- package/dist_ts/proxies/smart-proxy/route-connection-handler.js +25 -146
- package/dist_ts/proxies/smart-proxy/route-helpers/index.d.ts +7 -0
- package/dist_ts/proxies/smart-proxy/route-helpers/index.js +9 -0
- package/dist_ts/proxies/smart-proxy/route-helpers.d.ts +54 -1
- package/dist_ts/proxies/smart-proxy/route-helpers.js +102 -1
- package/dist_ts/proxies/smart-proxy/route-manager.d.ts +3 -9
- package/dist_ts/proxies/smart-proxy/route-manager.js +3 -115
- package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +72 -10
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +135 -268
- package/dist_ts/proxies/smart-proxy/timeout-manager.js +3 -3
- package/dist_ts/proxies/smart-proxy/utils/index.d.ts +12 -0
- package/dist_ts/proxies/smart-proxy/utils/index.js +19 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers.d.ts +174 -0
- package/dist_ts/proxies/smart-proxy/utils/route-helpers.js +332 -0
- package/dist_ts/proxies/smart-proxy/utils/route-migration-utils.d.ts +51 -0
- package/dist_ts/proxies/smart-proxy/utils/route-migration-utils.js +124 -0
- package/dist_ts/proxies/smart-proxy/utils/route-patterns.d.ts +131 -0
- package/dist_ts/proxies/smart-proxy/utils/route-patterns.js +217 -0
- package/dist_ts/proxies/smart-proxy/utils/route-utils.d.ts +79 -0
- package/dist_ts/proxies/smart-proxy/utils/route-utils.js +266 -0
- package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +73 -0
- package/dist_ts/proxies/smart-proxy/utils/route-validators.js +242 -0
- package/package.json +1 -1
- package/readme.md +139 -111
- package/readme.plan.md +164 -312
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/certificate/index.ts +17 -9
- package/ts/certificate/models/certificate-types.ts +37 -16
- package/ts/certificate/providers/cert-provisioner.ts +247 -54
- package/ts/forwarding/config/forwarding-types.ts +79 -107
- package/ts/forwarding/config/index.ts +4 -2
- package/ts/forwarding/handlers/base-handler.ts +4 -2
- package/ts/forwarding/index.ts +3 -2
- package/ts/http/models/http-types.ts +0 -1
- package/ts/http/port80/acme-interfaces.ts +84 -0
- package/ts/http/port80/port80-handler.ts +61 -15
- package/ts/proxies/smart-proxy/models/interfaces.ts +7 -64
- package/ts/proxies/smart-proxy/models/route-types.ts +152 -22
- package/ts/proxies/smart-proxy/network-proxy-bridge.ts +226 -55
- package/ts/proxies/smart-proxy/route-connection-handler.ts +36 -205
- package/ts/proxies/smart-proxy/route-helpers/index.ts +9 -0
- package/ts/proxies/smart-proxy/route-helpers.ts +165 -11
- package/ts/proxies/smart-proxy/route-manager.ts +3 -130
- package/ts/proxies/smart-proxy/smart-proxy.ts +157 -329
- package/ts/proxies/smart-proxy/timeout-manager.ts +2 -2
- package/ts/proxies/smart-proxy/utils/index.ts +40 -0
- package/ts/proxies/smart-proxy/utils/route-helpers.ts +455 -0
- package/ts/proxies/smart-proxy/utils/route-migration-utils.ts +165 -0
- package/ts/proxies/smart-proxy/utils/route-patterns.ts +309 -0
- package/ts/proxies/smart-proxy/utils/route-utils.ts +330 -0
- package/ts/proxies/smart-proxy/utils/route-validators.ts +269 -0
- package/ts/forwarding/config/domain-config.ts +0 -28
- package/ts/forwarding/config/domain-manager.ts +0 -283
- package/ts/proxies/smart-proxy/connection-handler.ts +0 -1240
- package/ts/proxies/smart-proxy/port-range-manager.ts +0 -211
- /package/ts/proxies/smart-proxy/{domain-config-manager.ts → domain-config-manager.ts.bak} +0 -0
|
@@ -4,21 +4,60 @@ import { Port80Handler } from '../../http/port80/port80-handler.js';
|
|
|
4
4
|
/**
|
|
5
5
|
* CertProvisioner manages certificate provisioning and renewal workflows,
|
|
6
6
|
* unifying static certificates and HTTP-01 challenges via Port80Handler.
|
|
7
|
+
*
|
|
8
|
+
* This class directly works with route configurations instead of converting to domain configs.
|
|
7
9
|
*/
|
|
8
10
|
export class CertProvisioner extends plugins.EventEmitter {
|
|
9
11
|
/**
|
|
10
|
-
*
|
|
12
|
+
* Extract routes that need certificates
|
|
13
|
+
* @param routes Route configurations
|
|
14
|
+
*/
|
|
15
|
+
extractCertificateRoutesFromRoutes(routes) {
|
|
16
|
+
const certRoutes = [];
|
|
17
|
+
// Process all HTTPS routes that need certificates
|
|
18
|
+
for (const route of routes) {
|
|
19
|
+
// Only process routes with TLS termination that need certificates
|
|
20
|
+
if (route.action.type === 'forward' &&
|
|
21
|
+
route.action.tls &&
|
|
22
|
+
(route.action.tls.mode === 'terminate' || route.action.tls.mode === 'terminate-and-reencrypt') &&
|
|
23
|
+
route.match.domains) {
|
|
24
|
+
// Extract domains from the route
|
|
25
|
+
const domains = Array.isArray(route.match.domains)
|
|
26
|
+
? route.match.domains
|
|
27
|
+
: [route.match.domains];
|
|
28
|
+
// For each domain in the route, create a certRoute entry
|
|
29
|
+
for (const domain of domains) {
|
|
30
|
+
// Skip wildcard domains that can't use ACME unless we have a certProvider
|
|
31
|
+
if (domain.includes('*') && (!this.certProvisionFunction || this.certProvisionFunction.length === 0)) {
|
|
32
|
+
console.warn(`Skipping wildcard domain that requires a certProvisionFunction: ${domain}`);
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
certRoutes.push({
|
|
36
|
+
domain,
|
|
37
|
+
route,
|
|
38
|
+
tlsMode: route.action.tls.mode
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return certRoutes;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Constructor for CertProvisioner
|
|
47
|
+
*
|
|
48
|
+
* @param routeConfigs Array of route configurations
|
|
11
49
|
* @param port80Handler HTTP-01 challenge handler instance
|
|
12
50
|
* @param networkProxyBridge Bridge for applying external certificates
|
|
13
51
|
* @param certProvider Optional callback returning a static cert or 'http01'
|
|
14
52
|
* @param renewThresholdDays Days before expiry to trigger renewals
|
|
15
53
|
* @param renewCheckIntervalHours Interval in hours to check for renewals
|
|
16
54
|
* @param autoRenew Whether to automatically schedule renewals
|
|
17
|
-
* @param
|
|
55
|
+
* @param routeForwards Route-specific forwarding configs for ACME challenges
|
|
18
56
|
*/
|
|
19
|
-
constructor(
|
|
57
|
+
constructor(routeConfigs, port80Handler, networkProxyBridge, certProvider, renewThresholdDays = 30, renewCheckIntervalHours = 24, autoRenew = true, routeForwards = []) {
|
|
20
58
|
super();
|
|
21
|
-
this.
|
|
59
|
+
this.certRoutes = [];
|
|
60
|
+
this.routeConfigs = routeConfigs;
|
|
22
61
|
this.port80Handler = port80Handler;
|
|
23
62
|
this.networkProxyBridge = networkProxyBridge;
|
|
24
63
|
this.certProvisionFunction = certProvider;
|
|
@@ -26,7 +65,9 @@ export class CertProvisioner extends plugins.EventEmitter {
|
|
|
26
65
|
this.renewCheckIntervalHours = renewCheckIntervalHours;
|
|
27
66
|
this.autoRenew = autoRenew;
|
|
28
67
|
this.provisionMap = new Map();
|
|
29
|
-
this.
|
|
68
|
+
this.routeForwards = routeForwards;
|
|
69
|
+
// Extract certificate routes during instantiation
|
|
70
|
+
this.certRoutes = this.extractCertificateRoutesFromRoutes(routeConfigs);
|
|
30
71
|
}
|
|
31
72
|
/**
|
|
32
73
|
* Start initial provisioning and schedule renewals.
|
|
@@ -34,10 +75,10 @@ export class CertProvisioner extends plugins.EventEmitter {
|
|
|
34
75
|
async start() {
|
|
35
76
|
// Subscribe to Port80Handler certificate events
|
|
36
77
|
this.setupEventSubscriptions();
|
|
37
|
-
// Apply
|
|
78
|
+
// Apply route forwarding for ACME challenges
|
|
38
79
|
this.setupForwardingConfigs();
|
|
39
|
-
// Initial provisioning for all domains
|
|
40
|
-
await this.
|
|
80
|
+
// Initial provisioning for all domains in routes
|
|
81
|
+
await this.provisionAllCertificates();
|
|
41
82
|
// Schedule renewals if enabled
|
|
42
83
|
if (this.autoRenew) {
|
|
43
84
|
this.scheduleRenewals();
|
|
@@ -47,46 +88,74 @@ export class CertProvisioner extends plugins.EventEmitter {
|
|
|
47
88
|
* Set up event subscriptions for certificate events
|
|
48
89
|
*/
|
|
49
90
|
setupEventSubscriptions() {
|
|
50
|
-
// We need to reimplement subscribeToPort80Handler here
|
|
51
91
|
this.port80Handler.on(Port80HandlerEvents.CERTIFICATE_ISSUED, (data) => {
|
|
52
|
-
|
|
92
|
+
// Add route reference if we have it
|
|
93
|
+
const routeRef = this.findRouteForDomain(data.domain);
|
|
94
|
+
const enhancedData = {
|
|
95
|
+
...data,
|
|
96
|
+
source: 'http01',
|
|
97
|
+
isRenewal: false,
|
|
98
|
+
routeReference: routeRef ? {
|
|
99
|
+
routeId: routeRef.route.name,
|
|
100
|
+
routeName: routeRef.route.name
|
|
101
|
+
} : undefined
|
|
102
|
+
};
|
|
103
|
+
this.emit(CertProvisionerEvents.CERTIFICATE_ISSUED, enhancedData);
|
|
53
104
|
});
|
|
54
105
|
this.port80Handler.on(Port80HandlerEvents.CERTIFICATE_RENEWED, (data) => {
|
|
55
|
-
|
|
106
|
+
// Add route reference if we have it
|
|
107
|
+
const routeRef = this.findRouteForDomain(data.domain);
|
|
108
|
+
const enhancedData = {
|
|
109
|
+
...data,
|
|
110
|
+
source: 'http01',
|
|
111
|
+
isRenewal: true,
|
|
112
|
+
routeReference: routeRef ? {
|
|
113
|
+
routeId: routeRef.route.name,
|
|
114
|
+
routeName: routeRef.route.name
|
|
115
|
+
} : undefined
|
|
116
|
+
};
|
|
117
|
+
this.emit(CertProvisionerEvents.CERTIFICATE_RENEWED, enhancedData);
|
|
56
118
|
});
|
|
57
119
|
this.port80Handler.on(Port80HandlerEvents.CERTIFICATE_FAILED, (error) => {
|
|
58
120
|
this.emit(CertProvisionerEvents.CERTIFICATE_FAILED, error);
|
|
59
121
|
});
|
|
60
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Find a route for a given domain
|
|
125
|
+
*/
|
|
126
|
+
findRouteForDomain(domain) {
|
|
127
|
+
return this.certRoutes.find(certRoute => certRoute.domain === domain);
|
|
128
|
+
}
|
|
61
129
|
/**
|
|
62
130
|
* Set up forwarding configurations for the Port80Handler
|
|
63
131
|
*/
|
|
64
132
|
setupForwardingConfigs() {
|
|
65
|
-
for (const config of this.
|
|
133
|
+
for (const config of this.routeForwards) {
|
|
66
134
|
const domainOptions = {
|
|
67
135
|
domainName: config.domain,
|
|
68
136
|
sslRedirect: config.sslRedirect || false,
|
|
69
137
|
acmeMaintenance: false,
|
|
70
|
-
forward: config.
|
|
71
|
-
|
|
138
|
+
forward: config.target ? {
|
|
139
|
+
ip: config.target.host,
|
|
140
|
+
port: config.target.port
|
|
141
|
+
} : undefined
|
|
72
142
|
};
|
|
73
143
|
this.port80Handler.addDomain(domainOptions);
|
|
74
144
|
}
|
|
75
145
|
}
|
|
76
146
|
/**
|
|
77
|
-
* Provision certificates for all
|
|
147
|
+
* Provision certificates for all routes that need them
|
|
78
148
|
*/
|
|
79
|
-
async
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
await this.provisionDomain(domain);
|
|
149
|
+
async provisionAllCertificates() {
|
|
150
|
+
for (const certRoute of this.certRoutes) {
|
|
151
|
+
await this.provisionCertificateForRoute(certRoute);
|
|
83
152
|
}
|
|
84
153
|
}
|
|
85
154
|
/**
|
|
86
|
-
* Provision a certificate for a
|
|
87
|
-
* @param domain Domain to provision
|
|
155
|
+
* Provision a certificate for a route
|
|
88
156
|
*/
|
|
89
|
-
async
|
|
157
|
+
async provisionCertificateForRoute(certRoute) {
|
|
158
|
+
const { domain, route } = certRoute;
|
|
90
159
|
const isWildcard = domain.includes('*');
|
|
91
160
|
let provision = 'http01';
|
|
92
161
|
// Try to get a certificate from the provision function
|
|
@@ -95,7 +164,7 @@ export class CertProvisioner extends plugins.EventEmitter {
|
|
|
95
164
|
provision = await this.certProvisionFunction(domain);
|
|
96
165
|
}
|
|
97
166
|
catch (err) {
|
|
98
|
-
console.error(`certProvider error for ${domain}:`, err);
|
|
167
|
+
console.error(`certProvider error for ${domain} on route ${route.name || 'unnamed'}:`, err);
|
|
99
168
|
}
|
|
100
169
|
}
|
|
101
170
|
else if (isWildcard) {
|
|
@@ -103,27 +172,34 @@ export class CertProvisioner extends plugins.EventEmitter {
|
|
|
103
172
|
console.warn(`Skipping wildcard domain without certProvisionFunction: ${domain}`);
|
|
104
173
|
return;
|
|
105
174
|
}
|
|
175
|
+
// Store the route reference with the provision type
|
|
176
|
+
this.provisionMap.set(domain, {
|
|
177
|
+
type: provision === 'http01' || provision === 'dns01' ? provision : 'static',
|
|
178
|
+
routeRef: certRoute
|
|
179
|
+
});
|
|
106
180
|
// Handle different provisioning methods
|
|
107
181
|
if (provision === 'http01') {
|
|
108
182
|
if (isWildcard) {
|
|
109
183
|
console.warn(`Skipping HTTP-01 for wildcard domain: ${domain}`);
|
|
110
184
|
return;
|
|
111
185
|
}
|
|
112
|
-
this.provisionMap.set(domain, 'http01');
|
|
113
186
|
this.port80Handler.addDomain({
|
|
114
187
|
domainName: domain,
|
|
115
188
|
sslRedirect: true,
|
|
116
|
-
acmeMaintenance: true
|
|
189
|
+
acmeMaintenance: true,
|
|
190
|
+
routeReference: {
|
|
191
|
+
routeId: route.name || domain,
|
|
192
|
+
routeName: route.name
|
|
193
|
+
}
|
|
117
194
|
});
|
|
118
195
|
}
|
|
119
196
|
else if (provision === 'dns01') {
|
|
120
197
|
// DNS-01 challenges would be handled by the certProvisionFunction
|
|
121
|
-
this.provisionMap.set(domain, 'dns01');
|
|
122
198
|
// DNS-01 handling would go here if implemented
|
|
199
|
+
console.log(`DNS-01 challenge type set for ${domain}`);
|
|
123
200
|
}
|
|
124
201
|
else {
|
|
125
202
|
// Static certificate (e.g., DNS-01 provisioned or user-provided)
|
|
126
|
-
this.provisionMap.set(domain, 'static');
|
|
127
203
|
const certObj = provision;
|
|
128
204
|
const certData = {
|
|
129
205
|
domain: certObj.domainName,
|
|
@@ -131,7 +207,11 @@ export class CertProvisioner extends plugins.EventEmitter {
|
|
|
131
207
|
privateKey: certObj.privateKey,
|
|
132
208
|
expiryDate: new Date(certObj.validUntil),
|
|
133
209
|
source: 'static',
|
|
134
|
-
isRenewal: false
|
|
210
|
+
isRenewal: false,
|
|
211
|
+
routeReference: {
|
|
212
|
+
routeId: route.name || domain,
|
|
213
|
+
routeName: route.name
|
|
214
|
+
}
|
|
135
215
|
};
|
|
136
216
|
this.networkProxyBridge.applyExternalCertificate(certData);
|
|
137
217
|
this.emit(CertProvisionerEvents.CERTIFICATE_ISSUED, certData);
|
|
@@ -155,12 +235,12 @@ export class CertProvisioner extends plugins.EventEmitter {
|
|
|
155
235
|
* Perform renewals for all domains that need it
|
|
156
236
|
*/
|
|
157
237
|
async performRenewals() {
|
|
158
|
-
for (const [domain,
|
|
238
|
+
for (const [domain, info] of this.provisionMap.entries()) {
|
|
159
239
|
// Skip wildcard domains for HTTP-01 challenges
|
|
160
|
-
if (domain.includes('*') && type === 'http01')
|
|
240
|
+
if (domain.includes('*') && info.type === 'http01')
|
|
161
241
|
continue;
|
|
162
242
|
try {
|
|
163
|
-
await this.
|
|
243
|
+
await this.renewCertificateForDomain(domain, info.type, info.routeRef);
|
|
164
244
|
}
|
|
165
245
|
catch (err) {
|
|
166
246
|
console.error(`Renewal error for ${domain}:`, err);
|
|
@@ -171,8 +251,9 @@ export class CertProvisioner extends plugins.EventEmitter {
|
|
|
171
251
|
* Renew a certificate for a specific domain
|
|
172
252
|
* @param domain Domain to renew
|
|
173
253
|
* @param provisionType Type of provisioning for this domain
|
|
254
|
+
* @param certRoute The route reference for this domain
|
|
174
255
|
*/
|
|
175
|
-
async
|
|
256
|
+
async renewCertificateForDomain(domain, provisionType, certRoute) {
|
|
176
257
|
if (provisionType === 'http01') {
|
|
177
258
|
await this.port80Handler.renewCertificate(domain);
|
|
178
259
|
}
|
|
@@ -180,13 +261,18 @@ export class CertProvisioner extends plugins.EventEmitter {
|
|
|
180
261
|
const provision = await this.certProvisionFunction(domain);
|
|
181
262
|
if (provision !== 'http01' && provision !== 'dns01') {
|
|
182
263
|
const certObj = provision;
|
|
264
|
+
const routeRef = certRoute?.route;
|
|
183
265
|
const certData = {
|
|
184
266
|
domain: certObj.domainName,
|
|
185
267
|
certificate: certObj.publicKey,
|
|
186
268
|
privateKey: certObj.privateKey,
|
|
187
269
|
expiryDate: new Date(certObj.validUntil),
|
|
188
270
|
source: 'static',
|
|
189
|
-
isRenewal: true
|
|
271
|
+
isRenewal: true,
|
|
272
|
+
routeReference: routeRef ? {
|
|
273
|
+
routeId: routeRef.name || domain,
|
|
274
|
+
routeName: routeRef.name
|
|
275
|
+
} : undefined
|
|
190
276
|
};
|
|
191
277
|
this.networkProxyBridge.applyExternalCertificate(certData);
|
|
192
278
|
this.emit(CertProvisionerEvents.CERTIFICATE_RENEWED, certData);
|
|
@@ -203,10 +289,14 @@ export class CertProvisioner extends plugins.EventEmitter {
|
|
|
203
289
|
}
|
|
204
290
|
/**
|
|
205
291
|
* Request a certificate on-demand for the given domain.
|
|
292
|
+
* This will look for a matching route configuration and provision accordingly.
|
|
293
|
+
*
|
|
206
294
|
* @param domain Domain name to provision
|
|
207
295
|
*/
|
|
208
296
|
async requestCertificate(domain) {
|
|
209
297
|
const isWildcard = domain.includes('*');
|
|
298
|
+
// Find matching route
|
|
299
|
+
const certRoute = this.findRouteForDomain(domain);
|
|
210
300
|
// Determine provisioning method
|
|
211
301
|
let provision = 'http01';
|
|
212
302
|
if (this.certProvisionFunction) {
|
|
@@ -224,7 +314,6 @@ export class CertProvisioner extends plugins.EventEmitter {
|
|
|
224
314
|
}
|
|
225
315
|
else if (provision === 'dns01') {
|
|
226
316
|
// DNS-01 challenges would be handled by external mechanisms
|
|
227
|
-
// This is a placeholder for future implementation
|
|
228
317
|
console.log(`DNS-01 challenge requested for ${domain}`);
|
|
229
318
|
}
|
|
230
319
|
else {
|
|
@@ -236,7 +325,11 @@ export class CertProvisioner extends plugins.EventEmitter {
|
|
|
236
325
|
privateKey: certObj.privateKey,
|
|
237
326
|
expiryDate: new Date(certObj.validUntil),
|
|
238
327
|
source: 'static',
|
|
239
|
-
isRenewal: false
|
|
328
|
+
isRenewal: false,
|
|
329
|
+
routeReference: certRoute ? {
|
|
330
|
+
routeId: certRoute.route.name || domain,
|
|
331
|
+
routeName: certRoute.route.name
|
|
332
|
+
} : undefined
|
|
240
333
|
};
|
|
241
334
|
this.networkProxyBridge.applyExternalCertificate(certData);
|
|
242
335
|
this.emit(CertProvisionerEvents.CERTIFICATE_ISSUED, certData);
|
|
@@ -244,19 +337,86 @@ export class CertProvisioner extends plugins.EventEmitter {
|
|
|
244
337
|
}
|
|
245
338
|
/**
|
|
246
339
|
* Add a new domain for certificate provisioning
|
|
340
|
+
*
|
|
247
341
|
* @param domain Domain to add
|
|
248
342
|
* @param options Domain configuration options
|
|
249
343
|
*/
|
|
250
344
|
async addDomain(domain, options) {
|
|
251
345
|
const domainOptions = {
|
|
252
346
|
domainName: domain,
|
|
253
|
-
sslRedirect: options?.sslRedirect
|
|
254
|
-
acmeMaintenance: options?.acmeMaintenance
|
|
347
|
+
sslRedirect: options?.sslRedirect ?? true,
|
|
348
|
+
acmeMaintenance: options?.acmeMaintenance ?? true,
|
|
349
|
+
routeReference: {
|
|
350
|
+
routeId: options?.routeId,
|
|
351
|
+
routeName: options?.routeName
|
|
352
|
+
}
|
|
255
353
|
};
|
|
256
354
|
this.port80Handler.addDomain(domainOptions);
|
|
257
|
-
|
|
355
|
+
// Find matching route or create a generic one
|
|
356
|
+
const existingRoute = this.findRouteForDomain(domain);
|
|
357
|
+
if (existingRoute) {
|
|
358
|
+
await this.provisionCertificateForRoute(existingRoute);
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
// We don't have a route, just provision the domain
|
|
362
|
+
const isWildcard = domain.includes('*');
|
|
363
|
+
let provision = 'http01';
|
|
364
|
+
if (this.certProvisionFunction) {
|
|
365
|
+
provision = await this.certProvisionFunction(domain);
|
|
366
|
+
}
|
|
367
|
+
else if (isWildcard) {
|
|
368
|
+
throw new Error(`Cannot request certificate for wildcard domain without certProvisionFunction: ${domain}`);
|
|
369
|
+
}
|
|
370
|
+
this.provisionMap.set(domain, {
|
|
371
|
+
type: provision === 'http01' || provision === 'dns01' ? provision : 'static'
|
|
372
|
+
});
|
|
373
|
+
if (provision !== 'http01' && provision !== 'dns01') {
|
|
374
|
+
const certObj = provision;
|
|
375
|
+
const certData = {
|
|
376
|
+
domain: certObj.domainName,
|
|
377
|
+
certificate: certObj.publicKey,
|
|
378
|
+
privateKey: certObj.privateKey,
|
|
379
|
+
expiryDate: new Date(certObj.validUntil),
|
|
380
|
+
source: 'static',
|
|
381
|
+
isRenewal: false,
|
|
382
|
+
routeReference: {
|
|
383
|
+
routeId: options?.routeId,
|
|
384
|
+
routeName: options?.routeName
|
|
385
|
+
}
|
|
386
|
+
};
|
|
387
|
+
this.networkProxyBridge.applyExternalCertificate(certData);
|
|
388
|
+
this.emit(CertProvisionerEvents.CERTIFICATE_ISSUED, certData);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Update routes with new configurations
|
|
394
|
+
* This replaces all existing routes with new ones and re-provisions certificates as needed
|
|
395
|
+
*
|
|
396
|
+
* @param newRoutes New route configurations to use
|
|
397
|
+
*/
|
|
398
|
+
async updateRoutes(newRoutes) {
|
|
399
|
+
// Store the new route configs
|
|
400
|
+
this.routeConfigs = newRoutes;
|
|
401
|
+
// Extract new certificate routes
|
|
402
|
+
const newCertRoutes = this.extractCertificateRoutesFromRoutes(newRoutes);
|
|
403
|
+
// Find domains that no longer need certificates
|
|
404
|
+
const oldDomains = new Set(this.certRoutes.map(r => r.domain));
|
|
405
|
+
const newDomains = new Set(newCertRoutes.map(r => r.domain));
|
|
406
|
+
// Domains to remove
|
|
407
|
+
const domainsToRemove = [...oldDomains].filter(d => !newDomains.has(d));
|
|
408
|
+
// Remove obsolete domains from provision map
|
|
409
|
+
for (const domain of domainsToRemove) {
|
|
410
|
+
this.provisionMap.delete(domain);
|
|
411
|
+
}
|
|
412
|
+
// Update the cert routes
|
|
413
|
+
this.certRoutes = newCertRoutes;
|
|
414
|
+
// Provision certificates for new routes
|
|
415
|
+
for (const certRoute of newCertRoutes) {
|
|
416
|
+
if (!oldDomains.has(certRoute.domain)) {
|
|
417
|
+
await this.provisionCertificateForRoute(certRoute);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
258
420
|
}
|
|
259
421
|
}
|
|
260
|
-
// For backward compatibility
|
|
261
|
-
export { CertProvisioner as CertificateProvisioner };
|
|
262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC1wcm92aXNpb25lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2NlcnRpZmljYXRlL3Byb3ZpZGVycy9jZXJ0LXByb3Zpc2lvbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFHNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBaUJwRTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxPQUFPLENBQUMsWUFBWTtJQWF2RDs7Ozs7Ozs7O09BU0c7SUFDSCxZQUNFLGFBQThCLEVBQzlCLGFBQTRCLEVBQzVCLGtCQUF1QyxFQUN2QyxZQUFnRSxFQUNoRSxxQkFBNkIsRUFBRSxFQUMvQiwwQkFBa0MsRUFBRSxFQUNwQyxZQUFxQixJQUFJLEVBQ3pCLGlCQUF5QyxFQUFFO1FBRTNDLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxZQUFZLENBQUM7UUFDMUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyx1QkFBdUIsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLEtBQUs7UUFDaEIs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
|
|
422
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydC1wcm92aXNpb25lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2NlcnRpZmljYXRlL3Byb3ZpZGVycy9jZXJ0LXByb3Zpc2lvbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFHNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBcUJwRTs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLE9BQU8sQ0FBQyxZQUFZO0lBY3ZEOzs7T0FHRztJQUNLLGtDQUFrQyxDQUFDLE1BQXNCO1FBQy9ELE1BQU0sVUFBVSxHQUFpQixFQUFFLENBQUM7UUFFcEMsa0RBQWtEO1FBQ2xELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDM0Isa0VBQWtFO1lBQ2xFLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUztnQkFDL0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHO2dCQUNoQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLHlCQUF5QixDQUFDO2dCQUM5RixLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUV4QixpQ0FBaUM7Z0JBQ2pDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7b0JBQ2hELENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU87b0JBQ3JCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JB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
|
|
@@ -1,79 +1,11 @@
|
|
|
1
1
|
import type * as plugins from '../../plugins.js';
|
|
2
2
|
/**
|
|
3
|
+
* @deprecated The legacy forwarding types are being replaced by the route-based configuration system.
|
|
4
|
+
* See /ts/proxies/smart-proxy/models/route-types.ts for the new route-based configuration.
|
|
5
|
+
*
|
|
3
6
|
* The primary forwarding types supported by SmartProxy
|
|
4
7
|
*/
|
|
5
8
|
export type TForwardingType = 'http-only' | 'https-passthrough' | 'https-terminate-to-http' | 'https-terminate-to-https';
|
|
6
|
-
/**
|
|
7
|
-
* Target configuration for forwarding
|
|
8
|
-
*/
|
|
9
|
-
export interface ITargetConfig {
|
|
10
|
-
host: string | string[];
|
|
11
|
-
port: number;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* HTTP-specific options for forwarding
|
|
15
|
-
*/
|
|
16
|
-
export interface IHttpOptions {
|
|
17
|
-
enabled?: boolean;
|
|
18
|
-
redirectToHttps?: boolean;
|
|
19
|
-
headers?: Record<string, string>;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* HTTPS-specific options for forwarding
|
|
23
|
-
*/
|
|
24
|
-
export interface IHttpsOptions {
|
|
25
|
-
customCert?: {
|
|
26
|
-
key: string;
|
|
27
|
-
cert: string;
|
|
28
|
-
};
|
|
29
|
-
forwardSni?: boolean;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* ACME certificate handling options
|
|
33
|
-
*/
|
|
34
|
-
export interface IAcmeForwardingOptions {
|
|
35
|
-
enabled?: boolean;
|
|
36
|
-
maintenance?: boolean;
|
|
37
|
-
production?: boolean;
|
|
38
|
-
forwardChallenges?: {
|
|
39
|
-
host: string;
|
|
40
|
-
port: number;
|
|
41
|
-
useTls?: boolean;
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Security options for forwarding
|
|
46
|
-
*/
|
|
47
|
-
export interface ISecurityOptions {
|
|
48
|
-
allowedIps?: string[];
|
|
49
|
-
blockedIps?: string[];
|
|
50
|
-
maxConnections?: number;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Advanced options for forwarding
|
|
54
|
-
*/
|
|
55
|
-
export interface IAdvancedOptions {
|
|
56
|
-
portRanges?: Array<{
|
|
57
|
-
from: number;
|
|
58
|
-
to: number;
|
|
59
|
-
}>;
|
|
60
|
-
networkProxyPort?: number;
|
|
61
|
-
keepAlive?: boolean;
|
|
62
|
-
timeout?: number;
|
|
63
|
-
headers?: Record<string, string>;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Unified forwarding configuration interface
|
|
67
|
-
*/
|
|
68
|
-
export interface IForwardConfig {
|
|
69
|
-
type: TForwardingType;
|
|
70
|
-
target: ITargetConfig;
|
|
71
|
-
http?: IHttpOptions;
|
|
72
|
-
https?: IHttpsOptions;
|
|
73
|
-
acme?: IAcmeForwardingOptions;
|
|
74
|
-
security?: ISecurityOptions;
|
|
75
|
-
advanced?: IAdvancedOptions;
|
|
76
|
-
}
|
|
77
9
|
/**
|
|
78
10
|
* Event types emitted by forwarding handlers
|
|
79
11
|
*/
|
|
@@ -95,10 +27,42 @@ export interface IForwardingHandler extends plugins.EventEmitter {
|
|
|
95
27
|
handleConnection(socket: plugins.net.Socket): void;
|
|
96
28
|
handleHttpRequest(req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): void;
|
|
97
29
|
}
|
|
30
|
+
import { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../../proxies/smart-proxy/utils/route-helpers.js';
|
|
31
|
+
export { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute };
|
|
32
|
+
export interface IForwardConfig {
|
|
33
|
+
type: TForwardingType;
|
|
34
|
+
target: {
|
|
35
|
+
host: string | string[];
|
|
36
|
+
port: number;
|
|
37
|
+
};
|
|
38
|
+
http?: any;
|
|
39
|
+
https?: any;
|
|
40
|
+
acme?: any;
|
|
41
|
+
security?: any;
|
|
42
|
+
advanced?: any;
|
|
43
|
+
[key: string]: any;
|
|
44
|
+
}
|
|
45
|
+
export interface IDeprecatedForwardConfig {
|
|
46
|
+
type: TForwardingType;
|
|
47
|
+
target: {
|
|
48
|
+
host: string | string[];
|
|
49
|
+
port: number;
|
|
50
|
+
};
|
|
51
|
+
[key: string]: any;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @deprecated Use createHttpRoute instead
|
|
55
|
+
*/
|
|
56
|
+
export declare const httpOnly: (partialConfig: Partial<IDeprecatedForwardConfig> & Pick<IDeprecatedForwardConfig, "target">) => IDeprecatedForwardConfig;
|
|
57
|
+
/**
|
|
58
|
+
* @deprecated Use createHttpsTerminateRoute instead
|
|
59
|
+
*/
|
|
60
|
+
export declare const tlsTerminateToHttp: (partialConfig: Partial<IDeprecatedForwardConfig> & Pick<IDeprecatedForwardConfig, "target">) => IDeprecatedForwardConfig;
|
|
61
|
+
/**
|
|
62
|
+
* @deprecated Use createHttpsTerminateRoute with reencrypt option instead
|
|
63
|
+
*/
|
|
64
|
+
export declare const tlsTerminateToHttps: (partialConfig: Partial<IDeprecatedForwardConfig> & Pick<IDeprecatedForwardConfig, "target">) => IDeprecatedForwardConfig;
|
|
98
65
|
/**
|
|
99
|
-
*
|
|
66
|
+
* @deprecated Use createHttpsPassthroughRoute instead
|
|
100
67
|
*/
|
|
101
|
-
export declare const
|
|
102
|
-
export declare const tlsTerminateToHttp: (partialConfig: Partial<IForwardConfig> & Pick<IForwardConfig, "target">) => IForwardConfig;
|
|
103
|
-
export declare const tlsTerminateToHttps: (partialConfig: Partial<IForwardConfig> & Pick<IForwardConfig, "target">) => IForwardConfig;
|
|
104
|
-
export declare const httpsPassthrough: (partialConfig: Partial<IForwardConfig> & Pick<IForwardConfig, "target">) => IForwardConfig;
|
|
68
|
+
export declare const httpsPassthrough: (partialConfig: Partial<IDeprecatedForwardConfig> & Pick<IDeprecatedForwardConfig, "target">) => IDeprecatedForwardConfig;
|
|
@@ -12,39 +12,40 @@ export var ForwardingHandlerEvents;
|
|
|
12
12
|
ForwardingHandlerEvents["CERTIFICATE_NEEDED"] = "certificate-needed";
|
|
13
13
|
ForwardingHandlerEvents["CERTIFICATE_LOADED"] = "certificate-loaded";
|
|
14
14
|
})(ForwardingHandlerEvents || (ForwardingHandlerEvents = {}));
|
|
15
|
+
// Import and re-export the route-based helpers for seamless transition
|
|
16
|
+
import { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute } from '../../proxies/smart-proxy/utils/route-helpers.js';
|
|
17
|
+
export { createHttpRoute, createHttpsTerminateRoute, createHttpsPassthroughRoute, createHttpToHttpsRedirect, createCompleteHttpsServer, createLoadBalancerRoute };
|
|
18
|
+
import { domainConfigToRouteConfig } from '../../proxies/smart-proxy/utils/route-migration-utils.js';
|
|
15
19
|
/**
|
|
16
|
-
*
|
|
20
|
+
* @deprecated Use createHttpRoute instead
|
|
17
21
|
*/
|
|
18
22
|
export const httpOnly = (partialConfig) => ({
|
|
19
23
|
type: 'http-only',
|
|
20
24
|
target: partialConfig.target,
|
|
21
|
-
|
|
22
|
-
...(partialConfig.security ? { security: partialConfig.security } : {}),
|
|
23
|
-
...(partialConfig.advanced ? { advanced: partialConfig.advanced } : {})
|
|
25
|
+
...(partialConfig)
|
|
24
26
|
});
|
|
27
|
+
/**
|
|
28
|
+
* @deprecated Use createHttpsTerminateRoute instead
|
|
29
|
+
*/
|
|
25
30
|
export const tlsTerminateToHttp = (partialConfig) => ({
|
|
26
31
|
type: 'https-terminate-to-http',
|
|
27
32
|
target: partialConfig.target,
|
|
28
|
-
|
|
29
|
-
acme: { enabled: true, maintenance: true, ...(partialConfig.acme || {}) },
|
|
30
|
-
http: { enabled: true, redirectToHttps: true, ...(partialConfig.http || {}) },
|
|
31
|
-
...(partialConfig.security ? { security: partialConfig.security } : {}),
|
|
32
|
-
...(partialConfig.advanced ? { advanced: partialConfig.advanced } : {})
|
|
33
|
+
...(partialConfig)
|
|
33
34
|
});
|
|
35
|
+
/**
|
|
36
|
+
* @deprecated Use createHttpsTerminateRoute with reencrypt option instead
|
|
37
|
+
*/
|
|
34
38
|
export const tlsTerminateToHttps = (partialConfig) => ({
|
|
35
39
|
type: 'https-terminate-to-https',
|
|
36
40
|
target: partialConfig.target,
|
|
37
|
-
|
|
38
|
-
acme: { enabled: true, maintenance: true, ...(partialConfig.acme || {}) },
|
|
39
|
-
http: { enabled: true, redirectToHttps: true, ...(partialConfig.http || {}) },
|
|
40
|
-
...(partialConfig.security ? { security: partialConfig.security } : {}),
|
|
41
|
-
...(partialConfig.advanced ? { advanced: partialConfig.advanced } : {})
|
|
41
|
+
...(partialConfig)
|
|
42
42
|
});
|
|
43
|
+
/**
|
|
44
|
+
* @deprecated Use createHttpsPassthroughRoute instead
|
|
45
|
+
*/
|
|
43
46
|
export const httpsPassthrough = (partialConfig) => ({
|
|
44
47
|
type: 'https-passthrough',
|
|
45
48
|
target: partialConfig.target,
|
|
46
|
-
|
|
47
|
-
...(partialConfig.security ? { security: partialConfig.security } : {}),
|
|
48
|
-
...(partialConfig.advanced ? { advanced: partialConfig.advanced } : {})
|
|
49
|
+
...(partialConfig)
|
|
49
50
|
});
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yd2FyZGluZy10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ZvcndhcmRpbmcvY29uZmlnL2ZvcndhcmRpbmctdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0E7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSx1QkFTWDtBQVRELFdBQVksdUJBQXVCO0lBQ2pDLGtEQUF1QixDQUFBO0lBQ3ZCLHdEQUE2QixDQUFBO0lBQzdCLDBDQUFlLENBQUE7SUFDZiw0REFBaUMsQ0FBQTtJQUNqQyx3REFBNkIsQ0FBQTtJQUM3QiwwREFBK0IsQ0FBQTtJQUMvQixvRUFBeUMsQ0FBQTtJQUN6QyxvRUFBeUMsQ0FBQTtBQUMzQyxDQUFDLEVBVFcsdUJBQXVCLEtBQXZCLHVCQUF1QixRQVNsQztBQVdELHVFQUF1RTtBQUN2RSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDeEIsTUFBTSxrREFBa0QsQ0FBQztBQUUxRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDeEIsQ0FBQztBQVdGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBMEJyRzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUN0QixhQUEyRixFQUNqRSxFQUFFLENBQUMsQ0FBQztJQUM5QixJQUFJLEVBQUUsV0FBVztJQUNqQixNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU07SUFDNUIsR0FBRyxDQUFDLGFBQWEsQ0FBQztDQUNuQixDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQ2hDLGFBQTJGLEVBQ2pFLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNO0lBQzVCLEdBQUcsQ0FBQyxhQUFhLENBQUM7Q0FDbkIsQ0FBQyxDQUFDO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUNqQyxhQUEyRixFQUNqRSxFQUFFLENBQUMsQ0FBQztJQUM5QixJQUFJLEVBQUUsMEJBQTBCO0lBQ2hDLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTTtJQUM1QixHQUFHLENBQUMsYUFBYSxDQUFDO0NBQ25CLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FDOUIsYUFBMkYsRUFDakUsRUFBRSxDQUFDLENBQUM7SUFDOUIsSUFBSSxFQUFFLG1CQUFtQjtJQUN6QixNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU07SUFDNUIsR0FBRyxDQUFDLGFBQWEsQ0FBQztDQUNuQixDQUFDLENBQUMifQ==
|