@ninedeploy/sdk 0.17.1 → 0.18.4

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 (38) hide show
  1. package/dist/resources/databases.d.ts +2 -1
  2. package/dist/resources/databases.d.ts.map +1 -1
  3. package/dist/resources/databases.js +3 -2
  4. package/dist/resources/databases.js.map +1 -1
  5. package/dist/resources/deploys.d.ts +18 -1
  6. package/dist/resources/deploys.d.ts.map +1 -1
  7. package/dist/resources/deploys.js +1 -0
  8. package/dist/resources/deploys.js.map +1 -1
  9. package/dist/resources/logs.d.ts +6 -1
  10. package/dist/resources/logs.d.ts.map +1 -1
  11. package/dist/resources/logs.js +3 -0
  12. package/dist/resources/logs.js.map +1 -1
  13. package/dist/resources/services.d.ts +14 -13
  14. package/dist/resources/services.d.ts.map +1 -1
  15. package/dist/resources/services.js +9 -0
  16. package/dist/resources/services.js.map +1 -1
  17. package/dist/resources/system.d.ts +10 -2
  18. package/dist/resources/system.d.ts.map +1 -1
  19. package/dist/resources/system.js +13 -1
  20. package/dist/resources/system.js.map +1 -1
  21. package/dist/resources/terminals.d.ts.map +1 -1
  22. package/dist/resources/terminals.js +3 -1
  23. package/dist/resources/terminals.js.map +1 -1
  24. package/dist/resources/volumes.d.ts +42 -14
  25. package/dist/resources/volumes.d.ts.map +1 -1
  26. package/dist/resources/volumes.js +33 -17
  27. package/dist/resources/volumes.js.map +1 -1
  28. package/dist/terminal.d.ts +1 -1
  29. package/dist/terminal.d.ts.map +1 -1
  30. package/package.json +2 -2
  31. package/src/resources/databases.ts +4 -3
  32. package/src/resources/deploys.ts +16 -3
  33. package/src/resources/logs.ts +7 -0
  34. package/src/resources/services.ts +35 -6
  35. package/src/resources/system.ts +23 -2
  36. package/src/resources/terminals.ts +3 -1
  37. package/src/resources/volumes.ts +49 -35
  38. package/src/terminal.ts +1 -1
@@ -27,53 +27,81 @@ export interface VolumesApi {
27
27
  freedBytes: number;
28
28
  }>;
29
29
  /** File manager: list a directory inside the volume. */
30
- listFiles: (name: string, path?: string) => Promise<{
30
+ listFiles: (name: string, path?: string, options?: {
31
+ serverId?: number;
32
+ }) => Promise<{
31
33
  path: string;
32
34
  entries: VolumeFileEntry[];
33
35
  }>;
34
36
  /** File manager: read a file (base64 content). */
35
- readFile: (name: string, path: string) => Promise<{
37
+ readFile: (name: string, path: string, options?: {
38
+ serverId?: number;
39
+ }) => Promise<{
36
40
  content: string;
37
41
  encoding: 'utf8' | 'base64';
38
42
  }>;
39
43
  /** File manager: write/overwrite a file (base64 content). */
40
- writeFile: (name: string, input: VolumeFileWriteInput) => Promise<{
44
+ writeFile: (name: string, input: VolumeFileWriteInput, options?: {
45
+ serverId?: number;
46
+ }) => Promise<{
41
47
  ok: boolean;
42
48
  }>;
43
49
  /** File manager: create a directory. */
44
- mkdir: (name: string, input: VolumePathCreateInput) => Promise<{
50
+ mkdir: (name: string, input: VolumePathCreateInput, options?: {
51
+ serverId?: number;
52
+ }) => Promise<{
45
53
  ok: boolean;
46
54
  }>;
47
55
  /** File manager: delete a file or directory (recursive). */
48
- deleteFile: (name: string, path: string) => Promise<void>;
56
+ deleteFile: (name: string, path: string, options?: {
57
+ serverId?: number;
58
+ }) => Promise<void>;
49
59
  };
50
60
  containers: {
51
- inspect: (container: string) => Promise<ContainerInspectData>;
52
- compose: (container: string) => Promise<ContainerComposeData>;
61
+ inspect: (container: string, options?: {
62
+ serverId?: number;
63
+ }) => Promise<ContainerInspectData>;
64
+ compose: (container: string, options?: {
65
+ serverId?: number;
66
+ }) => Promise<ContainerComposeData>;
53
67
  /** File manager: list a directory inside the container. */
54
- listFiles: (container: string, path?: string) => Promise<{
68
+ listFiles: (container: string, path?: string, options?: {
69
+ serverId?: number;
70
+ }) => Promise<{
55
71
  path: string;
56
72
  entries: VolumeFileEntry[];
57
73
  }>;
58
74
  /** File manager: read a file (base64 content). */
59
- readFile: (container: string, path: string) => Promise<{
75
+ readFile: (container: string, path: string, options?: {
76
+ serverId?: number;
77
+ }) => Promise<{
60
78
  content: string;
61
79
  encoding: 'utf8' | 'base64';
62
80
  }>;
63
81
  /** File manager: write/overwrite a file (base64 content). */
64
- writeFile: (container: string, input: VolumeFileWriteInput) => Promise<{
82
+ writeFile: (container: string, input: VolumeFileWriteInput, options?: {
83
+ serverId?: number;
84
+ }) => Promise<{
65
85
  ok: boolean;
66
86
  }>;
67
87
  /** File manager: create a directory. */
68
- mkdir: (container: string, input: VolumePathCreateInput) => Promise<{
88
+ mkdir: (container: string, input: VolumePathCreateInput, options?: {
89
+ serverId?: number;
90
+ }) => Promise<{
69
91
  ok: boolean;
70
92
  }>;
71
- makeDir: (container: string, input: VolumePathCreateInput) => Promise<{
93
+ makeDir: (container: string, input: VolumePathCreateInput, options?: {
94
+ serverId?: number;
95
+ }) => Promise<{
72
96
  ok: boolean;
73
97
  }>;
74
98
  /** File manager: delete a file or directory (recursive). */
75
- deleteFile: (container: string, path: string) => Promise<void>;
76
- deletePath: (container: string, path: string) => Promise<void>;
99
+ deleteFile: (container: string, path: string, options?: {
100
+ serverId?: number;
101
+ }) => Promise<void>;
102
+ deletePath: (container: string, path: string, options?: {
103
+ serverId?: number;
104
+ }) => Promise<void>;
77
105
  };
78
106
  /** Per-service additional volume attachments. Distinct from the instance-wide
79
107
  * `volumes` namespace (which lists every Docker volume on the host). The
@@ -1 +1 @@
1
- {"version":3,"file":"volumes.d.ts","sourceRoot":"","sources":["../../src/resources/volumes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"volumes.d.ts","sourceRoot":"","sources":["../../src/resources/volumes.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,32 @@
1
1
  import { apiGetUrl } from '../apiPath.js';
2
2
  export function volumesApi(t) {
3
3
  const { get, send, request } = t;
4
+ const volumePath = (name, suffix, options) => {
5
+ const id = options?.serverId;
6
+ if (id != null && (!Number.isSafeInteger(id) || id < 1))
7
+ throw new TypeError('Invalid volume node id');
8
+ const prefix = id == null ? '/v1/volumes' : `/v1/servers/${id}/volumes`;
9
+ return `${prefix}/${encodeURIComponent(name)}${suffix}`;
10
+ };
11
+ const containerPath = (container, suffix, options) => {
12
+ const id = options?.serverId;
13
+ if (id != null && (!Number.isSafeInteger(id) || id < 1))
14
+ throw new TypeError('Invalid container node id');
15
+ // An older panel returns 404 for this namespace instead of ignoring a host
16
+ // query and accidentally editing a same-named local container.
17
+ const prefix = id == null ? '/v1/containers' : `/v1/servers/${id}/containers`;
18
+ return `${prefix}/${encodeURIComponent(container)}${suffix}`;
19
+ };
4
20
  return {
5
21
  volumes: {
6
22
  list: (options) => get(apiGetUrl('/v1/volumes', { serverId: options?.serverId })),
7
23
  create: (input) => send('POST', '/v1/volumes', input),
8
- listFiles: (name, path = '') => get(`/v1/volumes/${encodeURIComponent(name)}/files?path=${encodeURIComponent(path)}`),
9
- readFile: (name, path) => get(`/v1/volumes/${encodeURIComponent(name)}/files/content?path=${encodeURIComponent(path)}`),
10
- writeFile: (name, input) => send('PUT', `/v1/volumes/${encodeURIComponent(name)}/files`, input),
11
- mkdir: (name, input) => send('POST', `/v1/volumes/${encodeURIComponent(name)}/files/dir`, input),
12
- deleteFile: async (name, path) => {
13
- await request(`/v1/volumes/${encodeURIComponent(name)}/files?path=${encodeURIComponent(path)}`, { method: 'DELETE' });
24
+ listFiles: (name, path = '', options) => request(`${volumePath(name, '/files', options)}?path=${encodeURIComponent(path)}`, {}, 150_000),
25
+ readFile: (name, path, options) => request(`${volumePath(name, '/files/content', options)}?path=${encodeURIComponent(path)}`, {}, 150_000),
26
+ writeFile: (name, input, options) => request(volumePath(name, '/files', options), { method: 'PUT', body: input }, 150_000),
27
+ mkdir: (name, input, options) => request(volumePath(name, '/files/dir', options), { method: 'POST', body: input }, 150_000),
28
+ deleteFile: async (name, path, options) => {
29
+ await request(`${volumePath(name, '/files', options)}?path=${encodeURIComponent(path)}`, { method: 'DELETE' }, 150_000);
14
30
  },
15
31
  remove: async (name, options) => {
16
32
  const node = options?.serverId === undefined ? '' : `?serverId=${options.serverId}`;
@@ -19,18 +35,18 @@ export function volumesApi(t) {
19
35
  prune: () => send('POST', '/v1/volumes/prune'),
20
36
  },
21
37
  containers: {
22
- inspect: (container) => get(`/v1/containers/${encodeURIComponent(container)}/inspect`),
23
- compose: (container) => get(`/v1/containers/${encodeURIComponent(container)}/compose`),
24
- listFiles: (container, path = '/') => get(`/v1/containers/${encodeURIComponent(container)}/files?path=${encodeURIComponent(path)}`),
25
- readFile: (container, path) => get(`/v1/containers/${encodeURIComponent(container)}/files/content?path=${encodeURIComponent(path)}`),
26
- writeFile: (container, input) => send('PUT', `/v1/containers/${encodeURIComponent(container)}/files`, input),
27
- mkdir: (container, input) => send('POST', `/v1/containers/${encodeURIComponent(container)}/files/dir`, input),
28
- makeDir: (container, input) => send('POST', `/v1/containers/${encodeURIComponent(container)}/files/dir`, input),
29
- deleteFile: async (container, path) => {
30
- await request(`/v1/containers/${encodeURIComponent(container)}/files?path=${encodeURIComponent(path)}`, { method: 'DELETE' });
38
+ inspect: (container, options) => get(containerPath(container, '/inspect', options)),
39
+ compose: (container, options) => get(containerPath(container, '/compose', options)),
40
+ listFiles: (container, path = '/', options) => get(`${containerPath(container, '/files', options)}?path=${encodeURIComponent(path)}`),
41
+ readFile: (container, path, options) => get(`${containerPath(container, '/files/content', options)}?path=${encodeURIComponent(path)}`),
42
+ writeFile: (container, input, options) => send('PUT', containerPath(container, '/files', options), input),
43
+ mkdir: (container, input, options) => send('POST', containerPath(container, '/files/dir', options), input),
44
+ makeDir: (container, input, options) => send('POST', containerPath(container, '/files/dir', options), input),
45
+ deleteFile: async (container, path, options) => {
46
+ await request(`${containerPath(container, '/files', options)}?path=${encodeURIComponent(path)}`, { method: 'DELETE' });
31
47
  },
32
- deletePath: async (container, path) => {
33
- await request(`/v1/containers/${encodeURIComponent(container)}/files?path=${encodeURIComponent(path)}`, { method: 'DELETE' });
48
+ deletePath: async (container, path, options) => {
49
+ await request(`${containerPath(container, '/files', options)}?path=${encodeURIComponent(path)}`, { method: 'DELETE' });
34
50
  },
35
51
  },
36
52
  serviceVolumes: {
@@ -1 +1 @@
1
- {"version":3,"file":"volumes.js","sourceRoot":"","sources":["../../src/resources/volumes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"volumes.js","sourceRoot":"","sources":["../../src/resources/volumes.ts"],"names":[],"mappings":"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"}
@@ -51,7 +51,7 @@ export interface TerminalReady {
51
51
  };
52
52
  }
53
53
  export interface TerminalHandlers {
54
- /** The shell runs; input typed before this was held and is flushed now. */
54
+ /** The terminal transport is ready; buffered input is flushed now. Scripted interactive clients must also wait for their CLI prompt and each command's response. */
55
55
  onReady?: (ready: TerminalReady) => void;
56
56
  /** Shell output. */
57
57
  onData?: (bytes: Uint8Array) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ninedeploy/sdk",
3
- "version": "0.17.1",
3
+ "version": "0.18.4",
4
4
  "description": "Official TypeScript SDK for NineDeploy PaaS",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -25,7 +25,7 @@
25
25
  }
26
26
  },
27
27
  "dependencies": {
28
- "@ninedeploy/schemas": "0.17.1",
28
+ "@ninedeploy/schemas": "0.18.4",
29
29
  "js-yaml": "^4.3.1"
30
30
  },
31
31
  "devDependencies": {
@@ -35,7 +35,7 @@ export interface DatabasesApi {
35
35
  logs: (id: number, lines?: number) => Promise<{ logs: string[] }>;
36
36
  credentials: (id: number) => Promise<DatabaseCredentialsWithPublic>;
37
37
  setLimits: (id: number, input: SetLimitsInput) => Promise<{ cpuShares: number | null; memLimitMb: number | null }>;
38
- startStudio: (id: number, port?: number) => Promise<{ ok: boolean; port: number; url: string }>;
38
+ startStudio: (id: number, port?: number) => Promise<{ ok: boolean; port: number | null; url: string; serverId?: number }>;
39
39
  stopStudio: (id: number) => Promise<{ ok: boolean }>;
40
40
  /**
41
41
  * PgBouncer sidecar (G-32). Returns the current sidecar
@@ -159,9 +159,10 @@ export function databasesApi(t: Transport): DatabasesApi {
159
159
  logs: (id, lines) => get<{ logs: string[] }>(`/v1/databases/${id}/logs${lines ? `?lines=${lines}` : ''}`),
160
160
  credentials: (id) => get<DatabaseCredentialsWithPublic>(`/v1/databases/${id}/credentials`),
161
161
  setLimits: (id, input) => send<{ cpuShares: number | null; cpuLimitMilli: number | null; memLimitMb: number | null }>('PATCH', `/v1/databases/${id}/limits`, input),
162
- startStudio: (id, port) => send<{ ok: boolean; port: number; url: string }>('POST', `/v1/databases/${id}/studio`, { port }),
162
+ // Allow bounded image preparation and keep the path-scoped browser cookie.
163
+ startStudio: (id, port) => request<{ ok: boolean; port: number | null; url: string; serverId?: number }>(`/v1/databases/${id}/studio`, { method: 'POST', body: { port }, credentials: 'include' }, 240_000),
163
164
  stopStudio: async (id) => {
164
- await request(`/v1/databases/${id}/studio`, { method: 'DELETE' });
165
+ await request(`/v1/databases/${id}/studio`, { method: 'DELETE', credentials: 'include' }, 270_000);
165
166
  return { ok: true };
166
167
  },
167
168
  drillBackup: (id, input) =>
@@ -48,7 +48,16 @@ export interface DeploysApi {
48
48
  * Refused for an in-flight deployment (cancel it first) and for the one
49
49
  * currently serving traffic. Requires the `admin` role on the service.
50
50
  */
51
- remove: (serviceId: number, deploymentId: number) => Promise<{ ok: boolean; id: number }>;
51
+ remove: (serviceId: number, deploymentId: number) => Promise<{ ok: boolean; id: number; removedContainers?: string[] }>;
52
+ /**
53
+ * Remove many finished deployments at once: `ids`, or every one in
54
+ * `statuses` (e.g. `['failed', 'cancelled']`). In-flight, waiting and live
55
+ * deployments are never removed. Requires the `admin` role.
56
+ */
57
+ removeMany: (
58
+ serviceId: number,
59
+ input: { ids?: number[]; statuses?: Array<'failed' | 'cancelled' | 'superseded'> },
60
+ ) => Promise<{ ok: true; removed: number[]; skipped: number; removedContainers: string[] }>;
52
61
  /** Build-config + env-key diff against the previous deployment. */
53
62
  configDiff: (serviceId: number, deploymentId: number) => Promise<{ deploymentId: number; previousDeploymentId: number | null; changed: boolean; diff: string }>;
54
63
  /** Build log download URL (serves the raw log file as an attachment). */
@@ -70,7 +79,9 @@ export interface DeploysApi {
70
79
  */
71
80
  canary: (serviceId: number) => Promise<CanaryStatusView>;
72
81
  /**
73
- * Send all traffic to the canary release now and finish the deploy.
82
+ * Request canary promotion. A node first finishes and passes its current
83
+ * measured step, then skips the remaining steps; panel-host promotion is early.
84
+ * Resolves when accepted; poll canary/deployment status for completion.
74
85
  * Fails with `400 no_canary` when that deployment has no canary in
75
86
  * progress. To stop a canary instead, `cancel` the deployment.
76
87
  */
@@ -152,7 +163,9 @@ export function deploysApi(t: Transport): DeploysApi {
152
163
  cancel: (serviceId, deploymentId) =>
153
164
  send<{ ok: boolean; status: string }>('POST', `/v1/services/${serviceId}/deploys/${deploymentId}/cancel`),
154
165
  remove: (serviceId, deploymentId) =>
155
- send<{ ok: boolean; id: number }>('DELETE', `/v1/services/${serviceId}/deploys/${deploymentId}`),
166
+ send<{ ok: boolean; id: number; removedContainers?: string[] }>('DELETE', `/v1/services/${serviceId}/deploys/${deploymentId}`),
167
+ removeMany: (serviceId, input) =>
168
+ send<{ ok: true; removed: number[]; skipped: number; removedContainers: string[] }>('POST', `/v1/services/${serviceId}/deploys/bulk-delete`, input),
156
169
  configDiff: (serviceId, deploymentId) =>
157
170
  get<{ deploymentId: number; previousDeploymentId: number | null; changed: boolean; diff: string }>(
158
171
  `/v1/services/${serviceId}/deploys/${deploymentId}/diff`,
@@ -6,12 +6,16 @@ import type {
6
6
  LogDrainCreateInput,
7
7
  LogDrainUpdateInput,
8
8
  LogDrainTestResult,
9
+ LogQueueStatus,
9
10
  } from '@ninedeploy/schemas';
10
11
  import type { LogSearchInput, LogSearchResult } from '../types.js';
11
12
  import type { Transport } from '../transport.js';
12
13
 
13
14
  export interface LogsApi {
14
15
  logDrains: {
16
+ queue: (id: number) => Promise<LogQueueStatus>;
17
+ retryQueue: (id: number) => Promise<LogQueueStatus>;
18
+ discardQueue: (id: number) => Promise<{ discardedBatches: number }>;
15
19
  list: (query?: { serviceId?: number }) => Promise<LogDrain[]>;
16
20
  get: (id: number) => Promise<LogDrain>;
17
21
  create: (input: LogDrainCreateInput) => Promise<LogDrain>;
@@ -33,6 +37,9 @@ export function logsApi(t: Transport): LogsApi {
33
37
  const { get, send } = t;
34
38
  return {
35
39
  logDrains: {
40
+ queue: (id) => get<LogQueueStatus>('/v1/log-drains/' + id + '/queue'),
41
+ retryQueue: (id) => send<LogQueueStatus>('POST', '/v1/log-drains/' + id + '/queue/retry'),
42
+ discardQueue: (id) => send<{ discardedBatches: number }>('DELETE', '/v1/log-drains/' + id + '/queue'),
36
43
  list: (query) => {
37
44
  const qs = query?.serviceId !== undefined ? `?serviceId=${encodeURIComponent(String(query.serviceId))}` : '';
38
45
  return get<LogDrain[]>(`/v1/log-drains${qs}`);
@@ -14,6 +14,13 @@ import type {
14
14
  Environment,
15
15
  EnvironmentCreateInput,
16
16
  EnvironmentPatchInput,
17
+ PrimaryRecoveryEntry,
18
+ ServiceRoutingView,
19
+ PrimaryRecoveryResult,
20
+ SwarmRecoveryEntry,
21
+ SwarmRecoveryResult,
22
+ FanoutRecoveryEntry,
23
+ FanoutRecoveryResult,
17
24
  ProjectEntry,
18
25
  ProjectPatchInput,
19
26
  Service,
@@ -32,6 +39,9 @@ import type {
32
39
  ServiceFile,
33
40
  ServiceFileEntry,
34
41
  ServiceFilePut,
42
+ ServiceLifecycleResult,
43
+ ServiceLifecycleView,
44
+ ServiceLifecycleRetry,
35
45
  } from '@ninedeploy/schemas';
36
46
  import { apiGetUrl } from '../apiPath.js';
37
47
  import type { ApplyManifestResult, ApplyManifestInput, ServiceDetail } from '../types.js';
@@ -65,9 +75,11 @@ export interface ServicesApi {
65
75
  */
66
76
  composePreview: (input: ComposePreviewRequestInput) => Promise<ComposePreviewResponse>;
67
77
  remove: (id: number) => Promise<void>;
68
- stop: (id: number) => Promise<{ ok: boolean; status: string }>;
69
- start: (id: number) => Promise<{ ok: boolean; status: string }>;
70
- restart: (id: number) => Promise<{ ok: boolean; status: string }>;
78
+ stop: (id: number) => Promise<ServiceLifecycleResult>;
79
+ start: (id: number) => Promise<ServiceLifecycleResult>;
80
+ restart: (id: number) => Promise<ServiceLifecycleResult>;
81
+ lifecycle: (id: number) => Promise<ServiceLifecycleView>;
82
+ retryLifecycle: (id: number) => Promise<ServiceLifecycleRetry>;
71
83
  /** The last `tail` runtime-log lines (default 300, at most 5000; 0.16.3). */
72
84
  logs: (id: number, opts?: { tail?: number }) => Promise<{ lines: string }>;
73
85
  clone: (id: number, input?: { name?: string; slug?: string }) => Promise<Service>;
@@ -175,6 +187,12 @@ export interface ServicesApi {
175
187
  * scaling event. The configuration itself is `autoscale` on the service
176
188
  * and is set with `update(id, { autoscale })` (`null` turns it off).
177
189
  */
190
+ /** Where the service's traffic goes now: domains through Traefik, host ports through Docker. */
191
+ routing: (id: number) => Promise<ServiceRoutingView>;
192
+ runtimeRecovery: (id: number) => Promise<PrimaryRecoveryEntry | null>;
193
+ retryRuntimeRecovery: (id: number) => Promise<PrimaryRecoveryResult>;
194
+ swarmRecovery: (id: number) => Promise<SwarmRecoveryEntry | null>;
195
+ retrySwarmRecovery: (id: number) => Promise<SwarmRecoveryResult>;
178
196
  autoscale: (id: number) => Promise<AutoscaleStatusView>;
179
197
  // ── 0.16.11 scale to zero ──
180
198
  /**
@@ -228,6 +246,8 @@ export interface ServicesApi {
228
246
  remove: (id: number) => Promise<{ ok: boolean }>;
229
247
  };
230
248
  fanout: {
249
+ recovery: (serviceId: number) => Promise<FanoutRecoveryEntry[]>;
250
+ retryRecovery: (serviceId: number) => Promise<FanoutRecoveryResult>;
231
251
  /** The extra nodes an image/Dockerfile release is pushed to. */
232
252
  get: (serviceId: number) =>
233
253
  Promise<Array<{ serverId: number; runtimeId: string | null; status: string }>>;
@@ -258,9 +278,11 @@ export function servicesApi(t: Transport): ServicesApi {
258
278
  remove: async (id) => {
259
279
  await request(`/v1/services/${id}`, { method: 'DELETE' });
260
280
  },
261
- stop: (id) => send<{ ok: boolean; status: string }>('POST', `/v1/services/${id}/stop`),
262
- start: (id) => send<{ ok: boolean; status: string }>('POST', `/v1/services/${id}/start`),
263
- restart: (id) => send<{ ok: boolean; status: string }>('POST', `/v1/services/${id}/restart`),
281
+ stop: (id) => send<ServiceLifecycleResult>('POST', `/v1/services/${id}/stop`),
282
+ start: (id) => send<ServiceLifecycleResult>('POST', `/v1/services/${id}/start`),
283
+ restart: (id) => send<ServiceLifecycleResult>('POST', `/v1/services/${id}/restart`),
284
+ lifecycle: id => get<ServiceLifecycleView>(`/v1/services/${id}/lifecycle`),
285
+ retryLifecycle: id => send<ServiceLifecycleRetry>('POST', `/v1/services/${id}/lifecycle/retry`),
264
286
  logs: (id, opts) => get<{ lines: string }>(`/v1/services/${id}/logs${opts?.tail ? `?tail=${opts.tail}` : ''}`),
265
287
  clone: (id, input) => send<Service>('POST', `/v1/services/${id}/clone`, input ?? {}),
266
288
  exportUrl: (id) => `/v1/services/${id}/export`,
@@ -309,6 +331,11 @@ export function servicesApi(t: Transport): ServicesApi {
309
331
  },
310
332
  imageTransfers: (id, query) => get<ImageTransfer[]>(apiGetUrl(`/v1/services/${id}/image-transfers`, { ...query })),
311
333
  swarm: (id) => get<ServiceSwarmStatus>(`/v1/services/${id}/swarm`),
334
+ routing: (id) => get<ServiceRoutingView>(`/v1/services/${id}/routing`),
335
+ runtimeRecovery: async id => (await get<{ entry: PrimaryRecoveryEntry | null }>(`/v1/services/${id}/runtime-recovery`)).entry,
336
+ retryRuntimeRecovery: id => request<PrimaryRecoveryResult>(`/v1/services/${id}/runtime-recovery`, { method: 'POST' }, 600_000),
337
+ swarmRecovery: async id => (await get<{ entry: SwarmRecoveryEntry | null }>(`/v1/services/${id}/swarm/recovery`)).entry,
338
+ retrySwarmRecovery: id => request<SwarmRecoveryResult>(`/v1/services/${id}/swarm/recovery`, { method: 'POST' }, 600_000),
312
339
  autoscale: (id) => get<AutoscaleStatusView>(`/v1/services/${id}/autoscale`),
313
340
  sleep: (id) => send<{ ok: boolean; asleep: boolean }>('POST', `/v1/services/${id}/sleep`),
314
341
  wake: (id) => send<{ ok: boolean; status: string }>('POST', `/v1/services/${id}/wake`),
@@ -338,6 +365,8 @@ export function servicesApi(t: Transport): ServicesApi {
338
365
  remove: (id) => send<{ ok: boolean }>('DELETE', `/v1/projects/${id}`),
339
366
  },
340
367
  fanout: {
368
+ recovery: async serviceId => (await get<{ entries: FanoutRecoveryEntry[] }>(`/v1/services/${serviceId}/targets/recovery`)).entries,
369
+ retryRecovery: serviceId => request<FanoutRecoveryResult>(`/v1/services/${serviceId}/targets/recovery`, { method: 'POST' }, 600_000),
341
370
  // r201: the route answers `{ targets: [...] }` (like PATCH); the SDK
342
371
  // typed and returned it as a bare array, so the panel's fan-out card
343
372
  // called `.map` on an object and crashed whenever it rendered.
@@ -11,6 +11,9 @@ import type {
11
11
  DemoSeedResult,
12
12
  DockerResources,
13
13
  MetricSeries,
14
+ ObservabilityResponse,
15
+ ObservabilityPatch,
16
+ ObservabilityExportResult,
14
17
  StatsSnapshot,
15
18
  TopologyGraph,
16
19
  UpdateCheckResult,
@@ -80,7 +83,13 @@ export interface SystemApi {
80
83
  }>;
81
84
  };
82
85
  stats: {
83
- snapshot: () => Promise<StatsSnapshot>;
86
+ observability: {
87
+ get: () => Promise<ObservabilityResponse>;
88
+ update: (input: ObservabilityPatch) => Promise<ObservabilityResponse>;
89
+ test: () => Promise<ObservabilityExportResult>;
90
+ };
91
+ /** Omit the filter for local-host monitoring; databaseId returns only that authorized database on its recorded host. */
92
+ snapshot: (opts?: { databaseId?: number }) => Promise<StatsSnapshot>;
84
93
  metrics: (serviceId: number, opts?: { kind?: 'cpu' | 'memory'; minutes?: number }) => Promise<MetricSeries>;
85
94
  };
86
95
  topology: {
@@ -197,7 +206,19 @@ export function systemApi(t: Transport): SystemApi {
197
206
  get: () => get('/v1/dashboard'),
198
207
  },
199
208
  stats: {
200
- snapshot: () => get<StatsSnapshot>('/v1/stats'),
209
+ observability: {
210
+ get: () => get<ObservabilityResponse>('/v1/stats/observability'),
211
+ update: (input) => send<ObservabilityResponse>('PATCH', '/v1/stats/observability', input),
212
+ test: () => send<ObservabilityExportResult>('POST', '/v1/stats/observability/test'),
213
+ },
214
+ snapshot: async (opts) => {
215
+ const result = await get<StatsSnapshot>('/v1/stats' + (opts?.databaseId === undefined ? '' : `?databaseId=${encodeURIComponent(opts.databaseId)}`));
216
+ if (opts?.databaseId !== undefined && (result?.resource?.kind !== 'database' || result.resource.id !== opts.databaseId || result.host !== null
217
+ || !Array.isArray(result.containers) || result.containers.some(entry => entry.kind !== 'database' || entry.refId !== opts.databaseId))) {
218
+ throw new Error('Database-scoped metrics were not confirmed by this panel; upgrade the panel to 0.18.0 or newer and retry');
219
+ }
220
+ return result;
221
+ },
201
222
  metrics: (serviceId, opts) =>
202
223
  get<MetricSeries>(
203
224
  `/v1/services/${serviceId}/metrics?kind=${opts?.kind ?? 'cpu'}&minutes=${opts?.minutes ?? 60}`,
@@ -82,7 +82,9 @@ export function terminalsApi(t: Transport): TerminalsApi {
82
82
  // ── end 0.15 T4 ──
83
83
  // ── 0.15 T6 surfaces ──
84
84
  terminals: {
85
- create: (input) => send<TerminalSessionCreated>('POST', '/v1/terminals', input),
85
+ create: (input) => input.target.kind === 'database' && input.target.mode === 'client'
86
+ ? t.request<TerminalSessionCreated>('/v1/terminals', {method:'POST',body:input},60_000)
87
+ : send<TerminalSessionCreated>('POST', '/v1/terminals', input),
86
88
  list: (query) => get<TerminalSessionList>(apiGetUrl('/v1/terminals', { ...query })),
87
89
  get: (id) => get<TerminalSession>(`/v1/terminals/${id}`),
88
90
  terminate: (id) => send<TerminalTerminateResult>('DELETE', `/v1/terminals/${id}`),