@aephia/atlas-kit 0.6.0-next.11 → 0.6.0-next.110
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/cargo/actions/deposit.d.ts +1 -1
- package/dist/cargo/actions/deposit.d.ts.map +1 -1
- package/dist/cargo/actions/deposit.js +26 -115
- package/dist/cargo/actions/deposit.js.map +1 -1
- package/dist/cargo/actions/index.d.ts.map +1 -1
- package/dist/cargo/actions/index.js +15 -37
- package/dist/cargo/actions/index.js.map +1 -1
- package/dist/cargo/actions/wallet-context.d.ts +51 -2
- package/dist/cargo/actions/wallet-context.d.ts.map +1 -1
- package/dist/cargo/actions/wallet-context.js +125 -2
- 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.map +1 -1
- package/dist/cargo/actions/withdrawal.js +37 -162
- package/dist/cargo/actions/withdrawal.js.map +1 -1
- package/dist/claim-stakes/actions/index.d.ts +13 -0
- package/dist/claim-stakes/actions/index.d.ts.map +1 -1
- package/dist/claim-stakes/actions/index.js +373 -544
- package/dist/claim-stakes/actions/index.js.map +1 -1
- package/dist/claim-stakes/index.d.ts +14 -0
- package/dist/claim-stakes/index.d.ts.map +1 -1
- package/dist/claim-stakes/index.js +23 -2
- 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 +6 -2
- package/dist/client/errors.d.ts.map +1 -1
- package/dist/client/errors.js +31 -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 +2 -2
- package/dist/combat/actions/index.d.ts.map +1 -1
- package/dist/combat/actions/index.js +192 -224
- package/dist/combat/actions/index.js.map +1 -1
- package/dist/combat/index.d.ts +4 -3
- package/dist/combat/index.d.ts.map +1 -1
- package/dist/combat/index.js +3 -2
- package/dist/combat/index.js.map +1 -1
- package/dist/crafting/actions/index.d.ts +11 -0
- package/dist/crafting/actions/index.d.ts.map +1 -1
- package/dist/crafting/actions/index.js +175 -283
- 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 +45 -16
- package/dist/crafting/index.js.map +1 -1
- package/dist/factions/actions/index.d.ts +1 -0
- package/dist/factions/actions/index.d.ts.map +1 -1
- package/dist/factions/actions/index.js +2 -1
- package/dist/factions/actions/index.js.map +1 -1
- package/dist/factions/index.d.ts +1 -1
- package/dist/factions/index.d.ts.map +1 -1
- package/dist/factions/index.js +14 -8
- 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 +149 -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 +138 -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 +114 -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 +37 -16
- package/dist/fleets/actions/index.d.ts.map +1 -1
- package/dist/fleets/actions/index.js +303 -284
- 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 +122 -0
- package/dist/fleets/actions/respawn.js.map +1 -0
- package/dist/fleets/actions/ship-import.d.ts.map +1 -1
- package/dist/fleets/actions/ship-import.js +59 -76
- 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 +52 -2
- 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/index.d.ts +3 -3
- package/dist/identity/actions/index.d.ts.map +1 -1
- package/dist/identity/actions/index.js +50 -28
- package/dist/identity/actions/index.js.map +1 -1
- package/dist/identity/index.d.ts +12 -2
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +10 -1
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/permissions.d.ts +11 -2
- package/dist/identity/permissions.d.ts.map +1 -1
- package/dist/identity/permissions.js +13 -4
- package/dist/identity/permissions.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 +24 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -3
- package/dist/index.js.map +1 -1
- package/dist/internal/c4/account-decoding.d.ts +12 -0
- package/dist/internal/c4/account-decoding.d.ts.map +1 -0
- package/dist/internal/c4/account-decoding.js +36 -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/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 +155 -0
- package/dist/internal/c4/character.d.ts.map +1 -0
- package/dist/internal/c4/character.js +79 -0
- package/dist/internal/c4/character.js.map +1 -0
- package/dist/internal/c4/claim-stake-configuration.js +4 -2
- 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.map +1 -1
- package/dist/internal/c4/claim-stake.d.ts +4 -27
- package/dist/internal/c4/claim-stake.d.ts.map +1 -1
- package/dist/internal/c4/claim-stake.js +30 -41
- 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 +10 -171
- 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 +25 -33
- package/dist/internal/c4/crafting.d.ts.map +1 -1
- package/dist/internal/c4/crafting.js +61 -49
- 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 +30 -0
- package/dist/internal/c4/currency-cache.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-adapter.d.ts +12 -0
- package/dist/internal/c4/faction-adapter.d.ts.map +1 -0
- package/dist/internal/c4/faction-adapter.js +52 -0
- package/dist/internal/c4/faction-adapter.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 +31 -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 +48 -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 +9 -57
- package/dist/internal/c4/factions.d.ts.map +1 -1
- package/dist/internal/c4/factions.js +29 -156
- 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 +180 -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 +20 -3
- 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 +45 -19
- package/dist/internal/c4/fleet.d.ts.map +1 -1
- package/dist/internal/c4/fleet.js +37 -29
- 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 +47 -12
- package/dist/internal/c4/game.d.ts.map +1 -1
- package/dist/internal/c4/game.js +110 -21
- package/dist/internal/c4/game.js.map +1 -1
- package/dist/internal/c4/identity.d.ts +2 -152
- package/dist/internal/c4/identity.d.ts.map +1 -1
- package/dist/internal/c4/identity.js +6 -110
- package/dist/internal/c4/identity.js.map +1 -1
- package/dist/internal/c4/local-market-order.d.ts +31 -0
- package/dist/internal/c4/local-market-order.d.ts.map +1 -0
- package/dist/internal/c4/local-market-order.js +47 -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 +58 -0
- package/dist/internal/c4/loot.d.ts.map +1 -0
- package/dist/internal/c4/loot.js +130 -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 +14 -43
- 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 +13 -51
- 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.js +1 -1
- package/dist/internal/c4/pda.js.map +1 -1
- package/dist/internal/c4/profile-faction.d.ts.map +1 -1
- package/dist/internal/c4/profile-faction.js +11 -21
- package/dist/internal/c4/profile-faction.js.map +1 -1
- package/dist/internal/c4/profile-permissions.d.ts +5 -3
- package/dist/internal/c4/profile-permissions.d.ts.map +1 -1
- package/dist/internal/c4/profile-permissions.js +61 -8
- 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 +14 -115
- 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 +261 -0
- package/dist/internal/c4/scan-lifecycle.js.map +1 -0
- package/dist/internal/c4/scanning.d.ts +1 -28
- package/dist/internal/c4/scanning.d.ts.map +1 -1
- package/dist/internal/c4/scanning.js +7 -36
- 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 +25 -21
- 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 +12 -62
- package/dist/internal/c4/starbase.js.map +1 -1
- package/dist/internal/c4/world.d.ts +36 -7
- package/dist/internal/c4/world.d.ts.map +1 -1
- package/dist/internal/c4/world.js +67 -48
- 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/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 +171 -0
- package/dist/internal/planning/arrival-guards.js.map +1 -0
- package/dist/internal/planning/authorization-adapter.d.ts +45 -37
- package/dist/internal/planning/authorization-adapter.d.ts.map +1 -1
- package/dist/internal/planning/authorization-adapter.js +165 -76
- 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 +58 -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 +32 -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 +198 -0
- package/dist/internal/planning/democracy-history.js.map +1 -0
- package/dist/internal/planning/faction-enrollment.d.ts +0 -2
- package/dist/internal/planning/faction-enrollment.d.ts.map +1 -1
- package/dist/internal/planning/faction-enrollment.js +1 -22
- 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 +106 -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 +110 -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 +109 -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 +47 -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 +132 -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 +208 -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 +42 -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 +85 -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 +167 -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 +138 -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 +239 -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 +127 -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 +138 -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 +41 -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 +103 -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 +31 -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 +86 -0
- package/dist/internal/planning/open-signal.js.map +1 -0
- package/dist/internal/planning/original-token.d.ts +34 -0
- package/dist/internal/planning/original-token.d.ts.map +1 -0
- package/dist/internal/planning/original-token.js +98 -0
- package/dist/internal/planning/original-token.js.map +1 -0
- package/dist/internal/planning/plan-fields.d.ts +59 -0
- package/dist/internal/planning/plan-fields.d.ts.map +1 -0
- package/dist/internal/planning/plan-fields.js +153 -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 +168 -0
- package/dist/internal/planning/plan-guards.js.map +1 -0
- package/dist/internal/planning/recipe-state.d.ts +6 -0
- package/dist/internal/planning/recipe-state.d.ts.map +1 -0
- package/dist/internal/planning/recipe-state.js +20 -0
- package/dist/internal/planning/recipe-state.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/respawn-guards.d.ts +3 -0
- package/dist/internal/planning/respawn-guards.d.ts.map +1 -0
- package/dist/internal/planning/respawn-guards.js +41 -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 +635 -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 +94 -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 +93 -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 +15 -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 +126 -0
- package/dist/internal/planning/xp-runtime.js.map +1 -0
- 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.map +1 -1
- package/dist/loyalty/actions/index.js +8 -21
- package/dist/loyalty/actions/index.js.map +1 -1
- package/dist/loyalty/index.d.ts.map +1 -1
- package/dist/loyalty/index.js +2 -6
- package/dist/loyalty/index.js.map +1 -1
- package/dist/markets/actions/index.d.ts +61 -3
- package/dist/markets/actions/index.d.ts.map +1 -1
- package/dist/markets/actions/index.js +227 -160
- 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 +282 -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 +57 -10
- 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 +7 -2
- 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 +5 -0
- package/dist/planning/assembly.d.ts.map +1 -1
- package/dist/planning/assembly.js +8 -4
- package/dist/planning/assembly.js.map +1 -1
- package/dist/planning/execution.d.ts +18 -3
- package/dist/planning/execution.d.ts.map +1 -1
- package/dist/planning/execution.js +492 -40
- package/dist/planning/execution.js.map +1 -1
- package/dist/planning/index.d.ts +196 -149
- package/dist/planning/index.d.ts.map +1 -1
- package/dist/planning/index.js +44 -292
- package/dist/planning/index.js.map +1 -1
- 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 -30
- 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 +14 -0
- package/dist/planning/plan-validation.d.ts.map +1 -0
- package/dist/planning/plan-validation.js +124 -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 +19 -19
- 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.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.map +1 -1
- package/dist/rewards/index.js +5 -4
- 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 +185 -0
- package/dist/scanning/actions/index.js.map +1 -0
- package/dist/scanning/index.d.ts +5 -2
- package/dist/scanning/index.d.ts.map +1 -1
- package/dist/scanning/index.js +13 -9
- 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.map +1 -1
- package/dist/starbases/actions/index.js +3 -14
- package/dist/starbases/actions/index.js.map +1 -1
- package/dist/world/index.d.ts +110 -5
- package/dist/world/index.d.ts.map +1 -1
- package/dist/world/index.js +109 -4
- package/dist/world/index.js.map +1 -1
- package/dist/world/planet-claim-stake-plots.d.ts +130 -0
- package/dist/world/planet-claim-stake-plots.d.ts.map +1 -0
- package/dist/world/planet-claim-stake-plots.js +110 -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,16 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { deriveCurrencyCache, validateCurrencyCache, } from '../../internal/c4/currency-cache.js';
|
|
2
|
+
import { resolveDockFunding } from '../../internal/planning/fleet-dock-funding.js';
|
|
3
|
+
import { validateFleetDockingPolicy } from '../../internal/planning/fleet-docking.js';
|
|
4
|
+
import { deriveFactionOwnershipAddress } from '../../internal/c4/factions.js';
|
|
5
|
+
import { regionContainsCoordinate } from '../../internal/c4/region-geometry.js';
|
|
6
|
+
import { hashMovementCharacter } from '../../internal/planning/movement-character.js';
|
|
7
|
+
import { resolveXpRuntime } from '../../internal/planning/xp-runtime.js';
|
|
8
|
+
import { getAddressEncoder, isAddress } from '@solana/kit';
|
|
2
9
|
import { InvalidActionInputError, SageSdkError } from '../../client/errors.js';
|
|
3
10
|
import { readContextRawAccounts } from '../../client/reconciliation.js';
|
|
4
11
|
import { deriveFleetAddress, fleetAccountDefinition, } from '../../internal/c4/fleet.js';
|
|
5
|
-
import { deriveFleetCrewBindingAddress, fleetCrewBindingAccountDefinition, } from '../../internal/c4/fleet-crew-binding.js';
|
|
12
|
+
import { deriveFleetCrewBindingAddress, fleetCrewBindingAccountDefinition, matchesFleetCrewBindingIdentity, } from '../../internal/c4/fleet-crew-binding.js';
|
|
6
13
|
import { deriveFactionRelationTrackerAddress, deriveRegionTrackerAddress, factionRelationTrackerAccountDefinition, regionTrackerAccountDefinition, } from '../../internal/c4/factions.js';
|
|
7
|
-
import {
|
|
8
|
-
import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/
|
|
14
|
+
import { FixedPoint, getFleetDecoder, getRegionTrackerDecoder, getStarSystemDecoder, } from '../../internal/c4/runtime-bindings.js';
|
|
15
|
+
import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/character.js';
|
|
9
16
|
import { deriveStarbasePlayerAddress, starbasePlayerAccountDefinition, } from '../../internal/c4/starbase.js';
|
|
10
17
|
import { buildStarSystemDiscoveryFilters, deriveStarSystemAddress, starSystemAccountDefinition, } from '../../internal/c4/world.js';
|
|
11
18
|
import { requireGameAddress } from '../../internal/game-context.js';
|
|
12
|
-
import { adaptDockedToIdleInstruction,
|
|
19
|
+
import { adaptDockedToIdleInstruction, adaptIdleToDockedInstruction, adaptStartSubwarpInstruction, adaptStopSubwarpInstruction, adaptWarpLaneInstruction, adaptWarpToCoordinateInstruction, validatePlanAuthorization, } from '../../internal/planning/authorization-adapter.js';
|
|
13
20
|
import { createPlan, } from '../../planning/index.js';
|
|
21
|
+
import { resolveFleetArrival } from '../../internal/planning/fleet-arrival.js';
|
|
22
|
+
import { failFleetState, requireActionCoordinate, } from '../../internal/planning/fleet-state.js';
|
|
14
23
|
const FLEET_STATE_IDLE = 'fleet.state.idle';
|
|
15
24
|
const FLEET_STATE_MOVEMENT_STARTED = 'fleet.state.movement-started';
|
|
16
25
|
function movementStartSemantics(fleet) {
|
|
@@ -32,50 +41,35 @@ function fail(message, address) {
|
|
|
32
41
|
throw new SageSdkError('ACTION_PRECONDITION_FAILED', message, { address });
|
|
33
42
|
}
|
|
34
43
|
function validateSettleArrivalOptions(value) {
|
|
44
|
+
const remedy = 'Pass only { authorization: { profile, authority, keyIndex } } for Career XP subwarp. Certificates and delegated sub-Profiles are not supported.';
|
|
35
45
|
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
36
|
-
throw new InvalidActionInputError('options', value, '
|
|
46
|
+
throw new InvalidActionInputError('options', value, 'one explicit arrival authorization route', remedy);
|
|
37
47
|
}
|
|
38
48
|
const record = value;
|
|
39
|
-
if (Object.keys(record).length
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
!
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
return fail(`Fleet ${fleet.name} is destroyed and cannot have a movement arrival settled. Respawn the Fleet through an appropriate game client, refresh it, and retry only after starting warp or subwarp movement.`, fleet.address);
|
|
62
|
-
case 'claimStakeTransfer':
|
|
63
|
-
return fail(`Fleet ${fleet.name} is in a claimStakeTransfer state, not movement. Finish the Claim Stake transfer, refresh the Fleet, and retry only after starting warp or subwarp movement.`, fleet.address);
|
|
49
|
+
if (Object.keys(record).length === 1 &&
|
|
50
|
+
Object.hasOwn(record, 'authorization')) {
|
|
51
|
+
const auth = record.authorization;
|
|
52
|
+
if (auth !== null && typeof auth === 'object' && !Array.isArray(auth)) {
|
|
53
|
+
const fields = auth;
|
|
54
|
+
if (Object.keys(fields).length === 3 &&
|
|
55
|
+
Object.hasOwn(fields, 'keyIndex') &&
|
|
56
|
+
Object.hasOwn(fields, 'profile') &&
|
|
57
|
+
Object.hasOwn(fields, 'authority') &&
|
|
58
|
+
typeof fields.profile === 'string' &&
|
|
59
|
+
isAddress(fields.profile) &&
|
|
60
|
+
typeof fields.authority === 'string' &&
|
|
61
|
+
isAddress(fields.authority)) {
|
|
62
|
+
const authorization = {
|
|
63
|
+
profile: fields.profile,
|
|
64
|
+
authority: fields.authority,
|
|
65
|
+
keyIndex: fields.keyIndex,
|
|
66
|
+
};
|
|
67
|
+
validatePlanAuthorization(authorization);
|
|
68
|
+
return { authorization };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
64
71
|
}
|
|
65
|
-
|
|
66
|
-
const STOP_SUBWARP_REMEDIES = {
|
|
67
|
-
claimStakeTransfer: 'Finish the Claim Stake transfer',
|
|
68
|
-
destroyed: 'Respawn it',
|
|
69
|
-
docked: 'Undock it',
|
|
70
|
-
mining: 'Stop mining',
|
|
71
|
-
respawn: 'Wait for it to finish respawning',
|
|
72
|
-
warp: 'Let warp finish and settle its arrival',
|
|
73
|
-
};
|
|
74
|
-
function requireStopSubwarpState(fleet) {
|
|
75
|
-
const state = fleet.state.kind;
|
|
76
|
-
if (state === 'subwarp' || state === 'idle')
|
|
77
|
-
return;
|
|
78
|
-
fail(`Fleet ${fleet.name} is ${state} and cannot stop subwarp. ${STOP_SUBWARP_REMEDIES[state]}, start subwarp, refresh it, and retry.`, fleet.address);
|
|
72
|
+
throw new InvalidActionInputError('options', value, 'direct Profile authorization', remedy);
|
|
79
73
|
}
|
|
80
74
|
function assertFleetOwner(fleet, authorization) {
|
|
81
75
|
if (fleet.ownerProfile.address !== authorization.profile) {
|
|
@@ -88,26 +82,8 @@ function requireDockedState(fleet) {
|
|
|
88
82
|
}
|
|
89
83
|
return fleet.state;
|
|
90
84
|
}
|
|
91
|
-
const REFRESH_TO_IDLE_REMEDIES = {
|
|
92
|
-
claimStakeTransfer: 'Wait for or complete the claim-stake transfer, refresh the Fleet, and retry.',
|
|
93
|
-
destroyed: 'Respawn the Fleet, refresh it, and retry.',
|
|
94
|
-
docked: 'Undock the Fleet, refresh it, and retry.',
|
|
95
|
-
mining: 'Stop mining, refresh the Fleet, and retry.',
|
|
96
|
-
respawn: 'Wait for the Fleet to recover, refresh it, and retry.',
|
|
97
|
-
};
|
|
98
85
|
function requireRefreshableIdleState(fleet, action) {
|
|
99
|
-
|
|
100
|
-
return fleet.location;
|
|
101
|
-
if (fleet.state.kind === 'warp' || fleet.state.kind === 'subwarp') {
|
|
102
|
-
return fleet.state.to;
|
|
103
|
-
}
|
|
104
|
-
const remedy = REFRESH_TO_IDLE_REMEDIES[fleet.state.kind];
|
|
105
|
-
const requirement = action === 'dock'
|
|
106
|
-
? 'the Fleet must be idle or in a refreshable warp/subwarp state at a Starbase System coordinate'
|
|
107
|
-
: action === 'warp through a lane'
|
|
108
|
-
? 'the Fleet must be idle or in a refreshable warp/subwarp state at a Star System coordinate'
|
|
109
|
-
: 'the Fleet must be idle or in a refreshable warp/subwarp state at a coordinate';
|
|
110
|
-
fail(`Fleet ${fleet.name} is ${fleet.state.kind}, so it cannot ${action}; ${requirement}. ${remedy} Then retry ${action === 'dock' ? 'docking' : action}.`, fleet.address);
|
|
86
|
+
return requireActionCoordinate(fleet, action, `it must be idle or in a refreshable warp/subwarp state at ${action === 'dock' ? 'a Starbase System coordinate' : action === 'warp through a lane' ? 'a Star System coordinate' : 'a coordinate'}`);
|
|
111
87
|
}
|
|
112
88
|
function requireRawAccount(account, message, address) {
|
|
113
89
|
return account ?? fail(message, address);
|
|
@@ -124,20 +100,14 @@ function validateFleetRead(account, fleet, game, system, systemSequenceId) {
|
|
|
124
100
|
}
|
|
125
101
|
return data;
|
|
126
102
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
fail(`Fleet ${fleet.name} cannot undock because the canonical Character does not match Profile ${profile} and the configured Game ${game}. Refresh or repair the Character registration for this Profile and Game before retrying.`, account.address);
|
|
131
|
-
}
|
|
132
|
-
return data;
|
|
133
|
-
}
|
|
134
|
-
async function validateSystemRead(account, fleet, game, systemSequenceId) {
|
|
103
|
+
/** Requires a Star System of the configured Game at its canonical PDA and,
|
|
104
|
+
* for a docked Fleet, at the docked sequence. */
|
|
105
|
+
async function validateFleetSystemRead(account, fleet, game, action, label = 'Star System', sequenceId) {
|
|
135
106
|
const data = starSystemAccountDefinition.decode(account);
|
|
136
|
-
const canonicalAddress = await deriveStarSystemAddress(game, data.systemId);
|
|
137
107
|
if (data.game !== game ||
|
|
138
|
-
|
|
139
|
-
data.sequenceId !==
|
|
140
|
-
fail(`Fleet ${fleet.name} cannot
|
|
108
|
+
(await deriveStarSystemAddress(game, data.systemId)) !== account.address ||
|
|
109
|
+
(sequenceId !== undefined && data.sequenceId !== sequenceId)) {
|
|
110
|
+
fail(`Fleet ${fleet.name} cannot ${action} because ${label} ${account.address} does not match the configured Game${sequenceId === undefined ? ' or its canonical PDA' : ', its canonical PDA or the docked sequence'}. Refresh the Fleet and galaxy, then retry.`, account.address);
|
|
141
111
|
}
|
|
142
112
|
return data;
|
|
143
113
|
}
|
|
@@ -151,17 +121,6 @@ function validateStarbasePlayerRead(account, fleet, profile, character, system,
|
|
|
151
121
|
}
|
|
152
122
|
return data;
|
|
153
123
|
}
|
|
154
|
-
async function validateDockSystemRead(account, fleet, game, canonicalAddress, exactLocation) {
|
|
155
|
-
const data = starSystemAccountDefinition.decode(account);
|
|
156
|
-
const derivedAddress = await deriveStarSystemAddress(game, data.systemId);
|
|
157
|
-
if (account.address !== canonicalAddress ||
|
|
158
|
-
account.address !== derivedAddress ||
|
|
159
|
-
data.game !== game ||
|
|
160
|
-
!hasExactSystemLocation(account, exactLocation)) {
|
|
161
|
-
fail(`Fleet ${fleet.name} cannot dock because Star System ${canonicalAddress} does not match the configured Game, Fleet coordinate, or canonical PDA. Refresh the Fleet and galaxy before retrying.`, canonicalAddress);
|
|
162
|
-
}
|
|
163
|
-
return data;
|
|
164
|
-
}
|
|
165
124
|
function failNoDockableStarbase(fleet, location) {
|
|
166
125
|
return fail(`Fleet ${fleet.name} action coordinate (${String(location.x)}, ${String(location.y)}) has no Starbase to dock at. Move the Fleet to a Starbase system first, refresh the Fleet and galaxy, and retry.`, fleet.address);
|
|
167
126
|
}
|
|
@@ -200,14 +159,17 @@ function validateDestination(fleet, actionLocation, destination) {
|
|
|
200
159
|
function failSameCoordinate(fleet, destination) {
|
|
201
160
|
return fail(`Fleet ${fleet.name} destination (${String(destination.x)}, ${String(destination.y)}) is its action coordinate. Choose a different coordinate and retry.`, fleet.address);
|
|
202
161
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
162
|
+
/** Requires the authorization Profile's canonical Character in the
|
|
163
|
+
* configured Game. */
|
|
164
|
+
function requireFleetCharacter(account, fleet, profile, game, address, action) {
|
|
165
|
+
const character = requireRawAccount(account, `Fleet ${fleet.name} cannot ${action} because its Profile has no canonical Character at ${address}. Create the Character for Profile ${profile} in the configured Game, refresh the Fleet, and retry.`, address);
|
|
166
|
+
const data = characterAccountDefinition.decode(character);
|
|
167
|
+
if (character.address !== address ||
|
|
206
168
|
data.playerProfile !== profile ||
|
|
207
169
|
data.game !== game) {
|
|
208
|
-
fail(`Fleet ${fleet.name} cannot ${action} because the canonical Character does not match Profile ${profile} and the configured Game ${game}. Refresh or repair the Character registration for this Profile and Game before retrying.`,
|
|
170
|
+
fail(`Fleet ${fleet.name} cannot ${action} because the canonical Character does not match Profile ${profile} and the configured Game ${game}. Refresh or repair the Character registration for this Profile and Game before retrying.`, address);
|
|
209
171
|
}
|
|
210
|
-
return
|
|
172
|
+
return character;
|
|
211
173
|
}
|
|
212
174
|
async function validateIdleFleetRead(account, fleet, game, actionLocation, planName = 'coordinate movement') {
|
|
213
175
|
const data = fleetAccountDefinition.decode(account);
|
|
@@ -228,7 +190,7 @@ async function validateIdleFleetRead(account, fleet, game, actionLocation, planN
|
|
|
228
190
|
stateLocation?.y !== actionLocation.y) {
|
|
229
191
|
fail(`Fleet ${fleet.name} changed or no longer matches its configured Game, owner, address, PDA, or idle coordinate, movement state, and action coordinate. Refresh the Fleet and create a new ${planName} Plan before retrying.`, fleet.address);
|
|
230
192
|
}
|
|
231
|
-
const exact =
|
|
193
|
+
const exact = getFleetDecoder().decode(account.data);
|
|
232
194
|
let exactLocation = exact.location;
|
|
233
195
|
if (exact.state.__kind === 'MoveWarp') {
|
|
234
196
|
exactLocation = exact.state.fields[0].to;
|
|
@@ -248,59 +210,16 @@ function validateRegionTrackerRead(account, fleet, game, canonicalAddress, actio
|
|
|
248
210
|
if (account.address !== canonicalAddress || data.game !== game) {
|
|
249
211
|
fail(`Fleet ${fleet.name} cannot ${action} because RegionTracker does not match the configured Game or canonical PDA: ${account.address}; refresh the world region data for the configured Game and retry.`, account.address);
|
|
250
212
|
}
|
|
251
|
-
return
|
|
213
|
+
return getRegionTrackerDecoder().decode(account.data);
|
|
252
214
|
}
|
|
253
215
|
function validateCrewBindingRead(account, fleet, canonicalAddress) {
|
|
254
216
|
const data = fleetCrewBindingAccountDefinition.decode(account);
|
|
255
217
|
if (account.address !== canonicalAddress ||
|
|
256
|
-
data.
|
|
257
|
-
data.ownerProfile !== fleet.ownerProfile.address) {
|
|
218
|
+
!matchesFleetCrewBindingIdentity(data, fleet.address, fleet.ownerProfile.address)) {
|
|
258
219
|
fail(`FleetCrewBinding does not match Fleet ${fleet.address}, its owner Profile, or its canonical PDA: ${account.address}. Refresh the Fleet crew registration or remove the invalid binding before retrying.`, account.address);
|
|
259
220
|
}
|
|
260
221
|
return data;
|
|
261
222
|
}
|
|
262
|
-
function pointIsOnSegment(point, start, end) {
|
|
263
|
-
const cross = (point.y - start.y) * (end.x - start.x) -
|
|
264
|
-
(point.x - start.x) * (end.y - start.y);
|
|
265
|
-
return (cross === 0n &&
|
|
266
|
-
point.x >= (start.x < end.x ? start.x : end.x) &&
|
|
267
|
-
point.x <= (start.x > end.x ? start.x : end.x) &&
|
|
268
|
-
point.y >= (start.y < end.y ? start.y : end.y) &&
|
|
269
|
-
point.y <= (start.y > end.y ? start.y : end.y));
|
|
270
|
-
}
|
|
271
|
-
function regionContainsCoordinate(region, coordinate) {
|
|
272
|
-
const boundingBox = {
|
|
273
|
-
maxX: region.boundingBox.maxX.raw,
|
|
274
|
-
maxY: region.boundingBox.maxY.raw,
|
|
275
|
-
minX: region.boundingBox.minX.raw,
|
|
276
|
-
minY: region.boundingBox.minY.raw,
|
|
277
|
-
};
|
|
278
|
-
const border = region.border.map(([x, y]) => ({ x: x.raw, y: y.raw }));
|
|
279
|
-
if (border.length < 3 ||
|
|
280
|
-
coordinate.x < boundingBox.minX ||
|
|
281
|
-
coordinate.x > boundingBox.maxX ||
|
|
282
|
-
coordinate.y < boundingBox.minY ||
|
|
283
|
-
coordinate.y > boundingBox.maxY) {
|
|
284
|
-
return false;
|
|
285
|
-
}
|
|
286
|
-
let inside = false;
|
|
287
|
-
for (let index = 0; index < border.length; index += 1) {
|
|
288
|
-
const start = border[index];
|
|
289
|
-
const end = border[(index + 1) % border.length];
|
|
290
|
-
if (pointIsOnSegment(coordinate, start, end))
|
|
291
|
-
return true;
|
|
292
|
-
if (start.y > coordinate.y !== end.y > coordinate.y) {
|
|
293
|
-
const deltaY = end.y - start.y;
|
|
294
|
-
const pointSide = (coordinate.x - start.x) * deltaY;
|
|
295
|
-
const edgeSide = (coordinate.y - start.y) * (end.x - start.x);
|
|
296
|
-
if ((deltaY > 0n && pointSide < edgeSide) ||
|
|
297
|
-
(deltaY < 0n && pointSide > edgeSide)) {
|
|
298
|
-
inside = !inside;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
return inside;
|
|
303
|
-
}
|
|
304
223
|
function resolveRegionId(tracker, coordinate, displayCoordinate, label, fleet, trackerAddress) {
|
|
305
224
|
const region = tracker.regions.unsizedList.find((candidate) => regionContainsCoordinate(candidate, coordinate));
|
|
306
225
|
if (region === undefined) {
|
|
@@ -311,8 +230,8 @@ function resolveRegionId(tracker, coordinate, displayCoordinate, label, fleet, t
|
|
|
311
230
|
function exactCoordinate(coordinate) {
|
|
312
231
|
const spec = { fractionalBits: 56, signed: true, totalBits: 64 };
|
|
313
232
|
return {
|
|
314
|
-
x:
|
|
315
|
-
y:
|
|
233
|
+
x: FixedPoint.fromNumber(coordinate.x, spec).raw,
|
|
234
|
+
y: FixedPoint.fromNumber(coordinate.y, spec).raw,
|
|
316
235
|
};
|
|
317
236
|
}
|
|
318
237
|
async function resolveCoordinateMovement(ctx, fleet, authorization, actionLocation, destination) {
|
|
@@ -329,7 +248,7 @@ async function resolveCoordinateMovement(ctx, fleet, authorization, actionLocati
|
|
|
329
248
|
crewBinding,
|
|
330
249
|
]);
|
|
331
250
|
const fleetAccount = requireRawAccount(fleetCandidate, `Fleet ${fleet.name} is no longer available at ${fleet.address}. Refresh the Fleet and retry planning coordinate movement.`, fleet.address);
|
|
332
|
-
const characterAccount =
|
|
251
|
+
const characterAccount = requireFleetCharacter(characterCandidate, fleet, authorization.profile, game, character, 'move');
|
|
333
252
|
const regionTrackerAccount = requireRawAccount(regionCandidate, `Fleet ${fleet.name} cannot move because the canonical RegionTracker ${regionTracker} is missing. Verify the configured Game and cluster, refresh the world region data, and retry.`, regionTracker);
|
|
334
253
|
const validatedFleet = await validateIdleFleetRead(fleetAccount, fleet, game, actionLocation);
|
|
335
254
|
const exactDestination = exactCoordinate(destination);
|
|
@@ -337,7 +256,6 @@ async function resolveCoordinateMovement(ctx, fleet, authorization, actionLocati
|
|
|
337
256
|
exactDestination.y === validatedFleet.location.y) {
|
|
338
257
|
failSameCoordinate(fleet, destination);
|
|
339
258
|
}
|
|
340
|
-
validateCharacterForCoordinateMovement(characterAccount, fleet, authorization.profile, game, character);
|
|
341
259
|
const tracker = validateRegionTrackerRead(regionTrackerAccount, fleet, game, regionTracker);
|
|
342
260
|
if (crewCandidate !== undefined) {
|
|
343
261
|
validateCrewBindingRead(crewCandidate, fleet, crewBinding);
|
|
@@ -362,7 +280,13 @@ async function planCoordinateMovement(mode, ctx, fleet, options) {
|
|
|
362
280
|
validateDestination(fleet, actionLocation, options.destination);
|
|
363
281
|
const game = requireGameAddress(ctx);
|
|
364
282
|
const resolved = await resolveCoordinateMovement(ctx, fleet, options.authorization, actionLocation, options.destination);
|
|
283
|
+
const xp = await resolveXpRuntime(ctx, {
|
|
284
|
+
game,
|
|
285
|
+
character: resolved.character,
|
|
286
|
+
profile: options.authorization.profile,
|
|
287
|
+
});
|
|
365
288
|
const common = {
|
|
289
|
+
...xp.accounts,
|
|
366
290
|
authorization: options.authorization,
|
|
367
291
|
character: resolved.character,
|
|
368
292
|
...(resolved.crewBinding === undefined
|
|
@@ -386,10 +310,27 @@ async function planCoordinateMovement(mode, ctx, fleet, options) {
|
|
|
386
310
|
const verb = mode === 'subwarp' ? 'Subwarp' : 'Warp';
|
|
387
311
|
const description = `${verb} fleet ${fleet.name} to coordinate (${String(options.destination.x)}, ${String(options.destination.y)}).`;
|
|
388
312
|
const accounts = [
|
|
313
|
+
{
|
|
314
|
+
kind: 'xp-runtime',
|
|
315
|
+
address: game,
|
|
316
|
+
intent: xp.intent,
|
|
317
|
+
accounts: xp.accounts,
|
|
318
|
+
describes: 'The configured Game and canonical Character XP accounts remain eligible for movement.',
|
|
319
|
+
},
|
|
389
320
|
await precondition(resolved.fleetAccount, fleet.state.kind === 'idle'
|
|
390
321
|
? `Fleet ${fleet.name} remains idle at coordinate (${String(actionLocation.x)}, ${String(actionLocation.y)}).`
|
|
391
322
|
: `Fleet ${fleet.name} remains ${fleet.state.kind} with action coordinate (${String(actionLocation.x)}, ${String(actionLocation.y)}).`),
|
|
392
|
-
|
|
323
|
+
{
|
|
324
|
+
kind: 'movement-character',
|
|
325
|
+
address: resolved.character,
|
|
326
|
+
game,
|
|
327
|
+
profile: options.authorization.profile,
|
|
328
|
+
stateHash: await hashMovementCharacter(resolved.characterAccount, {
|
|
329
|
+
game,
|
|
330
|
+
profile: options.authorization.profile,
|
|
331
|
+
}),
|
|
332
|
+
describes: 'The canonical Character retains its movement modifiers and non-accrual state.',
|
|
333
|
+
},
|
|
393
334
|
await precondition(resolved.regionTrackerAccount, `The configured RegionTracker continues to map Fleet ${fleet.name}'s current and destination coordinates.`),
|
|
394
335
|
...(resolved.crewBindingAccount === undefined
|
|
395
336
|
? []
|
|
@@ -411,45 +352,35 @@ async function planCoordinateMovement(mode, ctx, fleet, options) {
|
|
|
411
352
|
summary: description,
|
|
412
353
|
});
|
|
413
354
|
}
|
|
414
|
-
async function deriveCurrencyCacheAddress(game) {
|
|
415
|
-
const [address] = await getProgramDerivedAddress({
|
|
416
|
-
programAddress: sage.SAGE_PROGRAM_ADDRESS,
|
|
417
|
-
seeds: [
|
|
418
|
-
getBytesEncoder().encode(new TextEncoder().encode('CurrencyConfig')),
|
|
419
|
-
getAddressEncoder().encode(game),
|
|
420
|
-
],
|
|
421
|
-
});
|
|
422
|
-
return address;
|
|
423
|
-
}
|
|
424
|
-
function validateCurrencyCacheRead(account, fleet, game, canonicalAddress) {
|
|
425
|
-
const decoder = sage.getCurrencyConfigCacheDecoder();
|
|
426
|
-
const discriminator = sage.CURRENCY_CONFIG_CACHE_DISCRIMINATOR;
|
|
427
|
-
const validDiscriminator = discriminator.every((byte, index) => account.data[index] === byte);
|
|
428
|
-
if (account.address !== canonicalAddress ||
|
|
429
|
-
account.owner !== sage.SAGE_PROGRAM_ADDRESS ||
|
|
430
|
-
account.data.length !== decoder.fixedSize ||
|
|
431
|
-
!validDiscriminator) {
|
|
432
|
-
fail(`Fleet ${fleet.name} cannot use a warp lane because CurrencyCache ${account.address} does not match the configured Game, canonical PDA, owner, or pinned account layout. Refresh the Game currency configuration and retry.`, account.address);
|
|
433
|
-
}
|
|
434
|
-
const decoded = decoder.decode(account.data);
|
|
435
|
-
if (decoded.gameId !== game) {
|
|
436
|
-
fail(`Fleet ${fleet.name} cannot use a warp lane because CurrencyCache ${account.address} does not match the configured Game or canonical PDA. Refresh the Game currency configuration and retry.`, account.address);
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
async function validateLaneSystemRead(account, fleet, game, label) {
|
|
440
|
-
const data = starSystemAccountDefinition.decode(account);
|
|
441
|
-
const canonicalAddress = await deriveStarSystemAddress(game, data.systemId);
|
|
442
|
-
if (data.game !== game || account.address !== canonicalAddress) {
|
|
443
|
-
fail(`Fleet ${fleet.name} cannot use a warp lane because the ${label} Star System ${account.address} does not match the configured Game or canonical PDA. Refresh the galaxy and retry with a Star System from the configured Game.`, account.address);
|
|
444
|
-
}
|
|
445
|
-
return data;
|
|
446
|
-
}
|
|
447
355
|
function hasExactSystemLocation(account, location) {
|
|
448
356
|
starSystemAccountDefinition.decode(account);
|
|
449
|
-
const exact =
|
|
357
|
+
const exact = getStarSystemDecoder().decode(account.data);
|
|
450
358
|
return (exact.coordinates[0].raw === location.x &&
|
|
451
359
|
exact.coordinates[1].raw === location.y);
|
|
452
360
|
}
|
|
361
|
+
/** The Star Systems of the configured Game discovered at a Fleet's displayed
|
|
362
|
+
* action coordinate. */
|
|
363
|
+
async function discoverSystemsAt(ctx, game, location) {
|
|
364
|
+
const systems = await ctx.data.discover(starSystemAccountDefinition, {
|
|
365
|
+
filters: buildStarSystemDiscoveryFilters(game),
|
|
366
|
+
strategy: 'targeted-program-accounts',
|
|
367
|
+
});
|
|
368
|
+
return systems
|
|
369
|
+
.filter(({ data }) => data.coordinates.x === location.x && data.coordinates.y === location.y)
|
|
370
|
+
.map(({ address }) => address);
|
|
371
|
+
}
|
|
372
|
+
/** Selects the one fresh candidate whose exact coordinate is the Fleet's. */
|
|
373
|
+
function selectSystemAt(fleet, location, exact, candidates, accounts) {
|
|
374
|
+
const matches = accounts.filter((account) => account !== undefined && hasExactSystemLocation(account, exact));
|
|
375
|
+
if (matches.length === 1)
|
|
376
|
+
return matches[0];
|
|
377
|
+
const coordinate = `Fleet ${fleet.name} action coordinate (${String(location.x)}, ${String(location.y)})`;
|
|
378
|
+
if (candidates.length === 1) {
|
|
379
|
+
const [only] = accounts;
|
|
380
|
+
fail(`${coordinate} no longer matches Star System ${only === undefined ? candidates[0] : starSystemAccountDefinition.decode(only).name}. Refresh the Fleet and galaxy, then retry.`, candidates[0]);
|
|
381
|
+
}
|
|
382
|
+
return fail(`${coordinate} matches multiple Star Systems in the configured Game. Refresh the galaxy and repair the contradictory System data before retrying.`, fleet.address);
|
|
383
|
+
}
|
|
453
384
|
function validateFactionRelationTrackerRead(account, fleet, game, canonicalAddress) {
|
|
454
385
|
const data = factionRelationTrackerAccountDefinition.decode(account);
|
|
455
386
|
if (account.address !== canonicalAddress || data.game !== game) {
|
|
@@ -458,18 +389,13 @@ function validateFactionRelationTrackerRead(account, fleet, game, canonicalAddre
|
|
|
458
389
|
}
|
|
459
390
|
async function resolveWarpLane(ctx, fleet, actionLocation, options) {
|
|
460
391
|
const game = requireGameAddress(ctx);
|
|
461
|
-
const
|
|
462
|
-
filters: buildStarSystemDiscoveryFilters(game),
|
|
463
|
-
strategy: 'targeted-program-accounts',
|
|
464
|
-
});
|
|
465
|
-
const sourceCandidates = systems.filter((system) => system.data.coordinates.x === actionLocation.x &&
|
|
466
|
-
system.data.coordinates.y === actionLocation.y);
|
|
392
|
+
const sourceCandidates = await discoverSystemsAt(ctx, game, actionLocation);
|
|
467
393
|
if (sourceCandidates.length === 0) {
|
|
468
394
|
fail(`Fleet ${fleet.name} action coordinate (${String(actionLocation.x)}, ${String(actionLocation.y)}) does not match a Star System in the configured Game. Refresh the galaxy or move the Fleet to a Star System before retrying.`, fleet.address);
|
|
469
395
|
}
|
|
470
396
|
const [character, currencyCache, factionRelationTracker, regionTracker] = await Promise.all([
|
|
471
397
|
findCharacterPda(options.authorization.profile, game),
|
|
472
|
-
|
|
398
|
+
deriveCurrencyCache(game).then(([address]) => address),
|
|
473
399
|
deriveFactionRelationTrackerAddress(game),
|
|
474
400
|
deriveRegionTrackerAddress(game),
|
|
475
401
|
]);
|
|
@@ -478,7 +404,7 @@ async function resolveWarpLane(ctx, fleet, actionLocation, options) {
|
|
|
478
404
|
const reads = await readContextRawAccounts(ctx, [
|
|
479
405
|
fleet.address,
|
|
480
406
|
character,
|
|
481
|
-
...sourceCandidates
|
|
407
|
+
...sourceCandidates,
|
|
482
408
|
options.destinationSystem,
|
|
483
409
|
currencyCache,
|
|
484
410
|
factionRelationTracker,
|
|
@@ -491,33 +417,17 @@ async function resolveWarpLane(ctx, fleet, actionLocation, options) {
|
|
|
491
417
|
const factionCandidate = reads[destinationOffset + 2];
|
|
492
418
|
const regionCandidate = reads[destinationOffset + 3];
|
|
493
419
|
const fleetAccount = requireRawAccount(fleetCandidate, `Fleet ${fleet.name} is no longer available at ${fleet.address}. Refresh the Fleet and retry planning the warp lane.`, fleet.address);
|
|
494
|
-
const validatedFleet = await validateIdleFleetRead(fleetAccount, fleet, game, actionLocation);
|
|
495
|
-
const
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
hasExactSystemLocation(account, validatedFleet.location)
|
|
499
|
-
? [{ account, address: candidate.address }]
|
|
500
|
-
: [];
|
|
501
|
-
});
|
|
502
|
-
if (exactSourceCandidates.length !== 1) {
|
|
503
|
-
if (sourceCandidates.length === 1) {
|
|
504
|
-
const sourceSystem = sourceCandidates[0].address;
|
|
505
|
-
const sourceAccount = requireRawAccount(reads[sourceOffset], `Fleet ${fleet.name} cannot use a warp lane because source Star System ${sourceSystem} is missing. Refresh the Fleet and galaxy, then retry.`, sourceSystem);
|
|
506
|
-
const source = starSystemAccountDefinition.decode(sourceAccount);
|
|
507
|
-
fail(`Fleet ${fleet.name} action coordinate (${String(actionLocation.x)}, ${String(actionLocation.y)}) no longer matches source Star System ${source.name}. Refresh the Fleet and galaxy before retrying.`, sourceSystem);
|
|
508
|
-
}
|
|
509
|
-
fail(`Fleet ${fleet.name} action coordinate (${String(actionLocation.x)}, ${String(actionLocation.y)}) matches multiple Star Systems in the configured Game. Refresh the galaxy and repair the contradictory System data before retrying.`, fleet.address);
|
|
510
|
-
}
|
|
511
|
-
const { account: sourceAccount, address: sourceSystem } = exactSourceCandidates[0];
|
|
512
|
-
const characterAccount = requireRawAccount(characterCandidate, `Fleet ${fleet.name} cannot use a warp lane because its Profile has no canonical Character at ${character}. Create the Character for Profile ${options.authorization.profile} in the configured Game, refresh the Fleet, and retry.`, character);
|
|
420
|
+
const validatedFleet = await validateIdleFleetRead(fleetAccount, fleet, game, actionLocation, 'warp lane');
|
|
421
|
+
const sourceAccount = selectSystemAt(fleet, actionLocation, validatedFleet.location, sourceCandidates, reads.slice(sourceOffset, destinationOffset));
|
|
422
|
+
const sourceSystem = sourceAccount.address;
|
|
423
|
+
const characterAccount = requireFleetCharacter(characterCandidate, fleet, options.authorization.profile, game, character, 'use a warp lane');
|
|
513
424
|
const destinationAccount = requireRawAccount(destinationCandidate, `Fleet ${fleet.name} cannot use a warp lane because destination Star System ${options.destinationSystem} is missing. Choose a Star System in the configured Game, refresh the galaxy, and retry.`, options.destinationSystem);
|
|
514
425
|
const currencyCacheAccount = requireRawAccount(currencyCandidate, `Fleet ${fleet.name} cannot use a warp lane because canonical CurrencyCache ${currencyCache} is missing. Verify the configured Game and cluster, refresh the Game currency configuration, and retry.`, currencyCache);
|
|
515
426
|
const factionRelationTrackerAccount = requireRawAccount(factionCandidate, `Fleet ${fleet.name} cannot use a warp lane because canonical FactionRelationTracker ${factionRelationTracker} is missing. Verify the configured Game and cluster, refresh the faction relation data, and retry.`, factionRelationTracker);
|
|
516
427
|
const regionTrackerAccount = requireRawAccount(regionCandidate, `Fleet ${fleet.name} cannot use a warp lane because canonical RegionTracker ${regionTracker} is missing. Verify the configured Game and cluster, refresh the world region data, and retry.`, regionTracker);
|
|
517
|
-
|
|
518
|
-
const
|
|
519
|
-
|
|
520
|
-
validateCurrencyCacheRead(currencyCacheAccount, fleet, game, currencyCache);
|
|
428
|
+
const source = await validateFleetSystemRead(sourceAccount, fleet, game, 'use a warp lane', 'source Star System');
|
|
429
|
+
const destination = await validateFleetSystemRead(destinationAccount, fleet, game, 'use a warp lane', 'destination Star System');
|
|
430
|
+
await validateCurrencyCache(currencyCacheAccount, game, 'warp lane');
|
|
521
431
|
validateFactionRelationTrackerRead(factionRelationTrackerAccount, fleet, game, factionRelationTracker);
|
|
522
432
|
validateRegionTrackerRead(regionTrackerAccount, fleet, game, regionTracker);
|
|
523
433
|
if (sourceSystem === options.destinationSystem) {
|
|
@@ -547,7 +457,15 @@ async function resolveWarpLane(ctx, fleet, actionLocation, options) {
|
|
|
547
457
|
*
|
|
548
458
|
* The planner resolves the source Star System from the Fleet's action coordinate,
|
|
549
459
|
* proves connectivity from that System's decoded connections, and resolves all
|
|
550
|
-
* generated instruction accounts internally.
|
|
460
|
+
* generated instruction accounts internally. CurrencyCache shared accounting may
|
|
461
|
+
* change; canonical identity/layout and the existing toll-input guards remain
|
|
462
|
+
* checked before signing. Refresh and recreate older Plans to use this guard.
|
|
463
|
+
*
|
|
464
|
+
* Connectivity does not guarantee eligibility. The program remains authoritative
|
|
465
|
+
* for faction-relationship and destination-risk checks and any ATLAS toll.
|
|
466
|
+
* Tested current PTR routes succeed with empty Fuel tanks. This planner does
|
|
467
|
+
* not estimate lane costs or treat enabled cross-faction economics as blanket
|
|
468
|
+
* permission.
|
|
551
469
|
*
|
|
552
470
|
* @example
|
|
553
471
|
* ```ts
|
|
@@ -567,24 +485,54 @@ export async function planFleetWarpLane(ctx, fleet, options) {
|
|
|
567
485
|
const actionLocation = requireRefreshableIdleState(fleet, 'warp through a lane');
|
|
568
486
|
const game = requireGameAddress(ctx);
|
|
569
487
|
const resolved = await resolveWarpLane(ctx, fleet, actionLocation, options);
|
|
488
|
+
const xp = await resolveXpRuntime(ctx, {
|
|
489
|
+
game,
|
|
490
|
+
character: resolved.character,
|
|
491
|
+
profile: options.authorization.profile,
|
|
492
|
+
});
|
|
570
493
|
const description = `Warp fleet ${fleet.name} from Star System ${resolved.source.name} to Star System ${resolved.destination.name} via warp lane.`;
|
|
571
494
|
return createPlan({
|
|
572
495
|
kind: 'fleet.warp-lane',
|
|
573
|
-
preconditions:
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
:
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
496
|
+
preconditions: [
|
|
497
|
+
{
|
|
498
|
+
kind: 'xp-runtime',
|
|
499
|
+
address: game,
|
|
500
|
+
intent: xp.intent,
|
|
501
|
+
accounts: xp.accounts,
|
|
502
|
+
describes: 'The configured Game and canonical Character XP accounts remain eligible for movement.',
|
|
503
|
+
},
|
|
504
|
+
...(await Promise.all([
|
|
505
|
+
precondition(resolved.fleetAccount, fleet.state.kind === 'idle'
|
|
506
|
+
? `Fleet ${fleet.name} remains idle at Star System ${resolved.source.name}.`
|
|
507
|
+
: `Fleet ${fleet.name} remains ${fleet.state.kind} at action source Star System ${resolved.source.name}.`),
|
|
508
|
+
hashMovementCharacter(resolved.characterAccount, {
|
|
509
|
+
game,
|
|
510
|
+
profile: options.authorization.profile,
|
|
511
|
+
}).then((stateHash) => ({
|
|
512
|
+
kind: 'movement-character',
|
|
513
|
+
address: resolved.character,
|
|
514
|
+
game,
|
|
515
|
+
profile: options.authorization.profile,
|
|
516
|
+
stateHash,
|
|
517
|
+
describes: 'The canonical Character retains its movement modifiers and non-accrual state.',
|
|
518
|
+
})),
|
|
519
|
+
precondition(resolved.sourceAccount, `Source Star System ${resolved.source.name} remains at Fleet ${fleet.name}'s action coordinate with a connection to system id ${String(resolved.destination.systemId)}.`),
|
|
520
|
+
precondition(resolved.destinationAccount, `Destination Star System ${resolved.destination.name} remains system id ${String(resolved.destination.systemId)} in the configured Game.`),
|
|
521
|
+
Promise.resolve({
|
|
522
|
+
kind: 'currency-cache',
|
|
523
|
+
address: resolved.currencyCacheAccount.address,
|
|
524
|
+
game,
|
|
525
|
+
describes: 'The canonical CurrencyCache retains its supported Game identity and layout; shared accounting may change.',
|
|
526
|
+
}),
|
|
527
|
+
precondition(resolved.factionRelationTrackerAccount, 'The canonical FactionRelationTracker remains assigned to the configured Game.'),
|
|
528
|
+
precondition(resolved.regionTrackerAccount, 'The canonical RegionTracker remains assigned to the configured Game.'),
|
|
529
|
+
])),
|
|
530
|
+
],
|
|
584
531
|
steps: [
|
|
585
532
|
{
|
|
586
533
|
describes: description,
|
|
587
534
|
instruction: adaptWarpLaneInstruction({
|
|
535
|
+
...xp.accounts,
|
|
588
536
|
authorization: options.authorization,
|
|
589
537
|
character: resolved.character,
|
|
590
538
|
currencyCache: resolved.currencyCache,
|
|
@@ -634,47 +582,73 @@ export function planFleetSubwarp(ctx, fleet, options) {
|
|
|
634
582
|
export function planFleetWarpToCoordinate(ctx, fleet, options) {
|
|
635
583
|
return planCoordinateMovement('warp', ctx, fleet, options);
|
|
636
584
|
}
|
|
637
|
-
/** Plans settlement
|
|
585
|
+
/** Plans settlement after chain time confirms the scheduled Fleet journey duration has elapsed.
|
|
586
|
+
*
|
|
587
|
+
* Game version 2 subwarp requires explicit direct Profile authorization and
|
|
588
|
+
* existing reconciled Career XP accounts. Warp settlement is unsupported.
|
|
589
|
+
* Journeys whose scheduled duration has not elapsed and Idle Fleets fail locally.
|
|
590
|
+
* Planning and execution read fresh accounts; no host clock is used.
|
|
638
591
|
*
|
|
639
|
-
* Settlement
|
|
640
|
-
*
|
|
641
|
-
*
|
|
642
|
-
*
|
|
643
|
-
*
|
|
592
|
+
* Settlement does not guarantee reaching the destination: insufficient Fuel can
|
|
593
|
+
* leave the Fleet Idle short of it. Low Fuel produces a planning-time warning,
|
|
594
|
+
* not a rejection. Inspect refreshed state and location after confirmation.
|
|
595
|
+
* Subwarp settles fuel and XP and may refund released storage rent to the
|
|
596
|
+
* Profile. Warp cooldown remains independent. Fresh checks cannot prevent a
|
|
597
|
+
* concurrent transaction from starting another journey before execution; the
|
|
598
|
+
* authorized instruction could stop that new journey. Intentional early
|
|
599
|
+
* stopping remains the separate {@link planFleetStopSubwarp} operation.
|
|
644
600
|
*
|
|
645
601
|
* @example
|
|
646
602
|
* ```ts
|
|
647
603
|
* declare const ctx: SageContext;
|
|
648
604
|
* declare const fleet: FleetSnapshot;
|
|
649
|
-
* declare const
|
|
650
|
-
* const plan = await planFleetSettleArrival(ctx, fleet, {
|
|
605
|
+
* declare const authorization: PlanAuthorization;
|
|
606
|
+
* const plan = await planFleetSettleArrival(ctx, fleet, { authorization });
|
|
651
607
|
* console.log(plan.describe());
|
|
652
608
|
* ```
|
|
653
609
|
*/
|
|
654
610
|
export async function planFleetSettleArrival(ctx, fleet, input) {
|
|
655
|
-
const
|
|
656
|
-
const
|
|
657
|
-
const
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
611
|
+
const options = validateSettleArrivalOptions(input);
|
|
612
|
+
const { intent, character, regionTracker, xp, lowFuel } = await resolveFleetArrival(ctx, fleet.address, options);
|
|
613
|
+
const fuelWarning = lowFuel
|
|
614
|
+
? ' Fuel is below the recorded journey budget (at planning); may stop short with no Fuel.'
|
|
615
|
+
: '';
|
|
616
|
+
const description = `Settle subwarp: fuel and Career XP; possible rent refund to Profile ${intent.profile}. Settlement does not guarantee reaching the destination.${fuelWarning} Read confirmed state/location. A race could stop a new journey.`;
|
|
617
|
+
const instruction = adaptStopSubwarpInstruction({
|
|
618
|
+
authorization: intent.authorization,
|
|
619
|
+
character,
|
|
620
|
+
fleet: intent.fleet,
|
|
621
|
+
game: intent.game,
|
|
622
|
+
regionTracker,
|
|
623
|
+
...xp.accounts,
|
|
624
|
+
});
|
|
662
625
|
return createPlan({
|
|
663
626
|
kind: 'fleet.settle-arrival',
|
|
664
|
-
preconditions: [
|
|
627
|
+
preconditions: [
|
|
628
|
+
{
|
|
629
|
+
kind: 'fleet-arrival',
|
|
630
|
+
address: intent.fleet,
|
|
631
|
+
intent,
|
|
632
|
+
character,
|
|
633
|
+
regionTracker,
|
|
634
|
+
describes: 'The owned journey must still have elapsed on chain; direct Profile authority must remain valid.',
|
|
635
|
+
},
|
|
636
|
+
{
|
|
637
|
+
kind: 'xp-runtime',
|
|
638
|
+
address: intent.game,
|
|
639
|
+
intent: xp.intent,
|
|
640
|
+
accounts: xp.accounts,
|
|
641
|
+
describes: 'The current Game runtime and required Career XP accounts must remain supported; XP balances may change.',
|
|
642
|
+
},
|
|
643
|
+
],
|
|
665
644
|
steps: [
|
|
666
645
|
{
|
|
667
646
|
describes: description,
|
|
668
|
-
instruction
|
|
669
|
-
|
|
670
|
-
fleet: fleet.address,
|
|
671
|
-
funder,
|
|
672
|
-
game,
|
|
673
|
-
}),
|
|
674
|
-
signers: [funder],
|
|
647
|
+
instruction,
|
|
648
|
+
signers: [intent.authorization.authority],
|
|
675
649
|
},
|
|
676
650
|
],
|
|
677
|
-
summary: `Settle
|
|
651
|
+
summary: `Settle elapsed subwarp for fleet ${fleet.name}.`,
|
|
678
652
|
});
|
|
679
653
|
}
|
|
680
654
|
/** Plans an early Fleet subwarp stop without signing, simulation, or write RPC.
|
|
@@ -697,21 +671,36 @@ export async function planFleetSettleArrival(ctx, fleet, input) {
|
|
|
697
671
|
export async function planFleetStopSubwarp(ctx, fleet, options) {
|
|
698
672
|
validatePlanAuthorization(options.authorization);
|
|
699
673
|
assertFleetOwner(fleet, options.authorization);
|
|
700
|
-
|
|
674
|
+
if (fleet.state.kind !== 'subwarp' && fleet.state.kind !== 'idle')
|
|
675
|
+
failFleetState(fleet, fleet.state.kind, 'stop subwarp', 'it must be subwarping or idle');
|
|
701
676
|
const game = requireGameAddress(ctx);
|
|
702
677
|
const character = await findCharacterPda(options.authorization.profile, game);
|
|
703
678
|
const regionTracker = await deriveRegionTrackerAddress(game);
|
|
704
679
|
const [regionCandidate] = await readContextRawAccounts(ctx, [regionTracker]);
|
|
705
680
|
const regionTrackerAccount = requireRawAccount(regionCandidate, `Canonical RegionTracker ${regionTracker} is missing. Verify the configured Game and cluster, refresh world region data, and retry stopping Fleet ${fleet.name}.`, regionTracker);
|
|
706
681
|
validateRegionTrackerRead(regionTrackerAccount, fleet, game, regionTracker, 'stop subwarp');
|
|
682
|
+
const xp = await resolveXpRuntime(ctx, {
|
|
683
|
+
game,
|
|
684
|
+
character,
|
|
685
|
+
profile: options.authorization.profile,
|
|
686
|
+
});
|
|
707
687
|
const description = `Stop subwarp early for fleet ${fleet.name}; leave it idle if the trip already completed.`;
|
|
708
688
|
return createPlan({
|
|
709
689
|
kind: 'fleet.stop-subwarp',
|
|
710
|
-
preconditions: [
|
|
690
|
+
preconditions: [
|
|
691
|
+
{
|
|
692
|
+
kind: 'xp-runtime',
|
|
693
|
+
address: game,
|
|
694
|
+
intent: xp.intent,
|
|
695
|
+
accounts: xp.accounts,
|
|
696
|
+
describes: 'The configured Game and canonical Character XP accounts remain eligible for movement.',
|
|
697
|
+
},
|
|
698
|
+
],
|
|
711
699
|
steps: [
|
|
712
700
|
{
|
|
713
701
|
describes: description,
|
|
714
702
|
instruction: adaptStopSubwarpInstruction({
|
|
703
|
+
...xp.accounts,
|
|
715
704
|
authorization: options.authorization,
|
|
716
705
|
character,
|
|
717
706
|
fleet: fleet.address,
|
|
@@ -753,12 +742,11 @@ export async function planFleetUndock(ctx, fleet, options) {
|
|
|
753
742
|
starbasePlayerAddress,
|
|
754
743
|
]);
|
|
755
744
|
const fleetAccount = requireRawAccount(fleetCandidate, `Fleet ${fleet.name} is no longer available at ${fleet.address}. Refresh the Fleet and retry planning the undock action.`, fleet.address);
|
|
756
|
-
const characterAccount =
|
|
745
|
+
const characterAccount = requireFleetCharacter(characterCandidate, fleet, options.authorization.profile, game, characterAddress, 'undock');
|
|
757
746
|
const systemAccount = requireRawAccount(systemCandidate, `Fleet ${fleet.name} is docked at Star System ${docked.system.address}, but that System account is missing. Verify the configured Game and cluster, refresh the Fleet, and retry.`, docked.system.address);
|
|
758
747
|
const playerAccount = requireRawAccount(playerCandidate, `Fleet ${fleet.name} cannot undock because its Starbase Player registration is missing at ${starbasePlayerAddress}. Register the Character at this Starbase, refresh the Fleet, and retry.`, starbasePlayerAddress);
|
|
759
748
|
validateFleetRead(fleetAccount, fleet, game, docked.system.address, docked.systemSeqId);
|
|
760
|
-
|
|
761
|
-
const system = await validateSystemRead(systemAccount, fleet, game, docked.systemSeqId);
|
|
749
|
+
const system = await validateFleetSystemRead(systemAccount, fleet, game, 'undock', 'Star System', docked.systemSeqId);
|
|
762
750
|
validateStarbasePlayerRead(playerAccount, fleet, options.authorization.profile, characterAddress, docked.system.address, starbasePlayerAddress);
|
|
763
751
|
const instruction = adaptDockedToIdleInstruction({
|
|
764
752
|
authorization: options.authorization,
|
|
@@ -814,34 +802,13 @@ export async function planFleetDock(ctx, fleet, options) {
|
|
|
814
802
|
const [characterCandidate] = await readContextRawAccounts(ctx, [
|
|
815
803
|
characterAddress,
|
|
816
804
|
]);
|
|
817
|
-
const characterAccount =
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
filters: buildStarSystemDiscoveryFilters(game),
|
|
821
|
-
strategy: 'targeted-program-accounts',
|
|
822
|
-
});
|
|
823
|
-
const matchingSystems = discoveredSystems.filter((system) => system.data.coordinates.x === actionLocation.x &&
|
|
824
|
-
system.data.coordinates.y === actionLocation.y);
|
|
825
|
-
if (matchingSystems.length === 0)
|
|
805
|
+
const characterAccount = requireFleetCharacter(characterCandidate, fleet, options.authorization.profile, game, characterAddress, 'dock');
|
|
806
|
+
const candidates = await discoverSystemsAt(ctx, game, actionLocation);
|
|
807
|
+
if (candidates.length === 0)
|
|
826
808
|
failNoDockableStarbase(fleet, actionLocation);
|
|
827
|
-
const
|
|
828
|
-
const
|
|
829
|
-
|
|
830
|
-
return account !== undefined &&
|
|
831
|
-
hasExactSystemLocation(account, validatedFleet.location)
|
|
832
|
-
? [{ account, address: candidate.address }]
|
|
833
|
-
: [];
|
|
834
|
-
});
|
|
835
|
-
if (exactSystems.length !== 1) {
|
|
836
|
-
if (matchingSystems.length === 1) {
|
|
837
|
-
const systemAddress = matchingSystems[0].address;
|
|
838
|
-
const systemAccount = systemCandidates[0] ?? failNoDockableStarbase(fleet, actionLocation);
|
|
839
|
-
await validateDockSystemRead(systemAccount, fleet, game, systemAddress, validatedFleet.location);
|
|
840
|
-
}
|
|
841
|
-
fail(`Fleet ${fleet.name} action coordinate (${String(actionLocation.x)}, ${String(actionLocation.y)}) matches multiple Star Systems in the configured Game, so there is no canonical Starbase to dock at. Refresh the galaxy and repair the contradictory System data before retrying.`, fleet.address);
|
|
842
|
-
}
|
|
843
|
-
const { account: systemAccount, address: systemAddress } = exactSystems[0];
|
|
844
|
-
const system = await validateDockSystemRead(systemAccount, fleet, game, systemAddress, validatedFleet.location);
|
|
809
|
+
const systemAccount = selectSystemAt(fleet, actionLocation, validatedFleet.location, candidates, await readContextRawAccounts(ctx, candidates));
|
|
810
|
+
const systemAddress = systemAccount.address;
|
|
811
|
+
const system = await validateFleetSystemRead(systemAccount, fleet, game, 'dock');
|
|
845
812
|
if (system.starbase === undefined)
|
|
846
813
|
failNoDockableStarbase(fleet, actionLocation);
|
|
847
814
|
const starbasePlayerAddress = await deriveStarbasePlayerAddress(systemAddress, characterAddress);
|
|
@@ -850,24 +817,71 @@ export async function planFleetDock(ctx, fleet, options) {
|
|
|
850
817
|
]);
|
|
851
818
|
const playerAccount = requireRawAccount(playerCandidate, `Fleet ${fleet.name} cannot dock because Character ${characterAddress} is not registered at Starbase ${system.name} in Star System ${systemAddress}. Register the Character at this Starbase before docking, refresh the Fleet, and retry.`, starbasePlayerAddress);
|
|
852
819
|
validateStarbasePlayerRead(playerAccount, fleet, options.authorization.profile, characterAddress, systemAddress, starbasePlayerAddress, 'dock');
|
|
820
|
+
const [tracker, ownership] = await Promise.all([
|
|
821
|
+
deriveFactionRelationTrackerAddress(game),
|
|
822
|
+
deriveFactionOwnershipAddress(game, 'starbase', systemAddress),
|
|
823
|
+
]);
|
|
824
|
+
const policy = {
|
|
825
|
+
kind: 'fleet-docking-policy',
|
|
826
|
+
address: tracker,
|
|
827
|
+
game,
|
|
828
|
+
system: systemAddress,
|
|
829
|
+
ownership,
|
|
830
|
+
describes: 'Docking retains qualified default faction gating and legacy System control.',
|
|
831
|
+
};
|
|
832
|
+
const [trackerAccount, ownershipAccount] = await readContextRawAccounts(ctx, [
|
|
833
|
+
tracker,
|
|
834
|
+
ownership,
|
|
835
|
+
]);
|
|
836
|
+
await validateFleetDockingPolicy(trackerAccount, ownershipAccount, policy);
|
|
853
837
|
const instruction = adaptIdleToDockedInstruction({
|
|
838
|
+
factionRelationTracker: tracker,
|
|
839
|
+
factionOwnership: ownership,
|
|
854
840
|
authorization: options.authorization,
|
|
855
841
|
fleet: fleet.address,
|
|
856
842
|
game,
|
|
857
843
|
systemAndStarbasePlayerStarbasePlayer: starbasePlayerAddress,
|
|
858
844
|
systemAndStarbasePlayerSystem: systemAddress,
|
|
859
845
|
});
|
|
846
|
+
const fundingIntent = {
|
|
847
|
+
address: fleet.address,
|
|
848
|
+
game,
|
|
849
|
+
profile: options.authorization.profile,
|
|
850
|
+
authority: options.authorization.authority,
|
|
851
|
+
certificate: instruction.accounts[2].address,
|
|
852
|
+
keyIndex: options.authorization.keyIndex,
|
|
853
|
+
character: characterAddress,
|
|
854
|
+
system: systemAddress,
|
|
855
|
+
starbasePlayer: starbasePlayerAddress,
|
|
856
|
+
};
|
|
857
|
+
const amounts = await resolveDockFunding(ctx, fundingIntent, [
|
|
858
|
+
fleetAccount,
|
|
859
|
+
playerAccount,
|
|
860
|
+
systemAccount,
|
|
861
|
+
]);
|
|
862
|
+
const funding = {
|
|
863
|
+
kind: 'fleet-dock-funding',
|
|
864
|
+
...fundingIntent,
|
|
865
|
+
...amounts,
|
|
866
|
+
describes: amounts.status === 'available'
|
|
867
|
+
? `Maximum gross Profile storage debit: ${String(amounts.maximumProfileDebit)} lamports. No refunds or surplus are credited; transaction fees are separate. Rechecked before signing, not enforced atomically on chain.`
|
|
868
|
+
: `Docking storage debit bounds are unavailable (${amounts.reason}); this does not imply zero Profile debit. Inspect simulation and fund the Profile explicitly if needed; transaction fees are separate.`,
|
|
869
|
+
};
|
|
860
870
|
const description = `Dock fleet ${fleet.name} at the Starbase in Star System ${system.name}.`;
|
|
861
871
|
return createPlan({
|
|
862
872
|
kind: 'fleet.dock',
|
|
863
|
-
preconditions:
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
873
|
+
preconditions: [
|
|
874
|
+
policy,
|
|
875
|
+
...(await Promise.all([
|
|
876
|
+
precondition(fleetAccount, fleet.state.kind === 'idle'
|
|
877
|
+
? `Fleet ${fleet.name} remains idle at Starbase System ${system.name} coordinate (${String(actionLocation.x)}, ${String(actionLocation.y)}).`
|
|
878
|
+
: `Fleet ${fleet.name} remains ${fleet.state.kind} at Starbase System ${system.name} action coordinate (${String(actionLocation.x)}, ${String(actionLocation.y)}).`),
|
|
879
|
+
precondition(characterAccount, `The canonical Character remains assigned to Profile ${options.authorization.profile} in the configured Game.`),
|
|
880
|
+
precondition(systemAccount, `Star System ${system.name} remains the Starbase System at Fleet ${fleet.name} coordinate (${String(actionLocation.x)}, ${String(actionLocation.y)}).`),
|
|
881
|
+
precondition(playerAccount, `The Starbase Player remains registered for Fleet ${fleet.name} at Starbase ${system.name}.`),
|
|
882
|
+
])),
|
|
883
|
+
funding,
|
|
884
|
+
],
|
|
871
885
|
steps: [
|
|
872
886
|
{
|
|
873
887
|
describes: description,
|
|
@@ -879,4 +893,9 @@ export async function planFleetDock(ctx, fleet, options) {
|
|
|
879
893
|
});
|
|
880
894
|
}
|
|
881
895
|
export { planDepositShipsToGame, } from './ship-import.js';
|
|
896
|
+
export { planCreateFleet, } from './create-fleet.js';
|
|
897
|
+
export { planAddShipToFleet, } from './add-ship.js';
|
|
898
|
+
export { planFleetStartRespawn, planFleetCompleteRespawn, } from './respawn.js';
|
|
899
|
+
export { planLoadFleetCrew, planUnloadFleetCrew, } from './crew-transfer.js';
|
|
900
|
+
export { getFleetDockDebitBounds, } from './dock-bounds.js';
|
|
882
901
|
//# sourceMappingURL=index.js.map
|