@ninedeploy/sdk 0.10.6 → 0.16.1
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/apiPath.d.ts +5 -0
- package/dist/apiPath.d.ts.map +1 -0
- package/dist/apiPath.js +18 -0
- package/dist/apiPath.js.map +1 -0
- package/dist/client.d.ts +29 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +51 -0
- package/dist/client.js.map +1 -0
- package/dist/databaseImport.d.ts +138 -0
- package/dist/databaseImport.d.ts.map +1 -0
- package/dist/databaseImport.js +126 -0
- package/dist/databaseImport.js.map +1 -0
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +15 -1973
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -641
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +25 -21
- package/dist/manifest.js.map +1 -1
- package/dist/resources/auth.d.ts +282 -0
- package/dist/resources/auth.d.ts.map +1 -0
- package/dist/resources/auth.js +111 -0
- package/dist/resources/auth.js.map +1 -0
- package/dist/resources/databases.d.ts +178 -0
- package/dist/resources/databases.d.ts.map +1 -0
- package/dist/resources/databases.js +82 -0
- package/dist/resources/databases.js.map +1 -0
- package/dist/resources/deploys.d.ts +125 -0
- package/dist/resources/deploys.d.ts.map +1 -0
- package/dist/resources/deploys.js +46 -0
- package/dist/resources/deploys.js.map +1 -0
- package/dist/resources/domains.d.ts +109 -0
- package/dist/resources/domains.d.ts.map +1 -0
- package/dist/resources/domains.js +29 -0
- package/dist/resources/domains.js.map +1 -0
- package/dist/resources/env.d.ts +55 -0
- package/dist/resources/env.d.ts.map +1 -0
- package/dist/resources/env.js +33 -0
- package/dist/resources/env.js.map +1 -0
- package/dist/resources/logs.d.ts +27 -0
- package/dist/resources/logs.d.ts.map +1 -0
- package/dist/resources/logs.js +18 -0
- package/dist/resources/logs.js.map +1 -0
- package/dist/resources/network.d.ts +169 -0
- package/dist/resources/network.d.ts.map +1 -0
- package/dist/resources/network.js +39 -0
- package/dist/resources/network.js.map +1 -0
- package/dist/resources/plugins.d.ts +42 -0
- package/dist/resources/plugins.d.ts.map +1 -0
- package/dist/resources/plugins.js +22 -0
- package/dist/resources/plugins.js.map +1 -0
- package/dist/resources/servers.d.ts +130 -0
- package/dist/resources/servers.d.ts.map +1 -0
- package/dist/resources/servers.js +37 -0
- package/dist/resources/servers.js.map +1 -0
- package/dist/resources/services.d.ts +240 -0
- package/dist/resources/services.d.ts.map +1 -0
- package/dist/resources/services.js +93 -0
- package/dist/resources/services.js.map +1 -0
- package/dist/resources/settings.d.ts +373 -0
- package/dist/resources/settings.d.ts.map +1 -0
- package/dist/resources/settings.js +94 -0
- package/dist/resources/settings.js.map +1 -0
- package/dist/resources/sources.d.ts +87 -0
- package/dist/resources/sources.d.ts.map +1 -0
- package/dist/resources/sources.js +39 -0
- package/dist/resources/sources.js.map +1 -0
- package/dist/resources/system.d.ts +240 -0
- package/dist/resources/system.d.ts.map +1 -0
- package/dist/resources/system.js +86 -0
- package/dist/resources/system.js.map +1 -0
- package/dist/resources/templates.d.ts +36 -0
- package/dist/resources/templates.d.ts.map +1 -0
- package/dist/resources/templates.js +17 -0
- package/dist/resources/templates.js.map +1 -0
- package/dist/resources/terminals.d.ts +60 -0
- package/dist/resources/terminals.d.ts.map +1 -0
- package/dist/resources/terminals.js +35 -0
- package/dist/resources/terminals.js.map +1 -0
- package/dist/resources/traefik.d.ts +93 -0
- package/dist/resources/traefik.d.ts.map +1 -0
- package/dist/resources/traefik.js +39 -0
- package/dist/resources/traefik.js.map +1 -0
- package/dist/resources/volumes.d.ts +114 -0
- package/dist/resources/volumes.d.ts.map +1 -0
- package/dist/resources/volumes.js +47 -0
- package/dist/resources/volumes.js.map +1 -0
- package/dist/terminal.d.ts +98 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +180 -0
- package/dist/terminal.js.map +1 -0
- package/dist/transport.d.ts +61 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +90 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +539 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +5 -4
- package/src/apiPath.ts +23 -0
- package/src/client.ts +70 -0
- package/src/databaseImport.ts +174 -0
- package/src/errors.ts +27 -0
- package/src/index.ts +121 -0
- package/src/manifest.ts +414 -0
- package/src/resources/auth.ts +357 -0
- package/src/resources/databases.ts +227 -0
- package/src/resources/deploys.ts +161 -0
- package/src/resources/domains.ts +149 -0
- package/src/resources/env.ts +84 -0
- package/src/resources/logs.ts +48 -0
- package/src/resources/network.ts +154 -0
- package/src/resources/plugins.ts +52 -0
- package/src/resources/servers.ts +141 -0
- package/src/resources/services.ts +296 -0
- package/src/resources/settings.ts +334 -0
- package/src/resources/sources.ts +131 -0
- package/src/resources/system.ts +281 -0
- package/src/resources/templates.ts +55 -0
- package/src/resources/terminals.ts +112 -0
- package/src/resources/traefik.ts +125 -0
- package/src/resources/volumes.ts +138 -0
- package/src/terminal.ts +254 -0
- package/src/transport.ts +154 -0
- package/src/types.ts +588 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { CreateDomainInput, Domain, DomainPatch, DomainEntry } from '@ninedeploy/schemas';
|
|
2
|
+
import type { CreatedDomain, DomainVerifyResult, StartDomainTransferResult, DomainTransferPreview, AcceptDomainTransferInput, AcceptDomainTransferResult } from '../types.js';
|
|
3
|
+
import type { Transport } from '../transport.js';
|
|
4
|
+
export interface DomainsApi {
|
|
5
|
+
domains: {
|
|
6
|
+
list: (serviceId: number) => Promise<Domain[]>;
|
|
7
|
+
/** Add a domain. A non-operator's hostname outside the instance zone comes back `pending` with a TXT `verification` challenge. */
|
|
8
|
+
create: (serviceId: number, input: CreateDomainInput) => Promise<CreatedDomain>;
|
|
9
|
+
/**
|
|
10
|
+
* r332: prove ownership of a `pending` domain and bring it live. Checks
|
|
11
|
+
* the TXT challenge `create` returned; idempotent (an `active` domain
|
|
12
|
+
* answers `verified: true`) and safe to poll while DNS propagates.
|
|
13
|
+
*/
|
|
14
|
+
verify: (serviceId: number, domainId: number) => Promise<DomainVerifyResult>;
|
|
15
|
+
/**
|
|
16
|
+
* 0.16.1 "Generate domain": add the service's automatic URL (Settings →
|
|
17
|
+
* Automatic URLs: a base domain or a free sslip.io name) now, instead of
|
|
18
|
+
* on its next deploy. Idempotent: `created: false` when it already exists.
|
|
19
|
+
*/
|
|
20
|
+
generate: (serviceId: number) => Promise<Domain & {
|
|
21
|
+
created: boolean;
|
|
22
|
+
}>;
|
|
23
|
+
remove: (serviceId: number, domainId: number) => Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* DNS status for a domain: does the hostname resolve to the addresses
|
|
26
|
+
* this panel expects? Advisory — routing is governed by ownership.
|
|
27
|
+
*/
|
|
28
|
+
dnsCheck: (serviceId: number, domainId: number) => Promise<{
|
|
29
|
+
hostname: string;
|
|
30
|
+
status: 'ok' | 'mismatch' | 'unresolved';
|
|
31
|
+
addresses: {
|
|
32
|
+
a: string[];
|
|
33
|
+
aaaa: string[];
|
|
34
|
+
};
|
|
35
|
+
expected: string[];
|
|
36
|
+
}>;
|
|
37
|
+
/** Update routing extras: ssl toggle, www→apex redirect, custom headers, basicAuth, ipAllowlist, rateLimit. */
|
|
38
|
+
update: (serviceId: number, domainId: number, input: DomainPatch) => Promise<Domain>;
|
|
39
|
+
all: () => Promise<DomainEntry[]>;
|
|
40
|
+
setSsl: (domainId: number, ssl: boolean) => Promise<{
|
|
41
|
+
id: number;
|
|
42
|
+
ssl: boolean;
|
|
43
|
+
}>;
|
|
44
|
+
/** Toggle sticky-session routing for the service (G-28). */
|
|
45
|
+
setStickySession: (serviceId: number, enabled: boolean) => Promise<{
|
|
46
|
+
id: number;
|
|
47
|
+
enabled: boolean;
|
|
48
|
+
active: boolean;
|
|
49
|
+
}>;
|
|
50
|
+
/**
|
|
51
|
+
* Start a domain transfer (G-29). The source user (admin
|
|
52
|
+
* on the source service) names the target email; the
|
|
53
|
+
* server returns a one-time `acceptUrl` to forward. The
|
|
54
|
+
* target user accepts via `acceptDomainTransfer(token,
|
|
55
|
+
* { targetServiceId })`. The transfer expires after 7
|
|
56
|
+
* days; cancelling is one call.
|
|
57
|
+
*/
|
|
58
|
+
transfer: (domainId: number, input: {
|
|
59
|
+
targetEmail: string;
|
|
60
|
+
}) => Promise<StartDomainTransferResult>;
|
|
61
|
+
/**
|
|
62
|
+
* Preview a transfer by token. Does NOT require auth
|
|
63
|
+
* (the token is the secret) — the panel uses this to
|
|
64
|
+
* render the accept page to a logged-out visitor.
|
|
65
|
+
*/
|
|
66
|
+
previewTransfer: (token: string) => Promise<DomainTransferPreview>;
|
|
67
|
+
/**
|
|
68
|
+
* Accept a transfer. The caller must be authenticated
|
|
69
|
+
* and the caller's email must equal the transfer's
|
|
70
|
+
* target email; the panel / CLI surfaces the preview
|
|
71
|
+
* first so the user knows what they're signing in to.
|
|
72
|
+
*/
|
|
73
|
+
acceptTransfer: (token: string, input: AcceptDomainTransferInput) => Promise<AcceptDomainTransferResult>;
|
|
74
|
+
/**
|
|
75
|
+
* Cancel a pending transfer. Only the source user
|
|
76
|
+
* (or an instance operator) can cancel.
|
|
77
|
+
*/
|
|
78
|
+
cancelTransfer: (token: string) => Promise<{
|
|
79
|
+
transferId: number;
|
|
80
|
+
status: 'cancelled';
|
|
81
|
+
}>;
|
|
82
|
+
};
|
|
83
|
+
domainPresets: {
|
|
84
|
+
/** Every `IDomainProvider` the running kernel has registered. */
|
|
85
|
+
list: () => Promise<{
|
|
86
|
+
providers: string[];
|
|
87
|
+
}>;
|
|
88
|
+
/**
|
|
89
|
+
* Manually create the DNS record for `hostname` via the operator's
|
|
90
|
+
* active provider. `content` is optional: when omitted the route
|
|
91
|
+
* falls back to the panel's `dns_records_content` setting, then to
|
|
92
|
+
* `detectPublicIp()`. Returns the upstream recordId so the caller
|
|
93
|
+
* can correlate.
|
|
94
|
+
*/
|
|
95
|
+
apply: (input: {
|
|
96
|
+
hostname: string;
|
|
97
|
+
content?: string;
|
|
98
|
+
}) => Promise<{
|
|
99
|
+
hostname: string;
|
|
100
|
+
provider: string;
|
|
101
|
+
zone: string;
|
|
102
|
+
recordId: string;
|
|
103
|
+
type: 'A' | 'CNAME';
|
|
104
|
+
content: string;
|
|
105
|
+
}>;
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
export declare function domainsApi(t: Transport): DomainsApi;
|
|
109
|
+
//# sourceMappingURL=domains.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../../src/resources/domains.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export function domainsApi(t) {
|
|
2
|
+
const { get, send, request } = t;
|
|
3
|
+
return {
|
|
4
|
+
domains: {
|
|
5
|
+
list: (serviceId) => get(`/v1/services/${serviceId}/domains`),
|
|
6
|
+
create: (serviceId, input) => send('POST', `/v1/services/${serviceId}/domains`, input),
|
|
7
|
+
verify: (serviceId, domainId) => send('POST', `/v1/services/${serviceId}/domains/${domainId}/verify`, {}),
|
|
8
|
+
generate: (serviceId) => send('POST', `/v1/services/${serviceId}/domains/auto`, {}),
|
|
9
|
+
dnsCheck: (serviceId, domainId) => get(`/v1/services/${serviceId}/domains/${domainId}/dns`),
|
|
10
|
+
update: (serviceId, domainId, input) => send('PATCH', `/v1/services/${serviceId}/domains/${domainId}`, input),
|
|
11
|
+
remove: async (serviceId, domainId) => {
|
|
12
|
+
await request(`/v1/services/${serviceId}/domains/${domainId}`, { method: 'DELETE' });
|
|
13
|
+
},
|
|
14
|
+
all: () => get('/v1/domains'),
|
|
15
|
+
setSsl: (domainId, ssl) => send('PATCH', `/v1/domains/${domainId}`, { ssl }),
|
|
16
|
+
/** Toggle sticky-session routing (G-28) — sits under `/domains` for legacy compatibility. */
|
|
17
|
+
setStickySession: (serviceId, enabled) => send('POST', `/v1/services/${serviceId}/sticky-session`, { enabled }),
|
|
18
|
+
transfer: (domainId, input) => send('POST', `/v1/domains/${domainId}/transfer`, input),
|
|
19
|
+
previewTransfer: (token) => get(`/v1/domain-transfers/${token}`),
|
|
20
|
+
acceptTransfer: (token, input) => send('POST', `/v1/domain-transfers/${token}/accept`, input),
|
|
21
|
+
cancelTransfer: (token) => send('POST', `/v1/domain-transfers/${token}/cancel`, {}),
|
|
22
|
+
},
|
|
23
|
+
domainPresets: {
|
|
24
|
+
list: () => get('/v1/domain-presets'),
|
|
25
|
+
apply: (input) => send('POST', '/v1/domain-presets/apply', input),
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=domains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/resources/domains.ts"],"names":[],"mappings":"AAkGA,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,SAAS,EAAE,EAAE,CAAC,GAAG,CAAW,gBAAgB,SAAS,UAAU,CAAC;YACvE,MAAM,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAgB,MAAM,EAAE,gBAAgB,SAAS,UAAU,EAAE,KAAK,CAAC;YACrG,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAC9B,IAAI,CAAqB,MAAM,EAAE,gBAAgB,SAAS,YAAY,QAAQ,SAAS,EAAE,EAAE,CAAC;YAC9F,QAAQ,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAgC,MAAM,EAAE,gBAAgB,SAAS,eAAe,EAAE,EAAE,CAAC;YAClH,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAChC,GAAG,CAKA,gBAAgB,SAAS,YAAY,QAAQ,MAAM,CAAC;YACzD,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CACrC,IAAI,CAAS,OAAO,EAAE,gBAAgB,SAAS,YAAY,QAAQ,EAAE,EAAE,KAAK,CAAC;YAC/E,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;gBACpC,MAAM,OAAO,CAAC,gBAAgB,SAAS,YAAY,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvF,CAAC;YACD,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAgB,aAAa,CAAC;YAC5C,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAA+B,OAAO,EAAE,eAAe,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YAC1G,6FAA6F;YAC7F,gBAAgB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CACvC,IAAI,CACF,MAAM,EACN,gBAAgB,SAAS,iBAAiB,EAC1C,EAAE,OAAO,EAAE,CACZ;YACH,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAC5B,IAAI,CAA4B,MAAM,EAAE,eAAe,QAAQ,WAAW,EAAE,KAAK,CAAC;YACpF,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAwB,wBAAwB,KAAK,EAAE,CAAC;YACvF,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAC/B,IAAI,CAA6B,MAAM,EAAE,wBAAwB,KAAK,SAAS,EAAE,KAAK,CAAC;YACzF,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CACxB,IAAI,CAA8C,MAAM,EAAE,wBAAwB,KAAK,SAAS,EAAE,EAAE,CAAC;SACxG;QACD,aAAa,EAAE;YACb,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAA0B,oBAAoB,CAAC;YAC9D,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAOnB,MAAM,EAAE,0BAA0B,EAAE,KAAK,CAAC;SAC9C;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { EnvVar, UpsertEnvVarInput } from '@ninedeploy/schemas';
|
|
2
|
+
import type { Transport } from '../transport.js';
|
|
3
|
+
export interface EnvApi {
|
|
4
|
+
env: {
|
|
5
|
+
list: (serviceId: number) => Promise<EnvVar[]>;
|
|
6
|
+
create: (serviceId: number, input: UpsertEnvVarInput) => Promise<EnvVar>;
|
|
7
|
+
update: (serviceId: number, varId: number, input: UpsertEnvVarInput) => Promise<EnvVar>;
|
|
8
|
+
remove: (serviceId: number, varId: number) => Promise<void>;
|
|
9
|
+
/** Bulk import from a .env-formatted string. Returns imported/skipped counts. */
|
|
10
|
+
import: (serviceId: number, content: string) => Promise<{
|
|
11
|
+
imported: number;
|
|
12
|
+
skipped: number;
|
|
13
|
+
errors: Array<{
|
|
14
|
+
line: number;
|
|
15
|
+
message: string;
|
|
16
|
+
}>;
|
|
17
|
+
}>;
|
|
18
|
+
/** Export non-secret env vars as a .env-formatted string (admin floor). */
|
|
19
|
+
export: (serviceId: number) => Promise<{
|
|
20
|
+
content: string;
|
|
21
|
+
count: number;
|
|
22
|
+
}>;
|
|
23
|
+
/** Cross-scope key search: where a given env key is defined. */
|
|
24
|
+
search: (q: string) => Promise<{
|
|
25
|
+
results: Array<{
|
|
26
|
+
key: string;
|
|
27
|
+
isSecret: boolean;
|
|
28
|
+
scope: string;
|
|
29
|
+
serviceId: number | null;
|
|
30
|
+
serviceName: string | null;
|
|
31
|
+
}>;
|
|
32
|
+
}>;
|
|
33
|
+
};
|
|
34
|
+
projectEnv: {
|
|
35
|
+
/** Shared env vars applied to every service in a project (service env wins). */
|
|
36
|
+
list: (projectId: number) => Promise<EnvVar[]>;
|
|
37
|
+
create: (projectId: number, input: UpsertEnvVarInput) => Promise<EnvVar>;
|
|
38
|
+
update: (projectId: number, varId: number, input: UpsertEnvVarInput) => Promise<EnvVar>;
|
|
39
|
+
remove: (projectId: number, varId: number) => Promise<void>;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* 0.12 preview-only env: values a service hands ONLY to its PR previews
|
|
43
|
+
* (they override the parent's non-secret values there; production never
|
|
44
|
+
* sees them). Same floors as `env`: viewer reads, member writes. A panel
|
|
45
|
+
* older than 0.12 answers 404.
|
|
46
|
+
*/
|
|
47
|
+
previewEnv: {
|
|
48
|
+
list: (serviceId: number) => Promise<EnvVar[]>;
|
|
49
|
+
create: (serviceId: number, input: UpsertEnvVarInput) => Promise<EnvVar>;
|
|
50
|
+
update: (serviceId: number, varId: number, input: UpsertEnvVarInput) => Promise<EnvVar>;
|
|
51
|
+
remove: (serviceId: number, varId: number) => Promise<void>;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export declare function envApi(t: Transport): EnvApi;
|
|
55
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/resources/env.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,MAAM,EACN,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE;QACH,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QACxF,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5D,iFAAiF;QACjF,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,KAAK,CAAC;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC,CAAC;QACjJ,2EAA2E;QAC3E,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC3E,gEAAgE;QAChE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,OAAO,EAAE,KAAK,CAAC;gBAAE,GAAG,EAAE,MAAM,CAAC;gBAAC,QAAQ,EAAE,OAAO,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;gBAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC,CAAC;KAC7J,CAAC;IACF,UAAU,EAAE;QACV,gFAAgF;QAChF,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QACxF,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7D,CAAC;IACF;;;;;OAKG;IACH,UAAU,EAAE;QACV,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QACzE,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QACxF,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7D,CAAC;CACH;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAwC3C"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export function envApi(t) {
|
|
2
|
+
const { get, send, request } = t;
|
|
3
|
+
return {
|
|
4
|
+
env: {
|
|
5
|
+
list: (serviceId) => get(`/v1/services/${serviceId}/env`),
|
|
6
|
+
create: (serviceId, input) => send('POST', `/v1/services/${serviceId}/env`, input),
|
|
7
|
+
update: (serviceId, varId, input) => send('PATCH', `/v1/services/${serviceId}/env/${varId}`, input),
|
|
8
|
+
remove: async (serviceId, varId) => {
|
|
9
|
+
await request(`/v1/services/${serviceId}/env/${varId}`, { method: 'DELETE' });
|
|
10
|
+
},
|
|
11
|
+
import: (serviceId, content) => send('POST', `/v1/services/${serviceId}/env/import`, { content }),
|
|
12
|
+
export: (serviceId) => get(`/v1/services/${serviceId}/env/export`),
|
|
13
|
+
search: (q) => get(`/v1/env/search?q=${encodeURIComponent(q)}`),
|
|
14
|
+
},
|
|
15
|
+
projectEnv: {
|
|
16
|
+
list: (projectId) => get(`/v1/projects/${projectId}/env`),
|
|
17
|
+
create: (projectId, input) => send('POST', `/v1/projects/${projectId}/env`, input),
|
|
18
|
+
update: (projectId, varId, input) => send('PATCH', `/v1/projects/${projectId}/env/${varId}`, input),
|
|
19
|
+
remove: async (projectId, varId) => {
|
|
20
|
+
await request(`/v1/projects/${projectId}/env/${varId}`, { method: 'DELETE' });
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
previewEnv: {
|
|
24
|
+
list: (serviceId) => get(`/v1/services/${serviceId}/env/preview`),
|
|
25
|
+
create: (serviceId, input) => send('POST', `/v1/services/${serviceId}/env/preview`, input),
|
|
26
|
+
update: (serviceId, varId, input) => send('PATCH', `/v1/services/${serviceId}/env/preview/${varId}`, input),
|
|
27
|
+
remove: async (serviceId, varId) => {
|
|
28
|
+
await request(`/v1/services/${serviceId}/env/preview/${varId}`, { method: 'DELETE' });
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/resources/env.ts"],"names":[],"mappings":"AA2CA,MAAM,UAAU,MAAM,CAAC,CAAY;IACjC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO;QACL,GAAG,EAAE;YACH,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAW,gBAAgB,SAAS,MAAM,CAAC;YACnE,MAAM,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAS,MAAM,EAAE,gBAAgB,SAAS,MAAM,EAAE,KAAK,CAAC;YAC1F,MAAM,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAS,OAAO,EAAE,gBAAgB,SAAS,QAAQ,KAAK,EAAE,EAAE,KAAK,CAAC;YAC3G,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE;gBACjC,MAAM,OAAO,CAAC,gBAAgB,SAAS,QAAQ,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,MAAM,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAC7B,IAAI,CACF,MAAM,EACN,gBAAgB,SAAS,aAAa,EACtC,EAAE,OAAO,EAAE,CACZ;YACH,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,CACpB,GAAG,CAAqC,gBAAgB,SAAS,aAAa,CAAC;YACjF,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CACZ,GAAG,CACD,oBAAoB,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAC5C;SACJ;QACD,UAAU,EAAE;YACV,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAW,gBAAgB,SAAS,MAAM,CAAC;YACnE,MAAM,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAS,MAAM,EAAE,gBAAgB,SAAS,MAAM,EAAE,KAAK,CAAC;YAC1F,MAAM,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAS,OAAO,EAAE,gBAAgB,SAAS,QAAQ,KAAK,EAAE,EAAE,KAAK,CAAC;YAC3G,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE;gBACjC,MAAM,OAAO,CAAC,gBAAgB,SAAS,QAAQ,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChF,CAAC;SACF;QACD,UAAU,EAAE;YACV,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAW,gBAAgB,SAAS,cAAc,CAAC;YAC3E,MAAM,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAS,MAAM,EAAE,gBAAgB,SAAS,cAAc,EAAE,KAAK,CAAC;YAClG,MAAM,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAS,OAAO,EAAE,gBAAgB,SAAS,gBAAgB,KAAK,EAAE,EAAE,KAAK,CAAC;YACnH,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE;gBACjC,MAAM,OAAO,CAAC,gBAAgB,SAAS,gBAAgB,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YACxF,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { LogDrain, LogDrainCreateInput, LogDrainUpdateInput, LogDrainTestResult } from '@ninedeploy/schemas';
|
|
2
|
+
import type { LogSearchInput, LogSearchResult } from '../types.js';
|
|
3
|
+
import type { Transport } from '../transport.js';
|
|
4
|
+
export interface LogsApi {
|
|
5
|
+
logDrains: {
|
|
6
|
+
list: (query?: {
|
|
7
|
+
serviceId?: number;
|
|
8
|
+
}) => Promise<LogDrain[]>;
|
|
9
|
+
get: (id: number) => Promise<LogDrain>;
|
|
10
|
+
create: (input: LogDrainCreateInput) => Promise<LogDrain>;
|
|
11
|
+
update: (id: number, input: LogDrainUpdateInput) => Promise<LogDrain>;
|
|
12
|
+
remove: (id: number) => Promise<{
|
|
13
|
+
ok: boolean;
|
|
14
|
+
}>;
|
|
15
|
+
test: (id: number) => Promise<LogDrainTestResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Search the configured Loki drain for `query` over
|
|
18
|
+
* the last `sinceMinutes` (default 15). The route
|
|
19
|
+
* round-trips to the drain's `url` so the upstream
|
|
20
|
+
* does the heavy lifting; this is the same shape
|
|
21
|
+
* the operator sees in the Loki Grafana panel.
|
|
22
|
+
*/
|
|
23
|
+
search: (input: LogSearchInput) => Promise<LogSearchResult>;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export declare function logsApi(t: Transport): LogsApi;
|
|
27
|
+
//# sourceMappingURL=logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/resources/logs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,QAAQ,EACR,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE;QACT,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9D,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,EAAE,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QACjD,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAClD;;;;;;WAMG;QACH,MAAM,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;KAC7D,CAAC;CACH;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAgB7C"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function logsApi(t) {
|
|
2
|
+
const { get, send } = t;
|
|
3
|
+
return {
|
|
4
|
+
logDrains: {
|
|
5
|
+
list: (query) => {
|
|
6
|
+
const qs = query?.serviceId !== undefined ? `?serviceId=${encodeURIComponent(String(query.serviceId))}` : '';
|
|
7
|
+
return get(`/v1/log-drains${qs}`);
|
|
8
|
+
},
|
|
9
|
+
get: (id) => get(`/v1/log-drains/${id}`),
|
|
10
|
+
create: (input) => send('POST', '/v1/log-drains', input),
|
|
11
|
+
update: (id, input) => send('PATCH', `/v1/log-drains/${id}`, input),
|
|
12
|
+
remove: (id) => send('DELETE', `/v1/log-drains/${id}`),
|
|
13
|
+
test: (id) => send('POST', `/v1/log-drains/${id}/test`),
|
|
14
|
+
search: (input) => send('POST', '/v1/log-drains/search', input),
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/resources/logs.ts"],"names":[],"mappings":"AA+BA,MAAM,UAAU,OAAO,CAAC,CAAY;IAClC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACxB,OAAO;QACL,SAAS,EAAE;YACT,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACd,MAAM,EAAE,GAAG,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7G,OAAO,GAAG,CAAa,iBAAiB,EAAE,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAW,kBAAkB,EAAE,EAAE,CAAC;YAClD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAW,MAAM,EAAE,gBAAgB,EAAE,KAAK,CAAC;YAClE,MAAM,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAW,OAAO,EAAE,kBAAkB,EAAE,EAAE,EAAE,KAAK,CAAC;YAC7E,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAkB,QAAQ,EAAE,kBAAkB,EAAE,EAAE,CAAC;YACvE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAqB,MAAM,EAAE,kBAAkB,EAAE,OAAO,CAAC;YAC3E,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAkB,MAAM,EAAE,uBAAuB,EAAE,KAAK,CAAC;SACjF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import type { CreateTunnelInput, TunnelEntry } from '@ninedeploy/schemas';
|
|
2
|
+
import type { Transport } from '../transport.js';
|
|
3
|
+
/** 0.16.1: one address of the panel host, as `GET /v1/host-ips` lists it. */
|
|
4
|
+
export interface HostIpEntry {
|
|
5
|
+
ip: string;
|
|
6
|
+
family: 4 | 6;
|
|
7
|
+
/** Interface the host reports it on; null when not detected (an address saved earlier). */
|
|
8
|
+
iface: string | null;
|
|
9
|
+
detected: boolean;
|
|
10
|
+
label: string | null;
|
|
11
|
+
primary: boolean;
|
|
12
|
+
dedicatedTo: {
|
|
13
|
+
id: number;
|
|
14
|
+
name: string;
|
|
15
|
+
} | null;
|
|
16
|
+
}
|
|
17
|
+
export interface NetworkApi {
|
|
18
|
+
/** 0.16.1 IP inventory of the panel host (operator, except `primary`). */
|
|
19
|
+
hostIps: {
|
|
20
|
+
list: () => Promise<{
|
|
21
|
+
detected: boolean;
|
|
22
|
+
addresses: HostIpEntry[];
|
|
23
|
+
}>;
|
|
24
|
+
/** The primary address, for DNS hints (any signed-in user). */
|
|
25
|
+
primary: () => Promise<{
|
|
26
|
+
ip: string | null;
|
|
27
|
+
}>;
|
|
28
|
+
/** Label it, make it primary, or dedicate it to a docker service on the panel host (`serviceId: null` shares it again). */
|
|
29
|
+
set: (ip: string, patch: {
|
|
30
|
+
label?: string | null;
|
|
31
|
+
primary?: boolean;
|
|
32
|
+
serviceId?: number | null;
|
|
33
|
+
}) => Promise<HostIpEntry | null>;
|
|
34
|
+
/** Forget what was saved about an address. */
|
|
35
|
+
remove: (ip: string) => Promise<{
|
|
36
|
+
ok: boolean;
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
39
|
+
networks: {
|
|
40
|
+
list: () => Promise<{
|
|
41
|
+
networks: Array<{
|
|
42
|
+
name: string;
|
|
43
|
+
driver: string;
|
|
44
|
+
members: string[];
|
|
45
|
+
/** True when the network is reserved by NineDeploy (cannot be removed). */
|
|
46
|
+
isManaged?: boolean;
|
|
47
|
+
}>;
|
|
48
|
+
remote: number | null;
|
|
49
|
+
}>;
|
|
50
|
+
create: (input: {
|
|
51
|
+
name: string;
|
|
52
|
+
driver?: 'bridge' | 'overlay';
|
|
53
|
+
serverId?: number | null;
|
|
54
|
+
}) => Promise<{
|
|
55
|
+
ok: boolean;
|
|
56
|
+
name: string;
|
|
57
|
+
}>;
|
|
58
|
+
remove: (name: string, serverId?: number) => Promise<{
|
|
59
|
+
ok: boolean;
|
|
60
|
+
}>;
|
|
61
|
+
attach: (input: {
|
|
62
|
+
network: string;
|
|
63
|
+
container: string;
|
|
64
|
+
serverId?: number | null;
|
|
65
|
+
}) => Promise<{
|
|
66
|
+
ok: boolean;
|
|
67
|
+
}>;
|
|
68
|
+
detach: (input: {
|
|
69
|
+
network: string;
|
|
70
|
+
container: string;
|
|
71
|
+
serverId?: number | null;
|
|
72
|
+
}) => Promise<{
|
|
73
|
+
ok: boolean;
|
|
74
|
+
}>;
|
|
75
|
+
/**
|
|
76
|
+
* r557: container names attached to one network (operator-only). The
|
|
77
|
+
* server answers `{ members: [] }` when docker cannot inspect it.
|
|
78
|
+
*/
|
|
79
|
+
members: (name: string) => Promise<{
|
|
80
|
+
members: string[];
|
|
81
|
+
}>;
|
|
82
|
+
};
|
|
83
|
+
tunnels: {
|
|
84
|
+
list: () => Promise<TunnelEntry[]>;
|
|
85
|
+
create: (input: CreateTunnelInput) => Promise<TunnelEntry>;
|
|
86
|
+
remove: (id: number) => Promise<void>;
|
|
87
|
+
};
|
|
88
|
+
firewall: {
|
|
89
|
+
status: () => Promise<{
|
|
90
|
+
installed: boolean;
|
|
91
|
+
active: boolean;
|
|
92
|
+
supported: boolean;
|
|
93
|
+
rules: Array<{
|
|
94
|
+
id: number;
|
|
95
|
+
to: string;
|
|
96
|
+
action: string;
|
|
97
|
+
from: string;
|
|
98
|
+
comment?: string;
|
|
99
|
+
}>;
|
|
100
|
+
defaultIncoming: string;
|
|
101
|
+
defaultOutgoing: string;
|
|
102
|
+
}>;
|
|
103
|
+
toggle: (enabled: boolean) => Promise<{
|
|
104
|
+
ok: boolean;
|
|
105
|
+
status: any;
|
|
106
|
+
}>;
|
|
107
|
+
addRule: (input: {
|
|
108
|
+
port: number | string;
|
|
109
|
+
proto?: 'tcp' | 'udp' | 'any';
|
|
110
|
+
action?: 'allow' | 'deny' | 'limit';
|
|
111
|
+
from?: string;
|
|
112
|
+
comment?: string;
|
|
113
|
+
}) => Promise<{
|
|
114
|
+
ok: boolean;
|
|
115
|
+
status: any;
|
|
116
|
+
}>;
|
|
117
|
+
deleteRule: (id: number | string) => Promise<{
|
|
118
|
+
ok: boolean;
|
|
119
|
+
status: any;
|
|
120
|
+
}>;
|
|
121
|
+
applyRecommended: () => Promise<{
|
|
122
|
+
ok: boolean;
|
|
123
|
+
status: any;
|
|
124
|
+
}>;
|
|
125
|
+
};
|
|
126
|
+
egress: {
|
|
127
|
+
/** Every egress IP rule across every registered driver. G-15. */
|
|
128
|
+
list: () => Promise<{
|
|
129
|
+
drivers: Array<{
|
|
130
|
+
name: string;
|
|
131
|
+
rules: Array<{
|
|
132
|
+
selector: {
|
|
133
|
+
projectId: number;
|
|
134
|
+
sourceCidr?: string;
|
|
135
|
+
};
|
|
136
|
+
ip: string;
|
|
137
|
+
createdAt: string;
|
|
138
|
+
}>;
|
|
139
|
+
}>;
|
|
140
|
+
}>;
|
|
141
|
+
/** Attach an egress IP to a project on the named (or first) driver. */
|
|
142
|
+
set: (input: {
|
|
143
|
+
projectId: number;
|
|
144
|
+
ip: string;
|
|
145
|
+
driver?: string;
|
|
146
|
+
}) => Promise<{
|
|
147
|
+
ok: boolean;
|
|
148
|
+
driver: string;
|
|
149
|
+
rule: {
|
|
150
|
+
selector: {
|
|
151
|
+
projectId: number;
|
|
152
|
+
sourceCidr?: string;
|
|
153
|
+
};
|
|
154
|
+
ip: string;
|
|
155
|
+
createdAt: string;
|
|
156
|
+
};
|
|
157
|
+
/** Present (with `ok: false`) when the route refused the request. */
|
|
158
|
+
error?: string;
|
|
159
|
+
}>;
|
|
160
|
+
/** Detach the rule for a project (on the named or first driver). */
|
|
161
|
+
clear: (projectId: number, driver?: string) => Promise<{
|
|
162
|
+
ok: boolean;
|
|
163
|
+
driver: string;
|
|
164
|
+
error?: string;
|
|
165
|
+
}>;
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
export declare function networkApi(t: Transport): NetworkApi;
|
|
169
|
+
//# sourceMappingURL=network.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/resources/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export function networkApi(t) {
|
|
2
|
+
const { get, send, request } = t;
|
|
3
|
+
return {
|
|
4
|
+
hostIps: {
|
|
5
|
+
list: () => get('/v1/host-ips'),
|
|
6
|
+
primary: () => get('/v1/host-ips/primary'),
|
|
7
|
+
set: (ip, patch) => send('PUT', `/v1/host-ips/${encodeURIComponent(ip)}`, patch),
|
|
8
|
+
remove: (ip) => send('DELETE', `/v1/host-ips/${encodeURIComponent(ip)}`),
|
|
9
|
+
},
|
|
10
|
+
networks: {
|
|
11
|
+
list: () => get('/v1/networks'),
|
|
12
|
+
create: (input) => send('POST', '/v1/networks', { driver: 'bridge', ...input }),
|
|
13
|
+
remove: (name, serverId) => send('DELETE', `/v1/networks/${encodeURIComponent(name)}${serverId != null ? `?serverId=${serverId}` : ''}`),
|
|
14
|
+
attach: (input) => send('POST', '/v1/networks/attach', input),
|
|
15
|
+
detach: (input) => send('POST', '/v1/networks/detach', input),
|
|
16
|
+
members: (name) => get(`/v1/networks/${encodeURIComponent(name)}/members`),
|
|
17
|
+
},
|
|
18
|
+
tunnels: {
|
|
19
|
+
list: () => get('/v1/tunnels'),
|
|
20
|
+
create: (input) => send('POST', '/v1/tunnels', input),
|
|
21
|
+
remove: async (id) => {
|
|
22
|
+
await request(`/v1/tunnels/${id}`, { method: 'DELETE' });
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
firewall: {
|
|
26
|
+
status: () => get('/v1/firewall'),
|
|
27
|
+
toggle: (enabled) => send('POST', '/v1/firewall/toggle', { enabled }),
|
|
28
|
+
addRule: (input) => send('POST', '/v1/firewall/rules', input),
|
|
29
|
+
deleteRule: (id) => request(`/v1/firewall/rules/${id}`, { method: 'DELETE' }),
|
|
30
|
+
applyRecommended: () => send('POST', '/v1/firewall/recommended'),
|
|
31
|
+
},
|
|
32
|
+
egress: {
|
|
33
|
+
list: () => get('/v1/egress'),
|
|
34
|
+
set: (input) => send('POST', '/v1/egress', input),
|
|
35
|
+
clear: (projectId, driver) => send('DELETE', `/v1/egress/${projectId}${driver ? `?driver=${encodeURIComponent(driver)}` : ''}`),
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/resources/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { PluginListResponse, PluginInspectResponse, InstallPluginInput, MarketplaceCatalogResponse, MenuListResponse } from '@ninedeploy/schemas';
|
|
2
|
+
import type { Transport } from '../transport.js';
|
|
3
|
+
export interface PluginsApi {
|
|
4
|
+
plugins: {
|
|
5
|
+
list: () => Promise<PluginListResponse>;
|
|
6
|
+
marketplace: (opts?: {
|
|
7
|
+
refresh?: boolean;
|
|
8
|
+
}) => Promise<MarketplaceCatalogResponse>;
|
|
9
|
+
install: (input: InstallPluginInput) => Promise<{
|
|
10
|
+
ok: boolean;
|
|
11
|
+
id: string;
|
|
12
|
+
status: string;
|
|
13
|
+
}>;
|
|
14
|
+
enable: (id: string) => Promise<{
|
|
15
|
+
ok: boolean;
|
|
16
|
+
id: string;
|
|
17
|
+
status: string;
|
|
18
|
+
}>;
|
|
19
|
+
disable: (id: string) => Promise<{
|
|
20
|
+
ok: boolean;
|
|
21
|
+
id: string;
|
|
22
|
+
status: string;
|
|
23
|
+
}>;
|
|
24
|
+
reload: (id: string) => Promise<{
|
|
25
|
+
ok: boolean;
|
|
26
|
+
id: string;
|
|
27
|
+
status: string;
|
|
28
|
+
}>;
|
|
29
|
+
inspect: (id: string) => Promise<PluginInspectResponse>;
|
|
30
|
+
uninstall: (id: string) => Promise<{
|
|
31
|
+
ok: boolean;
|
|
32
|
+
id: string;
|
|
33
|
+
}>;
|
|
34
|
+
};
|
|
35
|
+
menus: {
|
|
36
|
+
list: (query?: {
|
|
37
|
+
slot?: string;
|
|
38
|
+
}) => Promise<MenuListResponse>;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export declare function pluginsApi(t: Transport): PluginsApi;
|
|
42
|
+
//# sourceMappingURL=plugins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/resources/plugins.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,0BAA0B,EAC1B,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACxC,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;QACnF,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC;YAAE,EAAE,EAAE,OAAO,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC7F,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,EAAE,EAAE,OAAO,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC7E,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,EAAE,EAAE,OAAO,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC9E,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,EAAE,EAAE,OAAO,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC7E,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACxD,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,EAAE,EAAE,OAAO,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACjE,CAAC;IACF,KAAK,EAAE;QACL,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;KAChE,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,SAAS,GAAG,UAAU,CAuBnD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function pluginsApi(t) {
|
|
2
|
+
const { get, send } = t;
|
|
3
|
+
return {
|
|
4
|
+
plugins: {
|
|
5
|
+
list: () => get('/v1/plugins'),
|
|
6
|
+
marketplace: (opts) => get(`/v1/plugins/marketplace${opts?.refresh ? '?refresh=true' : ''}`),
|
|
7
|
+
install: (input) => send('POST', '/v1/plugins/install', input),
|
|
8
|
+
enable: (id) => send('POST', `/v1/plugins/${encodeURIComponent(id)}/enable`),
|
|
9
|
+
disable: (id) => send('POST', `/v1/plugins/${encodeURIComponent(id)}/disable`),
|
|
10
|
+
reload: (id) => send('POST', `/v1/plugins/${encodeURIComponent(id)}/reload`),
|
|
11
|
+
inspect: (id) => get(`/v1/plugins/${encodeURIComponent(id)}/inspect`),
|
|
12
|
+
uninstall: (id) => send('POST', `/v1/plugins/${encodeURIComponent(id)}/uninstall`),
|
|
13
|
+
},
|
|
14
|
+
menus: {
|
|
15
|
+
list: (query) => {
|
|
16
|
+
const qs = query?.slot ? `?slot=${encodeURIComponent(query.slot)}` : '';
|
|
17
|
+
return get(`/v1/menus${qs}`);
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/resources/plugins.ts"],"names":[],"mappings":"AA4BA,MAAM,UAAU,UAAU,CAAC,CAAY;IACrC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACxB,OAAO;QACL,OAAO,EAAE;YACP,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAqB,aAAa,CAAC;YAClD,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CACpB,GAAG,CACD,0BAA0B,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CACjE;YACH,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAA8C,MAAM,EAAE,qBAAqB,EAAE,KAAK,CAAC;YAC3G,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAA8C,MAAM,EAAE,eAAe,kBAAkB,CAAC,EAAE,CAAC,SAAS,CAAC;YACzH,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAA8C,MAAM,EAAE,eAAe,kBAAkB,CAAC,EAAE,CAAC,UAAU,CAAC;YAC3H,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAA8C,MAAM,EAAE,eAAe,kBAAkB,CAAC,EAAE,CAAC,SAAS,CAAC;YACzH,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAwB,eAAe,kBAAkB,CAAC,EAAE,CAAC,UAAU,CAAC;YAC5F,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAA8B,MAAM,EAAE,eAAe,kBAAkB,CAAC,EAAE,CAAC,YAAY,CAAC;SAChH;QACD,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACd,MAAM,EAAE,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,OAAO,GAAG,CAAmB,YAAY,EAAE,EAAE,CAAC,CAAC;YACjD,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
|