@alexberardi/jarvis-admin 0.1.83 → 0.1.85
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/package.json +1 -1
- package/public/assets/index-4TF68MKN.css +1 -0
- package/public/assets/index-BoF60OKD.js +18 -0
- package/public/index.html +2 -2
- package/server/dist/data/service-registry.json +1 -1
- package/server/dist/routes/update.d.ts.map +1 -1
- package/server/dist/routes/update.js +41 -4
- package/server/dist/routes/update.js.map +1 -1
- package/server/src/data/service-registry.json +1 -1
- package/public/assets/index-4y8tSbZj.js +0 -18
- package/public/assets/index-CAv1RM9y.css +0 -1
package/public/index.html
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<link rel="icon" type="image/png" href="/favicon.png" />
|
|
7
7
|
<title>Jarvis Admin</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-BoF60OKD.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-4TF68MKN.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div id="root"></div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/routes/update.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/routes/update.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAO9C,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAkBD,wBAAsB,YAAY,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkGtE"}
|
|
@@ -2,6 +2,7 @@ import { existsSync, readFileSync } from 'node:fs';
|
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { requireSuperuser } from '../middleware/auth.js';
|
|
5
|
+
import { savePersistedConfig } from '../config.js';
|
|
5
6
|
import { checkForUpdate } from '../services/update-checker.js';
|
|
6
7
|
const UPGRADE_MARKER = join(homedir(), '.jarvis', 'upgrade-in-progress.json');
|
|
7
8
|
function getUpgradeStatus() {
|
|
@@ -17,25 +18,61 @@ function getUpgradeStatus() {
|
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
20
|
export async function updateRoutes(app) {
|
|
21
|
+
/**
|
|
22
|
+
* Read the box-level update opt-in.
|
|
23
|
+
*
|
|
24
|
+
* Unauthenticated, like `/check` — it's a single boolean about this box's own
|
|
25
|
+
* configuration, and the SPA needs it before login to render the update card
|
|
26
|
+
* honestly.
|
|
27
|
+
*/
|
|
28
|
+
app.get('/settings', async (_request, reply) => {
|
|
29
|
+
return reply.send({ allowUpdates: app.config.allowUpdates });
|
|
30
|
+
});
|
|
31
|
+
/**
|
|
32
|
+
* Flip the box-level update opt-in (superuser only).
|
|
33
|
+
*
|
|
34
|
+
* This exists because the flag used to be reachable ONLY by hand-editing a
|
|
35
|
+
* launchd plist (or compose .env) and restarting the service — which put the
|
|
36
|
+
* documented update path out of reach of the non-technical self-hosters it was
|
|
37
|
+
* written for.
|
|
38
|
+
*
|
|
39
|
+
* Persisted to ~/.jarvis/admin.json, which `loadConfig` already prefers over
|
|
40
|
+
* the `JARVIS_ALLOW_UPDATES` env var, so it survives a restart. We also mutate
|
|
41
|
+
* the live config so it takes effect immediately — otherwise the user would
|
|
42
|
+
* flip the switch and nothing would happen until they restarted, which is the
|
|
43
|
+
* very papercut we're removing.
|
|
44
|
+
*/
|
|
45
|
+
app.post('/settings', { preHandler: requireSuperuser }, async (request, reply) => {
|
|
46
|
+
const body = request.body;
|
|
47
|
+
const allowUpdates = body?.allowUpdates;
|
|
48
|
+
if (typeof allowUpdates !== 'boolean') {
|
|
49
|
+
return reply.code(400).send({ error: 'allowUpdates must be a boolean' });
|
|
50
|
+
}
|
|
51
|
+
savePersistedConfig({ allowUpdates });
|
|
52
|
+
app.config.allowUpdates = allowUpdates;
|
|
53
|
+
app.log.info({ allowUpdates }, 'update opt-in changed');
|
|
54
|
+
return reply.send({ allowUpdates });
|
|
55
|
+
});
|
|
20
56
|
/** Check for available updates (no auth required — informational) */
|
|
21
57
|
app.get('/check', async (_request, reply) => {
|
|
22
58
|
const info = await checkForUpdate(false, app.config.allowUpdates);
|
|
23
|
-
return reply.send(info);
|
|
59
|
+
return reply.send({ ...info, updatesEnabled: app.config.allowUpdates });
|
|
24
60
|
});
|
|
25
61
|
/** Force a fresh update check */
|
|
26
62
|
app.post('/check', async (_request, reply) => {
|
|
27
63
|
const info = await checkForUpdate(true, app.config.allowUpdates);
|
|
28
|
-
return reply.send(info);
|
|
64
|
+
return reply.send({ ...info, updatesEnabled: app.config.allowUpdates });
|
|
29
65
|
});
|
|
30
66
|
/** Get current upgrade status (is an upgrade in progress?) */
|
|
31
67
|
app.get('/status', async (_request, reply) => {
|
|
32
68
|
return reply.send(getUpgradeStatus());
|
|
33
69
|
});
|
|
34
70
|
/** Apply an update — SSE endpoint that orchestrates the full upgrade */
|
|
35
|
-
app.post('/apply', { preHandler: requireSuperuser }, async (
|
|
71
|
+
app.post('/apply', { preHandler: requireSuperuser }, async (_request, reply) => {
|
|
36
72
|
if (!app.config.allowUpdates) {
|
|
37
73
|
return reply.code(403).send({
|
|
38
|
-
error: 'Updates are disabled.
|
|
74
|
+
error: 'Updates are disabled. Turn on "Check for updates" in the admin UI ' +
|
|
75
|
+
'(or POST /api/update/settings {"allowUpdates":true}).',
|
|
39
76
|
});
|
|
40
77
|
}
|
|
41
78
|
const info = await checkForUpdate(true, app.config.allowUpdates);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/routes/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAE9D,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAA;AAS7E,SAAS,gBAAgB;IACvB,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;IAC9B,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAI5D,CAAA;QACD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAA;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAoB;IACrD,qEAAqE;IACrE,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QACjE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/routes/update.ts"],"names":[],"mappings":"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"}
|