@stanleysun233/oneproxy-cli 1.0.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.
Files changed (44) hide show
  1. package/bin/onep.js +2 -0
  2. package/dist/commands.d.ts +15 -0
  3. package/dist/commands.js +216 -0
  4. package/dist/commands.js.map +1 -0
  5. package/dist/control-plane.d.ts +41 -0
  6. package/dist/control-plane.js +284 -0
  7. package/dist/control-plane.js.map +1 -0
  8. package/dist/daemon/http-proxy.d.ts +11 -0
  9. package/dist/daemon/http-proxy.js +148 -0
  10. package/dist/daemon/http-proxy.js.map +1 -0
  11. package/dist/daemon/lifecycle.d.ts +129 -0
  12. package/dist/daemon/lifecycle.js +350 -0
  13. package/dist/daemon/lifecycle.js.map +1 -0
  14. package/dist/daemon/port-selection.d.ts +9 -0
  15. package/dist/daemon/port-selection.js +61 -0
  16. package/dist/daemon/port-selection.js.map +1 -0
  17. package/dist/daemon/router.d.ts +35 -0
  18. package/dist/daemon/router.js +105 -0
  19. package/dist/daemon/router.js.map +1 -0
  20. package/dist/doctor.d.ts +29 -0
  21. package/dist/doctor.js +178 -0
  22. package/dist/doctor.js.map +1 -0
  23. package/dist/init.d.ts +2 -0
  24. package/dist/init.js +199 -0
  25. package/dist/init.js.map +1 -0
  26. package/dist/main.d.ts +5 -0
  27. package/dist/main.js +130 -0
  28. package/dist/main.js.map +1 -0
  29. package/dist/profile.d.ts +2 -0
  30. package/dist/profile.js +53 -0
  31. package/dist/profile.js.map +1 -0
  32. package/dist/session-env.d.ts +8 -0
  33. package/dist/session-env.js +219 -0
  34. package/dist/session-env.js.map +1 -0
  35. package/dist/shell.d.ts +3 -0
  36. package/dist/shell.js +50 -0
  37. package/dist/shell.js.map +1 -0
  38. package/dist/ssh.d.ts +19 -0
  39. package/dist/ssh.js +83 -0
  40. package/dist/ssh.js.map +1 -0
  41. package/dist/storage.d.ts +115 -0
  42. package/dist/storage.js +224 -0
  43. package/dist/storage.js.map +1 -0
  44. package/package.json +27 -0
package/bin/onep.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '../dist/main.js';
@@ -0,0 +1,15 @@
1
+ import type { CliContext } from './main.ts';
2
+ type ErrorResult = {
3
+ error: {
4
+ code: string;
5
+ message: string;
6
+ details?: Record<string, unknown>;
7
+ };
8
+ };
9
+ export declare function writeError(error: ErrorResult['error'], context: CliContext): void;
10
+ export declare function statusCommand(_args: string[], context: CliContext): Promise<void>;
11
+ export declare function overrideCommand(args: string[], context: CliContext): Promise<void>;
12
+ export declare function routeCommand(args: string[], context: CliContext): Promise<void>;
13
+ export declare function testCommand(args: string[], context: CliContext): Promise<void>;
14
+ export declare function doctor(_args: string[], context: CliContext): Promise<number>;
15
+ export {};
@@ -0,0 +1,216 @@
1
+ import * as http from 'node:http';
2
+ import { ensureSessionProxyBindings } from "./session-env.js";
3
+ import { processIsRunning, readConfig, readDaemonMetadata, readState, readTokens, writeConfig, } from "./storage.js";
4
+ function write(value, context) {
5
+ if (context.json) {
6
+ process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
7
+ return;
8
+ }
9
+ process.stdout.write(`${String(value)}\n`);
10
+ }
11
+ export function writeError(error, context) {
12
+ if (context.json) {
13
+ process.stderr.write(`${JSON.stringify({ error }, null, 2)}\n`);
14
+ return;
15
+ }
16
+ process.stderr.write(`Error: ${error.message}\n`);
17
+ }
18
+ function normalizeHost(host) {
19
+ return host.trim().toLowerCase();
20
+ }
21
+ function parseTarget(raw) {
22
+ const withScheme = /^[a-z][a-z0-9+.-]*:\/\//i.test(raw) ? raw : `http://${raw}`;
23
+ const url = new URL(withScheme);
24
+ if (!url.hostname) {
25
+ throw Object.assign(new Error(`Invalid target: ${raw}`), { code: 'INVALID_TARGET' });
26
+ }
27
+ const protocol = url.protocol.replace(':', '');
28
+ const defaultPort = protocol === 'https' ? 443 : protocol === 'ssh' ? 22 : 80;
29
+ return {
30
+ target: raw,
31
+ host: normalizeHost(url.hostname),
32
+ port: url.port ? Number(url.port) : defaultPort,
33
+ protocol
34
+ };
35
+ }
36
+ async function postIpc(daemon, path, body) {
37
+ if (!daemon?.bindings.ipcPort || !processIsRunning(daemon.pid)) {
38
+ throw Object.assign(new Error('Daemon is unavailable'), { code: 'DAEMON_UNAVAILABLE' });
39
+ }
40
+ const payload = JSON.stringify(body);
41
+ return new Promise((resolve, reject) => {
42
+ const req = http.request({
43
+ host: daemon.bindings.host,
44
+ port: daemon.bindings.ipcPort,
45
+ path,
46
+ method: 'POST',
47
+ headers: {
48
+ 'Content-Type': 'application/json',
49
+ 'Content-Length': Buffer.byteLength(payload)
50
+ },
51
+ timeout: 1000
52
+ }, (res) => {
53
+ const chunks = [];
54
+ res.on('data', (chunk) => chunks.push(chunk));
55
+ res.on('end', () => {
56
+ resolve(JSON.parse(Buffer.concat(chunks).toString('utf8')));
57
+ });
58
+ });
59
+ req.on('error', reject);
60
+ req.on('timeout', () => {
61
+ req.destroy();
62
+ reject(Object.assign(new Error('Daemon IPC request timed out'), { code: 'DAEMON_UNAVAILABLE' }));
63
+ });
64
+ req.end(payload);
65
+ });
66
+ }
67
+ function routeText(route) {
68
+ const lines = [
69
+ `Target: ${route.target}`,
70
+ `Host: ${route.host}:${route.port}`,
71
+ `Mode: ${route.mode}`,
72
+ `Matched: ${route.matched.source}${route.matched.pattern ? ` ${route.matched.pattern}` : ''}`,
73
+ `Tenant: ${route.tenant.name || route.tenant.id || 'none'}`,
74
+ `Group: ${route.group.name || route.group.id || 'none'}`
75
+ ];
76
+ if (route.topology) {
77
+ lines.push(`Entry: ${route.topology.entryHost}:${route.topology.entryPort} (${route.topology.protocol})`);
78
+ }
79
+ return lines.join('\n');
80
+ }
81
+ export async function statusCommand(_args, context) {
82
+ const [config, tokens, state, daemon] = await Promise.all([readConfig(), readTokens(), readState(), readDaemonMetadata()]);
83
+ const running = Boolean(daemon?.pid && processIsRunning(daemon.pid));
84
+ const ports = running && daemon ? daemon.bindings : null;
85
+ const result = {
86
+ account: tokens?.account ?? null,
87
+ controlPlane: {
88
+ url: config.controlPlaneUrl ?? null,
89
+ reachable: Boolean(config.controlPlaneUrl)
90
+ },
91
+ tenant: {
92
+ id: config.activeTenantId ?? null,
93
+ name: null
94
+ },
95
+ group: {
96
+ id: config.activeGroupId ?? state.bootstrap?.groupId ?? null,
97
+ name: state.routeGroups.find((group) => group.id === config.activeGroupId)?.name ?? null
98
+ },
99
+ daemon: {
100
+ running,
101
+ pid: running ? daemon?.pid : null,
102
+ startedAt: running ? daemon?.startedAt : null,
103
+ lastHeartbeatAt: running ? daemon?.lastHeartbeatAt : null
104
+ },
105
+ localPorts: {
106
+ http: ports?.httpPort ?? null,
107
+ https: ports?.httpsPort ?? null,
108
+ ipc: ports?.ipcPort ?? null
109
+ },
110
+ portSelection: daemon && running ? daemon.portSelection ?? null : null,
111
+ policyRevision: state.policyRevision ?? daemon?.policyRevision ?? null,
112
+ tokens: {
113
+ accessTokenExpiresAt: tokens?.accessTokenExpiresAt ?? null,
114
+ refreshTokenExpiresAt: tokens?.refreshTokenExpiresAt ?? null,
115
+ proxyTokenExpiresAt: tokens?.proxyTokenExpiresAt ?? null
116
+ },
117
+ overrides: {
118
+ directCount: config.overrides.direct.length,
119
+ proxyCount: config.overrides.proxy.length
120
+ }
121
+ };
122
+ if (context.json) {
123
+ write(result, context);
124
+ return;
125
+ }
126
+ write([
127
+ `Account: ${tokens?.account?.email || tokens?.account?.account || tokens?.account?.id || 'not logged in'}`,
128
+ `Control plane: ${config.controlPlaneUrl || 'not configured'}`,
129
+ `Tenant: ${result.tenant.id || 'none'}`,
130
+ `Group: ${result.group.name || result.group.id || 'none'}`,
131
+ `Daemon: ${running ? `running pid ${daemon?.pid}` : 'not running'}`,
132
+ `Ports: http=${result.localPorts.http || 'unset'} https=${result.localPorts.https || 'unset'}`,
133
+ `Policy: ${result.policyRevision || 'none'}`,
134
+ `Overrides: direct=${result.overrides.directCount} proxy=${result.overrides.proxyCount}`
135
+ ].join('\n'), context);
136
+ }
137
+ export async function overrideCommand(args, context) {
138
+ const config = await readConfig();
139
+ const action = args[0];
140
+ if (action === 'list') {
141
+ write(context.json ? { overrides: config.overrides } : `Direct:\n${config.overrides.direct.join('\n')}\nProxy:\n${config.overrides.proxy.join('\n')}`, context);
142
+ return;
143
+ }
144
+ if (action === 'clear') {
145
+ await writeConfig({ ...config, overrides: { direct: [], proxy: [] } });
146
+ write(context.json ? { cleared: true } : 'Overrides cleared.', context);
147
+ return;
148
+ }
149
+ if (action === 'remove') {
150
+ const host = normalizeHost(args[1] || '');
151
+ if (!host) {
152
+ throw Object.assign(new Error('override remove requires a host.'), { code: 'COMMAND_NOT_FOUND', exitCode: 2 });
153
+ }
154
+ await writeConfig({
155
+ ...config,
156
+ overrides: {
157
+ direct: config.overrides.direct.filter((item) => item !== host),
158
+ proxy: config.overrides.proxy.filter((item) => item !== host)
159
+ }
160
+ });
161
+ write(context.json ? { removed: host } : `Removed override: ${host}`, context);
162
+ return;
163
+ }
164
+ const mode = action;
165
+ const subaction = args[1];
166
+ const host = normalizeHost(args[2] || '');
167
+ if ((mode !== 'direct' && mode !== 'proxy') || subaction !== 'add' || !host) {
168
+ throw Object.assign(new Error('override requires list, clear, remove <host>, direct add <host>, or proxy add <host>.'), {
169
+ code: 'COMMAND_NOT_FOUND',
170
+ exitCode: 2
171
+ });
172
+ }
173
+ const next = {
174
+ direct: config.overrides.direct.filter((item) => item !== host),
175
+ proxy: config.overrides.proxy.filter((item) => item !== host)
176
+ };
177
+ next[mode] = [...next[mode], host];
178
+ await writeConfig({ ...config, overrides: next });
179
+ write(context.json ? { added: { mode, host } } : `Added ${mode} override: ${host}`, context);
180
+ }
181
+ export async function routeCommand(args, context) {
182
+ const target = args[0];
183
+ if (!target) {
184
+ throw Object.assign(new Error('route requires a URL or host.'), { code: 'INVALID_TARGET', exitCode: 2 });
185
+ }
186
+ await ensureSessionProxyBindings();
187
+ const daemon = await readDaemonMetadata();
188
+ const route = await postIpc(daemon, '/v1/route', { target, protocol: parseTarget(target).protocol });
189
+ write(context.json ? route : routeText(route), context);
190
+ }
191
+ export async function testCommand(args, context) {
192
+ const target = args[0];
193
+ if (!target) {
194
+ throw Object.assign(new Error('test requires a URL or host.'), { code: 'INVALID_TARGET', exitCode: 2 });
195
+ }
196
+ await ensureSessionProxyBindings();
197
+ const daemon = await readDaemonMetadata();
198
+ const result = await postIpc(daemon, '/v1/probe', { target });
199
+ if (context.json) {
200
+ write(result, context);
201
+ return;
202
+ }
203
+ write(`${routeText(result.route)}\nProbes:\n${result.probes.map((probe) => `${probe.name}: ${probe.status} ${probe.message}`).join('\n')}`, context);
204
+ }
205
+ export async function doctor(_args, context) {
206
+ const { runDoctor } = await import("./doctor.js");
207
+ const result = await runDoctor();
208
+ if (context.json) {
209
+ write(result, context);
210
+ }
211
+ else {
212
+ write(result.checks.map((check) => `${check.status}\t${check.name}\t${check.message}`).join('\n'), context);
213
+ }
214
+ return result.summary.failed ? 3 : 0;
215
+ }
216
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { CliContext } from './main.ts';
2
+ import { type OneProxyTokens, type RouteRule } from './storage.ts';
3
+ type ExtensionBootstrap = {
4
+ policyRevision?: string;
5
+ fetchedAt?: string;
6
+ proxyToken?: string;
7
+ proxyTokenExpiresAt?: string;
8
+ groups?: Array<{
9
+ id: string;
10
+ name: string;
11
+ entryNodeId?: string;
12
+ proxyHost?: string;
13
+ proxyPort?: number;
14
+ proxyScheme?: string;
15
+ proxyDefault?: boolean;
16
+ proxyHosts?: string[];
17
+ directHosts?: string[];
18
+ routes?: Array<{
19
+ id: string;
20
+ matchType: string;
21
+ matchValue: string;
22
+ actionType: string;
23
+ topology?: Array<{
24
+ id: string;
25
+ publicHost?: string;
26
+ publicPort?: number;
27
+ mode?: string;
28
+ }>;
29
+ }>;
30
+ }>;
31
+ };
32
+ export declare function login(args: string[], context: CliContext): Promise<void>;
33
+ export declare function logout(_args: string[], context: CliContext): Promise<void>;
34
+ export declare function refreshSession(): Promise<OneProxyTokens>;
35
+ export declare function tenantList(_args: string[], context: CliContext): Promise<void>;
36
+ export declare function tenantUse(args: string[], context: CliContext): Promise<void>;
37
+ export declare function groupList(_args: string[], context: CliContext): Promise<void>;
38
+ export declare function groupUse(args: string[], context: CliContext): Promise<void>;
39
+ export declare function routeRulesFromBootstrap(group: NonNullable<ExtensionBootstrap['groups']>[number]): RouteRule[];
40
+ export declare function sync(_args: string[], context: CliContext): Promise<void>;
41
+ export {};
@@ -0,0 +1,284 @@
1
+ import * as readline from 'node:readline/promises';
2
+ import { stdin as input, stdout as output } from 'node:process';
3
+ import { clearTokens, activeProfileName, addProfile, readConfig, readState, readTokens, writeConfig, writeState, writeTokens, useProfile } from "./storage.js";
4
+ function print(value, context) {
5
+ if (context.json) {
6
+ process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
7
+ return;
8
+ }
9
+ if (Array.isArray(value)) {
10
+ process.stdout.write(value.map((item) => JSON.stringify(item)).join('\n') + (value.length ? '\n' : ''));
11
+ return;
12
+ }
13
+ process.stdout.write(`${String(value)}\n`);
14
+ }
15
+ function endpoint(baseUrl, path) {
16
+ return `${baseUrl.replace(/\/+$/, '')}/api${path}`;
17
+ }
18
+ async function request(config, path, options = {}) {
19
+ if (!config.controlPlaneUrl) {
20
+ throw Object.assign(new Error('Control plane URL is not configured. Run onep login --control-plane <url>.'), {
21
+ code: 'AUTH_REQUIRED'
22
+ });
23
+ }
24
+ const headers = new Headers();
25
+ if (options.accessToken) {
26
+ headers.set('X-One-Proxy-Access-Token', options.accessToken);
27
+ }
28
+ if (options.refreshToken) {
29
+ headers.set('X-One-Proxy-Refresh-Token', options.refreshToken);
30
+ }
31
+ if (options.tenantId) {
32
+ headers.set('X-One-Proxy-Tenant-ID', options.tenantId);
33
+ }
34
+ if (options.body !== undefined) {
35
+ headers.set('Content-Type', 'application/json');
36
+ }
37
+ const response = await fetch(endpoint(config.controlPlaneUrl, path), {
38
+ method: options.method ?? 'GET',
39
+ headers,
40
+ body: options.body === undefined ? undefined : JSON.stringify(options.body)
41
+ });
42
+ const raw = await response.text();
43
+ const envelope = raw ? JSON.parse(raw) : null;
44
+ if (!response.ok || !envelope || envelope.code !== 0) {
45
+ const code = response.status === 401 ? 'AUTH_REQUIRED' : 'CONTROL_PLANE_UNAVAILABLE';
46
+ throw Object.assign(new Error(envelope?.message || `Control plane request failed with HTTP ${response.status}.`), { code });
47
+ }
48
+ return envelope.data;
49
+ }
50
+ function optionValue(args, name) {
51
+ const index = args.indexOf(name);
52
+ return index >= 0 ? args[index + 1] : undefined;
53
+ }
54
+ async function promptMissing(value, label) {
55
+ if (value) {
56
+ return value;
57
+ }
58
+ const rl = readline.createInterface({ input, output });
59
+ const answer = (await rl.question(`${label}: `)).trim();
60
+ rl.close();
61
+ return answer;
62
+ }
63
+ function tokenFromLogin(result) {
64
+ const accessTokenExpiresAt = result.tokens?.expiresAt || result.expiresAt;
65
+ return {
66
+ schemaVersion: 1,
67
+ account: result.account,
68
+ accessToken: result.tokens?.accessToken || result.accessToken,
69
+ refreshToken: result.tokens?.refreshToken || result.refreshToken,
70
+ proxyToken: undefined,
71
+ accessTokenExpiresAt,
72
+ refreshTokenExpiresAt: undefined,
73
+ proxyTokenExpiresAt: undefined
74
+ };
75
+ }
76
+ function tenantIdOf(tenant) {
77
+ return tenant.id || tenant.tenantId || '';
78
+ }
79
+ function tenantNameOf(tenant) {
80
+ return tenant.name || tenant.tenantName || tenantIdOf(tenant);
81
+ }
82
+ async function requireTokens() {
83
+ const tokens = await readTokens();
84
+ if (!tokens?.accessToken) {
85
+ throw Object.assign(new Error('Authentication is required. Run onep login.'), { code: 'AUTH_REQUIRED' });
86
+ }
87
+ return tokens;
88
+ }
89
+ export async function login(args, context) {
90
+ const requestedProfile = optionValue(args, '--profile') || process.env.ONEPROXY_PROFILE;
91
+ const requestedControlPlaneUrl = optionValue(args, '--control-plane') || process.env.ONEPROXY_CONTROL_PLANE_URL;
92
+ if (requestedProfile && requestedControlPlaneUrl) {
93
+ process.env.ONEPROXY_PROFILE = requestedProfile;
94
+ await addProfile(requestedProfile, requestedControlPlaneUrl);
95
+ }
96
+ else if (requestedProfile) {
97
+ await useProfile(requestedProfile);
98
+ }
99
+ else if (requestedControlPlaneUrl) {
100
+ await addProfile(activeProfileName(), requestedControlPlaneUrl);
101
+ }
102
+ const config = await readConfig();
103
+ const controlPlaneUrl = requestedControlPlaneUrl || config.controlPlaneUrl;
104
+ const account = await promptMissing(optionValue(args, '--account') || process.env.ONEPROXY_ACCOUNT, 'Account');
105
+ const password = await promptMissing(process.env.ONEPROXY_PASSWORD, 'Password');
106
+ const nextConfig = { ...config, controlPlaneUrl };
107
+ if (!nextConfig.controlPlaneUrl) {
108
+ throw Object.assign(new Error('login requires --control-plane <url> or ONEPROXY_CONTROL_PLANE_URL.'), { code: 'AUTH_REQUIRED' });
109
+ }
110
+ const result = await request(nextConfig, '/auth/login', {
111
+ method: 'POST',
112
+ body: { account, password }
113
+ });
114
+ const tokens = tokenFromLogin(result);
115
+ const memberships = result.tenantMemberships ?? [];
116
+ const defaultTenantId = result.activeTenantId || (memberships.length === 1 ? tenantIdOf(memberships[0]) : undefined);
117
+ await writeConfig({ ...nextConfig, activeTenantId: defaultTenantId || config.activeTenantId });
118
+ await writeTokens(tokens);
119
+ print(context.json
120
+ ? { account: tokens.account, activeTenantId: defaultTenantId ?? null, tenantSelectionRequired: !defaultTenantId }
121
+ : `Logged in as ${tokens.account?.email || tokens.account?.account || tokens.account?.id}.` +
122
+ (defaultTenantId ? ` Active tenant: ${defaultTenantId}` : ' Run onep tenant list, then onep tenant use <name-or-id>.'), context);
123
+ }
124
+ export async function logout(_args, context) {
125
+ const config = await readConfig();
126
+ const tokens = await readTokens();
127
+ if (tokens?.accessToken) {
128
+ await request(config, '/auth/logout', { method: 'POST', accessToken: tokens.accessToken });
129
+ }
130
+ await clearTokens();
131
+ print(context.json ? { loggedOut: true } : 'Logged out.', context);
132
+ }
133
+ export async function refreshSession() {
134
+ const config = await readConfig();
135
+ const tokens = await readTokens();
136
+ if (!tokens?.refreshToken) {
137
+ throw Object.assign(new Error('Refresh token is missing. Run onep login.'), { code: 'AUTH_REQUIRED' });
138
+ }
139
+ const result = await request(config, '/auth/refresh', {
140
+ method: 'POST',
141
+ refreshToken: tokens.refreshToken,
142
+ body: { refreshToken: tokens.refreshToken }
143
+ });
144
+ const nextTokens = { ...tokens, ...tokenFromLogin(result) };
145
+ await writeTokens(nextTokens);
146
+ return nextTokens;
147
+ }
148
+ async function authenticatedRequest(path, options = {}) {
149
+ const config = await readConfig();
150
+ const tokens = await requireTokens();
151
+ return request(config, path, { ...options, accessToken: tokens.accessToken });
152
+ }
153
+ export async function tenantList(_args, context) {
154
+ const tenants = await authenticatedRequest('/tenants').then((result) => result.tenants);
155
+ if (context.json) {
156
+ print({ tenants }, context);
157
+ return;
158
+ }
159
+ print(tenants.map((tenant) => `${tenantIdOf(tenant)}\t${tenantNameOf(tenant)}`).join('\n'), context);
160
+ }
161
+ export async function tenantUse(args, context) {
162
+ const target = args[0].toLowerCase();
163
+ const tenants = await authenticatedRequest('/tenants').then((result) => result.tenants);
164
+ const tenant = tenants.find((item) => tenantIdOf(item).toLowerCase() === target || tenantNameOf(item).toLowerCase() === target);
165
+ if (!tenant) {
166
+ throw Object.assign(new Error(`Tenant not found: ${args[0]}`), { code: 'TENANT_REQUIRED' });
167
+ }
168
+ const config = await readConfig();
169
+ const nextTenantId = tenantIdOf(tenant);
170
+ const state = await readState();
171
+ const currentGroup = state.routeGroups.find((group) => group.id === config.activeGroupId);
172
+ await writeConfig({
173
+ ...config,
174
+ activeTenantId: nextTenantId,
175
+ activeGroupId: currentGroup?.tenantId === nextTenantId ? config.activeGroupId : undefined
176
+ });
177
+ print(context.json ? { activeTenantId: tenantIdOf(tenant) } : `Active tenant: ${tenantNameOf(tenant)}`, context);
178
+ }
179
+ export async function groupList(_args, context) {
180
+ const config = await readConfig();
181
+ if (!config.activeTenantId) {
182
+ throw Object.assign(new Error('Active tenant is required. Run onep tenant use <name-or-id>.'), { code: 'TENANT_REQUIRED' });
183
+ }
184
+ const state = await readState();
185
+ const groups = state.routeGroups.filter((group) => group.tenantId === config.activeTenantId);
186
+ if (context.json) {
187
+ print({ groups }, context);
188
+ return;
189
+ }
190
+ print(groups.map((group) => `${group.id}\t${group.name || group.id}`).join('\n'), context);
191
+ }
192
+ export async function groupUse(args, context) {
193
+ const config = await readConfig();
194
+ if (!config.activeTenantId) {
195
+ throw Object.assign(new Error('Active tenant is required. Run onep tenant use <name-or-id>.'), { code: 'TENANT_REQUIRED' });
196
+ }
197
+ const target = args[0].toLowerCase();
198
+ const state = await readState();
199
+ const groups = state.routeGroups.filter((group) => group.tenantId === config.activeTenantId);
200
+ const group = groups.find((item) => item.id.toLowerCase() === target || (item.name || '').toLowerCase() === target);
201
+ if (!group) {
202
+ throw Object.assign(new Error(`Group not found in synced state: ${args[0]}. Run onep sync first.`), { code: 'GROUP_REQUIRED' });
203
+ }
204
+ await writeConfig({ ...config, activeGroupId: group.id });
205
+ print(context.json ? { activeGroupId: group.id } : `Active group: ${group.name || group.id}`, context);
206
+ }
207
+ export function routeRulesFromBootstrap(group) {
208
+ const directHosts = (group.directHosts ?? []).map((host) => ({
209
+ id: `direct:${host}`,
210
+ type: 'domain',
211
+ pattern: host,
212
+ mode: 'direct'
213
+ }));
214
+ const proxyHosts = (group.proxyHosts ?? []).map((host) => ({
215
+ id: `proxy:${host}`,
216
+ type: 'domain',
217
+ pattern: host,
218
+ mode: 'proxy'
219
+ }));
220
+ const routes = (group.routes ?? []).map((route) => ({
221
+ id: route.id,
222
+ type: routeTypeFromMatchType(route.matchType),
223
+ pattern: route.matchValue,
224
+ mode: route.actionType === 'direct' ? 'direct' : 'proxy'
225
+ }));
226
+ return [...routes, ...directHosts, ...proxyHosts];
227
+ }
228
+ function routeTypeFromMatchType(matchType) {
229
+ const normalized = matchType.toLowerCase();
230
+ if (normalized === 'suffix' || normalized === 'cidr' || normalized === 'wildcard') {
231
+ return normalized;
232
+ }
233
+ if (normalized === 'ip_cidr') {
234
+ return 'cidr';
235
+ }
236
+ if (normalized === 'default') {
237
+ return 'wildcard';
238
+ }
239
+ return 'domain';
240
+ }
241
+ export async function sync(_args, context) {
242
+ const config = await readConfig();
243
+ if (!config.activeTenantId) {
244
+ throw Object.assign(new Error('Active tenant is required. Run onep tenant use <name-or-id>.'), { code: 'TENANT_REQUIRED' });
245
+ }
246
+ const tokens = await requireTokens();
247
+ const bootstrap = await request(config, '/proxy/extension/bootstrap', {
248
+ accessToken: tokens.accessToken,
249
+ tenantId: config.activeTenantId
250
+ });
251
+ const routeGroups = (bootstrap.groups ?? []).map((group) => ({
252
+ id: group.id,
253
+ tenantId: config.activeTenantId || '',
254
+ name: group.name,
255
+ rules: routeRulesFromBootstrap(group)
256
+ }));
257
+ const activeGroup = routeGroups.find((group) => group.id === config.activeGroupId) || routeGroups.find((group) => group.id);
258
+ const entryGroup = (bootstrap.groups ?? []).find((group) => group.id === activeGroup?.id);
259
+ const state = {
260
+ ...(await readState()),
261
+ schemaVersion: 1,
262
+ bootstrap: {
263
+ tenantId: config.activeTenantId,
264
+ groupId: activeGroup?.id,
265
+ entryNodes: entryGroup?.proxyHost
266
+ ? [{ id: entryGroup.entryNodeId || entryGroup.id, host: entryGroup.proxyHost, port: entryGroup.proxyPort || 443, protocol: entryGroup.proxyScheme || 'connect' }]
267
+ : []
268
+ },
269
+ policyRevision: bootstrap.policyRevision,
270
+ fetchedAt: bootstrap.fetchedAt || new Date().toISOString(),
271
+ routeGroups
272
+ };
273
+ await writeState(state);
274
+ await writeTokens({
275
+ ...tokens,
276
+ proxyToken: bootstrap.proxyToken || tokens.proxyToken,
277
+ proxyTokenExpiresAt: bootstrap.proxyTokenExpiresAt || tokens.proxyTokenExpiresAt
278
+ });
279
+ if (activeGroup?.id && activeGroup.id !== config.activeGroupId) {
280
+ await writeConfig({ ...config, activeGroupId: activeGroup.id });
281
+ }
282
+ print(context.json ? { synced: true, policyRevision: state.policyRevision, groupCount: routeGroups.length } : `Synced ${routeGroups.length} group(s).`, context);
283
+ }
284
+ //# sourceMappingURL=control-plane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-plane.js","sourceRoot":"","sources":["../src/control-plane.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EAMX,MAAM,cAAc,CAAC;AAoEtB,SAAS,KAAK,CAAC,KAAc,EAAE,OAAmB;IAChD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxG,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe,EAAE,IAAY;IAC7C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,OAAO,CAAI,MAAsB,EAAE,IAAY,EAAE,UAA0B,EAAE;IAC1F,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,4EAA4E,CAAC,EAAE;YAC3G,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE;QACnE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,OAAO;QACP,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;KAC5E,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,2BAA2B,CAAC;QACrF,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,OAAO,IAAI,0CAA0C,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9H,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC;AAED,SAAS,WAAW,CAAC,IAAc,EAAE,IAAY;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,KAAyB,EAAE,KAAa;IACnE,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,MAAmB;IACzC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;IAC1E,OAAO;QACL,aAAa,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,IAAI,MAAM,CAAC,WAAW;QAC7D,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,IAAI,MAAM,CAAC,YAAY;QAChE,UAAU,EAAE,SAAS;QACrB,oBAAoB;QACpB,qBAAqB,EAAE,SAAS;QAChC,mBAAmB,EAAE,SAAS;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,OAAO,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,OAAO,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;QACzB,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,6CAA6C,CAAC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IAC3G,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAc,EAAE,OAAmB;IAC7D,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACxF,MAAM,wBAAwB,GAAG,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IAChH,IAAI,gBAAgB,IAAI,wBAAwB,EAAE,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAChD,MAAM,UAAU,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;IAC/D,CAAC;SAAM,IAAI,gBAAgB,EAAE,CAAC;QAC5B,MAAM,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,wBAAwB,EAAE,CAAC;QACpC,MAAM,UAAU,CAAC,iBAAiB,EAAE,EAAE,wBAAwB,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,eAAe,GAAG,wBAAwB,IAAI,MAAM,CAAC,eAAe,CAAC;IAC3E,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAC/G,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IAChF,MAAM,UAAU,GAAG,EAAE,GAAG,MAAM,EAAE,eAAe,EAAE,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;QAChC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qEAAqE,CAAC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IACnI,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAc,UAAU,EAAE,aAAa,EAAE;QACnE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;KAC5B,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC;IACnD,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrH,MAAM,WAAW,CAAC,EAAE,GAAG,UAAU,EAAE,cAAc,EAAE,eAAe,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAC/F,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,KAAK,CACH,OAAO,CAAC,IAAI;QACV,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,IAAI,IAAI,EAAE,uBAAuB,EAAE,CAAC,eAAe,EAAE;QACjH,CAAC,CAAC,gBAAgB,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,GAAG;YACvF,CAAC,eAAe,CAAC,CAAC,CAAC,mBAAmB,eAAe,EAAE,CAAC,CAAC,CAAC,2DAA2D,CAAC,EAC5H,OAAO,CACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAAe,EAAE,OAAmB;IAC/D,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,IAAI,MAAM,EAAE,WAAW,EAAE,CAAC;QACxB,MAAM,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,WAAW,EAAE,CAAC;IACpB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;QAC1B,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2CAA2C,CAAC,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAc,MAAM,EAAE,eAAe,EAAE;QACjE,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE;KAC5C,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5D,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;IAC9B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAI,IAAY,EAAE,UAA+C,EAAE;IACpG,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACrC,OAAO,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAe,EAAE,OAAmB;IACnE,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAwB,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/G,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AACvG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,OAAmB;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAwB,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/G,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC;IAChI,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC;IAC1F,MAAM,WAAW,CAAC;QAChB,GAAG,MAAM;QACT,cAAc,EAAE,YAAY;QAC5B,aAAa,EAAE,YAAY,EAAE,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;KAC1F,CAAC,CAAC;IACH,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACnH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAe,EAAE,OAAmB;IAClE,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8DAA8D,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC9H,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,cAAc,CAAC,CAAC;IAC7F,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc,EAAE,OAAmB;IAChE,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8DAA8D,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC9H,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,cAAc,CAAC,CAAC;IAC7F,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC;IACpH,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oCAAoC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAClI,CAAC;IACD,MAAM,WAAW,CAAC,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1D,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AACzG,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAwD;IAC9F,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3D,EAAE,EAAE,UAAU,IAAI,EAAE;QACpB,IAAI,EAAE,QAAiB;QACvB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,QAAiB;KACxB,CAAC,CAAC,CAAC;IACJ,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzD,EAAE,EAAE,SAAS,IAAI,EAAE;QACnB,IAAI,EAAE,QAAiB;QACvB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,OAAgB;KACvB,CAAC,CAAC,CAAC;IACJ,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAClD,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC;QAC7C,OAAO,EAAE,KAAK,CAAC,UAAU;QACzB,IAAI,EAAE,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAE,QAAkB,CAAC,CAAC,CAAE,OAAiB;KAC/E,CAAC,CAAC,CAAC;IACJ,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,WAAW,EAAE,GAAG,UAAU,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,sBAAsB,CAAC,SAAiB;IAC/C,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;QAClF,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,KAAe,EAAE,OAAmB;IAC7D,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8DAA8D,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAC9H,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAqB,MAAM,EAAE,4BAA4B,EAAE;QACxF,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ,EAAE,MAAM,CAAC,cAAc;KAChC,CAAC,CAAC;IACH,MAAM,WAAW,GAAiB,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzE,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,QAAQ,EAAE,MAAM,CAAC,cAAc,IAAI,EAAE;QACrC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,uBAAuB,CAAC,KAAK,CAAC;KACtC,CAAC,CAAC,CAAC;IACJ,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5H,MAAM,UAAU,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,WAAW,EAAE,EAAE,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAG;QACZ,GAAG,CAAC,MAAM,SAAS,EAAE,CAAC;QACtB,aAAa,EAAE,CAAC;QAChB,SAAS,EAAE;YACT,QAAQ,EAAE,MAAM,CAAC,cAAc;YAC/B,OAAO,EAAE,WAAW,EAAE,EAAE;YACxB,UAAU,EAAE,UAAU,EAAE,SAAS;gBAC/B,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,IAAI,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,WAAW,IAAI,SAAS,EAAE,CAAC;gBACjK,CAAC,CAAC,EAAE;SACP;QACD,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC1D,WAAW;KACZ,CAAC;IACF,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,WAAW,CAAC;QAChB,GAAG,MAAM;QACT,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU;QACrD,mBAAmB,EAAE,SAAS,CAAC,mBAAmB,IAAI,MAAM,CAAC,mBAAmB;KACjF,CAAC,CAAC;IACH,IAAI,WAAW,EAAE,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;QAC/D,MAAM,WAAW,CAAC,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,UAAU,WAAW,CAAC,MAAM,YAAY,EAAE,OAAO,CAAC,CAAC;AACnK,CAAC"}
@@ -0,0 +1,11 @@
1
+ import * as http from 'node:http';
2
+ import type { DaemonBindings } from './lifecycle.ts';
3
+ import type { RouteResolverInput } from './router.ts';
4
+ export type ProxyRouteContext = Omit<RouteResolverInput, 'target' | 'protocol'>;
5
+ export type ProxyServers = {
6
+ httpServer: http.Server;
7
+ httpsServer: http.Server;
8
+ close: () => Promise<void>;
9
+ };
10
+ export declare function startHttpProxyListeners(input: ProxyRouteContext, bindings: DaemonBindings, liveState?: boolean, onProxyActivity?: () => void): Promise<ProxyServers>;
11
+ export declare function createHttpProxyServer(input: ProxyRouteContext, liveState?: boolean, onProxyActivity?: () => void): http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>;