pinnace 0.0.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/LICENSE +661 -0
- package/README.md +164 -0
- package/dist/car/car-build.d.ts +26 -0
- package/dist/car/car-build.d.ts.map +1 -0
- package/dist/car/car-build.js +113 -0
- package/dist/car/car-build.js.map +1 -0
- package/dist/ci/ci-emit.d.ts +116 -0
- package/dist/ci/ci-emit.d.ts.map +1 -0
- package/dist/ci/ci-emit.js +190 -0
- package/dist/ci/ci-emit.js.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +17 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/run.d.ts +94 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +731 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/config/config-resolution.d.ts +186 -0
- package/dist/config/config-resolution.d.ts.map +1 -0
- package/dist/config/config-resolution.js +137 -0
- package/dist/config/config-resolution.js.map +1 -0
- package/dist/deploy/deploy.d.ts +121 -0
- package/dist/deploy/deploy.d.ts.map +1 -0
- package/dist/deploy/deploy.js +150 -0
- package/dist/deploy/deploy.js.map +1 -0
- package/dist/derive/ipns-key-derivation.d.ts +37 -0
- package/dist/derive/ipns-key-derivation.d.ts.map +1 -0
- package/dist/derive/ipns-key-derivation.js +130 -0
- package/dist/derive/ipns-key-derivation.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/node/node-commands.d.ts +115 -0
- package/dist/node/node-commands.d.ts.map +1 -0
- package/dist/node/node-commands.js +231 -0
- package/dist/node/node-commands.js.map +1 -0
- package/dist/provision/cloud-init.d.ts +162 -0
- package/dist/provision/cloud-init.d.ts.map +1 -0
- package/dist/provision/cloud-init.js +460 -0
- package/dist/provision/cloud-init.js.map +1 -0
- package/dist/publisher/key-import.d.ts +105 -0
- package/dist/publisher/key-import.d.ts.map +1 -0
- package/dist/publisher/key-import.js +76 -0
- package/dist/publisher/key-import.js.map +1 -0
- package/dist/publisher/record-sequence.d.ts +90 -0
- package/dist/publisher/record-sequence.d.ts.map +1 -0
- package/dist/publisher/record-sequence.js +250 -0
- package/dist/publisher/record-sequence.js.map +1 -0
- package/dist/rpc/kubo-rpc-client.d.ts +154 -0
- package/dist/rpc/kubo-rpc-client.d.ts.map +1 -0
- package/dist/rpc/kubo-rpc-client.js +207 -0
- package/dist/rpc/kubo-rpc-client.js.map +1 -0
- package/dist/rpc/mock-kubo.d.ts +87 -0
- package/dist/rpc/mock-kubo.d.ts.map +1 -0
- package/dist/rpc/mock-kubo.js +129 -0
- package/dist/rpc/mock-kubo.js.map +1 -0
- package/dist/site/site-management.d.ts +126 -0
- package/dist/site/site-management.d.ts.map +1 -0
- package/dist/site/site-management.js +123 -0
- package/dist/site/site-management.js.map +1 -0
- package/dist/status/status-report.d.ts +145 -0
- package/dist/status/status-report.d.ts.map +1 -0
- package/dist/status/status-report.js +192 -0
- package/dist/status/status-report.js.map +1 -0
- package/package.json +45 -2
- package/src/car/car-build.ts +135 -0
- package/src/ci/ci-emit.ts +284 -0
- package/src/cli/bin.ts +20 -0
- package/src/cli/run.ts +970 -0
- package/src/config/config-resolution.ts +264 -0
- package/src/deploy/deploy.ts +250 -0
- package/src/derive/ipns-key-derivation.ts +173 -0
- package/src/index.ts +146 -0
- package/src/node/node-commands.ts +395 -0
- package/src/provision/cloud-init.ts +646 -0
- package/src/publisher/key-import.ts +141 -0
- package/src/publisher/record-sequence.ts +336 -0
- package/src/rpc/kubo-rpc-client.ts +281 -0
- package/src/rpc/mock-kubo.ts +194 -0
- package/src/site/site-management.ts +241 -0
- package/src/status/status-report.ts +291 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config resolution for pinnace.
|
|
3
|
+
*
|
|
4
|
+
* Every setting resolves with precedence **CLI arg > env (via `ldenv`) >
|
|
5
|
+
* `pinnace.json`** (CONTEXT.md "config resolution"). This module owns the typed
|
|
6
|
+
* `pinnace.json` schema and the resolver.
|
|
7
|
+
*
|
|
8
|
+
* SECURITY INVARIANT (hard): the **master secret is env-only**. The resolver
|
|
9
|
+
* has NO file path for the master — a `master` field placed in `pinnace.json`
|
|
10
|
+
* is structurally impossible to surface here. Reading the master goes through
|
|
11
|
+
* {@link resolveMasterSecret}, which consults ONLY env. A compromised node or a
|
|
12
|
+
* leaked config file therefore cannot leak the master.
|
|
13
|
+
*
|
|
14
|
+
* `ldenv` is the env layer in production; to keep tests hermetic (and to keep
|
|
15
|
+
* the operator's real environment untouched), the resolver takes an explicit
|
|
16
|
+
* `env` record rather than reading `process.env` directly. A thin production
|
|
17
|
+
* caller passes `ldenv`-loaded values in.
|
|
18
|
+
*
|
|
19
|
+
* SECOND ENV-ONLY SECRET (the bearer TOKEN). A node's bearer `token` is the
|
|
20
|
+
* SAME CLASS as the master: a secret that must NEVER live in `pinnace.json`.
|
|
21
|
+
* So {@link HostConfig} has NO `token` field at all (structurally impossible to
|
|
22
|
+
* leak one via config, exactly like the master), and the token is resolved
|
|
23
|
+
* ONLY from `CLI > env(PINNACE_HOST_<NAME>_TOKEN)` by {@link resolveHostToken}.
|
|
24
|
+
* A host with no resolvable token is a LOUD, specific error naming the missing
|
|
25
|
+
* env var (never a silent `""` that turns into a downstream 401).
|
|
26
|
+
*
|
|
27
|
+
* EAGER-VS-LAZY (decided): the token failure is LAZY, not eager. `resolveConfig`
|
|
28
|
+
* does NOT demand a token for every configured host up front (a host no
|
|
29
|
+
* operation touches must not block unrelated work); instead a caller resolves a
|
|
30
|
+
* host's token via {@link resolveHostToken} at the moment it actually builds
|
|
31
|
+
* that host's client (deploy target / status client), so only hosts an
|
|
32
|
+
* operation USES must have a token set. See the `## Decisions` block in the
|
|
33
|
+
* done record.
|
|
34
|
+
*/
|
|
35
|
+
/** A node/host role. */
|
|
36
|
+
export type HostRole = 'publisher' | 'replica';
|
|
37
|
+
/** A per-site publish mode. */
|
|
38
|
+
export type SiteMode = 'ipfs' | 'ipns';
|
|
39
|
+
/**
|
|
40
|
+
* A host/node entry as it appears in `pinnace.json`.
|
|
41
|
+
*
|
|
42
|
+
* NOTE there is DELIBERATELY no `token` field: the bearer token is env-only by
|
|
43
|
+
* construction (see the module doc), resolved via {@link resolveHostToken}. A
|
|
44
|
+
* stray `token` in a file object is ignored, exactly as a stray `master` is.
|
|
45
|
+
*/
|
|
46
|
+
export interface HostConfig {
|
|
47
|
+
/** Stable host name (used to key env/CLI token + endpoint overrides). */
|
|
48
|
+
name: string;
|
|
49
|
+
/** The node's Kubo RPC endpoint. */
|
|
50
|
+
endpoint: string;
|
|
51
|
+
/** publisher (holds a key, signs) or replica (keyless, re-announces). */
|
|
52
|
+
role: HostRole;
|
|
53
|
+
/** For replicas: where to fetch the publisher's exported record. */
|
|
54
|
+
publisherEndpoint?: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* A site entry as it appears in `pinnace.json`.
|
|
58
|
+
*
|
|
59
|
+
* A site is identified by ONE value: {@link SiteConfig.id}. It is BOTH the MFS
|
|
60
|
+
* entry (`/sites/<id>`) AND the KDF input fed to the frozen derivation (see
|
|
61
|
+
* `../derive/ipns-key-derivation.ts` / ADR-0001). There is no separate `name`
|
|
62
|
+
* and no separate `keyId` — one `id` is the whole identity surface.
|
|
63
|
+
*/
|
|
64
|
+
export interface SiteConfig {
|
|
65
|
+
/**
|
|
66
|
+
* The site's SINGLE identifier: both its MFS entry (`/sites/<id>`) and the KDF
|
|
67
|
+
* input for its per-site IPNS key. Frozen once a name is live (changing it
|
|
68
|
+
* moves the derived id, per ADR-0001). NOT the ENS name.
|
|
69
|
+
*/
|
|
70
|
+
id: string;
|
|
71
|
+
/** ipfs (land+pin+MFS) or ipns (also publish/refresh). */
|
|
72
|
+
mode: SiteMode;
|
|
73
|
+
/** The site source directory to build a CAR from. */
|
|
74
|
+
sourceDir: string;
|
|
75
|
+
/**
|
|
76
|
+
* OPTIONAL eth.limo-warming hint: when set, the site is ALSO warmed via
|
|
77
|
+
* `https://<ensName>.limo`. It is NOT part of identity and NEVER an input to
|
|
78
|
+
* the key derivation — purely an opt-in warming lever.
|
|
79
|
+
*/
|
|
80
|
+
ensName?: string;
|
|
81
|
+
/**
|
|
82
|
+
* An optional externally-owned key (the escape hatch): when set, this site's
|
|
83
|
+
* IPNS key is NOT derived from the master but supplied here.
|
|
84
|
+
*/
|
|
85
|
+
externalKey?: string;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The typed `pinnace.json` shape. Note there is DELIBERATELY no `master` field
|
|
89
|
+
* in the resolved config — see the module doc. If a raw file object carries a
|
|
90
|
+
* stray `master`, it is ignored (never copied into the resolved config).
|
|
91
|
+
*/
|
|
92
|
+
export interface PinnaceConfigFile {
|
|
93
|
+
hosts?: HostConfig[];
|
|
94
|
+
sites?: SiteConfig[];
|
|
95
|
+
/** Public gateways to warm (dweb.link, eth.limo, ...). */
|
|
96
|
+
gateways?: string[];
|
|
97
|
+
}
|
|
98
|
+
/** The fully resolved config the rest of pinnace consumes. */
|
|
99
|
+
export interface ResolvedConfig {
|
|
100
|
+
hosts: HostConfig[];
|
|
101
|
+
sites: SiteConfig[];
|
|
102
|
+
gateways: string[];
|
|
103
|
+
}
|
|
104
|
+
/** An env record (name → value). In production these come from `ldenv`. */
|
|
105
|
+
export type EnvRecord = Record<string, string | undefined>;
|
|
106
|
+
/** CLI overrides. Keyed by host name for per-host values. */
|
|
107
|
+
export interface CliOverrides {
|
|
108
|
+
/** hostName → token override. */
|
|
109
|
+
hostToken?: Record<string, string>;
|
|
110
|
+
/** hostName → endpoint override. */
|
|
111
|
+
hostEndpoint?: Record<string, string>;
|
|
112
|
+
/** Gateways override (replaces the file/env list). */
|
|
113
|
+
gateways?: string[];
|
|
114
|
+
}
|
|
115
|
+
/** Inputs to {@link resolveConfig}. */
|
|
116
|
+
export interface ResolveConfigInput {
|
|
117
|
+
/** The parsed `pinnace.json` object (lowest precedence). */
|
|
118
|
+
file: PinnaceConfigFile;
|
|
119
|
+
/** The env layer (middle precedence). */
|
|
120
|
+
env: EnvRecord;
|
|
121
|
+
/** CLI args (highest precedence). */
|
|
122
|
+
cli: CliOverrides;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Resolve the full pinnace config with precedence CLI arg > env > file.
|
|
126
|
+
*
|
|
127
|
+
* A stray `master` field on the file object is NEVER read here — the master is
|
|
128
|
+
* env-only via {@link resolveMasterSecret}.
|
|
129
|
+
*/
|
|
130
|
+
export declare function resolveConfig(input: ResolveConfigInput): ResolvedConfig;
|
|
131
|
+
/**
|
|
132
|
+
* The env var name a host's bearer token is read from: `PINNACE_HOST_<NAME>_TOKEN`
|
|
133
|
+
* (uppercased, non-alphanumerics collapsed to `_`). Exposed so error messages
|
|
134
|
+
* and callers name the EXACT var an operator must set.
|
|
135
|
+
*/
|
|
136
|
+
export declare function hostTokenEnvVar(hostName: string): string;
|
|
137
|
+
/**
|
|
138
|
+
* A loud, specific failure when a host has no resolvable bearer token. Names the
|
|
139
|
+
* exact missing env var so the operator knows precisely what to set (never a
|
|
140
|
+
* silent empty token / downstream 401).
|
|
141
|
+
*/
|
|
142
|
+
export declare class MissingHostTokenError extends Error {
|
|
143
|
+
/** The host whose token could not be resolved. */
|
|
144
|
+
readonly hostName: string;
|
|
145
|
+
/** The exact env var that would supply it. */
|
|
146
|
+
readonly envVar: string;
|
|
147
|
+
constructor(
|
|
148
|
+
/** The host whose token could not be resolved. */
|
|
149
|
+
hostName: string,
|
|
150
|
+
/** The exact env var that would supply it. */
|
|
151
|
+
envVar: string);
|
|
152
|
+
}
|
|
153
|
+
/** Inputs to {@link resolveHostToken}. */
|
|
154
|
+
export interface ResolveHostTokenInput {
|
|
155
|
+
/** The host whose token to resolve (its `name` keys the env/CLI override). */
|
|
156
|
+
hostName: string;
|
|
157
|
+
/** The env layer (the ONLY file-less source of the token). */
|
|
158
|
+
env: EnvRecord;
|
|
159
|
+
/** CLI overrides (highest precedence): `hostToken[hostName]`. */
|
|
160
|
+
cli?: CliOverrides;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Resolve ONE host's bearer token with precedence `CLI > env` (there is
|
|
164
|
+
* DELIBERATELY no file layer — the token is env-only, like the master). Throws
|
|
165
|
+
* {@link MissingHostTokenError} (naming the exact env var) when neither layer
|
|
166
|
+
* supplies it, so a missing token is a LOUD config error, never a silent `""`.
|
|
167
|
+
*
|
|
168
|
+
* Callers invoke this LAZILY — only for hosts an operation actually uses (see
|
|
169
|
+
* the eager-vs-lazy decision in the module doc) — so a configured-but-unused
|
|
170
|
+
* host never blocks unrelated work.
|
|
171
|
+
*/
|
|
172
|
+
export declare function resolveHostToken(input: ResolveHostTokenInput): string;
|
|
173
|
+
/** Inputs to {@link resolveMasterSecret}. */
|
|
174
|
+
export interface ResolveMasterInput {
|
|
175
|
+
/** The env layer. This is the ONLY source of the master. */
|
|
176
|
+
env: EnvRecord;
|
|
177
|
+
/** The env var name to read (default `PINNACE_MASTER`). */
|
|
178
|
+
envVar?: string;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Resolve the master secret. It is read ONLY from env (there is deliberately no
|
|
182
|
+
* `file` parameter): the master must never come from `pinnace.json`. Returns
|
|
183
|
+
* undefined when the env var is unset.
|
|
184
|
+
*/
|
|
185
|
+
export declare function resolveMasterSecret(input: ResolveMasterInput): string | undefined;
|
|
186
|
+
//# sourceMappingURL=config-resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-resolution.d.ts","sourceRoot":"","sources":["../../src/config/config-resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config resolution for pinnace.
|
|
3
|
+
*
|
|
4
|
+
* Every setting resolves with precedence **CLI arg > env (via `ldenv`) >
|
|
5
|
+
* `pinnace.json`** (CONTEXT.md "config resolution"). This module owns the typed
|
|
6
|
+
* `pinnace.json` schema and the resolver.
|
|
7
|
+
*
|
|
8
|
+
* SECURITY INVARIANT (hard): the **master secret is env-only**. The resolver
|
|
9
|
+
* has NO file path for the master — a `master` field placed in `pinnace.json`
|
|
10
|
+
* is structurally impossible to surface here. Reading the master goes through
|
|
11
|
+
* {@link resolveMasterSecret}, which consults ONLY env. A compromised node or a
|
|
12
|
+
* leaked config file therefore cannot leak the master.
|
|
13
|
+
*
|
|
14
|
+
* `ldenv` is the env layer in production; to keep tests hermetic (and to keep
|
|
15
|
+
* the operator's real environment untouched), the resolver takes an explicit
|
|
16
|
+
* `env` record rather than reading `process.env` directly. A thin production
|
|
17
|
+
* caller passes `ldenv`-loaded values in.
|
|
18
|
+
*
|
|
19
|
+
* SECOND ENV-ONLY SECRET (the bearer TOKEN). A node's bearer `token` is the
|
|
20
|
+
* SAME CLASS as the master: a secret that must NEVER live in `pinnace.json`.
|
|
21
|
+
* So {@link HostConfig} has NO `token` field at all (structurally impossible to
|
|
22
|
+
* leak one via config, exactly like the master), and the token is resolved
|
|
23
|
+
* ONLY from `CLI > env(PINNACE_HOST_<NAME>_TOKEN)` by {@link resolveHostToken}.
|
|
24
|
+
* A host with no resolvable token is a LOUD, specific error naming the missing
|
|
25
|
+
* env var (never a silent `""` that turns into a downstream 401).
|
|
26
|
+
*
|
|
27
|
+
* EAGER-VS-LAZY (decided): the token failure is LAZY, not eager. `resolveConfig`
|
|
28
|
+
* does NOT demand a token for every configured host up front (a host no
|
|
29
|
+
* operation touches must not block unrelated work); instead a caller resolves a
|
|
30
|
+
* host's token via {@link resolveHostToken} at the moment it actually builds
|
|
31
|
+
* that host's client (deploy target / status client), so only hosts an
|
|
32
|
+
* operation USES must have a token set. See the `## Decisions` block in the
|
|
33
|
+
* done record.
|
|
34
|
+
*/
|
|
35
|
+
/** Uppercase + non-alphanumeric → `_`, for building env var names. */
|
|
36
|
+
function envKey(...parts) {
|
|
37
|
+
return parts
|
|
38
|
+
.map((p) => p.toUpperCase().replace(/[^A-Z0-9]+/g, '_'))
|
|
39
|
+
.join('_');
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolve the full pinnace config with precedence CLI arg > env > file.
|
|
43
|
+
*
|
|
44
|
+
* A stray `master` field on the file object is NEVER read here — the master is
|
|
45
|
+
* env-only via {@link resolveMasterSecret}.
|
|
46
|
+
*/
|
|
47
|
+
export function resolveConfig(input) {
|
|
48
|
+
const { file, env, cli } = input;
|
|
49
|
+
const hosts = (file.hosts ?? []).map((h) => {
|
|
50
|
+
const endpoint = cli.hostEndpoint?.[h.name] ??
|
|
51
|
+
env[envKey('PINNACE_HOST', h.name, 'ENDPOINT')] ??
|
|
52
|
+
h.endpoint;
|
|
53
|
+
// The token is NOT resolved here — it is env-only and resolved lazily, per
|
|
54
|
+
// host, at the moment an operation builds that host's client (see
|
|
55
|
+
// resolveHostToken + the module doc). Copy only the non-secret fields.
|
|
56
|
+
return {
|
|
57
|
+
name: h.name,
|
|
58
|
+
endpoint,
|
|
59
|
+
role: h.role,
|
|
60
|
+
...(h.publisherEndpoint !== undefined
|
|
61
|
+
? { publisherEndpoint: h.publisherEndpoint }
|
|
62
|
+
: {}),
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
const gateways = cli.gateways ?? splitList(env['PINNACE_GATEWAYS']) ?? file.gateways ?? [];
|
|
66
|
+
return {
|
|
67
|
+
hosts,
|
|
68
|
+
sites: file.sites ?? [],
|
|
69
|
+
gateways,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The env var name a host's bearer token is read from: `PINNACE_HOST_<NAME>_TOKEN`
|
|
74
|
+
* (uppercased, non-alphanumerics collapsed to `_`). Exposed so error messages
|
|
75
|
+
* and callers name the EXACT var an operator must set.
|
|
76
|
+
*/
|
|
77
|
+
export function hostTokenEnvVar(hostName) {
|
|
78
|
+
return envKey('PINNACE_HOST', hostName, 'TOKEN');
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* A loud, specific failure when a host has no resolvable bearer token. Names the
|
|
82
|
+
* exact missing env var so the operator knows precisely what to set (never a
|
|
83
|
+
* silent empty token / downstream 401).
|
|
84
|
+
*/
|
|
85
|
+
export class MissingHostTokenError extends Error {
|
|
86
|
+
hostName;
|
|
87
|
+
envVar;
|
|
88
|
+
constructor(
|
|
89
|
+
/** The host whose token could not be resolved. */
|
|
90
|
+
hostName,
|
|
91
|
+
/** The exact env var that would supply it. */
|
|
92
|
+
envVar) {
|
|
93
|
+
super(`host '${hostName}' has no token; set ${envVar} ` +
|
|
94
|
+
`(the token is env-only, never read from pinnace.json)`);
|
|
95
|
+
this.hostName = hostName;
|
|
96
|
+
this.envVar = envVar;
|
|
97
|
+
this.name = 'MissingHostTokenError';
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Resolve ONE host's bearer token with precedence `CLI > env` (there is
|
|
102
|
+
* DELIBERATELY no file layer — the token is env-only, like the master). Throws
|
|
103
|
+
* {@link MissingHostTokenError} (naming the exact env var) when neither layer
|
|
104
|
+
* supplies it, so a missing token is a LOUD config error, never a silent `""`.
|
|
105
|
+
*
|
|
106
|
+
* Callers invoke this LAZILY — only for hosts an operation actually uses (see
|
|
107
|
+
* the eager-vs-lazy decision in the module doc) — so a configured-but-unused
|
|
108
|
+
* host never blocks unrelated work.
|
|
109
|
+
*/
|
|
110
|
+
export function resolveHostToken(input) {
|
|
111
|
+
const envVar = hostTokenEnvVar(input.hostName);
|
|
112
|
+
const token = input.cli?.hostToken?.[input.hostName] ?? input.env[envVar];
|
|
113
|
+
if (token === undefined || token === '') {
|
|
114
|
+
throw new MissingHostTokenError(input.hostName, envVar);
|
|
115
|
+
}
|
|
116
|
+
return token;
|
|
117
|
+
}
|
|
118
|
+
/** Split a comma-separated env list, or return undefined if unset/empty. */
|
|
119
|
+
function splitList(value) {
|
|
120
|
+
if (!value)
|
|
121
|
+
return undefined;
|
|
122
|
+
const list = value
|
|
123
|
+
.split(',')
|
|
124
|
+
.map((s) => s.trim())
|
|
125
|
+
.filter(Boolean);
|
|
126
|
+
return list.length > 0 ? list : undefined;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Resolve the master secret. It is read ONLY from env (there is deliberately no
|
|
130
|
+
* `file` parameter): the master must never come from `pinnace.json`. Returns
|
|
131
|
+
* undefined when the env var is unset.
|
|
132
|
+
*/
|
|
133
|
+
export function resolveMasterSecret(input) {
|
|
134
|
+
const envVar = input.envVar ?? 'PINNACE_MASTER';
|
|
135
|
+
return input.env[envVar];
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=config-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-resolution.js","sourceRoot":"","sources":["../../src/config/config-resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host-agnostic **deploy** — build one CAR and land the SAME CID on every node.
|
|
3
|
+
*
|
|
4
|
+
* This is the core operation user stories 4, 6, 7 describe: build a site's
|
|
5
|
+
* **CAR** ONCE (via the `car-build` seam), then fan out across every configured
|
|
6
|
+
* **node** (each with its OWN bearer token) so all nodes serve the IDENTICAL
|
|
7
|
+
* **CID** with no single point of failure. Per node the flow is: import + pin
|
|
8
|
+
* the CAR (`dag/import?pin-roots=true`), then place it in MFS at `/sites/<id>`
|
|
9
|
+
* (mkdir parents / rm old / cp `/ipfs/<cid>`) so `gateway warming`, IPNS
|
|
10
|
+
* republish, and `status` auto-discover it. Deploy speaks ONLY the Kubo RPC seam
|
|
11
|
+
* ({@link KuboRpcClient}); it is not host-specific.
|
|
12
|
+
*
|
|
13
|
+
* Behaviour ported (not copied) from the reference prototype
|
|
14
|
+
* `~/searches/ipfs-hetzner/deploy-car.mjs`: the multi-target fan-out, the MFS
|
|
15
|
+
* placement, the per-`mode` branch, and the `Promise.allSettled` partial-failure
|
|
16
|
+
* semantics (a non-empty subset of nodes succeeding is still an overall success:
|
|
17
|
+
* "the site is up on the rest").
|
|
18
|
+
*
|
|
19
|
+
* PER-SITE `mode` BRANCH (CONTEXT.md `mode`; spec's "Per-site mode branch"):
|
|
20
|
+
* - `ipfs` mode: land + pin + MFS ONLY (no key, no publish). ENS uses
|
|
21
|
+
* `ipfs://<cid>`, updated per deploy.
|
|
22
|
+
* - `ipns` mode: everything above PLUS the publish path (`key/list` then
|
|
23
|
+
* `name/publish`) and ONLY on a PUBLISHER target. A `replica` (or a target
|
|
24
|
+
* with {@link DeployTarget.publish} disabled) NEVER signs — it re-announces
|
|
25
|
+
* the publisher's record via the on-box `mirror` verb instead. This mirrors
|
|
26
|
+
* the prototype's `doPublish = mode === "ipns" && PUBLISH_IPNS` gate, with
|
|
27
|
+
* role standing in for the prototype's `PUBLISH_IPNS=0` replica flag.
|
|
28
|
+
*
|
|
29
|
+
* SEAM BOUNDARY (see the sibling tasks): this module wires the per-mode call
|
|
30
|
+
* SEQUENCE only. The full publisher/replica record export+mirror lives in
|
|
31
|
+
* `publisher-replica-model`, and importing the derived key into the publisher's
|
|
32
|
+
* keystore lives in `key-import-publisher`. So deploy here does NOT `key/gen`
|
|
33
|
+
* or `key/import` — it assumes the publisher already holds the key (looked up
|
|
34
|
+
* via `key/list`) and issues `name/publish`. If a publisher has no matching key
|
|
35
|
+
* yet, the publish is reported as skipped rather than silently generating one
|
|
36
|
+
* (key provisioning is that other task's job, not deploy's).
|
|
37
|
+
*/
|
|
38
|
+
import { type FetchLike } from '../rpc/kubo-rpc-client.js';
|
|
39
|
+
import { type BuiltCar } from '../car/car-build.js';
|
|
40
|
+
import type { HostRole, SiteMode } from '../config/config-resolution.js';
|
|
41
|
+
/**
|
|
42
|
+
* One deploy target: a node's RPC endpoint + its OWN token + its role. In
|
|
43
|
+
* `ipns` mode only a `publisher` (with publish not disabled) signs the record;
|
|
44
|
+
* a `replica` lands+pins+MFS but never publishes.
|
|
45
|
+
*/
|
|
46
|
+
export interface DeployTarget {
|
|
47
|
+
/** The node's Kubo RPC base URL. */
|
|
48
|
+
baseUrl: string;
|
|
49
|
+
/** The node's bearer token (each target has its OWN). */
|
|
50
|
+
token: string;
|
|
51
|
+
/** publisher (may sign in ipns mode) or replica (never signs). */
|
|
52
|
+
role: HostRole;
|
|
53
|
+
/**
|
|
54
|
+
* Explicit publish switch. Defaults to true for a publisher. Set false to
|
|
55
|
+
* land+pin+MFS on a publisher WITHOUT signing (the prototype's
|
|
56
|
+
* `PUBLISH_IPNS=0`). A `replica` never publishes regardless of this flag.
|
|
57
|
+
*/
|
|
58
|
+
publish?: boolean;
|
|
59
|
+
/** Injectable fetch (tests pass a MockKuboApi); defaults to global fetch. */
|
|
60
|
+
fetchImpl?: FetchLike;
|
|
61
|
+
}
|
|
62
|
+
/** Inputs to {@link deploy}. Supply EITHER a `sourceDir` OR a prebuilt `car`. */
|
|
63
|
+
export interface DeployInput {
|
|
64
|
+
/** The site source directory to build a CAR from (mutually exclusive with `car`). */
|
|
65
|
+
sourceDir?: string;
|
|
66
|
+
/** A prebuilt CAR to deploy as-is (mutually exclusive with `sourceDir`). */
|
|
67
|
+
car?: BuiltCar;
|
|
68
|
+
/** The site's single `id`: its MFS entry `/sites/<id>` and, in ipns mode, its key name. */
|
|
69
|
+
id: string;
|
|
70
|
+
/** ipfs (land+pin+MFS) or ipns (also key/list + name/publish on publishers). */
|
|
71
|
+
mode: SiteMode;
|
|
72
|
+
/** The nodes to deploy to (each with its own token); the CAR lands on all. */
|
|
73
|
+
targets: DeployTarget[];
|
|
74
|
+
/** The MFS directory sites live under (default `/sites`). */
|
|
75
|
+
sitesDir?: string;
|
|
76
|
+
}
|
|
77
|
+
/** A per-target success record. */
|
|
78
|
+
export interface DeployNodeOk {
|
|
79
|
+
/** The node's base URL. */
|
|
80
|
+
baseUrl: string;
|
|
81
|
+
/** The CID landed on this node (identical across all successful nodes). */
|
|
82
|
+
cid: string;
|
|
83
|
+
/** The IPNS id published on this node, if it signed; undefined otherwise. */
|
|
84
|
+
ipns?: string;
|
|
85
|
+
/** Whether this node signed+published an IPNS record. */
|
|
86
|
+
published: boolean;
|
|
87
|
+
}
|
|
88
|
+
/** A per-target failure record. */
|
|
89
|
+
export interface DeployNodeFailure {
|
|
90
|
+
/** The node's base URL. */
|
|
91
|
+
baseUrl: string;
|
|
92
|
+
/** The error that failed this node's deploy (its content is up elsewhere). */
|
|
93
|
+
error: Error;
|
|
94
|
+
}
|
|
95
|
+
/** The overall deploy result: the CID, and per-node success/failure. */
|
|
96
|
+
export interface DeployResult {
|
|
97
|
+
/** The authoritative site CID (identical on every node). */
|
|
98
|
+
cid: string;
|
|
99
|
+
/** The site's mode. */
|
|
100
|
+
mode: SiteMode;
|
|
101
|
+
/** Nodes the deploy landed on (import + MFS, plus publish where applicable). */
|
|
102
|
+
ok: DeployNodeOk[];
|
|
103
|
+
/** Nodes whose deploy failed (reported, not thrown — the rest are up). */
|
|
104
|
+
failed: DeployNodeFailure[];
|
|
105
|
+
/** True when at least one node succeeded (some-nodes-up is still success). */
|
|
106
|
+
success: boolean;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Deploy a site: build the CAR ONCE, then import the SAME CAR into every target
|
|
110
|
+
* (each with its own token), pin it, place it in MFS, and (in `ipns` mode, on
|
|
111
|
+
* publisher targets) publish the IPNS record. Fans out with
|
|
112
|
+
* `Promise.allSettled`: a node that fails is reported in {@link DeployResult.failed}
|
|
113
|
+
* and does not sink the others; a non-empty success subset is still an overall
|
|
114
|
+
* success ({@link DeployResult.success}). Throws only if NO node succeeds is
|
|
115
|
+
* NOT the contract here — deploy always RESOLVES with the per-node breakdown;
|
|
116
|
+
* callers inspect `success`.
|
|
117
|
+
*
|
|
118
|
+
* @throws if neither `sourceDir` nor `car` is supplied, or both are.
|
|
119
|
+
*/
|
|
120
|
+
export declare function deploy(input: DeployInput): Promise<DeployResult>;
|
|
121
|
+
//# sourceMappingURL=deploy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/deploy/deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,EAAgB,KAAK,SAAS,EAAC,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAW,KAAK,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAE5D,OAAO,KAAK,EAAC,QAAQ,EAAE,QAAQ,EAAC,MAAM,gCAAgC,CAAC;AASvE;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC5B,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,IAAI,EAAE,QAAQ,CAAC;IACf;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,iFAAiF;AACjF,MAAM,WAAW,WAAW;IAC3B,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,2FAA2F;IAC3F,EAAE,EAAE,MAAM,CAAC;IACX,gFAAgF;IAChF,IAAI,EAAE,QAAQ,CAAC;IACf,8EAA8E;IAC9E,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC5B,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,GAAG,EAAE,MAAM,CAAC;IACZ,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,mCAAmC;AACnC,MAAM,WAAW,iBAAiB;IACjC,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,KAAK,EAAE,KAAK,CAAC;CACb;AAED,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC5B,4DAA4D;IAC5D,GAAG,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,gFAAgF;IAChF,EAAE,EAAE,YAAY,EAAE,CAAC;IACnB,0EAA0E;IAC1E,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,8EAA8E;IAC9E,OAAO,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAkCtE"}
|