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.
Files changed (101) hide show
  1. package/dist/cli/auth.d.ts +13 -0
  2. package/dist/cli/auth.d.ts.map +1 -0
  3. package/dist/cli/auth.js +30 -0
  4. package/dist/cli/auth.js.map +1 -0
  5. package/dist/cli/commands/api-access.d.ts +3 -0
  6. package/dist/cli/commands/api-access.d.ts.map +1 -0
  7. package/dist/cli/commands/api-access.js +87 -0
  8. package/dist/cli/commands/api-access.js.map +1 -0
  9. package/dist/cli/commands/config.d.ts +3 -0
  10. package/dist/cli/commands/config.d.ts.map +1 -0
  11. package/dist/cli/commands/config.js +63 -0
  12. package/dist/cli/commands/config.js.map +1 -0
  13. package/dist/cli/commands/exec.d.ts +3 -0
  14. package/dist/cli/commands/exec.d.ts.map +1 -0
  15. package/dist/cli/commands/exec.js +173 -0
  16. package/dist/cli/commands/exec.js.map +1 -0
  17. package/dist/cli/commands/files.d.ts +3 -0
  18. package/dist/cli/commands/files.d.ts.map +1 -0
  19. package/dist/cli/commands/files.js +168 -0
  20. package/dist/cli/commands/files.js.map +1 -0
  21. package/dist/cli/commands/images.d.ts +3 -0
  22. package/dist/cli/commands/images.d.ts.map +1 -0
  23. package/dist/cli/commands/images.js +43 -0
  24. package/dist/cli/commands/images.js.map +1 -0
  25. package/dist/cli/commands/lifecycle.d.ts +3 -0
  26. package/dist/cli/commands/lifecycle.d.ts.map +1 -0
  27. package/dist/cli/commands/lifecycle.js +88 -0
  28. package/dist/cli/commands/lifecycle.js.map +1 -0
  29. package/dist/cli/commands/logs.d.ts +3 -0
  30. package/dist/cli/commands/logs.d.ts.map +1 -0
  31. package/dist/cli/commands/logs.js +104 -0
  32. package/dist/cli/commands/logs.js.map +1 -0
  33. package/dist/cli/commands/metadata.d.ts +3 -0
  34. package/dist/cli/commands/metadata.d.ts.map +1 -0
  35. package/dist/cli/commands/metadata.js +73 -0
  36. package/dist/cli/commands/metadata.js.map +1 -0
  37. package/dist/cli/commands/metrics.d.ts +3 -0
  38. package/dist/cli/commands/metrics.d.ts.map +1 -0
  39. package/dist/cli/commands/metrics.js +57 -0
  40. package/dist/cli/commands/metrics.js.map +1 -0
  41. package/dist/cli/commands/network.d.ts +3 -0
  42. package/dist/cli/commands/network.d.ts.map +1 -0
  43. package/dist/cli/commands/network.js +88 -0
  44. package/dist/cli/commands/network.js.map +1 -0
  45. package/dist/cli/commands/public-access.d.ts +3 -0
  46. package/dist/cli/commands/public-access.d.ts.map +1 -0
  47. package/dist/cli/commands/public-access.js +92 -0
  48. package/dist/cli/commands/public-access.js.map +1 -0
  49. package/dist/cli/commands/search.d.ts +3 -0
  50. package/dist/cli/commands/search.d.ts.map +1 -0
  51. package/dist/cli/commands/search.js +134 -0
  52. package/dist/cli/commands/search.js.map +1 -0
  53. package/dist/cli/commands/skills.d.ts +3 -0
  54. package/dist/cli/commands/skills.d.ts.map +1 -0
  55. package/dist/cli/commands/skills.js +156 -0
  56. package/dist/cli/commands/skills.js.map +1 -0
  57. package/dist/cli/commands/snapshots.d.ts +3 -0
  58. package/dist/cli/commands/snapshots.d.ts.map +1 -0
  59. package/dist/cli/commands/snapshots.js +100 -0
  60. package/dist/cli/commands/snapshots.js.map +1 -0
  61. package/dist/cli/commands/ssh.d.ts +3 -0
  62. package/dist/cli/commands/ssh.d.ts.map +1 -0
  63. package/dist/cli/commands/ssh.js +81 -0
  64. package/dist/cli/commands/ssh.js.map +1 -0
  65. package/dist/cli/commands/terminal.d.ts +3 -0
  66. package/dist/cli/commands/terminal.d.ts.map +1 -0
  67. package/dist/cli/commands/terminal.js +109 -0
  68. package/dist/cli/commands/terminal.js.map +1 -0
  69. package/dist/cli/commands/types.d.ts +8 -0
  70. package/dist/cli/commands/types.d.ts.map +1 -0
  71. package/dist/cli/commands/types.js +2 -0
  72. package/dist/cli/commands/types.js.map +1 -0
  73. package/dist/cli/commands/usage.d.ts +3 -0
  74. package/dist/cli/commands/usage.d.ts.map +1 -0
  75. package/dist/cli/commands/usage.js +98 -0
  76. package/dist/cli/commands/usage.js.map +1 -0
  77. package/dist/cli/commands/watcher.d.ts +3 -0
  78. package/dist/cli/commands/watcher.d.ts.map +1 -0
  79. package/dist/cli/commands/watcher.js +108 -0
  80. package/dist/cli/commands/watcher.js.map +1 -0
  81. package/dist/cli/commands/workloads.d.ts +3 -0
  82. package/dist/cli/commands/workloads.d.ts.map +1 -0
  83. package/dist/cli/commands/workloads.js +232 -0
  84. package/dist/cli/commands/workloads.js.map +1 -0
  85. package/dist/cli/commands/workspaces.d.ts +3 -0
  86. package/dist/cli/commands/workspaces.d.ts.map +1 -0
  87. package/dist/cli/commands/workspaces.js +255 -0
  88. package/dist/cli/commands/workspaces.js.map +1 -0
  89. package/dist/cli/config-store.d.ts +10 -0
  90. package/dist/cli/config-store.d.ts.map +1 -0
  91. package/dist/cli/config-store.js +28 -0
  92. package/dist/cli/config-store.js.map +1 -0
  93. package/dist/cli/index.d.ts +12 -0
  94. package/dist/cli/index.d.ts.map +1 -0
  95. package/dist/cli/index.js +199 -0
  96. package/dist/cli/index.js.map +1 -0
  97. package/dist/cli/output.d.ts +21 -0
  98. package/dist/cli/output.d.ts.map +1 -0
  99. package/dist/cli/output.js +108 -0
  100. package/dist/cli/output.js.map +1 -0
  101. 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,3 @@
1
+ import type { CliFlags } from './types.js';
2
+ export declare function lifecycleCmd(args: string[], flags: CliFlags): Promise<void>;
3
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -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":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CliFlags } from './types.js';
2
+ export declare function logsCmd(args: string[], flags: CliFlags): Promise<void>;
3
+ //# sourceMappingURL=logs.d.ts.map
@@ -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,3 @@
1
+ import type { CliFlags } from './types.js';
2
+ export declare function metadataCmd(args: string[], flags: CliFlags): Promise<void>;
3
+ //# sourceMappingURL=metadata.d.ts.map
@@ -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,3 @@
1
+ import type { CliFlags } from './types.js';
2
+ export declare function metricsCmd(args: string[], flags: CliFlags): Promise<void>;
3
+ //# sourceMappingURL=metrics.d.ts.map
@@ -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,3 @@
1
+ import type { CliFlags } from './types.js';
2
+ export declare function networkCmd(args: string[], flags: CliFlags): Promise<void>;
3
+ //# sourceMappingURL=network.d.ts.map
@@ -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,3 @@
1
+ import type { CliFlags } from './types.js';
2
+ export declare function publicAccessCmd(args: string[], flags: CliFlags): Promise<void>;
3
+ //# sourceMappingURL=public-access.d.ts.map
@@ -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