@aephia/atlas-kit 0.6.0-next.9 → 0.6.0-next.90

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 (578) 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 +25 -12
  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 +3 -2
  8. package/dist/cargo/actions/index.js.map +1 -1
  9. package/dist/cargo/actions/wallet-token.d.ts +1 -1
  10. package/dist/cargo/actions/wallet-token.d.ts.map +1 -1
  11. package/dist/cargo/actions/wallet-token.js +1 -9
  12. package/dist/cargo/actions/wallet-token.js.map +1 -1
  13. package/dist/cargo/actions/withdrawal.d.ts.map +1 -1
  14. package/dist/cargo/actions/withdrawal.js +28 -27
  15. package/dist/cargo/actions/withdrawal.js.map +1 -1
  16. package/dist/claim-stakes/actions/index.d.ts +13 -0
  17. package/dist/claim-stakes/actions/index.d.ts.map +1 -1
  18. package/dist/claim-stakes/actions/index.js +95 -44
  19. package/dist/claim-stakes/actions/index.js.map +1 -1
  20. package/dist/claim-stakes/index.d.ts +14 -0
  21. package/dist/claim-stakes/index.d.ts.map +1 -1
  22. package/dist/claim-stakes/index.js +23 -2
  23. package/dist/claim-stakes/index.js.map +1 -1
  24. package/dist/client/context.d.ts.map +1 -1
  25. package/dist/client/context.js +1 -1
  26. package/dist/client/context.js.map +1 -1
  27. package/dist/client/contracts.d.ts +16 -6
  28. package/dist/client/contracts.d.ts.map +1 -1
  29. package/dist/client/errors.d.ts +6 -2
  30. package/dist/client/errors.d.ts.map +1 -1
  31. package/dist/client/errors.js +31 -1
  32. package/dist/client/errors.js.map +1 -1
  33. package/dist/client/index.d.ts +35 -0
  34. package/dist/client/index.d.ts.map +1 -1
  35. package/dist/client/index.js +35 -0
  36. package/dist/client/index.js.map +1 -1
  37. package/dist/client/rpc-subscription-provider.d.ts +35 -0
  38. package/dist/client/rpc-subscription-provider.d.ts.map +1 -0
  39. package/dist/client/rpc-subscription-provider.js +190 -0
  40. package/dist/client/rpc-subscription-provider.js.map +1 -0
  41. package/dist/combat/actions/index.d.ts.map +1 -1
  42. package/dist/combat/actions/index.js +98 -50
  43. package/dist/combat/actions/index.js.map +1 -1
  44. package/dist/crafting/actions/index.d.ts +11 -0
  45. package/dist/crafting/actions/index.d.ts.map +1 -1
  46. package/dist/crafting/actions/index.js +63 -36
  47. package/dist/crafting/actions/index.js.map +1 -1
  48. package/dist/crafting/index.d.ts +33 -3
  49. package/dist/crafting/index.d.ts.map +1 -1
  50. package/dist/crafting/index.js +44 -15
  51. package/dist/crafting/index.js.map +1 -1
  52. package/dist/factions/actions/index.d.ts +1 -0
  53. package/dist/factions/actions/index.d.ts.map +1 -1
  54. package/dist/factions/actions/index.js +2 -1
  55. package/dist/factions/actions/index.js.map +1 -1
  56. package/dist/factions/index.d.ts +1 -1
  57. package/dist/factions/index.d.ts.map +1 -1
  58. package/dist/factions/index.js +14 -8
  59. package/dist/factions/index.js.map +1 -1
  60. package/dist/factions/profile-faction.d.ts +20 -8
  61. package/dist/factions/profile-faction.d.ts.map +1 -1
  62. package/dist/factions/profile-faction.js +20 -8
  63. package/dist/factions/profile-faction.js.map +1 -1
  64. package/dist/fleets/actions/add-ship.d.ts +35 -0
  65. package/dist/fleets/actions/add-ship.d.ts.map +1 -0
  66. package/dist/fleets/actions/add-ship.js +149 -0
  67. package/dist/fleets/actions/add-ship.js.map +1 -0
  68. package/dist/fleets/actions/create-fleet.d.ts +36 -0
  69. package/dist/fleets/actions/create-fleet.d.ts.map +1 -0
  70. package/dist/fleets/actions/create-fleet.js +138 -0
  71. package/dist/fleets/actions/create-fleet.js.map +1 -0
  72. package/dist/fleets/actions/crew-transfer.d.ts +41 -0
  73. package/dist/fleets/actions/crew-transfer.d.ts.map +1 -0
  74. package/dist/fleets/actions/crew-transfer.js +114 -0
  75. package/dist/fleets/actions/crew-transfer.js.map +1 -0
  76. package/dist/fleets/actions/dock-bounds.d.ts +38 -0
  77. package/dist/fleets/actions/dock-bounds.d.ts.map +1 -0
  78. package/dist/fleets/actions/dock-bounds.js +46 -0
  79. package/dist/fleets/actions/dock-bounds.js.map +1 -0
  80. package/dist/fleets/actions/index.d.ts +34 -15
  81. package/dist/fleets/actions/index.d.ts.map +1 -1
  82. package/dist/fleets/actions/index.js +227 -118
  83. package/dist/fleets/actions/index.js.map +1 -1
  84. package/dist/fleets/actions/respawn.d.ts +38 -0
  85. package/dist/fleets/actions/respawn.d.ts.map +1 -0
  86. package/dist/fleets/actions/respawn.js +122 -0
  87. package/dist/fleets/actions/respawn.js.map +1 -0
  88. package/dist/fleets/actions/ship-import.d.ts.map +1 -1
  89. package/dist/fleets/actions/ship-import.js +41 -13
  90. package/dist/fleets/actions/ship-import.js.map +1 -1
  91. package/dist/fleets/cooldown.d.ts +44 -0
  92. package/dist/fleets/cooldown.d.ts.map +1 -0
  93. package/dist/fleets/cooldown.js +43 -0
  94. package/dist/fleets/cooldown.js.map +1 -0
  95. package/dist/fleets/coordinate-warp-estimate.d.ts +70 -0
  96. package/dist/fleets/coordinate-warp-estimate.d.ts.map +1 -0
  97. package/dist/fleets/coordinate-warp-estimate.js +46 -0
  98. package/dist/fleets/coordinate-warp-estimate.js.map +1 -0
  99. package/dist/fleets/index.d.ts +34 -0
  100. package/dist/fleets/index.d.ts.map +1 -1
  101. package/dist/fleets/index.js +51 -2
  102. package/dist/fleets/index.js.map +1 -1
  103. package/dist/fleets/movement-arithmetic.d.ts +21 -0
  104. package/dist/fleets/movement-arithmetic.d.ts.map +1 -0
  105. package/dist/fleets/movement-arithmetic.js +41 -0
  106. package/dist/fleets/movement-arithmetic.js.map +1 -0
  107. package/dist/fleets/subwarp-estimate.d.ts +70 -0
  108. package/dist/fleets/subwarp-estimate.d.ts.map +1 -0
  109. package/dist/fleets/subwarp-estimate.js +38 -0
  110. package/dist/fleets/subwarp-estimate.js.map +1 -0
  111. package/dist/fleets/warp-lane-estimate.d.ts +59 -0
  112. package/dist/fleets/warp-lane-estimate.d.ts.map +1 -0
  113. package/dist/fleets/warp-lane-estimate.js +36 -0
  114. package/dist/fleets/warp-lane-estimate.js.map +1 -0
  115. package/dist/fleets/warp-lane-policy.d.ts +68 -0
  116. package/dist/fleets/warp-lane-policy.d.ts.map +1 -0
  117. package/dist/fleets/warp-lane-policy.js +91 -0
  118. package/dist/fleets/warp-lane-policy.js.map +1 -0
  119. package/dist/fleets/warp-lane-toll.d.ts +55 -0
  120. package/dist/fleets/warp-lane-toll.d.ts.map +1 -0
  121. package/dist/fleets/warp-lane-toll.js +79 -0
  122. package/dist/fleets/warp-lane-toll.js.map +1 -0
  123. package/dist/identity/actions/create-profile.d.ts +2 -0
  124. package/dist/identity/actions/create-profile.d.ts.map +1 -1
  125. package/dist/identity/actions/create-profile.js +14 -9
  126. package/dist/identity/actions/create-profile.js.map +1 -1
  127. package/dist/identity/actions/index.d.ts +3 -3
  128. package/dist/identity/actions/index.d.ts.map +1 -1
  129. package/dist/identity/actions/index.js +48 -27
  130. package/dist/identity/actions/index.js.map +1 -1
  131. package/dist/identity/index.d.ts +15 -0
  132. package/dist/identity/index.d.ts.map +1 -1
  133. package/dist/identity/index.js +15 -0
  134. package/dist/identity/index.js.map +1 -1
  135. package/dist/identity/permissions.d.ts +124 -0
  136. package/dist/identity/permissions.d.ts.map +1 -0
  137. package/dist/identity/permissions.js +171 -0
  138. package/dist/identity/permissions.js.map +1 -0
  139. package/dist/index.d.ts +24 -0
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +20 -3
  142. package/dist/index.js.map +1 -1
  143. package/dist/internal/c4/cargo-bytes-config.d.ts +7 -0
  144. package/dist/internal/c4/cargo-bytes-config.d.ts.map +1 -0
  145. package/dist/internal/c4/cargo-bytes-config.js +19 -0
  146. package/dist/internal/c4/cargo-bytes-config.js.map +1 -0
  147. package/dist/internal/c4/character-registration.d.ts +2 -0
  148. package/dist/internal/c4/character-registration.d.ts.map +1 -1
  149. package/dist/internal/c4/character-registration.js +2 -0
  150. package/dist/internal/c4/character-registration.js.map +1 -1
  151. package/dist/internal/c4/claim-stake.d.ts +4 -27
  152. package/dist/internal/c4/claim-stake.d.ts.map +1 -1
  153. package/dist/internal/c4/claim-stake.js +25 -38
  154. package/dist/internal/c4/claim-stake.js.map +1 -1
  155. package/dist/internal/c4/combat.d.ts +0 -27
  156. package/dist/internal/c4/combat.d.ts.map +1 -1
  157. package/dist/internal/c4/combat.js +0 -33
  158. package/dist/internal/c4/combat.js.map +1 -1
  159. package/dist/internal/c4/crafting-process-codec.d.ts +13 -0
  160. package/dist/internal/c4/crafting-process-codec.d.ts.map +1 -0
  161. package/dist/internal/c4/crafting-process-codec.js +34 -0
  162. package/dist/internal/c4/crafting-process-codec.js.map +1 -0
  163. package/dist/internal/c4/crafting.d.ts +12 -32
  164. package/dist/internal/c4/crafting.d.ts.map +1 -1
  165. package/dist/internal/c4/crafting.js +31 -44
  166. package/dist/internal/c4/crafting.js.map +1 -1
  167. package/dist/internal/c4/docking-funding.d.ts +4 -0
  168. package/dist/internal/c4/docking-funding.d.ts.map +1 -0
  169. package/dist/internal/c4/docking-funding.js +11 -0
  170. package/dist/internal/c4/docking-funding.js.map +1 -0
  171. package/dist/internal/c4/faction-adapter.d.ts +12 -0
  172. package/dist/internal/c4/faction-adapter.d.ts.map +1 -0
  173. package/dist/internal/c4/faction-adapter.js +52 -0
  174. package/dist/internal/c4/faction-adapter.js.map +1 -0
  175. package/dist/internal/c4/faction-epoch-meter.d.ts +10 -0
  176. package/dist/internal/c4/faction-epoch-meter.d.ts.map +1 -0
  177. package/dist/internal/c4/faction-epoch-meter.js +31 -0
  178. package/dist/internal/c4/faction-epoch-meter.js.map +1 -0
  179. package/dist/internal/c4/faction-treasury.d.ts +23 -0
  180. package/dist/internal/c4/faction-treasury.d.ts.map +1 -0
  181. package/dist/internal/c4/faction-treasury.js +48 -0
  182. package/dist/internal/c4/faction-treasury.js.map +1 -0
  183. package/dist/internal/c4/factions.d.ts +9 -57
  184. package/dist/internal/c4/factions.d.ts.map +1 -1
  185. package/dist/internal/c4/factions.js +21 -139
  186. package/dist/internal/c4/factions.js.map +1 -1
  187. package/dist/internal/c4/fleet-arrival.d.ts +28 -0
  188. package/dist/internal/c4/fleet-arrival.d.ts.map +1 -0
  189. package/dist/internal/c4/fleet-arrival.js +42 -0
  190. package/dist/internal/c4/fleet-arrival.js.map +1 -0
  191. package/dist/internal/c4/fleet-creation.d.ts +7 -0
  192. package/dist/internal/c4/fleet-creation.d.ts.map +1 -0
  193. package/dist/internal/c4/fleet-creation.js +180 -0
  194. package/dist/internal/c4/fleet-creation.js.map +1 -0
  195. package/dist/internal/c4/fleet-crew-binding.d.ts +9 -0
  196. package/dist/internal/c4/fleet-crew-binding.d.ts.map +1 -1
  197. package/dist/internal/c4/fleet-crew-binding.js +15 -0
  198. package/dist/internal/c4/fleet-crew-binding.js.map +1 -1
  199. package/dist/internal/c4/fleet-respawn.d.ts +19 -0
  200. package/dist/internal/c4/fleet-respawn.d.ts.map +1 -0
  201. package/dist/internal/c4/fleet-respawn.js +91 -0
  202. package/dist/internal/c4/fleet-respawn.js.map +1 -0
  203. package/dist/internal/c4/fleet-ship-assembly.d.ts +11 -0
  204. package/dist/internal/c4/fleet-ship-assembly.d.ts.map +1 -0
  205. package/dist/internal/c4/fleet-ship-assembly.js +44 -0
  206. package/dist/internal/c4/fleet-ship-assembly.js.map +1 -0
  207. package/dist/internal/c4/fleet.d.ts +45 -19
  208. package/dist/internal/c4/fleet.d.ts.map +1 -1
  209. package/dist/internal/c4/fleet.js +26 -7
  210. package/dist/internal/c4/fleet.js.map +1 -1
  211. package/dist/internal/c4/game.d.ts +36 -9
  212. package/dist/internal/c4/game.d.ts.map +1 -1
  213. package/dist/internal/c4/game.js +147 -14
  214. package/dist/internal/c4/game.js.map +1 -1
  215. package/dist/internal/c4/identity.d.ts +4 -8
  216. package/dist/internal/c4/identity.d.ts.map +1 -1
  217. package/dist/internal/c4/identity.js +3 -24
  218. package/dist/internal/c4/identity.js.map +1 -1
  219. package/dist/internal/c4/local-market-order.d.ts +31 -0
  220. package/dist/internal/c4/local-market-order.d.ts.map +1 -0
  221. package/dist/internal/c4/local-market-order.js +47 -0
  222. package/dist/internal/c4/local-market-order.js.map +1 -0
  223. package/dist/internal/c4/loyalty.d.ts +0 -27
  224. package/dist/internal/c4/loyalty.d.ts.map +1 -1
  225. package/dist/internal/c4/loyalty.js +0 -33
  226. package/dist/internal/c4/loyalty.js.map +1 -1
  227. package/dist/internal/c4/market.d.ts +2 -38
  228. package/dist/internal/c4/market.d.ts.map +1 -1
  229. package/dist/internal/c4/market.js +13 -51
  230. package/dist/internal/c4/market.js.map +1 -1
  231. package/dist/internal/c4/mining-instructions.d.ts +2 -0
  232. package/dist/internal/c4/mining-instructions.d.ts.map +1 -0
  233. package/dist/internal/c4/mining-instructions.js +3 -0
  234. package/dist/internal/c4/mining-instructions.js.map +1 -0
  235. package/dist/internal/c4/open-signal.d.ts +8 -0
  236. package/dist/internal/c4/open-signal.d.ts.map +1 -0
  237. package/dist/internal/c4/open-signal.js +37 -0
  238. package/dist/internal/c4/open-signal.js.map +1 -0
  239. package/dist/internal/c4/profile-permissions.d.ts +14 -0
  240. package/dist/internal/c4/profile-permissions.d.ts.map +1 -0
  241. package/dist/internal/c4/profile-permissions.js +81 -0
  242. package/dist/internal/c4/profile-permissions.js.map +1 -0
  243. package/dist/internal/c4/region-geometry.d.ts +8 -0
  244. package/dist/internal/c4/region-geometry.d.ts.map +1 -0
  245. package/dist/internal/c4/region-geometry.js +43 -0
  246. package/dist/internal/c4/region-geometry.js.map +1 -0
  247. package/dist/internal/c4/rewards.d.ts +0 -27
  248. package/dist/internal/c4/rewards.d.ts.map +1 -1
  249. package/dist/internal/c4/rewards.js +0 -33
  250. package/dist/internal/c4/rewards.js.map +1 -1
  251. package/dist/internal/c4/runtime-bindings.d.ts +3 -0
  252. package/dist/internal/c4/runtime-bindings.d.ts.map +1 -0
  253. package/dist/internal/c4/runtime-bindings.js +4 -0
  254. package/dist/internal/c4/runtime-bindings.js.map +1 -0
  255. package/dist/internal/c4/scan-detection-codecs.d.ts +3 -0
  256. package/dist/internal/c4/scan-detection-codecs.d.ts.map +1 -0
  257. package/dist/internal/c4/scan-detection-codecs.js +3 -0
  258. package/dist/internal/c4/scan-detection-codecs.js.map +1 -0
  259. package/dist/internal/c4/scan-lifecycle.d.ts +306 -0
  260. package/dist/internal/c4/scan-lifecycle.d.ts.map +1 -0
  261. package/dist/internal/c4/scan-lifecycle.js +258 -0
  262. package/dist/internal/c4/scan-lifecycle.js.map +1 -0
  263. package/dist/internal/c4/scanning.d.ts +1 -28
  264. package/dist/internal/c4/scanning.d.ts.map +1 -1
  265. package/dist/internal/c4/scanning.js +2 -33
  266. package/dist/internal/c4/scanning.js.map +1 -1
  267. package/dist/internal/c4/ship-import.d.ts +4 -0
  268. package/dist/internal/c4/ship-import.d.ts.map +1 -0
  269. package/dist/internal/c4/ship-import.js +13 -0
  270. package/dist/internal/c4/ship-import.js.map +1 -0
  271. package/dist/internal/c4/ship-stats.d.ts.map +1 -1
  272. package/dist/internal/c4/ship-stats.js +25 -21
  273. package/dist/internal/c4/ship-stats.js.map +1 -1
  274. package/dist/internal/c4/starbase.d.ts +0 -32
  275. package/dist/internal/c4/starbase.d.ts.map +1 -1
  276. package/dist/internal/c4/starbase.js +3 -41
  277. package/dist/internal/c4/starbase.js.map +1 -1
  278. package/dist/internal/c4/world.d.ts +36 -7
  279. package/dist/internal/c4/world.d.ts.map +1 -1
  280. package/dist/internal/c4/world.js +58 -25
  281. package/dist/internal/c4/world.js.map +1 -1
  282. package/dist/internal/cargo.d.ts +2 -0
  283. package/dist/internal/cargo.d.ts.map +1 -1
  284. package/dist/internal/cargo.js +8 -0
  285. package/dist/internal/cargo.js.map +1 -1
  286. package/dist/internal/fleet.d.ts +1 -0
  287. package/dist/internal/fleet.d.ts.map +1 -1
  288. package/dist/internal/fleet.js +3 -1
  289. package/dist/internal/fleet.js.map +1 -1
  290. package/dist/internal/loyalty-atlas-bank-state.d.ts +16 -0
  291. package/dist/internal/loyalty-atlas-bank-state.d.ts.map +1 -0
  292. package/dist/internal/loyalty-atlas-bank-state.js +10 -0
  293. package/dist/internal/loyalty-atlas-bank-state.js.map +1 -0
  294. package/dist/internal/planning/action-runtime.d.ts +38 -0
  295. package/dist/internal/planning/action-runtime.d.ts.map +1 -0
  296. package/dist/internal/planning/action-runtime.js +63 -0
  297. package/dist/internal/planning/action-runtime.js.map +1 -0
  298. package/dist/internal/planning/arrival-guards.d.ts +20 -0
  299. package/dist/internal/planning/arrival-guards.d.ts.map +1 -0
  300. package/dist/internal/planning/arrival-guards.js +187 -0
  301. package/dist/internal/planning/arrival-guards.js.map +1 -0
  302. package/dist/internal/planning/authorization-adapter.d.ts +10 -7
  303. package/dist/internal/planning/authorization-adapter.d.ts.map +1 -1
  304. package/dist/internal/planning/authorization-adapter.js +87 -16
  305. package/dist/internal/planning/authorization-adapter.js.map +1 -1
  306. package/dist/internal/planning/character-registration-guard.d.ts +4 -0
  307. package/dist/internal/planning/character-registration-guard.d.ts.map +1 -0
  308. package/dist/internal/planning/character-registration-guard.js +58 -0
  309. package/dist/internal/planning/character-registration-guard.js.map +1 -0
  310. package/dist/internal/planning/character-registration.d.ts +23 -0
  311. package/dist/internal/planning/character-registration.d.ts.map +1 -0
  312. package/dist/internal/planning/character-registration.js +86 -0
  313. package/dist/internal/planning/character-registration.js.map +1 -0
  314. package/dist/internal/planning/democracy-history.d.ts +50 -0
  315. package/dist/internal/planning/democracy-history.d.ts.map +1 -0
  316. package/dist/internal/planning/democracy-history.js +198 -0
  317. package/dist/internal/planning/democracy-history.js.map +1 -0
  318. package/dist/internal/planning/faction-enrollment.d.ts +0 -2
  319. package/dist/internal/planning/faction-enrollment.d.ts.map +1 -1
  320. package/dist/internal/planning/faction-enrollment.js +1 -22
  321. package/dist/internal/planning/faction-enrollment.js.map +1 -1
  322. package/dist/internal/planning/faction-trade-guards.d.ts +30 -0
  323. package/dist/internal/planning/faction-trade-guards.d.ts.map +1 -0
  324. package/dist/internal/planning/faction-trade-guards.js +15 -0
  325. package/dist/internal/planning/faction-trade-guards.js.map +1 -0
  326. package/dist/internal/planning/faction-trade-state.d.ts +16 -0
  327. package/dist/internal/planning/faction-trade-state.d.ts.map +1 -0
  328. package/dist/internal/planning/faction-trade-state.js +43 -0
  329. package/dist/internal/planning/faction-trade-state.js.map +1 -0
  330. package/dist/internal/planning/fleet-arrival.d.ts +40 -0
  331. package/dist/internal/planning/fleet-arrival.d.ts.map +1 -0
  332. package/dist/internal/planning/fleet-arrival.js +105 -0
  333. package/dist/internal/planning/fleet-arrival.js.map +1 -0
  334. package/dist/internal/planning/fleet-attack-xp.d.ts +20 -0
  335. package/dist/internal/planning/fleet-attack-xp.d.ts.map +1 -0
  336. package/dist/internal/planning/fleet-attack-xp.js +110 -0
  337. package/dist/internal/planning/fleet-attack-xp.js.map +1 -0
  338. package/dist/internal/planning/fleet-creation.d.ts +30 -0
  339. package/dist/internal/planning/fleet-creation.d.ts.map +1 -0
  340. package/dist/internal/planning/fleet-creation.js +108 -0
  341. package/dist/internal/planning/fleet-creation.js.map +1 -0
  342. package/dist/internal/planning/fleet-crew-guard.d.ts +28 -0
  343. package/dist/internal/planning/fleet-crew-guard.d.ts.map +1 -0
  344. package/dist/internal/planning/fleet-crew-guard.js +47 -0
  345. package/dist/internal/planning/fleet-crew-guard.js.map +1 -0
  346. package/dist/internal/planning/fleet-crew-transfer.d.ts +7 -0
  347. package/dist/internal/planning/fleet-crew-transfer.d.ts.map +1 -0
  348. package/dist/internal/planning/fleet-crew-transfer.js +131 -0
  349. package/dist/internal/planning/fleet-crew-transfer.js.map +1 -0
  350. package/dist/internal/planning/fleet-dock-funding-guard.d.ts +42 -0
  351. package/dist/internal/planning/fleet-dock-funding-guard.d.ts.map +1 -0
  352. package/dist/internal/planning/fleet-dock-funding-guard.js +225 -0
  353. package/dist/internal/planning/fleet-dock-funding-guard.js.map +1 -0
  354. package/dist/internal/planning/fleet-dock-funding.d.ts +9 -0
  355. package/dist/internal/planning/fleet-dock-funding.d.ts.map +1 -0
  356. package/dist/internal/planning/fleet-dock-funding.js +153 -0
  357. package/dist/internal/planning/fleet-dock-funding.js.map +1 -0
  358. package/dist/internal/planning/fleet-docking-guard.d.ts +4 -0
  359. package/dist/internal/planning/fleet-docking-guard.d.ts.map +1 -0
  360. package/dist/internal/planning/fleet-docking-guard.js +42 -0
  361. package/dist/internal/planning/fleet-docking-guard.js.map +1 -0
  362. package/dist/internal/planning/fleet-docking.d.ts +10 -0
  363. package/dist/internal/planning/fleet-docking.d.ts.map +1 -0
  364. package/dist/internal/planning/fleet-docking.js +85 -0
  365. package/dist/internal/planning/fleet-docking.js.map +1 -0
  366. package/dist/internal/planning/fleet-respawn.d.ts +28 -0
  367. package/dist/internal/planning/fleet-respawn.d.ts.map +1 -0
  368. package/dist/internal/planning/fleet-respawn.js +165 -0
  369. package/dist/internal/planning/fleet-respawn.js.map +1 -0
  370. package/dist/internal/planning/fleet-ship-assembly.d.ts +36 -0
  371. package/dist/internal/planning/fleet-ship-assembly.d.ts.map +1 -0
  372. package/dist/internal/planning/fleet-ship-assembly.js +137 -0
  373. package/dist/internal/planning/fleet-ship-assembly.js.map +1 -0
  374. package/dist/internal/planning/governance-fees.d.ts +64 -0
  375. package/dist/internal/planning/governance-fees.d.ts.map +1 -0
  376. package/dist/internal/planning/governance-fees.js +239 -0
  377. package/dist/internal/planning/governance-fees.js.map +1 -0
  378. package/dist/internal/planning/local-market-order-funding.d.ts +8 -0
  379. package/dist/internal/planning/local-market-order-funding.d.ts.map +1 -0
  380. package/dist/internal/planning/local-market-order-funding.js +126 -0
  381. package/dist/internal/planning/local-market-order-funding.js.map +1 -0
  382. package/dist/internal/planning/local-market-order.d.ts +40 -0
  383. package/dist/internal/planning/local-market-order.d.ts.map +1 -0
  384. package/dist/internal/planning/local-market-order.js +166 -0
  385. package/dist/internal/planning/local-market-order.js.map +1 -0
  386. package/dist/internal/planning/mining-stop.d.ts +14 -0
  387. package/dist/internal/planning/mining-stop.d.ts.map +1 -0
  388. package/dist/internal/planning/mining-stop.js +41 -0
  389. package/dist/internal/planning/mining-stop.js.map +1 -0
  390. package/dist/internal/planning/movement-character.d.ts +7 -0
  391. package/dist/internal/planning/movement-character.d.ts.map +1 -0
  392. package/dist/internal/planning/movement-character.js +41 -0
  393. package/dist/internal/planning/movement-character.js.map +1 -0
  394. package/dist/internal/planning/movement-xp-guard.d.ts +4 -0
  395. package/dist/internal/planning/movement-xp-guard.d.ts.map +1 -0
  396. package/dist/internal/planning/movement-xp-guard.js +103 -0
  397. package/dist/internal/planning/movement-xp-guard.js.map +1 -0
  398. package/dist/internal/planning/open-signal-guard.d.ts +3 -0
  399. package/dist/internal/planning/open-signal-guard.d.ts.map +1 -0
  400. package/dist/internal/planning/open-signal-guard.js +31 -0
  401. package/dist/internal/planning/open-signal-guard.js.map +1 -0
  402. package/dist/internal/planning/open-signal.d.ts +31 -0
  403. package/dist/internal/planning/open-signal.d.ts.map +1 -0
  404. package/dist/internal/planning/open-signal.js +85 -0
  405. package/dist/internal/planning/open-signal.js.map +1 -0
  406. package/dist/internal/planning/rent.d.ts +19 -0
  407. package/dist/internal/planning/rent.d.ts.map +1 -0
  408. package/dist/internal/planning/rent.js +35 -0
  409. package/dist/internal/planning/rent.js.map +1 -0
  410. package/dist/internal/planning/respawn-guards.d.ts +3 -0
  411. package/dist/internal/planning/respawn-guards.d.ts.map +1 -0
  412. package/dist/internal/planning/respawn-guards.js +41 -0
  413. package/dist/internal/planning/respawn-guards.js.map +1 -0
  414. package/dist/internal/planning/runtime-guards.d.ts +43 -0
  415. package/dist/internal/planning/runtime-guards.d.ts.map +1 -0
  416. package/dist/internal/planning/runtime-guards.js +636 -0
  417. package/dist/internal/planning/runtime-guards.js.map +1 -0
  418. package/dist/internal/planning/scan-completion-guard.d.ts +43 -0
  419. package/dist/internal/planning/scan-completion-guard.d.ts.map +1 -0
  420. package/dist/internal/planning/scan-completion-guard.js +94 -0
  421. package/dist/internal/planning/scan-completion-guard.js.map +1 -0
  422. package/dist/internal/planning/scan-completion.d.ts +20 -0
  423. package/dist/internal/planning/scan-completion.d.ts.map +1 -0
  424. package/dist/internal/planning/scan-completion.js +196 -0
  425. package/dist/internal/planning/scan-completion.js.map +1 -0
  426. package/dist/internal/planning/scan-detect-guard.d.ts +34 -0
  427. package/dist/internal/planning/scan-detect-guard.d.ts.map +1 -0
  428. package/dist/internal/planning/scan-detect-guard.js +77 -0
  429. package/dist/internal/planning/scan-detect-guard.js.map +1 -0
  430. package/dist/internal/planning/scan-detect.d.ts +24 -0
  431. package/dist/internal/planning/scan-detect.d.ts.map +1 -0
  432. package/dist/internal/planning/scan-detect.js +244 -0
  433. package/dist/internal/planning/scan-detect.js.map +1 -0
  434. package/dist/internal/planning/scan-input.d.ts +9 -0
  435. package/dist/internal/planning/scan-input.d.ts.map +1 -0
  436. package/dist/internal/planning/scan-input.js +58 -0
  437. package/dist/internal/planning/scan-input.js.map +1 -0
  438. package/dist/internal/planning/ship-import-funding.d.ts +22 -0
  439. package/dist/internal/planning/ship-import-funding.d.ts.map +1 -0
  440. package/dist/internal/planning/ship-import-funding.js +52 -0
  441. package/dist/internal/planning/ship-import-funding.js.map +1 -0
  442. package/dist/internal/planning/ship-token.d.ts +0 -1
  443. package/dist/internal/planning/ship-token.d.ts.map +1 -1
  444. package/dist/internal/planning/ship-token.js +2 -5
  445. package/dist/internal/planning/ship-token.js.map +1 -1
  446. package/dist/internal/planning/starbase-system-guard.d.ts +6 -0
  447. package/dist/internal/planning/starbase-system-guard.d.ts.map +1 -0
  448. package/dist/internal/planning/starbase-system-guard.js +93 -0
  449. package/dist/internal/planning/starbase-system-guard.js.map +1 -0
  450. package/dist/internal/planning/starbase-system.d.ts +12 -0
  451. package/dist/internal/planning/starbase-system.d.ts.map +1 -0
  452. package/dist/internal/planning/starbase-system.js +22 -0
  453. package/dist/internal/planning/starbase-system.js.map +1 -0
  454. package/dist/internal/planning/token-mint.d.ts +4 -0
  455. package/dist/internal/planning/token-mint.d.ts.map +1 -0
  456. package/dist/internal/planning/token-mint.js +15 -0
  457. package/dist/internal/planning/token-mint.js.map +1 -0
  458. package/dist/internal/planning/trade-faction-market.d.ts +20 -0
  459. package/dist/internal/planning/trade-faction-market.d.ts.map +1 -0
  460. package/dist/internal/planning/trade-faction-market.js +56 -0
  461. package/dist/internal/planning/trade-faction-market.js.map +1 -0
  462. package/dist/internal/planning/xp-runtime.d.ts +36 -0
  463. package/dist/internal/planning/xp-runtime.d.ts.map +1 -0
  464. package/dist/internal/planning/xp-runtime.js +126 -0
  465. package/dist/internal/planning/xp-runtime.js.map +1 -0
  466. package/dist/internal/system-program.d.ts +4 -0
  467. package/dist/internal/system-program.d.ts.map +1 -0
  468. package/dist/internal/system-program.js +3 -0
  469. package/dist/internal/system-program.js.map +1 -0
  470. package/dist/loyalty/actions/index.d.ts.map +1 -1
  471. package/dist/loyalty/actions/index.js +4 -3
  472. package/dist/loyalty/actions/index.js.map +1 -1
  473. package/dist/loyalty/index.d.ts.map +1 -1
  474. package/dist/loyalty/index.js +2 -6
  475. package/dist/loyalty/index.js.map +1 -1
  476. package/dist/markets/actions/index.d.ts +61 -3
  477. package/dist/markets/actions/index.d.ts.map +1 -1
  478. package/dist/markets/actions/index.js +137 -25
  479. package/dist/markets/actions/index.js.map +1 -1
  480. package/dist/markets/actions/trade-faction-market.d.ts +43 -0
  481. package/dist/markets/actions/trade-faction-market.d.ts.map +1 -0
  482. package/dist/markets/actions/trade-faction-market.js +291 -0
  483. package/dist/markets/actions/trade-faction-market.js.map +1 -0
  484. package/dist/markets/index.d.ts +38 -7
  485. package/dist/markets/index.d.ts.map +1 -1
  486. package/dist/markets/index.js +57 -10
  487. package/dist/markets/index.js.map +1 -1
  488. package/dist/mining/actions/index.d.ts +84 -0
  489. package/dist/mining/actions/index.d.ts.map +1 -0
  490. package/dist/mining/actions/index.js +328 -0
  491. package/dist/mining/actions/index.js.map +1 -0
  492. package/dist/mining/estimate.d.ts +114 -0
  493. package/dist/mining/estimate.d.ts.map +1 -0
  494. package/dist/mining/estimate.js +127 -0
  495. package/dist/mining/estimate.js.map +1 -0
  496. package/dist/mining/index.d.ts +8 -2
  497. package/dist/mining/index.d.ts.map +1 -1
  498. package/dist/mining/index.js +6 -2
  499. package/dist/mining/index.js.map +1 -1
  500. package/dist/planning/assembly.d.ts.map +1 -1
  501. package/dist/planning/assembly.js +24 -0
  502. package/dist/planning/assembly.js.map +1 -1
  503. package/dist/planning/execution.d.ts.map +1 -1
  504. package/dist/planning/execution.js +459 -17
  505. package/dist/planning/execution.js.map +1 -1
  506. package/dist/planning/index.d.ts +181 -149
  507. package/dist/planning/index.d.ts.map +1 -1
  508. package/dist/planning/index.js +869 -121
  509. package/dist/planning/index.js.map +1 -1
  510. package/dist/planning/plan-sequence.d.ts.map +1 -1
  511. package/dist/planning/plan-sequence.js +8 -1
  512. package/dist/planning/plan-sequence.js.map +1 -1
  513. package/dist/planning/simulation.d.ts +25 -1
  514. package/dist/planning/simulation.d.ts.map +1 -1
  515. package/dist/planning/simulation.js +111 -11
  516. package/dist/planning/simulation.js.map +1 -1
  517. package/dist/registry/cargo.d.ts +6 -11
  518. package/dist/registry/cargo.d.ts.map +1 -1
  519. package/dist/registry/cargo.js +19 -19
  520. package/dist/registry/cargo.js.map +1 -1
  521. package/dist/registry/docking.d.ts +13 -0
  522. package/dist/registry/docking.d.ts.map +1 -0
  523. package/dist/registry/docking.js +19 -0
  524. package/dist/registry/docking.js.map +1 -0
  525. package/dist/registry/index.d.ts +4 -0
  526. package/dist/registry/index.d.ts.map +1 -1
  527. package/dist/registry/index.js.map +1 -1
  528. package/dist/registry/onboarding.d.ts +8 -1
  529. package/dist/registry/onboarding.d.ts.map +1 -1
  530. package/dist/registry/onboarding.js +18 -5
  531. package/dist/registry/onboarding.js.map +1 -1
  532. package/dist/registry/scanning.d.ts +7 -0
  533. package/dist/registry/scanning.d.ts.map +1 -0
  534. package/dist/registry/scanning.js +13 -0
  535. package/dist/registry/scanning.js.map +1 -0
  536. package/dist/registry/ship-stats-snapshot.js +19 -19
  537. package/dist/registry/ship-stats-snapshot.js.map +1 -1
  538. package/dist/registry/ships.d.ts +22 -2
  539. package/dist/registry/ships.d.ts.map +1 -1
  540. package/dist/registry/ships.js +28 -4
  541. package/dist/registry/ships.js.map +1 -1
  542. package/dist/registry/xp-runtime.d.ts +4 -0
  543. package/dist/registry/xp-runtime.d.ts.map +1 -0
  544. package/dist/registry/xp-runtime.js +14 -0
  545. package/dist/registry/xp-runtime.js.map +1 -0
  546. package/dist/scanning/actions/index.d.ts +116 -0
  547. package/dist/scanning/actions/index.d.ts.map +1 -0
  548. package/dist/scanning/actions/index.js +185 -0
  549. package/dist/scanning/actions/index.js.map +1 -0
  550. package/dist/scanning/index.d.ts +4 -1
  551. package/dist/scanning/index.d.ts.map +1 -1
  552. package/dist/scanning/index.js +12 -8
  553. package/dist/scanning/index.js.map +1 -1
  554. package/dist/scanning/lifecycle.d.ts +77 -0
  555. package/dist/scanning/lifecycle.d.ts.map +1 -0
  556. package/dist/scanning/lifecycle.js +93 -0
  557. package/dist/scanning/lifecycle.js.map +1 -0
  558. package/dist/scanning/odds.d.ts +111 -0
  559. package/dist/scanning/odds.d.ts.map +1 -0
  560. package/dist/scanning/odds.js +294 -0
  561. package/dist/scanning/odds.js.map +1 -0
  562. package/dist/scanning/signals.d.ts +121 -0
  563. package/dist/scanning/signals.d.ts.map +1 -0
  564. package/dist/scanning/signals.js +171 -0
  565. package/dist/scanning/signals.js.map +1 -0
  566. package/dist/world/index.d.ts +110 -5
  567. package/dist/world/index.d.ts.map +1 -1
  568. package/dist/world/index.js +109 -4
  569. package/dist/world/index.js.map +1 -1
  570. package/dist/world/planet-claim-stake-plots.d.ts +130 -0
  571. package/dist/world/planet-claim-stake-plots.d.ts.map +1 -0
  572. package/dist/world/planet-claim-stake-plots.js +110 -0
  573. package/dist/world/planet-claim-stake-plots.js.map +1 -0
  574. package/dist/world/starbase-status.d.ts +176 -0
  575. package/dist/world/starbase-status.d.ts.map +1 -0
  576. package/dist/world/starbase-status.js +153 -0
  577. package/dist/world/starbase-status.js.map +1 -0
  578. package/package.json +10 -2
@@ -0,0 +1,14 @@
1
+ import type { Address, RawAccount } from '../../client/contracts.js';
2
+ import type { PlanPrecondition, PlanStep } from '../../planning/index.js';
3
+ type MiningIntent = Readonly<{
4
+ address: Address;
5
+ game: Address;
6
+ profile: Address;
7
+ asteroid: Address;
8
+ }>;
9
+ /** Finite identity/state validation shared by preparation and execution. */
10
+ export declare function matchesFleetMiningState(account: RawAccount | undefined, intent: MiningIntent): Promise<boolean>;
11
+ /** Detects actual pinned stop instructions, independent of labels or wire age. */
12
+ export declare function validateMiningStopInstructions(steps: readonly PlanStep[], preconditions: readonly PlanPrecondition[]): void;
13
+ export {};
14
+ //# sourceMappingURL=mining-stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mining-stop.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/mining-stop.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAG1E,KAAK,YAAY,GAAG,QAAQ,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH,4EAA4E;AAC5E,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,UAAU,GAAG,SAAS,EAC/B,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,OAAO,CAAC,CAWlB;AAED,kFAAkF;AAClF,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,aAAa,EAAE,SAAS,gBAAgB,EAAE,GACzC,IAAI,CA6CN"}
@@ -0,0 +1,41 @@
1
+ import { SAGE_PROGRAM_ADDRESS, STOP_MINING_ASTEROID_DISCRIMINATOR, } from '../c4/mining-instructions.js';
2
+ import { SageSdkError } from '../../client/errors.js';
3
+ import { deriveFleetAddress, fleetAccountDefinition } from '../c4/fleet.js';
4
+ /** Finite identity/state validation shared by preparation and execution. */
5
+ export async function matchesFleetMiningState(account, intent) {
6
+ if (!account || account.address !== intent.address || account.executable)
7
+ return false;
8
+ const fleet = fleetAccountDefinition.decode(account);
9
+ return (fleet.game === intent.game &&
10
+ fleet.ownerProfile === intent.profile &&
11
+ fleet.state.kind === 'mining' &&
12
+ fleet.state.asteroid === intent.asteroid &&
13
+ (await deriveFleetAddress(fleet)) === intent.address);
14
+ }
15
+ /** Detects actual pinned stop instructions, independent of labels or wire age. */
16
+ export function validateMiningStopInstructions(steps, preconditions) {
17
+ for (let index = 0; index < steps.length; index += 1) {
18
+ const instruction = steps[index].instruction;
19
+ if (instruction.programAddress !== SAGE_PROGRAM_ADDRESS ||
20
+ !STOP_MINING_ASTEROID_DISCRIMINATOR.every((byte, offset) => instruction.data?.[offset] === byte))
21
+ continue;
22
+ // Pinned StopMiningAsteroid: Profile 1, Fleet 5, Game 6, Asteroid 7.
23
+ const accounts = instruction.accounts;
24
+ const fleet = accounts?.[5]?.address;
25
+ if (instruction.data?.length !== 10 ||
26
+ (accounts?.length ?? 0) < 10 ||
27
+ !preconditions.some((guard) => guard.kind === 'fleet-mining' &&
28
+ guard.address === fleet &&
29
+ guard.game === accounts?.[6]?.address &&
30
+ guard.profile === accounts?.[1]?.address &&
31
+ guard.asteroid === accounts?.[7]?.address)) {
32
+ throw new SageSdkError('ACTION_PRECONDITION_FAILED', 'This stop-mining instruction has no matching Fleet mining-state safeguard or has an unsupported layout. Refresh the Fleet and recreate this Plan with planFleetStopMining before signing; an idle stop can still consume exit fuel.');
33
+ }
34
+ if (steps
35
+ .slice(0, index)
36
+ .some((step) => step.instruction.accounts?.some((account) => account.address === fleet))) {
37
+ throw new SageSdkError('INCOMPATIBLE_PLAN_COMPOSITION', `An earlier instruction references Fleet ${fleet} before its guarded mining stop. Account write privileges are transaction-wide, so the fresh pre-sign check cannot establish the intermediate mining state. Use separate confirmed transactions and recreate the stop Plan from a fresh mining Fleet.`);
38
+ }
39
+ }
40
+ }
41
+ //# sourceMappingURL=mining-stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mining-stop.js","sourceRoot":"","sources":["../../../src/internal/planning/mining-stop.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,kCAAkC,GACnC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAS5E,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA+B,EAC/B,MAAoB;IAEpB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU;QACtE,OAAO,KAAK,CAAC;IACf,MAAM,KAAK,GAAG,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;QAC1B,KAAK,CAAC,YAAY,KAAK,MAAM,CAAC,OAAO;QACrC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC7B,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ;QACxC,CAAC,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,CACrD,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,8BAA8B,CAC5C,KAA0B,EAC1B,aAA0C;IAE1C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC,WAAW,CAAC;QAC9C,IACE,WAAW,CAAC,cAAc,KAAK,oBAAoB;YACnD,CAAC,kCAAkC,CAAC,KAAK,CACvC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,CACtD;YAED,SAAS;QACX,qEAAqE;QACrE,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;QACtC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QACrC,IACE,WAAW,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE;YAC/B,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE;YAC5B,CAAC,aAAa,CAAC,IAAI,CACjB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,IAAI,KAAK,cAAc;gBAC7B,KAAK,CAAC,OAAO,KAAK,KAAK;gBACvB,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO;gBACrC,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO;gBACxC,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAC5C,EACD,CAAC;YACD,MAAM,IAAI,YAAY,CACpB,4BAA4B,EAC5B,qOAAqO,CACtO,CAAC;QACJ,CAAC;QACD,IACE,KAAK;aACF,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;aACf,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAC7B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,KAAK,CACvC,CACF,EACH,CAAC;YACD,MAAM,IAAI,YAAY,CACpB,+BAA+B,EAC/B,2CAA2C,KAAK,uPAAuP,CACxS,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Address, RawAccount } from '../../client/contracts.js';
2
+ /** Retain movement-relevant Character state while permitting earned XP accrual. */
3
+ export declare function hashMovementCharacter(account: RawAccount, intent: {
4
+ readonly game: Address;
5
+ readonly profile: Address;
6
+ }): Promise<string>;
7
+ //# sourceMappingURL=movement-character.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"movement-character.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/movement-character.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAYrE,mFAAmF;AACnF,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC5D,OAAO,CAAC,MAAM,CAAC,CA4CjB"}
@@ -0,0 +1,41 @@
1
+ import { SageSdkError } from '../../client/errors.js';
2
+ import { characterAccountDefinition, findCharacterPda, } from '../c4/identity.js';
3
+ import { getCharacterDecoder, getCharacterEncoder, } from '../c4/runtime-bindings.js';
4
+ import { hashAccountState } from './account-state.js';
5
+ /** Retain movement-relevant Character state while permitting earned XP accrual. */
6
+ export async function hashMovementCharacter(account, intent) {
7
+ characterAccountDefinition.validate(account);
8
+ const [value, end] = getCharacterDecoder().read(account.data, 0);
9
+ if (account.executable ||
10
+ end !== account.data.length ||
11
+ value.gameId !== intent.game ||
12
+ value.playerProfile !== intent.profile ||
13
+ account.address !== (await findCharacterPda(intent.profile, intent.game)))
14
+ throw new SageSdkError('ACTION_PRECONDITION_FAILED', 'The movement Character no longer matches its canonical Profile, Game or supported account layout. Refresh the Character and recreate the movement Plan.');
15
+ const category = (xp) => ({
16
+ ...xp,
17
+ earned: 0n,
18
+ level: 0,
19
+ });
20
+ return hashAccountState(account.owner, new Uint8Array(getCharacterEncoder().encode({
21
+ ...value,
22
+ xpInfo: {
23
+ ...value.xpInfo,
24
+ councilRank: category(value.xpInfo.councilRank),
25
+ dailyXp: category(value.xpInfo.dailyXp),
26
+ pilot: category(value.xpInfo.pilot),
27
+ dataRunner: category(value.xpInfo.dataRunner),
28
+ mining: category(value.xpInfo.mining),
29
+ building: category(value.xpInfo.building),
30
+ crafting: category(value.xpInfo.crafting),
31
+ combat: category(value.xpInfo.combat),
32
+ councilRankLevelCarry: 0,
33
+ },
34
+ pilotXpBudget: {
35
+ available: 0,
36
+ fractionalCarry: [0, 0, 0, 0, 0, 0],
37
+ lastAccrualTime: 0n,
38
+ },
39
+ })));
40
+ }
41
+ //# sourceMappingURL=movement-character.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"movement-character.js","sourceRoot":"","sources":["../../../src/internal/planning/movement-character.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAmB,EACnB,MAA6D;IAE7D,0BAA0B,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,mBAAmB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACjE,IACE,OAAO,CAAC,UAAU;QAClB,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM;QAC3B,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI;QAC5B,KAAK,CAAC,aAAa,KAAK,MAAM,CAAC,OAAO;QACtC,OAAO,CAAC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAEzE,MAAM,IAAI,YAAY,CACpB,4BAA4B,EAC5B,yJAAyJ,CAC1J,CAAC;IACJ,MAAM,QAAQ,GAAG,CAAC,EAAoD,EAAE,EAAE,CAAC,CAAC;QAC1E,GAAG,EAAE;QACL,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,CAAC;KACT,CAAC,CAAC;IACH,OAAO,gBAAgB,CACrB,OAAO,CAAC,KAAK,EACb,IAAI,UAAU,CACZ,mBAAmB,EAAE,CAAC,MAAM,CAAC;QAC3B,GAAG,KAAK;QACR,MAAM,EAAE;YACN,GAAG,KAAK,CAAC,MAAM;YACf,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;YAC/C,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;YACvC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;YACnC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;YAC7C,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YACrC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;YACzC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;YACzC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YACrC,qBAAqB,EAAE,CAAC;SACzB;QACD,aAAa,EAAE;YACb,SAAS,EAAE,CAAC;YACZ,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACnC,eAAe,EAAE,EAAE;SACpB;KACF,CAAC,CACH,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { PlanPrecondition, PlanStep } from '../../planning/index.js';
2
+ /** Bind current XP tails to the actual instructions, independently of Plan kind. */
3
+ export declare function validateMovementXpInstructions(steps: readonly PlanStep[], guards: readonly PlanPrecondition[]): void;
4
+ //# sourceMappingURL=movement-xp-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"movement-xp-guard.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/movement-xp-guard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAsB1E,oFAAoF;AACpF,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAClC,IAAI,CAgHN"}
@@ -0,0 +1,103 @@
1
+ import { AccountRole } from '@solana/kit';
2
+ import { SageSdkError } from '../../client/errors.js';
3
+ import { SAGE_PROGRAM_ADDRESS, START_SUBWARP_DISCRIMINATOR, WARP_TO_COORDINATE_DISCRIMINATOR, WARP_LANE_DISCRIMINATOR, STOP_SUBWARP_DISCRIMINATOR, STOP_MINING_ASTEROID_DISCRIMINATOR, getStartSubwarpInstructionDataDecoder, getWarpToCoordinateInstructionDataDecoder, getWarpLaneInstructionDataDecoder, getStopSubwarpInstructionDataDecoder, getStopMiningAsteroidInstructionDataDecoder, } from '../c4/runtime-bindings.js';
4
+ function fail() {
5
+ throw new SageSdkError('ACTION_PRECONDITION_FAILED', 'This movement or mining-stop instruction does not match its current XP accounts, Character, Profile, Game or account roles. Refresh the affected Fleet and recreate the Plan before signing.');
6
+ }
7
+ /** Bind current XP tails to the actual instructions, independently of Plan kind. */
8
+ export function validateMovementXpInstructions(steps, guards) {
9
+ const layouts = [
10
+ {
11
+ discriminator: START_SUBWARP_DISCRIMINATOR,
12
+ decoder: getStartSubwarpInstructionDataDecoder,
13
+ budget: 9,
14
+ count: 12,
15
+ start: true,
16
+ },
17
+ {
18
+ discriminator: WARP_TO_COORDINATE_DISCRIMINATOR,
19
+ decoder: getWarpToCoordinateInstructionDataDecoder,
20
+ budget: 9,
21
+ count: 12,
22
+ start: true,
23
+ },
24
+ {
25
+ discriminator: WARP_LANE_DISCRIMINATOR,
26
+ decoder: getWarpLaneInstructionDataDecoder,
27
+ budget: 12,
28
+ count: 15,
29
+ start: true,
30
+ },
31
+ {
32
+ discriminator: STOP_SUBWARP_DISCRIMINATOR,
33
+ decoder: getStopSubwarpInstructionDataDecoder,
34
+ budget: 8,
35
+ count: 10,
36
+ start: false,
37
+ },
38
+ {
39
+ discriminator: STOP_MINING_ASTEROID_DISCRIMINATOR,
40
+ decoder: getStopMiningAsteroidInstructionDataDecoder,
41
+ budget: 10,
42
+ count: 12,
43
+ start: false,
44
+ },
45
+ ];
46
+ for (const { instruction } of steps) {
47
+ if (instruction.programAddress !== SAGE_PROGRAM_ADDRESS)
48
+ continue;
49
+ const layout = layouts.find((l) => l.discriminator.every((b, i) => instruction.data?.[i] === b));
50
+ if (!layout)
51
+ continue;
52
+ const { accounts, data } = instruction;
53
+ if (!accounts || accounts.length !== layout.count || !data)
54
+ fail();
55
+ try {
56
+ if (layout.decoder().read(data, 0)[1] !== data.length)
57
+ fail();
58
+ }
59
+ catch {
60
+ fail();
61
+ }
62
+ const game = accounts[6].address;
63
+ const character = accounts[4].address;
64
+ const profile = accounts[1].address;
65
+ const arrival = layout.budget === 8 &&
66
+ guards.some((g) => g.kind === 'fleet-arrival' &&
67
+ g.character === character &&
68
+ g.intent.profile === profile &&
69
+ g.intent.game === game &&
70
+ g.address === accounts[5].address);
71
+ const xp = guards.find((g) => g.kind === 'xp-runtime' &&
72
+ g.intent.game === game &&
73
+ g.intent.character === character &&
74
+ g.intent.structure === undefined &&
75
+ (g.intent.profile === profile ||
76
+ (arrival && g.intent.profile === undefined)));
77
+ if (!xp || xp.kind !== 'xp-runtime')
78
+ fail();
79
+ for (const [index, expected, role] of [
80
+ [1, profile, AccountRole.WRITABLE],
81
+ [4, character, AccountRole.WRITABLE],
82
+ [5, accounts[5].address, AccountRole.WRITABLE],
83
+ [6, game, AccountRole.READONLY],
84
+ [layout.budget, xp.accounts.xpBudget, AccountRole.WRITABLE],
85
+ [layout.budget + 1, xp.accounts.xpBudgetConfig, AccountRole.READONLY],
86
+ ])
87
+ if (expected === undefined ||
88
+ accounts[index].address !== expected ||
89
+ accounts[index].role !== role)
90
+ fail();
91
+ if (layout.start &&
92
+ (accounts.at(-1).address !== '11111111111111111111111111111111' ||
93
+ accounts.at(-1).role !== AccountRole.READONLY))
94
+ fail();
95
+ if (layout.start &&
96
+ !guards.some((g) => g.kind === 'movement-character' &&
97
+ g.address === character &&
98
+ g.profile === profile &&
99
+ g.game === game))
100
+ fail();
101
+ }
102
+ }
103
+ //# sourceMappingURL=movement-xp-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"movement-xp-guard.js","sourceRoot":"","sources":["../../../src/internal/planning/movement-xp-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PlanPrecondition, PlanStep } from '../../planning/index.js';
2
+ export declare function validateOpenSignalInstructions(steps: readonly PlanStep[], guards: readonly PlanPrecondition[]): void;
3
+ //# sourceMappingURL=open-signal-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-signal-guard.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/open-signal-guard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAO1E,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAClC,IAAI,CA2CN"}
@@ -0,0 +1,31 @@
1
+ import { SageSdkError } from '../../client/errors.js';
2
+ import { openSignalAccounts, OPEN_SCAN_SIGNAL_DISCRIMINATOR, SAGE_PROGRAM_ADDRESS, } from '../c4/open-signal.js';
3
+ export function validateOpenSignalInstructions(steps, guards) {
4
+ const selected = guards.filter((g) => g.kind === 'scan-signal-open');
5
+ const instructions = steps.filter(({ instruction: i }) => i.programAddress === SAGE_PROGRAM_ADDRESS &&
6
+ OPEN_SCAN_SIGNAL_DISCRIMINATOR.every((v, n) => i.data?.[n] === v));
7
+ if (!selected.length && !instructions.length)
8
+ return;
9
+ const bad = () => {
10
+ throw new SageSdkError('ACTION_PRECONDITION_FAILED', 'Signal setup instructions and safeguards do not match. Recreate the Plan with planOpenScanSignal; do not alter saved intent, accounts or instructions.');
11
+ };
12
+ if (selected.length !== instructions.length ||
13
+ new Set(selected.map((g) => g.address)).size !== selected.length)
14
+ bad();
15
+ for (const guard of selected) {
16
+ const expected = openSignalAccounts(guard);
17
+ if (!guards.some((g) => g.kind === 'game-account' && g.address === guard.game))
18
+ bad();
19
+ const matches = instructions.filter((step) => step.signers.length === 1 &&
20
+ step.signers[0] === guard.authority &&
21
+ step.instruction.data?.length === 10 &&
22
+ step.instruction.data[8] + step.instruction.data[9] * 256 ===
23
+ guard.keyIndex &&
24
+ step.instruction.accounts?.length === expected.length &&
25
+ expected.every((a, n) => step.instruction.accounts?.[n]?.address === a.address &&
26
+ step.instruction.accounts[n]?.role === a.role));
27
+ if (matches.length !== 1)
28
+ bad();
29
+ }
30
+ }
31
+ //# sourceMappingURL=open-signal-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-signal-guard.js","sourceRoot":"","sources":["../../../src/internal/planning/open-signal-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGtD,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,MAAM,UAAU,8BAA8B,CAC5C,KAA0B,EAC1B,MAAmC;IAEnC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAwB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAC3D,CAAC;IACF,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAC/B,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CACrB,CAAC,CAAC,cAAc,KAAK,oBAAoB;QACzC,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CACpE,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM;QAAE,OAAO;IACrD,MAAM,GAAG,GAAG,GAAU,EAAE;QACtB,MAAM,IAAI,YAAY,CACpB,4BAA4B,EAC5B,wJAAwJ,CACzJ,CAAC;IACJ,CAAC,CAAC;IACF,IACE,QAAQ,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM;QACvC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM;QAEhE,GAAG,EAAE,CAAC;IACR,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC3C,IACE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC;YAE1E,GAAG,EAAE,CAAC;QACR,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CACjC,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS;YACnC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,KAAK,EAAE;YACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAE,GAAG,GAAG;gBACzD,KAAK,CAAC,QAAQ;YAChB,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM;YACrD,QAAQ,CAAC,KAAK,CACZ,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,OAAO;gBACrD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC,IAAI,CAChD,CACJ,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,GAAG,EAAE,CAAC;IAClC,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { Address } from '@solana/kit';
2
+ import { openSignalInstruction } from '../c4/open-signal.js';
3
+ export { openSignalInstruction };
4
+ import type { RawAccount } from '../../client/contracts.js';
5
+ export interface OpenSignalIntent {
6
+ readonly game: Address;
7
+ readonly fleet: Address;
8
+ readonly profile: Address;
9
+ readonly authority: Address;
10
+ readonly keyIndex: number;
11
+ }
12
+ export interface OpenSignalGuard extends OpenSignalIntent {
13
+ readonly kind: 'scan-signal-open';
14
+ readonly address: Address;
15
+ readonly character: Address;
16
+ readonly maximumProfileDebit: bigint;
17
+ readonly authorityHash: string;
18
+ readonly describes: string;
19
+ readonly dataHash?: never;
20
+ }
21
+ export declare function resolveOpenSignal(intent: OpenSignalIntent): Promise<{
22
+ address: Address;
23
+ character: Address;
24
+ }>;
25
+ export declare function openSignalAddresses(guard: OpenSignalGuard): readonly Address[];
26
+ export declare function validateOpenSignal(guard: OpenSignalGuard, accounts: ReadonlyMap<Address, RawAccount | undefined>, expectedAuthorityHash?: string): Promise<{
27
+ profileDebit: bigint;
28
+ profileReserve: bigint;
29
+ authorityHash: string;
30
+ }>;
31
+ //# sourceMappingURL=open-signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-signal.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/open-signal.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,qBAAqB,EAItB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAY5D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AACD,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;CAC3B;AACD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAMnD;AAID,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,eAAe,GACrB,SAAS,OAAO,EAAE,CASpB;AACD,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,eAAe,EACtB,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC,EACtD,qBAAqB,CAAC,EAAE,MAAM;;;;GAwG/B"}
@@ -0,0 +1,85 @@
1
+ import { hashAccountState } from './account-state.js';
2
+ import { openSignalInstruction, scanSignalSize, SAGE_PROGRAM_ADDRESS, PLAYER_PROFILE_PROGRAM_ADDRESS, } from '../c4/open-signal.js';
3
+ export { openSignalInstruction };
4
+ import { SageSdkError } from '../../client/errors.js';
5
+ import { fleetAccountDefinition, deriveFleetAddress } from '../c4/fleet.js';
6
+ import { profileAccountDefinition, characterAccountDefinition, findCharacterPda, } from '../c4/identity.js';
7
+ import { deriveScanLifecycleAddress } from '../c4/scan-lifecycle.js';
8
+ import { CLOCK_ADDRESS, readClock } from './faction-enrollment.js';
9
+ import { RENT_ADDRESS, readRent } from './rent.js';
10
+ export async function resolveOpenSignal(intent) {
11
+ const [address, character] = await Promise.all([
12
+ deriveScanLifecycleAddress('scanSignal', intent.game, intent.fleet),
13
+ findCharacterPda(intent.profile, intent.game),
14
+ ]);
15
+ return { address: address[0], character };
16
+ }
17
+ function fail(address, message) {
18
+ throw new SageSdkError('ACTION_PRECONDITION_FAILED', message, { address });
19
+ }
20
+ export function openSignalAddresses(guard) {
21
+ return [
22
+ guard.address,
23
+ guard.fleet,
24
+ guard.profile,
25
+ guard.character,
26
+ RENT_ADDRESS,
27
+ CLOCK_ADDRESS,
28
+ ];
29
+ }
30
+ export async function validateOpenSignal(guard, accounts, expectedAuthorityHash) {
31
+ const resolved = await resolveOpenSignal(guard);
32
+ if (resolved.address !== guard.address ||
33
+ resolved.character !== guard.character)
34
+ fail(guard.address, 'Signal or Character PDA contradicts the Game, Fleet or Profile. Recreate the setup Plan from fresh canonical accounts.');
35
+ const required = (address) => {
36
+ const raw = accounts.get(address);
37
+ if (!raw || raw.address !== address || raw.executable)
38
+ fail(address, 'A signal setup prerequisite is missing, executable or has a contradictory address. Refetch valid accounts and recreate the Plan.');
39
+ return raw;
40
+ };
41
+ if (accounts.get(guard.address))
42
+ fail(guard.address, 'The canonical signal already exists. Refetch and reuse it; setup cannot replace an existing signal.');
43
+ const fleet = fleetAccountDefinition.decode(required(guard.fleet));
44
+ if (fleet.game !== guard.game ||
45
+ fleet.ownerProfile !== guard.profile ||
46
+ (await deriveFleetAddress(fleet)) !== guard.fleet ||
47
+ fleet.subProfile !== '11111111111111111111111111111111')
48
+ fail(guard.fleet, 'The Fleet has a different Game, owner, canonical PDA or delegated controller. Refetch a directly owned Fleet and recreate setup.');
49
+ const character = characterAccountDefinition.decode(required(guard.character));
50
+ if (character.game !== guard.game ||
51
+ character.playerProfile !== guard.profile)
52
+ fail(guard.character, 'The owner/controller Character does not belong to this Game and Profile. Refetch the canonical Character and recreate setup.');
53
+ const profileRaw = required(guard.profile);
54
+ const profile = profileAccountDefinition.decode(profileRaw);
55
+ const now = readClock(required(CLOCK_ADDRESS));
56
+ const key = profile.keys[guard.keyIndex];
57
+ if (!key ||
58
+ key.address !== guard.authority ||
59
+ (key.expiresAtRaw >= 0n && key.expiresAtRaw < now))
60
+ fail(guard.profile, 'The selected direct Profile key is missing, mismatched or expired. Refetch the Profile, select a current key and recreate setup.');
61
+ if (key.scope !== PLAYER_PROFILE_PROGRAM_ADDRESS &&
62
+ key.scope !== SAGE_PROGRAM_ADDRESS)
63
+ fail(guard.profile, 'The selected key has an unrelated program scope. Select a current Profile- or SAGE-scoped direct key and recreate setup; instruction permission acceptance remains chain-authoritative.');
64
+ const authorityHash = await hashAccountState(profileRaw.owner, new TextEncoder().encode(JSON.stringify([
65
+ profile.version,
66
+ profile.authKeyCount,
67
+ profile.keyThreshold,
68
+ key.address,
69
+ key.scope,
70
+ String(key.permissionsRaw),
71
+ String(key.expiresAtRaw),
72
+ ])));
73
+ if (expectedAuthorityHash !== undefined &&
74
+ authorityHash !== expectedAuthorityHash)
75
+ fail(guard.profile, 'The selected Profile authorization changed. Refetch the key and recreate setup before signing.');
76
+ const rent = readRent(required(RENT_ADDRESS));
77
+ const profileDebit = rent(scanSignalSize());
78
+ const profileReserve = rent(profileRaw.data.length);
79
+ if (profileDebit > guard.maximumProfileDebit)
80
+ fail(guard.profile, 'Signal rent now exceeds the approved Profile debit. Recreate setup and inspect the new funding ceiling before signing.');
81
+ if (profileRaw.lamports < profileReserve + profileDebit)
82
+ fail(guard.profile, 'The Profile lacks signal rent while retaining its own storage reserve. Fund the Profile explicitly, refetch and recreate setup; transaction fees are separate.');
83
+ return { profileDebit, profileReserve, authorityHash };
84
+ }
85
+ //# sourceMappingURL=open-signal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-signal.js","sourceRoot":"","sources":["../../../src/internal/planning/open-signal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,oBAAoB,EACpB,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAkBnD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAwB;IAExB,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7C,0BAA0B,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;QACnE,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;KAC9C,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5C,CAAC;AACD,SAAS,IAAI,CAAC,OAAgB,EAAE,OAAe;IAC7C,MAAM,IAAI,YAAY,CAAC,4BAA4B,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAC7E,CAAC;AACD,MAAM,UAAU,mBAAmB,CACjC,KAAsB;IAEtB,OAAO;QACL,KAAK,CAAC,OAAO;QACb,KAAK,CAAC,KAAK;QACX,KAAK,CAAC,OAAO;QACb,KAAK,CAAC,SAAS;QACf,YAAY;QACZ,aAAa;KACd,CAAC;AACJ,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAsB,EACtB,QAAsD,EACtD,qBAA8B;IAE9B,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAChD,IACE,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;QAClC,QAAQ,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;QAEtC,IAAI,CACF,KAAK,CAAC,OAAO,EACb,wHAAwH,CACzH,CAAC;IACJ,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAc,EAAE;QAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,IAAI,GAAG,CAAC,UAAU;YACnD,IAAI,CACF,OAAO,EACP,kIAAkI,CACnI,CAAC;QACJ,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC;QAC7B,IAAI,CACF,KAAK,CAAC,OAAO,EACb,qGAAqG,CACtG,CAAC;IACJ,MAAM,KAAK,GAAG,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,IACE,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;QACzB,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,OAAO;QACpC,CAAC,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK;QACjD,KAAK,CAAC,UAAU,KAAK,kCAAkC;QAEvD,IAAI,CACF,KAAK,CAAC,KAAK,EACX,kIAAkI,CACnI,CAAC;IACJ,MAAM,SAAS,GAAG,0BAA0B,CAAC,MAAM,CACjD,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAC1B,CAAC;IACF,IACE,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;QAC7B,SAAS,CAAC,aAAa,KAAK,KAAK,CAAC,OAAO;QAEzC,IAAI,CACF,KAAK,CAAC,SAAS,EACf,8HAA8H,CAC/H,CAAC;IACJ,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzC,IACE,CAAC,GAAG;QACJ,GAAG,CAAC,OAAO,KAAK,KAAK,CAAC,SAAS;QAC/B,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,IAAI,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC;QAElD,IAAI,CACF,KAAK,CAAC,OAAO,EACb,kIAAkI,CACnI,CAAC;IACJ,IACE,GAAG,CAAC,KAAK,KAAK,8BAA8B;QAC5C,GAAG,CAAC,KAAK,KAAK,oBAAoB;QAElC,IAAI,CACF,KAAK,CAAC,OAAO,EACb,yLAAyL,CAC1L,CAAC;IACJ,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAC1C,UAAU,CAAC,KAAK,EAChB,IAAI,WAAW,EAAE,CAAC,MAAM,CACtB,IAAI,CAAC,SAAS,CAAC;QACb,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,YAAY;QACpB,OAAO,CAAC,YAAY;QACpB,GAAG,CAAC,OAAO;QACX,GAAG,CAAC,KAAK;QACT,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;KACzB,CAAC,CACH,CACF,CAAC;IACF,IACE,qBAAqB,KAAK,SAAS;QACnC,aAAa,KAAK,qBAAqB;QAEvC,IAAI,CACF,KAAK,CAAC,OAAO,EACb,gGAAgG,CACjG,CAAC;IACJ,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,YAAY,GAAG,KAAK,CAAC,mBAAmB;QAC1C,IAAI,CACF,KAAK,CAAC,OAAO,EACb,wHAAwH,CACzH,CAAC;IACJ,IAAI,UAAU,CAAC,QAAQ,GAAG,cAAc,GAAG,YAAY;QACrD,IAAI,CACF,KAAK,CAAC,OAAO,EACb,gKAAgK,CACjK,CAAC;IACJ,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;AACzD,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Address } from '@solana/kit';
2
+ import type { RawAccount } from '../../client/contracts.js';
3
+ import { SageSdkError } from '../../client/errors.js';
4
+ /** Shared exact-range Rent calculation, including the account overhead. */
5
+ export declare function rentMinimumBalance(rate: bigint, threshold: number, length: number, address?: Address): bigint;
6
+ export declare const SYSVAR_OWNER: Address;
7
+ export declare const RENT_ADDRESS: Address;
8
+ /** Validated Rent inputs and the existing minimum-balance callable. */
9
+ export interface RentCalculation {
10
+ (length: number): bigint;
11
+ readonly rentLamportsPerByteYear: bigint;
12
+ readonly rentExemptionThreshold: number;
13
+ }
14
+ export declare function readRent(account: RawAccount): RentCalculation;
15
+ /** Internal estimate-data failure; never used for transport or lifecycle errors. */
16
+ export declare class RentCalculationError extends SageSdkError {
17
+ constructor(message: string, address: Address);
18
+ }
19
+ //# sourceMappingURL=rent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rent.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/rent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,OAAsB,GAC9B,MAAM,CAcR;AAED,eAAO,MAAM,YAAY,EAC0B,OAAO,CAAC;AAE3D,eAAO,MAAM,YAAY,EAC0B,OAAO,CAAC;AAE3D,uEAAuE;AACvE,MAAM,WAAW,eAAe;IAC9B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;CACzC;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,eAAe,CA6B7D;AAMD,oFAAoF;AACpF,qBAAa,oBAAqB,SAAQ,YAAY;gBACxC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAG9C"}
@@ -0,0 +1,35 @@
1
+ import { SageSdkError } from '../../client/errors.js';
2
+ /** Shared exact-range Rent calculation, including the account overhead. */
3
+ export function rentMinimumBalance(rate, threshold, length, address = RENT_ADDRESS) {
4
+ const base = (BigInt(length) + 128n) * rate;
5
+ const result = Number(base) * threshold;
6
+ if (base > BigInt(Number.MAX_SAFE_INTEGER) ||
7
+ !Number.isFinite(result) ||
8
+ result < 0 ||
9
+ result > Number.MAX_SAFE_INTEGER)
10
+ throw new RentCalculationError('Account storage funding exceeds the supported exact calculation range. Use a supported Rent configuration before planning this action.', address);
11
+ return BigInt(Math.trunc(result));
12
+ }
13
+ export const SYSVAR_OWNER = 'Sysvar1111111111111111111111111111111111111';
14
+ export const RENT_ADDRESS = 'SysvarRent111111111111111111111111111111111';
15
+ export function readRent(account) {
16
+ if (account.owner !== SYSVAR_OWNER ||
17
+ account.executable ||
18
+ account.data.length !== 17)
19
+ rentFailure('The Rent sysvar has an unexpected owner or layout. Refresh the configured deployment before calculating storage funding.', account.address);
20
+ const view = new DataView(account.data.buffer, account.data.byteOffset, account.data.byteLength);
21
+ const rate = view.getBigUint64(0, true), threshold = view.getFloat64(8, true);
22
+ if (!Number.isFinite(threshold) || threshold < 0 || view.getUint8(16) > 100)
23
+ rentFailure('The Rent sysvar contains unsupported values. Refresh the deployment or use a supported configuration before planning this action.', account.address);
24
+ return Object.freeze(Object.assign((length) => rentMinimumBalance(rate, threshold, length, account.address), { rentLamportsPerByteYear: rate, rentExemptionThreshold: threshold }));
25
+ }
26
+ function rentFailure(message, address) {
27
+ throw new RentCalculationError(message, address);
28
+ }
29
+ /** Internal estimate-data failure; never used for transport or lifecycle errors. */
30
+ export class RentCalculationError extends SageSdkError {
31
+ constructor(message, address) {
32
+ super('ACTION_PRECONDITION_FAILED', message, { address });
33
+ }
34
+ }
35
+ //# sourceMappingURL=rent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rent.js","sourceRoot":"","sources":["../../../src/internal/planning/rent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,2EAA2E;AAC3E,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,SAAiB,EACjB,MAAc,EACd,UAAmB,YAAY;IAE/B,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IACxC,IACE,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACtC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxB,MAAM,GAAG,CAAC;QACV,MAAM,GAAG,MAAM,CAAC,gBAAgB;QAEhC,MAAM,IAAI,oBAAoB,CAC5B,wIAAwI,EACxI,OAAO,CACR,CAAC;IACJ,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GACvB,6CAAwD,CAAC;AAE3D,MAAM,CAAC,MAAM,YAAY,GACvB,6CAAwD,CAAC;AAS3D,MAAM,UAAU,QAAQ,CAAC,OAAmB;IAC1C,IACE,OAAO,CAAC,KAAK,KAAK,YAAY;QAC9B,OAAO,CAAC,UAAU;QAClB,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE;QAE1B,WAAW,CACT,0HAA0H,EAC1H,OAAO,CAAC,OAAO,CAChB,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,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,EACrC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG;QACzE,WAAW,CACT,mIAAmI,EACnI,OAAO,CAAC,OAAO,CAChB,CAAC;IACJ,OAAO,MAAM,CAAC,MAAM,CAClB,MAAM,CAAC,MAAM,CACX,CAAC,MAAc,EAAE,EAAE,CACjB,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,EAC9D,EAAE,uBAAuB,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,CACrE,CACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,OAAgB;IACpD,MAAM,IAAI,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,oFAAoF;AACpF,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IACpD,YAAY,OAAe,EAAE,OAAgB;QAC3C,KAAK,CAAC,4BAA4B,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import type { PlanPrecondition, PlanStep } from '../../planning/index.js';
2
+ export declare function validateRespawnInstructions(steps: readonly PlanStep[], guards: readonly PlanPrecondition[]): void;
3
+ //# sourceMappingURL=respawn-guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"respawn-guards.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/respawn-guards.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAO1E,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAClC,IAAI,CA8CN"}
@@ -0,0 +1,41 @@
1
+ import { AccountRole } from '@solana/kit';
2
+ import { InvalidActionInputError } from '../../client/errors.js';
3
+ import { IDLE_TO_RESPAWN_DISCRIMINATOR, RESPAWN_TO_DOCKED_DISCRIMINATOR, SAGE_PROGRAM_ADDRESS, } from '../c4/runtime-bindings.js';
4
+ export function validateRespawnInstructions(steps, guards) {
5
+ const selected = guards.filter((g) => g.kind === 'fleet-respawn');
6
+ const recovery = steps.filter(({ instruction: i }) => i.programAddress === SAGE_PROGRAM_ADDRESS &&
7
+ [IDLE_TO_RESPAWN_DISCRIMINATOR, RESPAWN_TO_DOCKED_DISCRIMINATOR].some((d) => d.every((v, n) => i.data?.[n] === v)));
8
+ if (!selected.length && !recovery.length)
9
+ return;
10
+ const bad = () => {
11
+ throw new InvalidActionInputError('respawn', undefined, 'one standalone recovery instruction with its matching safeguard', 'Recreate the recovery Plan. Start and timed completion are separate transactions; do not combine recovery with other actions.');
12
+ };
13
+ if (steps.length !== 1 || recovery.length !== 1 || selected.length !== 1)
14
+ bad();
15
+ const guard = selected[0];
16
+ const step = recovery[0];
17
+ const i = step.instruction;
18
+ const start = guard.phase === 'start';
19
+ const d = start
20
+ ? IDLE_TO_RESPAWN_DISCRIMINATOR
21
+ : RESPAWN_TO_DOCKED_DISCRIMINATOR;
22
+ const accounts = i.accounts;
23
+ if (!i.data ||
24
+ i.data.length !== 10 ||
25
+ !d.every((v, n) => i.data[n] === v) ||
26
+ i.data[8] + i.data[9] * 256 !== guard.keyIndex ||
27
+ accounts?.length !== (start ? 11 : 8) ||
28
+ step.signers.length !== 1 ||
29
+ step.signers[0] !== guard.authority)
30
+ bad();
31
+ for (const [n, address, role] of [
32
+ [0, guard.authority, AccountRole.READONLY_SIGNER],
33
+ [1, guard.profile, AccountRole.WRITABLE],
34
+ [start ? 5 : 4, guard.address, AccountRole.WRITABLE],
35
+ [start ? 8 : 5, guard.game, AccountRole.READONLY],
36
+ [6, guard.system, AccountRole.READONLY],
37
+ ])
38
+ if (accounts[n]?.address !== address || accounts[n]?.role !== role)
39
+ bad();
40
+ }
41
+ //# sourceMappingURL=respawn-guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"respawn-guards.js","sourceRoot":"","sources":["../../../src/internal/planning/respawn-guards.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { type Address } from '@solana/kit';
2
+ import type { SageContext } from '../../client/contracts.js';
3
+ import type { PlanPrecondition, PlanStep } from '../../planning/index.js';
4
+ import { type HistoryIntent, type ResolvedDemocracyHistory } from './democracy-history.js';
5
+ import { type XpRuntimeIntent, type XpRuntimeAccounts } from './xp-runtime.js';
6
+ import { resolveGovernanceFees, type FeeIntent } from './governance-fees.js';
7
+ type FeeAccounts = Awaited<ReturnType<typeof resolveGovernanceFees>>['accounts'];
8
+ type BaseGuard = {
9
+ readonly address: Address;
10
+ readonly describes: string;
11
+ readonly dataHash?: never;
12
+ };
13
+ /** Finite runtime eligibility and consumed fee routes, excluding changing balances. */
14
+ export type RuntimeGuard = BaseGuard & ({
15
+ readonly kind: 'democracy-history';
16
+ readonly intent: HistoryIntent;
17
+ readonly accounts: ResolvedDemocracyHistory['accounts'];
18
+ } | {
19
+ readonly kind: 'xp-runtime';
20
+ readonly intent: XpRuntimeIntent;
21
+ readonly accounts: XpRuntimeAccounts;
22
+ } | {
23
+ readonly kind: 'governance-fees';
24
+ readonly intent: FeeIntent;
25
+ readonly accounts: FeeAccounts;
26
+ });
27
+ export type RuntimeWire<T> = T extends bigint ? string : T extends Address ? string : T extends object ? {
28
+ readonly [K in keyof T]: RuntimeWire<T[K]>;
29
+ } : T;
30
+ export type RuntimeGuardJson = RuntimeWire<RuntimeGuard>;
31
+ export declare function isRuntimeGuard(value: {
32
+ readonly kind?: unknown;
33
+ }): value is RuntimeGuard;
34
+ /** Strict nested runtime parsing applies both to factory values and persisted JSON. */
35
+ export declare function normalizeRuntimeGuard(value: unknown, field: string, wire?: boolean): RuntimeGuard;
36
+ /** Bigints use canonical decimal strings; schema validation excludes arbitrary object graphs. */
37
+ export declare function runtimeGuardToJSON(guard: RuntimeGuard): RuntimeGuardJson;
38
+ /** Resolve canonical accounts again; shared balances and XP counters are not compared. */
39
+ export declare function revalidateRuntimeGuards(ctx: SageContext, guards: readonly RuntimeGuard[], freshGameVersions?: Map<Address, number>): Promise<void>;
40
+ /** Old layouts and unguarded persisted instructions fail before assembly or signing. */
41
+ export declare function validateRuntimeInstructions(steps: readonly PlanStep[], preconditions: readonly PlanPrecondition[]): void;
42
+ export {};
43
+ //# sourceMappingURL=runtime-guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-guards.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/runtime-guards.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,OAAO,EAGb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAwB7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAGL,KAAK,aAAa,EAElB,KAAK,wBAAwB,EAC9B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EAErB,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;AAE9B,KAAK,WAAW,GAAG,OAAO,CACxB,UAAU,CAAC,OAAO,qBAAqB,CAAC,CACzC,CAAC,UAAU,CAAC,CAAC;AACd,KAAK,SAAS,GAAG;IACf,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;CAC3B,CAAC;AACF,uFAAuF;AACvF,MAAM,MAAM,YAAY,GAAG,SAAS,GAClC,CACI;IACE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC,UAAU,CAAC,CAAC;CACzD,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;CACtC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;CAChC,CACJ,CAAC;AACJ,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GACzC,MAAM,GACN,CAAC,SAAS,OAAO,GACf,MAAM,GACN,CAAC,SAAS,MAAM,GACd;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GAC9C,CAAC,CAAC;AACV,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;AACzD,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,KAAK,IAAI,YAAY,CAMxB;AAsLD,uFAAuF;AACvF,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,IAAI,UAAQ,GACX,YAAY,CAqDd;AACD,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,gBAAgB,CAMxE;AAiBD,0FAA0F;AAC1F,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,iBAAiB,uBAA6B,GAC7C,OAAO,CAAC,IAAI,CAAC,CA2Cf;AA8YD,wFAAwF;AACxF,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,aAAa,EAAE,SAAS,gBAAgB,EAAE,GACzC,IAAI,CA4IN"}