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

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 (375) 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 +98 -50
  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-attack-xp.d.ts +20 -0
  266. package/dist/internal/planning/fleet-attack-xp.d.ts.map +1 -0
  267. package/dist/internal/planning/fleet-attack-xp.js +110 -0
  268. package/dist/internal/planning/fleet-attack-xp.js.map +1 -0
  269. package/dist/internal/planning/fleet-creation.d.ts +30 -0
  270. package/dist/internal/planning/fleet-creation.d.ts.map +1 -0
  271. package/dist/internal/planning/fleet-creation.js +107 -0
  272. package/dist/internal/planning/fleet-creation.js.map +1 -0
  273. package/dist/internal/planning/fleet-ship-assembly.d.ts +36 -0
  274. package/dist/internal/planning/fleet-ship-assembly.d.ts.map +1 -0
  275. package/dist/internal/planning/fleet-ship-assembly.js +136 -0
  276. package/dist/internal/planning/fleet-ship-assembly.js.map +1 -0
  277. package/dist/internal/planning/governance-fees.d.ts +64 -0
  278. package/dist/internal/planning/governance-fees.d.ts.map +1 -0
  279. package/dist/internal/planning/governance-fees.js +239 -0
  280. package/dist/internal/planning/governance-fees.js.map +1 -0
  281. package/dist/internal/planning/mining-stop.d.ts +14 -0
  282. package/dist/internal/planning/mining-stop.d.ts.map +1 -0
  283. package/dist/internal/planning/mining-stop.js +41 -0
  284. package/dist/internal/planning/mining-stop.js.map +1 -0
  285. package/dist/internal/planning/movement-character.d.ts +7 -0
  286. package/dist/internal/planning/movement-character.d.ts.map +1 -0
  287. package/dist/internal/planning/movement-character.js +41 -0
  288. package/dist/internal/planning/movement-character.js.map +1 -0
  289. package/dist/internal/planning/movement-xp-guard.d.ts +4 -0
  290. package/dist/internal/planning/movement-xp-guard.d.ts.map +1 -0
  291. package/dist/internal/planning/movement-xp-guard.js +103 -0
  292. package/dist/internal/planning/movement-xp-guard.js.map +1 -0
  293. package/dist/internal/planning/runtime-guards.d.ts +43 -0
  294. package/dist/internal/planning/runtime-guards.d.ts.map +1 -0
  295. package/dist/internal/planning/runtime-guards.js +636 -0
  296. package/dist/internal/planning/runtime-guards.js.map +1 -0
  297. package/dist/internal/planning/ship-import-funding.d.ts +22 -0
  298. package/dist/internal/planning/ship-import-funding.d.ts.map +1 -0
  299. package/dist/internal/planning/ship-import-funding.js +52 -0
  300. package/dist/internal/planning/ship-import-funding.js.map +1 -0
  301. package/dist/internal/planning/ship-token.d.ts +10 -0
  302. package/dist/internal/planning/ship-token.d.ts.map +1 -0
  303. package/dist/internal/planning/ship-token.js +47 -0
  304. package/dist/internal/planning/ship-token.js.map +1 -0
  305. package/dist/internal/planning/starbase-system.d.ts +11 -0
  306. package/dist/internal/planning/starbase-system.d.ts.map +1 -0
  307. package/dist/internal/planning/starbase-system.js +20 -0
  308. package/dist/internal/planning/starbase-system.js.map +1 -0
  309. package/dist/internal/planning/token-mint.d.ts +4 -0
  310. package/dist/internal/planning/token-mint.d.ts.map +1 -0
  311. package/dist/internal/planning/token-mint.js +15 -0
  312. package/dist/internal/planning/token-mint.js.map +1 -0
  313. package/dist/internal/planning/trade-faction-market.d.ts +20 -0
  314. package/dist/internal/planning/trade-faction-market.d.ts.map +1 -0
  315. package/dist/internal/planning/trade-faction-market.js +56 -0
  316. package/dist/internal/planning/trade-faction-market.js.map +1 -0
  317. package/dist/internal/planning/xp-runtime.d.ts +36 -0
  318. package/dist/internal/planning/xp-runtime.d.ts.map +1 -0
  319. package/dist/internal/planning/xp-runtime.js +124 -0
  320. package/dist/internal/planning/xp-runtime.js.map +1 -0
  321. package/dist/loyalty/actions/index.d.ts.map +1 -1
  322. package/dist/loyalty/actions/index.js +4 -3
  323. package/dist/loyalty/actions/index.js.map +1 -1
  324. package/dist/loyalty/index.d.ts.map +1 -1
  325. package/dist/loyalty/index.js +2 -6
  326. package/dist/loyalty/index.js.map +1 -1
  327. package/dist/markets/actions/index.d.ts +1 -0
  328. package/dist/markets/actions/index.d.ts.map +1 -1
  329. package/dist/markets/actions/index.js +40 -16
  330. package/dist/markets/actions/index.js.map +1 -1
  331. package/dist/markets/actions/trade-faction-market.d.ts +43 -0
  332. package/dist/markets/actions/trade-faction-market.d.ts.map +1 -0
  333. package/dist/markets/actions/trade-faction-market.js +291 -0
  334. package/dist/markets/actions/trade-faction-market.js.map +1 -0
  335. package/dist/mining/actions/index.d.ts +84 -0
  336. package/dist/mining/actions/index.d.ts.map +1 -0
  337. package/dist/mining/actions/index.js +328 -0
  338. package/dist/mining/actions/index.js.map +1 -0
  339. package/dist/planning/assembly.d.ts.map +1 -1
  340. package/dist/planning/assembly.js +14 -0
  341. package/dist/planning/assembly.js.map +1 -1
  342. package/dist/planning/execution.d.ts.map +1 -1
  343. package/dist/planning/execution.js +375 -18
  344. package/dist/planning/execution.js.map +1 -1
  345. package/dist/planning/index.d.ts +186 -86
  346. package/dist/planning/index.d.ts.map +1 -1
  347. package/dist/planning/index.js +620 -57
  348. package/dist/planning/index.js.map +1 -1
  349. package/dist/planning/simulation.d.ts +25 -1
  350. package/dist/planning/simulation.d.ts.map +1 -1
  351. package/dist/planning/simulation.js +111 -11
  352. package/dist/planning/simulation.js.map +1 -1
  353. package/dist/registry/cargo.d.ts +6 -6
  354. package/dist/registry/cargo.d.ts.map +1 -1
  355. package/dist/registry/cargo.js +25 -4
  356. package/dist/registry/cargo.js.map +1 -1
  357. package/dist/registry/onboarding.d.ts +10 -1
  358. package/dist/registry/onboarding.d.ts.map +1 -1
  359. package/dist/registry/onboarding.js +26 -8
  360. package/dist/registry/onboarding.js.map +1 -1
  361. package/dist/registry/ship-stats-snapshot.js +19 -19
  362. package/dist/registry/ship-stats-snapshot.js.map +1 -1
  363. package/dist/registry/ships.d.ts +28 -0
  364. package/dist/registry/ships.d.ts.map +1 -0
  365. package/dist/registry/ships.js +51 -0
  366. package/dist/registry/ships.js.map +1 -0
  367. package/dist/registry/xp-runtime.d.ts +4 -0
  368. package/dist/registry/xp-runtime.d.ts.map +1 -0
  369. package/dist/registry/xp-runtime.js +14 -0
  370. package/dist/registry/xp-runtime.js.map +1 -0
  371. package/dist/scanning/index.d.ts +1 -1
  372. package/dist/scanning/index.d.ts.map +1 -1
  373. package/dist/scanning/index.js +2 -2
  374. package/dist/scanning/index.js.map +1 -1
  375. package/package.json +6 -2
@@ -1,6 +1,14 @@
1
+ import { validateFleetAttackInstructions, } from '../internal/planning/fleet-attack-xp.js';
2
+ import { validateMovementXpInstructions } from '../internal/planning/movement-xp-guard.js';
3
+ import { validateCraftingCancellationInstructions } from '../internal/planning/crafting-cancellation-guard.js';
4
+ import { validateCharacterRegistrationInstructions } from '../internal/planning/character-registration-guard.js';
5
+ import { normalizeArrivalGuard, arrivalGuardToJSON, validateArrivalInstructions, } from '../internal/planning/arrival-guards.js';
6
+ import { isRuntimeGuard, normalizeRuntimeGuard, runtimeGuardToJSON, validateRuntimeInstructions, } from '../internal/planning/runtime-guards.js';
7
+ import { isTradeBuyGuard, isTradeSellGuard, isTradeMeterGuard, isFactionTradeGuard, } from '../internal/planning/faction-trade-guards.js';
1
8
  import { AccountRole, getBase64Decoder, getBase64Encoder, isAddress, isWritableRole, } from '@solana/kit';
2
- import { InvalidActionInputError } from '../client/errors.js';
9
+ import { InvalidActionInputError, SageSdkError } from '../client/errors.js';
3
10
  import { deepFreeze } from '../internal/immutable-tree.js';
11
+ import { validateMiningStopInstructions } from '../internal/planning/mining-stop.js';
4
12
  import { validatePlanComposition } from './composition.js';
5
13
  import { isPlanInstance, registerPlanInstance } from './plan-instances.js';
6
14
  const PLAN_BRAND = Symbol('AephiaSagePlan');
@@ -159,9 +167,432 @@ function normalizeSemanticFact(value, field) {
159
167
  }
160
168
  return invalid(`${field}.kind`, semantic.kind, 'one of exclusive, requires, invalidates, or transition');
161
169
  }
162
- function normalizePrecondition(value, field, version = 3) {
170
+ function normalizePrecondition(value, field) {
163
171
  const precondition = readRecord(value, field);
164
- if (precondition.kind === 'token-account-or-absent' && version === 3) {
172
+ if (precondition.kind === 'fleet-arrival')
173
+ return normalizeArrivalGuard(precondition, field);
174
+ if (isRuntimeGuard(precondition))
175
+ return normalizeRuntimeGuard(precondition, field);
176
+ if (precondition.kind === 'character-registration') {
177
+ assertKeys(precondition, field, [
178
+ 'kind',
179
+ 'address',
180
+ 'game',
181
+ 'profile',
182
+ 'profileDataHash',
183
+ 'funder',
184
+ 'xpBudget',
185
+ 'xpBudgetConfig',
186
+ 'maximumFunderDebit',
187
+ 'characterSize',
188
+ 'initializationHash',
189
+ 'characterLamports',
190
+ 'budgetLamports',
191
+ 'describes',
192
+ ]);
193
+ if (typeof precondition.characterSize !== 'number' ||
194
+ !Number.isSafeInteger(precondition.characterSize) ||
195
+ precondition.characterSize < 423)
196
+ invalid(`${field}.characterSize`, precondition.characterSize, 'a qualified Character allocation of at least 423 bytes');
197
+ for (const key of ['characterLamports', 'budgetLamports'])
198
+ if (typeof precondition[key] !== 'bigint' || precondition[key] < 0n)
199
+ invalid(`${field}.${key}`, precondition[key], 'a nonnegative bigint');
200
+ const maximumFunderDebit = precondition.maximumFunderDebit;
201
+ if (typeof maximumFunderDebit !== 'bigint' || maximumFunderDebit < 0n)
202
+ invalid(`${field}.maximumFunderDebit`, maximumFunderDebit, 'a nonnegative bigint');
203
+ return Object.freeze({
204
+ kind: 'character-registration',
205
+ address: readAddress(precondition.address, `${field}.address`),
206
+ game: readAddress(precondition.game, `${field}.game`),
207
+ profile: readAddress(precondition.profile, `${field}.profile`),
208
+ profileDataHash: readDataHash(precondition.profileDataHash, `${field}.profileDataHash`),
209
+ funder: readAddress(precondition.funder, `${field}.funder`),
210
+ xpBudget: readAddress(precondition.xpBudget, `${field}.xpBudget`),
211
+ xpBudgetConfig: readAddress(precondition.xpBudgetConfig, `${field}.xpBudgetConfig`),
212
+ maximumFunderDebit,
213
+ characterLamports: precondition.characterLamports,
214
+ budgetLamports: precondition.budgetLamports,
215
+ characterSize: precondition.characterSize,
216
+ initializationHash: readDataHash(precondition.initializationHash, `${field}.initializationHash`),
217
+ describes: readString(precondition.describes, `${field}.describes`),
218
+ });
219
+ }
220
+ if (precondition.kind === 'ship-import-funding') {
221
+ assertKeys(precondition, field, [
222
+ 'kind',
223
+ 'address',
224
+ 'game',
225
+ 'profile',
226
+ 'system',
227
+ 'shipId',
228
+ 'maximumProfileDebit',
229
+ 'describes',
230
+ ]);
231
+ const shipId = precondition.shipId;
232
+ if (typeof shipId !== 'number' ||
233
+ !Number.isInteger(shipId) ||
234
+ shipId < 0 ||
235
+ shipId > 65535)
236
+ invalid(`${field}.shipId`, shipId, 'an unsigned u16 ship configuration ID');
237
+ const maximumProfileDebit = precondition.maximumProfileDebit;
238
+ if (typeof maximumProfileDebit !== 'bigint' || maximumProfileDebit < 0n)
239
+ invalid(`${field}.maximumProfileDebit`, maximumProfileDebit, 'a nonnegative bigint');
240
+ return Object.freeze({
241
+ kind: 'ship-import-funding',
242
+ address: readAddress(precondition.address, `${field}.address`),
243
+ game: readAddress(precondition.game, `${field}.game`),
244
+ profile: readAddress(precondition.profile, `${field}.profile`),
245
+ system: readAddress(precondition.system, `${field}.system`),
246
+ shipId,
247
+ maximumProfileDebit,
248
+ describes: readString(precondition.describes, `${field}.describes`),
249
+ });
250
+ }
251
+ if (precondition.kind === 'fleet-attack') {
252
+ assertKeys(precondition, field, [
253
+ 'kind',
254
+ 'address',
255
+ 'defender',
256
+ 'game',
257
+ 'profile',
258
+ 'defenderProfile',
259
+ 'instructionKey',
260
+ 'describes',
261
+ ]);
262
+ return Object.freeze({
263
+ kind: 'fleet-attack',
264
+ address: readAddress(precondition.address, `${field}.address`),
265
+ defender: readAddress(precondition.defender, `${field}.defender`),
266
+ game: readAddress(precondition.game, `${field}.game`),
267
+ profile: readAddress(precondition.profile, `${field}.profile`),
268
+ defenderProfile: readAddress(precondition.defenderProfile, `${field}.defenderProfile`),
269
+ instructionKey: readString(precondition.instructionKey, `${field}.instructionKey`),
270
+ describes: readString(precondition.describes, `${field}.describes`),
271
+ });
272
+ }
273
+ if (precondition.kind === 'movement-character') {
274
+ assertKeys(precondition, field, [
275
+ 'kind',
276
+ 'address',
277
+ 'game',
278
+ 'profile',
279
+ 'stateHash',
280
+ 'describes',
281
+ ]);
282
+ return Object.freeze({
283
+ kind: 'movement-character',
284
+ address: readAddress(precondition.address, `${field}.address`),
285
+ game: readAddress(precondition.game, `${field}.game`),
286
+ profile: readAddress(precondition.profile, `${field}.profile`),
287
+ stateHash: readDataHash(precondition.stateHash, `${field}.stateHash`),
288
+ describes: readString(precondition.describes, `${field}.describes`),
289
+ });
290
+ }
291
+ if (precondition.kind === 'starbase-system') {
292
+ assertKeys(precondition, field, [
293
+ 'kind',
294
+ 'address',
295
+ 'game',
296
+ 'starbaseSequenceId',
297
+ 'describes',
298
+ ]);
299
+ const sequence = precondition.starbaseSequenceId;
300
+ if (typeof sequence !== 'bigint' ||
301
+ sequence < 0n ||
302
+ sequence > 18446744073709551615n)
303
+ invalid(`${field}.starbaseSequenceId`, sequence, 'an unsigned u64 Starbase sequence');
304
+ return Object.freeze({
305
+ kind: 'starbase-system',
306
+ address: readAddress(precondition.address, `${field}.address`),
307
+ game: readAddress(precondition.game, `${field}.game`),
308
+ starbaseSequenceId: sequence,
309
+ describes: readString(precondition.describes, `${field}.describes`),
310
+ });
311
+ }
312
+ if (precondition.kind === 'fleet-mining') {
313
+ assertKeys(precondition, field, [
314
+ 'kind',
315
+ 'address',
316
+ 'game',
317
+ 'profile',
318
+ 'asteroid',
319
+ 'describes',
320
+ ]);
321
+ return Object.freeze({
322
+ kind: 'fleet-mining',
323
+ address: readAddress(precondition.address, `${field}.address`),
324
+ game: readAddress(precondition.game, `${field}.game`),
325
+ profile: readAddress(precondition.profile, `${field}.profile`),
326
+ asteroid: readAddress(precondition.asteroid, `${field}.asteroid`),
327
+ describes: readString(precondition.describes, `${field}.describes`),
328
+ });
329
+ }
330
+ if (isFactionTradeGuard(precondition)) {
331
+ const kind = precondition.kind;
332
+ assertKeys(precondition, field, [
333
+ 'kind',
334
+ 'address',
335
+ 'game',
336
+ 'factionId',
337
+ 'describes',
338
+ 'schemaVersion',
339
+ ...(isTradeBuyGuard(precondition)
340
+ ? ['cargoId', 'floorRaw']
341
+ : isTradeSellGuard(precondition)
342
+ ? ['atlasOutCapPerEpochRaw', 'epochLengthSeconds']
343
+ : []),
344
+ ]);
345
+ const unsigned = (key, max = 65535) => {
346
+ const n = precondition[key];
347
+ if (typeof n !== 'number' || !Number.isInteger(n) || n < 0 || n > max)
348
+ invalid(`${field}.${key}`, n, `an unsigned ${max === 255 ? 'u8' : 'u16'} integer`);
349
+ return n;
350
+ };
351
+ const integer = (key, signed = false) => {
352
+ const n = precondition[key];
353
+ const min = signed ? -(1n << 63n) : 0n;
354
+ const max = signed ? (1n << 63n) - 1n : (1n << 64n) - 1n;
355
+ if (typeof n !== 'bigint' || n < min || n > max)
356
+ invalid(`${field}.${key}`, n, signed ? 'an i64 bigint' : 'a u64 bigint');
357
+ return n;
358
+ };
359
+ const common = {
360
+ address: readAddress(precondition.address, `${field}.address`),
361
+ game: readAddress(precondition.game, `${field}.game`),
362
+ factionId: unsigned('factionId'),
363
+ schemaVersion: unsigned('schemaVersion', 255),
364
+ describes: readString(precondition.describes, `${field}.describes`),
365
+ };
366
+ if (isTradeBuyGuard(precondition))
367
+ return Object.freeze({
368
+ kind,
369
+ ...common,
370
+ cargoId: unsigned('cargoId'),
371
+ floorRaw: integer('floorRaw'),
372
+ });
373
+ if (isTradeSellGuard(precondition))
374
+ return Object.freeze({
375
+ kind,
376
+ ...common,
377
+ atlasOutCapPerEpochRaw: integer('atlasOutCapPerEpochRaw'),
378
+ epochLengthSeconds: integer('epochLengthSeconds', true),
379
+ });
380
+ return Object.freeze({ kind, ...common });
381
+ }
382
+ if (precondition.kind === 'fleet-add-ship') {
383
+ assertKeys(precondition, field, [
384
+ 'kind',
385
+ 'address',
386
+ 'game',
387
+ 'profile',
388
+ 'authority',
389
+ 'system',
390
+ 'shipId',
391
+ 'amount',
392
+ 'keyIndex',
393
+ 'configHash',
394
+ 'maximumProfileDebit',
395
+ 'describes',
396
+ ]);
397
+ const keyIndex = precondition.keyIndex;
398
+ if (typeof keyIndex !== 'number' ||
399
+ !Number.isInteger(keyIndex) ||
400
+ keyIndex < 0 ||
401
+ keyIndex > 65535)
402
+ invalid(`${field}.keyIndex`, keyIndex, 'an integer from 0 through 65535');
403
+ const shipId = precondition.shipId;
404
+ if (typeof shipId !== 'number' ||
405
+ !Number.isInteger(shipId) ||
406
+ shipId < 0 ||
407
+ shipId > 65535)
408
+ invalid(`${field}.shipId`, shipId, 'a u16 ship configuration ID');
409
+ const amount = precondition.amount;
410
+ if (typeof amount !== 'bigint' || amount < 1n || amount > 255n)
411
+ invalid(`${field}.amount`, amount, 'a whole ship quantity from 1n through 255n');
412
+ const maximumProfileDebit = precondition.maximumProfileDebit;
413
+ if (typeof maximumProfileDebit !== 'bigint' || maximumProfileDebit < 0n)
414
+ invalid(`${field}.maximumProfileDebit`, maximumProfileDebit, 'a nonnegative bigint');
415
+ return Object.freeze({
416
+ kind: 'fleet-add-ship',
417
+ address: readAddress(precondition.address, `${field}.address`),
418
+ game: readAddress(precondition.game, `${field}.game`),
419
+ profile: readAddress(precondition.profile, `${field}.profile`),
420
+ authority: readAddress(precondition.authority, `${field}.authority`),
421
+ system: readAddress(precondition.system, `${field}.system`),
422
+ keyIndex,
423
+ shipId,
424
+ amount,
425
+ maximumProfileDebit,
426
+ configHash: readDataHash(precondition.configHash, `${field}.configHash`),
427
+ describes: readString(precondition.describes, `${field}.describes`),
428
+ });
429
+ }
430
+ if (precondition.kind === 'fleet-create') {
431
+ assertKeys(precondition, field, [
432
+ 'kind',
433
+ 'address',
434
+ 'game',
435
+ 'profile',
436
+ 'authority',
437
+ 'system',
438
+ 'keyIndex',
439
+ 'label',
440
+ 'maximumProfileDebit',
441
+ 'describes',
442
+ ]);
443
+ const keyIndex = precondition.keyIndex;
444
+ if (typeof keyIndex !== 'number' ||
445
+ !Number.isSafeInteger(keyIndex) ||
446
+ keyIndex < 0 ||
447
+ keyIndex > 65_535)
448
+ invalid(`${field}.keyIndex`, keyIndex, 'an integer from 0 through 65535');
449
+ const label = readString(precondition.label, `${field}.label`);
450
+ const bytes = new TextEncoder().encode(label);
451
+ if (label.trim().length === 0 ||
452
+ label.includes('\0') ||
453
+ bytes.length > 64 ||
454
+ new TextDecoder('utf-8', { ignoreBOM: true }).decode(bytes) !== label)
455
+ invalid(`${field}.label`, label, 'a nonblank, NUL-free Unicode label of at most 64 UTF-8 bytes');
456
+ const maximumProfileDebit = precondition.maximumProfileDebit;
457
+ if (typeof maximumProfileDebit !== 'bigint' || maximumProfileDebit < 0n)
458
+ invalid(`${field}.maximumProfileDebit`, maximumProfileDebit, 'a nonnegative bigint');
459
+ return Object.freeze({
460
+ kind: 'fleet-create',
461
+ address: readAddress(precondition.address, `${field}.address`),
462
+ game: readAddress(precondition.game, `${field}.game`),
463
+ profile: readAddress(precondition.profile, `${field}.profile`),
464
+ authority: readAddress(precondition.authority, `${field}.authority`),
465
+ system: readAddress(precondition.system, `${field}.system`),
466
+ keyIndex,
467
+ label,
468
+ maximumProfileDebit,
469
+ describes: readString(precondition.describes, `${field}.describes`),
470
+ });
471
+ }
472
+ if (precondition.kind === 'system-account-or-absent') {
473
+ assertKeys(precondition, field, ['kind', 'address', 'describes']);
474
+ return Object.freeze({
475
+ kind: 'system-account-or-absent',
476
+ address: readAddress(precondition.address, `${field}.address`),
477
+ describes: readString(precondition.describes, `${field}.describes`),
478
+ });
479
+ }
480
+ if (precondition.kind === 'token-mint') {
481
+ assertKeys(precondition, field, [
482
+ 'kind',
483
+ 'address',
484
+ 'decimals',
485
+ 'describes',
486
+ ]);
487
+ const decimals = precondition.decimals;
488
+ if (typeof decimals !== 'number' ||
489
+ !Number.isInteger(decimals) ||
490
+ decimals < 0 ||
491
+ decimals > 255)
492
+ invalid(`${field}.decimals`, decimals, 'an unsigned u8 mint decimals value');
493
+ return Object.freeze({
494
+ kind: 'token-mint',
495
+ address: readAddress(precondition.address, `${field}.address`),
496
+ decimals,
497
+ describes: readString(precondition.describes, `${field}.describes`),
498
+ });
499
+ }
500
+ if (precondition.kind === 'game-ship-config') {
501
+ assertKeys(precondition, field, [
502
+ 'kind',
503
+ 'address',
504
+ 'shipId',
505
+ 'configHash',
506
+ 'describes',
507
+ ]);
508
+ const id = precondition.shipId;
509
+ if (typeof id !== 'number' || !Number.isInteger(id) || id < 0 || id > 65535)
510
+ invalid(`${field}.shipId`, id, 'a u16 ship configuration ID');
511
+ return Object.freeze({
512
+ kind: 'game-ship-config',
513
+ address: readAddress(precondition.address, `${field}.address`),
514
+ shipId: id,
515
+ configHash: readDataHash(precondition.configHash, `${field}.configHash`),
516
+ describes: readString(precondition.describes, `${field}.describes`),
517
+ });
518
+ }
519
+ if (precondition.kind === 'game-account') {
520
+ assertKeys(precondition, field, ['kind', 'address', 'describes']);
521
+ return Object.freeze({
522
+ kind: 'game-account',
523
+ address: readAddress(precondition.address, `${field}.address`),
524
+ describes: readString(precondition.describes, `${field}.describes`),
525
+ });
526
+ }
527
+ if (['game-cargo-bytes-config', 'token-account', 'cargo-cache'].includes(String(precondition.kind))) {
528
+ const base = {
529
+ address: readAddress(precondition.address, `${field}.address`),
530
+ describes: readString(precondition.describes, `${field}.describes`),
531
+ };
532
+ if (precondition.kind === 'token-account') {
533
+ assertKeys(precondition, field, [
534
+ 'kind',
535
+ 'address',
536
+ 'mint',
537
+ 'owner',
538
+ 'minimumBalance',
539
+ 'describes',
540
+ ]);
541
+ const amount = precondition.minimumBalance;
542
+ if (typeof amount !== 'bigint' ||
543
+ amount < 0n ||
544
+ amount > (1n << 64n) - 1n)
545
+ invalid(`${field}.minimumBalance`, amount, 'an unsigned u64 bigint');
546
+ return Object.freeze({
547
+ ...base,
548
+ kind: 'token-account',
549
+ mint: readAddress(precondition.mint, `${field}.mint`),
550
+ owner: readAddress(precondition.owner, `${field}.owner`),
551
+ minimumBalance: amount,
552
+ });
553
+ }
554
+ if (precondition.kind === 'game-cargo-bytes-config') {
555
+ assertKeys(precondition, field, [
556
+ 'kind',
557
+ 'address',
558
+ 'cargoId',
559
+ 'configHash',
560
+ 'describes',
561
+ ]);
562
+ const id = precondition.cargoId;
563
+ if (typeof id !== 'number' ||
564
+ !Number.isInteger(id) ||
565
+ id < 0 ||
566
+ id > 65535)
567
+ invalid(`${field}.cargoId`, id, 'a u16 cargo ID');
568
+ return Object.freeze({
569
+ ...base,
570
+ kind: precondition.kind,
571
+ cargoId: id,
572
+ configHash: readDataHash(precondition.configHash, `${field}.configHash`),
573
+ });
574
+ }
575
+ assertKeys(precondition, field, [
576
+ 'kind',
577
+ 'address',
578
+ 'game',
579
+ 'bump',
580
+ 'describes',
581
+ ]);
582
+ const bump = precondition.bump;
583
+ if (typeof bump !== 'number' ||
584
+ !Number.isInteger(bump) ||
585
+ bump < 0 ||
586
+ bump > 255)
587
+ invalid(`${field}.bump`, bump, 'a u8 PDA bump');
588
+ return Object.freeze({
589
+ ...base,
590
+ kind: 'cargo-cache',
591
+ game: readAddress(precondition.game, `${field}.game`),
592
+ bump,
593
+ });
594
+ }
595
+ if (precondition.kind === 'token-account-or-absent') {
165
596
  assertKeys(precondition, field, [
166
597
  'kind',
167
598
  'address',
@@ -177,7 +608,7 @@ function normalizePrecondition(value, field, version = 3) {
177
608
  describes: readString(precondition.describes, `${field}.describes`),
178
609
  });
179
610
  }
180
- if (precondition.kind === 'account-absent' && version !== 1) {
611
+ if (precondition.kind === 'account-absent') {
181
612
  assertKeys(precondition, field, ['kind', 'address', 'describes']);
182
613
  return Object.freeze({
183
614
  kind: 'account-absent',
@@ -186,11 +617,7 @@ function normalizePrecondition(value, field, version = 3) {
186
617
  });
187
618
  }
188
619
  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');
620
+ invalid(`${field}.kind`, precondition.kind, 'a supported current Plan guard; recreate the Plan using the current capability planner');
194
621
  }
195
622
  assertKeys(precondition, field, ['kind', 'address', 'dataHash', 'describes']);
196
623
  return Object.freeze({
@@ -226,50 +653,60 @@ function instructionToJSON(instruction) {
226
653
  return deepFreeze(value);
227
654
  }
228
655
  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 = {
656
+ return deepFreeze({
657
+ v: 18,
232
658
  kind: plan.kind,
233
659
  summary: plan.summary,
234
660
  affected: [...plan.affected],
235
661
  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,
662
+ steps: plan.steps.map((step) => ({
663
+ instruction: instructionToJSON(step.instruction),
664
+ describes: step.describes,
665
+ ...((step.semantics?.length ?? 0) > 0
666
+ ? { semantics: step.semantics.map((semantic) => ({ ...semantic })) }
667
+ : {}),
668
+ signers: [...step.signers],
272
669
  })),
670
+ preconditions: plan.preconditions.map((guard) => {
671
+ if (guard.kind === 'fleet-arrival')
672
+ return arrivalGuardToJSON(guard);
673
+ if (isRuntimeGuard(guard))
674
+ return runtimeGuardToJSON(guard);
675
+ if (isTradeBuyGuard(guard))
676
+ return { ...guard, floorRaw: String(guard.floorRaw) };
677
+ if (isTradeSellGuard(guard))
678
+ return {
679
+ ...guard,
680
+ atlasOutCapPerEpochRaw: String(guard.atlasOutCapPerEpochRaw),
681
+ epochLengthSeconds: String(guard.epochLengthSeconds),
682
+ };
683
+ if (guard.kind === 'fleet-add-ship')
684
+ return {
685
+ ...guard,
686
+ amount: String(guard.amount),
687
+ maximumProfileDebit: String(guard.maximumProfileDebit),
688
+ };
689
+ if (guard.kind === 'character-registration')
690
+ return {
691
+ ...guard,
692
+ maximumFunderDebit: String(guard.maximumFunderDebit),
693
+ characterLamports: String(guard.characterLamports),
694
+ budgetLamports: String(guard.budgetLamports),
695
+ };
696
+ if (guard.kind === 'fleet-create' || guard.kind === 'ship-import-funding')
697
+ return {
698
+ ...guard,
699
+ maximumProfileDebit: String(guard.maximumProfileDebit),
700
+ };
701
+ if (guard.kind === 'starbase-system')
702
+ return {
703
+ ...guard,
704
+ starbaseSequenceId: String(guard.starbaseSequenceId),
705
+ };
706
+ if (guard.kind === 'token-account')
707
+ return { ...guard, minimumBalance: String(guard.minimumBalance) };
708
+ return { ...guard };
709
+ }),
273
710
  });
274
711
  }
275
712
  /** Creates an inert branded Plan while deriving every aggregate field.
@@ -291,6 +728,7 @@ export function createPlan(input) {
291
728
  assertKeys(value, 'plan', ['kind', 'summary', 'steps', 'preconditions']);
292
729
  const steps = Object.freeze(readArray(value.steps, 'plan.steps').map((step, index) => normalizeStep(step, `plan.steps[${String(index)}]`)));
293
730
  const preconditions = Object.freeze(readArray(value.preconditions, 'plan.preconditions').map((precondition, index) => normalizePrecondition(precondition, `plan.preconditions[${String(index)}]`)));
731
+ validateShipImportFundingComposition(preconditions);
294
732
  const descriptions = Object.freeze(steps.map((step) => step.describes));
295
733
  const plan = {
296
734
  kind: readString(value.kind, 'plan.kind'),
@@ -337,13 +775,13 @@ function sameAddresses(actual, encoded) {
337
775
  *
338
776
  * @example
339
777
  * ```ts
340
- * declare const wire: PlanJsonV1 | PlanJsonV2 | PlanJsonV3;
778
+ * declare const wire: PlanJson;
341
779
  * const plan = planFromJSON(wire);
342
780
  * console.log(plan.describe());
343
781
  * ```
344
782
  */
345
783
  export function planFromJSON(json) {
346
- const value = readRecord(json, 'planJson');
784
+ const value = { ...readRecord(json, 'planJson') };
347
785
  assertKeys(value, 'planJson', [
348
786
  'v',
349
787
  'kind',
@@ -353,18 +791,87 @@ export function planFromJSON(json) {
353
791
  'affected',
354
792
  'requiredSigners',
355
793
  ]);
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');
794
+ if (value.v !== 18) {
795
+ 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
796
  }
359
- const version = value.v;
797
+ value.preconditions = readArray(value.preconditions, 'planJson.preconditions').map((entry) => {
798
+ const guard = readRecord(entry, 'precondition');
799
+ if (guard.kind === 'fleet-arrival')
800
+ return normalizeArrivalGuard(guard, 'precondition', true);
801
+ if (isRuntimeGuard(guard))
802
+ return normalizeRuntimeGuard(guard, 'precondition', true);
803
+ if (isTradeBuyGuard(guard) || isTradeSellGuard(guard)) {
804
+ const keys = isTradeBuyGuard(guard)
805
+ ? ['floorRaw']
806
+ : ['atlasOutCapPerEpochRaw', 'epochLengthSeconds'];
807
+ const decoded = { ...guard };
808
+ for (const key of keys) {
809
+ const raw = guard[key];
810
+ const pattern = key === 'epochLengthSeconds'
811
+ ? /^(0|[1-9][0-9]*|-[1-9][0-9]*)$/
812
+ : /^(0|[1-9][0-9]*)$/;
813
+ if (typeof raw !== 'string' || !pattern.test(raw))
814
+ invalid(key, raw, 'a canonical decimal string');
815
+ decoded[key] = BigInt(raw);
816
+ }
817
+ return decoded;
818
+ }
819
+ if (guard.kind === 'fleet-add-ship') {
820
+ for (const field of ['amount', 'maximumProfileDebit'])
821
+ if (typeof guard[field] !== 'string' ||
822
+ !/^(0|[1-9][0-9]*)$/.test(guard[field]))
823
+ invalid(field, guard[field], 'a canonical unsigned decimal string');
824
+ return {
825
+ ...guard,
826
+ amount: BigInt(guard.amount),
827
+ maximumProfileDebit: BigInt(guard.maximumProfileDebit),
828
+ };
829
+ }
830
+ if (guard.kind === 'character-registration') {
831
+ for (const key of ['characterLamports', 'budgetLamports'])
832
+ if (typeof guard[key] !== 'string' ||
833
+ !/^(0|[1-9][0-9]*)$/.test(guard[key]))
834
+ invalid(key, guard[key], 'a canonical unsigned decimal string');
835
+ if (typeof guard.maximumFunderDebit !== 'string' ||
836
+ !/^(0|[1-9][0-9]*)$/.test(guard.maximumFunderDebit))
837
+ invalid('maximumFunderDebit', guard.maximumFunderDebit, 'a canonical unsigned decimal string');
838
+ return {
839
+ ...guard,
840
+ maximumFunderDebit: BigInt(guard.maximumFunderDebit),
841
+ characterLamports: BigInt(guard.characterLamports),
842
+ budgetLamports: BigInt(guard.budgetLamports),
843
+ };
844
+ }
845
+ if (guard.kind === 'fleet-create' || guard.kind === 'ship-import-funding') {
846
+ if (typeof guard.maximumProfileDebit !== 'string' ||
847
+ !/^(0|[1-9][0-9]*)$/.test(guard.maximumProfileDebit))
848
+ invalid('maximumProfileDebit', guard.maximumProfileDebit, 'a canonical unsigned decimal string');
849
+ return {
850
+ ...guard,
851
+ maximumProfileDebit: BigInt(guard.maximumProfileDebit),
852
+ };
853
+ }
854
+ if (guard.kind === 'starbase-system') {
855
+ if (typeof guard.starbaseSequenceId !== 'string' ||
856
+ !/^(0|[1-9][0-9]*)$/.test(guard.starbaseSequenceId))
857
+ invalid('starbaseSequenceId', guard.starbaseSequenceId, 'a canonical unsigned decimal string');
858
+ return { ...guard, starbaseSequenceId: BigInt(guard.starbaseSequenceId) };
859
+ }
860
+ if (guard.kind !== 'token-account')
861
+ return guard;
862
+ if (typeof guard.minimumBalance !== 'string' ||
863
+ !/^(0|[1-9][0-9]*)$/.test(guard.minimumBalance))
864
+ invalid('minimumBalance', guard.minimumBalance, 'a canonical unsigned decimal string');
865
+ return { ...guard, minimumBalance: BigInt(guard.minimumBalance) };
866
+ });
360
867
  const steps = readArray(value.steps, 'planJson.steps').map((candidate, index) => {
361
868
  const field = `planJson.steps[${String(index)}]`;
362
869
  const step = readRecord(candidate, field);
363
- assertKeys(step, field, ['instruction', 'describes', 'signers'], version !== 1 ? ['semantics'] : []);
870
+ assertKeys(step, field, ['instruction', 'describes', 'signers'], ['semantics']);
364
871
  return {
365
872
  instruction: readWireInstruction(step.instruction, `${field}.instruction`),
366
873
  describes: readString(step.describes, `${field}.describes`),
367
- ...(version !== 1 && step.semantics !== undefined
874
+ ...(step.semantics !== undefined
368
875
  ? {
369
876
  semantics: readArray(step.semantics, `${field}.semantics`).map((semantic, semanticIndex) => normalizeSemanticFact(semantic, `${field}.semantics[${String(semanticIndex)}]`)),
370
877
  }
@@ -372,7 +879,7 @@ export function planFromJSON(json) {
372
879
  signers: readArray(step.signers, `${field}.signers`).map((signer, signerIndex) => readAddress(signer, `${field}.signers[${String(signerIndex)}]`)),
373
880
  };
374
881
  });
375
- const preconditions = readArray(value.preconditions, 'planJson.preconditions').map((candidate, index) => normalizePrecondition(candidate, `planJson.preconditions[${String(index)}]`, version));
882
+ const preconditions = readArray(value.preconditions, 'planJson.preconditions').map((candidate, index) => normalizePrecondition(candidate, `planJson.preconditions[${String(index)}]`));
376
883
  const affected = readArray(value.affected, 'planJson.affected').map((candidate, index) => readAddress(candidate, `planJson.affected[${String(index)}]`));
377
884
  const requiredSigners = readArray(value.requiredSigners, 'planJson.requiredSigners').map((candidate, index) => readAddress(candidate, `planJson.requiredSigners[${String(index)}]`));
378
885
  const plan = createPlan({
@@ -381,6 +888,10 @@ export function planFromJSON(json) {
381
888
  steps,
382
889
  preconditions,
383
890
  });
891
+ validateCraftingCancellationInstructions(plan.steps, plan.preconditions);
892
+ validateMovementXpInstructions(plan.steps, plan.preconditions);
893
+ validateFleetAttackInstructions(plan.steps, plan.preconditions);
894
+ validateCharacterRegistrationInstructions(plan.steps, plan.preconditions);
384
895
  if (!sameAddresses(plan.affected, affected)) {
385
896
  invalid('planJson.affected', value.affected, 'the first-seen union of writable instruction account addresses');
386
897
  }
@@ -397,6 +908,49 @@ function assertPlan(value, index) {
397
908
  function combinedSummary(steps) {
398
909
  return steps.map((step) => step.describes).join(' ');
399
910
  }
911
+ function validateShipImportFundingComposition(guards) {
912
+ const targets = new Map();
913
+ for (const guard of guards) {
914
+ if (guard.kind !== 'ship-import-funding')
915
+ continue;
916
+ const identity = `${guard.game}:${guard.profile}:${guard.system}:${String(guard.shipId)}`;
917
+ const previous = targets.get(guard.address);
918
+ if (previous !== undefined && previous !== identity)
919
+ 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.');
920
+ targets.set(guard.address, identity);
921
+ }
922
+ }
923
+ function validateFactionGuardComposition(guards) {
924
+ const retained = new Map();
925
+ for (const guard of guards) {
926
+ if (!isFactionTradeGuard(guard))
927
+ continue;
928
+ const constraints = [
929
+ [
930
+ `${isTradeMeterGuard(guard) ? 'meter' : 'treasury'}:${guard.address}:identity`,
931
+ `${guard.game}:${String(guard.factionId)}`,
932
+ ],
933
+ ];
934
+ if (!isTradeMeterGuard(guard)) {
935
+ constraints.push(isTradeBuyGuard(guard)
936
+ ? [
937
+ `${guard.address}:buy:${String(guard.cargoId)}`,
938
+ String(guard.floorRaw),
939
+ ]
940
+ : [
941
+ `${guard.address}:sell`,
942
+ `${String(guard.atlasOutCapPerEpochRaw)}:${String(guard.epochLengthSeconds)}`,
943
+ ]);
944
+ }
945
+ constraints.push([`${guard.address}:schema`, String(guard.schemaVersion)]);
946
+ for (const [key, value] of constraints) {
947
+ const previous = retained.get(key);
948
+ if (previous !== undefined && previous !== value)
949
+ 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.');
950
+ retained.set(key, value);
951
+ }
952
+ }
953
+ }
400
954
  /** Combines one or more Plans with deterministic associative flattening.
401
955
  *
402
956
  * Semantic validation is eager. Conflict indices are relative to the flattened
@@ -417,11 +971,20 @@ export function combinePlans(...plans) {
417
971
  plans.forEach(assertPlan);
418
972
  const steps = plans.flatMap((plan) => plan.steps);
419
973
  validatePlanComposition(steps);
974
+ const preconditions = plans.flatMap((plan) => plan.preconditions);
975
+ validateFactionGuardComposition(preconditions);
976
+ validateMiningStopInstructions(steps, preconditions);
977
+ validateCraftingCancellationInstructions(steps, preconditions);
978
+ validateCharacterRegistrationInstructions(steps, preconditions);
979
+ validateArrivalInstructions(steps, preconditions);
980
+ validateRuntimeInstructions(steps, preconditions);
981
+ validateMovementXpInstructions(steps, preconditions);
982
+ validateFleetAttackInstructions(steps, preconditions);
420
983
  return createPlan({
421
984
  kind: 'combined',
422
985
  summary: combinedSummary(steps),
423
986
  steps,
424
- preconditions: plans.flatMap((plan) => plan.preconditions),
987
+ preconditions,
425
988
  });
426
989
  }
427
990
  export { assemblePlan } from './assembly.js';