@aephia/atlas-kit 0.6.0-next.5 → 0.6.0-next.50

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 (371) hide show
  1. package/README.md +2 -1
  2. package/dist/cargo/actions/deposit.d.ts +1 -1
  3. package/dist/cargo/actions/deposit.d.ts.map +1 -1
  4. package/dist/cargo/actions/deposit.js +51 -10
  5. package/dist/cargo/actions/deposit.js.map +1 -1
  6. package/dist/cargo/actions/wallet-context.d.ts +2 -3
  7. package/dist/cargo/actions/wallet-context.d.ts.map +1 -1
  8. package/dist/cargo/actions/wallet-context.js +6 -33
  9. package/dist/cargo/actions/wallet-context.js.map +1 -1
  10. package/dist/cargo/actions/wallet-token.d.ts +1 -1
  11. package/dist/cargo/actions/wallet-token.d.ts.map +1 -1
  12. package/dist/cargo/actions/wallet-token.js +1 -9
  13. package/dist/cargo/actions/wallet-token.js.map +1 -1
  14. package/dist/cargo/actions/withdrawal.d.ts.map +1 -1
  15. package/dist/cargo/actions/withdrawal.js +53 -11
  16. package/dist/cargo/actions/withdrawal.js.map +1 -1
  17. package/dist/claim-stakes/actions/index.d.ts +13 -0
  18. package/dist/claim-stakes/actions/index.d.ts.map +1 -1
  19. package/dist/claim-stakes/actions/index.js +79 -33
  20. package/dist/claim-stakes/actions/index.js.map +1 -1
  21. package/dist/client/contracts.d.ts +3 -3
  22. package/dist/client/contracts.d.ts.map +1 -1
  23. package/dist/client/errors.d.ts +4 -0
  24. package/dist/client/errors.d.ts.map +1 -1
  25. package/dist/client/errors.js +31 -1
  26. package/dist/client/errors.js.map +1 -1
  27. package/dist/client/index.d.ts +1 -0
  28. package/dist/client/index.d.ts.map +1 -1
  29. package/dist/client/index.js +1 -0
  30. package/dist/client/index.js.map +1 -1
  31. package/dist/client/rpc-subscription-provider.d.ts +35 -0
  32. package/dist/client/rpc-subscription-provider.d.ts.map +1 -0
  33. package/dist/client/rpc-subscription-provider.js +190 -0
  34. package/dist/client/rpc-subscription-provider.js.map +1 -0
  35. package/dist/combat/actions/index.d.ts.map +1 -1
  36. package/dist/combat/actions/index.js +19 -8
  37. package/dist/combat/actions/index.js.map +1 -1
  38. package/dist/crafting/actions/index.d.ts.map +1 -1
  39. package/dist/crafting/actions/index.js +49 -29
  40. package/dist/crafting/actions/index.js.map +1 -1
  41. package/dist/crafting/index.d.ts +24 -2
  42. package/dist/crafting/index.d.ts.map +1 -1
  43. package/dist/crafting/index.js +31 -2
  44. package/dist/crafting/index.js.map +1 -1
  45. package/dist/factions/actions/index.d.ts +3 -0
  46. package/dist/factions/actions/index.d.ts.map +1 -1
  47. package/dist/factions/actions/index.js +19 -4
  48. package/dist/factions/actions/index.js.map +1 -1
  49. package/dist/factions/index.d.ts +1 -1
  50. package/dist/factions/index.d.ts.map +1 -1
  51. package/dist/factions/index.js +1 -1
  52. package/dist/factions/index.js.map +1 -1
  53. package/dist/factions/profile-faction.d.ts +20 -8
  54. package/dist/factions/profile-faction.d.ts.map +1 -1
  55. package/dist/factions/profile-faction.js +20 -8
  56. package/dist/factions/profile-faction.js.map +1 -1
  57. package/dist/fleets/actions/add-ship.d.ts +35 -0
  58. package/dist/fleets/actions/add-ship.d.ts.map +1 -0
  59. package/dist/fleets/actions/add-ship.js +149 -0
  60. package/dist/fleets/actions/add-ship.js.map +1 -0
  61. package/dist/fleets/actions/create-fleet.d.ts +36 -0
  62. package/dist/fleets/actions/create-fleet.d.ts.map +1 -0
  63. package/dist/fleets/actions/create-fleet.js +138 -0
  64. package/dist/fleets/actions/create-fleet.js.map +1 -0
  65. package/dist/fleets/actions/index.d.ts +22 -14
  66. package/dist/fleets/actions/index.d.ts.map +1 -1
  67. package/dist/fleets/actions/index.js +152 -66
  68. package/dist/fleets/actions/index.js.map +1 -1
  69. package/dist/fleets/actions/ship-import.d.ts +48 -0
  70. package/dist/fleets/actions/ship-import.d.ts.map +1 -0
  71. package/dist/fleets/actions/ship-import.js +321 -0
  72. package/dist/fleets/actions/ship-import.js.map +1 -0
  73. package/dist/identity/actions/create-profile.d.ts +56 -0
  74. package/dist/identity/actions/create-profile.d.ts.map +1 -0
  75. package/dist/identity/actions/create-profile.js +139 -0
  76. package/dist/identity/actions/create-profile.js.map +1 -0
  77. package/dist/identity/actions/index.d.ts +4 -1
  78. package/dist/identity/actions/index.d.ts.map +1 -1
  79. package/dist/identity/actions/index.js +50 -28
  80. package/dist/identity/actions/index.js.map +1 -1
  81. package/dist/identity/index.d.ts +15 -0
  82. package/dist/identity/index.d.ts.map +1 -1
  83. package/dist/identity/index.js +15 -0
  84. package/dist/identity/index.js.map +1 -1
  85. package/dist/identity/permissions.d.ts +124 -0
  86. package/dist/identity/permissions.d.ts.map +1 -0
  87. package/dist/identity/permissions.js +171 -0
  88. package/dist/identity/permissions.js.map +1 -0
  89. package/dist/index.d.ts +9 -0
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +4 -1
  92. package/dist/index.js.map +1 -1
  93. package/dist/internal/c4/cargo-bytes-config.d.ts +7 -0
  94. package/dist/internal/c4/cargo-bytes-config.d.ts.map +1 -0
  95. package/dist/internal/c4/cargo-bytes-config.js +19 -0
  96. package/dist/internal/c4/cargo-bytes-config.js.map +1 -0
  97. package/dist/internal/c4/character-registration.d.ts +2 -0
  98. package/dist/internal/c4/character-registration.d.ts.map +1 -1
  99. package/dist/internal/c4/character-registration.js +2 -0
  100. package/dist/internal/c4/character-registration.js.map +1 -1
  101. package/dist/internal/c4/claim-stake.d.ts +0 -27
  102. package/dist/internal/c4/claim-stake.d.ts.map +1 -1
  103. package/dist/internal/c4/claim-stake.js +0 -33
  104. package/dist/internal/c4/claim-stake.js.map +1 -1
  105. package/dist/internal/c4/combat.d.ts +0 -27
  106. package/dist/internal/c4/combat.d.ts.map +1 -1
  107. package/dist/internal/c4/combat.js +0 -33
  108. package/dist/internal/c4/combat.js.map +1 -1
  109. package/dist/internal/c4/crafting-process-codec.d.ts +13 -0
  110. package/dist/internal/c4/crafting-process-codec.d.ts.map +1 -0
  111. package/dist/internal/c4/crafting-process-codec.js +34 -0
  112. package/dist/internal/c4/crafting-process-codec.js.map +1 -0
  113. package/dist/internal/c4/crafting.d.ts +11 -31
  114. package/dist/internal/c4/crafting.d.ts.map +1 -1
  115. package/dist/internal/c4/crafting.js +26 -43
  116. package/dist/internal/c4/crafting.js.map +1 -1
  117. package/dist/internal/c4/faction-adapter.d.ts +12 -0
  118. package/dist/internal/c4/faction-adapter.d.ts.map +1 -0
  119. package/dist/internal/c4/faction-adapter.js +52 -0
  120. package/dist/internal/c4/faction-adapter.js.map +1 -0
  121. package/dist/internal/c4/faction-epoch-meter.d.ts +10 -0
  122. package/dist/internal/c4/faction-epoch-meter.d.ts.map +1 -0
  123. package/dist/internal/c4/faction-epoch-meter.js +31 -0
  124. package/dist/internal/c4/faction-epoch-meter.js.map +1 -0
  125. package/dist/internal/c4/faction-treasury.d.ts +23 -0
  126. package/dist/internal/c4/faction-treasury.d.ts.map +1 -0
  127. package/dist/internal/c4/faction-treasury.js +48 -0
  128. package/dist/internal/c4/faction-treasury.js.map +1 -0
  129. package/dist/internal/c4/factions.d.ts +9 -57
  130. package/dist/internal/c4/factions.d.ts.map +1 -1
  131. package/dist/internal/c4/factions.js +21 -139
  132. package/dist/internal/c4/factions.js.map +1 -1
  133. package/dist/internal/c4/fleet-arrival.d.ts +27 -0
  134. package/dist/internal/c4/fleet-arrival.d.ts.map +1 -0
  135. package/dist/internal/c4/fleet-arrival.js +39 -0
  136. package/dist/internal/c4/fleet-arrival.js.map +1 -0
  137. package/dist/internal/c4/fleet-creation.d.ts +7 -0
  138. package/dist/internal/c4/fleet-creation.d.ts.map +1 -0
  139. package/dist/internal/c4/fleet-creation.js +180 -0
  140. package/dist/internal/c4/fleet-creation.js.map +1 -0
  141. package/dist/internal/c4/fleet-crew-binding.d.ts +9 -0
  142. package/dist/internal/c4/fleet-crew-binding.d.ts.map +1 -1
  143. package/dist/internal/c4/fleet-crew-binding.js +15 -0
  144. package/dist/internal/c4/fleet-crew-binding.js.map +1 -1
  145. package/dist/internal/c4/fleet-ship-assembly.d.ts +11 -0
  146. package/dist/internal/c4/fleet-ship-assembly.d.ts.map +1 -0
  147. package/dist/internal/c4/fleet-ship-assembly.js +44 -0
  148. package/dist/internal/c4/fleet-ship-assembly.js.map +1 -0
  149. package/dist/internal/c4/fleet.d.ts +38 -19
  150. package/dist/internal/c4/fleet.d.ts.map +1 -1
  151. package/dist/internal/c4/fleet.js.map +1 -1
  152. package/dist/internal/c4/game.d.ts +26 -6
  153. package/dist/internal/c4/game.d.ts.map +1 -1
  154. package/dist/internal/c4/game.js +78 -10
  155. package/dist/internal/c4/game.js.map +1 -1
  156. package/dist/internal/c4/identity.d.ts +2 -7
  157. package/dist/internal/c4/identity.d.ts.map +1 -1
  158. package/dist/internal/c4/identity.js +2 -23
  159. package/dist/internal/c4/identity.js.map +1 -1
  160. package/dist/internal/c4/loyalty.d.ts +0 -27
  161. package/dist/internal/c4/loyalty.d.ts.map +1 -1
  162. package/dist/internal/c4/loyalty.js +0 -33
  163. package/dist/internal/c4/loyalty.js.map +1 -1
  164. package/dist/internal/c4/market.d.ts +1 -37
  165. package/dist/internal/c4/market.d.ts.map +1 -1
  166. package/dist/internal/c4/market.js +11 -49
  167. package/dist/internal/c4/market.js.map +1 -1
  168. package/dist/internal/c4/mining-instructions.d.ts +2 -0
  169. package/dist/internal/c4/mining-instructions.d.ts.map +1 -0
  170. package/dist/internal/c4/mining-instructions.js +3 -0
  171. package/dist/internal/c4/mining-instructions.js.map +1 -0
  172. package/dist/internal/c4/profile-creation.d.ts +17 -0
  173. package/dist/internal/c4/profile-creation.d.ts.map +1 -0
  174. package/dist/internal/c4/profile-creation.js +36 -0
  175. package/dist/internal/c4/profile-creation.js.map +1 -0
  176. package/dist/internal/c4/profile-permissions.d.ts +14 -0
  177. package/dist/internal/c4/profile-permissions.d.ts.map +1 -0
  178. package/dist/internal/c4/profile-permissions.js +81 -0
  179. package/dist/internal/c4/profile-permissions.js.map +1 -0
  180. package/dist/internal/c4/rewards.d.ts +0 -27
  181. package/dist/internal/c4/rewards.d.ts.map +1 -1
  182. package/dist/internal/c4/rewards.js +0 -33
  183. package/dist/internal/c4/rewards.js.map +1 -1
  184. package/dist/internal/c4/runtime-bindings.d.ts +3 -0
  185. package/dist/internal/c4/runtime-bindings.d.ts.map +1 -0
  186. package/dist/internal/c4/runtime-bindings.js +4 -0
  187. package/dist/internal/c4/runtime-bindings.js.map +1 -0
  188. package/dist/internal/c4/scanning.d.ts +1 -28
  189. package/dist/internal/c4/scanning.d.ts.map +1 -1
  190. package/dist/internal/c4/scanning.js +2 -33
  191. package/dist/internal/c4/scanning.js.map +1 -1
  192. package/dist/internal/c4/ship-import.d.ts +4 -0
  193. package/dist/internal/c4/ship-import.d.ts.map +1 -0
  194. package/dist/internal/c4/ship-import.js +13 -0
  195. package/dist/internal/c4/ship-import.js.map +1 -0
  196. package/dist/internal/c4/ship-stats.d.ts.map +1 -1
  197. package/dist/internal/c4/ship-stats.js +25 -21
  198. package/dist/internal/c4/ship-stats.js.map +1 -1
  199. package/dist/internal/c4/starbase.d.ts +0 -32
  200. package/dist/internal/c4/starbase.d.ts.map +1 -1
  201. package/dist/internal/c4/starbase.js +3 -41
  202. package/dist/internal/c4/starbase.js.map +1 -1
  203. package/dist/internal/c4/wallet-cargo-cache.d.ts +3 -0
  204. package/dist/internal/c4/wallet-cargo-cache.d.ts.map +1 -0
  205. package/dist/internal/c4/wallet-cargo-cache.js +24 -0
  206. package/dist/internal/c4/wallet-cargo-cache.js.map +1 -0
  207. package/dist/internal/c4/world.js +2 -1
  208. package/dist/internal/c4/world.js.map +1 -1
  209. package/dist/internal/fleet.d.ts +1 -0
  210. package/dist/internal/fleet.d.ts.map +1 -1
  211. package/dist/internal/fleet.js +3 -1
  212. package/dist/internal/fleet.js.map +1 -1
  213. package/dist/internal/loyalty-atlas-bank-state.d.ts +16 -0
  214. package/dist/internal/loyalty-atlas-bank-state.d.ts.map +1 -0
  215. package/dist/internal/loyalty-atlas-bank-state.js +10 -0
  216. package/dist/internal/loyalty-atlas-bank-state.js.map +1 -0
  217. package/dist/internal/planning/account-state.d.ts +4 -0
  218. package/dist/internal/planning/account-state.d.ts.map +1 -0
  219. package/dist/internal/planning/account-state.js +11 -0
  220. package/dist/internal/planning/account-state.js.map +1 -0
  221. package/dist/internal/planning/action-runtime.d.ts +38 -0
  222. package/dist/internal/planning/action-runtime.d.ts.map +1 -0
  223. package/dist/internal/planning/action-runtime.js +63 -0
  224. package/dist/internal/planning/action-runtime.js.map +1 -0
  225. package/dist/internal/planning/arrival-guards.d.ts +20 -0
  226. package/dist/internal/planning/arrival-guards.d.ts.map +1 -0
  227. package/dist/internal/planning/arrival-guards.js +187 -0
  228. package/dist/internal/planning/arrival-guards.js.map +1 -0
  229. package/dist/internal/planning/authorization-adapter.d.ts +19 -6
  230. package/dist/internal/planning/authorization-adapter.d.ts.map +1 -1
  231. package/dist/internal/planning/authorization-adapter.js +102 -16
  232. package/dist/internal/planning/authorization-adapter.js.map +1 -1
  233. package/dist/internal/planning/character-registration-guard.d.ts +4 -0
  234. package/dist/internal/planning/character-registration-guard.d.ts.map +1 -0
  235. package/dist/internal/planning/character-registration-guard.js +58 -0
  236. package/dist/internal/planning/character-registration-guard.js.map +1 -0
  237. package/dist/internal/planning/character-registration.d.ts +23 -0
  238. package/dist/internal/planning/character-registration.d.ts.map +1 -0
  239. package/dist/internal/planning/character-registration.js +86 -0
  240. package/dist/internal/planning/character-registration.js.map +1 -0
  241. package/dist/internal/planning/crafting-cancellation-guard.d.ts +4 -0
  242. package/dist/internal/planning/crafting-cancellation-guard.d.ts.map +1 -0
  243. package/dist/internal/planning/crafting-cancellation-guard.js +29 -0
  244. package/dist/internal/planning/crafting-cancellation-guard.js.map +1 -0
  245. package/dist/internal/planning/democracy-history.d.ts +50 -0
  246. package/dist/internal/planning/democracy-history.d.ts.map +1 -0
  247. package/dist/internal/planning/democracy-history.js +198 -0
  248. package/dist/internal/planning/democracy-history.js.map +1 -0
  249. package/dist/internal/planning/faction-enrollment.d.ts +1 -1
  250. package/dist/internal/planning/faction-enrollment.d.ts.map +1 -1
  251. package/dist/internal/planning/faction-enrollment.js +7 -13
  252. package/dist/internal/planning/faction-enrollment.js.map +1 -1
  253. package/dist/internal/planning/faction-trade-guards.d.ts +30 -0
  254. package/dist/internal/planning/faction-trade-guards.d.ts.map +1 -0
  255. package/dist/internal/planning/faction-trade-guards.js +15 -0
  256. package/dist/internal/planning/faction-trade-guards.js.map +1 -0
  257. package/dist/internal/planning/faction-trade-state.d.ts +16 -0
  258. package/dist/internal/planning/faction-trade-state.d.ts.map +1 -0
  259. package/dist/internal/planning/faction-trade-state.js +43 -0
  260. package/dist/internal/planning/faction-trade-state.js.map +1 -0
  261. package/dist/internal/planning/fleet-arrival.d.ts +38 -0
  262. package/dist/internal/planning/fleet-arrival.d.ts.map +1 -0
  263. package/dist/internal/planning/fleet-arrival.js +100 -0
  264. package/dist/internal/planning/fleet-arrival.js.map +1 -0
  265. package/dist/internal/planning/fleet-creation.d.ts +30 -0
  266. package/dist/internal/planning/fleet-creation.d.ts.map +1 -0
  267. package/dist/internal/planning/fleet-creation.js +107 -0
  268. package/dist/internal/planning/fleet-creation.js.map +1 -0
  269. package/dist/internal/planning/fleet-ship-assembly.d.ts +36 -0
  270. package/dist/internal/planning/fleet-ship-assembly.d.ts.map +1 -0
  271. package/dist/internal/planning/fleet-ship-assembly.js +136 -0
  272. package/dist/internal/planning/fleet-ship-assembly.js.map +1 -0
  273. package/dist/internal/planning/governance-fees.d.ts +64 -0
  274. package/dist/internal/planning/governance-fees.d.ts.map +1 -0
  275. package/dist/internal/planning/governance-fees.js +239 -0
  276. package/dist/internal/planning/governance-fees.js.map +1 -0
  277. package/dist/internal/planning/mining-stop.d.ts +14 -0
  278. package/dist/internal/planning/mining-stop.d.ts.map +1 -0
  279. package/dist/internal/planning/mining-stop.js +41 -0
  280. package/dist/internal/planning/mining-stop.js.map +1 -0
  281. package/dist/internal/planning/movement-character.d.ts +7 -0
  282. package/dist/internal/planning/movement-character.d.ts.map +1 -0
  283. package/dist/internal/planning/movement-character.js +41 -0
  284. package/dist/internal/planning/movement-character.js.map +1 -0
  285. package/dist/internal/planning/movement-xp-guard.d.ts +4 -0
  286. package/dist/internal/planning/movement-xp-guard.d.ts.map +1 -0
  287. package/dist/internal/planning/movement-xp-guard.js +103 -0
  288. package/dist/internal/planning/movement-xp-guard.js.map +1 -0
  289. package/dist/internal/planning/runtime-guards.d.ts +43 -0
  290. package/dist/internal/planning/runtime-guards.d.ts.map +1 -0
  291. package/dist/internal/planning/runtime-guards.js +636 -0
  292. package/dist/internal/planning/runtime-guards.js.map +1 -0
  293. package/dist/internal/planning/ship-import-funding.d.ts +22 -0
  294. package/dist/internal/planning/ship-import-funding.d.ts.map +1 -0
  295. package/dist/internal/planning/ship-import-funding.js +52 -0
  296. package/dist/internal/planning/ship-import-funding.js.map +1 -0
  297. package/dist/internal/planning/ship-token.d.ts +10 -0
  298. package/dist/internal/planning/ship-token.d.ts.map +1 -0
  299. package/dist/internal/planning/ship-token.js +47 -0
  300. package/dist/internal/planning/ship-token.js.map +1 -0
  301. package/dist/internal/planning/starbase-system.d.ts +11 -0
  302. package/dist/internal/planning/starbase-system.d.ts.map +1 -0
  303. package/dist/internal/planning/starbase-system.js +20 -0
  304. package/dist/internal/planning/starbase-system.js.map +1 -0
  305. package/dist/internal/planning/token-mint.d.ts +4 -0
  306. package/dist/internal/planning/token-mint.d.ts.map +1 -0
  307. package/dist/internal/planning/token-mint.js +15 -0
  308. package/dist/internal/planning/token-mint.js.map +1 -0
  309. package/dist/internal/planning/trade-faction-market.d.ts +20 -0
  310. package/dist/internal/planning/trade-faction-market.d.ts.map +1 -0
  311. package/dist/internal/planning/trade-faction-market.js +56 -0
  312. package/dist/internal/planning/trade-faction-market.js.map +1 -0
  313. package/dist/internal/planning/xp-runtime.d.ts +36 -0
  314. package/dist/internal/planning/xp-runtime.d.ts.map +1 -0
  315. package/dist/internal/planning/xp-runtime.js +124 -0
  316. package/dist/internal/planning/xp-runtime.js.map +1 -0
  317. package/dist/loyalty/actions/index.d.ts.map +1 -1
  318. package/dist/loyalty/actions/index.js +4 -3
  319. package/dist/loyalty/actions/index.js.map +1 -1
  320. package/dist/loyalty/index.d.ts.map +1 -1
  321. package/dist/loyalty/index.js +2 -6
  322. package/dist/loyalty/index.js.map +1 -1
  323. package/dist/markets/actions/index.d.ts +1 -0
  324. package/dist/markets/actions/index.d.ts.map +1 -1
  325. package/dist/markets/actions/index.js +40 -16
  326. package/dist/markets/actions/index.js.map +1 -1
  327. package/dist/markets/actions/trade-faction-market.d.ts +43 -0
  328. package/dist/markets/actions/trade-faction-market.d.ts.map +1 -0
  329. package/dist/markets/actions/trade-faction-market.js +291 -0
  330. package/dist/markets/actions/trade-faction-market.js.map +1 -0
  331. package/dist/mining/actions/index.d.ts +84 -0
  332. package/dist/mining/actions/index.d.ts.map +1 -0
  333. package/dist/mining/actions/index.js +328 -0
  334. package/dist/mining/actions/index.js.map +1 -0
  335. package/dist/planning/assembly.d.ts.map +1 -1
  336. package/dist/planning/assembly.js +12 -0
  337. package/dist/planning/assembly.js.map +1 -1
  338. package/dist/planning/execution.d.ts.map +1 -1
  339. package/dist/planning/execution.js +369 -18
  340. package/dist/planning/execution.js.map +1 -1
  341. package/dist/planning/index.d.ts +185 -86
  342. package/dist/planning/index.d.ts.map +1 -1
  343. package/dist/planning/index.js +595 -57
  344. package/dist/planning/index.js.map +1 -1
  345. package/dist/planning/simulation.d.ts +25 -1
  346. package/dist/planning/simulation.d.ts.map +1 -1
  347. package/dist/planning/simulation.js +111 -11
  348. package/dist/planning/simulation.js.map +1 -1
  349. package/dist/registry/cargo.d.ts +6 -6
  350. package/dist/registry/cargo.d.ts.map +1 -1
  351. package/dist/registry/cargo.js +25 -4
  352. package/dist/registry/cargo.js.map +1 -1
  353. package/dist/registry/onboarding.d.ts +10 -1
  354. package/dist/registry/onboarding.d.ts.map +1 -1
  355. package/dist/registry/onboarding.js +26 -8
  356. package/dist/registry/onboarding.js.map +1 -1
  357. package/dist/registry/ship-stats-snapshot.js +19 -19
  358. package/dist/registry/ship-stats-snapshot.js.map +1 -1
  359. package/dist/registry/ships.d.ts +28 -0
  360. package/dist/registry/ships.d.ts.map +1 -0
  361. package/dist/registry/ships.js +51 -0
  362. package/dist/registry/ships.js.map +1 -0
  363. package/dist/registry/xp-runtime.d.ts +4 -0
  364. package/dist/registry/xp-runtime.d.ts.map +1 -0
  365. package/dist/registry/xp-runtime.js +14 -0
  366. package/dist/registry/xp-runtime.js.map +1 -0
  367. package/dist/scanning/index.d.ts +1 -1
  368. package/dist/scanning/index.d.ts.map +1 -1
  369. package/dist/scanning/index.js +2 -2
  370. package/dist/scanning/index.js.map +1 -1
  371. package/package.json +6 -2
@@ -1,6 +1,13 @@
1
+ import { validateMovementXpInstructions } from '../internal/planning/movement-xp-guard.js';
2
+ import { validateCraftingCancellationInstructions } from '../internal/planning/crafting-cancellation-guard.js';
3
+ import { validateCharacterRegistrationInstructions } from '../internal/planning/character-registration-guard.js';
4
+ import { normalizeArrivalGuard, arrivalGuardToJSON, validateArrivalInstructions, } from '../internal/planning/arrival-guards.js';
5
+ import { isRuntimeGuard, normalizeRuntimeGuard, runtimeGuardToJSON, validateRuntimeInstructions, } from '../internal/planning/runtime-guards.js';
6
+ import { isTradeBuyGuard, isTradeSellGuard, isTradeMeterGuard, isFactionTradeGuard, } from '../internal/planning/faction-trade-guards.js';
1
7
  import { AccountRole, getBase64Decoder, getBase64Encoder, isAddress, isWritableRole, } from '@solana/kit';
2
- import { InvalidActionInputError } from '../client/errors.js';
8
+ import { InvalidActionInputError, SageSdkError } from '../client/errors.js';
3
9
  import { deepFreeze } from '../internal/immutable-tree.js';
10
+ import { validateMiningStopInstructions } from '../internal/planning/mining-stop.js';
4
11
  import { validatePlanComposition } from './composition.js';
5
12
  import { isPlanInstance, registerPlanInstance } from './plan-instances.js';
6
13
  const PLAN_BRAND = Symbol('AephiaSagePlan');
@@ -159,9 +166,410 @@ function normalizeSemanticFact(value, field) {
159
166
  }
160
167
  return invalid(`${field}.kind`, semantic.kind, 'one of exclusive, requires, invalidates, or transition');
161
168
  }
162
- function normalizePrecondition(value, field, version = 3) {
169
+ function normalizePrecondition(value, field) {
163
170
  const precondition = readRecord(value, field);
164
- if (precondition.kind === 'token-account-or-absent' && version === 3) {
171
+ if (precondition.kind === 'fleet-arrival')
172
+ return normalizeArrivalGuard(precondition, field);
173
+ if (isRuntimeGuard(precondition))
174
+ return normalizeRuntimeGuard(precondition, field);
175
+ if (precondition.kind === 'character-registration') {
176
+ assertKeys(precondition, field, [
177
+ 'kind',
178
+ 'address',
179
+ 'game',
180
+ 'profile',
181
+ 'profileDataHash',
182
+ 'funder',
183
+ 'xpBudget',
184
+ 'xpBudgetConfig',
185
+ 'maximumFunderDebit',
186
+ 'characterSize',
187
+ 'initializationHash',
188
+ 'characterLamports',
189
+ 'budgetLamports',
190
+ 'describes',
191
+ ]);
192
+ if (typeof precondition.characterSize !== 'number' ||
193
+ !Number.isSafeInteger(precondition.characterSize) ||
194
+ precondition.characterSize < 423)
195
+ invalid(`${field}.characterSize`, precondition.characterSize, 'a qualified Character allocation of at least 423 bytes');
196
+ for (const key of ['characterLamports', 'budgetLamports'])
197
+ if (typeof precondition[key] !== 'bigint' || precondition[key] < 0n)
198
+ invalid(`${field}.${key}`, precondition[key], 'a nonnegative bigint');
199
+ const maximumFunderDebit = precondition.maximumFunderDebit;
200
+ if (typeof maximumFunderDebit !== 'bigint' || maximumFunderDebit < 0n)
201
+ invalid(`${field}.maximumFunderDebit`, maximumFunderDebit, 'a nonnegative bigint');
202
+ return Object.freeze({
203
+ kind: 'character-registration',
204
+ address: readAddress(precondition.address, `${field}.address`),
205
+ game: readAddress(precondition.game, `${field}.game`),
206
+ profile: readAddress(precondition.profile, `${field}.profile`),
207
+ profileDataHash: readDataHash(precondition.profileDataHash, `${field}.profileDataHash`),
208
+ funder: readAddress(precondition.funder, `${field}.funder`),
209
+ xpBudget: readAddress(precondition.xpBudget, `${field}.xpBudget`),
210
+ xpBudgetConfig: readAddress(precondition.xpBudgetConfig, `${field}.xpBudgetConfig`),
211
+ maximumFunderDebit,
212
+ characterLamports: precondition.characterLamports,
213
+ budgetLamports: precondition.budgetLamports,
214
+ characterSize: precondition.characterSize,
215
+ initializationHash: readDataHash(precondition.initializationHash, `${field}.initializationHash`),
216
+ describes: readString(precondition.describes, `${field}.describes`),
217
+ });
218
+ }
219
+ if (precondition.kind === 'ship-import-funding') {
220
+ assertKeys(precondition, field, [
221
+ 'kind',
222
+ 'address',
223
+ 'game',
224
+ 'profile',
225
+ 'system',
226
+ 'shipId',
227
+ 'maximumProfileDebit',
228
+ 'describes',
229
+ ]);
230
+ const shipId = precondition.shipId;
231
+ if (typeof shipId !== 'number' ||
232
+ !Number.isInteger(shipId) ||
233
+ shipId < 0 ||
234
+ shipId > 65535)
235
+ invalid(`${field}.shipId`, shipId, 'an unsigned u16 ship configuration ID');
236
+ const maximumProfileDebit = precondition.maximumProfileDebit;
237
+ if (typeof maximumProfileDebit !== 'bigint' || maximumProfileDebit < 0n)
238
+ invalid(`${field}.maximumProfileDebit`, maximumProfileDebit, 'a nonnegative bigint');
239
+ return Object.freeze({
240
+ kind: 'ship-import-funding',
241
+ address: readAddress(precondition.address, `${field}.address`),
242
+ game: readAddress(precondition.game, `${field}.game`),
243
+ profile: readAddress(precondition.profile, `${field}.profile`),
244
+ system: readAddress(precondition.system, `${field}.system`),
245
+ shipId,
246
+ maximumProfileDebit,
247
+ describes: readString(precondition.describes, `${field}.describes`),
248
+ });
249
+ }
250
+ if (precondition.kind === 'movement-character') {
251
+ assertKeys(precondition, field, [
252
+ 'kind',
253
+ 'address',
254
+ 'game',
255
+ 'profile',
256
+ 'stateHash',
257
+ 'describes',
258
+ ]);
259
+ return Object.freeze({
260
+ kind: 'movement-character',
261
+ address: readAddress(precondition.address, `${field}.address`),
262
+ game: readAddress(precondition.game, `${field}.game`),
263
+ profile: readAddress(precondition.profile, `${field}.profile`),
264
+ stateHash: readDataHash(precondition.stateHash, `${field}.stateHash`),
265
+ describes: readString(precondition.describes, `${field}.describes`),
266
+ });
267
+ }
268
+ if (precondition.kind === 'starbase-system') {
269
+ assertKeys(precondition, field, [
270
+ 'kind',
271
+ 'address',
272
+ 'game',
273
+ 'starbaseSequenceId',
274
+ 'describes',
275
+ ]);
276
+ const sequence = precondition.starbaseSequenceId;
277
+ if (typeof sequence !== 'bigint' ||
278
+ sequence < 0n ||
279
+ sequence > 18446744073709551615n)
280
+ invalid(`${field}.starbaseSequenceId`, sequence, 'an unsigned u64 Starbase sequence');
281
+ return Object.freeze({
282
+ kind: 'starbase-system',
283
+ address: readAddress(precondition.address, `${field}.address`),
284
+ game: readAddress(precondition.game, `${field}.game`),
285
+ starbaseSequenceId: sequence,
286
+ describes: readString(precondition.describes, `${field}.describes`),
287
+ });
288
+ }
289
+ if (precondition.kind === 'fleet-mining') {
290
+ assertKeys(precondition, field, [
291
+ 'kind',
292
+ 'address',
293
+ 'game',
294
+ 'profile',
295
+ 'asteroid',
296
+ 'describes',
297
+ ]);
298
+ return Object.freeze({
299
+ kind: 'fleet-mining',
300
+ address: readAddress(precondition.address, `${field}.address`),
301
+ game: readAddress(precondition.game, `${field}.game`),
302
+ profile: readAddress(precondition.profile, `${field}.profile`),
303
+ asteroid: readAddress(precondition.asteroid, `${field}.asteroid`),
304
+ describes: readString(precondition.describes, `${field}.describes`),
305
+ });
306
+ }
307
+ if (isFactionTradeGuard(precondition)) {
308
+ const kind = precondition.kind;
309
+ assertKeys(precondition, field, [
310
+ 'kind',
311
+ 'address',
312
+ 'game',
313
+ 'factionId',
314
+ 'describes',
315
+ 'schemaVersion',
316
+ ...(isTradeBuyGuard(precondition)
317
+ ? ['cargoId', 'floorRaw']
318
+ : isTradeSellGuard(precondition)
319
+ ? ['atlasOutCapPerEpochRaw', 'epochLengthSeconds']
320
+ : []),
321
+ ]);
322
+ const unsigned = (key, max = 65535) => {
323
+ const n = precondition[key];
324
+ if (typeof n !== 'number' || !Number.isInteger(n) || n < 0 || n > max)
325
+ invalid(`${field}.${key}`, n, `an unsigned ${max === 255 ? 'u8' : 'u16'} integer`);
326
+ return n;
327
+ };
328
+ const integer = (key, signed = false) => {
329
+ const n = precondition[key];
330
+ const min = signed ? -(1n << 63n) : 0n;
331
+ const max = signed ? (1n << 63n) - 1n : (1n << 64n) - 1n;
332
+ if (typeof n !== 'bigint' || n < min || n > max)
333
+ invalid(`${field}.${key}`, n, signed ? 'an i64 bigint' : 'a u64 bigint');
334
+ return n;
335
+ };
336
+ const common = {
337
+ address: readAddress(precondition.address, `${field}.address`),
338
+ game: readAddress(precondition.game, `${field}.game`),
339
+ factionId: unsigned('factionId'),
340
+ schemaVersion: unsigned('schemaVersion', 255),
341
+ describes: readString(precondition.describes, `${field}.describes`),
342
+ };
343
+ if (isTradeBuyGuard(precondition))
344
+ return Object.freeze({
345
+ kind,
346
+ ...common,
347
+ cargoId: unsigned('cargoId'),
348
+ floorRaw: integer('floorRaw'),
349
+ });
350
+ if (isTradeSellGuard(precondition))
351
+ return Object.freeze({
352
+ kind,
353
+ ...common,
354
+ atlasOutCapPerEpochRaw: integer('atlasOutCapPerEpochRaw'),
355
+ epochLengthSeconds: integer('epochLengthSeconds', true),
356
+ });
357
+ return Object.freeze({ kind, ...common });
358
+ }
359
+ if (precondition.kind === 'fleet-add-ship') {
360
+ assertKeys(precondition, field, [
361
+ 'kind',
362
+ 'address',
363
+ 'game',
364
+ 'profile',
365
+ 'authority',
366
+ 'system',
367
+ 'shipId',
368
+ 'amount',
369
+ 'keyIndex',
370
+ 'configHash',
371
+ 'maximumProfileDebit',
372
+ 'describes',
373
+ ]);
374
+ const keyIndex = precondition.keyIndex;
375
+ if (typeof keyIndex !== 'number' ||
376
+ !Number.isInteger(keyIndex) ||
377
+ keyIndex < 0 ||
378
+ keyIndex > 65535)
379
+ invalid(`${field}.keyIndex`, keyIndex, 'an integer from 0 through 65535');
380
+ const shipId = precondition.shipId;
381
+ if (typeof shipId !== 'number' ||
382
+ !Number.isInteger(shipId) ||
383
+ shipId < 0 ||
384
+ shipId > 65535)
385
+ invalid(`${field}.shipId`, shipId, 'a u16 ship configuration ID');
386
+ const amount = precondition.amount;
387
+ if (typeof amount !== 'bigint' || amount < 1n || amount > 255n)
388
+ invalid(`${field}.amount`, amount, 'a whole ship quantity from 1n through 255n');
389
+ const maximumProfileDebit = precondition.maximumProfileDebit;
390
+ if (typeof maximumProfileDebit !== 'bigint' || maximumProfileDebit < 0n)
391
+ invalid(`${field}.maximumProfileDebit`, maximumProfileDebit, 'a nonnegative bigint');
392
+ return Object.freeze({
393
+ kind: 'fleet-add-ship',
394
+ address: readAddress(precondition.address, `${field}.address`),
395
+ game: readAddress(precondition.game, `${field}.game`),
396
+ profile: readAddress(precondition.profile, `${field}.profile`),
397
+ authority: readAddress(precondition.authority, `${field}.authority`),
398
+ system: readAddress(precondition.system, `${field}.system`),
399
+ keyIndex,
400
+ shipId,
401
+ amount,
402
+ maximumProfileDebit,
403
+ configHash: readDataHash(precondition.configHash, `${field}.configHash`),
404
+ describes: readString(precondition.describes, `${field}.describes`),
405
+ });
406
+ }
407
+ if (precondition.kind === 'fleet-create') {
408
+ assertKeys(precondition, field, [
409
+ 'kind',
410
+ 'address',
411
+ 'game',
412
+ 'profile',
413
+ 'authority',
414
+ 'system',
415
+ 'keyIndex',
416
+ 'label',
417
+ 'maximumProfileDebit',
418
+ 'describes',
419
+ ]);
420
+ const keyIndex = precondition.keyIndex;
421
+ if (typeof keyIndex !== 'number' ||
422
+ !Number.isSafeInteger(keyIndex) ||
423
+ keyIndex < 0 ||
424
+ keyIndex > 65_535)
425
+ invalid(`${field}.keyIndex`, keyIndex, 'an integer from 0 through 65535');
426
+ const label = readString(precondition.label, `${field}.label`);
427
+ const bytes = new TextEncoder().encode(label);
428
+ if (label.trim().length === 0 ||
429
+ label.includes('\0') ||
430
+ bytes.length > 64 ||
431
+ new TextDecoder('utf-8', { ignoreBOM: true }).decode(bytes) !== label)
432
+ invalid(`${field}.label`, label, 'a nonblank, NUL-free Unicode label of at most 64 UTF-8 bytes');
433
+ const maximumProfileDebit = precondition.maximumProfileDebit;
434
+ if (typeof maximumProfileDebit !== 'bigint' || maximumProfileDebit < 0n)
435
+ invalid(`${field}.maximumProfileDebit`, maximumProfileDebit, 'a nonnegative bigint');
436
+ return Object.freeze({
437
+ kind: 'fleet-create',
438
+ address: readAddress(precondition.address, `${field}.address`),
439
+ game: readAddress(precondition.game, `${field}.game`),
440
+ profile: readAddress(precondition.profile, `${field}.profile`),
441
+ authority: readAddress(precondition.authority, `${field}.authority`),
442
+ system: readAddress(precondition.system, `${field}.system`),
443
+ keyIndex,
444
+ label,
445
+ maximumProfileDebit,
446
+ describes: readString(precondition.describes, `${field}.describes`),
447
+ });
448
+ }
449
+ if (precondition.kind === 'system-account-or-absent') {
450
+ assertKeys(precondition, field, ['kind', 'address', 'describes']);
451
+ return Object.freeze({
452
+ kind: 'system-account-or-absent',
453
+ address: readAddress(precondition.address, `${field}.address`),
454
+ describes: readString(precondition.describes, `${field}.describes`),
455
+ });
456
+ }
457
+ if (precondition.kind === 'token-mint') {
458
+ assertKeys(precondition, field, [
459
+ 'kind',
460
+ 'address',
461
+ 'decimals',
462
+ 'describes',
463
+ ]);
464
+ const decimals = precondition.decimals;
465
+ if (typeof decimals !== 'number' ||
466
+ !Number.isInteger(decimals) ||
467
+ decimals < 0 ||
468
+ decimals > 255)
469
+ invalid(`${field}.decimals`, decimals, 'an unsigned u8 mint decimals value');
470
+ return Object.freeze({
471
+ kind: 'token-mint',
472
+ address: readAddress(precondition.address, `${field}.address`),
473
+ decimals,
474
+ describes: readString(precondition.describes, `${field}.describes`),
475
+ });
476
+ }
477
+ if (precondition.kind === 'game-ship-config') {
478
+ assertKeys(precondition, field, [
479
+ 'kind',
480
+ 'address',
481
+ 'shipId',
482
+ 'configHash',
483
+ 'describes',
484
+ ]);
485
+ const id = precondition.shipId;
486
+ if (typeof id !== 'number' || !Number.isInteger(id) || id < 0 || id > 65535)
487
+ invalid(`${field}.shipId`, id, 'a u16 ship configuration ID');
488
+ return Object.freeze({
489
+ kind: 'game-ship-config',
490
+ address: readAddress(precondition.address, `${field}.address`),
491
+ shipId: id,
492
+ configHash: readDataHash(precondition.configHash, `${field}.configHash`),
493
+ describes: readString(precondition.describes, `${field}.describes`),
494
+ });
495
+ }
496
+ if (precondition.kind === 'game-account') {
497
+ assertKeys(precondition, field, ['kind', 'address', 'describes']);
498
+ return Object.freeze({
499
+ kind: 'game-account',
500
+ address: readAddress(precondition.address, `${field}.address`),
501
+ describes: readString(precondition.describes, `${field}.describes`),
502
+ });
503
+ }
504
+ if (['game-cargo-bytes-config', 'token-account', 'cargo-cache'].includes(String(precondition.kind))) {
505
+ const base = {
506
+ address: readAddress(precondition.address, `${field}.address`),
507
+ describes: readString(precondition.describes, `${field}.describes`),
508
+ };
509
+ if (precondition.kind === 'token-account') {
510
+ assertKeys(precondition, field, [
511
+ 'kind',
512
+ 'address',
513
+ 'mint',
514
+ 'owner',
515
+ 'minimumBalance',
516
+ 'describes',
517
+ ]);
518
+ const amount = precondition.minimumBalance;
519
+ if (typeof amount !== 'bigint' ||
520
+ amount < 0n ||
521
+ amount > (1n << 64n) - 1n)
522
+ invalid(`${field}.minimumBalance`, amount, 'an unsigned u64 bigint');
523
+ return Object.freeze({
524
+ ...base,
525
+ kind: 'token-account',
526
+ mint: readAddress(precondition.mint, `${field}.mint`),
527
+ owner: readAddress(precondition.owner, `${field}.owner`),
528
+ minimumBalance: amount,
529
+ });
530
+ }
531
+ if (precondition.kind === 'game-cargo-bytes-config') {
532
+ assertKeys(precondition, field, [
533
+ 'kind',
534
+ 'address',
535
+ 'cargoId',
536
+ 'configHash',
537
+ 'describes',
538
+ ]);
539
+ const id = precondition.cargoId;
540
+ if (typeof id !== 'number' ||
541
+ !Number.isInteger(id) ||
542
+ id < 0 ||
543
+ id > 65535)
544
+ invalid(`${field}.cargoId`, id, 'a u16 cargo ID');
545
+ return Object.freeze({
546
+ ...base,
547
+ kind: precondition.kind,
548
+ cargoId: id,
549
+ configHash: readDataHash(precondition.configHash, `${field}.configHash`),
550
+ });
551
+ }
552
+ assertKeys(precondition, field, [
553
+ 'kind',
554
+ 'address',
555
+ 'game',
556
+ 'bump',
557
+ 'describes',
558
+ ]);
559
+ const bump = precondition.bump;
560
+ if (typeof bump !== 'number' ||
561
+ !Number.isInteger(bump) ||
562
+ bump < 0 ||
563
+ bump > 255)
564
+ invalid(`${field}.bump`, bump, 'a u8 PDA bump');
565
+ return Object.freeze({
566
+ ...base,
567
+ kind: 'cargo-cache',
568
+ game: readAddress(precondition.game, `${field}.game`),
569
+ bump,
570
+ });
571
+ }
572
+ if (precondition.kind === 'token-account-or-absent') {
165
573
  assertKeys(precondition, field, [
166
574
  'kind',
167
575
  'address',
@@ -177,7 +585,7 @@ function normalizePrecondition(value, field, version = 3) {
177
585
  describes: readString(precondition.describes, `${field}.describes`),
178
586
  });
179
587
  }
180
- if (precondition.kind === 'account-absent' && version !== 1) {
588
+ if (precondition.kind === 'account-absent') {
181
589
  assertKeys(precondition, field, ['kind', 'address', 'describes']);
182
590
  return Object.freeze({
183
591
  kind: 'account-absent',
@@ -186,11 +594,7 @@ function normalizePrecondition(value, field, version = 3) {
186
594
  });
187
595
  }
188
596
  if (precondition.kind !== 'account-state') {
189
- invalid(`${field}.kind`, precondition.kind, version === 3
190
- ? 'one of account-state, account-absent, or token-account-or-absent'
191
- : version === 2
192
- ? 'one of account-state or account-absent'
193
- : 'the value account-state');
597
+ invalid(`${field}.kind`, precondition.kind, 'a supported current Plan guard; recreate the Plan using the current capability planner');
194
598
  }
195
599
  assertKeys(precondition, field, ['kind', 'address', 'dataHash', 'describes']);
196
600
  return Object.freeze({
@@ -226,50 +630,60 @@ function instructionToJSON(instruction) {
226
630
  return deepFreeze(value);
227
631
  }
228
632
  function planToJSON(plan) {
229
- const hasSemantics = plan.steps.some((step) => (step.semantics?.length ?? 0) > 0);
230
- const hasAbsentPrecondition = plan.preconditions.some(({ kind }) => kind === 'account-absent');
231
- const common = {
633
+ return deepFreeze({
634
+ v: 18,
232
635
  kind: plan.kind,
233
636
  summary: plan.summary,
234
637
  affected: [...plan.affected],
235
638
  requiredSigners: [...plan.requiredSigners],
236
- };
237
- const steps = plan.steps.map((step) => ({
238
- instruction: instructionToJSON(step.instruction),
239
- describes: step.describes,
240
- ...((step.semantics?.length ?? 0) > 0
241
- ? { semantics: step.semantics.map((semantic) => ({ ...semantic })) }
242
- : {}),
243
- signers: [...step.signers],
244
- }));
245
- if (plan.preconditions.some(({ kind }) => kind === 'token-account-or-absent')) {
246
- return deepFreeze({
247
- v: 3,
248
- ...common,
249
- steps,
250
- preconditions: plan.preconditions.map((guard) => ({ ...guard })),
251
- });
252
- }
253
- if (hasSemantics || hasAbsentPrecondition) {
254
- return deepFreeze({
255
- v: 2,
256
- ...common,
257
- steps,
258
- preconditions: plan.preconditions.map((guard) => ({
259
- ...guard,
260
- })),
261
- });
262
- }
263
- return deepFreeze({
264
- v: 1,
265
- ...common,
266
- steps,
267
- preconditions: plan.preconditions.map((precondition) => ({
268
- kind: 'account-state',
269
- address: precondition.address,
270
- dataHash: precondition.dataHash,
271
- describes: precondition.describes,
639
+ steps: plan.steps.map((step) => ({
640
+ instruction: instructionToJSON(step.instruction),
641
+ describes: step.describes,
642
+ ...((step.semantics?.length ?? 0) > 0
643
+ ? { semantics: step.semantics.map((semantic) => ({ ...semantic })) }
644
+ : {}),
645
+ signers: [...step.signers],
272
646
  })),
647
+ preconditions: plan.preconditions.map((guard) => {
648
+ if (guard.kind === 'fleet-arrival')
649
+ return arrivalGuardToJSON(guard);
650
+ if (isRuntimeGuard(guard))
651
+ return runtimeGuardToJSON(guard);
652
+ if (isTradeBuyGuard(guard))
653
+ return { ...guard, floorRaw: String(guard.floorRaw) };
654
+ if (isTradeSellGuard(guard))
655
+ return {
656
+ ...guard,
657
+ atlasOutCapPerEpochRaw: String(guard.atlasOutCapPerEpochRaw),
658
+ epochLengthSeconds: String(guard.epochLengthSeconds),
659
+ };
660
+ if (guard.kind === 'fleet-add-ship')
661
+ return {
662
+ ...guard,
663
+ amount: String(guard.amount),
664
+ maximumProfileDebit: String(guard.maximumProfileDebit),
665
+ };
666
+ if (guard.kind === 'character-registration')
667
+ return {
668
+ ...guard,
669
+ maximumFunderDebit: String(guard.maximumFunderDebit),
670
+ characterLamports: String(guard.characterLamports),
671
+ budgetLamports: String(guard.budgetLamports),
672
+ };
673
+ if (guard.kind === 'fleet-create' || guard.kind === 'ship-import-funding')
674
+ return {
675
+ ...guard,
676
+ maximumProfileDebit: String(guard.maximumProfileDebit),
677
+ };
678
+ if (guard.kind === 'starbase-system')
679
+ return {
680
+ ...guard,
681
+ starbaseSequenceId: String(guard.starbaseSequenceId),
682
+ };
683
+ if (guard.kind === 'token-account')
684
+ return { ...guard, minimumBalance: String(guard.minimumBalance) };
685
+ return { ...guard };
686
+ }),
273
687
  });
274
688
  }
275
689
  /** Creates an inert branded Plan while deriving every aggregate field.
@@ -291,6 +705,7 @@ export function createPlan(input) {
291
705
  assertKeys(value, 'plan', ['kind', 'summary', 'steps', 'preconditions']);
292
706
  const steps = Object.freeze(readArray(value.steps, 'plan.steps').map((step, index) => normalizeStep(step, `plan.steps[${String(index)}]`)));
293
707
  const preconditions = Object.freeze(readArray(value.preconditions, 'plan.preconditions').map((precondition, index) => normalizePrecondition(precondition, `plan.preconditions[${String(index)}]`)));
708
+ validateShipImportFundingComposition(preconditions);
294
709
  const descriptions = Object.freeze(steps.map((step) => step.describes));
295
710
  const plan = {
296
711
  kind: readString(value.kind, 'plan.kind'),
@@ -337,13 +752,13 @@ function sameAddresses(actual, encoded) {
337
752
  *
338
753
  * @example
339
754
  * ```ts
340
- * declare const wire: PlanJsonV1 | PlanJsonV2 | PlanJsonV3;
755
+ * declare const wire: PlanJson;
341
756
  * const plan = planFromJSON(wire);
342
757
  * console.log(plan.describe());
343
758
  * ```
344
759
  */
345
760
  export function planFromJSON(json) {
346
- const value = readRecord(json, 'planJson');
761
+ const value = { ...readRecord(json, 'planJson') };
347
762
  assertKeys(value, 'planJson', [
348
763
  'v',
349
764
  'kind',
@@ -353,18 +768,87 @@ export function planFromJSON(json) {
353
768
  'affected',
354
769
  'requiredSigners',
355
770
  ]);
356
- if (value.v !== 1 && value.v !== 2 && value.v !== 3) {
357
- invalid('planJson.v', value.v, 'the Plan wire version 1, 2, or 3');
771
+ if (value.v !== 18) {
772
+ throw new InvalidActionInputError('planJson.v', value.v, 'the current Plan wire version 18', 'Recreate the Plan using the current capability planner; do not change its saved version or migrate its guards.');
358
773
  }
359
- const version = value.v;
774
+ value.preconditions = readArray(value.preconditions, 'planJson.preconditions').map((entry) => {
775
+ const guard = readRecord(entry, 'precondition');
776
+ if (guard.kind === 'fleet-arrival')
777
+ return normalizeArrivalGuard(guard, 'precondition', true);
778
+ if (isRuntimeGuard(guard))
779
+ return normalizeRuntimeGuard(guard, 'precondition', true);
780
+ if (isTradeBuyGuard(guard) || isTradeSellGuard(guard)) {
781
+ const keys = isTradeBuyGuard(guard)
782
+ ? ['floorRaw']
783
+ : ['atlasOutCapPerEpochRaw', 'epochLengthSeconds'];
784
+ const decoded = { ...guard };
785
+ for (const key of keys) {
786
+ const raw = guard[key];
787
+ const pattern = key === 'epochLengthSeconds'
788
+ ? /^(0|[1-9][0-9]*|-[1-9][0-9]*)$/
789
+ : /^(0|[1-9][0-9]*)$/;
790
+ if (typeof raw !== 'string' || !pattern.test(raw))
791
+ invalid(key, raw, 'a canonical decimal string');
792
+ decoded[key] = BigInt(raw);
793
+ }
794
+ return decoded;
795
+ }
796
+ if (guard.kind === 'fleet-add-ship') {
797
+ for (const field of ['amount', 'maximumProfileDebit'])
798
+ if (typeof guard[field] !== 'string' ||
799
+ !/^(0|[1-9][0-9]*)$/.test(guard[field]))
800
+ invalid(field, guard[field], 'a canonical unsigned decimal string');
801
+ return {
802
+ ...guard,
803
+ amount: BigInt(guard.amount),
804
+ maximumProfileDebit: BigInt(guard.maximumProfileDebit),
805
+ };
806
+ }
807
+ if (guard.kind === 'character-registration') {
808
+ for (const key of ['characterLamports', 'budgetLamports'])
809
+ if (typeof guard[key] !== 'string' ||
810
+ !/^(0|[1-9][0-9]*)$/.test(guard[key]))
811
+ invalid(key, guard[key], 'a canonical unsigned decimal string');
812
+ if (typeof guard.maximumFunderDebit !== 'string' ||
813
+ !/^(0|[1-9][0-9]*)$/.test(guard.maximumFunderDebit))
814
+ invalid('maximumFunderDebit', guard.maximumFunderDebit, 'a canonical unsigned decimal string');
815
+ return {
816
+ ...guard,
817
+ maximumFunderDebit: BigInt(guard.maximumFunderDebit),
818
+ characterLamports: BigInt(guard.characterLamports),
819
+ budgetLamports: BigInt(guard.budgetLamports),
820
+ };
821
+ }
822
+ if (guard.kind === 'fleet-create' || guard.kind === 'ship-import-funding') {
823
+ if (typeof guard.maximumProfileDebit !== 'string' ||
824
+ !/^(0|[1-9][0-9]*)$/.test(guard.maximumProfileDebit))
825
+ invalid('maximumProfileDebit', guard.maximumProfileDebit, 'a canonical unsigned decimal string');
826
+ return {
827
+ ...guard,
828
+ maximumProfileDebit: BigInt(guard.maximumProfileDebit),
829
+ };
830
+ }
831
+ if (guard.kind === 'starbase-system') {
832
+ if (typeof guard.starbaseSequenceId !== 'string' ||
833
+ !/^(0|[1-9][0-9]*)$/.test(guard.starbaseSequenceId))
834
+ invalid('starbaseSequenceId', guard.starbaseSequenceId, 'a canonical unsigned decimal string');
835
+ return { ...guard, starbaseSequenceId: BigInt(guard.starbaseSequenceId) };
836
+ }
837
+ if (guard.kind !== 'token-account')
838
+ return guard;
839
+ if (typeof guard.minimumBalance !== 'string' ||
840
+ !/^(0|[1-9][0-9]*)$/.test(guard.minimumBalance))
841
+ invalid('minimumBalance', guard.minimumBalance, 'a canonical unsigned decimal string');
842
+ return { ...guard, minimumBalance: BigInt(guard.minimumBalance) };
843
+ });
360
844
  const steps = readArray(value.steps, 'planJson.steps').map((candidate, index) => {
361
845
  const field = `planJson.steps[${String(index)}]`;
362
846
  const step = readRecord(candidate, field);
363
- assertKeys(step, field, ['instruction', 'describes', 'signers'], version !== 1 ? ['semantics'] : []);
847
+ assertKeys(step, field, ['instruction', 'describes', 'signers'], ['semantics']);
364
848
  return {
365
849
  instruction: readWireInstruction(step.instruction, `${field}.instruction`),
366
850
  describes: readString(step.describes, `${field}.describes`),
367
- ...(version !== 1 && step.semantics !== undefined
851
+ ...(step.semantics !== undefined
368
852
  ? {
369
853
  semantics: readArray(step.semantics, `${field}.semantics`).map((semantic, semanticIndex) => normalizeSemanticFact(semantic, `${field}.semantics[${String(semanticIndex)}]`)),
370
854
  }
@@ -372,7 +856,7 @@ export function planFromJSON(json) {
372
856
  signers: readArray(step.signers, `${field}.signers`).map((signer, signerIndex) => readAddress(signer, `${field}.signers[${String(signerIndex)}]`)),
373
857
  };
374
858
  });
375
- const preconditions = readArray(value.preconditions, 'planJson.preconditions').map((candidate, index) => normalizePrecondition(candidate, `planJson.preconditions[${String(index)}]`, version));
859
+ const preconditions = readArray(value.preconditions, 'planJson.preconditions').map((candidate, index) => normalizePrecondition(candidate, `planJson.preconditions[${String(index)}]`));
376
860
  const affected = readArray(value.affected, 'planJson.affected').map((candidate, index) => readAddress(candidate, `planJson.affected[${String(index)}]`));
377
861
  const requiredSigners = readArray(value.requiredSigners, 'planJson.requiredSigners').map((candidate, index) => readAddress(candidate, `planJson.requiredSigners[${String(index)}]`));
378
862
  const plan = createPlan({
@@ -381,6 +865,9 @@ export function planFromJSON(json) {
381
865
  steps,
382
866
  preconditions,
383
867
  });
868
+ validateCraftingCancellationInstructions(plan.steps, plan.preconditions);
869
+ validateMovementXpInstructions(plan.steps, plan.preconditions);
870
+ validateCharacterRegistrationInstructions(plan.steps, plan.preconditions);
384
871
  if (!sameAddresses(plan.affected, affected)) {
385
872
  invalid('planJson.affected', value.affected, 'the first-seen union of writable instruction account addresses');
386
873
  }
@@ -397,6 +884,49 @@ function assertPlan(value, index) {
397
884
  function combinedSummary(steps) {
398
885
  return steps.map((step) => step.describes).join(' ');
399
886
  }
887
+ function validateShipImportFundingComposition(guards) {
888
+ const targets = new Map();
889
+ for (const guard of guards) {
890
+ if (guard.kind !== 'ship-import-funding')
891
+ continue;
892
+ const identity = `${guard.game}:${guard.profile}:${guard.system}:${String(guard.shipId)}`;
893
+ const previous = targets.get(guard.address);
894
+ if (previous !== undefined && previous !== identity)
895
+ throw new SageSdkError('INCOMPATIBLE_PLAN_COMPOSITION', 'Ship imports retain conflicting identities or different configurations for one StarbasePlayer. Use separate confirmed imports, then refresh inventory and replan; prefunding cannot be shared across independently estimated storage growth.');
896
+ targets.set(guard.address, identity);
897
+ }
898
+ }
899
+ function validateFactionGuardComposition(guards) {
900
+ const retained = new Map();
901
+ for (const guard of guards) {
902
+ if (!isFactionTradeGuard(guard))
903
+ continue;
904
+ const constraints = [
905
+ [
906
+ `${isTradeMeterGuard(guard) ? 'meter' : 'treasury'}:${guard.address}:identity`,
907
+ `${guard.game}:${String(guard.factionId)}`,
908
+ ],
909
+ ];
910
+ if (!isTradeMeterGuard(guard)) {
911
+ constraints.push(isTradeBuyGuard(guard)
912
+ ? [
913
+ `${guard.address}:buy:${String(guard.cargoId)}`,
914
+ String(guard.floorRaw),
915
+ ]
916
+ : [
917
+ `${guard.address}:sell`,
918
+ `${String(guard.atlasOutCapPerEpochRaw)}:${String(guard.epochLengthSeconds)}`,
919
+ ]);
920
+ }
921
+ constraints.push([`${guard.address}:schema`, String(guard.schemaVersion)]);
922
+ for (const [key, value] of constraints) {
923
+ const previous = retained.get(key);
924
+ if (previous !== undefined && previous !== value)
925
+ throw new SageSdkError('INCOMPATIBLE_PLAN_COMPOSITION', 'Faction Market Plans retain incompatible Treasury policy or shared account identity. Refresh the affected Markets and prepare compatible Plans, or use separate confirmed transactions.');
926
+ retained.set(key, value);
927
+ }
928
+ }
929
+ }
400
930
  /** Combines one or more Plans with deterministic associative flattening.
401
931
  *
402
932
  * Semantic validation is eager. Conflict indices are relative to the flattened
@@ -417,11 +947,19 @@ export function combinePlans(...plans) {
417
947
  plans.forEach(assertPlan);
418
948
  const steps = plans.flatMap((plan) => plan.steps);
419
949
  validatePlanComposition(steps);
950
+ const preconditions = plans.flatMap((plan) => plan.preconditions);
951
+ validateFactionGuardComposition(preconditions);
952
+ validateMiningStopInstructions(steps, preconditions);
953
+ validateCraftingCancellationInstructions(steps, preconditions);
954
+ validateCharacterRegistrationInstructions(steps, preconditions);
955
+ validateArrivalInstructions(steps, preconditions);
956
+ validateRuntimeInstructions(steps, preconditions);
957
+ validateMovementXpInstructions(steps, preconditions);
420
958
  return createPlan({
421
959
  kind: 'combined',
422
960
  summary: combinedSummary(steps),
423
961
  steps,
424
- preconditions: plans.flatMap((plan) => plan.preconditions),
962
+ preconditions,
425
963
  });
426
964
  }
427
965
  export { assemblePlan } from './assembly.js';