@serfab/cadre-host 1.13.0 → 1.15.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.
Files changed (352) hide show
  1. package/README.md +347 -423
  2. package/dist/bin/host.d.ts +6 -3
  3. package/dist/bin/host.js +332 -524
  4. package/dist/bin/host.js.map +1 -1
  5. package/dist/bin/join-output.d.ts +56 -0
  6. package/dist/bin/join-output.js +92 -0
  7. package/dist/bin/join-output.js.map +1 -0
  8. package/dist/bin/nat-output.d.ts +54 -0
  9. package/dist/bin/nat-output.js +138 -0
  10. package/dist/bin/nat-output.js.map +1 -0
  11. package/dist/bin/ui-access.d.ts +22 -0
  12. package/dist/bin/ui-access.js +44 -0
  13. package/dist/bin/ui-access.js.map +1 -0
  14. package/dist/hosted/claim-details.d.ts +66 -0
  15. package/dist/hosted/claim-details.js +60 -0
  16. package/dist/hosted/claim-details.js.map +1 -0
  17. package/dist/hosted/hosted-node-service.d.ts +325 -0
  18. package/dist/hosted/hosted-node-service.js +678 -0
  19. package/dist/hosted/hosted-node-service.js.map +1 -0
  20. package/dist/hosted/hosted-node-store.d.ts +40 -0
  21. package/dist/hosted/hosted-node-store.js +126 -0
  22. package/dist/hosted/hosted-node-store.js.map +1 -0
  23. package/dist/{donation/donation-supervisor.d.ts → hosted/hosted-node-supervisor.d.ts} +70 -53
  24. package/dist/hosted/hosted-node-supervisor.js +396 -0
  25. package/dist/hosted/hosted-node-supervisor.js.map +1 -0
  26. package/dist/hosted/hosted-node-watcher.d.ts +95 -0
  27. package/dist/hosted/hosted-node-watcher.js +260 -0
  28. package/dist/hosted/hosted-node-watcher.js.map +1 -0
  29. package/dist/hosted/index.d.ts +16 -0
  30. package/dist/hosted/index.js +13 -0
  31. package/dist/hosted/index.js.map +1 -0
  32. package/dist/hosted/node-status.d.ts +51 -0
  33. package/dist/hosted/node-status.js +77 -0
  34. package/dist/hosted/node-status.js.map +1 -0
  35. package/dist/hosted/types.d.ts +141 -0
  36. package/dist/hosted/types.js +22 -0
  37. package/dist/hosted/types.js.map +1 -0
  38. package/dist/index.d.ts +12 -24
  39. package/dist/index.js +9 -19
  40. package/dist/index.js.map +1 -1
  41. package/dist/installer/config.d.ts +27 -34
  42. package/dist/installer/config.js +46 -15
  43. package/dist/installer/config.js.map +1 -1
  44. package/dist/installer/index.d.ts +9 -19
  45. package/dist/installer/index.js +21 -85
  46. package/dist/installer/index.js.map +1 -1
  47. package/dist/installer/paths.d.ts +0 -2
  48. package/dist/installer/paths.js +0 -4
  49. package/dist/installer/paths.js.map +1 -1
  50. package/dist/installer/wizard.d.ts +12 -9
  51. package/dist/installer/wizard.js +15 -14
  52. package/dist/installer/wizard.js.map +1 -1
  53. package/dist/nat/address-resolver.d.ts +18 -17
  54. package/dist/nat/address-resolver.js +79 -25
  55. package/dist/nat/address-resolver.js.map +1 -1
  56. package/dist/nat/address-watch.d.ts +37 -0
  57. package/dist/nat/address-watch.js +84 -0
  58. package/dist/nat/address-watch.js.map +1 -0
  59. package/dist/nat/ddns/duckdns.d.ts +2 -1
  60. package/dist/nat/ddns/duckdns.js +5 -1
  61. package/dist/nat/ddns/duckdns.js.map +1 -1
  62. package/dist/nat/ddns/index.d.ts +6 -0
  63. package/dist/nat/ddns/index.js.map +1 -1
  64. package/dist/nat/index.d.ts +13 -9
  65. package/dist/nat/index.js +7 -5
  66. package/dist/nat/index.js.map +1 -1
  67. package/dist/nat/nat-service.d.ts +220 -77
  68. package/dist/nat/nat-service.js +653 -239
  69. package/dist/nat/nat-service.js.map +1 -1
  70. package/dist/nat/nat-store.d.ts +12 -5
  71. package/dist/nat/nat-store.js +124 -29
  72. package/dist/nat/nat-store.js.map +1 -1
  73. package/dist/nat/network-mode.d.ts +19 -0
  74. package/dist/nat/network-mode.js +32 -0
  75. package/dist/nat/network-mode.js.map +1 -0
  76. package/dist/nat/port-mapper.d.ts +83 -79
  77. package/dist/nat/port-mapper.js +148 -189
  78. package/dist/nat/port-mapper.js.map +1 -1
  79. package/dist/nat/reachability.d.ts +32 -15
  80. package/dist/nat/reachability.js +110 -22
  81. package/dist/nat/reachability.js.map +1 -1
  82. package/dist/nat/types.d.ts +98 -27
  83. package/dist/nat/types.js +8 -5
  84. package/dist/nat/types.js.map +1 -1
  85. package/dist/orchestrator/host-process-orchestrator.d.ts +32 -74
  86. package/dist/orchestrator/host-process-orchestrator.js +84 -233
  87. package/dist/orchestrator/host-process-orchestrator.js.map +1 -1
  88. package/dist/{installer/identity.d.ts → orchestrator/identity-file.d.ts} +5 -5
  89. package/dist/{installer/identity.js → orchestrator/identity-file.js} +6 -6
  90. package/dist/orchestrator/identity-file.js.map +1 -0
  91. package/dist/orchestrator/index.d.ts +2 -3
  92. package/dist/orchestrator/index.js +1 -1
  93. package/dist/orchestrator/index.js.map +1 -1
  94. package/dist/orchestrator/node-identity.d.ts +6 -6
  95. package/dist/orchestrator/node-identity.js +7 -7
  96. package/dist/orchestrator/node-identity.js.map +1 -1
  97. package/dist/orchestrator/port-allocator.d.ts +5 -6
  98. package/dist/orchestrator/port-allocator.js +9 -11
  99. package/dist/orchestrator/port-allocator.js.map +1 -1
  100. package/dist/orchestrator/state-store.d.ts +3 -5
  101. package/dist/orchestrator/state-store.js +2 -10
  102. package/dist/orchestrator/state-store.js.map +1 -1
  103. package/dist/orchestrator/types.d.ts +33 -22
  104. package/dist/orchestrator/types.js.map +1 -1
  105. package/dist/package-version.d.ts +1 -0
  106. package/dist/package-version.js +4 -0
  107. package/dist/package-version.js.map +1 -0
  108. package/dist/server/error-handler.d.ts +5 -25
  109. package/dist/server/error-handler.js +11 -74
  110. package/dist/server/error-handler.js.map +1 -1
  111. package/dist/server/events/types.d.ts +7 -11
  112. package/dist/server/events/types.js +2 -1
  113. package/dist/server/events/types.js.map +1 -1
  114. package/dist/server/index.d.ts +11 -37
  115. package/dist/server/index.js +30 -48
  116. package/dist/server/index.js.map +1 -1
  117. package/dist/server/routes/hosted-nodes.d.ts +28 -0
  118. package/dist/server/routes/hosted-nodes.js +68 -0
  119. package/dist/server/routes/hosted-nodes.js.map +1 -0
  120. package/dist/server/routes/nat.d.ts +4 -1
  121. package/dist/server/routes/nat.js +13 -2
  122. package/dist/server/routes/nat.js.map +1 -1
  123. package/dist/server/routes/nodes.d.ts +6 -20
  124. package/dist/server/routes/nodes.js +7 -86
  125. package/dist/server/routes/nodes.js.map +1 -1
  126. package/dist/server/routes/settings.d.ts +3 -7
  127. package/dist/server/routes/settings.js +18 -8
  128. package/dist/server/routes/settings.js.map +1 -1
  129. package/dist/server/routes/status.d.ts +2 -25
  130. package/dist/server/routes/status.js +3 -43
  131. package/dist/server/routes/status.js.map +1 -1
  132. package/dist/server/server.js +8 -8
  133. package/dist/server/settings-store.d.ts +2 -2
  134. package/dist/server/settings-store.js +2 -2
  135. package/dist/server/static.js +1 -2
  136. package/dist/server/static.js.map +1 -1
  137. package/dist/ui/assets/index-BHd8CWZA.css +1 -0
  138. package/dist/ui/assets/index-Ccr2GjPT.js +23 -0
  139. package/dist/ui/assets/index-Ccr2GjPT.js.map +1 -0
  140. package/dist/ui/index.html +2 -2
  141. package/dist/update/index.d.ts +2 -2
  142. package/dist/update/index.js +2 -2
  143. package/dist/update/store.d.ts +1 -1
  144. package/dist/update/store.js +1 -1
  145. package/dist/update/types.d.ts +1 -1
  146. package/dist/update/types.js +1 -1
  147. package/package.json +5 -7
  148. package/src/__tests__/cli-nat.smoke.test.ts +219 -212
  149. package/src/__tests__/cli.smoke.test.ts +2 -2
  150. package/src/__tests__/global-setup.ts +2 -3
  151. package/src/__tests__/orchestrator-claim-secret.test.ts +111 -0
  152. package/src/__tests__/orchestrator-env-scrub.test.ts +160 -163
  153. package/src/__tests__/orchestrator-handle-contract.ts +134 -134
  154. package/src/__tests__/orchestrator-node-identity.test.ts +177 -203
  155. package/src/__tests__/orchestrator-ports.test.ts +124 -143
  156. package/src/__tests__/orchestrator-push.test.ts +138 -146
  157. package/src/__tests__/orchestrator.test.ts +1017 -1063
  158. package/src/__tests__/ui-access.test.ts +30 -0
  159. package/src/bin/host.ts +397 -572
  160. package/src/bin/join-output.ts +120 -0
  161. package/src/bin/nat-output.ts +188 -0
  162. package/src/bin/ui-access.ts +50 -0
  163. package/src/{donation → hosted}/__tests__/fake-orchestrator.test.ts +172 -173
  164. package/src/{donation → hosted}/__tests__/fake-orchestrator.ts +43 -23
  165. package/src/hosted/__tests__/hosted-node-service.test.ts +708 -0
  166. package/src/hosted/__tests__/hosted-node-supervisor.test.ts +475 -0
  167. package/src/hosted/__tests__/test-invitation.ts +33 -0
  168. package/src/hosted/claim-details.ts +103 -0
  169. package/src/hosted/hosted-node-service.ts +814 -0
  170. package/src/hosted/hosted-node-store.ts +144 -0
  171. package/src/hosted/hosted-node-supervisor.ts +439 -0
  172. package/src/hosted/hosted-node-watcher.ts +288 -0
  173. package/src/hosted/index.ts +53 -0
  174. package/src/hosted/node-status.ts +97 -0
  175. package/src/hosted/types.ts +160 -0
  176. package/src/index.ts +72 -91
  177. package/src/installer/__tests__/config.test.ts +15 -40
  178. package/src/installer/__tests__/installer.smoke.test.ts +184 -263
  179. package/src/installer/__tests__/wizard.test.ts +25 -13
  180. package/src/installer/config.ts +201 -175
  181. package/src/installer/index.ts +252 -327
  182. package/src/installer/paths.ts +104 -109
  183. package/src/installer/wizard.ts +24 -26
  184. package/src/nat/__tests__/address-resolver.test.ts +107 -82
  185. package/src/nat/__tests__/nat-service.test.ts +608 -515
  186. package/src/nat/__tests__/nat-store.test.ts +49 -12
  187. package/src/nat/__tests__/network-mode.test.ts +38 -0
  188. package/src/nat/__tests__/port-mapper.test.ts +30 -191
  189. package/src/nat/__tests__/reachability.test.ts +96 -13
  190. package/src/nat/address-resolver.ts +94 -52
  191. package/src/nat/address-watch.ts +92 -0
  192. package/src/nat/ddns/duckdns.ts +5 -1
  193. package/src/nat/ddns/index.ts +6 -0
  194. package/src/nat/index.ts +33 -13
  195. package/src/nat/nat-service.ts +942 -501
  196. package/src/nat/nat-store.ts +126 -31
  197. package/src/nat/network-mode.ts +36 -0
  198. package/src/nat/port-mapper.ts +241 -329
  199. package/src/nat/reachability.ts +155 -34
  200. package/src/nat/types.ts +110 -37
  201. package/src/{installer/__tests__/identity.test.ts → orchestrator/__tests__/identity-file.test.ts} +34 -34
  202. package/src/orchestrator/__tests__/node-identity.test.ts +62 -62
  203. package/src/orchestrator/host-process-orchestrator.ts +1089 -1260
  204. package/src/{installer/identity.ts → orchestrator/identity-file.ts} +56 -56
  205. package/src/orchestrator/index.ts +9 -10
  206. package/src/orchestrator/node-identity.ts +41 -41
  207. package/src/orchestrator/port-allocator.ts +71 -73
  208. package/src/orchestrator/state-store.ts +76 -90
  209. package/src/orchestrator/types.ts +34 -23
  210. package/src/package-version.ts +4 -0
  211. package/src/server/__tests__/bus.test.ts +38 -38
  212. package/src/server/__tests__/error-handler.test.ts +81 -118
  213. package/src/server/__tests__/fakes.ts +15 -18
  214. package/src/server/__tests__/hosted-nodes-route.test.ts +161 -0
  215. package/src/server/__tests__/nodes-route.test.ts +114 -283
  216. package/src/server/__tests__/publishers.test.ts +193 -180
  217. package/src/server/__tests__/server.smoke.test.ts +134 -223
  218. package/src/server/__tests__/settings-route.test.ts +210 -195
  219. package/src/server/__tests__/sse-route.test.ts +119 -119
  220. package/src/server/__tests__/status-route.test.ts +82 -121
  221. package/src/server/error-handler.ts +112 -178
  222. package/src/server/events/types.ts +20 -24
  223. package/src/server/index.ts +223 -267
  224. package/src/server/routes/hosted-nodes.ts +83 -0
  225. package/src/server/routes/nat.ts +75 -63
  226. package/src/server/routes/nodes.ts +96 -188
  227. package/src/server/routes/settings.ts +20 -15
  228. package/src/server/routes/status.ts +5 -67
  229. package/src/server/server.ts +8 -8
  230. package/src/server/settings-store.ts +2 -2
  231. package/src/server/static.ts +1 -2
  232. package/src/update/index.ts +2 -2
  233. package/src/update/store.ts +1 -1
  234. package/src/update/types.ts +1 -1
  235. package/dist/auth/duration.d.ts +0 -1
  236. package/dist/auth/duration.js +0 -32
  237. package/dist/auth/duration.js.map +0 -1
  238. package/dist/auth/index.d.ts +0 -11
  239. package/dist/auth/index.js +0 -9
  240. package/dist/auth/index.js.map +0 -1
  241. package/dist/auth/self-label.d.ts +0 -36
  242. package/dist/auth/self-label.js +0 -57
  243. package/dist/auth/self-label.js.map +0 -1
  244. package/dist/auth/trust-circle-store.d.ts +0 -26
  245. package/dist/auth/trust-circle-store.js +0 -129
  246. package/dist/auth/trust-circle-store.js.map +0 -1
  247. package/dist/auth/trust-circle.d.ts +0 -156
  248. package/dist/auth/trust-circle.js +0 -307
  249. package/dist/auth/trust-circle.js.map +0 -1
  250. package/dist/auth/types.d.ts +0 -84
  251. package/dist/auth/types.js +0 -24
  252. package/dist/auth/types.js.map +0 -1
  253. package/dist/donation/donation-service.d.ts +0 -389
  254. package/dist/donation/donation-service.js +0 -828
  255. package/dist/donation/donation-service.js.map +0 -1
  256. package/dist/donation/donation-store.d.ts +0 -51
  257. package/dist/donation/donation-store.js +0 -152
  258. package/dist/donation/donation-store.js.map +0 -1
  259. package/dist/donation/donation-supervisor.js +0 -364
  260. package/dist/donation/donation-supervisor.js.map +0 -1
  261. package/dist/donation/grant-service.d.ts +0 -80
  262. package/dist/donation/grant-service.js +0 -210
  263. package/dist/donation/grant-service.js.map +0 -1
  264. package/dist/donation/grant-store.d.ts +0 -38
  265. package/dist/donation/grant-store.js +0 -135
  266. package/dist/donation/grant-store.js.map +0 -1
  267. package/dist/donation/index.d.ts +0 -20
  268. package/dist/donation/index.js +0 -17
  269. package/dist/donation/index.js.map +0 -1
  270. package/dist/donation/types.d.ts +0 -224
  271. package/dist/donation/types.js +0 -40
  272. package/dist/donation/types.js.map +0 -1
  273. package/dist/installer/identity.js.map +0 -1
  274. package/dist/owner/index.d.ts +0 -11
  275. package/dist/owner/index.js +0 -11
  276. package/dist/owner/index.js.map +0 -1
  277. package/dist/owner/owner-node-client.d.ts +0 -110
  278. package/dist/owner/owner-node-client.js +0 -184
  279. package/dist/owner/owner-node-client.js.map +0 -1
  280. package/dist/server/routes/bootstrap-node-validation.d.ts +0 -115
  281. package/dist/server/routes/bootstrap-node-validation.js +0 -197
  282. package/dist/server/routes/bootstrap-node-validation.js.map +0 -1
  283. package/dist/server/routes/grants-admin.d.ts +0 -29
  284. package/dist/server/routes/grants-admin.js +0 -58
  285. package/dist/server/routes/grants-admin.js.map +0 -1
  286. package/dist/server/routes/grants.d.ts +0 -28
  287. package/dist/server/routes/grants.js +0 -165
  288. package/dist/server/routes/grants.js.map +0 -1
  289. package/dist/server/routes/provision-request-validation.d.ts +0 -45
  290. package/dist/server/routes/provision-request-validation.js +0 -97
  291. package/dist/server/routes/provision-request-validation.js.map +0 -1
  292. package/dist/server/routes/strands.d.ts +0 -20
  293. package/dist/server/routes/strands.js +0 -38
  294. package/dist/server/routes/strands.js.map +0 -1
  295. package/dist/server/routes/trust-circle.d.ts +0 -17
  296. package/dist/server/routes/trust-circle.js +0 -35
  297. package/dist/server/routes/trust-circle.js.map +0 -1
  298. package/dist/strands/index.d.ts +0 -7
  299. package/dist/strands/index.js +0 -6
  300. package/dist/strands/index.js.map +0 -1
  301. package/dist/strands/strand-service.d.ts +0 -50
  302. package/dist/strands/strand-service.js +0 -103
  303. package/dist/strands/strand-service.js.map +0 -1
  304. package/dist/strands/types.d.ts +0 -93
  305. package/dist/strands/types.js +0 -23
  306. package/dist/strands/types.js.map +0 -1
  307. package/dist/ui/assets/index-C6nELNfC.js +0 -23
  308. package/dist/ui/assets/index-C6nELNfC.js.map +0 -1
  309. package/dist/ui/assets/index-TtIYSeZO.css +0 -1
  310. package/src/__tests__/cli-invite.smoke.test.ts +0 -192
  311. package/src/__tests__/host-owner.smoke.test.ts +0 -123
  312. package/src/__tests__/orchestrator-owner.test.ts +0 -234
  313. package/src/__tests__/orchestrator-pin-keys.test.ts +0 -152
  314. package/src/auth/__tests__/duration.test.ts +0 -28
  315. package/src/auth/__tests__/self-label.test.ts +0 -85
  316. package/src/auth/__tests__/trust-circle-integration.test.ts +0 -152
  317. package/src/auth/__tests__/trust-circle-store.test.ts +0 -115
  318. package/src/auth/__tests__/trust-circle.test.ts +0 -445
  319. package/src/auth/duration.ts +0 -33
  320. package/src/auth/index.ts +0 -21
  321. package/src/auth/self-label.ts +0 -74
  322. package/src/auth/trust-circle-store.ts +0 -155
  323. package/src/auth/trust-circle.ts +0 -395
  324. package/src/auth/types.ts +0 -99
  325. package/src/donation/__tests__/donation-service.test.ts +0 -1193
  326. package/src/donation/__tests__/donation-supervisor.test.ts +0 -548
  327. package/src/donation/__tests__/grant-service.test.ts +0 -213
  328. package/src/donation/__tests__/grant-store.test.ts +0 -113
  329. package/src/donation/donation-service.ts +0 -1033
  330. package/src/donation/donation-store.ts +0 -176
  331. package/src/donation/donation-supervisor.ts +0 -411
  332. package/src/donation/grant-service.ts +0 -252
  333. package/src/donation/grant-store.ts +0 -152
  334. package/src/donation/index.ts +0 -65
  335. package/src/donation/types.ts +0 -260
  336. package/src/owner/__tests__/owner-node-client.test.ts +0 -194
  337. package/src/owner/index.ts +0 -12
  338. package/src/owner/owner-node-client.ts +0 -259
  339. package/src/server/__tests__/bootstrap-node-validation.test.ts +0 -138
  340. package/src/server/__tests__/grants-admin-route.test.ts +0 -171
  341. package/src/server/__tests__/grants-route.test.ts +0 -394
  342. package/src/server/__tests__/strands-route.test.ts +0 -234
  343. package/src/server/routes/bootstrap-node-validation.ts +0 -206
  344. package/src/server/routes/grants-admin.ts +0 -74
  345. package/src/server/routes/grants.ts +0 -193
  346. package/src/server/routes/provision-request-validation.ts +0 -105
  347. package/src/server/routes/strands.ts +0 -54
  348. package/src/server/routes/trust-circle.ts +0 -49
  349. package/src/strands/__tests__/strand-service.test.ts +0 -165
  350. package/src/strands/index.ts +0 -14
  351. package/src/strands/strand-service.ts +0 -135
  352. package/src/strands/types.ts +0 -102
package/src/index.ts CHANGED
@@ -4,18 +4,12 @@
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), auth (trust circle, not API
8
- * keys), installer, NAT layer, and local management UI.
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
- * Implementations of HostProcessOrchestrator, TrustCircleAuth, the NAT
11
- * layer, installer scripts, and the local UI live in sibling subdirectories
12
- * under src/ and are added by their respective tickets:
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
14
 
21
15
  export type {
@@ -27,84 +21,57 @@ export type {
27
21
  ContainerResources,
28
22
  } from '@serfab/cadre-provider';
29
23
 
30
- export { HostProcessOrchestrator, OWNER_CONTAINER_ID } from './orchestrator/index.js';
24
+ export { HostProcessOrchestrator } from './orchestrator/index.js';
31
25
  export type {
32
26
  HostProcessConfig,
27
+ HostedSpawnRequest,
33
28
  PersistedHandle,
34
29
  ManagedNodeInfo,
35
30
  NodeStateListener,
36
31
  NodePorts,
37
- OwnerAdminEndpoint,
38
- OwnerSpawnConfig,
39
32
  } from './orchestrator/index.js';
40
33
 
41
- export { OwnerNodeClient, OwnerNodeUnavailableError } from './owner/index.js';
42
- export type { OwnerNodeClientOptions } from './owner/index.js';
43
-
44
- export {
45
- TrustCircleService,
46
- TrustCircleStore,
47
- TrustCircleError,
48
- createTrustCircleHandlers,
49
- parseDuration,
50
- ensureSelfLabel,
51
- DEFAULT_INVITE_TTL_MS,
52
- } from './auth/index.js';
53
- export type {
54
- TrustCircleServiceOptions,
55
- CadreNodeLike,
56
- TrustCircleMember,
57
- PendingInvite,
58
- TrustCircleFile,
59
- TrustCircleSnapshot,
60
- TrustCircleHandlers,
61
- TrustCircleErrorCode,
62
- } from './auth/index.js';
63
-
64
- /* ──────────────── strand management ──────────────── */
65
-
66
- export { StrandService, StrandError, createStrandHandlers } from './strands/index.js';
67
- export type {
68
- StrandServiceOptions,
69
- CadreNodeLike as StrandCadreNodeLike,
70
- StrandSummary,
71
- StrandListSnapshot,
72
- StrandRemovalResult,
73
- StrandHandlers,
74
- StrandErrorCode,
75
- } from './strands/index.js';
76
-
77
- /* ──────────────── donation grant tokens ──────────────── */
34
+ /* ──────────────── hosted nodes ("Join a cadre") ──────────────── */
78
35
 
79
36
  export {
80
- GrantStore,
81
- GrantService,
82
- createGrantAdminHandlers,
83
- GrantError,
84
- DEFAULT_MAX_NODES,
85
- DonationStore,
86
- DonationService,
87
- DonationError,
88
- } from './donation/index.js';
37
+ HostedNodeStore,
38
+ HostedNodeService,
39
+ HostedNodeSupervisor,
40
+ HostedNodeError,
41
+ HOSTED_NODE_SPAWNING_TTL_MS,
42
+ HOSTED_NODE_REAP_SWEEP_MS,
43
+ HOSTED_NODE_CLAIM_POLL_MS,
44
+ HOSTED_NODE_CONNECTED_POLL_MS,
45
+ HOSTED_NODE_RESPAWN_BACKOFF_BASE_MS,
46
+ HOSTED_NODE_RESPAWN_BACKOFF_MAX_MS,
47
+ HOSTED_NODE_RESPAWN_MAX_ATTEMPTS,
48
+ HOSTED_NODE_RESPAWN_HEALTHY_MS,
49
+ HOSTED_NODE_RESPAWN_SWEEP_MS,
50
+ PLACEHOLDER_PARTY,
51
+ } from './hosted/index.js';
89
52
  export type {
90
- Grant,
91
- GrantDenyReason,
92
- GrantValidation,
93
- GrantValidator,
94
- GrantFile,
95
- GrantAdminHandlers,
96
- GrantErrorCode,
97
- GrantServiceOptions,
98
- Donation,
99
- DonationView,
100
- DonationStatus,
101
- DonationFile,
102
- DonationErrorCode,
103
- DonationProvisionRequest,
104
- DonationSeedResult,
105
- DonationPeerInfo,
106
- DonationServiceOptions,
107
- } from './donation/index.js';
53
+ ClaimDetails,
54
+ HostedNode,
55
+ HostedNodeAddressSource,
56
+ HostedNodeChange,
57
+ HostedNodeChangeKind,
58
+ HostedNodeChangeListener,
59
+ HostedNodeErrorCode,
60
+ HostedNodeClaimJoin,
61
+ HostedNodeFile,
62
+ HostedNodeInvitationJoin,
63
+ HostedNodeJoin,
64
+ HostedNodeJoinView,
65
+ HostedNodeOrchestrator,
66
+ HostedNodeServiceOptions,
67
+ HostedNodeStatus,
68
+ HostedNodeSupervisorOptions,
69
+ HostedNodeView,
70
+ JoinOptions,
71
+ RespawnOptions,
72
+ RespawnResult,
73
+ SupervisedOrchestrator,
74
+ } from './hosted/index.js';
108
75
 
109
76
  export { Installer, readHostConfig, updateHostConfig, writeHostConfig } from './installer/index.js';
110
77
  export type {
@@ -179,11 +146,16 @@ export {
179
146
  NatStore,
180
147
  NatError,
181
148
  createNatHandlers,
149
+ NAT_UNMAP_GRACE_MS,
150
+ NAT_RECONCILE_INTERVAL_MS,
151
+ NAT_IP_REDETECT_INTERVAL_MS,
182
152
  ExternalIpDetector,
183
- PortMapperService,
184
- createDefaultPortMapper,
185
- evaluateReachability,
186
- buildInviteAddresses,
153
+ UpnpPortMapper,
154
+ pickLanAddress,
155
+ evaluateNodeReachability,
156
+ evaluateHostReachability,
157
+ buildPublicAddresses,
158
+ isPublicIpv4,
187
159
  BUILTIN_PROVIDERS,
188
160
  getProvider,
189
161
  listProviders,
@@ -196,30 +168,41 @@ export {
196
168
  KEYTAR_SERVICE,
197
169
  DEFAULT_LEASE_TTL_MS,
198
170
  DEFAULT_REFRESH_MS,
171
+ GATEWAY_DISCOVERY_TIMEOUT_MS,
199
172
  isPlausibleIp,
200
173
  } from './nat/index.js';
201
174
  export type {
202
175
  NatServiceOptions,
203
- CadreNodeLike as NatCadreNodeLike,
176
+ NatNodeSource,
177
+ NatChangeListener,
178
+ NodeAddressesStaleListener,
204
179
  NatStatusSnapshot,
180
+ NatGatewayStatus,
205
181
  NatDdnsStatus,
206
182
  NatSettingsFile,
207
183
  NatDdnsSettings,
208
184
  NatHandlers,
209
185
  NatErrorCode,
210
- PortForwardMode,
211
186
  DirectReachability,
187
+ NodeReachability,
188
+ NodeVerdict,
189
+ PortKind,
190
+ PortRoute,
191
+ PortRouteSource,
192
+ ManualForward,
193
+ ManualForwardPatch,
212
194
  DdnsProviderInfo,
213
195
  DdnsConfigField,
214
196
  ExternalIpResult,
215
197
  RouterIpProbe,
216
198
  ExternalIpDetectorOptions,
217
199
  PortMapper,
218
- PortMappingResult,
219
- PortMapOptions,
220
- PortMapperState,
221
- PortMapperServiceOptions,
222
- BuildInviteAddressesInput,
200
+ GatewayInfo,
201
+ PortMapRequest,
202
+ PortMapResult,
203
+ NodeVerdictInput,
204
+ NodeVerdictResult,
205
+ PublicAddressInput,
223
206
  DdnsProvider,
224
207
  DdnsProviderDeps,
225
208
  DdnsUpdaterOptions,
@@ -236,8 +219,6 @@ export {
236
219
  HostSettingsStore,
237
220
  } from './server/index.js';
238
221
  export type {
239
- FounderServices,
240
- HostRole,
241
222
  LocalUiServer,
242
223
  LocalUiServerOptions,
243
224
  LocalUiEvent,
@@ -3,7 +3,7 @@ import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
3
3
  import { tmpdir } from 'node:os';
4
4
  import { join } from 'node:path';
5
5
 
6
- import { readHostConfig, updateHostConfig, writeHostConfig, hostOwnsCadre, type HostConfigFile } from '../config.js';
6
+ import { readHostConfig, updateHostConfig, writeHostConfig, type HostConfigFile } from '../config.js';
7
7
 
8
8
  describe('host.config.json round-trip', () => {
9
9
  let tmp: string;
@@ -18,12 +18,10 @@ describe('host.config.json round-trip', () => {
18
18
 
19
19
  function makeCfg(overrides: Partial<HostConfigFile> = {}): HostConfigFile {
20
20
  return {
21
- version: 2,
21
+ version: 3,
22
22
  installId: 'abc123',
23
23
  uiPort: 8765,
24
- libp2pPort: 4001,
25
24
  dataDir: tmp,
26
- identityPath: join(tmp, 'identity.key'),
27
25
  upnpEnabled: true,
28
26
  installedAt: '2026-01-01T00:00:00.000Z',
29
27
  installerVersion: '0.6.0',
@@ -39,10 +37,11 @@ describe('host.config.json round-trip', () => {
39
37
  expect(readHostConfig(path)).toEqual(cfg);
40
38
  });
41
39
 
42
- it('rejects v1 files without rewriting them', () => {
40
+ // A version-2 file is a founder-era install: it is refused, never migrated.
41
+ it('rejects v2 files without rewriting them', () => {
43
42
  const path = join(tmp, 'host.config.json');
44
- const v1 = {
45
- version: 1,
43
+ const v2 = {
44
+ version: 2,
46
45
  installId: 'abc123',
47
46
  uiPort: 8765,
48
47
  libp2pPort: 4001,
@@ -51,10 +50,12 @@ describe('host.config.json round-trip', () => {
51
50
  upnpEnabled: true,
52
51
  installedAt: '2026-01-01T00:00:00.000Z',
53
52
  installerVersion: '0.6.0',
53
+ updates: { autoApply: false },
54
+ ownCadre: { enabled: true },
54
55
  };
55
- const raw = JSON.stringify(v1);
56
+ const raw = JSON.stringify(v2);
56
57
  writeFileSync(path, raw);
57
- expect(() => readHostConfig(path)).toThrow(/unsupported version=1/);
58
+ expect(() => readHostConfig(path)).toThrow(/unsupported version=2/);
58
59
  expect(readFileSync(path, 'utf8')).toBe(raw);
59
60
  });
60
61
 
@@ -79,20 +80,20 @@ describe('host.config.json round-trip', () => {
79
80
 
80
81
  it('rejects missing required fields', () => {
81
82
  const path = join(tmp, 'host.config.json');
82
- writeFileSync(path, JSON.stringify({ version: 2, uiPort: 1234 }));
83
+ writeFileSync(path, JSON.stringify({ version: 3, uiPort: 1234 }));
83
84
  expect(() => readHostConfig(path)).toThrow(/missing required fields/);
84
85
  });
85
86
 
86
87
  it('refuses to write the wrong version', () => {
87
88
  const path = join(tmp, 'host.config.json');
88
- expect(() => writeHostConfig(path, { ...makeCfg(), version: 3 as never })).toThrow(/version=3/);
89
+ expect(() => writeHostConfig(path, { ...makeCfg(), version: 2 as never })).toThrow(/version=2/);
89
90
  });
90
91
 
91
92
  it('update patches fields and re-stamps the current version', () => {
92
93
  const path = join(tmp, 'host.config.json');
93
94
  writeHostConfig(path, makeCfg());
94
95
  const next = updateHostConfig(path, { updates: { autoApply: true } });
95
- expect(next.version).toBe(2);
96
+ expect(next.version).toBe(3);
96
97
  expect(next.updates).toEqual({ autoApply: true });
97
98
  expect(next.installId).toBe('abc123');
98
99
  expect(readHostConfig(path)).toEqual(next);
@@ -102,33 +103,7 @@ describe('host.config.json round-trip', () => {
102
103
  const path = join(tmp, 'host.config.json');
103
104
  writeHostConfig(path, makeCfg());
104
105
  const patch = { version: 1 } as unknown as Partial<Omit<HostConfigFile, 'version'>>;
105
- expect(updateHostConfig(path, patch).version).toBe(2);
106
- expect(readHostConfig(path).version).toBe(2);
107
- });
108
-
109
- it('round-trips ownCadre and hostOwnsCadre reflects it', () => {
110
- const path = join(tmp, 'host.config.json');
111
- const cfg = makeCfg({ ownCadre: { enabled: true } });
112
- writeHostConfig(path, cfg);
113
- const read = readHostConfig(path);
114
- expect(read.ownCadre).toEqual({ enabled: true });
115
- expect(hostOwnsCadre(read)).toBe(true);
116
- });
117
-
118
- it('treats an absent ownCadre as donor-only (hostOwnsCadre false)', () => {
119
- // A pre-ownCadre v2 config (field absent) must read back cleanly and be
120
- // donor-only — no migration, field stays absent.
121
- const path = join(tmp, 'host.config.json');
122
- const cfg = makeCfg();
123
- writeHostConfig(path, cfg);
124
- const read = readHostConfig(path);
125
- expect(read.ownCadre).toBeUndefined();
126
- expect(hostOwnsCadre(read)).toBe(false);
127
- });
128
-
129
- it('rejects a malformed ownCadre shape', () => {
130
- const path = join(tmp, 'host.config.json');
131
- writeFileSync(path, JSON.stringify({ ...makeCfg(), ownCadre: { enabled: 'yes' } }));
132
- expect(() => readHostConfig(path)).toThrow(/missing required fields/);
106
+ expect(updateHostConfig(path, patch).version).toBe(3);
107
+ expect(readHostConfig(path).version).toBe(3);
133
108
  });
134
109
  });