@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
@@ -1,31 +1,74 @@
1
1
  import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
2
  import { join, resolve } from 'node:path';
3
- import { parse as parseYaml } from 'yaml';
3
+ import { parse as parseYaml, parseDocument, stringify as stringifyYaml } from 'yaml';
4
4
  import { CpaStartError } from './errors.js';
5
- export const DEFAULT_PORT = 8317;
6
5
  export const MANAGED_CONFIG_FILE = 'config.yaml';
7
6
  function isRecord(value) {
8
7
  return typeof value === 'object' && value !== null && !Array.isArray(value);
9
8
  }
9
+ function hasOwn(value, key) {
10
+ return Object.hasOwn(value, key);
11
+ }
12
+ /**
13
+ * Decodes a port like yaml.v3 decodes into an int: null (and a missing key)
14
+ * becomes 0, a finite float is truncated, and anything else is NaN. CPA does
15
+ * not default the port, so 0 must stay 0 instead of becoming 8317.
16
+ */
17
+ function readPort(value, present) {
18
+ if (!present || value === null || value === undefined)
19
+ return 0;
20
+ return typeof value === 'number' && Number.isFinite(value) ? Math.trunc(value) : Number.NaN;
21
+ }
10
22
  /**
11
- * Reads listener settings from a parsed config document. The v8 `server.*`
12
- * keys win over the legacy top-level `host`/`port`/`tls` keys, mirroring CPA.
23
+ * Reads listener settings from a parsed config document using upstream's
24
+ * presence-based precedence: a `server.*` leaf wins whenever it is present,
25
+ * even when it is `0`, `false` or `null` (internal/config/config_v8.go).
26
+ * Legacy top-level `host`/`port`/`tls` are used only when that v8 leaf is
27
+ * absent, and `tls.enable` is resolved leaf by leaf rather than by replacing
28
+ * the whole `tls` object.
13
29
  */
14
30
  export function readListenSettings(doc) {
15
31
  const root = isRecord(doc) ? doc : {};
16
32
  const server = isRecord(root.server) ? root.server : {};
17
- const pick = (key) => (key in server ? server[key] : root[key]);
18
- const host = pick('host');
19
- const port = pick('port');
20
- const tls = pick('tls');
21
- const parsedPort = typeof port === 'number' ? port : typeof port === 'string' ? Number(port) : Number.NaN;
33
+ const serverTls = isRecord(server.tls) ? server.tls : undefined;
34
+ const legacyTls = isRecord(root.tls) ? root.tls : undefined;
35
+ const v8Port = hasOwn(server, 'port');
36
+ const host = hasOwn(server, 'host') ? server.host : root.host;
37
+ const port = readPort(v8Port ? server.port : root.port, v8Port || hasOwn(root, 'port'));
38
+ let tls;
39
+ if (serverTls !== undefined && hasOwn(serverTls, 'enable'))
40
+ tls = serverTls.enable;
41
+ else if (legacyTls !== undefined && hasOwn(legacyTls, 'enable'))
42
+ tls = legacyTls.enable;
22
43
  return {
23
44
  host: typeof host === 'string' ? host.trim() : '',
24
- // CPA falls back to 8317 when the port is missing or not positive.
25
- port: Number.isInteger(parsedPort) && parsedPort > 0 ? parsedPort : port === 0 ? 0 : DEFAULT_PORT,
26
- tls: isRecord(tls) && tls.enable === true,
45
+ port,
46
+ tls: tls === true,
27
47
  };
28
48
  }
49
+ /**
50
+ * Reads management settings from a parsed config document. The v8 `management`
51
+ * section wins over the legacy `remote-management` alias, mirroring CPA.
52
+ */
53
+ export function readManagementSettings(doc) {
54
+ const root = isRecord(doc) ? doc : {};
55
+ const section = isRecord(root.management)
56
+ ? root.management
57
+ : isRecord(root['remote-management'])
58
+ ? root['remote-management']
59
+ : {};
60
+ const secret = section['secret-key'];
61
+ return {
62
+ allowRemote: section['allow-remote'] === true,
63
+ hasSecret: typeof secret === 'string' && secret.trim() !== '',
64
+ secretKey: typeof secret === 'string' && secret.trim() !== '' ? secret : undefined,
65
+ };
66
+ }
67
+ // Only known secret keys are collected. Open-ended maps such as `headers`,
68
+ // `payload` and `plugins.configs.*` can hold credentials under arbitrary names;
69
+ // they are deliberately skipped so an ordinary config value is never mistaken
70
+ // for a secret and redacted out of unrelated log lines. Pass `redact` to
71
+ // startServer for those.
29
72
  const SECRET_FIELDS = new Set(['secret-key', 'api-key', 'github-token', 'credential', 'access_token', 'refresh_token']);
30
73
  const SECRET_LISTS = new Set(['api-keys']);
31
74
  /** Secrets that appear in a config document and must never reach logs. */
@@ -56,16 +99,24 @@ export function configSecrets(doc) {
56
99
  /**
57
100
  * Writes a `config` object to the managed config file in `stateDir`.
58
101
  *
59
- * The object is serialised as JSON, which is valid YAML and is read by CPA's
60
- * YAML loader unchanged. Listener and auth directory defaults are filled in so
61
- * the process stays inside `stateDir` and binds to loopback unless told otherwise.
102
+ * The object is serialised as YAML so CPA and humans see the same stable shape.
103
+ * Listener and auth directory defaults are filled in so the process stays inside
104
+ * `stateDir` and binds to loopback unless told otherwise.
62
105
  */
63
- export async function writeManagedConfig(config, stateDir, listen) {
106
+ export async function writeManagedConfig(config, stateDir, listen, management) {
64
107
  const doc = structuredClone(config);
65
108
  const server = isRecord(doc.server) ? doc.server : {};
66
109
  doc.server = { ...server, host: listen.host, port: listen.port };
67
110
  if (doc['config-version'] === undefined)
68
111
  doc['config-version'] = 8;
112
+ if (management !== undefined) {
113
+ const section = isRecord(doc.management) ? doc.management : {};
114
+ doc.management = {
115
+ ...section,
116
+ 'secret-key': management.secretKeyHash,
117
+ 'allow-remote': management.allowRemote,
118
+ };
119
+ }
69
120
  const oauth = isRecord(doc.oauth) ? doc.oauth : {};
70
121
  // Keep credentials inside stateDir unless the config chooses a location (v8 or legacy key).
71
122
  if (oauth['auth-dir'] === undefined && doc['auth-dir'] === undefined) {
@@ -74,8 +125,68 @@ export async function writeManagedConfig(config, stateDir, listen) {
74
125
  doc.oauth = { ...oauth, 'auth-dir': authDir };
75
126
  }
76
127
  const configPath = join(stateDir, MANAGED_CONFIG_FILE);
77
- await writeFile(configPath, `${JSON.stringify(doc, null, 2)}\n`, { mode: 0o600 });
78
- return { configPath, listen: readListenSettings(doc), secrets: configSecrets(doc), managed: true };
128
+ await writeFile(configPath, stringifyYaml(doc), { mode: 0o600 });
129
+ return {
130
+ configPath,
131
+ listen: readListenSettings(doc),
132
+ management: readManagementSettings(doc),
133
+ secrets: configSecrets(doc),
134
+ managed: true,
135
+ reused: false,
136
+ };
137
+ }
138
+ function isFixedPort(port) {
139
+ return Number.isInteger(port) && port > 0 && port <= 65_535;
140
+ }
141
+ /**
142
+ * Reads the managed config file in `stateDir` without modifying it.
143
+ *
144
+ * Returns `undefined` when the file does not exist yet. An existing file must
145
+ * set a fixed `server.port`, because CPA does not report the port it picks and
146
+ * a later start cannot discover it.
147
+ */
148
+ export async function readManagedConfig(stateDir) {
149
+ const configPath = join(stateDir, MANAGED_CONFIG_FILE);
150
+ let text;
151
+ try {
152
+ text = await readFile(configPath, 'utf8');
153
+ }
154
+ catch (cause) {
155
+ if (cause.code === 'ENOENT')
156
+ return undefined;
157
+ throw new CpaStartError('invalid-options', `Cannot read ${configPath}.`, { cause });
158
+ }
159
+ let doc;
160
+ try {
161
+ doc = parseYaml(text, { merge: true });
162
+ }
163
+ catch (cause) {
164
+ throw new CpaStartError('invalid-options', `${configPath} is not valid YAML.`, { cause });
165
+ }
166
+ const listen = readListenSettings(doc);
167
+ if (!isFixedPort(listen.port)) {
168
+ throw new CpaStartError('invalid-options', `${configPath} does not set a fixed server.port. CLIProxyAPI does not report the port it picks; set server.port, delete the file, or pass overwriteConfig: true.`);
169
+ }
170
+ return {
171
+ configPath,
172
+ listen,
173
+ management: readManagementSettings(doc),
174
+ secrets: configSecrets(doc),
175
+ managed: true,
176
+ reused: true,
177
+ };
178
+ }
179
+ /**
180
+ * Sets `management.secret-key` and `management.allow-remote` in a reused
181
+ * managed config, leaving every other key and comment as CPA left them.
182
+ * The legacy `remote-management` section is dropped so it cannot shadow them.
183
+ */
184
+ export async function updateManagedSecret(configPath, management) {
185
+ const document = parseDocument(await readFile(configPath, 'utf8'), { merge: true });
186
+ document.delete('remote-management');
187
+ document.setIn(['management', 'secret-key'], management.secretKeyHash);
188
+ document.setIn(['management', 'allow-remote'], management.allowRemote);
189
+ await writeFile(configPath, document.toString(), { mode: 0o600 });
79
190
  }
80
191
  /** Reads an existing config file without modifying it. */
81
192
  export async function inspectConfigFile(configPath) {
@@ -89,15 +200,30 @@ export async function inspectConfigFile(configPath) {
89
200
  }
90
201
  let doc;
91
202
  try {
92
- doc = parseYaml(text);
203
+ doc = parseYaml(text, { merge: true });
93
204
  }
94
205
  catch (cause) {
95
206
  throw new CpaStartError('invalid-options', `configPath ${absolute} is not valid YAML.`, { cause });
96
207
  }
208
+ const root = isRecord(doc) ? doc : {};
209
+ if (hasOwn(root, 'server') && !isRecord(root.server)) {
210
+ throw new CpaStartError('invalid-options', `configPath ${absolute} has a "server" section that is not a mapping.`);
211
+ }
212
+ if (isRecord(root.server) && hasOwn(root.server, 'tls') && !isRecord(root.server.tls)) {
213
+ throw new CpaStartError('invalid-options', `configPath ${absolute} has a "server.tls" section that is not a mapping.`);
214
+ }
97
215
  const listen = readListenSettings(doc);
98
- if (listen.port === 0) {
99
- throw new CpaStartError('invalid-options', `configPath ${absolute} sets port 0. CLIProxyAPI does not report the port it picks, so set a fixed port or pass a config object instead.`);
216
+ if (!isFixedPort(listen.port)) {
217
+ const shown = Number.isNaN(listen.port) ? 'a non-numeric value' : String(listen.port);
218
+ throw new CpaStartError('invalid-options', `configPath ${absolute} does not set a fixed port between 1 and 65535 (got ${shown}). CLIProxyAPI does not default the port: a missing or non-positive port becomes 0 and binds a random port it does not report. Set a fixed port or pass a config object instead.`);
100
219
  }
101
- return { configPath: absolute, listen, secrets: configSecrets(doc), managed: false };
220
+ return {
221
+ configPath: absolute,
222
+ listen,
223
+ management: readManagementSettings(doc),
224
+ secrets: configSecrets(doc),
225
+ managed: false,
226
+ reused: false,
227
+ };
102
228
  }
103
229
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":"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"}
@@ -17,8 +17,10 @@ export type CpaStartErrorCode =
17
17
  /** Readiness was not reached within `startupTimeoutMs`. */
18
18
  | 'timeout'
19
19
  /** The `signal` passed to `startServer` was aborted. */
20
- | 'aborted';
21
- /** `startServer` failed. Secrets are redacted from `message` and `output`. */
20
+ | 'aborted'
21
+ /** `restart` was called after the server stopped. */
22
+ | 'stopped';
23
+ /** `startServer` or `restart` failed. Secrets are redacted from `message` and `output`. */
22
24
  export declare class CpaStartError extends Error {
23
25
  readonly name = "CpaStartError";
24
26
  readonly code: CpaStartErrorCode;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/server/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,GAAG,uBAAuB,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAEjH,+DAA+D;AAC/D,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAkB,IAAI,oBAAoB;IAC1C,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAElC,YAAY,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAGpD;CACF;AAED,MAAM,MAAM,iBAAiB;AAC3B,qCAAqC;AACnC,iBAAiB;AACnB,4CAA4C;GAC1C,aAAa;AACf,iDAAiD;GAC/C,QAAQ;AACV,wCAAwC;GACtC,cAAc;AAChB,2DAA2D;GACzD,SAAS;AACX,wDAAwD;GACtD,SAAS,CAAC;AAEd,8EAA8E;AAC9E,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAkB,IAAI,mBAAmB;IACzC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAEvC,YACE,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,EAO7G;CACF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/server/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,GAAG,uBAAuB,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAEjH,+DAA+D;AAC/D,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAkB,IAAI,oBAAoB;IAC1C,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAElC,YAAY,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAGpD;CACF;AAED,MAAM,MAAM,iBAAiB;AAC3B,qCAAqC;AACnC,iBAAiB;AACnB,4CAA4C;GAC1C,aAAa;AACf,iDAAiD;GAC/C,QAAQ;AACV,wCAAwC;GACtC,cAAc;AAChB,2DAA2D;GACzD,SAAS;AACX,wDAAwD;GACtD,SAAS;AACX,qDAAqD;GACnD,SAAS,CAAC;AAEd,2FAA2F;AAC3F,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAkB,IAAI,mBAAmB;IACzC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAEvC,YACE,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,EAO7G;CACF"}
@@ -7,7 +7,7 @@ export class CpaBinaryError extends Error {
7
7
  this.code = code;
8
8
  }
9
9
  }
10
- /** `startServer` failed. Secrets are redacted from `message` and `output`. */
10
+ /** `startServer` or `restart` failed. Secrets are redacted from `message` and `output`. */
11
11
  export class CpaStartError extends Error {
12
12
  name = 'CpaStartError';
13
13
  code;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/server/errors.ts"],"names":[],"mappings":"AAEA,+DAA+D;AAC/D,MAAM,OAAO,cAAe,SAAQ,KAAK;IACrB,IAAI,GAAG,gBAAgB,CAAC;IACjC,IAAI,CAAqB;IAElC,YAAY,IAAwB,EAAE,OAAe;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAgBD,8EAA8E;AAC9E,MAAM,OAAO,aAAc,SAAQ,KAAK;IACpB,IAAI,GAAG,eAAe,CAAC;IAChC,IAAI,CAAoB;IACjC,wEAAwE;IAC/D,MAAM,CAAS;IACf,QAAQ,CAAgB;IACxB,MAAM,CAAwB;IAEvC,YACE,IAAuB,EACvB,OAAe,EACf,OAAO,GAAmG,EAAE;QAE5G,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/server/errors.ts"],"names":[],"mappings":"AAEA,+DAA+D;AAC/D,MAAM,OAAO,cAAe,SAAQ,KAAK;IACrB,IAAI,GAAG,gBAAgB,CAAC;IACjC,IAAI,CAAqB;IAElC,YAAY,IAAwB,EAAE,OAAe;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAkBD,2FAA2F;AAC3F,MAAM,OAAO,aAAc,SAAQ,KAAK;IACpB,IAAI,GAAG,eAAe,CAAC;IAChC,IAAI,CAAoB;IACjC,wEAAwE;IAC/D,MAAM,CAAS;IACf,QAAQ,CAAgB;IACxB,MAAM,CAAwB;IAEvC,YACE,IAAuB,EACvB,OAAe,EACf,OAAO,GAAmG,EAAE;QAE5G,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IACvC,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- import type { CpaServer, StartServerOptions } from './types.ts';
1
+ import type { CpaServer, ExitResult, StartServerOptions, StopOptions } from './types.ts';
2
2
  export { candidateTargets, currentPlatform, detectLibc, resolveBinary } from './binary.ts';
3
3
  export type { HostPlatform, Libc, ResolvedBinary } from './binary.ts';
4
4
  export { CpaBinaryError, CpaStartError } from './errors.ts';
@@ -15,4 +15,21 @@ export type { CpaConfig } from '../client/types/config.ts';
15
15
  * call (the temporary state directory) are removed before the error is thrown.
16
16
  */
17
17
  export declare function startServer(options?: StartServerOptions): Promise<CpaServer>;
18
+ /**
19
+ * Stops every server started by this process and still running, using each
20
+ * handle's `stop()` (so temporary state directories are removed too).
21
+ *
22
+ * The library does not install signal handlers. A host that should not leave
23
+ * CPA processes behind on SIGTERM/SIGINT calls this from its own handler:
24
+ *
25
+ * ```ts
26
+ * for (const signal of ['SIGINT', 'SIGTERM'] as const) {
27
+ * process.once(signal, async () => {
28
+ * await stopAllServers();
29
+ * process.exit(0);
30
+ * });
31
+ * }
32
+ * ```
33
+ */
34
+ export declare function stopAllServers(options?: StopOptions): Promise<ExitResult[]>;
18
35
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAc,kBAAkB,EAA0B,MAAM,YAAY,CAAC;AAEpG,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC5E,mBAAmB,YAAY,CAAC;AAChC,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AA+C3D;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,SAAS,CAAC,CAoGtF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAA2B,kBAAkB,EAA0B,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1I,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC5E,mBAAmB,YAAY,CAAC;AAChC,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAgL3D;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,SAAS,CAAC,CAsLtF;AAyMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAErF"}