pinnace 0.1.0 → 0.2.0

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/README.md CHANGED
@@ -1,15 +1,164 @@
1
1
  # pinnace
2
2
 
3
- Self-host a static website on IPFS across one or more self-owned Kubo nodes (Hetzner first, other hosts behind a provider seam).
3
+ Self-host a static website on IPFS across one or more self-owned Kubo nodes, without a paid pinning service. `pinnace` provisions the nodes (generated cloud-init), deploys your site as a content-addressed archive pinned on every node with the same CID, manages mutable `ipns://` names via a master-key-derived per-site key, keeps public-gateway caches warm, and emits CI, all over the nodes' bearer-guarded Kubo RPC API. Hetzner is the first host; other hosts sit behind a provider seam.
4
4
 
5
- `pinnace` is a TypeScript CLI **and** library: the core owns all logic (build CAR, deploy, derive keys, generate cloud-init, emit CI, report status); the `pinnace` bin is a thin wrapper so the same operations are usable as a TypeScript API.
5
+ `pinnace` is both a **CLI** and a **library**: the core owns all logic and the `pinnace` bin is a thin wrapper, so every operation is equally usable as a TypeScript API.
6
6
 
7
- See `../../CONTEXT.md` for the domain glossary and `../../docs/adr/` for architectural decisions.
7
+ ## Install
8
8
 
9
- ## Status
9
+ ```sh
10
+ npm install -g pinnace
11
+ # or, per-project:
12
+ npm install pinnace
13
+ ```
10
14
 
11
- Scaffold. Feature slices are being built as tracer-bullet tasks (see `../../work/tasks/`).
15
+ Requires Node >= 22.
16
+
17
+ ## Mental model
18
+
19
+ - **node** (box): a self-owned server running the Kubo IPFS daemon, reached ONLY via its Kubo RPC API (`POST /api/v0/...`, bearer-token guarded, fronted by Caddy over HTTPS). Swarm port 4001 is open so public gateways can dial it; the raw RPC (5001) is never exposed.
20
+ - **publisher / replica**: exactly one **publisher** per shared IPNS name holds the derived key, signs + refreshes the record, and exports the raw signed record. Keyless **replicas** pin the same CID and re-announce the publisher's record (falling back to a cached copy if the publisher is down). This is the failover model: the name stays resolvable within the record's validity window even if the publisher dies.
21
+ - **CID / CAR**: your site is built client-side into a CAR (Content Addressable aRchive) whose root is the site's UnixFS directory; the same CAR is imported into every node so they all serve the identical **CID**.
22
+ - **master key -> per-site IPNS key**: one operator-held secret (env-only, never on a node, never in the config file) deterministically derives each site's IPNS key: `HKDF-SHA256(master, info = "pinnace:ipns:v1:" + id)` -> ed25519 seed -> the `k51...` IPNS name. Names are recoverable from the master alone; provisioning is stateless. This is a frozen contract (see the ADRs).
23
+ - **site `id`**: one value per site, used as BOTH its MFS entry (`/sites/<id>`) AND the key-derivation input. Pick anything stable (e.g. `mysite`, or `ronan.eth`).
24
+ - **mode**: per-site `ipfs` (land + pin + MFS only; you point a contenthash at `ipfs://<cid>` per deploy) or `ipns` (also publish/refresh; point it at `ipns://<id>` once).
25
+ - **gateway warming**: re-fetching each site's CID through public gateways so their caches stay hot; sites are auto-discovered from MFS.
26
+
27
+ ## Configuration + secrets
28
+
29
+ Every setting resolves **CLI arg > env (via `ldenv`) > `pinnace.json`**.
30
+
31
+ `pinnace.json` holds only NON-secret structure (commit-safe):
32
+
33
+ ```json
34
+ {
35
+ "hosts": [
36
+ { "name": "publisher", "endpoint": "https://ipfs-publisher.example.com", "role": "publisher" },
37
+ { "name": "replica", "endpoint": "https://ipfs-replica-01.example.com", "role": "replica",
38
+ "publisherEndpoint": "https://ipfs-dash.example.com" }
39
+ ],
40
+ "sites": [
41
+ { "id": "mysite", "mode": "ipns", "sourceDir": "./site" }
42
+ ]
43
+ }
44
+ ```
45
+
46
+ Secrets are **env-only, never in the config file** (structurally: the resolver has no file path for them). Each host's bearer token is read from `PINNACE_HOST_<NAME>_TOKEN` (the name upper-cased), and the master from `PINNACE_MASTER`:
47
+
48
+ ```sh
49
+ # .env.local (git-ignored) — the ONLY place secrets live
50
+ PINNACE_MASTER=<your high-entropy master secret>
51
+ PINNACE_HOST_PUBLISHER_TOKEN=<publisher bearer token>
52
+ PINNACE_HOST_REPLICA_TOKEN=<replica bearer token>
53
+ ```
54
+
55
+ A missing token fails loud (naming the exact env var), never a silent empty token. Point the CLI at a config anywhere with `--config <path>`.
56
+
57
+ ## The end-to-end setup
58
+
59
+ The full flow, from zero to a redundant, failover-capable IPNS site. Values below match the config above; substitute your own domains.
60
+
61
+ ### 1. Pick tokens + an id
62
+
63
+ ```sh
64
+ export PINNACE_HOST_PUBLISHER_TOKEN=$(openssl rand -hex 32)
65
+ export PINNACE_HOST_REPLICA_TOKEN=$(openssl rand -hex 32)
66
+ # choose one id for the site, used as both the MFS entry and the key input
67
+ ```
68
+
69
+ ### 2. Generate cloud-init for each box
70
+
71
+ `provision` emits ready-to-paste cloud-init to stdout (it is per-box and arg-driven; it does not read `pinnace.json`). Give the publisher a `--dashboard-domain`: that vhost serves the exported IPNS records at `/records/` for replicas to fetch.
72
+
73
+ ```sh
74
+ # publisher
75
+ pinnace provision --host hetzner --role publisher \
76
+ --api-domain ipfs-publisher.example.com \
77
+ --dashboard-domain ipfs-dash.example.com \
78
+ --acme-email you@example.com \
79
+ --bearer-token "$PINNACE_HOST_PUBLISHER_TOKEN" > cloud-init-publisher.yaml
80
+
81
+ # replica (points at the publisher's DASHBOARD as its records endpoint)
82
+ pinnace provision --host hetzner --role replica \
83
+ --api-domain ipfs-replica-01.example.com \
84
+ --acme-email you@example.com \
85
+ --bearer-token "$PINNACE_HOST_REPLICA_TOKEN" \
86
+ --publisher-endpoint https://ipfs-dash.example.com > cloud-init-replica.yaml
87
+ ```
88
+
89
+ The emitted cloud-init stands up a hardened node: Kubo as a systemd unit (discoverability tuned so gateways find it), ufw opening 4001 TCP+UDP + 80/443 (never 5001), Caddy HTTPS + bearer API proxy, and it installs a pinned `pinnace` on the box and schedules the on-box agent (`pinnace node republish|mirror|warm|status`) on role-gated systemd timers. The publisher's `republish` timer exports signed records to the dashboard's `/records/`; the replica's `mirror` timer fetches + re-announces them, falling back to cache on outage.
90
+
91
+ ### 3. Create the boxes + DNS
92
+
93
+ Create two servers (e.g. Hetzner Debian 13 / CX22), each with its `cloud-init-*.yaml` as user-data. Then point DNS at their IPv4s so Caddy can obtain certificates:
94
+
95
+ ```
96
+ A ipfs-publisher <publisher IP>
97
+ A ipfs-replica-01 <replica IP>
98
+ A ipfs-dash <publisher IP> # the records/dashboard vhost
99
+ ```
100
+
101
+ Verify each API answers once DNS + certs are up (bearer required):
102
+
103
+ ```sh
104
+ curl -sS -X POST https://ipfs-publisher.example.com/api/v0/id \
105
+ -H "Authorization: Bearer $PINNACE_HOST_PUBLISHER_TOKEN"
106
+ ```
107
+
108
+ ### 4. Derive the IPNS id (optional, before first deploy)
109
+
110
+ Print a site's `k51...` id from the master + id with no deploy or network, so you can set a contenthash ahead of time:
111
+
112
+ ```sh
113
+ pinnace --config pinnace.json derive mysite
114
+ ```
115
+
116
+ ### 5. Deploy + provision the publisher key
117
+
118
+ ```sh
119
+ # build one CAR, import the same CID into every node, place it in MFS
120
+ pinnace --config pinnace.json deploy --mode ipns ./site mysite
121
+
122
+ # import the derived key onto the publisher (and flip its role to publisher)
123
+ pinnace --config pinnace.json promote mysite --host publisher
124
+ ```
125
+
126
+ After this the on-box timers run the failover loop automatically: the publisher re-signs + exports the record, replicas mirror + re-announce it, and if the publisher goes down the replicas keep the name alive from their cached record within its validity window.
127
+
128
+ ### 6. Check it
129
+
130
+ ```sh
131
+ pinnace --config pinnace.json status # per-site CID / IPNS id / announce / gateway-serves
132
+ curl -sS https://ipfs-dash.example.com/records/mysite.ipns-record # the exported signed record
133
+ ```
134
+
135
+ ## Command reference
136
+
137
+ | Command | What it does |
138
+ | --- | --- |
139
+ | `pinnace provision --host hetzner --role <publisher\|replica> --api-domain <d> --acme-email <e> --bearer-token <t> [--dashboard-domain <d>] [--publisher-endpoint <url>]` | Emit a node's cloud-init YAML to stdout. |
140
+ | `pinnace deploy [--mode ipfs\|ipns] <dir> <id>` | Build one CAR, import the same CID into every configured node, pin + place in MFS; in `ipns` mode publish on the publisher. |
141
+ | `pinnace promote <id> [--host <name>]` | Derive the per-site key from the master and import it onto the host, making it the publisher (also the replica-promotion path). |
142
+ | `pinnace derive <id>` (alias `ipns-id`) | Print a site's `k51...` IPNS id from master + id, no deploy/network. |
143
+ | `pinnace status` | Per-site report across nodes: CID, IPNS id, network-announce, gateway-serves. |
144
+ | `pinnace install-ci --system github --build-command <c> --output-dir <d>` | Emit a deploy CI workflow and report the secrets/vars to set. |
145
+ | `pinnace site <list\|add\|remove> ...` | Manage the sites a node serves (MFS entries + pins). |
146
+ | `pinnace node <republish\|mirror\|warm\|status>` | The on-box agent verbs (run by the box's systemd timers; role-gated). |
147
+
148
+ Global: `--config <path>` selects the `pinnace.json` (default `./pinnace.json`); a named-but-missing path fails loud.
149
+
150
+ ## Library use
151
+
152
+ Every operation is exported from the package core, so the same things are callable as a TypeScript API:
153
+
154
+ ```ts
155
+ import {deriveIpnsId, buildCar, resolveConfig, KuboRpcClient} from 'pinnace';
156
+ ```
157
+
158
+ ## Design notes / decisions
159
+
160
+ Durable architectural decisions live in [`docs/adr/`](../../docs/adr/) in the repo, notably: the frozen master-key -> IPNS KDF; that client-side key derivation is NOT client-side record signing (the node signs); and the boundary that Kubo owns pinning + provider-record freshness while the same `pinnace` binary runs the recurring on-box loop.
12
161
 
13
162
  ## License
14
163
 
15
- AGPL-3.0-only. See `../../LICENSE`.
164
+ AGPL-3.0-only.
package/dist/cli/run.d.ts CHANGED
@@ -1,3 +1,7 @@
1
+ import { type NodeVerb, type NodeCommandContext, type NodeCommandResult } from '../node/node-commands.js';
2
+ import { type ListSitesInput, type SiteListing, type RemoveSiteInput, type RemoveSiteResult, type AddSiteInput, type AddSiteResult } from '../site/site-management.js';
3
+ import { type PromoteReplicaInput, type PromoteReplicaResult } from '../publisher/record-sequence.js';
4
+ import { type DeriveIpnsInput as DeriveIpnsKeyInput, type DerivedIpnsKey } from '../derive/ipns-key-derivation.js';
1
5
  import { type ProvisionInput, type ProvisionResult } from '../provision/cloud-init.js';
2
6
  import { type DeployInput, type DeployResult } from '../deploy/deploy.js';
3
7
  import { type EmitCiInput, type EmittedCi } from '../ci/ci-emit.js';
@@ -22,6 +26,18 @@ export interface ClientDeps {
22
26
  statusReport(input: StatusReportInput): Promise<StatusReport>;
23
27
  /** `derive` -> the master + site `id` -> IPNS id derivation (no deploy). */
24
28
  deriveIpnsId(input: DeriveIpnsInput): string;
29
+ /** `node <verb>` -> the on-box command runner (context assembled by the CLI). */
30
+ runNodeCommand(verb: NodeVerb, ctx: NodeCommandContext): Promise<NodeCommandResult>;
31
+ /** `site list` -> enumerate the node's MFS sites. */
32
+ listSites(input: ListSitesInput): Promise<SiteListing[]>;
33
+ /** `site remove` -> drop an MFS site + unpin its content. */
34
+ removeSite(input: RemoveSiteInput): Promise<RemoveSiteResult>;
35
+ /** `site add` -> place an already-imported CID into MFS as a site. */
36
+ addSite(input: AddSiteInput): Promise<AddSiteResult>;
37
+ /** `promote` -> derive the per-site key material from the master + `id`. */
38
+ deriveIpnsKey(input: DeriveIpnsKeyInput): DerivedIpnsKey;
39
+ /** `promote` -> import the key + flip the node's role to publisher (story 14). */
40
+ promoteReplicaToPublisher(input: PromoteReplicaInput): Promise<PromoteReplicaResult>;
25
41
  }
26
42
  /**
27
43
  * The CLI run context: the injectable env/config/output/core seams. Everything
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"AA0BA,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,eAAe,EAEpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAEN,KAAK,WAAW,EAChB,KAAK,YAAY,EAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEN,KAAK,WAAW,EAChB,KAAK,SAAS,EAEd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEN,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAEN,KAAK,eAAe,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAKN,KAAK,iBAAiB,EACtB,KAAK,SAAS,EAId,MAAM,gCAAgC,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IAC1B,+CAA+C;IAC/C,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAAC;IAClD,+CAA+C;IAC/C,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAClD,+CAA+C;IAC/C,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IACtC,8CAA8C;IAC9C,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9D,4EAA4E;IAC5E,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC;CAC7C;AAWD;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IAC1B,iFAAiF;IACjF,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,iBAAiB,CAAC;IACtD,qEAAqE;IACrE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,iDAAiD;IACjD,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AA8CD;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAExC,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;gBADtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,OAAO,EAC/B,KAAK,CAAC,EAAE,OAAO;CAMhB;AAoBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,GAAG,CACxB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,UAAe,GACtB,OAAO,CAAC,MAAM,CAAC,CAkDjB"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
package/dist/cli/run.js CHANGED
@@ -15,14 +15,22 @@
15
15
  * read or mutated — mirroring the `NodeCommandOps` injectable-ops pattern in
16
16
  * node-commands and the explicit-`env` resolver in config-resolution).
17
17
  *
18
- * The on-box `pinnace node <verb>` and the `pinnace site <verb>` namespaces are
19
- * validated here for surface coherence (one CLI), but their full dispatch is
20
- * wired by their own tasks (node-agent-commands, site-management).
18
+ * The on-box `pinnace node <verb>` and the `pinnace site <verb>` namespaces,
19
+ * the `promote` verb, dispatch through the SAME {@link RunContext}/
20
+ * {@link ClientDeps} seam (they are NOT a forked dispatch idiom): the on-box
21
+ * `node` verbs assemble a {@link NodeCommandContext} from the box env
22
+ * (`/etc/pinnace-node.env`, exported into `process.env` by the systemd timer's
23
+ * `EnvironmentFile`) and call the core `runNodeCommand`; `site`/`promote`
24
+ * assemble a per-host {@link KuboRpcClient} from the resolved config and call
25
+ * the site / promote core.
21
26
  */
22
27
  import { readFileSync } from 'node:fs';
23
28
  import { name } from '../index.js';
24
- import { NODE_VERBS } from '../node/node-commands.js';
25
- import { SITE_VERBS } from '../site/site-management.js';
29
+ import { NODE_VERBS, runNodeCommand as coreRunNodeCommand, } from '../node/node-commands.js';
30
+ import { SITE_VERBS, listSites as coreListSites, removeSite as coreRemoveSite, addSite as coreAddSite, } from '../site/site-management.js';
31
+ import { makeStatusOp } from '../status/status-report.js';
32
+ import { promoteReplicaToPublisher as corePromoteReplicaToPublisher, } from '../publisher/record-sequence.js';
33
+ import { deriveIpnsKey as coreDeriveIpnsKey, } from '../derive/ipns-key-derivation.js';
26
34
  import { KuboRpcClient } from '../rpc/kubo-rpc-client.js';
27
35
  import { provision as coreProvision, } from '../provision/cloud-init.js';
28
36
  import { deploy as coreDeploy, } from '../deploy/deploy.js';
@@ -37,6 +45,12 @@ const DEFAULT_DEPS = {
37
45
  emitCi: coreEmitCi,
38
46
  statusReport: coreStatusReport,
39
47
  deriveIpnsId: coreDeriveIpnsId,
48
+ runNodeCommand: coreRunNodeCommand,
49
+ listSites: coreListSites,
50
+ removeSite: coreRemoveSite,
51
+ addSite: coreAddSite,
52
+ deriveIpnsKey: coreDeriveIpnsKey,
53
+ promoteReplicaToPublisher: corePromoteReplicaToPublisher,
40
54
  };
41
55
  /**
42
56
  * Load a config file.
@@ -163,6 +177,9 @@ export async function run(argv, context = {}) {
163
177
  if (command === 'derive' || command === 'ipns-id') {
164
178
  return runDerive(rest, rc);
165
179
  }
180
+ if (command === 'promote') {
181
+ return runPromote(rest, rc);
182
+ }
166
183
  rc.err(`${name()}: unknown command '${command}'`);
167
184
  return 1;
168
185
  }
@@ -228,9 +245,11 @@ function parseArgs(argv) {
228
245
  // ---------------------------------------------------------------------------
229
246
  /**
230
247
  * `provision --host <h> --api-domain <d> --acme-email <e> --bearer-token <t>
231
- * --role <r> [...]` -> core {@link ClientDeps.provision}. Purely arg-driven
232
- * (provisioning inputs are per-box and not stored in `pinnace.json`); prints the
233
- * generated cloud-init to stdout.
248
+ * --role <r> [--pinnace-version <v>] [--node-major <n>] [--kubo-version <v>]
249
+ * [...]` -> core {@link ClientDeps.provision}. Purely arg-driven (provisioning
250
+ * inputs are per-box and not stored in `pinnace.json`); prints the generated
251
+ * cloud-init to stdout. The pinned pinnace/Node/Kubo versions default to the
252
+ * generator's named knobs and are overridable per-box via these flags.
234
253
  */
235
254
  function runProvision(argv, rc) {
236
255
  const { flags } = parseArgs(argv);
@@ -265,6 +284,12 @@ function runProvision(argv, rc) {
265
284
  input.dashboardDomain = flags['dashboard-domain'];
266
285
  if (flags['publisher-endpoint'])
267
286
  input.publisherEndpoint = flags['publisher-endpoint'];
287
+ if (flags['kubo-version'])
288
+ input.kuboVersion = flags['kubo-version'];
289
+ if (flags['pinnace-version'])
290
+ input.pinnaceVersion = flags['pinnace-version'];
291
+ if (flags['node-major'])
292
+ input.nodeMajor = flags['node-major'];
268
293
  const result = rc.deps.provision(input);
269
294
  rc.out(result.cloudInit.contents);
270
295
  return 0;
@@ -467,14 +492,19 @@ function cliOverridesFromFlags(flags) {
467
492
  return cli;
468
493
  }
469
494
  /**
470
- * Parse `pinnace site <verb>` and validate the verb. The full context (Kubo
471
- * client from config-resolution, the site name / CID args) is assembled by the
472
- * CLI wiring in the site-management task; this thin router validates the verb
473
- * belongs to the `site` namespace. The three verbs (list/remove/add) are
474
- * implemented in `../site/site-management.ts`.
495
+ * `pinnace site <verb> [args] [--host <name>]` -> the site core
496
+ * ({@link ClientDeps.listSites}/{@link ClientDeps.removeSite}/
497
+ * {@link ClientDeps.addSite}). Assembles a per-host {@link KuboRpcClient} from
498
+ * the resolved config (endpoint) + the host's env-only token, then dispatches:
499
+ * - `list` -> listSites({client})
500
+ * - `remove <id>` -> removeSite({client, id})
501
+ * - `add <id> <cid>` -> addSite({client, id, cid})
502
+ * The `--host <name>` selects which configured node to act on; it may be
503
+ * omitted only when the config has exactly one host (see {@link selectHost}).
475
504
  */
476
- function runSiteCli(argv, rc) {
477
- const [verb] = argv;
505
+ async function runSiteCli(argv, rc) {
506
+ const { flags, positionals } = parseArgs(argv);
507
+ const [verb, ...verbArgs] = positionals;
478
508
  if (!verb) {
479
509
  rc.err(`pinnace site: expected a verb (${SITE_VERBS.join(', ')})`);
480
510
  return 1;
@@ -483,15 +513,55 @@ function runSiteCli(argv, rc) {
483
513
  rc.err(`pinnace site: unknown verb '${verb}'; expected one of ${SITE_VERBS.join(', ')}`);
484
514
  return 1;
485
515
  }
516
+ const cli = cliOverridesFromFlags(flags);
517
+ const cfg = resolveConfig({ file: rc.file, env: rc.env, cli });
518
+ const client = buildHostClient('pinnace site', flags['host'], cfg, rc, cli);
519
+ if (!client)
520
+ return 1; // buildHostClient already emitted the loud error.
521
+ if (verb === 'list') {
522
+ const sites = await rc.deps.listSites({ client });
523
+ for (const site of sites) {
524
+ rc.out(`${site.id}: cid ${site.cid}${site.ipns ? ` ipns ${site.ipns}` : ''}`);
525
+ }
526
+ return 0;
527
+ }
528
+ if (verb === 'remove') {
529
+ const [id] = verbArgs;
530
+ if (!id) {
531
+ rc.err('pinnace site remove: usage: pinnace site remove <id> [--host <name>]');
532
+ return 1;
533
+ }
534
+ const result = await rc.deps.removeSite({ client, id });
535
+ rc.out(`removed ${result.id}${result.cid ? ` (cid ${result.cid}, unpinned=${result.unpinned})` : ''}`);
536
+ return 0;
537
+ }
538
+ // verb === 'add'
539
+ const [id, cid] = verbArgs;
540
+ if (!id || !cid) {
541
+ rc.err('pinnace site add: usage: pinnace site add <id> <cid> [--host <name>]');
542
+ return 1;
543
+ }
544
+ const result = await rc.deps.addSite({ client, id, cid });
545
+ rc.out(`added ${result.id} -> ${result.cid}`);
486
546
  return 0;
487
547
  }
488
548
  /**
489
- * Parse `pinnace node <verb>` and validate the verb. The full on-box context
490
- * (local Kubo client, role, on-box paths) is assembled by the cloud-init /
491
- * config-resolution wiring in the node-agent-commands task; this thin router
492
- * only validates the verb belongs to the `node` namespace.
549
+ * `pinnace node <verb>` -> the on-box command core ({@link
550
+ * ClientDeps.runNodeCommand}). This is the load-bearing on-box wiring: the verb
551
+ * runs ON a provisioned box (invoked by the systemd timer, whose
552
+ * `EnvironmentFile=/etc/pinnace-node.env` exports the box config into the
553
+ * environment {@link RunContext.env} reads). It assembles a
554
+ * {@link NodeCommandContext} from that env — a LOCAL Kubo client (127.0.0.1:5001
555
+ * + `RPC_BEARER_TOKEN`), the box `role` (`NODE_ROLE`), and the on-box paths
556
+ * (`RECORDS_DIR`/`CACHE_DIR`/`DASHBOARD_DIR`/`SITES_DIR`), the replica
557
+ * `PUBLISHER_ENDPOINT`, and the `WARM_GATEWAYS` list — and injects the OWNED
558
+ * `status` op ({@link makeStatusOp}, the real per-site announce/gateway report)
559
+ * so the production status path is not the thin default stub. It then invokes
560
+ * the core (NOT a validate-and-return-0). A live run proved that without this
561
+ * the `republish`/`mirror` timers are no-ops. The token is env-only and its
562
+ * absence is a LOUD, named error (never a silent empty bearer / 401).
493
563
  */
494
- function runNodeCli(argv, rc) {
564
+ async function runNodeCli(argv, rc) {
495
565
  const [verb] = argv;
496
566
  if (!verb) {
497
567
  rc.err(`pinnace node: expected a verb (${NODE_VERBS.join(', ')})`);
@@ -501,6 +571,161 @@ function runNodeCli(argv, rc) {
501
571
  rc.err(`pinnace node: unknown verb '${verb}'; expected one of ${NODE_VERBS.join(', ')}`);
502
572
  return 1;
503
573
  }
574
+ const env = rc.env;
575
+ const token = env['RPC_BEARER_TOKEN'];
576
+ if (!token) {
577
+ rc.err('pinnace node: RPC_BEARER_TOKEN not set — the on-box bearer is env-only ' +
578
+ '(read from /etc/pinnace-node.env); never a silent empty token');
579
+ return 1;
580
+ }
581
+ const role = env['NODE_ROLE'];
582
+ if (role !== 'publisher' && role !== 'replica') {
583
+ rc.err("pinnace node: NODE_ROLE must be 'publisher' or 'replica' " +
584
+ '(read from /etc/pinnace-node.env)');
585
+ return 1;
586
+ }
587
+ // The box's OWN daemon: the local Kubo RPC on 127.0.0.1:5001 (Caddy fronts it
588
+ // for external clients, but the on-box agent speaks to it directly).
589
+ const client = new KuboRpcClient({
590
+ baseUrl: 'http://127.0.0.1:5001',
591
+ token,
592
+ });
593
+ const ctx = {
594
+ client,
595
+ role,
596
+ // The production status path uses the OWNED status op (real announce +
597
+ // gateway report), not the thin defaultStatus stand-in.
598
+ ops: { status: makeStatusOp() },
599
+ };
600
+ if (env['SITES_DIR'])
601
+ ctx.sitesDir = env['SITES_DIR'];
602
+ if (env['RECORDS_DIR'])
603
+ ctx.recordsDir = env['RECORDS_DIR'];
604
+ if (env['CACHE_DIR'])
605
+ ctx.cacheDir = env['CACHE_DIR'];
606
+ if (env['DASHBOARD_DIR'])
607
+ ctx.dashboardDir = env['DASHBOARD_DIR'];
608
+ if (env['PUBLISHER_ENDPOINT'])
609
+ ctx.publisherEndpoint = env['PUBLISHER_ENDPOINT'];
610
+ const gateways = splitWarmGateways(env['WARM_GATEWAYS']);
611
+ if (gateways.length > 0)
612
+ ctx.gateways = gateways;
613
+ const result = await rc.deps.runNodeCommand(verb, ctx);
614
+ if (result.skipped) {
615
+ rc.out(`pinnace node ${verb}: skipped (${result.skippedReason})`);
616
+ return 0;
617
+ }
618
+ for (const site of result.sites) {
619
+ rc.out(` ${site.id}${site.cid ? ` cid ${site.cid}` : ''}${site.status ? ` (${site.status})` : ''}`);
620
+ }
504
621
  return 0;
505
622
  }
623
+ /**
624
+ * `pinnace promote <id> [--host <name>]` -> {@link
625
+ * ClientDeps.promoteReplicaToPublisher} (spec user story 14). Derives the
626
+ * per-site key from the env-only master + the site `id` (the KDF input,
627
+ * {@link ClientDeps.deriveIpnsKey}), assembles the chosen host's client, and
628
+ * promotes it: import the key + flip the role to publisher, recovering the name
629
+ * within the record's validity window without content downtime. The master is
630
+ * env-ONLY (never from `pinnace.json`); its absence is a LOUD error.
631
+ */
632
+ async function runPromote(argv, rc) {
633
+ const { flags, positionals } = parseArgs(argv);
634
+ const [siteId] = positionals;
635
+ if (!siteId) {
636
+ rc.err('pinnace promote: usage: pinnace promote <id> [--host <name>]');
637
+ return 1;
638
+ }
639
+ const master = resolveMasterSecret({ env: rc.env });
640
+ if (!master) {
641
+ rc.err('pinnace promote: master secret not set — export PINNACE_MASTER (env-only; never read from pinnace.json)');
642
+ return 1;
643
+ }
644
+ const cli = cliOverridesFromFlags(flags);
645
+ const cfg = resolveConfig({ file: rc.file, env: rc.env, cli });
646
+ const host = pickHost('pinnace promote', flags['host'], cfg, rc);
647
+ if (!host)
648
+ return 1;
649
+ const client = clientForHost('pinnace promote', host, rc, cli);
650
+ if (!client)
651
+ return 1;
652
+ // The single `id` IS the KDF input (no separate keyId), matching `derive`.
653
+ const id = cfg.sites.find((s) => s.id === siteId)?.id ?? siteId;
654
+ const derived = rc.deps.deriveIpnsKey({ master, keyId: id });
655
+ const result = await rc.deps.promoteReplicaToPublisher({
656
+ client,
657
+ currentRole: host.role,
658
+ keyName: id,
659
+ derived,
660
+ });
661
+ rc.out(`promoted ${result.keyName} to ${result.role}${result.ipns ? ` (ipns ${result.ipns})` : ''}`);
662
+ return 0;
663
+ }
664
+ // ---------------------------------------------------------------------------
665
+ // Host selection + client assembly (shared by site + promote).
666
+ // ---------------------------------------------------------------------------
667
+ /**
668
+ * Pick the configured host to act on. `--host <name>` selects it by name; it
669
+ * may be omitted ONLY when the config has exactly one host (the unambiguous
670
+ * case). Zero hosts, an unknown name, or an omitted name with several hosts is
671
+ * a LOUD, specific error (returns undefined after emitting it).
672
+ */
673
+ function pickHost(prefix, hostName, cfg, rc) {
674
+ if (cfg.hosts.length === 0) {
675
+ rc.err(`${prefix}: no hosts configured (add hosts to pinnace.json)`);
676
+ return undefined;
677
+ }
678
+ if (hostName) {
679
+ const match = cfg.hosts.find((h) => h.name === hostName);
680
+ if (!match) {
681
+ rc.err(`${prefix}: unknown host '${hostName}'; configured hosts: ${cfg.hosts
682
+ .map((h) => h.name)
683
+ .join(', ')}`);
684
+ return undefined;
685
+ }
686
+ return match;
687
+ }
688
+ if (cfg.hosts.length > 1) {
689
+ rc.err(`${prefix}: multiple hosts configured; pass --host <name> (one of ${cfg.hosts
690
+ .map((h) => h.name)
691
+ .join(', ')})`);
692
+ return undefined;
693
+ }
694
+ return cfg.hosts[0];
695
+ }
696
+ /**
697
+ * Build a {@link KuboRpcClient} for a chosen host, resolving its bearer token
698
+ * env-only (CLI > env, no file). A missing token is a LOUD, named error
699
+ * (returns undefined after emitting it).
700
+ */
701
+ function clientForHost(prefix, host, rc, cli) {
702
+ let token;
703
+ try {
704
+ token = resolveHostToken({ hostName: host.name, env: rc.env, cli });
705
+ }
706
+ catch (error) {
707
+ if (error instanceof MissingHostTokenError) {
708
+ rc.err(`${prefix}: ${error.message}`);
709
+ return undefined;
710
+ }
711
+ throw error;
712
+ }
713
+ return new KuboRpcClient({ baseUrl: host.endpoint, token });
714
+ }
715
+ /** Pick a host AND build its client in one step (the common site path). */
716
+ function buildHostClient(prefix, hostName, cfg, rc, cli) {
717
+ const host = pickHost(prefix, hostName, cfg, rc);
718
+ if (!host)
719
+ return undefined;
720
+ return clientForHost(prefix, host, rc, cli);
721
+ }
722
+ /** Split the space-separated `WARM_GATEWAYS` env value into a template list. */
723
+ function splitWarmGateways(value) {
724
+ if (!value)
725
+ return [];
726
+ return value
727
+ .split(/\s+/)
728
+ .map((s) => s.trim())
729
+ .filter(Boolean);
730
+ }
506
731
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
@@ -162,11 +162,15 @@ async function defaultWarm(ctx, sites) {
162
162
  return { sites: outcomes };
163
163
  }
164
164
  /**
165
- * Default `status`. Reuses the `status-report` core logic (injected via
166
- * {@link NodeCommandContext.ops}.status; this default is a thin stand-in until
167
- * that task lands) and writes the resulting report as `status.json` under the
168
- * box's dashboard directory ONLY. Reporting per-site CID / IPNS id happens in
169
- * the reused core; this wrapper just persists it where the dashboard reads.
165
+ * Default `status` a thin stand-in used ONLY when no `status` op is injected.
166
+ * The PRODUCTION on-box path (`pinnace node status`, wired in cli/run.ts's
167
+ * `runNodeCli`) injects the OWNED `status` op ({@link makeStatusOp} from
168
+ * status-report) via {@link NodeCommandContext.ops}.status, which is the real
169
+ * per-site CID/IPNS/announce/gateway report. This default remains as the
170
+ * seam's safe fallback (e.g. a direct `runNodeCommand` call that does not want
171
+ * the live external checks / a hermetic test that injects its own op), so a
172
+ * bare call still reports current CID + IPNS id without reaching the network.
173
+ * The dashboard write is done by the command layer ({@link runNodeCommand}).
170
174
  */
171
175
  async function defaultStatus(ctx, sites) {
172
176
  // Thin stand-in report until `status-report` supplies the owned op: current