@dotrino/content 0.5.0 → 0.5.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 (2) hide show
  1. package/package.json +4 -4
  2. 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.0",
3
+ "version": "0.5.2",
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": {
@@ -23,11 +23,11 @@
23
23
  "typescript": "5.9.3"
24
24
  },
25
25
  "dependencies": {
26
- "@dotrino/identity": "0.105.0",
26
+ "@dotrino/identity": "0.116.0",
27
27
  "@dotrino/proxy-client": "0.25.0",
28
28
  "@dotrino/remote-agent": "0.13.0",
29
- "@dotrino/update": "0.5.0",
30
- "@dotrino/vault": "0.82.0"
29
+ "@dotrino/update": "0.5.1",
30
+ "@dotrino/vault": "0.86.0"
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`. Aquí solo está el pegamento, y es
7
- * lo único que conoce las dos piezas a la vez.
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 { askUpdateApproval, reportUpdated, reportUpdateNeedsRoot } from '@dotrino/vault/service'
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, vault?: any
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: cómo hablarle a la bóveda, o `null` si este node no está enrolado.
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, vault }) {
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 ? vaultUpdateHooks({ product: PKG, conn, ...(vault ? { vault } : {}) }) : {}),
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, vaultUpdateHooks, startSelfUpdate }
67
+ export default { PKG, REPO, startSelfUpdate }