@aephia/atlas-kit 0.6.0-next.8 → 0.6.0-next.81
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 +22 -10
- 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 +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -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 +60 -29
- package/dist/crafting/actions/index.js.map +1 -1
- package/dist/crafting/index.d.ts +31 -2
- package/dist/crafting/index.d.ts.map +1 -1
- package/dist/crafting/index.js +41 -14
- 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.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/index.d.ts +33 -15
- package/dist/fleets/actions/index.d.ts.map +1 -1
- package/dist/fleets/actions/index.js +168 -110
- 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 +37 -11
- 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 +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 +4 -3
- package/dist/identity/actions/index.d.ts.map +1 -1
- package/dist/identity/actions/index.js +49 -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.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 +11 -31
- package/dist/internal/c4/crafting.d.ts.map +1 -1
- package/dist/internal/c4/crafting.js +26 -43
- package/dist/internal/c4/crafting.js.map +1 -1
- 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.d.ts +27 -9
- package/dist/internal/c4/game.d.ts.map +1 -1
- package/dist/internal/c4/game.js +77 -14
- 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 +2 -0
- package/dist/internal/c4/local-market-order.d.ts.map +1 -0
- package/dist/internal/c4/local-market-order.js +4 -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-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 +6 -6
- package/dist/internal/planning/authorization-adapter.d.ts.map +1 -1
- package/dist/internal/planning/authorization-adapter.js +81 -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-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 +107 -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-respawn.d.ts +28 -0
- package/dist/internal/planning/fleet-respawn.d.ts.map +1 -0
- package/dist/internal/planning/fleet-respawn.js +164 -0
- package/dist/internal/planning/fleet-respawn.js.map +1 -0
- package/dist/internal/planning/fleet-ship-assembly.d.ts +36 -0
- package/dist/internal/planning/fleet-ship-assembly.d.ts.map +1 -0
- package/dist/internal/planning/fleet-ship-assembly.js +136 -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 +123 -0
- package/dist/internal/planning/local-market-order-funding.js.map +1 -0
- package/dist/internal/planning/local-market-order.d.ts +42 -0
- package/dist/internal/planning/local-market-order.d.ts.map +1 -0
- package/dist/internal/planning/local-market-order.js +192 -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 +84 -0
- package/dist/internal/planning/open-signal.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.map +1 -1
- package/dist/internal/planning/ship-token.js +2 -4
- 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/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 +58 -3
- package/dist/markets/actions/index.d.ts.map +1 -1
- package/dist/markets/actions/index.js +133 -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 +7 -7
- package/dist/markets/index.d.ts.map +1 -1
- package/dist/markets/index.js +9 -9
- 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 +20 -0
- package/dist/planning/assembly.js.map +1 -1
- package/dist/planning/execution.d.ts.map +1 -1
- package/dist/planning/execution.js +405 -16
- package/dist/planning/execution.js.map +1 -1
- package/dist/planning/index.d.ts +171 -149
- package/dist/planning/index.d.ts.map +1 -1
- package/dist/planning/index.js +837 -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 +6 -11
- 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/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 +8 -1
- package/dist/registry/onboarding.d.ts.map +1 -1
- package/dist/registry/onboarding.js +18 -5
- 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 +28 -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,58 @@
|
|
|
1
|
+
import { SageSdkError } from '../../client/errors.js';
|
|
2
|
+
import { createRegisterCharacterInstruction } from '../c4/character-registration.js';
|
|
3
|
+
import { REGISTER_CHARACTER_DISCRIMINATOR, SAGE_PROGRAM_ADDRESS, } from '../c4/runtime-bindings.js';
|
|
4
|
+
function sameInstruction(actual, expected) {
|
|
5
|
+
return (actual.programAddress === expected.programAddress &&
|
|
6
|
+
actual.data?.length === expected.data?.length &&
|
|
7
|
+
expected.data?.every((byte, index) => actual.data?.[index] === byte) ===
|
|
8
|
+
true &&
|
|
9
|
+
actual.accounts?.length === expected.accounts?.length &&
|
|
10
|
+
expected.accounts?.every((account, index) => actual.accounts?.[index]?.address === account.address &&
|
|
11
|
+
actual.accounts[index]?.role === account.role) === true);
|
|
12
|
+
}
|
|
13
|
+
/** Bind every current register-character instruction to its finite persisted guard. */
|
|
14
|
+
export function validateCharacterRegistrationInstructions(steps, preconditions) {
|
|
15
|
+
const guards = preconditions.filter((guard) => guard.kind === 'character-registration');
|
|
16
|
+
const characterTargets = new Set();
|
|
17
|
+
const xpBudgetTargets = new Set();
|
|
18
|
+
for (const guard of guards) {
|
|
19
|
+
if (characterTargets.has(guard.address) ||
|
|
20
|
+
xpBudgetTargets.has(guard.xpBudget))
|
|
21
|
+
throw new SageSdkError('INCOMPATIBLE_PLAN_COMPOSITION', 'A combined Plan cannot register the same Character or Career XP budget more than once. Keep exactly one creation instruction for each target.');
|
|
22
|
+
characterTargets.add(guard.address);
|
|
23
|
+
xpBudgetTargets.add(guard.xpBudget);
|
|
24
|
+
}
|
|
25
|
+
const registrations = steps.filter(({ instruction }) => instruction.programAddress === SAGE_PROGRAM_ADDRESS &&
|
|
26
|
+
REGISTER_CHARACTER_DISCRIMINATOR.every((byte, index) => instruction.data?.[index] === byte));
|
|
27
|
+
if (registrations.length !== guards.length)
|
|
28
|
+
throw new SageSdkError('ACTION_PRECONDITION_FAILED', 'Every Character registration instruction requires exactly one matching finite current-runtime registration guard. Recreate the Plan with planRegisterCharacter.');
|
|
29
|
+
// Unqualified instructions may change transaction-wide writable funders or targets.
|
|
30
|
+
// Only other validated registrations may share these accounts in this slice.
|
|
31
|
+
for (const guard of guards)
|
|
32
|
+
for (const step of steps) {
|
|
33
|
+
if (registrations.includes(step))
|
|
34
|
+
continue;
|
|
35
|
+
if (step.instruction.accounts?.some((account) => [guard.funder, guard.address, guard.xpBudget].includes(account.address)))
|
|
36
|
+
throw new SageSdkError('INCOMPATIBLE_PLAN_COMPOSITION', 'A Character registration cannot share funding or creation targets with an unqualified instruction. Execute and confirm that instruction separately, then recreate registration.');
|
|
37
|
+
}
|
|
38
|
+
const remaining = [...guards];
|
|
39
|
+
for (const step of registrations) {
|
|
40
|
+
const matchIndex = remaining.findIndex((guard) => {
|
|
41
|
+
const expected = createRegisterCharacterInstruction({
|
|
42
|
+
profile: guard.profile,
|
|
43
|
+
funder: guard.funder,
|
|
44
|
+
character: guard.address,
|
|
45
|
+
game: guard.game,
|
|
46
|
+
xpBudget: guard.xpBudget,
|
|
47
|
+
xpBudgetConfig: guard.xpBudgetConfig,
|
|
48
|
+
});
|
|
49
|
+
return (step.signers.length === 1 &&
|
|
50
|
+
step.signers[0] === guard.funder &&
|
|
51
|
+
sameInstruction(step.instruction, expected));
|
|
52
|
+
});
|
|
53
|
+
if (matchIndex < 0)
|
|
54
|
+
throw new SageSdkError('ACTION_PRECONDITION_FAILED', 'A Character registration instruction does not match its persisted Profile, Game, funder, Character, or Career XP accounts and roles. Recreate the Plan with planRegisterCharacter.');
|
|
55
|
+
remaining.splice(matchIndex, 1);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=character-registration-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"character-registration-guard.js","sourceRoot":"","sources":["../../../src/internal/planning/character-registration-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Address, Commitment } from '@solana/kit';
|
|
2
|
+
import type { RawAccount, SageContext } from '../../client/contracts.js';
|
|
3
|
+
import type { PlanPrecondition } from '../../planning/index.js';
|
|
4
|
+
import { type CharacterInitialization } from '../../registry/onboarding.js';
|
|
5
|
+
export interface CharacterRegistrationFunding {
|
|
6
|
+
readonly funder: Address;
|
|
7
|
+
readonly requiredLamports: bigint;
|
|
8
|
+
readonly observedLamports: bigint;
|
|
9
|
+
readonly netDebit: bigint;
|
|
10
|
+
readonly minimumBalance: bigint;
|
|
11
|
+
}
|
|
12
|
+
/** Revalidate one finite current-runtime Character creation intent before signing. */
|
|
13
|
+
export declare function revalidateCharacterRegistration(ctx: SageContext, guard: Extract<PlanPrecondition, {
|
|
14
|
+
readonly kind: 'character-registration';
|
|
15
|
+
}>, commitment: Commitment, freshGameVersions?: Map<Address, number>, initializations?: Map<Address, CharacterInitialization>): Promise<CharacterRegistrationFunding>;
|
|
16
|
+
export declare function isEmptySystemAccount(account: RawAccount): boolean;
|
|
17
|
+
/** #621: budget funding precedes any excess Character refund. */
|
|
18
|
+
export declare function calculateRegistrationFunding(minimum: (size: number) => bigint, characterSize: number, characterBalance: bigint, budgetBalance: bigint): {
|
|
19
|
+
requiredLamports: bigint;
|
|
20
|
+
netDebit: bigint;
|
|
21
|
+
refund: bigint;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=character-registration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"character-registration.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/character-registration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,8BAA8B,CAAC;AAOtC,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,sFAAsF;AACtF,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,OAAO,CAAC,gBAAgB,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAA;CAAE,CAAC,EAC7E,UAAU,EAAE,UAAU,EACtB,iBAAiB,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,EACxC,eAAe,wCAA8C,GAC5D,OAAO,CAAC,4BAA4B,CAAC,CAoHvC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAMjE;AACD,iEAAiE;AACjE,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EACjC,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,MAAM;;;;EAUtB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { requireGameAddress } from '../game-context.js';
|
|
2
|
+
import { SageSdkError } from '../../client/errors.js';
|
|
3
|
+
import { readContextRawAccounts } from '../../client/reconciliation.js';
|
|
4
|
+
import { findCharacterPda, profileAccountDefinition } from '../c4/identity.js';
|
|
5
|
+
import { getCareerXpBudgetDecoder } from '../c4/runtime-bindings.js';
|
|
6
|
+
import { hashAccountState } from './account-state.js';
|
|
7
|
+
import { RENT_ADDRESS, readRent } from './faction-enrollment.js';
|
|
8
|
+
import { readCharacterInitialization, } from '../../registry/onboarding.js';
|
|
9
|
+
import { resolveCharacterRegistrationXpRuntime } from './xp-runtime.js';
|
|
10
|
+
function fail(address, message) {
|
|
11
|
+
throw new SageSdkError('ACTION_PRECONDITION_FAILED', message, { address });
|
|
12
|
+
}
|
|
13
|
+
/** Revalidate one finite current-runtime Character creation intent before signing. */
|
|
14
|
+
export async function revalidateCharacterRegistration(ctx, guard, commitment, freshGameVersions, initializations = new Map()) {
|
|
15
|
+
if (guard.game !== requireGameAddress(ctx))
|
|
16
|
+
fail(guard.game, 'Registration Game differs from the configured deployment. Recreate the Plan in the intended Game context.');
|
|
17
|
+
const character = await findCharacterPda(guard.profile, guard.game);
|
|
18
|
+
if (character !== guard.address)
|
|
19
|
+
fail(guard.address, 'The Character address no longer matches the canonical Profile and Game derivation. Recreate the registration Plan.');
|
|
20
|
+
const [profileRaw, characterRaw, rentRaw, funderRaw] = await readContextRawAccounts(ctx, [guard.profile, character, RENT_ADDRESS, guard.funder], { commitment });
|
|
21
|
+
if (!profileRaw)
|
|
22
|
+
fail(guard.profile, 'The Player Profile is missing. Create or select it before registering its Character.');
|
|
23
|
+
if (profileRaw.executable)
|
|
24
|
+
fail(guard.profile, 'The Profile is executable. Select a valid Profile and recreate the Plan.');
|
|
25
|
+
profileAccountDefinition.decode(profileRaw);
|
|
26
|
+
if ((await hashAccountState(profileRaw.owner, profileRaw.data)) !==
|
|
27
|
+
guard.profileDataHash)
|
|
28
|
+
fail(guard.profile, 'The Player Profile state changed after planning. Refresh it and recreate the Character registration Plan.');
|
|
29
|
+
if (characterRaw && !isEmptySystemAccount(characterRaw))
|
|
30
|
+
fail(character, 'The canonical Character now exists. Read and reuse it instead of signing this creation Plan.');
|
|
31
|
+
let initialization = initializations.get(guard.game);
|
|
32
|
+
if (!initialization) {
|
|
33
|
+
initialization = await readCharacterInitialization(ctx, { commitment });
|
|
34
|
+
initializations.set(guard.game, initialization);
|
|
35
|
+
}
|
|
36
|
+
if (initialization.characterSize !== guard.characterSize ||
|
|
37
|
+
initialization.initializationHash !== guard.initializationHash)
|
|
38
|
+
fail(guard.game, 'Character initialization shape changed. Refresh the Game and recreate the registration Plan.');
|
|
39
|
+
freshGameVersions?.set(guard.game, 2);
|
|
40
|
+
const xp = await resolveCharacterRegistrationXpRuntime(ctx, {
|
|
41
|
+
game: guard.game,
|
|
42
|
+
character,
|
|
43
|
+
}, { commitment });
|
|
44
|
+
if (xp.xpBudget !== guard.xpBudget ||
|
|
45
|
+
xp.xpBudgetConfig !== guard.xpBudgetConfig)
|
|
46
|
+
fail(guard.address, 'The Career XP accounts no longer match this exact Character registration intent. Recreate the registration Plan.');
|
|
47
|
+
if (!rentRaw)
|
|
48
|
+
fail(RENT_ADDRESS, 'The Rent sysvar is missing. Refresh the configured deployment before registering a Character.');
|
|
49
|
+
if (!funderRaw ||
|
|
50
|
+
funderRaw.executable ||
|
|
51
|
+
funderRaw.owner !== '11111111111111111111111111111111' ||
|
|
52
|
+
funderRaw.data.length !== 0)
|
|
53
|
+
fail(guard.funder, 'The Character funder must remain an existing non-executable System wallet. Select and fund that signer separately, then recreate the Plan.');
|
|
54
|
+
if ((characterRaw?.lamports ?? 0n) !== guard.characterLamports ||
|
|
55
|
+
xp.budgetLamports !== guard.budgetLamports)
|
|
56
|
+
fail(guard.address, 'Creation target pre-funding changed, including the approved Character refund. Refresh the targets and recreate the registration Plan.');
|
|
57
|
+
const minimum = readRent(rentRaw);
|
|
58
|
+
const storage = calculateRegistrationFunding(minimum, guard.characterSize, characterRaw?.lamports ?? 0n, xp.budgetLamports);
|
|
59
|
+
const funding = storage.requiredLamports;
|
|
60
|
+
if (funding > guard.maximumFunderDebit)
|
|
61
|
+
fail(guard.funder, 'Character and Career XP storage now require more native funding than this Plan approved. Recreate and review the Plan before signing.');
|
|
62
|
+
return {
|
|
63
|
+
funder: guard.funder,
|
|
64
|
+
requiredLamports: funding,
|
|
65
|
+
observedLamports: funderRaw.lamports,
|
|
66
|
+
netDebit: storage.netDebit,
|
|
67
|
+
minimumBalance: minimum(0),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export function isEmptySystemAccount(account) {
|
|
71
|
+
return (!account.executable &&
|
|
72
|
+
account.owner === '11111111111111111111111111111111' &&
|
|
73
|
+
account.data.length === 0);
|
|
74
|
+
}
|
|
75
|
+
/** #621: budget funding precedes any excess Character refund. */
|
|
76
|
+
export function calculateRegistrationFunding(minimum, characterSize, characterBalance, budgetBalance) {
|
|
77
|
+
const character = minimum(characterSize) - characterBalance;
|
|
78
|
+
const budget = minimum(getCareerXpBudgetDecoder().fixedSize) - budgetBalance;
|
|
79
|
+
const budgetDebit = budget > 0n ? budget : 0n;
|
|
80
|
+
return {
|
|
81
|
+
requiredLamports: (character > 0n ? character : 0n) + budgetDebit,
|
|
82
|
+
netDebit: character + budgetDebit,
|
|
83
|
+
refund: character < 0n ? -character : 0n,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=character-registration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"character-registration.js","sourceRoot":"","sources":["../../../src/internal/planning/character-registration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Address, SageContext } from '../../client/contracts.js';
|
|
2
|
+
export interface HistoryFeeParams {
|
|
3
|
+
readonly craftingFeeBps: number;
|
|
4
|
+
readonly localMarketFeeBps: number;
|
|
5
|
+
readonly localTreasuryShareBps: number;
|
|
6
|
+
readonly treasuryDistributionBps: number;
|
|
7
|
+
}
|
|
8
|
+
interface HistoryScope {
|
|
9
|
+
readonly game: Address;
|
|
10
|
+
readonly system: Address;
|
|
11
|
+
readonly address: Address;
|
|
12
|
+
}
|
|
13
|
+
export type HistoryIntent = HistoryScope & ({
|
|
14
|
+
readonly state: 'absent';
|
|
15
|
+
} | {
|
|
16
|
+
readonly state: 'initialized';
|
|
17
|
+
readonly openDay: bigint;
|
|
18
|
+
readonly enabled: 0 | 1;
|
|
19
|
+
readonly controller: number;
|
|
20
|
+
readonly generation?: Address;
|
|
21
|
+
readonly generationNumber: bigint;
|
|
22
|
+
readonly governance: Address;
|
|
23
|
+
readonly starbaseSeqId: bigint;
|
|
24
|
+
readonly policy: Address;
|
|
25
|
+
readonly policyFlags: {
|
|
26
|
+
readonly noControllerRevenue: number;
|
|
27
|
+
readonly zeroPowerRevenue: number;
|
|
28
|
+
readonly successorBaseline: number;
|
|
29
|
+
readonly captureIncomingEligibility: number;
|
|
30
|
+
};
|
|
31
|
+
readonly effectiveParams: HistoryFeeParams;
|
|
32
|
+
});
|
|
33
|
+
export interface ResolvedDemocracyHistory {
|
|
34
|
+
readonly intent: HistoryIntent;
|
|
35
|
+
readonly accounts: {
|
|
36
|
+
readonly democracyHistoryHistory: Address;
|
|
37
|
+
readonly democracyHistoryPolicy?: Address;
|
|
38
|
+
readonly democracyHistoryGeneration?: Address;
|
|
39
|
+
};
|
|
40
|
+
readonly slot: bigint;
|
|
41
|
+
}
|
|
42
|
+
/** Resolve a fresh, canonical history context without initializing or repairing it. */
|
|
43
|
+
export declare function resolveDemocracyHistory(ctx: SageContext, scope: {
|
|
44
|
+
readonly game: Address;
|
|
45
|
+
readonly system: Address;
|
|
46
|
+
}): Promise<ResolvedDemocracyHistory>;
|
|
47
|
+
/** Compare only eligibility and consumed fee policy, never shared financial counters. */
|
|
48
|
+
export declare function matchDemocracyHistoryIntent(expected: HistoryIntent, actual: HistoryIntent): boolean;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=democracy-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"democracy-history.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/democracy-history.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,OAAO,EAEP,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAgBnC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;CAC1C;AACD,UAAU,YAAY;IACpB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AACD,MAAM,MAAM,aAAa,GAAG,YAAY,GACtC,CACI;IAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,GAC5B;IACE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE;QACpB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;QACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;QACnC,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC;KAC7C,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE,gBAAgB,CAAC;CAC5C,CACJ,CAAC;AACJ,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAC;QAC1C,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;QAC1C,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;KAC/C,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AA6ED,uFAAuF;AACvF,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC1D,OAAO,CAAC,wBAAwB,CAAC,CAyLnC;AACD,yFAAyF;AACzF,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,aAAa,GACpB,OAAO,CA2BT"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { getAddressEncoder, getProgramDerivedAddress, getU64Encoder, } from '@solana/kit';
|
|
2
|
+
import { SageSdkError } from '../../client/errors.js';
|
|
3
|
+
import { readContextRawAccounts } from '../../client/reconciliation.js';
|
|
4
|
+
import { DEMOCRACY_GENERATION_HISTORY_DISCRIMINATOR, DEMOCRACY_HISTORY_POLICY_DISCRIMINATOR, DEMOCRACY_SYSTEM_HISTORY_DISCRIMINATOR, SAGE_PROGRAM_ADDRESS, getDemocracyGenerationHistoryDecoder, getDemocracyHistoryPolicyDecoder, getDemocracySystemHistoryDecoder, } from '../c4/runtime-bindings.js';
|
|
5
|
+
import { CLOCK_ADDRESS, readClock } from './faction-enrollment.js';
|
|
6
|
+
const NONE = '11111111111111111111111111111111';
|
|
7
|
+
const DOMAIN = new TextEncoder().encode('DEMHST01');
|
|
8
|
+
function requireHistory(condition, reason) {
|
|
9
|
+
if (!condition)
|
|
10
|
+
throw new SageSdkError('ACTION_PRECONDITION_FAILED', `${reason} Refresh the Starbase's Democracy history before recreating this action; ask its operator to initialize or close pending daily checkpoints when needed.`);
|
|
11
|
+
}
|
|
12
|
+
async function derive(literal, scope, generation) {
|
|
13
|
+
return getProgramDerivedAddress({
|
|
14
|
+
programAddress: SAGE_PROGRAM_ADDRESS,
|
|
15
|
+
seeds: [
|
|
16
|
+
new TextEncoder().encode(literal),
|
|
17
|
+
getAddressEncoder().encode(scope),
|
|
18
|
+
...(generation === undefined ? [] : [getU64Encoder().encode(generation)]),
|
|
19
|
+
],
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function decode(raw, address, bump, discriminator, decoder) {
|
|
23
|
+
requireHistory(raw &&
|
|
24
|
+
raw.address === address &&
|
|
25
|
+
raw.owner === SAGE_PROGRAM_ADDRESS &&
|
|
26
|
+
!raw.executable, 'A required Democracy account is missing or has an unexpected owner or address.');
|
|
27
|
+
requireHistory(discriminator.every((byte, index) => raw.data[index] === byte), 'A Democracy account has the wrong discriminator.');
|
|
28
|
+
let value;
|
|
29
|
+
let consumed;
|
|
30
|
+
try {
|
|
31
|
+
[value, consumed] = decoder.read(raw.data, 0);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
throw new SageSdkError('ACTION_PRECONDITION_FAILED', 'A Democracy account cannot be decoded. Refresh the deployment and recreate this action with supported account data.');
|
|
35
|
+
}
|
|
36
|
+
requireHistory(consumed === raw.data.length, 'A Democracy account has an unexpected data length.');
|
|
37
|
+
requireHistory(value.version === 1 &&
|
|
38
|
+
value.bump === bump &&
|
|
39
|
+
value.domain.length === 8 &&
|
|
40
|
+
value.domain.every((byte, index) => byte === DOMAIN[index]) &&
|
|
41
|
+
value.reserved.every((byte) => byte === 0), 'A Democracy account has an unsupported version, domain, bump or reserved field.');
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
function equalBytes(a, b) {
|
|
45
|
+
return a.length === b.length && a.every((byte, index) => byte === b[index]);
|
|
46
|
+
}
|
|
47
|
+
function params(value) {
|
|
48
|
+
return {
|
|
49
|
+
craftingFeeBps: value.craftingFeeBps,
|
|
50
|
+
localMarketFeeBps: value.localMarketFeeBps,
|
|
51
|
+
localTreasuryShareBps: value.localTreasuryShareBps,
|
|
52
|
+
treasuryDistributionBps: value.treasuryDistributionBps,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/** Resolve a fresh, canonical history context without initializing or repairing it. */
|
|
56
|
+
export async function resolveDemocracyHistory(ctx, scope) {
|
|
57
|
+
const [historyAddress, historyBump] = await derive('DemocracySystemHistory', scope.system);
|
|
58
|
+
const [policyAddress, policyBump] = await derive('DemocracyHistoryPolicy', scope.game);
|
|
59
|
+
let floor = 0n;
|
|
60
|
+
const read = async (addresses) => {
|
|
61
|
+
// Absence has no slot in this transport; Clock supplies batch provenance. We
|
|
62
|
+
// cannot request minContextSlot, so reject inconsistent/regressing responses.
|
|
63
|
+
const rows = await readContextRawAccounts(ctx, [...addresses, CLOCK_ADDRESS], { commitment: 'confirmed' });
|
|
64
|
+
requireHistory(rows.length === addresses.length + 1, 'The Democracy history read was incomplete.');
|
|
65
|
+
const clock = rows[rows.length - 1];
|
|
66
|
+
requireHistory(clock?.address === CLOCK_ADDRESS, 'The chain Clock is missing from the Democracy history read.');
|
|
67
|
+
const now = readClock(clock);
|
|
68
|
+
requireHistory(clock.slot >= floor &&
|
|
69
|
+
rows.every((row) => row === undefined || row.slot === clock.slot), 'The Democracy history response has inconsistent or regressing slots.');
|
|
70
|
+
floor = clock.slot;
|
|
71
|
+
return { rows, now };
|
|
72
|
+
};
|
|
73
|
+
const history = (raw) => {
|
|
74
|
+
const value = decode(raw, historyAddress, historyBump, DEMOCRACY_SYSTEM_HISTORY_DISCRIMINATOR, getDemocracySystemHistoryDecoder());
|
|
75
|
+
requireHistory(value.gameId === scope.game &&
|
|
76
|
+
value.system === scope.system &&
|
|
77
|
+
value.policy === policyAddress &&
|
|
78
|
+
value.enabled <= 1 &&
|
|
79
|
+
value.cutoverDay <= value.openDay &&
|
|
80
|
+
value.generationStartedDay <= value.openDay, 'The Democracy history scope or calendar is invalid.');
|
|
81
|
+
return value;
|
|
82
|
+
};
|
|
83
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
84
|
+
const first = (await read([historyAddress])).rows[0];
|
|
85
|
+
if (!first)
|
|
86
|
+
return {
|
|
87
|
+
intent: {
|
|
88
|
+
game: scope.game,
|
|
89
|
+
system: scope.system,
|
|
90
|
+
address: historyAddress,
|
|
91
|
+
state: 'absent',
|
|
92
|
+
},
|
|
93
|
+
accounts: { democracyHistoryHistory: historyAddress },
|
|
94
|
+
slot: floor,
|
|
95
|
+
};
|
|
96
|
+
const initial = history(first);
|
|
97
|
+
const generationPda = initial.generation === NONE
|
|
98
|
+
? undefined
|
|
99
|
+
: await derive('DemocracyGenerationHistory', scope.system, initial.generationNumber);
|
|
100
|
+
requireHistory(!generationPda || generationPda[0] === initial.generation, 'The Democracy history references a noncanonical generation.');
|
|
101
|
+
const batch = await read([
|
|
102
|
+
historyAddress,
|
|
103
|
+
policyAddress,
|
|
104
|
+
...(generationPda ? [generationPda[0]] : []),
|
|
105
|
+
]);
|
|
106
|
+
const second = batch.rows[0];
|
|
107
|
+
if (!second || !equalBytes(first.data, second.data))
|
|
108
|
+
continue;
|
|
109
|
+
const current = history(second);
|
|
110
|
+
const policy = decode(batch.rows[1], policyAddress, policyBump, DEMOCRACY_HISTORY_POLICY_DISCRIMINATOR, getDemocracyHistoryPolicyDecoder());
|
|
111
|
+
requireHistory(policy.gameId === scope.game &&
|
|
112
|
+
[
|
|
113
|
+
policy.noControllerRevenue,
|
|
114
|
+
policy.zeroPowerRevenue,
|
|
115
|
+
policy.successorBaseline,
|
|
116
|
+
policy.captureIncomingEligibility,
|
|
117
|
+
].every((value) => value === 1 || value === 2), 'The Democracy policy scope or explicit policy flags are invalid.');
|
|
118
|
+
const generation = generationPda
|
|
119
|
+
? decode(batch.rows[2], generationPda[0], generationPda[1], DEMOCRACY_GENERATION_HISTORY_DISCRIMINATOR, getDemocracyGenerationHistoryDecoder())
|
|
120
|
+
: undefined;
|
|
121
|
+
if (generation)
|
|
122
|
+
requireHistory(generation.gameId === scope.game &&
|
|
123
|
+
generation.system === scope.system &&
|
|
124
|
+
generation.generation === current.generationNumber &&
|
|
125
|
+
generation.starbaseSeqId === current.starbaseSeqId &&
|
|
126
|
+
generation.governance === current.governance &&
|
|
127
|
+
generation.controller === current.controller &&
|
|
128
|
+
generation.enabled === current.enabled &&
|
|
129
|
+
generation.openDay === current.openDay &&
|
|
130
|
+
generation.retired === 0 &&
|
|
131
|
+
generation.fundedAtlas >= generation.claimedAtlas &&
|
|
132
|
+
generation.rewardVault ===
|
|
133
|
+
generation.fundedAtlas - generation.claimedAtlas, 'The Democracy generation scope, eligibility or reward funding does not match its history.');
|
|
134
|
+
requireHistory(current.controller === 0 || generation, 'The current Democracy controller has no initialized generation.');
|
|
135
|
+
requireHistory(batch.now >= 0n && batch.now / 86400n === current.openDay, 'The Democracy history has pending daily checkpoints or the chain day changed.');
|
|
136
|
+
const intent = {
|
|
137
|
+
game: scope.game,
|
|
138
|
+
system: scope.system,
|
|
139
|
+
address: historyAddress,
|
|
140
|
+
state: 'initialized',
|
|
141
|
+
openDay: current.openDay,
|
|
142
|
+
enabled: current.enabled,
|
|
143
|
+
controller: current.controller,
|
|
144
|
+
...(generationPda ? { generation: generationPda[0] } : {}),
|
|
145
|
+
generationNumber: current.generationNumber,
|
|
146
|
+
governance: current.governance,
|
|
147
|
+
starbaseSeqId: current.starbaseSeqId,
|
|
148
|
+
policy: policyAddress,
|
|
149
|
+
policyFlags: {
|
|
150
|
+
noControllerRevenue: policy.noControllerRevenue,
|
|
151
|
+
zeroPowerRevenue: policy.zeroPowerRevenue,
|
|
152
|
+
successorBaseline: policy.successorBaseline,
|
|
153
|
+
captureIncomingEligibility: policy.captureIncomingEligibility,
|
|
154
|
+
},
|
|
155
|
+
effectiveParams: params(current.enabled === 0
|
|
156
|
+
? {
|
|
157
|
+
craftingFeeBps: 10000,
|
|
158
|
+
localMarketFeeBps: 0,
|
|
159
|
+
localTreasuryShareBps: 0,
|
|
160
|
+
treasuryDistributionBps: 0,
|
|
161
|
+
}
|
|
162
|
+
: (generation?.activeParams ?? policy.defaultParams)),
|
|
163
|
+
};
|
|
164
|
+
return {
|
|
165
|
+
intent,
|
|
166
|
+
accounts: {
|
|
167
|
+
democracyHistoryHistory: historyAddress,
|
|
168
|
+
democracyHistoryPolicy: policyAddress,
|
|
169
|
+
...(generationPda
|
|
170
|
+
? { democracyHistoryGeneration: generationPda[0] }
|
|
171
|
+
: {}),
|
|
172
|
+
},
|
|
173
|
+
slot: floor,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
throw new SageSdkError('ACTION_PRECONDITION_FAILED', 'Democracy history changed during both preparation attempts. Refresh the Starbase and recreate this action.');
|
|
177
|
+
}
|
|
178
|
+
/** Compare only eligibility and consumed fee policy, never shared financial counters. */
|
|
179
|
+
export function matchDemocracyHistoryIntent(expected, actual) {
|
|
180
|
+
if (expected.game !== actual.game ||
|
|
181
|
+
expected.system !== actual.system ||
|
|
182
|
+
expected.address !== actual.address ||
|
|
183
|
+
expected.state !== actual.state)
|
|
184
|
+
return false;
|
|
185
|
+
if (expected.state === 'absent' || actual.state === 'absent')
|
|
186
|
+
return true;
|
|
187
|
+
return (expected.openDay === actual.openDay &&
|
|
188
|
+
expected.enabled === actual.enabled &&
|
|
189
|
+
expected.controller === actual.controller &&
|
|
190
|
+
expected.generation === actual.generation &&
|
|
191
|
+
expected.generationNumber === actual.generationNumber &&
|
|
192
|
+
expected.governance === actual.governance &&
|
|
193
|
+
expected.starbaseSeqId === actual.starbaseSeqId &&
|
|
194
|
+
expected.policy === actual.policy &&
|
|
195
|
+
Object.entries(expected.policyFlags).every(([key, value]) => actual.policyFlags[key] === value) &&
|
|
196
|
+
Object.entries(expected.effectiveParams).every(([key, value]) => actual.effectiveParams[key] === value));
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=democracy-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"democracy-history.js","sourceRoot":"","sources":["../../../src/internal/planning/democracy-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { PlanPrecondition } from '../../planning/index.js';
|
|
2
|
+
/** Recognizes schema-bound buy guards. */
|
|
3
|
+
export declare function isTradeBuyGuard(guard: PlanPrecondition): guard is Extract<PlanPrecondition, {
|
|
4
|
+
kind: 'faction-treasury-buy-versioned';
|
|
5
|
+
}>;
|
|
6
|
+
export declare function isTradeBuyGuard(guard: {
|
|
7
|
+
readonly kind?: unknown;
|
|
8
|
+
}): boolean;
|
|
9
|
+
/** Recognizes schema-bound sell guards. */
|
|
10
|
+
export declare function isTradeSellGuard(guard: PlanPrecondition): guard is Extract<PlanPrecondition, {
|
|
11
|
+
kind: 'faction-treasury-sell-versioned';
|
|
12
|
+
}>;
|
|
13
|
+
export declare function isTradeSellGuard(guard: {
|
|
14
|
+
readonly kind?: unknown;
|
|
15
|
+
}): boolean;
|
|
16
|
+
/** Recognizes schema-bound meter guards. */
|
|
17
|
+
export declare function isTradeMeterGuard(guard: PlanPrecondition): guard is Extract<PlanPrecondition, {
|
|
18
|
+
kind: 'faction-epoch-meter-versioned';
|
|
19
|
+
}>;
|
|
20
|
+
export declare function isTradeMeterGuard(guard: {
|
|
21
|
+
readonly kind?: unknown;
|
|
22
|
+
}): boolean;
|
|
23
|
+
/** Finite trade guards share validation without importing account decoders. */
|
|
24
|
+
export declare function isFactionTradeGuard(guard: PlanPrecondition): guard is Extract<PlanPrecondition, {
|
|
25
|
+
kind: 'faction-treasury-buy-versioned' | 'faction-treasury-sell-versioned' | 'faction-epoch-meter-versioned';
|
|
26
|
+
}>;
|
|
27
|
+
export declare function isFactionTradeGuard(guard: {
|
|
28
|
+
readonly kind?: unknown;
|
|
29
|
+
}): boolean;
|
|
30
|
+
//# sourceMappingURL=faction-trade-guards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faction-trade-guards.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/faction-trade-guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,0CAA0C;AAC1C,wBAAgB,eAAe,CAC7B,KAAK,EAAE,gBAAgB,GACtB,KAAK,IAAI,OAAO,CACjB,gBAAgB,EAChB;IAAE,IAAI,EAAE,gCAAgC,CAAA;CAAE,CAC3C,CAAC;AACF,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC;AAK7E,2CAA2C;AAC3C,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,gBAAgB,GACtB,KAAK,IAAI,OAAO,CACjB,gBAAgB,EAChB;IAAE,IAAI,EAAE,iCAAiC,CAAA;CAAE,CAC5C,CAAC;AACF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC;AAK9E,4CAA4C;AAC5C,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,gBAAgB,GACtB,KAAK,IAAI,OAAO,CACjB,gBAAgB,EAChB;IAAE,IAAI,EAAE,+BAA+B,CAAA;CAAE,CAC1C,CAAC;AACF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC;AAK/E,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,KAAK,IAAI,OAAO,CAC5E,gBAAgB,EAChB;IACE,IAAI,EACA,gCAAgC,GAChC,iCAAiC,GACjC,+BAA+B,CAAC;CACrC,CACF,CAAC;AACF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function isTradeBuyGuard(guard) {
|
|
2
|
+
return guard.kind === 'faction-treasury-buy-versioned';
|
|
3
|
+
}
|
|
4
|
+
export function isTradeSellGuard(guard) {
|
|
5
|
+
return guard.kind === 'faction-treasury-sell-versioned';
|
|
6
|
+
}
|
|
7
|
+
export function isTradeMeterGuard(guard) {
|
|
8
|
+
return guard.kind === 'faction-epoch-meter-versioned';
|
|
9
|
+
}
|
|
10
|
+
export function isFactionTradeGuard(guard) {
|
|
11
|
+
return (isTradeBuyGuard(guard) ||
|
|
12
|
+
isTradeSellGuard(guard) ||
|
|
13
|
+
isTradeMeterGuard(guard));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=faction-trade-guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faction-trade-guards.js","sourceRoot":"","sources":["../../../src/internal/planning/faction-trade-guards.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,eAAe,CAAC,KAAkC;IAChE,OAAO,KAAK,CAAC,IAAI,KAAK,gCAAgC,CAAC;AACzD,CAAC;AAUD,MAAM,UAAU,gBAAgB,CAAC,KAAkC;IACjE,OAAO,KAAK,CAAC,IAAI,KAAK,iCAAiC,CAAC;AAC1D,CAAC;AAUD,MAAM,UAAU,iBAAiB,CAAC,KAAkC;IAClE,OAAO,KAAK,CAAC,IAAI,KAAK,+BAA+B,CAAC;AACxD,CAAC;AAeD,MAAM,UAAU,mBAAmB,CAAC,KAEnC;IACC,OAAO,CACL,eAAe,CAAC,KAAK,CAAC;QACtB,gBAAgB,CAAC,KAAK,CAAC;QACvB,iBAAiB,CAAC,KAAK,CAAC,CACzB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Address } from '@solana/kit';
|
|
2
|
+
import type { RawAccount } from '../../client/contracts.js';
|
|
3
|
+
import type { PlanPrecondition } from '../../planning/index.js';
|
|
4
|
+
type Identity = {
|
|
5
|
+
readonly game: Address;
|
|
6
|
+
readonly factionId: number;
|
|
7
|
+
};
|
|
8
|
+
/** Shared preparation/execution validation; no balances or fill assumptions. */
|
|
9
|
+
export declare function readTradeTreasury(account: RawAccount, identity: Identity): Promise<Readonly<import("../c4/faction-treasury.js").FactionTreasuryAccountData>>;
|
|
10
|
+
export declare function validateTradeEpochMeter(account: RawAccount, identity: Identity): Promise<import("@staratlas/dev-sage").FactionEpochMeter>;
|
|
11
|
+
/** D053 finite comparison binds the account schema and selected trade settings. */
|
|
12
|
+
export declare function matchesFactionTradeState(account: RawAccount, guard: Extract<PlanPrecondition, {
|
|
13
|
+
kind: 'faction-treasury-buy-versioned' | 'faction-treasury-sell-versioned' | 'faction-epoch-meter-versioned';
|
|
14
|
+
}>): Promise<boolean>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=faction-trade-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faction-trade-state.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/faction-trade-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAUhE,KAAK,QAAQ,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAUvE,gFAAgF;AAChF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,QAAQ,qFAYnB;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,QAAQ,4DAWnB;AAED,mFAAmF;AACnF,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,OAAO,CACZ,gBAAgB,EAChB;IACE,IAAI,EACA,gCAAgC,GAChC,iCAAiC,GACjC,+BAA+B,CAAC;CACrC,CACF,GACA,OAAO,CAAC,OAAO,CAAC,CAYlB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { isTradeBuyGuard, isTradeMeterGuard } from './faction-trade-guards.js';
|
|
2
|
+
import { SageSdkError } from '../../client/errors.js';
|
|
3
|
+
import { deriveFactionTreasuryAddress, factionTreasuryAccountDefinition, } from '../c4/faction-treasury.js';
|
|
4
|
+
import { decodeTradeEpochMeter, deriveTradeEpochMeterAddress, } from '../c4/faction-epoch-meter.js';
|
|
5
|
+
function invalid(account, role) {
|
|
6
|
+
throw new SageSdkError('ACTION_PRECONDITION_FAILED', `${role} must match its canonical Game/faction identity and supported account layout. Refresh the Market and canonical faction accounts, then prepare a new trade.`, { address: account.address });
|
|
7
|
+
}
|
|
8
|
+
/** Shared preparation/execution validation; no balances or fill assumptions. */
|
|
9
|
+
export async function readTradeTreasury(account, identity) {
|
|
10
|
+
const treasury = factionTreasuryAccountDefinition.decode(account);
|
|
11
|
+
if (account.executable ||
|
|
12
|
+
treasury.game !== identity.game ||
|
|
13
|
+
treasury.factionId !== identity.factionId ||
|
|
14
|
+
account.address !==
|
|
15
|
+
(await deriveFactionTreasuryAddress(identity.game, identity.factionId)))
|
|
16
|
+
invalid(account, 'Faction Treasury');
|
|
17
|
+
return treasury;
|
|
18
|
+
}
|
|
19
|
+
export async function validateTradeEpochMeter(account, identity) {
|
|
20
|
+
const meter = decodeTradeEpochMeter(account);
|
|
21
|
+
if (account.executable ||
|
|
22
|
+
meter.gameId !== identity.game ||
|
|
23
|
+
meter.factionId !== identity.factionId ||
|
|
24
|
+
account.address !== (await deriveTradeEpochMeterAddress(identity)))
|
|
25
|
+
invalid(account, 'Faction Epoch Meter');
|
|
26
|
+
return meter;
|
|
27
|
+
}
|
|
28
|
+
/** D053 finite comparison binds the account schema and selected trade settings. */
|
|
29
|
+
export async function matchesFactionTradeState(account, guard) {
|
|
30
|
+
if (isTradeMeterGuard(guard)) {
|
|
31
|
+
const meter = await validateTradeEpochMeter(account, guard);
|
|
32
|
+
return meter.version === guard.schemaVersion;
|
|
33
|
+
}
|
|
34
|
+
const treasury = await readTradeTreasury(account, guard);
|
|
35
|
+
if (treasury.version !== guard.schemaVersion)
|
|
36
|
+
return false;
|
|
37
|
+
return isTradeBuyGuard(guard)
|
|
38
|
+
? (treasury.reserves.find((row) => row.cargoId === guard.cargoId)
|
|
39
|
+
?.floorRaw ?? 0n) === guard.floorRaw
|
|
40
|
+
: treasury.atlasOutCapPerEpochRaw === guard.atlasOutCapPerEpochRaw &&
|
|
41
|
+
treasury.epochLengthSeconds === guard.epochLengthSeconds;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=faction-trade-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faction-trade-state.js","sourceRoot":"","sources":["../../../src/internal/planning/faction-trade-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG/E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,8BAA8B,CAAC;AAItC,SAAS,OAAO,CAAC,OAAmB,EAAE,IAAY;IAChD,MAAM,IAAI,YAAY,CACpB,4BAA4B,EAC5B,GAAG,IAAI,4JAA4J,EACnK,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAC7B,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAmB,EACnB,QAAkB;IAElB,MAAM,QAAQ,GAAG,gCAAgC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClE,IACE,OAAO,CAAC,UAAU;QAClB,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;QAC/B,QAAQ,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS;QACzC,OAAO,CAAC,OAAO;YACb,CAAC,MAAM,4BAA4B,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEzE,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAmB,EACnB,QAAkB;IAElB,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC7C,IACE,OAAO,CAAC,UAAU;QAClB,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI;QAC9B,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS;QACtC,OAAO,CAAC,OAAO,KAAK,CAAC,MAAM,4BAA4B,CAAC,QAAQ,CAAC,CAAC;QAElE,OAAO,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAmB,EACnB,KAQC;IAED,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,aAAa,CAAC;IAC/C,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzD,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IAC3D,OAAO,eAAe,CAAC,KAAK,CAAC;QAC3B,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC;YAC7D,EAAE,QAAQ,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,QAAQ;QACxC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,KAAK,KAAK,CAAC,sBAAsB;YAC9D,QAAQ,CAAC,kBAAkB,KAAK,KAAK,CAAC,kBAAkB,CAAC;AACjE,CAAC"}
|