@push.rocks/smartproxy 15.0.2 → 16.0.3

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 (160) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/certificate/index.d.ts +10 -4
  3. package/dist_ts/certificate/index.js +5 -7
  4. package/dist_ts/certificate/models/certificate-types.d.ts +35 -15
  5. package/dist_ts/certificate/providers/cert-provisioner.d.ts +41 -15
  6. package/dist_ts/certificate/providers/cert-provisioner.js +201 -41
  7. package/dist_ts/core/models/index.d.ts +2 -0
  8. package/dist_ts/core/models/index.js +3 -1
  9. package/dist_ts/core/models/route-context.d.ts +62 -0
  10. package/dist_ts/core/models/route-context.js +43 -0
  11. package/dist_ts/core/models/socket-augmentation.d.ts +12 -0
  12. package/dist_ts/core/models/socket-augmentation.js +18 -0
  13. package/dist_ts/core/utils/event-system.d.ts +200 -0
  14. package/dist_ts/core/utils/event-system.js +224 -0
  15. package/dist_ts/core/utils/index.d.ts +7 -0
  16. package/dist_ts/core/utils/index.js +8 -1
  17. package/dist_ts/core/utils/route-manager.d.ts +118 -0
  18. package/dist_ts/core/utils/route-manager.js +383 -0
  19. package/dist_ts/core/utils/route-utils.d.ts +94 -0
  20. package/dist_ts/core/utils/route-utils.js +264 -0
  21. package/dist_ts/core/utils/security-utils.d.ts +111 -0
  22. package/dist_ts/core/utils/security-utils.js +212 -0
  23. package/dist_ts/core/utils/shared-security-manager.d.ts +110 -0
  24. package/dist_ts/core/utils/shared-security-manager.js +252 -0
  25. package/dist_ts/core/utils/template-utils.d.ts +37 -0
  26. package/dist_ts/core/utils/template-utils.js +104 -0
  27. package/dist_ts/core/utils/websocket-utils.d.ts +23 -0
  28. package/dist_ts/core/utils/websocket-utils.js +86 -0
  29. package/dist_ts/forwarding/config/forwarding-types.d.ts +40 -76
  30. package/dist_ts/forwarding/config/forwarding-types.js +19 -18
  31. package/dist_ts/forwarding/config/index.d.ts +4 -2
  32. package/dist_ts/forwarding/config/index.js +5 -3
  33. package/dist_ts/forwarding/handlers/base-handler.js +3 -1
  34. package/dist_ts/forwarding/index.d.ts +5 -6
  35. package/dist_ts/forwarding/index.js +3 -3
  36. package/dist_ts/http/models/http-types.js +1 -1
  37. package/dist_ts/http/port80/acme-interfaces.d.ts +30 -0
  38. package/dist_ts/http/port80/acme-interfaces.js +46 -1
  39. package/dist_ts/http/port80/port80-handler.d.ts +17 -2
  40. package/dist_ts/http/port80/port80-handler.js +49 -11
  41. package/dist_ts/http/router/index.d.ts +5 -1
  42. package/dist_ts/http/router/index.js +4 -2
  43. package/dist_ts/http/router/route-router.d.ts +108 -0
  44. package/dist_ts/http/router/route-router.js +393 -0
  45. package/dist_ts/index.d.ts +8 -2
  46. package/dist_ts/index.js +10 -3
  47. package/dist_ts/proxies/index.d.ts +7 -2
  48. package/dist_ts/proxies/index.js +10 -4
  49. package/dist_ts/proxies/network-proxy/certificate-manager.d.ts +21 -0
  50. package/dist_ts/proxies/network-proxy/certificate-manager.js +92 -1
  51. package/dist_ts/proxies/network-proxy/context-creator.d.ts +34 -0
  52. package/dist_ts/proxies/network-proxy/context-creator.js +108 -0
  53. package/dist_ts/proxies/network-proxy/function-cache.d.ts +90 -0
  54. package/dist_ts/proxies/network-proxy/function-cache.js +198 -0
  55. package/dist_ts/proxies/network-proxy/http-request-handler.d.ts +40 -0
  56. package/dist_ts/proxies/network-proxy/http-request-handler.js +256 -0
  57. package/dist_ts/proxies/network-proxy/http2-request-handler.d.ts +24 -0
  58. package/dist_ts/proxies/network-proxy/http2-request-handler.js +201 -0
  59. package/dist_ts/proxies/network-proxy/models/types.d.ts +73 -1
  60. package/dist_ts/proxies/network-proxy/models/types.js +242 -1
  61. package/dist_ts/proxies/network-proxy/network-proxy.d.ts +23 -20
  62. package/dist_ts/proxies/network-proxy/network-proxy.js +147 -60
  63. package/dist_ts/proxies/network-proxy/request-handler.d.ts +38 -5
  64. package/dist_ts/proxies/network-proxy/request-handler.js +584 -198
  65. package/dist_ts/proxies/network-proxy/security-manager.d.ts +65 -0
  66. package/dist_ts/proxies/network-proxy/security-manager.js +255 -0
  67. package/dist_ts/proxies/network-proxy/websocket-handler.d.ts +13 -2
  68. package/dist_ts/proxies/network-proxy/websocket-handler.js +238 -20
  69. package/dist_ts/proxies/smart-proxy/index.d.ts +1 -1
  70. package/dist_ts/proxies/smart-proxy/index.js +3 -3
  71. package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +5 -66
  72. package/dist_ts/proxies/smart-proxy/models/interfaces.js +5 -4
  73. package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +173 -6
  74. package/dist_ts/proxies/smart-proxy/network-proxy-bridge.d.ts +20 -7
  75. package/dist_ts/proxies/smart-proxy/network-proxy-bridge.js +49 -108
  76. package/dist_ts/proxies/smart-proxy/port-manager.d.ts +81 -0
  77. package/dist_ts/proxies/smart-proxy/port-manager.js +166 -0
  78. package/dist_ts/proxies/smart-proxy/route-connection-handler.d.ts +7 -5
  79. package/dist_ts/proxies/smart-proxy/route-connection-handler.js +155 -160
  80. package/dist_ts/proxies/smart-proxy/route-helpers/index.d.ts +9 -0
  81. package/dist_ts/proxies/smart-proxy/route-helpers/index.js +11 -0
  82. package/dist_ts/proxies/smart-proxy/route-helpers.d.ts +5 -125
  83. package/dist_ts/proxies/smart-proxy/route-helpers.js +8 -195
  84. package/dist_ts/proxies/smart-proxy/route-manager.d.ts +14 -11
  85. package/dist_ts/proxies/smart-proxy/route-manager.js +81 -124
  86. package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +101 -12
  87. package/dist_ts/proxies/smart-proxy/smart-proxy.js +178 -306
  88. package/dist_ts/proxies/smart-proxy/timeout-manager.js +3 -3
  89. package/dist_ts/proxies/smart-proxy/utils/index.d.ts +12 -0
  90. package/dist_ts/proxies/smart-proxy/utils/index.js +19 -0
  91. package/dist_ts/proxies/smart-proxy/utils/route-helpers.d.ts +240 -0
  92. package/dist_ts/proxies/smart-proxy/utils/route-helpers.js +451 -0
  93. package/dist_ts/proxies/smart-proxy/utils/route-migration-utils.d.ts +51 -0
  94. package/dist_ts/proxies/smart-proxy/utils/route-migration-utils.js +124 -0
  95. package/dist_ts/proxies/smart-proxy/utils/route-patterns.d.ts +131 -0
  96. package/dist_ts/proxies/smart-proxy/utils/route-patterns.js +217 -0
  97. package/dist_ts/proxies/smart-proxy/utils/route-utils.d.ts +79 -0
  98. package/dist_ts/proxies/smart-proxy/utils/route-utils.js +266 -0
  99. package/dist_ts/proxies/smart-proxy/utils/route-validators.d.ts +73 -0
  100. package/dist_ts/proxies/smart-proxy/utils/route-validators.js +264 -0
  101. package/package.json +1 -1
  102. package/readme.md +241 -125
  103. package/readme.plan.md +73 -286
  104. package/ts/00_commitinfo_data.ts +1 -1
  105. package/ts/certificate/index.ts +17 -9
  106. package/ts/certificate/models/certificate-types.ts +37 -16
  107. package/ts/certificate/providers/cert-provisioner.ts +247 -54
  108. package/ts/core/models/index.ts +2 -0
  109. package/ts/core/models/route-context.ts +113 -0
  110. package/ts/core/models/socket-augmentation.ts +33 -0
  111. package/ts/core/utils/event-system.ts +376 -0
  112. package/ts/core/utils/index.ts +7 -0
  113. package/ts/core/utils/route-manager.ts +489 -0
  114. package/ts/core/utils/route-utils.ts +312 -0
  115. package/ts/core/utils/security-utils.ts +309 -0
  116. package/ts/core/utils/shared-security-manager.ts +333 -0
  117. package/ts/core/utils/template-utils.ts +124 -0
  118. package/ts/core/utils/websocket-utils.ts +81 -0
  119. package/ts/forwarding/config/forwarding-types.ts +79 -107
  120. package/ts/forwarding/config/index.ts +4 -2
  121. package/ts/forwarding/handlers/base-handler.ts +4 -2
  122. package/ts/forwarding/index.ts +3 -2
  123. package/ts/http/models/http-types.ts +0 -1
  124. package/ts/http/port80/acme-interfaces.ts +84 -0
  125. package/ts/http/port80/port80-handler.ts +61 -15
  126. package/ts/http/router/index.ts +8 -1
  127. package/ts/http/router/route-router.ts +482 -0
  128. package/ts/index.ts +14 -2
  129. package/ts/proxies/index.ts +12 -3
  130. package/ts/proxies/network-proxy/certificate-manager.ts +114 -10
  131. package/ts/proxies/network-proxy/context-creator.ts +145 -0
  132. package/ts/proxies/network-proxy/function-cache.ts +259 -0
  133. package/ts/proxies/network-proxy/http-request-handler.ts +330 -0
  134. package/ts/proxies/network-proxy/http2-request-handler.ts +255 -0
  135. package/ts/proxies/network-proxy/models/types.ts +312 -1
  136. package/ts/proxies/network-proxy/network-proxy.ts +195 -86
  137. package/ts/proxies/network-proxy/request-handler.ts +698 -246
  138. package/ts/proxies/network-proxy/security-manager.ts +298 -0
  139. package/ts/proxies/network-proxy/websocket-handler.ts +276 -33
  140. package/ts/proxies/smart-proxy/index.ts +2 -12
  141. package/ts/proxies/smart-proxy/models/interfaces.ts +13 -67
  142. package/ts/proxies/smart-proxy/models/route-types.ts +223 -25
  143. package/ts/proxies/smart-proxy/network-proxy-bridge.ts +57 -123
  144. package/ts/proxies/smart-proxy/port-manager.ts +195 -0
  145. package/ts/proxies/smart-proxy/route-connection-handler.ts +191 -225
  146. package/ts/proxies/smart-proxy/route-manager.ts +101 -144
  147. package/ts/proxies/smart-proxy/smart-proxy.ts +206 -377
  148. package/ts/proxies/smart-proxy/timeout-manager.ts +2 -2
  149. package/ts/proxies/smart-proxy/utils/index.ts +40 -0
  150. package/ts/proxies/smart-proxy/utils/route-helpers.ts +621 -0
  151. package/ts/proxies/smart-proxy/utils/route-migration-utils.ts +165 -0
  152. package/ts/proxies/smart-proxy/utils/route-patterns.ts +309 -0
  153. package/ts/proxies/smart-proxy/utils/route-utils.ts +330 -0
  154. package/ts/proxies/smart-proxy/utils/route-validators.ts +288 -0
  155. package/ts/forwarding/config/domain-config.ts +0 -28
  156. package/ts/forwarding/config/domain-manager.ts +0 -283
  157. package/ts/proxies/smart-proxy/connection-handler.ts +0 -1240
  158. package/ts/proxies/smart-proxy/domain-config-manager.ts +0 -441
  159. package/ts/proxies/smart-proxy/port-range-manager.ts +0 -211
  160. package/ts/proxies/smart-proxy/route-helpers.ts +0 -344
@@ -1,283 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- import type { IDomainConfig } from './domain-config.js';
3
- import { ForwardingHandler } from '../handlers/base-handler.js';
4
- import { ForwardingHandlerEvents } from './forwarding-types.js';
5
- import { ForwardingHandlerFactory } from '../factory/forwarding-factory.js';
6
-
7
- /**
8
- * Events emitted by the DomainManager
9
- */
10
- export enum DomainManagerEvents {
11
- DOMAIN_ADDED = 'domain-added',
12
- DOMAIN_REMOVED = 'domain-removed',
13
- DOMAIN_MATCHED = 'domain-matched',
14
- DOMAIN_MATCH_FAILED = 'domain-match-failed',
15
- CERTIFICATE_NEEDED = 'certificate-needed',
16
- CERTIFICATE_LOADED = 'certificate-loaded',
17
- ERROR = 'error'
18
- }
19
-
20
- /**
21
- * Manages domains and their forwarding handlers
22
- */
23
- export class DomainManager extends plugins.EventEmitter {
24
- private domainConfigs: IDomainConfig[] = [];
25
- private domainHandlers: Map<string, ForwardingHandler> = new Map();
26
-
27
- /**
28
- * Create a new DomainManager
29
- * @param initialDomains Optional initial domain configurations
30
- */
31
- constructor(initialDomains?: IDomainConfig[]) {
32
- super();
33
-
34
- if (initialDomains) {
35
- this.setDomainConfigs(initialDomains);
36
- }
37
- }
38
-
39
- /**
40
- * Set or replace all domain configurations
41
- * @param configs Array of domain configurations
42
- */
43
- public async setDomainConfigs(configs: IDomainConfig[]): Promise<void> {
44
- // Clear existing handlers
45
- this.domainHandlers.clear();
46
-
47
- // Store new configurations
48
- this.domainConfigs = [...configs];
49
-
50
- // Initialize handlers for each domain
51
- for (const config of this.domainConfigs) {
52
- await this.createHandlersForDomain(config);
53
- }
54
- }
55
-
56
- /**
57
- * Add a new domain configuration
58
- * @param config The domain configuration to add
59
- */
60
- public async addDomainConfig(config: IDomainConfig): Promise<void> {
61
- // Check if any of these domains already exist
62
- for (const domain of config.domains) {
63
- if (this.domainHandlers.has(domain)) {
64
- // Remove existing handler for this domain
65
- this.domainHandlers.delete(domain);
66
- }
67
- }
68
-
69
- // Add the new configuration
70
- this.domainConfigs.push(config);
71
-
72
- // Create handlers for the new domain
73
- await this.createHandlersForDomain(config);
74
-
75
- this.emit(DomainManagerEvents.DOMAIN_ADDED, {
76
- domains: config.domains,
77
- forwardingType: config.forwarding.type
78
- });
79
- }
80
-
81
- /**
82
- * Remove a domain configuration
83
- * @param domain The domain to remove
84
- * @returns True if the domain was found and removed
85
- */
86
- public removeDomainConfig(domain: string): boolean {
87
- // Find the config that includes this domain
88
- const index = this.domainConfigs.findIndex(config =>
89
- config.domains.includes(domain)
90
- );
91
-
92
- if (index === -1) {
93
- return false;
94
- }
95
-
96
- // Get the config
97
- const config = this.domainConfigs[index];
98
-
99
- // Remove all handlers for this config
100
- for (const domainName of config.domains) {
101
- this.domainHandlers.delete(domainName);
102
- }
103
-
104
- // Remove the config
105
- this.domainConfigs.splice(index, 1);
106
-
107
- this.emit(DomainManagerEvents.DOMAIN_REMOVED, {
108
- domains: config.domains
109
- });
110
-
111
- return true;
112
- }
113
-
114
- /**
115
- * Find the handler for a domain
116
- * @param domain The domain to find a handler for
117
- * @returns The handler or undefined if no match
118
- */
119
- public findHandlerForDomain(domain: string): ForwardingHandler | undefined {
120
- // Try exact match
121
- if (this.domainHandlers.has(domain)) {
122
- return this.domainHandlers.get(domain);
123
- }
124
-
125
- // Try wildcard matches
126
- const wildcardHandler = this.findWildcardHandler(domain);
127
- if (wildcardHandler) {
128
- return wildcardHandler;
129
- }
130
-
131
- // No match found
132
- return undefined;
133
- }
134
-
135
- /**
136
- * Handle a connection for a domain
137
- * @param domain The domain
138
- * @param socket The client socket
139
- * @returns True if the connection was handled
140
- */
141
- public handleConnection(domain: string, socket: plugins.net.Socket): boolean {
142
- const handler = this.findHandlerForDomain(domain);
143
-
144
- if (!handler) {
145
- this.emit(DomainManagerEvents.DOMAIN_MATCH_FAILED, {
146
- domain,
147
- remoteAddress: socket.remoteAddress
148
- });
149
- return false;
150
- }
151
-
152
- this.emit(DomainManagerEvents.DOMAIN_MATCHED, {
153
- domain,
154
- handlerType: handler.constructor.name,
155
- remoteAddress: socket.remoteAddress
156
- });
157
-
158
- // Handle the connection
159
- handler.handleConnection(socket);
160
- return true;
161
- }
162
-
163
- /**
164
- * Handle an HTTP request for a domain
165
- * @param domain The domain
166
- * @param req The HTTP request
167
- * @param res The HTTP response
168
- * @returns True if the request was handled
169
- */
170
- public handleHttpRequest(domain: string, req: plugins.http.IncomingMessage, res: plugins.http.ServerResponse): boolean {
171
- const handler = this.findHandlerForDomain(domain);
172
-
173
- if (!handler) {
174
- this.emit(DomainManagerEvents.DOMAIN_MATCH_FAILED, {
175
- domain,
176
- remoteAddress: req.socket.remoteAddress
177
- });
178
- return false;
179
- }
180
-
181
- this.emit(DomainManagerEvents.DOMAIN_MATCHED, {
182
- domain,
183
- handlerType: handler.constructor.name,
184
- remoteAddress: req.socket.remoteAddress
185
- });
186
-
187
- // Handle the request
188
- handler.handleHttpRequest(req, res);
189
- return true;
190
- }
191
-
192
- /**
193
- * Create handlers for a domain configuration
194
- * @param config The domain configuration
195
- */
196
- private async createHandlersForDomain(config: IDomainConfig): Promise<void> {
197
- try {
198
- // Create a handler for this forwarding configuration
199
- const handler = ForwardingHandlerFactory.createHandler(config.forwarding);
200
-
201
- // Initialize the handler
202
- await handler.initialize();
203
-
204
- // Set up event forwarding
205
- this.setupHandlerEvents(handler, config);
206
-
207
- // Store the handler for each domain in the config
208
- for (const domain of config.domains) {
209
- this.domainHandlers.set(domain, handler);
210
- }
211
- } catch (error) {
212
- this.emit(DomainManagerEvents.ERROR, {
213
- domains: config.domains,
214
- error: error instanceof Error ? error.message : String(error)
215
- });
216
- }
217
- }
218
-
219
- /**
220
- * Set up event forwarding from a handler
221
- * @param handler The handler
222
- * @param config The domain configuration for this handler
223
- */
224
- private setupHandlerEvents(handler: ForwardingHandler, config: IDomainConfig): void {
225
- // Forward relevant events
226
- handler.on(ForwardingHandlerEvents.CERTIFICATE_NEEDED, (data) => {
227
- this.emit(DomainManagerEvents.CERTIFICATE_NEEDED, {
228
- ...data,
229
- domains: config.domains
230
- });
231
- });
232
-
233
- handler.on(ForwardingHandlerEvents.CERTIFICATE_LOADED, (data) => {
234
- this.emit(DomainManagerEvents.CERTIFICATE_LOADED, {
235
- ...data,
236
- domains: config.domains
237
- });
238
- });
239
-
240
- handler.on(ForwardingHandlerEvents.ERROR, (data) => {
241
- this.emit(DomainManagerEvents.ERROR, {
242
- ...data,
243
- domains: config.domains
244
- });
245
- });
246
- }
247
-
248
- /**
249
- * Find a handler for a domain using wildcard matching
250
- * @param domain The domain to find a handler for
251
- * @returns The handler or undefined if no match
252
- */
253
- private findWildcardHandler(domain: string): ForwardingHandler | undefined {
254
- // Exact match already checked in findHandlerForDomain
255
-
256
- // Try subdomain wildcard (*.example.com)
257
- if (domain.includes('.')) {
258
- const parts = domain.split('.');
259
- if (parts.length > 2) {
260
- const wildcardDomain = `*.${parts.slice(1).join('.')}`;
261
- if (this.domainHandlers.has(wildcardDomain)) {
262
- return this.domainHandlers.get(wildcardDomain);
263
- }
264
- }
265
- }
266
-
267
- // Try full wildcard
268
- if (this.domainHandlers.has('*')) {
269
- return this.domainHandlers.get('*');
270
- }
271
-
272
- // No match found
273
- return undefined;
274
- }
275
-
276
- /**
277
- * Get all domain configurations
278
- * @returns Array of domain configurations
279
- */
280
- public getDomainConfigs(): IDomainConfig[] {
281
- return [...this.domainConfigs];
282
- }
283
- }