@aephia/atlas-kit 0.6.0-next.9 → 0.6.0-next.91
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 +25 -12
- 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 +3 -2
- package/dist/cargo/actions/index.js.map +1 -1
- package/dist/cargo/actions/wallet-token.d.ts +1 -1
- package/dist/cargo/actions/wallet-token.d.ts.map +1 -1
- package/dist/cargo/actions/wallet-token.js +1 -9
- 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 +28 -27
- 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 +95 -44
- 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.map +1 -1
- package/dist/combat/actions/index.js +98 -50
- package/dist/combat/actions/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 +73 -36
- 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 +44 -15
- 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 +34 -15
- package/dist/fleets/actions/index.d.ts.map +1 -1
- package/dist/fleets/actions/index.js +227 -118
- 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 +41 -13
- 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 +34 -0
- package/dist/fleets/index.d.ts.map +1 -1
- package/dist/fleets/index.js +51 -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/warp-lane-estimate.d.ts +59 -0
- package/dist/fleets/warp-lane-estimate.d.ts.map +1 -0
- package/dist/fleets/warp-lane-estimate.js +36 -0
- package/dist/fleets/warp-lane-estimate.js.map +1 -0
- package/dist/fleets/warp-lane-policy.d.ts +68 -0
- package/dist/fleets/warp-lane-policy.d.ts.map +1 -0
- package/dist/fleets/warp-lane-policy.js +91 -0
- package/dist/fleets/warp-lane-policy.js.map +1 -0
- package/dist/fleets/warp-lane-toll.d.ts +55 -0
- package/dist/fleets/warp-lane-toll.d.ts.map +1 -0
- package/dist/fleets/warp-lane-toll.js +79 -0
- package/dist/fleets/warp-lane-toll.js.map +1 -0
- package/dist/identity/actions/create-profile.d.ts +2 -0
- package/dist/identity/actions/create-profile.d.ts.map +1 -1
- package/dist/identity/actions/create-profile.js +14 -9
- package/dist/identity/actions/create-profile.js.map +1 -1
- 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 +48 -27
- package/dist/identity/actions/index.js.map +1 -1
- package/dist/identity/index.d.ts +15 -0
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +15 -0
- package/dist/identity/index.js.map +1 -1
- package/dist/identity/permissions.d.ts +124 -0
- package/dist/identity/permissions.d.ts.map +1 -0
- package/dist/identity/permissions.js +171 -0
- package/dist/identity/permissions.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/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-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/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 +25 -38
- package/dist/internal/c4/claim-stake.js.map +1 -1
- package/dist/internal/c4/combat.d.ts +0 -27
- package/dist/internal/c4/combat.d.ts.map +1 -1
- package/dist/internal/c4/combat.js +0 -33
- 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 +12 -32
- package/dist/internal/c4/crafting.d.ts.map +1 -1
- package/dist/internal/c4/crafting.js +31 -44
- package/dist/internal/c4/crafting.js.map +1 -1
- 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/factions.d.ts +9 -57
- package/dist/internal/c4/factions.d.ts.map +1 -1
- package/dist/internal/c4/factions.js +21 -139
- 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 +15 -0
- package/dist/internal/c4/fleet-crew-binding.js.map +1 -1
- package/dist/internal/c4/fleet-respawn.d.ts +19 -0
- package/dist/internal/c4/fleet-respawn.d.ts.map +1 -0
- package/dist/internal/c4/fleet-respawn.js +91 -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 +26 -7
- 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 +46 -11
- package/dist/internal/c4/game.d.ts.map +1 -1
- package/dist/internal/c4/game.js +108 -20
- package/dist/internal/c4/game.js.map +1 -1
- package/dist/internal/c4/identity.d.ts +4 -8
- package/dist/internal/c4/identity.d.ts.map +1 -1
- package/dist/internal/c4/identity.js +3 -24
- 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/loyalty.d.ts +0 -27
- package/dist/internal/c4/loyalty.d.ts.map +1 -1
- package/dist/internal/c4/loyalty.js +0 -33
- 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/profile-permissions.d.ts +14 -0
- package/dist/internal/c4/profile-permissions.d.ts.map +1 -0
- package/dist/internal/c4/profile-permissions.js +81 -0
- package/dist/internal/c4/profile-permissions.js.map +1 -0
- 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 +0 -27
- package/dist/internal/c4/rewards.d.ts.map +1 -1
- package/dist/internal/c4/rewards.js +0 -33
- package/dist/internal/c4/rewards.js.map +1 -1
- package/dist/internal/c4/runtime-bindings.d.ts +3 -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 +258 -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 +2 -33
- 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 +3 -41
- 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 +58 -25
- 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 +20 -0
- package/dist/internal/planning/arrival-guards.d.ts.map +1 -0
- package/dist/internal/planning/arrival-guards.js +187 -0
- package/dist/internal/planning/arrival-guards.js.map +1 -0
- package/dist/internal/planning/authorization-adapter.d.ts +10 -7
- package/dist/internal/planning/authorization-adapter.d.ts.map +1 -1
- package/dist/internal/planning/authorization-adapter.js +87 -16
- 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 +86 -0
- package/dist/internal/planning/character-registration.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 +105 -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 +108 -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 +131 -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 +225 -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 +165 -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 +137 -0
- package/dist/internal/planning/fleet-ship-assembly.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 +126 -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 +166 -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 +85 -0
- package/dist/internal/planning/open-signal.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 +43 -0
- package/dist/internal/planning/runtime-guards.d.ts.map +1 -0
- package/dist/internal/planning/runtime-guards.js +636 -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 +196 -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 +244 -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 +52 -0
- package/dist/internal/planning/ship-import-funding.js.map +1 -0
- package/dist/internal/planning/ship-token.d.ts +0 -1
- package/dist/internal/planning/ship-token.d.ts.map +1 -1
- package/dist/internal/planning/ship-token.js +2 -5
- package/dist/internal/planning/ship-token.js.map +1 -1
- 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 +12 -0
- package/dist/internal/planning/starbase-system.d.ts.map +1 -0
- package/dist/internal/planning/starbase-system.js +22 -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/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 +4 -3
- 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 +137 -25
- 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 +291 -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 +84 -0
- package/dist/mining/actions/index.d.ts.map +1 -0
- package/dist/mining/actions/index.js +328 -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 +8 -2
- package/dist/mining/index.d.ts.map +1 -1
- package/dist/mining/index.js +6 -2
- package/dist/mining/index.js.map +1 -1
- package/dist/planning/assembly.d.ts.map +1 -1
- package/dist/planning/assembly.js +24 -0
- package/dist/planning/assembly.js.map +1 -1
- package/dist/planning/execution.d.ts.map +1 -1
- package/dist/planning/execution.js +460 -17
- package/dist/planning/execution.js.map +1 -1
- package/dist/planning/index.d.ts +181 -149
- package/dist/planning/index.d.ts.map +1 -1
- package/dist/planning/index.js +869 -121
- package/dist/planning/index.js.map +1 -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/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/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 +4 -1
- package/dist/scanning/index.d.ts.map +1 -1
- package/dist/scanning/index.js +12 -8
- 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/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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mining/actions/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,OAAO,EAEP,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAGnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAoBtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAOxE,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3D,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,UAAU,aAAc,SAAQ,IAAI,CAAC,wBAAwB,EAAE,cAAc,CAAC;IAC5E,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,IAAI,OAAO,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,wFAAwF;IACxF,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAiFD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAiLf;AAED;;;;;;GAMG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,IAAI,CAAC,CA2Hf"}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
import { resolveXpRuntime } from '../../internal/planning/xp-runtime.js';
|
|
2
|
+
import { matchesFleetMiningState } from '../../internal/planning/mining-stop.js';
|
|
3
|
+
import { InvalidActionInputError, SageSdkError } from '../../client/errors.js';
|
|
4
|
+
import { readContextRawAccounts } from '../../client/reconciliation.js';
|
|
5
|
+
import { sage } from '../../internal/c4/bindings.js';
|
|
6
|
+
import { deriveFleetAddress, fleetAccountDefinition, } from '../../internal/c4/fleet.js';
|
|
7
|
+
import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/identity.js';
|
|
8
|
+
import { deriveRegionTrackerAddress, regionTrackerAccountDefinition, } from '../../internal/c4/factions.js';
|
|
9
|
+
import { celestialBodyAccountDefinition, deriveCelestialBodyAddress, deriveStarSystemAddress, starSystemAccountDefinition, } from '../../internal/c4/world.js';
|
|
10
|
+
import { deriveFleetCrewBindingAddress, fleetCrewBindingAccountDefinition, matchesFleetCrewBindingIdentity, } from '../../internal/c4/fleet-crew-binding.js';
|
|
11
|
+
import { requireGameAddress } from '../../internal/game-context.js';
|
|
12
|
+
import { adaptStartMiningAsteroidInstruction, adaptStopMiningAsteroidInstruction, validatePlanAuthorization, } from '../../internal/planning/authorization-adapter.js';
|
|
13
|
+
import { createPlan } from '../../planning/index.js';
|
|
14
|
+
function fail(address, message) {
|
|
15
|
+
throw new SageSdkError('ACTION_PRECONDITION_FAILED', message, { address });
|
|
16
|
+
}
|
|
17
|
+
const remedies = {
|
|
18
|
+
docked: 'Undock the Fleet',
|
|
19
|
+
mining: 'Stop mining with planFleetStopMining',
|
|
20
|
+
respawn: 'Wait for the Fleet to recover',
|
|
21
|
+
destroyed: 'Respawn the Fleet through an appropriate game client',
|
|
22
|
+
claimStakeTransfer: 'Finish the Claim Stake transfer',
|
|
23
|
+
};
|
|
24
|
+
function actionCoordinate(fleet) {
|
|
25
|
+
if (fleet.state.kind === 'idle')
|
|
26
|
+
return fleet.location;
|
|
27
|
+
if (fleet.state.kind === 'warp' || fleet.state.kind === 'subwarp')
|
|
28
|
+
return fleet.state.to;
|
|
29
|
+
return fail(fleet.address, `Fleet ${fleet.name} is ${fleet.state.kind} and cannot start mining. ${remedies[fleet.state.kind]}, refresh the Fleet, and retry from idle or a warp/subwarp arrival at the Asteroid's Star System.`);
|
|
30
|
+
}
|
|
31
|
+
function validateOptionsObject(value, field) {
|
|
32
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
33
|
+
throw new InvalidActionInputError(field, value, 'an object containing the mining action options or Profile authorization', `Supply ${field} with the documented mining action fields before retrying.`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function validateResources(ids, available) {
|
|
37
|
+
if (!Array.isArray(ids) || ids.length === 0) {
|
|
38
|
+
throw new InvalidActionInputError('resourceIds', ids, 'a dense non-empty ascending list of deposit cargo ids', 'Supply at least one resource cargo id from the Asteroid deposit before retrying.');
|
|
39
|
+
}
|
|
40
|
+
for (let i = 0; i < ids.length; i += 1) {
|
|
41
|
+
const id = ids[i];
|
|
42
|
+
if (!Object.hasOwn(ids, i) ||
|
|
43
|
+
!Number.isInteger(id) ||
|
|
44
|
+
id < 0 ||
|
|
45
|
+
id > 65535 ||
|
|
46
|
+
(i > 0 && ids[i - 1] >= id) ||
|
|
47
|
+
!available.includes(id)) {
|
|
48
|
+
throw new InvalidActionInputError('resourceIds', ids, 'unique ascending u16 cargo ids selected from the deposit', 'Select resource cargo ids present in the Asteroid deposit, remove holes and duplicates, and sort them in ascending order before retrying.');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function required(account, address, label) {
|
|
53
|
+
if (account === undefined) {
|
|
54
|
+
return fail(address, `${label} is missing or returned at a different address. Refresh the Fleet and Asteroid dependencies in the configured Game and retry.`);
|
|
55
|
+
}
|
|
56
|
+
return account;
|
|
57
|
+
}
|
|
58
|
+
/** Plans one inert Fleet mining start at an Asteroid, without signing or simulation.
|
|
59
|
+
*
|
|
60
|
+
* Idle Fleets use their current coordinate; warp/subwarp Fleets use their arrival
|
|
61
|
+
* coordinate, never a local clock. This planner emits only the mining instruction.
|
|
62
|
+
* Direct mining needs Idle. Settle travel through a supported game route, then
|
|
63
|
+
* refresh an Idle Fleet before planning mining. planFleetSettleArrival supports
|
|
64
|
+
* completed current-runtime subwarp with direct Profile authorization; it does
|
|
65
|
+
* not support warp. Current-runtime settlement-plus-mining composition has not
|
|
66
|
+
* been qualified. Idle Fleets do not need the settlement step.
|
|
67
|
+
* Simulate the complete Plan before execution; arrival, permissions, range, fuel,
|
|
68
|
+
* and mining eligibility remain program-authoritative. This planner neither
|
|
69
|
+
* estimates mining output nor stops mining. No FleetCrewBinding account exists
|
|
70
|
+
* in the pinned ten-account instruction.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts
|
|
74
|
+
* declare const ctx: SageContext;
|
|
75
|
+
* declare const fleet: FleetSnapshot;
|
|
76
|
+
* declare const authorization: PlanAuthorization;
|
|
77
|
+
* declare const asteroid: ResourceDepositSnapshot;
|
|
78
|
+
* const plan = await planFleetStartMining(ctx, fleet, { authorization, asteroid, resourceIds: [8] });
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export async function planFleetStartMining(ctx, fleet, options) {
|
|
82
|
+
const game = requireGameAddress(ctx);
|
|
83
|
+
validateOptionsObject(options, 'options');
|
|
84
|
+
validateOptionsObject(options.authorization, 'authorization');
|
|
85
|
+
const { asteroid } = options;
|
|
86
|
+
const authorization = {
|
|
87
|
+
profile: options.authorization.profile,
|
|
88
|
+
authority: options.authorization.authority,
|
|
89
|
+
keyIndex: options.authorization.keyIndex,
|
|
90
|
+
...(options.authorization.certificate === undefined
|
|
91
|
+
? {}
|
|
92
|
+
: { certificate: options.authorization.certificate }),
|
|
93
|
+
};
|
|
94
|
+
validatePlanAuthorization(authorization);
|
|
95
|
+
const coordinate = actionCoordinate(fleet);
|
|
96
|
+
const movingSnapshot = fleet.state.kind !== 'idle';
|
|
97
|
+
if (fleet.game !== game ||
|
|
98
|
+
asteroid.game !== game ||
|
|
99
|
+
fleet.ownerProfile.address !== authorization.profile) {
|
|
100
|
+
fail(fleet.address, `Fleet ${fleet.name} and Asteroid ${asteroid.name} must belong to configured Game ${game}, and the Fleet must belong to authorized Profile ${authorization.profile}. Choose the owning Profile and matching Game, refresh both snapshots, and retry.`);
|
|
101
|
+
}
|
|
102
|
+
validateResources(options.resourceIds, asteroid.resources.map((r) => r.cargo.id));
|
|
103
|
+
// Copy before any asynchronous reads so caller mutation cannot change selection.
|
|
104
|
+
const resourceIds = [...options.resourceIds];
|
|
105
|
+
const character = await findCharacterPda(authorization.profile, game);
|
|
106
|
+
const regionTracker = await deriveRegionTrackerAddress(game);
|
|
107
|
+
const addresses = [
|
|
108
|
+
fleet.address,
|
|
109
|
+
asteroid.address,
|
|
110
|
+
asteroid.system.address,
|
|
111
|
+
character,
|
|
112
|
+
regionTracker,
|
|
113
|
+
];
|
|
114
|
+
const values = await readContextRawAccounts(ctx, addresses);
|
|
115
|
+
const labels = [
|
|
116
|
+
'Fleet',
|
|
117
|
+
'Asteroid',
|
|
118
|
+
'Star System',
|
|
119
|
+
'Character',
|
|
120
|
+
'RegionTracker',
|
|
121
|
+
];
|
|
122
|
+
const accounts = addresses.map((address, index) => required(values[index], address, labels[index]));
|
|
123
|
+
const [fleetAccount, asteroidAccount, systemAccount, characterAccount, trackerAccount,] = accounts;
|
|
124
|
+
const current = fleetAccountDefinition.decode(fleetAccount);
|
|
125
|
+
const currentCoordinate = current.state.kind === 'idle'
|
|
126
|
+
? current.location
|
|
127
|
+
: current.state.kind === 'warp' || current.state.kind === 'subwarp'
|
|
128
|
+
? current.state.to
|
|
129
|
+
: undefined;
|
|
130
|
+
if (current.game !== game ||
|
|
131
|
+
current.ownerProfile !== authorization.profile ||
|
|
132
|
+
(await deriveFleetAddress(current)) !== fleet.address ||
|
|
133
|
+
(current.state.kind !== fleet.state.kind &&
|
|
134
|
+
!(current.state.kind === 'idle' &&
|
|
135
|
+
(fleet.state.kind === 'warp' || fleet.state.kind === 'subwarp'))) ||
|
|
136
|
+
currentCoordinate?.x !== coordinate.x ||
|
|
137
|
+
currentCoordinate?.y !== coordinate.y) {
|
|
138
|
+
fail(fleet.address, `Fleet ${fleet.name} no longer matches its Game, Profile, canonical address, state, or mining coordinate. Refresh the Fleet and create a new mining Plan before retrying.`);
|
|
139
|
+
}
|
|
140
|
+
const deposit = celestialBodyAccountDefinition.decode(asteroidAccount);
|
|
141
|
+
if (deposit.kind !== 'asteroid' ||
|
|
142
|
+
deposit.game !== game ||
|
|
143
|
+
deposit.id !== asteroid.bodyId ||
|
|
144
|
+
(await deriveCelestialBodyAddress(game, deposit.id)) !== asteroid.address ||
|
|
145
|
+
deposit.system !== asteroid.system.address) {
|
|
146
|
+
fail(asteroid.address, `Asteroid ${asteroid.name} no longer matches its Game, canonical address, or Star System. Refresh the resource deposit and choose an Asteroid in the Fleet's current or arrival Star System before retrying.`);
|
|
147
|
+
}
|
|
148
|
+
validateResources(resourceIds, deposit.details.resources.map((r) => r.cargoId));
|
|
149
|
+
const system = starSystemAccountDefinition.decode(systemAccount);
|
|
150
|
+
if (system.game !== game ||
|
|
151
|
+
(await deriveStarSystemAddress(game, system.systemId)) !==
|
|
152
|
+
systemAccount.address) {
|
|
153
|
+
fail(systemAccount.address, 'Star System does not match its Game or canonical address. Refresh the Asteroid and Star System in the configured Game before retrying.');
|
|
154
|
+
}
|
|
155
|
+
// Compare stored fixed-point coordinates, not rounded display numbers.
|
|
156
|
+
const exactFleet = sage.getFleetDecoder().decode(fleetAccount.data);
|
|
157
|
+
const exactCoordinate = exactFleet.state.__kind === 'MoveWarp'
|
|
158
|
+
? exactFleet.state.fields[0].to
|
|
159
|
+
: exactFleet.state.__kind === 'MoveSubwarp'
|
|
160
|
+
? exactFleet.state.fields[0].journey.to
|
|
161
|
+
: exactFleet.location;
|
|
162
|
+
const exactSystem = sage.getStarSystemDecoder().decode(systemAccount.data);
|
|
163
|
+
if (exactCoordinate[0].raw !== exactSystem.coordinates[0].raw ||
|
|
164
|
+
exactCoordinate[1].raw !== exactSystem.coordinates[1].raw) {
|
|
165
|
+
fail(asteroid.address, `Asteroid ${asteroid.name} is not in Fleet ${fleet.name}'s current or arrival Star System. Choose a deposit at the Fleet's mining coordinate or move the Fleet there, refresh, and retry.`);
|
|
166
|
+
}
|
|
167
|
+
const characterData = characterAccountDefinition.decode(characterAccount);
|
|
168
|
+
if (characterData.game !== game ||
|
|
169
|
+
characterData.playerProfile !== authorization.profile) {
|
|
170
|
+
fail(character, 'Character does not match the owning Profile and configured Game. Refresh or repair the canonical Character registration before retrying.');
|
|
171
|
+
}
|
|
172
|
+
const tracker = regionTrackerAccountDefinition.decode(trackerAccount);
|
|
173
|
+
if (tracker.game !== game) {
|
|
174
|
+
fail(regionTracker, 'RegionTracker does not match the configured Game. Refresh world region data for this Game before retrying.');
|
|
175
|
+
}
|
|
176
|
+
const resources = resourceIds
|
|
177
|
+
.map((id) => {
|
|
178
|
+
const resource = asteroid.resources.find((r) => r.cargo.id === id);
|
|
179
|
+
return `${resource.cargo.name} (cargo ${id})`;
|
|
180
|
+
})
|
|
181
|
+
.join(', ');
|
|
182
|
+
const describes = `Start mining with Fleet ${fleet.name} at Asteroid ${asteroid.name}: ${resources}.`;
|
|
183
|
+
const settlementWarning = movingSnapshot
|
|
184
|
+
? ' Direct mining needs Idle. Settle travel through a supported game route, then refresh an Idle Fleet before planning mining. planFleetSettleArrival supports completed current-runtime subwarp with direct Profile authorization, not warp. Current-runtime settlement-plus-mining composition has not been qualified.'
|
|
185
|
+
: '';
|
|
186
|
+
return createPlan({
|
|
187
|
+
kind: 'fleet.start-mining',
|
|
188
|
+
summary: describes,
|
|
189
|
+
steps: [
|
|
190
|
+
{
|
|
191
|
+
describes: `${describes}${settlementWarning} Simulate before execution; arrival, permissions, range, fuel, and mining eligibility remain chain-authoritative.`,
|
|
192
|
+
signers: [authorization.authority],
|
|
193
|
+
instruction: adaptStartMiningAsteroidInstruction({
|
|
194
|
+
authorization,
|
|
195
|
+
fleet: fleet.address,
|
|
196
|
+
character,
|
|
197
|
+
starSystem: systemAccount.address,
|
|
198
|
+
regionTracker,
|
|
199
|
+
asteroid: asteroid.address,
|
|
200
|
+
game,
|
|
201
|
+
resources: resourceIds,
|
|
202
|
+
}),
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
preconditions: [],
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
/** Plans one inert stop-mining instruction using the Asteroid in Fleet state.
|
|
209
|
+
*
|
|
210
|
+
* The snapshot and a fresh canonical Fleet must be mining the same Asteroid.
|
|
211
|
+
* A finite persisted guard rechecks this state before signing; old unguarded
|
|
212
|
+
* stop Plans must be recreated. Exit fuel was observed on PTR even for Idle,
|
|
213
|
+
* so Idle is not a free no-op. The read-to-chain race remains: simulate before
|
|
214
|
+
* execution; a later state change can still consume fuel or fail upkeep checks.
|
|
215
|
+
* No yield, cargo amount, or execution success is promised. DO_MINING
|
|
216
|
+
* permission remains chain-authoritative. Only validated canonical optional
|
|
217
|
+
* accounts are included, including the chain-created neutral CrewBinding at
|
|
218
|
+
* its canonical PDA; proven absence uses the generated omitted-account sentinel.
|
|
219
|
+
* Planning does not sign, simulate, or submit a transaction.
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* ```ts
|
|
223
|
+
* declare const ctx: SageContext;
|
|
224
|
+
* declare const fleet: FleetSnapshot;
|
|
225
|
+
* declare const authorization: PlanAuthorization;
|
|
226
|
+
* const plan = await planFleetStopMining(ctx, fleet, { authorization });
|
|
227
|
+
* ```
|
|
228
|
+
*/
|
|
229
|
+
export async function planFleetStopMining(ctx, fleet, options) {
|
|
230
|
+
const game = requireGameAddress(ctx);
|
|
231
|
+
validateOptionsObject(options, 'options');
|
|
232
|
+
validateOptionsObject(options.authorization, 'authorization');
|
|
233
|
+
const authorization = {
|
|
234
|
+
profile: options.authorization.profile,
|
|
235
|
+
authority: options.authorization.authority,
|
|
236
|
+
keyIndex: options.authorization.keyIndex,
|
|
237
|
+
...(options.authorization.certificate === undefined
|
|
238
|
+
? {}
|
|
239
|
+
: { certificate: options.authorization.certificate }),
|
|
240
|
+
};
|
|
241
|
+
validatePlanAuthorization(authorization);
|
|
242
|
+
if (fleet.state.kind !== 'mining') {
|
|
243
|
+
fail(fleet.address, `Fleet ${fleet.name} is ${fleet.state.kind} and cannot stop mining. Refresh the Fleet and retry only with a mining snapshot; an idle Fleet has already stopped.`);
|
|
244
|
+
}
|
|
245
|
+
if (fleet.game !== game ||
|
|
246
|
+
fleet.ownerProfile.address !== authorization.profile) {
|
|
247
|
+
fail(fleet.address, `Fleet ${fleet.name} must belong to configured Game ${game} and authorized Profile ${authorization.profile}. Choose the owning Profile and matching Game, refresh the Fleet, and retry.`);
|
|
248
|
+
}
|
|
249
|
+
const asteroid = fleet.state.asteroid.address;
|
|
250
|
+
const intent = {
|
|
251
|
+
address: fleet.address,
|
|
252
|
+
game,
|
|
253
|
+
profile: authorization.profile,
|
|
254
|
+
asteroid,
|
|
255
|
+
};
|
|
256
|
+
const [character, crewBinding, regionTracker] = await Promise.all([
|
|
257
|
+
findCharacterPda(authorization.profile, game),
|
|
258
|
+
deriveFleetCrewBindingAddress(fleet.address),
|
|
259
|
+
deriveRegionTrackerAddress(game),
|
|
260
|
+
]);
|
|
261
|
+
const [currentFleet, crewAccount, regionAccount] = await readContextRawAccounts(ctx, [
|
|
262
|
+
intent.address,
|
|
263
|
+
crewBinding,
|
|
264
|
+
regionTracker,
|
|
265
|
+
]);
|
|
266
|
+
let matches = false;
|
|
267
|
+
try {
|
|
268
|
+
matches = await matchesFleetMiningState(currentFleet, intent);
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
// Adapter errors must not hide the action-level remedy for a saved snapshot.
|
|
272
|
+
}
|
|
273
|
+
if (!matches)
|
|
274
|
+
fail(intent.address, 'The fresh Fleet is unavailable, invalid, or no longer owned by this Profile and mining the selected Asteroid in this Game. Refresh the Fleet and recreate the stop Plan only while it is mining; an idle stop can still consume exit fuel.');
|
|
275
|
+
if (crewAccount !== undefined) {
|
|
276
|
+
const crew = fleetCrewBindingAccountDefinition.decode(crewAccount);
|
|
277
|
+
if (crewAccount.address !== crewBinding ||
|
|
278
|
+
!matchesFleetCrewBindingIdentity(crew, fleet.address, authorization.profile)) {
|
|
279
|
+
fail(crewBinding, 'FleetCrewBinding does not match its canonical address, Fleet, or owning Profile. Refresh the Fleet crew registration and retry.');
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
if (regionAccount !== undefined) {
|
|
283
|
+
const region = regionTrackerAccountDefinition.decode(regionAccount);
|
|
284
|
+
if (regionAccount.address !== regionTracker || region.game !== game) {
|
|
285
|
+
fail(regionTracker, 'RegionTracker does not match its canonical address or configured Game. Refresh world region data for this Game and retry.');
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
const xp = await resolveXpRuntime(ctx, {
|
|
289
|
+
game,
|
|
290
|
+
character,
|
|
291
|
+
profile: options.authorization.profile,
|
|
292
|
+
});
|
|
293
|
+
return createPlan({
|
|
294
|
+
kind: 'fleet.stop-mining',
|
|
295
|
+
summary: `Stop mining for Fleet ${fleet.name}.`,
|
|
296
|
+
steps: [
|
|
297
|
+
{
|
|
298
|
+
describes: `Stop mining for Fleet ${fleet.name} at Asteroid ${asteroid}, returning it to idle. Fresh mining state is checked before signing; exit fuel can still be consumed, including if the Fleet becomes idle in the read-to-chain race. Simulate before execution; permission and mining results remain chain-authoritative.`,
|
|
299
|
+
signers: [authorization.authority],
|
|
300
|
+
instruction: adaptStopMiningAsteroidInstruction({
|
|
301
|
+
...xp.accounts,
|
|
302
|
+
authorization,
|
|
303
|
+
character,
|
|
304
|
+
fleet: intent.address,
|
|
305
|
+
game,
|
|
306
|
+
asteroid,
|
|
307
|
+
...(crewAccount === undefined ? {} : { crewBinding }),
|
|
308
|
+
...(regionAccount === undefined ? {} : { regionTracker }),
|
|
309
|
+
}),
|
|
310
|
+
},
|
|
311
|
+
],
|
|
312
|
+
preconditions: [
|
|
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 mining settlement.',
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
kind: 'fleet-mining',
|
|
322
|
+
...intent,
|
|
323
|
+
describes: 'The canonical Fleet remains owned by the authorized Profile and mining the planned Asteroid in the configured Game.',
|
|
324
|
+
},
|
|
325
|
+
],
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mining/actions/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/** One selected Asteroid resource, using translated storage units rather than encoded fixed point.
|
|
2
|
+
* `runtimeMultiplier` is the caller's effective multiplier, including any applicable
|
|
3
|
+
* crew/research effects. No modifier composition or eligibility is inferred.
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* const resource: MiningEstimateResourceInput = {
|
|
7
|
+
* cargoId: 300, richness: 2, storageCost: 2, runtimeMultiplier: 1.5,
|
|
8
|
+
* };
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
export interface MiningEstimateResourceInput {
|
|
12
|
+
readonly cargoId: number;
|
|
13
|
+
readonly richness: number;
|
|
14
|
+
readonly storageCost: number;
|
|
15
|
+
readonly runtimeMultiplier: number;
|
|
16
|
+
}
|
|
17
|
+
/** Explicit constant-rate Asteroid scenario. Balances and rates use cargo units;
|
|
18
|
+
* capacity, occupancy and storage costs use translated storage units. Occupancy
|
|
19
|
+
* includes all available Food; Ammo is held separately and frees no cargo space.
|
|
20
|
+
* Supply all 1–8 selected resources, including zero-yield rows. Fleet rate already
|
|
21
|
+
* includes ship/component effects: do not apply those again in the multipliers.
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* const input: MiningEstimateInput = {
|
|
25
|
+
* fleetUnitsPerSecond: 2, durationSeconds: 60,
|
|
26
|
+
* resources: [{ cargoId: 300, richness: 1, storageCost: 1, runtimeMultiplier: 1 }],
|
|
27
|
+
* cargo: { occupiedSpace: 10, capacity: 100 },
|
|
28
|
+
* food: { availableUnits: 10, burnUnitsPerSecond: 0.1, storageCost: 1 },
|
|
29
|
+
* ammo: { availableUnits: 10, burnUnitsPerSecond: 0.1 },
|
|
30
|
+
* };
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export interface MiningEstimateInput {
|
|
34
|
+
readonly fleetUnitsPerSecond: number;
|
|
35
|
+
/** Requested duration; the result reports the clipped duration. */
|
|
36
|
+
readonly durationSeconds: number;
|
|
37
|
+
readonly resources: readonly MiningEstimateResourceInput[];
|
|
38
|
+
readonly cargo: {
|
|
39
|
+
readonly occupiedSpace: number;
|
|
40
|
+
readonly capacity: number;
|
|
41
|
+
};
|
|
42
|
+
readonly food: {
|
|
43
|
+
readonly availableUnits: number;
|
|
44
|
+
readonly burnUnitsPerSecond: number;
|
|
45
|
+
readonly storageCost: number;
|
|
46
|
+
};
|
|
47
|
+
readonly ammo: {
|
|
48
|
+
readonly availableUnits: number;
|
|
49
|
+
readonly burnUnitsPerSecond: number;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/** Constraints reached at the end of an estimate; simultaneous limits are retained.
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* const reason: MiningEstimateLimit = 'food';
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
export type MiningEstimateLimit = 'duration' | 'food' | 'ammo' | 'cargo' | 'no-output';
|
|
59
|
+
/** Immutable, JSON-safe constant-rate estimate, not a settlement guarantee.
|
|
60
|
+
* Projected quantities are fractional numbers; chain rounding, changing state,
|
|
61
|
+
* eligibility and tick ordering are excluded. A null limit means unbounded by
|
|
62
|
+
* that constraint, never an unknown balance. No-output scenarios run for zero time
|
|
63
|
+
* and project no upkeep. An initially full hold conservatively permits no mining,
|
|
64
|
+
* even when Food outflow could offset output: tick ordering is not established.
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* declare const estimate: MiningEstimate;
|
|
68
|
+
* console.log(estimate.durationSeconds, estimate.limitingFactors);
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export interface MiningEstimate {
|
|
72
|
+
readonly basis: 'official-model-estimate';
|
|
73
|
+
/** Requested duration clipped to the modeled limits, in seconds. */
|
|
74
|
+
readonly durationSeconds: number;
|
|
75
|
+
readonly outputs: readonly {
|
|
76
|
+
readonly cargoId: number;
|
|
77
|
+
readonly unitsPerSecond: number;
|
|
78
|
+
readonly projectedUnits: number;
|
|
79
|
+
}[];
|
|
80
|
+
readonly resourceVolumeInflowPerSecond: number;
|
|
81
|
+
readonly foodVolumeOutflowPerSecond: number;
|
|
82
|
+
/** May be negative when Food consumption frees more space than mining uses. */
|
|
83
|
+
readonly netCargoGrowthPerSecond: number;
|
|
84
|
+
readonly limitsSeconds: {
|
|
85
|
+
readonly food: number | null;
|
|
86
|
+
readonly ammo: number | null;
|
|
87
|
+
readonly cargo: number | null;
|
|
88
|
+
};
|
|
89
|
+
readonly limitingFactors: readonly MiningEstimateLimit[];
|
|
90
|
+
readonly consumedFoodUnits: number;
|
|
91
|
+
readonly consumedAmmoUnits: number;
|
|
92
|
+
readonly finalOccupiedSpace: number;
|
|
93
|
+
}
|
|
94
|
+
/** Estimates constant-rate Asteroid output, clipping duration to Food, Ammo and
|
|
95
|
+
* cargo capacity. Each rate is Fleet rate / selected count × richness × explicit
|
|
96
|
+
* effective runtime multiplier. Food consumption offsets volume growth while
|
|
97
|
+
* mining; Ammo does not. Hardness is absent from the official current C4 model.
|
|
98
|
+
* This is pure: it neither reads accounts nor validates resource eligibility.
|
|
99
|
+
* @throws InvalidDerivationInputError for invalid selections, inconsistent cargo
|
|
100
|
+
* occupancy, negative/nonfinite values or arithmetic overflow.
|
|
101
|
+
* @example
|
|
102
|
+
* ```ts
|
|
103
|
+
* const estimate = deriveMiningEstimate({
|
|
104
|
+
* fleetUnitsPerSecond: 2, durationSeconds: 60,
|
|
105
|
+
* resources: [{ cargoId: 300, richness: 1, storageCost: 1, runtimeMultiplier: 1 }],
|
|
106
|
+
* cargo: { occupiedSpace: 10, capacity: 100 },
|
|
107
|
+
* food: { availableUnits: 10, burnUnitsPerSecond: 0.1, storageCost: 1 },
|
|
108
|
+
* ammo: { availableUnits: 10, burnUnitsPerSecond: 0.1 },
|
|
109
|
+
* });
|
|
110
|
+
* console.log(estimate.outputs, estimate.limitingFactors);
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
export declare function deriveMiningEstimate(input: MiningEstimateInput): MiningEstimate;
|
|
114
|
+
//# sourceMappingURL=estimate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimate.d.ts","sourceRoot":"","sources":["../../src/mining/estimate.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,mEAAmE;IACnE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,SAAS,2BAA2B,EAAE,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9E,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;KACrC,CAAC;CACH;AAED;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAC7B,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEvD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC;IAC1C,oEAAoE;IACpE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS;QACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;KACjC,EAAE,CAAC;IACJ,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;IAC/C,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC;IAC5C,+EAA+E;IAC/E,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/B,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACzD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAiBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,mBAAmB,GACzB,cAAc,CAmLhB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { InvalidDerivationInputError } from '../client/errors.js';
|
|
2
|
+
import { freezeResolvedSnapshot } from '../internal/resolved-snapshot.js';
|
|
3
|
+
function checked(field, value) {
|
|
4
|
+
if (!Number.isFinite(value) || value < 0) {
|
|
5
|
+
throw new InvalidDerivationInputError(field, value, 'Supply finite, nonnegative mining inputs whose calculated rates, quantities and time limits remain finite.');
|
|
6
|
+
}
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
function invalid(field, value, remedy) {
|
|
10
|
+
throw new InvalidDerivationInputError(field, value, remedy);
|
|
11
|
+
}
|
|
12
|
+
/** Estimates constant-rate Asteroid output, clipping duration to Food, Ammo and
|
|
13
|
+
* cargo capacity. Each rate is Fleet rate / selected count × richness × explicit
|
|
14
|
+
* effective runtime multiplier. Food consumption offsets volume growth while
|
|
15
|
+
* mining; Ammo does not. Hardness is absent from the official current C4 model.
|
|
16
|
+
* This is pure: it neither reads accounts nor validates resource eligibility.
|
|
17
|
+
* @throws InvalidDerivationInputError for invalid selections, inconsistent cargo
|
|
18
|
+
* occupancy, negative/nonfinite values or arithmetic overflow.
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* const estimate = deriveMiningEstimate({
|
|
22
|
+
* fleetUnitsPerSecond: 2, durationSeconds: 60,
|
|
23
|
+
* resources: [{ cargoId: 300, richness: 1, storageCost: 1, runtimeMultiplier: 1 }],
|
|
24
|
+
* cargo: { occupiedSpace: 10, capacity: 100 },
|
|
25
|
+
* food: { availableUnits: 10, burnUnitsPerSecond: 0.1, storageCost: 1 },
|
|
26
|
+
* ammo: { availableUnits: 10, burnUnitsPerSecond: 0.1 },
|
|
27
|
+
* });
|
|
28
|
+
* console.log(estimate.outputs, estimate.limitingFactors);
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export function deriveMiningEstimate(input) {
|
|
32
|
+
const base = checked('Fleet mining units per second', input.fleetUnitsPerSecond);
|
|
33
|
+
const requested = checked('Mining duration seconds', input.durationSeconds);
|
|
34
|
+
const count = input.resources.length;
|
|
35
|
+
if (count < 1 || count > 8)
|
|
36
|
+
invalid('Selected resource count', count, 'Select between one and eight distinct Asteroid resources.');
|
|
37
|
+
const seen = new Set();
|
|
38
|
+
const rates = Array.from(input.resources, (resource, index) => {
|
|
39
|
+
if (resource === null || typeof resource !== 'object') {
|
|
40
|
+
invalid('Selected resource index', index, 'Supply a dense list of resource objects with explicit numeric inputs.');
|
|
41
|
+
}
|
|
42
|
+
const id = resource.cargoId;
|
|
43
|
+
if (!Number.isInteger(id) || id < 0 || id > 65535 || seen.has(id)) {
|
|
44
|
+
invalid('Selected cargo id', id, 'Supply distinct integer cargo ids between 0 and 65535 from the Asteroid deposit.');
|
|
45
|
+
}
|
|
46
|
+
seen.add(id);
|
|
47
|
+
const richness = checked('Resource richness', resource.richness);
|
|
48
|
+
const multiplier = checked('Resource runtime multiplier', resource.runtimeMultiplier);
|
|
49
|
+
const storageCost = checked('Resource storage cost', resource.storageCost);
|
|
50
|
+
const unitsPerSecond = checked('Resource output rate', checked('Richness-adjusted output rate', (base / count) * richness) *
|
|
51
|
+
multiplier);
|
|
52
|
+
return {
|
|
53
|
+
cargoId: id,
|
|
54
|
+
unitsPerSecond,
|
|
55
|
+
volume: checked('Resource volume inflow', unitsPerSecond * storageCost),
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
const capacity = checked('Cargo capacity', input.cargo.capacity);
|
|
59
|
+
const occupied = checked('Occupied cargo space', input.cargo.occupiedSpace);
|
|
60
|
+
if (occupied > capacity)
|
|
61
|
+
invalid('Occupied cargo space', occupied, 'Supply occupancy no greater than cargo capacity.');
|
|
62
|
+
const foodAvailable = checked('Available Food units', input.food.availableUnits);
|
|
63
|
+
const foodBurn = checked('Food burn units per second', input.food.burnUnitsPerSecond);
|
|
64
|
+
const foodStorage = checked('Food storage cost', input.food.storageCost);
|
|
65
|
+
if (checked('Available Food volume', foodAvailable * foodStorage) > occupied) {
|
|
66
|
+
invalid('Occupied cargo space', occupied, 'Include the volume of all available Food in occupied cargo space.');
|
|
67
|
+
}
|
|
68
|
+
const ammoAvailable = checked('Available Ammo units', input.ammo.availableUnits);
|
|
69
|
+
const ammoBurn = checked('Ammo burn units per second', input.ammo.burnUnitsPerSecond);
|
|
70
|
+
const resourceVolumeInflowPerSecond = rates.reduce((sum, row) => checked('Total resource volume inflow', sum + row.volume), 0);
|
|
71
|
+
const foodVolumeOutflowPerSecond = checked('Food volume outflow', foodBurn * foodStorage);
|
|
72
|
+
const netCargoGrowthPerSecond = resourceVolumeInflowPerSecond - foodVolumeOutflowPerSecond;
|
|
73
|
+
const limitsSeconds = {
|
|
74
|
+
food: foodBurn === 0
|
|
75
|
+
? null
|
|
76
|
+
: checked('Food time limit', foodAvailable / foodBurn),
|
|
77
|
+
ammo: ammoBurn === 0
|
|
78
|
+
? null
|
|
79
|
+
: checked('Ammo time limit', ammoAvailable / ammoBurn),
|
|
80
|
+
cargo: occupied === capacity
|
|
81
|
+
? 0
|
|
82
|
+
: netCargoGrowthPerSecond > 0
|
|
83
|
+
? checked('Cargo time limit', (capacity - occupied) / netCargoGrowthPerSecond)
|
|
84
|
+
: null,
|
|
85
|
+
};
|
|
86
|
+
const constraints = [
|
|
87
|
+
['duration', requested],
|
|
88
|
+
['food', limitsSeconds.food],
|
|
89
|
+
['ammo', limitsSeconds.ammo],
|
|
90
|
+
['cargo', limitsSeconds.cargo],
|
|
91
|
+
];
|
|
92
|
+
const noOutput = rates.every((row) => row.unitsPerSecond === 0);
|
|
93
|
+
const durationSeconds = noOutput
|
|
94
|
+
? 0
|
|
95
|
+
: Math.min(...constraints.flatMap(([, seconds]) => seconds === null ? [] : [seconds]));
|
|
96
|
+
const tolerance = Math.max(1e-9, durationSeconds * 1e-9);
|
|
97
|
+
const limitingFactors = noOutput
|
|
98
|
+
? ['no-output']
|
|
99
|
+
: constraints
|
|
100
|
+
.filter(([, seconds]) => seconds !== null &&
|
|
101
|
+
Math.abs(seconds - durationSeconds) <= tolerance)
|
|
102
|
+
.map(([reason]) => reason);
|
|
103
|
+
const consumedFoodUnits = checked('Consumed Food units', foodBurn * durationSeconds);
|
|
104
|
+
const consumedAmmoUnits = checked('Consumed Ammo units', ammoBurn * durationSeconds);
|
|
105
|
+
const inflow = checked('Projected cargo inflow', resourceVolumeInflowPerSecond * durationSeconds);
|
|
106
|
+
const outflow = checked('Projected Food outflow', foodVolumeOutflowPerSecond * durationSeconds);
|
|
107
|
+
// Subtract Food first to avoid overflowing a temporary sum near Number.MAX_VALUE.
|
|
108
|
+
const finalOccupiedSpace = Math.min(capacity, checked('Projected occupied cargo space', Math.max(0, occupied - outflow) + inflow));
|
|
109
|
+
return freezeResolvedSnapshot({
|
|
110
|
+
basis: 'official-model-estimate',
|
|
111
|
+
durationSeconds,
|
|
112
|
+
outputs: rates.map(({ cargoId, unitsPerSecond }) => ({
|
|
113
|
+
cargoId,
|
|
114
|
+
unitsPerSecond,
|
|
115
|
+
projectedUnits: checked('Projected resource units', unitsPerSecond * durationSeconds),
|
|
116
|
+
})),
|
|
117
|
+
resourceVolumeInflowPerSecond,
|
|
118
|
+
foodVolumeOutflowPerSecond,
|
|
119
|
+
netCargoGrowthPerSecond,
|
|
120
|
+
limitsSeconds,
|
|
121
|
+
limitingFactors,
|
|
122
|
+
consumedFoodUnits,
|
|
123
|
+
consumedAmmoUnits,
|
|
124
|
+
finalOccupiedSpace,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=estimate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimate.js","sourceRoot":"","sources":["../../src/mining/estimate.ts"],"names":[],"mappings":"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"}
|