oblien 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/auth.d.ts +13 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +30 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/commands/api-access.d.ts +3 -0
- package/dist/cli/commands/api-access.d.ts.map +1 -0
- package/dist/cli/commands/api-access.js +87 -0
- package/dist/cli/commands/api-access.js.map +1 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +63 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/exec.d.ts +3 -0
- package/dist/cli/commands/exec.d.ts.map +1 -0
- package/dist/cli/commands/exec.js +173 -0
- package/dist/cli/commands/exec.js.map +1 -0
- package/dist/cli/commands/files.d.ts +3 -0
- package/dist/cli/commands/files.d.ts.map +1 -0
- package/dist/cli/commands/files.js +168 -0
- package/dist/cli/commands/files.js.map +1 -0
- package/dist/cli/commands/images.d.ts +3 -0
- package/dist/cli/commands/images.d.ts.map +1 -0
- package/dist/cli/commands/images.js +43 -0
- package/dist/cli/commands/images.js.map +1 -0
- package/dist/cli/commands/lifecycle.d.ts +3 -0
- package/dist/cli/commands/lifecycle.d.ts.map +1 -0
- package/dist/cli/commands/lifecycle.js +88 -0
- package/dist/cli/commands/lifecycle.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +3 -0
- package/dist/cli/commands/logs.d.ts.map +1 -0
- package/dist/cli/commands/logs.js +104 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/metadata.d.ts +3 -0
- package/dist/cli/commands/metadata.d.ts.map +1 -0
- package/dist/cli/commands/metadata.js +73 -0
- package/dist/cli/commands/metadata.js.map +1 -0
- package/dist/cli/commands/metrics.d.ts +3 -0
- package/dist/cli/commands/metrics.d.ts.map +1 -0
- package/dist/cli/commands/metrics.js +57 -0
- package/dist/cli/commands/metrics.js.map +1 -0
- package/dist/cli/commands/network.d.ts +3 -0
- package/dist/cli/commands/network.d.ts.map +1 -0
- package/dist/cli/commands/network.js +88 -0
- package/dist/cli/commands/network.js.map +1 -0
- package/dist/cli/commands/public-access.d.ts +3 -0
- package/dist/cli/commands/public-access.d.ts.map +1 -0
- package/dist/cli/commands/public-access.js +92 -0
- package/dist/cli/commands/public-access.js.map +1 -0
- package/dist/cli/commands/search.d.ts +3 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +134 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/skills.d.ts +3 -0
- package/dist/cli/commands/skills.d.ts.map +1 -0
- package/dist/cli/commands/skills.js +156 -0
- package/dist/cli/commands/skills.js.map +1 -0
- package/dist/cli/commands/snapshots.d.ts +3 -0
- package/dist/cli/commands/snapshots.d.ts.map +1 -0
- package/dist/cli/commands/snapshots.js +100 -0
- package/dist/cli/commands/snapshots.js.map +1 -0
- package/dist/cli/commands/ssh.d.ts +3 -0
- package/dist/cli/commands/ssh.d.ts.map +1 -0
- package/dist/cli/commands/ssh.js +81 -0
- package/dist/cli/commands/ssh.js.map +1 -0
- package/dist/cli/commands/terminal.d.ts +3 -0
- package/dist/cli/commands/terminal.d.ts.map +1 -0
- package/dist/cli/commands/terminal.js +109 -0
- package/dist/cli/commands/terminal.js.map +1 -0
- package/dist/cli/commands/types.d.ts +8 -0
- package/dist/cli/commands/types.d.ts.map +1 -0
- package/dist/cli/commands/types.js +2 -0
- package/dist/cli/commands/types.js.map +1 -0
- package/dist/cli/commands/usage.d.ts +3 -0
- package/dist/cli/commands/usage.d.ts.map +1 -0
- package/dist/cli/commands/usage.js +98 -0
- package/dist/cli/commands/usage.js.map +1 -0
- package/dist/cli/commands/watcher.d.ts +3 -0
- package/dist/cli/commands/watcher.d.ts.map +1 -0
- package/dist/cli/commands/watcher.js +108 -0
- package/dist/cli/commands/watcher.js.map +1 -0
- package/dist/cli/commands/workloads.d.ts +3 -0
- package/dist/cli/commands/workloads.d.ts.map +1 -0
- package/dist/cli/commands/workloads.js +232 -0
- package/dist/cli/commands/workloads.js.map +1 -0
- package/dist/cli/commands/workspaces.d.ts +3 -0
- package/dist/cli/commands/workspaces.d.ts.map +1 -0
- package/dist/cli/commands/workspaces.js +255 -0
- package/dist/cli/commands/workspaces.js.map +1 -0
- package/dist/cli/config-store.d.ts +10 -0
- package/dist/cli/config-store.d.ts.map +1 -0
- package/dist/cli/config-store.js +28 -0
- package/dist/cli/config-store.js.map +1 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +199 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/output.d.ts +21 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +108 -0
- package/dist/cli/output.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { buildClient } from '../auth.js';
|
|
2
|
+
import { printResult } from '../output.js';
|
|
3
|
+
export async function imagesCmd(args, flags) {
|
|
4
|
+
const sub = args[0];
|
|
5
|
+
switch (sub) {
|
|
6
|
+
case 'list':
|
|
7
|
+
case 'ls':
|
|
8
|
+
return imagesList(args.slice(1), flags);
|
|
9
|
+
default:
|
|
10
|
+
console.log(`
|
|
11
|
+
oblien images — Browse workspace images
|
|
12
|
+
|
|
13
|
+
Usage:
|
|
14
|
+
oblien images list [flags] List available images
|
|
15
|
+
|
|
16
|
+
Flags:
|
|
17
|
+
--search <query> Filter by name
|
|
18
|
+
--category <cat> Filter by category
|
|
19
|
+
|
|
20
|
+
Examples:
|
|
21
|
+
oblien images list
|
|
22
|
+
oblien images list --search node
|
|
23
|
+
oblien images list --category language
|
|
24
|
+
`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function parseFlag(args, flag) {
|
|
28
|
+
const idx = args.indexOf(flag);
|
|
29
|
+
return idx >= 0 && idx + 1 < args.length ? args[idx + 1] : undefined;
|
|
30
|
+
}
|
|
31
|
+
async function imagesList(args, flags) {
|
|
32
|
+
const client = buildClient(flags);
|
|
33
|
+
const params = {};
|
|
34
|
+
const search = parseFlag(args, '--search');
|
|
35
|
+
const category = parseFlag(args, '--category');
|
|
36
|
+
if (search)
|
|
37
|
+
params.search = search;
|
|
38
|
+
if (category)
|
|
39
|
+
params.category = category;
|
|
40
|
+
const res = await client.workspaces.images.list(params);
|
|
41
|
+
printResult(res, flags.json);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=images.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../../src/cli/commands/images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAc,MAAM,cAAc,CAAC;AAGvD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,KAAe;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,IAAI;YACP,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1C;YACE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;CAcjB,CAAC,CAAC;IACD,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAc,EAAE,IAAY;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAc,EAAE,KAAe;IACvD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC/C,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,IAAI,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAEzC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAa,CAAC,CAAC;IAC/D,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/lifecycle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BjF"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { buildClient } from '../auth.js';
|
|
2
|
+
import { printResult, printSuccess } from '../output.js';
|
|
3
|
+
export async function lifecycleCmd(args, flags) {
|
|
4
|
+
const sub = args[0];
|
|
5
|
+
switch (sub) {
|
|
6
|
+
case 'get': return lcGet(args[1], flags);
|
|
7
|
+
case 'make-permanent': return lcMakePermanent(args[1], flags);
|
|
8
|
+
case 'make-temporary': return lcMakeTemporary(args[1], args.slice(2), flags);
|
|
9
|
+
case 'update-ttl': return lcUpdateTtl(args[1], args.slice(2), flags);
|
|
10
|
+
case 'destroy': return lcDestroy(args[1], flags);
|
|
11
|
+
default:
|
|
12
|
+
console.log(`
|
|
13
|
+
oblien lifecycle — Manage workspace lifecycle mode
|
|
14
|
+
|
|
15
|
+
Usage:
|
|
16
|
+
oblien lifecycle get <ws-id> Get lifecycle status
|
|
17
|
+
oblien lifecycle make-permanent <ws-id> Set permanent mode
|
|
18
|
+
oblien lifecycle make-temporary <ws-id> [flags] Set temporary mode
|
|
19
|
+
oblien lifecycle update-ttl <ws-id> [flags] Update TTL
|
|
20
|
+
oblien lifecycle destroy <ws-id> Destroy workspace
|
|
21
|
+
|
|
22
|
+
Temporary mode flags:
|
|
23
|
+
--ttl <seconds> Time-to-live in seconds
|
|
24
|
+
--ttl-action <action> stop or remove (default: stop)
|
|
25
|
+
|
|
26
|
+
Examples:
|
|
27
|
+
oblien lifecycle get ws_abc123
|
|
28
|
+
oblien lifecycle make-temporary ws_abc123 --ttl 3600
|
|
29
|
+
oblien lifecycle make-permanent ws_abc123
|
|
30
|
+
`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function requireId(id, cmd) {
|
|
34
|
+
if (!id || id.startsWith('-')) {
|
|
35
|
+
console.error(`Usage: oblien lifecycle ${cmd} <workspace-id>`);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
return id;
|
|
39
|
+
}
|
|
40
|
+
function parseFlag(args, flag) {
|
|
41
|
+
const idx = args.indexOf(flag);
|
|
42
|
+
return idx >= 0 && idx + 1 < args.length ? args[idx + 1] : undefined;
|
|
43
|
+
}
|
|
44
|
+
async function lcGet(id, flags) {
|
|
45
|
+
const wsId = requireId(id, 'get');
|
|
46
|
+
const client = buildClient(flags);
|
|
47
|
+
const res = await client.workspaces.lifecycle.get(wsId);
|
|
48
|
+
printResult(res, flags.json);
|
|
49
|
+
}
|
|
50
|
+
async function lcMakePermanent(id, flags) {
|
|
51
|
+
const wsId = requireId(id, 'make-permanent');
|
|
52
|
+
const client = buildClient(flags);
|
|
53
|
+
await client.workspaces.lifecycle.makePermanent(wsId);
|
|
54
|
+
printSuccess(`Set ${wsId} to permanent mode`);
|
|
55
|
+
}
|
|
56
|
+
async function lcMakeTemporary(id, args, flags) {
|
|
57
|
+
const wsId = requireId(id, 'make-temporary');
|
|
58
|
+
const client = buildClient(flags);
|
|
59
|
+
const params = {};
|
|
60
|
+
const ttl = parseFlag(args, '--ttl');
|
|
61
|
+
const action = parseFlag(args, '--ttl-action');
|
|
62
|
+
if (ttl)
|
|
63
|
+
params.ttl = Number(ttl);
|
|
64
|
+
if (action)
|
|
65
|
+
params.ttl_action = action;
|
|
66
|
+
await client.workspaces.lifecycle.makeTemporary(wsId, params);
|
|
67
|
+
printSuccess(`Set ${wsId} to temporary mode${ttl ? ` (TTL: ${ttl}s)` : ''}`);
|
|
68
|
+
}
|
|
69
|
+
async function lcUpdateTtl(id, args, flags) {
|
|
70
|
+
const wsId = requireId(id, 'update-ttl');
|
|
71
|
+
const client = buildClient(flags);
|
|
72
|
+
const params = {};
|
|
73
|
+
const ttl = parseFlag(args, '--ttl');
|
|
74
|
+
const action = parseFlag(args, '--ttl-action');
|
|
75
|
+
if (ttl)
|
|
76
|
+
params.ttl = Number(ttl);
|
|
77
|
+
if (action)
|
|
78
|
+
params.ttl_action = action;
|
|
79
|
+
await client.workspaces.lifecycle.updateTtl(wsId, params);
|
|
80
|
+
printSuccess(`Updated TTL for ${wsId}`);
|
|
81
|
+
}
|
|
82
|
+
async function lcDestroy(id, flags) {
|
|
83
|
+
const wsId = requireId(id, 'destroy');
|
|
84
|
+
const client = buildClient(flags);
|
|
85
|
+
await client.workspaces.lifecycle.destroy(wsId);
|
|
86
|
+
printSuccess(`Destroyed ${wsId}`);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/cli/commands/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc,EAAE,KAAe;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,KAAK,CAAC,CAAc,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACtD,KAAK,gBAAgB,CAAC,CAAG,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAChE,KAAK,gBAAgB,CAAC,CAAG,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/E,KAAK,YAAY,CAAC,CAAO,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3E,KAAK,SAAS,CAAC,CAAU,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1D;YACE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;CAkBjB,CAAC,CAAC;IACD,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAsB,EAAE,GAAW;IACpD,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,iBAAiB,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,SAAS,CAAC,IAAc,EAAE,IAAY;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,EAAsB,EAAE,KAAe;IAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxD,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,EAAsB,EAAE,KAAe;IACpE,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACtD,YAAY,CAAC,OAAO,IAAI,oBAAoB,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,EAAsB,EAAE,IAAc,EAAE,KAAe;IACpF,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAElC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,GAAG;QAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,MAAM;QAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;IAEvC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAa,CAAC,CAAC;IACrE,YAAY,CAAC,OAAO,IAAI,qBAAqB,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,EAAsB,EAAE,IAAc,EAAE,KAAe;IAChF,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAElC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,GAAG;QAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,MAAM;QAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC;IAEvC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,MAAa,CAAC,CAAC;IACjE,YAAY,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,EAAsB,EAAE,KAAe;IAC9D,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,YAAY,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC5E"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { buildClient } from '../auth.js';
|
|
2
|
+
import { printResult } from '../output.js';
|
|
3
|
+
export async function logsCmd(args, flags) {
|
|
4
|
+
const sub = args[0];
|
|
5
|
+
switch (sub) {
|
|
6
|
+
case 'get': return logsGet(args[1], args.slice(2), flags);
|
|
7
|
+
case 'boot': return logsStream('boot', args[1], args.slice(2), flags);
|
|
8
|
+
case 'cmd': return logsStream('cmd', args[1], args.slice(2), flags);
|
|
9
|
+
case 'files': return logsFiles(args[1], flags);
|
|
10
|
+
case 'file': return logsFile(args[1], args[2], flags);
|
|
11
|
+
case 'clear': return logsClear(args[1], flags);
|
|
12
|
+
default:
|
|
13
|
+
// If first arg looks like a workspace ID, treat as `logs get`
|
|
14
|
+
if (sub && !sub.startsWith('-')) {
|
|
15
|
+
return logsGet(sub, args.slice(1), flags);
|
|
16
|
+
}
|
|
17
|
+
console.log(`
|
|
18
|
+
oblien logs — View workspace logs
|
|
19
|
+
|
|
20
|
+
Usage:
|
|
21
|
+
oblien logs <ws-id> Get logs
|
|
22
|
+
oblien logs get <ws-id> [--source <src>] Get logs with source filter
|
|
23
|
+
oblien logs boot <ws-id> Stream boot logs
|
|
24
|
+
oblien logs cmd <ws-id> Stream command logs
|
|
25
|
+
oblien logs files <ws-id> List log files
|
|
26
|
+
oblien logs file <ws-id> <name> Get specific log file
|
|
27
|
+
oblien logs clear <ws-id> Clear logs
|
|
28
|
+
|
|
29
|
+
Flags:
|
|
30
|
+
--source <src> Filter by source
|
|
31
|
+
--tail <n> Number of tail lines for streaming
|
|
32
|
+
|
|
33
|
+
Examples:
|
|
34
|
+
oblien logs ws_abc123
|
|
35
|
+
oblien logs boot ws_abc123
|
|
36
|
+
oblien logs boot ws_abc123 --tail 50
|
|
37
|
+
`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function requireId(id, cmd) {
|
|
41
|
+
if (!id || id.startsWith('-')) {
|
|
42
|
+
console.error(`Usage: oblien logs ${cmd} <workspace-id>`);
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
return id;
|
|
46
|
+
}
|
|
47
|
+
function parseFlag(args, flag) {
|
|
48
|
+
const idx = args.indexOf(flag);
|
|
49
|
+
return idx >= 0 && idx + 1 < args.length ? args[idx + 1] : undefined;
|
|
50
|
+
}
|
|
51
|
+
async function logsGet(id, args, flags) {
|
|
52
|
+
const wsId = requireId(id, 'get');
|
|
53
|
+
const client = buildClient(flags);
|
|
54
|
+
const params = {};
|
|
55
|
+
const source = parseFlag(args, '--source');
|
|
56
|
+
const tail = parseFlag(args, '--tail');
|
|
57
|
+
if (source)
|
|
58
|
+
params.source = source;
|
|
59
|
+
if (tail)
|
|
60
|
+
params.tail_lines = Number(tail);
|
|
61
|
+
const res = await client.workspaces.logs.get(wsId, params);
|
|
62
|
+
printResult(res, flags.json);
|
|
63
|
+
}
|
|
64
|
+
async function logsStream(type, id, args, flags) {
|
|
65
|
+
const wsId = requireId(id, type);
|
|
66
|
+
const client = buildClient(flags);
|
|
67
|
+
const tail = parseFlag(args, '--tail');
|
|
68
|
+
const params = tail ? { tail_lines: Number(tail) } : undefined;
|
|
69
|
+
const stream = type === 'boot'
|
|
70
|
+
? client.workspaces.logs.streamBoot(wsId, params)
|
|
71
|
+
: client.workspaces.logs.streamCmd(wsId, params);
|
|
72
|
+
for await (const event of stream) {
|
|
73
|
+
if (flags.json) {
|
|
74
|
+
printResult(event, true);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const ts = event.timestamp ? `[${event.timestamp}] ` : '';
|
|
78
|
+
process.stdout.write(`${ts}${event.message}\n`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function logsFiles(id, flags) {
|
|
83
|
+
const wsId = requireId(id, 'files');
|
|
84
|
+
const client = buildClient(flags);
|
|
85
|
+
const res = await client.workspaces.logs.listFiles(wsId);
|
|
86
|
+
printResult(res, flags.json);
|
|
87
|
+
}
|
|
88
|
+
async function logsFile(id, name, flags) {
|
|
89
|
+
const wsId = requireId(id, 'file');
|
|
90
|
+
if (!name) {
|
|
91
|
+
console.error('Usage: oblien logs file <ws-id> <name>');
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
const client = buildClient(flags);
|
|
95
|
+
const res = await client.workspaces.logs.getFile(wsId, name);
|
|
96
|
+
printResult(res, flags.json);
|
|
97
|
+
}
|
|
98
|
+
async function logsClear(id, flags) {
|
|
99
|
+
const wsId = requireId(id, 'clear');
|
|
100
|
+
const client = buildClient(flags);
|
|
101
|
+
await client.workspaces.logs.clear(wsId);
|
|
102
|
+
console.log(`✓ Cleared logs for ${wsId}`);
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/metadata.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { buildClient } from '../auth.js';
|
|
2
|
+
import { printResult } from '../output.js';
|
|
3
|
+
export async function metadataCmd(args, flags) {
|
|
4
|
+
const sub = args[0];
|
|
5
|
+
switch (sub) {
|
|
6
|
+
case 'get': return mdGet(args[1], flags);
|
|
7
|
+
case 'update':
|
|
8
|
+
case 'set': return mdUpdate(args[1], args.slice(2), flags);
|
|
9
|
+
case 'patch': return mdPatch(args[1], args.slice(2), flags);
|
|
10
|
+
default:
|
|
11
|
+
console.log(`
|
|
12
|
+
oblien metadata — Manage workspace metadata (key-value tags)
|
|
13
|
+
|
|
14
|
+
Usage:
|
|
15
|
+
oblien metadata get <ws-id> Get all metadata
|
|
16
|
+
oblien metadata set <ws-id> <key>=<val> ... Set metadata (full replace)
|
|
17
|
+
oblien metadata patch <ws-id> <key>=<val> ... Merge metadata (add/update keys)
|
|
18
|
+
|
|
19
|
+
Examples:
|
|
20
|
+
oblien metadata get ws_abc123
|
|
21
|
+
oblien metadata set ws_abc123 env=production team=backend
|
|
22
|
+
oblien metadata patch ws_abc123 version=2.0
|
|
23
|
+
`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function requireId(id, cmd) {
|
|
27
|
+
if (!id || id.startsWith('-')) {
|
|
28
|
+
console.error(`Usage: oblien metadata ${cmd} <workspace-id>`);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
return id;
|
|
32
|
+
}
|
|
33
|
+
function parseKvPairs(args) {
|
|
34
|
+
const result = {};
|
|
35
|
+
for (const arg of args) {
|
|
36
|
+
if (arg.startsWith('-'))
|
|
37
|
+
continue;
|
|
38
|
+
const eq = arg.indexOf('=');
|
|
39
|
+
if (eq >= 0) {
|
|
40
|
+
result[arg.slice(0, eq)] = arg.slice(eq + 1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
async function mdGet(id, flags) {
|
|
46
|
+
const wsId = requireId(id, 'get');
|
|
47
|
+
const client = buildClient(flags);
|
|
48
|
+
const res = await client.workspaces.metadata.get(wsId);
|
|
49
|
+
printResult(res, flags.json);
|
|
50
|
+
}
|
|
51
|
+
async function mdUpdate(id, args, flags) {
|
|
52
|
+
const wsId = requireId(id, 'set');
|
|
53
|
+
const metadata = parseKvPairs(args);
|
|
54
|
+
if (Object.keys(metadata).length === 0) {
|
|
55
|
+
console.error('Usage: oblien metadata set <ws-id> key=value ...');
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
const client = buildClient(flags);
|
|
59
|
+
const res = await client.workspaces.metadata.update(wsId, { metadata });
|
|
60
|
+
printResult(res, flags.json);
|
|
61
|
+
}
|
|
62
|
+
async function mdPatch(id, args, flags) {
|
|
63
|
+
const wsId = requireId(id, 'patch');
|
|
64
|
+
const metadata = parseKvPairs(args);
|
|
65
|
+
if (Object.keys(metadata).length === 0) {
|
|
66
|
+
console.error('Usage: oblien metadata patch <ws-id> key=value ...');
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
const client = buildClient(flags);
|
|
70
|
+
const res = await client.workspaces.metadata.patch(wsId, { metadata });
|
|
71
|
+
printResult(res, flags.json);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/cli/commands/metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/metrics.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB/E"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { buildClient } from '../auth.js';
|
|
2
|
+
import { printResult } from '../output.js';
|
|
3
|
+
export async function metricsCmd(args, flags) {
|
|
4
|
+
const sub = args[0];
|
|
5
|
+
switch (sub) {
|
|
6
|
+
case 'stats': return mStats(args[1], args.slice(2), flags);
|
|
7
|
+
case 'info': return mInfo(args[1], flags);
|
|
8
|
+
case 'config': return mConfig(args[1], flags);
|
|
9
|
+
default:
|
|
10
|
+
console.log(`
|
|
11
|
+
oblien metrics — View workspace metrics and stats
|
|
12
|
+
|
|
13
|
+
Usage:
|
|
14
|
+
oblien metrics stats <ws-id> [--stream] Get/stream resource stats
|
|
15
|
+
oblien metrics info <ws-id> Metrics info
|
|
16
|
+
oblien metrics config <ws-id> Metrics config
|
|
17
|
+
|
|
18
|
+
Examples:
|
|
19
|
+
oblien metrics stats ws_abc123
|
|
20
|
+
oblien metrics stats ws_abc123 --stream
|
|
21
|
+
oblien metrics info ws_abc123
|
|
22
|
+
`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function requireId(id, cmd) {
|
|
26
|
+
if (!id || id.startsWith('-')) {
|
|
27
|
+
console.error(`Usage: oblien metrics ${cmd} <workspace-id>`);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
return id;
|
|
31
|
+
}
|
|
32
|
+
async function mStats(id, args, flags) {
|
|
33
|
+
const wsId = requireId(id, 'stats');
|
|
34
|
+
const client = buildClient(flags);
|
|
35
|
+
if (args.includes('--stream')) {
|
|
36
|
+
for await (const event of client.workspaces.metrics.statsStream(wsId)) {
|
|
37
|
+
printResult(event, flags.json || true);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
const res = await client.workspaces.metrics.stats(wsId);
|
|
42
|
+
printResult(res, flags.json);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async function mInfo(id, flags) {
|
|
46
|
+
const wsId = requireId(id, 'info');
|
|
47
|
+
const client = buildClient(flags);
|
|
48
|
+
const res = await client.workspaces.metrics.info(wsId);
|
|
49
|
+
printResult(res, flags.json);
|
|
50
|
+
}
|
|
51
|
+
async function mConfig(id, flags) {
|
|
52
|
+
const wsId = requireId(id, 'config');
|
|
53
|
+
const client = buildClient(flags);
|
|
54
|
+
const res = await client.workspaces.metrics.config(wsId);
|
|
55
|
+
printResult(res, flags.json);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/cli/commands/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc,EAAE,KAAe;IAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO,CAAC,CAAG,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7D,KAAK,MAAM,CAAC,CAAI,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,KAAK,QAAQ,CAAC,CAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/C;YACE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;CAYjB,CAAC,CAAC;IACD,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EAAsB,EAAE,GAAW;IACpD,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,yBAAyB,GAAG,iBAAiB,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,EAAsB,EAAE,IAAc,EAAE,KAAe;IAC3E,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAElC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACtE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,EAAsB,EAAE,KAAe;IAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,EAAsB,EAAE,KAAe;IAC5D,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzD,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/network.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B/E"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { buildClient } from '../auth.js';
|
|
2
|
+
import { printResult, printSuccess } from '../output.js';
|
|
3
|
+
export async function networkCmd(args, flags) {
|
|
4
|
+
const sub = args[0];
|
|
5
|
+
switch (sub) {
|
|
6
|
+
case 'get': return netGet(args[1], flags);
|
|
7
|
+
case 'update': return netUpdate(args[1], args.slice(2), flags);
|
|
8
|
+
case 'apply-outbound-ip': return netApplyOutboundIp(args[1], args.slice(2), flags);
|
|
9
|
+
default:
|
|
10
|
+
console.log(`
|
|
11
|
+
oblien network — Manage workspace networking
|
|
12
|
+
|
|
13
|
+
Usage:
|
|
14
|
+
oblien network get <ws-id> Get network config
|
|
15
|
+
oblien network update <ws-id> [flags] Update network config
|
|
16
|
+
oblien network apply-outbound-ip <ws-id> --ip <ip> Apply dedicated outbound IP
|
|
17
|
+
|
|
18
|
+
Update flags:
|
|
19
|
+
--public-access Enable public access
|
|
20
|
+
--no-public-access Disable public access
|
|
21
|
+
--allow-internet Allow outbound internet
|
|
22
|
+
--no-allow-internet Block outbound internet
|
|
23
|
+
--ingress-ports <ports> Comma-separated ingress ports
|
|
24
|
+
--private-links <ws-ids> Comma-separated workspace IDs for private links
|
|
25
|
+
--egress <hosts> Comma-separated allowed egress hosts
|
|
26
|
+
|
|
27
|
+
Examples:
|
|
28
|
+
oblien network get ws_abc123
|
|
29
|
+
oblien network update ws_abc123 --public-access --ingress-ports 3000,8080
|
|
30
|
+
oblien network update ws_abc123 --private-links ws_def456,ws_ghi789
|
|
31
|
+
`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function netGet(wsId, flags) {
|
|
35
|
+
if (!wsId) {
|
|
36
|
+
console.error('Usage: oblien network get <ws-id>');
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
const client = buildClient(flags);
|
|
40
|
+
const res = await client.workspaces.network.get(wsId);
|
|
41
|
+
printResult(res, flags.json);
|
|
42
|
+
}
|
|
43
|
+
async function netUpdate(wsId, args, flags) {
|
|
44
|
+
if (!wsId) {
|
|
45
|
+
console.error('Usage: oblien network update <ws-id> [flags]');
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
const client = buildClient(flags);
|
|
49
|
+
const params = {};
|
|
50
|
+
if (args.includes('--public-access'))
|
|
51
|
+
params.public_access = true;
|
|
52
|
+
if (args.includes('--no-public-access'))
|
|
53
|
+
params.public_access = false;
|
|
54
|
+
if (args.includes('--allow-internet'))
|
|
55
|
+
params.allow_internet = true;
|
|
56
|
+
if (args.includes('--no-allow-internet'))
|
|
57
|
+
params.allow_internet = false;
|
|
58
|
+
const ingress = parseFlag(args, '--ingress-ports');
|
|
59
|
+
if (ingress)
|
|
60
|
+
params.ingress_ports = ingress.split(',').map(Number);
|
|
61
|
+
const links = parseFlag(args, '--private-links');
|
|
62
|
+
if (links)
|
|
63
|
+
params.private_link_ids = links.split(',');
|
|
64
|
+
const egress = parseFlag(args, '--egress');
|
|
65
|
+
if (egress)
|
|
66
|
+
params.egress = egress.split(',');
|
|
67
|
+
await client.workspaces.network.update(wsId, params);
|
|
68
|
+
printSuccess(`Updated network config for ${wsId}`);
|
|
69
|
+
}
|
|
70
|
+
function parseFlag(args, flag) {
|
|
71
|
+
const idx = args.indexOf(flag);
|
|
72
|
+
return idx >= 0 && idx + 1 < args.length ? args[idx + 1] : undefined;
|
|
73
|
+
}
|
|
74
|
+
async function netApplyOutboundIp(wsId, args, flags) {
|
|
75
|
+
if (!wsId) {
|
|
76
|
+
console.error('Usage: oblien network apply-outbound-ip <ws-id> --ip <ip>');
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
const ip = parseFlag(args, '--ip');
|
|
80
|
+
if (!ip) {
|
|
81
|
+
console.error('Usage: oblien network apply-outbound-ip <ws-id> --ip <ip>');
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
const client = buildClient(flags);
|
|
85
|
+
await client.workspaces.network.applyOutboundIp(wsId, { ip });
|
|
86
|
+
printSuccess(`Applied outbound IP ${ip} to ${wsId}`);
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/cli/commands/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-access.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/public-access.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BpF"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { buildClient } from '../auth.js';
|
|
2
|
+
import { printResult, printSuccess, printTable } from '../output.js';
|
|
3
|
+
export async function publicAccessCmd(args, flags) {
|
|
4
|
+
const sub = args[0];
|
|
5
|
+
switch (sub) {
|
|
6
|
+
case 'list':
|
|
7
|
+
case 'ls': return paList(args[1], flags);
|
|
8
|
+
case 'expose': return paExpose(args[1], args.slice(2), flags);
|
|
9
|
+
case 'revoke': return paRevoke(args[1], args[2], flags);
|
|
10
|
+
default:
|
|
11
|
+
console.log(`
|
|
12
|
+
oblien public-access — Expose and revoke public ports
|
|
13
|
+
|
|
14
|
+
Usage:
|
|
15
|
+
oblien public-access list <ws-id> List exposed ports
|
|
16
|
+
oblien public-access expose <ws-id> [flags] Expose a port
|
|
17
|
+
oblien public-access revoke <ws-id> <port> Revoke a port
|
|
18
|
+
|
|
19
|
+
Expose flags:
|
|
20
|
+
--port <number> Port number (required)
|
|
21
|
+
--protocol <proto> Protocol (http, https, tcp)
|
|
22
|
+
--label <label> Label for the exposed port
|
|
23
|
+
|
|
24
|
+
Examples:
|
|
25
|
+
oblien public-access list ws_abc123
|
|
26
|
+
oblien public-access expose ws_abc123 --port 3000 --protocol https
|
|
27
|
+
oblien public-access revoke ws_abc123 3000
|
|
28
|
+
`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function requireId(id, cmd) {
|
|
32
|
+
if (!id || id.startsWith('-')) {
|
|
33
|
+
console.error(`Usage: oblien public-access ${cmd} <workspace-id>`);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
return id;
|
|
37
|
+
}
|
|
38
|
+
function parseFlag(args, flag) {
|
|
39
|
+
const idx = args.indexOf(flag);
|
|
40
|
+
return idx >= 0 && idx + 1 < args.length ? args[idx + 1] : undefined;
|
|
41
|
+
}
|
|
42
|
+
async function paList(id, flags) {
|
|
43
|
+
const wsId = requireId(id, 'list');
|
|
44
|
+
const client = buildClient(flags);
|
|
45
|
+
const res = await client.workspaces.publicAccess.list(wsId);
|
|
46
|
+
if (flags.json) {
|
|
47
|
+
printResult(res, true);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
const rows = (Array.isArray(res) ? res : []).map((p) => ({
|
|
51
|
+
port: p.port,
|
|
52
|
+
protocol: p.protocol ?? '-',
|
|
53
|
+
url: p.url ?? '-',
|
|
54
|
+
label: p.label ?? '-',
|
|
55
|
+
}));
|
|
56
|
+
if (rows.length === 0) {
|
|
57
|
+
console.log('No exposed ports.');
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
printTable(rows, ['port', 'protocol', 'url', 'label']);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async function paExpose(id, args, flags) {
|
|
65
|
+
const wsId = requireId(id, 'expose');
|
|
66
|
+
const port = parseFlag(args, '--port');
|
|
67
|
+
if (!port) {
|
|
68
|
+
console.error('Usage: oblien public-access expose <ws-id> --port <number>');
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
const params = { port: Number(port) };
|
|
72
|
+
const protocol = parseFlag(args, '--protocol');
|
|
73
|
+
const label = parseFlag(args, '--label');
|
|
74
|
+
if (protocol)
|
|
75
|
+
params.protocol = protocol;
|
|
76
|
+
if (label)
|
|
77
|
+
params.label = label;
|
|
78
|
+
const client = buildClient(flags);
|
|
79
|
+
const res = await client.workspaces.publicAccess.expose(wsId, params);
|
|
80
|
+
printResult(res, flags.json);
|
|
81
|
+
}
|
|
82
|
+
async function paRevoke(id, port, flags) {
|
|
83
|
+
const wsId = requireId(id, 'revoke');
|
|
84
|
+
if (!port) {
|
|
85
|
+
console.error('Usage: oblien public-access revoke <ws-id> <port>');
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
const client = buildClient(flags);
|
|
89
|
+
await client.workspaces.publicAccess.revoke(wsId, Number(port));
|
|
90
|
+
printSuccess(`Revoked public access on port ${port} for ${wsId}`);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=public-access.js.map
|