@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,17 +1,21 @@
|
|
|
1
|
+
import { fleetAttackInstructionKey, validateFleetAttackActors, } from '../../internal/planning/fleet-attack-xp.js';
|
|
2
|
+
import { resolveXpRuntime } from '../../internal/planning/xp-runtime.js';
|
|
1
3
|
import { getAddressEncoder, isAddress } from '@solana/kit';
|
|
4
|
+
import { resolveActionRuntime } from '../../internal/planning/action-runtime.js';
|
|
2
5
|
import { InvalidActionInputError, SageSdkError } from '../../client/errors.js';
|
|
3
6
|
import { readContextRawAccounts } from '../../client/reconciliation.js';
|
|
4
|
-
import {
|
|
5
|
-
import { lootAccountDefinition, } from '../../internal/c4/
|
|
7
|
+
import { getRetrieveLootInstructionDataEncoder } from '../../internal/c4/runtime-bindings.js';
|
|
8
|
+
import { lootAccountDefinition, } from '../../internal/c4/loot.js';
|
|
6
9
|
import { deriveFleetAddress, fleetAccountDefinition, } from '../../internal/c4/fleet.js';
|
|
7
|
-
import { deriveFleetCrewBindingAddress, fleetCrewBindingAccountDefinition, } from '../../internal/c4/fleet-crew-binding.js';
|
|
10
|
+
import { deriveFleetCrewBindingAddress, fleetCrewBindingAccountDefinition, matchesFleetCrewBindingIdentity, } from '../../internal/c4/fleet-crew-binding.js';
|
|
8
11
|
import { deriveFactionAccountAddress, deriveFactionEconomicsConfigAddress, deriveFactionOwnershipAddress, deriveFactionRelationTrackerAddress, deriveFactionTreasuryAddress, deriveKingSystemTrackerAddress, deriveRegionTrackerAddress, factionAccountDefinition, factionEconomicsConfigAccountDefinition, factionOwnershipAccountDefinition, factionRelationTrackerAccountDefinition, factionTreasuryAccountDefinition, kingSystemTrackerAccountDefinition, regionTrackerAccountDefinition, } from '../../internal/c4/factions.js';
|
|
9
|
-
import {
|
|
12
|
+
import { factionValue } from '../../internal/c4/faction.js';
|
|
13
|
+
import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/character.js';
|
|
10
14
|
import { deriveLoyaltyContributionAddress, deriveLoyaltyEpochAddress, loyaltyContributionAccountDefinition, loyaltyEpochAccountDefinition, } from '../../internal/c4/loyalty.js';
|
|
11
15
|
import { atlasRewardConfigAccountDefinition, atlasRewardRegistryAccountDefinition, deriveAtlasRewardConfigAddress, deriveAtlasRewardRegistryAddress, } from '../../internal/c4/rewards.js';
|
|
12
16
|
import { deriveStarSystemAddress, starSystemAccountDefinition, } from '../../internal/c4/world.js';
|
|
13
17
|
import { requireGameAddress } from '../../internal/game-context.js';
|
|
14
|
-
import { adaptApplyCombatStimulantInstruction, adaptAttackFleetInstruction, adaptAttackStarbaseInstruction, adaptRetrieveLootInstruction,
|
|
18
|
+
import { adaptApplyCombatStimulantInstruction, adaptAttackFleetInstruction, adaptAttackStarbaseInstruction, adaptRetrieveLootInstruction, readPlanAuthorization, } from '../../internal/planning/authorization-adapter.js';
|
|
15
19
|
import { createPlan, } from '../../planning/index.js';
|
|
16
20
|
import { readGameCombatConfiguration } from '../../registry/combat.js';
|
|
17
21
|
import { resolveCargo, } from '../../registry/index.js';
|
|
@@ -35,19 +39,13 @@ function assertKeys(value, field, required, optional = []) {
|
|
|
35
39
|
function validateOptions(value) {
|
|
36
40
|
const options = readRecord(value, 'options');
|
|
37
41
|
assertKeys(options, 'options', ['authorization']);
|
|
38
|
-
const
|
|
39
|
-
assertKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
|
|
40
|
-
const authorization = authorizationRecord;
|
|
41
|
-
validatePlanAuthorization(authorization);
|
|
42
|
+
const authorization = readPlanAuthorization(options.authorization);
|
|
42
43
|
return { authorization };
|
|
43
44
|
}
|
|
44
45
|
function validateAttackOptions(value) {
|
|
45
46
|
const options = readRecord(value, 'options');
|
|
46
47
|
assertKeys(options, 'options', ['authorization', 'loot']);
|
|
47
|
-
const
|
|
48
|
-
assertKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
|
|
49
|
-
const authorization = authorizationRecord;
|
|
50
|
-
validatePlanAuthorization(authorization);
|
|
48
|
+
const authorization = readPlanAuthorization(options.authorization);
|
|
51
49
|
if (typeof options.loot !== 'string' || !isAddress(options.loot)) {
|
|
52
50
|
invalid('options.loot', options.loot, 'one valid new Loot account address', 'Generate a new address-only Loot signer and provide its public address before retrying.');
|
|
53
51
|
}
|
|
@@ -66,10 +64,7 @@ function validateAttackStance(value) {
|
|
|
66
64
|
function validateRetrieveOptions(value) {
|
|
67
65
|
const options = readRecord(value, 'options');
|
|
68
66
|
assertKeys(options, 'options', ['authorization', 'atUnixSeconds']);
|
|
69
|
-
const
|
|
70
|
-
assertKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
|
|
71
|
-
const authorization = authorizationRecord;
|
|
72
|
-
validatePlanAuthorization(authorization);
|
|
67
|
+
const authorization = readPlanAuthorization(options.authorization);
|
|
73
68
|
if (typeof options.atUnixSeconds !== 'bigint' || options.atUnixSeconds < 0n) {
|
|
74
69
|
invalid('options.atUnixSeconds', options.atUnixSeconds, 'a non-negative bigint Unix timestamp', 'Provide the explicit current Unix timestamp used to evaluate Loot exclusivity before retrying.');
|
|
75
70
|
}
|
|
@@ -162,9 +157,7 @@ function validateLootSelection(value, loot, fleet, retrievingProfile, atUnixSeco
|
|
|
162
157
|
}
|
|
163
158
|
generated.push([itemIndex, encoded]);
|
|
164
159
|
}
|
|
165
|
-
const instructionDataLength =
|
|
166
|
-
.getRetrieveLootInstructionDataEncoder()
|
|
167
|
-
.encode({
|
|
160
|
+
const instructionDataLength = getRetrieveLootInstructionDataEncoder().encode({
|
|
168
161
|
keyIndex: 0,
|
|
169
162
|
want: generated.map(([itemIndex, cargo]) => [
|
|
170
163
|
itemIndex,
|
|
@@ -331,20 +324,6 @@ export async function planFleetApplyCombatStimulant(ctx, fleet, stimulant, input
|
|
|
331
324
|
summary: description,
|
|
332
325
|
});
|
|
333
326
|
}
|
|
334
|
-
function factionId(fleet) {
|
|
335
|
-
if (fleet.npcFactionId > 0)
|
|
336
|
-
return fleet.npcFactionId;
|
|
337
|
-
switch (fleet.faction) {
|
|
338
|
-
case 'mud':
|
|
339
|
-
return 1;
|
|
340
|
-
case 'oni':
|
|
341
|
-
return 2;
|
|
342
|
-
case 'ustur':
|
|
343
|
-
return 3;
|
|
344
|
-
case 'unaligned':
|
|
345
|
-
return 0;
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
327
|
function shipFingerprint(fleet) {
|
|
349
328
|
return fleet.ships
|
|
350
329
|
.map(({ id, quantity }) => `${String(id)}:${String(quantity)}`)
|
|
@@ -404,14 +383,13 @@ async function optionalCrewBinding(ctx, fleet) {
|
|
|
404
383
|
const address = await deriveFleetCrewBindingAddress(fleet.address);
|
|
405
384
|
const [envelope] = await ctx.data.readMany(fleetCrewBindingAccountDefinition, [address]);
|
|
406
385
|
if (envelope !== undefined &&
|
|
407
|
-
(envelope.data.
|
|
408
|
-
envelope.data.ownerProfile !== fleet.ownerProfile.address)) {
|
|
386
|
+
!matchesFleetCrewBindingIdentity(envelope.data, fleet.address, fleet.ownerProfile.address)) {
|
|
409
387
|
fail(`FleetCrewBinding ${address} does not belong to Fleet ${fleet.address} and Profile ${fleet.ownerProfile.address}. Refresh the Fleet crew relationship and retry.`, address);
|
|
410
388
|
}
|
|
411
389
|
return envelope?.address;
|
|
412
390
|
}
|
|
413
391
|
async function resolveRewardAccounts(ctx, fleet, registry, config, epochIndex) {
|
|
414
|
-
const resolvedFaction =
|
|
392
|
+
const resolvedFaction = fleet.npcFactionId > 0 ? fleet.npcFactionId : factionValue(fleet.faction);
|
|
415
393
|
if (resolvedFaction === 0)
|
|
416
394
|
return { config, registry };
|
|
417
395
|
const [epochAddress, contributionAddress] = await Promise.all([
|
|
@@ -446,33 +424,82 @@ async function resolveRewardAccounts(ctx, fleet, registry, config, epochIndex) {
|
|
|
446
424
|
registry,
|
|
447
425
|
};
|
|
448
426
|
}
|
|
449
|
-
|
|
427
|
+
/** Reads and requires an NPC Fleet's canonical FactionOwnership and, when
|
|
428
|
+
* `withFaction`, its Faction account; a player Fleet has neither. */
|
|
429
|
+
async function resolveNpcAccounts(ctx, fleet, withFaction) {
|
|
450
430
|
if (fleet.npcFactionId === 0)
|
|
451
431
|
return {};
|
|
452
|
-
const
|
|
453
|
-
|
|
432
|
+
const addresses = await Promise.all([
|
|
433
|
+
deriveFactionOwnershipAddress(fleet.game, 'fleet', fleet.address),
|
|
434
|
+
...(withFaction
|
|
435
|
+
? [deriveFactionAccountAddress(fleet.game, fleet.npcFactionId)]
|
|
436
|
+
: []),
|
|
437
|
+
]);
|
|
438
|
+
const [ownership, faction] = await readContextRawAccounts(ctx, addresses);
|
|
439
|
+
const ownershipData = ownership && factionOwnershipAccountDefinition.decode(ownership);
|
|
454
440
|
if (ownership === undefined ||
|
|
455
|
-
|
|
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 {
|
|
441
|
+
ownershipData?.game !== fleet.game ||
|
|
442
|
+
ownershipData.asset.kind !== 'fleet' ||
|
|
443
|
+
ownershipData.asset.fleet !== fleet.address ||
|
|
444
|
+
ownershipData.controllingFactionId !== fleet.npcFactionId) {
|
|
445
|
+
fail(`NPC Fleet ${fleet.address} has no matching canonical FactionOwnership for faction ${String(fleet.npcFactionId)}. Refresh the Fleet and faction ownership relationship before retrying.`, addresses[0]);
|
|
446
|
+
}
|
|
447
|
+
if (!withFaction)
|
|
448
|
+
return { ownership };
|
|
449
|
+
const factionData = faction && factionAccountDefinition.decode(faction);
|
|
450
|
+
if (faction === undefined ||
|
|
451
|
+
factionData?.game !== fleet.game ||
|
|
452
|
+
factionData.factionId !== fleet.npcFactionId) {
|
|
453
|
+
fail(`Faction ${addresses[1]} is missing or does not match NPC Fleet ${fleet.address}'s Game and faction id. Refresh the faction registry relationship before retrying.`, addresses[1]);
|
|
454
|
+
}
|
|
455
|
+
return { faction, ownership };
|
|
470
456
|
}
|
|
471
457
|
function generatedStance(stance) {
|
|
472
458
|
return {
|
|
473
459
|
ammoUsage: stance.ammoUsage === 'none' ? 0 : stance.ammoUsage === 'light' ? 1 : 2,
|
|
474
460
|
};
|
|
475
461
|
}
|
|
462
|
+
/** Requires a live Fleet snapshot of the configured Game with known AP, crew
|
|
463
|
+
* and ship composition; an attacking Fleet also needs AP available. */
|
|
464
|
+
function validateAttackFleet(fleet, role, game) {
|
|
465
|
+
const label = `The ${role} Fleet ${fleet.name} (${fleet.address})`;
|
|
466
|
+
if (fleet.game !== game) {
|
|
467
|
+
fail(`${label} belongs to Game ${fleet.game}, not configured Game ${game}. Refresh the Fleet through this context and retry.`, fleet.address);
|
|
468
|
+
}
|
|
469
|
+
if (fleet.state.kind === 'destroyed') {
|
|
470
|
+
fail(`${label} is destroyed and cannot participate in this attack. Refresh the Fleet after respawn and retry.`, fleet.address);
|
|
471
|
+
}
|
|
472
|
+
if (!Number.isSafeInteger(fleet.ap) ||
|
|
473
|
+
fleet.ap < 0 ||
|
|
474
|
+
!Number.isSafeInteger(fleet.crewCount) ||
|
|
475
|
+
fleet.crewCount <= 0) {
|
|
476
|
+
fail(`${label} has unknown or invalid AP or crew state. Refresh the Fleet through this context and retry.`, fleet.address);
|
|
477
|
+
}
|
|
478
|
+
if (fleet.ships.length === 0 ||
|
|
479
|
+
fleet.ships.some(({ quantity }) => quantity <= 0n)) {
|
|
480
|
+
fail(`${label} has no valid known ship composition. Refresh Fleet composition and retry.`, fleet.address);
|
|
481
|
+
}
|
|
482
|
+
if (role === 'attacking' && fleet.ap === 0) {
|
|
483
|
+
fail(`${label} has no known AP available. Wait for AP reload, refresh the Fleet, and retry.`, fleet.address);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
/** Validates the inputs every attack shares: the stance, an attacking Fleet
|
|
487
|
+
* owned by the authorization Profile that can attack, and a new Loot address
|
|
488
|
+
* distinct from the authorization signers. */
|
|
489
|
+
function validateAttack(ctx, attacker, inputStance, inputOptions) {
|
|
490
|
+
const options = validateAttackOptions(inputOptions);
|
|
491
|
+
const stance = validateAttackStance(inputStance);
|
|
492
|
+
const game = requireGameAddress(ctx);
|
|
493
|
+
if (attacker.ownerProfile.address !== options.authorization.profile) {
|
|
494
|
+
fail(`Attacking Fleet ${attacker.address} does not belong to authorization Profile ${options.authorization.profile}. Choose an owned Fleet and retry.`, attacker.address);
|
|
495
|
+
}
|
|
496
|
+
if (options.loot === options.authorization.authority ||
|
|
497
|
+
options.loot === options.authorization.profile) {
|
|
498
|
+
fail(`The new Loot address ${options.loot} must be distinct from the authorization authority and Profile. Generate a separate Loot signer address and retry.`, options.loot);
|
|
499
|
+
}
|
|
500
|
+
validateAttackFleet(attacker, 'attacking', game);
|
|
501
|
+
return { game, options, stance };
|
|
502
|
+
}
|
|
476
503
|
/** Plans one singleton Fleet-on-Fleet attack without predicting its outcome.
|
|
477
504
|
*
|
|
478
505
|
* Range, randomness, recent slot hashes, final combat arithmetic, and chain
|
|
@@ -497,43 +524,11 @@ function generatedStance(stance) {
|
|
|
497
524
|
* ```
|
|
498
525
|
*/
|
|
499
526
|
export async function planFleetAttackFleet(ctx, attacker, defender, inputStance, inputOptions) {
|
|
500
|
-
const options =
|
|
501
|
-
const stance = validateAttackStance(inputStance);
|
|
502
|
-
const game = requireGameAddress(ctx);
|
|
527
|
+
const { game, options, stance } = validateAttack(ctx, attacker, inputStance, inputOptions);
|
|
503
528
|
if (attacker.address === defender.address) {
|
|
504
529
|
fail(`Fleet ${attacker.address} cannot attack itself. Choose a distinct defending Fleet and retry.`, attacker.address);
|
|
505
530
|
}
|
|
506
|
-
|
|
507
|
-
fail(`Attacking Fleet ${attacker.address} does not belong to authorization Profile ${options.authorization.profile}. Choose an owned Fleet and retry.`, attacker.address);
|
|
508
|
-
}
|
|
509
|
-
if (options.loot === options.authorization.authority ||
|
|
510
|
-
options.loot === options.authorization.profile) {
|
|
511
|
-
fail(`The new Loot address ${options.loot} must be distinct from the authorization authority and Profile. Generate a separate Loot signer address and retry.`, options.loot);
|
|
512
|
-
}
|
|
513
|
-
for (const [role, fleet] of [
|
|
514
|
-
['attacking', attacker],
|
|
515
|
-
['defending', defender],
|
|
516
|
-
]) {
|
|
517
|
-
if (fleet.game !== game) {
|
|
518
|
-
fail(`The ${role} Fleet ${fleet.address} belongs to Game ${fleet.game}, not configured Game ${game}. Refresh both Fleets through this context and retry.`, fleet.address);
|
|
519
|
-
}
|
|
520
|
-
if (fleet.state.kind === 'destroyed') {
|
|
521
|
-
fail(`The ${role} Fleet ${fleet.name} (${fleet.address}) is destroyed and cannot participate in this attack. Refresh the Fleet after respawn and retry.`, fleet.address);
|
|
522
|
-
}
|
|
523
|
-
if (!Number.isSafeInteger(fleet.ap) ||
|
|
524
|
-
fleet.ap < 0 ||
|
|
525
|
-
!Number.isSafeInteger(fleet.crewCount) ||
|
|
526
|
-
fleet.crewCount <= 0) {
|
|
527
|
-
fail(`The ${role} Fleet ${fleet.name} (${fleet.address}) has unknown or invalid AP or crew state. Refresh the Fleet through this context and retry.`, fleet.address);
|
|
528
|
-
}
|
|
529
|
-
if (fleet.ships.length === 0 ||
|
|
530
|
-
fleet.ships.some(({ quantity }) => quantity <= 0n)) {
|
|
531
|
-
fail(`The ${role} Fleet ${fleet.name} (${fleet.address}) has no valid known ship composition. Refresh Fleet composition and retry.`, fleet.address);
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
if (attacker.ap === 0) {
|
|
535
|
-
fail(`Attacking Fleet ${attacker.name} (${attacker.address}) has no known AP available. Wait for AP reload, refresh the Fleet, and retry.`, attacker.address);
|
|
536
|
-
}
|
|
531
|
+
validateAttackFleet(defender, 'defending', game);
|
|
537
532
|
const currentAccounts = await readContextRawAccounts(ctx, [
|
|
538
533
|
attacker.address,
|
|
539
534
|
defender.address,
|
|
@@ -565,58 +560,93 @@ export async function planFleetAttackFleet(ctx, attacker, defender, inputStance,
|
|
|
565
560
|
deriveRegionTrackerAddress(game),
|
|
566
561
|
deriveFactionRelationTrackerAddress(game),
|
|
567
562
|
]);
|
|
563
|
+
const actorIntent = {
|
|
564
|
+
address: attacker.address,
|
|
565
|
+
defender: defender.address,
|
|
566
|
+
game,
|
|
567
|
+
profile: attacker.ownerProfile.address,
|
|
568
|
+
defenderProfile: defender.ownerProfile.address,
|
|
569
|
+
};
|
|
570
|
+
await validateFleetAttackActors(ctx, actorIntent);
|
|
571
|
+
const versions = new Map();
|
|
572
|
+
const attackerXp = await resolveXpRuntime(ctx, { game, character, profile: attacker.ownerProfile.address }, versions);
|
|
573
|
+
const defenderXp = character === defenderCharacter
|
|
574
|
+
? attackerXp
|
|
575
|
+
: await resolveXpRuntime(ctx, {
|
|
576
|
+
game,
|
|
577
|
+
character: defenderCharacter,
|
|
578
|
+
profile: defender.ownerProfile.address,
|
|
579
|
+
}, versions);
|
|
580
|
+
const xpGuards = [...new Set([attackerXp, defenderXp])].map((xp) => ({
|
|
581
|
+
kind: 'xp-runtime',
|
|
582
|
+
address: game,
|
|
583
|
+
intent: xp.intent,
|
|
584
|
+
accounts: xp.accounts,
|
|
585
|
+
describes: 'Both operator XP budgets remain canonical and reconciled; earned XP and bank balances may change.',
|
|
586
|
+
}));
|
|
587
|
+
const instruction = adaptAttackFleetInstruction({
|
|
588
|
+
...(attackerNpc.faction === undefined
|
|
589
|
+
? {}
|
|
590
|
+
: { attackerFactionAccount: attackerNpc.faction.address }),
|
|
591
|
+
...(attackerNpc.ownership === undefined
|
|
592
|
+
? {}
|
|
593
|
+
: { attackerFleetOwnership: attackerNpc.ownership.address }),
|
|
594
|
+
attackerRewardsConfig: attackerRewards.config,
|
|
595
|
+
...(attackerRewards.contribution === undefined
|
|
596
|
+
? {}
|
|
597
|
+
: { attackerRewardsContribution: attackerRewards.contribution }),
|
|
598
|
+
...(attackerRewards.epoch === undefined
|
|
599
|
+
? {}
|
|
600
|
+
: { attackerRewardsEpoch: attackerRewards.epoch }),
|
|
601
|
+
attackerRewardsRegistry: attackerRewards.registry,
|
|
602
|
+
...(defender.state.kind === 'mining'
|
|
603
|
+
? { asteroid: defender.state.asteroid.address }
|
|
604
|
+
: {}),
|
|
605
|
+
authorization: options.authorization,
|
|
606
|
+
attackerXpBudget: attackerXp.accounts.xpBudget,
|
|
607
|
+
defenderXpBudget: defenderXp.accounts.xpBudget,
|
|
608
|
+
xpBudgetConfig: attackerXp.accounts.xpBudgetConfig,
|
|
609
|
+
character,
|
|
610
|
+
...(crewBinding === undefined ? {} : { crewBinding }),
|
|
611
|
+
defenderCharacter,
|
|
612
|
+
...(defenderNpc.ownership === undefined
|
|
613
|
+
? {}
|
|
614
|
+
: { defenderFleetOwnership: defenderNpc.ownership.address }),
|
|
615
|
+
defenderRewardsConfig: defenderRewards.config,
|
|
616
|
+
...(defenderRewards.contribution === undefined
|
|
617
|
+
? {}
|
|
618
|
+
: { defenderRewardsContribution: defenderRewards.contribution }),
|
|
619
|
+
...(defenderRewards.epoch === undefined
|
|
620
|
+
? {}
|
|
621
|
+
: { defenderRewardsEpoch: defenderRewards.epoch }),
|
|
622
|
+
defenderRewardsRegistry: defenderRewards.registry,
|
|
623
|
+
defendingFleet: defender.address,
|
|
624
|
+
factionRelationTracker,
|
|
625
|
+
fleet: attacker.address,
|
|
626
|
+
game,
|
|
627
|
+
loot: options.loot,
|
|
628
|
+
recentSlothashes: 'SysvarS1otHashes111111111111111111111111111',
|
|
629
|
+
regionTracker,
|
|
630
|
+
stance: generatedStance(stance),
|
|
631
|
+
});
|
|
568
632
|
const description = `Attack Fleet ${defender.name} (${defender.address}) with Fleet ${attacker.name} (${attacker.address}) using ${stance.ammoUsage} ammunition; range, randomness, rewards, Loot, damage, and final combat arithmetic remain chain-authoritative.`;
|
|
569
633
|
return createPlan({
|
|
570
634
|
kind: 'combat.attack-fleet',
|
|
571
635
|
preconditions: [
|
|
636
|
+
{
|
|
637
|
+
kind: 'fleet-attack',
|
|
638
|
+
...actorIntent,
|
|
639
|
+
instructionKey: fleetAttackInstructionKey(instruction),
|
|
640
|
+
describes: 'The exact attack instruction and both canonical operators remain bound.',
|
|
641
|
+
},
|
|
642
|
+
...xpGuards,
|
|
572
643
|
await precondition(attackerAccount, `Attacking Fleet ${attacker.name} retains its owner, Game, live state, crew, AP, faction, and ship composition.`),
|
|
573
644
|
await precondition(defenderAccount, `Defending Fleet ${defender.name} retains its owner, Game, live state, crew, faction, and ship composition.`),
|
|
574
645
|
],
|
|
575
646
|
steps: [
|
|
576
647
|
{
|
|
577
648
|
describes: description,
|
|
578
|
-
instruction
|
|
579
|
-
...(attackerNpc.factionAccount === undefined
|
|
580
|
-
? {}
|
|
581
|
-
: { attackerFactionAccount: attackerNpc.factionAccount }),
|
|
582
|
-
...(attackerNpc.ownership === undefined
|
|
583
|
-
? {}
|
|
584
|
-
: { attackerFleetOwnership: attackerNpc.ownership }),
|
|
585
|
-
attackerRewardsConfig: attackerRewards.config,
|
|
586
|
-
...(attackerRewards.contribution === undefined
|
|
587
|
-
? {}
|
|
588
|
-
: { attackerRewardsContribution: attackerRewards.contribution }),
|
|
589
|
-
...(attackerRewards.epoch === undefined
|
|
590
|
-
? {}
|
|
591
|
-
: { attackerRewardsEpoch: attackerRewards.epoch }),
|
|
592
|
-
attackerRewardsRegistry: attackerRewards.registry,
|
|
593
|
-
...(defender.state.kind === 'mining'
|
|
594
|
-
? { asteroid: defender.state.asteroid.address }
|
|
595
|
-
: {}),
|
|
596
|
-
authorization: options.authorization,
|
|
597
|
-
character,
|
|
598
|
-
...(crewBinding === undefined ? {} : { crewBinding }),
|
|
599
|
-
defenderCharacter,
|
|
600
|
-
...(defenderNpc.ownership === undefined
|
|
601
|
-
? {}
|
|
602
|
-
: { defenderFleetOwnership: defenderNpc.ownership }),
|
|
603
|
-
defenderRewardsConfig: defenderRewards.config,
|
|
604
|
-
...(defenderRewards.contribution === undefined
|
|
605
|
-
? {}
|
|
606
|
-
: { defenderRewardsContribution: defenderRewards.contribution }),
|
|
607
|
-
...(defenderRewards.epoch === undefined
|
|
608
|
-
? {}
|
|
609
|
-
: { defenderRewardsEpoch: defenderRewards.epoch }),
|
|
610
|
-
defenderRewardsRegistry: defenderRewards.registry,
|
|
611
|
-
defendingFleet: defender.address,
|
|
612
|
-
factionRelationTracker,
|
|
613
|
-
fleet: attacker.address,
|
|
614
|
-
game,
|
|
615
|
-
loot: options.loot,
|
|
616
|
-
recentSlothashes: 'SysvarS1otHashes111111111111111111111111111',
|
|
617
|
-
regionTracker,
|
|
618
|
-
stance: generatedStance(stance),
|
|
619
|
-
}),
|
|
649
|
+
instruction,
|
|
620
650
|
semantics: [{ kind: 'exclusive', scope: 'transaction' }],
|
|
621
651
|
signers: [options.authorization.authority, options.loot],
|
|
622
652
|
},
|
|
@@ -639,18 +669,6 @@ function systemFingerprint(system) {
|
|
|
639
669
|
version: system.version,
|
|
640
670
|
}, (_key, value) => typeof value === 'bigint' ? value.toString() : value);
|
|
641
671
|
}
|
|
642
|
-
function starbaseFactionId(owner) {
|
|
643
|
-
switch (owner) {
|
|
644
|
-
case 'mud':
|
|
645
|
-
return 1;
|
|
646
|
-
case 'oni':
|
|
647
|
-
return 2;
|
|
648
|
-
case 'ustur':
|
|
649
|
-
return 3;
|
|
650
|
-
case 'unaligned':
|
|
651
|
-
return null;
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
672
|
/** Plans one singleton Fleet-on-Starbase attack without predicting its outcome.
|
|
655
673
|
*
|
|
656
674
|
* The planner validates the owned attacking Fleet, canonical target System and
|
|
@@ -676,32 +694,7 @@ function starbaseFactionId(owner) {
|
|
|
676
694
|
* ```
|
|
677
695
|
*/
|
|
678
696
|
export async function planFleetAttackStarbase(ctx, attacker, target, inputStance, inputOptions) {
|
|
679
|
-
const options =
|
|
680
|
-
const stance = validateAttackStance(inputStance);
|
|
681
|
-
const game = requireGameAddress(ctx);
|
|
682
|
-
if (attacker.ownerProfile.address !== options.authorization.profile) {
|
|
683
|
-
fail(`Attacking Fleet ${attacker.address} does not belong to authorization Profile ${options.authorization.profile}. Choose an owned Fleet and retry.`, attacker.address);
|
|
684
|
-
}
|
|
685
|
-
if (options.loot === options.authorization.authority ||
|
|
686
|
-
options.loot === options.authorization.profile) {
|
|
687
|
-
fail(`The new Loot address ${options.loot} must be distinct from the authorization authority and Profile. Generate a separate Loot signer address and retry.`, options.loot);
|
|
688
|
-
}
|
|
689
|
-
if (attacker.game !== game) {
|
|
690
|
-
fail(`Attacking Fleet ${attacker.address} belongs to Game ${attacker.game}, not configured Game ${game}. Refresh the Fleet through this context and retry.`, attacker.address);
|
|
691
|
-
}
|
|
692
|
-
if (attacker.state.kind === 'destroyed') {
|
|
693
|
-
fail(`Attacking Fleet ${attacker.name} (${attacker.address}) is destroyed and cannot attack a Starbase. Refresh the Fleet after respawn and retry.`, attacker.address);
|
|
694
|
-
}
|
|
695
|
-
if (!Number.isSafeInteger(attacker.ap) ||
|
|
696
|
-
attacker.ap <= 0 ||
|
|
697
|
-
!Number.isSafeInteger(attacker.crewCount) ||
|
|
698
|
-
attacker.crewCount <= 0) {
|
|
699
|
-
fail(`Attacking Fleet ${attacker.name} (${attacker.address}) has no known positive AP or valid crew state. Wait for AP reload, refresh the Fleet, and retry.`, attacker.address);
|
|
700
|
-
}
|
|
701
|
-
if (attacker.ships.length === 0 ||
|
|
702
|
-
attacker.ships.some(({ quantity }) => quantity <= 0n)) {
|
|
703
|
-
fail(`Attacking Fleet ${attacker.name} (${attacker.address}) has no valid known ship composition. Refresh Fleet composition and retry.`, attacker.address);
|
|
704
|
-
}
|
|
697
|
+
const { game, options, stance } = validateAttack(ctx, attacker, inputStance, inputOptions);
|
|
705
698
|
if (target.game !== game) {
|
|
706
699
|
fail(`Target Star System ${target.address} belongs to Game ${target.game}, not configured Game ${game}. Refresh the target through this context and retry.`, target.address);
|
|
707
700
|
}
|
|
@@ -720,9 +713,9 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
720
713
|
deriveRegionTrackerAddress(game),
|
|
721
714
|
deriveFleetCrewBindingAddress(attacker.address),
|
|
722
715
|
]);
|
|
723
|
-
const [probeRelationsAccount, probeRegistryAccount] = await
|
|
724
|
-
relationTrackerAddress,
|
|
725
|
-
|
|
716
|
+
const [[probeRelationsAccount, probeRegistryAccount], attackerNpc] = await Promise.all([
|
|
717
|
+
readContextRawAccounts(ctx, [relationTrackerAddress, registryAddress]),
|
|
718
|
+
resolveNpcAccounts(ctx, attacker, true),
|
|
726
719
|
]);
|
|
727
720
|
const probeRelations = factionRelationTrackerAccountDefinition.decode(requireAccount(probeRelationsAccount, relationTrackerAddress, `FactionRelationTracker ${relationTrackerAddress} is missing. Refresh faction relationships and retry.`));
|
|
728
721
|
const probeRegistry = atlasRewardRegistryAccountDefinition.decode(requireAccount(probeRegistryAccount, registryAddress, `AtlasRewardRegistry ${registryAddress} is missing. Refresh reward configuration and retry.`));
|
|
@@ -733,12 +726,6 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
733
726
|
fail(`AtlasRewardRegistry ${registryAddress} belongs to another Game. Refresh the configured reward registry and retry.`, registryAddress);
|
|
734
727
|
}
|
|
735
728
|
const rewardConfigAddress = await deriveAtlasRewardConfigAddress(game, probeRegistry.activeConfigVersion);
|
|
736
|
-
const attackerOwnership = attacker.npcFactionId === 0
|
|
737
|
-
? undefined
|
|
738
|
-
: await deriveFactionOwnershipAddress(game, 'fleet', attacker.address);
|
|
739
|
-
const attackerFaction = attacker.npcFactionId === 0
|
|
740
|
-
? undefined
|
|
741
|
-
: await deriveFactionAccountAddress(game, attacker.npcFactionId);
|
|
742
729
|
const requiresNpcEconomy = attacker.npcFactionId > 0 &&
|
|
743
730
|
probeRelations.dynamicCaptureEnabled &&
|
|
744
731
|
probeRelations.nemesisActive;
|
|
@@ -762,8 +749,6 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
762
749
|
character,
|
|
763
750
|
regionTracker,
|
|
764
751
|
crewBindingAddress,
|
|
765
|
-
...(attackerOwnership === undefined ? [] : [attackerOwnership]),
|
|
766
|
-
...(attackerFaction === undefined ? [] : [attackerFaction]),
|
|
767
752
|
...(factionEconomicsConfig === undefined ? [] : [factionEconomicsConfig]),
|
|
768
753
|
...(captorTreasury === undefined ? [] : [captorTreasury]),
|
|
769
754
|
];
|
|
@@ -799,7 +784,8 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
799
784
|
if (ownership === undefined && relations.dynamicCaptureEnabled) {
|
|
800
785
|
fail(`Target Starbase ${target.address} requires canonical FactionOwnership while dynamic capture is enabled. Refresh Starbase ownership and retry.`, ownershipAddress);
|
|
801
786
|
}
|
|
802
|
-
|
|
787
|
+
// KingSystemTracker records an unaligned owner as null.
|
|
788
|
+
const legacyOwner = factionValue(target.starbase.owner) || null;
|
|
803
789
|
if (ownership !== undefined &&
|
|
804
790
|
(ownership.game !== game ||
|
|
805
791
|
ownership.asset.kind !== 'starbase' ||
|
|
@@ -844,32 +830,10 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
844
830
|
const crewBinding = crewBindingAccount === undefined ? undefined : crewBindingAddress;
|
|
845
831
|
if (crewBindingAccount !== undefined) {
|
|
846
832
|
const data = fleetCrewBindingAccountDefinition.decode(crewBindingAccount);
|
|
847
|
-
if (data.
|
|
848
|
-
data.ownerProfile !== attacker.ownerProfile.address) {
|
|
833
|
+
if (!matchesFleetCrewBindingIdentity(data, attacker.address, attacker.ownerProfile.address)) {
|
|
849
834
|
fail(`FleetCrewBinding ${crewBindingAddress} does not belong to Fleet ${attacker.address} and Profile ${attacker.ownerProfile.address}. Refresh the Fleet crew relationship and retry.`, crewBindingAddress);
|
|
850
835
|
}
|
|
851
836
|
}
|
|
852
|
-
const attackerNpc = {};
|
|
853
|
-
let attackerOwnershipAccount;
|
|
854
|
-
let attackerFactionAccount;
|
|
855
|
-
if (attackerOwnership !== undefined && attackerFaction !== undefined) {
|
|
856
|
-
attackerOwnershipAccount = requireAccount(current.get(attackerOwnership), attackerOwnership, `NPC Fleet ${attacker.address} has no canonical FactionOwnership. Refresh the Fleet faction relationship and retry.`);
|
|
857
|
-
const npcOwnership = factionOwnershipAccountDefinition.decode(attackerOwnershipAccount);
|
|
858
|
-
if (npcOwnership.game !== game ||
|
|
859
|
-
npcOwnership.asset.kind !== 'fleet' ||
|
|
860
|
-
npcOwnership.asset.fleet !== attacker.address ||
|
|
861
|
-
npcOwnership.controllingFactionId !== attacker.npcFactionId) {
|
|
862
|
-
fail(`NPC Fleet ${attacker.address} has no matching canonical FactionOwnership for faction ${String(attacker.npcFactionId)}. Refresh the Fleet and faction ownership relationship before retrying.`, attackerOwnership);
|
|
863
|
-
}
|
|
864
|
-
attackerFactionAccount = requireAccount(current.get(attackerFaction), attackerFaction, `Faction ${attackerFaction} is missing for NPC Fleet ${attacker.address}. Refresh the faction registry relationship and retry.`);
|
|
865
|
-
const npcFaction = factionAccountDefinition.decode(attackerFactionAccount);
|
|
866
|
-
if (npcFaction.game !== game ||
|
|
867
|
-
npcFaction.factionId !== attacker.npcFactionId) {
|
|
868
|
-
fail(`Faction ${attackerFaction} does not match NPC Fleet ${attacker.address}'s Game and faction id. Refresh the faction registry relationship before retrying.`, attackerFaction);
|
|
869
|
-
}
|
|
870
|
-
attackerNpc.ownership = attackerOwnership;
|
|
871
|
-
attackerNpc.factionAccount = attackerFaction;
|
|
872
|
-
}
|
|
873
837
|
let economicsAccount;
|
|
874
838
|
let treasuryAccount;
|
|
875
839
|
if (factionEconomicsConfig !== undefined && captorTreasury !== undefined) {
|
|
@@ -928,21 +892,13 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
928
892
|
'The optional Fleet crew binding remains unchanged.',
|
|
929
893
|
],
|
|
930
894
|
]),
|
|
931
|
-
...(
|
|
895
|
+
...(attackerNpc.ownership === undefined
|
|
932
896
|
? []
|
|
933
|
-
: [
|
|
934
|
-
|
|
935
|
-
attackerOwnershipAccount,
|
|
936
|
-
'NPC Fleet ownership remains unchanged.',
|
|
937
|
-
],
|
|
938
|
-
]),
|
|
939
|
-
...(attackerFactionAccount === undefined
|
|
897
|
+
: [[attackerNpc.ownership, 'NPC Fleet ownership remains unchanged.']]),
|
|
898
|
+
...(attackerNpc.faction === undefined
|
|
940
899
|
? []
|
|
941
900
|
: [
|
|
942
|
-
[
|
|
943
|
-
attackerFactionAccount,
|
|
944
|
-
'The NPC faction account remains unchanged.',
|
|
945
|
-
],
|
|
901
|
+
[attackerNpc.faction, 'The NPC faction account remains unchanged.'],
|
|
946
902
|
]),
|
|
947
903
|
...(economicsAccount === undefined
|
|
948
904
|
? []
|
|
@@ -969,20 +925,32 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
969
925
|
]
|
|
970
926
|
: []),
|
|
971
927
|
];
|
|
928
|
+
const runtime = await resolveActionRuntime(ctx, {
|
|
929
|
+
mode: 'starbase-attack',
|
|
930
|
+
game,
|
|
931
|
+
system: target.address,
|
|
932
|
+
starbaseSeqId: starSystemAccountDefinition.decode(systemAccount).sequenceId,
|
|
933
|
+
character,
|
|
934
|
+
});
|
|
972
935
|
const description = `Attack with Fleet ${attacker.name} (${attacker.address}) against the shared Starbase at ${target.name} (${target.address}) using ${stance.ammoUsage} ammunition; range, capture-cost debit outcome, randomness, rewards, Loot, damage, and final admissibility remain chain-authoritative.`;
|
|
973
936
|
return createPlan({
|
|
974
937
|
kind: 'combat.attack-starbase',
|
|
975
|
-
preconditions: [
|
|
938
|
+
preconditions: [
|
|
939
|
+
...statePreconditions,
|
|
940
|
+
...absencePreconditions,
|
|
941
|
+
...runtime.guards,
|
|
942
|
+
],
|
|
976
943
|
steps: [
|
|
977
944
|
{
|
|
978
|
-
describes: description
|
|
945
|
+
describes: `${description} ${runtime.description}`,
|
|
979
946
|
instruction: adaptAttackStarbaseInstruction({
|
|
980
|
-
...
|
|
947
|
+
...runtime.accounts,
|
|
948
|
+
...(attackerNpc.faction === undefined
|
|
981
949
|
? {}
|
|
982
|
-
: { attackerFactionAccount: attackerNpc.
|
|
950
|
+
: { attackerFactionAccount: attackerNpc.faction.address }),
|
|
983
951
|
...(attackerNpc.ownership === undefined
|
|
984
952
|
? {}
|
|
985
|
-
: { attackerFleetOwnership: attackerNpc.ownership }),
|
|
953
|
+
: { attackerFleetOwnership: attackerNpc.ownership.address }),
|
|
986
954
|
authorization: options.authorization,
|
|
987
955
|
...(captorTreasury === undefined ? {} : { captorTreasury }),
|
|
988
956
|
character,
|
|
@@ -1009,7 +977,7 @@ export async function planFleetAttackStarbase(ctx, attacker, target, inputStance
|
|
|
1009
977
|
signers: [options.authorization.authority, options.loot],
|
|
1010
978
|
},
|
|
1011
979
|
],
|
|
1012
|
-
summary: description
|
|
980
|
+
summary: `${description} ${runtime.description}`,
|
|
1013
981
|
});
|
|
1014
982
|
}
|
|
1015
983
|
function lootSnapshotFingerprint(loot) {
|
|
@@ -1025,7 +993,7 @@ function lootSnapshotFingerprint(loot) {
|
|
|
1025
993
|
item.exclusivityUnlockAtUnixSeconds,
|
|
1026
994
|
item.rewardReclaimAtUnixSeconds,
|
|
1027
995
|
item.inventory.sequenceId,
|
|
1028
|
-
item.inventory.
|
|
996
|
+
item.inventory.usedStorageUnitsRaw,
|
|
1029
997
|
...item.inventory.items
|
|
1030
998
|
.map(({ cargo, quantityRaw }) => `${String(cargo.id)}:${String(quantityRaw)}`)
|
|
1031
999
|
.sort(),
|
|
@@ -1045,7 +1013,7 @@ function rawLootFingerprint(address, loot) {
|
|
|
1045
1013
|
item.exclusivityUnlockAtUnixSeconds,
|
|
1046
1014
|
item.rewardReclaimAtUnixSeconds,
|
|
1047
1015
|
item.inventory.sequenceId,
|
|
1048
|
-
item.inventory.
|
|
1016
|
+
item.inventory.usedStorageUnitsRaw,
|
|
1049
1017
|
...item.inventory.amounts
|
|
1050
1018
|
.map(({ amount, cargoId }) => `${String(cargoId)}:${String(amount)}`)
|
|
1051
1019
|
.sort(),
|