dotrino-content 0.2.1 → 0.2.3
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/bin/cli.js +7 -1
- package/package.json +3 -3
- package/src/storage.js +2 -2
- package/src/vaultEnv.js +12 -12
package/bin/cli.js
CHANGED
|
@@ -52,10 +52,16 @@ const { values, positionals } = parseArgs({
|
|
|
52
52
|
'public-egress-gb': { type: 'string' },
|
|
53
53
|
'public-url': { type: 'string' },
|
|
54
54
|
'app-url': { type: 'string' },
|
|
55
|
-
'public-index': { type: 'boolean' }
|
|
55
|
+
'public-index': { type: 'boolean' },
|
|
56
|
+
help: { type: 'boolean', short: 'h' }
|
|
56
57
|
}
|
|
57
58
|
})
|
|
58
59
|
|
|
60
|
+
if (values.help) {
|
|
61
|
+
console.log(USAGE)
|
|
62
|
+
process.exit(0)
|
|
63
|
+
}
|
|
64
|
+
|
|
59
65
|
const cmd = positionals[0] || 'start'
|
|
60
66
|
if (cmd !== 'start' && cmd !== 'enroll') {
|
|
61
67
|
console.error(`comando desconocido: ${cmd}\n${USAGE}`)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dotrino-content",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
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,9 +23,9 @@
|
|
|
23
23
|
"typescript": "5.9.3"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@dotrino/identity": "0.
|
|
26
|
+
"@dotrino/identity": "0.56.0",
|
|
27
27
|
"@dotrino/remote-agent": "0.4.1",
|
|
28
|
-
"@dotrino/vault": "0.
|
|
28
|
+
"@dotrino/vault": "0.28.0"
|
|
29
29
|
},
|
|
30
30
|
"keywords": [
|
|
31
31
|
"dotrino",
|
package/src/storage.js
CHANGED
|
@@ -120,8 +120,8 @@ export async function checkBuckets (cfg, { priv, pub }, f = fetch) {
|
|
|
120
120
|
const cid = 'sha256-' + createHash('sha256').update(bytes).digest('hex')
|
|
121
121
|
await pub.put(cid, bytes, { sha256: cid.slice(7), size: bytes.length, contentType: 'text/plain' })
|
|
122
122
|
const r = await f(`${cfg.baseUrl.replace(/\/+$/, '')}/${cid}`, { method: 'GET' })
|
|
123
|
-
const
|
|
124
|
-
if (
|
|
123
|
+
const body = r.ok ? (await r.text()).trim() : ''
|
|
124
|
+
if (body !== PROBE) {
|
|
125
125
|
warn.push(`${cfg.baseUrl} no sirve lo que hay en «${cfg.pub}» (HTTP ${r.status}): revisa que el dominio esté conectado AL BUCKET desde el panel`)
|
|
126
126
|
}
|
|
127
127
|
} catch (e) {
|
package/src/vaultEnv.js
CHANGED
|
@@ -84,21 +84,21 @@ export function startVaultConfig ({ dir = serviceDir(), onSecrets, log = console
|
|
|
84
84
|
let stopped = false
|
|
85
85
|
let watcher = null
|
|
86
86
|
/** @type {(v:any)=>void} */
|
|
87
|
-
let
|
|
88
|
-
const ready = new Promise((resolve) => {
|
|
87
|
+
let arrive = () => {}
|
|
88
|
+
const ready = new Promise((resolve) => { arrive = resolve })
|
|
89
89
|
|
|
90
90
|
// La configuración decide QUÉ ALMACÉN usa este node, así que quien arranca la espera…
|
|
91
91
|
// pero con plazo. Si la bóveda está apagada, seguir esperando sería dejar al usuario
|
|
92
92
|
// sin su propio contenido local por una pieza que el ecosistema promete no exigir
|
|
93
93
|
// (`CLAUDE.md`: ninguna app puede requerir un daemon encendido). Al vencer el plazo se
|
|
94
94
|
// sigue en local, y cuando la configuración llegue, `watchEnv` reinicia con ella.
|
|
95
|
-
let
|
|
96
|
-
const
|
|
97
|
-
|
|
95
|
+
let expired = false
|
|
96
|
+
const deadline = setTimeout(() => {
|
|
97
|
+
expired = true
|
|
98
98
|
log(`[vault] la bóveda no contestó en ${Math.round(firstWaitMs / 1000)}s: arranco con lo local y me reinicio cuando llegue`)
|
|
99
|
-
|
|
99
|
+
arrive(null)
|
|
100
100
|
}, firstWaitMs)
|
|
101
|
-
|
|
101
|
+
deadline.unref?.()
|
|
102
102
|
|
|
103
103
|
;(async () => {
|
|
104
104
|
const { waitForSecrets } = await import('@dotrino/vault/service')
|
|
@@ -113,8 +113,8 @@ export function startVaultConfig ({ dir = serviceDir(), onSecrets, log = console
|
|
|
113
113
|
const { injected, overridden } = applyEnv(secrets)
|
|
114
114
|
log(`[vault] ${injected.length} valor(es) del vault aplicados al entorno`)
|
|
115
115
|
if (overridden.length) log(`[vault] pisaron el entorno de esta máquina: ${overridden.join(', ')}`)
|
|
116
|
-
clearTimeout(
|
|
117
|
-
|
|
116
|
+
clearTimeout(deadline)
|
|
117
|
+
arrive(secrets)
|
|
118
118
|
onSecrets?.(secrets)
|
|
119
119
|
|
|
120
120
|
// LLEGÓ TARDE: el node ya arrancó, y arrancó con lo que había — o sea, con el
|
|
@@ -123,7 +123,7 @@ export function startVaultConfig ({ dir = serviceDir(), onSecrets, log = console
|
|
|
123
123
|
// que arrancó antes que su bóveda se queda en local para siempre, con la
|
|
124
124
|
// configuración correcta puesta en el entorno y sin usarla. Se sale, y el
|
|
125
125
|
// supervisor lo levanta ya con todo.
|
|
126
|
-
if (
|
|
126
|
+
if (expired) {
|
|
127
127
|
log('[vault] llegó la configuración después de arrancar: me reinicio para tomarla')
|
|
128
128
|
setTimeout(() => process.exit(0), 300)
|
|
129
129
|
return
|
|
@@ -145,13 +145,13 @@ export function startVaultConfig ({ dir = serviceDir(), onSecrets, log = console
|
|
|
145
145
|
}
|
|
146
146
|
: {})
|
|
147
147
|
})
|
|
148
|
-
})().catch((e) => { log(`[vault] no se pudo leer la configuración: ${e.message}`); clearTimeout(
|
|
148
|
+
})().catch((e) => { log(`[vault] no se pudo leer la configuración: ${e.message}`); clearTimeout(deadline); arrive(null) })
|
|
149
149
|
|
|
150
150
|
return {
|
|
151
151
|
enabled: true,
|
|
152
152
|
/** Resuelve con la configuración, o con `null` si venció el plazo o falló. */
|
|
153
153
|
ready,
|
|
154
|
-
close () { stopped = true; clearTimeout(
|
|
154
|
+
close () { stopped = true; clearTimeout(deadline); try { watcher?.close?.() } catch (_) {} }
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
|