@antseed/cli 0.1.154 → 0.1.156
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/cli/commands/tunnel/index.d.ts +3 -0
- package/dist/cli/commands/tunnel/index.d.ts.map +1 -0
- package/dist/cli/commands/tunnel/index.js +10 -0
- package/dist/cli/commands/tunnel/index.js.map +1 -0
- package/dist/cli/commands/tunnel/paths.d.ts +4 -0
- package/dist/cli/commands/tunnel/paths.d.ts.map +1 -0
- package/dist/cli/commands/tunnel/paths.js +5 -0
- package/dist/cli/commands/tunnel/paths.js.map +1 -0
- package/dist/cli/commands/tunnel/start.d.ts +3 -0
- package/dist/cli/commands/tunnel/start.d.ts.map +1 -0
- package/dist/cli/commands/tunnel/start.js +235 -0
- package/dist/cli/commands/tunnel/start.js.map +1 -0
- package/dist/cli/commands/tunnel/status.d.ts +3 -0
- package/dist/cli/commands/tunnel/status.d.ts.map +1 -0
- package/dist/cli/commands/tunnel/status.js +39 -0
- package/dist/cli/commands/tunnel/status.js.map +1 -0
- package/dist/cli/commands/tunnel/stop.d.ts +3 -0
- package/dist/cli/commands/tunnel/stop.d.ts.map +1 -0
- package/dist/cli/commands/tunnel/stop.js +28 -0
- package/dist/cli/commands/tunnel/stop.js.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/proxy/buyer-proxy.d.ts.map +1 -1
- package/dist/proxy/buyer-proxy.js +7 -1
- package/dist/proxy/buyer-proxy.js.map +1 -1
- package/dist/proxy/buyer-proxy.test.js +112 -1
- package/dist/proxy/buyer-proxy.test.js.map +1 -1
- package/dist/proxy/conversation-identity.d.ts +3 -1
- package/dist/proxy/conversation-identity.d.ts.map +1 -1
- package/dist/proxy/conversation-identity.js +80 -7
- package/dist/proxy/conversation-identity.js.map +1 -1
- package/dist/proxy/conversation-identity.test.js +146 -0
- package/dist/proxy/conversation-identity.test.js.map +1 -1
- package/dist/proxy/conversation-store.d.ts.map +1 -1
- package/dist/proxy/conversation-store.js +34 -6
- package/dist/proxy/conversation-store.js.map +1 -1
- package/dist/proxy/conversation-store.test.js +58 -0
- package/dist/proxy/conversation-store.test.js.map +1 -1
- package/dist/system-proxy/profiles.d.ts.map +1 -1
- package/dist/system-proxy/profiles.js +4 -1
- package/dist/system-proxy/profiles.js.map +1 -1
- package/dist/system-proxy/types.d.ts +2 -1
- package/dist/system-proxy/types.d.ts.map +1 -1
- package/dist/tunnel/cloudflared.d.ts +2 -0
- package/dist/tunnel/cloudflared.d.ts.map +1 -0
- package/dist/tunnel/cloudflared.js +57 -0
- package/dist/tunnel/cloudflared.js.map +1 -0
- package/dist/tunnel/gateway.d.ts +16 -0
- package/dist/tunnel/gateway.d.ts.map +1 -0
- package/dist/tunnel/gateway.js +146 -0
- package/dist/tunnel/gateway.js.map +1 -0
- package/dist/tunnel/gateway.test.d.ts +2 -0
- package/dist/tunnel/gateway.test.d.ts.map +1 -0
- package/dist/tunnel/gateway.test.js +89 -0
- package/dist/tunnel/gateway.test.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/tunnel/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAK7D"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { registerTunnelStartCommand } from './start.js';
|
|
2
|
+
import { registerTunnelStatusCommand } from './status.js';
|
|
3
|
+
import { registerTunnelStopCommand } from './stop.js';
|
|
4
|
+
export function registerTunnelCommands(program) {
|
|
5
|
+
const tunnel = program.command('tunnel').description('Expose the buyer API through a secure public HTTPS tunnel');
|
|
6
|
+
registerTunnelStartCommand(tunnel);
|
|
7
|
+
registerTunnelStatusCommand(tunnel);
|
|
8
|
+
registerTunnelStopCommand(tunnel);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/tunnel/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAA;AAErD,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,2DAA2D,CAAC,CAAA;IACjH,0BAA0B,CAAC,MAAM,CAAC,CAAA;IAClC,2BAA2B,CAAC,MAAM,CAAC,CAAA;IACnC,yBAAyB,CAAC,MAAM,CAAC,CAAA;AACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/tunnel/paths.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAmC;AACrF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAkD;AACxG,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAyD"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
export function tunnelDir(dataDir) { return join(dataDir, 'tunnel'); }
|
|
3
|
+
export function tunnelPidFile(dataDir) { return join(tunnelDir(dataDir), 'tunnel.pid'); }
|
|
4
|
+
export function tunnelStateFile(dataDir) { return join(tunnelDir(dataDir), 'tunnel.state.json'); }
|
|
5
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../../../src/cli/commands/tunnel/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,UAAU,SAAS,CAAC,OAAe,IAAY,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA,CAAC,CAAC;AACrF,MAAM,UAAU,aAAa,CAAC,OAAe,IAAY,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,CAAA,CAAC,CAAC;AACxG,MAAM,UAAU,eAAe,CAAC,OAAe,IAAY,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAA,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/tunnel/start.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA4IxC,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CA2F7D"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { mkdir, unlink, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { spawn } from 'node:child_process';
|
|
4
|
+
import { delimiter, join } from 'node:path';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import { getGlobalOptions } from '../types.js';
|
|
8
|
+
import { setupShutdownHandler } from '../../shutdown.js';
|
|
9
|
+
import { TunnelGateway } from '../../../tunnel/gateway.js';
|
|
10
|
+
import { ensureCloudflared } from '../../../tunnel/cloudflared.js';
|
|
11
|
+
import { tunnelDir, tunnelPidFile, tunnelStateFile } from './paths.js';
|
|
12
|
+
const DEFAULT_BUYER_PORT = 8377;
|
|
13
|
+
const DEFAULT_GATEWAY_PORT = 8379;
|
|
14
|
+
function parseTunnelProvider(value) {
|
|
15
|
+
const provider = value.trim().toLowerCase();
|
|
16
|
+
if (provider === 'cloudflare' || provider === 'ngrok')
|
|
17
|
+
return provider;
|
|
18
|
+
throw new Error('Tunnel provider must be cloudflare or ngrok.');
|
|
19
|
+
}
|
|
20
|
+
function providerDisplayName(provider) {
|
|
21
|
+
return provider === 'cloudflare' ? 'Cloudflare Tunnel' : 'ngrok';
|
|
22
|
+
}
|
|
23
|
+
function providerTokenEnvironmentName(provider) {
|
|
24
|
+
return provider === 'cloudflare' ? 'CLOUDFLARED_TUNNEL_TOKEN' : 'NGROK_AUTHTOKEN';
|
|
25
|
+
}
|
|
26
|
+
function resolveTunnelToken(provider) {
|
|
27
|
+
const providerToken = process.env[providerTokenEnvironmentName(provider)];
|
|
28
|
+
return (process.env['ANTSEED_TUNNEL_TOKEN'] ?? providerToken ?? '').trim();
|
|
29
|
+
}
|
|
30
|
+
function parsePublicUrl(value, provider) {
|
|
31
|
+
if (!value) {
|
|
32
|
+
if (provider === 'cloudflare') {
|
|
33
|
+
throw new Error('ANTSEED_TUNNEL_PUBLIC_URL is required for Cloudflare Tunnel.');
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
let url;
|
|
38
|
+
try {
|
|
39
|
+
url = new URL(value);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
throw new Error('ANTSEED_TUNNEL_PUBLIC_URL must be a valid https:// URL.');
|
|
43
|
+
}
|
|
44
|
+
if (url.protocol !== 'https:') {
|
|
45
|
+
throw new Error('ANTSEED_TUNNEL_PUBLIC_URL must be an https:// URL.');
|
|
46
|
+
}
|
|
47
|
+
return url;
|
|
48
|
+
}
|
|
49
|
+
function ngrokArgs(gatewayPort, publicUrl) {
|
|
50
|
+
return [
|
|
51
|
+
'http',
|
|
52
|
+
`http://127.0.0.1:${gatewayPort}`,
|
|
53
|
+
...(publicUrl ? ['--url', publicUrl.origin] : []),
|
|
54
|
+
'--pooling-enabled',
|
|
55
|
+
'--log', 'stdout', '--log-format', 'json', '--log-level', 'info',
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
function waitForProcessStartup(child, provider) {
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
const timer = setTimeout(resolve, 1500);
|
|
61
|
+
child.once('error', (error) => {
|
|
62
|
+
clearTimeout(timer);
|
|
63
|
+
reject(error);
|
|
64
|
+
});
|
|
65
|
+
child.once('exit', (code) => {
|
|
66
|
+
clearTimeout(timer);
|
|
67
|
+
reject(new Error(`${provider} tunnel exited with code ${String(code)}`));
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function errorMessage(error) {
|
|
72
|
+
return error instanceof Error ? error.message : String(error);
|
|
73
|
+
}
|
|
74
|
+
function findHttpsUrl(value) {
|
|
75
|
+
if (typeof value === 'string' && value.startsWith('https://'))
|
|
76
|
+
return value;
|
|
77
|
+
if (!value || typeof value !== 'object')
|
|
78
|
+
return null;
|
|
79
|
+
for (const [key, nested] of Object.entries(value)) {
|
|
80
|
+
if ((key === 'url' || key === 'public_url') && typeof nested === 'string' && nested.startsWith('https://'))
|
|
81
|
+
return nested;
|
|
82
|
+
const found = findHttpsUrl(nested);
|
|
83
|
+
if (found)
|
|
84
|
+
return found;
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
function waitForNgrokUrl(child) {
|
|
89
|
+
return new Promise((resolve, reject) => {
|
|
90
|
+
let buffer = '';
|
|
91
|
+
let settled = false;
|
|
92
|
+
const finish = (error, url) => {
|
|
93
|
+
if (settled)
|
|
94
|
+
return;
|
|
95
|
+
settled = true;
|
|
96
|
+
clearTimeout(timer);
|
|
97
|
+
child.stdout?.off('data', onData);
|
|
98
|
+
child.stderr?.off('data', onData);
|
|
99
|
+
child.off('error', onError);
|
|
100
|
+
child.off('exit', onExit);
|
|
101
|
+
if (error)
|
|
102
|
+
reject(error);
|
|
103
|
+
else
|
|
104
|
+
resolve(url);
|
|
105
|
+
};
|
|
106
|
+
const onData = (chunk) => {
|
|
107
|
+
buffer += chunk.toString();
|
|
108
|
+
const lines = buffer.split(/\r?\n/);
|
|
109
|
+
buffer = lines.pop() ?? '';
|
|
110
|
+
for (const line of lines) {
|
|
111
|
+
try {
|
|
112
|
+
const found = findHttpsUrl(JSON.parse(line));
|
|
113
|
+
if (found) {
|
|
114
|
+
finish(null, new URL(found));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch { /* wait for the structured startup line */ }
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
const onError = (error) => finish(error);
|
|
122
|
+
const onExit = (code) => finish(new Error(`ngrok tunnel exited with code ${String(code)}`));
|
|
123
|
+
const timer = setTimeout(() => finish(new Error('Timed out waiting for ngrok to publish its HTTPS URL.')), 15_000);
|
|
124
|
+
child.stdout?.on('data', onData);
|
|
125
|
+
child.stderr?.on('data', onData);
|
|
126
|
+
child.once('error', onError);
|
|
127
|
+
child.once('exit', onExit);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
function resolveNgrokBinary() {
|
|
131
|
+
const configured = process.env['ANTSEED_NGROK_BIN']?.trim();
|
|
132
|
+
if (configured)
|
|
133
|
+
return configured;
|
|
134
|
+
const executable = process.platform === 'win32' ? 'ngrok.exe' : 'ngrok';
|
|
135
|
+
const candidates = [
|
|
136
|
+
...(process.env.PATH ?? '').split(delimiter).filter(Boolean).map((directory) => join(directory, executable)),
|
|
137
|
+
...(process.platform === 'darwin' ? ['/opt/homebrew/bin/ngrok', '/usr/local/bin/ngrok'] : []),
|
|
138
|
+
];
|
|
139
|
+
const found = candidates.find((candidate) => existsSync(candidate));
|
|
140
|
+
if (found)
|
|
141
|
+
return found;
|
|
142
|
+
throw new Error('ngrok CLI was not found. Install ngrok or set ANTSEED_NGROK_BIN.');
|
|
143
|
+
}
|
|
144
|
+
export function registerTunnelStartCommand(cmd) {
|
|
145
|
+
cmd
|
|
146
|
+
.command('start')
|
|
147
|
+
.description('Expose the local buyer API through an authenticated HTTPS tunnel')
|
|
148
|
+
.option('--provider <provider>', 'Tunnel provider: cloudflare or ngrok')
|
|
149
|
+
.option('--buyer-port <number>', 'Local buyer proxy port', String(DEFAULT_BUYER_PORT))
|
|
150
|
+
.option('--gateway-port <number>', 'Local authenticated gateway port', String(DEFAULT_GATEWAY_PORT))
|
|
151
|
+
.action(async (options) => {
|
|
152
|
+
const dataDir = getGlobalOptions(cmd).dataDir;
|
|
153
|
+
const buyerPort = parseInt(options.buyerPort, 10) || DEFAULT_BUYER_PORT;
|
|
154
|
+
const gatewayPort = parseInt(options.gatewayPort, 10) || DEFAULT_GATEWAY_PORT;
|
|
155
|
+
const provider = parseTunnelProvider(options.provider ?? process.env['ANTSEED_TUNNEL_PROVIDER'] ?? 'cloudflare');
|
|
156
|
+
const tunnelToken = resolveTunnelToken(provider);
|
|
157
|
+
const configuredPublicUrl = process.env['ANTSEED_TUNNEL_PUBLIC_URL']?.trim() ?? '';
|
|
158
|
+
const apiKey = process.env['ANTSEED_TUNNEL_API_KEY']?.trim() ?? '';
|
|
159
|
+
if (!tunnelToken) {
|
|
160
|
+
throw new Error(`Set ${providerTokenEnvironmentName(provider)} before starting the tunnel.`);
|
|
161
|
+
}
|
|
162
|
+
let publicUrl = parsePublicUrl(configuredPublicUrl, provider);
|
|
163
|
+
if (apiKey.length < 16) {
|
|
164
|
+
throw new Error('ANTSEED_TUNNEL_API_KEY must be at least 16 characters.');
|
|
165
|
+
}
|
|
166
|
+
const gateway = new TunnelGateway({
|
|
167
|
+
buyerPort,
|
|
168
|
+
apiKey,
|
|
169
|
+
listenPort: gatewayPort,
|
|
170
|
+
onLog: (message) => process.stderr.write(`[tunnel] ${message}\n`),
|
|
171
|
+
});
|
|
172
|
+
const spinner = ora('Starting authenticated API gateway...').start();
|
|
173
|
+
await gateway.start();
|
|
174
|
+
let tunnelProcess = null;
|
|
175
|
+
try {
|
|
176
|
+
const binary = provider === 'cloudflare'
|
|
177
|
+
? await ensureCloudflared(dataDir)
|
|
178
|
+
: resolveNgrokBinary();
|
|
179
|
+
const args = provider === 'cloudflare'
|
|
180
|
+
? ['tunnel', '--no-autoupdate', 'run']
|
|
181
|
+
: ngrokArgs(gatewayPort, publicUrl);
|
|
182
|
+
const tunnelEnvironment = provider === 'cloudflare'
|
|
183
|
+
? { TUNNEL_TOKEN: tunnelToken }
|
|
184
|
+
: { NGROK_AUTHTOKEN: tunnelToken };
|
|
185
|
+
tunnelProcess = spawn(binary, args, {
|
|
186
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
187
|
+
env: {
|
|
188
|
+
...process.env,
|
|
189
|
+
...tunnelEnvironment,
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
const ngrokUrlPromise = provider === 'ngrok' ? waitForNgrokUrl(tunnelProcess) : null;
|
|
193
|
+
tunnelProcess.stdout?.pipe(process.stdout);
|
|
194
|
+
tunnelProcess.stderr?.pipe(process.stderr);
|
|
195
|
+
if (ngrokUrlPromise) {
|
|
196
|
+
publicUrl = await ngrokUrlPromise;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
await waitForProcessStartup(tunnelProcess, provider);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
await gateway.stop();
|
|
204
|
+
spinner.fail(chalk.red(`Could not start ${providerDisplayName(provider)}: ${errorMessage(error)}`));
|
|
205
|
+
process.exitCode = 1;
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
if (!publicUrl)
|
|
209
|
+
throw new Error('Tunnel provider did not publish a public URL.');
|
|
210
|
+
const baseUrl = `${publicUrl.toString().replace(/\/+$/, '')}/v1`;
|
|
211
|
+
await mkdir(tunnelDir(dataDir), { recursive: true });
|
|
212
|
+
await writeFile(tunnelPidFile(dataDir), String(process.pid), 'utf8');
|
|
213
|
+
await writeFile(tunnelStateFile(dataDir), JSON.stringify({
|
|
214
|
+
running: true,
|
|
215
|
+
pid: process.pid,
|
|
216
|
+
provider,
|
|
217
|
+
buyerPort,
|
|
218
|
+
gatewayPort,
|
|
219
|
+
publicUrl: publicUrl.toString(),
|
|
220
|
+
baseUrl,
|
|
221
|
+
startedAt: Date.now(),
|
|
222
|
+
}), 'utf8');
|
|
223
|
+
spinner.succeed(chalk.green('Public HTTPS tunnel is running'));
|
|
224
|
+
console.log(`${chalk.bold('Base URL:')} ${baseUrl}`);
|
|
225
|
+
console.log(chalk.dim('Use the same ANTSEED_TUNNEL_API_KEY as the client API key.'));
|
|
226
|
+
setupShutdownHandler(async () => {
|
|
227
|
+
tunnelProcess?.kill('SIGTERM');
|
|
228
|
+
await gateway.stop();
|
|
229
|
+
await unlink(tunnelPidFile(dataDir)).catch(() => undefined);
|
|
230
|
+
await unlink(tunnelStateFile(dataDir)).catch(() => undefined);
|
|
231
|
+
console.log(chalk.dim('Public HTTPS tunnel stopped.'));
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/cli/commands/tunnel/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/tunnel/status.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASxC,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAqB9D"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { getGlobalOptions } from '../types.js';
|
|
4
|
+
import { tunnelStateFile } from './paths.js';
|
|
5
|
+
function isProcessAlive(pid) {
|
|
6
|
+
try {
|
|
7
|
+
process.kill(pid, 0);
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function registerTunnelStatusCommand(cmd) {
|
|
15
|
+
cmd
|
|
16
|
+
.command('status')
|
|
17
|
+
.description('Show public HTTPS tunnel status')
|
|
18
|
+
.option('--json', 'Print machine-readable JSON', false)
|
|
19
|
+
.action(async (options) => {
|
|
20
|
+
const dataDir = getGlobalOptions(cmd).dataDir;
|
|
21
|
+
let state = { running: false };
|
|
22
|
+
try {
|
|
23
|
+
state = JSON.parse(await readFile(tunnelStateFile(dataDir), 'utf8'));
|
|
24
|
+
const pid = Number(state['pid']);
|
|
25
|
+
state.running = Number.isInteger(pid) && pid > 0 && isProcessAlive(pid);
|
|
26
|
+
}
|
|
27
|
+
catch { /* not configured */ }
|
|
28
|
+
if (options.json) {
|
|
29
|
+
console.log(JSON.stringify(state));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
console.log(`Tunnel: ${state.running ? chalk.green('running') : chalk.dim('stopped')}`);
|
|
33
|
+
if (typeof state['provider'] === 'string')
|
|
34
|
+
console.log(`Provider: ${state['provider']}`);
|
|
35
|
+
if (state.running && typeof state['baseUrl'] === 'string')
|
|
36
|
+
console.log(`Base URL: ${state['baseUrl']}`);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/cli/commands/tunnel/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAA;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAA;IAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,GAAY;IACtD,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iCAAiC,CAAC;SAC9C,MAAM,CAAC,QAAQ,EAAE,6BAA6B,EAAE,KAAK,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAA;QAC7C,IAAI,KAAK,GAA4B,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;QACvD,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAA4B,CAAA;YAC/F,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;YAChC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,CAAA;QACzE,CAAC;QAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;YAClC,OAAM;QACR,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QACvF,IAAI,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QACxF,IAAI,KAAK,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IACzG,CAAC,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/tunnel/stop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKxC,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAkB5D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { readFile, unlink } from 'node:fs/promises';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { getGlobalOptions } from '../types.js';
|
|
4
|
+
import { tunnelPidFile, tunnelStateFile } from './paths.js';
|
|
5
|
+
export function registerTunnelStopCommand(cmd) {
|
|
6
|
+
cmd
|
|
7
|
+
.command('stop')
|
|
8
|
+
.description('Stop the public HTTPS tunnel')
|
|
9
|
+
.action(async () => {
|
|
10
|
+
const dataDir = getGlobalOptions(cmd).dataDir;
|
|
11
|
+
try {
|
|
12
|
+
const pid = parseInt((await readFile(tunnelPidFile(dataDir), 'utf8')).trim(), 10);
|
|
13
|
+
if (Number.isFinite(pid) && pid > 0)
|
|
14
|
+
process.kill(pid, 'SIGTERM');
|
|
15
|
+
console.log(chalk.green('Tunnel stop requested.'));
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
if (error.code !== 'ESRCH' && error.code !== 'ENOENT')
|
|
19
|
+
throw error;
|
|
20
|
+
console.log(chalk.dim('Tunnel is not running.'));
|
|
21
|
+
}
|
|
22
|
+
finally {
|
|
23
|
+
await unlink(tunnelPidFile(dataDir)).catch(() => undefined);
|
|
24
|
+
await unlink(tunnelStateFile(dataDir)).catch(() => undefined);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../../src/cli/commands/tunnel/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE3D,MAAM,UAAU,yBAAyB,CAAC,GAAY;IACpD,GAAG;SACA,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAA;QAC7C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;YACjF,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;YACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAA;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,OAAO,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAA;YACxH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAA;QAClD,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YAC3D,MAAM,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAC/D,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -13,6 +13,7 @@ import { registerDepositAlias } from './commands/buyer/deposit.js';
|
|
|
13
13
|
import { registerMetricsCommand } from './commands/metrics.js';
|
|
14
14
|
import { registerWrappedToolCommands } from './commands/wrapped-tools.js';
|
|
15
15
|
import { registerSystemProxyCommands } from './commands/system-proxy/index.js';
|
|
16
|
+
import { registerTunnelCommands } from './commands/tunnel/index.js';
|
|
16
17
|
loadEnvFromFiles();
|
|
17
18
|
import pkg from '../../package.json' with { type: 'json' };
|
|
18
19
|
const version = pkg.version;
|
|
@@ -36,5 +37,6 @@ registerDepositAlias(program);
|
|
|
36
37
|
registerMetricsCommand(program);
|
|
37
38
|
registerWrappedToolCommands(program);
|
|
38
39
|
registerSystemProxyCommands(program);
|
|
40
|
+
registerTunnelCommands(program);
|
|
39
41
|
program.parse(process.argv);
|
|
40
42
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,gBAAgB,EAAE,CAAC;AAEnB,OAAO,GAAG,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AAE5B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,6BAA6B,CAAC;KAC1C,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,qBAAqB,EAAE,4EAA4E,CAAC;KAC3G,MAAM,CAAC,mBAAmB,EAAE,oFAAoF,CAAC;KACjH,MAAM,CAAC,eAAe,EAAE,wBAAwB,EAAE,KAAK,CAAC,CAAC;AAE5D,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,2BAA2B,CAAC,OAAO,CAAC,CAAC;AACrC,2BAA2B,CAAC,OAAO,CAAC,CAAC;AACrC,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buyer-proxy.d.ts","sourceRoot":"","sources":["../../src/proxy/buyer-proxy.ts"],"names":[],"mappings":"AAKA,OAAO,EAYL,KAAK,WAAW,EAGhB,KAAK,QAAQ,EAEb,KAAK,uBAAuB,EAI5B,KAAK,sBAAsB,EAE3B,KAAK,mBAAmB,EACzB,MAAM,eAAe,CAAA;AA2DtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAc1D,OAAO,EAAiF,KAAK,cAAc,EAAE,KAAK,WAAW,EAAsB,MAAM,wBAAwB,CAAA;AAIjL,OAAO,EAAE,8BAA8B,EAAE,KAAK,2BAA2B,EAAE,MAAM,cAAc,CAAA;AAC/F,OAAO,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE3I;;;;;GAKG;AACH,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,kBAAkB,CAAA;AAQtG,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,WAAW,CAAA;IACjB,4FAA4F;IAC5F,OAAO,EAAE,MAAM,CAAA;IACf,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,uBAAuB,CAAA;IAC5C,kGAAkG;IAClG,2BAA2B,CAAC,EAAE,MAAM,CAAA;IACpC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;
|
|
1
|
+
{"version":3,"file":"buyer-proxy.d.ts","sourceRoot":"","sources":["../../src/proxy/buyer-proxy.ts"],"names":[],"mappings":"AAKA,OAAO,EAYL,KAAK,WAAW,EAGhB,KAAK,QAAQ,EAEb,KAAK,uBAAuB,EAI5B,KAAK,sBAAsB,EAE3B,KAAK,mBAAmB,EACzB,MAAM,eAAe,CAAA;AA2DtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAc1D,OAAO,EAAiF,KAAK,cAAc,EAAE,KAAK,WAAW,EAAsB,MAAM,wBAAwB,CAAA;AAIjL,OAAO,EAAE,8BAA8B,EAAE,KAAK,2BAA2B,EAAE,MAAM,cAAc,CAAA;AAC/F,OAAO,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE3I;;;;;GAKG;AACH,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,kBAAkB,CAAA;AAQtG,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,WAAW,CAAA;IACjB,4FAA4F;IAC5F,OAAO,EAAE,MAAM,CAAA;IACf,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,uBAAuB,CAAA;IAC5C,kGAAkG;IAClG,2BAA2B,CAAC,EAAE,MAAM,CAAA;IACpC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AA2ED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAQjF;AA8JD,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,sBAAsB,GAAG,sBAAsB,CAoCrG;AAmED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,OAAO,EACf,KAAK,GAAE,MAAmB,EAC1B,QAAQ,GAAE,MAA6B,GACtC,QAAQ,EAAE,CA4HZ;AAED;;;;;;GAMG;AAEH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,EACtC,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,GAClB,WAAW,CAeb;AAMD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY7E;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,SAA6B,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB/G;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB3H;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,OAAO,CAAC,kBAAkB,CAAQ;IAClC,OAAO,CAAC,mBAAmB,CAAQ;IACnC,OAAO,CAAC,WAAW,CAAe;IAClC;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,cAAc,CAAoB;IAC1C;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB,CAAI;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmC;IAChE,OAAO,CAAC,mBAAmB,CAA6C;IACxE,OAAO,CAAC,oBAAoB,CAA6C;IACzE,OAAO,CAAC,mBAAmB,CAAgC;IAE3D,OAAO,CAAC,gBAAgB,CAAmC;IAE3D,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,qBAAqB,CAAI;IACjC,OAAO,CAAC,mBAAmB,CAAI;IAC/B,OAAO,CAAC,mBAAmB,CAAmC;IAC9D,OAAO,CAAC,sBAAsB,CAAI;IAClC,OAAO,CAAC,YAAY,CAAI;IACxB;wFACoF;IACpF,OAAO,CAAC,4BAA4B,CAAI;IACxC,OAAO,CAAC,6BAA6B,CAAI;IACzC,OAAO,CAAC,gBAAgB,CAA8C;IACtE;;;;OAIG;IACH,OAAO,CAAC,WAAW,CAA0C;IAC7D,4DAA4D;IAC5D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;IAC5D,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyC;IACxE;;;;OAIG;IACH,OAAO,CAAC,eAAe,CAA8B;IACrD,oEAAoE;IACpE,OAAO,CAAC,sBAAsB,CAA2C;IAEzE;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA0D;gBAEpF,MAAM,EAAE,gBAAgB;IA+DpC,yEAAyE;IACzE,OAAO,CAAC,eAAe;IAiBvB;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IASjC;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,EAAE,aAAa,GAAE,2BAA2B,GAAG,IAAW,GAAG,IAAI;IAKjH,wEAAwE;IACxE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAIxD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAmCd,0BAA0B;IA4BlC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC3B,OAAO,CAAC,eAAe;YAqBT,uBAAuB;IAkBrC,OAAO,CAAC,gBAAgB;YAiBV,yBAAyB;IAmBvC,+EAA+E;IAC/E,OAAO,CAAC,kBAAkB;IAI1B,0FAA0F;IAC1F,OAAO,CAAC,eAAe;YAcT,eAAe;IAe7B,OAAO,CAAC,+BAA+B;IAIvC,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,aAAa;IA4CrB,OAAO,CAAC,oBAAoB;IAoE5B;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAsC1B;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;IAkCjC;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;;;;;;;OAQG;IACH,OAAO,CAAC,uBAAuB;IAkB/B;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAc9B,oFAAoF;YACtE,yBAAyB;YASzB,yBAAyB;YASzB,gBAAgB;YAiChB,SAAS;IA2BvB,OAAO,CAAC,+BAA+B;YAsBzB,mBAAmB;IA0ejC;;;;;OAKG;YACW,oBAAoB;YAsDpB,cAAc;YAuqBd,WAAW;IAkBzB,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,uBAAuB;IAoB/B,OAAO,CAAC,6BAA6B;IA4BrC,OAAO,CAAC,YAAY;IASpB;;;;OAIG;YACW,eAAe;CA0Y9B"}
|
|
@@ -26,7 +26,13 @@ const WATCHER_ABSENCE_ERRORS = {
|
|
|
26
26
|
'no-deposit-relay': 'Deposit watcher unavailable — this chain has no deposit relay.',
|
|
27
27
|
'external-daemon': 'Deposit watcher unavailable — another daemon owns the proxy port and runs the watcher.',
|
|
28
28
|
};
|
|
29
|
-
|
|
29
|
+
// 401/403 are included: sellers relay upstream auth failures (revoked or
|
|
30
|
+
// expired key, region/WAF block) that are specific to that seller's upstream
|
|
31
|
+
// account, so another peer serving the same model can usually complete the
|
|
32
|
+
// request. 402 stays terminal (buyer payment flow), and 404 stays terminal
|
|
33
|
+
// because model_not_found already has dedicated unadvertise handling while a
|
|
34
|
+
// generic 404 would repeat identically on every peer.
|
|
35
|
+
const RETRYABLE_STATUS_CODES = new Set([401, 403, 408, 429, 500, 502, 503, 504]);
|
|
30
36
|
const MODEL_RATE_LIMIT_MAX_ATTEMPTS_PER_PEER = 3;
|
|
31
37
|
const MODEL_RATE_LIMIT_RETRY_DELAYS_MS = [250, 750];
|
|
32
38
|
const MODEL_RATE_LIMIT_MAX_RETRY_AFTER_MS = 2_000;
|