@push.rocks/smartproxy 27.12.8 → 27.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changelog.md +7 -1
- package/dist_rust/rustproxy_linux_amd64 +0 -0
- package/dist_rust/rustproxy_linux_arm64 +0 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/index.d.ts +1 -1
- package/dist_ts/plugins.d.ts +4 -2
- package/dist_ts/plugins.js +5 -3
- package/dist_ts/proxies/smart-proxy/challenge-provider-relay-server.d.ts +31 -0
- package/dist_ts/proxies/smart-proxy/challenge-provider-relay-server.js +297 -0
- package/dist_ts/proxies/smart-proxy/models/index.d.ts +1 -1
- package/dist_ts/proxies/smart-proxy/models/interfaces.d.ts +13 -0
- package/dist_ts/proxies/smart-proxy/models/route-types.d.ts +2 -0
- package/dist_ts/proxies/smart-proxy/models/route-types.js +1 -1
- package/dist_ts/proxies/smart-proxy/models/rust-types.d.ts +4 -1
- package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.d.ts +2 -1
- package/dist_ts/proxies/smart-proxy/rust-proxy-bridge.js +4 -1
- package/dist_ts/proxies/smart-proxy/smart-proxy.d.ts +19 -0
- package/dist_ts/proxies/smart-proxy/smart-proxy.js +339 -89
- package/dist_ts/proxies/smart-proxy/utils/rust-config.d.ts +3 -2
- package/dist_ts/proxies/smart-proxy/utils/rust-config.js +19 -2
- package/package.json +2 -1
- package/readme.md +64 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/index.ts +1 -1
- package/ts/plugins.ts +4 -1
- package/ts/proxies/smart-proxy/challenge-provider-relay-server.ts +338 -0
- package/ts/proxies/smart-proxy/models/index.ts +1 -1
- package/ts/proxies/smart-proxy/models/interfaces.ts +16 -0
- package/ts/proxies/smart-proxy/models/route-types.ts +3 -0
- package/ts/proxies/smart-proxy/models/rust-types.ts +7 -1
- package/ts/proxies/smart-proxy/rust-proxy-bridge.ts +6 -0
- package/ts/proxies/smart-proxy/smart-proxy.ts +400 -94
- package/ts/proxies/smart-proxy/utils/rust-config.ts +21 -0
package/changelog.md
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 2026-06-05 - 27.13.0
|
|
4
4
|
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- add route challenge enforcement (challenge)
|
|
8
|
+
- Add smartchallenge provider registration and relay wiring between TypeScript and the Rust proxy runtime
|
|
9
|
+
- Enforce route-level browser challenges with pending and clearance cookies plus reserved verification endpoints
|
|
10
|
+
- Document challenge configuration and add integration tests for protected routes
|
|
5
11
|
|
|
6
12
|
## 2026-06-05 - 27.12.8
|
|
7
13
|
|
|
Binary file
|
|
Binary file
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartproxy',
|
|
6
|
-
version: '27.
|
|
6
|
+
version: '27.13.0',
|
|
7
7
|
description: 'A powerful proxy package with unified route-based configuration for high traffic management. Features include SSL/TLS support, flexible routing patterns, WebSocket handling, advanced security options, and automatic ACME certificate management.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsV0FBVyxFQUFFLHFQQUFxUDtDQUNuUSxDQUFBIn0=
|
package/dist_ts/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { SmartProxy } from './proxies/smart-proxy/index.js';
|
|
5
5
|
export { SharedRouteManager as RouteManager } from './core/routing/route-manager.js';
|
|
6
|
-
export type { ISmartProxyOptions, ISmartProxySecurityPolicy, IConnectionRecord, IRouteConfig, IRouteMatch, IRouteAction, IRouteTls, IRouteContext, TDatagramHandler, IDatagramInfo, IActiveConnectionSnapshot, IActiveConnectionSnapshotOptions } from './proxies/smart-proxy/models/index.js';
|
|
6
|
+
export type { ISmartProxyOptions, ISmartProxySecurityPolicy, ISmartProxyChallengeOptions, IConnectionRecord, IRouteConfig, IRouteMatch, IRouteAction, IRouteTls, IRouteContext, TDatagramHandler, IDatagramInfo, IActiveConnectionSnapshot, IActiveConnectionSnapshotOptions } from './proxies/smart-proxy/models/index.js';
|
|
7
7
|
export type { TSmartProxyCertProvisionObject, ICertProvisionEventComms, ICertificateIssuedEvent, ICertificateFailedEvent } from './proxies/smart-proxy/models/interfaces.js';
|
|
8
8
|
export * from './proxies/smart-proxy/utils/index.js';
|
|
9
9
|
export * from './core/models/common-types.js';
|
package/dist_ts/plugins.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EventEmitter } from 'node:events';
|
|
2
|
+
import * as crypto from 'node:crypto';
|
|
2
3
|
import * as fs from 'node:fs';
|
|
3
4
|
import * as http from 'node:http';
|
|
4
5
|
import * as net from 'node:net';
|
|
@@ -6,14 +7,15 @@ import * as path from 'node:path';
|
|
|
6
7
|
import * as tls from 'node:tls';
|
|
7
8
|
import * as url from 'node:url';
|
|
8
9
|
import * as http2 from 'node:http2';
|
|
9
|
-
export { EventEmitter, fs, http, net, path, tls, url, http2 };
|
|
10
|
+
export { EventEmitter, crypto, fs, http, net, path, tls, url, http2 };
|
|
10
11
|
import * as tsclass from '@tsclass/tsclass';
|
|
11
12
|
export { tsclass };
|
|
12
13
|
import * as smartcrypto from '@push.rocks/smartcrypto';
|
|
13
14
|
import * as smartlog from '@push.rocks/smartlog';
|
|
14
15
|
import * as smartlogDestinationLocal from '@push.rocks/smartlog/destination-local';
|
|
16
|
+
import * as smartchallenge from '@push.rocks/smartchallenge';
|
|
15
17
|
import * as smartnftables from '@push.rocks/smartnftables';
|
|
16
18
|
import * as smartrust from '@push.rocks/smartrust';
|
|
17
|
-
export { smartcrypto, smartlog, smartlogDestinationLocal, smartnftables, smartrust, };
|
|
19
|
+
export { smartcrypto, smartchallenge, smartlog, smartlogDestinationLocal, smartnftables, smartrust, };
|
|
18
20
|
import { minimatch } from 'minimatch';
|
|
19
21
|
export { minimatch };
|
package/dist_ts/plugins.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// node native scope
|
|
2
2
|
import { EventEmitter } from 'node:events';
|
|
3
|
+
import * as crypto from 'node:crypto';
|
|
3
4
|
import * as fs from 'node:fs';
|
|
4
5
|
import * as http from 'node:http';
|
|
5
6
|
import * as net from 'node:net';
|
|
@@ -7,7 +8,7 @@ import * as path from 'node:path';
|
|
|
7
8
|
import * as tls from 'node:tls';
|
|
8
9
|
import * as url from 'node:url';
|
|
9
10
|
import * as http2 from 'node:http2';
|
|
10
|
-
export { EventEmitter, fs, http, net, path, tls, url, http2 };
|
|
11
|
+
export { EventEmitter, crypto, fs, http, net, path, tls, url, http2 };
|
|
11
12
|
// tsclass scope
|
|
12
13
|
import * as tsclass from '@tsclass/tsclass';
|
|
13
14
|
export { tsclass };
|
|
@@ -15,10 +16,11 @@ export { tsclass };
|
|
|
15
16
|
import * as smartcrypto from '@push.rocks/smartcrypto';
|
|
16
17
|
import * as smartlog from '@push.rocks/smartlog';
|
|
17
18
|
import * as smartlogDestinationLocal from '@push.rocks/smartlog/destination-local';
|
|
19
|
+
import * as smartchallenge from '@push.rocks/smartchallenge';
|
|
18
20
|
import * as smartnftables from '@push.rocks/smartnftables';
|
|
19
21
|
import * as smartrust from '@push.rocks/smartrust';
|
|
20
|
-
export { smartcrypto, smartlog, smartlogDestinationLocal, smartnftables, smartrust, };
|
|
22
|
+
export { smartcrypto, smartchallenge, smartlog, smartlogDestinationLocal, smartnftables, smartrust, };
|
|
21
23
|
// third party scope
|
|
22
24
|
import { minimatch } from 'minimatch';
|
|
23
25
|
export { minimatch };
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxLQUFLLEtBQUssTUFBTSxZQUFZLENBQUM7QUFFcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFFdEUsZ0JBQWdCO0FBQ2hCLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBRW5CLGtCQUFrQjtBQUNsQixPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxRQUFRLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxLQUFLLHdCQUF3QixNQUFNLHdDQUF3QyxDQUFDO0FBQ25GLE9BQU8sS0FBSyxjQUFjLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxLQUFLLGFBQWEsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELE9BQU8sRUFDTCxXQUFXLEVBQ1gsY0FBYyxFQUNkLFFBQVEsRUFDUix3QkFBd0IsRUFDeEIsYUFBYSxFQUNiLFNBQVMsR0FDVixDQUFDO0FBRUYsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDIn0=
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
export interface IChallengeProviderRelayServerOptions {
|
|
3
|
+
providerTimeoutMs?: number;
|
|
4
|
+
maxActiveProviderOperations?: number;
|
|
5
|
+
maxUnsettledProviderOperations?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class ChallengeProviderRelayServer {
|
|
8
|
+
private providers;
|
|
9
|
+
private providerTimeoutMs;
|
|
10
|
+
private maxActiveProviderOperations;
|
|
11
|
+
private maxUnsettledProviderOperations;
|
|
12
|
+
private activeProviderOperations;
|
|
13
|
+
private unsettledProviderOperations;
|
|
14
|
+
private server;
|
|
15
|
+
private socketPath;
|
|
16
|
+
private activeSockets;
|
|
17
|
+
private startPromise?;
|
|
18
|
+
constructor(providers: Map<string, plugins.smartchallenge.IChallengeProvider>, optionsArg?: IChallengeProviderRelayServerOptions);
|
|
19
|
+
getSocketPath(): string;
|
|
20
|
+
start(): Promise<void>;
|
|
21
|
+
private startInternal;
|
|
22
|
+
stop(): Promise<void>;
|
|
23
|
+
private handleConnection;
|
|
24
|
+
private dispatchLine;
|
|
25
|
+
private withProviderTimeout;
|
|
26
|
+
private writeResponse;
|
|
27
|
+
private createErrorResponse;
|
|
28
|
+
private estimateJsonByteLength;
|
|
29
|
+
private estimateJsonByteLengthInternal;
|
|
30
|
+
private estimateJsonStringByteLength;
|
|
31
|
+
}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import * as plugins from '../../plugins.js';
|
|
2
|
+
import { logger } from '../../core/utils/logger.js';
|
|
3
|
+
const maxChallengeRelayMessageBytes = 1024 * 1024;
|
|
4
|
+
const maxChallengeRelayIdBytes = 256;
|
|
5
|
+
export class ChallengeProviderRelayServer {
|
|
6
|
+
providers;
|
|
7
|
+
providerTimeoutMs;
|
|
8
|
+
maxActiveProviderOperations;
|
|
9
|
+
maxUnsettledProviderOperations;
|
|
10
|
+
activeProviderOperations = 0;
|
|
11
|
+
unsettledProviderOperations = 0;
|
|
12
|
+
server = null;
|
|
13
|
+
socketPath;
|
|
14
|
+
activeSockets = new Set();
|
|
15
|
+
startPromise;
|
|
16
|
+
constructor(providers, optionsArg = {}) {
|
|
17
|
+
this.providers = providers;
|
|
18
|
+
this.socketPath = `/tmp/smartproxy-challenge-relay-${process.pid}-${plugins.crypto.randomBytes(8).toString('hex')}.sock`;
|
|
19
|
+
this.providerTimeoutMs = Math.max(1, optionsArg.providerTimeoutMs ?? 5_000);
|
|
20
|
+
this.maxActiveProviderOperations = Math.max(1, optionsArg.maxActiveProviderOperations ?? 1024);
|
|
21
|
+
this.maxUnsettledProviderOperations = Math.max(1, optionsArg.maxUnsettledProviderOperations ?? this.maxActiveProviderOperations);
|
|
22
|
+
}
|
|
23
|
+
getSocketPath() {
|
|
24
|
+
return this.socketPath;
|
|
25
|
+
}
|
|
26
|
+
async start() {
|
|
27
|
+
if (this.server)
|
|
28
|
+
return;
|
|
29
|
+
if (this.startPromise)
|
|
30
|
+
return this.startPromise;
|
|
31
|
+
this.startPromise = this.startInternal();
|
|
32
|
+
try {
|
|
33
|
+
await this.startPromise;
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
this.startPromise = undefined;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async startInternal() {
|
|
40
|
+
try {
|
|
41
|
+
await plugins.fs.promises.unlink(this.socketPath);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Ignore stale socket cleanup failures for missing files.
|
|
45
|
+
}
|
|
46
|
+
const server = plugins.net.createServer((socket) => {
|
|
47
|
+
this.activeSockets.add(socket);
|
|
48
|
+
socket.once('close', () => this.activeSockets.delete(socket));
|
|
49
|
+
this.handleConnection(socket);
|
|
50
|
+
});
|
|
51
|
+
server.on('error', (err) => {
|
|
52
|
+
logger.log('error', `ChallengeProviderRelayServer error: ${err.message}`, { component: 'challenge-provider-relay-server' });
|
|
53
|
+
});
|
|
54
|
+
await new Promise((resolve, reject) => {
|
|
55
|
+
const handleError = (err) => reject(err);
|
|
56
|
+
server.once('error', handleError);
|
|
57
|
+
server.listen(this.socketPath, () => {
|
|
58
|
+
server.off('error', handleError);
|
|
59
|
+
this.server = server;
|
|
60
|
+
logger.log('info', `ChallengeProviderRelayServer listening on ${this.socketPath}`, { component: 'challenge-provider-relay-server' });
|
|
61
|
+
resolve();
|
|
62
|
+
});
|
|
63
|
+
}).catch((err) => {
|
|
64
|
+
server.close();
|
|
65
|
+
throw err;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
async stop() {
|
|
69
|
+
if (this.startPromise && !this.server) {
|
|
70
|
+
await this.startPromise.catch(() => undefined);
|
|
71
|
+
}
|
|
72
|
+
for (const socket of this.activeSockets) {
|
|
73
|
+
socket.destroy();
|
|
74
|
+
}
|
|
75
|
+
this.activeSockets.clear();
|
|
76
|
+
const server = this.server;
|
|
77
|
+
if (!server)
|
|
78
|
+
return;
|
|
79
|
+
this.server = null;
|
|
80
|
+
await new Promise((resolve) => {
|
|
81
|
+
server.close(() => {
|
|
82
|
+
plugins.fs.unlink(this.socketPath, () => resolve());
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
handleConnection(socket) {
|
|
87
|
+
let buffer = Buffer.alloc(0);
|
|
88
|
+
socket.setTimeout(Math.max(10_000, this.providerTimeoutMs + 1_000));
|
|
89
|
+
socket.on('timeout', () => socket.destroy());
|
|
90
|
+
socket.on('error', (err) => {
|
|
91
|
+
logger.log('warn', `Challenge relay socket error: ${err.message}`, { component: 'challenge-provider-relay-server' });
|
|
92
|
+
});
|
|
93
|
+
socket.on('data', (chunk) => {
|
|
94
|
+
buffer = buffer.length === 0 ? chunk : Buffer.concat([buffer, chunk], buffer.length + chunk.length);
|
|
95
|
+
if (buffer.length > maxChallengeRelayMessageBytes) {
|
|
96
|
+
socket.removeAllListeners('data');
|
|
97
|
+
this.writeResponse(socket, { success: false, error: 'Challenge relay request exceeds maximum size' });
|
|
98
|
+
buffer = Buffer.alloc(0);
|
|
99
|
+
socket.end();
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const newlineIndex = buffer.indexOf(0x0a);
|
|
103
|
+
if (newlineIndex === -1)
|
|
104
|
+
return;
|
|
105
|
+
const line = buffer.subarray(0, newlineIndex).toString('utf8');
|
|
106
|
+
socket.removeAllListeners('data');
|
|
107
|
+
this.dispatchLine(line)
|
|
108
|
+
.then((response) => this.writeResponse(socket, response))
|
|
109
|
+
.catch((err) => this.writeResponse(socket, { success: false, error: err.message }))
|
|
110
|
+
.finally(() => socket.end());
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
async dispatchLine(lineArg) {
|
|
114
|
+
let request;
|
|
115
|
+
try {
|
|
116
|
+
request = JSON.parse(lineArg);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return { success: false, error: 'Invalid challenge relay JSON' };
|
|
120
|
+
}
|
|
121
|
+
const provider = this.providers.get(request.providerId);
|
|
122
|
+
if (!provider) {
|
|
123
|
+
return {
|
|
124
|
+
id: request.id,
|
|
125
|
+
success: false,
|
|
126
|
+
error: `Challenge provider '${request.providerId}' is not registered`,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
switch (request.operation) {
|
|
130
|
+
case 'assess':
|
|
131
|
+
return { id: request.id, success: true, result: await this.withProviderTimeout(() => provider.assess(request.request), 'assess') };
|
|
132
|
+
case 'render':
|
|
133
|
+
return { id: request.id, success: true, result: await this.withProviderTimeout(() => provider.render(request.request), 'render') };
|
|
134
|
+
case 'verify':
|
|
135
|
+
return { id: request.id, success: true, result: await this.withProviderTimeout(() => provider.verify(request.request), 'verify') };
|
|
136
|
+
default:
|
|
137
|
+
const operationValue = request.operation;
|
|
138
|
+
return { id: request.id, success: false, error: `Unsupported challenge relay operation '${String(operationValue)}'` };
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async withProviderTimeout(operationArg, operationNameArg) {
|
|
142
|
+
if (this.activeProviderOperations >= this.maxActiveProviderOperations) {
|
|
143
|
+
throw new Error(`Challenge provider ${operationNameArg} rejected because too many operations are active`);
|
|
144
|
+
}
|
|
145
|
+
if (this.unsettledProviderOperations >= this.maxUnsettledProviderOperations) {
|
|
146
|
+
throw new Error(`Challenge provider ${operationNameArg} rejected because too many timed-out operations are still settling`);
|
|
147
|
+
}
|
|
148
|
+
let timer;
|
|
149
|
+
let activeReleased = false;
|
|
150
|
+
let unsettledReleased = false;
|
|
151
|
+
const releaseActive = () => {
|
|
152
|
+
if (!activeReleased) {
|
|
153
|
+
activeReleased = true;
|
|
154
|
+
this.activeProviderOperations -= 1;
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
const releaseUnsettled = () => {
|
|
158
|
+
if (!unsettledReleased) {
|
|
159
|
+
unsettledReleased = true;
|
|
160
|
+
this.unsettledProviderOperations -= 1;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
this.activeProviderOperations += 1;
|
|
164
|
+
this.unsettledProviderOperations += 1;
|
|
165
|
+
const providerPromise = Promise.resolve().then(operationArg);
|
|
166
|
+
const trackedProviderPromise = providerPromise.then((result) => {
|
|
167
|
+
releaseActive();
|
|
168
|
+
releaseUnsettled();
|
|
169
|
+
return result;
|
|
170
|
+
}, (err) => {
|
|
171
|
+
releaseActive();
|
|
172
|
+
releaseUnsettled();
|
|
173
|
+
throw err;
|
|
174
|
+
});
|
|
175
|
+
trackedProviderPromise.catch(() => undefined);
|
|
176
|
+
try {
|
|
177
|
+
return await Promise.race([
|
|
178
|
+
trackedProviderPromise,
|
|
179
|
+
new Promise((_resolve, reject) => {
|
|
180
|
+
timer = setTimeout(() => {
|
|
181
|
+
releaseActive();
|
|
182
|
+
reject(new Error(`Challenge provider ${operationNameArg} timed out after ${this.providerTimeoutMs}ms`));
|
|
183
|
+
}, this.providerTimeoutMs);
|
|
184
|
+
}),
|
|
185
|
+
]);
|
|
186
|
+
}
|
|
187
|
+
finally {
|
|
188
|
+
if (timer)
|
|
189
|
+
clearTimeout(timer);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
writeResponse(socket, responseArg) {
|
|
193
|
+
let response = responseArg;
|
|
194
|
+
if (this.estimateJsonByteLength(response, maxChallengeRelayMessageBytes) === undefined) {
|
|
195
|
+
response = this.createErrorResponse(responseArg.id, 'Challenge relay response exceeds maximum size');
|
|
196
|
+
}
|
|
197
|
+
let serializedResponse;
|
|
198
|
+
try {
|
|
199
|
+
serializedResponse = JSON.stringify(response);
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
serializedResponse = JSON.stringify(this.createErrorResponse(responseArg.id, 'Challenge relay response is not serializable'));
|
|
203
|
+
}
|
|
204
|
+
if (Buffer.byteLength(serializedResponse, 'utf8') > maxChallengeRelayMessageBytes) {
|
|
205
|
+
serializedResponse = JSON.stringify({
|
|
206
|
+
success: false,
|
|
207
|
+
error: 'Challenge relay response exceeds maximum size',
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
socket.write(`${serializedResponse}\n`);
|
|
211
|
+
}
|
|
212
|
+
createErrorResponse(idArg, errorArg) {
|
|
213
|
+
const response = {
|
|
214
|
+
success: false,
|
|
215
|
+
error: errorArg,
|
|
216
|
+
};
|
|
217
|
+
if (idArg && Buffer.byteLength(idArg, 'utf8') <= maxChallengeRelayIdBytes) {
|
|
218
|
+
response.id = idArg;
|
|
219
|
+
}
|
|
220
|
+
return response;
|
|
221
|
+
}
|
|
222
|
+
estimateJsonByteLength(valueArg, maxBytesArg, seenArg = new Set()) {
|
|
223
|
+
const bytes = this.estimateJsonByteLengthInternal(valueArg, maxBytesArg, seenArg);
|
|
224
|
+
return bytes !== undefined && bytes <= maxBytesArg ? bytes : undefined;
|
|
225
|
+
}
|
|
226
|
+
estimateJsonByteLengthInternal(valueArg, maxBytesArg, seenArg) {
|
|
227
|
+
if (valueArg === null)
|
|
228
|
+
return 4;
|
|
229
|
+
if (typeof valueArg === 'string')
|
|
230
|
+
return this.estimateJsonStringByteLength(valueArg, maxBytesArg);
|
|
231
|
+
if (typeof valueArg === 'number')
|
|
232
|
+
return Number.isFinite(valueArg) ? String(valueArg).length : 4;
|
|
233
|
+
if (typeof valueArg === 'boolean')
|
|
234
|
+
return valueArg ? 4 : 5;
|
|
235
|
+
if (typeof valueArg === 'undefined')
|
|
236
|
+
return 4;
|
|
237
|
+
if (typeof valueArg === 'bigint' || typeof valueArg === 'symbol' || typeof valueArg === 'function')
|
|
238
|
+
return undefined;
|
|
239
|
+
if (typeof valueArg !== 'object')
|
|
240
|
+
return undefined;
|
|
241
|
+
if (seenArg.has(valueArg))
|
|
242
|
+
return undefined;
|
|
243
|
+
seenArg.add(valueArg);
|
|
244
|
+
try {
|
|
245
|
+
let totalBytes = 2;
|
|
246
|
+
if (Array.isArray(valueArg)) {
|
|
247
|
+
for (let i = 0; i < valueArg.length; i++) {
|
|
248
|
+
const childBytes = this.estimateJsonByteLengthInternal(valueArg[i], maxBytesArg, seenArg);
|
|
249
|
+
if (childBytes === undefined)
|
|
250
|
+
return undefined;
|
|
251
|
+
totalBytes += childBytes + (i > 0 ? 1 : 0);
|
|
252
|
+
if (totalBytes > maxBytesArg)
|
|
253
|
+
return undefined;
|
|
254
|
+
}
|
|
255
|
+
return totalBytes;
|
|
256
|
+
}
|
|
257
|
+
let propertyCount = 0;
|
|
258
|
+
for (const [key, value] of Object.entries(valueArg)) {
|
|
259
|
+
if (typeof value === 'undefined' || typeof value === 'function' || typeof value === 'symbol')
|
|
260
|
+
continue;
|
|
261
|
+
const keyBytes = this.estimateJsonStringByteLength(key, maxBytesArg);
|
|
262
|
+
const valueBytes = this.estimateJsonByteLengthInternal(value, maxBytesArg, seenArg);
|
|
263
|
+
if (keyBytes === undefined || valueBytes === undefined)
|
|
264
|
+
return undefined;
|
|
265
|
+
totalBytes += keyBytes + valueBytes + 1 + (propertyCount > 0 ? 1 : 0);
|
|
266
|
+
propertyCount += 1;
|
|
267
|
+
if (totalBytes > maxBytesArg)
|
|
268
|
+
return undefined;
|
|
269
|
+
}
|
|
270
|
+
return totalBytes;
|
|
271
|
+
}
|
|
272
|
+
finally {
|
|
273
|
+
seenArg.delete(valueArg);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
estimateJsonStringByteLength(valueArg, maxBytesArg) {
|
|
277
|
+
let bytes = Buffer.byteLength(valueArg, 'utf8') + 2;
|
|
278
|
+
if (bytes > maxBytesArg)
|
|
279
|
+
return undefined;
|
|
280
|
+
for (let i = 0; i < valueArg.length; i++) {
|
|
281
|
+
const code = valueArg.charCodeAt(i);
|
|
282
|
+
if (code === 0x22 || code === 0x5c) {
|
|
283
|
+
bytes += 1;
|
|
284
|
+
}
|
|
285
|
+
else if (code === 0x08 || code === 0x09 || code === 0x0a || code === 0x0c || code === 0x0d) {
|
|
286
|
+
bytes += 1;
|
|
287
|
+
}
|
|
288
|
+
else if (code < 0x20) {
|
|
289
|
+
bytes += 5;
|
|
290
|
+
}
|
|
291
|
+
if (bytes > maxBytesArg)
|
|
292
|
+
return undefined;
|
|
293
|
+
}
|
|
294
|
+
return bytes;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbGxlbmdlLXByb3ZpZGVyLXJlbGF5LXNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3Byb3hpZXMvc21hcnQtcHJveHkvY2hhbGxlbmdlLXByb3ZpZGVyLXJlbGF5LXNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQWtCcEQsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2xELE1BQU0sd0JBQXdCLEdBQUcsR0FBRyxDQUFDO0FBUXJDLE1BQU0sT0FBTyw0QkFBNEI7SUFZN0I7SUFYRixpQkFBaUIsQ0FBUztJQUMxQiwyQkFBMkIsQ0FBUztJQUNwQyw4QkFBOEIsQ0FBUztJQUN2Qyx3QkFBd0IsR0FBRyxDQUFDLENBQUM7SUFDN0IsMkJBQTJCLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sR0FBOEIsSUFBSSxDQUFDO0lBQ3pDLFVBQVUsQ0FBUztJQUNuQixhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUM7SUFDOUMsWUFBWSxDQUFpQjtJQUVyQyxZQUNVLFNBQWlFLEVBQ3pFLGFBQW1ELEVBQUU7UUFEN0MsY0FBUyxHQUFULFNBQVMsQ0FBd0Q7UUFHekUsSUFBSSxDQUFDLFVBQVUsR0FBRyxtQ0FBbUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUN6SCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFD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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SmartProxy models
|
|
3
3
|
*/
|
|
4
|
-
export type { ISmartProxyOptions, ISmartProxySecurityPolicy, ISmartProxyCertStore, IConnectionRecord, TSmartProxyCertProvisionObject, ICertProvisionEventComms, ICertificateIssuedEvent, ICertificateFailedEvent, IActiveConnectionSnapshot, IActiveConnectionSnapshotOptions } from './interfaces.js';
|
|
4
|
+
export type { ISmartProxyOptions, ISmartProxySecurityPolicy, ISmartProxyChallengeOptions, ISmartProxyCertStore, IConnectionRecord, TChallengeProviderRegistry, TSmartProxyCertProvisionObject, ICertProvisionEventComms, ICertificateIssuedEvent, ICertificateFailedEvent, IActiveConnectionSnapshot, IActiveConnectionSnapshotOptions } from './interfaces.js';
|
|
5
5
|
export * from './route-types.js';
|
|
6
6
|
export * from './metrics-types.js';
|
|
@@ -35,6 +35,16 @@ export interface ISmartProxySecurityPolicy {
|
|
|
35
35
|
blockedIps?: string[];
|
|
36
36
|
blockedCidrs?: string[];
|
|
37
37
|
}
|
|
38
|
+
export interface ISmartProxyChallengeOptions {
|
|
39
|
+
/** Runtime-only cookie signing key. If omitted, SmartProxy generates an ephemeral key. */
|
|
40
|
+
cookieSigningKey?: string;
|
|
41
|
+
pendingCookieName?: string;
|
|
42
|
+
clearanceCookieName?: string;
|
|
43
|
+
reservedPathPrefix?: string;
|
|
44
|
+
relaySocketPath?: string;
|
|
45
|
+
relayTimeoutMs?: number;
|
|
46
|
+
pendingTtlSeconds?: number;
|
|
47
|
+
}
|
|
38
48
|
/**
|
|
39
49
|
* Provision object for static or HTTP-01 certificate
|
|
40
50
|
*/
|
|
@@ -144,6 +154,8 @@ export interface ISmartProxyOptions {
|
|
|
144
154
|
maxConnectionsPerIP?: number;
|
|
145
155
|
connectionRateLimitPerMinute?: number;
|
|
146
156
|
securityPolicy?: ISmartProxySecurityPolicy;
|
|
157
|
+
/** Runtime-only challenge enforcement settings. Never store this in route configs. */
|
|
158
|
+
challenge?: ISmartProxyChallengeOptions;
|
|
147
159
|
keepAliveTreatment?: 'standard' | 'extended' | 'immortal';
|
|
148
160
|
keepAliveInactivityMultiplier?: number;
|
|
149
161
|
extendedKeepAliveLifetime?: number;
|
|
@@ -210,6 +222,7 @@ export interface ISmartProxyOptions {
|
|
|
210
222
|
*/
|
|
211
223
|
rustBinaryPath?: string;
|
|
212
224
|
}
|
|
225
|
+
export type TChallengeProviderRegistry = Map<string, plugins.smartchallenge.IChallengeProvider>;
|
|
213
226
|
/**
|
|
214
227
|
* Enhanced connection record
|
|
215
228
|
*/
|
|
@@ -158,6 +158,8 @@ export interface IRouteSecurity {
|
|
|
158
158
|
/** Allowed VPN tunnel IPs, kept for compatibility. Prefer allowedClients. */
|
|
159
159
|
allowedAssignedIps?: string[];
|
|
160
160
|
};
|
|
161
|
+
/** Browser-facing challenge policy. SmartProxy enforces this in the HTTP path. */
|
|
162
|
+
challenge?: plugins.smartchallenge.IRouteChallengeConfig;
|
|
161
163
|
}
|
|
162
164
|
/**
|
|
163
165
|
* Static file server configuration
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import * as plugins from '../../../plugins.js';
|
|
2
2
|
// Configuration moved to models/interfaces.ts as ISmartProxyOptions
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L21vZGVscy9yb3V0ZS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBZ2QvQyxvRUFBb0UifQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IProtocolCacheEntry, IProtocolDistribution } from './metrics-types.js';
|
|
2
|
-
import type { IAcmeOptions, ISmartProxyOptions, ISmartProxySecurityPolicy } from './interfaces.js';
|
|
2
|
+
import type { IAcmeOptions, ISmartProxyChallengeOptions, ISmartProxyOptions, ISmartProxySecurityPolicy } from './interfaces.js';
|
|
3
3
|
import type { IRouteAction, IRouteConfig, IRouteMatch, IRouteTarget, ITargetMatch, IRouteUdp } from './route-types.js';
|
|
4
4
|
export type TRustHeaderMatchers = Record<string, string>;
|
|
5
5
|
export interface IRustRouteMatch extends Omit<IRouteMatch, 'headers'> {
|
|
@@ -29,6 +29,8 @@ export interface IRustRouteConfig extends Omit<IRouteConfig, 'match' | 'action'>
|
|
|
29
29
|
}
|
|
30
30
|
export interface IRustAcmeOptions extends Omit<IAcmeOptions, 'routeForwards'> {
|
|
31
31
|
}
|
|
32
|
+
export interface IRustChallengeOptions extends Required<Pick<ISmartProxyChallengeOptions, 'cookieSigningKey' | 'pendingCookieName' | 'clearanceCookieName' | 'reservedPathPrefix' | 'relaySocketPath' | 'relayTimeoutMs' | 'pendingTtlSeconds'>> {
|
|
33
|
+
}
|
|
32
34
|
export interface IRustProxyOptions {
|
|
33
35
|
routes: IRustRouteConfig[];
|
|
34
36
|
preserveSourceIp?: boolean;
|
|
@@ -58,6 +60,7 @@ export interface IRustProxyOptions {
|
|
|
58
60
|
extendedKeepAliveLifetime?: number;
|
|
59
61
|
metrics?: ISmartProxyOptions['metrics'];
|
|
60
62
|
securityPolicy?: ISmartProxySecurityPolicy;
|
|
63
|
+
challenge?: IRustChallengeOptions;
|
|
61
64
|
acme?: IRustAcmeOptions;
|
|
62
65
|
}
|
|
63
66
|
export interface IRustStatistics {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as plugins from '../../plugins.js';
|
|
2
|
-
import type { IRustCertificateStatus, IRustMetricsSnapshot, IRustProxyOptions, IRustRouteConfig, IRustStatistics } from './models/rust-types.js';
|
|
2
|
+
import type { IRustCertificateStatus, IRustChallengeOptions, IRustMetricsSnapshot, IRustProxyOptions, IRustRouteConfig, IRustStatistics } from './models/rust-types.js';
|
|
3
3
|
import type { IActiveConnectionSnapshot, IActiveConnectionSnapshotOptions, ISmartProxySecurityPolicy } from './models/interfaces.js';
|
|
4
4
|
/**
|
|
5
5
|
* Bridge between TypeScript SmartProxy and the Rust binary.
|
|
@@ -33,6 +33,7 @@ export declare class RustProxyBridge extends plugins.EventEmitter {
|
|
|
33
33
|
getCertificateStatus(routeName: string): Promise<IRustCertificateStatus | null>;
|
|
34
34
|
getListeningPorts(): Promise<number[]>;
|
|
35
35
|
setSocketHandlerRelay(socketPath: string): Promise<void>;
|
|
36
|
+
setChallengeProviderRelay(socketPath: string, options?: IRustChallengeOptions): Promise<void>;
|
|
36
37
|
addListeningPort(port: number): Promise<void>;
|
|
37
38
|
removeListeningPort(port: number): Promise<void>;
|
|
38
39
|
loadCertificate(domain: string, cert: string, key: string, ca?: string): Promise<void>;
|
|
@@ -122,6 +122,9 @@ export class RustProxyBridge extends plugins.EventEmitter {
|
|
|
122
122
|
async setSocketHandlerRelay(socketPath) {
|
|
123
123
|
await this.bridge.sendCommand('setSocketHandlerRelay', { socketPath });
|
|
124
124
|
}
|
|
125
|
+
async setChallengeProviderRelay(socketPath, options) {
|
|
126
|
+
await this.bridge.sendCommand('setChallengeProviderRelay', { socketPath, options });
|
|
127
|
+
}
|
|
125
128
|
async addListeningPort(port) {
|
|
126
129
|
await this.bridge.sendCommand('addListeningPort', { port });
|
|
127
130
|
}
|
|
@@ -135,4 +138,4 @@ export class RustProxyBridge extends plugins.EventEmitter {
|
|
|
135
138
|
await this.bridge.sendCommand('setDatagramHandlerRelay', { socketPath });
|
|
136
139
|
}
|
|
137
140
|
}
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1wcm94eS1icmlkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9wcm94aWVzL3NtYXJ0LXByb3h5L3J1c3QtcHJveHktYnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBa0NwRDs7O0dBR0c7QUFDSCxTQUFTLGNBQWM7SUFDckIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsdUJBQXVCO0lBQzlCLE1BQU0sT0FBTyxHQUEyQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3pFLE1BQU0sS0FBSyxHQUEyQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNmLE9BQU8sR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMs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
|