@ninedeploy/schemas 0.10.6 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/dist/accessGrants.d.ts +156 -0
- package/dist/accessGrants.d.ts.map +1 -0
- package/dist/accessGrants.js +100 -0
- package/dist/accessGrants.js.map +1 -0
- package/dist/agentCommand.d.ts.map +1 -1
- package/dist/agentCommand.js +11 -1
- package/dist/agentCommand.js.map +1 -1
- package/dist/auth.d.ts +53 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +26 -0
- package/dist/auth.js.map +1 -1
- package/dist/backupPolicy.d.ts +37 -0
- package/dist/backupPolicy.d.ts.map +1 -0
- package/dist/backupPolicy.js +50 -0
- package/dist/backupPolicy.js.map +1 -0
- package/dist/common.d.ts +21 -5
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +35 -6
- package/dist/common.js.map +1 -1
- package/dist/databaseImport.d.ts +145 -0
- package/dist/databaseImport.d.ts.map +1 -0
- package/dist/databaseImport.js +115 -0
- package/dist/databaseImport.js.map +1 -0
- package/dist/doctor.d.ts +16 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +25 -0
- package/dist/doctor.js.map +1 -1
- package/dist/githubApp.d.ts +236 -0
- package/dist/githubApp.d.ts.map +1 -0
- package/dist/githubApp.js +223 -0
- package/dist/githubApp.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/kernel.d.ts +5 -2
- package/dist/kernel.d.ts.map +1 -1
- package/dist/kernel.js +11 -2
- package/dist/kernel.js.map +1 -1
- package/dist/management.d.ts +46 -2
- package/dist/management.d.ts.map +1 -1
- package/dist/management.js +68 -15
- package/dist/management.js.map +1 -1
- package/dist/multiNode.d.ts +325 -0
- package/dist/multiNode.d.ts.map +1 -0
- package/dist/multiNode.js +294 -0
- package/dist/multiNode.js.map +1 -0
- package/dist/ninedeployManifest.d.ts.map +1 -1
- package/dist/ninedeployManifest.js +6 -3
- package/dist/ninedeployManifest.js.map +1 -1
- package/dist/panelBackup.d.ts +73 -0
- package/dist/panelBackup.d.ts.map +1 -0
- package/dist/panelBackup.js +45 -0
- package/dist/panelBackup.js.map +1 -0
- package/dist/proxyConfig.d.ts +132 -0
- package/dist/proxyConfig.d.ts.map +1 -0
- package/dist/proxyConfig.js +105 -0
- package/dist/proxyConfig.js.map +1 -0
- package/dist/publicAccess.d.ts +64 -0
- package/dist/publicAccess.d.ts.map +1 -0
- package/dist/publicAccess.js +63 -0
- package/dist/publicAccess.js.map +1 -0
- package/dist/secretProviders.d.ts +119 -0
- package/dist/secretProviders.d.ts.map +1 -0
- package/dist/secretProviders.js +130 -0
- package/dist/secretProviders.js.map +1 -0
- package/dist/secretScan.js +1 -1
- package/dist/service.d.ts +24 -17
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +71 -26
- package/dist/service.js.map +1 -1
- package/dist/terminals.d.ts +284 -0
- package/dist/terminals.d.ts.map +1 -0
- package/dist/terminals.js +177 -0
- package/dist/terminals.js.map +1 -0
- package/dist/traffic.d.ts +276 -0
- package/dist/traffic.d.ts.map +1 -0
- package/dist/traffic.js +103 -0
- package/dist/traffic.js.map +1 -0
- package/dist/workspaces.d.ts +19 -1
- package/dist/workspaces.d.ts.map +1 -1
- package/dist/workspaces.js +26 -0
- package/dist/workspaces.js.map +1 -1
- package/package.json +5 -4
- package/src/accessGrants.ts +117 -0
- package/src/agentCommand.ts +67 -0
- package/src/ai.ts +32 -0
- package/src/auth.ts +323 -0
- package/src/backupPolicy.ts +55 -0
- package/src/common.ts +179 -0
- package/src/databaseImport.ts +138 -0
- package/src/doctor.ts +161 -0
- package/src/environments.ts +23 -0
- package/src/githubApp.ts +268 -0
- package/src/index.ts +30 -0
- package/src/insights.ts +78 -0
- package/src/kernel.ts +180 -0
- package/src/labels.ts +86 -0
- package/src/management.ts +620 -0
- package/src/multiNode.ts +354 -0
- package/src/ninedeployManifest.ts +363 -0
- package/src/panelBackup.ts +90 -0
- package/src/project.ts +42 -0
- package/src/proxyConfig.ts +139 -0
- package/src/publicAccess.ts +80 -0
- package/src/runtimeVersions.ts +232 -0
- package/src/secretProviders.ts +159 -0
- package/src/secretScan.ts +169 -0
- package/src/service.ts +1044 -0
- package/src/terminals.ts +212 -0
- package/src/traffic.ts +130 -0
- package/src/workspaces.ts +215 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
// ── Per-database backup policy (0.12) ──────────────────────────────────────
|
|
3
|
+
/** Bounds for both retention counts. At least one dump is always kept, so a
|
|
4
|
+
* policy can never prune a database's last good backup. */
|
|
5
|
+
export const BACKUP_RETAIN_MIN = 1;
|
|
6
|
+
export const BACKUP_RETAIN_MAX = 365;
|
|
7
|
+
/** What a database WITHOUT a policy gets: the built-in schedule. */
|
|
8
|
+
export const DEFAULT_BACKUP_RETAIN_COUNT = 7;
|
|
9
|
+
const retain = z.number().int().min(BACKUP_RETAIN_MIN).max(BACKUP_RETAIN_MAX);
|
|
10
|
+
/**
|
|
11
|
+
* PUT /v1/databases/:id/backup-policy — the whole policy (PUT replaces).
|
|
12
|
+
* The cron expression is validated with croner (5-part) at the route, the
|
|
13
|
+
* same rule scheduled jobs use; the schema package has no cron dependency.
|
|
14
|
+
*/
|
|
15
|
+
export const backupPolicyInput = z
|
|
16
|
+
.object({
|
|
17
|
+
enabled: z.boolean().default(true),
|
|
18
|
+
cron: z.string().trim().min(1).max(120),
|
|
19
|
+
retainCount: retain,
|
|
20
|
+
/** Remote copies kept; null/omitted = the remote copies of the newest `retainCount` dumps. */
|
|
21
|
+
retainRemoteCount: retain.nullable().optional().transform((v) => v ?? null),
|
|
22
|
+
/** A `backup_destinations` id; null/omitted = the active destination. */
|
|
23
|
+
destinationId: z.number().int().positive().nullable().optional().transform((v) => v ?? null),
|
|
24
|
+
/** true = keep this database's scheduled dumps on the panel host only. */
|
|
25
|
+
localOnly: z.boolean().optional().transform((v) => v ?? false),
|
|
26
|
+
})
|
|
27
|
+
.refine((p) => !(p.localOnly && p.destinationId != null), {
|
|
28
|
+
message: 'localOnly and destinationId are mutually exclusive',
|
|
29
|
+
path: ['destinationId'],
|
|
30
|
+
})
|
|
31
|
+
.refine((p) => !(p.localOnly && p.retainRemoteCount != null), {
|
|
32
|
+
message: 'retainRemoteCount has no effect on a local-only policy',
|
|
33
|
+
path: ['retainRemoteCount'],
|
|
34
|
+
});
|
|
35
|
+
/** GET/PUT response. `configured: false` = no policy row: the built-in
|
|
36
|
+
* schedule (daily, 7 kept, active destination) applies and `cron` is null. */
|
|
37
|
+
export const backupPolicy = z.object({
|
|
38
|
+
databaseId: z.number().int(),
|
|
39
|
+
configured: z.boolean(),
|
|
40
|
+
enabled: z.boolean(),
|
|
41
|
+
cron: z.string().nullable(),
|
|
42
|
+
retainCount: z.number().int(),
|
|
43
|
+
retainRemoteCount: z.number().int().nullable(),
|
|
44
|
+
destinationId: z.number().int().nullable(),
|
|
45
|
+
localOnly: z.boolean(),
|
|
46
|
+
/** Next scheduled run for a configured, enabled policy (ISO); null otherwise. */
|
|
47
|
+
nextRunAt: z.string().nullable(),
|
|
48
|
+
updatedAt: z.string().nullable(),
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=backupPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backupPolicy.js","sourceRoot":"","sources":["../src/backupPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8EAA8E;AAC9E;4DAC4D;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,oEAAoE;AACpE,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAE7C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAE9E;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC;KAC/B,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC,WAAW,EAAE,MAAM;IACnB,8FAA8F;IAC9F,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;IAC3E,yEAAyE;IACzE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5F,0EAA0E;IAC1E,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC;CAC/D,CAAC;KACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE;IACxD,OAAO,EAAE,oDAAoD;IAC7D,IAAI,EAAE,CAAC,eAAe,CAAC;CACxB,CAAC;KACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,iBAAiB,IAAI,IAAI,CAAC,EAAE;IAC5D,OAAO,EAAE,wDAAwD;IACjE,IAAI,EAAE,CAAC,mBAAmB,CAAC;CAC5B,CAAC,CAAC;AAGL;+EAC+E;AAC/E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC5B,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;IACvB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAC7B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC9C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC1C,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;IACtB,iFAAiF;IACjF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC"}
|
package/dist/common.d.ts
CHANGED
|
@@ -30,6 +30,20 @@ export declare const httpPath: z.ZodString;
|
|
|
30
30
|
* scheme is pinned here rather than relying on the toolchain to stay strict.
|
|
31
31
|
*/
|
|
32
32
|
export declare const gitRepoUrl: z.ZodURL;
|
|
33
|
+
/**
|
|
34
|
+
* 0.13: the base URL of an operator-supplied git provider API or web UI
|
|
35
|
+
* (a Gitea instance, GitHub Enterprise Server, `https://github.com`).
|
|
36
|
+
*
|
|
37
|
+
* `http:` is accepted HERE on purpose: whether plain http is allowed depends on
|
|
38
|
+
* the server's `NINEDEPLOY_ALLOW_PRIVATE_EGRESS` escape hatch, which this
|
|
39
|
+
* package cannot see. The server refuses `http:` unless that flag is set, and
|
|
40
|
+
* every call still goes through its egress guard. Rejecting http in the schema
|
|
41
|
+
* would make the documented escape hatch (an internal http-only Gitea)
|
|
42
|
+
* unusable. Userinfo, query and fragment are refused — a base URL never needs
|
|
43
|
+
* them, and userinfo would smuggle credentials into a URL that gets logged.
|
|
44
|
+
* Trailing slashes are dropped so `${base}/api/v1/…` joins cleanly.
|
|
45
|
+
*/
|
|
46
|
+
export declare const providerBaseUrl: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodURL>, z.ZodTransform<string, string>>;
|
|
33
47
|
/**
|
|
34
48
|
* A git branch/ref name. Reaches `git checkout` / `git pull` as an argv
|
|
35
49
|
* element, so a value starting with `-` would be read as an option rather
|
|
@@ -48,11 +62,13 @@ export declare const repoBaseDir: z.ZodString;
|
|
|
48
62
|
*/
|
|
49
63
|
export declare const containerPath: z.ZodString;
|
|
50
64
|
/**
|
|
51
|
-
* Docker named-volume name
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
65
|
+
* Docker named-volume name: letters (BOTH cases — the `i` flag is deliberate,
|
|
66
|
+
* r474: docker itself accepts uppercase volume names, and rejecting them
|
|
67
|
+
* would break attach flows against pre-existing out-of-band volumes), digits,
|
|
68
|
+
* underscores, hyphens and dots; must start with alnum; max 64 chars (the
|
|
69
|
+
* volume driver limit on most filesystems). The managed prefixes `nd-svc-` /
|
|
70
|
+
* `nd-db-` are lowercased by construction; a non-managed name attaches a
|
|
71
|
+
* pre-existing volume the client created out-of-band.
|
|
56
72
|
*/
|
|
57
73
|
export declare const dockerVolumeName: z.ZodString;
|
|
58
74
|
/** Cursor-style pagination params. */
|
package/dist/common.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,yDAAyD;AACzD,eAAO,MAAM,IAAI,aAIqE,CAAC;AAEvF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,aAMpB,CAAC;AAEJ,eAAO,MAAM,EAAE,aAA8B,CAAC;AAE9C;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,aAMlB,CAAC;AAEJ;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,UAInB,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,SAAS,aAKyE,CAAC;AAqBhG,eAAO,MAAM,gBAAgB,aAIuD,CAAC;AAErF,iFAAiF;AACjF,eAAO,MAAM,WAAW,aAAmB,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,yDAAyD;AACzD,eAAO,MAAM,IAAI,aAIqE,CAAC;AAEvF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,aAMpB,CAAC;AAEJ,eAAO,MAAM,EAAE,aAA8B,CAAC;AAE9C;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,aAMlB,CAAC;AAEJ;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,UAInB,CAAC;AAEL;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,6EASsB,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,SAAS,aAKyE,CAAC;AAqBhG,eAAO,MAAM,gBAAgB,aAIuD,CAAC;AAErF,iFAAiF;AACjF,eAAO,MAAM,WAAW,aAAmB,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,aAAa,aAQmE,CAAC;AAE9F;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,aAIoC,CAAC;AAElE,sCAAsC;AACtC,eAAO,MAAM,UAAU;;;iBAGrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,mDAAmD;AACnD,eAAO,MAAM,aAAa;;;;;;iBAMxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,yBAAyB;AACzB,wBAAgB,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;;;;kBAMnD"}
|
package/dist/common.js
CHANGED
|
@@ -44,6 +44,29 @@ export const gitRepoUrl = z
|
|
|
44
44
|
.refine((value) => /^(?:https?|ssh):\/\//i.test(value), {
|
|
45
45
|
message: 'repoUrl must be an http(s) or ssh URL',
|
|
46
46
|
});
|
|
47
|
+
/**
|
|
48
|
+
* 0.13: the base URL of an operator-supplied git provider API or web UI
|
|
49
|
+
* (a Gitea instance, GitHub Enterprise Server, `https://github.com`).
|
|
50
|
+
*
|
|
51
|
+
* `http:` is accepted HERE on purpose: whether plain http is allowed depends on
|
|
52
|
+
* the server's `NINEDEPLOY_ALLOW_PRIVATE_EGRESS` escape hatch, which this
|
|
53
|
+
* package cannot see. The server refuses `http:` unless that flag is set, and
|
|
54
|
+
* every call still goes through its egress guard. Rejecting http in the schema
|
|
55
|
+
* would make the documented escape hatch (an internal http-only Gitea)
|
|
56
|
+
* unusable. Userinfo, query and fragment are refused — a base URL never needs
|
|
57
|
+
* them, and userinfo would smuggle credentials into a URL that gets logged.
|
|
58
|
+
* Trailing slashes are dropped so `${base}/api/v1/…` joins cleanly.
|
|
59
|
+
*/
|
|
60
|
+
export const providerBaseUrl = z
|
|
61
|
+
.string()
|
|
62
|
+
.trim()
|
|
63
|
+
.max(2048)
|
|
64
|
+
.pipe(z.url({ protocol: /^https?$/, message: 'must be an http(s) URL' }))
|
|
65
|
+
// Everything after the scheme: no `@` (userinfo), `?` or `#`.
|
|
66
|
+
.refine((value) => !/[@?#]/.test(value.slice(value.indexOf(':') + 3)), {
|
|
67
|
+
message: 'must be a base URL without credentials, query or fragment',
|
|
68
|
+
})
|
|
69
|
+
.transform((value) => value.replace(/\/+$/, ''));
|
|
47
70
|
/**
|
|
48
71
|
* A git branch/ref name. Reaches `git checkout` / `git pull` as an argv
|
|
49
72
|
* element, so a value starting with `-` would be read as an option rather
|
|
@@ -90,13 +113,19 @@ export const containerPath = z
|
|
|
90
113
|
.string()
|
|
91
114
|
.min(1)
|
|
92
115
|
.max(1024)
|
|
93
|
-
|
|
116
|
+
// Anchored on both ends: the old `^\/[^/].*` prefix-match let `/a/../b`,
|
|
117
|
+
// embedded NUL/newline and interior `//` through. Segments are non-empty,
|
|
118
|
+
// slash-free and control-char-free; a lone `/` stays valid.
|
|
119
|
+
.regex(/^\/(?:[^/\0\n\r]+\/?)*$/, 'must be an absolute path starting with a single "/"')
|
|
120
|
+
.refine((v) => !v.split('/').includes('..'), { message: 'must not contain ".." segments' });
|
|
94
121
|
/**
|
|
95
|
-
* Docker named-volume name
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
122
|
+
* Docker named-volume name: letters (BOTH cases — the `i` flag is deliberate,
|
|
123
|
+
* r474: docker itself accepts uppercase volume names, and rejecting them
|
|
124
|
+
* would break attach flows against pre-existing out-of-band volumes), digits,
|
|
125
|
+
* underscores, hyphens and dots; must start with alnum; max 64 chars (the
|
|
126
|
+
* volume driver limit on most filesystems). The managed prefixes `nd-svc-` /
|
|
127
|
+
* `nd-db-` are lowercased by construction; a non-managed name attaches a
|
|
128
|
+
* pre-existing volume the client created out-of-band.
|
|
100
129
|
*/
|
|
101
130
|
export const dockerVolumeName = z
|
|
102
131
|
.string()
|
package/dist/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,yDAAyD;AACzD,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC;KAClB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,EAAE,CAAC;KACP,KAAK,CAAC,mCAAmC,EAAE,uCAAuC,CAAC,CAAC;AAEvF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,MAAM,EAAE;KACR,IAAI,EAAE;KACN,KAAK,CACJ,0BAA0B,EAC1B,oGAAoG,CACrG,CAAC;AAEJ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE9C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC;KACtB,MAAM,EAAE;KACR,GAAG,CAAC,GAAG,CAAC;KACR,KAAK,CACJ,yCAAyC,EACzC,+DAA+D,CAChE,CAAC;AAEJ;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,GAAG,EAAE;KACL,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;IACtD,OAAO,EAAE,uCAAuC;CACjD,CAAC,CAAC;AAEL;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC;KACvB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,GAAG,CAAC;KACR,KAAK,CAAC,iCAAiC,EAAE,qBAAqB,CAAC;KAC/D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;AAEhG;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,GAAG,CAAC,KAAa,EAAW,EAAE,CAC5C,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrB,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAEvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,MAAM,EAAE;KACR,IAAI,EAAE;KACN,GAAG,CAAC,GAAG,CAAC;KACR,MAAM,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC,CAAC;AAErF,iFAAiF;AACjF,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** 8 MiB. Advertised by the server on every import; chunks arrive in order. */
|
|
3
|
+
export declare const DATABASE_IMPORT_CHUNK_SIZE: number;
|
|
4
|
+
/** Mirrors `databaseImportSource` in `@ninedeploy/db`. */
|
|
5
|
+
export declare const databaseImportSource: z.ZodEnum<{
|
|
6
|
+
s3: "s3";
|
|
7
|
+
upload: "upload";
|
|
8
|
+
}>;
|
|
9
|
+
export type DatabaseImportSource = z.infer<typeof databaseImportSource>;
|
|
10
|
+
/** Mirrors `databaseImportStatus` in `@ninedeploy/db`. */
|
|
11
|
+
export declare const databaseImportStatus: z.ZodEnum<{
|
|
12
|
+
cancelled: "cancelled";
|
|
13
|
+
completed: "completed";
|
|
14
|
+
completed_with_warnings: "completed_with_warnings";
|
|
15
|
+
expired: "expired";
|
|
16
|
+
failed: "failed";
|
|
17
|
+
pending: "pending";
|
|
18
|
+
running: "running";
|
|
19
|
+
uploading: "uploading";
|
|
20
|
+
}>;
|
|
21
|
+
export type DatabaseImportStatus = z.infer<typeof databaseImportStatus>;
|
|
22
|
+
/** Mirrors `databaseImportFormat` in `@ninedeploy/db`. */
|
|
23
|
+
export declare const databaseImportFormat: z.ZodEnum<{
|
|
24
|
+
mongo_archive: "mongo_archive";
|
|
25
|
+
mysql_sql: "mysql_sql";
|
|
26
|
+
pg_custom: "pg_custom";
|
|
27
|
+
pg_plain: "pg_plain";
|
|
28
|
+
rdb: "rdb";
|
|
29
|
+
}>;
|
|
30
|
+
export type DatabaseImportFormat = z.infer<typeof databaseImportFormat>;
|
|
31
|
+
/**
|
|
32
|
+
* Import options. Strict: an unknown key is refused, not dropped. The server
|
|
33
|
+
* further refuses keys that do not apply to the database's engine, and
|
|
34
|
+
* applies `singleTransaction: true` when it is omitted (postgres).
|
|
35
|
+
*/
|
|
36
|
+
export declare const databaseImportOptions: z.ZodObject<{
|
|
37
|
+
clean: z.ZodOptional<z.ZodBoolean>;
|
|
38
|
+
singleTransaction: z.ZodOptional<z.ZodBoolean>;
|
|
39
|
+
drop: z.ZodOptional<z.ZodBoolean>;
|
|
40
|
+
confirmReplace: z.ZodOptional<z.ZodBoolean>;
|
|
41
|
+
skipSafetyBackup: z.ZodOptional<z.ZodBoolean>;
|
|
42
|
+
}, z.core.$strict>;
|
|
43
|
+
export type DatabaseImportOptions = z.infer<typeof databaseImportOptions>;
|
|
44
|
+
/**
|
|
45
|
+
* The engines an import accepts, and the option keys each one applies. The
|
|
46
|
+
* server refuses (422) any other engine, and any key not listed for the
|
|
47
|
+
* database's engine. clickhouse, meilisearch and rabbitmq have no import.
|
|
48
|
+
*/
|
|
49
|
+
export declare const DATABASE_IMPORT_ENGINE_OPTIONS: {
|
|
50
|
+
readonly postgres: readonly ["clean", "singleTransaction", "skipSafetyBackup"];
|
|
51
|
+
readonly mysql: readonly ["skipSafetyBackup"];
|
|
52
|
+
readonly mariadb: readonly ["skipSafetyBackup"];
|
|
53
|
+
readonly mongo: readonly ["drop", "skipSafetyBackup"];
|
|
54
|
+
readonly redis: readonly ["confirmReplace", "skipSafetyBackup"];
|
|
55
|
+
readonly valkey: readonly ["confirmReplace", "skipSafetyBackup"];
|
|
56
|
+
readonly keydb: readonly ["confirmReplace", "skipSafetyBackup"];
|
|
57
|
+
readonly dragonfly: readonly ["confirmReplace", "skipSafetyBackup"];
|
|
58
|
+
};
|
|
59
|
+
export type DatabaseImportEngine = keyof typeof DATABASE_IMPORT_ENGINE_OPTIONS;
|
|
60
|
+
/** POST /v1/databases/:id/imports. */
|
|
61
|
+
export declare const databaseImportCreate: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
62
|
+
source: z.ZodLiteral<"upload">;
|
|
63
|
+
sizeBytes: z.ZodNumber;
|
|
64
|
+
sha256: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
65
|
+
filename: z.ZodOptional<z.ZodString>;
|
|
66
|
+
options: z.ZodDefault<z.ZodObject<{
|
|
67
|
+
clean: z.ZodOptional<z.ZodBoolean>;
|
|
68
|
+
singleTransaction: z.ZodOptional<z.ZodBoolean>;
|
|
69
|
+
drop: z.ZodOptional<z.ZodBoolean>;
|
|
70
|
+
confirmReplace: z.ZodOptional<z.ZodBoolean>;
|
|
71
|
+
skipSafetyBackup: z.ZodOptional<z.ZodBoolean>;
|
|
72
|
+
}, z.core.$strict>>;
|
|
73
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
74
|
+
source: z.ZodLiteral<"s3">;
|
|
75
|
+
destinationId: z.ZodNumber;
|
|
76
|
+
key: z.ZodString;
|
|
77
|
+
options: z.ZodDefault<z.ZodObject<{
|
|
78
|
+
clean: z.ZodOptional<z.ZodBoolean>;
|
|
79
|
+
singleTransaction: z.ZodOptional<z.ZodBoolean>;
|
|
80
|
+
drop: z.ZodOptional<z.ZodBoolean>;
|
|
81
|
+
confirmReplace: z.ZodOptional<z.ZodBoolean>;
|
|
82
|
+
skipSafetyBackup: z.ZodOptional<z.ZodBoolean>;
|
|
83
|
+
}, z.core.$strict>>;
|
|
84
|
+
}, z.core.$strip>], "source">;
|
|
85
|
+
export type DatabaseImportCreate = z.input<typeof databaseImportCreate>;
|
|
86
|
+
/** One import row as the API returns it. */
|
|
87
|
+
export declare const databaseImport: z.ZodObject<{
|
|
88
|
+
id: z.ZodNumber;
|
|
89
|
+
databaseId: z.ZodNumber;
|
|
90
|
+
source: z.ZodEnum<{
|
|
91
|
+
s3: "s3";
|
|
92
|
+
upload: "upload";
|
|
93
|
+
}>;
|
|
94
|
+
status: z.ZodEnum<{
|
|
95
|
+
cancelled: "cancelled";
|
|
96
|
+
completed: "completed";
|
|
97
|
+
completed_with_warnings: "completed_with_warnings";
|
|
98
|
+
expired: "expired";
|
|
99
|
+
failed: "failed";
|
|
100
|
+
pending: "pending";
|
|
101
|
+
running: "running";
|
|
102
|
+
uploading: "uploading";
|
|
103
|
+
}>;
|
|
104
|
+
format: z.ZodNullable<z.ZodEnum<{
|
|
105
|
+
mongo_archive: "mongo_archive";
|
|
106
|
+
mysql_sql: "mysql_sql";
|
|
107
|
+
pg_custom: "pg_custom";
|
|
108
|
+
pg_plain: "pg_plain";
|
|
109
|
+
rdb: "rdb";
|
|
110
|
+
}>>;
|
|
111
|
+
sizeBytes: z.ZodNumber;
|
|
112
|
+
receivedBytes: z.ZodNumber;
|
|
113
|
+
chunkSize: z.ZodNumber;
|
|
114
|
+
sha256: z.ZodNullable<z.ZodString>;
|
|
115
|
+
filename: z.ZodNullable<z.ZodString>;
|
|
116
|
+
destinationId: z.ZodNullable<z.ZodNumber>;
|
|
117
|
+
objectKey: z.ZodNullable<z.ZodString>;
|
|
118
|
+
options: z.ZodObject<{
|
|
119
|
+
clean: z.ZodOptional<z.ZodBoolean>;
|
|
120
|
+
singleTransaction: z.ZodOptional<z.ZodBoolean>;
|
|
121
|
+
drop: z.ZodOptional<z.ZodBoolean>;
|
|
122
|
+
confirmReplace: z.ZodOptional<z.ZodBoolean>;
|
|
123
|
+
skipSafetyBackup: z.ZodOptional<z.ZodBoolean>;
|
|
124
|
+
}, z.core.$strict>;
|
|
125
|
+
safetyBackupId: z.ZodNullable<z.ZodNumber>;
|
|
126
|
+
error: z.ZodNullable<z.ZodString>;
|
|
127
|
+
createdByUserId: z.ZodNullable<z.ZodNumber>;
|
|
128
|
+
createdAt: z.ZodString;
|
|
129
|
+
updatedAt: z.ZodString;
|
|
130
|
+
startedAt: z.ZodNullable<z.ZodString>;
|
|
131
|
+
completedAt: z.ZodNullable<z.ZodString>;
|
|
132
|
+
}, z.core.$strip>;
|
|
133
|
+
export type DatabaseImport = z.infer<typeof databaseImport>;
|
|
134
|
+
/** GET /v1/backup-destinations/:id/objects?prefix= (operator). */
|
|
135
|
+
export declare const backupDestinationObjectsQuery: z.ZodObject<{
|
|
136
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
137
|
+
}, z.core.$strip>;
|
|
138
|
+
export type BackupDestinationObjectsQuery = z.infer<typeof backupDestinationObjectsQuery>;
|
|
139
|
+
export declare const backupDestinationObject: z.ZodObject<{
|
|
140
|
+
key: z.ZodString;
|
|
141
|
+
sizeBytes: z.ZodNumber;
|
|
142
|
+
lastModified: z.ZodNullable<z.ZodString>;
|
|
143
|
+
}, z.core.$strip>;
|
|
144
|
+
export type BackupDestinationObject = z.infer<typeof backupDestinationObject>;
|
|
145
|
+
//# sourceMappingURL=databaseImport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"databaseImport.d.ts","sourceRoot":"","sources":["../src/databaseImport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,+EAA+E;AAC/E,eAAO,MAAM,0BAA0B,QAAkB,CAAC;AAE1D,0DAA0D;AAC1D,eAAO,MAAM,oBAAoB;;;EAA2B,CAAC;AAC7D,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE,0DAA0D;AAC1D,eAAO,MAAM,oBAAoB;;;;;;;;;EAS/B,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE,0DAA0D;AAC1D,eAAO,MAAM,oBAAoB;;;;;;EAAyE,CAAC;AAC3G,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;;;;;;kBAavB,CAAC;AACZ,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE1E;;;;GAIG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;CASoC,CAAC;AAChF,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,8BAA8B,CAAC;AA2B/E,sCAAsC;AACtC,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;6BAA2D,CAAC;AAC7F,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE,4CAA4C;AAC5C,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqBzB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,kEAAkE;AAClE,eAAO,MAAM,6BAA6B;;iBAExC,CAAC;AACH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAE1F,eAAO,MAAM,uBAAuB;;;;iBAIlC,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { id } from './common.js';
|
|
3
|
+
// ── Database dump import (0.14) ────────────────────────────────────────────
|
|
4
|
+
// Request and response shapes for `/v1/databases/:id/imports` and
|
|
5
|
+
// `/v1/backup-destinations/:id/objects`. Uploads are chunked and resumable
|
|
6
|
+
// (Traefik's 60s read timeout would cut a single multi-GB request). The
|
|
7
|
+
// server detects the format by magic bytes, refuses engines and options that
|
|
8
|
+
// do not apply, and enforces size, disk and role rules. Design: DESIGN.md §3.
|
|
9
|
+
/** 8 MiB. Advertised by the server on every import; chunks arrive in order. */
|
|
10
|
+
export const DATABASE_IMPORT_CHUNK_SIZE = 8 * 1024 * 1024;
|
|
11
|
+
/** Mirrors `databaseImportSource` in `@ninedeploy/db`. */
|
|
12
|
+
export const databaseImportSource = z.enum(['upload', 's3']);
|
|
13
|
+
/** Mirrors `databaseImportStatus` in `@ninedeploy/db`. */
|
|
14
|
+
export const databaseImportStatus = z.enum([
|
|
15
|
+
'uploading',
|
|
16
|
+
'pending',
|
|
17
|
+
'running',
|
|
18
|
+
'completed',
|
|
19
|
+
'completed_with_warnings',
|
|
20
|
+
'failed',
|
|
21
|
+
'cancelled',
|
|
22
|
+
'expired',
|
|
23
|
+
]);
|
|
24
|
+
/** Mirrors `databaseImportFormat` in `@ninedeploy/db`. */
|
|
25
|
+
export const databaseImportFormat = z.enum(['pg_custom', 'pg_plain', 'mysql_sql', 'mongo_archive', 'rdb']);
|
|
26
|
+
/**
|
|
27
|
+
* Import options. Strict: an unknown key is refused, not dropped. The server
|
|
28
|
+
* further refuses keys that do not apply to the database's engine, and
|
|
29
|
+
* applies `singleTransaction: true` when it is omitted (postgres).
|
|
30
|
+
*/
|
|
31
|
+
export const databaseImportOptions = z
|
|
32
|
+
.object({
|
|
33
|
+
/** postgres custom format: `--clean --if-exists`. */
|
|
34
|
+
clean: z.boolean().optional(),
|
|
35
|
+
/** postgres: wrap the restore in one transaction (server default true). */
|
|
36
|
+
singleTransaction: z.boolean().optional(),
|
|
37
|
+
/** mongo: `--drop`. */
|
|
38
|
+
drop: z.boolean().optional(),
|
|
39
|
+
/** redis/valkey/keydb/dragonfly: required, the RDB replaces the whole dataset. */
|
|
40
|
+
confirmReplace: z.boolean().optional(),
|
|
41
|
+
/** Operator, or a database initialised in the last 10 minutes, only. */
|
|
42
|
+
skipSafetyBackup: z.boolean().optional(),
|
|
43
|
+
})
|
|
44
|
+
.strict();
|
|
45
|
+
/**
|
|
46
|
+
* The engines an import accepts, and the option keys each one applies. The
|
|
47
|
+
* server refuses (422) any other engine, and any key not listed for the
|
|
48
|
+
* database's engine. clickhouse, meilisearch and rabbitmq have no import.
|
|
49
|
+
*/
|
|
50
|
+
export const DATABASE_IMPORT_ENGINE_OPTIONS = {
|
|
51
|
+
postgres: ['clean', 'singleTransaction', 'skipSafetyBackup'],
|
|
52
|
+
mysql: ['skipSafetyBackup'],
|
|
53
|
+
mariadb: ['skipSafetyBackup'],
|
|
54
|
+
mongo: ['drop', 'skipSafetyBackup'],
|
|
55
|
+
redis: ['confirmReplace', 'skipSafetyBackup'],
|
|
56
|
+
valkey: ['confirmReplace', 'skipSafetyBackup'],
|
|
57
|
+
keydb: ['confirmReplace', 'skipSafetyBackup'],
|
|
58
|
+
dragonfly: ['confirmReplace', 'skipSafetyBackup'],
|
|
59
|
+
};
|
|
60
|
+
const sha256Hex = z
|
|
61
|
+
.string()
|
|
62
|
+
.trim()
|
|
63
|
+
.regex(/^[A-Fa-f0-9]{64}$/, 'sha256 must be 64 hex characters')
|
|
64
|
+
.transform((v) => v.toLowerCase());
|
|
65
|
+
/** Display only; the staging path is always chosen by the server. */
|
|
66
|
+
const importFilename = z.string().trim().min(1).max(255);
|
|
67
|
+
const uploadSource = z.object({
|
|
68
|
+
source: z.literal('upload'),
|
|
69
|
+
sizeBytes: z.number().int().positive(),
|
|
70
|
+
sha256: sha256Hex.optional(),
|
|
71
|
+
filename: importFilename.optional(),
|
|
72
|
+
options: databaseImportOptions.default({}),
|
|
73
|
+
});
|
|
74
|
+
/** S3 imports are operator only (checked in the handler). */
|
|
75
|
+
const s3Source = z.object({
|
|
76
|
+
source: z.literal('s3'),
|
|
77
|
+
destinationId: id,
|
|
78
|
+
key: z.string().min(1).max(1024),
|
|
79
|
+
options: databaseImportOptions.default({}),
|
|
80
|
+
});
|
|
81
|
+
/** POST /v1/databases/:id/imports. */
|
|
82
|
+
export const databaseImportCreate = z.discriminatedUnion('source', [uploadSource, s3Source]);
|
|
83
|
+
/** One import row as the API returns it. */
|
|
84
|
+
export const databaseImport = z.object({
|
|
85
|
+
id: z.number().int(),
|
|
86
|
+
databaseId: z.number().int(),
|
|
87
|
+
source: databaseImportSource,
|
|
88
|
+
status: databaseImportStatus,
|
|
89
|
+
format: databaseImportFormat.nullable(),
|
|
90
|
+
sizeBytes: z.number().int(),
|
|
91
|
+
receivedBytes: z.number().int(),
|
|
92
|
+
chunkSize: z.number().int(),
|
|
93
|
+
sha256: z.string().nullable(),
|
|
94
|
+
filename: z.string().nullable(),
|
|
95
|
+
destinationId: z.number().int().nullable(),
|
|
96
|
+
objectKey: z.string().nullable(),
|
|
97
|
+
options: databaseImportOptions,
|
|
98
|
+
safetyBackupId: z.number().int().nullable(),
|
|
99
|
+
error: z.string().nullable(),
|
|
100
|
+
createdByUserId: z.number().int().nullable(),
|
|
101
|
+
createdAt: z.string(),
|
|
102
|
+
updatedAt: z.string(),
|
|
103
|
+
startedAt: z.string().nullable(),
|
|
104
|
+
completedAt: z.string().nullable(),
|
|
105
|
+
});
|
|
106
|
+
/** GET /v1/backup-destinations/:id/objects?prefix= (operator). */
|
|
107
|
+
export const backupDestinationObjectsQuery = z.object({
|
|
108
|
+
prefix: z.string().max(1024).optional(),
|
|
109
|
+
});
|
|
110
|
+
export const backupDestinationObject = z.object({
|
|
111
|
+
key: z.string(),
|
|
112
|
+
sizeBytes: z.number().int(),
|
|
113
|
+
lastModified: z.string().nullable(),
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=databaseImport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"databaseImport.js","sourceRoot":"","sources":["../src/databaseImport.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.d.ts
CHANGED
|
@@ -34,8 +34,12 @@ export declare const doctorFindingKind: z.ZodEnum<{
|
|
|
34
34
|
invalid_slug: "invalid_slug";
|
|
35
35
|
orphan_network: "orphan_network";
|
|
36
36
|
orphan_volume: "orphan_volume";
|
|
37
|
+
panel_plaintext_exposure: "panel_plaintext_exposure";
|
|
38
|
+
repo_insights_leak: "repo_insights_leak";
|
|
39
|
+
sandbox_plugin_network: "sandbox_plugin_network";
|
|
37
40
|
service_runtime_desync: "service_runtime_desync";
|
|
38
41
|
stuck_deployment: "stuck_deployment";
|
|
42
|
+
templates_source_plaintext: "templates_source_plaintext";
|
|
39
43
|
}>;
|
|
40
44
|
export type DoctorFindingKind = z.infer<typeof doctorFindingKind>;
|
|
41
45
|
/** Executable repair actions. Every one re-validates its precondition against
|
|
@@ -66,8 +70,12 @@ export declare const doctorFinding: z.ZodObject<{
|
|
|
66
70
|
invalid_slug: "invalid_slug";
|
|
67
71
|
orphan_network: "orphan_network";
|
|
68
72
|
orphan_volume: "orphan_volume";
|
|
73
|
+
panel_plaintext_exposure: "panel_plaintext_exposure";
|
|
74
|
+
repo_insights_leak: "repo_insights_leak";
|
|
75
|
+
sandbox_plugin_network: "sandbox_plugin_network";
|
|
69
76
|
service_runtime_desync: "service_runtime_desync";
|
|
70
77
|
stuck_deployment: "stuck_deployment";
|
|
78
|
+
templates_source_plaintext: "templates_source_plaintext";
|
|
71
79
|
}>;
|
|
72
80
|
severity: z.ZodEnum<{
|
|
73
81
|
critical: "critical";
|
|
@@ -149,8 +157,12 @@ export declare const doctorReport: z.ZodObject<{
|
|
|
149
157
|
invalid_slug: "invalid_slug";
|
|
150
158
|
orphan_network: "orphan_network";
|
|
151
159
|
orphan_volume: "orphan_volume";
|
|
160
|
+
panel_plaintext_exposure: "panel_plaintext_exposure";
|
|
161
|
+
repo_insights_leak: "repo_insights_leak";
|
|
162
|
+
sandbox_plugin_network: "sandbox_plugin_network";
|
|
152
163
|
service_runtime_desync: "service_runtime_desync";
|
|
153
164
|
stuck_deployment: "stuck_deployment";
|
|
165
|
+
templates_source_plaintext: "templates_source_plaintext";
|
|
154
166
|
}>;
|
|
155
167
|
severity: z.ZodEnum<{
|
|
156
168
|
critical: "critical";
|
|
@@ -246,8 +258,12 @@ export declare const doctorFixResponse: z.ZodObject<{
|
|
|
246
258
|
invalid_slug: "invalid_slug";
|
|
247
259
|
orphan_network: "orphan_network";
|
|
248
260
|
orphan_volume: "orphan_volume";
|
|
261
|
+
panel_plaintext_exposure: "panel_plaintext_exposure";
|
|
262
|
+
repo_insights_leak: "repo_insights_leak";
|
|
263
|
+
sandbox_plugin_network: "sandbox_plugin_network";
|
|
249
264
|
service_runtime_desync: "service_runtime_desync";
|
|
250
265
|
stuck_deployment: "stuck_deployment";
|
|
266
|
+
templates_source_plaintext: "templates_source_plaintext";
|
|
251
267
|
}>;
|
|
252
268
|
severity: z.ZodEnum<{
|
|
253
269
|
critical: "critical";
|
package/dist/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;8EAG8E;AAC9E,eAAO,MAAM,cAAc;;;;EAAuC,CAAC;AACnE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;EAc3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEhE,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;8EAG8E;AAC9E,eAAO,MAAM,cAAc;;;;EAAuC,CAAC;AACnE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;EAc3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEhE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;EAqD5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE;uEACuE;AACvE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAkB3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEhE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAcxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,eAAe;;;;;;;iBAO1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,gBAAgB;;iBAE3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAChE,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AAErD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAM5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
package/dist/doctor.js
CHANGED
|
@@ -47,6 +47,31 @@ export const doctorFindingKind = z.enum([
|
|
|
47
47
|
* without re-validating. Such a row is a record its own API rejects on PATCH.
|
|
48
48
|
*/
|
|
49
49
|
'invalid_slug',
|
|
50
|
+
/**
|
|
51
|
+
* r575: the panel's own port listens on a non-loopback address over plain
|
|
52
|
+
* HTTP (bare-metal default 0.0.0.0:3000) — logins and API tokens crossing
|
|
53
|
+
* it are readable on the network. Advisory: changing the bind is the
|
|
54
|
+
* operator's call (it cuts off whoever reaches the panel at http://ip:3000).
|
|
55
|
+
*/
|
|
56
|
+
'panel_plaintext_exposure',
|
|
57
|
+
/**
|
|
58
|
+
* r600: enabled sandbox plugins on a Node whose permission model has no
|
|
59
|
+
* network scope (< 25) — their code can reach anything the host can.
|
|
60
|
+
* Advisory: they keep loading (upgrade-safe); upgrading Node closes it.
|
|
61
|
+
*/
|
|
62
|
+
'sandbox_plugin_network',
|
|
63
|
+
/**
|
|
64
|
+
* r620: a stored repository analysis holds a nodeVersion that is not a
|
|
65
|
+
* version — host file content captured through a symlinked .nvmrc before
|
|
66
|
+
* 0.10.41. Critical: the exposed secrets must be rotated.
|
|
67
|
+
*/
|
|
68
|
+
'repo_insights_leak',
|
|
69
|
+
/**
|
|
70
|
+
* r655: the Hub's remote template registry is fetched over plain http, so
|
|
71
|
+
* anyone on the path can swap the catalog (images, env defaults). Advisory:
|
|
72
|
+
* the source keeps loading (upgrade-safe); new http sources are refused.
|
|
73
|
+
*/
|
|
74
|
+
'templates_source_plaintext',
|
|
50
75
|
]);
|
|
51
76
|
/** Executable repair actions. Every one re-validates its precondition against
|
|
52
77
|
* current state inside the fix path; the enum is the full surface. */
|
package/dist/doctor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;8EAG8E;AAC9E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAGnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC;IACrC,WAAW;IACX,QAAQ;IACR,SAAS;IACT,OAAO;IACP,UAAU;IACV,SAAS;IACT,YAAY;IACZ,MAAM;IACN,qEAAqE;IACrE,SAAS;IACT,WAAW;IACX,QAAQ;IACR,eAAe;CAChB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC;IACtC,sEAAsE;IACtE,kBAAkB;IAClB,8DAA8D;IAC9D,eAAe;IACf,0EAA0E;IAC1E,gBAAgB;IAChB,gEAAgE;IAChE,iBAAiB;IACjB,gDAAgD;IAChD,aAAa;IACb,sDAAsD;IACtD,eAAe;IACf,0DAA0D;IAC1D,eAAe;IACf,kEAAkE;IAClE,gBAAgB;IAChB,yEAAyE;IACzE,wBAAwB;IACxB,sEAAsE;IACtE,kBAAkB;IAClB;;;;;OAKG;IACH,cAAc;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|