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 +155 -6
- package/dist/cli/run.d.ts +16 -0
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +245 -20
- package/dist/cli/run.js.map +1 -1
- package/dist/node/node-commands.js +9 -5
- package/dist/node/node-commands.js.map +1 -1
- package/dist/provision/cloud-init.d.ts +25 -0
- package/dist/provision/cloud-init.d.ts.map +1 -1
- package/dist/provision/cloud-init.js +77 -7
- package/dist/provision/cloud-init.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/run.ts +336 -20
- package/src/node/node-commands.ts +9 -5
- package/src/provision/cloud-init.ts +102 -7
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
|
|
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
|
|
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
|
-
|
|
7
|
+
## Install
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
```sh
|
|
10
|
+
npm install -g pinnace
|
|
11
|
+
# or, per-project:
|
|
12
|
+
npm install pinnace
|
|
13
|
+
```
|
|
10
14
|
|
|
11
|
-
|
|
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.
|
|
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
|
package/dist/cli/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"
|
|
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
|
|
19
|
-
*
|
|
20
|
-
*
|
|
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> [
|
|
232
|
-
*
|
|
233
|
-
*
|
|
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
|
-
*
|
|
471
|
-
*
|
|
472
|
-
*
|
|
473
|
-
*
|
|
474
|
-
*
|
|
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
|
|
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
|
-
*
|
|
490
|
-
*
|
|
491
|
-
*
|
|
492
|
-
*
|
|
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
|
package/dist/cli/run.js.map
CHANGED
|
@@ -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
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
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
|