@cpajs/cpa 0.0.1-alpha-3 → 0.1.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +108 -12
  2. package/dist/client/resources/oauth.d.ts +6 -2
  3. package/dist/client/resources/oauth.d.ts.map +1 -1
  4. package/dist/client/resources/oauth.js +28 -8
  5. package/dist/client/resources/oauth.js.map +1 -1
  6. package/dist/client/transport.d.ts.map +1 -1
  7. package/dist/client/transport.js +7 -3
  8. package/dist/client/transport.js.map +1 -1
  9. package/dist/server/args.js +1 -1
  10. package/dist/server/args.js.map +1 -1
  11. package/dist/server/binary.d.ts +19 -0
  12. package/dist/server/binary.d.ts.map +1 -1
  13. package/dist/server/binary.js +35 -1
  14. package/dist/server/binary.js.map +1 -1
  15. package/dist/server/config.d.ts +46 -7
  16. package/dist/server/config.d.ts.map +1 -1
  17. package/dist/server/config.js +148 -22
  18. package/dist/server/config.js.map +1 -1
  19. package/dist/server/errors.d.ts +4 -2
  20. package/dist/server/errors.d.ts.map +1 -1
  21. package/dist/server/errors.js +1 -1
  22. package/dist/server/errors.js.map +1 -1
  23. package/dist/server/index.d.ts +18 -1
  24. package/dist/server/index.d.ts.map +1 -1
  25. package/dist/server/index.js +383 -79
  26. package/dist/server/index.js.map +1 -1
  27. package/dist/server/internal.d.ts +19 -0
  28. package/dist/server/internal.d.ts.map +1 -0
  29. package/dist/server/internal.js +10 -0
  30. package/dist/server/internal.js.map +1 -0
  31. package/dist/server/management.d.ts +29 -0
  32. package/dist/server/management.d.ts.map +1 -0
  33. package/dist/server/management.js +64 -0
  34. package/dist/server/management.js.map +1 -0
  35. package/dist/server/process.d.ts +12 -1
  36. package/dist/server/process.d.ts.map +1 -1
  37. package/dist/server/process.js +55 -13
  38. package/dist/server/process.js.map +1 -1
  39. package/dist/server/readiness.d.ts +16 -2
  40. package/dist/server/readiness.d.ts.map +1 -1
  41. package/dist/server/readiness.js +32 -2
  42. package/dist/server/readiness.js.map +1 -1
  43. package/dist/server/targets.d.ts +4 -0
  44. package/dist/server/targets.d.ts.map +1 -1
  45. package/dist/server/targets.js +6 -0
  46. package/dist/server/targets.js.map +1 -1
  47. package/dist/server/types.d.ts +88 -14
  48. package/dist/server/types.d.ts.map +1 -1
  49. package/package.json +31 -24
  50. package/src/client/resources/oauth.ts +28 -13
  51. package/src/client/transport.ts +7 -3
  52. package/src/server/args.ts +1 -1
  53. package/src/server/binary.ts +46 -1
  54. package/src/server/config.ts +169 -22
  55. package/src/server/errors.ts +4 -2
  56. package/src/server/index.ts +459 -94
  57. package/src/server/internal.ts +20 -0
  58. package/src/server/management.ts +89 -0
  59. package/src/server/process.ts +60 -13
  60. package/src/server/readiness.ts +38 -3
  61. package/src/server/targets.ts +8 -0
  62. package/src/server/types.ts +90 -14
@@ -3,11 +3,13 @@ import { tmpdir } from 'node:os';
3
3
  import { join, resolve } from 'node:path';
4
4
  import { setTimeout as delay } from 'node:timers/promises';
5
5
  import { buildArgs } from './args.js';
6
- import { resolveBinary } from './binary.js';
7
- import { inspectConfigFile, writeManagedConfig } from './config.js';
6
+ import { resolveBinary, resolveLauncher } from './binary.js';
7
+ import { inspectConfigFile, readManagedConfig, updateManagedSecret, writeManagedConfig } from './config.js';
8
8
  import { CpaStartError } from './errors.js';
9
+ import { keyMatches, resolveManagement } from './management.js';
9
10
  import { ManagedProcess } from './process.js';
10
- import { connectHost, findFreePort, formatOrigin, isPortFree, probeHealth } from './readiness.js';
11
+ import { connectHost, findFreePort, formatOrigin, isLoopbackHost, isPortFree, probeHealth } from './readiness.js';
12
+ import { internalCommand } from './internal.js';
11
13
  import { createRedactor } from './redact.js';
12
14
  export { candidateTargets, currentPlatform, detectLibc, resolveBinary } from './binary.js';
13
15
  export { CpaBinaryError, CpaStartError } from './errors.js';
@@ -18,7 +20,6 @@ const DEFAULT_STOP_TIMEOUT_MS = 10_000;
18
20
  const PROBE_INTERVAL_MS = 100;
19
21
  const PROBE_TIMEOUT_MS = 1_000;
20
22
  const DYNAMIC_PORT_ATTEMPTS = 3;
21
- const ADDRESS_IN_USE = /address already in use|only one usage of each socket address/i;
22
23
  function validate(options) {
23
24
  if (options.config !== undefined && options.configPath !== undefined) {
24
25
  throw new CpaStartError('invalid-options', 'config and configPath are mutually exclusive.');
@@ -33,8 +34,34 @@ function validate(options) {
33
34
  if (port !== undefined && (!Number.isInteger(port) || port < 0 || port > 65_535)) {
34
35
  throw new CpaStartError('invalid-options', `Invalid port ${String(port)}.`);
35
36
  }
37
+ if (options.management !== undefined && options.managementKey !== undefined) {
38
+ throw new CpaStartError('invalid-options', 'management and managementKey are mutually exclusive; managementKey is the deprecated alias for management.key.');
39
+ }
40
+ if (options.management !== undefined &&
41
+ (typeof options.management.key !== 'string' || options.management.key.trim() === '')) {
42
+ throw new CpaStartError('invalid-options', 'management.key must not be empty.');
43
+ }
44
+ if (typeof options.managementKey === 'string' && options.managementKey.trim() === '') {
45
+ throw new CpaStartError('invalid-options', 'managementKey must not be empty.');
46
+ }
47
+ if (options.management?.viaEnvironment !== true && options.env?.MANAGEMENT_PASSWORD !== undefined) {
48
+ throw new CpaStartError('invalid-options', 'Do not set MANAGEMENT_PASSWORD in env: cpajs only passes it to CPA for management: { key, viaEnvironment: true }, because upstream treats it as enabling remote management.');
49
+ }
50
+ const requestedKey = options.management?.key ?? options.managementKey;
51
+ if (requestedKey === undefined)
52
+ return;
53
+ if (options.configPath !== undefined) {
54
+ if (options.management?.viaEnvironment !== true) {
55
+ throw new CpaStartError('invalid-options', 'management.key cannot be combined with configPath because cpajs must not edit your config file. Put management.secret-key in the file, or use management.viaEnvironment: true to pass the key through MANAGEMENT_PASSWORD (which also enables remote management).');
56
+ }
57
+ return;
58
+ }
59
+ const configuredSecret = options.config?.management?.['secret-key'];
60
+ if (typeof configuredSecret === 'string' && configuredSecret.trim() !== '') {
61
+ throw new CpaStartError('invalid-options', 'management.key conflicts with config.management["secret-key"]. Keep one key: either let cpajs hash management.key into the managed config, or set config.management["secret-key"] yourself.');
62
+ }
36
63
  }
37
- function buildEnv(options) {
64
+ function buildEnv(options, management) {
38
65
  const env = { ...process.env };
39
66
  for (const [key, value] of Object.entries(options.env ?? {})) {
40
67
  if (value === undefined)
@@ -42,8 +69,13 @@ function buildEnv(options) {
42
69
  else
43
70
  env[key] = value;
44
71
  }
45
- if (options.managementKey !== undefined)
46
- env.MANAGEMENT_PASSWORD = options.managementKey;
72
+ // MANAGEMENT_PASSWORD reaches CPA only through management.viaEnvironment. Upstream
73
+ // accepts it as an extra plaintext key and forces remote management on, so one
74
+ // inherited from the parent environment must never leak in.
75
+ if (management.viaEnvironment)
76
+ env.MANAGEMENT_PASSWORD = management.key;
77
+ else
78
+ delete env.MANAGEMENT_PASSWORD;
47
79
  if (options.home !== undefined)
48
80
  env.HOME_JWT = options.home.jwt;
49
81
  return env;
@@ -54,8 +86,64 @@ function configListen(options) {
54
86
  const port = options.port ?? (typeof server.port === 'number' ? server.port : 0);
55
87
  return { host, port };
56
88
  }
57
- function abortError(signal, output) {
58
- return new CpaStartError('aborted', 'startServer was aborted.', { output, cause: signal.reason });
89
+ function abortError(signal, output, message = 'startServer was aborted.') {
90
+ return new CpaStartError('aborted', message, { output, cause: signal.reason });
91
+ }
92
+ /** Spawns CPA and waits for `/healthz`, stopping the child if it does not become ready. */
93
+ async function launchProcess(options) {
94
+ let proc;
95
+ try {
96
+ proc = new ManagedProcess(options.binaryPath, options.args, {
97
+ supervised: options.supervised,
98
+ cwd: options.stateDir,
99
+ env: options.env,
100
+ redact: options.redact,
101
+ onLog: options.onLog,
102
+ });
103
+ }
104
+ catch (cause) {
105
+ // Node reports spawn failures through the 'error' event; Bun throws synchronously.
106
+ const error = new CpaStartError('spawn-failed', `Failed to spawn ${options.binaryPath}: ${options.redact(cause.message)}`, {
107
+ cause,
108
+ });
109
+ return { kind: 'failed', error, result: undefined };
110
+ }
111
+ const outcome = await waitUntilReady(proc, options.origin, options.deadline, options.signal);
112
+ if (outcome === 'ready')
113
+ return { kind: 'ready', proc };
114
+ // Not ready: make sure the process is gone before deciding what to report.
115
+ const exit = await proc.stop(0);
116
+ const output = proc.output();
117
+ if (outcome === 'aborted')
118
+ return { kind: 'failed', error: abortError(options.signal, output, options.abortMessage), result: exit };
119
+ if (outcome === 'timeout') {
120
+ const error = new CpaStartError('timeout', `CLIProxyAPI did not become ready within ${options.startupTimeoutMs} ms.`, { output });
121
+ return { kind: 'failed', error, result: exit };
122
+ }
123
+ if (proc.spawnError) {
124
+ const error = new CpaStartError('spawn-failed', `Failed to spawn ${options.binaryPath}: ${options.redact(proc.spawnError.message)}`, {
125
+ output,
126
+ cause: proc.spawnError,
127
+ });
128
+ return { kind: 'failed', error, result: exit };
129
+ }
130
+ // CPA exits with code 0 when its bind fails, so the output cannot tell a
131
+ // port conflict apart from any other early exit. Probe the port instead.
132
+ // This is best-effort: the port can be taken or freed between the child's
133
+ // bind attempt and this check.
134
+ if (!(await isPortFree(options.host, options.port))) {
135
+ // A dynamically picked port can be taken between probing and binding; try another.
136
+ if (options.allowRetry)
137
+ return { kind: 'retry' };
138
+ const error = new CpaStartError('port-in-use', options.portMessage, {
139
+ output,
140
+ exitCode: exit.code,
141
+ signal: exit.signal,
142
+ });
143
+ return { kind: 'failed', error, result: exit };
144
+ }
145
+ const error = new CpaStartError('exited', `CLIProxyAPI exited before becoming ready (code ${String(exit.code)}, signal ${String(exit.signal)}).`, { output, exitCode: exit.code, signal: exit.signal });
146
+ return { kind: 'failed', error, result: exit };
59
147
  }
60
148
  /**
61
149
  * Starts the official CLIProxyAPI binary and resolves once `/healthz` answers.
@@ -68,95 +156,173 @@ export async function startServer(options = {}) {
68
156
  const { signal } = options;
69
157
  if (signal?.aborted)
70
158
  throw abortError(signal, '');
71
- const binary = resolveBinary(options.binaryPath === undefined ? {} : { binaryPath: options.binaryPath });
159
+ const management = await resolveManagement(options);
160
+ const command = options[internalCommand];
161
+ const binary = command === undefined
162
+ ? resolveBinary(options.binaryPath === undefined ? {} : { binaryPath: options.binaryPath })
163
+ : { path: command.path };
164
+ // What actually gets spawned: CPA wrapped in cpa-launcher when available, so CPA
165
+ // cannot outlive this process (see binary.ts and the launcher/ sources).
166
+ const program = command?.path ?? binary.path;
167
+ const launcher = options.launcher === false ? undefined : command !== undefined ? command.launcher : resolveLauncher(binary.path);
168
+ const spawnPath = launcher?.path ?? program;
169
+ const supervised = launcher?.mode === 'supervise';
170
+ const prefixArgs = [
171
+ ...(launcher === undefined ? [] : [...(supervised ? ['--supervise', '--watch-stdin'] : []), '--', program]),
172
+ ...(command?.args ?? []),
173
+ ];
174
+ // Validate everything that can be validated before creating any resource, so a
175
+ // rejected option never leaves a temporary state directory behind.
176
+ const env = buildEnv(options, management);
177
+ // Exec mode checks this after PR_SET_PDEATHSIG to catch a parent that died first.
178
+ if (launcher?.mode === 'exec')
179
+ env.CPAJS_PARENT_PID = String(process.pid);
180
+ const extraArgs = buildArgs(options);
181
+ if (launcher === undefined && options.launcher !== false && command === undefined && process.platform !== 'win32') {
182
+ options.onLog?.({
183
+ stream: 'stderr',
184
+ line: `cpajs: notice: no cpa-launcher found for ${binary.path}; CPA will keep running if this process is killed. Pass launcher: false to silence this.`,
185
+ });
186
+ }
72
187
  const ownsStateDir = options.stateDir === undefined;
73
188
  const stateDir = ownsStateDir ? await mkdtemp(join(tmpdir(), 'cpajs-')) : resolve(options.stateDir);
74
189
  if (!ownsStateDir)
75
190
  await mkdir(stateDir, { recursive: true });
76
191
  const cleanup = async () => {
192
+ // Windows releases file handles a little later than POSIX; keep retrying
193
+ // instead of leaving a temporary directory behind.
77
194
  if (ownsStateDir)
78
- await rm(stateDir, { recursive: true, force: true, maxRetries: 3 });
195
+ await rm(stateDir, { recursive: true, force: true, maxRetries: 10, retryDelay: 100 });
79
196
  };
80
197
  const startupTimeoutMs = options.startupTimeoutMs ?? DEFAULT_STARTUP_TIMEOUT_MS;
81
198
  const deadline = Date.now() + startupTimeoutMs;
82
- const env = buildEnv(options);
83
- const extraArgs = buildArgs(options);
199
+ const managedSecret = management.secretKeyHash === undefined
200
+ ? undefined
201
+ : { secretKeyHash: management.secretKeyHash, allowRemote: management.allowRemote };
202
+ let warnedRemote = false;
203
+ let reservation;
204
+ let wroteConfig = false;
205
+ let announcedReuse = false;
84
206
  try {
85
207
  for (let attempt = 1;; attempt++) {
86
208
  let prepared;
87
209
  let dynamicPort = false;
88
210
  if (options.configPath !== undefined) {
89
211
  prepared = await inspectConfigFile(options.configPath);
212
+ if (management.key !== undefined && prepared.management.hasSecret) {
213
+ throw new CpaStartError('invalid-options', 'management.key conflicts with the management.secret-key in configPath. Keep one key: remove management.key or remove secret-key from the file.');
214
+ }
90
215
  }
91
216
  else {
92
- const listen = configListen(options);
93
- if (listen.port === 0) {
94
- listen.port = await findFreePort(listen.host);
95
- dynamicPort = true;
217
+ // The file belongs to CPA after the first start: management API writes and
218
+ // CPA's own normalisation must survive later starts.
219
+ const existing = options.overwriteConfig || wroteConfig ? undefined : await readManagedConfig(stateDir);
220
+ if (existing) {
221
+ prepared = existing;
222
+ // A reused file keeps everything CPA persisted, but the key passed to this
223
+ // start must still work: rewrite only the management fields when they differ.
224
+ if (managedSecret !== undefined &&
225
+ (existing.management.allowRemote !== managedSecret.allowRemote ||
226
+ !(await keyMatches(management.key, existing.management.secretKey)))) {
227
+ await updateManagedSecret(existing.configPath, managedSecret);
228
+ prepared = (await readManagedConfig(stateDir));
229
+ options.onLog?.({
230
+ stream: 'stdout',
231
+ line: `Updated management.secret-key / allow-remote in ${existing.configPath} for the management key of this start.`,
232
+ });
233
+ }
234
+ if (!announcedReuse) {
235
+ announcedReuse = true;
236
+ options.onLog?.({
237
+ stream: 'stdout',
238
+ line: `Keeping existing config at ${existing.configPath}; pass overwriteConfig: true to replace it.`,
239
+ });
240
+ }
241
+ }
242
+ else {
243
+ const listen = configListen(options);
244
+ if (listen.port === 0) {
245
+ reservation = await findFreePort(listen.host);
246
+ listen.port = reservation.port;
247
+ dynamicPort = true;
248
+ }
249
+ prepared = await writeManagedConfig(options.config ?? {}, stateDir, listen, managedSecret);
250
+ wroteConfig = true;
96
251
  }
97
- prepared = await writeManagedConfig(options.config ?? {}, stateDir, listen);
98
252
  }
99
253
  const { host, port, tls } = prepared.listen;
100
- const redact = createRedactor([options.managementKey, options.home?.jwt, ...prepared.secrets, ...(options.redact ?? [])]);
254
+ if (!warnedRemote) {
255
+ warnedRemote = true;
256
+ const target = host === '' ? 'all interfaces' : host;
257
+ const exposed = !isLoopbackHost(host);
258
+ if (management.viaEnvironment) {
259
+ options.onLog?.({
260
+ stream: 'stderr',
261
+ line: 'cpajs: warning: management.viaEnvironment passes the key through MANAGEMENT_PASSWORD, which upstream compares in plaintext and which always enables remote management' +
262
+ (exposed ? `; the server binds ${target}, so the management API is reachable from non-loopback clients.` : '.'),
263
+ });
264
+ }
265
+ else if (prepared.management.allowRemote && exposed) {
266
+ options.onLog?.({
267
+ stream: 'stderr',
268
+ line: `cpajs: warning: management.allow-remote is true and the server binds ${target}, so the management API is reachable from non-loopback clients.`,
269
+ });
270
+ }
271
+ }
272
+ const redact = createRedactor([management.key, options.home?.jwt, ...prepared.secrets, ...(options.redact ?? [])]);
101
273
  if (!dynamicPort && !(await isPortFree(host, port))) {
102
274
  throw new CpaStartError('port-in-use', `Port ${port} on ${host || 'all interfaces'} is already in use.`);
103
275
  }
104
276
  const origin = formatOrigin(tls ? 'https' : 'http', connectHost(host), port);
105
- let proc;
106
- try {
107
- proc = new ManagedProcess(binary.path, ['-config', prepared.configPath, ...extraArgs], {
108
- cwd: stateDir,
109
- env,
110
- redact,
111
- onLog: options.onLog,
112
- });
113
- }
114
- catch (cause) {
115
- // Node reports spawn failures through the 'error' event; Bun throws synchronously.
116
- throw new CpaStartError('spawn-failed', `Failed to spawn ${binary.path}: ${redact(cause.message)}`, { cause });
117
- }
118
- const outcome = await waitUntilReady(proc, origin, deadline, signal);
119
- if (outcome === 'ready') {
120
- return createHandle(proc, {
121
- origin,
122
- host,
123
- port,
277
+ // Release the dynamic-port reservation as late as possible so the gap
278
+ // before CPA binds stays small.
279
+ const held = reservation;
280
+ reservation = undefined;
281
+ await held?.release();
282
+ const result = await launchProcess({
283
+ binaryPath: spawnPath,
284
+ supervised,
285
+ args: [...prefixArgs, '-config', prepared.configPath, ...extraArgs],
286
+ stateDir,
287
+ env,
288
+ redact,
289
+ onLog: options.onLog,
290
+ host,
291
+ port,
292
+ origin,
293
+ deadline,
294
+ signal,
295
+ startupTimeoutMs,
296
+ portMessage: `Port ${port} on ${host || 'all interfaces'} is already in use.`,
297
+ allowRetry: dynamicPort && attempt < DYNAMIC_PORT_ATTEMPTS,
298
+ abortMessage: 'startServer was aborted.',
299
+ });
300
+ if (result.kind === 'ready') {
301
+ return createHandle(result.proc, {
124
302
  binaryPath: binary.path,
303
+ spawnPath,
304
+ supervised,
305
+ prefixArgs,
125
306
  configPath: prepared.configPath,
307
+ listen: prepared.listen,
308
+ origin,
126
309
  stateDir,
127
- managementKey: options.managementKey,
310
+ env,
311
+ extraArgs,
312
+ redact,
313
+ onLog: options.onLog,
314
+ startupTimeoutMs,
128
315
  stopTimeoutMs: options.stopTimeoutMs ?? DEFAULT_STOP_TIMEOUT_MS,
129
316
  cleanup,
130
317
  });
131
318
  }
132
- // Not ready: make sure the process is gone before deciding what to report.
133
- const exit = await proc.stop(0);
134
- const output = proc.output();
135
- if (outcome === 'aborted')
136
- throw abortError(signal, output);
137
- if (outcome === 'timeout') {
138
- throw new CpaStartError('timeout', `CLIProxyAPI did not become ready within ${startupTimeoutMs} ms.`, { output });
139
- }
140
- if (proc.spawnError) {
141
- throw new CpaStartError('spawn-failed', `Failed to spawn ${binary.path}: ${redact(proc.spawnError.message)}`, {
142
- output,
143
- cause: proc.spawnError,
144
- });
145
- }
146
- if (ADDRESS_IN_USE.test(output)) {
147
- // A dynamically picked port can be taken between probing and binding; try another.
148
- if (dynamicPort && attempt < DYNAMIC_PORT_ATTEMPTS)
149
- continue;
150
- throw new CpaStartError('port-in-use', `Port ${port} on ${host || 'all interfaces'} is already in use.`, {
151
- output,
152
- exitCode: exit.code,
153
- signal: exit.signal,
154
- });
155
- }
156
- throw new CpaStartError('exited', `CLIProxyAPI exited before becoming ready (code ${String(exit.code)}, signal ${String(exit.signal)}).`, { output, exitCode: exit.code, signal: exit.signal });
319
+ if (result.kind === 'retry')
320
+ continue;
321
+ throw result.error;
157
322
  }
158
323
  }
159
324
  catch (error) {
325
+ await reservation?.release();
160
326
  await cleanup();
161
327
  throw error;
162
328
  }
@@ -186,30 +352,168 @@ async function waitUntilReady(proc, origin, deadline, signal) {
186
352
  }
187
353
  }
188
354
  }
189
- function createHandle(proc, info) {
190
- const exited = proc.exited.then(async (result) => {
191
- await info.cleanup();
192
- return result;
355
+ function createHandle(initialProc, info) {
356
+ let currentProc = initialProc;
357
+ let state = 'running';
358
+ let restartTask;
359
+ let restartController;
360
+ let stopTask;
361
+ let resolveExited;
362
+ let finalizePromise;
363
+ const exited = new Promise((resolve) => {
364
+ resolveExited = resolve;
193
365
  });
194
- return {
366
+ const settle = (result) => {
367
+ if (finalizePromise)
368
+ return finalizePromise;
369
+ state = 'stopped';
370
+ liveServers.delete(handle);
371
+ finalizePromise = (async () => {
372
+ try {
373
+ await info.cleanup();
374
+ }
375
+ finally {
376
+ resolveExited(result);
377
+ }
378
+ })();
379
+ return finalizePromise;
380
+ };
381
+ const watch = (proc) => {
382
+ void proc.exited.then((result) => {
383
+ if (proc !== currentProc || state !== 'running')
384
+ return;
385
+ void settle(result).catch(() => { });
386
+ });
387
+ };
388
+ watch(initialProc);
389
+ const restart = (restartOptions = {}) => {
390
+ if (state === 'stopped' || state === 'stopping') {
391
+ return Promise.reject(new CpaStartError('stopped', 'Cannot restart a stopped server.'));
392
+ }
393
+ if (restartTask)
394
+ return restartTask;
395
+ state = 'restarting';
396
+ const controller = new AbortController();
397
+ restartController = controller;
398
+ const signal = restartOptions.signal
399
+ ? AbortSignal.any([restartOptions.signal, controller.signal])
400
+ : controller.signal;
401
+ restartTask = (async () => {
402
+ const previous = currentProc;
403
+ const previousExit = await previous.stop(restartOptions.timeoutMs ?? info.stopTimeoutMs);
404
+ if (signal.aborted) {
405
+ await settle(previousExit);
406
+ throw abortError(signal, previous.output(), 'restart was aborted.');
407
+ }
408
+ // Reuse the original port, dynamic or not. The old listener is gone, and
409
+ // Go sets SO_REUSEADDR on Unix, so TIME_WAIT does not block the bind.
410
+ // Windows relies on its default (Go does not set SO_REUSEADDR there);
411
+ // either way another process holding the port is reported, never swapped.
412
+ const { host, port } = info.listen;
413
+ if (!(await isPortFree(host, port))) {
414
+ await settle(previousExit);
415
+ throw new CpaStartError('port-in-use', `Port ${port} on ${host || 'all interfaces'} is already in use.`);
416
+ }
417
+ // Reuse the config file as CPA left it. Rewriting it here would discard
418
+ // changes made through the management API during the previous run (#13).
419
+ const result = await launchProcess({
420
+ binaryPath: info.spawnPath,
421
+ supervised: info.supervised,
422
+ args: [...info.prefixArgs, '-config', info.configPath, ...info.extraArgs],
423
+ stateDir: info.stateDir,
424
+ env: info.env,
425
+ redact: info.redact,
426
+ onLog: info.onLog,
427
+ host,
428
+ port,
429
+ origin: info.origin,
430
+ deadline: Date.now() + info.startupTimeoutMs,
431
+ signal,
432
+ startupTimeoutMs: info.startupTimeoutMs,
433
+ portMessage: `Port ${port} on ${host || 'all interfaces'} is already in use.`,
434
+ allowRetry: false,
435
+ abortMessage: 'restart was aborted.',
436
+ });
437
+ if (result.kind !== 'ready') {
438
+ const failure = result;
439
+ await settle(failure.result ?? previousExit);
440
+ throw failure.error;
441
+ }
442
+ currentProc = result.proc;
443
+ watch(result.proc);
444
+ state = 'running';
445
+ // The process may have exited between the readiness probe and this point.
446
+ if (result.proc.exitResult)
447
+ void settle(result.proc.exitResult).catch(() => { });
448
+ })().finally(() => {
449
+ restartTask = undefined;
450
+ restartController = undefined;
451
+ if (state === 'restarting')
452
+ state = 'running';
453
+ });
454
+ return restartTask;
455
+ };
456
+ const stop = (stopOptions = {}) => {
457
+ stopTask ??= (async () => {
458
+ if (state !== 'stopped')
459
+ state = 'stopping';
460
+ restartController?.abort(new Error('server stopped'));
461
+ if (restartTask) {
462
+ try {
463
+ await restartTask;
464
+ }
465
+ catch {
466
+ // An aborted restart always rejects; stop() still has to finish.
467
+ }
468
+ }
469
+ await settle(await currentProc.stop(stopOptions.timeoutMs ?? info.stopTimeoutMs));
470
+ return exited;
471
+ })();
472
+ return stopTask;
473
+ };
474
+ const handle = {
195
475
  origin: info.origin,
196
476
  baseUrl: `${info.origin}/v1`,
197
- host: info.host,
198
- port: info.port,
199
- pid: proc.child.pid,
477
+ host: info.listen.host,
478
+ port: info.listen.port,
200
479
  binaryPath: info.binaryPath,
201
480
  configPath: info.configPath,
202
481
  stateDir: info.stateDir,
203
- managementKey: info.managementKey,
204
- process: proc.child,
482
+ get pid() {
483
+ return currentProc.child.pid;
484
+ },
485
+ get process() {
486
+ return currentProc.child;
487
+ },
205
488
  get recentLogs() {
206
- return [...proc.recentLogs];
489
+ return [...currentProc.recentLogs];
207
490
  },
208
491
  exited,
209
- async stop(stopOptions = {}) {
210
- await proc.stop(stopOptions.timeoutMs ?? info.stopTimeoutMs);
211
- return exited;
212
- },
492
+ stop,
493
+ restart,
213
494
  };
495
+ liveServers.add(handle);
496
+ return handle;
497
+ }
498
+ // Handles that have started and not settled yet, for stopAllServers().
499
+ const liveServers = new Set();
500
+ /**
501
+ * Stops every server started by this process and still running, using each
502
+ * handle's `stop()` (so temporary state directories are removed too).
503
+ *
504
+ * The library does not install signal handlers. A host that should not leave
505
+ * CPA processes behind on SIGTERM/SIGINT calls this from its own handler:
506
+ *
507
+ * ```ts
508
+ * for (const signal of ['SIGINT', 'SIGTERM'] as const) {
509
+ * process.once(signal, async () => {
510
+ * await stopAllServers();
511
+ * process.exit(0);
512
+ * });
513
+ * }
514
+ * ```
515
+ */
516
+ export async function stopAllServers(options = {}) {
517
+ return Promise.all([...liveServers].map((server) => server.stop(options)));
214
518
  }
215
519
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,kBAAkB,EAAuB,MAAM,aAAa,CAAC;AACjI,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAA2B,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAwB,MAAM,gBAAgB,CAAC;AACxI,OAAO,EAAE,eAAe,EAAwB,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3F,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/C,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAC1C,MAAM,uBAAuB,GAAG,MAAM,CAAC;AACvC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC,SAAS,QAAQ,CAAC,OAA2B;IAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrE,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,+CAA+C,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;QACnG,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,yEAAyE,CAAC,CAAC;IACxH,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACpD,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,6BAA6B,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,gBAAgB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC5E,MAAM,IAAI,aAAa,CACrB,iBAAiB,EACjB,gHAAgH,CACjH,CAAC;IACJ,CAAC;IACD,IACE,OAAO,CAAC,UAAU,KAAK,SAAS;QAChC,CAAC,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EACpF,CAAC;QACD,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,mCAAmC,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrF,MAAM,IAAI,aAAa,CAAC,iBAAiB,EAAE,kCAAkC,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,mBAAmB,KAAK,SAAS,EAAE,CAAC;QAClG,MAAM,IAAI,aAAa,CACrB,iBAAiB,EACjB,6KAA6K,CAC9K,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC;IACtE,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO;IACvC,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,EAAE,CAAC;YAChD,MAAM,IAAI,aAAa,CACrB,iBAAiB,EACjB,mQAAmQ,CACpQ,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,YAAY,CAAC,CAAC;IACpE,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3E,MAAM,IAAI,aAAa,CACrB,iBAAiB,EACjB,6LAA6L,CAC9L,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,OAA2B,EAAE,UAA8B;IAC3E,MAAM,GAAG,GAAsB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;QAC7D,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;;YACpC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,mFAAmF;IACnF,+EAA+E;IAC/E,4DAA4D;IAC5D,IAAI,UAAU,CAAC,cAAc;QAAE,GAAG,CAAC,mBAAmB,GAAG,UAAU,CAAC,GAAG,CAAC;;QACnE,OAAO,GAAG,CAAC,mBAAmB,CAAC;IACpC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAChE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,OAA+B;IACnD,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAuC,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,MAAmB,EAAE,MAAc,EAAE,OAAO,GAAG,0BAA0B;IAC3F,OAAO,IAAI,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACjF,CAAC;AA8BD,2FAA2F;AAC3F,KAAK,UAAU,aAAa,CAAC,OAAsB;IACjD,IAAI,IAAoB,CAAC;IACzB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE;YAC1D,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,GAAG,EAAE,OAAO,CAAC,QAAQ;YACrB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mFAAmF;QACnF,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,cAAc,EAAE,mBAAmB,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,MAAM,CAAE,KAAe,CAAC,OAAO,CAAC,EAAE,EAAE;YACpI,KAAK;SACN,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACtD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7F,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAExD,2EAA2E;IAC3E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7B,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,MAAO,EAAE,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACrI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE,2CAA2C,OAAO,CAAC,gBAAgB,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAClI,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,cAAc,EAAE,mBAAmB,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE;YACnI,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,UAAU;SACvB,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,yEAAyE;IACzE,yEAAyE;IACzE,0EAA0E;IAC1E,+BAA+B;IAC/B,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACpD,mFAAmF;QACnF,IAAI,OAAO,CAAC,UAAU;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE;YAClE,MAAM;YACN,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,aAAa,CAC7B,QAAQ,EACR,kDAAkD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EACtG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CACrD,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAO,GAAuB,EAAE;IAChE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,IAAI,MAAM,EAAE,OAAO;QAAE,MAAM,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAElD,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,OAAO,GAAI,OAAmD,CAAC,eAAe,CAAC,CAAC;IACtF,MAAM,MAAM,GACV,OAAO,KAAK,SAAS;QACnB,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QAC3F,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;IAC7B,iFAAiF;IACjF,yEAAyE;IACzE,MAAM,OAAO,GAAG,OAAO,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;IAC7C,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnH,MAAM,SAAS,GAAG,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC;IAC5C,MAAM,UAAU,GAAG,QAAQ,EAAE,IAAI,KAAK,WAAW,CAAC;IAClD,MAAM,UAAU,GAAG;QACjB,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3G,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;KACzB,CAAC;IACF,+EAA+E;IAC/E,mEAAmE;IACnE,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC1C,kFAAkF;IAClF,IAAI,QAAQ,EAAE,IAAI,KAAK,MAAM;QAAE,GAAG,CAAC,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClH,OAAO,CAAC,KAAK,EAAE,CAAC;YACd,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,4CAA4C,MAAM,CAAC,IAAI,0FAA0F;SACxJ,CAAC,CAAC;IACL,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC;IACpD,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC;IACrG,IAAI,CAAC,YAAY;QAAE,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,KAAK,IAAmB,EAAE;QACxC,yEAAyE;QACzE,mDAAmD;QACnD,IAAI,YAAY;YAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1G,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;IAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC;IAC/C,MAAM,aAAa,GACjB,UAAU,CAAC,aAAa,KAAK,SAAS;QACpC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC;IACvF,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,IAAI,WAAwC,CAAC;IAC7C,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,CAAC;QACH,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;YAClC,IAAI,QAAwB,CAAC;YAC7B,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACrC,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACvD,IAAI,UAAU,CAAC,GAAG,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;oBAClE,MAAM,IAAI,aAAa,CACrB,iBAAiB,EACjB,gJAAgJ,CACjJ,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,2EAA2E;gBAC3E,qDAAqD;gBACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,IAAI,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBACxG,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,GAAG,QAAQ,CAAC;oBACpB,2EAA2E;oBAC3E,8EAA8E;oBAC9E,IACE,aAAa,KAAK,SAAS;wBAC3B,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,KAAK,aAAa,CAAC,WAAW;4BAC5D,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,GAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EACtE,CAAC;wBACD,MAAM,mBAAmB,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;wBAC9D,QAAQ,GAAG,CAAC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAE,CAAC;wBAChD,OAAO,CAAC,KAAK,EAAE,CAAC;4BACd,MAAM,EAAE,QAAQ;4BAChB,IAAI,EAAE,mDAAmD,QAAQ,CAAC,UAAU,wCAAwC;yBACrH,CAAC,CAAC;oBACL,CAAC;oBACD,IAAI,CAAC,cAAc,EAAE,CAAC;wBACpB,cAAc,GAAG,IAAI,CAAC;wBACtB,OAAO,CAAC,KAAK,EAAE,CAAC;4BACd,MAAM,EAAE,QAAQ;4BAChB,IAAI,EAAE,8BAA8B,QAAQ,CAAC,UAAU,6CAA6C;yBACrG,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;oBACrC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;wBACtB,WAAW,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBAC9C,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;wBAC/B,WAAW,GAAG,IAAI,CAAC;oBACrB,CAAC;oBACD,QAAQ,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;oBAC3F,WAAW,GAAG,IAAI,CAAC;gBACrB,CAAC;YACH,CAAC;YAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC5C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,YAAY,GAAG,IAAI,CAAC;gBACpB,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrD,MAAM,OAAO,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;oBAC9B,OAAO,CAAC,KAAK,EAAE,CAAC;wBACd,MAAM,EAAE,QAAQ;wBAChB,IAAI,EACF,uKAAuK;4BACvK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB,MAAM,iEAAiE,CAAC,CAAC,CAAC,GAAG,CAAC;qBAClH,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,IAAI,OAAO,EAAE,CAAC;oBACtD,OAAO,CAAC,KAAK,EAAE,CAAC;wBACd,MAAM,EAAE,QAAQ;wBAChB,IAAI,EAAE,wEAAwE,MAAM,iEAAiE;qBACtJ,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACnH,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,aAAa,CAAC,aAAa,EAAE,QAAQ,IAAI,OAAO,IAAI,IAAI,gBAAgB,qBAAqB,CAAC,CAAC;YAC3G,CAAC;YAED,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;YAC7E,sEAAsE;YACtE,gCAAgC;YAChC,MAAM,IAAI,GAAG,WAAW,CAAC;YACzB,WAAW,GAAG,SAAS,CAAC;YACxB,MAAM,IAAI,EAAE,OAAO,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACjC,UAAU,EAAE,SAAS;gBACrB,UAAU;gBACV,IAAI,EAAE,CAAC,GAAG,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,UAAU,EAAE,GAAG,SAAS,CAAC;gBACnE,QAAQ;gBACR,GAAG;gBACH,MAAM;gBACN,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI;gBACJ,IAAI;gBACJ,MAAM;gBACN,QAAQ;gBACR,MAAM;gBACN,gBAAgB;gBAChB,WAAW,EAAE,QAAQ,IAAI,OAAO,IAAI,IAAI,gBAAgB,qBAAqB;gBAC7E,UAAU,EAAE,WAAW,IAAI,OAAO,GAAG,qBAAqB;gBAC1D,YAAY,EAAE,0BAA0B;aACzC,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE;oBAC/B,UAAU,EAAE,MAAM,CAAC,IAAI;oBACvB,SAAS;oBACT,UAAU;oBACV,UAAU;oBACV,UAAU,EAAE,QAAQ,CAAC,UAAU;oBAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,MAAM;oBACN,QAAQ;oBACR,GAAG;oBACH,SAAS;oBACT,MAAM;oBACN,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,gBAAgB;oBAChB,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,uBAAuB;oBAC/D,OAAO;iBACR,CAAC,CAAC;YACL,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;gBAAE,SAAS;YACtC,MAAM,MAAM,CAAC,KAAK,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,WAAW,EAAE,OAAO,EAAE,CAAC;QAC7B,MAAM,OAAO,EAAE,CAAC;QAChB,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,IAAoB,EACpB,MAAc,EACd,QAAgB,EAChB,MAA+B;IAE/B,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QACzB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,SAAS,CAAC;QACtC,IAAI,MAAM;YAAE,OAAO,QAAQ,CAAC;QAC5B,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QACrC,IAAI,MAAM,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YACrE,kFAAkF;YAClF,OAAO,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QACxD,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAuBD,SAAS,YAAY,CAAC,WAA2B,EAAE,IAAgB;IACjE,IAAI,WAAW,GAAG,WAAW,CAAC;IAC9B,IAAI,KAAK,GAAsD,SAAS,CAAC;IACzE,IAAI,WAAsC,CAAC;IAC3C,IAAI,iBAA8C,CAAC;IACnD,IAAI,QAAyC,CAAC;IAC9C,IAAI,aAA4C,CAAC;IACjD,IAAI,eAA0C,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,EAAE;QACjD,aAAa,GAAG,OAAO,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,CAAC,MAAkB,EAAiB,EAAE;QACnD,IAAI,eAAe;YAAE,OAAO,eAAe,CAAC;QAC5C,KAAK,GAAG,SAAS,CAAC;QAClB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,eAAe,GAAG,CAAC,KAAK,IAAI,EAAE;YAC5B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;oBAAS,CAAC;gBACT,aAAa,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,IAAoB,EAAQ,EAAE;QAC3C,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAC/B,IAAI,IAAI,KAAK,WAAW,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO;YACxD,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,KAAK,CAAC,WAAW,CAAC,CAAC;IAEnB,MAAM,OAAO,GAAG,CAAC,cAAc,GAAmB,EAAE,EAAiB,EAAE;QACrE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YAChD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,WAAW;YAAE,OAAO,WAAW,CAAC;QAEpC,KAAK,GAAG,YAAY,CAAC;QACrB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,iBAAiB,GAAG,UAAU,CAAC;QAC/B,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM;YAClC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YAC7D,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAEtB,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;YACxB,MAAM,QAAQ,GAAG,WAAW,CAAC;YAC7B,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;YACzF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC3B,MAAM,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC;YACtE,CAAC;YAED,yEAAyE;YACzE,sEAAsE;YACtE,sEAAsE;YACtE,0EAA0E;YAC1E,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;YACnC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;gBACpC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC3B,MAAM,IAAI,aAAa,CAAC,aAAa,EAAE,QAAQ,IAAI,OAAO,IAAI,IAAI,gBAAgB,qBAAqB,CAAC,CAAC;YAC3G,CAAC;YAED,wEAAwE;YACxE,yEAAyE;YACzE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACjC,UAAU,EAAE,IAAI,CAAC,SAAS;gBAC1B,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;gBACzE,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI;gBACJ,IAAI;gBACJ,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB;gBAC5C,MAAM;gBACN,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;gBACvC,WAAW,EAAE,QAAQ,IAAI,OAAO,IAAI,IAAI,gBAAgB,qBAAqB;gBAC7E,UAAU,EAAE,KAAK;gBACjB,YAAY,EAAE,sBAAsB;aACrC,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,MAAmD,CAAC;gBACpE,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,YAAY,CAAC,CAAC;gBAC7C,MAAM,OAAO,CAAC,KAAK,CAAC;YACtB,CAAC;YAED,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;YAC1B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,KAAK,GAAG,SAAS,CAAC;YAClB,0EAA0E;YAC1E,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU;gBAAE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAChB,WAAW,GAAG,SAAS,CAAC;YACxB,iBAAiB,GAAG,SAAS,CAAC;YAC9B,IAAI,KAAK,KAAK,YAAY;gBAAE,KAAK,GAAG,SAAS,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,CAAC,WAAW,GAAgB,EAAE,EAAuB,EAAE;QAClE,QAAQ,KAAK,CAAC,KAAK,IAAI,EAAE;YACvB,IAAI,KAAK,KAAK,SAAS;gBAAE,KAAK,GAAG,UAAU,CAAC;YAC5C,iBAAiB,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACtD,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,MAAM,WAAW,CAAC;gBACpB,CAAC;gBAAC,MAAM,CAAC;oBACP,iEAAiE;gBACnE,CAAC;YACH,CAAC;YACD,MAAM,MAAM,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAClF,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,MAAM,GAAc;QACxB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,KAAK;QAC5B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;QACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;QACtB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,GAAG;YACL,OAAO,WAAW,CAAC,KAAK,CAAC,GAAI,CAAC;QAChC,CAAC;QACD,IAAI,OAAO;YACT,OAAO,WAAW,CAAC,KAAK,CAAC;QAC3B,CAAC;QACD,IAAI,UAAU;YACZ,OAAO,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;QACD,MAAM;QACN,IAAI;QACJ,OAAO;KACR,CAAC;IACF,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,uEAAuE;AACvE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAa,CAAC;AAEzC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAO,GAAgB,EAAE;IAC5D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ResolvedLauncher } from './binary.ts';
2
+ /**
3
+ * Test-only hooks. Nothing here is exported from the public entry points.
4
+ *
5
+ * `internalCommand` overrides how the CPA process is launched: the lifecycle
6
+ * tests run a Node fixture through `process.execPath` because Windows does not
7
+ * honour the fixture's shebang line. A Symbol key keeps it out of the typed
8
+ * options and out of reach of plain-object options from JavaScript callers.
9
+ */
10
+ export declare const internalCommand: unique symbol;
11
+ export interface InternalCommand {
12
+ /** Executable to spawn instead of the resolved CPA binary. */
13
+ path: string;
14
+ /** Arguments placed before `-config <file>`. */
15
+ args: readonly string[];
16
+ /** Launcher to wrap the command in; omitted means none (tests opt in explicitly). */
17
+ launcher?: ResolvedLauncher;
18
+ }
19
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/server/internal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,eAAkC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Test-only hooks. Nothing here is exported from the public entry points.
3
+ *
4
+ * `internalCommand` overrides how the CPA process is launched: the lifecycle
5
+ * tests run a Node fixture through `process.execPath` because Windows does not
6
+ * honour the fixture's shebang line. A Symbol key keeps it out of the typed
7
+ * options and out of reach of plain-object options from JavaScript callers.
8
+ */
9
+ export const internalCommand = Symbol('cpajs.internalCommand');
10
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/server/internal.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC"}