@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.
- package/dist/resources/databases.d.ts +2 -1
- package/dist/resources/databases.d.ts.map +1 -1
- package/dist/resources/databases.js +3 -2
- package/dist/resources/databases.js.map +1 -1
- package/dist/resources/deploys.d.ts +18 -1
- package/dist/resources/deploys.d.ts.map +1 -1
- package/dist/resources/deploys.js +1 -0
- package/dist/resources/deploys.js.map +1 -1
- package/dist/resources/logs.d.ts +6 -1
- package/dist/resources/logs.d.ts.map +1 -1
- package/dist/resources/logs.js +3 -0
- package/dist/resources/logs.js.map +1 -1
- package/dist/resources/services.d.ts +14 -13
- package/dist/resources/services.d.ts.map +1 -1
- package/dist/resources/services.js +9 -0
- package/dist/resources/services.js.map +1 -1
- package/dist/resources/system.d.ts +10 -2
- package/dist/resources/system.d.ts.map +1 -1
- package/dist/resources/system.js +13 -1
- package/dist/resources/system.js.map +1 -1
- package/dist/resources/terminals.d.ts.map +1 -1
- package/dist/resources/terminals.js +3 -1
- package/dist/resources/terminals.js.map +1 -1
- package/dist/resources/volumes.d.ts +42 -14
- package/dist/resources/volumes.d.ts.map +1 -1
- package/dist/resources/volumes.js +33 -17
- package/dist/resources/volumes.js.map +1 -1
- package/dist/terminal.d.ts +1 -1
- package/dist/terminal.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/resources/databases.ts +4 -3
- package/src/resources/deploys.ts +16 -3
- package/src/resources/logs.ts +7 -0
- package/src/resources/services.ts +35 -6
- package/src/resources/system.ts +23 -2
- package/src/resources/terminals.ts +3 -1
- package/src/resources/volumes.ts +49 -35
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
56
|
+
deleteFile: (name: string, path: string, options?: {
|
|
57
|
+
serverId?: number;
|
|
58
|
+
}) => Promise<void>;
|
|
49
59
|
};
|
|
50
60
|
containers: {
|
|
51
|
-
inspect: (container: string
|
|
52
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
88
|
+
mkdir: (container: string, input: VolumePathCreateInput, options?: {
|
|
89
|
+
serverId?: number;
|
|
90
|
+
}) => Promise<{
|
|
69
91
|
ok: boolean;
|
|
70
92
|
}>;
|
|
71
|
-
makeDir: (container: string, input: VolumePathCreateInput
|
|
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
|
|
76
|
-
|
|
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":"AAGA,OAAO,KAAK,EACV,kCAAkC,EAClC,uBAAuB,EACvB,kCAAkC,EAClC,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE;QACP;;;;WAIG;QACH,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;QACtE,qEAAqE;QACrE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACzE;;;;WAIG;QACH,MAAM,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAClE,KAAK,EAAE,MAAM,OAAO,CAAC;YAAE,EAAE,EAAE,OAAO,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC3E,wDAAwD;QACxD,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,eAAe,EAAE,CAAA;SAAE,CAAC,CAAC;
|
|
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 = '') =>
|
|
9
|
-
readFile: (name, path) =>
|
|
10
|
-
writeFile: (name, input) =>
|
|
11
|
-
mkdir: (name, input) =>
|
|
12
|
-
deleteFile: async (name, path) => {
|
|
13
|
-
await request(
|
|
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(
|
|
23
|
-
compose: (container) => get(
|
|
24
|
-
listFiles: (container, path = '/') => get(
|
|
25
|
-
readFile: (container, path) => get(
|
|
26
|
-
writeFile: (container, input) => send('PUT',
|
|
27
|
-
mkdir: (container, input) => send('POST',
|
|
28
|
-
makeDir: (container, input) => send('POST',
|
|
29
|
-
deleteFile: async (container, path) => {
|
|
30
|
-
await request(
|
|
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(
|
|
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":"AAYA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAsE1C,MAAM,UAAU,UAAU,CAAC,CAAY;IACrC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO;QACL,OAAO,EAAE;YACP,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAoB,SAAS,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpG,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAqB,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC;YACzE,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"volumes.js","sourceRoot":"","sources":["../../src/resources/volumes.ts"],"names":[],"mappings":"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"}
|
package/dist/terminal.d.ts
CHANGED
|
@@ -51,7 +51,7 @@ export interface TerminalReady {
|
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
export interface TerminalHandlers {
|
|
54
|
-
/** The
|
|
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;
|
package/dist/terminal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAG7B,0GAA0G;AAC1G,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D,eAAO,MAAM,sBAAsB,uBAAuB,CAAC;AAE3D,qGAAqG;AACrG,eAAO,MAAM,0BAA0B,QAAY,CAAC;AAEpD,8EAA8E;AAC9E,eAAO,MAAM,0BAA0B,QAAY,CAAC;AAEpD,gEAAgE;AAChE,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,sBAAsB,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC;AAEzF,iFAAiF;AACjF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,+HAA+H;IAC/H,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,kBAAkB,CAkBnI;AAED,0DAA0D;AAC1D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAuBzD;AAED,wGAAwG;AACxG,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IACtC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1C,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACvD,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACpE,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CAC5C;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,kBAAkB,CAAC;AAE7F,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QAAE,IAAI,EAAE,kBAAkB,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAC9E;AAED,MAAM,WAAW,gBAAgB;IAC/B,
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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) =>
|
package/src/resources/deploys.ts
CHANGED
|
@@ -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
|
-
*
|
|
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`,
|
package/src/resources/logs.ts
CHANGED
|
@@ -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<
|
|
69
|
-
start: (id: number) => Promise<
|
|
70
|
-
restart: (id: number) => Promise<
|
|
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<
|
|
262
|
-
start: (id) => send<
|
|
263
|
-
restart: (id) => send<
|
|
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.
|
package/src/resources/system.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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) =>
|
|
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}`),
|