@cardelli/ambit 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/deno.d.ts +1 -0
- package/esm/deno.js +3 -2
- package/esm/deps/jsr.io/@std/cli/1.0.28/_data.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/_run_length.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/mod.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/parse_args.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/parse_args.js +17 -3
- package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/prompt_secret.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/unicode_width.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/collections/{1.1.3 → 1.1.6}/deep_merge.d.ts +2 -2
- package/esm/deps/jsr.io/@std/collections/{1.1.3 → 1.1.6}/deep_merge.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/collections/{1.1.3 → 1.1.6}/deep_merge.js +30 -20
- package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.js +1 -1
- package/esm/main.d.ts.map +1 -1
- package/esm/main.js +3 -2
- package/esm/src/cli/commands/create.js +1 -1
- package/esm/src/cli/commands/deploy.js +44 -22
- package/esm/src/cli/commands/destroy.js +224 -29
- package/esm/src/cli/commands/doctor.js +1 -1
- package/esm/src/cli/commands/list.js +1 -1
- package/esm/src/cli/commands/status.js +1 -1
- package/esm/src/cli/mod.d.ts.map +1 -1
- package/esm/src/cli/mod.js +4 -3
- package/esm/src/discovery.d.ts +10 -0
- package/esm/src/discovery.d.ts.map +1 -1
- package/esm/src/discovery.js +28 -0
- package/esm/src/template.d.ts +5 -3
- package/esm/src/template.d.ts.map +1 -1
- package/esm/src/template.js +17 -9
- package/package.json +1 -1
- package/esm/deps/jsr.io/@std/cli/1.0.27/_data.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/collections/1.1.3/_utils.d.ts +0 -6
- package/esm/deps/jsr.io/@std/collections/1.1.3/_utils.d.ts.map +0 -1
- package/esm/deps/jsr.io/@std/collections/1.1.3/_utils.js +0 -18
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/_data.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/_data.js +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/_run_length.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/_run_length.js +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/mod.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/mod.js +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/parse_args.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/prompt_secret.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/prompt_secret.js +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/unicode_width.d.ts +0 -0
- /package/esm/deps/jsr.io/@std/cli/{1.0.27 → 1.0.28}/unicode_width.js +0 -0
package/esm/deno.d.ts
CHANGED
package/esm/deno.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export default {
|
|
2
2
|
"name": "@cardelli/ambit",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Deploy apps to the cloud that only you and your AI agents can reach",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"exports": {
|
|
@@ -18,7 +18,8 @@ export default {
|
|
|
18
18
|
"./src/credentials": "./src/credentials.ts",
|
|
19
19
|
"./src/discovery": "./src/discovery.ts",
|
|
20
20
|
"./src/guard": "./src/guard.ts",
|
|
21
|
-
"./src/resolve": "./src/resolve.ts"
|
|
21
|
+
"./src/resolve": "./src/resolve.ts",
|
|
22
|
+
"./src/template": "./src/template.ts"
|
|
22
23
|
},
|
|
23
24
|
"tasks": {
|
|
24
25
|
"dev": "deno run --watch main.ts",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_data.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/cli/1.0.28/_data.js"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_run_length.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/cli/1.0.
|
|
1
|
+
{"version":3,"file":"_run_length.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/cli/1.0.28/_run_length.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE;;;EA0B5C;AAED,wBAAgB,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,2BAUjE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/cli/1.0.
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/cli/1.0.28/mod.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse_args.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/cli/1.0.
|
|
1
|
+
{"version":3,"file":"parse_args.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/cli/1.0.28/parse_args.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2018-2026 the Deno authors. MIT license.
|
|
2
2
|
// This module is browser compatible.
|
|
3
|
-
const FLAG_REGEXP = /^(?:-(?:(?<doubleDash>-)(?<negated>no-)?)?)(?<key>.+?)(?:=(?<value
|
|
3
|
+
const FLAG_REGEXP = /^(?:-(?:(?<doubleDash>-)(?<negated>no-)?)?)(?<key>.+?)(?:=(?<value>.*))?$/s;
|
|
4
4
|
const LETTER_REGEXP = /[A-Za-z]/;
|
|
5
5
|
const NUMBER_REGEXP = /-?\d+(\.\d*)?(e-?\d+)?$/;
|
|
6
6
|
const HYPHEN_REGEXP = /^(-|--)[^-]/;
|
|
@@ -11,10 +11,20 @@ const NON_WHITESPACE_REGEXP = /\S/;
|
|
|
11
11
|
function isNumber(string) {
|
|
12
12
|
return NON_WHITESPACE_REGEXP.test(string) && Number.isFinite(Number(string));
|
|
13
13
|
}
|
|
14
|
+
function isConstructorOrProto(obj, key) {
|
|
15
|
+
return (key === "constructor" && typeof obj[key] === "function") ||
|
|
16
|
+
key === "__proto__";
|
|
17
|
+
}
|
|
14
18
|
function setNested(object, keys, value, collect = false) {
|
|
15
19
|
keys = [...keys];
|
|
16
20
|
const key = keys.pop();
|
|
17
|
-
|
|
21
|
+
for (const k of keys) {
|
|
22
|
+
if (isConstructorOrProto(object, k))
|
|
23
|
+
return;
|
|
24
|
+
object = (object[k] ??= {});
|
|
25
|
+
}
|
|
26
|
+
if (isConstructorOrProto(object, key))
|
|
27
|
+
return;
|
|
18
28
|
if (collect) {
|
|
19
29
|
const v = object[key];
|
|
20
30
|
if (Array.isArray(v)) {
|
|
@@ -239,7 +249,7 @@ export function parseArgs(args, options) {
|
|
|
239
249
|
let key = groups.key;
|
|
240
250
|
let value = groups.value;
|
|
241
251
|
if (doubleDash) {
|
|
242
|
-
if (value) {
|
|
252
|
+
if (value != null) {
|
|
243
253
|
if (booleanSet.has(key))
|
|
244
254
|
value = parseBooleanString(value);
|
|
245
255
|
setArgument(key, value, arg, true);
|
|
@@ -281,6 +291,10 @@ export function parseArgs(args, options) {
|
|
|
281
291
|
setArgument(letter, next, arg, true);
|
|
282
292
|
continue;
|
|
283
293
|
}
|
|
294
|
+
if (next === "=") {
|
|
295
|
+
setArgument(letter, "", arg, true);
|
|
296
|
+
continue argsLoop;
|
|
297
|
+
}
|
|
284
298
|
if (LETTER_REGEXP.test(letter)) {
|
|
285
299
|
const groups = VALUE_REGEXP.exec(next)?.groups;
|
|
286
300
|
if (groups) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt_secret.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/cli/1.0.
|
|
1
|
+
{"version":3,"file":"prompt_secret.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/cli/1.0.28/prompt_secret.ts"],"names":[],"mappings":"AAiBA,4CAA4C;AAC5C,MAAM,MAAM,mBAAmB,GAAG;IAChC,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAC1B,OAAO,SAAW,EAClB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,MAAM,GAAG,IAAI,CAyDf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unicode_width.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/cli/1.0.
|
|
1
|
+
{"version":3,"file":"unicode_width.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/cli/1.0.28/unicode_width.ts"],"names":[],"mappings":"AAsCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD"}
|
|
@@ -280,7 +280,7 @@ export type MergeAllSets<T, U, X = PartialByType<T, Set<unknown>>, Y = PartialBy
|
|
|
280
280
|
}> = Z;
|
|
281
281
|
/** Get array values type */
|
|
282
282
|
export type ArrayValueType<T> = T extends Array<infer V> ? V : never;
|
|
283
|
-
/** Merge all
|
|
283
|
+
/** Merge all arrays types definitions from keys present in both objects */
|
|
284
284
|
export type MergeAllArrays<T, U, X = PartialByType<T, Array<unknown>>, Y = PartialByType<U, Array<unknown>>, Z = {
|
|
285
285
|
[K in keyof X & keyof Y]: Array<ArrayValueType<X[K]> | ArrayValueType<Y[K]>>;
|
|
286
286
|
}> = Z;
|
|
@@ -288,7 +288,7 @@ export type MergeAllArrays<T, U, X = PartialByType<T, Array<unknown>>, Y = Parti
|
|
|
288
288
|
export type MapKeyType<T> = T extends Map<infer K, unknown> ? K : never;
|
|
289
289
|
/** Get map values types */
|
|
290
290
|
export type MapValueType<T> = T extends Map<unknown, infer V> ? V : never;
|
|
291
|
-
/** Merge all
|
|
291
|
+
/** Merge all maps types definitions from keys present in both objects */
|
|
292
292
|
export type MergeAllMaps<T, U, X = PartialByType<T, Map<unknown, unknown>>, Y = PartialByType<U, Map<unknown, unknown>>, Z = {
|
|
293
293
|
[K in keyof X & keyof Y]: Map<MapKeyType<X[K]> | MapKeyType<Y[K]>, MapValueType<X[K]> | MapValueType<Y[K]>>;
|
|
294
294
|
}> = Z;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deep_merge.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/collections/1.1.
|
|
1
|
+
{"version":3,"file":"deep_merge.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/collections/1.1.6/deep_merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
// Copyright 2018-
|
|
1
|
+
// Copyright 2018-2026 the Deno authors. MIT license.
|
|
2
2
|
// This module is browser compatible.
|
|
3
|
-
|
|
3
|
+
/** Default merging options - cached to avoid object allocation on each call */
|
|
4
|
+
const DEFAULT_OPTIONS = {
|
|
5
|
+
arrays: "merge",
|
|
6
|
+
sets: "merge",
|
|
7
|
+
maps: "merge",
|
|
8
|
+
};
|
|
4
9
|
export function deepMerge(record, other, options) {
|
|
5
|
-
return deepMergeInternal(record, other, new Set(), options);
|
|
10
|
+
return deepMergeInternal(record, other, new Set(), options ?? DEFAULT_OPTIONS);
|
|
6
11
|
}
|
|
7
12
|
function deepMergeInternal(record, other, seen, options) {
|
|
8
13
|
const result = {};
|
|
@@ -33,11 +38,7 @@ function deepMergeInternal(record, other, seen, options) {
|
|
|
33
38
|
}
|
|
34
39
|
return result;
|
|
35
40
|
}
|
|
36
|
-
function mergeObjects(left, right, seen, options
|
|
37
|
-
arrays: "merge",
|
|
38
|
-
sets: "merge",
|
|
39
|
-
maps: "merge",
|
|
40
|
-
}) {
|
|
41
|
+
function mergeObjects(left, right, seen, options) {
|
|
41
42
|
// Recursively merge mergeable objects
|
|
42
43
|
if (isMergeable(left) && isMergeable(right)) {
|
|
43
44
|
return deepMergeInternal(left, right, seen, options);
|
|
@@ -53,20 +54,22 @@ function mergeObjects(left, right, seen, options = {
|
|
|
53
54
|
// Handle maps
|
|
54
55
|
if ((left instanceof Map) && (right instanceof Map)) {
|
|
55
56
|
if (options.maps === "merge") {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
const result = new Map(left);
|
|
58
|
+
for (const [k, v] of right) {
|
|
59
|
+
result.set(k, v);
|
|
60
|
+
}
|
|
61
|
+
return result;
|
|
60
62
|
}
|
|
61
63
|
return right;
|
|
62
64
|
}
|
|
63
65
|
// Handle sets
|
|
64
66
|
if ((left instanceof Set) && (right instanceof Set)) {
|
|
65
67
|
if (options.sets === "merge") {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
const result = new Set(left);
|
|
69
|
+
for (const v of right) {
|
|
70
|
+
result.add(v);
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
70
73
|
}
|
|
71
74
|
return right;
|
|
72
75
|
}
|
|
@@ -88,8 +91,15 @@ function isNonNullObject(value) {
|
|
|
88
91
|
return value !== null && typeof value === "object";
|
|
89
92
|
}
|
|
90
93
|
function getKeys(record) {
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
94
|
+
const keys = Object.keys(record);
|
|
95
|
+
const symbols = Object.getOwnPropertySymbols(record);
|
|
96
|
+
// Fast path: most objects have no symbol keys
|
|
97
|
+
if (symbols.length === 0)
|
|
98
|
+
return keys;
|
|
99
|
+
for (const sym of symbols) {
|
|
100
|
+
if (Object.prototype.propertyIsEnumerable.call(record, sym)) {
|
|
101
|
+
keys.push(sym);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return keys;
|
|
95
105
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright 2018-2025 the Deno authors. MIT license.
|
|
2
2
|
// This module is browser compatible.
|
|
3
|
-
import { deepMerge } from "../../collections/1.1.
|
|
3
|
+
import { deepMerge } from "../../collections/1.1.6/deep_merge.js";
|
|
4
4
|
/**
|
|
5
5
|
* Copy of `import { isLeap } from "@std/datetime";` because it cannot be impoted as long as it is unstable.
|
|
6
6
|
*/
|
package/esm/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA,OAAO,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA,OAAO,qBAAqB,CAAC;AA+B7B,OAAO,8BAA8B,CAAC;AACtC,OAAO,8BAA8B,CAAC;AACtC,OAAO,4BAA4B,CAAC;AACpC,OAAO,8BAA8B,CAAC;AACtC,OAAO,+BAA+B,CAAC;AACvC,OAAO,8BAA8B,CAAC"}
|
package/esm/main.js
CHANGED
|
@@ -13,13 +13,14 @@ import * as dntShim from "./_dnt.shims.js";
|
|
|
13
13
|
// create Create a Tailscale subnet router on a Fly.io custom network
|
|
14
14
|
// deploy Deploy an app safely on a custom private network
|
|
15
15
|
// status Show router status, network, and tailnet info
|
|
16
|
-
// destroy
|
|
16
|
+
// destroy Destroy a network (router) or a workload app
|
|
17
17
|
// doctor Check that Tailscale and the router are working correctly
|
|
18
18
|
//
|
|
19
19
|
// Examples:
|
|
20
20
|
// ambit create browsers
|
|
21
21
|
// ambit status
|
|
22
|
-
// ambit destroy
|
|
22
|
+
// ambit destroy network browsers
|
|
23
|
+
// ambit destroy app my-app.browsers
|
|
23
24
|
// ambit doctor
|
|
24
25
|
//
|
|
25
26
|
// =============================================================================
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// =============================================================================
|
|
2
2
|
// Create Command - Create Tailscale Subnet Router on Fly.io Custom Network
|
|
3
3
|
// =============================================================================
|
|
4
|
-
import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.
|
|
4
|
+
import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
|
|
5
5
|
import { bold, randomId, readSecret } from "../../../lib/cli.js";
|
|
6
6
|
import { createOutput } from "../../../lib/output.js";
|
|
7
7
|
import { registerCommand } from "../mod.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Deploy Command - Safely Deploy a Workload App on a Custom Private Network
|
|
3
3
|
// =============================================================================
|
|
4
4
|
import * as dntShim from "../../../_dnt.shims.js";
|
|
5
|
-
import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.
|
|
5
|
+
import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
|
|
6
6
|
import { join } from "../../../deps/jsr.io/@std/path/1.1.4/mod.js";
|
|
7
7
|
import { bold, confirm, fileExists } from "../../../lib/cli.js";
|
|
8
8
|
import { createOutput } from "../../../lib/output.js";
|
|
@@ -99,10 +99,12 @@ const resolveTemplateMode = async (templateRaw, out) => {
|
|
|
99
99
|
const ref = parseTemplateRef(templateRaw);
|
|
100
100
|
if (!ref) {
|
|
101
101
|
out.die(`Invalid Template Reference: "${templateRaw}". ` +
|
|
102
|
-
`Format: owner/repo/path[@ref]`);
|
|
102
|
+
`Format: owner/repo[/path][@ref]`);
|
|
103
103
|
return null;
|
|
104
104
|
}
|
|
105
|
-
const label =
|
|
105
|
+
const label = (ref.path === "."
|
|
106
|
+
? `${ref.owner}/${ref.repo}`
|
|
107
|
+
: `${ref.owner}/${ref.repo}/${ref.path}`) +
|
|
106
108
|
(ref.ref ? `@${ref.ref}` : "");
|
|
107
109
|
out.info(`Template: ${label}`);
|
|
108
110
|
const fetchSpinner = out.spinner("Fetching Template from GitHub");
|
|
@@ -124,7 +126,7 @@ const resolveTemplateMode = async (templateRaw, out) => {
|
|
|
124
126
|
dntShim.Deno.removeSync(result.tempDir, { recursive: true });
|
|
125
127
|
}
|
|
126
128
|
catch { /* ignore */ }
|
|
127
|
-
out.die(`Template '${ref.path}' Has No fly.toml`);
|
|
129
|
+
out.die(`Template '${ref.path === "." ? ref.repo : ref.path}' Has No fly.toml`);
|
|
128
130
|
return null;
|
|
129
131
|
}
|
|
130
132
|
const scan = scanFlyToml(tomlContent);
|
|
@@ -142,7 +144,7 @@ const resolveTemplateMode = async (templateRaw, out) => {
|
|
|
142
144
|
for (const warn of scan.warnings) {
|
|
143
145
|
out.warn(warn);
|
|
144
146
|
}
|
|
145
|
-
out.ok(`Scanned ${ref.path}
|
|
147
|
+
out.ok(`Scanned ${ref.path === "." ? "" : ref.path + "/"}fly.toml`);
|
|
146
148
|
return {
|
|
147
149
|
configPath,
|
|
148
150
|
preflight: { scanned: scan.scanned, warnings: scan.warnings },
|
|
@@ -172,21 +174,24 @@ const deploy = async (argv) => {
|
|
|
172
174
|
${bold("ambit deploy")} - Deploy an App Safely on a Custom Private Network
|
|
173
175
|
|
|
174
176
|
${bold("USAGE")}
|
|
177
|
+
ambit deploy <app>.<network> [options]
|
|
175
178
|
ambit deploy <app> --network <name> [options]
|
|
176
179
|
|
|
180
|
+
The network can be specified as part of the name (app.network) or with --network.
|
|
181
|
+
|
|
177
182
|
${bold("MODES")}
|
|
178
183
|
Config mode (default):
|
|
179
|
-
ambit deploy
|
|
180
|
-
ambit deploy
|
|
184
|
+
ambit deploy my-app.lab Uses ./fly.toml
|
|
185
|
+
ambit deploy my-app.lab --config path Explicit fly.toml
|
|
181
186
|
|
|
182
187
|
Image mode:
|
|
183
|
-
ambit deploy
|
|
188
|
+
ambit deploy my-app.lab --image <img> Docker image, no toml
|
|
184
189
|
|
|
185
190
|
Template mode:
|
|
186
|
-
ambit deploy
|
|
191
|
+
ambit deploy my-app.lab --template <ref> GitHub template
|
|
187
192
|
|
|
188
193
|
${bold("OPTIONS")}
|
|
189
|
-
--network <name>
|
|
194
|
+
--network <name> Target network
|
|
190
195
|
--org <org> Fly.io organization slug
|
|
191
196
|
--region <region> Primary deployment region
|
|
192
197
|
-y, --yes Skip confirmation prompts
|
|
@@ -200,10 +205,11 @@ ${bold("IMAGE MODE")}
|
|
|
200
205
|
--main-port <port> Internal port for HTTP service (default: 80, "none" to skip)
|
|
201
206
|
|
|
202
207
|
${bold("TEMPLATE MODE")}
|
|
203
|
-
--template <ref> GitHub template as owner/repo/path[@ref]
|
|
208
|
+
--template <ref> GitHub template as owner/repo[/path][@ref]
|
|
204
209
|
|
|
205
210
|
Reference format:
|
|
206
|
-
owner/repo
|
|
211
|
+
owner/repo Fetch repo root from the default branch
|
|
212
|
+
owner/repo/path Fetch subdirectory from the default branch
|
|
207
213
|
owner/repo/path@tag Fetch a tagged release
|
|
208
214
|
owner/repo/path@branch Fetch a specific branch
|
|
209
215
|
owner/repo/path@commit Fetch a specific commit
|
|
@@ -214,11 +220,12 @@ ${bold("SAFETY")}
|
|
|
214
220
|
Pre-flight scan rejects fly.toml with force_https or TLS on 443.
|
|
215
221
|
|
|
216
222
|
${bold("EXAMPLES")}
|
|
217
|
-
ambit deploy my-app
|
|
218
|
-
ambit deploy my-app --
|
|
219
|
-
ambit deploy my-app --
|
|
220
|
-
ambit deploy my-
|
|
221
|
-
ambit deploy my-browser
|
|
223
|
+
ambit deploy my-app.lab
|
|
224
|
+
ambit deploy my-app.lab --image registry/img:latest
|
|
225
|
+
ambit deploy my-app.lab --config ./fly.toml --region sea
|
|
226
|
+
ambit deploy my-claw.lab --template ToxicPine/ambit-openclaw
|
|
227
|
+
ambit deploy my-browser.lab --template ToxicPine/ambit-templates/chromatic
|
|
228
|
+
ambit deploy my-browser --network lab --template ToxicPine/ambit-templates/chromatic@v1.0
|
|
222
229
|
`);
|
|
223
230
|
return;
|
|
224
231
|
}
|
|
@@ -228,11 +235,27 @@ ${bold("EXAMPLES")}
|
|
|
228
235
|
// ==========================================================================
|
|
229
236
|
const appArg = args._[0];
|
|
230
237
|
if (!appArg || typeof appArg !== "string") {
|
|
231
|
-
return out.die("
|
|
238
|
+
return out.die("Missing app name. Usage: ambit deploy <app>.<network>");
|
|
239
|
+
}
|
|
240
|
+
let app;
|
|
241
|
+
let network;
|
|
242
|
+
if (appArg.includes(".")) {
|
|
243
|
+
const parts = appArg.split(".");
|
|
244
|
+
if (parts.length !== 2 || !parts[0] || !parts[1]) {
|
|
245
|
+
return out.die(`'${appArg}' should have exactly one dot, like my-app.my-network`);
|
|
246
|
+
}
|
|
247
|
+
if (args.network) {
|
|
248
|
+
return out.die(`Network is already part of the name ('${appArg}'), --network is not needed`);
|
|
249
|
+
}
|
|
250
|
+
app = parts[0];
|
|
251
|
+
network = parts[1];
|
|
232
252
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
253
|
+
else {
|
|
254
|
+
app = appArg;
|
|
255
|
+
if (!args.network) {
|
|
256
|
+
return out.die(`Missing network. Use: ambit deploy ${app}.<network>`);
|
|
257
|
+
}
|
|
258
|
+
network = args.network;
|
|
236
259
|
}
|
|
237
260
|
try {
|
|
238
261
|
assertNotRouter(app);
|
|
@@ -244,7 +267,6 @@ ${bold("EXAMPLES")}
|
|
|
244
267
|
if (modeFlags.length > 1) {
|
|
245
268
|
return out.die("--image, --config, and --template Are Mutually Exclusive");
|
|
246
269
|
}
|
|
247
|
-
const network = args.network;
|
|
248
270
|
out.blank()
|
|
249
271
|
.header("=".repeat(50))
|
|
250
272
|
.header(` ambit Deploy: ${app}`)
|
|
@@ -1,19 +1,47 @@
|
|
|
1
1
|
// =============================================================================
|
|
2
|
-
// Destroy Command -
|
|
2
|
+
// Destroy Command - Destroy Networks or Apps
|
|
3
3
|
// =============================================================================
|
|
4
|
-
import
|
|
4
|
+
import * as dntShim from "../../../_dnt.shims.js";
|
|
5
|
+
import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
|
|
5
6
|
import { bold, confirm } from "../../../lib/cli.js";
|
|
6
7
|
import { createOutput } from "../../../lib/output.js";
|
|
7
8
|
import { registerCommand } from "../mod.js";
|
|
8
9
|
import { createFlyProvider } from "../../providers/fly.js";
|
|
9
10
|
import { createTailscaleProvider } from "../../providers/tailscale.js";
|
|
10
11
|
import { checkDependencies } from "../../credentials.js";
|
|
11
|
-
import { findRouterApp } from "../../discovery.js";
|
|
12
|
+
import { findRouterApp, findWorkloadApp, listWorkloadAppsOnNetwork, } from "../../discovery.js";
|
|
12
13
|
import { resolveOrg } from "../../resolve.js";
|
|
14
|
+
import { assertNotRouter } from "../../guard.js";
|
|
13
15
|
// =============================================================================
|
|
14
|
-
//
|
|
16
|
+
// Top-Level Help
|
|
15
17
|
// =============================================================================
|
|
16
|
-
const
|
|
18
|
+
const showDestroyHelp = () => {
|
|
19
|
+
console.log(`
|
|
20
|
+
${bold("ambit destroy")} - Destroy Networks or Apps
|
|
21
|
+
|
|
22
|
+
${bold("USAGE")}
|
|
23
|
+
ambit destroy network <name> [options]
|
|
24
|
+
ambit destroy app <app>.<network> [options]
|
|
25
|
+
|
|
26
|
+
${bold("SUBCOMMANDS")}
|
|
27
|
+
network Tear down a router, clean up DNS and tailnet device
|
|
28
|
+
app Destroy a workload app on a network
|
|
29
|
+
|
|
30
|
+
${bold("OPTIONS")}
|
|
31
|
+
--help Show help for a subcommand
|
|
32
|
+
|
|
33
|
+
${bold("EXAMPLES")}
|
|
34
|
+
ambit destroy network browsers
|
|
35
|
+
ambit destroy app my-app.browsers
|
|
36
|
+
ambit destroy app my-app --network browsers
|
|
37
|
+
|
|
38
|
+
Run 'ambit destroy network --help' or 'ambit destroy app --help' for details.
|
|
39
|
+
`);
|
|
40
|
+
};
|
|
41
|
+
// =============================================================================
|
|
42
|
+
// Destroy Network
|
|
43
|
+
// =============================================================================
|
|
44
|
+
const destroyNetwork = async (argv) => {
|
|
17
45
|
const args = parseArgs(argv, {
|
|
18
46
|
string: ["network", "org"],
|
|
19
47
|
boolean: ["help", "yes", "json"],
|
|
@@ -21,57 +49,78 @@ const destroy = async (argv) => {
|
|
|
21
49
|
});
|
|
22
50
|
if (args.help) {
|
|
23
51
|
console.log(`
|
|
24
|
-
${bold("ambit destroy")} - Tear Down Router
|
|
52
|
+
${bold("ambit destroy network")} - Tear Down Router
|
|
25
53
|
|
|
26
54
|
${bold("USAGE")}
|
|
27
|
-
ambit destroy
|
|
55
|
+
ambit destroy network <name> [--org <org>] [--yes] [--json]
|
|
28
56
|
|
|
29
57
|
${bold("OPTIONS")}
|
|
30
|
-
--network <name> Network of the router to destroy (required)
|
|
31
58
|
--org <org> Fly.io organization slug
|
|
32
59
|
-y, --yes Skip confirmation prompts
|
|
33
60
|
--json Output as JSON
|
|
61
|
+
|
|
62
|
+
${bold("EXAMPLES")}
|
|
63
|
+
ambit destroy network browsers
|
|
64
|
+
ambit destroy network browsers --org my-org --yes
|
|
34
65
|
`);
|
|
35
66
|
return;
|
|
36
67
|
}
|
|
37
68
|
const out = createOutput(args.json);
|
|
38
|
-
|
|
39
|
-
|
|
69
|
+
// Accept network as positional or --network flag (backward compat)
|
|
70
|
+
const network = (typeof args._[0] === "string" ? args._[0] : undefined) || args.network;
|
|
71
|
+
if (!network) {
|
|
72
|
+
return out.die("Network name required. Usage: ambit destroy network <name>");
|
|
40
73
|
}
|
|
41
|
-
//
|
|
74
|
+
// ===========================================================================
|
|
42
75
|
// Prerequisites
|
|
43
|
-
//
|
|
76
|
+
// ===========================================================================
|
|
44
77
|
const { tailscaleKey } = await checkDependencies(out);
|
|
45
78
|
const fly = createFlyProvider();
|
|
46
79
|
await fly.ensureAuth({ interactive: !args.json });
|
|
47
80
|
const tailscale = createTailscaleProvider("-", tailscaleKey);
|
|
48
81
|
const org = await resolveOrg(fly, args, out);
|
|
49
|
-
//
|
|
82
|
+
// ===========================================================================
|
|
50
83
|
// Discover Router
|
|
51
|
-
//
|
|
84
|
+
// ===========================================================================
|
|
52
85
|
const spinner = out.spinner("Discovering Router");
|
|
53
|
-
const app = await findRouterApp(fly, org,
|
|
86
|
+
const app = await findRouterApp(fly, org, network);
|
|
54
87
|
if (!app) {
|
|
55
88
|
spinner.fail("Router Not Found");
|
|
56
|
-
return out.die(`No Router Found for Network '${
|
|
89
|
+
return out.die(`No Router Found for Network '${network}'`);
|
|
57
90
|
}
|
|
58
91
|
spinner.success(`Found Router: ${app.appName}`);
|
|
59
92
|
let tsDevice = null;
|
|
60
93
|
try {
|
|
61
94
|
tsDevice = await tailscale.getDeviceByHostname(app.appName);
|
|
62
95
|
}
|
|
63
|
-
catch {
|
|
96
|
+
catch {
|
|
97
|
+
/* device may not exist */
|
|
98
|
+
}
|
|
64
99
|
const tag = tsDevice?.tags?.[0] ?? null;
|
|
65
|
-
//
|
|
100
|
+
// ===========================================================================
|
|
101
|
+
// Check for Workload Apps on This Network
|
|
102
|
+
// ===========================================================================
|
|
103
|
+
const workloadApps = await listWorkloadAppsOnNetwork(fly, org, network);
|
|
104
|
+
// ===========================================================================
|
|
66
105
|
// Confirm
|
|
67
|
-
//
|
|
106
|
+
// ===========================================================================
|
|
68
107
|
out.blank()
|
|
69
|
-
.header("ambit Destroy")
|
|
108
|
+
.header("ambit Destroy Network")
|
|
70
109
|
.blank()
|
|
71
|
-
.text(` Network: ${
|
|
110
|
+
.text(` Network: ${network}`)
|
|
72
111
|
.text(` Router App: ${app.appName}`)
|
|
73
112
|
.text(` Tag: ${tag ?? "unknown"}`)
|
|
74
113
|
.blank();
|
|
114
|
+
if (workloadApps.length > 0) {
|
|
115
|
+
out.warn(`${workloadApps.length} workload app(s) still on network '${network}':`);
|
|
116
|
+
for (const wa of workloadApps) {
|
|
117
|
+
out.text(` - ${wa.appName}`);
|
|
118
|
+
}
|
|
119
|
+
out.blank();
|
|
120
|
+
out.dim("These apps will lose connectivity when the router is destroyed.");
|
|
121
|
+
out.dim(`Consider destroying them first with: ambit destroy app <name>.${network}`);
|
|
122
|
+
out.blank();
|
|
123
|
+
}
|
|
75
124
|
if (!args.yes && !args.json) {
|
|
76
125
|
const confirmed = await confirm("Destroy this router?");
|
|
77
126
|
if (!confirmed) {
|
|
@@ -80,12 +129,12 @@ ${bold("OPTIONS")}
|
|
|
80
129
|
}
|
|
81
130
|
out.blank();
|
|
82
131
|
}
|
|
83
|
-
//
|
|
132
|
+
// ===========================================================================
|
|
84
133
|
// Tear Down
|
|
85
|
-
//
|
|
134
|
+
// ===========================================================================
|
|
86
135
|
const dnsSpinner = out.spinner("Clearing Split DNS");
|
|
87
136
|
try {
|
|
88
|
-
await tailscale.clearSplitDns(
|
|
137
|
+
await tailscale.clearSplitDns(network);
|
|
89
138
|
dnsSpinner.success("Split DNS Cleared");
|
|
90
139
|
}
|
|
91
140
|
catch {
|
|
@@ -113,10 +162,14 @@ ${bold("OPTIONS")}
|
|
|
113
162
|
catch {
|
|
114
163
|
appSpinner.fail("Could Not Destroy Fly App");
|
|
115
164
|
}
|
|
116
|
-
//
|
|
165
|
+
// ===========================================================================
|
|
117
166
|
// Done
|
|
118
|
-
//
|
|
119
|
-
out.done({
|
|
167
|
+
// ===========================================================================
|
|
168
|
+
out.done({
|
|
169
|
+
destroyed: true,
|
|
170
|
+
appName: app.appName,
|
|
171
|
+
workloadAppsWarned: workloadApps.length,
|
|
172
|
+
});
|
|
120
173
|
out.ok("Router Destroyed");
|
|
121
174
|
if (tag) {
|
|
122
175
|
out.blank()
|
|
@@ -135,11 +188,153 @@ ${bold("OPTIONS")}
|
|
|
135
188
|
out.print();
|
|
136
189
|
};
|
|
137
190
|
// =============================================================================
|
|
191
|
+
// Destroy App
|
|
192
|
+
// =============================================================================
|
|
193
|
+
const destroyApp = async (argv) => {
|
|
194
|
+
const args = parseArgs(argv, {
|
|
195
|
+
string: ["network", "org"],
|
|
196
|
+
boolean: ["help", "yes", "json"],
|
|
197
|
+
alias: { y: "yes" },
|
|
198
|
+
});
|
|
199
|
+
if (args.help) {
|
|
200
|
+
console.log(`
|
|
201
|
+
${bold("ambit destroy app")} - Destroy a Workload App
|
|
202
|
+
|
|
203
|
+
${bold("USAGE")}
|
|
204
|
+
ambit destroy app <app>.<network> [--org <org>] [--yes] [--json]
|
|
205
|
+
ambit destroy app <app> --network <name> [--org <org>] [--yes] [--json]
|
|
206
|
+
|
|
207
|
+
${bold("OPTIONS")}
|
|
208
|
+
--network <name> Target network (if not using dot syntax)
|
|
209
|
+
--org <org> Fly.io organization slug
|
|
210
|
+
-y, --yes Skip confirmation prompts
|
|
211
|
+
--json Output as JSON
|
|
212
|
+
|
|
213
|
+
${bold("EXAMPLES")}
|
|
214
|
+
ambit destroy app my-app.browsers
|
|
215
|
+
ambit destroy app my-app --network browsers --yes
|
|
216
|
+
`);
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
const out = createOutput(args.json);
|
|
220
|
+
// ===========================================================================
|
|
221
|
+
// Parse App & Network
|
|
222
|
+
// ===========================================================================
|
|
223
|
+
const appArg = args._[0];
|
|
224
|
+
if (!appArg || typeof appArg !== "string") {
|
|
225
|
+
return out.die("Missing app name. Usage: ambit destroy app <app>.<network>");
|
|
226
|
+
}
|
|
227
|
+
let app;
|
|
228
|
+
let network;
|
|
229
|
+
if (appArg.includes(".")) {
|
|
230
|
+
const parts = appArg.split(".");
|
|
231
|
+
if (parts.length !== 2 || !parts[0] || !parts[1]) {
|
|
232
|
+
return out.die(`'${appArg}' should have exactly one dot, like my-app.my-network`);
|
|
233
|
+
}
|
|
234
|
+
if (args.network) {
|
|
235
|
+
return out.die(`Network is already part of the name ('${appArg}'), --network is not needed`);
|
|
236
|
+
}
|
|
237
|
+
app = parts[0];
|
|
238
|
+
network = parts[1];
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
app = appArg;
|
|
242
|
+
if (!args.network) {
|
|
243
|
+
return out.die(`Missing network. Use: ambit destroy app ${app}.<network>`);
|
|
244
|
+
}
|
|
245
|
+
network = args.network;
|
|
246
|
+
}
|
|
247
|
+
try {
|
|
248
|
+
assertNotRouter(app);
|
|
249
|
+
}
|
|
250
|
+
catch (e) {
|
|
251
|
+
return out.die(e instanceof Error ? e.message : String(e));
|
|
252
|
+
}
|
|
253
|
+
// ===========================================================================
|
|
254
|
+
// Prerequisites
|
|
255
|
+
// ===========================================================================
|
|
256
|
+
const { tailscaleKey: _tailscaleKey } = await checkDependencies(out);
|
|
257
|
+
const fly = createFlyProvider();
|
|
258
|
+
await fly.ensureAuth({ interactive: !args.json });
|
|
259
|
+
const org = await resolveOrg(fly, args, out);
|
|
260
|
+
// ===========================================================================
|
|
261
|
+
// Discover App
|
|
262
|
+
// ===========================================================================
|
|
263
|
+
const spinner = out.spinner("Discovering App");
|
|
264
|
+
const workloadApp = await findWorkloadApp(fly, org, app, network);
|
|
265
|
+
if (!workloadApp) {
|
|
266
|
+
spinner.fail("App Not Found");
|
|
267
|
+
// Check if app exists on a different network
|
|
268
|
+
const anyApp = await findWorkloadApp(fly, org, app);
|
|
269
|
+
if (anyApp) {
|
|
270
|
+
return out.die(`App '${app}' exists on network '${anyApp.network}', not '${network}'`);
|
|
271
|
+
}
|
|
272
|
+
return out.die(`No app '${app}' found on network '${network}'`);
|
|
273
|
+
}
|
|
274
|
+
spinner.success(`Found App: ${workloadApp.appName} (network: ${workloadApp.network})`);
|
|
275
|
+
// ===========================================================================
|
|
276
|
+
// Confirm
|
|
277
|
+
// ===========================================================================
|
|
278
|
+
out.blank()
|
|
279
|
+
.header("ambit Destroy App")
|
|
280
|
+
.blank()
|
|
281
|
+
.text(` App: ${workloadApp.appName}`)
|
|
282
|
+
.text(` Network: ${workloadApp.network}`)
|
|
283
|
+
.blank();
|
|
284
|
+
if (!args.yes && !args.json) {
|
|
285
|
+
const confirmed = await confirm(`Destroy app '${app}' on network '${network}'?`);
|
|
286
|
+
if (!confirmed) {
|
|
287
|
+
out.text("Cancelled.");
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
out.blank();
|
|
291
|
+
}
|
|
292
|
+
// ===========================================================================
|
|
293
|
+
// Destroy
|
|
294
|
+
// ===========================================================================
|
|
295
|
+
const appSpinner = out.spinner("Destroying Fly App");
|
|
296
|
+
try {
|
|
297
|
+
await fly.deleteApp(app);
|
|
298
|
+
appSpinner.success("Fly App Destroyed");
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
appSpinner.fail("Could Not Destroy Fly App");
|
|
302
|
+
}
|
|
303
|
+
// ===========================================================================
|
|
304
|
+
// Done
|
|
305
|
+
// ===========================================================================
|
|
306
|
+
out.done({ destroyed: true, appName: app, network });
|
|
307
|
+
out.ok("App Destroyed");
|
|
308
|
+
out.blank();
|
|
309
|
+
out.print();
|
|
310
|
+
};
|
|
311
|
+
// =============================================================================
|
|
312
|
+
// Dispatcher
|
|
313
|
+
// =============================================================================
|
|
314
|
+
const destroy = async (argv) => {
|
|
315
|
+
const subcommand = typeof argv[0] === "string" ? argv[0] : undefined;
|
|
316
|
+
if (subcommand === "network") {
|
|
317
|
+
return destroyNetwork(argv.slice(1));
|
|
318
|
+
}
|
|
319
|
+
if (subcommand === "app") {
|
|
320
|
+
return destroyApp(argv.slice(1));
|
|
321
|
+
}
|
|
322
|
+
// Handle --help at the top level
|
|
323
|
+
const args = parseArgs(argv, { boolean: ["help"] });
|
|
324
|
+
if (args.help) {
|
|
325
|
+
showDestroyHelp();
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
// No valid subcommand
|
|
329
|
+
showDestroyHelp();
|
|
330
|
+
dntShim.Deno.exit(1);
|
|
331
|
+
};
|
|
332
|
+
// =============================================================================
|
|
138
333
|
// Register Command
|
|
139
334
|
// =============================================================================
|
|
140
335
|
registerCommand({
|
|
141
336
|
name: "destroy",
|
|
142
|
-
description: "
|
|
143
|
-
usage: "ambit destroy
|
|
337
|
+
description: "Destroy a network (router) or a workload app",
|
|
338
|
+
usage: "ambit destroy network|app <name> [options]",
|
|
144
339
|
run: destroy,
|
|
145
340
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// =============================================================================
|
|
2
2
|
// Doctor Command - Verify Environment and Infrastructure Health
|
|
3
3
|
// =============================================================================
|
|
4
|
-
import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.
|
|
4
|
+
import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
|
|
5
5
|
import { bold } from "../../../lib/cli.js";
|
|
6
6
|
import { createOutput } from "../../../lib/output.js";
|
|
7
7
|
import { runCommand } from "../../../lib/command.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// =============================================================================
|
|
2
2
|
// List Command - List All Discovered Routers
|
|
3
3
|
// =============================================================================
|
|
4
|
-
import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.
|
|
4
|
+
import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
|
|
5
5
|
import { Table } from "../../../deps/jsr.io/@cliffy/table/1.0.0/mod.js";
|
|
6
6
|
import { bold } from "../../../lib/cli.js";
|
|
7
7
|
import { createOutput } from "../../../lib/output.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// =============================================================================
|
|
2
2
|
// Status Command - Show Router Status
|
|
3
3
|
// =============================================================================
|
|
4
|
-
import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.
|
|
4
|
+
import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
|
|
5
5
|
import { Table } from "../../../deps/jsr.io/@cliffy/table/1.0.0/mod.js";
|
|
6
6
|
import { bold } from "../../../lib/cli.js";
|
|
7
7
|
import { createOutput } from "../../../lib/output.js";
|
package/esm/src/cli/mod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/src/cli/mod.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAQD,eAAO,MAAM,eAAe,GAAI,SAAS,OAAO,KAAG,IAElD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,OAAO,GAAG,SAEnD,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,OAAO,EAExC,CAAC;AAQF,eAAO,MAAM,QAAQ,QAAO,
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../../src/src/cli/mod.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAQD,eAAO,MAAM,eAAe,GAAI,SAAS,OAAO,KAAG,IAElD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,OAAO,GAAG,SAEnD,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,OAAO,EAExC,CAAC;AAQF,eAAO,MAAM,QAAQ,QAAO,IA6B3B,CAAC;AAEF,eAAO,MAAM,WAAW,QAAO,IAE9B,CAAC;AAMF,eAAO,MAAM,MAAM,GAAU,MAAM,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAuCzD,CAAC"}
|
package/esm/src/cli/mod.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// CLI Framework - Command Parser and Router
|
|
3
3
|
// =============================================================================
|
|
4
4
|
import * as dntShim from "../../_dnt.shims.js";
|
|
5
|
-
import { parseArgs } from "../../deps/jsr.io/@std/cli/1.0.
|
|
5
|
+
import { parseArgs } from "../../deps/jsr.io/@std/cli/1.0.28/mod.js";
|
|
6
6
|
import { bold, dim } from "../../lib/cli.js";
|
|
7
7
|
import denoConfig from "../../deno.js";
|
|
8
8
|
// =============================================================================
|
|
@@ -34,7 +34,7 @@ ${bold("COMMANDS")}
|
|
|
34
34
|
deploy Deploy an app safely on a custom private network
|
|
35
35
|
list List all discovered routers across networks
|
|
36
36
|
status Show router status, network, and tailnet info
|
|
37
|
-
destroy
|
|
37
|
+
destroy Destroy a network (router) or a workload app
|
|
38
38
|
doctor Check that Tailscale and the router are working correctly
|
|
39
39
|
|
|
40
40
|
${bold("OPTIONS")}
|
|
@@ -45,7 +45,8 @@ ${bold("EXAMPLES")}
|
|
|
45
45
|
ambit create browsers
|
|
46
46
|
ambit list
|
|
47
47
|
ambit status --network browsers
|
|
48
|
-
ambit destroy
|
|
48
|
+
ambit destroy network browsers
|
|
49
|
+
ambit destroy app my-app.browsers
|
|
49
50
|
ambit doctor
|
|
50
51
|
|
|
51
52
|
${dim("Run 'ambit <command> --help' for command-specific help.")}
|
package/esm/src/discovery.d.ts
CHANGED
|
@@ -25,6 +25,16 @@ export interface RouterTailscaleInfo {
|
|
|
25
25
|
export declare const listRouterApps: (fly: FlyProvider, org: string) => Promise<RouterApp[]>;
|
|
26
26
|
/** Find the router app for a specific network. */
|
|
27
27
|
export declare const findRouterApp: (fly: FlyProvider, org: string, network: string) => Promise<RouterApp | null>;
|
|
28
|
+
/** A workload (non-router) app discovered from the Fly REST API. */
|
|
29
|
+
export interface WorkloadApp {
|
|
30
|
+
appName: string;
|
|
31
|
+
network: string;
|
|
32
|
+
org: string;
|
|
33
|
+
}
|
|
34
|
+
/** List all non-router apps on a specific custom network in an org. */
|
|
35
|
+
export declare const listWorkloadAppsOnNetwork: (fly: FlyProvider, org: string, network: string) => Promise<WorkloadApp[]>;
|
|
36
|
+
/** Find a specific workload app by name, optionally verifying network. */
|
|
37
|
+
export declare const findWorkloadApp: (fly: FlyProvider, org: string, appName: string, network?: string) => Promise<WorkloadApp | null>;
|
|
28
38
|
/** Get machine info for a router app. Returns null if no machines exist. */
|
|
29
39
|
export declare const getRouterMachineInfo: (fly: FlyProvider, appName: string) => Promise<RouterMachineInfo | null>;
|
|
30
40
|
/** Get tailscale device info for a router. Returns null if not found. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/src/discovery.ts"],"names":[],"mappings":"AAcA,OAAO,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAOlE,qDAAqD;AACrD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,2CAA2C;AAC3C,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAaD,wDAAwD;AACxD,eAAO,MAAM,cAAc,GACzB,KAAK,WAAW,EAChB,KAAK,MAAM,KACV,OAAO,CAAC,SAAS,EAAE,CAcrB,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,aAAa,GACxB,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,SAAS,MAAM,KACd,OAAO,CAAC,SAAS,GAAG,IAAI,CAG1B,CAAC;AAMF,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,GAC/B,KAAK,WAAW,EAChB,SAAS,MAAM,KACd,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAclC,CAAC;AAMF,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,GACjC,WAAW,iBAAiB,EAC5B,SAAS,MAAM,KACd,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAcpC,CAAC"}
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/src/discovery.ts"],"names":[],"mappings":"AAcA,OAAO,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAOlE,qDAAqD;AACrD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,2CAA2C;AAC3C,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAaD,wDAAwD;AACxD,eAAO,MAAM,cAAc,GACzB,KAAK,WAAW,EAChB,KAAK,MAAM,KACV,OAAO,CAAC,SAAS,EAAE,CAcrB,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,aAAa,GACxB,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,SAAS,MAAM,KACd,OAAO,CAAC,SAAS,GAAG,IAAI,CAG1B,CAAC;AAMF,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,uEAAuE;AACvE,eAAO,MAAM,yBAAyB,GACpC,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,SAAS,MAAM,KACd,OAAO,CAAC,WAAW,EAAE,CAcvB,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,eAAe,GAC1B,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,SAAS,MAAM,EACf,UAAU,MAAM,KACf,OAAO,CAAC,WAAW,GAAG,IAAI,CAmB5B,CAAC;AAMF,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,GAC/B,KAAK,WAAW,EAChB,SAAS,MAAM,KACd,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAclC,CAAC;AAMF,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,GACjC,WAAW,iBAAiB,EAC5B,SAAS,MAAM,KACd,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAcpC,CAAC"}
|
package/esm/src/discovery.js
CHANGED
|
@@ -39,6 +39,34 @@ export const findRouterApp = async (fly, org, network) => {
|
|
|
39
39
|
const apps = await listRouterApps(fly, org);
|
|
40
40
|
return apps.find((a) => a.network === network) ?? null;
|
|
41
41
|
};
|
|
42
|
+
/** List all non-router apps on a specific custom network in an org. */
|
|
43
|
+
export const listWorkloadAppsOnNetwork = async (fly, org, network) => {
|
|
44
|
+
const apps = await fly.listAppsWithNetwork(org);
|
|
45
|
+
return apps
|
|
46
|
+
.filter((app) => !app.name.startsWith(ROUTER_APP_PREFIX) &&
|
|
47
|
+
app.network === network)
|
|
48
|
+
.map((app) => ({
|
|
49
|
+
appName: app.name,
|
|
50
|
+
network: app.network,
|
|
51
|
+
org: app.organization?.slug ?? org,
|
|
52
|
+
}));
|
|
53
|
+
};
|
|
54
|
+
/** Find a specific workload app by name, optionally verifying network. */
|
|
55
|
+
export const findWorkloadApp = async (fly, org, appName, network) => {
|
|
56
|
+
const apps = await fly.listAppsWithNetwork(org);
|
|
57
|
+
const workloads = apps
|
|
58
|
+
.filter((app) => !app.name.startsWith(ROUTER_APP_PREFIX) &&
|
|
59
|
+
app.network !== DEFAULT_NETWORK)
|
|
60
|
+
.map((app) => ({
|
|
61
|
+
appName: app.name,
|
|
62
|
+
network: app.network,
|
|
63
|
+
org: app.organization?.slug ?? org,
|
|
64
|
+
}));
|
|
65
|
+
if (network) {
|
|
66
|
+
return workloads.find((a) => a.appName === appName && a.network === network) ?? null;
|
|
67
|
+
}
|
|
68
|
+
return workloads.find((a) => a.appName === appName) ?? null;
|
|
69
|
+
};
|
|
42
70
|
// =============================================================================
|
|
43
71
|
// 2. What's the machine state? (Fly Machines API)
|
|
44
72
|
// =============================================================================
|
package/esm/src/template.d.ts
CHANGED
|
@@ -17,11 +17,13 @@ export type TemplateFetchResult = Result<{
|
|
|
17
17
|
* Parse a template reference string into its components.
|
|
18
18
|
* Returns null if the format is invalid.
|
|
19
19
|
*
|
|
20
|
-
* Format: owner/repo/path[@ref]
|
|
20
|
+
* Format: owner/repo[/path][@ref]
|
|
21
21
|
*
|
|
22
22
|
* The first two segments are always owner/repo. Everything after the second
|
|
23
|
-
* slash up to an optional @ref is the path within the repository.
|
|
24
|
-
*
|
|
23
|
+
* slash up to an optional @ref is the path within the repository. When no
|
|
24
|
+
* path is provided, the repository root is used as the template directory.
|
|
25
|
+
* This is unambiguous because GitHub owner and repo names cannot contain
|
|
26
|
+
* slashes.
|
|
25
27
|
*/
|
|
26
28
|
export declare const parseTemplateRef: (raw: string) => TemplateRef | null;
|
|
27
29
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/src/template.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/src/template.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAM/C,2EAA2E;AAC3E,MAAM,MAAM,iBAAiB,GACzB,UAAU,GACV,aAAa,GACb,WAAW,GACX,kBAAkB,GAClB,cAAc,GACd,kBAAkB,GAClB,cAAc,GACd,cAAc,CAAC;AAMnB,wCAAwC;AACxC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB;AAED,iDAAiD;AACjD,MAAM,MAAM,mBAAmB,GAAG,MAAM,CACtC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EACxC,iBAAiB,CAClB,CAAC;AAgCF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,KAAG,WAAW,GAAG,IAyB5D,CAAC;AAMF;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,GACxB,KAAK,WAAW,KACf,OAAO,CAAC,mBAAmB,CAsH7B,CAAC"}
|
package/esm/src/template.js
CHANGED
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
// template. Templates are expected to contain at least a fly.toml and
|
|
7
7
|
// typically a Dockerfile.
|
|
8
8
|
//
|
|
9
|
-
// Reference format: owner/repo/path[@ref]
|
|
9
|
+
// Reference format: owner/repo[/path][@ref]
|
|
10
10
|
//
|
|
11
|
-
// ToxicPine/ambit-
|
|
11
|
+
// ToxicPine/ambit-openclaw → repo root, default branch
|
|
12
|
+
// ToxicPine/ambit-templates/cdp → subdirectory, default branch
|
|
12
13
|
// ToxicPine/ambit-templates/cdp@v1.0 → tagged release
|
|
13
14
|
// ToxicPine/ambit-templates/cdp@main → explicit branch
|
|
14
15
|
//
|
|
@@ -26,7 +27,12 @@ const fail = (kind, message) => ({
|
|
|
26
27
|
message,
|
|
27
28
|
});
|
|
28
29
|
/** Format a template reference for display. */
|
|
29
|
-
const formatRef = (ref) =>
|
|
30
|
+
const formatRef = (ref) => {
|
|
31
|
+
const base = ref.path === "."
|
|
32
|
+
? `${ref.owner}/${ref.repo}`
|
|
33
|
+
: `${ref.owner}/${ref.repo}/${ref.path}`;
|
|
34
|
+
return base + (ref.ref ? `@${ref.ref}` : "");
|
|
35
|
+
};
|
|
30
36
|
/** Format owner/repo with optional ref for display. */
|
|
31
37
|
const formatRepo = (ref) => `${ref.owner}/${ref.repo}` + (ref.ref ? `@${ref.ref}` : "");
|
|
32
38
|
// =============================================================================
|
|
@@ -36,11 +42,13 @@ const formatRepo = (ref) => `${ref.owner}/${ref.repo}` + (ref.ref ? `@${ref.ref}
|
|
|
36
42
|
* Parse a template reference string into its components.
|
|
37
43
|
* Returns null if the format is invalid.
|
|
38
44
|
*
|
|
39
|
-
* Format: owner/repo/path[@ref]
|
|
45
|
+
* Format: owner/repo[/path][@ref]
|
|
40
46
|
*
|
|
41
47
|
* The first two segments are always owner/repo. Everything after the second
|
|
42
|
-
* slash up to an optional @ref is the path within the repository.
|
|
43
|
-
*
|
|
48
|
+
* slash up to an optional @ref is the path within the repository. When no
|
|
49
|
+
* path is provided, the repository root is used as the template directory.
|
|
50
|
+
* This is unambiguous because GitHub owner and repo names cannot contain
|
|
51
|
+
* slashes.
|
|
44
52
|
*/
|
|
45
53
|
export const parseTemplateRef = (raw) => {
|
|
46
54
|
// Split off @ref suffix
|
|
@@ -56,13 +64,13 @@ export const parseTemplateRef = (raw) => {
|
|
|
56
64
|
else {
|
|
57
65
|
body = raw;
|
|
58
66
|
}
|
|
59
|
-
// Need at least owner/repo
|
|
67
|
+
// Need at least owner/repo
|
|
60
68
|
const parts = body.split("/");
|
|
61
|
-
if (parts.length <
|
|
69
|
+
if (parts.length < 2)
|
|
62
70
|
return null;
|
|
63
71
|
const owner = parts[0];
|
|
64
72
|
const repo = parts[1];
|
|
65
|
-
const path = parts.slice(2).join("/");
|
|
73
|
+
const path = parts.length > 2 ? parts.slice(2).join("/") : ".";
|
|
66
74
|
if (!owner || !repo || !path)
|
|
67
75
|
return null;
|
|
68
76
|
return { owner, repo, path, ref };
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_data.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/cli/1.0.27/_data.js"],"names":[],"mappings":""}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Filters the given array, removing all elements that do not match the given predicate
|
|
3
|
-
* **in place. This means `array` will be modified!**.
|
|
4
|
-
*/
|
|
5
|
-
export declare function filterInPlace<T>(array: Array<T>, predicate: (el: T) => boolean): Array<T>;
|
|
6
|
-
//# sourceMappingURL=_utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_utils.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/collections/1.1.3/_utils.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,OAAO,GAC5B,KAAK,CAAC,CAAC,CAAC,CAeV"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
// Copyright 2018-2025 the Deno authors. MIT license.
|
|
2
|
-
// This module is browser compatible.
|
|
3
|
-
/**
|
|
4
|
-
* Filters the given array, removing all elements that do not match the given predicate
|
|
5
|
-
* **in place. This means `array` will be modified!**.
|
|
6
|
-
*/
|
|
7
|
-
export function filterInPlace(array, predicate) {
|
|
8
|
-
let outputIndex = 0;
|
|
9
|
-
for (const cur of array) {
|
|
10
|
-
if (!predicate(cur)) {
|
|
11
|
-
continue;
|
|
12
|
-
}
|
|
13
|
-
array[outputIndex] = cur;
|
|
14
|
-
outputIndex += 1;
|
|
15
|
-
}
|
|
16
|
-
array.splice(outputIndex);
|
|
17
|
-
return array;
|
|
18
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|