aibroker 0.31.0 → 0.31.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/daemon/audit.d.ts.map +1 -1
- package/dist/daemon/audit.js +11 -2
- package/dist/daemon/audit.js.map +1 -1
- package/dist/daemon/ota.d.ts.map +1 -1
- package/dist/daemon/ota.js +13 -1
- package/dist/daemon/ota.js.map +1 -1
- package/docker/.env.example +7 -0
- package/docker/compose.yml +34 -0
- package/docker/ota/Dockerfile +17 -0
- package/docker/ota/README.md +136 -0
- package/docker/ota/package-lock.json +1163 -0
- package/docker/ota/package.json +22 -0
- package/docker/ota/src/auth.ts +44 -0
- package/docker/ota/src/landing.ts +52 -0
- package/docker/ota/src/manifest.ts +44 -0
- package/docker/ota/src/paths.ts +54 -0
- package/docker/ota/src/server.ts +177 -0
- package/docker/ota/tsconfig.json +16 -0
- package/package.json +6 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/daemon/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAoBH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,iEAAiE;AACjE,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,4EAA4E;AAC5E,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,EAAE,SAAW,GAAG,MAAM,CAIhD;AAED,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAoCD;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CA+BhF;AAED,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAS7D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,SAAS,CAAC,CAAC,GAAE,UAAe,GAAG,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/daemon/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAoBH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,iEAAiE;AACjE,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,4EAA4E;AAC5E,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,EAAE,SAAW,GAAG,MAAM,CAIhD;AAED,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAoCD;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CA+BhF;AAED,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAS7D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED,MAAM,WAAW,UAAU;IACzB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,SAAS,CAAC,CAAC,GAAE,UAAe,GAAG,UAAU,EAAE,CAoD1D;AAED,wBAAgB,SAAS,IAAI,MAAM,CAAuB"}
|
package/dist/daemon/audit.js
CHANGED
|
@@ -177,6 +177,7 @@ export function noteInbound(target, eventId) {
|
|
|
177
177
|
lastInbound.set(target, eventId);
|
|
178
178
|
}
|
|
179
179
|
export function readAudit(q = {}) {
|
|
180
|
+
// No file at all genuinely means no events, and [] is the honest answer.
|
|
180
181
|
if (!existsSync(AUDIT_FILE))
|
|
181
182
|
return [];
|
|
182
183
|
let events;
|
|
@@ -192,8 +193,16 @@ export function readAudit(q = {}) {
|
|
|
192
193
|
} })
|
|
193
194
|
.filter((e) => e !== null);
|
|
194
195
|
}
|
|
195
|
-
catch {
|
|
196
|
-
|
|
196
|
+
catch (e) {
|
|
197
|
+
// A file that EXISTS and cannot be read is not an empty audit log, and
|
|
198
|
+
// returning [] made the two byte-identical to every caller. PAI shipped the
|
|
199
|
+
// same shape in its Postgres search on 2026-08-04: a dead container made
|
|
200
|
+
// memory_search answer "No results found", another session believed it, and
|
|
201
|
+
// told Matthias a fact that was not true. Nothing in the response could have
|
|
202
|
+
// revealed it. An unreadable log is louder than a quiet lie.
|
|
203
|
+
throw new Error(`Audit log exists but could not be read: ${AUDIT_FILE}\n` +
|
|
204
|
+
` This is NOT an empty audit log — the file is there and unreadable.\n` +
|
|
205
|
+
` ${e instanceof Error ? e.message : String(e)}`);
|
|
197
206
|
}
|
|
198
207
|
if (q.trace) {
|
|
199
208
|
// Walk the chain both ways: what led here, and what this led to.
|
package/dist/daemon/audit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/daemon/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EACL,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,GACzF,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB;OAC7C,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,yDAAyD;AACzD,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,iEAAiE;AACjE,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;AAC7B,4EAA4E;AAC5E,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AAEnC,oFAAoF;AACpF,MAAM,UAAU,UAAU,CAAC,EAAE,GAAG,QAAQ;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5E,OAAO,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3B,CAAC;AA+BD,iFAAiF;AACjF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE9C,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,GAAG,SAAS,EAAE,CAAC;YACpE,UAAU,CAAC,UAAU,EAAE,GAAG,UAAU,IAAI,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,oDAAoD,CAAC,CAAC;AAClE,CAAC;AAED,4EAA4E;AAC5E,SAAS,OAAO,KAAa,OAAO,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AAEtE;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,+BAA+B,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/G,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,CAAkD;IACtE,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,UAAU,EAAE,CAAC;IAEhC,MAAM,KAAK,GAAe;QACxB,EAAE;QACF,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,GAAG,CAAC;QACJ,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;KACjD,CAAC;IAEF,uEAAuE;IACvE,+BAA+B;IAC/B,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;QACtD,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;QACrB,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QACpB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;IAC1B,CAAC;IACD,gEAAgE;IAChE,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;QACpG,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,EAAE,CAAC;IAC1F,CAAC;IAED,IAAI,CAAC;QACH,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,cAAc,EAAE,CAAC;QACjB,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,2BAA2B,CAAC,CAAC,MAAM,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,WAAW,CAAC,CAAa;IACvC,IAAI,CAAC,CAAC,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;QACrE,2EAA2E;QAC3E,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,uCAAuC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAChH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,OAAe;IACzD,IAAI,MAAM;QAAE,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAcD,MAAM,UAAU,SAAS,CAAC,IAAgB,EAAE;IAC1C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/daemon/audit.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon/ota.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ota.d.ts","sourceRoot":"","sources":["../../src/daemon/ota.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ota.d.ts","sourceRoot":"","sources":["../../src/daemon/ota.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,OAAO,CAAC;AAsG7B,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqD1D"}
|
package/dist/daemon/ota.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* The container never touches tailscaled — Tailscale Serve is configured here on the host.
|
|
6
6
|
*/
|
|
7
7
|
import { execSync, spawnSync } from "node:child_process";
|
|
8
|
-
import { writeFileSync, mkdirSync } from "node:fs";
|
|
8
|
+
import { existsSync, writeFileSync, mkdirSync } from "node:fs";
|
|
9
9
|
import { join, dirname } from "node:path";
|
|
10
10
|
import { fileURLToPath } from "node:url";
|
|
11
11
|
import { homedir } from "node:os";
|
|
@@ -24,6 +24,18 @@ export const OTA_PORT = 8767;
|
|
|
24
24
|
const COMPOSE_FILE = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "docker", "compose.yml");
|
|
25
25
|
const ENV_FILE = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "docker", ".env");
|
|
26
26
|
function composeExec(args) {
|
|
27
|
+
// Say so plainly when the build context is not on disk. `files` in
|
|
28
|
+
// package.json whitelists what ships, and `docker` was not on that list, so
|
|
29
|
+
// every npm install of aibroker carried an `ota` command that could not
|
|
30
|
+
// possibly work — docker compose would fail on a missing file with a message
|
|
31
|
+
// about paths rather than about packaging. Found by unpacking the published
|
|
32
|
+
// tarball rather than by reading the working copy, where it is invisible.
|
|
33
|
+
if (!existsSync(COMPOSE_FILE)) {
|
|
34
|
+
console.error(`OTA build context missing: ${COMPOSE_FILE}\n` +
|
|
35
|
+
` This installation of aibroker did not ship docker/. Run \`aibroker ota\`\n` +
|
|
36
|
+
` from a git checkout, or reinstall a version that includes it (>= 0.31.1).`);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
27
39
|
const result = spawnSync("docker", ["compose", "-f", COMPOSE_FILE, ...args], { stdio: "inherit", env: { ...process.env } });
|
|
28
40
|
if (result.status !== 0)
|
|
29
41
|
process.exit(result.status ?? 1);
|
package/dist/daemon/ota.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ota.js","sourceRoot":"","sources":["../../src/daemon/ota.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"ota.js","sourceRoot":"","sources":["../../src/daemon/ota.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
services:
|
|
2
|
+
aibroker-ota:
|
|
3
|
+
build:
|
|
4
|
+
context: ./ota
|
|
5
|
+
dockerfile: Dockerfile
|
|
6
|
+
container_name: aibroker-ota
|
|
7
|
+
# "no", not "unless-stopped". This hub is on-demand: it exists so a PAILot
|
|
8
|
+
# build can reach a device while its owner is away — fire it up, publish,
|
|
9
|
+
# tear it down. "unless-stopped" brought it back on every Docker start, so
|
|
10
|
+
# a service wanted a few times a year was competing for a port at every
|
|
11
|
+
# boot, against a daemon carrying live traffic.
|
|
12
|
+
restart: "no"
|
|
13
|
+
# 8767 — 8765 belongs to the daemon's PAILot MQTT broker, which is
|
|
14
|
+
# launchd-managed and therefore always holds it first.
|
|
15
|
+
ports:
|
|
16
|
+
- "127.0.0.1:8767:8767"
|
|
17
|
+
volumes:
|
|
18
|
+
- ${HOME}/.aibroker/ota:/data
|
|
19
|
+
environment:
|
|
20
|
+
- DATA_DIR=/data
|
|
21
|
+
- PORT=8767
|
|
22
|
+
- AIBROKER_OTA_PUBLISHERS=${AIBROKER_OTA_PUBLISHERS:-}
|
|
23
|
+
- TRUST_HEADER=${TRUST_HEADER:-true}
|
|
24
|
+
user: "${UID}:${GID}"
|
|
25
|
+
healthcheck:
|
|
26
|
+
test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:8767/healthz').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
|
|
27
|
+
interval: 30s
|
|
28
|
+
timeout: 10s
|
|
29
|
+
retries: 3
|
|
30
|
+
start_period: 10s
|
|
31
|
+
deploy:
|
|
32
|
+
resources:
|
|
33
|
+
limits:
|
|
34
|
+
memory: 256M
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
FROM node:22-alpine AS deps
|
|
2
|
+
WORKDIR /app
|
|
3
|
+
COPY package.json package-lock.json* ./
|
|
4
|
+
RUN npm ci --omit=dev
|
|
5
|
+
|
|
6
|
+
FROM node:22-alpine AS build
|
|
7
|
+
WORKDIR /app
|
|
8
|
+
COPY package.json tsconfig.json ./
|
|
9
|
+
COPY src ./src
|
|
10
|
+
RUN npm install && npx tsc
|
|
11
|
+
|
|
12
|
+
FROM node:22-alpine
|
|
13
|
+
WORKDIR /app
|
|
14
|
+
COPY --from=deps /app/node_modules ./node_modules
|
|
15
|
+
COPY --from=build /app/dist ./dist
|
|
16
|
+
EXPOSE 8767
|
|
17
|
+
CMD ["node", "/app/dist/server.js"]
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# aibroker-ota — OTA Install Hub
|
|
2
|
+
|
|
3
|
+
A lightweight Express service that ships iOS IPAs and Android APKs over Tailscale.
|
|
4
|
+
Any app (PAILot, Glidr, future apps) is one tool-call away from "installable on your device from anywhere on Tailscale".
|
|
5
|
+
|
|
6
|
+
**This hub is on-demand, and deliberately not running.** It exists for the case
|
|
7
|
+
where a build has to reach a device you are not holding — you are travelling and
|
|
8
|
+
PAILot on the phone needs an upgrade. The cycle is `aibroker ota up`, publish,
|
|
9
|
+
`aibroker ota down`, and `down` now clears the Tailscale Serve mappings as well
|
|
10
|
+
as stopping the container, so nothing is advertised on the tailnet between uses.
|
|
11
|
+
`restart: "no"` in compose.yml is part of that: it must not come back by itself
|
|
12
|
+
at boot.
|
|
13
|
+
|
|
14
|
+
## What it is
|
|
15
|
+
|
|
16
|
+
`aibroker-ota` is a Docker container that:
|
|
17
|
+
- Hosts IPA/APK files at stable URLs under `/install/<slug>/`
|
|
18
|
+
- Renders iOS manifest plists and install landing pages
|
|
19
|
+
- Gates uploads to a configurable Tailscale-user allowlist
|
|
20
|
+
- Exposes a JSON API under `/api/apps` for programmatic publishing
|
|
21
|
+
|
|
22
|
+
## Quick start
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
aibroker ota up
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
This command:
|
|
29
|
+
1. Writes `docker/.env` with your host UID/GID (so bind-mount writes succeed)
|
|
30
|
+
2. Runs `docker compose up -d`
|
|
31
|
+
3. Configures Tailscale Serve to proxy `/install/` and `/api/` at HTTPS
|
|
32
|
+
|
|
33
|
+
After `up`, your install URLs are at `https://<tailscale-hostname>/install/<slug>/`.
|
|
34
|
+
|
|
35
|
+
## Tailscale Serve flow
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
iPhone (Safari)
|
|
39
|
+
→ https://<tailscale-hostname>/install/pailot/ (HTTPS, Tailscale Serve)
|
|
40
|
+
→ Tailscale Serve (local proxy)
|
|
41
|
+
→ http://127.0.0.1:8767/install/pailot/ (aibroker-ota container)
|
|
42
|
+
→ itms-services:// install link
|
|
43
|
+
→ iOS fetches manifest.plist
|
|
44
|
+
→ iOS downloads .ipa and installs
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
The container never touches `tailscaled` or the Tailscale socket.
|
|
48
|
+
Tailscale Serve is configured by `aibroker ota up` on the host.
|
|
49
|
+
|
|
50
|
+
## Auth model
|
|
51
|
+
|
|
52
|
+
- **Reads** (`GET /api/apps`, `/install/*`): open within the tailnet — no auth required.
|
|
53
|
+
- **Writes** (`POST /api/apps`, `DELETE /api/apps/:slug`): require `Tailscale-User-Login` header to match `AIBROKER_OTA_PUBLISHERS`.
|
|
54
|
+
|
|
55
|
+
Tailscale Serve injects the `Tailscale-User-Login` header for requests from tailnet peers.
|
|
56
|
+
The container trusts this header (`TRUST_HEADER=true`) because it only binds to `127.0.0.1`.
|
|
57
|
+
|
|
58
|
+
**Known assumption / security caveat:** Local processes on the host Mac can craft arbitrary
|
|
59
|
+
`Tailscale-User-Login` headers when connecting to `127.0.0.1:8767` directly.
|
|
60
|
+
The threat model is remote attackers, not local root. If you need stronger local isolation,
|
|
61
|
+
set `AIBROKER_OTA_PUBLISHERS=` to empty (disabling the allowlist check, accepting any tailnet user)
|
|
62
|
+
or run behind a stricter proxy.
|
|
63
|
+
|
|
64
|
+
## iOS signing reality
|
|
65
|
+
|
|
66
|
+
Ad-hoc IPAs require the device's UDID in the provisioning profile.
|
|
67
|
+
This service is **distribution infrastructure only** — it does not bypass code signing.
|
|
68
|
+
To add a device: add its UDID in Apple Developer portal → regenerate provisioning profile → rebuild IPA → re-publish.
|
|
69
|
+
|
|
70
|
+
## Android note
|
|
71
|
+
|
|
72
|
+
`.aab` files (Android App Bundle) are **not** accepted. AAB is the Play Store upload format —
|
|
73
|
+
devices cannot install AAB directly. Only `.apk` files are accepted for sideloading.
|
|
74
|
+
|
|
75
|
+
## Publishing
|
|
76
|
+
|
|
77
|
+
### Via MCP tool (recommended)
|
|
78
|
+
```
|
|
79
|
+
ota_publish({
|
|
80
|
+
slug: "pailot",
|
|
81
|
+
name: "PAILot",
|
|
82
|
+
bundleId: "de.mnsoft.pailot",
|
|
83
|
+
version: "1.2.3",
|
|
84
|
+
platform: "ios",
|
|
85
|
+
filePath: "/path/to/PAILot-1.2.3.ipa"
|
|
86
|
+
})
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Via curl
|
|
90
|
+
```bash
|
|
91
|
+
curl -X POST https://<hostname>/api/apps \
|
|
92
|
+
-F slug=pailot \
|
|
93
|
+
-F name=PAILot \
|
|
94
|
+
-F "bundleId=de.mnsoft.pailot" \
|
|
95
|
+
-F version=1.2.3 \
|
|
96
|
+
-F platform=ios \
|
|
97
|
+
-F file=@/path/to/PAILot-1.2.3.ipa
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Storage
|
|
101
|
+
|
|
102
|
+
Files live at `~/.aibroker/ota/` on the host (bind-mounted to `/data` in the container):
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
~/.aibroker/ota/
|
|
106
|
+
apps/
|
|
107
|
+
<slug>/
|
|
108
|
+
meta.json # app metadata
|
|
109
|
+
<Name>-<version>.ipa
|
|
110
|
+
<Name>-<version>.apk
|
|
111
|
+
icon.png # optional
|
|
112
|
+
uploads-tmp/ # multer staging (same volume — no cross-device rename)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Backup consideration:** IPAs and APKs are 10–30 MB each and are rebuild artifacts.
|
|
116
|
+
Exclude `~/.aibroker/ota/apps/*/*.ipa` and `~/.aibroker/ota/apps/*/*.apk` from any backup.
|
|
117
|
+
Only `meta.json` files need backing up.
|
|
118
|
+
|
|
119
|
+
## Environment variables
|
|
120
|
+
|
|
121
|
+
| Variable | Default | Description |
|
|
122
|
+
|---|---|---|
|
|
123
|
+
| `DATA_DIR` | `/data` | Root data directory |
|
|
124
|
+
| `AIBROKER_OTA_PUBLISHERS` | `` | Comma-separated Tailscale login emails allowed to write |
|
|
125
|
+
| `TRUST_HEADER` | `true` | Trust `Tailscale-User-Login` header; set false to block all writes |
|
|
126
|
+
|
|
127
|
+
## Misc commands
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
aibroker ota down # stop container AND clear Tailscale Serve mappings
|
|
131
|
+
aibroker ota status # docker ps + tailscale serve status
|
|
132
|
+
aibroker ota logs # container logs
|
|
133
|
+
aibroker ota logs -f # follow logs
|
|
134
|
+
aibroker ota setup-serve # re-configure Tailscale Serve without restarting container
|
|
135
|
+
aibroker ota teardown-serve # clear the Serve mappings without stopping the container
|
|
136
|
+
```
|