@serfab/cadre-host 1.12.0 → 1.14.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 +332 -423
- package/dist/bin/host.d.ts +6 -3
- package/dist/bin/host.js +301 -505
- package/dist/bin/host.js.map +1 -1
- package/dist/bin/join-output.d.ts +56 -0
- package/dist/bin/join-output.js +92 -0
- package/dist/bin/join-output.js.map +1 -0
- package/dist/bin/nat-output.d.ts +49 -0
- package/dist/bin/nat-output.js +127 -0
- package/dist/bin/nat-output.js.map +1 -0
- package/dist/hosted/claim-details.d.ts +44 -0
- package/dist/hosted/claim-details.js +66 -0
- package/dist/hosted/claim-details.js.map +1 -0
- package/dist/hosted/hosted-node-service.d.ts +318 -0
- package/dist/hosted/hosted-node-service.js +666 -0
- package/dist/hosted/hosted-node-service.js.map +1 -0
- package/dist/hosted/hosted-node-store.d.ts +40 -0
- package/dist/hosted/hosted-node-store.js +126 -0
- package/dist/hosted/hosted-node-store.js.map +1 -0
- package/dist/{donation/donation-supervisor.d.ts → hosted/hosted-node-supervisor.d.ts} +70 -53
- package/dist/hosted/hosted-node-supervisor.js +396 -0
- package/dist/hosted/hosted-node-supervisor.js.map +1 -0
- package/dist/hosted/hosted-node-watcher.d.ts +83 -0
- package/dist/hosted/hosted-node-watcher.js +224 -0
- package/dist/hosted/hosted-node-watcher.js.map +1 -0
- package/dist/hosted/index.d.ts +16 -0
- package/dist/hosted/index.js +13 -0
- package/dist/hosted/index.js.map +1 -0
- package/dist/hosted/node-status.d.ts +35 -0
- package/dist/hosted/node-status.js +61 -0
- package/dist/hosted/node-status.js.map +1 -0
- package/dist/hosted/types.d.ts +134 -0
- package/dist/hosted/types.js +22 -0
- package/dist/hosted/types.js.map +1 -0
- package/dist/index.d.ts +12 -24
- package/dist/index.js +9 -19
- package/dist/index.js.map +1 -1
- package/dist/installer/config.d.ts +4 -34
- package/dist/installer/config.js +3 -18
- package/dist/installer/config.js.map +1 -1
- package/dist/installer/index.d.ts +7 -19
- package/dist/installer/index.js +14 -69
- package/dist/installer/index.js.map +1 -1
- package/dist/installer/paths.d.ts +0 -2
- package/dist/installer/paths.js +0 -4
- package/dist/installer/paths.js.map +1 -1
- package/dist/installer/wizard.d.ts +0 -7
- package/dist/installer/wizard.js +1 -8
- package/dist/installer/wizard.js.map +1 -1
- package/dist/nat/address-resolver.d.ts +18 -17
- package/dist/nat/address-resolver.js +79 -25
- package/dist/nat/address-resolver.js.map +1 -1
- package/dist/nat/address-watch.d.ts +37 -0
- package/dist/nat/address-watch.js +84 -0
- package/dist/nat/address-watch.js.map +1 -0
- package/dist/nat/ddns/duckdns.d.ts +2 -1
- package/dist/nat/ddns/duckdns.js +5 -1
- package/dist/nat/ddns/duckdns.js.map +1 -1
- package/dist/nat/ddns/index.d.ts +6 -0
- package/dist/nat/ddns/index.js.map +1 -1
- package/dist/nat/index.d.ts +12 -9
- package/dist/nat/index.js +6 -5
- package/dist/nat/index.js.map +1 -1
- package/dist/nat/nat-service.d.ts +203 -77
- package/dist/nat/nat-service.js +602 -237
- package/dist/nat/nat-service.js.map +1 -1
- package/dist/nat/nat-store.d.ts +12 -5
- package/dist/nat/nat-store.js +114 -30
- package/dist/nat/nat-store.js.map +1 -1
- package/dist/nat/port-mapper.d.ts +83 -79
- package/dist/nat/port-mapper.js +148 -189
- package/dist/nat/port-mapper.js.map +1 -1
- package/dist/nat/reachability.d.ts +31 -15
- package/dist/nat/reachability.js +97 -22
- package/dist/nat/reachability.js.map +1 -1
- package/dist/nat/types.d.ts +78 -27
- package/dist/nat/types.js +8 -5
- package/dist/nat/types.js.map +1 -1
- package/dist/orchestrator/host-process-orchestrator.d.ts +29 -71
- package/dist/orchestrator/host-process-orchestrator.js +78 -218
- package/dist/orchestrator/host-process-orchestrator.js.map +1 -1
- package/dist/{installer/identity.d.ts → orchestrator/identity-file.d.ts} +5 -5
- package/dist/{installer/identity.js → orchestrator/identity-file.js} +6 -6
- package/dist/orchestrator/identity-file.js.map +1 -0
- package/dist/orchestrator/index.d.ts +2 -3
- package/dist/orchestrator/index.js +1 -1
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/orchestrator/node-identity.d.ts +6 -6
- package/dist/orchestrator/node-identity.js +7 -7
- package/dist/orchestrator/node-identity.js.map +1 -1
- package/dist/orchestrator/port-allocator.d.ts +5 -6
- package/dist/orchestrator/port-allocator.js +9 -11
- package/dist/orchestrator/port-allocator.js.map +1 -1
- package/dist/orchestrator/state-store.d.ts +3 -5
- package/dist/orchestrator/state-store.js +2 -10
- package/dist/orchestrator/state-store.js.map +1 -1
- package/dist/orchestrator/types.d.ts +33 -22
- package/dist/orchestrator/types.js.map +1 -1
- package/dist/server/error-handler.d.ts +5 -25
- package/dist/server/error-handler.js +11 -74
- package/dist/server/error-handler.js.map +1 -1
- package/dist/server/events/types.d.ts +7 -11
- package/dist/server/events/types.js +2 -1
- package/dist/server/events/types.js.map +1 -1
- package/dist/server/index.d.ts +11 -37
- package/dist/server/index.js +30 -48
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/hosted-nodes.d.ts +28 -0
- package/dist/server/routes/hosted-nodes.js +68 -0
- package/dist/server/routes/hosted-nodes.js.map +1 -0
- package/dist/server/routes/nat.d.ts +4 -1
- package/dist/server/routes/nat.js +13 -2
- package/dist/server/routes/nat.js.map +1 -1
- package/dist/server/routes/nodes.d.ts +6 -20
- package/dist/server/routes/nodes.js +7 -86
- package/dist/server/routes/nodes.js.map +1 -1
- package/dist/server/routes/settings.d.ts +2 -7
- package/dist/server/routes/settings.js +3 -7
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/routes/status.d.ts +2 -25
- package/dist/server/routes/status.js +1 -11
- package/dist/server/routes/status.js.map +1 -1
- package/dist/server/server.js +8 -8
- package/dist/server/settings-store.d.ts +2 -2
- package/dist/server/settings-store.js +2 -2
- package/dist/server/static.js +1 -2
- package/dist/server/static.js.map +1 -1
- package/dist/ui/assets/index-4FWuU8ye.js +19 -0
- package/dist/ui/assets/index-4FWuU8ye.js.map +1 -0
- package/dist/ui/assets/index-Di9Q4d01.css +1 -0
- package/dist/ui/index.html +2 -2
- package/dist/update/index.d.ts +2 -2
- package/dist/update/index.js +2 -2
- package/dist/update/store.d.ts +1 -1
- package/dist/update/store.js +1 -1
- package/dist/update/types.d.ts +1 -1
- package/dist/update/types.js +1 -1
- package/package.json +5 -6
- package/src/__tests__/cli-nat.smoke.test.ts +219 -212
- package/src/__tests__/cli.smoke.test.ts +1 -1
- package/src/__tests__/global-setup.ts +2 -3
- package/src/__tests__/orchestrator-claim-secret.test.ts +112 -0
- package/src/__tests__/orchestrator-handle-contract.ts +134 -134
- package/src/__tests__/orchestrator-node-identity.test.ts +182 -203
- package/src/__tests__/orchestrator-ports.test.ts +124 -143
- package/src/__tests__/orchestrator-push.test.ts +138 -146
- package/src/__tests__/orchestrator.test.ts +1019 -1063
- package/src/bin/host.ts +368 -553
- package/src/bin/join-output.ts +120 -0
- package/src/bin/nat-output.ts +177 -0
- package/src/{donation → hosted}/__tests__/fake-orchestrator.test.ts +173 -173
- package/src/{donation → hosted}/__tests__/fake-orchestrator.ts +265 -243
- package/src/hosted/__tests__/hosted-node-service.test.ts +609 -0
- package/src/hosted/__tests__/hosted-node-supervisor.test.ts +474 -0
- package/src/hosted/__tests__/test-invitation.ts +33 -0
- package/src/hosted/claim-details.ts +96 -0
- package/src/hosted/hosted-node-service.ts +795 -0
- package/src/hosted/hosted-node-store.ts +144 -0
- package/src/hosted/hosted-node-supervisor.ts +439 -0
- package/src/hosted/hosted-node-watcher.ts +250 -0
- package/src/hosted/index.ts +53 -0
- package/src/hosted/node-status.ts +71 -0
- package/src/hosted/types.ts +153 -0
- package/src/index.ts +72 -91
- package/src/installer/__tests__/config.test.ts +15 -40
- package/src/installer/__tests__/installer.smoke.test.ts +5 -86
- package/src/installer/__tests__/wizard.test.ts +56 -64
- package/src/installer/config.ts +135 -175
- package/src/installer/index.ts +15 -83
- package/src/installer/paths.ts +104 -109
- package/src/installer/wizard.ts +87 -103
- package/src/nat/__tests__/address-resolver.test.ts +107 -82
- package/src/nat/__tests__/nat-service.test.ts +433 -408
- package/src/nat/__tests__/nat-store.test.ts +127 -93
- package/src/nat/__tests__/port-mapper.test.ts +30 -191
- package/src/nat/__tests__/reachability.test.ts +96 -13
- package/src/nat/address-resolver.ts +94 -52
- package/src/nat/address-watch.ts +92 -0
- package/src/nat/ddns/duckdns.ts +5 -1
- package/src/nat/ddns/index.ts +6 -0
- package/src/nat/index.ts +87 -71
- package/src/nat/nat-service.ts +889 -501
- package/src/nat/nat-store.ts +237 -154
- package/src/nat/port-mapper.ts +241 -329
- package/src/nat/reachability.ts +134 -25
- package/src/nat/types.ts +209 -159
- package/src/{installer/__tests__/identity.test.ts → orchestrator/__tests__/identity-file.test.ts} +34 -34
- package/src/orchestrator/__tests__/node-identity.test.ts +62 -62
- package/src/orchestrator/host-process-orchestrator.ts +81 -243
- package/src/{installer/identity.ts → orchestrator/identity-file.ts} +56 -56
- package/src/orchestrator/index.ts +9 -10
- package/src/orchestrator/node-identity.ts +41 -41
- package/src/orchestrator/port-allocator.ts +71 -73
- package/src/orchestrator/state-store.ts +76 -90
- package/src/orchestrator/types.ts +34 -23
- package/src/server/__tests__/bus.test.ts +38 -38
- package/src/server/__tests__/error-handler.test.ts +81 -118
- package/src/server/__tests__/fakes.ts +40 -44
- package/src/server/__tests__/hosted-nodes-route.test.ts +160 -0
- package/src/server/__tests__/nodes-route.test.ts +114 -283
- package/src/server/__tests__/publishers.test.ts +193 -180
- package/src/server/__tests__/server.smoke.test.ts +134 -223
- package/src/server/__tests__/settings-route.test.ts +179 -195
- package/src/server/__tests__/sse-route.test.ts +119 -119
- package/src/server/__tests__/status-route.test.ts +82 -121
- package/src/server/error-handler.ts +112 -178
- package/src/server/events/types.ts +20 -24
- package/src/server/index.ts +223 -267
- package/src/server/routes/hosted-nodes.ts +83 -0
- package/src/server/routes/nat.ts +75 -63
- package/src/server/routes/nodes.ts +96 -188
- package/src/server/routes/settings.ts +115 -123
- package/src/server/routes/status.ts +102 -134
- package/src/server/server.ts +8 -8
- package/src/server/settings-store.ts +2 -2
- package/src/server/static.ts +1 -2
- package/src/update/index.ts +2 -2
- package/src/update/store.ts +1 -1
- package/src/update/types.ts +1 -1
- package/dist/auth/duration.d.ts +0 -1
- package/dist/auth/duration.js +0 -32
- package/dist/auth/duration.js.map +0 -1
- package/dist/auth/index.d.ts +0 -11
- package/dist/auth/index.js +0 -9
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/self-label.d.ts +0 -36
- package/dist/auth/self-label.js +0 -57
- package/dist/auth/self-label.js.map +0 -1
- package/dist/auth/trust-circle-store.d.ts +0 -26
- package/dist/auth/trust-circle-store.js +0 -129
- package/dist/auth/trust-circle-store.js.map +0 -1
- package/dist/auth/trust-circle.d.ts +0 -156
- package/dist/auth/trust-circle.js +0 -307
- package/dist/auth/trust-circle.js.map +0 -1
- package/dist/auth/types.d.ts +0 -84
- package/dist/auth/types.js +0 -24
- package/dist/auth/types.js.map +0 -1
- package/dist/donation/donation-service.d.ts +0 -389
- package/dist/donation/donation-service.js +0 -828
- package/dist/donation/donation-service.js.map +0 -1
- package/dist/donation/donation-store.d.ts +0 -51
- package/dist/donation/donation-store.js +0 -152
- package/dist/donation/donation-store.js.map +0 -1
- package/dist/donation/donation-supervisor.js +0 -364
- package/dist/donation/donation-supervisor.js.map +0 -1
- package/dist/donation/grant-service.d.ts +0 -80
- package/dist/donation/grant-service.js +0 -210
- package/dist/donation/grant-service.js.map +0 -1
- package/dist/donation/grant-store.d.ts +0 -38
- package/dist/donation/grant-store.js +0 -135
- package/dist/donation/grant-store.js.map +0 -1
- package/dist/donation/index.d.ts +0 -20
- package/dist/donation/index.js +0 -17
- package/dist/donation/index.js.map +0 -1
- package/dist/donation/types.d.ts +0 -224
- package/dist/donation/types.js +0 -40
- package/dist/donation/types.js.map +0 -1
- package/dist/installer/identity.js.map +0 -1
- package/dist/owner/index.d.ts +0 -11
- package/dist/owner/index.js +0 -11
- package/dist/owner/index.js.map +0 -1
- package/dist/owner/owner-node-client.d.ts +0 -110
- package/dist/owner/owner-node-client.js +0 -184
- package/dist/owner/owner-node-client.js.map +0 -1
- package/dist/server/routes/bootstrap-node-validation.d.ts +0 -115
- package/dist/server/routes/bootstrap-node-validation.js +0 -197
- package/dist/server/routes/bootstrap-node-validation.js.map +0 -1
- package/dist/server/routes/grants-admin.d.ts +0 -29
- package/dist/server/routes/grants-admin.js +0 -58
- package/dist/server/routes/grants-admin.js.map +0 -1
- package/dist/server/routes/grants.d.ts +0 -28
- package/dist/server/routes/grants.js +0 -165
- package/dist/server/routes/grants.js.map +0 -1
- package/dist/server/routes/provision-request-validation.d.ts +0 -45
- package/dist/server/routes/provision-request-validation.js +0 -97
- package/dist/server/routes/provision-request-validation.js.map +0 -1
- package/dist/server/routes/strands.d.ts +0 -20
- package/dist/server/routes/strands.js +0 -38
- package/dist/server/routes/strands.js.map +0 -1
- package/dist/server/routes/trust-circle.d.ts +0 -17
- package/dist/server/routes/trust-circle.js +0 -35
- package/dist/server/routes/trust-circle.js.map +0 -1
- package/dist/strands/index.d.ts +0 -7
- package/dist/strands/index.js +0 -6
- package/dist/strands/index.js.map +0 -1
- package/dist/strands/strand-service.d.ts +0 -50
- package/dist/strands/strand-service.js +0 -103
- package/dist/strands/strand-service.js.map +0 -1
- package/dist/strands/types.d.ts +0 -93
- package/dist/strands/types.js +0 -23
- package/dist/strands/types.js.map +0 -1
- package/dist/ui/assets/index-C6nELNfC.js +0 -23
- package/dist/ui/assets/index-C6nELNfC.js.map +0 -1
- package/dist/ui/assets/index-TtIYSeZO.css +0 -1
- package/src/__tests__/cli-invite.smoke.test.ts +0 -192
- package/src/__tests__/host-owner.smoke.test.ts +0 -123
- package/src/__tests__/orchestrator-owner.test.ts +0 -234
- package/src/__tests__/orchestrator-pin-keys.test.ts +0 -152
- package/src/auth/__tests__/duration.test.ts +0 -28
- package/src/auth/__tests__/self-label.test.ts +0 -85
- package/src/auth/__tests__/trust-circle-integration.test.ts +0 -152
- package/src/auth/__tests__/trust-circle-store.test.ts +0 -115
- package/src/auth/__tests__/trust-circle.test.ts +0 -445
- package/src/auth/duration.ts +0 -33
- package/src/auth/index.ts +0 -21
- package/src/auth/self-label.ts +0 -74
- package/src/auth/trust-circle-store.ts +0 -155
- package/src/auth/trust-circle.ts +0 -395
- package/src/auth/types.ts +0 -99
- package/src/donation/__tests__/donation-service.test.ts +0 -1193
- package/src/donation/__tests__/donation-supervisor.test.ts +0 -548
- package/src/donation/__tests__/grant-service.test.ts +0 -213
- package/src/donation/__tests__/grant-store.test.ts +0 -113
- package/src/donation/donation-service.ts +0 -1033
- package/src/donation/donation-store.ts +0 -176
- package/src/donation/donation-supervisor.ts +0 -411
- package/src/donation/grant-service.ts +0 -252
- package/src/donation/grant-store.ts +0 -152
- package/src/donation/index.ts +0 -65
- package/src/donation/types.ts +0 -260
- package/src/owner/__tests__/owner-node-client.test.ts +0 -194
- package/src/owner/index.ts +0 -12
- package/src/owner/owner-node-client.ts +0 -259
- package/src/server/__tests__/bootstrap-node-validation.test.ts +0 -138
- package/src/server/__tests__/grants-admin-route.test.ts +0 -171
- package/src/server/__tests__/grants-route.test.ts +0 -394
- package/src/server/__tests__/strands-route.test.ts +0 -234
- package/src/server/routes/bootstrap-node-validation.ts +0 -206
- package/src/server/routes/grants-admin.ts +0 -74
- package/src/server/routes/grants.ts +0 -193
- package/src/server/routes/provision-request-validation.ts +0 -105
- package/src/server/routes/strands.ts +0 -54
- package/src/server/routes/trust-circle.ts +0 -49
- package/src/strands/__tests__/strand-service.test.ts +0 -165
- package/src/strands/index.ts +0 -14
- package/src/strands/strand-service.ts +0 -135
- package/src/strands/types.ts +0 -102
package/dist/index.js
CHANGED
|
@@ -4,31 +4,21 @@
|
|
|
4
4
|
* This package is the sibling of @serfab/cadre-provider for self-hosted
|
|
5
5
|
* basement-PC deployments. It depends on @serfab/cadre-provider for the
|
|
6
6
|
* orchestration interface and container lifecycle types but ships its own
|
|
7
|
-
* orchestrator (host processes, not Docker),
|
|
8
|
-
*
|
|
7
|
+
* orchestrator (host processes, not Docker), the hosted-node service behind
|
|
8
|
+
* "Join a cadre", installer, NAT layer, and local management UI.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* under src
|
|
13
|
-
*
|
|
14
|
-
* - cadre-host-process-orchestrator [DONE]
|
|
15
|
-
* - cadre-host-trust-circle [DONE]
|
|
16
|
-
* - cadre-host-nat
|
|
17
|
-
* - cadre-host-installer
|
|
18
|
-
* - cadre-host-local-ui
|
|
10
|
+
* HostProcessOrchestrator, the hosted-node layer, the NAT layer, the
|
|
11
|
+
* installer, and the local UI server each live in a sibling subdirectory
|
|
12
|
+
* under src/.
|
|
19
13
|
*/
|
|
20
|
-
export { HostProcessOrchestrator
|
|
21
|
-
|
|
22
|
-
export {
|
|
23
|
-
/* ──────────────── strand management ──────────────── */
|
|
24
|
-
export { StrandService, StrandError, createStrandHandlers } from './strands/index.js';
|
|
25
|
-
/* ──────────────── donation grant tokens ──────────────── */
|
|
26
|
-
export { GrantStore, GrantService, createGrantAdminHandlers, GrantError, DEFAULT_MAX_NODES, DonationStore, DonationService, DonationError, } from './donation/index.js';
|
|
14
|
+
export { HostProcessOrchestrator } from './orchestrator/index.js';
|
|
15
|
+
/* ──────────────── hosted nodes ("Join a cadre") ──────────────── */
|
|
16
|
+
export { HostedNodeStore, HostedNodeService, HostedNodeSupervisor, HostedNodeError, HOSTED_NODE_SPAWNING_TTL_MS, HOSTED_NODE_REAP_SWEEP_MS, HOSTED_NODE_CLAIM_POLL_MS, HOSTED_NODE_CONNECTED_POLL_MS, HOSTED_NODE_RESPAWN_BACKOFF_BASE_MS, HOSTED_NODE_RESPAWN_BACKOFF_MAX_MS, HOSTED_NODE_RESPAWN_MAX_ATTEMPTS, HOSTED_NODE_RESPAWN_HEALTHY_MS, HOSTED_NODE_RESPAWN_SWEEP_MS, PLACEHOLDER_PARTY, } from './hosted/index.js';
|
|
27
17
|
export { Installer, readHostConfig, updateHostConfig, writeHostConfig } from './installer/index.js';
|
|
28
18
|
/* ──────────────── push credentials (FCM/APNs) ──────────────── */
|
|
29
19
|
export { resolvePushCredentials, setFcmSecret, setApnsSecret, clearPushSecret, pushAccount, pushStatus, } from './push/index.js';
|
|
30
20
|
export { UpdateService, createUpdateHandlers, UpdateStateStore, UpdateErrorException, applyUpdate, defaultNpmExecutor, fetchManifest, verifyManifest, canonicalJson, signManifest, validateManifestFields, buildManifest, derivePublicKeyBase64, signAndSelfVerify, compareVersions, parseVersion, getReleasePublicKey, getReleasePublicKeyBase64, ed25519FromRaw, isPlaceholderReleaseKey, } from './update/index.js';
|
|
31
|
-
export { NatService, NatStore, NatError, createNatHandlers, ExternalIpDetector,
|
|
21
|
+
export { NatService, NatStore, NatError, createNatHandlers, NAT_UNMAP_GRACE_MS, NAT_RECONCILE_INTERVAL_MS, NAT_IP_REDETECT_INTERVAL_MS, ExternalIpDetector, UpnpPortMapper, pickLanAddress, evaluateNodeReachability, evaluateHostReachability, buildPublicAddresses, isPublicIpv4, BUILTIN_PROVIDERS, getProvider, listProviders, duckDnsProvider, DdnsUpdater, KeytarSecretsStore, FileSecretsStore, createSecretsStore, ddnsAccount, KEYTAR_SERVICE, DEFAULT_LEASE_TTL_MS, DEFAULT_REFRESH_MS, GATEWAY_DISCOVERY_TIMEOUT_MS, isPlausibleIp, } from './nat/index.js';
|
|
32
22
|
/* ──────────────── local UI server (6.5.1) ──────────────── */
|
|
33
23
|
export { createLocalUiServer, EventBus, HostSettingsStore, } from './server/index.js';
|
|
34
24
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAWH,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAUlE,qEAAqE;AAErE,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,6BAA6B,EAC7B,mCAAmC,EACnC,kCAAkC,EAClC,gCAAgC,EAChC,8BAA8B,EAC9B,4BAA4B,EAC5B,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAyB3B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAepG,mEAAmE;AAEnE,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,WAAW,EACX,UAAU,GACX,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,sBAAsB,EACtB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,yBAAyB,EACzB,cAAc,EACd,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAe3B,OAAO,EACL,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,EAC3B,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,4BAA4B,EAC5B,aAAa,GACd,MAAM,gBAAgB,CAAC;AAyCxB,+DAA+D;AAE/D,OAAO,EACL,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,GAClB,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `host.config.json` schema + I/O.
|
|
3
3
|
*
|
|
4
|
-
* This file captures the wizard's output. Subsystems (
|
|
4
|
+
* This file captures the wizard's output. Subsystems (hosted nodes, NAT,
|
|
5
5
|
* orchestrator) each own their own files under `<dataDir>/`; this is NOT
|
|
6
6
|
* an umbrella config.
|
|
7
7
|
*
|
|
8
|
-
* Schema version:
|
|
8
|
+
* Schema version: 3. `version` is a forward guard — a file whose version
|
|
9
9
|
* does not match `CURRENT_VERSION` is rejected on read rather than
|
|
10
10
|
* reinterpreted, so a future incompatible layout fails loudly instead of
|
|
11
11
|
* being silently misread.
|
|
@@ -16,20 +16,6 @@ export interface UpdatesConfig {
|
|
|
16
16
|
/** Optional override for the manifest URL (env var still wins). */
|
|
17
17
|
manifestUrl?: string;
|
|
18
18
|
}
|
|
19
|
-
/**
|
|
20
|
-
* Whether this host also runs its own personal cadre (the opt-in "founder"
|
|
21
|
-
* persona), on top of the always-on node-donor role.
|
|
22
|
-
*
|
|
23
|
-
* Default (absent or `enabled: false`) is donor-only: `cadre-host start` brings
|
|
24
|
-
* up the donation surface but spawns **no** owner node, so the trust-circle and
|
|
25
|
-
* NAT surfaces stay inactive. Set `enabled: true` (install-time choice) to also
|
|
26
|
-
* spawn the host's own owner node and enable `/auth` + `/nat`. See
|
|
27
|
-
* docs/cadre-host.md § Two roles: donor and founder.
|
|
28
|
-
*/
|
|
29
|
-
export interface OwnCadreConfig {
|
|
30
|
-
/** When true, `start` spawns the host-owned owner node + trust-circle + NAT. */
|
|
31
|
-
enabled: boolean;
|
|
32
|
-
}
|
|
33
19
|
/**
|
|
34
20
|
* Non-secret push (FCM/APNs) settings. The actual private keys (and the FCM
|
|
35
21
|
* service-account / APNs key identifiers) live in the secret store — see
|
|
@@ -50,17 +36,13 @@ export interface PushSettings {
|
|
|
50
36
|
debounceMs?: number;
|
|
51
37
|
}
|
|
52
38
|
export interface HostConfigFile {
|
|
53
|
-
version:
|
|
54
|
-
/** A stable per-install id
|
|
39
|
+
version: 3;
|
|
40
|
+
/** A stable per-install id, for log correlation. */
|
|
55
41
|
installId: string;
|
|
56
42
|
/** Localhost-only management UI + API listener port. */
|
|
57
43
|
uiPort: number;
|
|
58
|
-
/** External cadre libp2p port (NAT will map to this). */
|
|
59
|
-
libp2pPort: number;
|
|
60
44
|
/** Self-reference (convenient for service-host ExecStart). */
|
|
61
45
|
dataDir: string;
|
|
62
|
-
/** Absolute path to the Ed25519 protobuf identity. */
|
|
63
|
-
identityPath: string;
|
|
64
46
|
/** Whether UPnP/NAT-PMP should be attempted at start time. */
|
|
65
47
|
upnpEnabled: boolean;
|
|
66
48
|
/** ISO timestamp the wizard wrote this file. */
|
|
@@ -69,12 +51,6 @@ export interface HostConfigFile {
|
|
|
69
51
|
installerVersion: string;
|
|
70
52
|
/** Update-flow settings; defaults: { autoApply: false }. */
|
|
71
53
|
updates: UpdatesConfig;
|
|
72
|
-
/**
|
|
73
|
-
* Host-own-cadre (founder persona) opt-in. Optional — absent is treated as
|
|
74
|
-
* `{ enabled: false }` (donor-only). Written by the installer; read via
|
|
75
|
-
* `hostOwnsCadre()`. Not editable through /api/settings (install-time only).
|
|
76
|
-
*/
|
|
77
|
-
ownCadre?: OwnCadreConfig;
|
|
78
54
|
/**
|
|
79
55
|
* Non-secret push settings (bundle id, sandbox/prod toggle, cooldown/debounce).
|
|
80
56
|
* Optional — absent when push is not configured. Private keys never live here;
|
|
@@ -82,12 +58,6 @@ export interface HostConfigFile {
|
|
|
82
58
|
*/
|
|
83
59
|
push?: PushSettings;
|
|
84
60
|
}
|
|
85
|
-
/**
|
|
86
|
-
* Whether this host runs its own personal cadre (founder persona). Absent
|
|
87
|
-
* `ownCadre` ⇒ donor-only (false). The single source of truth for the
|
|
88
|
-
* founder/donor gate in `bin/host.ts start`.
|
|
89
|
-
*/
|
|
90
|
-
export declare function hostOwnsCadre(cfg: HostConfigFile): boolean;
|
|
91
61
|
export declare function writeHostConfig(filePath: string, cfg: HostConfigFile): void;
|
|
92
62
|
/** Apply a partial patch to the persisted config (read-modify-write). */
|
|
93
63
|
export declare function updateHostConfig(filePath: string, patch: Partial<Omit<HostConfigFile, 'version'>>): HostConfigFile;
|
package/dist/installer/config.js
CHANGED
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `host.config.json` schema + I/O.
|
|
3
3
|
*
|
|
4
|
-
* This file captures the wizard's output. Subsystems (
|
|
4
|
+
* This file captures the wizard's output. Subsystems (hosted nodes, NAT,
|
|
5
5
|
* orchestrator) each own their own files under `<dataDir>/`; this is NOT
|
|
6
6
|
* an umbrella config.
|
|
7
7
|
*
|
|
8
|
-
* Schema version:
|
|
8
|
+
* Schema version: 3. `version` is a forward guard — a file whose version
|
|
9
9
|
* does not match `CURRENT_VERSION` is rejected on read rather than
|
|
10
10
|
* reinterpreted, so a future incompatible layout fails loudly instead of
|
|
11
11
|
* being silently misread.
|
|
12
12
|
*/
|
|
13
13
|
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
14
14
|
import { dirname } from 'node:path';
|
|
15
|
-
|
|
16
|
-
* Whether this host runs its own personal cadre (founder persona). Absent
|
|
17
|
-
* `ownCadre` ⇒ donor-only (false). The single source of truth for the
|
|
18
|
-
* founder/donor gate in `bin/host.ts start`.
|
|
19
|
-
*/
|
|
20
|
-
export function hostOwnsCadre(cfg) {
|
|
21
|
-
return cfg.ownCadre?.enabled === true;
|
|
22
|
-
}
|
|
23
|
-
const CURRENT_VERSION = 2;
|
|
15
|
+
const CURRENT_VERSION = 3;
|
|
24
16
|
export function writeHostConfig(filePath, cfg) {
|
|
25
17
|
if (cfg.version !== CURRENT_VERSION) {
|
|
26
18
|
throw new Error(`Refusing to write host.config.json with version=${cfg.version} (current: ${CURRENT_VERSION})`);
|
|
@@ -67,9 +59,7 @@ function isHostConfigShape(v) {
|
|
|
67
59
|
const o = v;
|
|
68
60
|
if (typeof o.installId !== 'string' ||
|
|
69
61
|
typeof o.uiPort !== 'number' ||
|
|
70
|
-
typeof o.libp2pPort !== 'number' ||
|
|
71
62
|
typeof o.dataDir !== 'string' ||
|
|
72
|
-
typeof o.identityPath !== 'string' ||
|
|
73
63
|
typeof o.upnpEnabled !== 'boolean' ||
|
|
74
64
|
typeof o.installedAt !== 'string' ||
|
|
75
65
|
typeof o.installerVersion !== 'string') {
|
|
@@ -82,11 +72,6 @@ function isHostConfigShape(v) {
|
|
|
82
72
|
return false;
|
|
83
73
|
if (updates.manifestUrl !== undefined && typeof updates.manifestUrl !== 'string')
|
|
84
74
|
return false;
|
|
85
|
-
if (o.ownCadre !== undefined) {
|
|
86
|
-
const own = o.ownCadre;
|
|
87
|
-
if (!own || typeof own !== 'object' || typeof own.enabled !== 'boolean')
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
75
|
return true;
|
|
91
76
|
}
|
|
92
77
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/installer/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/installer/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
* `tickets/implement/6.4.1-cadre-host-installer.md`.
|
|
6
6
|
*
|
|
7
7
|
* The class is purposefully thin — heavy lifting lives in the focused
|
|
8
|
-
* subsystem modules (wizard.ts,
|
|
9
|
-
*
|
|
8
|
+
* subsystem modules (wizard.ts, config.ts, service-host/{systemd,launchd,nssm}.ts,
|
|
9
|
+
* browser.ts).
|
|
10
10
|
*/
|
|
11
11
|
import { type SupportedPlatform } from './platform.js';
|
|
12
12
|
import { type ServiceHost } from './service-host/index.js';
|
|
13
|
-
import { defaultsForPlatform, runWizard, runWizardWith, DEFAULT_UI_PORT,
|
|
13
|
+
import { defaultsForPlatform, runWizard, runWizardWith, DEFAULT_UI_PORT, type WizardAnswers, type WizardDefaults } from './wizard.js';
|
|
14
14
|
export type { HostConfigFile, PushSettings } from './config.js';
|
|
15
15
|
export { readHostConfig, updateHostConfig, writeHostConfig } from './config.js';
|
|
16
16
|
export type { WizardAnswers, WizardDefaults } from './wizard.js';
|
|
@@ -22,25 +22,18 @@ export interface InstallOptions {
|
|
|
22
22
|
dataDir?: string;
|
|
23
23
|
/** Override the UI port. */
|
|
24
24
|
uiPort?: number;
|
|
25
|
-
/** Override the libp2p port. */
|
|
26
|
-
libp2pPort?: number;
|
|
27
25
|
/** Disable UPnP probing on first run. */
|
|
28
26
|
noUpnp?: boolean;
|
|
29
|
-
/** Also run the host's own personal cadre here (founder persona). Default false. */
|
|
30
|
-
ownCadre?: boolean;
|
|
31
27
|
/** Open browser at end (default true; suppressed by --no-browser or non-TTY). */
|
|
32
28
|
openBrowser?: boolean;
|
|
33
|
-
/** Skip the enrollment-invite step (no QR printed). */
|
|
34
|
-
noInvite?: boolean;
|
|
35
29
|
/** System-wide install — v1 emits a not-yet-supported error. */
|
|
36
30
|
system?: boolean;
|
|
37
31
|
/** Path to node.exe / node binary used by the service-host unit. */
|
|
38
32
|
nodePath?: string;
|
|
39
33
|
/**
|
|
40
|
-
* Write the data dir (
|
|
34
|
+
* Write the data dir (config, NAT seed) but register no OS service.
|
|
41
35
|
* The host is then run by hand with `cadre-host start`. Nothing is listening
|
|
42
|
-
* after such an install, so the browser-open
|
|
43
|
-
* skipped too.
|
|
36
|
+
* after such an install, so the browser-open step is skipped too.
|
|
44
37
|
*/
|
|
45
38
|
noService?: boolean;
|
|
46
39
|
/** Test-only: stub the service-host registration. */
|
|
@@ -55,14 +48,9 @@ export interface InstallResult {
|
|
|
55
48
|
serviceName?: string;
|
|
56
49
|
/** Path to the rendered config file. */
|
|
57
50
|
configPath: string;
|
|
58
|
-
/** Generated enrollment invite, unless --no-invite. */
|
|
59
|
-
enrollmentInvite?: {
|
|
60
|
-
encodedInvite: string;
|
|
61
|
-
expiresAt?: string;
|
|
62
|
-
};
|
|
63
51
|
}
|
|
64
52
|
export interface UninstallOptions {
|
|
65
|
-
/** Also remove the data dir (default false — preserve
|
|
53
|
+
/** Also remove the data dir (default false — preserve hosted-node records, node identities and NAT state). */
|
|
66
54
|
removeData: boolean;
|
|
67
55
|
/** Skip the confirmation prompt (for scripts). */
|
|
68
56
|
yes: boolean;
|
|
@@ -92,5 +80,5 @@ export declare class Installer {
|
|
|
92
80
|
resolveAnswersFromOptions(opts: InstallOptions): WizardAnswers;
|
|
93
81
|
private resolveAnswers;
|
|
94
82
|
}
|
|
95
|
-
export { runWizardWith, defaultsForPlatform, DEFAULT_UI_PORT
|
|
83
|
+
export { runWizardWith, defaultsForPlatform, DEFAULT_UI_PORT };
|
|
96
84
|
export { runWizard };
|
package/dist/installer/index.js
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* `tickets/implement/6.4.1-cadre-host-installer.md`.
|
|
6
6
|
*
|
|
7
7
|
* The class is purposefully thin — heavy lifting lives in the focused
|
|
8
|
-
* subsystem modules (wizard.ts,
|
|
9
|
-
*
|
|
8
|
+
* subsystem modules (wizard.ts, config.ts, service-host/{systemd,launchd,nssm}.ts,
|
|
9
|
+
* browser.ts).
|
|
10
10
|
*/
|
|
11
11
|
import { existsSync, mkdirSync, readFileSync, rmSync } from 'node:fs';
|
|
12
12
|
import { randomBytes } from 'node:crypto';
|
|
@@ -14,11 +14,10 @@ import debug from 'debug';
|
|
|
14
14
|
import { NatStore } from '../nat/index.js';
|
|
15
15
|
import { openBrowser } from './browser.js';
|
|
16
16
|
import { writeHostConfig } from './config.js';
|
|
17
|
-
import {
|
|
18
|
-
import { configPath, defaultHostJs, defaultServiceDir, identityPath, logsDir, } from './paths.js';
|
|
17
|
+
import { configPath, defaultHostJs, defaultServiceDir, logsDir, } from './paths.js';
|
|
19
18
|
import { detectPlatform, } from './platform.js';
|
|
20
19
|
import { createServiceHost } from './service-host/index.js';
|
|
21
|
-
import { defaultsForPlatform, runWizard, runWizardWith, DEFAULT_UI_PORT,
|
|
20
|
+
import { defaultsForPlatform, runWizard, runWizardWith, DEFAULT_UI_PORT, } from './wizard.js';
|
|
22
21
|
export { readHostConfig, updateHostConfig, writeHostConfig } from './config.js';
|
|
23
22
|
const log = debug('cadre:host:installer');
|
|
24
23
|
export class Installer {
|
|
@@ -36,37 +35,27 @@ export class Installer {
|
|
|
36
35
|
// 2. Make sure the data dir exists.
|
|
37
36
|
mkdirSync(answers.dataDir, { recursive: true });
|
|
38
37
|
mkdirSync(logsDir(answers.dataDir), { recursive: true });
|
|
39
|
-
// 3.
|
|
40
|
-
// install on a populated data dir must preserve the host's peer ID.
|
|
41
|
-
const idPath = identityPath(answers.dataDir);
|
|
42
|
-
if (existsSync(idPath)) {
|
|
43
|
-
log('identity already exists at %s — leaving it', idPath);
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
await generateIdentity(idPath);
|
|
47
|
-
}
|
|
38
|
+
// 3. Config.
|
|
48
39
|
const cfg = {
|
|
49
|
-
version:
|
|
40
|
+
version: 3,
|
|
50
41
|
installId: randomInstallId(),
|
|
51
42
|
uiPort: answers.uiPort,
|
|
52
|
-
libp2pPort: answers.libp2pPort,
|
|
53
43
|
dataDir: answers.dataDir,
|
|
54
|
-
identityPath: idPath,
|
|
55
44
|
upnpEnabled: answers.upnpEnabled,
|
|
56
45
|
installedAt: new Date().toISOString(),
|
|
57
46
|
installerVersion: this.installerVersion,
|
|
58
47
|
updates: { autoApply: false },
|
|
59
|
-
ownCadre: { enabled: answers.ownCadre },
|
|
60
48
|
};
|
|
61
49
|
const cfgPath = configPath(answers.dataDir);
|
|
62
50
|
writeHostConfig(cfgPath, cfg);
|
|
63
|
-
// 4. Seed nat.json with the
|
|
64
|
-
//
|
|
65
|
-
|
|
51
|
+
// 4. Seed nat.json with the UPnP flag so the NatService picks it up on
|
|
52
|
+
// first start. Ports are not seeded: the service maps every hosted
|
|
53
|
+
// node's ports from the orchestrator's allocations.
|
|
54
|
+
seedNatSettings(answers.dataDir, answers.upnpEnabled);
|
|
66
55
|
const uiUrl = `http://127.0.0.1:${answers.uiPort}/`;
|
|
67
56
|
// 5. Service-host registration.
|
|
68
57
|
if (opts.noService) {
|
|
69
|
-
log('--no-service: skipping service registration
|
|
58
|
+
log('--no-service: skipping service registration and browser open');
|
|
70
59
|
return { dataDir: answers.dataDir, uiUrl, configPath: cfgPath };
|
|
71
60
|
}
|
|
72
61
|
const serviceHost = opts.serviceHost ?? createServiceHost(this.platform);
|
|
@@ -82,20 +71,11 @@ export class Installer {
|
|
|
82
71
|
if (shouldOpenBrowser) {
|
|
83
72
|
openBrowser(uiUrl);
|
|
84
73
|
}
|
|
85
|
-
// 7. Enrollment invite (best-effort — the listener may not be up yet).
|
|
86
|
-
let invite;
|
|
87
|
-
if (!opts.noInvite && !opts.nonInteractive) {
|
|
88
|
-
invite = await fetchEnrollmentInvite(answers.uiPort).catch((err) => {
|
|
89
|
-
log('enrollment-invite fetch failed: %s', err.message);
|
|
90
|
-
return undefined;
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
74
|
return {
|
|
94
75
|
dataDir: answers.dataDir,
|
|
95
76
|
uiUrl,
|
|
96
77
|
serviceName: serviceHost.name,
|
|
97
78
|
configPath: cfgPath,
|
|
98
|
-
...(invite ? { enrollmentInvite: invite } : {}),
|
|
99
79
|
};
|
|
100
80
|
}
|
|
101
81
|
async uninstall(opts) {
|
|
@@ -131,10 +111,8 @@ export class Installer {
|
|
|
131
111
|
return {
|
|
132
112
|
dataDir: opts.dataDir ?? defaults.dataDir,
|
|
133
113
|
uiPort: opts.uiPort ?? defaults.uiPort,
|
|
134
|
-
libp2pPort: opts.libp2pPort ?? defaults.libp2pPort,
|
|
135
114
|
upnpEnabled: opts.noUpnp ? false : defaults.upnpEnabled,
|
|
136
115
|
configureDdns: false,
|
|
137
|
-
ownCadre: opts.ownCadre ?? defaults.ownCadre,
|
|
138
116
|
};
|
|
139
117
|
}
|
|
140
118
|
async resolveAnswers(opts) {
|
|
@@ -150,23 +128,17 @@ export class Installer {
|
|
|
150
128
|
const defaults = {
|
|
151
129
|
dataDir: opts.dataDir ?? platformDefaults.dataDir,
|
|
152
130
|
uiPort: opts.uiPort ?? platformDefaults.uiPort,
|
|
153
|
-
libp2pPort: opts.libp2pPort ?? platformDefaults.libp2pPort,
|
|
154
131
|
upnpEnabled: opts.noUpnp ? false : platformDefaults.upnpEnabled,
|
|
155
|
-
ownCadre: opts.ownCadre ?? platformDefaults.ownCadre,
|
|
156
132
|
};
|
|
157
133
|
const wizard = opts.wizard ?? runWizard;
|
|
158
134
|
return await wizard(defaults);
|
|
159
135
|
}
|
|
160
136
|
}
|
|
161
|
-
export { runWizardWith, defaultsForPlatform, DEFAULT_UI_PORT
|
|
162
|
-
function seedNatSettings(dataDir,
|
|
137
|
+
export { runWizardWith, defaultsForPlatform, DEFAULT_UI_PORT };
|
|
138
|
+
function seedNatSettings(dataDir, upnpEnabled) {
|
|
163
139
|
const store = new NatStore(dataDir);
|
|
164
140
|
// `update()` merges + persists.
|
|
165
|
-
store.update({
|
|
166
|
-
externalPort: libp2pPort,
|
|
167
|
-
internalPort: libp2pPort,
|
|
168
|
-
upnpEnabled,
|
|
169
|
-
});
|
|
141
|
+
store.update({ upnpEnabled });
|
|
170
142
|
}
|
|
171
143
|
function randomInstallId() {
|
|
172
144
|
return randomBytes(16).toString('hex');
|
|
@@ -183,33 +155,6 @@ function readPackageVersion() {
|
|
|
183
155
|
return '0.0.0-unknown';
|
|
184
156
|
}
|
|
185
157
|
}
|
|
186
|
-
async function fetchEnrollmentInvite(uiPort) {
|
|
187
|
-
const url = `http://127.0.0.1:${uiPort}/auth/invites`;
|
|
188
|
-
// Node 18+'s fetch has no default timeout. Bound it so a slow / hung
|
|
189
|
-
// local-UI listener can't wedge `cadre-host install` indefinitely.
|
|
190
|
-
const controller = new AbortController();
|
|
191
|
-
const timer = setTimeout(() => controller.abort(), 5000);
|
|
192
|
-
try {
|
|
193
|
-
const response = await fetch(url, {
|
|
194
|
-
method: 'POST',
|
|
195
|
-
headers: { 'content-type': 'application/json' },
|
|
196
|
-
body: JSON.stringify({ label: 'Install — first device', ttlMs: 24 * 60 * 60 * 1000 }),
|
|
197
|
-
signal: controller.signal,
|
|
198
|
-
});
|
|
199
|
-
if (!response.ok)
|
|
200
|
-
return undefined;
|
|
201
|
-
const body = await response.json();
|
|
202
|
-
if (!body.encodedInvite)
|
|
203
|
-
return undefined;
|
|
204
|
-
return {
|
|
205
|
-
encodedInvite: body.encodedInvite,
|
|
206
|
-
...(body.expiresAt ? { expiresAt: body.expiresAt } : {}),
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
finally {
|
|
210
|
-
clearTimeout(timer);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
158
|
// Exposed for tests that drive the wizard with a custom prompt fn.
|
|
214
159
|
export { runWizard };
|
|
215
160
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAuB,MAAM,aAAa,CAAC;AACnE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAuB,MAAM,aAAa,CAAC;AACnE,OAAO,EACL,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,cAAc,GAEf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAA6C,MAAM,yBAAyB,CAAC;AACvG,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,eAAe,GAGhB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAIhF,MAAM,GAAG,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAuD1C,MAAM,OAAO,SAAS;IAIpB,YAAY,OAAyB,EAAE;QACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,cAAc,EAAE,CAAC;QAClD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,kBAAkB,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAoB;QAChC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,yEAAyE;gBACvE,oEAAoE,CACvE,CAAC;QACJ,CAAC;QAED,6EAA6E;QAC7E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEhD,oCAAoC;QACpC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzD,aAAa;QACb,MAAM,GAAG,GAAmB;YAC1B,OAAO,EAAE,CAAC;YACV,SAAS,EAAE,eAAe,EAAE;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;SAC9B,CAAC;QACF,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAE9B,uEAAuE;QACvE,sEAAsE;QACtE,uDAAuD;QACvD,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAG,oBAAoB,OAAO,CAAC,MAAM,GAAG,CAAC;QAEpD,gCAAgC;QAChC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,GAAG,CAAC,8DAA8D,CAAC,CAAC;YACpE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QAClE,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzE,MAAM,GAAG,GAAuB;YAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ;YAC3C,MAAM,EAAE,aAAa,EAAE;YACvB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU,EAAE,iBAAiB,EAAE;SAChC,CAAC;QACF,MAAM,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE/B,iCAAiC;QACjC,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QACrG,IAAI,iBAAiB,EAAE,CAAC;YACtB,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK;YACL,WAAW,EAAE,WAAW,CAAC,IAAI;YAC7B,UAAU,EAAE,OAAO;SACpB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAsB;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;QAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzE,MAAM,GAAG,GAAuB;YAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,aAAa,EAAE;YACvB,OAAO;YACP,UAAU,EAAE,iBAAiB,EAAE;SAChC,CAAC;QACF,MAAM,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClD,GAAG,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAsC,EAAE;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzE,MAAM,GAAG,GAAuB;YAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,aAAa,EAAE;YACvB,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO;YACnD,UAAU,EAAE,iBAAiB,EAAE;SAChC,CAAC;QACF,OAAO,MAAM,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,8FAA8F;IAC9F,yBAAyB,CAAC,IAAoB;QAC5C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO;YACzC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;YACtC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW;YACvD,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,IAAoB;QAC/C,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,uEAAuE;QACvE,yEAAyE;QACzE,kEAAkE;QAClE,wEAAwE;QACxE,2DAA2D;QAC3D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAmB;YAC/B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,gBAAgB,CAAC,OAAO;YACjD,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,gBAAgB,CAAC,MAAM;YAC9C,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,WAAW;SAChE,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;QACxC,OAAO,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;CACF;AAED,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC;AAE/D,SAAS,eAAe,CAAC,OAAe,EAAE,WAAoB;IAC5D,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpC,gCAAgC;IAChC,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,kBAAkB;IACzB,+DAA+D;IAC/D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QACvD,OAAO,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC;IACzB,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -25,8 +25,6 @@ export declare function defaultHostJs(): string;
|
|
|
25
25
|
export declare function defaultServiceDir(): string;
|
|
26
26
|
/** Where the wizard writes the JSON config. */
|
|
27
27
|
export declare function configPath(dataDir: string): string;
|
|
28
|
-
/** Where the wizard writes the Ed25519 identity. */
|
|
29
|
-
export declare function identityPath(dataDir: string): string;
|
|
30
28
|
/** Logs directory (used by launchd / NSSM unit templates). */
|
|
31
29
|
export declare function logsDir(dataDir: string): string;
|
|
32
30
|
/** Per-platform install dir for the rendered service unit file. */
|
package/dist/installer/paths.js
CHANGED
|
@@ -55,10 +55,6 @@ export function defaultServiceDir() {
|
|
|
55
55
|
export function configPath(dataDir) {
|
|
56
56
|
return join(dataDir, 'host.config.json');
|
|
57
57
|
}
|
|
58
|
-
/** Where the wizard writes the Ed25519 identity. */
|
|
59
|
-
export function identityPath(dataDir) {
|
|
60
|
-
return join(dataDir, 'identity.key');
|
|
61
|
-
}
|
|
62
58
|
/** Logs directory (used by launchd / NSSM unit templates). */
|
|
63
59
|
export function logsDir(dataDir) {
|
|
64
60
|
return join(dataDir, 'logs');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/installer/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,8EAA8E;AAC9E,SAAS,OAAO,CAAC,QAA2B,EAAE,GAAG,KAAe;IAC9D,OAAO,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;AAC5E,CAAC;AASD,oFAAoF;AACpF,MAAM,UAAU,cAAc,CAC5B,QAA2B,EAC3B,MAAoB,OAAO,CAAC,GAAmB,EAC/C,OAAe,OAAO,EAAE;IAExB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzG,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,OAAO,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,WAAW,CAAC,CAAC;QACpG,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,sEAAsE;YACtE,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,sEAAsE;gBACtE,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YAClE,CAAC;YACD,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,aAAa;IAC3B,oDAAoD;IACpD,mFAAmF;IACnF,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,iBAAiB;IAC/B,4CAA4C;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC9C,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;AAC3C,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/installer/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,22 +9,15 @@ import type { SupportedPlatform } from './platform.js';
|
|
|
9
9
|
export interface WizardDefaults {
|
|
10
10
|
dataDir: string;
|
|
11
11
|
uiPort: number;
|
|
12
|
-
libp2pPort: number;
|
|
13
12
|
upnpEnabled: boolean;
|
|
14
|
-
/** Also run the host's own personal cadre here (founder persona). Default false. */
|
|
15
|
-
ownCadre: boolean;
|
|
16
13
|
}
|
|
17
14
|
export interface WizardAnswers {
|
|
18
15
|
dataDir: string;
|
|
19
16
|
uiPort: number;
|
|
20
|
-
libp2pPort: number;
|
|
21
17
|
upnpEnabled: boolean;
|
|
22
18
|
configureDdns: boolean;
|
|
23
|
-
/** Also run the host's own personal cadre here (founder persona). */
|
|
24
|
-
ownCadre: boolean;
|
|
25
19
|
}
|
|
26
20
|
export declare const DEFAULT_UI_PORT = 8765;
|
|
27
|
-
export declare const DEFAULT_LIBP2P_PORT = 4001;
|
|
28
21
|
export declare function defaultsForPlatform(platform: SupportedPlatform): WizardDefaults;
|
|
29
22
|
/**
|
|
30
23
|
* Drive the wizard with a function that returns the next user answer for
|
package/dist/installer/wizard.js
CHANGED
|
@@ -8,14 +8,11 @@
|
|
|
8
8
|
import { createInterface } from 'node:readline';
|
|
9
9
|
import { defaultDataDir } from './paths.js';
|
|
10
10
|
export const DEFAULT_UI_PORT = 8765;
|
|
11
|
-
export const DEFAULT_LIBP2P_PORT = 4001;
|
|
12
11
|
export function defaultsForPlatform(platform) {
|
|
13
12
|
return {
|
|
14
13
|
dataDir: defaultDataDir(platform),
|
|
15
14
|
uiPort: DEFAULT_UI_PORT,
|
|
16
|
-
libp2pPort: DEFAULT_LIBP2P_PORT,
|
|
17
15
|
upnpEnabled: true,
|
|
18
|
-
ownCadre: false,
|
|
19
16
|
};
|
|
20
17
|
}
|
|
21
18
|
/**
|
|
@@ -25,13 +22,9 @@ export function defaultsForPlatform(platform) {
|
|
|
25
22
|
export async function runWizardWith(defaults, ask) {
|
|
26
23
|
const dataDir = (await ask('Data directory', defaults.dataDir)).trim() || defaults.dataDir;
|
|
27
24
|
const uiPort = parsePort(await ask('UI port (localhost only)', String(defaults.uiPort)), defaults.uiPort);
|
|
28
|
-
const libp2pPort = parsePort(await ask('Cadre libp2p port', String(defaults.libp2pPort)), defaults.libp2pPort);
|
|
29
25
|
const upnpEnabled = parseBool(await ask('Attempt UPnP port mapping on this network? [Y/n]', defaults.upnpEnabled ? 'Y' : 'n'), defaults.upnpEnabled);
|
|
30
26
|
const configureDdns = parseBool(await ask('Configure DDNS now? [y/N]', 'N'), false);
|
|
31
|
-
|
|
32
|
-
// answer no — a no leaves cadre-host donor-only (no owner node, no /auth+/nat).
|
|
33
|
-
const ownCadre = parseBool(await ask('Also run your own personal cadre on this machine? (most people just donating nodes to friends say no) [y/N]', defaults.ownCadre ? 'Y' : 'N'), defaults.ownCadre);
|
|
34
|
-
return { dataDir, uiPort, libp2pPort, upnpEnabled, configureDdns, ownCadre };
|
|
27
|
+
return { dataDir, uiPort, upnpEnabled, configureDdns };
|
|
35
28
|
}
|
|
36
29
|
/** Production entrypoint — drives the wizard over stdin/stdout. */
|
|
37
30
|
export async function runWizard(defaults) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/installer/wizard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAuC,MAAM,eAAe,CAAC;AAErF,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/installer/wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Build the multiaddrs
|
|
2
|
+
* Build the public multiaddrs of one hosted node from the host's current
|
|
3
|
+
* understanding of its dialable surface.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* yet (docs/cadre-host.md → "NAT and DDNS", item 2).
|
|
10
|
-
*
|
|
11
|
-
* This is intentionally a pure function so it's trivial to unit-test, and so
|
|
12
|
-
* the NatService can be the only place that knows about settings → multiaddrs.
|
|
5
|
+
* Pure so it's trivial to unit-test, and so `NatService` is the only place
|
|
6
|
+
* that turns settings and routes into addresses. The addresses carry no
|
|
7
|
+
* `/p2p/` suffix: the node appends its own (cadre-core `normalizeSelfAddrs`,
|
|
8
|
+
* libp2p for announce addresses). The node's own LAN addresses are not here
|
|
9
|
+
* either — libp2p reports those itself.
|
|
13
10
|
*/
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
externalPort: number;
|
|
11
|
+
import type { PortRoute } from './types.js';
|
|
12
|
+
export interface PublicAddressInput {
|
|
17
13
|
ddnsHostname: string | null;
|
|
14
|
+
/** Last known public IPv4; null when unknown. */
|
|
18
15
|
externalIp: string | null;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
cgnatDetected: boolean;
|
|
17
|
+
tcp: PortRoute;
|
|
18
|
+
ws: PortRoute | null;
|
|
22
19
|
}
|
|
23
|
-
export declare function
|
|
20
|
+
export declare function buildPublicAddresses(input: PublicAddressInput): string[];
|
|
21
|
+
/** True for a hostname of dot-separated RFC 1123 labels, at most 253 characters. */
|
|
22
|
+
export declare function isDnsHostname(s: string): boolean;
|
|
23
|
+
/** True for a dotted-quad IPv4 outside every non-public range above. */
|
|
24
|
+
export declare function isPublicIpv4(s: string): boolean;
|