@aephia/atlas-kit 0.6.0-next.1 → 0.6.0-next.100
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 +7 -3
- package/dist/cargo/actions/deposit.d.ts +44 -0
- package/dist/cargo/actions/deposit.d.ts.map +1 -0
- package/dist/cargo/actions/deposit.js +212 -0
- package/dist/cargo/actions/deposit.js.map +1 -0
- package/dist/cargo/actions/index.d.ts +2 -0
- package/dist/cargo/actions/index.d.ts.map +1 -1
- package/dist/cargo/actions/index.js +12 -15
- package/dist/cargo/actions/index.js.map +1 -1
- package/dist/cargo/actions/wallet-context.d.ts +14 -0
- package/dist/cargo/actions/wallet-context.d.ts.map +1 -0
- package/dist/cargo/actions/wallet-context.js +12 -0
- package/dist/cargo/actions/wallet-context.js.map +1 -0
- package/dist/cargo/actions/wallet-token.d.ts +8 -0
- package/dist/cargo/actions/wallet-token.d.ts.map +1 -0
- package/dist/cargo/actions/wallet-token.js +50 -0
- package/dist/cargo/actions/wallet-token.js.map +1 -0
- package/dist/cargo/actions/withdrawal.d.ts +46 -0
- package/dist/cargo/actions/withdrawal.d.ts.map +1 -0
- package/dist/cargo/actions/withdrawal.js +266 -0
- package/dist/cargo/actions/withdrawal.js.map +1 -0
- 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 +137 -111
- 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 +104 -67
- 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 +101 -108
- 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 +36 -0
- package/dist/factions/actions/index.d.ts.map +1 -0
- package/dist/factions/actions/index.js +137 -0
- package/dist/factions/actions/index.js.map +1 -0
- package/dist/factions/index.d.ts +1 -0
- package/dist/factions/index.d.ts.map +1 -1
- package/dist/factions/index.js +14 -7
- package/dist/factions/index.js.map +1 -1
- package/dist/factions/profile-faction.d.ts +58 -0
- package/dist/factions/profile-faction.d.ts.map +1 -0
- package/dist/factions/profile-faction.js +63 -0
- package/dist/factions/profile-faction.js.map +1 -0
- 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 +38 -16
- package/dist/fleets/actions/index.d.ts.map +1 -1
- package/dist/fleets/actions/index.js +246 -153
- 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 +48 -0
- package/dist/fleets/actions/ship-import.d.ts.map +1 -0
- package/dist/fleets/actions/ship-import.js +332 -0
- package/dist/fleets/actions/ship-import.js.map +1 -0
- 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/create-profile.d.ts +56 -0
- package/dist/identity/actions/create-profile.d.ts.map +1 -0
- package/dist/identity/actions/create-profile.js +139 -0
- package/dist/identity/actions/create-profile.js.map +1 -0
- package/dist/identity/actions/index.d.ts +38 -0
- package/dist/identity/actions/index.d.ts.map +1 -0
- package/dist/identity/actions/index.js +130 -0
- package/dist/identity/actions/index.js.map +1 -0
- package/dist/identity/index.d.ts +16 -0
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +16 -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/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/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 +11 -0
- package/dist/internal/c4/character-registration.d.ts.map +1 -0
- package/dist/internal/c4/character-registration.js +23 -0
- package/dist/internal/c4/character-registration.js.map +1 -0
- 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 +25 -33
- package/dist/internal/c4/crafting.d.ts.map +1 -1
- package/dist/internal/c4/crafting.js +53 -44
- 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-enrollment.d.ts +6 -0
- package/dist/internal/c4/faction-enrollment.d.ts.map +1 -0
- package/dist/internal/c4/faction-enrollment.js +8 -0
- package/dist/internal/c4/faction-enrollment.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 +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 +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 +53 -0
- package/dist/internal/c4/game.d.ts.map +1 -1
- package/dist/internal/c4/game.js +130 -5
- package/dist/internal/c4/game.js.map +1 -1
- package/dist/internal/c4/identity.d.ts +6 -9
- 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-creation.d.ts +17 -0
- package/dist/internal/c4/profile-creation.d.ts.map +1 -0
- package/dist/internal/c4/profile-creation.js +36 -0
- package/dist/internal/c4/profile-creation.js.map +1 -0
- package/dist/internal/c4/profile-faction.d.ts.map +1 -1
- package/dist/internal/c4/profile-faction.js +2 -0
- package/dist/internal/c4/profile-faction.js.map +1 -1
- 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 +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 +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/wallet-cargo-cache.d.ts +3 -0
- package/dist/internal/c4/wallet-cargo-cache.d.ts.map +1 -0
- package/dist/internal/c4/wallet-cargo-cache.js +24 -0
- package/dist/internal/c4/wallet-cargo-cache.js.map +1 -0
- 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/account-state.d.ts +4 -0
- package/dist/internal/planning/account-state.d.ts.map +1 -0
- package/dist/internal/planning/account-state.js +11 -0
- package/dist/internal/planning/account-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 +65 -35
- package/dist/internal/planning/authorization-adapter.d.ts.map +1 -1
- package/dist/internal/planning/authorization-adapter.js +217 -70
- 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/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 +10 -0
- package/dist/internal/planning/faction-enrollment.d.ts.map +1 -0
- package/dist/internal/planning/faction-enrollment.js +46 -0
- package/dist/internal/planning/faction-enrollment.js.map +1 -0
- 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 +166 -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/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 +43 -0
- package/dist/internal/planning/runtime-guards.d.ts.map +1 -0
- package/dist/internal/planning/runtime-guards.js +638 -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 +9 -0
- package/dist/internal/planning/ship-token.d.ts.map +1 -0
- package/dist/internal/planning/ship-token.js +46 -0
- package/dist/internal/planning/ship-token.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/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 +7 -20
- 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 +142 -36
- 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 +332 -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 +30 -2
- 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 +580 -38
- package/dist/planning/execution.js.map +1 -1
- package/dist/planning/index.d.ts +243 -64
- package/dist/planning/index.d.ts.map +1 -1
- package/dist/planning/index.js +1012 -57
- 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/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 +11 -1
- package/dist/registry/cargo.d.ts.map +1 -1
- package/dist/registry/cargo.js +42 -1
- 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 +14 -0
- package/dist/registry/onboarding.d.ts.map +1 -0
- package/dist/registry/onboarding.js +37 -0
- package/dist/registry/onboarding.js.map +1 -0
- 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 +30 -0
- package/dist/registry/ships.d.ts.map +1 -0
- package/dist/registry/ships.js +62 -0
- package/dist/registry/ships.js.map +1 -0
- 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 +18 -2
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { InvalidActionInputError, SageSdkError } from '../../client/errors.js';
|
|
2
|
+
import { deriveFleetCreationAddress, emptyDockedFleetSize, } from '../c4/fleet-creation.js';
|
|
3
|
+
import { profileAccountDefinition, characterAccountDefinition, findCharacterPda, } from '../c4/identity.js';
|
|
4
|
+
import { profileFactionAccountDefinition, deriveProfileFactionAddress, } from '../c4/profile-faction.js';
|
|
5
|
+
import { starbasePlayerAccountDefinition, deriveStarbasePlayerAddress, } from '../c4/starbase.js';
|
|
6
|
+
import { starSystemAccountDefinition, deriveStarSystemAddress, } from '../c4/world.js';
|
|
7
|
+
import { PROFILE_SCOPE, SAGE_SCOPE } from '../c4/profile-permissions.js';
|
|
8
|
+
import { CLOCK_ADDRESS, readClock } from './faction-enrollment.js';
|
|
9
|
+
import { RENT_ADDRESS, readRent } from './rent.js';
|
|
10
|
+
export function validateFleetCreationLabel(label) {
|
|
11
|
+
if (typeof label !== 'string' ||
|
|
12
|
+
label.trim().length === 0 ||
|
|
13
|
+
label.includes('\0') ||
|
|
14
|
+
new TextDecoder('utf-8', { ignoreBOM: true }).decode(new TextEncoder().encode(label)) !== label ||
|
|
15
|
+
new TextEncoder().encode(label).length > 64)
|
|
16
|
+
throw new InvalidActionInputError('options.label', label, 'a nonblank, valid UTF-8 Fleet label of at most 64 bytes without NUL', 'Choose a valid Fleet label. Accepted whitespace is preserved in the canonical Fleet address.');
|
|
17
|
+
}
|
|
18
|
+
export async function resolveFleetCreation(input) {
|
|
19
|
+
const intent = { ...input };
|
|
20
|
+
validateFleetCreationLabel(intent.label);
|
|
21
|
+
const [character, profileFaction, fleet] = await Promise.all([
|
|
22
|
+
findCharacterPda(intent.profile, intent.game),
|
|
23
|
+
deriveProfileFactionAddress(intent.profile),
|
|
24
|
+
deriveFleetCreationAddress(intent.game, intent.profile, intent.label),
|
|
25
|
+
]);
|
|
26
|
+
return {
|
|
27
|
+
game: intent.game,
|
|
28
|
+
profile: intent.profile,
|
|
29
|
+
authority: intent.authority,
|
|
30
|
+
system: intent.system,
|
|
31
|
+
character,
|
|
32
|
+
profileFaction,
|
|
33
|
+
fleet,
|
|
34
|
+
starbasePlayer: await deriveStarbasePlayerAddress(intent.system, character),
|
|
35
|
+
rent: RENT_ADDRESS,
|
|
36
|
+
clock: CLOCK_ADDRESS,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function fail(address, message) {
|
|
40
|
+
throw new SageSdkError('ACTION_PRECONDITION_FAILED', message, { address });
|
|
41
|
+
}
|
|
42
|
+
export async function validateFleetCreation(input, resolved, accounts, maximumProfileDebit) {
|
|
43
|
+
const intent = { ...input };
|
|
44
|
+
const required = (address, name) => {
|
|
45
|
+
const raw = accounts.get(address);
|
|
46
|
+
if (!raw)
|
|
47
|
+
fail(address, `${name} ${address} is missing. Create or select the required account, then replan Fleet creation.`);
|
|
48
|
+
if (raw.address !== address || raw.executable)
|
|
49
|
+
fail(address, `${name} ${address} has a contradictory address or is executable. Refresh valid account state before creating a Fleet.`);
|
|
50
|
+
return raw;
|
|
51
|
+
};
|
|
52
|
+
const profileRaw = required(resolved.profile, 'Profile');
|
|
53
|
+
const profile = profileAccountDefinition.decode(profileRaw);
|
|
54
|
+
const character = characterAccountDefinition.decode(required(resolved.character, 'Character'));
|
|
55
|
+
const faction = profileFactionAccountDefinition.decode(required(resolved.profileFaction, 'ProfileFaction'));
|
|
56
|
+
const system = starSystemAccountDefinition.decode(required(resolved.system, 'Star System'));
|
|
57
|
+
const player = starbasePlayerAccountDefinition.decode(required(resolved.starbasePlayer, 'StarbasePlayer'));
|
|
58
|
+
if (character.game !== intent.game ||
|
|
59
|
+
character.playerProfile !== intent.profile)
|
|
60
|
+
fail(resolved.character, 'The Character belongs to a different Game or Profile. Refresh the canonical Character and replan Fleet creation.');
|
|
61
|
+
if (faction.profile !== intent.profile)
|
|
62
|
+
fail(resolved.profileFaction, 'The faction membership belongs to a different Profile. Refresh the canonical membership before creating a Fleet.');
|
|
63
|
+
if (system.game !== intent.game ||
|
|
64
|
+
(await deriveStarSystemAddress(system.game, system.systemId)) !==
|
|
65
|
+
intent.system ||
|
|
66
|
+
!system.starbase)
|
|
67
|
+
fail(resolved.system, 'The selected System is not canonical for this Game or has no Starbase. Choose a valid Starbase System and replan.');
|
|
68
|
+
if (player.playerProfile !== intent.profile ||
|
|
69
|
+
player.character !== resolved.character ||
|
|
70
|
+
player.system !== intent.system ||
|
|
71
|
+
player.faction !== faction.faction)
|
|
72
|
+
fail(resolved.starbasePlayer, 'The StarbasePlayer has a different Profile, Character, System or faction relationship. Refresh the canonical StarbasePlayer and replan.');
|
|
73
|
+
if (faction.faction === 'unaligned' ||
|
|
74
|
+
system.starbase.owner !== faction.faction)
|
|
75
|
+
fail(resolved.system, 'This planner supports an existing own-faction StarbasePlayer only. Select an own-faction Starbase; other diplomacy or access routes require separate supported planning.');
|
|
76
|
+
if (character.counts.fleets >= character.modifiers.values.fleetConcurrency)
|
|
77
|
+
fail(resolved.character, 'The Character has no available Fleet slots in its current stored capacity. Free a Fleet slot or refresh changed Character modifiers, then replan.');
|
|
78
|
+
const target = accounts.get(resolved.fleet);
|
|
79
|
+
if (target &&
|
|
80
|
+
(target.address !== resolved.fleet ||
|
|
81
|
+
target.executable ||
|
|
82
|
+
target.owner !== '11111111111111111111111111111111' ||
|
|
83
|
+
target.data.length !== 0))
|
|
84
|
+
fail(resolved.fleet, 'The canonical Fleet target already contains state or has a conflicting owner. Reuse the existing Fleet or choose a different label and replan.');
|
|
85
|
+
const rent = readRent(required(resolved.rent, 'Rent sysvar'));
|
|
86
|
+
const now = readClock(required(resolved.clock, 'Clock sysvar'));
|
|
87
|
+
const fleetRent = rent(emptyDockedFleetSize());
|
|
88
|
+
const balance = target?.lamports ?? 0n;
|
|
89
|
+
const profileDebit = balance < fleetRent ? fleetRent - balance : 0n;
|
|
90
|
+
if (maximumProfileDebit !== undefined && profileDebit > maximumProfileDebit)
|
|
91
|
+
fail(resolved.profile, 'Fleet creation now requires a larger Profile debit than this Plan approved. Replan and inspect the updated rent shortfall before signing.');
|
|
92
|
+
const profileReserve = rent(profileRaw.data.length);
|
|
93
|
+
if (profileRaw.lamports < profileReserve + profileDebit)
|
|
94
|
+
fail(resolved.profile, 'The Profile lacks the Fleet rent shortfall while preserving its own rent reserve. Fund the Profile or Fleet target explicitly, then replan.');
|
|
95
|
+
const key = profile.keys[intent.keyIndex];
|
|
96
|
+
if (!key || key.address !== intent.authority)
|
|
97
|
+
fail(resolved.profile, 'The selected direct Profile key is absent or belongs to another authority. Select the current key index for this authority and replan.');
|
|
98
|
+
if (key.expiresAtRaw >= 0n && key.expiresAtRaw < now)
|
|
99
|
+
fail(resolved.profile, 'The selected Profile key has expired. Renew it or select a current direct key and replan Fleet creation.');
|
|
100
|
+
const auth = key.scope === PROFILE_SCOPE && (key.permissionsRaw & 1n) !== 0n;
|
|
101
|
+
const manages = key.scope === SAGE_SCOPE && (key.permissionsRaw & (1n << 18n)) !== 0n;
|
|
102
|
+
if (!auth && !manages)
|
|
103
|
+
fail(resolved.profile, 'The selected key cannot manage Fleets. Use a direct Profile AUTH key or a SAGE manageFleet key and replan.');
|
|
104
|
+
if (profileDebit > 0n && !auth && (key.permissionsRaw & (1n << 63n)) === 0n)
|
|
105
|
+
fail(resolved.profile, 'The selected manageFleet key cannot fund the Fleet from the Profile vault. Explicitly prefund the target or choose an authorized vault-funding key, then replan; drainSolVault grants vault withdrawal authority.');
|
|
106
|
+
return { profileDebit, profileReserve, fleetRent };
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=fleet-creation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-creation.js","sourceRoot":"","sources":["../../../src/internal/planning/fleet-creation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { AccountRole, type Address } from '@solana/kit';
|
|
2
|
+
import type { PlanPrecondition, PlanStep } from '../../planning/index.js';
|
|
3
|
+
export interface FleetCrewGuard {
|
|
4
|
+
readonly kind: 'fleet-crew-transfer';
|
|
5
|
+
readonly direction: 'load' | 'unload';
|
|
6
|
+
readonly address: Address;
|
|
7
|
+
readonly game: Address;
|
|
8
|
+
readonly profile: Address;
|
|
9
|
+
readonly authority: Address;
|
|
10
|
+
readonly system: Address;
|
|
11
|
+
readonly starbasePlayer: Address;
|
|
12
|
+
readonly keyIndex: number;
|
|
13
|
+
readonly count: number;
|
|
14
|
+
readonly systemSequenceId: bigint;
|
|
15
|
+
readonly describes: string;
|
|
16
|
+
readonly dataHash?: never;
|
|
17
|
+
}
|
|
18
|
+
export declare function crewTransferInstruction(g: Omit<FleetCrewGuard, 'kind' | 'systemSequenceId' | 'describes'>): {
|
|
19
|
+
programAddress: Address<"C4SAgeKLgb3pTLWhVr6NRwWyYFuTR7ZeSXFrzoLwfMzF">;
|
|
20
|
+
accounts: {
|
|
21
|
+
address: Address;
|
|
22
|
+
role: AccountRole;
|
|
23
|
+
}[];
|
|
24
|
+
data: Uint8Array<ArrayBuffer>;
|
|
25
|
+
};
|
|
26
|
+
/** Ordinary crew transfers stand alone: later instructions cannot bypass fresh balance checks. */
|
|
27
|
+
export declare function validateCrewTransferInstructions(steps: readonly PlanStep[], guards: readonly PlanPrecondition[]): void;
|
|
28
|
+
//# sourceMappingURL=fleet-crew-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-crew-guard.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/fleet-crew-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAQxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC1E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;CAC3B;AACD,wBAAgB,uBAAuB,CACrC,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,kBAAkB,GAAG,WAAW,CAAC;;;;;;;EAyBnE;AACD,kGAAkG;AAClG,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAClC,IAAI,CAqCN"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { AccountRole } from '@solana/kit';
|
|
2
|
+
import { SAGE_PROGRAM_ADDRESS, PLAYER_PROFILE_PROGRAM_ADDRESS, LOAD_FLEET_CREW_DISCRIMINATOR, UNLOAD_FLEET_CREW_DISCRIMINATOR, } from '../c4/runtime-bindings.js';
|
|
3
|
+
import { InvalidActionInputError } from '../../client/errors.js';
|
|
4
|
+
export function crewTransferInstruction(g) {
|
|
5
|
+
return {
|
|
6
|
+
programAddress: SAGE_PROGRAM_ADDRESS,
|
|
7
|
+
accounts: [
|
|
8
|
+
{ address: g.authority, role: AccountRole.READONLY_SIGNER },
|
|
9
|
+
{ address: g.profile, role: AccountRole.WRITABLE },
|
|
10
|
+
{ address: SAGE_PROGRAM_ADDRESS, role: AccountRole.READONLY },
|
|
11
|
+
{ address: PLAYER_PROFILE_PROGRAM_ADDRESS, role: AccountRole.READONLY },
|
|
12
|
+
{ address: g.address, role: AccountRole.WRITABLE },
|
|
13
|
+
{ address: g.game, role: AccountRole.READONLY },
|
|
14
|
+
{ address: g.system, role: AccountRole.READONLY },
|
|
15
|
+
{ address: g.starbasePlayer, role: AccountRole.WRITABLE },
|
|
16
|
+
],
|
|
17
|
+
// Pinned ordinary crew payload: discriminator, u16 count, u16 key index.
|
|
18
|
+
data: Uint8Array.of(...(g.direction === 'load'
|
|
19
|
+
? LOAD_FLEET_CREW_DISCRIMINATOR
|
|
20
|
+
: UNLOAD_FLEET_CREW_DISCRIMINATOR), g.count & 255, g.count >>> 8, g.keyIndex & 255, g.keyIndex >>> 8),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** Ordinary crew transfers stand alone: later instructions cannot bypass fresh balance checks. */
|
|
24
|
+
export function validateCrewTransferInstructions(steps, guards) {
|
|
25
|
+
const selected = guards.filter((g) => g.kind === 'fleet-crew-transfer');
|
|
26
|
+
const transfers = steps.filter(({ instruction: i }) => i.programAddress === SAGE_PROGRAM_ADDRESS &&
|
|
27
|
+
[LOAD_FLEET_CREW_DISCRIMINATOR, UNLOAD_FLEET_CREW_DISCRIMINATOR].some((d) => d.every((v, n) => i.data?.[n] === v)));
|
|
28
|
+
if (!selected.length && !transfers.length)
|
|
29
|
+
return;
|
|
30
|
+
const bad = () => {
|
|
31
|
+
throw new InvalidActionInputError('crewTransfer', undefined, 'one standalone ordinary crew transfer and its exact matching safeguard', 'Recreate the crew transfer Plan; execute each transfer separately and refresh crew balances before preparing another action.');
|
|
32
|
+
};
|
|
33
|
+
if (steps.length !== 1 || selected.length !== 1 || transfers.length !== 1)
|
|
34
|
+
bad();
|
|
35
|
+
const g = selected[0];
|
|
36
|
+
const step = transfers[0];
|
|
37
|
+
const expected = crewTransferInstruction(g), actual = step.instruction;
|
|
38
|
+
if (step.signers.length !== 1 ||
|
|
39
|
+
step.signers[0] !== g.authority ||
|
|
40
|
+
actual.accounts?.length !== expected.accounts.length ||
|
|
41
|
+
expected.accounts.some((a, n) => actual.accounts?.[n]?.address !== a.address ||
|
|
42
|
+
actual.accounts[n]?.role !== a.role) ||
|
|
43
|
+
actual.data?.length !== expected.data.length ||
|
|
44
|
+
expected.data.some((v, n) => actual.data?.[n] !== v))
|
|
45
|
+
bad();
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=fleet-crew-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-crew-guard.js","sourceRoot":"","sources":["../../../src/internal/planning/fleet-crew-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Commitment } from '@solana/kit';
|
|
2
|
+
import type { SageContext } from '../../client/contracts.js';
|
|
3
|
+
import type { FleetCrewGuard } from './fleet-crew-guard.js';
|
|
4
|
+
export type FleetCrewIntent = Pick<FleetCrewGuard, 'address' | 'game' | 'profile' | 'authority' | 'keyIndex' | 'direction' | 'count'>;
|
|
5
|
+
/** Fresh count predicates and canonical relationships, shared by planning and execution. */
|
|
6
|
+
export declare function resolveFleetCrewTransfer(ctx: SageContext, intent: FleetCrewIntent, expected?: FleetCrewGuard, commitment?: Commitment): Promise<Pick<FleetCrewGuard, 'system' | 'starbasePlayer' | 'systemSequenceId'>>;
|
|
7
|
+
//# sourceMappingURL=fleet-crew-transfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-crew-transfer.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/fleet-crew-transfer.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAGV,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAyBnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,cAAc,EACZ,SAAS,GACT,MAAM,GACN,SAAS,GACT,WAAW,GACX,UAAU,GACV,WAAW,GACX,OAAO,CACV,CAAC;AAOF,4FAA4F;AAC5F,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,eAAe,EACvB,QAAQ,CAAC,EAAE,cAAc,EACzB,UAAU,GAAE,UAAwB,GACnC,OAAO,CACR,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,CACvE,CAqKA"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { isOffCurveAddress, getProgramDerivedAddress, getAddressEncoder, getU16Encoder, } from '@solana/kit';
|
|
2
|
+
import { SAGE_PROGRAM_ADDRESS } from '../c4/runtime-bindings.js';
|
|
3
|
+
import { SageSdkError } from '../../client/errors.js';
|
|
4
|
+
import { readContextRawAccounts } from '../../client/reconciliation.js';
|
|
5
|
+
import { requireGameAddress } from '../game-context.js';
|
|
6
|
+
import { readFreshGameShipDefinitionSequence } from '../../registry/ships.js';
|
|
7
|
+
import { fleetAccountDefinition, deriveFleetAddress } from '../c4/fleet.js';
|
|
8
|
+
import { findCharacterPda, characterAccountDefinition, profileAccountDefinition, } from '../c4/identity.js';
|
|
9
|
+
import { deriveStarbasePlayerAddress, starbasePlayerAccountDefinition, } from '../c4/starbase.js';
|
|
10
|
+
import { deriveStarSystemAddress, starSystemAccountDefinition, } from '../c4/world.js';
|
|
11
|
+
import { deriveFleetCrewBindingAddress, fleetCrewBindingAccountDefinition, } from '../c4/fleet-crew-binding.js';
|
|
12
|
+
import { PROFILE_SCOPE } from '../c4/profile-permissions.js';
|
|
13
|
+
import { CLOCK_ADDRESS, readClock } from './faction-enrollment.js';
|
|
14
|
+
function fail(message) {
|
|
15
|
+
throw new SageSdkError('ACTION_PRECONDITION_FAILED', `${message} Refresh the owned Docked Fleet and Starbase crew, then recreate the crew transfer Plan.`);
|
|
16
|
+
}
|
|
17
|
+
/** Fresh count predicates and canonical relationships, shared by planning and execution. */
|
|
18
|
+
export async function resolveFleetCrewTransfer(ctx, intent, expected, commitment = 'confirmed') {
|
|
19
|
+
if (requireGameAddress(ctx) !== intent.game ||
|
|
20
|
+
isOffCurveAddress(intent.authority))
|
|
21
|
+
fail('Crew transfer requires this deployment and an on-curve direct Profile authority.');
|
|
22
|
+
const [fleetRaw] = await readContextRawAccounts(ctx, [intent.address], {
|
|
23
|
+
commitment,
|
|
24
|
+
});
|
|
25
|
+
if (!fleetRaw || fleetRaw.address !== intent.address || fleetRaw.executable)
|
|
26
|
+
fail('The selected Fleet is missing, executable or has a contradictory address.');
|
|
27
|
+
const fleet = fleetAccountDefinition.decode(fleetRaw);
|
|
28
|
+
if (fleet.game !== intent.game ||
|
|
29
|
+
fleet.ownerProfile !== intent.profile ||
|
|
30
|
+
(await deriveFleetAddress(fleet)) !== intent.address ||
|
|
31
|
+
fleet.npcFactionId !== 0 ||
|
|
32
|
+
fleet.subProfile !== '11111111111111111111111111111111')
|
|
33
|
+
fail('Crew transfer supports only a canonical directly owned player Fleet without a subprofile.');
|
|
34
|
+
if (fleet.state.kind !== 'docked')
|
|
35
|
+
fail('Crew can be transferred only while the Fleet is Docked.');
|
|
36
|
+
if (fleet.rentedCrew !== 0)
|
|
37
|
+
fail('Rented crew transfers are not supported by this ordinary-crew route. Manage the rental through a supported game client first.');
|
|
38
|
+
const systemAddress = fleet.state.system;
|
|
39
|
+
const [characterAddress, bindingAddress] = await Promise.all([
|
|
40
|
+
findCharacterPda(intent.profile, intent.game),
|
|
41
|
+
deriveFleetCrewBindingAddress(intent.address),
|
|
42
|
+
]);
|
|
43
|
+
const [playerAddress, [rosterAddress]] = await Promise.all([
|
|
44
|
+
deriveStarbasePlayerAddress(systemAddress, characterAddress),
|
|
45
|
+
getProgramDerivedAddress({
|
|
46
|
+
programAddress: SAGE_PROGRAM_ADDRESS,
|
|
47
|
+
seeds: [
|
|
48
|
+
new TextEncoder().encode('CrewRoster'),
|
|
49
|
+
getAddressEncoder().encode(characterAddress),
|
|
50
|
+
getU16Encoder().encode(0),
|
|
51
|
+
],
|
|
52
|
+
}),
|
|
53
|
+
]);
|
|
54
|
+
const addresses = [
|
|
55
|
+
intent.profile,
|
|
56
|
+
characterAddress,
|
|
57
|
+
systemAddress,
|
|
58
|
+
playerAddress,
|
|
59
|
+
bindingAddress,
|
|
60
|
+
rosterAddress,
|
|
61
|
+
CLOCK_ADDRESS,
|
|
62
|
+
];
|
|
63
|
+
const [rows, shipSequence] = await Promise.all([
|
|
64
|
+
readContextRawAccounts(ctx, addresses, { commitment }),
|
|
65
|
+
readFreshGameShipDefinitionSequence(ctx, { commitment }),
|
|
66
|
+
]);
|
|
67
|
+
if (rows.length !== addresses.length ||
|
|
68
|
+
rows.some((raw, i) => raw && (raw.address !== addresses[i] || raw.executable)))
|
|
69
|
+
fail('Crew transfer reads contain missing positions, contradictory addresses or executable accounts.');
|
|
70
|
+
const accounts = new Map(addresses.map((a, i) => [a, rows[i]]));
|
|
71
|
+
const required = (a) => accounts.get(a) ?? fail(`Required crew transfer account ${a} is missing.`);
|
|
72
|
+
const profile = profileAccountDefinition.decode(required(intent.profile));
|
|
73
|
+
const character = characterAccountDefinition.decode(required(characterAddress));
|
|
74
|
+
const system = starSystemAccountDefinition.decode(required(systemAddress));
|
|
75
|
+
const player = starbasePlayerAccountDefinition.decode(required(playerAddress));
|
|
76
|
+
if (character.game !== intent.game ||
|
|
77
|
+
character.playerProfile !== intent.profile ||
|
|
78
|
+
system.game !== intent.game ||
|
|
79
|
+
(await deriveStarSystemAddress(system.game, system.systemId)) !==
|
|
80
|
+
systemAddress ||
|
|
81
|
+
!system.starbase ||
|
|
82
|
+
player.playerProfile !== intent.profile ||
|
|
83
|
+
player.character !== characterAddress ||
|
|
84
|
+
player.system !== systemAddress ||
|
|
85
|
+
player.faction !== fleet.faction)
|
|
86
|
+
fail('The Character, System or StarbasePlayer does not match the canonical Game and Profile relationships.');
|
|
87
|
+
if (fleet.state.systemSeqId !== system.sequenceId ||
|
|
88
|
+
player.sequenceId !== system.sequenceId ||
|
|
89
|
+
(expected &&
|
|
90
|
+
(expected.system !== systemAddress ||
|
|
91
|
+
expected.starbasePlayer !== playerAddress ||
|
|
92
|
+
expected.systemSequenceId !== system.sequenceId)))
|
|
93
|
+
fail('The docking System or Starbase generation changed. Reconcile docking through the game before transferring crew.');
|
|
94
|
+
if (fleet.shipDefinitionsSeqId !== shipSequence)
|
|
95
|
+
fail('Fleet stats use stale ship definitions. Refresh the Fleet through a supported game client before checking crew capacity.');
|
|
96
|
+
if (accounts.get(rosterAddress))
|
|
97
|
+
fail('This Character has an individual-crew roster. This planner supports only ordinary crew with no page-0 roster; use the supported game client for roster-aware transfers.');
|
|
98
|
+
const binding = accounts.get(bindingAddress);
|
|
99
|
+
if (binding && !fleetCrewBindingAccountDefinition.decode(binding).isNeutral)
|
|
100
|
+
fail('The Fleet has a populated or unsupported crew binding. Use roster-aware transfer through a supported game client.');
|
|
101
|
+
const now = readClock(required(CLOCK_ADDRESS));
|
|
102
|
+
const key = profile.keys[intent.keyIndex];
|
|
103
|
+
if (!key ||
|
|
104
|
+
key.address !== intent.authority ||
|
|
105
|
+
(key.expiresAtRaw >= 0n && key.expiresAtRaw < now) ||
|
|
106
|
+
key.scope !== PROFILE_SCOPE ||
|
|
107
|
+
(key.permissionsRaw & 1n) === 0n)
|
|
108
|
+
fail('Crew transfer requires a current direct Profile AUTH key. Select the correct key index; restricted or delegated crew permissions are not qualified.');
|
|
109
|
+
const capacity = fleet.stats.misc.requiredCrew + fleet.stats.misc.passengerCapacity;
|
|
110
|
+
if (player.busyCrew > player.totalCrew)
|
|
111
|
+
fail('Starbase busy crew exceeds its total crew; reconcile the Starbase state before transferring.');
|
|
112
|
+
if (intent.direction === 'load') {
|
|
113
|
+
if (player.totalCrew - player.busyCrew < intent.count)
|
|
114
|
+
fail('The Starbase has too few available crew; finish their current assignments or reduce the requested count.');
|
|
115
|
+
if (fleet.crewCount + intent.count > capacity ||
|
|
116
|
+
fleet.crewCount + intent.count > 65535)
|
|
117
|
+
fail('The requested crew exceed the Fleet required-crew plus passenger capacity; reduce the count.');
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
if (fleet.crewCount < intent.count)
|
|
121
|
+
fail('The Fleet has fewer crew aboard than requested; reduce the unload count.');
|
|
122
|
+
if (player.totalCrew + intent.count > 4294967295)
|
|
123
|
+
fail('The Starbase total crew would exceed its stored limit; select a smaller count.');
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
system: systemAddress,
|
|
127
|
+
starbasePlayer: playerAddress,
|
|
128
|
+
systemSequenceId: system.sequenceId,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=fleet-crew-transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-crew-transfer.js","sourceRoot":"","sources":["../../../src/internal/planning/fleet-crew-transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type Address } from '@solana/kit';
|
|
2
|
+
import type { PlanPrecondition, PlanStep } from '../../planning/index.js';
|
|
3
|
+
import type { RuntimeWire } from './runtime-guards.js';
|
|
4
|
+
export declare const MAXIMUM_DOCK_GROWTH_BYTES = 40;
|
|
5
|
+
declare const REASONS: readonly ["unsupported-account-layout", "unsupported-fleet-state", "noncanonical-account-encoding", "stale-definition-sequences", "stale-starbase-sequence", "pending-recovery", "active-stimulants", "funding-state-unavailable", "accounts-below-rent-reserve", "profile-below-storage-ceiling"];
|
|
6
|
+
export type DockBoundsUnavailableReason = (typeof REASONS)[number];
|
|
7
|
+
export type DockFundingAmounts = {
|
|
8
|
+
readonly status: 'unavailable';
|
|
9
|
+
readonly reason: DockBoundsUnavailableReason;
|
|
10
|
+
} | {
|
|
11
|
+
readonly status: 'available';
|
|
12
|
+
readonly maximumProfileDebit: bigint;
|
|
13
|
+
readonly fleetDataLengthBytes: number;
|
|
14
|
+
readonly rentLamportsPerByteYear: bigint;
|
|
15
|
+
readonly rentExemptionThreshold: number;
|
|
16
|
+
readonly shipSequenceId: number;
|
|
17
|
+
readonly cargoSequenceId: number;
|
|
18
|
+
readonly starbaseSequenceId: bigint;
|
|
19
|
+
};
|
|
20
|
+
export interface DockFundingIntent {
|
|
21
|
+
readonly address: Address;
|
|
22
|
+
readonly game: Address;
|
|
23
|
+
readonly profile: Address;
|
|
24
|
+
readonly authority: Address;
|
|
25
|
+
readonly certificate: Address;
|
|
26
|
+
readonly keyIndex: number;
|
|
27
|
+
readonly character: Address;
|
|
28
|
+
readonly system: Address;
|
|
29
|
+
readonly starbasePlayer: Address;
|
|
30
|
+
}
|
|
31
|
+
export type FleetDockFundingGuard = DockFundingIntent & DockFundingAmounts & {
|
|
32
|
+
readonly kind: 'fleet-dock-funding';
|
|
33
|
+
readonly describes: string;
|
|
34
|
+
readonly dataHash?: never;
|
|
35
|
+
};
|
|
36
|
+
export declare function dockGrowthDebit(rate: bigint, threshold: number, length: number): bigint;
|
|
37
|
+
export declare function normalizeFleetDockFundingGuard(value: Record<string, unknown>, wire?: boolean): FleetDockFundingGuard;
|
|
38
|
+
export declare function dockFundingGuardToJSON(guard: FleetDockFundingGuard): RuntimeWire<FleetDockFundingGuard>;
|
|
39
|
+
/** Requires one exact funding assertion for each current docking instruction. */
|
|
40
|
+
export declare function validateFleetDockFundingGuards(steps: readonly PlanStep[], guards: readonly PlanPrecondition[]): void;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=fleet-dock-funding-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-dock-funding-guard.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/fleet-dock-funding-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,OAAO,EACb,MAAM,aAAa,CAAC;AAMrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,QAAA,MAAM,OAAO,oSAWH,CAAC;AACX,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AACnE,MAAM,MAAM,kBAAkB,GAC1B;IACE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAC;CAC9C,GACD;IACE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC,CAAC;AACN,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AACD,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GACnD,kBAAkB,GAAG;IACnB,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;CAC3B,CAAC;AACJ,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,MAAM,CAKR;AACD,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,IAAI,UAAQ,GACX,qBAAqB,CA4GvB;AACD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,qBAAqB,GAC3B,WAAW,CAAC,qBAAqB,CAAC,CAOpC;AAqBD,iFAAiF;AACjF,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAClC,IAAI,CAgFN"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { isAddress, isSignerRole, isWritableRole, } from '@solana/kit';
|
|
2
|
+
import { InvalidActionInputError, SageSdkError } from '../../client/errors.js';
|
|
3
|
+
import { IDLE_TO_DOCKED_DISCRIMINATOR, SAGE_PROGRAM_ADDRESS, } from '../c4/runtime-bindings.js';
|
|
4
|
+
import { rentMinimumBalance } from './rent.js';
|
|
5
|
+
export const MAXIMUM_DOCK_GROWTH_BYTES = 40;
|
|
6
|
+
const REASONS = [
|
|
7
|
+
'unsupported-account-layout',
|
|
8
|
+
'unsupported-fleet-state',
|
|
9
|
+
'noncanonical-account-encoding',
|
|
10
|
+
'stale-definition-sequences',
|
|
11
|
+
'stale-starbase-sequence',
|
|
12
|
+
'pending-recovery',
|
|
13
|
+
'active-stimulants',
|
|
14
|
+
'funding-state-unavailable',
|
|
15
|
+
'accounts-below-rent-reserve',
|
|
16
|
+
'profile-below-storage-ceiling',
|
|
17
|
+
];
|
|
18
|
+
export function dockGrowthDebit(rate, threshold, length) {
|
|
19
|
+
return (rentMinimumBalance(rate, threshold, length + MAXIMUM_DOCK_GROWTH_BYTES) -
|
|
20
|
+
rentMinimumBalance(rate, threshold, length));
|
|
21
|
+
}
|
|
22
|
+
export function normalizeFleetDockFundingGuard(value, wire = false) {
|
|
23
|
+
const bad = () => {
|
|
24
|
+
throw new InvalidActionInputError('fleet-dock-funding', value, 'the exact current docking intent, Rent quote and gross storage ceiling', 'Recreate the docking Plan; do not alter its saved qualification or debit fields.');
|
|
25
|
+
};
|
|
26
|
+
const row = { ...value };
|
|
27
|
+
const addresses = [
|
|
28
|
+
'address',
|
|
29
|
+
'game',
|
|
30
|
+
'profile',
|
|
31
|
+
'authority',
|
|
32
|
+
'certificate',
|
|
33
|
+
'character',
|
|
34
|
+
'system',
|
|
35
|
+
'starbasePlayer',
|
|
36
|
+
];
|
|
37
|
+
const quote = [
|
|
38
|
+
'maximumProfileDebit',
|
|
39
|
+
'fleetDataLengthBytes',
|
|
40
|
+
'rentLamportsPerByteYear',
|
|
41
|
+
'rentExemptionThreshold',
|
|
42
|
+
'shipSequenceId',
|
|
43
|
+
'cargoSequenceId',
|
|
44
|
+
'starbaseSequenceId',
|
|
45
|
+
];
|
|
46
|
+
const keys = [
|
|
47
|
+
'kind',
|
|
48
|
+
...addresses,
|
|
49
|
+
'keyIndex',
|
|
50
|
+
'status',
|
|
51
|
+
'describes',
|
|
52
|
+
...(row.status === 'available' ? quote : ['reason']),
|
|
53
|
+
];
|
|
54
|
+
if (keys.some((k) => !Object.hasOwn(row, k)) ||
|
|
55
|
+
Object.keys(row).some((k) => !keys.includes(k)))
|
|
56
|
+
bad();
|
|
57
|
+
for (const k of addresses)
|
|
58
|
+
if (typeof row[k] !== 'string' || !isAddress(row[k]))
|
|
59
|
+
bad();
|
|
60
|
+
if (row.kind !== 'fleet-dock-funding' ||
|
|
61
|
+
typeof row.describes !== 'string' ||
|
|
62
|
+
!row.describes.trim() ||
|
|
63
|
+
!Number.isInteger(row.keyIndex) ||
|
|
64
|
+
row.keyIndex < 0 ||
|
|
65
|
+
row.keyIndex > 65535)
|
|
66
|
+
bad();
|
|
67
|
+
if (row.status === 'available') {
|
|
68
|
+
for (const k of [
|
|
69
|
+
'maximumProfileDebit',
|
|
70
|
+
'rentLamportsPerByteYear',
|
|
71
|
+
'starbaseSequenceId',
|
|
72
|
+
]) {
|
|
73
|
+
if (wire) {
|
|
74
|
+
if (typeof row[k] !== 'string' || !/^(0|[1-9][0-9]*)$/.test(row[k]))
|
|
75
|
+
bad();
|
|
76
|
+
row[k] = BigInt(row[k]);
|
|
77
|
+
}
|
|
78
|
+
if (typeof row[k] !== 'bigint' ||
|
|
79
|
+
row[k] < 0n ||
|
|
80
|
+
row[k] > 0xffffffffffffffffn)
|
|
81
|
+
bad();
|
|
82
|
+
}
|
|
83
|
+
for (const k of [
|
|
84
|
+
'fleetDataLengthBytes',
|
|
85
|
+
'shipSequenceId',
|
|
86
|
+
'cargoSequenceId',
|
|
87
|
+
])
|
|
88
|
+
if (!Number.isInteger(row[k]) ||
|
|
89
|
+
row[k] < 0 ||
|
|
90
|
+
row[k] > 0xffffffff)
|
|
91
|
+
bad();
|
|
92
|
+
if (row.fleetDataLengthBytes < 685 ||
|
|
93
|
+
typeof row.rentExemptionThreshold !== 'number' ||
|
|
94
|
+
!Number.isFinite(row.rentExemptionThreshold) ||
|
|
95
|
+
row.rentExemptionThreshold < 0)
|
|
96
|
+
bad();
|
|
97
|
+
try {
|
|
98
|
+
if (row.maximumProfileDebit !==
|
|
99
|
+
dockGrowthDebit(row.rentLamportsPerByteYear, row.rentExemptionThreshold, row.fleetDataLengthBytes))
|
|
100
|
+
bad();
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
bad();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else if (row.status !== 'unavailable' ||
|
|
107
|
+
!REASONS.includes(row.reason))
|
|
108
|
+
bad();
|
|
109
|
+
return Object.freeze(row);
|
|
110
|
+
}
|
|
111
|
+
export function dockFundingGuardToJSON(guard) {
|
|
112
|
+
return Object.fromEntries(Object.entries(guard).map(([key, value]) => [
|
|
113
|
+
key,
|
|
114
|
+
typeof value === 'bigint' ? String(value) : value,
|
|
115
|
+
]));
|
|
116
|
+
}
|
|
117
|
+
/** Pinned IdleToDocked account order (qualification #825), for diagnostics. */
|
|
118
|
+
const DOCK_ACCOUNT_LABELS = [
|
|
119
|
+
'authority',
|
|
120
|
+
'Profile',
|
|
121
|
+
'key certificate',
|
|
122
|
+
'Profile program',
|
|
123
|
+
'Fleet',
|
|
124
|
+
'Star System',
|
|
125
|
+
'StarbasePlayer',
|
|
126
|
+
'Game',
|
|
127
|
+
'faction relation tracker',
|
|
128
|
+
'faction standing slot',
|
|
129
|
+
'faction config slot',
|
|
130
|
+
'System ownership',
|
|
131
|
+
'owner faction slot',
|
|
132
|
+
];
|
|
133
|
+
const SEQUENCE_REMEDY = 'Run the steps as separate confirmed transactions, for example with createPlanSequence and executePlanSequence, and refresh the docking Plan after the other step confirms.';
|
|
134
|
+
const PROFILE_REMEDY = 'Refresh funding and recreate a qualified docking Plan, or run the steps as separate confirmed transactions with createPlanSequence and executePlanSequence.';
|
|
135
|
+
/** Requires one exact funding assertion for each current docking instruction. */
|
|
136
|
+
export function validateFleetDockFundingGuards(steps, guards) {
|
|
137
|
+
const selected = guards.filter((g) => g.kind === 'fleet-dock-funding');
|
|
138
|
+
const docks = steps.flatMap((step, index) => step.instruction.programAddress === SAGE_PROGRAM_ADDRESS &&
|
|
139
|
+
IDLE_TO_DOCKED_DISCRIMINATOR.every((v, n) => step.instruction.data?.[n] === v)
|
|
140
|
+
? [{ step, index }]
|
|
141
|
+
: []);
|
|
142
|
+
const fail = () => {
|
|
143
|
+
throw new SageSdkError('ACTION_PRECONDITION_FAILED', 'Docking requires its exact instruction-bound Profile storage safeguard. Refresh the Fleet and recreate the docking Plan before signing.');
|
|
144
|
+
};
|
|
145
|
+
if (selected.length !== docks.length)
|
|
146
|
+
fail();
|
|
147
|
+
for (const { step, index: requiringStepIndex } of docks) {
|
|
148
|
+
const a = step.instruction.accounts;
|
|
149
|
+
const matches = selected.filter((g) => g.address === a[4].address);
|
|
150
|
+
if (matches.length !== 1)
|
|
151
|
+
fail();
|
|
152
|
+
const g = matches[0];
|
|
153
|
+
const data = step.instruction.data;
|
|
154
|
+
if (g.profile !== a[1].address ||
|
|
155
|
+
g.authority !== a[0].address ||
|
|
156
|
+
g.certificate !== a[2].address ||
|
|
157
|
+
g.system !== a[5].address ||
|
|
158
|
+
g.starbasePlayer !== a[6].address ||
|
|
159
|
+
g.game !== a[7].address ||
|
|
160
|
+
g.keyIndex !== (data[8] | (data[9] << 8)) ||
|
|
161
|
+
step.signers.length !== 1 ||
|
|
162
|
+
step.signers[0] !== g.authority)
|
|
163
|
+
fail();
|
|
164
|
+
for (const address of [g.address, g.character, g.system, g.starbasePlayer])
|
|
165
|
+
if (!guards.some((v) => v.kind === 'account-state' && v.address === address))
|
|
166
|
+
fail();
|
|
167
|
+
// Transaction compilation merges privileges across instructions, so the
|
|
168
|
+
// qualified quote holds only if no other step can change what docking
|
|
169
|
+
// reads or writes. Protection follows the dock's own account roles: its
|
|
170
|
+
// writable accounts admit no other reference, and its readonly inputs admit
|
|
171
|
+
// no other writer. The signing authority is not a qualification input, and
|
|
172
|
+
// an available quote shares its Profile through the per-Profile funding
|
|
173
|
+
// check, so only an unavailable quote isolates the Profile.
|
|
174
|
+
a.forEach((meta, position) => {
|
|
175
|
+
if (isSignerRole(meta.role))
|
|
176
|
+
return;
|
|
177
|
+
const profile = position === 1;
|
|
178
|
+
if (profile && g.status === 'available')
|
|
179
|
+
return;
|
|
180
|
+
const exclusive = isWritableRole(meta.role);
|
|
181
|
+
const conflictingStepIndex = steps.findIndex((other, index) => index !== requiringStepIndex &&
|
|
182
|
+
other.instruction.accounts?.some((candidate) => candidate.address === meta.address &&
|
|
183
|
+
(exclusive || isWritableRole(candidate.role))));
|
|
184
|
+
if (conflictingStepIndex < 0)
|
|
185
|
+
return;
|
|
186
|
+
throw new DockAccountReferenceConflictError({
|
|
187
|
+
resource: meta.address,
|
|
188
|
+
// validateFleetDockingGuards pins the 13-account layout.
|
|
189
|
+
accountLabel: DOCK_ACCOUNT_LABELS[position],
|
|
190
|
+
verb: exclusive ? 'referencing' : 'writing',
|
|
191
|
+
condition: profile
|
|
192
|
+
? ' while docking storage bounds are unavailable'
|
|
193
|
+
: '',
|
|
194
|
+
remedy: profile ? PROFILE_REMEDY : SEQUENCE_REMEDY,
|
|
195
|
+
requiringStepIndex,
|
|
196
|
+
conflictingStepIndex,
|
|
197
|
+
requiringStepDescription: step.describes,
|
|
198
|
+
conflictingStepDescription: steps[conflictingStepIndex].describes,
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/** Account-reference conflicts do not assert a declared semantic invalidation. */
|
|
204
|
+
class DockAccountReferenceConflictError extends SageSdkError {
|
|
205
|
+
conflictKind = 'references';
|
|
206
|
+
resource;
|
|
207
|
+
accountLabel;
|
|
208
|
+
requiringStepIndex;
|
|
209
|
+
conflictingStepIndex;
|
|
210
|
+
requiringStepDescription;
|
|
211
|
+
conflictingStepDescription;
|
|
212
|
+
remedy;
|
|
213
|
+
constructor(options) {
|
|
214
|
+
const { resource, accountLabel, requiringStepIndex, conflictingStepIndex, requiringStepDescription, conflictingStepDescription, remedy, condition, verb, } = options;
|
|
215
|
+
super('INCOMPATIBLE_PLAN_COMPOSITION', `Plan step ${String(requiringStepIndex)} ("${requiringStepDescription}") cannot share a transaction with step ${String(conflictingStepIndex)} ("${conflictingStepDescription}") ${verb} the same ${accountLabel} (${resource})${condition}. ${remedy}`);
|
|
216
|
+
this.resource = resource;
|
|
217
|
+
this.accountLabel = accountLabel;
|
|
218
|
+
this.requiringStepIndex = requiringStepIndex;
|
|
219
|
+
this.conflictingStepIndex = conflictingStepIndex;
|
|
220
|
+
this.requiringStepDescription = requiringStepDescription;
|
|
221
|
+
this.conflictingStepDescription = conflictingStepDescription;
|
|
222
|
+
this.remedy = remedy;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=fleet-dock-funding-guard.js.map
|