@serfab/cadre-core 1.16.0 → 1.18.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 (268) hide show
  1. package/README.md +4 -3
  2. package/dist/bootstrap-peer-store-file.js +1 -1
  3. package/dist/bootstrap-peer-store.d.ts +1 -1
  4. package/dist/bootstrap-peer-store.js +4 -4
  5. package/dist/cadre-invite-protocol.d.ts +81 -142
  6. package/dist/cadre-invite-protocol.js +168 -458
  7. package/dist/cadre-invite-protocol.js.map +1 -1
  8. package/dist/cadre-join-request.d.ts +15 -2
  9. package/dist/cadre-join-request.js +22 -3
  10. package/dist/cadre-join-request.js.map +1 -1
  11. package/dist/cadre-node.d.ts +1089 -475
  12. package/dist/cadre-node.js +2170 -1037
  13. package/dist/cadre-node.js.map +1 -1
  14. package/dist/control-authorization.d.ts +36 -14
  15. package/dist/control-authorization.js +20 -3
  16. package/dist/control-authorization.js.map +1 -1
  17. package/dist/control-cohort.d.ts +88 -32
  18. package/dist/control-cohort.js +91 -33
  19. package/dist/control-cohort.js.map +1 -1
  20. package/dist/control-database.d.ts +856 -318
  21. package/dist/control-database.js +1422 -701
  22. package/dist/control-database.js.map +1 -1
  23. package/dist/control-formation-recorder.d.ts +46 -43
  24. package/dist/control-formation-recorder.js +77 -78
  25. package/dist/control-formation-recorder.js.map +1 -1
  26. package/dist/control-protocol-guard.d.ts +11 -4
  27. package/dist/control-protocol-guard.js +20 -5
  28. package/dist/control-protocol-guard.js.map +1 -1
  29. package/dist/control-schema-version.d.ts +97 -0
  30. package/dist/control-schema-version.js +225 -0
  31. package/dist/control-schema-version.js.map +1 -0
  32. package/dist/control-schema.d.ts +45 -5
  33. package/dist/control-schema.js +262 -78
  34. package/dist/control-schema.js.map +1 -1
  35. package/dist/control-write-retry.d.ts +45 -10
  36. package/dist/control-write-retry.js +92 -22
  37. package/dist/control-write-retry.js.map +1 -1
  38. package/dist/delegate-admission.d.ts +13 -0
  39. package/dist/delegate-admission.js +27 -0
  40. package/dist/delegate-admission.js.map +1 -1
  41. package/dist/ed25519-key.d.ts +10 -7
  42. package/dist/ed25519-key.js +23 -20
  43. package/dist/ed25519-key.js.map +1 -1
  44. package/dist/edge-node/config.d.ts +122 -0
  45. package/dist/edge-node/config.js +199 -0
  46. package/dist/edge-node/config.js.map +1 -0
  47. package/dist/edge-node/dissolve.d.ts +95 -0
  48. package/dist/edge-node/dissolve.js +184 -0
  49. package/dist/edge-node/dissolve.js.map +1 -0
  50. package/dist/edge-node/edge-join.d.ts +44 -0
  51. package/dist/edge-node/edge-join.js +227 -0
  52. package/dist/edge-node/edge-join.js.map +1 -0
  53. package/dist/edge-node/edge-node.d.ts +295 -0
  54. package/dist/edge-node/edge-node.js +704 -0
  55. package/dist/edge-node/edge-node.js.map +1 -0
  56. package/dist/edge-node/index.d.ts +18 -0
  57. package/dist/edge-node/index.js +18 -0
  58. package/dist/edge-node/index.js.map +1 -0
  59. package/dist/edge-node/join-credential.d.ts +11 -0
  60. package/dist/edge-node/join-credential.js +11 -0
  61. package/dist/edge-node/join-credential.js.map +1 -0
  62. package/dist/edge-node/lazy-raw-storage.d.ts +40 -0
  63. package/dist/edge-node/lazy-raw-storage.js +134 -0
  64. package/dist/edge-node/lazy-raw-storage.js.map +1 -0
  65. package/dist/edge-node/node-local.d.ts +60 -0
  66. package/dist/edge-node/node-local.js +58 -0
  67. package/dist/edge-node/node-local.js.map +1 -0
  68. package/dist/edge-node/options.d.ts +83 -0
  69. package/dist/edge-node/options.js +110 -0
  70. package/dist/edge-node/options.js.map +1 -0
  71. package/dist/edge-node/owner-grant.d.ts +41 -0
  72. package/dist/edge-node/owner-grant.js +38 -0
  73. package/dist/edge-node/owner-grant.js.map +1 -0
  74. package/dist/edge-node/platform.d.ts +140 -0
  75. package/dist/edge-node/platform.js +12 -0
  76. package/dist/edge-node/platform.js.map +1 -0
  77. package/dist/edge-node/strand-move.d.ts +115 -0
  78. package/dist/edge-node/strand-move.js +223 -0
  79. package/dist/edge-node/strand-move.js.map +1 -0
  80. package/dist/edge-node/strands.d.ts +28 -0
  81. package/dist/edge-node/strands.js +60 -0
  82. package/dist/edge-node/strands.js.map +1 -0
  83. package/dist/enrolled-machine-store.d.ts +3 -3
  84. package/dist/enrolled-machine-store.js +3 -3
  85. package/dist/formation-token.d.ts +48 -0
  86. package/dist/formation-token.js +26 -0
  87. package/dist/formation-token.js.map +1 -0
  88. package/dist/index.d.ts +27 -17
  89. package/dist/index.js +39 -17
  90. package/dist/index.js.map +1 -1
  91. package/dist/joined-strand-store.d.ts +29 -12
  92. package/dist/joined-strand-store.js +66 -27
  93. package/dist/joined-strand-store.js.map +1 -1
  94. package/dist/key-store.d.ts +9 -4
  95. package/dist/key-store.js +9 -4
  96. package/dist/key-store.js.map +1 -1
  97. package/dist/link-budget.d.ts +9 -7
  98. package/dist/link-budget.js +9 -7
  99. package/dist/link-budget.js.map +1 -1
  100. package/dist/machine-removal.d.ts +19 -39
  101. package/dist/machine-removal.js +24 -98
  102. package/dist/machine-removal.js.map +1 -1
  103. package/dist/member-redemption.d.ts +256 -0
  104. package/dist/member-redemption.js +490 -0
  105. package/dist/member-redemption.js.map +1 -0
  106. package/dist/membership-view.d.ts +91 -0
  107. package/dist/membership-view.js +110 -0
  108. package/dist/membership-view.js.map +1 -0
  109. package/dist/owner-anchor-sync.d.ts +4 -4
  110. package/dist/owner-anchor-sync.js +16 -15
  111. package/dist/owner-anchor-sync.js.map +1 -1
  112. package/dist/owner-grant-protocol.d.ts +251 -0
  113. package/dist/owner-grant-protocol.js +344 -0
  114. package/dist/owner-grant-protocol.js.map +1 -0
  115. package/dist/owner-key-export.d.ts +70 -0
  116. package/dist/owner-key-export.js +279 -0
  117. package/dist/owner-key-export.js.map +1 -0
  118. package/dist/owner-key-flows.d.ts +55 -0
  119. package/dist/owner-key-flows.js +60 -0
  120. package/dist/owner-key-flows.js.map +1 -0
  121. package/dist/owner-key-store.d.ts +31 -0
  122. package/dist/owner-key-store.js +81 -0
  123. package/dist/owner-key-store.js.map +1 -0
  124. package/dist/owner-keys.d.ts +78 -0
  125. package/dist/owner-keys.js +133 -0
  126. package/dist/owner-keys.js.map +1 -0
  127. package/dist/owner-signer.d.ts +54 -0
  128. package/dist/owner-signer.js +51 -0
  129. package/dist/owner-signer.js.map +1 -0
  130. package/dist/peer-addr-book.d.ts +10 -1
  131. package/dist/peer-addr-book.js +4 -3
  132. package/dist/peer-addr-book.js.map +1 -1
  133. package/dist/peer-authorization.d.ts +83 -18
  134. package/dist/peer-authorization.js +123 -53
  135. package/dist/peer-authorization.js.map +1 -1
  136. package/dist/peer-join-backfill.d.ts +89 -20
  137. package/dist/peer-join-backfill.js +265 -108
  138. package/dist/peer-join-backfill.js.map +1 -1
  139. package/dist/pending-join-runner.d.ts +48 -18
  140. package/dist/pending-join-runner.js +74 -56
  141. package/dist/pending-join-runner.js.map +1 -1
  142. package/dist/provider/rent-node.js +1 -1
  143. package/dist/provider/rent-node.js.map +1 -1
  144. package/dist/seed-bootstrap.d.ts +162 -133
  145. package/dist/seed-bootstrap.js +300 -283
  146. package/dist/seed-bootstrap.js.map +1 -1
  147. package/dist/seed-trust-policy.js +4 -4
  148. package/dist/strand-addr-protocol.d.ts +4 -1
  149. package/dist/strand-addr-protocol.js +8 -2
  150. package/dist/strand-addr-protocol.js.map +1 -1
  151. package/dist/strand-cohort.d.ts +3 -0
  152. package/dist/strand-cohort.js.map +1 -1
  153. package/dist/strand-database.d.ts +24 -2
  154. package/dist/strand-database.js +29 -6
  155. package/dist/strand-database.js.map +1 -1
  156. package/dist/strand-first-sync-gate.d.ts +176 -88
  157. package/dist/strand-first-sync-gate.js +288 -121
  158. package/dist/strand-first-sync-gate.js.map +1 -1
  159. package/dist/strand-formation-deadlines.d.ts +9 -9
  160. package/dist/strand-formation-deadlines.js +9 -9
  161. package/dist/strand-formation-manager.d.ts +23 -17
  162. package/dist/strand-formation-manager.js +46 -44
  163. package/dist/strand-formation-manager.js.map +1 -1
  164. package/dist/strand-formation-protocol.d.ts +5 -8
  165. package/dist/strand-formation-protocol.js +101 -16
  166. package/dist/strand-formation-protocol.js.map +1 -1
  167. package/dist/strand-instance-manager.d.ts +27 -18
  168. package/dist/strand-instance-manager.js +119 -50
  169. package/dist/strand-instance-manager.js.map +1 -1
  170. package/dist/strand-membership-reconciler.d.ts +16 -13
  171. package/dist/strand-membership-reconciler.js +30 -22
  172. package/dist/strand-membership-reconciler.js.map +1 -1
  173. package/dist/strand-membership-writer.d.ts +45 -22
  174. package/dist/strand-membership-writer.js +226 -131
  175. package/dist/strand-membership-writer.js.map +1 -1
  176. package/dist/strand-move.d.ts +6 -5
  177. package/dist/strand-move.js +36 -32
  178. package/dist/strand-move.js.map +1 -1
  179. package/dist/strand-peer-redial.js +2 -3
  180. package/dist/strand-peer-redial.js.map +1 -1
  181. package/dist/strand-revocation-enforcer.d.ts +134 -60
  182. package/dist/strand-revocation-enforcer.js +144 -71
  183. package/dist/strand-revocation-enforcer.js.map +1 -1
  184. package/dist/strand-solicitation.d.ts +50 -39
  185. package/dist/strand-solicitation.js +10 -3
  186. package/dist/strand-solicitation.js.map +1 -1
  187. package/dist/strand-watcher.d.ts +80 -13
  188. package/dist/strand-watcher.js +152 -48
  189. package/dist/strand-watcher.js.map +1 -1
  190. package/dist/table-change-watch.d.ts +63 -0
  191. package/dist/table-change-watch.js +209 -0
  192. package/dist/table-change-watch.js.map +1 -0
  193. package/dist/timeout-scheduler.d.ts +4 -3
  194. package/dist/timeout-scheduler.js +4 -3
  195. package/dist/timeout-scheduler.js.map +1 -1
  196. package/dist/types.d.ts +374 -150
  197. package/dist/types.js +4 -4
  198. package/dist/types.js.map +1 -1
  199. package/package.json +17 -8
  200. package/src/bootstrap-peer-store-file.ts +44 -44
  201. package/src/bootstrap-peer-store.ts +214 -214
  202. package/src/cadre-invite-protocol.ts +740 -1052
  203. package/src/cadre-join-request.ts +24 -3
  204. package/src/cadre-node.ts +2402 -1079
  205. package/src/control-authorization.ts +47 -14
  206. package/src/control-cohort.ts +204 -128
  207. package/src/control-database.ts +1749 -820
  208. package/src/control-formation-recorder.ts +359 -353
  209. package/src/control-protocol-guard.ts +23 -6
  210. package/src/control-schema-version.ts +301 -0
  211. package/src/control-schema.ts +273 -78
  212. package/src/control-write-retry.ts +641 -567
  213. package/src/delegate-admission.ts +351 -314
  214. package/src/ed25519-key.ts +174 -171
  215. package/src/edge-node/config.ts +277 -0
  216. package/src/edge-node/dissolve.ts +251 -0
  217. package/src/edge-node/edge-join.ts +319 -0
  218. package/src/edge-node/edge-node.ts +1045 -0
  219. package/src/edge-node/index.ts +59 -0
  220. package/src/edge-node/join-credential.ts +16 -0
  221. package/src/edge-node/lazy-raw-storage.ts +178 -0
  222. package/src/edge-node/node-local.ts +84 -0
  223. package/src/edge-node/options.ts +179 -0
  224. package/src/edge-node/owner-grant.ts +63 -0
  225. package/src/edge-node/platform.ts +151 -0
  226. package/src/edge-node/strand-move.ts +270 -0
  227. package/src/edge-node/strands.ts +72 -0
  228. package/src/enrolled-machine-store.ts +3 -3
  229. package/src/formation-token.ts +63 -0
  230. package/src/index.ts +899 -789
  231. package/src/joined-strand-store.ts +73 -28
  232. package/src/key-store.ts +10 -4
  233. package/src/link-budget.ts +9 -7
  234. package/src/machine-removal.ts +26 -111
  235. package/src/member-redemption.ts +649 -0
  236. package/src/membership-view.ts +144 -0
  237. package/src/owner-anchor-sync.ts +19 -18
  238. package/src/owner-grant-protocol.ts +547 -0
  239. package/src/owner-key-export.ts +348 -0
  240. package/src/owner-key-flows.ts +109 -0
  241. package/src/owner-key-store.ts +85 -0
  242. package/src/owner-keys.ts +178 -0
  243. package/src/owner-signer.ts +94 -0
  244. package/src/peer-addr-book.ts +4 -3
  245. package/src/peer-authorization.ts +558 -488
  246. package/src/peer-join-backfill.ts +971 -761
  247. package/src/pending-join-runner.ts +76 -53
  248. package/src/provider/rent-node.ts +1 -1
  249. package/src/seed-bootstrap.ts +343 -349
  250. package/src/seed-trust-policy.ts +4 -4
  251. package/src/strand-addr-protocol.ts +547 -538
  252. package/src/strand-cohort.ts +4 -0
  253. package/src/strand-database.ts +352 -319
  254. package/src/strand-first-sync-gate.ts +334 -133
  255. package/src/strand-formation-deadlines.ts +227 -227
  256. package/src/strand-formation-manager.ts +731 -725
  257. package/src/strand-formation-protocol.ts +122 -24
  258. package/src/strand-instance-manager.ts +2092 -2026
  259. package/src/strand-membership-reconciler.ts +33 -25
  260. package/src/strand-membership-writer.ts +2093 -1974
  261. package/src/strand-move.ts +50 -38
  262. package/src/strand-peer-redial.ts +2 -3
  263. package/src/strand-revocation-enforcer.ts +740 -654
  264. package/src/strand-solicitation.ts +61 -34
  265. package/src/strand-watcher.ts +175 -56
  266. package/src/table-change-watch.ts +285 -0
  267. package/src/timeout-scheduler.ts +29 -28
  268. package/src/types.ts +391 -152
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-node.js","sourceRoot":"","sources":["../../src/edge-node/edge-node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * `@serfab/cadre-core/edge-node` — build and run an edge device's cadre node the prescribed way:
3
+ * `createEdgeNode(platform)` over the app's key store and storage. A subpath rather than the root
4
+ * export, so cadre-host and the CLI never load it; the React Native kit's `createPhoneNode`
5
+ * (`@serfab/cadre-rn/phone-node`) is this over the secure store and rn-leveldb, and the browser
6
+ * and NativeScript reference apps run it over IndexedDB and SQLite.
7
+ */
8
+ export { createEdgeNode, type EdgeJoinProgress, type EdgeNode, type EdgeNodeStatus, type JoinCadreOptions, type JoinCadreResult, type UnfinishedRemoval, } from './edge-node.js';
9
+ export { DEFAULT_EDGE_NODE_NAMES, type EdgeNodeNames, type EdgeNodePlatform, type EdgeNodeStorage, type RemovableSlot, } from './platform.js';
10
+ export { isNoiseCryptoMode, NOISE_CRYPTO_MODES, parseSavedStart, serializeSavedStart, type EdgeNodeOptions, type EdgeNodeOrigin, type NoiseCryptoMode, type SavedStart, } from './options.js';
11
+ export { buildEdgeNodeConfig, DEFAULT_OWNER_GENESIS_TIMEOUT_MS, DEFAULT_OWNER_KEY_LABEL, runOwnerGenesis, wireJoinedOwnerKey, type EdgeNodeConfigInputs, type JoinedOwnerKeyOptions, type OwnerGenesisOptions, type OwnerGenesisResult, } from './config.js';
12
+ export { attachStrandWhenWritable, DEFAULT_STRAND_PATIENCE_MS, retryAfterRestart } from './strands.js';
13
+ export { StrandsNeedOwnerJoinError, type PendingStrandMove, type StrandMoveOutcome } from './strand-move.js';
14
+ export { isOwnerGrant, type JoinCredential } from './join-credential.js';
15
+ export { type RedeemedOwnerGrant } from './owner-grant.js';
16
+ export { FormerPartyNotEmptyError, StrandMovePendingError, type DissolveFormerPartyOptions } from './dissolve.js';
17
+ export { bootstrapPeersKvKey, enrolledMachinesKvKey, kvStoreSlot, strandNetworkKvKey, trustedOwnersKvKey, type KvStoreApi, type NodeLocalKv, } from './node-local.js';
18
+ export { lazyRawStorage } from './lazy-raw-storage.js';
@@ -0,0 +1,18 @@
1
+ /**
2
+ * `@serfab/cadre-core/edge-node` — build and run an edge device's cadre node the prescribed way:
3
+ * `createEdgeNode(platform)` over the app's key store and storage. A subpath rather than the root
4
+ * export, so cadre-host and the CLI never load it; the React Native kit's `createPhoneNode`
5
+ * (`@serfab/cadre-rn/phone-node`) is this over the secure store and rn-leveldb, and the browser
6
+ * and NativeScript reference apps run it over IndexedDB and SQLite.
7
+ */
8
+ export { createEdgeNode, } from './edge-node.js';
9
+ export { DEFAULT_EDGE_NODE_NAMES, } from './platform.js';
10
+ export { isNoiseCryptoMode, NOISE_CRYPTO_MODES, parseSavedStart, serializeSavedStart, } from './options.js';
11
+ export { buildEdgeNodeConfig, DEFAULT_OWNER_GENESIS_TIMEOUT_MS, DEFAULT_OWNER_KEY_LABEL, runOwnerGenesis, wireJoinedOwnerKey, } from './config.js';
12
+ export { attachStrandWhenWritable, DEFAULT_STRAND_PATIENCE_MS, retryAfterRestart } from './strands.js';
13
+ export { StrandsNeedOwnerJoinError } from './strand-move.js';
14
+ export { isOwnerGrant } from './join-credential.js';
15
+ export { FormerPartyNotEmptyError, StrandMovePendingError } from './dissolve.js';
16
+ export { bootstrapPeersKvKey, enrolledMachinesKvKey, kvStoreSlot, strandNetworkKvKey, trustedOwnersKvKey, } from './node-local.js';
17
+ export { lazyRawStorage } from './lazy-raw-storage.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/edge-node/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACN,cAAc,GAOd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,uBAAuB,GAKvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,GAKnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,mBAAmB,EACnB,gCAAgC,EAChC,uBAAuB,EACvB,eAAe,EACf,kBAAkB,GAKlB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACvG,OAAO,EAAE,yBAAyB,EAAkD,MAAM,kBAAkB,CAAC;AAC7G,OAAO,EAAE,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAmC,MAAM,eAAe,CAAC;AAClH,OAAO,EACN,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,GAGlB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * What `EdgeNode.joinCadre` takes: a machine invitation, which admits the app as a machine, or an
3
+ * owner grant, which makes it a machine and an owner at once (docs/architecture.md → "An app
4
+ * joins an existing cadre"). Both name the party; the codecs refuse each other's text by name,
5
+ * so an app's one join field decodes whichever was pasted.
6
+ */
7
+ import type { CadreInvitation } from '../cadre-invite-protocol.js';
8
+ import type { OwnerGrantBundle } from '../owner-grant-protocol.js';
9
+ export type JoinCredential = CadreInvitation | OwnerGrantBundle;
10
+ /** The bundle's private half tells the two apart: a grant carries `grantPrivateKey`, an invitation `invitePrivateKey`. */
11
+ export declare function isOwnerGrant(credential: JoinCredential): credential is OwnerGrantBundle;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * What `EdgeNode.joinCadre` takes: a machine invitation, which admits the app as a machine, or an
3
+ * owner grant, which makes it a machine and an owner at once (docs/architecture.md → "An app
4
+ * joins an existing cadre"). Both name the party; the codecs refuse each other's text by name,
5
+ * so an app's one join field decodes whichever was pasted.
6
+ */
7
+ /** The bundle's private half tells the two apart: a grant carries `grantPrivateKey`, an invitation `invitePrivateKey`. */
8
+ export function isOwnerGrant(credential) {
9
+ return 'grantPrivateKey' in credential;
10
+ }
11
+ //# sourceMappingURL=join-credential.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-credential.js","sourceRoot":"","sources":["../../src/edge-node/join-credential.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,0HAA0H;AAC1H,MAAM,UAAU,YAAY,CAAC,UAA0B;IACtD,OAAO,iBAAiB,IAAI,UAAU,CAAC;AACxC,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * `lazyRawStorage` — an `IRawStorage` over an opener that is asynchronous.
3
+ *
4
+ * `CadreNodeConfig.storage.provider`, and so `EdgeNodeStorage.rawStorage`, is a synchronous
5
+ * factory. rn-leveldb opens synchronously, but IndexedDB and NativeScript's SQLite open with a
6
+ * promise, so those platforms return this proxy: every (already asynchronous) method awaits one
7
+ * cached `open()` before delegating, and an async-iterator method opens only once iteration
8
+ * starts. Per-scope handle caching, and closing, stay the platform's: the proxy owns nothing.
9
+ */
10
+ import type { IRawStorage, StoreDurability } from '@optimystic/db-p2p';
11
+ /** The optional `IRawStorage` members this proxy forwards, delegating when the opened storage has them. */
12
+ type OptionalMethodForwarded = 'getApproximateBytesUsed' | 'listBlockIds';
13
+ /**
14
+ * `getStoreIdentity`: see the accepted tradeoff on {@link LazyRawStorage}. `readCached`: a marker
15
+ * set only by a storage with a read cache beneath it, which the proxy cannot know before opening
16
+ * and cadre-core's cache wrap reads before any open. `close`: the storage behind the proxy is the
17
+ * platform's, shared with every later proxy over the same scope, and nothing in cadre-core closes
18
+ * a store its provider returned.
19
+ */
20
+ type OptionalMemberOmitted = 'getStoreIdentity' | 'readCached' | 'close';
21
+ type OptionalKeys<T> = {
22
+ [K in keyof T]-?: object extends Pick<T, K> ? K : never;
23
+ }[keyof T];
24
+ type MustBeNever<T extends never> = T;
25
+ /**
26
+ * Fails to compile when `IRawStorage` gains an optional member that is in neither list above, so
27
+ * each one is forwarded or omitted by decision rather than by default.
28
+ */
29
+ export type UnclassifiedOptionalMember = MustBeNever<Exclude<OptionalKeys<IRawStorage>, OptionalMethodForwarded | OptionalMemberOmitted>>;
30
+ /**
31
+ * An `IRawStorage` whose every method awaits one cached `open()` before delegating. A rejected
32
+ * open is forgotten, so the next call retries; the async-iterator methods open only once
33
+ * iteration starts.
34
+ *
35
+ * `durability` is what the opened storage reports (`IRawStorage.durability`), stated here because
36
+ * it is read synchronously, before any open: a platform knows its backend (`'power-loss'` for
37
+ * SQLite and IndexedDB).
38
+ */
39
+ export declare function lazyRawStorage(open: () => Promise<IRawStorage>, durability: StoreDurability): IRawStorage;
40
+ export {};
@@ -0,0 +1,134 @@
1
+ /**
2
+ * `lazyRawStorage` — an `IRawStorage` over an opener that is asynchronous.
3
+ *
4
+ * `CadreNodeConfig.storage.provider`, and so `EdgeNodeStorage.rawStorage`, is a synchronous
5
+ * factory. rn-leveldb opens synchronously, but IndexedDB and NativeScript's SQLite open with a
6
+ * promise, so those platforms return this proxy: every (already asynchronous) method awaits one
7
+ * cached `open()` before delegating, and an async-iterator method opens only once iteration
8
+ * starts. Per-scope handle caching, and closing, stay the platform's: the proxy owns nothing.
9
+ */
10
+ /**
11
+ * `IRawStorage`'s optional methods are detected by callers checking that the method exists, so
12
+ * one this proxy leaves out reads as "not supported". The `implements` clause names the optional
13
+ * methods the proxy forwards, so dropping one is a compile error, and `UnclassifiedOptionalMember`
14
+ * rejects one added upstream later. The two forwarded ones delegate when the opened storage has
15
+ * them and otherwise answer as an omission would (0 bytes; no block ids).
16
+ *
17
+ * NOTE: those two are always present on the proxy, a stub when the opened storage lacks them,
18
+ * which `IRawStorage` asks backends not to do (feature detection should see the true capability:
19
+ * the peer-join backfill is inert without `listBlockIds` and runs an empty scan with the stub).
20
+ * The proxy cannot know before opening, and every storage a platform opens behind it (IndexedDB,
21
+ * SQLite) has both. If a platform ever opens one without them, let it declare the capability
22
+ * beside `durability` and omit the method here.
23
+ *
24
+ * NOTE: accepted tradeoff — `getStoreIdentity` is omitted although the opened storage may have it.
25
+ * It is synchronous and must return a string fixed at construction, but the real identity exists
26
+ * only after the asynchronous open; the interface says a backend that cannot honour that must
27
+ * omit the method. `withReadCache` then identifies the store by object. Revisit if two proxies over
28
+ * one scope are seen getting separate read caches, or if the interface allows a lazily-resolved
29
+ * identity.
30
+ */
31
+ class LazyRawStorage {
32
+ constructor(open, durability) {
33
+ this.open = open;
34
+ this.durability = durability;
35
+ this.opening = null;
36
+ }
37
+ /**
38
+ * One open shared by every call; a rejected open is forgotten, so the next call retries while
39
+ * the calls that awaited the failed one still get its rejection.
40
+ *
41
+ * NOTE: retries have no backoff: one fresh open attempt per operation on a permanently broken
42
+ * scope. Revisit only if a failing scope is seen issuing opens in a tight loop.
43
+ */
44
+ storage() {
45
+ if (this.opening)
46
+ return this.opening;
47
+ const opening = this.open();
48
+ this.opening = opening;
49
+ // The rejection itself reaches every caller awaiting `opening`; this only forgets it.
50
+ void opening.catch(() => {
51
+ if (this.opening === opening)
52
+ this.opening = null;
53
+ });
54
+ return opening;
55
+ }
56
+ async getMetadata(blockId) {
57
+ return (await this.storage()).getMetadata(blockId);
58
+ }
59
+ async saveMetadata(blockId, metadata) {
60
+ return (await this.storage()).saveMetadata(blockId, metadata);
61
+ }
62
+ async getRevision(blockId, rev) {
63
+ return (await this.storage()).getRevision(blockId, rev);
64
+ }
65
+ async saveRevision(blockId, rev, actionId) {
66
+ return (await this.storage()).saveRevision(blockId, rev, actionId);
67
+ }
68
+ async *listRevisions(blockId, startRev, endRev) {
69
+ const storage = await this.storage();
70
+ yield* storage.listRevisions(blockId, startRev, endRev);
71
+ }
72
+ async getPendingTransaction(blockId, actionId) {
73
+ return (await this.storage()).getPendingTransaction(blockId, actionId);
74
+ }
75
+ async savePendingTransaction(blockId, actionId, transform) {
76
+ return (await this.storage()).savePendingTransaction(blockId, actionId, transform);
77
+ }
78
+ async deletePendingTransaction(blockId, actionId) {
79
+ return (await this.storage()).deletePendingTransaction(blockId, actionId);
80
+ }
81
+ async *listPendingTransactions(blockId) {
82
+ const storage = await this.storage();
83
+ yield* storage.listPendingTransactions(blockId);
84
+ }
85
+ async getTransaction(blockId, actionId) {
86
+ return (await this.storage()).getTransaction(blockId, actionId);
87
+ }
88
+ async saveTransaction(blockId, actionId, transform) {
89
+ return (await this.storage()).saveTransaction(blockId, actionId, transform);
90
+ }
91
+ async getBlockProof(blockId, rev) {
92
+ return (await this.storage()).getBlockProof(blockId, rev);
93
+ }
94
+ async saveBlockProof(blockId, rev, proof) {
95
+ return (await this.storage()).saveBlockProof(blockId, rev, proof);
96
+ }
97
+ async getMaterializedBlock(blockId, actionId) {
98
+ return (await this.storage()).getMaterializedBlock(blockId, actionId);
99
+ }
100
+ async saveMaterializedBlock(blockId, actionId, block) {
101
+ return (await this.storage()).saveMaterializedBlock(blockId, actionId, block);
102
+ }
103
+ async promotePendingTransaction(blockId, actionId) {
104
+ return (await this.storage()).promotePendingTransaction(blockId, actionId);
105
+ }
106
+ async flush(options) {
107
+ return (await this.storage()).flush(options);
108
+ }
109
+ async whenDurable() {
110
+ return (await this.storage()).whenDurable();
111
+ }
112
+ async getApproximateBytesUsed() {
113
+ const storage = await this.storage();
114
+ return storage.getApproximateBytesUsed ? storage.getApproximateBytesUsed() : 0;
115
+ }
116
+ async *listBlockIds() {
117
+ const storage = await this.storage();
118
+ if (storage.listBlockIds)
119
+ yield* storage.listBlockIds();
120
+ }
121
+ }
122
+ /**
123
+ * An `IRawStorage` whose every method awaits one cached `open()` before delegating. A rejected
124
+ * open is forgotten, so the next call retries; the async-iterator methods open only once
125
+ * iteration starts.
126
+ *
127
+ * `durability` is what the opened storage reports (`IRawStorage.durability`), stated here because
128
+ * it is read synchronously, before any open: a platform knows its backend (`'power-loss'` for
129
+ * SQLite and IndexedDB).
130
+ */
131
+ export function lazyRawStorage(open, durability) {
132
+ return new LazyRawStorage(open, durability);
133
+ }
134
+ //# sourceMappingURL=lazy-raw-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazy-raw-storage.js","sourceRoot":"","sources":["../../src/edge-node/lazy-raw-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * The edge node's node-local records: the key each of cadre-core's node-local records is filed
3
+ * under in the platform's node-local key-value store (`EdgeNodeStorage.nodeLocal`), and the
4
+ * `DurableSlot` over one such key, which the persistent stores (`PersistentBootstrapPeerStore`,
5
+ * `PersistentEnrolledMachineStore`, `PersistentStrandNetworkStateStore`, and
6
+ * `PersistentTrustedOwnerStore` on a platform with no anchor slot of its own) read through.
7
+ *
8
+ * Every record key is `<record>.<partyId>`, so a party's records never collide with another's,
9
+ * and an app's own records in the same store stay clear of them by using a dot-free key. The
10
+ * party id needs no encoding: the store deals in text keys.
11
+ *
12
+ * Which records are trust-bearing, and so belong in a more tamper-resistant store where the
13
+ * platform has one, is `EdgeNodeStorage.trustedOwnerSlot`'s concern; the React Native kit's
14
+ * `@serfab/cadre-rn/node-local` carries that reasoning.
15
+ */
16
+ import type { DurableSlot } from '../node-local-snapshot.js';
17
+ /**
18
+ * The subset of a key-value store a slot needs. Declared here, structurally, so a platform
19
+ * passes its own store (`LevelDBKVStore`, `SqliteKVStore`, an IndexedDB object store) and a
20
+ * test an in-memory fake.
21
+ */
22
+ export interface KvStoreApi {
23
+ /** The key's text, or `undefined` when absent. Throws on a read fault. */
24
+ get(key: string): Promise<string | undefined>;
25
+ /** Resolves once `get` on this store reads `value`; durable only after a later {@link flush}. */
26
+ set(key: string, value: string): Promise<void>;
27
+ /** Make every write that resolved before this call durable. */
28
+ flush(): Promise<void>;
29
+ }
30
+ /** The node-local store the edge node runs over: {@link KvStoreApi} plus deletion, for the records a removal drops. */
31
+ export interface NodeLocalKv extends KvStoreApi {
32
+ /** Resolves once `get` reads the key as absent; durable only after a later {@link KvStoreApi.flush}. Idempotent. */
33
+ delete(key: string): Promise<void>;
34
+ }
35
+ /** Key of a party's retained cold-start dial targets (`PersistentBootstrapPeerStore`). */
36
+ export declare function bootstrapPeersKvKey(partyId: string): string;
37
+ /** Key of a party's last-known enrolled-machine count (`PersistentEnrolledMachineStore`). */
38
+ export declare function enrolledMachinesKvKey(partyId: string): string;
39
+ /**
40
+ * Key of a party's strand network state (`PersistentStrandNetworkStateStore`): per strand, the
41
+ * FRET routing table its strand node saved, re-imported after a relaunch.
42
+ */
43
+ export declare function strandNetworkKvKey(partyId: string): string;
44
+ /**
45
+ * Key of a party's trusted-owner anchor (`PersistentTrustedOwnerStore`) on a platform that
46
+ * supplies no `EdgeNodeStorage.trustedOwnerSlot`: the browser and NativeScript apps. The anchor
47
+ * is trust-bearing, so a platform with a more tamper-resistant store than its node-local one
48
+ * (the phone's secure store) keeps it there instead.
49
+ */
50
+ export declare function trustedOwnersKvKey(partyId: string): string;
51
+ /**
52
+ * A {@link DurableSlot} over one key of a key-value store.
53
+ *
54
+ * A pass-through but for the flush: the store already deals in text and already reports an
55
+ * absent key as `undefined`, and a read fault throws out of `get`, which is exactly the
56
+ * "present but unreadable ⇒ throw" contract {@link DurableSlot} asks for. A `set` may resolve
57
+ * into the store's write group, so `save` flushes after it to be durable when it resolves, as
58
+ * {@link DurableSlot.save} requires.
59
+ */
60
+ export declare function kvStoreSlot(kv: KvStoreApi, key: string): DurableSlot;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * The edge node's node-local records: the key each of cadre-core's node-local records is filed
3
+ * under in the platform's node-local key-value store (`EdgeNodeStorage.nodeLocal`), and the
4
+ * `DurableSlot` over one such key, which the persistent stores (`PersistentBootstrapPeerStore`,
5
+ * `PersistentEnrolledMachineStore`, `PersistentStrandNetworkStateStore`, and
6
+ * `PersistentTrustedOwnerStore` on a platform with no anchor slot of its own) read through.
7
+ *
8
+ * Every record key is `<record>.<partyId>`, so a party's records never collide with another's,
9
+ * and an app's own records in the same store stay clear of them by using a dot-free key. The
10
+ * party id needs no encoding: the store deals in text keys.
11
+ *
12
+ * Which records are trust-bearing, and so belong in a more tamper-resistant store where the
13
+ * platform has one, is `EdgeNodeStorage.trustedOwnerSlot`'s concern; the React Native kit's
14
+ * `@serfab/cadre-rn/node-local` carries that reasoning.
15
+ */
16
+ /** Key of a party's retained cold-start dial targets (`PersistentBootstrapPeerStore`). */
17
+ export function bootstrapPeersKvKey(partyId) {
18
+ return `bootstrap-peers.${partyId}`;
19
+ }
20
+ /** Key of a party's last-known enrolled-machine count (`PersistentEnrolledMachineStore`). */
21
+ export function enrolledMachinesKvKey(partyId) {
22
+ return `enrolled-machines.${partyId}`;
23
+ }
24
+ /**
25
+ * Key of a party's strand network state (`PersistentStrandNetworkStateStore`): per strand, the
26
+ * FRET routing table its strand node saved, re-imported after a relaunch.
27
+ */
28
+ export function strandNetworkKvKey(partyId) {
29
+ return `strand-network.${partyId}`;
30
+ }
31
+ /**
32
+ * Key of a party's trusted-owner anchor (`PersistentTrustedOwnerStore`) on a platform that
33
+ * supplies no `EdgeNodeStorage.trustedOwnerSlot`: the browser and NativeScript apps. The anchor
34
+ * is trust-bearing, so a platform with a more tamper-resistant store than its node-local one
35
+ * (the phone's secure store) keeps it there instead.
36
+ */
37
+ export function trustedOwnersKvKey(partyId) {
38
+ return `trusted-owners.${partyId}`;
39
+ }
40
+ /**
41
+ * A {@link DurableSlot} over one key of a key-value store.
42
+ *
43
+ * A pass-through but for the flush: the store already deals in text and already reports an
44
+ * absent key as `undefined`, and a read fault throws out of `get`, which is exactly the
45
+ * "present but unreadable ⇒ throw" contract {@link DurableSlot} asks for. A `set` may resolve
46
+ * into the store's write group, so `save` flushes after it to be durable when it resolves, as
47
+ * {@link DurableSlot.save} requires.
48
+ */
49
+ export function kvStoreSlot(kv, key) {
50
+ return {
51
+ load: () => kv.get(key),
52
+ save: async (text) => {
53
+ await kv.set(key, text);
54
+ await kv.flush();
55
+ },
56
+ };
57
+ }
58
+ //# sourceMappingURL=node-local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-local.js","sourceRoot":"","sources":["../../src/edge-node/node-local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAwBH,0FAA0F;AAC1F,MAAM,UAAU,mBAAmB,CAAC,OAAe;IAClD,OAAO,mBAAmB,OAAO,EAAE,CAAC;AACrC,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACpD,OAAO,qBAAqB,OAAO,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IACjD,OAAO,kBAAkB,OAAO,EAAE,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IACjD,OAAO,kBAAkB,OAAO,EAAE,CAAC;AACpC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,EAAc,EAAE,GAAW;IACtD,OAAO;QACN,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;QACvB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACpB,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACxB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * What one edge-node start is made with, and the record that remembers it between launches.
3
+ *
4
+ * The record is one per app, not party-scoped: it is what *selects* the party, so every other
5
+ * node-local record is read through the `partyId` it carries. `EdgeNode.start` writes it after
6
+ * every successful start and `joinCadre` once a member admitted the app (`autoStart: true`),
7
+ * `stop` rewrites it with `autoStart: false`, and a removal from the party replaces it
8
+ * ({@link startAfterRemoval}); an app's launch and a push wake into a killed process read it to
9
+ * start the node unattended.
10
+ */
11
+ /**
12
+ * How much of Noise's crypto the platform replaces (`EdgeNodePlatform.noiseCrypto`): none, the
13
+ * per-frame hash and cipher, or those and the handshake's key exchange too. Named here, apart from
14
+ * any implementation, so a stored mode can be validated without loading a native module; the
15
+ * React Native kit's `/noise-crypto` builds the implementation for each.
16
+ */
17
+ export type NoiseCryptoMode = 'off' | 'symmetric' | 'full';
18
+ export interface EdgeNodeOptions {
19
+ /** Party ID — identifies this cadre. The app mints one on first run. */
20
+ partyId: string;
21
+ /** Bootstrap multiaddrs (the party's always-on machines). */
22
+ bootstrapAddrs: string[];
23
+ /**
24
+ * Circuit-relay multiaddrs this node reserves a slot on. An edge device accepts no inbound
25
+ * connection, so a relay reservation is the only address anyone can dial it at. Empty is
26
+ * allowed: the node starts and dials out, but cannot be invited to or joined.
27
+ */
28
+ relayAddrs: string[];
29
+ /** How much of Noise's crypto the platform replaces; read only when the node is built. */
30
+ noiseCryptoMode?: NoiseCryptoMode;
31
+ /**
32
+ * How this app came to `partyId`. A `'founded'` party runs owner genesis on every start; a
33
+ * `'joined'` one never does, because genesis on a party whose control store has not arrived
34
+ * would seat this app as a second founder. Absent means `'founded'`.
35
+ */
36
+ origin?: EdgeNodeOrigin;
37
+ /**
38
+ * The name the founding owner key gets on its `OwnerKey` row when this start founds the party
39
+ * ("phone", "Ann's iPhone"). Read only by genesis; default `'phone'`. Trimmed, at most 64
40
+ * characters (`OWNER_KEY_MAX_LABEL`); a longer one fails the start.
41
+ */
42
+ ownerKeyLabel?: string;
43
+ /**
44
+ * The party this app founded and left by joining another (`EdgeNode.joinCadre`). Its data
45
+ * stays on disk under its own names, for moving its strands and dissolving the old cadre.
46
+ */
47
+ formerPartyId?: string;
48
+ }
49
+ /** Whether this app founded its party, or joined it by invitation. */
50
+ export type EdgeNodeOrigin = 'founded' | 'joined';
51
+ /** The last start, as `EdgeNode.loadSavedStart` reports it. */
52
+ export interface SavedStart {
53
+ /** Exactly what the node was last successfully started with. */
54
+ options: EdgeNodeOptions;
55
+ /** True after a successful start, false after `stop`. Gates every unattended start. */
56
+ autoStart: boolean;
57
+ /**
58
+ * The `EdgeNodePlatform.dataVersion` of the build that last started over this device's data,
59
+ * or `undefined` when that build named none. The app compares it with its own to decide whether
60
+ * the stored data is usable.
61
+ */
62
+ writtenBy?: string;
63
+ }
64
+ /**
65
+ * The saved start once an owner of its party removed this app: the party this app founded and
66
+ * left (`formerPartyId`), which it may go back to, not started unattended; `undefined` when it
67
+ * left none. No bootstrap addresses: the former party's machines are in its own bootstrap-peer
68
+ * store, which every start reads.
69
+ */
70
+ export declare function startAfterRemoval(saved: SavedStart): SavedStart | undefined;
71
+ /** Every Noise crypto mode, so a stored mode can be validated without loading the native module. */
72
+ export declare const NOISE_CRYPTO_MODES: readonly NoiseCryptoMode[];
73
+ export declare function isNoiseCryptoMode(value: unknown): value is NoiseCryptoMode;
74
+ export declare function serializeSavedStart(saved: SavedStart): string;
75
+ /**
76
+ * The saved record, or `undefined` when there is none or it is unusable (logged).
77
+ *
78
+ * Only the party id is worth discarding a record over. A malformed optional field falls back to
79
+ * its default — `[]` for an address list, the build default for the Noise mode, absent for
80
+ * `origin`, `formerPartyId` and `ownerKeyLabel`, `false` for `autoStart` — so a damaged record still keeps the
81
+ * app in its party, at worst needing the user to start the node by hand.
82
+ */
83
+ export declare function parseSavedStart(text: string | undefined): SavedStart | undefined;
@@ -0,0 +1,110 @@
1
+ /**
2
+ * What one edge-node start is made with, and the record that remembers it between launches.
3
+ *
4
+ * The record is one per app, not party-scoped: it is what *selects* the party, so every other
5
+ * node-local record is read through the `partyId` it carries. `EdgeNode.start` writes it after
6
+ * every successful start and `joinCadre` once a member admitted the app (`autoStart: true`),
7
+ * `stop` rewrites it with `autoStart: false`, and a removal from the party replaces it
8
+ * ({@link startAfterRemoval}); an app's launch and a push wake into a killed process read it to
9
+ * start the node unattended.
10
+ */
11
+ /**
12
+ * The saved start once an owner of its party removed this app: the party this app founded and
13
+ * left (`formerPartyId`), which it may go back to, not started unattended; `undefined` when it
14
+ * left none. No bootstrap addresses: the former party's machines are in its own bootstrap-peer
15
+ * store, which every start reads.
16
+ */
17
+ export function startAfterRemoval(saved) {
18
+ const { partyId, formerPartyId, relayAddrs, noiseCryptoMode } = saved.options;
19
+ if (formerPartyId === undefined || formerPartyId === partyId)
20
+ return undefined;
21
+ const options = { partyId: formerPartyId, bootstrapAddrs: [], relayAddrs, origin: 'founded' };
22
+ if (noiseCryptoMode !== undefined)
23
+ options.noiseCryptoMode = noiseCryptoMode;
24
+ return { options, autoStart: false, ...(saved.writtenBy !== undefined && { writtenBy: saved.writtenBy }) };
25
+ }
26
+ /** Every Noise crypto mode, so a stored mode can be validated without loading the native module. */
27
+ export const NOISE_CRYPTO_MODES = ['symmetric', 'full', 'off'];
28
+ export function isNoiseCryptoMode(value) {
29
+ return NOISE_CRYPTO_MODES.includes(value);
30
+ }
31
+ const RECORD_VERSION = 1;
32
+ export function serializeSavedStart(saved) {
33
+ const { partyId, bootstrapAddrs, relayAddrs, noiseCryptoMode, origin, formerPartyId, ownerKeyLabel } = saved.options;
34
+ const record = {
35
+ version: RECORD_VERSION,
36
+ partyId,
37
+ bootstrapAddrs,
38
+ relayAddrs,
39
+ noiseCryptoMode,
40
+ origin,
41
+ formerPartyId,
42
+ ownerKeyLabel,
43
+ autoStart: saved.autoStart,
44
+ writtenBy: saved.writtenBy,
45
+ };
46
+ return JSON.stringify(record);
47
+ }
48
+ /**
49
+ * The saved record, or `undefined` when there is none or it is unusable (logged).
50
+ *
51
+ * Only the party id is worth discarding a record over. A malformed optional field falls back to
52
+ * its default — `[]` for an address list, the build default for the Noise mode, absent for
53
+ * `origin`, `formerPartyId` and `ownerKeyLabel`, `false` for `autoStart` — so a damaged record still keeps the
54
+ * app in its party, at worst needing the user to start the node by hand.
55
+ */
56
+ export function parseSavedStart(text) {
57
+ if (text === undefined)
58
+ return undefined;
59
+ const record = parseRecord(text);
60
+ if (!record)
61
+ return undefined;
62
+ const { partyId } = record;
63
+ if (typeof partyId !== 'string' || partyId.trim().length === 0) {
64
+ console.warn('[cadre-core/edge-node] ignoring saved start options with no party id');
65
+ return undefined;
66
+ }
67
+ const options = {
68
+ partyId,
69
+ bootstrapAddrs: stringArrayOrEmpty(record.bootstrapAddrs),
70
+ relayAddrs: stringArrayOrEmpty(record.relayAddrs),
71
+ };
72
+ if (isNoiseCryptoMode(record.noiseCryptoMode))
73
+ options.noiseCryptoMode = record.noiseCryptoMode;
74
+ if (record.origin === 'founded' || record.origin === 'joined')
75
+ options.origin = record.origin;
76
+ if (typeof record.formerPartyId === 'string' && record.formerPartyId.trim().length > 0) {
77
+ options.formerPartyId = record.formerPartyId;
78
+ }
79
+ if (typeof record.ownerKeyLabel === 'string')
80
+ options.ownerKeyLabel = record.ownerKeyLabel;
81
+ const saved = { options, autoStart: record.autoStart === true };
82
+ if (typeof record.writtenBy === 'string')
83
+ saved.writtenBy = record.writtenBy;
84
+ return saved;
85
+ }
86
+ /** The record's fields, or `undefined` (logged) when the text is not a record of this version. */
87
+ function parseRecord(text) {
88
+ let raw;
89
+ try {
90
+ raw = JSON.parse(text);
91
+ }
92
+ catch (err) {
93
+ console.warn('[cadre-core/edge-node] ignoring saved start options that are not JSON:', err);
94
+ return undefined;
95
+ }
96
+ if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
97
+ console.warn('[cadre-core/edge-node] ignoring saved start options that are not an object');
98
+ return undefined;
99
+ }
100
+ const record = raw;
101
+ if (record.version !== RECORD_VERSION) {
102
+ console.warn(`[cadre-core/edge-node] ignoring saved start options of unknown version ${String(record.version)}`);
103
+ return undefined;
104
+ }
105
+ return record;
106
+ }
107
+ function stringArrayOrEmpty(value) {
108
+ return Array.isArray(value) && value.every((entry) => typeof entry === 'string') ? value : [];
109
+ }
110
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/edge-node/options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA2DH;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IAClD,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9E,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/E,MAAM,OAAO,GAAoB,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/G,IAAI,eAAe,KAAK,SAAS;QAAE,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;IAC7E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC;AAC5G,CAAC;AAED,oGAAoG;AACpG,MAAM,CAAC,MAAM,kBAAkB,GAA+B,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAE3F,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC/C,OAAQ,kBAAyC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,CAAC;AAgBzB,MAAM,UAAU,mBAAmB,CAAC,KAAiB;IACpD,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IACrH,MAAM,MAAM,GAAgB;QAC3B,OAAO,EAAE,cAAc;QACvB,OAAO;QACP,cAAc;QACd,UAAU;QACV,eAAe;QACf,MAAM;QACN,aAAa;QACb,aAAa;QACb,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;KAC1B,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,IAAwB;IACvD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC3B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;QACrF,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,OAAO,GAAoB;QAChC,OAAO;QACP,cAAc,EAAE,kBAAkB,CAAC,MAAM,CAAC,cAAc,CAAC;QACzD,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;KACjD,CAAC;IACF,IAAI,iBAAiB,CAAC,MAAM,CAAC,eAAe,CAAC;QAAE,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;IAChG,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9F,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxF,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC9C,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;QAAE,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC3F,MAAM,KAAK,GAAe,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;IAC5E,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;QAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC7E,OAAO,KAAK,CAAC;AACd,CAAC;AAED,kGAAkG;AAClG,SAAS,WAAW,CAAC,IAAY;IAChC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACJ,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,wEAAwE,EAAE,GAAG,CAAC,CAAC;QAC5F,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QAC3F,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,IAAI,MAAM,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,0EAA0E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjH,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACzC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/F,CAAC"}