@aephia/atlas-kit 0.6.0-next.13 → 0.6.0-next.131
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.
- package/README.md +3 -1
- package/dist/cargo/actions/deposit.d.ts +2 -2
- package/dist/cargo/actions/deposit.d.ts.map +1 -1
- package/dist/cargo/actions/deposit.js +28 -117
- package/dist/cargo/actions/deposit.js.map +1 -1
- package/dist/cargo/actions/index.d.ts +1 -1
- package/dist/cargo/actions/index.d.ts.map +1 -1
- package/dist/cargo/actions/index.js +28 -84
- package/dist/cargo/actions/index.js.map +1 -1
- package/dist/cargo/actions/wallet-context.d.ts +52 -3
- package/dist/cargo/actions/wallet-context.d.ts.map +1 -1
- package/dist/cargo/actions/wallet-context.js +118 -7
- package/dist/cargo/actions/wallet-context.js.map +1 -1
- package/dist/cargo/actions/wallet-token.d.ts +1 -6
- package/dist/cargo/actions/wallet-token.d.ts.map +1 -1
- package/dist/cargo/actions/wallet-token.js +0 -53
- package/dist/cargo/actions/wallet-token.js.map +1 -1
- package/dist/cargo/actions/withdrawal.d.ts +1 -1
- package/dist/cargo/actions/withdrawal.d.ts.map +1 -1
- package/dist/cargo/actions/withdrawal.js +39 -164
- package/dist/cargo/actions/withdrawal.js.map +1 -1
- package/dist/cargo/index.d.ts.map +1 -1
- package/dist/cargo/index.js +2 -10
- package/dist/cargo/index.js.map +1 -1
- package/dist/claim-stakes/actions/index.d.ts +57 -8
- package/dist/claim-stakes/actions/index.d.ts.map +1 -1
- package/dist/claim-stakes/actions/index.js +541 -675
- package/dist/claim-stakes/actions/index.js.map +1 -1
- package/dist/claim-stakes/index.d.ts +21 -6
- package/dist/claim-stakes/index.d.ts.map +1 -1
- package/dist/claim-stakes/index.js +33 -19
- package/dist/claim-stakes/index.js.map +1 -1
- package/dist/client/context.d.ts.map +1 -1
- package/dist/client/context.js +1 -1
- package/dist/client/context.js.map +1 -1
- package/dist/client/contracts.d.ts +16 -6
- package/dist/client/contracts.d.ts.map +1 -1
- package/dist/client/errors.d.ts +2 -2
- package/dist/client/errors.d.ts.map +1 -1
- package/dist/client/errors.js.map +1 -1
- package/dist/client/index.d.ts +35 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +35 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/rpc-subscription-provider.d.ts +35 -0
- package/dist/client/rpc-subscription-provider.d.ts.map +1 -0
- package/dist/client/rpc-subscription-provider.js +190 -0
- package/dist/client/rpc-subscription-provider.js.map +1 -0
- package/dist/combat/actions/index.d.ts +15 -9
- package/dist/combat/actions/index.d.ts.map +1 -1
- package/dist/combat/actions/index.js +245 -274
- package/dist/combat/actions/index.js.map +1 -1
- package/dist/combat/index.d.ts +20 -5
- package/dist/combat/index.d.ts.map +1 -1
- package/dist/combat/index.js +12 -17
- package/dist/combat/index.js.map +1 -1
- package/dist/crafting/actions/index.d.ts +16 -5
- package/dist/crafting/actions/index.d.ts.map +1 -1
- package/dist/crafting/actions/index.js +204 -318
- package/dist/crafting/actions/index.js.map +1 -1
- package/dist/crafting/index.d.ts +33 -3
- package/dist/crafting/index.d.ts.map +1 -1
- package/dist/crafting/index.js +49 -28
- package/dist/crafting/index.js.map +1 -1
- package/dist/factions/actions/index.d.ts +2 -1
- package/dist/factions/actions/index.d.ts.map +1 -1
- package/dist/factions/actions/index.js +6 -4
- package/dist/factions/actions/index.js.map +1 -1
- package/dist/factions/index.d.ts +6 -1
- package/dist/factions/index.d.ts.map +1 -1
- package/dist/factions/index.js +16 -18
- package/dist/factions/index.js.map +1 -1
- package/dist/factions/profile-faction.d.ts +20 -8
- package/dist/factions/profile-faction.d.ts.map +1 -1
- package/dist/factions/profile-faction.js +20 -8
- package/dist/factions/profile-faction.js.map +1 -1
- package/dist/fleets/actions/add-ship.d.ts +35 -0
- package/dist/fleets/actions/add-ship.d.ts.map +1 -0
- package/dist/fleets/actions/add-ship.js +120 -0
- package/dist/fleets/actions/add-ship.js.map +1 -0
- package/dist/fleets/actions/create-fleet.d.ts +36 -0
- package/dist/fleets/actions/create-fleet.d.ts.map +1 -0
- package/dist/fleets/actions/create-fleet.js +108 -0
- package/dist/fleets/actions/create-fleet.js.map +1 -0
- package/dist/fleets/actions/crew-transfer.d.ts +41 -0
- package/dist/fleets/actions/crew-transfer.d.ts.map +1 -0
- package/dist/fleets/actions/crew-transfer.js +94 -0
- package/dist/fleets/actions/crew-transfer.js.map +1 -0
- package/dist/fleets/actions/dock-bounds.d.ts +38 -0
- package/dist/fleets/actions/dock-bounds.d.ts.map +1 -0
- package/dist/fleets/actions/dock-bounds.js +46 -0
- package/dist/fleets/actions/dock-bounds.js.map +1 -0
- package/dist/fleets/actions/index.d.ts +68 -26
- package/dist/fleets/actions/index.d.ts.map +1 -1
- package/dist/fleets/actions/index.js +395 -335
- package/dist/fleets/actions/index.js.map +1 -1
- package/dist/fleets/actions/respawn.d.ts +38 -0
- package/dist/fleets/actions/respawn.d.ts.map +1 -0
- package/dist/fleets/actions/respawn.js +93 -0
- package/dist/fleets/actions/respawn.js.map +1 -0
- package/dist/fleets/actions/ship-import.d.ts +1 -1
- package/dist/fleets/actions/ship-import.d.ts.map +1 -1
- package/dist/fleets/actions/ship-import.js +67 -91
- package/dist/fleets/actions/ship-import.js.map +1 -1
- package/dist/fleets/cooldown.d.ts +44 -0
- package/dist/fleets/cooldown.d.ts.map +1 -0
- package/dist/fleets/cooldown.js +43 -0
- package/dist/fleets/cooldown.js.map +1 -0
- package/dist/fleets/coordinate-warp-estimate.d.ts +70 -0
- package/dist/fleets/coordinate-warp-estimate.d.ts.map +1 -0
- package/dist/fleets/coordinate-warp-estimate.js +46 -0
- package/dist/fleets/coordinate-warp-estimate.js.map +1 -0
- package/dist/fleets/index.d.ts +35 -0
- package/dist/fleets/index.d.ts.map +1 -1
- package/dist/fleets/index.js +54 -12
- package/dist/fleets/index.js.map +1 -1
- package/dist/fleets/movement-arithmetic.d.ts +21 -0
- package/dist/fleets/movement-arithmetic.d.ts.map +1 -0
- package/dist/fleets/movement-arithmetic.js +41 -0
- package/dist/fleets/movement-arithmetic.js.map +1 -0
- package/dist/fleets/subwarp-estimate.d.ts +70 -0
- package/dist/fleets/subwarp-estimate.d.ts.map +1 -0
- package/dist/fleets/subwarp-estimate.js +38 -0
- package/dist/fleets/subwarp-estimate.js.map +1 -0
- package/dist/fleets/travel-profile.d.ts +102 -0
- package/dist/fleets/travel-profile.d.ts.map +1 -0
- package/dist/fleets/travel-profile.js +120 -0
- package/dist/fleets/travel-profile.js.map +1 -0
- package/dist/fleets/warp-lane-estimate.d.ts +59 -0
- package/dist/fleets/warp-lane-estimate.d.ts.map +1 -0
- package/dist/fleets/warp-lane-estimate.js +36 -0
- package/dist/fleets/warp-lane-estimate.js.map +1 -0
- package/dist/fleets/warp-lane-policy.d.ts +68 -0
- package/dist/fleets/warp-lane-policy.d.ts.map +1 -0
- package/dist/fleets/warp-lane-policy.js +91 -0
- package/dist/fleets/warp-lane-policy.js.map +1 -0
- package/dist/fleets/warp-lane-toll.d.ts +55 -0
- package/dist/fleets/warp-lane-toll.d.ts.map +1 -0
- package/dist/fleets/warp-lane-toll.js +79 -0
- package/dist/fleets/warp-lane-toll.js.map +1 -0
- package/dist/identity/actions/create-profile.d.ts +1 -1
- package/dist/identity/actions/create-profile.d.ts.map +1 -1
- package/dist/identity/actions/create-profile.js +2 -2
- package/dist/identity/actions/create-profile.js.map +1 -1
- package/dist/identity/actions/index.d.ts +5 -4
- package/dist/identity/actions/index.d.ts.map +1 -1
- package/dist/identity/actions/index.js +52 -29
- package/dist/identity/actions/index.js.map +1 -1
- package/dist/identity/actions/research-unlock.d.ts +52 -0
- package/dist/identity/actions/research-unlock.d.ts.map +1 -0
- package/dist/identity/actions/research-unlock.js +155 -0
- package/dist/identity/actions/research-unlock.js.map +1 -0
- package/dist/identity/index.d.ts +5 -2
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +6 -12
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/research-state.d.ts +60 -0
- package/dist/identity/research-state.d.ts.map +1 -0
- package/dist/identity/research-state.js +68 -0
- package/dist/identity/research-state.js.map +1 -0
- package/dist/index.d.ts +26 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -7
- package/dist/index.js.map +1 -1
- package/dist/internal/c4/account-decoding.d.ts +49 -0
- package/dist/internal/c4/account-decoding.d.ts.map +1 -0
- package/dist/internal/c4/account-decoding.js +74 -0
- package/dist/internal/c4/account-decoding.js.map +1 -0
- package/dist/internal/c4/cargo-bytes-config.d.ts +7 -0
- package/dist/internal/c4/cargo-bytes-config.d.ts.map +1 -0
- package/dist/internal/c4/cargo-bytes-config.js +19 -0
- package/dist/internal/c4/cargo-bytes-config.js.map +1 -0
- package/dist/internal/c4/cargo-pod.d.ts +15 -0
- package/dist/internal/c4/cargo-pod.d.ts.map +1 -0
- package/dist/internal/c4/cargo-pod.js +13 -0
- package/dist/internal/c4/cargo-pod.js.map +1 -0
- package/dist/internal/c4/character-modifier.d.ts +1 -1
- package/dist/internal/c4/character-modifier.d.ts.map +1 -1
- package/dist/internal/c4/character-registration.d.ts +2 -0
- package/dist/internal/c4/character-registration.d.ts.map +1 -1
- package/dist/internal/c4/character-registration.js +2 -0
- package/dist/internal/c4/character-registration.js.map +1 -1
- package/dist/internal/c4/character.d.ts +157 -0
- package/dist/internal/c4/character.d.ts.map +1 -0
- package/dist/internal/c4/character.js +64 -0
- package/dist/internal/c4/character.js.map +1 -0
- package/dist/internal/c4/claim-stake-building-definitions.d.ts.map +1 -1
- package/dist/internal/c4/claim-stake-building-definitions.js +2 -1
- package/dist/internal/c4/claim-stake-building-definitions.js.map +1 -1
- package/dist/internal/c4/claim-stake-configuration.d.ts.map +1 -1
- package/dist/internal/c4/claim-stake-configuration.js +5 -36
- package/dist/internal/c4/claim-stake-configuration.js.map +1 -1
- package/dist/internal/c4/claim-stake-definitions.d.ts +4 -4
- package/dist/internal/c4/claim-stake-definitions.d.ts.map +1 -1
- package/dist/internal/c4/claim-stake-definitions.js +2 -1
- package/dist/internal/c4/claim-stake-definitions.js.map +1 -1
- package/dist/internal/c4/claim-stake-plots.d.ts +17 -0
- package/dist/internal/c4/claim-stake-plots.d.ts.map +1 -0
- package/dist/internal/c4/claim-stake-plots.js +29 -0
- package/dist/internal/c4/claim-stake-plots.js.map +1 -0
- package/dist/internal/c4/claim-stake.d.ts +13 -33
- package/dist/internal/c4/claim-stake.d.ts.map +1 -1
- package/dist/internal/c4/claim-stake.js +49 -94
- package/dist/internal/c4/claim-stake.js.map +1 -1
- package/dist/internal/c4/combat.d.ts +1 -82
- package/dist/internal/c4/combat.d.ts.map +1 -1
- package/dist/internal/c4/combat.js +16 -213
- package/dist/internal/c4/combat.js.map +1 -1
- package/dist/internal/c4/crafting-process-codec.d.ts +13 -0
- package/dist/internal/c4/crafting-process-codec.d.ts.map +1 -0
- package/dist/internal/c4/crafting-process-codec.js +34 -0
- package/dist/internal/c4/crafting-process-codec.js.map +1 -0
- package/dist/internal/c4/crafting.d.ts +27 -33
- package/dist/internal/c4/crafting.d.ts.map +1 -1
- package/dist/internal/c4/crafting.js +76 -127
- package/dist/internal/c4/crafting.js.map +1 -1
- package/dist/internal/c4/currency-cache.d.ts +6 -0
- package/dist/internal/c4/currency-cache.d.ts.map +1 -0
- package/dist/internal/c4/currency-cache.js +27 -0
- package/dist/internal/c4/currency-cache.js.map +1 -0
- package/dist/internal/c4/discriminators.d.ts +85 -0
- package/dist/internal/c4/discriminators.d.ts.map +1 -0
- package/dist/internal/c4/discriminators.js +174 -0
- package/dist/internal/c4/discriminators.js.map +1 -0
- package/dist/internal/c4/docking-funding.d.ts +4 -0
- package/dist/internal/c4/docking-funding.d.ts.map +1 -0
- package/dist/internal/c4/docking-funding.js +11 -0
- package/dist/internal/c4/docking-funding.js.map +1 -0
- package/dist/internal/c4/faction-epoch-meter.d.ts +10 -0
- package/dist/internal/c4/faction-epoch-meter.d.ts.map +1 -0
- package/dist/internal/c4/faction-epoch-meter.js +26 -0
- package/dist/internal/c4/faction-epoch-meter.js.map +1 -0
- package/dist/internal/c4/faction-treasury.d.ts +23 -0
- package/dist/internal/c4/faction-treasury.d.ts.map +1 -0
- package/dist/internal/c4/faction-treasury.js +41 -0
- package/dist/internal/c4/faction-treasury.js.map +1 -0
- package/dist/internal/c4/faction.d.ts +21 -0
- package/dist/internal/c4/faction.d.ts.map +1 -0
- package/dist/internal/c4/faction.js +23 -0
- package/dist/internal/c4/faction.js.map +1 -0
- package/dist/internal/c4/factions.d.ts +15 -57
- package/dist/internal/c4/factions.d.ts.map +1 -1
- package/dist/internal/c4/factions.js +80 -223
- package/dist/internal/c4/factions.js.map +1 -1
- package/dist/internal/c4/fleet-arrival.d.ts +28 -0
- package/dist/internal/c4/fleet-arrival.d.ts.map +1 -0
- package/dist/internal/c4/fleet-arrival.js +42 -0
- package/dist/internal/c4/fleet-arrival.js.map +1 -0
- package/dist/internal/c4/fleet-creation.d.ts +7 -0
- package/dist/internal/c4/fleet-creation.d.ts.map +1 -0
- package/dist/internal/c4/fleet-creation.js +171 -0
- package/dist/internal/c4/fleet-creation.js.map +1 -0
- package/dist/internal/c4/fleet-crew-binding.d.ts +9 -0
- package/dist/internal/c4/fleet-crew-binding.d.ts.map +1 -1
- package/dist/internal/c4/fleet-crew-binding.js +31 -44
- package/dist/internal/c4/fleet-crew-binding.js.map +1 -1
- package/dist/internal/c4/fleet-respawn.d.ts +17 -0
- package/dist/internal/c4/fleet-respawn.d.ts.map +1 -0
- package/dist/internal/c4/fleet-respawn.js +62 -0
- package/dist/internal/c4/fleet-respawn.js.map +1 -0
- package/dist/internal/c4/fleet-ship-assembly.d.ts +11 -0
- package/dist/internal/c4/fleet-ship-assembly.d.ts.map +1 -0
- package/dist/internal/c4/fleet-ship-assembly.js +44 -0
- package/dist/internal/c4/fleet-ship-assembly.js.map +1 -0
- package/dist/internal/c4/fleet.d.ts +48 -19
- package/dist/internal/c4/fleet.d.ts.map +1 -1
- package/dist/internal/c4/fleet.js +50 -87
- package/dist/internal/c4/fleet.js.map +1 -1
- package/dist/internal/c4/game-definition-layout.d.ts +2 -0
- package/dist/internal/c4/game-definition-layout.d.ts.map +1 -1
- package/dist/internal/c4/game-definition-layout.js +4 -0
- package/dist/internal/c4/game-definition-layout.js.map +1 -1
- package/dist/internal/c4/game.d.ts +101 -30
- package/dist/internal/c4/game.d.ts.map +1 -1
- package/dist/internal/c4/game.js +203 -124
- package/dist/internal/c4/game.js.map +1 -1
- package/dist/internal/c4/identity.d.ts +3 -152
- package/dist/internal/c4/identity.d.ts.map +1 -1
- package/dist/internal/c4/identity.js +19 -126
- package/dist/internal/c4/identity.js.map +1 -1
- package/dist/internal/c4/local-market-order.d.ts +29 -0
- package/dist/internal/c4/local-market-order.d.ts.map +1 -0
- package/dist/internal/c4/local-market-order.js +46 -0
- package/dist/internal/c4/local-market-order.js.map +1 -0
- package/dist/internal/c4/loot-layout.js +1 -1
- package/dist/internal/c4/loot-layout.js.map +1 -1
- package/dist/internal/c4/loot.d.ts +89 -0
- package/dist/internal/c4/loot.d.ts.map +1 -0
- package/dist/internal/c4/loot.js +109 -0
- package/dist/internal/c4/loot.js.map +1 -0
- package/dist/internal/c4/loyalty.d.ts +0 -27
- package/dist/internal/c4/loyalty.d.ts.map +1 -1
- package/dist/internal/c4/loyalty.js +32 -160
- package/dist/internal/c4/loyalty.js.map +1 -1
- package/dist/internal/c4/market.d.ts +2 -38
- package/dist/internal/c4/market.d.ts.map +1 -1
- package/dist/internal/c4/market.js +26 -120
- package/dist/internal/c4/market.js.map +1 -1
- package/dist/internal/c4/mining-instructions.d.ts +2 -0
- package/dist/internal/c4/mining-instructions.d.ts.map +1 -0
- package/dist/internal/c4/mining-instructions.js +3 -0
- package/dist/internal/c4/mining-instructions.js.map +1 -0
- package/dist/internal/c4/open-signal.d.ts +8 -0
- package/dist/internal/c4/open-signal.d.ts.map +1 -0
- package/dist/internal/c4/open-signal.js +37 -0
- package/dist/internal/c4/open-signal.js.map +1 -0
- package/dist/internal/c4/pda.d.ts +43 -0
- package/dist/internal/c4/pda.d.ts.map +1 -1
- package/dist/internal/c4/pda.js +83 -17
- package/dist/internal/c4/pda.js.map +1 -1
- package/dist/internal/c4/profile-faction.d.ts +2 -1
- package/dist/internal/c4/profile-faction.d.ts.map +1 -1
- package/dist/internal/c4/profile-faction.js +36 -72
- package/dist/internal/c4/profile-faction.js.map +1 -1
- package/dist/internal/c4/profile-permissions.d.ts +1 -1
- package/dist/internal/c4/profile-permissions.d.ts.map +1 -1
- package/dist/internal/c4/profile-permissions.js +4 -1
- package/dist/internal/c4/profile-permissions.js.map +1 -1
- package/dist/internal/c4/region-geometry.d.ts +8 -0
- package/dist/internal/c4/region-geometry.d.ts.map +1 -0
- package/dist/internal/c4/region-geometry.js +43 -0
- package/dist/internal/c4/region-geometry.js.map +1 -0
- package/dist/internal/c4/rewards.d.ts +1 -61
- package/dist/internal/c4/rewards.d.ts.map +1 -1
- package/dist/internal/c4/rewards.js +23 -203
- package/dist/internal/c4/rewards.js.map +1 -1
- package/dist/internal/c4/runtime-bindings.d.ts +4 -0
- package/dist/internal/c4/runtime-bindings.d.ts.map +1 -0
- package/dist/internal/c4/runtime-bindings.js +4 -0
- package/dist/internal/c4/runtime-bindings.js.map +1 -0
- package/dist/internal/c4/scan-detection-codecs.d.ts +3 -0
- package/dist/internal/c4/scan-detection-codecs.d.ts.map +1 -0
- package/dist/internal/c4/scan-detection-codecs.js +3 -0
- package/dist/internal/c4/scan-detection-codecs.js.map +1 -0
- package/dist/internal/c4/scan-lifecycle.d.ts +306 -0
- package/dist/internal/c4/scan-lifecycle.d.ts.map +1 -0
- package/dist/internal/c4/scan-lifecycle.js +235 -0
- package/dist/internal/c4/scan-lifecycle.js.map +1 -0
- package/dist/internal/c4/scanning.d.ts +4 -41
- package/dist/internal/c4/scanning.d.ts.map +1 -1
- package/dist/internal/c4/scanning.js +27 -108
- package/dist/internal/c4/scanning.js.map +1 -1
- package/dist/internal/c4/ship-import.d.ts +4 -0
- package/dist/internal/c4/ship-import.d.ts.map +1 -0
- package/dist/internal/c4/ship-import.js +13 -0
- package/dist/internal/c4/ship-import.js.map +1 -0
- package/dist/internal/c4/ship-stats.d.ts.map +1 -1
- package/dist/internal/c4/ship-stats.js +45 -43
- package/dist/internal/c4/ship-stats.js.map +1 -1
- package/dist/internal/c4/starbase.d.ts +0 -32
- package/dist/internal/c4/starbase.d.ts.map +1 -1
- package/dist/internal/c4/starbase.js +26 -136
- package/dist/internal/c4/starbase.js.map +1 -1
- package/dist/internal/c4/wallet-cargo-cache.js +2 -1
- package/dist/internal/c4/wallet-cargo-cache.js.map +1 -1
- package/dist/internal/c4/world.d.ts +37 -7
- package/dist/internal/c4/world.d.ts.map +1 -1
- package/dist/internal/c4/world.js +87 -129
- package/dist/internal/c4/world.js.map +1 -1
- package/dist/internal/cargo.d.ts +2 -0
- package/dist/internal/cargo.d.ts.map +1 -1
- package/dist/internal/cargo.js +8 -0
- package/dist/internal/cargo.js.map +1 -1
- package/dist/internal/fleet.d.ts +1 -0
- package/dist/internal/fleet.d.ts.map +1 -1
- package/dist/internal/fleet.js +3 -1
- package/dist/internal/fleet.js.map +1 -1
- package/dist/internal/loyalty-atlas-bank-state.d.ts +16 -0
- package/dist/internal/loyalty-atlas-bank-state.d.ts.map +1 -0
- package/dist/internal/loyalty-atlas-bank-state.js +10 -0
- package/dist/internal/loyalty-atlas-bank-state.js.map +1 -0
- package/dist/internal/planning/account-state.d.ts +6 -0
- package/dist/internal/planning/account-state.d.ts.map +1 -1
- package/dist/internal/planning/account-state.js +13 -0
- package/dist/internal/planning/account-state.js.map +1 -1
- package/dist/internal/planning/action-runtime.d.ts +38 -0
- package/dist/internal/planning/action-runtime.d.ts.map +1 -0
- package/dist/internal/planning/action-runtime.js +63 -0
- package/dist/internal/planning/action-runtime.js.map +1 -0
- package/dist/internal/planning/arrival-guards.d.ts +19 -0
- package/dist/internal/planning/arrival-guards.d.ts.map +1 -0
- package/dist/internal/planning/arrival-guards.js +172 -0
- package/dist/internal/planning/arrival-guards.js.map +1 -0
- package/dist/internal/planning/authorization-adapter.d.ts +55 -37
- package/dist/internal/planning/authorization-adapter.d.ts.map +1 -1
- package/dist/internal/planning/authorization-adapter.js +231 -81
- package/dist/internal/planning/authorization-adapter.js.map +1 -1
- package/dist/internal/planning/character-registration-guard.d.ts +4 -0
- package/dist/internal/planning/character-registration-guard.d.ts.map +1 -0
- package/dist/internal/planning/character-registration-guard.js +59 -0
- package/dist/internal/planning/character-registration-guard.js.map +1 -0
- package/dist/internal/planning/character-registration.d.ts +23 -0
- package/dist/internal/planning/character-registration.d.ts.map +1 -0
- package/dist/internal/planning/character-registration.js +87 -0
- package/dist/internal/planning/character-registration.js.map +1 -0
- package/dist/internal/planning/currency-cache-guard.d.ts +4 -0
- package/dist/internal/planning/currency-cache-guard.d.ts.map +1 -0
- package/dist/internal/planning/currency-cache-guard.js +34 -0
- package/dist/internal/planning/currency-cache-guard.js.map +1 -0
- package/dist/internal/planning/democracy-history.d.ts +50 -0
- package/dist/internal/planning/democracy-history.d.ts.map +1 -0
- package/dist/internal/planning/democracy-history.js +189 -0
- package/dist/internal/planning/democracy-history.js.map +1 -0
- package/dist/internal/planning/direct-options.d.ts +17 -0
- package/dist/internal/planning/direct-options.d.ts.map +1 -0
- package/dist/internal/planning/direct-options.js +43 -0
- package/dist/internal/planning/direct-options.js.map +1 -0
- package/dist/internal/planning/faction-enrollment.d.ts +0 -4
- package/dist/internal/planning/faction-enrollment.d.ts.map +1 -1
- package/dist/internal/planning/faction-enrollment.js +1 -31
- package/dist/internal/planning/faction-enrollment.js.map +1 -1
- package/dist/internal/planning/faction-trade-guards.d.ts +30 -0
- package/dist/internal/planning/faction-trade-guards.d.ts.map +1 -0
- package/dist/internal/planning/faction-trade-guards.js +15 -0
- package/dist/internal/planning/faction-trade-guards.js.map +1 -0
- package/dist/internal/planning/faction-trade-state.d.ts +16 -0
- package/dist/internal/planning/faction-trade-state.d.ts.map +1 -0
- package/dist/internal/planning/faction-trade-state.js +43 -0
- package/dist/internal/planning/faction-trade-state.js.map +1 -0
- package/dist/internal/planning/fleet-arrival.d.ts +40 -0
- package/dist/internal/planning/fleet-arrival.d.ts.map +1 -0
- package/dist/internal/planning/fleet-arrival.js +107 -0
- package/dist/internal/planning/fleet-arrival.js.map +1 -0
- package/dist/internal/planning/fleet-attack-xp.d.ts +20 -0
- package/dist/internal/planning/fleet-attack-xp.d.ts.map +1 -0
- package/dist/internal/planning/fleet-attack-xp.js +104 -0
- package/dist/internal/planning/fleet-attack-xp.js.map +1 -0
- package/dist/internal/planning/fleet-creation.d.ts +30 -0
- package/dist/internal/planning/fleet-creation.d.ts.map +1 -0
- package/dist/internal/planning/fleet-creation.js +89 -0
- package/dist/internal/planning/fleet-creation.js.map +1 -0
- package/dist/internal/planning/fleet-crew-guard.d.ts +28 -0
- package/dist/internal/planning/fleet-crew-guard.d.ts.map +1 -0
- package/dist/internal/planning/fleet-crew-guard.js +48 -0
- package/dist/internal/planning/fleet-crew-guard.js.map +1 -0
- package/dist/internal/planning/fleet-crew-transfer.d.ts +7 -0
- package/dist/internal/planning/fleet-crew-transfer.d.ts.map +1 -0
- package/dist/internal/planning/fleet-crew-transfer.js +123 -0
- package/dist/internal/planning/fleet-crew-transfer.js.map +1 -0
- package/dist/internal/planning/fleet-dock-funding-guard.d.ts +42 -0
- package/dist/internal/planning/fleet-dock-funding-guard.d.ts.map +1 -0
- package/dist/internal/planning/fleet-dock-funding-guard.js +209 -0
- package/dist/internal/planning/fleet-dock-funding-guard.js.map +1 -0
- package/dist/internal/planning/fleet-dock-funding.d.ts +9 -0
- package/dist/internal/planning/fleet-dock-funding.d.ts.map +1 -0
- package/dist/internal/planning/fleet-dock-funding.js +154 -0
- package/dist/internal/planning/fleet-dock-funding.js.map +1 -0
- package/dist/internal/planning/fleet-docking-guard.d.ts +4 -0
- package/dist/internal/planning/fleet-docking-guard.d.ts.map +1 -0
- package/dist/internal/planning/fleet-docking-guard.js +43 -0
- package/dist/internal/planning/fleet-docking-guard.js.map +1 -0
- package/dist/internal/planning/fleet-docking.d.ts +10 -0
- package/dist/internal/planning/fleet-docking.d.ts.map +1 -0
- package/dist/internal/planning/fleet-docking.js +71 -0
- package/dist/internal/planning/fleet-docking.js.map +1 -0
- package/dist/internal/planning/fleet-respawn.d.ts +28 -0
- package/dist/internal/planning/fleet-respawn.d.ts.map +1 -0
- package/dist/internal/planning/fleet-respawn.js +164 -0
- package/dist/internal/planning/fleet-respawn.js.map +1 -0
- package/dist/internal/planning/fleet-ship-assembly.d.ts +36 -0
- package/dist/internal/planning/fleet-ship-assembly.d.ts.map +1 -0
- package/dist/internal/planning/fleet-ship-assembly.js +118 -0
- package/dist/internal/planning/fleet-ship-assembly.js.map +1 -0
- package/dist/internal/planning/fleet-state.d.ts +25 -0
- package/dist/internal/planning/fleet-state.d.ts.map +1 -0
- package/dist/internal/planning/fleet-state.js +28 -0
- package/dist/internal/planning/fleet-state.js.map +1 -0
- package/dist/internal/planning/governance-fees.d.ts +64 -0
- package/dist/internal/planning/governance-fees.d.ts.map +1 -0
- package/dist/internal/planning/governance-fees.js +231 -0
- package/dist/internal/planning/governance-fees.js.map +1 -0
- package/dist/internal/planning/local-market-order-funding.d.ts +8 -0
- package/dist/internal/planning/local-market-order-funding.d.ts.map +1 -0
- package/dist/internal/planning/local-market-order-funding.js +128 -0
- package/dist/internal/planning/local-market-order-funding.js.map +1 -0
- package/dist/internal/planning/local-market-order.d.ts +40 -0
- package/dist/internal/planning/local-market-order.d.ts.map +1 -0
- package/dist/internal/planning/local-market-order.js +139 -0
- package/dist/internal/planning/local-market-order.js.map +1 -0
- package/dist/internal/planning/mining-stop.d.ts +14 -0
- package/dist/internal/planning/mining-stop.d.ts.map +1 -0
- package/dist/internal/planning/mining-stop.js +42 -0
- package/dist/internal/planning/mining-stop.js.map +1 -0
- package/dist/internal/planning/movement-character.d.ts +7 -0
- package/dist/internal/planning/movement-character.d.ts.map +1 -0
- package/dist/internal/planning/movement-character.js +41 -0
- package/dist/internal/planning/movement-character.js.map +1 -0
- package/dist/internal/planning/movement-xp-guard.d.ts +4 -0
- package/dist/internal/planning/movement-xp-guard.d.ts.map +1 -0
- package/dist/internal/planning/movement-xp-guard.js +104 -0
- package/dist/internal/planning/movement-xp-guard.js.map +1 -0
- package/dist/internal/planning/open-signal-guard.d.ts +3 -0
- package/dist/internal/planning/open-signal-guard.d.ts.map +1 -0
- package/dist/internal/planning/open-signal-guard.js +32 -0
- package/dist/internal/planning/open-signal-guard.js.map +1 -0
- package/dist/internal/planning/open-signal.d.ts +31 -0
- package/dist/internal/planning/open-signal.d.ts.map +1 -0
- package/dist/internal/planning/open-signal.js +85 -0
- package/dist/internal/planning/open-signal.js.map +1 -0
- package/dist/internal/planning/original-token.d.ts +40 -0
- package/dist/internal/planning/original-token.d.ts.map +1 -0
- package/dist/internal/planning/original-token.js +112 -0
- package/dist/internal/planning/original-token.js.map +1 -0
- package/dist/internal/planning/own-starbase-facts.d.ts +33 -0
- package/dist/internal/planning/own-starbase-facts.d.ts.map +1 -0
- package/dist/internal/planning/own-starbase-facts.js +49 -0
- package/dist/internal/planning/own-starbase-facts.js.map +1 -0
- package/dist/internal/planning/plan-fields.d.ts +60 -0
- package/dist/internal/planning/plan-fields.d.ts.map +1 -0
- package/dist/internal/planning/plan-fields.js +159 -0
- package/dist/internal/planning/plan-fields.js.map +1 -0
- package/dist/internal/planning/plan-guards.d.ts +4 -0
- package/dist/internal/planning/plan-guards.d.ts.map +1 -0
- package/dist/internal/planning/plan-guards.js +175 -0
- package/dist/internal/planning/plan-guards.js.map +1 -0
- package/dist/internal/planning/profile-key.d.ts +13 -0
- package/dist/internal/planning/profile-key.d.ts.map +1 -0
- package/dist/internal/planning/profile-key.js +20 -0
- package/dist/internal/planning/profile-key.js.map +1 -0
- package/dist/internal/planning/recipe-state.d.ts +9 -0
- package/dist/internal/planning/recipe-state.d.ts.map +1 -0
- package/dist/internal/planning/recipe-state.js +23 -0
- package/dist/internal/planning/recipe-state.js.map +1 -0
- package/dist/internal/planning/rent-catalog.d.ts +37 -0
- package/dist/internal/planning/rent-catalog.d.ts.map +1 -0
- package/dist/internal/planning/rent-catalog.js +165 -0
- package/dist/internal/planning/rent-catalog.js.map +1 -0
- package/dist/internal/planning/rent.d.ts +19 -0
- package/dist/internal/planning/rent.d.ts.map +1 -0
- package/dist/internal/planning/rent.js +35 -0
- package/dist/internal/planning/rent.js.map +1 -0
- package/dist/internal/planning/research-unlock.d.ts +60 -0
- package/dist/internal/planning/research-unlock.d.ts.map +1 -0
- package/dist/internal/planning/research-unlock.js +208 -0
- package/dist/internal/planning/research-unlock.js.map +1 -0
- package/dist/internal/planning/respawn-guards.d.ts +3 -0
- package/dist/internal/planning/respawn-guards.d.ts.map +1 -0
- package/dist/internal/planning/respawn-guards.js +42 -0
- package/dist/internal/planning/respawn-guards.js.map +1 -0
- package/dist/internal/planning/runtime-guards.d.ts +41 -0
- package/dist/internal/planning/runtime-guards.d.ts.map +1 -0
- package/dist/internal/planning/runtime-guards.js +658 -0
- package/dist/internal/planning/runtime-guards.js.map +1 -0
- package/dist/internal/planning/scan-completion-guard.d.ts +43 -0
- package/dist/internal/planning/scan-completion-guard.d.ts.map +1 -0
- package/dist/internal/planning/scan-completion-guard.js +95 -0
- package/dist/internal/planning/scan-completion-guard.js.map +1 -0
- package/dist/internal/planning/scan-completion.d.ts +20 -0
- package/dist/internal/planning/scan-completion.d.ts.map +1 -0
- package/dist/internal/planning/scan-completion.js +197 -0
- package/dist/internal/planning/scan-completion.js.map +1 -0
- package/dist/internal/planning/scan-detect-guard.d.ts +34 -0
- package/dist/internal/planning/scan-detect-guard.d.ts.map +1 -0
- package/dist/internal/planning/scan-detect-guard.js +77 -0
- package/dist/internal/planning/scan-detect-guard.js.map +1 -0
- package/dist/internal/planning/scan-detect.d.ts +24 -0
- package/dist/internal/planning/scan-detect.d.ts.map +1 -0
- package/dist/internal/planning/scan-detect.js +245 -0
- package/dist/internal/planning/scan-detect.js.map +1 -0
- package/dist/internal/planning/scan-input.d.ts +9 -0
- package/dist/internal/planning/scan-input.d.ts.map +1 -0
- package/dist/internal/planning/scan-input.js +58 -0
- package/dist/internal/planning/scan-input.js.map +1 -0
- package/dist/internal/planning/ship-import-funding.d.ts +22 -0
- package/dist/internal/planning/ship-import-funding.d.ts.map +1 -0
- package/dist/internal/planning/ship-import-funding.js +53 -0
- package/dist/internal/planning/ship-import-funding.js.map +1 -0
- package/dist/internal/planning/ship-token.d.ts +1 -6
- package/dist/internal/planning/ship-token.d.ts.map +1 -1
- package/dist/internal/planning/ship-token.js +2 -41
- package/dist/internal/planning/ship-token.js.map +1 -1
- package/dist/internal/planning/starbase-player-owner.d.ts +21 -0
- package/dist/internal/planning/starbase-player-owner.d.ts.map +1 -0
- package/dist/internal/planning/starbase-player-owner.js +17 -0
- package/dist/internal/planning/starbase-player-owner.js.map +1 -0
- package/dist/internal/planning/starbase-system-guard.d.ts +6 -0
- package/dist/internal/planning/starbase-system-guard.d.ts.map +1 -0
- package/dist/internal/planning/starbase-system-guard.js +94 -0
- package/dist/internal/planning/starbase-system-guard.js.map +1 -0
- package/dist/internal/planning/starbase-system.d.ts +15 -0
- package/dist/internal/planning/starbase-system.d.ts.map +1 -0
- package/dist/internal/planning/starbase-system.js +25 -0
- package/dist/internal/planning/starbase-system.js.map +1 -0
- package/dist/internal/planning/token-mint.d.ts +4 -0
- package/dist/internal/planning/token-mint.d.ts.map +1 -0
- package/dist/internal/planning/token-mint.js +16 -0
- package/dist/internal/planning/token-mint.js.map +1 -0
- package/dist/internal/planning/trade-faction-market.d.ts +20 -0
- package/dist/internal/planning/trade-faction-market.d.ts.map +1 -0
- package/dist/internal/planning/trade-faction-market.js +56 -0
- package/dist/internal/planning/trade-faction-market.js.map +1 -0
- package/dist/internal/planning/wallet-starbase.d.ts +34 -0
- package/dist/internal/planning/wallet-starbase.d.ts.map +1 -0
- package/dist/internal/planning/wallet-starbase.js +39 -0
- package/dist/internal/planning/wallet-starbase.js.map +1 -0
- package/dist/internal/planning/xp-runtime.d.ts +36 -0
- package/dist/internal/planning/xp-runtime.d.ts.map +1 -0
- package/dist/internal/planning/xp-runtime.js +117 -0
- package/dist/internal/planning/xp-runtime.js.map +1 -0
- package/dist/internal/read-meta.d.ts +12 -0
- package/dist/internal/read-meta.d.ts.map +1 -1
- package/dist/internal/read-meta.js +10 -0
- package/dist/internal/read-meta.js.map +1 -1
- package/dist/internal/system-program.d.ts +4 -0
- package/dist/internal/system-program.d.ts.map +1 -0
- package/dist/internal/system-program.js +3 -0
- package/dist/internal/system-program.js.map +1 -0
- package/dist/loyalty/actions/index.d.ts +1 -1
- package/dist/loyalty/actions/index.d.ts.map +1 -1
- package/dist/loyalty/actions/index.js +15 -45
- package/dist/loyalty/actions/index.js.map +1 -1
- package/dist/loyalty/index.d.ts.map +1 -1
- package/dist/loyalty/index.js +6 -18
- package/dist/loyalty/index.js.map +1 -1
- package/dist/markets/actions/index.d.ts +62 -4
- package/dist/markets/actions/index.d.ts.map +1 -1
- package/dist/markets/actions/index.js +230 -178
- package/dist/markets/actions/index.js.map +1 -1
- package/dist/markets/actions/trade-faction-market.d.ts +43 -0
- package/dist/markets/actions/trade-faction-market.d.ts.map +1 -0
- package/dist/markets/actions/trade-faction-market.js +277 -0
- package/dist/markets/actions/trade-faction-market.js.map +1 -0
- package/dist/markets/index.d.ts +38 -7
- package/dist/markets/index.d.ts.map +1 -1
- package/dist/markets/index.js +59 -20
- package/dist/markets/index.js.map +1 -1
- package/dist/mining/actions/index.d.ts +87 -0
- package/dist/mining/actions/index.d.ts.map +1 -0
- package/dist/mining/actions/index.js +319 -0
- package/dist/mining/actions/index.js.map +1 -0
- package/dist/mining/estimate.d.ts +114 -0
- package/dist/mining/estimate.d.ts.map +1 -0
- package/dist/mining/estimate.js +127 -0
- package/dist/mining/estimate.js.map +1 -0
- package/dist/mining/index.d.ts +9 -2
- package/dist/mining/index.d.ts.map +1 -1
- package/dist/mining/index.js +10 -13
- package/dist/mining/index.js.map +1 -1
- package/dist/mining/profile.d.ts +82 -0
- package/dist/mining/profile.d.ts.map +1 -0
- package/dist/mining/profile.js +109 -0
- package/dist/mining/profile.js.map +1 -0
- package/dist/planning/assembly.d.ts +6 -1
- package/dist/planning/assembly.d.ts.map +1 -1
- package/dist/planning/assembly.js +12 -8
- package/dist/planning/assembly.js.map +1 -1
- package/dist/planning/execution.d.ts +19 -3
- package/dist/planning/execution.d.ts.map +1 -1
- package/dist/planning/execution.js +540 -72
- package/dist/planning/execution.js.map +1 -1
- package/dist/planning/index.d.ts +217 -149
- package/dist/planning/index.d.ts.map +1 -1
- package/dist/planning/index.js +31 -355
- package/dist/planning/index.js.map +1 -1
- package/dist/planning/plan-construction.d.ts +25 -0
- package/dist/planning/plan-construction.d.ts.map +1 -0
- package/dist/planning/plan-construction.js +143 -0
- package/dist/planning/plan-construction.js.map +1 -0
- package/dist/planning/plan-sequence-checkpoint.d.ts +9 -0
- package/dist/planning/plan-sequence-checkpoint.d.ts.map +1 -1
- package/dist/planning/plan-sequence-checkpoint.js +16 -7
- package/dist/planning/plan-sequence-checkpoint.js.map +1 -1
- package/dist/planning/plan-sequence-execution.d.ts +5 -0
- package/dist/planning/plan-sequence-execution.d.ts.map +1 -1
- package/dist/planning/plan-sequence-execution.js +74 -40
- package/dist/planning/plan-sequence-execution.js.map +1 -1
- package/dist/planning/plan-sequence.d.ts +2 -1
- package/dist/planning/plan-sequence.d.ts.map +1 -1
- package/dist/planning/plan-sequence.js +8 -1
- package/dist/planning/plan-sequence.js.map +1 -1
- package/dist/planning/plan-validation.d.ts +17 -0
- package/dist/planning/plan-validation.d.ts.map +1 -0
- package/dist/planning/plan-validation.js +135 -0
- package/dist/planning/plan-validation.js.map +1 -0
- package/dist/planning/simulation.d.ts +25 -1
- package/dist/planning/simulation.d.ts.map +1 -1
- package/dist/planning/simulation.js +111 -11
- package/dist/planning/simulation.js.map +1 -1
- package/dist/registry/cargo.d.ts +7 -12
- package/dist/registry/cargo.d.ts.map +1 -1
- package/dist/registry/cargo.js +20 -20
- package/dist/registry/cargo.js.map +1 -1
- package/dist/registry/docking.d.ts +10 -0
- package/dist/registry/docking.d.ts.map +1 -0
- package/dist/registry/docking.js +12 -0
- package/dist/registry/docking.js.map +1 -0
- package/dist/registry/index.d.ts +4 -0
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +190 -224
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/onboarding.d.ts +10 -2
- package/dist/registry/onboarding.d.ts.map +1 -1
- package/dist/registry/onboarding.js +20 -7
- package/dist/registry/onboarding.js.map +1 -1
- package/dist/registry/scanning.d.ts +7 -0
- package/dist/registry/scanning.d.ts.map +1 -0
- package/dist/registry/scanning.js +13 -0
- package/dist/registry/scanning.js.map +1 -0
- package/dist/registry/ship-stats-snapshot.js +19 -19
- package/dist/registry/ship-stats-snapshot.js.map +1 -1
- package/dist/registry/ships.d.ts +22 -2
- package/dist/registry/ships.d.ts.map +1 -1
- package/dist/registry/ships.js +31 -4
- package/dist/registry/ships.js.map +1 -1
- package/dist/registry/xp-runtime.d.ts +4 -0
- package/dist/registry/xp-runtime.d.ts.map +1 -0
- package/dist/registry/xp-runtime.js +14 -0
- package/dist/registry/xp-runtime.js.map +1 -0
- package/dist/rewards/index.d.ts +11 -5
- package/dist/rewards/index.d.ts.map +1 -1
- package/dist/rewards/index.js +10 -21
- package/dist/rewards/index.js.map +1 -1
- package/dist/scanning/actions/index.d.ts +116 -0
- package/dist/scanning/actions/index.d.ts.map +1 -0
- package/dist/scanning/actions/index.js +191 -0
- package/dist/scanning/actions/index.js.map +1 -0
- package/dist/scanning/index.d.ts +9 -12
- package/dist/scanning/index.d.ts.map +1 -1
- package/dist/scanning/index.js +18 -22
- package/dist/scanning/index.js.map +1 -1
- package/dist/scanning/lifecycle.d.ts +77 -0
- package/dist/scanning/lifecycle.d.ts.map +1 -0
- package/dist/scanning/lifecycle.js +93 -0
- package/dist/scanning/lifecycle.js.map +1 -0
- package/dist/scanning/odds.d.ts +111 -0
- package/dist/scanning/odds.d.ts.map +1 -0
- package/dist/scanning/odds.js +294 -0
- package/dist/scanning/odds.js.map +1 -0
- package/dist/scanning/signals.d.ts +121 -0
- package/dist/scanning/signals.d.ts.map +1 -0
- package/dist/scanning/signals.js +171 -0
- package/dist/scanning/signals.js.map +1 -0
- package/dist/starbases/actions/index.d.ts +6 -4
- package/dist/starbases/actions/index.d.ts.map +1 -1
- package/dist/starbases/actions/index.js +34 -67
- package/dist/starbases/actions/index.js.map +1 -1
- package/dist/starbases/index.d.ts.map +1 -1
- package/dist/starbases/index.js +3 -11
- package/dist/starbases/index.js.map +1 -1
- package/dist/world/index.d.ts +108 -5
- package/dist/world/index.d.ts.map +1 -1
- package/dist/world/index.js +110 -15
- package/dist/world/index.js.map +1 -1
- package/dist/world/planet-claim-stake-plots.d.ts +139 -0
- package/dist/world/planet-claim-stake-plots.d.ts.map +1 -0
- package/dist/world/planet-claim-stake-plots.js +117 -0
- package/dist/world/planet-claim-stake-plots.js.map +1 -0
- package/dist/world/starbase-status.d.ts +176 -0
- package/dist/world/starbase-status.d.ts.map +1 -0
- package/dist/world/starbase-status.js +153 -0
- package/dist/world/starbase-status.js.map +1 -0
- package/package.json +10 -2
|
@@ -1,20 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { fleetAttackInstructionKey, validateFleetAttackActors, } from '../../internal/planning/fleet-attack-xp.js';
|
|
2
|
+
import { resolveXpRuntime } from '../../internal/planning/xp-runtime.js';
|
|
3
|
+
import { isAddress } from '@solana/kit';
|
|
4
|
+
import { requireDisabledLevelRent } from '../../internal/planning/rent-catalog.js';
|
|
5
|
+
import { resolveActionRuntime } from '../../internal/planning/action-runtime.js';
|
|
2
6
|
import { InvalidActionInputError, SageSdkError } from '../../client/errors.js';
|
|
3
7
|
import { readContextRawAccounts } from '../../client/reconciliation.js';
|
|
4
|
-
import {
|
|
5
|
-
import { lootAccountDefinition, } from '../../internal/c4/
|
|
8
|
+
import { getRetrieveLootInstructionDataEncoder } from '../../internal/c4/runtime-bindings.js';
|
|
9
|
+
import { lootAccountDefinition, } from '../../internal/c4/loot.js';
|
|
6
10
|
import { deriveFleetAddress, fleetAccountDefinition, } from '../../internal/c4/fleet.js';
|
|
7
|
-
import { deriveFleetCrewBindingAddress, fleetCrewBindingAccountDefinition, } from '../../internal/c4/fleet-crew-binding.js';
|
|
11
|
+
import { deriveFleetCrewBindingAddress, fleetCrewBindingAccountDefinition, matchesFleetCrewBindingIdentity, } from '../../internal/c4/fleet-crew-binding.js';
|
|
8
12
|
import { deriveFactionAccountAddress, deriveFactionEconomicsConfigAddress, deriveFactionOwnershipAddress, deriveFactionRelationTrackerAddress, deriveFactionTreasuryAddress, deriveKingSystemTrackerAddress, deriveRegionTrackerAddress, factionAccountDefinition, factionEconomicsConfigAccountDefinition, factionOwnershipAccountDefinition, factionRelationTrackerAccountDefinition, factionTreasuryAccountDefinition, kingSystemTrackerAccountDefinition, regionTrackerAccountDefinition, } from '../../internal/c4/factions.js';
|
|
9
|
-
import {
|
|
13
|
+
import { factionValue } from '../../internal/c4/faction.js';
|
|
14
|
+
import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/character.js';
|
|
10
15
|
import { deriveLoyaltyContributionAddress, deriveLoyaltyEpochAddress, loyaltyContributionAccountDefinition, loyaltyEpochAccountDefinition, } from '../../internal/c4/loyalty.js';
|
|
11
16
|
import { atlasRewardConfigAccountDefinition, atlasRewardRegistryAccountDefinition, deriveAtlasRewardConfigAddress, deriveAtlasRewardRegistryAddress, } from '../../internal/c4/rewards.js';
|
|
12
17
|
import { deriveStarSystemAddress, starSystemAccountDefinition, } from '../../internal/c4/world.js';
|
|
13
18
|
import { requireGameAddress } from '../../internal/game-context.js';
|
|
14
|
-
import { adaptApplyCombatStimulantInstruction, adaptAttackFleetInstruction, adaptAttackStarbaseInstruction, adaptRetrieveLootInstruction,
|
|
15
|
-
import {
|
|
19
|
+
import { adaptApplyCombatStimulantInstruction, adaptAttackFleetInstruction, adaptAttackStarbaseInstruction, adaptRetrieveLootInstruction, readPlanAuthorization, } from '../../internal/planning/authorization-adapter.js';
|
|
20
|
+
import { buildPlannerPlan } from '../../planning/plan-construction.js';
|
|
16
21
|
import { readGameCombatConfiguration } from '../../registry/combat.js';
|
|
17
22
|
import { resolveCargo, } from '../../registry/index.js';
|
|
23
|
+
import { accountAbsentPrecondition, accountStatePrecondition, } from '../../internal/planning/account-state.js';
|
|
18
24
|
function invalid(field, value, acceptedRange, remedy) {
|
|
19
25
|
throw new InvalidActionInputError(field, value, acceptedRange, remedy);
|
|
20
26
|
}
|
|
@@ -35,19 +41,13 @@ function assertKeys(value, field, required, optional = []) {
|
|
|
35
41
|
function validateOptions(value) {
|
|
36
42
|
const options = readRecord(value, 'options');
|
|
37
43
|
assertKeys(options, 'options', ['authorization']);
|
|
38
|
-
const
|
|
39
|
-
assertKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
|
|
40
|
-
const authorization = authorizationRecord;
|
|
41
|
-
validatePlanAuthorization(authorization);
|
|
44
|
+
const authorization = readPlanAuthorization(options.authorization);
|
|
42
45
|
return { authorization };
|
|
43
46
|
}
|
|
44
47
|
function validateAttackOptions(value) {
|
|
45
48
|
const options = readRecord(value, 'options');
|
|
46
49
|
assertKeys(options, 'options', ['authorization', 'loot']);
|
|
47
|
-
const
|
|
48
|
-
assertKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
|
|
49
|
-
const authorization = authorizationRecord;
|
|
50
|
-
validatePlanAuthorization(authorization);
|
|
50
|
+
const authorization = readPlanAuthorization(options.authorization);
|
|
51
51
|
if (typeof options.loot !== 'string' || !isAddress(options.loot)) {
|
|
52
52
|
invalid('options.loot', options.loot, 'one valid new Loot account address', 'Generate a new address-only Loot signer and provide its public address before retrying.');
|
|
53
53
|
}
|
|
@@ -66,10 +66,7 @@ function validateAttackStance(value) {
|
|
|
66
66
|
function validateRetrieveOptions(value) {
|
|
67
67
|
const options = readRecord(value, 'options');
|
|
68
68
|
assertKeys(options, 'options', ['authorization', 'atUnixSeconds']);
|
|
69
|
-
const
|
|
70
|
-
assertKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
|
|
71
|
-
const authorization = authorizationRecord;
|
|
72
|
-
validatePlanAuthorization(authorization);
|
|
69
|
+
const authorization = readPlanAuthorization(options.authorization);
|
|
73
70
|
if (typeof options.atUnixSeconds !== 'bigint' || options.atUnixSeconds < 0n) {
|
|
74
71
|
invalid('options.atUnixSeconds', options.atUnixSeconds, 'a non-negative bigint Unix timestamp', 'Provide the explicit current Unix timestamp used to evaluate Loot exclusivity before retrying.');
|
|
75
72
|
}
|
|
@@ -119,13 +116,21 @@ function validateLootSelection(value, loot, fleet, retrievingProfile, atUnixSeco
|
|
|
119
116
|
if (item === undefined) {
|
|
120
117
|
invalid(`${field}.itemIndex`, itemIndex, `an available Loot item index below ${String(loot.items.length)}`, 'Refresh the Loot snapshot and select an existing item before retrying.');
|
|
121
118
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
119
|
+
// The retriever is the Fleet's controlling Profile. Reward cargo stays
|
|
120
|
+
// locked to the destroying Profile until it expires and is swept; ordinary
|
|
121
|
+
// cargo is exclusive to the destroying Profile only until the unlock time.
|
|
122
|
+
const destroyer = item.destroyer?.address;
|
|
123
|
+
if (item.rewardReclaimAtUnixSeconds > 0n) {
|
|
124
|
+
if (destroyer !== retrievingProfile) {
|
|
125
|
+
fail(`Loot item ${String(itemIndex)} is reward cargo locked to ${destroyer === undefined ? 'no destroying Profile' : `destroying Profile ${destroyer}`}, not Profile ${retrievingProfile}. Reward cargo never opens to other Profiles; it is swept after ${String(item.rewardReclaimAtUnixSeconds)} Unix seconds. Choose another item or use the destroying Profile's Fleet before retrying.`, loot.address);
|
|
126
|
+
}
|
|
127
|
+
if (atUnixSeconds > item.rewardReclaimAtUnixSeconds) {
|
|
128
|
+
fail(`Loot item ${String(itemIndex)} reward cargo expired at ${String(item.rewardReclaimAtUnixSeconds)} Unix seconds and is swept to the reward treasury, not retrievable at ${String(atUnixSeconds)}. Choose another item or refresh the Loot before retrying.`, loot.address);
|
|
129
|
+
}
|
|
125
130
|
}
|
|
126
|
-
if (
|
|
127
|
-
|
|
128
|
-
fail(`Loot item ${String(itemIndex)}
|
|
131
|
+
else if (atUnixSeconds < item.exclusivityUnlockAtUnixSeconds &&
|
|
132
|
+
destroyer !== retrievingProfile) {
|
|
133
|
+
fail(`Loot item ${String(itemIndex)} is exclusive to ${destroyer === undefined ? 'no Profile (a Starbase kill)' : `destroying Profile ${destroyer}`} until ${String(item.exclusivityUnlockAtUnixSeconds)} Unix seconds, not Profile ${retrievingProfile}. Use the destroying Profile's Fleet or wait for the exclusivity window to pass before retrying.`, loot.address);
|
|
129
134
|
}
|
|
130
135
|
const cargoRequests = denseArray(target.cargo, `${field}.cargo`);
|
|
131
136
|
if (cargoRequests.length === 0 || cargoRequests.length > 65_536) {
|
|
@@ -162,9 +167,7 @@ function validateLootSelection(value, loot, fleet, retrievingProfile, atUnixSeco
|
|
|
162
167
|
}
|
|
163
168
|
generated.push([itemIndex, encoded]);
|
|
164
169
|
}
|
|
165
|
-
const instructionDataLength =
|
|
166
|
-
.getRetrieveLootInstructionDataEncoder()
|
|
167
|
-
.encode({
|
|
170
|
+
const instructionDataLength = getRetrieveLootInstructionDataEncoder().encode({
|
|
168
171
|
keyIndex: 0,
|
|
169
172
|
want: generated.map(([itemIndex, cargo]) => [
|
|
170
173
|
itemIndex,
|
|
@@ -209,29 +212,6 @@ function rawCargoFingerprint(fleet) {
|
|
|
209
212
|
.join(',');
|
|
210
213
|
return [fleet.cargoHold.seqId, fleet.cargoHold.storageCost, items].join('|');
|
|
211
214
|
}
|
|
212
|
-
async function hashAccountState(account) {
|
|
213
|
-
const owner = getAddressEncoder().encode(account.owner);
|
|
214
|
-
const canonical = new Uint8Array(owner.length + account.data.length);
|
|
215
|
-
canonical.set(owner);
|
|
216
|
-
canonical.set(account.data, owner.length);
|
|
217
|
-
const digest = new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', canonical));
|
|
218
|
-
return [...digest].map((byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
219
|
-
}
|
|
220
|
-
async function precondition(account, describes) {
|
|
221
|
-
return Object.freeze({
|
|
222
|
-
address: account.address,
|
|
223
|
-
dataHash: await hashAccountState(account),
|
|
224
|
-
describes,
|
|
225
|
-
kind: 'account-state',
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
function absentPrecondition(address, describes) {
|
|
229
|
-
return Object.freeze({
|
|
230
|
-
address,
|
|
231
|
-
describes,
|
|
232
|
-
kind: 'account-absent',
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
215
|
/** Plans application of one configured combat stimulant without predicting its effects.
|
|
236
216
|
*
|
|
237
217
|
* The planner validates Fleet ownership and Game membership, current catalog
|
|
@@ -311,10 +291,10 @@ export async function planFleetApplyCombatStimulant(ctx, fleet, stimulant, input
|
|
|
311
291
|
fail(`Fleet ${fleet.name} (${fleet.address}) has no crew and cannot apply a combat stimulant. Crew the Fleet, refresh it through this context, and retry.`, fleet.address);
|
|
312
292
|
}
|
|
313
293
|
const description = `Apply one ${catalogued.cargo.name} combat stimulant from Fleet ${fleet.name} (${fleet.address}); permission, stacking, charge application, and combat outcomes remain chain-authoritative.`;
|
|
314
|
-
return
|
|
294
|
+
return buildPlannerPlan({
|
|
315
295
|
kind: 'combat.apply-stimulant',
|
|
316
296
|
preconditions: [
|
|
317
|
-
await
|
|
297
|
+
await accountStatePrecondition(account, `Fleet ${fleet.name} retains its configured Game, owning Profile, supported crewed state, and known ${catalogued.cargo.name} cargo balance.`),
|
|
318
298
|
],
|
|
319
299
|
steps: [
|
|
320
300
|
{
|
|
@@ -331,20 +311,6 @@ export async function planFleetApplyCombatStimulant(ctx, fleet, stimulant, input
|
|
|
331
311
|
summary: description,
|
|
332
312
|
});
|
|
333
313
|
}
|
|
334
|
-
function factionId(fleet) {
|
|
335
|
-
if (fleet.npcFactionId > 0)
|
|
336
|
-
return fleet.npcFactionId;
|
|
337
|
-
switch (fleet.faction) {
|
|
338
|
-
case 'mud':
|
|
339
|
-
return 1;
|
|
340
|
-
case 'oni':
|
|
341
|
-
return 2;
|
|
342
|
-
case 'ustur':
|
|
343
|
-
return 3;
|
|
344
|
-
case 'unaligned':
|
|
345
|
-
return 0;
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
314
|
function shipFingerprint(fleet) {
|
|
349
315
|
return fleet.ships
|
|
350
316
|
.map(({ id, quantity }) => `${String(id)}:${String(quantity)}`)
|
|
@@ -404,14 +370,13 @@ async function optionalCrewBinding(ctx, fleet) {
|
|
|
404
370
|
const address = await deriveFleetCrewBindingAddress(fleet.address);
|
|
405
371
|
const [envelope] = await ctx.data.readMany(fleetCrewBindingAccountDefinition, [address]);
|
|
406
372
|
if (envelope !== undefined &&
|
|
407
|
-
(envelope.data.
|
|
408
|
-
envelope.data.ownerProfile !== fleet.ownerProfile.address)) {
|
|
373
|
+
!matchesFleetCrewBindingIdentity(envelope.data, fleet.address, fleet.ownerProfile.address)) {
|
|
409
374
|
fail(`FleetCrewBinding ${address} does not belong to Fleet ${fleet.address} and Profile ${fleet.ownerProfile.address}. Refresh the Fleet crew relationship and retry.`, address);
|
|
410
375
|
}
|
|
411
376
|
return envelope?.address;
|
|
412
377
|
}
|
|
413
378
|
async function resolveRewardAccounts(ctx, fleet, registry, config, epochIndex) {
|
|
414
|
-
const resolvedFaction =
|
|
379
|
+
const resolvedFaction = fleet.npcFactionId > 0 ? fleet.npcFactionId : factionValue(fleet.faction);
|
|
415
380
|
if (resolvedFaction === 0)
|
|
416
381
|
return { config, registry };
|
|
417
382
|
const [epochAddress, contributionAddress] = await Promise.all([
|
|
@@ -446,33 +411,82 @@ async function resolveRewardAccounts(ctx, fleet, registry, config, epochIndex) {
|
|
|
446
411
|
registry,
|
|
447
412
|
};
|
|
448
413
|
}
|
|
449
|
-
|
|
414
|
+
/** Reads and requires an NPC Fleet's canonical FactionOwnership and, when
|
|
415
|
+
* `withFaction`, its Faction account; a player Fleet has neither. */
|
|
416
|
+
async function resolveNpcAccounts(ctx, fleet, withFaction) {
|
|
450
417
|
if (fleet.npcFactionId === 0)
|
|
451
418
|
return {};
|
|
452
|
-
const
|
|
453
|
-
|
|
419
|
+
const addresses = await Promise.all([
|
|
420
|
+
deriveFactionOwnershipAddress(fleet.game, 'fleet', fleet.address),
|
|
421
|
+
...(withFaction
|
|
422
|
+
? [deriveFactionAccountAddress(fleet.game, fleet.npcFactionId)]
|
|
423
|
+
: []),
|
|
424
|
+
]);
|
|
425
|
+
const [ownership, faction] = await readContextRawAccounts(ctx, addresses);
|
|
426
|
+
const ownershipData = ownership && factionOwnershipAccountDefinition.decode(ownership);
|
|
454
427
|
if (ownership === undefined ||
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
fail(`NPC Fleet ${fleet.address} has no matching canonical FactionOwnership for faction ${String(fleet.npcFactionId)}. Refresh the Fleet and faction ownership relationship before retrying.`,
|
|
460
|
-
}
|
|
461
|
-
if (!
|
|
462
|
-
return { ownership
|
|
463
|
-
const
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
fail(`Faction ${
|
|
468
|
-
}
|
|
469
|
-
return {
|
|
428
|
+
ownershipData?.game !== fleet.game ||
|
|
429
|
+
ownershipData.asset.kind !== 'fleet' ||
|
|
430
|
+
ownershipData.asset.fleet !== fleet.address ||
|
|
431
|
+
ownershipData.controllingFactionId !== fleet.npcFactionId) {
|
|
432
|
+
fail(`NPC Fleet ${fleet.address} has no matching canonical FactionOwnership for faction ${String(fleet.npcFactionId)}. Refresh the Fleet and faction ownership relationship before retrying.`, addresses[0]);
|
|
433
|
+
}
|
|
434
|
+
if (!withFaction)
|
|
435
|
+
return { ownership };
|
|
436
|
+
const factionData = faction && factionAccountDefinition.decode(faction);
|
|
437
|
+
if (faction === undefined ||
|
|
438
|
+
factionData?.game !== fleet.game ||
|
|
439
|
+
factionData.factionId !== fleet.npcFactionId) {
|
|
440
|
+
fail(`Faction ${addresses[1]} is missing or does not match NPC Fleet ${fleet.address}'s Game and faction id. Refresh the faction registry relationship before retrying.`, addresses[1]);
|
|
441
|
+
}
|
|
442
|
+
return { faction, ownership };
|
|
470
443
|
}
|
|
471
444
|
function generatedStance(stance) {
|
|
472
445
|
return {
|
|
473
446
|
ammoUsage: stance.ammoUsage === 'none' ? 0 : stance.ammoUsage === 'light' ? 1 : 2,
|
|
474
447
|
};
|
|
475
448
|
}
|
|
449
|
+
/** Requires a live Fleet snapshot of the configured Game with known AP, crew
|
|
450
|
+
* and ship composition; an attacking Fleet also needs AP available. */
|
|
451
|
+
function validateAttackFleet(fleet, role, game) {
|
|
452
|
+
const label = `The ${role} Fleet ${fleet.name} (${fleet.address})`;
|
|
453
|
+
if (fleet.game !== game) {
|
|
454
|
+
fail(`${label} belongs to Game ${fleet.game}, not configured Game ${game}. Refresh the Fleet through this context and retry.`, fleet.address);
|
|
455
|
+
}
|
|
456
|
+
if (fleet.state.kind === 'destroyed') {
|
|
457
|
+
fail(`${label} is destroyed and cannot participate in this attack. Refresh the Fleet after respawn and retry.`, fleet.address);
|
|
458
|
+
}
|
|
459
|
+
if (!Number.isSafeInteger(fleet.ap) ||
|
|
460
|
+
fleet.ap < 0 ||
|
|
461
|
+
!Number.isSafeInteger(fleet.crewCount) ||
|
|
462
|
+
fleet.crewCount <= 0) {
|
|
463
|
+
fail(`${label} has unknown or invalid AP or crew state. Refresh the Fleet through this context and retry.`, fleet.address);
|
|
464
|
+
}
|
|
465
|
+
if (fleet.ships.length === 0 ||
|
|
466
|
+
fleet.ships.some(({ quantity }) => quantity <= 0n)) {
|
|
467
|
+
fail(`${label} has no valid known ship composition. Refresh Fleet composition and retry.`, fleet.address);
|
|
468
|
+
}
|
|
469
|
+
if (role === 'attacking' && fleet.ap === 0) {
|
|
470
|
+
fail(`${label} has no known AP available. Wait for AP reload, refresh the Fleet, and retry.`, fleet.address);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
/** Validates the inputs every attack shares: the stance, an attacking Fleet
|
|
474
|
+
* owned by the authorization Profile that can attack, and a new Loot address
|
|
475
|
+
* distinct from the authorization signers. */
|
|
476
|
+
function validateAttack(ctx, attacker, inputStance, inputOptions) {
|
|
477
|
+
const options = validateAttackOptions(inputOptions);
|
|
478
|
+
const stance = validateAttackStance(inputStance);
|
|
479
|
+
const game = requireGameAddress(ctx);
|
|
480
|
+
if (attacker.ownerProfile.address !== options.authorization.profile) {
|
|
481
|
+
fail(`Attacking Fleet ${attacker.address} does not belong to authorization Profile ${options.authorization.profile}. Choose an owned Fleet and retry.`, attacker.address);
|
|
482
|
+
}
|
|
483
|
+
if (options.loot === options.authorization.authority ||
|
|
484
|
+
options.loot === options.authorization.profile) {
|
|
485
|
+
fail(`The new Loot address ${options.loot} must be distinct from the authorization authority and Profile. Generate a separate Loot signer address and retry.`, options.loot);
|
|
486
|
+
}
|
|
487
|
+
validateAttackFleet(attacker, 'attacking', game);
|
|
488
|
+
return { game, options, stance };
|
|
489
|
+
}
|
|
476
490
|
/** Plans one singleton Fleet-on-Fleet attack without predicting its outcome.
|
|
477
491
|
*
|
|
478
492
|
* Range, randomness, recent slot hashes, final combat arithmetic, and chain
|
|
@@ -497,43 +511,11 @@ function generatedStance(stance) {
|
|
|
497
511
|
* ```
|
|
498
512
|
*/
|
|
499
513
|
export async function planFleetAttackFleet(ctx, attacker, defender, inputStance, inputOptions) {
|
|
500
|
-
const options =
|
|
501
|
-
const stance = validateAttackStance(inputStance);
|
|
502
|
-
const game = requireGameAddress(ctx);
|
|
514
|
+
const { game, options, stance } = validateAttack(ctx, attacker, inputStance, inputOptions);
|
|
503
515
|
if (attacker.address === defender.address) {
|
|
504
516
|
fail(`Fleet ${attacker.address} cannot attack itself. Choose a distinct defending Fleet and retry.`, attacker.address);
|
|
505
517
|
}
|
|
506
|
-
|
|
507
|
-
fail(`Attacking Fleet ${attacker.address} does not belong to authorization Profile ${options.authorization.profile}. Choose an owned Fleet and retry.`, attacker.address);
|
|
508
|
-
}
|
|
509
|
-
if (options.loot === options.authorization.authority ||
|
|
510
|
-
options.loot === options.authorization.profile) {
|
|
511
|
-
fail(`The new Loot address ${options.loot} must be distinct from the authorization authority and Profile. Generate a separate Loot signer address and retry.`, options.loot);
|
|
512
|
-
}
|
|
513
|
-
for (const [role, fleet] of [
|
|
514
|
-
['attacking', attacker],
|
|
515
|
-
['defending', defender],
|
|
516
|
-
]) {
|
|
517
|
-
if (fleet.game !== game) {
|
|
518
|
-
fail(`The ${role} Fleet ${fleet.address} belongs to Game ${fleet.game}, not configured Game ${game}. Refresh both Fleets through this context and retry.`, fleet.address);
|
|
519
|
-
}
|
|
520
|
-
if (fleet.state.kind === 'destroyed') {
|
|
521
|
-
fail(`The ${role} Fleet ${fleet.name} (${fleet.address}) is destroyed and cannot participate in this attack. Refresh the Fleet after respawn and retry.`, fleet.address);
|
|
522
|
-
}
|
|
523
|
-
if (!Number.isSafeInteger(fleet.ap) ||
|
|
524
|
-
fleet.ap < 0 ||
|
|
525
|
-
!Number.isSafeInteger(fleet.crewCount) ||
|
|
526
|
-
fleet.crewCount <= 0) {
|
|
527
|
-
fail(`The ${role} Fleet ${fleet.name} (${fleet.address}) has unknown or invalid AP or crew state. Refresh the Fleet through this context and retry.`, fleet.address);
|
|
528
|
-
}
|
|
529
|
-
if (fleet.ships.length === 0 ||
|
|
530
|
-
fleet.ships.some(({ quantity }) => quantity <= 0n)) {
|
|
531
|
-
fail(`The ${role} Fleet ${fleet.name} (${fleet.address}) has no valid known ship composition. Refresh Fleet composition and retry.`, fleet.address);
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
if (attacker.ap === 0) {
|
|
535
|
-
fail(`Attacking Fleet ${attacker.name} (${attacker.address}) has no known AP available. Wait for AP reload, refresh the Fleet, and retry.`, attacker.address);
|
|
536
|
-
}
|
|
518
|
+
validateAttackFleet(defender, 'defending', game);
|
|
537
519
|
const currentAccounts = await readContextRawAccounts(ctx, [
|
|
538
520
|
attacker.address,
|
|
539
521
|
defender.address,
|
|
@@ -565,58 +547,93 @@ export async function planFleetAttackFleet(ctx, attacker, defender, inputStance,
|
|
|
565
547
|
deriveRegionTrackerAddress(game),
|
|
566
548
|
deriveFactionRelationTrackerAddress(game),
|
|
567
549
|
]);
|
|
550
|
+
const actorIntent = {
|
|
551
|
+
address: attacker.address,
|
|
552
|
+
defender: defender.address,
|
|
553
|
+
game,
|
|
554
|
+
profile: attacker.ownerProfile.address,
|
|
555
|
+
defenderProfile: defender.ownerProfile.address,
|
|
556
|
+
};
|
|
557
|
+
await validateFleetAttackActors(ctx, actorIntent);
|
|
558
|
+
const versions = new Map();
|
|
559
|
+
const attackerXp = await resolveXpRuntime(ctx, { game, character, profile: attacker.ownerProfile.address }, versions);
|
|
560
|
+
const defenderXp = character === defenderCharacter
|
|
561
|
+
? attackerXp
|
|
562
|
+
: await resolveXpRuntime(ctx, {
|
|
563
|
+
game,
|
|
564
|
+
character: defenderCharacter,
|
|
565
|
+
profile: defender.ownerProfile.address,
|
|
566
|
+
}, versions);
|
|
567
|
+
const xpGuards = [...new Set([attackerXp, defenderXp])].map((xp) => ({
|
|
568
|
+
kind: 'xp-runtime',
|
|
569
|
+
address: game,
|
|
570
|
+
intent: xp.intent,
|
|
571
|
+
accounts: xp.accounts,
|
|
572
|
+
describes: 'Both operator XP budgets remain canonical and reconciled; earned XP and bank balances may change.',
|
|
573
|
+
}));
|
|
574
|
+
const instruction = adaptAttackFleetInstruction({
|
|
575
|
+
...(attackerNpc.faction === undefined
|
|
576
|
+
? {}
|
|
577
|
+
: { attackerFactionAccount: attackerNpc.faction.address }),
|
|
578
|
+
...(attackerNpc.ownership === undefined
|
|
579
|
+
? {}
|
|
580
|
+
: { attackerFleetOwnership: attackerNpc.ownership.address }),
|
|
581
|
+
attackerRewardsConfig: attackerRewards.config,
|
|
582
|
+
...(attackerRewards.contribution === undefined
|
|
583
|
+
? {}
|
|
584
|
+
: { attackerRewardsContribution: attackerRewards.contribution }),
|
|
585
|
+
...(attackerRewards.epoch === undefined
|
|
586
|
+
? {}
|
|
587
|
+
: { attackerRewardsEpoch: attackerRewards.epoch }),
|
|
588
|
+
attackerRewardsRegistry: attackerRewards.registry,
|
|
589
|
+
...(defender.state.kind === 'mining'
|
|
590
|
+
? { asteroid: defender.state.asteroid.address }
|
|
591
|
+
: {}),
|
|
592
|
+
authorization: options.authorization,
|
|
593
|
+
attackerXpBudget: attackerXp.accounts.xpBudget,
|
|
594
|
+
defenderXpBudget: defenderXp.accounts.xpBudget,
|
|
595
|
+
xpBudgetConfig: attackerXp.accounts.xpBudgetConfig,
|
|
596
|
+
character,
|
|
597
|
+
...(crewBinding === undefined ? {} : { crewBinding }),
|
|
598
|
+
defenderCharacter,
|
|
599
|
+
...(defenderNpc.ownership === undefined
|
|
600
|
+
? {}
|
|
601
|
+
: { defenderFleetOwnership: defenderNpc.ownership.address }),
|
|
602
|
+
defenderRewardsConfig: defenderRewards.config,
|
|
603
|
+
...(defenderRewards.contribution === undefined
|
|
604
|
+
? {}
|
|
605
|
+
: { defenderRewardsContribution: defenderRewards.contribution }),
|
|
606
|
+
...(defenderRewards.epoch === undefined
|
|
607
|
+
? {}
|
|
608
|
+
: { defenderRewardsEpoch: defenderRewards.epoch }),
|
|
609
|
+
defenderRewardsRegistry: defenderRewards.registry,
|
|
610
|
+
defendingFleet: defender.address,
|
|
611
|
+
factionRelationTracker,
|
|
612
|
+
fleet: attacker.address,
|
|
613
|
+
game,
|
|
614
|
+
loot: options.loot,
|
|
615
|
+
recentSlothashes: 'SysvarS1otHashes111111111111111111111111111',
|
|
616
|
+
regionTracker,
|
|
617
|
+
stance: generatedStance(stance),
|
|
618
|
+
});
|
|
568
619
|
const description = `Attack Fleet ${defender.name} (${defender.address}) with Fleet ${attacker.name} (${attacker.address}) using ${stance.ammoUsage} ammunition; range, randomness, rewards, Loot, damage, and final combat arithmetic remain chain-authoritative.`;
|
|
569
|
-
return
|
|
620
|
+
return buildPlannerPlan({
|
|
570
621
|
kind: 'combat.attack-fleet',
|
|
571
622
|
preconditions: [
|
|
572
|
-
|
|
573
|
-
|
|
623
|
+
{
|
|
624
|
+
kind: 'fleet-attack',
|
|
625
|
+
...actorIntent,
|
|
626
|
+
instructionKey: fleetAttackInstructionKey(instruction),
|
|
627
|
+
describes: 'The exact attack instruction and both canonical operators remain bound.',
|
|
628
|
+
},
|
|
629
|
+
...xpGuards,
|
|
630
|
+
await accountStatePrecondition(attackerAccount, `Attacking Fleet ${attacker.name} retains its owner, Game, live state, crew, AP, faction, and ship composition.`),
|
|
631
|
+
await accountStatePrecondition(defenderAccount, `Defending Fleet ${defender.name} retains its owner, Game, live state, crew, faction, and ship composition.`),
|
|
574
632
|
],
|
|
575
633
|
steps: [
|
|
576
634
|
{
|
|
577
635
|
describes: description,
|
|
578
|
-
instruction
|
|
579
|
-
...(attackerNpc.factionAccount === undefined
|
|
580
|
-
? {}
|
|
581
|
-
: { attackerFactionAccount: attackerNpc.factionAccount }),
|
|
582
|
-
...(attackerNpc.ownership === undefined
|
|
583
|
-
? {}
|
|
584
|
-
: { attackerFleetOwnership: attackerNpc.ownership }),
|
|
585
|
-
attackerRewardsConfig: attackerRewards.config,
|
|
586
|
-
...(attackerRewards.contribution === undefined
|
|
587
|
-
? {}
|
|
588
|
-
: { attackerRewardsContribution: attackerRewards.contribution }),
|
|
589
|
-
...(attackerRewards.epoch === undefined
|
|
590
|
-
? {}
|
|
591
|
-
: { attackerRewardsEpoch: attackerRewards.epoch }),
|
|
592
|
-
attackerRewardsRegistry: attackerRewards.registry,
|
|
593
|
-
...(defender.state.kind === 'mining'
|
|
594
|
-
? { asteroid: defender.state.asteroid.address }
|
|
595
|
-
: {}),
|
|
596
|
-
authorization: options.authorization,
|
|
597
|
-
character,
|
|
598
|
-
...(crewBinding === undefined ? {} : { crewBinding }),
|
|
599
|
-
defenderCharacter,
|
|
600
|
-
...(defenderNpc.ownership === undefined
|
|
601
|
-
? {}
|
|
602
|
-
: { defenderFleetOwnership: defenderNpc.ownership }),
|
|
603
|
-
defenderRewardsConfig: defenderRewards.config,
|
|
604
|
-
...(defenderRewards.contribution === undefined
|
|
605
|
-
? {}
|
|
606
|
-
: { defenderRewardsContribution: defenderRewards.contribution }),
|
|
607
|
-
...(defenderRewards.epoch === undefined
|
|
608
|
-
? {}
|
|
609
|
-
: { defenderRewardsEpoch: defenderRewards.epoch }),
|
|
610
|
-
defenderRewardsRegistry: defenderRewards.registry,
|
|
611
|
-
defendingFleet: defender.address,
|
|
612
|
-
factionRelationTracker,
|
|
613
|
-
fleet: attacker.address,
|
|
614
|
-
game,
|
|
615
|
-
loot: options.loot,
|
|
616
|
-
recentSlothashes: 'SysvarS1otHashes111111111111111111111111111',
|
|
617
|
-
regionTracker,
|
|
618
|
-
stance: generatedStance(stance),
|
|
619
|
-
}),
|
|
636
|
+
instruction,
|
|
620
637
|
semantics: [{ kind: 'exclusive', scope: 'transaction' }],
|
|
621
638
|
signers: [options.authorization.authority, options.loot],
|
|
622
639
|
},
|
|
@@ -639,18 +656,6 @@ function systemFingerprint(system) {
|
|
|
639
656
|
version: system.version,
|
|
640
657
|
}, (_key, value) => typeof value === 'bigint' ? value.toString() : value);
|
|
641
658
|
}
|
|
642
|
-
function starbaseFactionId(owner) {
|
|
643
|
-
switch (owner) {
|
|
644
|
-
case 'mud':
|
|
645
|
-
return 1;
|
|
646
|
-
case 'oni':
|
|
647
|
-
return 2;
|
|
648
|
-
case 'ustur':
|
|
649
|
-
return 3;
|
|
650
|
-
case 'unaligned':
|
|
651
|
-
return null;
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
659
|
/** Plans one singleton Fleet-on-Starbase attack without predicting its outcome.
|
|
655
660
|
*
|
|
656
661
|
* The planner validates the owned attacking Fleet, canonical target System and
|
|
@@ -659,6 +664,10 @@ function starbaseFactionId(owner) {
|
|
|
659
664
|
* capture-cost debit outcome, randomness, damage, rewards, and final
|
|
660
665
|
* admissibility remain chain-authoritative.
|
|
661
666
|
*
|
|
667
|
+
* Requires Disabled rent: the Game's rent catalog and the target System's
|
|
668
|
+
* Starbase-level rent history must not exist, and both stay guarded absent until
|
|
669
|
+
* signing.
|
|
670
|
+
*
|
|
662
671
|
* @example
|
|
663
672
|
* ```ts
|
|
664
673
|
* declare const ctx: SageContext;
|
|
@@ -676,32 +685,7 @@ function starbaseFactionId(owner) {
|
|
|
676
685
|
* ```
|
|
677
686
|
*/
|
|
678
687
|
export async function planFleetAttackStarbase(ctx, attacker, target, inputStance, inputOptions) {
|
|
679
|
-
const options =
|
|
680
|
-
const stance = validateAttackStance(inputStance);
|
|
681
|
-
const game = requireGameAddress(ctx);
|
|
682
|
-
if (attacker.ownerProfile.address !== options.authorization.profile) {
|
|
683
|
-
fail(`Attacking Fleet ${attacker.address} does not belong to authorization Profile ${options.authorization.profile}. Choose an owned Fleet and retry.`, attacker.address);
|
|
684
|
-
}
|
|
685
|
-
if (options.loot === options.authorization.authority ||
|
|
686
|
-
options.loot === options.authorization.profile) {
|
|
687
|
-
fail(`The new Loot address ${options.loot} must be distinct from the authorization authority and Profile. Generate a separate Loot signer address and retry.`, options.loot);
|
|
688
|
-
}
|
|
689
|
-
if (attacker.game !== game) {
|
|
690
|
-
fail(`Attacking Fleet ${attacker.address} belongs to Game ${attacker.game}, not configured Game ${game}. Refresh the Fleet through this context and retry.`, attacker.address);
|
|
691
|
-
}
|
|
692
|
-
if (attacker.state.kind === 'destroyed') {
|
|
693
|
-
fail(`Attacking Fleet ${attacker.name} (${attacker.address}) is destroyed and cannot attack a Starbase. Refresh the Fleet after respawn and retry.`, attacker.address);
|
|
694
|
-
}
|
|
695
|
-
if (!Number.isSafeInteger(attacker.ap) ||
|
|
696
|
-
attacker.ap <= 0 ||
|
|
697
|
-
!Number.isSafeInteger(attacker.crewCount) ||
|
|
698
|
-
attacker.crewCount <= 0) {
|
|
699
|
-
fail(`Attacking Fleet ${attacker.name} (${attacker.address}) has no known positive AP or valid crew state. Wait for AP reload, refresh the Fleet, and retry.`, attacker.address);
|
|
700
|
-
}
|
|
701
|
-
if (attacker.ships.length === 0 ||
|
|
702
|
-
attacker.ships.some(({ quantity }) => quantity <= 0n)) {
|
|
703
|
-
fail(`Attacking Fleet ${attacker.name} (${attacker.address}) has no valid known ship composition. Refresh Fleet composition and retry.`, attacker.address);
|
|
704
|
-
}
|
|
688
|
+
const { game, options, stance } = validateAttack(ctx, attacker, inputStance, inputOptions);
|
|
705
689
|
if (target.game !== game) {
|
|
706
690
|
fail(`Target Star System ${target.address} belongs to Game ${target.game}, not configured Game ${game}. Refresh the target through this context and retry.`, target.address);
|
|
707
691
|
}
|
|
@@ -720,9 +704,10 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
720
704
|
deriveRegionTrackerAddress(game),
|
|
721
705
|
deriveFleetCrewBindingAddress(attacker.address),
|
|
722
706
|
]);
|
|
723
|
-
const [probeRelationsAccount, probeRegistryAccount] = await
|
|
724
|
-
relationTrackerAddress,
|
|
725
|
-
|
|
707
|
+
const [[probeRelationsAccount, probeRegistryAccount], attackerNpc, rent] = await Promise.all([
|
|
708
|
+
readContextRawAccounts(ctx, [relationTrackerAddress, registryAddress]),
|
|
709
|
+
resolveNpcAccounts(ctx, attacker, true),
|
|
710
|
+
requireDisabledLevelRent(ctx, game, target, 'the Starbase attack'),
|
|
726
711
|
]);
|
|
727
712
|
const probeRelations = factionRelationTrackerAccountDefinition.decode(requireAccount(probeRelationsAccount, relationTrackerAddress, `FactionRelationTracker ${relationTrackerAddress} is missing. Refresh faction relationships and retry.`));
|
|
728
713
|
const probeRegistry = atlasRewardRegistryAccountDefinition.decode(requireAccount(probeRegistryAccount, registryAddress, `AtlasRewardRegistry ${registryAddress} is missing. Refresh reward configuration and retry.`));
|
|
@@ -733,12 +718,6 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
733
718
|
fail(`AtlasRewardRegistry ${registryAddress} belongs to another Game. Refresh the configured reward registry and retry.`, registryAddress);
|
|
734
719
|
}
|
|
735
720
|
const rewardConfigAddress = await deriveAtlasRewardConfigAddress(game, probeRegistry.activeConfigVersion);
|
|
736
|
-
const attackerOwnership = attacker.npcFactionId === 0
|
|
737
|
-
? undefined
|
|
738
|
-
: await deriveFactionOwnershipAddress(game, 'fleet', attacker.address);
|
|
739
|
-
const attackerFaction = attacker.npcFactionId === 0
|
|
740
|
-
? undefined
|
|
741
|
-
: await deriveFactionAccountAddress(game, attacker.npcFactionId);
|
|
742
721
|
const requiresNpcEconomy = attacker.npcFactionId > 0 &&
|
|
743
722
|
probeRelations.dynamicCaptureEnabled &&
|
|
744
723
|
probeRelations.nemesisActive;
|
|
@@ -762,8 +741,6 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
762
741
|
character,
|
|
763
742
|
regionTracker,
|
|
764
743
|
crewBindingAddress,
|
|
765
|
-
...(attackerOwnership === undefined ? [] : [attackerOwnership]),
|
|
766
|
-
...(attackerFaction === undefined ? [] : [attackerFaction]),
|
|
767
744
|
...(factionEconomicsConfig === undefined ? [] : [factionEconomicsConfig]),
|
|
768
745
|
...(captorTreasury === undefined ? [] : [captorTreasury]),
|
|
769
746
|
];
|
|
@@ -799,7 +776,8 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
799
776
|
if (ownership === undefined && relations.dynamicCaptureEnabled) {
|
|
800
777
|
fail(`Target Starbase ${target.address} requires canonical FactionOwnership while dynamic capture is enabled. Refresh Starbase ownership and retry.`, ownershipAddress);
|
|
801
778
|
}
|
|
802
|
-
|
|
779
|
+
// KingSystemTracker records an unaligned owner as null.
|
|
780
|
+
const legacyOwner = factionValue(target.starbase.owner) || null;
|
|
803
781
|
if (ownership !== undefined &&
|
|
804
782
|
(ownership.game !== game ||
|
|
805
783
|
ownership.asset.kind !== 'starbase' ||
|
|
@@ -844,32 +822,10 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
844
822
|
const crewBinding = crewBindingAccount === undefined ? undefined : crewBindingAddress;
|
|
845
823
|
if (crewBindingAccount !== undefined) {
|
|
846
824
|
const data = fleetCrewBindingAccountDefinition.decode(crewBindingAccount);
|
|
847
|
-
if (data.
|
|
848
|
-
data.ownerProfile !== attacker.ownerProfile.address) {
|
|
825
|
+
if (!matchesFleetCrewBindingIdentity(data, attacker.address, attacker.ownerProfile.address)) {
|
|
849
826
|
fail(`FleetCrewBinding ${crewBindingAddress} does not belong to Fleet ${attacker.address} and Profile ${attacker.ownerProfile.address}. Refresh the Fleet crew relationship and retry.`, crewBindingAddress);
|
|
850
827
|
}
|
|
851
828
|
}
|
|
852
|
-
const attackerNpc = {};
|
|
853
|
-
let attackerOwnershipAccount;
|
|
854
|
-
let attackerFactionAccount;
|
|
855
|
-
if (attackerOwnership !== undefined && attackerFaction !== undefined) {
|
|
856
|
-
attackerOwnershipAccount = requireAccount(current.get(attackerOwnership), attackerOwnership, `NPC Fleet ${attacker.address} has no canonical FactionOwnership. Refresh the Fleet faction relationship and retry.`);
|
|
857
|
-
const npcOwnership = factionOwnershipAccountDefinition.decode(attackerOwnershipAccount);
|
|
858
|
-
if (npcOwnership.game !== game ||
|
|
859
|
-
npcOwnership.asset.kind !== 'fleet' ||
|
|
860
|
-
npcOwnership.asset.fleet !== attacker.address ||
|
|
861
|
-
npcOwnership.controllingFactionId !== attacker.npcFactionId) {
|
|
862
|
-
fail(`NPC Fleet ${attacker.address} has no matching canonical FactionOwnership for faction ${String(attacker.npcFactionId)}. Refresh the Fleet and faction ownership relationship before retrying.`, attackerOwnership);
|
|
863
|
-
}
|
|
864
|
-
attackerFactionAccount = requireAccount(current.get(attackerFaction), attackerFaction, `Faction ${attackerFaction} is missing for NPC Fleet ${attacker.address}. Refresh the faction registry relationship and retry.`);
|
|
865
|
-
const npcFaction = factionAccountDefinition.decode(attackerFactionAccount);
|
|
866
|
-
if (npcFaction.game !== game ||
|
|
867
|
-
npcFaction.factionId !== attacker.npcFactionId) {
|
|
868
|
-
fail(`Faction ${attackerFaction} does not match NPC Fleet ${attacker.address}'s Game and faction id. Refresh the faction registry relationship before retrying.`, attackerFaction);
|
|
869
|
-
}
|
|
870
|
-
attackerNpc.ownership = attackerOwnership;
|
|
871
|
-
attackerNpc.factionAccount = attackerFaction;
|
|
872
|
-
}
|
|
873
829
|
let economicsAccount;
|
|
874
830
|
let treasuryAccount;
|
|
875
831
|
if (factionEconomicsConfig !== undefined && captorTreasury !== undefined) {
|
|
@@ -928,21 +884,13 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
928
884
|
'The optional Fleet crew binding remains unchanged.',
|
|
929
885
|
],
|
|
930
886
|
]),
|
|
931
|
-
...(
|
|
887
|
+
...(attackerNpc.ownership === undefined
|
|
932
888
|
? []
|
|
933
|
-
: [
|
|
934
|
-
|
|
935
|
-
attackerOwnershipAccount,
|
|
936
|
-
'NPC Fleet ownership remains unchanged.',
|
|
937
|
-
],
|
|
938
|
-
]),
|
|
939
|
-
...(attackerFactionAccount === undefined
|
|
889
|
+
: [[attackerNpc.ownership, 'NPC Fleet ownership remains unchanged.']]),
|
|
890
|
+
...(attackerNpc.faction === undefined
|
|
940
891
|
? []
|
|
941
892
|
: [
|
|
942
|
-
[
|
|
943
|
-
attackerFactionAccount,
|
|
944
|
-
'The NPC faction account remains unchanged.',
|
|
945
|
-
],
|
|
893
|
+
[attackerNpc.faction, 'The NPC faction account remains unchanged.'],
|
|
946
894
|
]),
|
|
947
895
|
...(economicsAccount === undefined
|
|
948
896
|
? []
|
|
@@ -960,29 +908,42 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
960
908
|
'The dynamic-capture treasury remains unchanged.',
|
|
961
909
|
],
|
|
962
910
|
]),
|
|
963
|
-
].map(([account, describes]) =>
|
|
911
|
+
].map(([account, describes]) => accountStatePrecondition(account, describes)));
|
|
964
912
|
const absencePreconditions = [
|
|
965
|
-
|
|
913
|
+
accountAbsentPrecondition(options.loot, `Loot account ${options.loot} remains absent until execution.`),
|
|
966
914
|
...(crewBindingAccount === undefined
|
|
967
915
|
? [
|
|
968
|
-
|
|
916
|
+
accountAbsentPrecondition(crewBindingAddress, 'Optional Fleet crew binding remains absent.'),
|
|
969
917
|
]
|
|
970
918
|
: []),
|
|
971
919
|
];
|
|
920
|
+
const runtime = await resolveActionRuntime(ctx, {
|
|
921
|
+
mode: 'starbase-attack',
|
|
922
|
+
game,
|
|
923
|
+
system: target.address,
|
|
924
|
+
starbaseSeqId: starSystemAccountDefinition.decode(systemAccount).sequenceId,
|
|
925
|
+
character,
|
|
926
|
+
});
|
|
972
927
|
const description = `Attack with Fleet ${attacker.name} (${attacker.address}) against the shared Starbase at ${target.name} (${target.address}) using ${stance.ammoUsage} ammunition; range, capture-cost debit outcome, randomness, rewards, Loot, damage, and final admissibility remain chain-authoritative.`;
|
|
973
|
-
return
|
|
928
|
+
return buildPlannerPlan({
|
|
974
929
|
kind: 'combat.attack-starbase',
|
|
975
|
-
preconditions: [
|
|
930
|
+
preconditions: [
|
|
931
|
+
...statePreconditions,
|
|
932
|
+
...absencePreconditions,
|
|
933
|
+
...rent.guards,
|
|
934
|
+
...runtime.guards,
|
|
935
|
+
],
|
|
976
936
|
steps: [
|
|
977
937
|
{
|
|
978
|
-
describes: description
|
|
938
|
+
describes: `${description} ${runtime.description}`,
|
|
979
939
|
instruction: adaptAttackStarbaseInstruction({
|
|
980
|
-
...
|
|
940
|
+
...runtime.accounts,
|
|
941
|
+
...(attackerNpc.faction === undefined
|
|
981
942
|
? {}
|
|
982
|
-
: { attackerFactionAccount: attackerNpc.
|
|
943
|
+
: { attackerFactionAccount: attackerNpc.faction.address }),
|
|
983
944
|
...(attackerNpc.ownership === undefined
|
|
984
945
|
? {}
|
|
985
|
-
: { attackerFleetOwnership: attackerNpc.ownership }),
|
|
946
|
+
: { attackerFleetOwnership: attackerNpc.ownership.address }),
|
|
986
947
|
authorization: options.authorization,
|
|
987
948
|
...(captorTreasury === undefined ? {} : { captorTreasury }),
|
|
988
949
|
character,
|
|
@@ -1000,6 +961,7 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
1000
961
|
loot: options.loot,
|
|
1001
962
|
recentSlothashes: 'SysvarS1otHashes111111111111111111111111111',
|
|
1002
963
|
regionTracker,
|
|
964
|
+
...rent.accounts,
|
|
1003
965
|
rewardConfig: rewardConfigAddress,
|
|
1004
966
|
rewardRegistry: registryAddress,
|
|
1005
967
|
stance: generatedStance(stance),
|
|
@@ -1009,7 +971,7 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
1009
971
|
signers: [options.authorization.authority, options.loot],
|
|
1010
972
|
},
|
|
1011
973
|
],
|
|
1012
|
-
summary: description
|
|
974
|
+
summary: `${description} ${runtime.description}`,
|
|
1013
975
|
});
|
|
1014
976
|
}
|
|
1015
977
|
function lootSnapshotFingerprint(loot) {
|
|
@@ -1021,11 +983,11 @@ function lootSnapshotFingerprint(loot) {
|
|
|
1021
983
|
loot.coordinates.x,
|
|
1022
984
|
loot.coordinates.y,
|
|
1023
985
|
...loot.items.map((item) => [
|
|
1024
|
-
item.destroyer
|
|
986
|
+
item.destroyer?.address ?? '',
|
|
1025
987
|
item.exclusivityUnlockAtUnixSeconds,
|
|
1026
988
|
item.rewardReclaimAtUnixSeconds,
|
|
1027
989
|
item.inventory.sequenceId,
|
|
1028
|
-
item.inventory.
|
|
990
|
+
item.inventory.usedStorageUnitsRaw,
|
|
1029
991
|
...item.inventory.items
|
|
1030
992
|
.map(({ cargo, quantityRaw }) => `${String(cargo.id)}:${String(quantityRaw)}`)
|
|
1031
993
|
.sort(),
|
|
@@ -1041,11 +1003,11 @@ function rawLootFingerprint(address, loot) {
|
|
|
1041
1003
|
loot.coordinates.x,
|
|
1042
1004
|
loot.coordinates.y,
|
|
1043
1005
|
...loot.items.map((item) => [
|
|
1044
|
-
item.destroyer,
|
|
1006
|
+
item.destroyer ?? '',
|
|
1045
1007
|
item.exclusivityUnlockAtUnixSeconds,
|
|
1046
1008
|
item.rewardReclaimAtUnixSeconds,
|
|
1047
1009
|
item.inventory.sequenceId,
|
|
1048
|
-
item.inventory.
|
|
1010
|
+
item.inventory.usedStorageUnitsRaw,
|
|
1049
1011
|
...item.inventory.amounts
|
|
1050
1012
|
.map(({ amount, cargoId }) => `${String(cargoId)}:${String(amount)}`)
|
|
1051
1013
|
.sort(),
|
|
@@ -1054,10 +1016,12 @@ function rawLootFingerprint(address, loot) {
|
|
|
1054
1016
|
}
|
|
1055
1017
|
/** Plans one transaction-exclusive retrieval from a loaded Loot snapshot.
|
|
1056
1018
|
*
|
|
1057
|
-
* The planner validates the owned idle Fleet,
|
|
1058
|
-
*
|
|
1059
|
-
*
|
|
1060
|
-
*
|
|
1019
|
+
* The planner validates the owned idle Fleet, its normalized crew and usable
|
|
1020
|
+
* ability power at `atUnixSeconds`, Loot identity, destroyer exclusivity and
|
|
1021
|
+
* reward locks against the authorization Profile, and every requested known
|
|
1022
|
+
* quantity. Retrieval spends the Fleet's whole ability power pool. Range,
|
|
1023
|
+
* recent-slot inputs, destination capacity, intervening races, and final
|
|
1024
|
+
* acquired quantities remain chain-authoritative.
|
|
1061
1025
|
*
|
|
1062
1026
|
* @example
|
|
1063
1027
|
* ```ts
|
|
@@ -1105,6 +1069,13 @@ export async function planFleetRetrieveLoot(ctx, fleet, loot, inputWant, inputOp
|
|
|
1105
1069
|
currentFleet.crewCount !== fleet.crewCount) {
|
|
1106
1070
|
fail(`Fleet ${fleet.name} (${fleet.address}) changed or no longer matches its canonical Game, owner, label, idle state, or crew. Refresh the Fleet and retry.`, fleet.address);
|
|
1107
1071
|
}
|
|
1072
|
+
if (currentFleet.crewCount < currentFleet.stats.misc.requiredCrew) {
|
|
1073
|
+
fail(`Fleet ${fleet.name} (${fleet.address}) has ${String(currentFleet.crewCount)} crew but needs ${String(currentFleet.stats.misc.requiredCrew)} to retrieve Loot. Load crew, refresh the Fleet, and retry.`, fleet.address);
|
|
1074
|
+
}
|
|
1075
|
+
if (currentFleet.ap <= 0 ||
|
|
1076
|
+
options.atUnixSeconds < currentFleet.apReloadExpiresAt) {
|
|
1077
|
+
fail(`Fleet ${fleet.name} (${fleet.address}) has no usable ability power at ${String(options.atUnixSeconds)} Unix seconds: stored AP ${String(currentFleet.ap)} with reload completing at ${String(currentFleet.apReloadExpiresAt)}. Retrieving Loot spends the whole AP pool; wait for the reload, refresh the Fleet, and retry.`, fleet.address);
|
|
1078
|
+
}
|
|
1108
1079
|
const lootAccount = requireAccount(lootAccountValue, loot.address, `Loot ${loot.address} is no longer available. Refresh Loot discovery and choose an available account before retrying.`);
|
|
1109
1080
|
const currentLoot = lootAccountDefinition.decode(lootAccount);
|
|
1110
1081
|
if (rawLootFingerprint(lootAccount.address, currentLoot) !==
|
|
@@ -1114,12 +1085,12 @@ export async function planFleetRetrieveLoot(ctx, fleet, loot, inputWant, inputOp
|
|
|
1114
1085
|
const lootCreator = loot.profile.address === options.authorization.profile
|
|
1115
1086
|
? undefined
|
|
1116
1087
|
: loot.profile.address;
|
|
1117
|
-
const description = `Request ${selection.summary} from Loot ${loot.address} with Fleet ${fleet.name} (${fleet.address});
|
|
1118
|
-
return
|
|
1088
|
+
const description = `Request ${selection.summary} from Loot ${loot.address} with Fleet ${fleet.name} (${fleet.address}); this spends the Fleet's whole ability power pool. Range, recent-slot randomness, cargo capacity, availability races, and final transfer quantities remain chain-authoritative.`;
|
|
1089
|
+
return buildPlannerPlan({
|
|
1119
1090
|
kind: 'combat.retrieve-loot',
|
|
1120
1091
|
preconditions: [
|
|
1121
|
-
await
|
|
1122
|
-
await
|
|
1092
|
+
await accountStatePrecondition(fleetAccount, `Fleet ${fleet.name} retains its configured Game, owning Profile, idle state, and normalized crew.`),
|
|
1093
|
+
await accountStatePrecondition(lootAccount, `Loot ${loot.address} retains its identity, creator, destroyer exclusivity, and requested known quantities.`),
|
|
1123
1094
|
],
|
|
1124
1095
|
steps: [
|
|
1125
1096
|
{
|