@aephia/atlas-kit 0.6.0-next.11 → 0.6.0-next.110

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 (686) hide show
  1. package/README.md +3 -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 +26 -115
  5. package/dist/cargo/actions/deposit.js.map +1 -1
  6. package/dist/cargo/actions/index.d.ts.map +1 -1
  7. package/dist/cargo/actions/index.js +15 -37
  8. package/dist/cargo/actions/index.js.map +1 -1
  9. package/dist/cargo/actions/wallet-context.d.ts +51 -2
  10. package/dist/cargo/actions/wallet-context.d.ts.map +1 -1
  11. package/dist/cargo/actions/wallet-context.js +125 -2
  12. package/dist/cargo/actions/wallet-context.js.map +1 -1
  13. package/dist/cargo/actions/wallet-token.d.ts +1 -6
  14. package/dist/cargo/actions/wallet-token.d.ts.map +1 -1
  15. package/dist/cargo/actions/wallet-token.js +0 -53
  16. package/dist/cargo/actions/wallet-token.js.map +1 -1
  17. package/dist/cargo/actions/withdrawal.d.ts.map +1 -1
  18. package/dist/cargo/actions/withdrawal.js +37 -162
  19. package/dist/cargo/actions/withdrawal.js.map +1 -1
  20. package/dist/claim-stakes/actions/index.d.ts +13 -0
  21. package/dist/claim-stakes/actions/index.d.ts.map +1 -1
  22. package/dist/claim-stakes/actions/index.js +373 -544
  23. package/dist/claim-stakes/actions/index.js.map +1 -1
  24. package/dist/claim-stakes/index.d.ts +14 -0
  25. package/dist/claim-stakes/index.d.ts.map +1 -1
  26. package/dist/claim-stakes/index.js +23 -2
  27. package/dist/claim-stakes/index.js.map +1 -1
  28. package/dist/client/context.d.ts.map +1 -1
  29. package/dist/client/context.js +1 -1
  30. package/dist/client/context.js.map +1 -1
  31. package/dist/client/contracts.d.ts +16 -6
  32. package/dist/client/contracts.d.ts.map +1 -1
  33. package/dist/client/errors.d.ts +6 -2
  34. package/dist/client/errors.d.ts.map +1 -1
  35. package/dist/client/errors.js +31 -1
  36. package/dist/client/errors.js.map +1 -1
  37. package/dist/client/index.d.ts +35 -0
  38. package/dist/client/index.d.ts.map +1 -1
  39. package/dist/client/index.js +35 -0
  40. package/dist/client/index.js.map +1 -1
  41. package/dist/client/rpc-subscription-provider.d.ts +35 -0
  42. package/dist/client/rpc-subscription-provider.d.ts.map +1 -0
  43. package/dist/client/rpc-subscription-provider.js +190 -0
  44. package/dist/client/rpc-subscription-provider.js.map +1 -0
  45. package/dist/combat/actions/index.d.ts +2 -2
  46. package/dist/combat/actions/index.d.ts.map +1 -1
  47. package/dist/combat/actions/index.js +192 -224
  48. package/dist/combat/actions/index.js.map +1 -1
  49. package/dist/combat/index.d.ts +4 -3
  50. package/dist/combat/index.d.ts.map +1 -1
  51. package/dist/combat/index.js +3 -2
  52. package/dist/combat/index.js.map +1 -1
  53. package/dist/crafting/actions/index.d.ts +11 -0
  54. package/dist/crafting/actions/index.d.ts.map +1 -1
  55. package/dist/crafting/actions/index.js +175 -283
  56. package/dist/crafting/actions/index.js.map +1 -1
  57. package/dist/crafting/index.d.ts +33 -3
  58. package/dist/crafting/index.d.ts.map +1 -1
  59. package/dist/crafting/index.js +45 -16
  60. package/dist/crafting/index.js.map +1 -1
  61. package/dist/factions/actions/index.d.ts +1 -0
  62. package/dist/factions/actions/index.d.ts.map +1 -1
  63. package/dist/factions/actions/index.js +2 -1
  64. package/dist/factions/actions/index.js.map +1 -1
  65. package/dist/factions/index.d.ts +1 -1
  66. package/dist/factions/index.d.ts.map +1 -1
  67. package/dist/factions/index.js +14 -8
  68. package/dist/factions/index.js.map +1 -1
  69. package/dist/factions/profile-faction.d.ts +20 -8
  70. package/dist/factions/profile-faction.d.ts.map +1 -1
  71. package/dist/factions/profile-faction.js +20 -8
  72. package/dist/factions/profile-faction.js.map +1 -1
  73. package/dist/fleets/actions/add-ship.d.ts +35 -0
  74. package/dist/fleets/actions/add-ship.d.ts.map +1 -0
  75. package/dist/fleets/actions/add-ship.js +149 -0
  76. package/dist/fleets/actions/add-ship.js.map +1 -0
  77. package/dist/fleets/actions/create-fleet.d.ts +36 -0
  78. package/dist/fleets/actions/create-fleet.d.ts.map +1 -0
  79. package/dist/fleets/actions/create-fleet.js +138 -0
  80. package/dist/fleets/actions/create-fleet.js.map +1 -0
  81. package/dist/fleets/actions/crew-transfer.d.ts +41 -0
  82. package/dist/fleets/actions/crew-transfer.d.ts.map +1 -0
  83. package/dist/fleets/actions/crew-transfer.js +114 -0
  84. package/dist/fleets/actions/crew-transfer.js.map +1 -0
  85. package/dist/fleets/actions/dock-bounds.d.ts +38 -0
  86. package/dist/fleets/actions/dock-bounds.d.ts.map +1 -0
  87. package/dist/fleets/actions/dock-bounds.js +46 -0
  88. package/dist/fleets/actions/dock-bounds.js.map +1 -0
  89. package/dist/fleets/actions/index.d.ts +37 -16
  90. package/dist/fleets/actions/index.d.ts.map +1 -1
  91. package/dist/fleets/actions/index.js +303 -284
  92. package/dist/fleets/actions/index.js.map +1 -1
  93. package/dist/fleets/actions/respawn.d.ts +38 -0
  94. package/dist/fleets/actions/respawn.d.ts.map +1 -0
  95. package/dist/fleets/actions/respawn.js +122 -0
  96. package/dist/fleets/actions/respawn.js.map +1 -0
  97. package/dist/fleets/actions/ship-import.d.ts.map +1 -1
  98. package/dist/fleets/actions/ship-import.js +59 -76
  99. package/dist/fleets/actions/ship-import.js.map +1 -1
  100. package/dist/fleets/cooldown.d.ts +44 -0
  101. package/dist/fleets/cooldown.d.ts.map +1 -0
  102. package/dist/fleets/cooldown.js +43 -0
  103. package/dist/fleets/cooldown.js.map +1 -0
  104. package/dist/fleets/coordinate-warp-estimate.d.ts +70 -0
  105. package/dist/fleets/coordinate-warp-estimate.d.ts.map +1 -0
  106. package/dist/fleets/coordinate-warp-estimate.js +46 -0
  107. package/dist/fleets/coordinate-warp-estimate.js.map +1 -0
  108. package/dist/fleets/index.d.ts +35 -0
  109. package/dist/fleets/index.d.ts.map +1 -1
  110. package/dist/fleets/index.js +52 -2
  111. package/dist/fleets/index.js.map +1 -1
  112. package/dist/fleets/movement-arithmetic.d.ts +21 -0
  113. package/dist/fleets/movement-arithmetic.d.ts.map +1 -0
  114. package/dist/fleets/movement-arithmetic.js +41 -0
  115. package/dist/fleets/movement-arithmetic.js.map +1 -0
  116. package/dist/fleets/subwarp-estimate.d.ts +70 -0
  117. package/dist/fleets/subwarp-estimate.d.ts.map +1 -0
  118. package/dist/fleets/subwarp-estimate.js +38 -0
  119. package/dist/fleets/subwarp-estimate.js.map +1 -0
  120. package/dist/fleets/travel-profile.d.ts +102 -0
  121. package/dist/fleets/travel-profile.d.ts.map +1 -0
  122. package/dist/fleets/travel-profile.js +120 -0
  123. package/dist/fleets/travel-profile.js.map +1 -0
  124. package/dist/fleets/warp-lane-estimate.d.ts +59 -0
  125. package/dist/fleets/warp-lane-estimate.d.ts.map +1 -0
  126. package/dist/fleets/warp-lane-estimate.js +36 -0
  127. package/dist/fleets/warp-lane-estimate.js.map +1 -0
  128. package/dist/fleets/warp-lane-policy.d.ts +68 -0
  129. package/dist/fleets/warp-lane-policy.d.ts.map +1 -0
  130. package/dist/fleets/warp-lane-policy.js +91 -0
  131. package/dist/fleets/warp-lane-policy.js.map +1 -0
  132. package/dist/fleets/warp-lane-toll.d.ts +55 -0
  133. package/dist/fleets/warp-lane-toll.d.ts.map +1 -0
  134. package/dist/fleets/warp-lane-toll.js +79 -0
  135. package/dist/fleets/warp-lane-toll.js.map +1 -0
  136. package/dist/identity/actions/index.d.ts +3 -3
  137. package/dist/identity/actions/index.d.ts.map +1 -1
  138. package/dist/identity/actions/index.js +50 -28
  139. package/dist/identity/actions/index.js.map +1 -1
  140. package/dist/identity/index.d.ts +12 -2
  141. package/dist/identity/index.d.ts.map +1 -1
  142. package/dist/identity/index.js +10 -1
  143. package/dist/identity/index.js.map +1 -1
  144. package/dist/identity/permissions.d.ts +11 -2
  145. package/dist/identity/permissions.d.ts.map +1 -1
  146. package/dist/identity/permissions.js +13 -4
  147. package/dist/identity/permissions.js.map +1 -1
  148. package/dist/identity/research-state.d.ts +60 -0
  149. package/dist/identity/research-state.d.ts.map +1 -0
  150. package/dist/identity/research-state.js +68 -0
  151. package/dist/identity/research-state.js.map +1 -0
  152. package/dist/index.d.ts +24 -0
  153. package/dist/index.d.ts.map +1 -1
  154. package/dist/index.js +20 -3
  155. package/dist/index.js.map +1 -1
  156. package/dist/internal/c4/account-decoding.d.ts +12 -0
  157. package/dist/internal/c4/account-decoding.d.ts.map +1 -0
  158. package/dist/internal/c4/account-decoding.js +36 -0
  159. package/dist/internal/c4/account-decoding.js.map +1 -0
  160. package/dist/internal/c4/cargo-bytes-config.d.ts +7 -0
  161. package/dist/internal/c4/cargo-bytes-config.d.ts.map +1 -0
  162. package/dist/internal/c4/cargo-bytes-config.js +19 -0
  163. package/dist/internal/c4/cargo-bytes-config.js.map +1 -0
  164. package/dist/internal/c4/character-modifier.d.ts +1 -1
  165. package/dist/internal/c4/character-modifier.d.ts.map +1 -1
  166. package/dist/internal/c4/character-registration.d.ts +2 -0
  167. package/dist/internal/c4/character-registration.d.ts.map +1 -1
  168. package/dist/internal/c4/character-registration.js +2 -0
  169. package/dist/internal/c4/character-registration.js.map +1 -1
  170. package/dist/internal/c4/character.d.ts +155 -0
  171. package/dist/internal/c4/character.d.ts.map +1 -0
  172. package/dist/internal/c4/character.js +79 -0
  173. package/dist/internal/c4/character.js.map +1 -0
  174. package/dist/internal/c4/claim-stake-configuration.js +4 -2
  175. package/dist/internal/c4/claim-stake-configuration.js.map +1 -1
  176. package/dist/internal/c4/claim-stake-definitions.d.ts +4 -4
  177. package/dist/internal/c4/claim-stake-definitions.d.ts.map +1 -1
  178. package/dist/internal/c4/claim-stake-definitions.js.map +1 -1
  179. package/dist/internal/c4/claim-stake.d.ts +4 -27
  180. package/dist/internal/c4/claim-stake.d.ts.map +1 -1
  181. package/dist/internal/c4/claim-stake.js +30 -41
  182. package/dist/internal/c4/claim-stake.js.map +1 -1
  183. package/dist/internal/c4/combat.d.ts +1 -82
  184. package/dist/internal/c4/combat.d.ts.map +1 -1
  185. package/dist/internal/c4/combat.js +10 -171
  186. package/dist/internal/c4/combat.js.map +1 -1
  187. package/dist/internal/c4/crafting-process-codec.d.ts +13 -0
  188. package/dist/internal/c4/crafting-process-codec.d.ts.map +1 -0
  189. package/dist/internal/c4/crafting-process-codec.js +34 -0
  190. package/dist/internal/c4/crafting-process-codec.js.map +1 -0
  191. package/dist/internal/c4/crafting.d.ts +25 -33
  192. package/dist/internal/c4/crafting.d.ts.map +1 -1
  193. package/dist/internal/c4/crafting.js +61 -49
  194. package/dist/internal/c4/crafting.js.map +1 -1
  195. package/dist/internal/c4/currency-cache.d.ts +6 -0
  196. package/dist/internal/c4/currency-cache.d.ts.map +1 -0
  197. package/dist/internal/c4/currency-cache.js +30 -0
  198. package/dist/internal/c4/currency-cache.js.map +1 -0
  199. package/dist/internal/c4/docking-funding.d.ts +4 -0
  200. package/dist/internal/c4/docking-funding.d.ts.map +1 -0
  201. package/dist/internal/c4/docking-funding.js +11 -0
  202. package/dist/internal/c4/docking-funding.js.map +1 -0
  203. package/dist/internal/c4/faction-adapter.d.ts +12 -0
  204. package/dist/internal/c4/faction-adapter.d.ts.map +1 -0
  205. package/dist/internal/c4/faction-adapter.js +52 -0
  206. package/dist/internal/c4/faction-adapter.js.map +1 -0
  207. package/dist/internal/c4/faction-epoch-meter.d.ts +10 -0
  208. package/dist/internal/c4/faction-epoch-meter.d.ts.map +1 -0
  209. package/dist/internal/c4/faction-epoch-meter.js +31 -0
  210. package/dist/internal/c4/faction-epoch-meter.js.map +1 -0
  211. package/dist/internal/c4/faction-treasury.d.ts +23 -0
  212. package/dist/internal/c4/faction-treasury.d.ts.map +1 -0
  213. package/dist/internal/c4/faction-treasury.js +48 -0
  214. package/dist/internal/c4/faction-treasury.js.map +1 -0
  215. package/dist/internal/c4/faction.d.ts +21 -0
  216. package/dist/internal/c4/faction.d.ts.map +1 -0
  217. package/dist/internal/c4/faction.js +23 -0
  218. package/dist/internal/c4/faction.js.map +1 -0
  219. package/dist/internal/c4/factions.d.ts +9 -57
  220. package/dist/internal/c4/factions.d.ts.map +1 -1
  221. package/dist/internal/c4/factions.js +29 -156
  222. package/dist/internal/c4/factions.js.map +1 -1
  223. package/dist/internal/c4/fleet-arrival.d.ts +28 -0
  224. package/dist/internal/c4/fleet-arrival.d.ts.map +1 -0
  225. package/dist/internal/c4/fleet-arrival.js +42 -0
  226. package/dist/internal/c4/fleet-arrival.js.map +1 -0
  227. package/dist/internal/c4/fleet-creation.d.ts +7 -0
  228. package/dist/internal/c4/fleet-creation.d.ts.map +1 -0
  229. package/dist/internal/c4/fleet-creation.js +180 -0
  230. package/dist/internal/c4/fleet-creation.js.map +1 -0
  231. package/dist/internal/c4/fleet-crew-binding.d.ts +9 -0
  232. package/dist/internal/c4/fleet-crew-binding.d.ts.map +1 -1
  233. package/dist/internal/c4/fleet-crew-binding.js +20 -3
  234. package/dist/internal/c4/fleet-crew-binding.js.map +1 -1
  235. package/dist/internal/c4/fleet-respawn.d.ts +17 -0
  236. package/dist/internal/c4/fleet-respawn.d.ts.map +1 -0
  237. package/dist/internal/c4/fleet-respawn.js +62 -0
  238. package/dist/internal/c4/fleet-respawn.js.map +1 -0
  239. package/dist/internal/c4/fleet-ship-assembly.d.ts +11 -0
  240. package/dist/internal/c4/fleet-ship-assembly.d.ts.map +1 -0
  241. package/dist/internal/c4/fleet-ship-assembly.js +44 -0
  242. package/dist/internal/c4/fleet-ship-assembly.js.map +1 -0
  243. package/dist/internal/c4/fleet.d.ts +45 -19
  244. package/dist/internal/c4/fleet.d.ts.map +1 -1
  245. package/dist/internal/c4/fleet.js +37 -29
  246. package/dist/internal/c4/fleet.js.map +1 -1
  247. package/dist/internal/c4/game-definition-layout.d.ts +2 -0
  248. package/dist/internal/c4/game-definition-layout.d.ts.map +1 -1
  249. package/dist/internal/c4/game-definition-layout.js +4 -0
  250. package/dist/internal/c4/game-definition-layout.js.map +1 -1
  251. package/dist/internal/c4/game.d.ts +47 -12
  252. package/dist/internal/c4/game.d.ts.map +1 -1
  253. package/dist/internal/c4/game.js +110 -21
  254. package/dist/internal/c4/game.js.map +1 -1
  255. package/dist/internal/c4/identity.d.ts +2 -152
  256. package/dist/internal/c4/identity.d.ts.map +1 -1
  257. package/dist/internal/c4/identity.js +6 -110
  258. package/dist/internal/c4/identity.js.map +1 -1
  259. package/dist/internal/c4/local-market-order.d.ts +31 -0
  260. package/dist/internal/c4/local-market-order.d.ts.map +1 -0
  261. package/dist/internal/c4/local-market-order.js +47 -0
  262. package/dist/internal/c4/local-market-order.js.map +1 -0
  263. package/dist/internal/c4/loot-layout.js +1 -1
  264. package/dist/internal/c4/loot-layout.js.map +1 -1
  265. package/dist/internal/c4/loot.d.ts +58 -0
  266. package/dist/internal/c4/loot.d.ts.map +1 -0
  267. package/dist/internal/c4/loot.js +130 -0
  268. package/dist/internal/c4/loot.js.map +1 -0
  269. package/dist/internal/c4/loyalty.d.ts +0 -27
  270. package/dist/internal/c4/loyalty.d.ts.map +1 -1
  271. package/dist/internal/c4/loyalty.js +14 -43
  272. package/dist/internal/c4/loyalty.js.map +1 -1
  273. package/dist/internal/c4/market.d.ts +2 -38
  274. package/dist/internal/c4/market.d.ts.map +1 -1
  275. package/dist/internal/c4/market.js +13 -51
  276. package/dist/internal/c4/market.js.map +1 -1
  277. package/dist/internal/c4/mining-instructions.d.ts +2 -0
  278. package/dist/internal/c4/mining-instructions.d.ts.map +1 -0
  279. package/dist/internal/c4/mining-instructions.js +3 -0
  280. package/dist/internal/c4/mining-instructions.js.map +1 -0
  281. package/dist/internal/c4/open-signal.d.ts +8 -0
  282. package/dist/internal/c4/open-signal.d.ts.map +1 -0
  283. package/dist/internal/c4/open-signal.js +37 -0
  284. package/dist/internal/c4/open-signal.js.map +1 -0
  285. package/dist/internal/c4/pda.js +1 -1
  286. package/dist/internal/c4/pda.js.map +1 -1
  287. package/dist/internal/c4/profile-faction.d.ts.map +1 -1
  288. package/dist/internal/c4/profile-faction.js +11 -21
  289. package/dist/internal/c4/profile-faction.js.map +1 -1
  290. package/dist/internal/c4/profile-permissions.d.ts +5 -3
  291. package/dist/internal/c4/profile-permissions.d.ts.map +1 -1
  292. package/dist/internal/c4/profile-permissions.js +61 -8
  293. package/dist/internal/c4/profile-permissions.js.map +1 -1
  294. package/dist/internal/c4/region-geometry.d.ts +8 -0
  295. package/dist/internal/c4/region-geometry.d.ts.map +1 -0
  296. package/dist/internal/c4/region-geometry.js +43 -0
  297. package/dist/internal/c4/region-geometry.js.map +1 -0
  298. package/dist/internal/c4/rewards.d.ts +1 -61
  299. package/dist/internal/c4/rewards.d.ts.map +1 -1
  300. package/dist/internal/c4/rewards.js +14 -115
  301. package/dist/internal/c4/rewards.js.map +1 -1
  302. package/dist/internal/c4/runtime-bindings.d.ts +4 -0
  303. package/dist/internal/c4/runtime-bindings.d.ts.map +1 -0
  304. package/dist/internal/c4/runtime-bindings.js +4 -0
  305. package/dist/internal/c4/runtime-bindings.js.map +1 -0
  306. package/dist/internal/c4/scan-detection-codecs.d.ts +3 -0
  307. package/dist/internal/c4/scan-detection-codecs.d.ts.map +1 -0
  308. package/dist/internal/c4/scan-detection-codecs.js +3 -0
  309. package/dist/internal/c4/scan-detection-codecs.js.map +1 -0
  310. package/dist/internal/c4/scan-lifecycle.d.ts +306 -0
  311. package/dist/internal/c4/scan-lifecycle.d.ts.map +1 -0
  312. package/dist/internal/c4/scan-lifecycle.js +261 -0
  313. package/dist/internal/c4/scan-lifecycle.js.map +1 -0
  314. package/dist/internal/c4/scanning.d.ts +1 -28
  315. package/dist/internal/c4/scanning.d.ts.map +1 -1
  316. package/dist/internal/c4/scanning.js +7 -36
  317. package/dist/internal/c4/scanning.js.map +1 -1
  318. package/dist/internal/c4/ship-import.d.ts +4 -0
  319. package/dist/internal/c4/ship-import.d.ts.map +1 -0
  320. package/dist/internal/c4/ship-import.js +13 -0
  321. package/dist/internal/c4/ship-import.js.map +1 -0
  322. package/dist/internal/c4/ship-stats.d.ts.map +1 -1
  323. package/dist/internal/c4/ship-stats.js +25 -21
  324. package/dist/internal/c4/ship-stats.js.map +1 -1
  325. package/dist/internal/c4/starbase.d.ts +0 -32
  326. package/dist/internal/c4/starbase.d.ts.map +1 -1
  327. package/dist/internal/c4/starbase.js +12 -62
  328. package/dist/internal/c4/starbase.js.map +1 -1
  329. package/dist/internal/c4/world.d.ts +36 -7
  330. package/dist/internal/c4/world.d.ts.map +1 -1
  331. package/dist/internal/c4/world.js +67 -48
  332. package/dist/internal/c4/world.js.map +1 -1
  333. package/dist/internal/cargo.d.ts +2 -0
  334. package/dist/internal/cargo.d.ts.map +1 -1
  335. package/dist/internal/cargo.js +8 -0
  336. package/dist/internal/cargo.js.map +1 -1
  337. package/dist/internal/fleet.d.ts +1 -0
  338. package/dist/internal/fleet.d.ts.map +1 -1
  339. package/dist/internal/fleet.js +3 -1
  340. package/dist/internal/fleet.js.map +1 -1
  341. package/dist/internal/loyalty-atlas-bank-state.d.ts +16 -0
  342. package/dist/internal/loyalty-atlas-bank-state.d.ts.map +1 -0
  343. package/dist/internal/loyalty-atlas-bank-state.js +10 -0
  344. package/dist/internal/loyalty-atlas-bank-state.js.map +1 -0
  345. package/dist/internal/planning/action-runtime.d.ts +38 -0
  346. package/dist/internal/planning/action-runtime.d.ts.map +1 -0
  347. package/dist/internal/planning/action-runtime.js +63 -0
  348. package/dist/internal/planning/action-runtime.js.map +1 -0
  349. package/dist/internal/planning/arrival-guards.d.ts +19 -0
  350. package/dist/internal/planning/arrival-guards.d.ts.map +1 -0
  351. package/dist/internal/planning/arrival-guards.js +171 -0
  352. package/dist/internal/planning/arrival-guards.js.map +1 -0
  353. package/dist/internal/planning/authorization-adapter.d.ts +45 -37
  354. package/dist/internal/planning/authorization-adapter.d.ts.map +1 -1
  355. package/dist/internal/planning/authorization-adapter.js +165 -76
  356. package/dist/internal/planning/authorization-adapter.js.map +1 -1
  357. package/dist/internal/planning/character-registration-guard.d.ts +4 -0
  358. package/dist/internal/planning/character-registration-guard.d.ts.map +1 -0
  359. package/dist/internal/planning/character-registration-guard.js +58 -0
  360. package/dist/internal/planning/character-registration-guard.js.map +1 -0
  361. package/dist/internal/planning/character-registration.d.ts +23 -0
  362. package/dist/internal/planning/character-registration.d.ts.map +1 -0
  363. package/dist/internal/planning/character-registration.js +87 -0
  364. package/dist/internal/planning/character-registration.js.map +1 -0
  365. package/dist/internal/planning/currency-cache-guard.d.ts +4 -0
  366. package/dist/internal/planning/currency-cache-guard.d.ts.map +1 -0
  367. package/dist/internal/planning/currency-cache-guard.js +32 -0
  368. package/dist/internal/planning/currency-cache-guard.js.map +1 -0
  369. package/dist/internal/planning/democracy-history.d.ts +50 -0
  370. package/dist/internal/planning/democracy-history.d.ts.map +1 -0
  371. package/dist/internal/planning/democracy-history.js +198 -0
  372. package/dist/internal/planning/democracy-history.js.map +1 -0
  373. package/dist/internal/planning/faction-enrollment.d.ts +0 -2
  374. package/dist/internal/planning/faction-enrollment.d.ts.map +1 -1
  375. package/dist/internal/planning/faction-enrollment.js +1 -22
  376. package/dist/internal/planning/faction-enrollment.js.map +1 -1
  377. package/dist/internal/planning/faction-trade-guards.d.ts +30 -0
  378. package/dist/internal/planning/faction-trade-guards.d.ts.map +1 -0
  379. package/dist/internal/planning/faction-trade-guards.js +15 -0
  380. package/dist/internal/planning/faction-trade-guards.js.map +1 -0
  381. package/dist/internal/planning/faction-trade-state.d.ts +16 -0
  382. package/dist/internal/planning/faction-trade-state.d.ts.map +1 -0
  383. package/dist/internal/planning/faction-trade-state.js +43 -0
  384. package/dist/internal/planning/faction-trade-state.js.map +1 -0
  385. package/dist/internal/planning/fleet-arrival.d.ts +40 -0
  386. package/dist/internal/planning/fleet-arrival.d.ts.map +1 -0
  387. package/dist/internal/planning/fleet-arrival.js +106 -0
  388. package/dist/internal/planning/fleet-arrival.js.map +1 -0
  389. package/dist/internal/planning/fleet-attack-xp.d.ts +20 -0
  390. package/dist/internal/planning/fleet-attack-xp.d.ts.map +1 -0
  391. package/dist/internal/planning/fleet-attack-xp.js +110 -0
  392. package/dist/internal/planning/fleet-attack-xp.js.map +1 -0
  393. package/dist/internal/planning/fleet-creation.d.ts +30 -0
  394. package/dist/internal/planning/fleet-creation.d.ts.map +1 -0
  395. package/dist/internal/planning/fleet-creation.js +109 -0
  396. package/dist/internal/planning/fleet-creation.js.map +1 -0
  397. package/dist/internal/planning/fleet-crew-guard.d.ts +28 -0
  398. package/dist/internal/planning/fleet-crew-guard.d.ts.map +1 -0
  399. package/dist/internal/planning/fleet-crew-guard.js +47 -0
  400. package/dist/internal/planning/fleet-crew-guard.js.map +1 -0
  401. package/dist/internal/planning/fleet-crew-transfer.d.ts +7 -0
  402. package/dist/internal/planning/fleet-crew-transfer.d.ts.map +1 -0
  403. package/dist/internal/planning/fleet-crew-transfer.js +132 -0
  404. package/dist/internal/planning/fleet-crew-transfer.js.map +1 -0
  405. package/dist/internal/planning/fleet-dock-funding-guard.d.ts +42 -0
  406. package/dist/internal/planning/fleet-dock-funding-guard.d.ts.map +1 -0
  407. package/dist/internal/planning/fleet-dock-funding-guard.js +208 -0
  408. package/dist/internal/planning/fleet-dock-funding-guard.js.map +1 -0
  409. package/dist/internal/planning/fleet-dock-funding.d.ts +9 -0
  410. package/dist/internal/planning/fleet-dock-funding.d.ts.map +1 -0
  411. package/dist/internal/planning/fleet-dock-funding.js +154 -0
  412. package/dist/internal/planning/fleet-dock-funding.js.map +1 -0
  413. package/dist/internal/planning/fleet-docking-guard.d.ts +4 -0
  414. package/dist/internal/planning/fleet-docking-guard.d.ts.map +1 -0
  415. package/dist/internal/planning/fleet-docking-guard.js +42 -0
  416. package/dist/internal/planning/fleet-docking-guard.js.map +1 -0
  417. package/dist/internal/planning/fleet-docking.d.ts +10 -0
  418. package/dist/internal/planning/fleet-docking.d.ts.map +1 -0
  419. package/dist/internal/planning/fleet-docking.js +85 -0
  420. package/dist/internal/planning/fleet-docking.js.map +1 -0
  421. package/dist/internal/planning/fleet-respawn.d.ts +28 -0
  422. package/dist/internal/planning/fleet-respawn.d.ts.map +1 -0
  423. package/dist/internal/planning/fleet-respawn.js +167 -0
  424. package/dist/internal/planning/fleet-respawn.js.map +1 -0
  425. package/dist/internal/planning/fleet-ship-assembly.d.ts +36 -0
  426. package/dist/internal/planning/fleet-ship-assembly.d.ts.map +1 -0
  427. package/dist/internal/planning/fleet-ship-assembly.js +138 -0
  428. package/dist/internal/planning/fleet-ship-assembly.js.map +1 -0
  429. package/dist/internal/planning/fleet-state.d.ts +25 -0
  430. package/dist/internal/planning/fleet-state.d.ts.map +1 -0
  431. package/dist/internal/planning/fleet-state.js +28 -0
  432. package/dist/internal/planning/fleet-state.js.map +1 -0
  433. package/dist/internal/planning/governance-fees.d.ts +64 -0
  434. package/dist/internal/planning/governance-fees.d.ts.map +1 -0
  435. package/dist/internal/planning/governance-fees.js +239 -0
  436. package/dist/internal/planning/governance-fees.js.map +1 -0
  437. package/dist/internal/planning/local-market-order-funding.d.ts +8 -0
  438. package/dist/internal/planning/local-market-order-funding.d.ts.map +1 -0
  439. package/dist/internal/planning/local-market-order-funding.js +127 -0
  440. package/dist/internal/planning/local-market-order-funding.js.map +1 -0
  441. package/dist/internal/planning/local-market-order.d.ts +40 -0
  442. package/dist/internal/planning/local-market-order.d.ts.map +1 -0
  443. package/dist/internal/planning/local-market-order.js +138 -0
  444. package/dist/internal/planning/local-market-order.js.map +1 -0
  445. package/dist/internal/planning/mining-stop.d.ts +14 -0
  446. package/dist/internal/planning/mining-stop.d.ts.map +1 -0
  447. package/dist/internal/planning/mining-stop.js +41 -0
  448. package/dist/internal/planning/mining-stop.js.map +1 -0
  449. package/dist/internal/planning/movement-character.d.ts +7 -0
  450. package/dist/internal/planning/movement-character.d.ts.map +1 -0
  451. package/dist/internal/planning/movement-character.js +41 -0
  452. package/dist/internal/planning/movement-character.js.map +1 -0
  453. package/dist/internal/planning/movement-xp-guard.d.ts +4 -0
  454. package/dist/internal/planning/movement-xp-guard.d.ts.map +1 -0
  455. package/dist/internal/planning/movement-xp-guard.js +103 -0
  456. package/dist/internal/planning/movement-xp-guard.js.map +1 -0
  457. package/dist/internal/planning/open-signal-guard.d.ts +3 -0
  458. package/dist/internal/planning/open-signal-guard.d.ts.map +1 -0
  459. package/dist/internal/planning/open-signal-guard.js +31 -0
  460. package/dist/internal/planning/open-signal-guard.js.map +1 -0
  461. package/dist/internal/planning/open-signal.d.ts +31 -0
  462. package/dist/internal/planning/open-signal.d.ts.map +1 -0
  463. package/dist/internal/planning/open-signal.js +86 -0
  464. package/dist/internal/planning/open-signal.js.map +1 -0
  465. package/dist/internal/planning/original-token.d.ts +34 -0
  466. package/dist/internal/planning/original-token.d.ts.map +1 -0
  467. package/dist/internal/planning/original-token.js +98 -0
  468. package/dist/internal/planning/original-token.js.map +1 -0
  469. package/dist/internal/planning/plan-fields.d.ts +59 -0
  470. package/dist/internal/planning/plan-fields.d.ts.map +1 -0
  471. package/dist/internal/planning/plan-fields.js +153 -0
  472. package/dist/internal/planning/plan-fields.js.map +1 -0
  473. package/dist/internal/planning/plan-guards.d.ts +4 -0
  474. package/dist/internal/planning/plan-guards.d.ts.map +1 -0
  475. package/dist/internal/planning/plan-guards.js +168 -0
  476. package/dist/internal/planning/plan-guards.js.map +1 -0
  477. package/dist/internal/planning/recipe-state.d.ts +6 -0
  478. package/dist/internal/planning/recipe-state.d.ts.map +1 -0
  479. package/dist/internal/planning/recipe-state.js +20 -0
  480. package/dist/internal/planning/recipe-state.js.map +1 -0
  481. package/dist/internal/planning/rent.d.ts +19 -0
  482. package/dist/internal/planning/rent.d.ts.map +1 -0
  483. package/dist/internal/planning/rent.js +35 -0
  484. package/dist/internal/planning/rent.js.map +1 -0
  485. package/dist/internal/planning/respawn-guards.d.ts +3 -0
  486. package/dist/internal/planning/respawn-guards.d.ts.map +1 -0
  487. package/dist/internal/planning/respawn-guards.js +41 -0
  488. package/dist/internal/planning/respawn-guards.js.map +1 -0
  489. package/dist/internal/planning/runtime-guards.d.ts +41 -0
  490. package/dist/internal/planning/runtime-guards.d.ts.map +1 -0
  491. package/dist/internal/planning/runtime-guards.js +635 -0
  492. package/dist/internal/planning/runtime-guards.js.map +1 -0
  493. package/dist/internal/planning/scan-completion-guard.d.ts +43 -0
  494. package/dist/internal/planning/scan-completion-guard.d.ts.map +1 -0
  495. package/dist/internal/planning/scan-completion-guard.js +94 -0
  496. package/dist/internal/planning/scan-completion-guard.js.map +1 -0
  497. package/dist/internal/planning/scan-completion.d.ts +20 -0
  498. package/dist/internal/planning/scan-completion.d.ts.map +1 -0
  499. package/dist/internal/planning/scan-completion.js +197 -0
  500. package/dist/internal/planning/scan-completion.js.map +1 -0
  501. package/dist/internal/planning/scan-detect-guard.d.ts +34 -0
  502. package/dist/internal/planning/scan-detect-guard.d.ts.map +1 -0
  503. package/dist/internal/planning/scan-detect-guard.js +77 -0
  504. package/dist/internal/planning/scan-detect-guard.js.map +1 -0
  505. package/dist/internal/planning/scan-detect.d.ts +24 -0
  506. package/dist/internal/planning/scan-detect.d.ts.map +1 -0
  507. package/dist/internal/planning/scan-detect.js +245 -0
  508. package/dist/internal/planning/scan-detect.js.map +1 -0
  509. package/dist/internal/planning/scan-input.d.ts +9 -0
  510. package/dist/internal/planning/scan-input.d.ts.map +1 -0
  511. package/dist/internal/planning/scan-input.js +58 -0
  512. package/dist/internal/planning/scan-input.js.map +1 -0
  513. package/dist/internal/planning/ship-import-funding.d.ts +22 -0
  514. package/dist/internal/planning/ship-import-funding.d.ts.map +1 -0
  515. package/dist/internal/planning/ship-import-funding.js +53 -0
  516. package/dist/internal/planning/ship-import-funding.js.map +1 -0
  517. package/dist/internal/planning/ship-token.d.ts +1 -6
  518. package/dist/internal/planning/ship-token.d.ts.map +1 -1
  519. package/dist/internal/planning/ship-token.js +2 -41
  520. package/dist/internal/planning/ship-token.js.map +1 -1
  521. package/dist/internal/planning/starbase-player-owner.d.ts +21 -0
  522. package/dist/internal/planning/starbase-player-owner.d.ts.map +1 -0
  523. package/dist/internal/planning/starbase-player-owner.js +17 -0
  524. package/dist/internal/planning/starbase-player-owner.js.map +1 -0
  525. package/dist/internal/planning/starbase-system-guard.d.ts +6 -0
  526. package/dist/internal/planning/starbase-system-guard.d.ts.map +1 -0
  527. package/dist/internal/planning/starbase-system-guard.js +93 -0
  528. package/dist/internal/planning/starbase-system-guard.js.map +1 -0
  529. package/dist/internal/planning/starbase-system.d.ts +15 -0
  530. package/dist/internal/planning/starbase-system.d.ts.map +1 -0
  531. package/dist/internal/planning/starbase-system.js +25 -0
  532. package/dist/internal/planning/starbase-system.js.map +1 -0
  533. package/dist/internal/planning/token-mint.d.ts +4 -0
  534. package/dist/internal/planning/token-mint.d.ts.map +1 -0
  535. package/dist/internal/planning/token-mint.js +15 -0
  536. package/dist/internal/planning/token-mint.js.map +1 -0
  537. package/dist/internal/planning/trade-faction-market.d.ts +20 -0
  538. package/dist/internal/planning/trade-faction-market.d.ts.map +1 -0
  539. package/dist/internal/planning/trade-faction-market.js +56 -0
  540. package/dist/internal/planning/trade-faction-market.js.map +1 -0
  541. package/dist/internal/planning/wallet-starbase.d.ts +34 -0
  542. package/dist/internal/planning/wallet-starbase.d.ts.map +1 -0
  543. package/dist/internal/planning/wallet-starbase.js +39 -0
  544. package/dist/internal/planning/wallet-starbase.js.map +1 -0
  545. package/dist/internal/planning/xp-runtime.d.ts +36 -0
  546. package/dist/internal/planning/xp-runtime.d.ts.map +1 -0
  547. package/dist/internal/planning/xp-runtime.js +126 -0
  548. package/dist/internal/planning/xp-runtime.js.map +1 -0
  549. package/dist/internal/system-program.d.ts +4 -0
  550. package/dist/internal/system-program.d.ts.map +1 -0
  551. package/dist/internal/system-program.js +3 -0
  552. package/dist/internal/system-program.js.map +1 -0
  553. package/dist/loyalty/actions/index.d.ts.map +1 -1
  554. package/dist/loyalty/actions/index.js +8 -21
  555. package/dist/loyalty/actions/index.js.map +1 -1
  556. package/dist/loyalty/index.d.ts.map +1 -1
  557. package/dist/loyalty/index.js +2 -6
  558. package/dist/loyalty/index.js.map +1 -1
  559. package/dist/markets/actions/index.d.ts +61 -3
  560. package/dist/markets/actions/index.d.ts.map +1 -1
  561. package/dist/markets/actions/index.js +227 -160
  562. package/dist/markets/actions/index.js.map +1 -1
  563. package/dist/markets/actions/trade-faction-market.d.ts +43 -0
  564. package/dist/markets/actions/trade-faction-market.d.ts.map +1 -0
  565. package/dist/markets/actions/trade-faction-market.js +282 -0
  566. package/dist/markets/actions/trade-faction-market.js.map +1 -0
  567. package/dist/markets/index.d.ts +38 -7
  568. package/dist/markets/index.d.ts.map +1 -1
  569. package/dist/markets/index.js +57 -10
  570. package/dist/markets/index.js.map +1 -1
  571. package/dist/mining/actions/index.d.ts +87 -0
  572. package/dist/mining/actions/index.d.ts.map +1 -0
  573. package/dist/mining/actions/index.js +319 -0
  574. package/dist/mining/actions/index.js.map +1 -0
  575. package/dist/mining/estimate.d.ts +114 -0
  576. package/dist/mining/estimate.d.ts.map +1 -0
  577. package/dist/mining/estimate.js +127 -0
  578. package/dist/mining/estimate.js.map +1 -0
  579. package/dist/mining/index.d.ts +9 -2
  580. package/dist/mining/index.d.ts.map +1 -1
  581. package/dist/mining/index.js +7 -2
  582. package/dist/mining/index.js.map +1 -1
  583. package/dist/mining/profile.d.ts +82 -0
  584. package/dist/mining/profile.d.ts.map +1 -0
  585. package/dist/mining/profile.js +109 -0
  586. package/dist/mining/profile.js.map +1 -0
  587. package/dist/planning/assembly.d.ts +5 -0
  588. package/dist/planning/assembly.d.ts.map +1 -1
  589. package/dist/planning/assembly.js +8 -4
  590. package/dist/planning/assembly.js.map +1 -1
  591. package/dist/planning/execution.d.ts +18 -3
  592. package/dist/planning/execution.d.ts.map +1 -1
  593. package/dist/planning/execution.js +492 -40
  594. package/dist/planning/execution.js.map +1 -1
  595. package/dist/planning/index.d.ts +196 -149
  596. package/dist/planning/index.d.ts.map +1 -1
  597. package/dist/planning/index.js +44 -292
  598. package/dist/planning/index.js.map +1 -1
  599. package/dist/planning/plan-sequence-checkpoint.d.ts +9 -0
  600. package/dist/planning/plan-sequence-checkpoint.d.ts.map +1 -1
  601. package/dist/planning/plan-sequence-checkpoint.js +16 -7
  602. package/dist/planning/plan-sequence-checkpoint.js.map +1 -1
  603. package/dist/planning/plan-sequence-execution.d.ts +5 -0
  604. package/dist/planning/plan-sequence-execution.d.ts.map +1 -1
  605. package/dist/planning/plan-sequence-execution.js +74 -30
  606. package/dist/planning/plan-sequence-execution.js.map +1 -1
  607. package/dist/planning/plan-sequence.d.ts +2 -1
  608. package/dist/planning/plan-sequence.d.ts.map +1 -1
  609. package/dist/planning/plan-sequence.js +8 -1
  610. package/dist/planning/plan-sequence.js.map +1 -1
  611. package/dist/planning/plan-validation.d.ts +14 -0
  612. package/dist/planning/plan-validation.d.ts.map +1 -0
  613. package/dist/planning/plan-validation.js +124 -0
  614. package/dist/planning/plan-validation.js.map +1 -0
  615. package/dist/planning/simulation.d.ts +25 -1
  616. package/dist/planning/simulation.d.ts.map +1 -1
  617. package/dist/planning/simulation.js +111 -11
  618. package/dist/planning/simulation.js.map +1 -1
  619. package/dist/registry/cargo.d.ts +7 -12
  620. package/dist/registry/cargo.d.ts.map +1 -1
  621. package/dist/registry/cargo.js +19 -19
  622. package/dist/registry/cargo.js.map +1 -1
  623. package/dist/registry/docking.d.ts +10 -0
  624. package/dist/registry/docking.d.ts.map +1 -0
  625. package/dist/registry/docking.js +12 -0
  626. package/dist/registry/docking.js.map +1 -0
  627. package/dist/registry/index.d.ts +4 -0
  628. package/dist/registry/index.d.ts.map +1 -1
  629. package/dist/registry/index.js.map +1 -1
  630. package/dist/registry/onboarding.d.ts +10 -2
  631. package/dist/registry/onboarding.d.ts.map +1 -1
  632. package/dist/registry/onboarding.js +20 -7
  633. package/dist/registry/onboarding.js.map +1 -1
  634. package/dist/registry/scanning.d.ts +7 -0
  635. package/dist/registry/scanning.d.ts.map +1 -0
  636. package/dist/registry/scanning.js +13 -0
  637. package/dist/registry/scanning.js.map +1 -0
  638. package/dist/registry/ship-stats-snapshot.js +19 -19
  639. package/dist/registry/ship-stats-snapshot.js.map +1 -1
  640. package/dist/registry/ships.d.ts +22 -2
  641. package/dist/registry/ships.d.ts.map +1 -1
  642. package/dist/registry/ships.js +31 -4
  643. package/dist/registry/ships.js.map +1 -1
  644. package/dist/registry/xp-runtime.d.ts +4 -0
  645. package/dist/registry/xp-runtime.d.ts.map +1 -0
  646. package/dist/registry/xp-runtime.js +14 -0
  647. package/dist/registry/xp-runtime.js.map +1 -0
  648. package/dist/rewards/index.d.ts.map +1 -1
  649. package/dist/rewards/index.js +5 -4
  650. package/dist/rewards/index.js.map +1 -1
  651. package/dist/scanning/actions/index.d.ts +116 -0
  652. package/dist/scanning/actions/index.d.ts.map +1 -0
  653. package/dist/scanning/actions/index.js +185 -0
  654. package/dist/scanning/actions/index.js.map +1 -0
  655. package/dist/scanning/index.d.ts +5 -2
  656. package/dist/scanning/index.d.ts.map +1 -1
  657. package/dist/scanning/index.js +13 -9
  658. package/dist/scanning/index.js.map +1 -1
  659. package/dist/scanning/lifecycle.d.ts +77 -0
  660. package/dist/scanning/lifecycle.d.ts.map +1 -0
  661. package/dist/scanning/lifecycle.js +93 -0
  662. package/dist/scanning/lifecycle.js.map +1 -0
  663. package/dist/scanning/odds.d.ts +111 -0
  664. package/dist/scanning/odds.d.ts.map +1 -0
  665. package/dist/scanning/odds.js +294 -0
  666. package/dist/scanning/odds.js.map +1 -0
  667. package/dist/scanning/signals.d.ts +121 -0
  668. package/dist/scanning/signals.d.ts.map +1 -0
  669. package/dist/scanning/signals.js +171 -0
  670. package/dist/scanning/signals.js.map +1 -0
  671. package/dist/starbases/actions/index.d.ts.map +1 -1
  672. package/dist/starbases/actions/index.js +3 -14
  673. package/dist/starbases/actions/index.js.map +1 -1
  674. package/dist/world/index.d.ts +110 -5
  675. package/dist/world/index.d.ts.map +1 -1
  676. package/dist/world/index.js +109 -4
  677. package/dist/world/index.js.map +1 -1
  678. package/dist/world/planet-claim-stake-plots.d.ts +130 -0
  679. package/dist/world/planet-claim-stake-plots.d.ts.map +1 -0
  680. package/dist/world/planet-claim-stake-plots.js +110 -0
  681. package/dist/world/planet-claim-stake-plots.js.map +1 -0
  682. package/dist/world/starbase-status.d.ts +176 -0
  683. package/dist/world/starbase-status.d.ts.map +1 -0
  684. package/dist/world/starbase-status.js +153 -0
  685. package/dist/world/starbase-status.js.map +1 -0
  686. package/package.json +10 -2
@@ -1,17 +1,21 @@
1
+ import { fleetAttackInstructionKey, validateFleetAttackActors, } from '../../internal/planning/fleet-attack-xp.js';
2
+ import { resolveXpRuntime } from '../../internal/planning/xp-runtime.js';
1
3
  import { getAddressEncoder, isAddress } from '@solana/kit';
4
+ import { resolveActionRuntime } from '../../internal/planning/action-runtime.js';
2
5
  import { InvalidActionInputError, SageSdkError } from '../../client/errors.js';
3
6
  import { readContextRawAccounts } from '../../client/reconciliation.js';
4
- import { sage } from '../../internal/c4/bindings.js';
5
- import { lootAccountDefinition, } from '../../internal/c4/combat.js';
7
+ import { getRetrieveLootInstructionDataEncoder } from '../../internal/c4/runtime-bindings.js';
8
+ import { lootAccountDefinition, } from '../../internal/c4/loot.js';
6
9
  import { deriveFleetAddress, fleetAccountDefinition, } from '../../internal/c4/fleet.js';
7
- import { deriveFleetCrewBindingAddress, fleetCrewBindingAccountDefinition, } from '../../internal/c4/fleet-crew-binding.js';
10
+ import { deriveFleetCrewBindingAddress, fleetCrewBindingAccountDefinition, matchesFleetCrewBindingIdentity, } from '../../internal/c4/fleet-crew-binding.js';
8
11
  import { deriveFactionAccountAddress, deriveFactionEconomicsConfigAddress, deriveFactionOwnershipAddress, deriveFactionRelationTrackerAddress, deriveFactionTreasuryAddress, deriveKingSystemTrackerAddress, deriveRegionTrackerAddress, factionAccountDefinition, factionEconomicsConfigAccountDefinition, factionOwnershipAccountDefinition, factionRelationTrackerAccountDefinition, factionTreasuryAccountDefinition, kingSystemTrackerAccountDefinition, regionTrackerAccountDefinition, } from '../../internal/c4/factions.js';
9
- import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/identity.js';
12
+ import { factionValue } from '../../internal/c4/faction.js';
13
+ import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/character.js';
10
14
  import { deriveLoyaltyContributionAddress, deriveLoyaltyEpochAddress, loyaltyContributionAccountDefinition, loyaltyEpochAccountDefinition, } from '../../internal/c4/loyalty.js';
11
15
  import { atlasRewardConfigAccountDefinition, atlasRewardRegistryAccountDefinition, deriveAtlasRewardConfigAddress, deriveAtlasRewardRegistryAddress, } from '../../internal/c4/rewards.js';
12
16
  import { deriveStarSystemAddress, starSystemAccountDefinition, } from '../../internal/c4/world.js';
13
17
  import { requireGameAddress } from '../../internal/game-context.js';
14
- import { adaptApplyCombatStimulantInstruction, adaptAttackFleetInstruction, adaptAttackStarbaseInstruction, adaptRetrieveLootInstruction, validatePlanAuthorization, } from '../../internal/planning/authorization-adapter.js';
18
+ import { adaptApplyCombatStimulantInstruction, adaptAttackFleetInstruction, adaptAttackStarbaseInstruction, adaptRetrieveLootInstruction, readPlanAuthorization, } from '../../internal/planning/authorization-adapter.js';
15
19
  import { createPlan, } from '../../planning/index.js';
16
20
  import { readGameCombatConfiguration } from '../../registry/combat.js';
17
21
  import { resolveCargo, } from '../../registry/index.js';
@@ -35,19 +39,13 @@ function assertKeys(value, field, required, optional = []) {
35
39
  function validateOptions(value) {
36
40
  const options = readRecord(value, 'options');
37
41
  assertKeys(options, 'options', ['authorization']);
38
- const authorizationRecord = readRecord(options.authorization, 'authorization');
39
- assertKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
40
- const authorization = authorizationRecord;
41
- validatePlanAuthorization(authorization);
42
+ const authorization = readPlanAuthorization(options.authorization);
42
43
  return { authorization };
43
44
  }
44
45
  function validateAttackOptions(value) {
45
46
  const options = readRecord(value, 'options');
46
47
  assertKeys(options, 'options', ['authorization', 'loot']);
47
- const authorizationRecord = readRecord(options.authorization, 'authorization');
48
- assertKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
49
- const authorization = authorizationRecord;
50
- validatePlanAuthorization(authorization);
48
+ const authorization = readPlanAuthorization(options.authorization);
51
49
  if (typeof options.loot !== 'string' || !isAddress(options.loot)) {
52
50
  invalid('options.loot', options.loot, 'one valid new Loot account address', 'Generate a new address-only Loot signer and provide its public address before retrying.');
53
51
  }
@@ -66,10 +64,7 @@ function validateAttackStance(value) {
66
64
  function validateRetrieveOptions(value) {
67
65
  const options = readRecord(value, 'options');
68
66
  assertKeys(options, 'options', ['authorization', 'atUnixSeconds']);
69
- const authorizationRecord = readRecord(options.authorization, 'authorization');
70
- assertKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
71
- const authorization = authorizationRecord;
72
- validatePlanAuthorization(authorization);
67
+ const authorization = readPlanAuthorization(options.authorization);
73
68
  if (typeof options.atUnixSeconds !== 'bigint' || options.atUnixSeconds < 0n) {
74
69
  invalid('options.atUnixSeconds', options.atUnixSeconds, 'a non-negative bigint Unix timestamp', 'Provide the explicit current Unix timestamp used to evaluate Loot exclusivity before retrying.');
75
70
  }
@@ -162,9 +157,7 @@ function validateLootSelection(value, loot, fleet, retrievingProfile, atUnixSeco
162
157
  }
163
158
  generated.push([itemIndex, encoded]);
164
159
  }
165
- const instructionDataLength = sage
166
- .getRetrieveLootInstructionDataEncoder()
167
- .encode({
160
+ const instructionDataLength = getRetrieveLootInstructionDataEncoder().encode({
168
161
  keyIndex: 0,
169
162
  want: generated.map(([itemIndex, cargo]) => [
170
163
  itemIndex,
@@ -331,20 +324,6 @@ export async function planFleetApplyCombatStimulant(ctx, fleet, stimulant, input
331
324
  summary: description,
332
325
  });
333
326
  }
334
- function factionId(fleet) {
335
- if (fleet.npcFactionId > 0)
336
- return fleet.npcFactionId;
337
- switch (fleet.faction) {
338
- case 'mud':
339
- return 1;
340
- case 'oni':
341
- return 2;
342
- case 'ustur':
343
- return 3;
344
- case 'unaligned':
345
- return 0;
346
- }
347
- }
348
327
  function shipFingerprint(fleet) {
349
328
  return fleet.ships
350
329
  .map(({ id, quantity }) => `${String(id)}:${String(quantity)}`)
@@ -404,14 +383,13 @@ async function optionalCrewBinding(ctx, fleet) {
404
383
  const address = await deriveFleetCrewBindingAddress(fleet.address);
405
384
  const [envelope] = await ctx.data.readMany(fleetCrewBindingAccountDefinition, [address]);
406
385
  if (envelope !== undefined &&
407
- (envelope.data.fleet !== fleet.address ||
408
- envelope.data.ownerProfile !== fleet.ownerProfile.address)) {
386
+ !matchesFleetCrewBindingIdentity(envelope.data, fleet.address, fleet.ownerProfile.address)) {
409
387
  fail(`FleetCrewBinding ${address} does not belong to Fleet ${fleet.address} and Profile ${fleet.ownerProfile.address}. Refresh the Fleet crew relationship and retry.`, address);
410
388
  }
411
389
  return envelope?.address;
412
390
  }
413
391
  async function resolveRewardAccounts(ctx, fleet, registry, config, epochIndex) {
414
- const resolvedFaction = factionId(fleet);
392
+ const resolvedFaction = fleet.npcFactionId > 0 ? fleet.npcFactionId : factionValue(fleet.faction);
415
393
  if (resolvedFaction === 0)
416
394
  return { config, registry };
417
395
  const [epochAddress, contributionAddress] = await Promise.all([
@@ -446,33 +424,82 @@ async function resolveRewardAccounts(ctx, fleet, registry, config, epochIndex) {
446
424
  registry,
447
425
  };
448
426
  }
449
- async function resolveNpcAccounts(ctx, fleet, requireFactionAccount) {
427
+ /** Reads and requires an NPC Fleet's canonical FactionOwnership and, when
428
+ * `withFaction`, its Faction account; a player Fleet has neither. */
429
+ async function resolveNpcAccounts(ctx, fleet, withFaction) {
450
430
  if (fleet.npcFactionId === 0)
451
431
  return {};
452
- const ownershipAddress = await deriveFactionOwnershipAddress(fleet.game, 'fleet', fleet.address);
453
- const [ownership] = await ctx.data.readMany(factionOwnershipAccountDefinition, [ownershipAddress]);
432
+ const addresses = await Promise.all([
433
+ deriveFactionOwnershipAddress(fleet.game, 'fleet', fleet.address),
434
+ ...(withFaction
435
+ ? [deriveFactionAccountAddress(fleet.game, fleet.npcFactionId)]
436
+ : []),
437
+ ]);
438
+ const [ownership, faction] = await readContextRawAccounts(ctx, addresses);
439
+ const ownershipData = ownership && factionOwnershipAccountDefinition.decode(ownership);
454
440
  if (ownership === undefined ||
455
- ownership.data.game !== fleet.game ||
456
- ownership.data.asset.kind !== 'fleet' ||
457
- ownership.data.asset.fleet !== fleet.address ||
458
- ownership.data.controllingFactionId !== fleet.npcFactionId) {
459
- fail(`NPC Fleet ${fleet.address} has no matching canonical FactionOwnership for faction ${String(fleet.npcFactionId)}. Refresh the Fleet and faction ownership relationship before retrying.`, ownershipAddress);
460
- }
461
- if (!requireFactionAccount)
462
- return { ownership: ownership.address };
463
- const factionAddress = await deriveFactionAccountAddress(fleet.game, fleet.npcFactionId);
464
- const faction = await ctx.data.read(factionAccountDefinition, factionAddress);
465
- if (faction.data.game !== fleet.game ||
466
- faction.data.factionId !== fleet.npcFactionId) {
467
- fail(`Faction ${factionAddress} does not match NPC Fleet ${fleet.address}'s Game and faction id. Refresh the faction registry relationship before retrying.`, factionAddress);
468
- }
469
- return { factionAccount: faction.address, ownership: ownership.address };
441
+ ownershipData?.game !== fleet.game ||
442
+ ownershipData.asset.kind !== 'fleet' ||
443
+ ownershipData.asset.fleet !== fleet.address ||
444
+ ownershipData.controllingFactionId !== fleet.npcFactionId) {
445
+ fail(`NPC Fleet ${fleet.address} has no matching canonical FactionOwnership for faction ${String(fleet.npcFactionId)}. Refresh the Fleet and faction ownership relationship before retrying.`, addresses[0]);
446
+ }
447
+ if (!withFaction)
448
+ return { ownership };
449
+ const factionData = faction && factionAccountDefinition.decode(faction);
450
+ if (faction === undefined ||
451
+ factionData?.game !== fleet.game ||
452
+ factionData.factionId !== fleet.npcFactionId) {
453
+ fail(`Faction ${addresses[1]} is missing or does not match NPC Fleet ${fleet.address}'s Game and faction id. Refresh the faction registry relationship before retrying.`, addresses[1]);
454
+ }
455
+ return { faction, ownership };
470
456
  }
471
457
  function generatedStance(stance) {
472
458
  return {
473
459
  ammoUsage: stance.ammoUsage === 'none' ? 0 : stance.ammoUsage === 'light' ? 1 : 2,
474
460
  };
475
461
  }
462
+ /** Requires a live Fleet snapshot of the configured Game with known AP, crew
463
+ * and ship composition; an attacking Fleet also needs AP available. */
464
+ function validateAttackFleet(fleet, role, game) {
465
+ const label = `The ${role} Fleet ${fleet.name} (${fleet.address})`;
466
+ if (fleet.game !== game) {
467
+ fail(`${label} belongs to Game ${fleet.game}, not configured Game ${game}. Refresh the Fleet through this context and retry.`, fleet.address);
468
+ }
469
+ if (fleet.state.kind === 'destroyed') {
470
+ fail(`${label} is destroyed and cannot participate in this attack. Refresh the Fleet after respawn and retry.`, fleet.address);
471
+ }
472
+ if (!Number.isSafeInteger(fleet.ap) ||
473
+ fleet.ap < 0 ||
474
+ !Number.isSafeInteger(fleet.crewCount) ||
475
+ fleet.crewCount <= 0) {
476
+ fail(`${label} has unknown or invalid AP or crew state. Refresh the Fleet through this context and retry.`, fleet.address);
477
+ }
478
+ if (fleet.ships.length === 0 ||
479
+ fleet.ships.some(({ quantity }) => quantity <= 0n)) {
480
+ fail(`${label} has no valid known ship composition. Refresh Fleet composition and retry.`, fleet.address);
481
+ }
482
+ if (role === 'attacking' && fleet.ap === 0) {
483
+ fail(`${label} has no known AP available. Wait for AP reload, refresh the Fleet, and retry.`, fleet.address);
484
+ }
485
+ }
486
+ /** Validates the inputs every attack shares: the stance, an attacking Fleet
487
+ * owned by the authorization Profile that can attack, and a new Loot address
488
+ * distinct from the authorization signers. */
489
+ function validateAttack(ctx, attacker, inputStance, inputOptions) {
490
+ const options = validateAttackOptions(inputOptions);
491
+ const stance = validateAttackStance(inputStance);
492
+ const game = requireGameAddress(ctx);
493
+ if (attacker.ownerProfile.address !== options.authorization.profile) {
494
+ fail(`Attacking Fleet ${attacker.address} does not belong to authorization Profile ${options.authorization.profile}. Choose an owned Fleet and retry.`, attacker.address);
495
+ }
496
+ if (options.loot === options.authorization.authority ||
497
+ options.loot === options.authorization.profile) {
498
+ fail(`The new Loot address ${options.loot} must be distinct from the authorization authority and Profile. Generate a separate Loot signer address and retry.`, options.loot);
499
+ }
500
+ validateAttackFleet(attacker, 'attacking', game);
501
+ return { game, options, stance };
502
+ }
476
503
  /** Plans one singleton Fleet-on-Fleet attack without predicting its outcome.
477
504
  *
478
505
  * Range, randomness, recent slot hashes, final combat arithmetic, and chain
@@ -497,43 +524,11 @@ function generatedStance(stance) {
497
524
  * ```
498
525
  */
499
526
  export async function planFleetAttackFleet(ctx, attacker, defender, inputStance, inputOptions) {
500
- const options = validateAttackOptions(inputOptions);
501
- const stance = validateAttackStance(inputStance);
502
- const game = requireGameAddress(ctx);
527
+ const { game, options, stance } = validateAttack(ctx, attacker, inputStance, inputOptions);
503
528
  if (attacker.address === defender.address) {
504
529
  fail(`Fleet ${attacker.address} cannot attack itself. Choose a distinct defending Fleet and retry.`, attacker.address);
505
530
  }
506
- if (attacker.ownerProfile.address !== options.authorization.profile) {
507
- fail(`Attacking Fleet ${attacker.address} does not belong to authorization Profile ${options.authorization.profile}. Choose an owned Fleet and retry.`, attacker.address);
508
- }
509
- if (options.loot === options.authorization.authority ||
510
- options.loot === options.authorization.profile) {
511
- fail(`The new Loot address ${options.loot} must be distinct from the authorization authority and Profile. Generate a separate Loot signer address and retry.`, options.loot);
512
- }
513
- for (const [role, fleet] of [
514
- ['attacking', attacker],
515
- ['defending', defender],
516
- ]) {
517
- if (fleet.game !== game) {
518
- fail(`The ${role} Fleet ${fleet.address} belongs to Game ${fleet.game}, not configured Game ${game}. Refresh both Fleets through this context and retry.`, fleet.address);
519
- }
520
- if (fleet.state.kind === 'destroyed') {
521
- fail(`The ${role} Fleet ${fleet.name} (${fleet.address}) is destroyed and cannot participate in this attack. Refresh the Fleet after respawn and retry.`, fleet.address);
522
- }
523
- if (!Number.isSafeInteger(fleet.ap) ||
524
- fleet.ap < 0 ||
525
- !Number.isSafeInteger(fleet.crewCount) ||
526
- fleet.crewCount <= 0) {
527
- fail(`The ${role} Fleet ${fleet.name} (${fleet.address}) has unknown or invalid AP or crew state. Refresh the Fleet through this context and retry.`, fleet.address);
528
- }
529
- if (fleet.ships.length === 0 ||
530
- fleet.ships.some(({ quantity }) => quantity <= 0n)) {
531
- fail(`The ${role} Fleet ${fleet.name} (${fleet.address}) has no valid known ship composition. Refresh Fleet composition and retry.`, fleet.address);
532
- }
533
- }
534
- if (attacker.ap === 0) {
535
- fail(`Attacking Fleet ${attacker.name} (${attacker.address}) has no known AP available. Wait for AP reload, refresh the Fleet, and retry.`, attacker.address);
536
- }
531
+ validateAttackFleet(defender, 'defending', game);
537
532
  const currentAccounts = await readContextRawAccounts(ctx, [
538
533
  attacker.address,
539
534
  defender.address,
@@ -565,58 +560,93 @@ export async function planFleetAttackFleet(ctx, attacker, defender, inputStance,
565
560
  deriveRegionTrackerAddress(game),
566
561
  deriveFactionRelationTrackerAddress(game),
567
562
  ]);
563
+ const actorIntent = {
564
+ address: attacker.address,
565
+ defender: defender.address,
566
+ game,
567
+ profile: attacker.ownerProfile.address,
568
+ defenderProfile: defender.ownerProfile.address,
569
+ };
570
+ await validateFleetAttackActors(ctx, actorIntent);
571
+ const versions = new Map();
572
+ const attackerXp = await resolveXpRuntime(ctx, { game, character, profile: attacker.ownerProfile.address }, versions);
573
+ const defenderXp = character === defenderCharacter
574
+ ? attackerXp
575
+ : await resolveXpRuntime(ctx, {
576
+ game,
577
+ character: defenderCharacter,
578
+ profile: defender.ownerProfile.address,
579
+ }, versions);
580
+ const xpGuards = [...new Set([attackerXp, defenderXp])].map((xp) => ({
581
+ kind: 'xp-runtime',
582
+ address: game,
583
+ intent: xp.intent,
584
+ accounts: xp.accounts,
585
+ describes: 'Both operator XP budgets remain canonical and reconciled; earned XP and bank balances may change.',
586
+ }));
587
+ const instruction = adaptAttackFleetInstruction({
588
+ ...(attackerNpc.faction === undefined
589
+ ? {}
590
+ : { attackerFactionAccount: attackerNpc.faction.address }),
591
+ ...(attackerNpc.ownership === undefined
592
+ ? {}
593
+ : { attackerFleetOwnership: attackerNpc.ownership.address }),
594
+ attackerRewardsConfig: attackerRewards.config,
595
+ ...(attackerRewards.contribution === undefined
596
+ ? {}
597
+ : { attackerRewardsContribution: attackerRewards.contribution }),
598
+ ...(attackerRewards.epoch === undefined
599
+ ? {}
600
+ : { attackerRewardsEpoch: attackerRewards.epoch }),
601
+ attackerRewardsRegistry: attackerRewards.registry,
602
+ ...(defender.state.kind === 'mining'
603
+ ? { asteroid: defender.state.asteroid.address }
604
+ : {}),
605
+ authorization: options.authorization,
606
+ attackerXpBudget: attackerXp.accounts.xpBudget,
607
+ defenderXpBudget: defenderXp.accounts.xpBudget,
608
+ xpBudgetConfig: attackerXp.accounts.xpBudgetConfig,
609
+ character,
610
+ ...(crewBinding === undefined ? {} : { crewBinding }),
611
+ defenderCharacter,
612
+ ...(defenderNpc.ownership === undefined
613
+ ? {}
614
+ : { defenderFleetOwnership: defenderNpc.ownership.address }),
615
+ defenderRewardsConfig: defenderRewards.config,
616
+ ...(defenderRewards.contribution === undefined
617
+ ? {}
618
+ : { defenderRewardsContribution: defenderRewards.contribution }),
619
+ ...(defenderRewards.epoch === undefined
620
+ ? {}
621
+ : { defenderRewardsEpoch: defenderRewards.epoch }),
622
+ defenderRewardsRegistry: defenderRewards.registry,
623
+ defendingFleet: defender.address,
624
+ factionRelationTracker,
625
+ fleet: attacker.address,
626
+ game,
627
+ loot: options.loot,
628
+ recentSlothashes: 'SysvarS1otHashes111111111111111111111111111',
629
+ regionTracker,
630
+ stance: generatedStance(stance),
631
+ });
568
632
  const description = `Attack Fleet ${defender.name} (${defender.address}) with Fleet ${attacker.name} (${attacker.address}) using ${stance.ammoUsage} ammunition; range, randomness, rewards, Loot, damage, and final combat arithmetic remain chain-authoritative.`;
569
633
  return createPlan({
570
634
  kind: 'combat.attack-fleet',
571
635
  preconditions: [
636
+ {
637
+ kind: 'fleet-attack',
638
+ ...actorIntent,
639
+ instructionKey: fleetAttackInstructionKey(instruction),
640
+ describes: 'The exact attack instruction and both canonical operators remain bound.',
641
+ },
642
+ ...xpGuards,
572
643
  await precondition(attackerAccount, `Attacking Fleet ${attacker.name} retains its owner, Game, live state, crew, AP, faction, and ship composition.`),
573
644
  await precondition(defenderAccount, `Defending Fleet ${defender.name} retains its owner, Game, live state, crew, faction, and ship composition.`),
574
645
  ],
575
646
  steps: [
576
647
  {
577
648
  describes: description,
578
- instruction: adaptAttackFleetInstruction({
579
- ...(attackerNpc.factionAccount === undefined
580
- ? {}
581
- : { attackerFactionAccount: attackerNpc.factionAccount }),
582
- ...(attackerNpc.ownership === undefined
583
- ? {}
584
- : { attackerFleetOwnership: attackerNpc.ownership }),
585
- attackerRewardsConfig: attackerRewards.config,
586
- ...(attackerRewards.contribution === undefined
587
- ? {}
588
- : { attackerRewardsContribution: attackerRewards.contribution }),
589
- ...(attackerRewards.epoch === undefined
590
- ? {}
591
- : { attackerRewardsEpoch: attackerRewards.epoch }),
592
- attackerRewardsRegistry: attackerRewards.registry,
593
- ...(defender.state.kind === 'mining'
594
- ? { asteroid: defender.state.asteroid.address }
595
- : {}),
596
- authorization: options.authorization,
597
- character,
598
- ...(crewBinding === undefined ? {} : { crewBinding }),
599
- defenderCharacter,
600
- ...(defenderNpc.ownership === undefined
601
- ? {}
602
- : { defenderFleetOwnership: defenderNpc.ownership }),
603
- defenderRewardsConfig: defenderRewards.config,
604
- ...(defenderRewards.contribution === undefined
605
- ? {}
606
- : { defenderRewardsContribution: defenderRewards.contribution }),
607
- ...(defenderRewards.epoch === undefined
608
- ? {}
609
- : { defenderRewardsEpoch: defenderRewards.epoch }),
610
- defenderRewardsRegistry: defenderRewards.registry,
611
- defendingFleet: defender.address,
612
- factionRelationTracker,
613
- fleet: attacker.address,
614
- game,
615
- loot: options.loot,
616
- recentSlothashes: 'SysvarS1otHashes111111111111111111111111111',
617
- regionTracker,
618
- stance: generatedStance(stance),
619
- }),
649
+ instruction,
620
650
  semantics: [{ kind: 'exclusive', scope: 'transaction' }],
621
651
  signers: [options.authorization.authority, options.loot],
622
652
  },
@@ -639,18 +669,6 @@ function systemFingerprint(system) {
639
669
  version: system.version,
640
670
  }, (_key, value) => typeof value === 'bigint' ? value.toString() : value);
641
671
  }
642
- function starbaseFactionId(owner) {
643
- switch (owner) {
644
- case 'mud':
645
- return 1;
646
- case 'oni':
647
- return 2;
648
- case 'ustur':
649
- return 3;
650
- case 'unaligned':
651
- return null;
652
- }
653
- }
654
672
  /** Plans one singleton Fleet-on-Starbase attack without predicting its outcome.
655
673
  *
656
674
  * The planner validates the owned attacking Fleet, canonical target System and
@@ -676,32 +694,7 @@ function starbaseFactionId(owner) {
676
694
  * ```
677
695
  */
678
696
  export async function planFleetAttackStarbase(ctx, attacker, target, inputStance, inputOptions) {
679
- const options = validateAttackOptions(inputOptions);
680
- const stance = validateAttackStance(inputStance);
681
- const game = requireGameAddress(ctx);
682
- if (attacker.ownerProfile.address !== options.authorization.profile) {
683
- fail(`Attacking Fleet ${attacker.address} does not belong to authorization Profile ${options.authorization.profile}. Choose an owned Fleet and retry.`, attacker.address);
684
- }
685
- if (options.loot === options.authorization.authority ||
686
- options.loot === options.authorization.profile) {
687
- fail(`The new Loot address ${options.loot} must be distinct from the authorization authority and Profile. Generate a separate Loot signer address and retry.`, options.loot);
688
- }
689
- if (attacker.game !== game) {
690
- fail(`Attacking Fleet ${attacker.address} belongs to Game ${attacker.game}, not configured Game ${game}. Refresh the Fleet through this context and retry.`, attacker.address);
691
- }
692
- if (attacker.state.kind === 'destroyed') {
693
- fail(`Attacking Fleet ${attacker.name} (${attacker.address}) is destroyed and cannot attack a Starbase. Refresh the Fleet after respawn and retry.`, attacker.address);
694
- }
695
- if (!Number.isSafeInteger(attacker.ap) ||
696
- attacker.ap <= 0 ||
697
- !Number.isSafeInteger(attacker.crewCount) ||
698
- attacker.crewCount <= 0) {
699
- fail(`Attacking Fleet ${attacker.name} (${attacker.address}) has no known positive AP or valid crew state. Wait for AP reload, refresh the Fleet, and retry.`, attacker.address);
700
- }
701
- if (attacker.ships.length === 0 ||
702
- attacker.ships.some(({ quantity }) => quantity <= 0n)) {
703
- fail(`Attacking Fleet ${attacker.name} (${attacker.address}) has no valid known ship composition. Refresh Fleet composition and retry.`, attacker.address);
704
- }
697
+ const { game, options, stance } = validateAttack(ctx, attacker, inputStance, inputOptions);
705
698
  if (target.game !== game) {
706
699
  fail(`Target Star System ${target.address} belongs to Game ${target.game}, not configured Game ${game}. Refresh the target through this context and retry.`, target.address);
707
700
  }
@@ -720,9 +713,9 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
720
713
  deriveRegionTrackerAddress(game),
721
714
  deriveFleetCrewBindingAddress(attacker.address),
722
715
  ]);
723
- const [probeRelationsAccount, probeRegistryAccount] = await readContextRawAccounts(ctx, [
724
- relationTrackerAddress,
725
- registryAddress,
716
+ const [[probeRelationsAccount, probeRegistryAccount], attackerNpc] = await Promise.all([
717
+ readContextRawAccounts(ctx, [relationTrackerAddress, registryAddress]),
718
+ resolveNpcAccounts(ctx, attacker, true),
726
719
  ]);
727
720
  const probeRelations = factionRelationTrackerAccountDefinition.decode(requireAccount(probeRelationsAccount, relationTrackerAddress, `FactionRelationTracker ${relationTrackerAddress} is missing. Refresh faction relationships and retry.`));
728
721
  const probeRegistry = atlasRewardRegistryAccountDefinition.decode(requireAccount(probeRegistryAccount, registryAddress, `AtlasRewardRegistry ${registryAddress} is missing. Refresh reward configuration and retry.`));
@@ -733,12 +726,6 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
733
726
  fail(`AtlasRewardRegistry ${registryAddress} belongs to another Game. Refresh the configured reward registry and retry.`, registryAddress);
734
727
  }
735
728
  const rewardConfigAddress = await deriveAtlasRewardConfigAddress(game, probeRegistry.activeConfigVersion);
736
- const attackerOwnership = attacker.npcFactionId === 0
737
- ? undefined
738
- : await deriveFactionOwnershipAddress(game, 'fleet', attacker.address);
739
- const attackerFaction = attacker.npcFactionId === 0
740
- ? undefined
741
- : await deriveFactionAccountAddress(game, attacker.npcFactionId);
742
729
  const requiresNpcEconomy = attacker.npcFactionId > 0 &&
743
730
  probeRelations.dynamicCaptureEnabled &&
744
731
  probeRelations.nemesisActive;
@@ -762,8 +749,6 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
762
749
  character,
763
750
  regionTracker,
764
751
  crewBindingAddress,
765
- ...(attackerOwnership === undefined ? [] : [attackerOwnership]),
766
- ...(attackerFaction === undefined ? [] : [attackerFaction]),
767
752
  ...(factionEconomicsConfig === undefined ? [] : [factionEconomicsConfig]),
768
753
  ...(captorTreasury === undefined ? [] : [captorTreasury]),
769
754
  ];
@@ -799,7 +784,8 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
799
784
  if (ownership === undefined && relations.dynamicCaptureEnabled) {
800
785
  fail(`Target Starbase ${target.address} requires canonical FactionOwnership while dynamic capture is enabled. Refresh Starbase ownership and retry.`, ownershipAddress);
801
786
  }
802
- const legacyOwner = starbaseFactionId(target.starbase.owner);
787
+ // KingSystemTracker records an unaligned owner as null.
788
+ const legacyOwner = factionValue(target.starbase.owner) || null;
803
789
  if (ownership !== undefined &&
804
790
  (ownership.game !== game ||
805
791
  ownership.asset.kind !== 'starbase' ||
@@ -844,32 +830,10 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
844
830
  const crewBinding = crewBindingAccount === undefined ? undefined : crewBindingAddress;
845
831
  if (crewBindingAccount !== undefined) {
846
832
  const data = fleetCrewBindingAccountDefinition.decode(crewBindingAccount);
847
- if (data.fleet !== attacker.address ||
848
- data.ownerProfile !== attacker.ownerProfile.address) {
833
+ if (!matchesFleetCrewBindingIdentity(data, attacker.address, attacker.ownerProfile.address)) {
849
834
  fail(`FleetCrewBinding ${crewBindingAddress} does not belong to Fleet ${attacker.address} and Profile ${attacker.ownerProfile.address}. Refresh the Fleet crew relationship and retry.`, crewBindingAddress);
850
835
  }
851
836
  }
852
- const attackerNpc = {};
853
- let attackerOwnershipAccount;
854
- let attackerFactionAccount;
855
- if (attackerOwnership !== undefined && attackerFaction !== undefined) {
856
- attackerOwnershipAccount = requireAccount(current.get(attackerOwnership), attackerOwnership, `NPC Fleet ${attacker.address} has no canonical FactionOwnership. Refresh the Fleet faction relationship and retry.`);
857
- const npcOwnership = factionOwnershipAccountDefinition.decode(attackerOwnershipAccount);
858
- if (npcOwnership.game !== game ||
859
- npcOwnership.asset.kind !== 'fleet' ||
860
- npcOwnership.asset.fleet !== attacker.address ||
861
- npcOwnership.controllingFactionId !== attacker.npcFactionId) {
862
- fail(`NPC Fleet ${attacker.address} has no matching canonical FactionOwnership for faction ${String(attacker.npcFactionId)}. Refresh the Fleet and faction ownership relationship before retrying.`, attackerOwnership);
863
- }
864
- attackerFactionAccount = requireAccount(current.get(attackerFaction), attackerFaction, `Faction ${attackerFaction} is missing for NPC Fleet ${attacker.address}. Refresh the faction registry relationship and retry.`);
865
- const npcFaction = factionAccountDefinition.decode(attackerFactionAccount);
866
- if (npcFaction.game !== game ||
867
- npcFaction.factionId !== attacker.npcFactionId) {
868
- fail(`Faction ${attackerFaction} does not match NPC Fleet ${attacker.address}'s Game and faction id. Refresh the faction registry relationship before retrying.`, attackerFaction);
869
- }
870
- attackerNpc.ownership = attackerOwnership;
871
- attackerNpc.factionAccount = attackerFaction;
872
- }
873
837
  let economicsAccount;
874
838
  let treasuryAccount;
875
839
  if (factionEconomicsConfig !== undefined && captorTreasury !== undefined) {
@@ -928,21 +892,13 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
928
892
  'The optional Fleet crew binding remains unchanged.',
929
893
  ],
930
894
  ]),
931
- ...(attackerOwnershipAccount === undefined
895
+ ...(attackerNpc.ownership === undefined
932
896
  ? []
933
- : [
934
- [
935
- attackerOwnershipAccount,
936
- 'NPC Fleet ownership remains unchanged.',
937
- ],
938
- ]),
939
- ...(attackerFactionAccount === undefined
897
+ : [[attackerNpc.ownership, 'NPC Fleet ownership remains unchanged.']]),
898
+ ...(attackerNpc.faction === undefined
940
899
  ? []
941
900
  : [
942
- [
943
- attackerFactionAccount,
944
- 'The NPC faction account remains unchanged.',
945
- ],
901
+ [attackerNpc.faction, 'The NPC faction account remains unchanged.'],
946
902
  ]),
947
903
  ...(economicsAccount === undefined
948
904
  ? []
@@ -969,20 +925,32 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
969
925
  ]
970
926
  : []),
971
927
  ];
928
+ const runtime = await resolveActionRuntime(ctx, {
929
+ mode: 'starbase-attack',
930
+ game,
931
+ system: target.address,
932
+ starbaseSeqId: starSystemAccountDefinition.decode(systemAccount).sequenceId,
933
+ character,
934
+ });
972
935
  const description = `Attack with Fleet ${attacker.name} (${attacker.address}) against the shared Starbase at ${target.name} (${target.address}) using ${stance.ammoUsage} ammunition; range, capture-cost debit outcome, randomness, rewards, Loot, damage, and final admissibility remain chain-authoritative.`;
973
936
  return createPlan({
974
937
  kind: 'combat.attack-starbase',
975
- preconditions: [...statePreconditions, ...absencePreconditions],
938
+ preconditions: [
939
+ ...statePreconditions,
940
+ ...absencePreconditions,
941
+ ...runtime.guards,
942
+ ],
976
943
  steps: [
977
944
  {
978
- describes: description,
945
+ describes: `${description} ${runtime.description}`,
979
946
  instruction: adaptAttackStarbaseInstruction({
980
- ...(attackerNpc.factionAccount === undefined
947
+ ...runtime.accounts,
948
+ ...(attackerNpc.faction === undefined
981
949
  ? {}
982
- : { attackerFactionAccount: attackerNpc.factionAccount }),
950
+ : { attackerFactionAccount: attackerNpc.faction.address }),
983
951
  ...(attackerNpc.ownership === undefined
984
952
  ? {}
985
- : { attackerFleetOwnership: attackerNpc.ownership }),
953
+ : { attackerFleetOwnership: attackerNpc.ownership.address }),
986
954
  authorization: options.authorization,
987
955
  ...(captorTreasury === undefined ? {} : { captorTreasury }),
988
956
  character,
@@ -1009,7 +977,7 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
1009
977
  signers: [options.authorization.authority, options.loot],
1010
978
  },
1011
979
  ],
1012
- summary: description,
980
+ summary: `${description} ${runtime.description}`,
1013
981
  });
1014
982
  }
1015
983
  function lootSnapshotFingerprint(loot) {
@@ -1025,7 +993,7 @@ function lootSnapshotFingerprint(loot) {
1025
993
  item.exclusivityUnlockAtUnixSeconds,
1026
994
  item.rewardReclaimAtUnixSeconds,
1027
995
  item.inventory.sequenceId,
1028
- item.inventory.storageCostRaw,
996
+ item.inventory.usedStorageUnitsRaw,
1029
997
  ...item.inventory.items
1030
998
  .map(({ cargo, quantityRaw }) => `${String(cargo.id)}:${String(quantityRaw)}`)
1031
999
  .sort(),
@@ -1045,7 +1013,7 @@ function rawLootFingerprint(address, loot) {
1045
1013
  item.exclusivityUnlockAtUnixSeconds,
1046
1014
  item.rewardReclaimAtUnixSeconds,
1047
1015
  item.inventory.sequenceId,
1048
- item.inventory.storageCostRaw,
1016
+ item.inventory.usedStorageUnitsRaw,
1049
1017
  ...item.inventory.amounts
1050
1018
  .map(({ amount, cargoId }) => `${String(cargoId)}:${String(amount)}`)
1051
1019
  .sort(),