@dotrino/content 0.5.0 → 0.5.1
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 +3 -3
- package/src/selfUpdate.js +19 -33
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dotrino/content",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "Nodo de contenido del ecosistema Dotrino: guarda los bytes del usuario direccionados por su hash (cid), en su propia maquina y, si el dueno quiere, respaldados en su propio bucket (R2, Backblaze, Hetzner, Storj o S3). Lo publico sale por URL directa; lo privado, cifrado y solo por la red Dotrino.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"@dotrino/identity": "0.105.0",
|
|
27
27
|
"@dotrino/proxy-client": "0.25.0",
|
|
28
28
|
"@dotrino/remote-agent": "0.13.0",
|
|
29
|
-
"@dotrino/update": "0.5.
|
|
30
|
-
"@dotrino/vault": "0.82.
|
|
29
|
+
"@dotrino/update": "0.5.1",
|
|
30
|
+
"@dotrino/vault": "0.82.1"
|
|
31
31
|
},
|
|
32
32
|
"keywords": [
|
|
33
33
|
"dotrino",
|
package/src/selfUpdate.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* No implementa nada de eso: mirar, comprobar lo que entrega npm contra la release de
|
|
5
5
|
* GitHub, instalar y recordar lo ya preguntado es de `@dotrino/update/npm`; preguntarle a
|
|
6
|
-
* la bóveda y avisarle es de `@dotrino/vault/service
|
|
7
|
-
*
|
|
6
|
+
* la bóveda y avisarle es de `@dotrino/vault/service` (`vaultUpdateHooks`). Aquí solo se
|
|
7
|
+
* juntan las dos piezas con la carpeta y la identidad de esta instancia.
|
|
8
8
|
*
|
|
9
9
|
* Los dos ajustes son de ESTA instancia (`update-prefs.json` en su carpeta) y no tienen
|
|
10
10
|
* que ver con el de la bóveda:
|
|
@@ -17,55 +17,41 @@
|
|
|
17
17
|
* `no-approver` y no se instala. Suponer un sí sería saltarse lo que el dueño pidió.
|
|
18
18
|
*/
|
|
19
19
|
import { watchSelfUpdateNpm } from '@dotrino/update/npm'
|
|
20
|
-
import {
|
|
20
|
+
import { vaultUpdateHooks } from '@dotrino/vault/service'
|
|
21
21
|
|
|
22
22
|
export const PKG = '@dotrino/content'
|
|
23
23
|
export const REPO = 'imdotrino/dotrino-content'
|
|
24
24
|
|
|
25
|
-
/**
|
|
26
|
-
* Los tres ganchos que hablan con la bóveda. `conn()` da, EN EL MOMENTO de llamar, con
|
|
27
|
-
* qué identidad se le habla (`{ dir }` o `{ proxyUrl, masterPubkey, device, cert }`): el
|
|
28
|
-
* papel se renueva con el proceso en marcha y uno leído al arrancar ya no valdría.
|
|
29
|
-
*
|
|
30
|
-
* @param {{ product: string, conn: () => object, vault?: any }} o
|
|
31
|
-
*/
|
|
32
|
-
export function vaultUpdateHooks ({ product, conn, vault = { askUpdateApproval, reportUpdated, reportUpdateNeedsRoot } }) {
|
|
33
|
-
return {
|
|
34
|
-
// true = sí · false = no, o pasó el día sin respuesta · lanza = no se pudo preguntar
|
|
35
|
-
// (eso no es una negativa: `@dotrino/update` lo reintenta en la próxima pasada).
|
|
36
|
-
mayUpdate: async ({ version, from }) => {
|
|
37
|
-
try {
|
|
38
|
-
return (await vault.askUpdateApproval({ product, version, from, ...conn() })).ok === true
|
|
39
|
-
} catch (e) {
|
|
40
|
-
// El pedido quedó pendiente y venció sin que nadie contestara: vencido es no.
|
|
41
|
-
if (e?.code === 'unanswered') return false
|
|
42
|
-
throw e
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
onUpdated: ({ version, from }) => vault.reportUpdated({ product, version, from, ...conn() }),
|
|
46
|
-
onNeedsRoot: ({ version, from }) => vault.reportUpdateNeedsRoot({ product, version, from, ...conn() })
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
25
|
/**
|
|
51
26
|
* Arranca el vigilante. Devuelve cómo pararlo.
|
|
52
27
|
*
|
|
53
28
|
* @param {{
|
|
54
29
|
* version: string, dir: string, conn?: (() => object) | null,
|
|
55
30
|
* restart: (version: string) => void, log?: (m: string) => void,
|
|
56
|
-
* watch?: typeof watchSelfUpdateNpm,
|
|
31
|
+
* watch?: typeof watchSelfUpdateNpm, hooks?: typeof vaultUpdateHooks
|
|
57
32
|
* }} o
|
|
58
33
|
* dir: la carpeta del enlace de esta instancia (ahí viven sus ajustes de actualización).
|
|
59
|
-
* conn:
|
|
34
|
+
* conn: con qué identidad se le habla a la bóveda (`{ dir }` o `{ proxyUrl, masterPubkey,
|
|
35
|
+
* device, cert }`), o `null` si este node no está enrolado. Es una FUNCIÓN y se llama en
|
|
36
|
+
* cada uso: el papel se renueva con el proceso en marcha, y uno leído al arrancar ya no
|
|
37
|
+
* valdría un día después.
|
|
60
38
|
* restart: salir limpio para que systemd/pm2 levante la versión nueva.
|
|
61
39
|
*/
|
|
62
|
-
export function startSelfUpdate ({ version, dir, conn = null, restart, log = console.log, watch = watchSelfUpdateNpm,
|
|
40
|
+
export function startSelfUpdate ({ version, dir, conn = null, restart, log = console.log, watch = watchSelfUpdateNpm, hooks = vaultUpdateHooks }) {
|
|
41
|
+
// Los ganchos son de la librería de la bóveda; aquí solo se arman con la identidad de AHORA.
|
|
42
|
+
const now = () => hooks({ product: PKG, log, ...conn() })
|
|
63
43
|
return watch({
|
|
64
44
|
pkg: PKG,
|
|
65
45
|
current: version,
|
|
66
46
|
repo: REPO,
|
|
67
47
|
dir,
|
|
68
|
-
...(conn
|
|
48
|
+
...(conn
|
|
49
|
+
? {
|
|
50
|
+
mayUpdate: (u) => now().mayUpdate(u),
|
|
51
|
+
onUpdated: (u) => now().onUpdated(u),
|
|
52
|
+
onNeedsRoot: (u) => now().onNeedsRoot(u)
|
|
53
|
+
}
|
|
54
|
+
: {}),
|
|
69
55
|
onInstalled: ({ version: to, restart: canRestart }) => {
|
|
70
56
|
if (canRestart) {
|
|
71
57
|
log(`[update] ${PKG} ${to} installed · restarting to run it`)
|
|
@@ -78,4 +64,4 @@ export function startSelfUpdate ({ version, dir, conn = null, restart, log = con
|
|
|
78
64
|
})
|
|
79
65
|
}
|
|
80
66
|
|
|
81
|
-
export default { PKG, REPO,
|
|
67
|
+
export default { PKG, REPO, startSelfUpdate }
|