@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
@@ -0,0 +1,93 @@
1
+ import { AccountRole } from '@solana/kit';
2
+ import { SageSdkError } from '../../client/errors.js';
3
+ import { DEPOSIT_CARGO_TO_GAME_DISCRIMINATOR, WITHDRAW_CARGO_FROM_GAME_DISCRIMINATOR, ADD_SHIP_ESCROW_DISCRIMINATOR, getDepositCargoToGameInstructionDataDecoder, getWithdrawCargoFromGameInstructionDataDecoder, getAddShipEscrowInstructionDataDecoder, CANCEL_CRAFTING_PROCESS_DISCRIMINATOR, getCancelCraftingProcessInstructionDataDecoder, SAGE_PROGRAM_ADDRESS, } from '../c4/runtime-bindings.js';
4
+ // Pure instruction metadata keeps the Plan factory independent of generated data decoders.
5
+ function routeFor(instruction) {
6
+ if (instruction.programAddress !== SAGE_PROGRAM_ADDRESS)
7
+ return undefined;
8
+ const routes = [
9
+ {
10
+ discriminator: CANCEL_CRAFTING_PROCESS_DISCRIMINATOR,
11
+ decoder: 0,
12
+ count: 11,
13
+ game: 5,
14
+ system: 6,
15
+ css: false,
16
+ planner: 'planCancelCraftingProcess',
17
+ },
18
+ {
19
+ discriminator: DEPOSIT_CARGO_TO_GAME_DISCRIMINATOR,
20
+ decoder: 1,
21
+ count: 13,
22
+ game: 8,
23
+ system: 4,
24
+ css: true,
25
+ planner: 'planDepositCargoToGame',
26
+ },
27
+ {
28
+ discriminator: WITHDRAW_CARGO_FROM_GAME_DISCRIMINATOR,
29
+ decoder: 2,
30
+ count: 11,
31
+ game: 6,
32
+ system: 4,
33
+ css: false,
34
+ planner: 'planWithdrawCargoFromGame',
35
+ },
36
+ {
37
+ discriminator: ADD_SHIP_ESCROW_DISCRIMINATOR,
38
+ decoder: 3,
39
+ count: 14,
40
+ game: 11,
41
+ system: 7,
42
+ css: true,
43
+ planner: 'planDepositShipsToGame',
44
+ },
45
+ ];
46
+ return routes.find(({ discriminator }) => discriminator.every((byte, index) => instruction.data?.[index] === byte));
47
+ }
48
+ function fail(planner) {
49
+ throw new SageSdkError('ACTION_PRECONDITION_FAILED', `This Starbase action has an unsupported instruction layout or lacks its matching finite Starbase System safeguard. Recreate it with ${planner}; an exact account hash does not replace this safeguard.`);
50
+ }
51
+ /** Binds required guards to actual instruction accounts without pulling byte decoders into every action entry. */
52
+ export function validateStarbaseSystemGuards(steps, preconditions) {
53
+ for (const { instruction } of steps) {
54
+ const route = routeFor(instruction);
55
+ if (!route)
56
+ continue;
57
+ const accounts = instruction.accounts;
58
+ if (accounts?.length !== route.count ||
59
+ accounts[route.game].role !== AccountRole.READONLY ||
60
+ accounts[route.system].role !== AccountRole.READONLY ||
61
+ !preconditions.some((guard) => guard.kind === 'starbase-system' &&
62
+ guard.address === accounts[route.system].address &&
63
+ guard.game === accounts[route.game].address &&
64
+ (!route.css || guard.requireCss === true)))
65
+ fail(route.planner);
66
+ }
67
+ }
68
+ /** Hydration and assembly additionally verify exact bytes with the pinned generated decoders. */
69
+ export function validateStarbaseSystemInstructions(steps, preconditions) {
70
+ validateStarbaseSystemGuards(steps, preconditions);
71
+ const decoders = [
72
+ getCancelCraftingProcessInstructionDataDecoder,
73
+ getDepositCargoToGameInstructionDataDecoder,
74
+ getWithdrawCargoFromGameInstructionDataDecoder,
75
+ getAddShipEscrowInstructionDataDecoder,
76
+ ];
77
+ for (const { instruction } of steps) {
78
+ const route = routeFor(instruction);
79
+ if (!route)
80
+ continue;
81
+ let exactData = false;
82
+ try {
83
+ const [, size] = decoders[route.decoder]().read(instruction.data, 0);
84
+ exactData = size === instruction.data.length;
85
+ }
86
+ catch {
87
+ // Truncated instruction arguments are not a supported route.
88
+ }
89
+ if (!exactData)
90
+ fail(route.planner);
91
+ }
92
+ }
93
+ //# sourceMappingURL=starbase-system-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starbase-system-guard.js","sourceRoot":"","sources":["../../../src/internal/planning/starbase-system-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { Address } from '@solana/kit';
2
+ import type { RawAccount } from '../../client/contracts.js';
3
+ type StarbaseSystemIntent = {
4
+ readonly address: Address;
5
+ readonly game: Address;
6
+ readonly starbaseSequenceId: bigint;
7
+ readonly requireCss?: boolean;
8
+ };
9
+ /** Checks finite System/Starbase identity and the action's station policy.
10
+ * `staleStarbaseGuidance` lets a planner add action-specific advice for a
11
+ * replaced Starbase; execution and other actions use the neutral default.
12
+ */
13
+ export declare function validateStarbaseSystem(account: RawAccount, intent: StarbaseSystemIntent, staleStarbaseGuidance?: string): Promise<void>;
14
+ export {};
15
+ //# sourceMappingURL=starbase-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starbase-system.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/starbase-system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAO5D,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAUF;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,oBAAoB,EAC5B,qBAAqB,SAA0E,GAC9F,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
@@ -0,0 +1,25 @@
1
+ import { SageSdkError } from '../../client/errors.js';
2
+ import { deriveStarSystemAddress, starSystemAccountDefinition, } from '../c4/world.js';
3
+ function fail(address, reason) {
4
+ throw new SageSdkError('ACTION_PRECONDITION_FAILED', `${reason} Refresh the Star System and recreate the action Plan for its current Starbase.`, { address });
5
+ }
6
+ /** Checks finite System/Starbase identity and the action's station policy.
7
+ * `staleStarbaseGuidance` lets a planner add action-specific advice for a
8
+ * replaced Starbase; execution and other actions use the neutral default.
9
+ */
10
+ export async function validateStarbaseSystem(account, intent, staleStarbaseGuidance = 'The Starbase was destroyed or replaced after this action was planned.') {
11
+ if (account.address !== intent.address || account.executable)
12
+ fail(intent.address, 'The Star System has an unexpected address or is executable instead of account state.');
13
+ const system = starSystemAccountDefinition.decode(account);
14
+ if (system.game !== intent.game ||
15
+ (await deriveStarSystemAddress(intent.game, system.systemId)) !==
16
+ intent.address)
17
+ fail(intent.address, `Star System ${intent.address} does not match the configured Game or canonical system-id PDA.`);
18
+ if (system.sequenceId !== intent.starbaseSequenceId)
19
+ fail(intent.address, `The Starbase sequence is stale at ${intent.starbaseSequenceId}, while Star System ${intent.address} is at sequence ${system.sequenceId}. ${staleStarbaseGuidance}`);
20
+ if (system.starbase === undefined)
21
+ fail(intent.address, `Star System ${intent.address} does not have an active Starbase.`);
22
+ if (intent.requireCss && system.starbase.maxLevel.kind !== 'css')
23
+ fail(intent.address, 'This wallet deposit requires a Central Space Station.');
24
+ }
25
+ //# sourceMappingURL=starbase-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starbase-system.js","sourceRoot":"","sources":["../../../src/internal/planning/starbase-system.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,gBAAgB,CAAC;AASxB,SAAS,IAAI,CAAC,OAAgB,EAAE,MAAc;IAC5C,MAAM,IAAI,YAAY,CACpB,4BAA4B,EAC5B,GAAG,MAAM,iFAAiF,EAC1F,EAAE,OAAO,EAAE,CACZ,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAmB,EACnB,MAA4B,EAC5B,qBAAqB,GAAG,uEAAuE;IAE/F,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU;QAC1D,IAAI,CACF,MAAM,CAAC,OAAO,EACd,sFAAsF,CACvF,CAAC;IACJ,MAAM,MAAM,GAAG,2BAA2B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,IACE,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;QAC3B,CAAC,MAAM,uBAAuB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3D,MAAM,CAAC,OAAO;QAEhB,IAAI,CACF,MAAM,CAAC,OAAO,EACd,eAAe,MAAM,CAAC,OAAO,iEAAiE,CAC/F,CAAC;IACJ,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,kBAAkB;QACjD,IAAI,CACF,MAAM,CAAC,OAAO,EACd,qCAAqC,MAAM,CAAC,kBAAkB,uBAAuB,MAAM,CAAC,OAAO,mBAAmB,MAAM,CAAC,UAAU,KAAK,qBAAqB,EAAE,CACpK,CAAC;IACJ,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;QAC/B,IAAI,CACF,MAAM,CAAC,OAAO,EACd,eAAe,MAAM,CAAC,OAAO,oCAAoC,CAClE,CAAC;IACJ,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK;QAC9D,IAAI,CACF,MAAM,CAAC,OAAO,EACd,uDAAuD,CACxD,CAAC;AACN,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { RawAccount } from '../../client/contracts.js';
2
+ /** Validate the finite original Token Mint facts used by wallet transfers. */
3
+ export declare function validateTokenMint(account: RawAccount): number;
4
+ //# sourceMappingURL=token-mint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-mint.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/token-mint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAG5D,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CA2B7D"}
@@ -0,0 +1,15 @@
1
+ import { SageSdkError } from '../../client/errors.js';
2
+ /** Validate the finite original Token Mint facts used by wallet transfers. */
3
+ export function validateTokenMint(account) {
4
+ if (account.executable ||
5
+ account.owner !== 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' ||
6
+ account.data.length !== 82)
7
+ throw new SageSdkError('ACTION_PRECONDITION_FAILED', `Mint ${account.address} must be a non-executable original Token Mint with exactly 82 bytes. Refresh the mint or select a supported original Token mint; Token-2022 is unsupported.`, { address: account.address });
8
+ const view = new DataView(account.data.buffer, account.data.byteOffset, account.data.byteLength);
9
+ if (view.getUint32(0, true) > 1 ||
10
+ view.getUint32(46, true) > 1 ||
11
+ view.getUint8(45) !== 1)
12
+ throw new SageSdkError('ACTION_PRECONDITION_FAILED', `Mint ${account.address} must be initialized with valid optional authority fields. Refresh the mint and prepare a new Plan.`, { address: account.address });
13
+ return view.getUint8(44);
14
+ }
15
+ //# sourceMappingURL=token-mint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-mint.js","sourceRoot":"","sources":["../../../src/internal/planning/token-mint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,8EAA8E;AAC9E,MAAM,UAAU,iBAAiB,CAAC,OAAmB;IACnD,IACE,OAAO,CAAC,UAAU;QAClB,OAAO,CAAC,KAAK,KAAK,6CAA6C;QAC/D,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE;QAE1B,MAAM,IAAI,YAAY,CACpB,4BAA4B,EAC5B,QAAQ,OAAO,CAAC,OAAO,6JAA6J,EACpL,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAC7B,CAAC;IACJ,MAAM,IAAI,GAAG,IAAI,QAAQ,CACvB,OAAO,CAAC,IAAI,CAAC,MAAM,EACnB,OAAO,CAAC,IAAI,CAAC,UAAU,EACvB,OAAO,CAAC,IAAI,CAAC,UAAU,CACxB,CAAC;IACF,IACE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC;QAC5B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC;QAEvB,MAAM,IAAI,YAAY,CACpB,4BAA4B,EAC5B,QAAQ,OAAO,CAAC,OAAO,qGAAqG,EAC5H,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAC7B,CAAC;IACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { type Address } from '@solana/kit';
2
+ import { type PlanAuthorization, type AddressOnlyInstruction } from './authorization-adapter.js';
3
+ /** Address-only adapter for one directional Faction Market trade. */
4
+ export declare function adaptTradeFactionMarketInstruction(input: {
5
+ readonly authorization: PlanAuthorization;
6
+ readonly character: Address;
7
+ readonly game: Address;
8
+ readonly system: Address;
9
+ readonly starbasePlayer: Address;
10
+ readonly fleet: Address;
11
+ readonly factionMarket: Address;
12
+ readonly treasury: Address;
13
+ readonly factionStanding?: Address;
14
+ readonly factionConfig?: Address;
15
+ readonly factionEpochMeter?: Address;
16
+ readonly offerIndex: number;
17
+ readonly quantity: bigint;
18
+ readonly playerBuys: boolean;
19
+ }): AddressOnlyInstruction;
20
+ //# sourceMappingURL=trade-faction-market.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trade-faction-market.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/trade-faction-market.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EAGb,MAAM,aAAa,CAAC;AAMrB,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC5B,MAAM,4BAA4B,CAAC;AA8CpC,qEAAqE;AACrE,wBAAgB,kCAAkC,CAAC,KAAK,EAAE;IACxD,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B,GAAG,sBAAsB,CAyBzB"}
@@ -0,0 +1,56 @@
1
+ import { AccountRole, } from '@solana/kit';
2
+ import { PLAYER_PROFILE_PROGRAM_ADDRESS, SAGE_PROGRAM_ADDRESS, getTradeFactionMarketInstructionDataEncoder, } from '../c4/runtime-bindings.js';
3
+ import { validatePlanAuthorization, } from './authorization-adapter.js';
4
+ const readonlyAccount = (address) => ({
5
+ address,
6
+ role: AccountRole.READONLY,
7
+ });
8
+ const writableAccount = (address) => ({
9
+ address,
10
+ role: AccountRole.WRITABLE,
11
+ });
12
+ const optionalReadonlyAccount = (address, program) => readonlyAccount(address ?? program);
13
+ const optionalWritableAccount = (address, program) => address === undefined ? readonlyAccount(program) : writableAccount(address);
14
+ function authorizationAccounts(input, program) {
15
+ validatePlanAuthorization(input.authorization);
16
+ return [
17
+ {
18
+ address: input.authorization.authority,
19
+ role: AccountRole.READONLY_SIGNER,
20
+ },
21
+ writableAccount(input.authorization.profile),
22
+ readonlyAccount(input.authorization.certificate ?? program),
23
+ readonlyAccount(PLAYER_PROFILE_PROGRAM_ADDRESS),
24
+ ];
25
+ }
26
+ function createAddressOnlyInstruction(programAddress, accounts, data) {
27
+ return Object.freeze({
28
+ programAddress,
29
+ accounts: Object.freeze(accounts.map((account) => Object.freeze(account))),
30
+ data,
31
+ });
32
+ }
33
+ /** Address-only adapter for one directional Faction Market trade. */
34
+ export function adaptTradeFactionMarketInstruction(input) {
35
+ const programAddress = SAGE_PROGRAM_ADDRESS;
36
+ return createAddressOnlyInstruction(programAddress, [
37
+ ...authorizationAccounts(input, programAddress),
38
+ writableAccount(input.character),
39
+ readonlyAccount(input.game),
40
+ readonlyAccount(input.system),
41
+ writableAccount(input.starbasePlayer),
42
+ writableAccount(input.fleet),
43
+ writableAccount(input.factionMarket),
44
+ writableAccount(input.treasury),
45
+ readonlyAccount('11111111111111111111111111111111'),
46
+ optionalWritableAccount(input.factionStanding, programAddress),
47
+ optionalReadonlyAccount(input.factionConfig, programAddress),
48
+ optionalWritableAccount(input.factionEpochMeter, programAddress),
49
+ ], getTradeFactionMarketInstructionDataEncoder().encode({
50
+ keyIndex: input.authorization.keyIndex,
51
+ offerIndex: input.offerIndex,
52
+ quantity: input.quantity,
53
+ playerBuys: input.playerBuys,
54
+ }));
55
+ }
56
+ //# sourceMappingURL=trade-faction-market.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trade-faction-market.js","sourceRoot":"","sources":["../../../src/internal/planning/trade-faction-market.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,GAIZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,8BAA8B,EAC9B,oBAAoB,EACpB,2CAA2C,GAC5C,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,yBAAyB,GAG1B,MAAM,4BAA4B,CAAC;AAEpC,MAAM,eAAe,GAAG,CAAC,OAAgB,EAAe,EAAE,CAAC,CAAC;IAC1D,OAAO;IACP,IAAI,EAAE,WAAW,CAAC,QAAQ;CAC3B,CAAC,CAAC;AACH,MAAM,eAAe,GAAG,CAAC,OAAgB,EAAe,EAAE,CAAC,CAAC;IAC1D,OAAO;IACP,IAAI,EAAE,WAAW,CAAC,QAAQ;CAC3B,CAAC,CAAC;AACH,MAAM,uBAAuB,GAAG,CAC9B,OAA4B,EAC5B,OAAgB,EAChB,EAAE,CAAC,eAAe,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC;AACzC,MAAM,uBAAuB,GAAG,CAC9B,OAA4B,EAC5B,OAAgB,EAChB,EAAE,CACF,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAC9E,SAAS,qBAAqB,CAC5B,KAA2C,EAC3C,OAAgB;IAEhB,yBAAyB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC/C,OAAO;QACL;YACE,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,SAAS;YACtC,IAAI,EAAE,WAAW,CAAC,eAAe;SAClC;QACD,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;QAC5C,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,IAAI,OAAO,CAAC;QAC3D,eAAe,CAAC,8BAA8B,CAAC;KAChD,CAAC;AACJ,CAAC;AACD,SAAS,4BAA4B,CACnC,cAAuB,EACvB,QAAgC,EAChC,IAAwB;IAExB,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,cAAc;QACd,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1E,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,kCAAkC,CAAC,KAelD;IACC,MAAM,cAAc,GAAG,oBAAoB,CAAC;IAC5C,OAAO,4BAA4B,CACjC,cAAc,EACd;QACE,GAAG,qBAAqB,CAAC,KAAK,EAAE,cAAc,CAAC;QAC/C,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC;QAChC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3B,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;QAC7B,eAAe,CAAC,KAAK,CAAC,cAAc,CAAC;QACrC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5B,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC;QACpC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC/B,eAAe,CAAC,kCAA6C,CAAC;QAC9D,uBAAuB,CAAC,KAAK,CAAC,eAAe,EAAE,cAAc,CAAC;QAC9D,uBAAuB,CAAC,KAAK,CAAC,aAAa,EAAE,cAAc,CAAC;QAC5D,uBAAuB,CAAC,KAAK,CAAC,iBAAiB,EAAE,cAAc,CAAC;KACjE,EACD,2CAA2C,EAAE,CAAC,MAAM,CAAC;QACnD,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ;QACtC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { Address } from '@solana/kit';
2
+ import type { RawAccount } from '../../client/contracts.js';
3
+ /** Rejects with the calling planner's wording and remedy. */
4
+ type Fail = (message: string, address: Address) => never;
5
+ /** Requires the fresh Profile, Character, Starbase Player and System of a
6
+ * wallet transfer to be decodable account state of the configured Game and
7
+ * authorization Profile, and the System to be canonical with an active
8
+ * Starbase (a Central Space Station when `requireCss`). Returns the decoded
9
+ * Profile and Starbase Player and the matching System guard. */
10
+ export declare function validateWalletStarbase(accounts: {
11
+ readonly profile: RawAccount;
12
+ readonly character: RawAccount;
13
+ readonly player: RawAccount;
14
+ readonly system: RawAccount;
15
+ }, facts: {
16
+ readonly game: Address;
17
+ readonly profile: Address;
18
+ readonly character: Address;
19
+ readonly system: Address;
20
+ readonly requireCss: boolean;
21
+ }, fail: Fail): Promise<{
22
+ playerData: Readonly<import("../c4/starbase.js").StarbasePlayerAccountData>;
23
+ profileData: Readonly<import("../c4/identity.js").ProfileAccountData>;
24
+ systemGuard: {
25
+ describes: string;
26
+ requireCss?: true;
27
+ kind: "starbase-system";
28
+ address: import("../../client/contracts.js").Address;
29
+ game: Address;
30
+ starbaseSequenceId: bigint;
31
+ };
32
+ }>;
33
+ export {};
34
+ //# sourceMappingURL=wallet-starbase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-starbase.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/wallet-starbase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAU5D,6DAA6D;AAC7D,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC;AAEzD;;;;gEAIgE;AAChE,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE;IACR,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B,EACD,KAAK,EAAE;IACL,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B,EACD,IAAI,EAAE,IAAI;;;;;;;;;;;GAoCX"}
@@ -0,0 +1,39 @@
1
+ import { characterAccountDefinition } from '../c4/character.js';
2
+ import { profileAccountDefinition } from '../c4/identity.js';
3
+ import { starbasePlayerAccountDefinition } from '../c4/starbase.js';
4
+ import { deriveStarSystemAddress, starSystemAccountDefinition, } from '../c4/world.js';
5
+ import { validateStarbaseSystem } from './starbase-system.js';
6
+ /** Requires the fresh Profile, Character, Starbase Player and System of a
7
+ * wallet transfer to be decodable account state of the configured Game and
8
+ * authorization Profile, and the System to be canonical with an active
9
+ * Starbase (a Central Space Station when `requireCss`). Returns the decoded
10
+ * Profile and Starbase Player and the matching System guard. */
11
+ export async function validateWalletStarbase(accounts, facts, fail) {
12
+ for (const account of Object.values(accounts))
13
+ if (account.executable)
14
+ fail('A gameplay prerequisite is executable rather than account state.', account.address);
15
+ const profileData = profileAccountDefinition.decode(accounts.profile);
16
+ const characterData = characterAccountDefinition.decode(accounts.character);
17
+ const playerData = starbasePlayerAccountDefinition.decode(accounts.player);
18
+ const systemData = starSystemAccountDefinition.decode(accounts.system);
19
+ if (characterData.game !== facts.game ||
20
+ characterData.playerProfile !== facts.profile ||
21
+ playerData.playerProfile !== facts.profile ||
22
+ playerData.character !== facts.character ||
23
+ playerData.system !== facts.system ||
24
+ systemData.game !== facts.game ||
25
+ (await deriveStarSystemAddress(facts.game, systemData.systemId)) !==
26
+ facts.system)
27
+ fail('Fresh Character, Starbase Player and System must belong to the configured Game and authorized Profile.', accounts.player.address);
28
+ const systemGuard = {
29
+ kind: 'starbase-system',
30
+ address: accounts.system.address,
31
+ game: facts.game,
32
+ starbaseSequenceId: systemData.sequenceId,
33
+ ...(facts.requireCss ? { requireCss: true } : {}),
34
+ describes: `The canonical Star System retains its active Starbase and generation${facts.requireCss ? ' as a Central Space Station' : ''}; unrelated shared activity may change.`,
35
+ };
36
+ await validateStarbaseSystem(accounts.system, systemGuard);
37
+ return { playerData, profileData, systemGuard };
38
+ }
39
+ //# sourceMappingURL=wallet-starbase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-starbase.js","sourceRoot":"","sources":["../../../src/internal/planning/wallet-starbase.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EACL,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAK9D;;;;gEAIgE;AAChE,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,QAKC,EACD,KAMC,EACD,IAAU;IAEV,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC3C,IAAI,OAAO,CAAC,UAAU;YACpB,IAAI,CACF,kEAAkE,EAClE,OAAO,CAAC,OAAO,CAChB,CAAC;IACN,MAAM,WAAW,GAAG,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,0BAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,+BAA+B,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,2BAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvE,IACE,aAAa,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;QACjC,aAAa,CAAC,aAAa,KAAK,KAAK,CAAC,OAAO;QAC7C,UAAU,CAAC,aAAa,KAAK,KAAK,CAAC,OAAO;QAC1C,UAAU,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;QACxC,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAClC,UAAU,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;QAC9B,CAAC,MAAM,uBAAuB,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC9D,KAAK,CAAC,MAAM;QAEd,IAAI,CACF,wGAAwG,EACxG,QAAQ,CAAC,MAAM,CAAC,OAAO,CACxB,CAAC;IACJ,MAAM,WAAW,GAAG;QAClB,IAAI,EAAE,iBAA0B;QAChC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO;QAChC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,kBAAkB,EAAE,UAAU,CAAC,UAAU;QACzC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,SAAS,EAAE,uEAAuE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,yCAAyC;KACjL,CAAC;IACF,MAAM,sBAAsB,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAClD,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { Address, RawAccount, SageContext } from '../../client/contracts.js';
2
+ import { readContextRawAccounts } from '../../client/reconciliation.js';
3
+ /** Finite eligibility facts only; live XP banks and accrual never become hashes. */
4
+ export interface XpRuntimeIntent {
5
+ readonly game: Address;
6
+ readonly gameVersion: 2;
7
+ readonly character?: Address;
8
+ readonly profile?: Address;
9
+ readonly structure?: Address;
10
+ }
11
+ export interface XpRuntimeAccounts {
12
+ readonly xpBudget?: Address;
13
+ readonly xpBudgetConfig?: Address;
14
+ readonly xpAccrual?: Address;
15
+ }
16
+ /** Canonical current-runtime accounts required while creating a Character. */
17
+ export interface CharacterRegistrationXpRuntime {
18
+ readonly xpBudget: Address;
19
+ readonly xpBudgetConfig: Address;
20
+ readonly configAccount: RawAccount;
21
+ readonly budgetLamports: bigint;
22
+ }
23
+ /** Resolve creation targets after the caller has freshly validated Game 2 and its initializer. */
24
+ export declare function resolveCharacterRegistrationXpRuntime(ctx: SageContext, input: {
25
+ readonly game: Address;
26
+ readonly character: Address;
27
+ }, options?: Parameters<typeof readContextRawAccounts>[2]): Promise<CharacterRegistrationXpRuntime>;
28
+ /** Resolve existing canonical XP accounts without migrating or creating anything.
29
+ * A supplied Game-version map belongs to one fresh validation pass, never a context.
30
+ */
31
+ export declare function resolveXpRuntime(ctx: SageContext, input: Omit<XpRuntimeIntent, 'gameVersion'>, freshGameVersions?: Map<Address, number>, options?: Parameters<typeof readContextRawAccounts>[2]): Promise<{
32
+ readonly gameVersion: 2;
33
+ readonly intent: XpRuntimeIntent;
34
+ readonly accounts: XpRuntimeAccounts;
35
+ }>;
36
+ //# sourceMappingURL=xp-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xp-runtime.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/xp-runtime.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,OAAO,EACP,UAAU,EACV,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAGxE,oFAAoF;AACpF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,8EAA8E;AAC9E,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAoED,kGAAkG;AAClG,wBAAsB,qCAAqC,CACzD,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAAE,EAC9D,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,GACrD,OAAO,CAAC,8BAA8B,CAAC,CAiCzC;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,EAC3C,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,EACxC,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC,CAAC,GACrD,OAAO,CAAC;IACT,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC,CAAC,CAgGD"}
@@ -0,0 +1,126 @@
1
+ import { findCharacterPda } from '../c4/character.js';
2
+ import { getAddressEncoder, getProgramDerivedAddress, } from '@solana/kit';
3
+ import { CAREER_XP_BUDGET_DISCRIMINATOR, XP_BUDGET_CONFIG_DISCRIMINATOR, STRUCTURE_XP_ACCRUAL_DISCRIMINATOR, SAGE_PROGRAM_ADDRESS, getCareerXpBudgetDecoder, getXpBudgetConfigDecoder, getStructureXpAccrualDecoder, } from '../c4/runtime-bindings.js';
4
+ import { SageSdkError } from '../../client/errors.js';
5
+ import { readContextRawAccounts } from '../../client/reconciliation.js';
6
+ import { readFreshGameRuntimeVersion } from '../../registry/xp-runtime.js';
7
+ function fail(address, reason) {
8
+ throw new SageSdkError('ACTION_PRECONDITION_FAILED', `XP runtime account ${address} ${reason}. Refresh the account and prepare a new Plan; use the game client or operator's supported migration flow if XP is not initialized.`, { address });
9
+ }
10
+ function decode(account, address, decoder, discriminator) {
11
+ if (!account ||
12
+ account.address !== address ||
13
+ account.executable ||
14
+ account.owner !== SAGE_PROGRAM_ADDRESS ||
15
+ account.data.length !== decoder.fixedSize ||
16
+ !discriminator.every((byte, index) => account.data[index] === byte))
17
+ fail(address, 'is missing or has unsupported ownership, identity or layout');
18
+ // All XP codecs are fixed-size structs of integers, addresses and fixed arrays.
19
+ // Exact size and discriminator are checked before decoding provider-owned bytes.
20
+ return decoder.decode(account.data);
21
+ }
22
+ function validateBinding(value, address, game, bump, version) {
23
+ if (value.version !== version ||
24
+ value.bump !== bump ||
25
+ value.gameId !== game ||
26
+ value.reserved.some((byte) => byte !== 0))
27
+ fail(address, 'has an unsupported schema or does not match its canonical Game binding');
28
+ }
29
+ function derive(seed, addresses) {
30
+ return getProgramDerivedAddress({
31
+ programAddress: SAGE_PROGRAM_ADDRESS,
32
+ // Literal seeds match dev-sage 0.53.0 generated source; no trailing NUL.
33
+ seeds: [
34
+ new TextEncoder().encode(seed),
35
+ ...addresses.map((address) => getAddressEncoder().encode(address)),
36
+ ],
37
+ });
38
+ }
39
+ /** Resolve creation targets after the caller has freshly validated Game 2 and its initializer. */
40
+ export async function resolveCharacterRegistrationXpRuntime(ctx, input, options) {
41
+ const [config, budget] = await Promise.all([
42
+ derive('XpBudgetConfig', [input.game]),
43
+ derive('CareerXpBudget', [input.game, input.character]),
44
+ ]);
45
+ const [configAccount, budgetAccount] = await readContextRawAccounts(ctx, [config[0], budget[0]], options);
46
+ const configValue = decode(configAccount, config[0], getXpBudgetConfigDecoder(), XP_BUDGET_CONFIG_DISCRIMINATOR);
47
+ validateBinding(configValue, config[0], input.game, config[1], 1);
48
+ if (budgetAccount !== undefined &&
49
+ (budgetAccount.executable ||
50
+ budgetAccount.owner !== '11111111111111111111111111111111' ||
51
+ budgetAccount.data.length !== 0))
52
+ fail(budget[0], 'already exists while its canonical Character is absent; reconcile the partial registration before retrying');
53
+ return {
54
+ xpBudget: budget[0],
55
+ xpBudgetConfig: config[0],
56
+ configAccount: configAccount,
57
+ budgetLamports: budgetAccount?.lamports ?? 0n,
58
+ };
59
+ }
60
+ /** Resolve existing canonical XP accounts without migrating or creating anything.
61
+ * A supplied Game-version map belongs to one fresh validation pass, never a context.
62
+ */
63
+ export async function resolveXpRuntime(ctx, input, freshGameVersions, options) {
64
+ const { game, character, structure, profile } = input;
65
+ if (profile !== undefined &&
66
+ character !== (await findCharacterPda(profile, game)))
67
+ fail(game, 'does not identify the canonical Character for the authorized Profile');
68
+ const gameVersion = freshGameVersions?.get(game) ??
69
+ (await readFreshGameRuntimeVersion(ctx, game, options));
70
+ freshGameVersions?.set(game, gameVersion);
71
+ if (gameVersion !== 2)
72
+ fail(game, gameVersion === 1
73
+ ? 'belongs to a migration-sealed Game'
74
+ : `uses unsupported Game runtime version ${gameVersion}`);
75
+ const intent = {
76
+ game,
77
+ gameVersion,
78
+ ...(profile === undefined ? {} : { profile }),
79
+ ...(character !== undefined ? { character } : {}),
80
+ ...(structure !== undefined ? { structure } : {}),
81
+ };
82
+ const config = character === undefined
83
+ ? undefined
84
+ : await derive('XpBudgetConfig', [game]);
85
+ const budget = character === undefined
86
+ ? undefined
87
+ : await derive('CareerXpBudget', [game, character]);
88
+ const accrual = structure === undefined
89
+ ? undefined
90
+ : await derive('StructureXpAccrual', [structure]);
91
+ const addresses = [
92
+ ...(config ? [config[0]] : []),
93
+ ...(budget ? [budget[0]] : []),
94
+ ...(accrual ? [accrual[0]] : []),
95
+ ];
96
+ const raw = addresses.length === 0
97
+ ? []
98
+ : await readContextRawAccounts(ctx, addresses, options);
99
+ const byAddress = new Map(addresses.map((address, index) => [address, raw[index]]));
100
+ if (config) {
101
+ const configValue = decode(byAddress.get(config[0]), config[0], getXpBudgetConfigDecoder(), XP_BUDGET_CONFIG_DISCRIMINATOR);
102
+ validateBinding(configValue, config[0], game, config[1], 1);
103
+ }
104
+ if (budget) {
105
+ const value = decode(byAddress.get(budget[0]), budget[0], getCareerXpBudgetDecoder(), CAREER_XP_BUDGET_DISCRIMINATOR);
106
+ validateBinding(value, budget[0], game, budget[1], 1);
107
+ if (value.characterId !== character || value.reconciledThresholdVersion < 1)
108
+ fail(budget[0], 'does not belong to this Character or has not completed XP reconciliation');
109
+ }
110
+ if (accrual) {
111
+ const value = decode(byAddress.get(accrual[0]), accrual[0], getStructureXpAccrualDecoder(), STRUCTURE_XP_ACCRUAL_DISCRIMINATOR);
112
+ validateBinding(value, accrual[0], game, accrual[1], 2);
113
+ if (value.structure !== structure)
114
+ fail(accrual[0], 'does not belong to this structure');
115
+ }
116
+ return {
117
+ gameVersion,
118
+ intent,
119
+ accounts: {
120
+ ...(config ? { xpBudgetConfig: config[0] } : {}),
121
+ ...(budget ? { xpBudget: budget[0] } : {}),
122
+ ...(accrual ? { xpAccrual: accrual[0] } : {}),
123
+ },
124
+ };
125
+ }
126
+ //# sourceMappingURL=xp-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xp-runtime.js","sourceRoot":"","sources":["../../../src/internal/planning/xp-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Address } from '@solana/kit';
2
+ /** System program identity, also used by C4 for stored absent-account addresses. */
3
+ export declare const SYSTEM_PROGRAM: Address;
4
+ //# sourceMappingURL=system-program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-program.d.ts","sourceRoot":"","sources":["../../src/internal/system-program.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,oFAAoF;AACpF,eAAO,MAAM,cAAc,EAAyC,OAAO,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** System program identity, also used by C4 for stored absent-account addresses. */
2
+ export const SYSTEM_PROGRAM = '11111111111111111111111111111111';
3
+ //# sourceMappingURL=system-program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-program.js","sourceRoot":"","sources":["../../src/internal/system-program.ts"],"names":[],"mappings":"AAEA,oFAAoF;AACpF,MAAM,CAAC,MAAM,cAAc,GAAG,kCAA6C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/loyalty/actions/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAazE,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAEL,KAAK,IAAI,EAEV,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC;;;;;;;;;;GAUG;AACH,MAAM,WAAW,4BAA4B;IAC3C,yEAAyE;IACzE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;CAC3C;AAuHD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,wBAAwB,EAC9B,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,IAAI,CAAC,CA2Hf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/loyalty/actions/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAczE,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAEL,KAAK,IAAI,EAEV,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC;;;;;;;;;;GAUG;AACH,MAAM,WAAW,4BAA4B;IAC3C,yEAAyE;IACzE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;CAC3C;AA8FD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,wBAAwB,EAC9B,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,IAAI,CAAC,CA4Hf"}
@@ -1,10 +1,11 @@
1
- import { getAddressEncoder, isAddress } from '@solana/kit';
1
+ import { getAddressEncoder } from '@solana/kit';
2
2
  import { InvalidActionInputError, SageSdkError } from '../../client/errors.js';
3
3
  import { readContextRawAccounts } from '../../client/reconciliation.js';
4
- import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/identity.js';
4
+ import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/character.js';
5
5
  import { deriveLoyaltyAtlasBankAddress, deriveLoyaltyFactionAddress, loyaltyAtlasBankAccountDefinition, } from '../../internal/c4/loyalty.js';
6
6
  import { requireGameAddress } from '../../internal/game-context.js';
7
- import { adaptClaimLoyaltyAtlasInstruction, validatePlanAuthorization, } from '../../internal/planning/authorization-adapter.js';
7
+ import { deriveInternalLoyaltyAtlasBankState } from '../../internal/loyalty-atlas-bank-state.js';
8
+ import { adaptClaimLoyaltyAtlasInstruction, readPlanAuthorization, } from '../../internal/planning/authorization-adapter.js';
8
9
  import { createPlan, } from '../../planning/index.js';
9
10
  function invalid(field, value, acceptedRange, remedy) {
10
11
  throw new InvalidActionInputError(field, value, acceptedRange, remedy);
@@ -26,24 +27,10 @@ function exactKeys(value, field, required, optional = []) {
26
27
  invalid(field, missing === undefined ? unexpected : `missing ${missing}`, `exactly the fields ${[...required, ...optional].join(', ')}`, `Remove unknown fields and provide every required ${field} field before retrying.`);
27
28
  }
28
29
  }
29
- function address(value, field) {
30
- if (typeof value !== 'string' || !isAddress(value)) {
31
- return invalid(field, value, 'one valid z.ink/Solana account address', `Set ${field} to the documented public account address before retrying.`);
32
- }
33
- return value;
34
- }
35
30
  function validateOptions(value) {
36
31
  const options = record(value, 'options');
37
32
  exactKeys(options, 'options', ['atUnixSeconds', 'authorization']);
38
- const authorizationRecord = record(options.authorization, 'authorization');
39
- exactKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
40
- const authorization = authorizationRecord;
41
- address(authorization.profile, 'authorization.profile');
42
- address(authorization.authority, 'authorization.authority');
43
- if (authorization.certificate !== undefined) {
44
- address(authorization.certificate, 'authorization.certificate');
45
- }
46
- validatePlanAuthorization(authorization);
33
+ const authorization = readPlanAuthorization(options.authorization);
47
34
  if (typeof options.atUnixSeconds !== 'bigint' || options.atUnixSeconds < 0n) {
48
35
  invalid('atUnixSeconds', options.atUnixSeconds, 'a non-negative bigint Unix timestamp', 'Provide the explicit current Unix timestamp used to evaluate Loyalty ATLAS Bank expiry before retrying.');
49
36
  }
@@ -102,11 +89,11 @@ export async function planClaimLoyaltyAtlas(ctx, bank, input) {
102
89
  if (bank.faction.address !== faction) {
103
90
  fail(`Loyalty ATLAS Bank ${bank.address} does not match canonical faction account ${faction}. Refresh the Bank and retry.`, bank.address);
104
91
  }
105
- if (bank.claimableAtlasRaw === 0n) {
92
+ const state = deriveInternalLoyaltyAtlasBankState(bank, options.atUnixSeconds);
93
+ if (state.kind === 'empty') {
106
94
  fail(`Loyalty ATLAS Bank ${bank.address} has no claimable ATLAS. Refresh it and retry after ATLAS is credited.`, bank.address);
107
95
  }
108
- if (bank.expiresAtUnixSeconds !== 0n &&
109
- options.atUnixSeconds >= bank.expiresAtUnixSeconds) {
96
+ if (state.kind === 'expired') {
110
97
  fail(`Loyalty ATLAS Bank ${bank.address} expired at Unix timestamp ${String(bank.expiresAtUnixSeconds)}. This balance cannot be claimed; refresh the Bank before choosing another action.`, bank.address);
111
98
  }
112
99
  const character = await findCharacterPda(options.authorization.profile, game);