@aephia/atlas-kit 0.6.0-next.98 → 0.6.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 (764) hide show
  1. package/dist/cargo/actions/deposit.d.ts +4 -1
  2. package/dist/cargo/actions/deposit.d.ts.map +1 -1
  3. package/dist/cargo/actions/deposit.js +56 -133
  4. package/dist/cargo/actions/deposit.js.map +1 -1
  5. package/dist/cargo/actions/index.d.ts +14 -7
  6. package/dist/cargo/actions/index.d.ts.map +1 -1
  7. package/dist/cargo/actions/index.js +105 -93
  8. package/dist/cargo/actions/index.js.map +1 -1
  9. package/dist/cargo/actions/wallet-context.d.ts +52 -3
  10. package/dist/cargo/actions/wallet-context.d.ts.map +1 -1
  11. package/dist/cargo/actions/wallet-context.js +118 -7
  12. package/dist/cargo/actions/wallet-context.js.map +1 -1
  13. package/dist/cargo/actions/wallet-token.d.ts +1 -6
  14. package/dist/cargo/actions/wallet-token.d.ts.map +1 -1
  15. package/dist/cargo/actions/wallet-token.js +0 -45
  16. package/dist/cargo/actions/wallet-token.js.map +1 -1
  17. package/dist/cargo/actions/withdrawal.d.ts +1 -1
  18. package/dist/cargo/actions/withdrawal.d.ts.map +1 -1
  19. package/dist/cargo/actions/withdrawal.js +37 -163
  20. package/dist/cargo/actions/withdrawal.js.map +1 -1
  21. package/dist/cargo/index.d.ts.map +1 -1
  22. package/dist/cargo/index.js +2 -10
  23. package/dist/cargo/index.js.map +1 -1
  24. package/dist/claim-stakes/actions/index.d.ts +80 -14
  25. package/dist/claim-stakes/actions/index.d.ts.map +1 -1
  26. package/dist/claim-stakes/actions/index.js +668 -717
  27. package/dist/claim-stakes/actions/index.js.map +1 -1
  28. package/dist/claim-stakes/index.d.ts +8 -6
  29. package/dist/claim-stakes/index.d.ts.map +1 -1
  30. package/dist/claim-stakes/index.js +12 -18
  31. package/dist/claim-stakes/index.js.map +1 -1
  32. package/dist/client/context.d.ts.map +1 -1
  33. package/dist/client/context.js +353 -37
  34. package/dist/client/context.js.map +1 -1
  35. package/dist/client/contracts.d.ts +54 -1
  36. package/dist/client/contracts.d.ts.map +1 -1
  37. package/dist/client/deployments.d.ts +17 -0
  38. package/dist/client/deployments.d.ts.map +1 -1
  39. package/dist/client/deployments.js +17 -0
  40. package/dist/client/deployments.js.map +1 -1
  41. package/dist/client/index.d.ts +22 -1
  42. package/dist/client/index.d.ts.map +1 -1
  43. package/dist/client/index.js +21 -0
  44. package/dist/client/index.js.map +1 -1
  45. package/dist/client/rpc-subscription-provider.d.ts +2 -0
  46. package/dist/client/rpc-subscription-provider.d.ts.map +1 -1
  47. package/dist/client/rpc-subscription-provider.js +135 -101
  48. package/dist/client/rpc-subscription-provider.js.map +1 -1
  49. package/dist/combat/actions/index.d.ts +30 -12
  50. package/dist/combat/actions/index.d.ts.map +1 -1
  51. package/dist/combat/actions/index.js +266 -256
  52. package/dist/combat/actions/index.js.map +1 -1
  53. package/dist/combat/index.d.ts +25 -8
  54. package/dist/combat/index.d.ts.map +1 -1
  55. package/dist/combat/index.js +21 -18
  56. package/dist/combat/index.js.map +1 -1
  57. package/dist/crafting/actions/fee-rate.d.ts +47 -0
  58. package/dist/crafting/actions/fee-rate.d.ts.map +1 -0
  59. package/dist/crafting/actions/fee-rate.js +58 -0
  60. package/dist/crafting/actions/fee-rate.js.map +1 -0
  61. package/dist/crafting/actions/index.d.ts +28 -28
  62. package/dist/crafting/actions/index.d.ts.map +1 -1
  63. package/dist/crafting/actions/index.js +246 -317
  64. package/dist/crafting/actions/index.js.map +1 -1
  65. package/dist/crafting/estimate.d.ts +101 -0
  66. package/dist/crafting/estimate.d.ts.map +1 -0
  67. package/dist/crafting/estimate.js +108 -0
  68. package/dist/crafting/estimate.js.map +1 -0
  69. package/dist/crafting/index.d.ts +6 -5
  70. package/dist/crafting/index.d.ts.map +1 -1
  71. package/dist/crafting/index.js +6 -13
  72. package/dist/crafting/index.js.map +1 -1
  73. package/dist/factions/actions/index.d.ts +1 -1
  74. package/dist/factions/actions/index.d.ts.map +1 -1
  75. package/dist/factions/actions/index.js +5 -4
  76. package/dist/factions/actions/index.js.map +1 -1
  77. package/dist/factions/index.d.ts +18 -1
  78. package/dist/factions/index.d.ts.map +1 -1
  79. package/dist/factions/index.js +24 -18
  80. package/dist/factions/index.js.map +1 -1
  81. package/dist/fleets/actions/add-ship.d.ts +18 -5
  82. package/dist/fleets/actions/add-ship.d.ts.map +1 -1
  83. package/dist/fleets/actions/add-ship.js +35 -48
  84. package/dist/fleets/actions/add-ship.js.map +1 -1
  85. package/dist/fleets/actions/create-fleet.d.ts +1 -1
  86. package/dist/fleets/actions/create-fleet.d.ts.map +1 -1
  87. package/dist/fleets/actions/create-fleet.js +8 -38
  88. package/dist/fleets/actions/create-fleet.js.map +1 -1
  89. package/dist/fleets/actions/crew-transfer.d.ts +8 -4
  90. package/dist/fleets/actions/crew-transfer.d.ts.map +1 -1
  91. package/dist/fleets/actions/crew-transfer.js +27 -42
  92. package/dist/fleets/actions/crew-transfer.js.map +1 -1
  93. package/dist/fleets/actions/deployment-storage.d.ts +161 -0
  94. package/dist/fleets/actions/deployment-storage.d.ts.map +1 -0
  95. package/dist/fleets/actions/deployment-storage.js +297 -0
  96. package/dist/fleets/actions/deployment-storage.js.map +1 -0
  97. package/dist/fleets/actions/disband.d.ts +42 -0
  98. package/dist/fleets/actions/disband.d.ts.map +1 -0
  99. package/dist/fleets/actions/disband.js +107 -0
  100. package/dist/fleets/actions/disband.js.map +1 -0
  101. package/dist/fleets/actions/index.d.ts +55 -11
  102. package/dist/fleets/actions/index.d.ts.map +1 -1
  103. package/dist/fleets/actions/index.js +288 -241
  104. package/dist/fleets/actions/index.js.map +1 -1
  105. package/dist/fleets/actions/respawn.d.ts +1 -1
  106. package/dist/fleets/actions/respawn.d.ts.map +1 -1
  107. package/dist/fleets/actions/respawn.js +8 -37
  108. package/dist/fleets/actions/respawn.js.map +1 -1
  109. package/dist/fleets/actions/ship-import.d.ts +1 -1
  110. package/dist/fleets/actions/ship-import.d.ts.map +1 -1
  111. package/dist/fleets/actions/ship-import.js +39 -91
  112. package/dist/fleets/actions/ship-import.js.map +1 -1
  113. package/dist/fleets/actions/sync.d.ts +24 -0
  114. package/dist/fleets/actions/sync.d.ts.map +1 -0
  115. package/dist/fleets/actions/sync.js +55 -0
  116. package/dist/fleets/actions/sync.js.map +1 -0
  117. package/dist/fleets/composition-stats.d.ts +101 -0
  118. package/dist/fleets/composition-stats.d.ts.map +1 -0
  119. package/dist/fleets/composition-stats.js +354 -0
  120. package/dist/fleets/composition-stats.js.map +1 -0
  121. package/dist/fleets/cooldown.d.ts +7 -4
  122. package/dist/fleets/cooldown.d.ts.map +1 -1
  123. package/dist/fleets/cooldown.js +11 -6
  124. package/dist/fleets/cooldown.js.map +1 -1
  125. package/dist/fleets/index.d.ts +1 -0
  126. package/dist/fleets/index.d.ts.map +1 -1
  127. package/dist/fleets/index.js +3 -10
  128. package/dist/fleets/index.js.map +1 -1
  129. package/dist/fleets/movement-arithmetic.d.ts.map +1 -1
  130. package/dist/fleets/movement-arithmetic.js +4 -0
  131. package/dist/fleets/movement-arithmetic.js.map +1 -1
  132. package/dist/fleets/subwarp-estimate.d.ts +3 -1
  133. package/dist/fleets/subwarp-estimate.d.ts.map +1 -1
  134. package/dist/fleets/subwarp-estimate.js +3 -1
  135. package/dist/fleets/subwarp-estimate.js.map +1 -1
  136. package/dist/fleets/warp-lane-policy.d.ts +13 -7
  137. package/dist/fleets/warp-lane-policy.d.ts.map +1 -1
  138. package/dist/fleets/warp-lane-policy.js +19 -7
  139. package/dist/fleets/warp-lane-policy.js.map +1 -1
  140. package/dist/identity/actions/create-profile.d.ts +1 -1
  141. package/dist/identity/actions/create-profile.d.ts.map +1 -1
  142. package/dist/identity/actions/create-profile.js +2 -2
  143. package/dist/identity/actions/create-profile.js.map +1 -1
  144. package/dist/identity/actions/index.d.ts +2 -1
  145. package/dist/identity/actions/index.d.ts.map +1 -1
  146. package/dist/identity/actions/index.js +6 -4
  147. package/dist/identity/actions/index.js.map +1 -1
  148. package/dist/identity/actions/research-unlock.d.ts +61 -0
  149. package/dist/identity/actions/research-unlock.d.ts.map +1 -0
  150. package/dist/identity/actions/research-unlock.js +166 -0
  151. package/dist/identity/actions/research-unlock.js.map +1 -0
  152. package/dist/identity/index.d.ts +62 -2
  153. package/dist/identity/index.d.ts.map +1 -1
  154. package/dist/identity/index.js +63 -12
  155. package/dist/identity/index.js.map +1 -1
  156. package/dist/index.d.ts +2 -1
  157. package/dist/index.d.ts.map +1 -1
  158. package/dist/index.js +4 -4
  159. package/dist/index.js.map +1 -1
  160. package/dist/internal/c4/account-decoding.d.ts +49 -0
  161. package/dist/internal/c4/account-decoding.d.ts.map +1 -0
  162. package/dist/internal/c4/account-decoding.js +74 -0
  163. package/dist/internal/c4/account-decoding.js.map +1 -0
  164. package/dist/internal/c4/career-xp.d.ts +58 -0
  165. package/dist/internal/c4/career-xp.d.ts.map +1 -0
  166. package/dist/internal/c4/career-xp.js +80 -0
  167. package/dist/internal/c4/career-xp.js.map +1 -0
  168. package/dist/internal/c4/cargo-instructions.d.ts +24 -0
  169. package/dist/internal/c4/cargo-instructions.d.ts.map +1 -0
  170. package/dist/internal/c4/cargo-instructions.js +30 -0
  171. package/dist/internal/c4/cargo-instructions.js.map +1 -0
  172. package/dist/internal/c4/cargo-pod.d.ts +15 -0
  173. package/dist/internal/c4/cargo-pod.d.ts.map +1 -0
  174. package/dist/internal/c4/cargo-pod.js +13 -0
  175. package/dist/internal/c4/cargo-pod.js.map +1 -0
  176. package/dist/internal/c4/character-modifier.d.ts +1 -1
  177. package/dist/internal/c4/character-modifier.d.ts.map +1 -1
  178. package/dist/internal/c4/character.d.ts +157 -0
  179. package/dist/internal/c4/character.d.ts.map +1 -0
  180. package/dist/internal/c4/character.js +64 -0
  181. package/dist/internal/c4/character.js.map +1 -0
  182. package/dist/internal/c4/claim-stake-building-definitions.d.ts.map +1 -1
  183. package/dist/internal/c4/claim-stake-building-definitions.js +2 -1
  184. package/dist/internal/c4/claim-stake-building-definitions.js.map +1 -1
  185. package/dist/internal/c4/claim-stake-configuration.d.ts.map +1 -1
  186. package/dist/internal/c4/claim-stake-configuration.js +5 -36
  187. package/dist/internal/c4/claim-stake-configuration.js.map +1 -1
  188. package/dist/internal/c4/claim-stake-definitions.d.ts +4 -0
  189. package/dist/internal/c4/claim-stake-definitions.d.ts.map +1 -1
  190. package/dist/internal/c4/claim-stake-definitions.js +6 -2
  191. package/dist/internal/c4/claim-stake-definitions.js.map +1 -1
  192. package/dist/internal/c4/claim-stake-plots.d.ts +17 -0
  193. package/dist/internal/c4/claim-stake-plots.d.ts.map +1 -0
  194. package/dist/internal/c4/claim-stake-plots.js +29 -0
  195. package/dist/internal/c4/claim-stake-plots.js.map +1 -0
  196. package/dist/internal/c4/claim-stake-standing.d.ts +80 -0
  197. package/dist/internal/c4/claim-stake-standing.d.ts.map +1 -0
  198. package/dist/internal/c4/claim-stake-standing.js +61 -0
  199. package/dist/internal/c4/claim-stake-standing.js.map +1 -0
  200. package/dist/internal/c4/claim-stake-storage.d.ts +45 -0
  201. package/dist/internal/c4/claim-stake-storage.d.ts.map +1 -0
  202. package/dist/internal/c4/claim-stake-storage.js +207 -0
  203. package/dist/internal/c4/claim-stake-storage.js.map +1 -0
  204. package/dist/internal/c4/claim-stake.d.ts +9 -6
  205. package/dist/internal/c4/claim-stake.d.ts.map +1 -1
  206. package/dist/internal/c4/claim-stake.js +24 -56
  207. package/dist/internal/c4/claim-stake.js.map +1 -1
  208. package/dist/internal/c4/combat-storage.d.ts +20 -0
  209. package/dist/internal/c4/combat-storage.d.ts.map +1 -0
  210. package/dist/internal/c4/combat-storage.js +43 -0
  211. package/dist/internal/c4/combat-storage.js.map +1 -0
  212. package/dist/internal/c4/combat.d.ts +1 -55
  213. package/dist/internal/c4/combat.d.ts.map +1 -1
  214. package/dist/internal/c4/combat.js +16 -180
  215. package/dist/internal/c4/combat.js.map +1 -1
  216. package/dist/internal/c4/crafting-storage.d.ts +20 -0
  217. package/dist/internal/c4/crafting-storage.d.ts.map +1 -0
  218. package/dist/internal/c4/crafting-storage.js +54 -0
  219. package/dist/internal/c4/crafting-storage.js.map +1 -0
  220. package/dist/internal/c4/crafting.d.ts +9 -1
  221. package/dist/internal/c4/crafting.d.ts.map +1 -1
  222. package/dist/internal/c4/crafting.js +38 -98
  223. package/dist/internal/c4/crafting.js.map +1 -1
  224. package/dist/internal/c4/currency-cache.d.ts +1 -1
  225. package/dist/internal/c4/currency-cache.d.ts.map +1 -1
  226. package/dist/internal/c4/currency-cache.js +6 -9
  227. package/dist/internal/c4/currency-cache.js.map +1 -1
  228. package/dist/internal/c4/discriminators.d.ts +93 -0
  229. package/dist/internal/c4/discriminators.d.ts.map +1 -0
  230. package/dist/internal/c4/discriminators.js +190 -0
  231. package/dist/internal/c4/discriminators.js.map +1 -0
  232. package/dist/internal/c4/faction-epoch-meter.d.ts.map +1 -1
  233. package/dist/internal/c4/faction-epoch-meter.js +5 -10
  234. package/dist/internal/c4/faction-epoch-meter.js.map +1 -1
  235. package/dist/internal/c4/faction-treasury.d.ts.map +1 -1
  236. package/dist/internal/c4/faction-treasury.js +11 -18
  237. package/dist/internal/c4/faction-treasury.js.map +1 -1
  238. package/dist/internal/c4/faction.d.ts +21 -0
  239. package/dist/internal/c4/faction.d.ts.map +1 -0
  240. package/dist/internal/c4/faction.js +23 -0
  241. package/dist/internal/c4/faction.js.map +1 -0
  242. package/dist/internal/c4/factions.d.ts +31 -3
  243. package/dist/internal/c4/factions.d.ts.map +1 -1
  244. package/dist/internal/c4/factions.js +103 -104
  245. package/dist/internal/c4/factions.js.map +1 -1
  246. package/dist/internal/c4/fleet-creation.d.ts +9 -2
  247. package/dist/internal/c4/fleet-creation.d.ts.map +1 -1
  248. package/dist/internal/c4/fleet-creation.js +15 -18
  249. package/dist/internal/c4/fleet-creation.js.map +1 -1
  250. package/dist/internal/c4/fleet-crew-binding.d.ts.map +1 -1
  251. package/dist/internal/c4/fleet-crew-binding.js +21 -49
  252. package/dist/internal/c4/fleet-crew-binding.js.map +1 -1
  253. package/dist/internal/c4/fleet-disband-layout.d.ts +7 -0
  254. package/dist/internal/c4/fleet-disband-layout.d.ts.map +1 -0
  255. package/dist/internal/c4/fleet-disband-layout.js +7 -0
  256. package/dist/internal/c4/fleet-disband-layout.js.map +1 -0
  257. package/dist/internal/c4/fleet-disband.d.ts +41 -0
  258. package/dist/internal/c4/fleet-disband.d.ts.map +1 -0
  259. package/dist/internal/c4/fleet-disband.js +86 -0
  260. package/dist/internal/c4/fleet-disband.js.map +1 -0
  261. package/dist/internal/c4/fleet-points.d.ts +3 -0
  262. package/dist/internal/c4/fleet-points.d.ts.map +1 -0
  263. package/dist/internal/c4/fleet-points.js +8 -0
  264. package/dist/internal/c4/fleet-points.js.map +1 -0
  265. package/dist/internal/c4/fleet-ship-assembly.d.ts +20 -5
  266. package/dist/internal/c4/fleet-ship-assembly.d.ts.map +1 -1
  267. package/dist/internal/c4/fleet-ship-assembly.js +62 -10
  268. package/dist/internal/c4/fleet-ship-assembly.js.map +1 -1
  269. package/dist/internal/c4/fleet-storage.d.ts +44 -0
  270. package/dist/internal/c4/fleet-storage.d.ts.map +1 -0
  271. package/dist/internal/c4/fleet-storage.js +108 -0
  272. package/dist/internal/c4/fleet-storage.js.map +1 -0
  273. package/dist/internal/c4/fleet-sync.d.ts +5 -0
  274. package/dist/internal/c4/fleet-sync.d.ts.map +1 -0
  275. package/dist/internal/c4/fleet-sync.js +15 -0
  276. package/dist/internal/c4/fleet-sync.js.map +1 -0
  277. package/dist/internal/c4/fleet.d.ts +20 -5
  278. package/dist/internal/c4/fleet.d.ts.map +1 -1
  279. package/dist/internal/c4/fleet.js +24 -84
  280. package/dist/internal/c4/fleet.js.map +1 -1
  281. package/dist/internal/c4/game.d.ts +76 -21
  282. package/dist/internal/c4/game.d.ts.map +1 -1
  283. package/dist/internal/c4/game.js +127 -116
  284. package/dist/internal/c4/game.js.map +1 -1
  285. package/dist/internal/c4/identity.d.ts +2 -153
  286. package/dist/internal/c4/identity.d.ts.map +1 -1
  287. package/dist/internal/c4/identity.js +19 -126
  288. package/dist/internal/c4/identity.js.map +1 -1
  289. package/dist/internal/c4/local-market-order.d.ts +4 -6
  290. package/dist/internal/c4/local-market-order.d.ts.map +1 -1
  291. package/dist/internal/c4/local-market-order.js +5 -6
  292. package/dist/internal/c4/local-market-order.js.map +1 -1
  293. package/dist/internal/c4/loot-layout.js +1 -1
  294. package/dist/internal/c4/loot-layout.js.map +1 -1
  295. package/dist/internal/c4/loot.d.ts +89 -0
  296. package/dist/internal/c4/loot.d.ts.map +1 -0
  297. package/dist/internal/c4/loot.js +109 -0
  298. package/dist/internal/c4/loot.js.map +1 -0
  299. package/dist/internal/c4/loyalty.d.ts +7 -3
  300. package/dist/internal/c4/loyalty.d.ts.map +1 -1
  301. package/dist/internal/c4/loyalty.js +41 -130
  302. package/dist/internal/c4/loyalty.js.map +1 -1
  303. package/dist/internal/c4/market-storage.d.ts +25 -0
  304. package/dist/internal/c4/market-storage.d.ts.map +1 -0
  305. package/dist/internal/c4/market-storage.js +53 -0
  306. package/dist/internal/c4/market-storage.js.map +1 -0
  307. package/dist/internal/c4/market.d.ts +3 -0
  308. package/dist/internal/c4/market.d.ts.map +1 -1
  309. package/dist/internal/c4/market.js +20 -76
  310. package/dist/internal/c4/market.js.map +1 -1
  311. package/dist/internal/c4/mining-instructions.d.ts +1 -1
  312. package/dist/internal/c4/mining-instructions.d.ts.map +1 -1
  313. package/dist/internal/c4/mining-instructions.js +1 -1
  314. package/dist/internal/c4/mining-instructions.js.map +1 -1
  315. package/dist/internal/c4/open-signal.d.ts +1 -1
  316. package/dist/internal/c4/open-signal.d.ts.map +1 -1
  317. package/dist/internal/c4/open-signal.js +1 -1
  318. package/dist/internal/c4/open-signal.js.map +1 -1
  319. package/dist/internal/c4/pda.d.ts +49 -1
  320. package/dist/internal/c4/pda.d.ts.map +1 -1
  321. package/dist/internal/c4/pda.js +122 -17
  322. package/dist/internal/c4/pda.js.map +1 -1
  323. package/dist/internal/c4/profile-faction.d.ts +2 -1
  324. package/dist/internal/c4/profile-faction.d.ts.map +1 -1
  325. package/dist/internal/c4/profile-faction.js +36 -72
  326. package/dist/internal/c4/profile-faction.js.map +1 -1
  327. package/dist/internal/c4/profile-permissions.d.ts +1 -1
  328. package/dist/internal/c4/profile-permissions.d.ts.map +1 -1
  329. package/dist/internal/c4/profile-permissions.js +16 -1
  330. package/dist/internal/c4/profile-permissions.js.map +1 -1
  331. package/dist/internal/c4/rewards.d.ts +1 -34
  332. package/dist/internal/c4/rewards.d.ts.map +1 -1
  333. package/dist/internal/c4/rewards.js +23 -170
  334. package/dist/internal/c4/rewards.js.map +1 -1
  335. package/dist/internal/c4/runtime-bindings.d.ts +2 -1
  336. package/dist/internal/c4/runtime-bindings.d.ts.map +1 -1
  337. package/dist/internal/c4/runtime-bindings.js +1 -1
  338. package/dist/internal/c4/runtime-bindings.js.map +1 -1
  339. package/dist/internal/c4/scan-lifecycle.d.ts +21 -3
  340. package/dist/internal/c4/scan-lifecycle.d.ts.map +1 -1
  341. package/dist/internal/c4/scan-lifecycle.js +35 -44
  342. package/dist/internal/c4/scan-lifecycle.js.map +1 -1
  343. package/dist/internal/c4/scan-storage.d.ts +7 -0
  344. package/dist/internal/c4/scan-storage.d.ts.map +1 -0
  345. package/dist/internal/c4/scan-storage.js +10 -0
  346. package/dist/internal/c4/scan-storage.js.map +1 -0
  347. package/dist/internal/c4/scanning.d.ts +3 -13
  348. package/dist/internal/c4/scanning.d.ts.map +1 -1
  349. package/dist/internal/c4/scanning.js +25 -75
  350. package/dist/internal/c4/scanning.js.map +1 -1
  351. package/dist/internal/c4/ship-stats.d.ts.map +1 -1
  352. package/dist/internal/c4/ship-stats.js +24 -26
  353. package/dist/internal/c4/ship-stats.js.map +1 -1
  354. package/dist/internal/c4/starbase.d.ts.map +1 -1
  355. package/dist/internal/c4/starbase.js +24 -96
  356. package/dist/internal/c4/starbase.js.map +1 -1
  357. package/dist/internal/c4/stimulant.d.ts +26 -0
  358. package/dist/internal/c4/stimulant.d.ts.map +1 -0
  359. package/dist/internal/c4/stimulant.js +36 -0
  360. package/dist/internal/c4/stimulant.js.map +1 -0
  361. package/dist/internal/c4/wallet-cargo-cache.js +2 -1
  362. package/dist/internal/c4/wallet-cargo-cache.js.map +1 -1
  363. package/dist/internal/c4/world.d.ts +6 -2
  364. package/dist/internal/c4/world.d.ts.map +1 -1
  365. package/dist/internal/c4/world.js +32 -107
  366. package/dist/internal/c4/world.js.map +1 -1
  367. package/dist/internal/fleet-route.d.ts +12 -0
  368. package/dist/internal/fleet-route.d.ts.map +1 -0
  369. package/dist/internal/fleet-route.js +11 -0
  370. package/dist/internal/fleet-route.js.map +1 -0
  371. package/dist/internal/fleet.d.ts +3 -3
  372. package/dist/internal/fleet.d.ts.map +1 -1
  373. package/dist/internal/fleet.js +1 -5
  374. package/dist/internal/fleet.js.map +1 -1
  375. package/dist/internal/loyalty-atlas-bank-state.d.ts +3 -2
  376. package/dist/internal/loyalty-atlas-bank-state.d.ts.map +1 -1
  377. package/dist/internal/loyalty-atlas-bank-state.js +4 -3
  378. package/dist/internal/loyalty-atlas-bank-state.js.map +1 -1
  379. package/dist/internal/planning/account-state.d.ts +6 -0
  380. package/dist/internal/planning/account-state.d.ts.map +1 -1
  381. package/dist/internal/planning/account-state.js +13 -0
  382. package/dist/internal/planning/account-state.js.map +1 -1
  383. package/dist/internal/planning/arrival-guards.d.ts +0 -1
  384. package/dist/internal/planning/arrival-guards.d.ts.map +1 -1
  385. package/dist/internal/planning/arrival-guards.js +3 -18
  386. package/dist/internal/planning/arrival-guards.js.map +1 -1
  387. package/dist/internal/planning/authorization-adapter.d.ts +59 -36
  388. package/dist/internal/planning/authorization-adapter.d.ts.map +1 -1
  389. package/dist/internal/planning/authorization-adapter.js +165 -71
  390. package/dist/internal/planning/authorization-adapter.js.map +1 -1
  391. package/dist/internal/planning/cargo-storage-actions.d.ts +8 -0
  392. package/dist/internal/planning/cargo-storage-actions.d.ts.map +1 -0
  393. package/dist/internal/planning/cargo-storage-actions.js +97 -0
  394. package/dist/internal/planning/cargo-storage-actions.js.map +1 -0
  395. package/dist/internal/planning/character-access.d.ts +28 -0
  396. package/dist/internal/planning/character-access.d.ts.map +1 -0
  397. package/dist/internal/planning/character-access.js +41 -0
  398. package/dist/internal/planning/character-access.js.map +1 -0
  399. package/dist/internal/planning/character-registration-guard.d.ts.map +1 -1
  400. package/dist/internal/planning/character-registration-guard.js +2 -1
  401. package/dist/internal/planning/character-registration-guard.js.map +1 -1
  402. package/dist/internal/planning/character-registration.d.ts.map +1 -1
  403. package/dist/internal/planning/character-registration.js +2 -1
  404. package/dist/internal/planning/character-registration.js.map +1 -1
  405. package/dist/internal/planning/claim-stake-storage-actions.d.ts +12 -0
  406. package/dist/internal/planning/claim-stake-storage-actions.d.ts.map +1 -0
  407. package/dist/internal/planning/claim-stake-storage-actions.js +63 -0
  408. package/dist/internal/planning/claim-stake-storage-actions.js.map +1 -0
  409. package/dist/internal/planning/combat-storage-actions.d.ts +9 -0
  410. package/dist/internal/planning/combat-storage-actions.d.ts.map +1 -0
  411. package/dist/internal/planning/combat-storage-actions.js +55 -0
  412. package/dist/internal/planning/combat-storage-actions.js.map +1 -0
  413. package/dist/internal/planning/crafting-storage-actions.d.ts +7 -0
  414. package/dist/internal/planning/crafting-storage-actions.d.ts.map +1 -0
  415. package/dist/internal/planning/crafting-storage-actions.js +64 -0
  416. package/dist/internal/planning/crafting-storage-actions.js.map +1 -0
  417. package/dist/internal/planning/currency-cache-guard.d.ts +3 -1
  418. package/dist/internal/planning/currency-cache-guard.d.ts.map +1 -1
  419. package/dist/internal/planning/currency-cache-guard.js +47 -2
  420. package/dist/internal/planning/currency-cache-guard.js.map +1 -1
  421. package/dist/internal/planning/democracy-history.d.ts.map +1 -1
  422. package/dist/internal/planning/democracy-history.js +6 -15
  423. package/dist/internal/planning/democracy-history.js.map +1 -1
  424. package/dist/internal/planning/direct-options.d.ts +17 -0
  425. package/dist/internal/planning/direct-options.d.ts.map +1 -0
  426. package/dist/internal/planning/direct-options.js +43 -0
  427. package/dist/internal/planning/direct-options.js.map +1 -0
  428. package/dist/internal/planning/disband-storage-actions.d.ts +9 -0
  429. package/dist/internal/planning/disband-storage-actions.d.ts.map +1 -0
  430. package/dist/internal/planning/disband-storage-actions.js +24 -0
  431. package/dist/internal/planning/disband-storage-actions.js.map +1 -0
  432. package/dist/internal/planning/faction-enrollment.d.ts +0 -2
  433. package/dist/internal/planning/faction-enrollment.d.ts.map +1 -1
  434. package/dist/internal/planning/faction-enrollment.js +0 -9
  435. package/dist/internal/planning/faction-enrollment.js.map +1 -1
  436. package/dist/internal/planning/fleet-arrival.d.ts.map +1 -1
  437. package/dist/internal/planning/fleet-arrival.js +10 -8
  438. package/dist/internal/planning/fleet-arrival.js.map +1 -1
  439. package/dist/internal/planning/fleet-attack-xp.d.ts.map +1 -1
  440. package/dist/internal/planning/fleet-attack-xp.js +5 -11
  441. package/dist/internal/planning/fleet-attack-xp.js.map +1 -1
  442. package/dist/internal/planning/fleet-creation.d.ts.map +1 -1
  443. package/dist/internal/planning/fleet-creation.js +17 -36
  444. package/dist/internal/planning/fleet-creation.js.map +1 -1
  445. package/dist/internal/planning/fleet-crew-guard.d.ts +2 -1
  446. package/dist/internal/planning/fleet-crew-guard.d.ts.map +1 -1
  447. package/dist/internal/planning/fleet-crew-guard.js +2 -1
  448. package/dist/internal/planning/fleet-crew-guard.js.map +1 -1
  449. package/dist/internal/planning/fleet-crew-transfer.d.ts +1 -1
  450. package/dist/internal/planning/fleet-crew-transfer.d.ts.map +1 -1
  451. package/dist/internal/planning/fleet-crew-transfer.js +45 -24
  452. package/dist/internal/planning/fleet-crew-transfer.js.map +1 -1
  453. package/dist/internal/planning/fleet-disband-guard.d.ts +12 -0
  454. package/dist/internal/planning/fleet-disband-guard.d.ts.map +1 -0
  455. package/dist/internal/planning/fleet-disband-guard.js +54 -0
  456. package/dist/internal/planning/fleet-disband-guard.js.map +1 -0
  457. package/dist/internal/planning/fleet-disband.d.ts +36 -0
  458. package/dist/internal/planning/fleet-disband.d.ts.map +1 -0
  459. package/dist/internal/planning/fleet-disband.js +82 -0
  460. package/dist/internal/planning/fleet-disband.js.map +1 -0
  461. package/dist/internal/planning/fleet-dock-funding-guard.d.ts +3 -3
  462. package/dist/internal/planning/fleet-dock-funding-guard.d.ts.map +1 -1
  463. package/dist/internal/planning/fleet-dock-funding-guard.js +87 -96
  464. package/dist/internal/planning/fleet-dock-funding-guard.js.map +1 -1
  465. package/dist/internal/planning/fleet-dock-funding.d.ts.map +1 -1
  466. package/dist/internal/planning/fleet-dock-funding.js +10 -0
  467. package/dist/internal/planning/fleet-dock-funding.js.map +1 -1
  468. package/dist/internal/planning/fleet-docking-guard.d.ts.map +1 -1
  469. package/dist/internal/planning/fleet-docking-guard.js +3 -1
  470. package/dist/internal/planning/fleet-docking-guard.js.map +1 -1
  471. package/dist/internal/planning/fleet-docking.d.ts +17 -2
  472. package/dist/internal/planning/fleet-docking.d.ts.map +1 -1
  473. package/dist/internal/planning/fleet-docking.js +83 -62
  474. package/dist/internal/planning/fleet-docking.js.map +1 -1
  475. package/dist/internal/planning/fleet-rental.d.ts +5 -0
  476. package/dist/internal/planning/fleet-rental.d.ts.map +1 -0
  477. package/dist/internal/planning/fleet-rental.js +9 -0
  478. package/dist/internal/planning/fleet-rental.js.map +1 -0
  479. package/dist/internal/planning/fleet-respawn.d.ts.map +1 -1
  480. package/dist/internal/planning/fleet-respawn.js +10 -12
  481. package/dist/internal/planning/fleet-respawn.js.map +1 -1
  482. package/dist/internal/planning/fleet-ship-assembly.d.ts +2 -0
  483. package/dist/internal/planning/fleet-ship-assembly.d.ts.map +1 -1
  484. package/dist/internal/planning/fleet-ship-assembly.js +94 -64
  485. package/dist/internal/planning/fleet-ship-assembly.js.map +1 -1
  486. package/dist/internal/planning/fleet-state.d.ts +25 -0
  487. package/dist/internal/planning/fleet-state.d.ts.map +1 -0
  488. package/dist/internal/planning/fleet-state.js +28 -0
  489. package/dist/internal/planning/fleet-state.js.map +1 -0
  490. package/dist/internal/planning/governance-fees.d.ts.map +1 -1
  491. package/dist/internal/planning/governance-fees.js +7 -15
  492. package/dist/internal/planning/governance-fees.js.map +1 -1
  493. package/dist/internal/planning/local-market-order-funding.d.ts.map +1 -1
  494. package/dist/internal/planning/local-market-order-funding.js +4 -2
  495. package/dist/internal/planning/local-market-order-funding.js.map +1 -1
  496. package/dist/internal/planning/local-market-order.d.ts +4 -4
  497. package/dist/internal/planning/local-market-order.d.ts.map +1 -1
  498. package/dist/internal/planning/local-market-order.js +82 -109
  499. package/dist/internal/planning/local-market-order.js.map +1 -1
  500. package/dist/internal/planning/market-storage-actions.d.ts +7 -0
  501. package/dist/internal/planning/market-storage-actions.d.ts.map +1 -0
  502. package/dist/internal/planning/market-storage-actions.js +71 -0
  503. package/dist/internal/planning/market-storage-actions.js.map +1 -0
  504. package/dist/internal/planning/mining-stop.d.ts.map +1 -1
  505. package/dist/internal/planning/mining-stop.js +2 -1
  506. package/dist/internal/planning/mining-stop.js.map +1 -1
  507. package/dist/internal/planning/mining-storage-actions.d.ts +11 -0
  508. package/dist/internal/planning/mining-storage-actions.d.ts.map +1 -0
  509. package/dist/internal/planning/mining-storage-actions.js +57 -0
  510. package/dist/internal/planning/mining-storage-actions.js.map +1 -0
  511. package/dist/internal/planning/movement-storage-actions.d.ts +7 -0
  512. package/dist/internal/planning/movement-storage-actions.d.ts.map +1 -0
  513. package/dist/internal/planning/movement-storage-actions.js +38 -0
  514. package/dist/internal/planning/movement-storage-actions.js.map +1 -0
  515. package/dist/internal/planning/movement-xp-guard.d.ts.map +1 -1
  516. package/dist/internal/planning/movement-xp-guard.js +3 -2
  517. package/dist/internal/planning/movement-xp-guard.js.map +1 -1
  518. package/dist/internal/planning/open-signal-guard.d.ts.map +1 -1
  519. package/dist/internal/planning/open-signal-guard.js +2 -1
  520. package/dist/internal/planning/open-signal-guard.js.map +1 -1
  521. package/dist/internal/planning/open-signal.d.ts.map +1 -1
  522. package/dist/internal/planning/open-signal.js +16 -7
  523. package/dist/internal/planning/open-signal.js.map +1 -1
  524. package/dist/internal/planning/original-token.d.ts +40 -0
  525. package/dist/internal/planning/original-token.d.ts.map +1 -0
  526. package/dist/internal/planning/original-token.js +112 -0
  527. package/dist/internal/planning/original-token.js.map +1 -0
  528. package/dist/internal/planning/own-starbase-facts.d.ts +37 -0
  529. package/dist/internal/planning/own-starbase-facts.d.ts.map +1 -0
  530. package/dist/internal/planning/own-starbase-facts.js +52 -0
  531. package/dist/internal/planning/own-starbase-facts.js.map +1 -0
  532. package/dist/internal/planning/plan-fields.d.ts +60 -0
  533. package/dist/internal/planning/plan-fields.d.ts.map +1 -0
  534. package/dist/internal/planning/plan-fields.js +159 -0
  535. package/dist/internal/planning/plan-fields.js.map +1 -0
  536. package/dist/internal/planning/plan-guards.d.ts +4 -0
  537. package/dist/internal/planning/plan-guards.d.ts.map +1 -0
  538. package/dist/internal/planning/plan-guards.js +184 -0
  539. package/dist/internal/planning/plan-guards.js.map +1 -0
  540. package/dist/internal/planning/profile-key.d.ts +13 -0
  541. package/dist/internal/planning/profile-key.d.ts.map +1 -0
  542. package/dist/internal/planning/profile-key.js +20 -0
  543. package/dist/internal/planning/profile-key.js.map +1 -0
  544. package/dist/internal/planning/profile-storage-funding-guard.d.ts +29 -0
  545. package/dist/internal/planning/profile-storage-funding-guard.d.ts.map +1 -0
  546. package/dist/internal/planning/profile-storage-funding-guard.js +115 -0
  547. package/dist/internal/planning/profile-storage-funding-guard.js.map +1 -0
  548. package/dist/internal/planning/profile-storage-funding.d.ts +46 -0
  549. package/dist/internal/planning/profile-storage-funding.d.ts.map +1 -0
  550. package/dist/internal/planning/profile-storage-funding.js +58 -0
  551. package/dist/internal/planning/profile-storage-funding.js.map +1 -0
  552. package/dist/internal/planning/recipe-state.d.ts +4 -1
  553. package/dist/internal/planning/recipe-state.d.ts.map +1 -1
  554. package/dist/internal/planning/recipe-state.js +7 -4
  555. package/dist/internal/planning/recipe-state.js.map +1 -1
  556. package/dist/internal/planning/region-access.d.ts +30 -0
  557. package/dist/internal/planning/region-access.d.ts.map +1 -0
  558. package/dist/internal/planning/region-access.js +94 -0
  559. package/dist/internal/planning/region-access.js.map +1 -0
  560. package/dist/internal/planning/rent-catalog.d.ts +37 -0
  561. package/dist/internal/planning/rent-catalog.d.ts.map +1 -0
  562. package/dist/internal/planning/rent-catalog.js +165 -0
  563. package/dist/internal/planning/rent-catalog.js.map +1 -0
  564. package/dist/internal/planning/research-unlock.d.ts +69 -0
  565. package/dist/internal/planning/research-unlock.d.ts.map +1 -0
  566. package/dist/internal/planning/research-unlock.js +287 -0
  567. package/dist/internal/planning/research-unlock.js.map +1 -0
  568. package/dist/internal/planning/respawn-guards.js +2 -1
  569. package/dist/internal/planning/respawn-guards.js.map +1 -1
  570. package/dist/internal/planning/runtime-guards.d.ts +0 -2
  571. package/dist/internal/planning/runtime-guards.d.ts.map +1 -1
  572. package/dist/internal/planning/runtime-guards.js +49 -29
  573. package/dist/internal/planning/runtime-guards.js.map +1 -1
  574. package/dist/internal/planning/scan-completion-guard.d.ts +6 -6
  575. package/dist/internal/planning/scan-completion-guard.d.ts.map +1 -1
  576. package/dist/internal/planning/scan-completion-guard.js +8 -7
  577. package/dist/internal/planning/scan-completion-guard.js.map +1 -1
  578. package/dist/internal/planning/scan-completion.d.ts.map +1 -1
  579. package/dist/internal/planning/scan-completion.js +9 -7
  580. package/dist/internal/planning/scan-completion.js.map +1 -1
  581. package/dist/internal/planning/scan-detect-guard.d.ts +1 -1
  582. package/dist/internal/planning/scan-detect-guard.d.ts.map +1 -1
  583. package/dist/internal/planning/scan-detect-guard.js +2 -2
  584. package/dist/internal/planning/scan-detect-guard.js.map +1 -1
  585. package/dist/internal/planning/scan-detect.d.ts +1 -1
  586. package/dist/internal/planning/scan-detect.d.ts.map +1 -1
  587. package/dist/internal/planning/scan-detect.js +10 -8
  588. package/dist/internal/planning/scan-detect.js.map +1 -1
  589. package/dist/internal/planning/scan-idle-scope.d.ts +5 -0
  590. package/dist/internal/planning/scan-idle-scope.d.ts.map +1 -0
  591. package/dist/internal/planning/scan-idle-scope.js +5 -0
  592. package/dist/internal/planning/scan-idle-scope.js.map +1 -0
  593. package/dist/internal/planning/scan-storage-actions.d.ts +9 -0
  594. package/dist/internal/planning/scan-storage-actions.d.ts.map +1 -0
  595. package/dist/internal/planning/scan-storage-actions.js +27 -0
  596. package/dist/internal/planning/scan-storage-actions.js.map +1 -0
  597. package/dist/internal/planning/ship-import-funding.js +3 -2
  598. package/dist/internal/planning/ship-import-funding.js.map +1 -1
  599. package/dist/internal/planning/ship-token.d.ts +1 -5
  600. package/dist/internal/planning/ship-token.d.ts.map +1 -1
  601. package/dist/internal/planning/ship-token.js +0 -36
  602. package/dist/internal/planning/ship-token.js.map +1 -1
  603. package/dist/internal/planning/starbase-player-owner.d.ts +21 -0
  604. package/dist/internal/planning/starbase-player-owner.d.ts.map +1 -0
  605. package/dist/internal/planning/starbase-player-owner.js +17 -0
  606. package/dist/internal/planning/starbase-player-owner.js.map +1 -0
  607. package/dist/internal/planning/starbase-player-recovery-guard.d.ts +7 -0
  608. package/dist/internal/planning/starbase-player-recovery-guard.d.ts.map +1 -0
  609. package/dist/internal/planning/starbase-player-recovery-guard.js +39 -0
  610. package/dist/internal/planning/starbase-player-recovery-guard.js.map +1 -0
  611. package/dist/internal/planning/starbase-system-guard.d.ts.map +1 -1
  612. package/dist/internal/planning/starbase-system-guard.js +2 -1
  613. package/dist/internal/planning/starbase-system-guard.js.map +1 -1
  614. package/dist/internal/planning/starbase-system.d.ts +5 -2
  615. package/dist/internal/planning/starbase-system.d.ts.map +1 -1
  616. package/dist/internal/planning/starbase-system.js +6 -3
  617. package/dist/internal/planning/starbase-system.js.map +1 -1
  618. package/dist/internal/planning/storage-action-readers.d.ts +10 -0
  619. package/dist/internal/planning/storage-action-readers.d.ts.map +1 -0
  620. package/dist/internal/planning/storage-action-readers.js +58 -0
  621. package/dist/internal/planning/storage-action-readers.js.map +1 -0
  622. package/dist/internal/planning/storage-actions.d.ts +89 -0
  623. package/dist/internal/planning/storage-actions.d.ts.map +1 -0
  624. package/dist/internal/planning/storage-actions.js +183 -0
  625. package/dist/internal/planning/storage-actions.js.map +1 -0
  626. package/dist/internal/planning/token-mint.d.ts.map +1 -1
  627. package/dist/internal/planning/token-mint.js +2 -1
  628. package/dist/internal/planning/token-mint.js.map +1 -1
  629. package/dist/internal/planning/trade-faction-market.d.ts.map +1 -1
  630. package/dist/internal/planning/trade-faction-market.js +4 -4
  631. package/dist/internal/planning/trade-faction-market.js.map +1 -1
  632. package/dist/internal/planning/wallet-starbase.d.ts +34 -0
  633. package/dist/internal/planning/wallet-starbase.d.ts.map +1 -0
  634. package/dist/internal/planning/wallet-starbase.js +39 -0
  635. package/dist/internal/planning/wallet-starbase.js.map +1 -0
  636. package/dist/internal/planning/xp-runtime.d.ts.map +1 -1
  637. package/dist/internal/planning/xp-runtime.js +16 -20
  638. package/dist/internal/planning/xp-runtime.js.map +1 -1
  639. package/dist/internal/read-meta.d.ts +12 -0
  640. package/dist/internal/read-meta.d.ts.map +1 -1
  641. package/dist/internal/read-meta.js +10 -0
  642. package/dist/internal/read-meta.js.map +1 -1
  643. package/dist/loyalty/actions/index.d.ts +1 -1
  644. package/dist/loyalty/actions/index.d.ts.map +1 -1
  645. package/dist/loyalty/actions/index.js +12 -43
  646. package/dist/loyalty/actions/index.js.map +1 -1
  647. package/dist/loyalty/index.d.ts +4 -0
  648. package/dist/loyalty/index.d.ts.map +1 -1
  649. package/dist/loyalty/index.js +19 -27
  650. package/dist/loyalty/index.js.map +1 -1
  651. package/dist/markets/actions/index.d.ts +1 -1
  652. package/dist/markets/actions/index.d.ts.map +1 -1
  653. package/dist/markets/actions/index.js +140 -178
  654. package/dist/markets/actions/index.js.map +1 -1
  655. package/dist/markets/actions/trade-faction-market.d.ts +4 -2
  656. package/dist/markets/actions/trade-faction-market.d.ts.map +1 -1
  657. package/dist/markets/actions/trade-faction-market.js +59 -39
  658. package/dist/markets/actions/trade-faction-market.js.map +1 -1
  659. package/dist/markets/index.d.ts.map +1 -1
  660. package/dist/markets/index.js +3 -11
  661. package/dist/markets/index.js.map +1 -1
  662. package/dist/mining/actions/index.d.ts +1 -1
  663. package/dist/mining/actions/index.d.ts.map +1 -1
  664. package/dist/mining/actions/index.js +84 -47
  665. package/dist/mining/actions/index.js.map +1 -1
  666. package/dist/mining/estimate-input.d.ts +103 -0
  667. package/dist/mining/estimate-input.d.ts.map +1 -0
  668. package/dist/mining/estimate-input.js +86 -0
  669. package/dist/mining/estimate-input.js.map +1 -0
  670. package/dist/mining/index.d.ts +1 -0
  671. package/dist/mining/index.d.ts.map +1 -1
  672. package/dist/mining/index.js +4 -11
  673. package/dist/mining/index.js.map +1 -1
  674. package/dist/planning/assembly.d.ts +1 -1
  675. package/dist/planning/assembly.d.ts.map +1 -1
  676. package/dist/planning/assembly.js +6 -30
  677. package/dist/planning/assembly.js.map +1 -1
  678. package/dist/planning/execution.d.ts +1 -0
  679. package/dist/planning/execution.d.ts.map +1 -1
  680. package/dist/planning/execution.js +149 -45
  681. package/dist/planning/execution.js.map +1 -1
  682. package/dist/planning/index.d.ts +70 -7
  683. package/dist/planning/index.d.ts.map +1 -1
  684. package/dist/planning/index.js +28 -1141
  685. package/dist/planning/index.js.map +1 -1
  686. package/dist/planning/plan-construction.d.ts +25 -0
  687. package/dist/planning/plan-construction.d.ts.map +1 -0
  688. package/dist/planning/plan-construction.js +143 -0
  689. package/dist/planning/plan-construction.js.map +1 -0
  690. package/dist/planning/plan-sequence-execution.d.ts.map +1 -1
  691. package/dist/planning/plan-sequence-execution.js +1 -11
  692. package/dist/planning/plan-sequence-execution.js.map +1 -1
  693. package/dist/planning/plan-validation.d.ts +17 -0
  694. package/dist/planning/plan-validation.d.ts.map +1 -0
  695. package/dist/planning/plan-validation.js +147 -0
  696. package/dist/planning/plan-validation.js.map +1 -0
  697. package/dist/registry/cargo.d.ts +2 -2
  698. package/dist/registry/cargo.d.ts.map +1 -1
  699. package/dist/registry/cargo.js +3 -4
  700. package/dist/registry/cargo.js.map +1 -1
  701. package/dist/registry/definition-section-snapshot.d.ts +1 -1
  702. package/dist/registry/definition-section-snapshot.d.ts.map +1 -1
  703. package/dist/registry/definition-section-snapshot.js +10 -3
  704. package/dist/registry/definition-section-snapshot.js.map +1 -1
  705. package/dist/registry/index.d.ts +31 -4
  706. package/dist/registry/index.d.ts.map +1 -1
  707. package/dist/registry/index.js +226 -227
  708. package/dist/registry/index.js.map +1 -1
  709. package/dist/registry/onboarding.d.ts.map +1 -1
  710. package/dist/registry/onboarding.js +4 -2
  711. package/dist/registry/onboarding.js.map +1 -1
  712. package/dist/registry/ship-stats-snapshot.d.ts.map +1 -1
  713. package/dist/registry/ship-stats-snapshot.js +19 -5
  714. package/dist/registry/ship-stats-snapshot.js.map +1 -1
  715. package/dist/registry/ships.js +1 -1
  716. package/dist/registry/ships.js.map +1 -1
  717. package/dist/rewards/index.d.ts +11 -5
  718. package/dist/rewards/index.d.ts.map +1 -1
  719. package/dist/rewards/index.js +10 -21
  720. package/dist/rewards/index.js.map +1 -1
  721. package/dist/scanning/actions/index.d.ts +1 -1
  722. package/dist/scanning/actions/index.d.ts.map +1 -1
  723. package/dist/scanning/actions/index.js +38 -8
  724. package/dist/scanning/actions/index.js.map +1 -1
  725. package/dist/scanning/index.d.ts +6 -11
  726. package/dist/scanning/index.d.ts.map +1 -1
  727. package/dist/scanning/index.js +7 -15
  728. package/dist/scanning/index.js.map +1 -1
  729. package/dist/scanning/odds.d.ts +5 -1
  730. package/dist/scanning/odds.d.ts.map +1 -1
  731. package/dist/scanning/odds.js.map +1 -1
  732. package/dist/scanning/signals.d.ts +6 -1
  733. package/dist/scanning/signals.d.ts.map +1 -1
  734. package/dist/scanning/signals.js +3 -1
  735. package/dist/scanning/signals.js.map +1 -1
  736. package/dist/starbases/actions/index.d.ts +49 -4
  737. package/dist/starbases/actions/index.d.ts.map +1 -1
  738. package/dist/starbases/actions/index.js +120 -69
  739. package/dist/starbases/actions/index.js.map +1 -1
  740. package/dist/starbases/index.d.ts +18 -0
  741. package/dist/starbases/index.d.ts.map +1 -1
  742. package/dist/starbases/index.js +24 -11
  743. package/dist/starbases/index.js.map +1 -1
  744. package/dist/world/index.d.ts +87 -13
  745. package/dist/world/index.d.ts.map +1 -1
  746. package/dist/world/index.js +88 -22
  747. package/dist/world/index.js.map +1 -1
  748. package/dist/world/planet-claim-stake-plots.d.ts +49 -40
  749. package/dist/world/planet-claim-stake-plots.d.ts.map +1 -1
  750. package/dist/world/planet-claim-stake-plots.js +47 -40
  751. package/dist/world/planet-claim-stake-plots.js.map +1 -1
  752. package/dist/world/starbase-status.d.ts +54 -13
  753. package/dist/world/starbase-status.d.ts.map +1 -1
  754. package/dist/world/starbase-status.js +65 -0
  755. package/dist/world/starbase-status.js.map +1 -1
  756. package/package.json +2 -2
  757. package/dist/internal/c4/faction-adapter.d.ts +0 -12
  758. package/dist/internal/c4/faction-adapter.d.ts.map +0 -1
  759. package/dist/internal/c4/faction-adapter.js +0 -52
  760. package/dist/internal/c4/faction-adapter.js.map +0 -1
  761. package/dist/internal/planning/movement-character.d.ts +0 -7
  762. package/dist/internal/planning/movement-character.d.ts.map +0 -1
  763. package/dist/internal/planning/movement-character.js +0 -41
  764. package/dist/internal/planning/movement-character.js.map +0 -1
@@ -1,20 +1,26 @@
1
1
  import { deriveCurrencyCache, validateCurrencyCache, } from '../../internal/c4/currency-cache.js';
2
2
  import { validateStarbaseSystem } from '../../internal/planning/starbase-system.js';
3
3
  import { SYSTEM_PROGRAM } from '../../internal/system-program.js';
4
- import { getAddressEncoder, isAddress } from '@solana/kit';
4
+ import { isAddress } from '@solana/kit';
5
5
  import { resolveActionRuntime } from '../../internal/planning/action-runtime.js';
6
+ import { requireProfileStarbasePlayer } from '../../internal/planning/starbase-player-owner.js';
6
7
  import { InvalidActionInputError, SageSdkError } from '../../client/errors.js';
7
8
  import { readContextRawAccounts } from '../../client/reconciliation.js';
8
- import { sage } from '../../internal/c4/bindings.js';
9
+ import { SAGE_PROGRAM_ADDRESS } from '../../internal/c4/runtime-bindings.js';
9
10
  import { craftingHabAccountDefinition, craftingProcessAccountDefinition, deriveRecipeAddress, recipeAccountDefinition, } from '../../internal/c4/crafting.js';
10
- import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/identity.js';
11
+ import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/character.js';
11
12
  import { deriveStarbasePlayerAddress, starbasePlayerAccountDefinition, } from '../../internal/c4/starbase.js';
12
13
  import { deriveInternalCraftingProcessState } from '../../internal/crafting-process-state.js';
13
14
  import { requireGameAddress } from '../../internal/game-context.js';
14
- import { adaptCancelCraftingProcessInstruction, adaptStartCraftingProcessInstruction, adaptCompleteCraftingProcessInstruction, validatePlanAuthorization, } from '../../internal/planning/authorization-adapter.js';
15
- import { deriveStarSystemAddress, starSystemAccountDefinition, } from '../../internal/c4/world.js';
16
- import { createPlan, } from '../../planning/index.js';
15
+ import { adaptCancelCraftingProcessInstruction, adaptStartCraftingProcessInstruction, adaptCompleteCraftingProcessInstruction, readPlanAuthorization, } from '../../internal/planning/authorization-adapter.js';
16
+ import { starSystemAccountDefinition } from '../../internal/c4/world.js';
17
+ import { buildPlannerPlan } from '../../planning/plan-construction.js';
17
18
  import { hashRecipeConfiguration, validateRecipeUsage, } from '../../internal/planning/recipe-state.js';
19
+ import { accountStatePrecondition } from '../../internal/planning/account-state.js';
20
+ import { GAME_DISCRIMINATOR } from '../../internal/c4/discriminators.js';
21
+ import { readCraftingStorageAction } from '../../internal/planning/crafting-storage-actions.js';
22
+ import { planStorageFunding } from '../../internal/planning/storage-actions.js';
23
+ import { RENT_ADDRESS } from '../../internal/planning/rent.js';
18
24
  const U64_MAX = (1n << 64n) - 1n;
19
25
  const U32_MAX = 4_294_967_295;
20
26
  function invalid(field, value, acceptedRange, remedy) {
@@ -43,15 +49,7 @@ function readAddress(value, field) {
43
49
  function validateStartOptions(value) {
44
50
  const options = readRecord(value, 'options');
45
51
  assertKeys(options, 'options', ['authorization', 'craftingProcess', 'quantity', 'numCrew'], ['craftingHab']);
46
- const authorizationRecord = readRecord(options.authorization, 'authorization');
47
- assertKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
48
- const authorization = authorizationRecord;
49
- readAddress(authorization.profile, 'authorization.profile');
50
- readAddress(authorization.authority, 'authorization.authority');
51
- if (authorization.certificate !== undefined) {
52
- readAddress(authorization.certificate, 'authorization.certificate');
53
- }
54
- validatePlanAuthorization(authorization);
52
+ const authorization = readPlanAuthorization(options.authorization);
55
53
  if (typeof options.quantity !== 'bigint' ||
56
54
  options.quantity <= 0n ||
57
55
  options.quantity > U64_MAX) {
@@ -59,9 +57,9 @@ function validateStartOptions(value) {
59
57
  }
60
58
  if (typeof options.numCrew !== 'number' ||
61
59
  !Number.isInteger(options.numCrew) ||
62
- options.numCrew < 0 ||
60
+ options.numCrew < 1 ||
63
61
  options.numCrew > U32_MAX) {
64
- invalid('numCrew', options.numCrew, `an integer from 0 through ${String(U32_MAX)} (unsigned u32)`, 'Set numCrew to the exact available crew count within the instruction codec range.');
62
+ invalid('numCrew', options.numCrew, `an integer from 1 through ${String(U32_MAX)} (unsigned u32)`, 'Set numCrew to at least one crew member, within the instruction codec range; a Crafting Process cannot start without crew.');
65
63
  }
66
64
  return {
67
65
  authorization,
@@ -73,18 +71,11 @@ function validateStartOptions(value) {
73
71
  : { craftingHab: options.craftingHab }),
74
72
  };
75
73
  }
76
- function validateCompleteOptions(value) {
74
+ /** Validates completion or cancellation options, which share one shape. */
75
+ function validateProcessOptions(value) {
77
76
  const options = readRecord(value, 'options');
78
77
  assertKeys(options, 'options', ['authorization', 'atUnixSeconds']);
79
- const authorizationRecord = readRecord(options.authorization, 'authorization');
80
- assertKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
81
- const authorization = authorizationRecord;
82
- readAddress(authorization.profile, 'authorization.profile');
83
- readAddress(authorization.authority, 'authorization.authority');
84
- if (authorization.certificate !== undefined) {
85
- readAddress(authorization.certificate, 'authorization.certificate');
86
- }
87
- validatePlanAuthorization(authorization);
78
+ const authorization = readPlanAuthorization(options.authorization);
88
79
  if (typeof options.atUnixSeconds !== 'bigint' || options.atUnixSeconds < 0n) {
89
80
  invalid('atUnixSeconds', options.atUnixSeconds, 'a non-negative bigint Unix timestamp', 'Set atUnixSeconds to the explicit current Unix timestamp before retrying.');
90
81
  }
@@ -92,20 +83,8 @@ function validateCompleteOptions(value) {
92
83
  }
93
84
  function validateCancelOptions(value) {
94
85
  const options = readRecord(value, 'options');
95
- assertKeys(options, 'options', ['authorization', 'atUnixSeconds']);
96
- const authorizationRecord = readRecord(options.authorization, 'authorization');
97
- assertKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
98
- const authorization = authorizationRecord;
99
- readAddress(authorization.profile, 'authorization.profile');
100
- readAddress(authorization.authority, 'authorization.authority');
101
- if (authorization.certificate !== undefined) {
102
- readAddress(authorization.certificate, 'authorization.certificate');
103
- }
104
- validatePlanAuthorization(authorization);
105
- if (typeof options.atUnixSeconds !== 'bigint' || options.atUnixSeconds < 0n) {
106
- invalid('atUnixSeconds', options.atUnixSeconds, 'a non-negative bigint Unix timestamp', 'Set atUnixSeconds to the explicit current Unix timestamp before retrying.');
107
- }
108
- return { atUnixSeconds: options.atUnixSeconds, authorization };
86
+ assertKeys(options, 'options', ['authorization']);
87
+ return { authorization: readPlanAuthorization(options.authorization) };
109
88
  }
110
89
  function fail(message, address) {
111
90
  throw new SageSdkError('ACTION_PRECONDITION_FAILED', message, { address });
@@ -139,22 +118,6 @@ function validateKnownInputs(recipe, items, quantity, source, sourceAddress) {
139
118
  }
140
119
  }
141
120
  }
142
- async function hashAccountState(account) {
143
- const owner = getAddressEncoder().encode(account.owner);
144
- const canonical = new Uint8Array(owner.length + account.data.length);
145
- canonical.set(owner);
146
- canonical.set(account.data, owner.length);
147
- const digest = new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', canonical));
148
- return [...digest].map((byte) => byte.toString(16).padStart(2, '0')).join('');
149
- }
150
- async function precondition(account, describes) {
151
- return Object.freeze({
152
- address: account.address,
153
- dataHash: await hashAccountState(account),
154
- describes,
155
- kind: 'account-state',
156
- });
157
- }
158
121
  async function recipePrecondition(account, describes, requiredUses = 0n) {
159
122
  return {
160
123
  kind: 'recipe-state',
@@ -164,8 +127,7 @@ async function recipePrecondition(account, describes, requiredUses = 0n) {
164
127
  describes,
165
128
  };
166
129
  }
167
- async function resolveAccounts(ctx, recipe, player, options, game) {
168
- const character = await findCharacterPda(options.authorization.profile, game);
130
+ async function resolveAccounts(ctx, recipe, player, options, game, character) {
169
131
  const currencyCache = options.craftingHab === undefined
170
132
  ? undefined
171
133
  : await deriveCurrencyCache(game).then(([address]) => address);
@@ -215,7 +177,8 @@ async function resolveAccounts(ctx, recipe, player, options, game) {
215
177
  !sameBalances(recipe.ingredients, recipeData.inputs)) {
216
178
  fail(`Recipe ${recipe.address} changed or does not match the configured Game, canonical PDA, status, limits, or ingredients. Refresh the Recipe through this context and retry.`, recipe.address);
217
179
  }
218
- validateRecipeUsage(recipeAccount, options.quantity);
180
+ // One start consumes one Recipe use, independent of the crafted quantity.
181
+ validateRecipeUsage(recipeAccount, 1n);
219
182
  if (options.craftingHab === undefined) {
220
183
  return { character, characterAccount, playerAccount, recipeAccount };
221
184
  }
@@ -227,11 +190,20 @@ async function resolveAccounts(ctx, recipe, player, options, game) {
227
190
  habData.ownerProfile !== options.authorization.profile ||
228
191
  habData.system !== player.system.address ||
229
192
  habData.state.kind !== options.craftingHab.state.kind ||
193
+ // The crew reservation was computed from the snapshot's modifier.
194
+ habData.modifiers.crewCount.raw !==
195
+ options.craftingHab.modifiers.crewCount.raw ||
230
196
  Math.max(0, habData.jobCapacity - habData.jobsRunning) !==
231
197
  options.craftingHab.availableJobSlots ||
232
198
  !habData.unlockedRecipeIds.includes(recipe.id) ||
233
199
  !sameBalances(options.craftingHab.production.inventory.items, habData.production.inventory.amounts)) {
234
- fail(`Crafting Hab ${options.craftingHab.address} changed or does not match its Game, Profile, System, active capacity, unlocked Recipe, or production inventory. Refresh the Crafting Hab through this context and retry.`, options.craftingHab.address);
200
+ fail(`Crafting Hab ${options.craftingHab.address} changed or does not match its Game, Profile, System, active capacity, crew-count modifier, unlocked Recipe, or production inventory. Refresh the Crafting Hab through this context and retry.`, options.craftingHab.address);
201
+ }
202
+ // The Character's research concurrency bonus raises the Hab's job limit.
203
+ const jobLimit = habData.jobCapacity +
204
+ characterData.modifiers.values.craftingJobConcurrencyBonus;
205
+ if (habData.jobsRunning >= jobLimit) {
206
+ fail(`Crafting Hab ${options.craftingHab.address} runs ${String(habData.jobsRunning)} jobs, its limit including the Character's concurrency bonus (${String(jobLimit)}). Complete or cancel another Hab job, refresh it, and retry.`, options.craftingHab.address);
235
207
  }
236
208
  await validateCurrencyCache(currencyCacheAccount, game, 'crafting');
237
209
  return {
@@ -247,20 +219,16 @@ async function resolveAccounts(ctx, recipe, player, options, game) {
247
219
  /** Plans one Crafting Process start without signing, simulation, or writes.
248
220
  *
249
221
  * The planner validates the loaded Recipe and Starbase Player, optional Hab,
250
- * known ingredient balances, available crew, and exact whole-account state. It
251
- * returns one inert Plan whose two required signer roles are bound only during
252
- * execution.
222
+ * known ingredient balances, the crew the job reserves, the Hab job limit
223
+ * including the Character's research concurrency bonus, and exact
224
+ * whole-account state. The ATLAS fee and any crew-roster bonuses remain
225
+ * chain-authoritative. It returns one inert Plan whose two required signer
226
+ * roles are bound only during execution.
253
227
  *
254
- * A Recipe whose stored `usageLimitRaw` is `0n` is treated as unlimited: the
255
- * local usage-limit precondition is skipped regardless of `usageCountRaw`.
256
- * This is pinned SDK behavior, not a verified game rule. The pinned generated
257
- * Recipe documents `usageLimit` only as "The maximum number of times that
258
- * this recipe can be used", and every Recipe observed on z.ink PTR stores
259
- * `9007199254740991` (2^53 - 1) as its limit, so no zero-limit Recipe has been
260
- * simulated or executed. If the program enforces a limit the SDK did not,
261
- * simulation or execution surfaces its `UsageLimitExceeded` error
262
- * (`1367932950`) instead of a local precondition failure. See
263
- * `docs/evidence/crafting-zero-usage-limit.md`.
228
+ * Each start consumes exactly one Recipe use, whatever its quantity, and needs
229
+ * the Recipe's fresh `usageCountRaw` to be below `usageLimitRaw`. A stored
230
+ * limit of `0n` is therefore never usable. Cancelling or destroying a process
231
+ * returns its use. See `docs/evidence/crafting-zero-usage-limit.md`.
264
232
  *
265
233
  * @example
266
234
  * ```ts
@@ -279,18 +247,19 @@ export async function planStartCraftingProcess(ctx, recipe, player, input) {
279
247
  if (recipe.game.address !== game || canonicalRecipe !== recipe.address) {
280
248
  fail(`Recipe ${recipe.address} does not match the configured Game ${game} or its canonical recipe-id PDA. Refresh the Recipe through this context and retry.`, recipe.address);
281
249
  }
282
- if (player.playerProfile.address !== options.authorization.profile) {
283
- fail(`Starbase Player ${player.address} does not belong to authorization Profile ${options.authorization.profile}. Refresh the Starbase Player for that Profile and retry.`, player.address);
284
- }
285
- const canonicalPlayer = await deriveStarbasePlayerAddress(player.system.address, player.character.address);
286
- if (canonicalPlayer !== player.address) {
287
- fail(`Starbase Player ${player.address} is not canonical for its Character and System. Refresh the Starbase Player through this context and retry.`, player.address);
288
- }
250
+ const character = await requireProfileStarbasePlayer(player, options.authorization.profile, game);
289
251
  if (recipe.status !== 'active') {
290
252
  fail(`Recipe ${recipe.name} is ${recipe.status}, so it cannot start a Crafting Process. Choose an active Recipe, refresh it, and retry.`, recipe.address);
291
253
  }
292
- if (options.numCrew > player.availableCrew) {
293
- fail(`Starbase Player ${player.address} has only ${String(player.availableCrew)} crew available, but numCrew requested ${String(options.numCrew)}. Reduce numCrew or free crew, refresh the Starbase Player, and retry.`, player.address);
254
+ // A Crafting Hab scales the reserved crew by its crew-count modifier
255
+ // (U26F6, 64 raw units per 1.0), rounded up.
256
+ const reservedCrew = options.craftingHab === undefined
257
+ ? BigInt(options.numCrew)
258
+ : (BigInt(options.numCrew) * options.craftingHab.modifiers.crewCount.raw +
259
+ 63n) /
260
+ 64n;
261
+ if (reservedCrew > BigInt(player.availableCrew)) {
262
+ fail(`Starbase Player ${player.address} has only ${String(player.availableCrew)} crew available, but this job reserves ${String(reservedCrew)} (numCrew ${String(options.numCrew)}${options.craftingHab === undefined ? '' : ' scaled by the Crafting Hab crew-count modifier'}). Reduce numCrew or free crew, refresh the Starbase Player, and retry.`, player.address);
294
263
  }
295
264
  if (recipe.habRequired && options.craftingHab === undefined) {
296
265
  fail(`Recipe ${recipe.name} requires a Crafting Hab. Provide craftingHab from the same Profile and Star System before retrying.`, recipe.address);
@@ -308,18 +277,13 @@ export async function planStartCraftingProcess(ctx, recipe, player, input) {
308
277
  if (options.craftingHab.state.kind !== 'active') {
309
278
  fail(`Crafting Hab ${options.craftingHab.address} is ${options.craftingHab.state.kind}; it must be active before starting a Crafting Process. Refresh or reactivate the Hab and retry.`, options.craftingHab.address);
310
279
  }
311
- if (options.craftingHab.availableJobSlots < 1) {
312
- fail(`Crafting Hab ${options.craftingHab.address} has no available job slots. Complete or cancel another Hab job, refresh it, and retry.`, options.craftingHab.address);
313
- }
314
280
  if (!options.craftingHab.unlockedRecipes.some(({ address }) => address === recipe.address)) {
315
281
  fail(`Crafting Hab ${options.craftingHab.address} has not unlocked Recipe ${recipe.name}. Choose an unlocked Recipe or update the Hab before retrying.`, options.craftingHab.address);
316
282
  }
317
- validateKnownInputs(recipe, options.craftingHab.production.inventory.items, options.quantity, 'Crafting Hab', options.craftingHab.address);
318
- }
319
- else {
320
- validateKnownInputs(recipe, player.cargo.items, options.quantity, 'Starbase Player', player.address);
321
283
  }
322
- const resolved = await resolveAccounts(ctx, recipe, player, options, game);
284
+ // Inputs come from the Starbase Player's cargo whether or not a Hab is used.
285
+ validateKnownInputs(recipe, player.cargo.items, options.quantity, 'Starbase Player', player.address);
286
+ const resolved = await resolveAccounts(ctx, recipe, player, options, game, character);
323
287
  const [runtimeSystem] = await readContextRawAccounts(ctx, [
324
288
  player.system.address,
325
289
  ]);
@@ -336,44 +300,67 @@ export async function planStartCraftingProcess(ctx, recipe, player, input) {
336
300
  });
337
301
  const description = `Start crafting ${String(options.quantity)} units of ${recipe.name} with ${String(options.numCrew)} crew at Starbase Player ${player.address}.`;
338
302
  const preconditions = [
339
- precondition(resolved.characterAccount, `The canonical Character remains assigned to Profile ${options.authorization.profile} in the configured Game.`),
340
- precondition(resolved.playerAccount, `Starbase Player ${player.address} retains its Character, Profile, System, crew, and input inventory.`),
341
- recipePrecondition(resolved.recipeAccount, `Recipe ${recipe.name} retains its configuration and enough remaining uses for this job.`, options.quantity),
303
+ accountStatePrecondition(resolved.characterAccount, `The canonical Character remains assigned to Profile ${options.authorization.profile} in the configured Game.`),
304
+ accountStatePrecondition(resolved.playerAccount, `Starbase Player ${player.address} retains its Character, Profile, System, crew, and input inventory.`),
305
+ recipePrecondition(resolved.recipeAccount, `Recipe ${recipe.name} retains its configuration and at least one remaining use for this job.`, 1n),
342
306
  ...(resolved.habAccount === undefined
343
307
  ? []
344
308
  : [
345
- precondition(resolved.habAccount, `Crafting Hab ${resolved.habAccount.address} remains active with an available job slot, the Recipe unlocked, and sufficient inputs.`),
309
+ accountStatePrecondition(resolved.habAccount, `Crafting Hab ${resolved.habAccount.address} remains active with an available job slot and the Recipe unlocked; inputs come from the Starbase Player's cargo.`),
346
310
  ]),
347
311
  ];
348
- return createPlan({
312
+ const instruction = adaptStartCraftingProcessInstruction({
313
+ ...runtime.accounts,
314
+ starbaseGovernance: runtime.accounts.starbaseGovernance,
315
+ authorization: options.authorization,
316
+ character: resolved.character,
317
+ craftingProcess: options.craftingProcess,
318
+ game,
319
+ numCrew: options.numCrew,
320
+ quantity: options.quantity,
321
+ recipe: recipe.address,
322
+ starbasePlayer: player.address,
323
+ system: player.system.address,
324
+ ...(options.craftingHab === undefined
325
+ ? {}
326
+ : {
327
+ craftingHabInstance: options.craftingHab.address,
328
+ currencyCache: resolved.currencyCache,
329
+ }),
330
+ });
331
+ // A start creates the Crafting Process and consumes inputs from the Starbase
332
+ // Player; the program funds the net growth from the Profile vault with the
333
+ // signing key.
334
+ const [profileAccount, rentAccount] = await readContextRawAccounts(ctx, [
335
+ options.authorization.profile,
336
+ RENT_ADDRESS,
337
+ ]);
338
+ const storageAccounts = new Map([
339
+ [resolved.recipeAccount.address, resolved.recipeAccount],
340
+ [resolved.playerAccount.address, resolved.playerAccount],
341
+ [options.authorization.profile, profileAccount],
342
+ [RENT_ADDRESS, rentAccount],
343
+ ]);
344
+ const storage = planStorageFunding({
345
+ action: readCraftingStorageAction(instruction, storageAccounts),
346
+ accounts: storageAccounts,
347
+ label: 'Crafting Process start',
348
+ });
349
+ return buildPlannerPlan({
349
350
  kind: 'crafting.start-process',
350
- preconditions: [...runtime.guards, ...(await Promise.all(preconditions))],
351
+ preconditions: [
352
+ ...runtime.guards,
353
+ ...(await Promise.all(preconditions)),
354
+ storage.guard,
355
+ ],
351
356
  steps: [
352
357
  {
353
- describes: `${description} ${runtime.description}`,
354
- instruction: adaptStartCraftingProcessInstruction({
355
- ...runtime.accounts,
356
- starbaseGovernance: runtime.accounts.starbaseGovernance,
357
- authorization: options.authorization,
358
- character: resolved.character,
359
- craftingProcess: options.craftingProcess,
360
- game,
361
- numCrew: options.numCrew,
362
- quantity: options.quantity,
363
- recipe: recipe.address,
364
- starbasePlayer: player.address,
365
- system: player.system.address,
366
- ...(options.craftingHab === undefined
367
- ? {}
368
- : {
369
- craftingHabInstance: options.craftingHab.address,
370
- currencyCache: resolved.currencyCache,
371
- }),
372
- }),
358
+ describes: `${description} ${runtime.description} ${storage.disclosure}`,
359
+ instruction,
373
360
  signers: [options.authorization.authority, options.craftingProcess],
374
361
  },
375
362
  ],
376
- summary: `${description} ${runtime.description}`,
363
+ summary: `${description} ${runtime.description} ${storage.disclosure}`,
377
364
  });
378
365
  }
379
366
  function sameProcessSnapshot(process, account) {
@@ -404,41 +391,53 @@ function processHabAddress(process) {
404
391
  }
405
392
  function validateGameRead(account, game) {
406
393
  if (account.address !== game ||
407
- account.owner !== sage.SAGE_PROGRAM_ADDRESS ||
408
- account.data.length < sage.GAME_DISCRIMINATOR.length ||
409
- !sage.GAME_DISCRIMINATOR.every((byte, index) => account.data[index] === byte)) {
394
+ account.owner !== SAGE_PROGRAM_ADDRESS ||
395
+ account.data.length < GAME_DISCRIMINATOR.length ||
396
+ !GAME_DISCRIMINATOR.every((byte, index) => account.data[index] === byte)) {
410
397
  fail(`Game ${account.address} does not match the configured address, owner, or pinned account layout. Refresh the configured Game and retry.`, account.address);
411
398
  }
412
399
  }
413
- async function resolveCompleteAccounts(ctx, process, options, game) {
414
- const character = await findCharacterPda(options.authorization.profile, game);
415
- const currencyCache = await deriveCurrencyCache(game).then(([address]) => address);
400
+ /** Reads and validates the Crafting Process graph shared by completion and
401
+ * cancellation, with `extra` in the same read: the unchanged Process, its
402
+ * canonical System and Starbase, the unchanged Recipe and its Hab policy, the
403
+ * Profile's canonical Starbase Player and Character, and the Process Hab,
404
+ * active and owned, when present. `action` completes the remedies, and
405
+ * `staleStarbaseGuidance` adds advice for a replaced Starbase. With
406
+ * `readHab` false the Hab is passed by its stored address only and is not
407
+ * read, as cancellation tolerates a Hab in any state or none at all. */
408
+ async function resolveProcessAccounts(ctx, process, profile, game, action, extra, staleStarbaseGuidance, readHab = true) {
409
+ const character = await findCharacterPda(profile, game);
416
410
  const habAddress = processHabAddress(process);
417
- const addresses = [
411
+ const habRead = readHab ? habAddress : undefined;
412
+ // The SAGE program address is the omitted-account placeholder, so the
413
+ // program would see no Hab where the Process stores one.
414
+ if (!readHab && habAddress === SAGE_PROGRAM_ADDRESS)
415
+ fail(`Crafting Process ${process.address} stores the SAGE program address as its Crafting Hab, which the instruction cannot pass as a Hab. Refresh the Crafting Process; it cannot be cancelled while it stores that address.`, process.address);
416
+ const [processCandidate, recipeCandidate, playerCandidate, systemCandidate, characterCandidate, extraAccount, habCandidate,] = await readContextRawAccounts(ctx, [
418
417
  process.address,
419
418
  process.recipe.address,
420
419
  process.starbasePlayer.address,
421
420
  process.system.address,
422
- ...(habAddress === undefined ? [] : [habAddress]),
423
421
  character,
424
- currencyCache,
425
- ];
426
- const reads = await readContextRawAccounts(ctx, addresses);
427
- const byAddress = new Map(addresses.map((address, index) => [address, reads[index]]));
428
- const processAccount = requireAccount(byAddress.get(process.address), process.address, `Crafting Process ${process.address} is missing, so it may already be cancelled or closed. Refresh the Crafting Process and retry only if it still exists.`);
429
- const recipeAccount = requireAccount(byAddress.get(process.recipe.address), process.recipe.address, `Recipe ${process.recipe.address} is missing. Refresh the Crafting Process and its Recipe before retrying completion.`);
430
- const playerAccount = requireAccount(byAddress.get(process.starbasePlayer.address), process.starbasePlayer.address, `Starbase Player ${process.starbasePlayer.address} is missing. Refresh the Crafting Process and Starbase Player before retrying completion.`);
431
- const systemAccount = requireAccount(byAddress.get(process.system.address), process.system.address, `Star System ${process.system.address} is missing. Refresh the Crafting Process and Star System before retrying completion.`);
432
- const characterAccount = requireAccount(byAddress.get(character), character, `Canonical Character ${character} is missing for Profile ${options.authorization.profile}. Create or repair the Character in the configured Game before retrying completion.`);
433
- const currencyCacheAccount = requireAccount(byAddress.get(currencyCache), currencyCache, `Canonical CurrencyCache ${currencyCache} is missing for the configured Game. Refresh the Game currency configuration before retrying completion.`);
434
- const habAccount = habAddress === undefined
435
- ? undefined
436
- : requireAccount(byAddress.get(habAddress), habAddress, `Crafting Hab ${habAddress} is missing. Refresh the Crafting Process and Hab before retrying completion.`);
437
- const processData = craftingProcessAccountDefinition.decode(processAccount);
422
+ extra,
423
+ ...(habRead === undefined ? [] : [habRead]),
424
+ ]);
425
+ const processAccount = requireAccount(processCandidate, process.address, `Crafting Process ${process.address} is missing, so it may already be completed, cancelled, or closed. Refresh the Crafting Process and retry only if it still exists.`);
438
426
  if (processAccount.address !== process.address ||
439
- !sameProcessSnapshot(process, processData)) {
427
+ !sameProcessSnapshot(process, craftingProcessAccountDefinition.decode(processAccount))) {
440
428
  fail(`Crafting Process ${process.address} changed or no longer matches its relationships, timing, crew, quantity, fee, or inputs. Refresh the Crafting Process and retry.`, process.address);
441
429
  }
430
+ await validateStarbaseSystem(requireAccount(systemCandidate, process.system.address, `Star System ${process.system.address} is missing. Refresh the Crafting Process and Star System before retrying ${action}.`), {
431
+ address: process.system.address,
432
+ game,
433
+ starbaseSequenceId: process.starbaseSequenceId,
434
+ }, staleStarbaseGuidance);
435
+ const recipeAccount = requireAccount(recipeCandidate, process.recipe.address, `Recipe ${process.recipe.address} is missing. Refresh the Crafting Process and its Recipe before retrying ${action}.`);
436
+ const playerAccount = requireAccount(playerCandidate, process.starbasePlayer.address, `Starbase Player ${process.starbasePlayer.address} is missing. Refresh the Crafting Process and Starbase Player before retrying ${action}.`);
437
+ const characterAccount = requireAccount(characterCandidate, character, `Canonical Character ${character} is missing for Profile ${profile}. Create or repair the Character in the configured Game before retrying ${action}.`);
438
+ const habAccount = habRead === undefined
439
+ ? undefined
440
+ : requireAccount(habCandidate, habRead, `Crafting Hab ${habAddress} is missing. Refresh the Crafting Process and Hab before retrying ${action}.`);
442
441
  const recipeData = recipeAccountDefinition.decode(recipeAccount);
443
442
  const canonicalRecipe = await deriveRecipeAddress(game, recipeData.id);
444
443
  if (recipeAccount.address !== process.recipe.address ||
@@ -451,59 +450,70 @@ async function resolveCompleteAccounts(ctx, process, options, game) {
451
450
  recipeData.usageLimitRaw !== process.recipe.usageLimitRaw ||
452
451
  !sameBalances(process.recipe.ingredients, recipeData.inputs) ||
453
452
  !sameBalances(process.recipe.outputs, recipeData.outputs)) {
454
- fail(`Recipe ${process.recipe.address} changed or does not match the configured Game, canonical recipe-id PDA, status, Hab policy, limits, ingredients, or outputs. Refresh the Crafting Process and Recipe before retrying completion.`, process.recipe.address);
453
+ fail(`Recipe ${process.recipe.address} changed or does not match the configured Game, canonical recipe-id PDA, status, Hab policy, limits, ingredients, or outputs. Refresh the Crafting Process and Recipe before retrying ${action}.`, process.recipe.address);
455
454
  }
456
455
  if (recipeData.habRequired && habAddress === undefined) {
457
- fail(`Recipe ${recipeData.name} requires a Crafting Hab, but Crafting Process ${process.address} omits one. Refresh or repair the Process relationship before retrying completion.`, process.address);
456
+ fail(`Recipe ${recipeData.name} requires a Crafting Hab, but Crafting Process ${process.address} omits one. Refresh or repair the Process relationship before retrying ${action}.`, process.address);
458
457
  }
459
458
  const playerData = starbasePlayerAccountDefinition.decode(playerAccount);
460
459
  const canonicalPlayer = await deriveStarbasePlayerAddress(process.system.address, character);
461
460
  if (playerAccount.address !== process.starbasePlayer.address ||
462
461
  canonicalPlayer !== process.starbasePlayer.address ||
463
- playerData.playerProfile !== options.authorization.profile ||
462
+ playerData.playerProfile !== profile ||
464
463
  playerData.character !== character ||
465
464
  playerData.system !== process.system.address) {
466
- fail(`Starbase Player ${process.starbasePlayer.address} does not match the authorization Profile, canonical Character, or Crafting Process System. Refresh the Crafting Process and Starbase Player before retrying completion.`, process.starbasePlayer.address);
467
- }
468
- const systemData = starSystemAccountDefinition.decode(systemAccount);
469
- const canonicalSystem = await deriveStarSystemAddress(game, systemData.systemId);
470
- if (systemAccount.address !== process.system.address ||
471
- canonicalSystem !== process.system.address ||
472
- systemData.game !== game ||
473
- systemData.sequenceId !== process.starbaseSequenceId ||
474
- systemData.starbase === undefined) {
475
- fail(`Star System ${process.system.address} does not match the configured Game, canonical system-id PDA, active Starbase, or Crafting Process Starbase sequence. Refresh the Crafting Process and Star System before retrying completion.`, process.system.address);
465
+ fail(`Starbase Player ${process.starbasePlayer.address} does not match the authorization Profile, canonical Character, or Crafting Process System. Refresh the Crafting Process and Starbase Player before retrying ${action}.`, process.starbasePlayer.address);
476
466
  }
477
467
  if (habAccount !== undefined) {
478
468
  const habData = craftingHabAccountDefinition.decode(habAccount);
479
469
  if (habAccount.address !== habAddress ||
480
470
  habData.game !== game ||
481
- habData.ownerProfile !== options.authorization.profile ||
471
+ habData.ownerProfile !== profile ||
482
472
  habData.system !== process.system.address ||
483
473
  habData.systemSequenceId !== process.starbaseSequenceId ||
484
474
  habData.state.kind !== 'active') {
485
- fail(`Crafting Hab ${habAddress} is not active or does not match the configured Game, authorization Profile, Crafting Process System, or Starbase sequence. Refresh the Crafting Process and Hab before retrying completion.`, habAccount.address);
475
+ fail(`Crafting Hab ${habAddress} is not active or does not match the configured Game, authorization Profile, Crafting Process System, or Starbase sequence. Refresh the Crafting Process and Hab before retrying ${action}.`, habAccount.address);
486
476
  }
487
477
  }
488
478
  const characterData = characterAccountDefinition.decode(characterAccount);
489
479
  if (characterAccount.address !== character ||
490
- characterData.playerProfile !== options.authorization.profile ||
480
+ characterData.playerProfile !== profile ||
491
481
  characterData.game !== game) {
492
- fail(`The canonical Character does not match Profile ${options.authorization.profile} and the configured Game ${game}. Refresh or repair the Character relationship before retrying completion.`, characterAccount.address);
482
+ fail(`The canonical Character does not match Profile ${profile} and the configured Game ${game}. Refresh or repair the Character relationship before retrying ${action}.`, characterAccount.address);
493
483
  }
494
- await validateCurrencyCache(currencyCacheAccount, game, 'crafting');
495
484
  return {
496
485
  character,
497
486
  characterAccount,
498
- currencyCache,
499
- currencyCacheAccount,
500
- ...(habAccount === undefined ? {} : { habAccount }),
487
+ extraAccount,
488
+ habAccount,
489
+ habAddress,
501
490
  playerAccount,
502
491
  processAccount,
503
492
  recipeAccount,
504
- systemAccount,
505
493
  };
506
494
  }
495
+ /** The validated Process graph preconditions, with `systemGuard` after the
496
+ * Starbase Player when the action guards the Starbase separately. */
497
+ function processPreconditions(process, resolved, profile, systemGuard = []) {
498
+ return [
499
+ accountStatePrecondition(resolved.processAccount, `Crafting Process ${process.address} retains its validated relationships, timing, crew, quantity, fee, and inputs.`),
500
+ recipePrecondition(resolved.recipeAccount, `Recipe ${process.recipe.name} retains its validated Game, Hab policy, ingredients, and outputs.`),
501
+ accountStatePrecondition(resolved.playerAccount, `Starbase Player ${process.starbasePlayer.address} retains its Profile, Character, and System relationships.`),
502
+ ...systemGuard.map((guard) => Promise.resolve(guard)),
503
+ ...(resolved.habAccount === undefined
504
+ ? []
505
+ : [
506
+ accountStatePrecondition(resolved.habAccount, `Crafting Hab ${resolved.habAccount.address} remains active in the validated Game, Profile, System, and Starbase sequence.`),
507
+ ]),
508
+ accountStatePrecondition(resolved.characterAccount, `The canonical Character remains assigned to Profile ${profile} in the configured Game.`),
509
+ ];
510
+ }
511
+ /** Requires the authorization Profile to own the Process. */
512
+ function requireProcessOwner(process, profile) {
513
+ if (process.profile.address !== profile) {
514
+ fail(`Crafting Process ${process.address} does not belong to authorization Profile ${profile}. Use the owning Profile, refresh the Process, and retry.`, process.address);
515
+ }
516
+ }
507
517
  /** Plans completion of one Crafting Process without signing, simulation, or writes.
508
518
  *
509
519
  * The planner resolves and validates the Process account graph, requires Profile
@@ -521,11 +531,10 @@ async function resolveCompleteAccounts(ctx, process, options, game) {
521
531
  * ```
522
532
  */
523
533
  export async function planCompleteCraftingProcess(ctx, process, input) {
524
- const options = validateCompleteOptions(input);
534
+ const options = validateProcessOptions(input);
525
535
  const game = requireGameAddress(ctx);
526
- if (process.profile.address !== options.authorization.profile) {
527
- fail(`Crafting Process ${process.address} does not belong to authorization Profile ${options.authorization.profile}. Use the owning Profile, refresh the Process, and retry.`, process.address);
528
- }
536
+ const { profile } = options.authorization;
537
+ requireProcessOwner(process, profile);
529
538
  const state = deriveInternalCraftingProcessState(process, options.atUnixSeconds);
530
539
  if (state.kind !== 'complete') {
531
540
  const timing = state.kind === 'scheduled'
@@ -533,13 +542,14 @@ export async function planCompleteCraftingProcess(ctx, process, input) {
533
542
  : `in-progress and not complete with ${String(state.remainingSeconds)} seconds remaining`;
534
543
  fail(`Crafting Process ${process.address} is ${timing} at Unix timestamp ${String(options.atUnixSeconds)}. Wait until it is complete, provide a current timestamp, and retry.`, process.address);
535
544
  }
536
- const resolved = await resolveCompleteAccounts(ctx, process, options, game);
545
+ const [currencyCache] = await deriveCurrencyCache(game);
546
+ const resolved = await resolveProcessAccounts(ctx, process, profile, game, 'completion', currencyCache);
547
+ await validateCurrencyCache(requireAccount(resolved.extraAccount, currencyCache, `Canonical CurrencyCache ${currencyCache} is missing for the configured Game. Refresh the Game currency configuration before retrying completion.`), game, 'crafting');
537
548
  const runtime = await resolveActionRuntime(ctx, {
538
549
  mode: 'crafting-complete',
539
550
  game,
540
551
  system: process.system.address,
541
- starbaseSeqId: starSystemAccountDefinition.decode(resolved.systemAccount)
542
- .sequenceId,
552
+ starbaseSeqId: process.starbaseSequenceId,
543
553
  character: resolved.character,
544
554
  process: process.address,
545
555
  ...(resolved.habAccount === undefined
@@ -547,20 +557,12 @@ export async function planCompleteCraftingProcess(ctx, process, input) {
547
557
  : { structure: resolved.habAccount.address }),
548
558
  });
549
559
  const description = `Complete crafting ${String(process.quantityRaw)} units of ${process.recipe.name} at Starbase Player ${process.starbasePlayer.address}, returning ${String(process.numCrew)} crew and producing the Recipe outputs.`;
550
- const preconditions = [
551
- precondition(resolved.processAccount, `Crafting Process ${process.address} retains its validated relationships, timing, crew, quantity, fee, and inputs.`),
552
- recipePrecondition(resolved.recipeAccount, `Recipe ${process.recipe.name} retains its validated Game, Hab policy, ingredients, and outputs.`),
553
- precondition(resolved.playerAccount, `Starbase Player ${process.starbasePlayer.address} retains its Profile, Character, and System relationships.`),
554
- ...(resolved.habAccount === undefined
555
- ? []
556
- : [
557
- precondition(resolved.habAccount, `Crafting Hab ${resolved.habAccount.address} remains active in the validated Game, Profile, System, and Starbase sequence.`),
558
- ]),
559
- precondition(resolved.characterAccount, `The canonical Character remains assigned to Profile ${options.authorization.profile} in the configured Game.`),
560
- ];
561
- return createPlan({
560
+ return buildPlannerPlan({
562
561
  kind: 'crafting.complete-process',
563
- preconditions: [...runtime.guards, ...(await Promise.all(preconditions))],
562
+ preconditions: [
563
+ ...runtime.guards,
564
+ ...(await Promise.all(processPreconditions(process, resolved, profile))),
565
+ ],
564
566
  steps: [
565
567
  {
566
568
  describes: `${description} ${runtime.description}`,
@@ -569,7 +571,7 @@ export async function planCompleteCraftingProcess(ctx, process, input) {
569
571
  authorization: options.authorization,
570
572
  character: resolved.character,
571
573
  craftingProcess: process.address,
572
- currencyCache: resolved.currencyCache,
574
+ currencyCache,
573
575
  game,
574
576
  recipe: process.recipe.address,
575
577
  starbasePlayer: process.starbasePlayer.address,
@@ -584,99 +586,15 @@ export async function planCompleteCraftingProcess(ctx, process, input) {
584
586
  summary: `${description} ${runtime.description}`,
585
587
  });
586
588
  }
587
- async function resolveCancelAccounts(ctx, process, options, game) {
588
- const character = await findCharacterPda(options.authorization.profile, game);
589
- const habAddress = processHabAddress(process);
590
- const addresses = [
591
- process.address,
592
- process.recipe.address,
593
- process.starbasePlayer.address,
594
- process.system.address,
595
- ...(habAddress === undefined ? [] : [habAddress]),
596
- character,
597
- game,
598
- ];
599
- const reads = await readContextRawAccounts(ctx, addresses);
600
- const byAddress = new Map(addresses.map((address, index) => [address, reads[index]]));
601
- const processAccount = requireAccount(byAddress.get(process.address), process.address, `Crafting Process ${process.address} is missing, so it may already be completed, cancelled, or closed. Refresh the Crafting Process and retry only if it still exists.`);
602
- const systemAccount = requireAccount(byAddress.get(process.system.address), process.system.address, `Star System ${process.system.address} is missing. Refresh the Crafting Process and Star System before retrying cancellation.`);
603
- const processData = craftingProcessAccountDefinition.decode(processAccount);
604
- if (processAccount.address !== process.address ||
605
- !sameProcessSnapshot(process, processData)) {
606
- fail(`Crafting Process ${process.address} changed or no longer matches its relationships, timing, crew, quantity, fee, or inputs. Refresh the Crafting Process and retry.`, process.address);
607
- }
608
- await validateStarbaseSystem(systemAccount, {
609
- address: process.system.address,
610
- game,
611
- starbaseSequenceId: process.starbaseSequenceId,
612
- });
613
- const recipeAccount = requireAccount(byAddress.get(process.recipe.address), process.recipe.address, `Recipe ${process.recipe.address} is missing. Refresh the Crafting Process and its Recipe before retrying cancellation.`);
614
- const playerAccount = requireAccount(byAddress.get(process.starbasePlayer.address), process.starbasePlayer.address, `Starbase Player ${process.starbasePlayer.address} is missing. Refresh the Crafting Process and Starbase Player before retrying cancellation.`);
615
- const characterAccount = requireAccount(byAddress.get(character), character, `Canonical Character ${character} is missing for Profile ${options.authorization.profile}. Create or repair the Character in the configured Game before retrying cancellation.`);
616
- const gameAccount = requireAccount(byAddress.get(game), game, `Configured Game ${game} is missing. Refresh the configured Game before retrying cancellation.`);
617
- const habAccount = habAddress === undefined
618
- ? undefined
619
- : requireAccount(byAddress.get(habAddress), habAddress, `Crafting Hab ${habAddress} is missing. Refresh the Crafting Process and Hab before retrying cancellation.`);
620
- const recipeData = recipeAccountDefinition.decode(recipeAccount);
621
- const canonicalRecipe = await deriveRecipeAddress(game, recipeData.id);
622
- if (recipeAccount.address !== process.recipe.address ||
623
- canonicalRecipe !== process.recipe.address ||
624
- recipeData.game !== game ||
625
- recipeData.id !== process.recipe.id ||
626
- recipeData.name !== process.recipe.name ||
627
- recipeData.status !== process.recipe.status ||
628
- recipeData.habRequired !== process.recipe.habRequired ||
629
- recipeData.usageLimitRaw !== process.recipe.usageLimitRaw ||
630
- !sameBalances(process.recipe.ingredients, recipeData.inputs) ||
631
- !sameBalances(process.recipe.outputs, recipeData.outputs)) {
632
- fail(`Recipe ${process.recipe.address} changed or does not match the configured Game, canonical recipe-id PDA, status, Hab policy, limits, ingredients, or outputs. Refresh the Crafting Process and Recipe before retrying cancellation.`, process.recipe.address);
633
- }
634
- if (recipeData.habRequired && habAddress === undefined) {
635
- fail(`Recipe ${recipeData.name} requires a Crafting Hab, but Crafting Process ${process.address} omits one. Refresh or repair the Process relationship before retrying cancellation.`, process.address);
636
- }
637
- const playerData = starbasePlayerAccountDefinition.decode(playerAccount);
638
- const canonicalPlayer = await deriveStarbasePlayerAddress(process.system.address, character);
639
- if (playerAccount.address !== process.starbasePlayer.address ||
640
- canonicalPlayer !== process.starbasePlayer.address ||
641
- playerData.playerProfile !== options.authorization.profile ||
642
- playerData.character !== character ||
643
- playerData.system !== process.system.address) {
644
- fail(`Starbase Player ${process.starbasePlayer.address} does not match the authorization Profile, canonical Character, or Crafting Process System. Refresh the Crafting Process and Starbase Player before retrying cancellation.`, process.starbasePlayer.address);
645
- }
646
- if (habAccount !== undefined) {
647
- const habData = craftingHabAccountDefinition.decode(habAccount);
648
- if (habAccount.address !== habAddress ||
649
- habData.game !== game ||
650
- habData.ownerProfile !== options.authorization.profile ||
651
- habData.system !== process.system.address ||
652
- habData.systemSequenceId !== process.starbaseSequenceId ||
653
- habData.state.kind !== 'active') {
654
- fail(`Crafting Hab ${habAddress} is not active or does not match the configured Game, authorization Profile, Crafting Process System, or Starbase sequence. Refresh the Crafting Process and Hab before retrying cancellation.`, habAccount.address);
655
- }
656
- }
657
- const characterData = characterAccountDefinition.decode(characterAccount);
658
- if (characterAccount.address !== character ||
659
- characterData.playerProfile !== options.authorization.profile ||
660
- characterData.game !== game) {
661
- fail(`The canonical Character does not match Profile ${options.authorization.profile} and the configured Game ${game}. Refresh or repair the Character relationship before retrying cancellation.`, characterAccount.address);
662
- }
663
- validateGameRead(gameAccount, game);
664
- return {
665
- character,
666
- characterAccount,
667
- gameAccount,
668
- ...(habAccount === undefined ? {} : { habAccount }),
669
- playerAccount,
670
- processAccount,
671
- recipeAccount,
672
- };
673
- }
674
- /** Plans cancellation of one unfinished Crafting Process without signing or writes.
589
+ /** Plans cancellation of one Crafting Process without signing or writes.
675
590
  *
676
591
  * The planner resolves and validates the Process account graph, requires Profile
677
- * ownership, and rejects completed or destroyed-Starbase Process snapshots.
678
- * Final inventory capacity, permissions, returned inputs and crew, and account
679
- * closure remain chain-authoritative.
592
+ * ownership, and rejects a Process whose Starbase was destroyed. Cancellation
593
+ * has no timing rule: a finished Process can still be cancelled, which returns
594
+ * its inputs and crew instead of producing outputs. A Process Hab is passed by
595
+ * its stored address in whatever state it is in, or even if it no longer
596
+ * exists. Final inventory capacity, permissions, returned inputs and crew, and
597
+ * account closure remain chain-authoritative.
680
598
  *
681
599
  * @example
682
600
  * ```ts
@@ -690,56 +608,67 @@ async function resolveCancelAccounts(ctx, process, options, game) {
690
608
  export async function planCancelCraftingProcess(ctx, process, input) {
691
609
  const options = validateCancelOptions(input);
692
610
  const game = requireGameAddress(ctx);
693
- if (process.profile.address !== options.authorization.profile) {
694
- fail(`Crafting Process ${process.address} does not belong to authorization Profile ${options.authorization.profile}. Use the owning Profile, refresh the Process, and retry.`, process.address);
695
- }
696
- const state = deriveInternalCraftingProcessState(process, options.atUnixSeconds);
697
- if (state.kind === 'complete') {
698
- fail(`Crafting Process ${process.address} is complete at Unix timestamp ${String(options.atUnixSeconds)} and cannot be cancelled. Use planCompleteCraftingProcess with a refreshed snapshot instead.`, process.address);
699
- }
700
- const resolved = await resolveCancelAccounts(ctx, process, options, game);
701
- const description = `Cancel crafting ${String(process.quantityRaw)} units of ${process.recipe.name} at Starbase Player ${process.starbasePlayer.address}, returning all inputs and ${String(process.numCrew)} crew and closing the Crafting Process.`;
702
- const preconditions = [
703
- precondition(resolved.processAccount, `Crafting Process ${process.address} retains its validated relationships, timing, crew, quantity, fee, and inputs.`),
704
- recipePrecondition(resolved.recipeAccount, `Recipe ${process.recipe.name} retains its validated Game, Hab policy, ingredients, and outputs.`),
705
- precondition(resolved.playerAccount, `Starbase Player ${process.starbasePlayer.address} retains its Profile, Character, and System relationships.`),
706
- Promise.resolve({
707
- kind: 'starbase-system',
708
- address: process.system.address,
709
- game,
710
- starbaseSequenceId: process.starbaseSequenceId,
711
- describes: `Star System ${process.system.address} retains its canonical Game identity, active Starbase and sequence ${process.starbaseSequenceId}; unrelated shared activity may change.`,
712
- }),
713
- ...(resolved.habAccount === undefined
714
- ? []
715
- : [
716
- precondition(resolved.habAccount, `Crafting Hab ${resolved.habAccount.address} remains active in the validated Game, Profile, System, and Starbase sequence.`),
717
- ]),
718
- precondition(resolved.characterAccount, `The canonical Character remains assigned to Profile ${options.authorization.profile} in the configured Game.`),
719
- precondition(resolved.gameAccount, `Game ${game} retains its pinned owner and account layout.`),
720
- ];
721
- return createPlan({
611
+ const { profile } = options.authorization;
612
+ requireProcessOwner(process, profile);
613
+ const resolved = await resolveProcessAccounts(ctx, process, profile, game, 'cancellation', game, 'For a Crafting Process belonging to the destroyed Starbase, use destroyCraftingProcess; do not cancel the Process.', false);
614
+ const gameAccount = requireAccount(resolved.extraAccount, game, `Configured Game ${game} is missing. Refresh the configured Game before retrying cancellation.`);
615
+ validateGameRead(gameAccount, game);
616
+ const instruction = adaptCancelCraftingProcessInstruction({
617
+ authorization: options.authorization,
618
+ character: resolved.character,
619
+ craftingProcess: process.address,
620
+ game,
621
+ recipe: process.recipe.address,
622
+ starbasePlayer: process.starbasePlayer.address,
623
+ system: process.system.address,
624
+ ...(resolved.habAddress === undefined
625
+ ? {}
626
+ : { craftingHabInstance: resolved.habAddress }),
627
+ });
628
+ // Returned inputs can reopen Starbase Player lines, which the program funds
629
+ // from the Profile vault before the closed Process refunds its rent.
630
+ const [profileAccount, rentAccount] = await readContextRawAccounts(ctx, [
631
+ profile,
632
+ RENT_ADDRESS,
633
+ ]);
634
+ const storageAccounts = new Map([
635
+ [resolved.playerAccount.address, resolved.playerAccount],
636
+ [resolved.processAccount.address, resolved.processAccount],
637
+ [profile, profileAccount],
638
+ [RENT_ADDRESS, rentAccount],
639
+ ]);
640
+ const storage = planStorageFunding({
641
+ action: readCraftingStorageAction(instruction, storageAccounts),
642
+ accounts: storageAccounts,
643
+ label: 'Crafting Process cancellation',
644
+ });
645
+ const description = `Cancel crafting ${String(process.quantityRaw)} units of ${process.recipe.name} at Starbase Player ${process.starbasePlayer.address}, returning all inputs and ${String(process.numCrew)} crew and closing the Crafting Process. ${storage.disclosure}`;
646
+ return buildPlannerPlan({
722
647
  kind: 'crafting.cancel-process',
723
- preconditions: await Promise.all(preconditions),
648
+ preconditions: [
649
+ ...(await Promise.all([
650
+ ...processPreconditions(process, resolved, profile, [
651
+ {
652
+ kind: 'starbase-system',
653
+ address: process.system.address,
654
+ game,
655
+ starbaseSequenceId: process.starbaseSequenceId,
656
+ describes: `Star System ${process.system.address} retains its canonical Game identity, active Starbase and sequence ${process.starbaseSequenceId}; unrelated shared activity may change.`,
657
+ },
658
+ ]),
659
+ accountStatePrecondition(gameAccount, `Game ${game} retains its pinned owner and account layout.`),
660
+ ])),
661
+ storage.guard,
662
+ ],
724
663
  steps: [
725
664
  {
726
665
  describes: description,
727
- instruction: adaptCancelCraftingProcessInstruction({
728
- authorization: options.authorization,
729
- character: resolved.character,
730
- craftingProcess: process.address,
731
- game,
732
- recipe: process.recipe.address,
733
- starbasePlayer: process.starbasePlayer.address,
734
- system: process.system.address,
735
- ...(resolved.habAccount === undefined
736
- ? {}
737
- : { craftingHabInstance: resolved.habAccount.address }),
738
- }),
666
+ instruction,
739
667
  signers: [options.authorization.authority],
740
668
  },
741
669
  ],
742
670
  summary: description,
743
671
  });
744
672
  }
673
+ export { getCraftingFeeRate } from './fee-rate.js';
745
674
  //# sourceMappingURL=index.js.map