@aephia/atlas-kit 0.6.0-next.4 → 0.6.0-next.41
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.map +1 -1
- package/dist/cargo/actions/deposit.js +51 -9
- package/dist/cargo/actions/deposit.js.map +1 -1
- package/dist/cargo/actions/wallet-context.d.ts +2 -3
- package/dist/cargo/actions/wallet-context.d.ts.map +1 -1
- package/dist/cargo/actions/wallet-context.js +6 -33
- package/dist/cargo/actions/wallet-context.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 +54 -11
- package/dist/cargo/actions/withdrawal.js.map +1 -1
- package/dist/claim-stakes/actions/index.d.ts.map +1 -1
- package/dist/claim-stakes/actions/index.js +2 -3
- package/dist/claim-stakes/actions/index.js.map +1 -1
- package/dist/client/errors.d.ts +4 -0
- 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 +19 -8
- package/dist/combat/actions/index.js.map +1 -1
- package/dist/crafting/actions/index.d.ts.map +1 -1
- package/dist/crafting/actions/index.js +36 -13
- package/dist/crafting/actions/index.js.map +1 -1
- package/dist/crafting/index.d.ts +8 -2
- package/dist/crafting/index.d.ts.map +1 -1
- package/dist/crafting/index.js +1 -1
- 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 +136 -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 +1 -0
- 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/index.d.ts +22 -14
- package/dist/fleets/actions/index.d.ts.map +1 -1
- package/dist/fleets/actions/index.js +75 -53
- package/dist/fleets/actions/index.js.map +1 -1
- 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 +322 -0
- package/dist/fleets/actions/ship-import.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 +3 -0
- package/dist/identity/actions/index.d.ts.map +1 -1
- package/dist/identity/actions/index.js +11 -10
- 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/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.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 +0 -27
- package/dist/internal/c4/claim-stake.d.ts.map +1 -1
- package/dist/internal/c4/claim-stake.js +0 -33
- 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 +10 -31
- package/dist/internal/c4/crafting.d.ts.map +1 -1
- package/dist/internal/c4/crafting.js +22 -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-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 +27 -0
- package/dist/internal/c4/fleet-arrival.d.ts.map +1 -0
- package/dist/internal/c4/fleet-arrival.js +39 -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-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 +10 -5
- package/dist/internal/c4/fleet.d.ts.map +1 -1
- package/dist/internal/c4/fleet.js.map +1 -1
- package/dist/internal/c4/game.d.ts +20 -6
- package/dist/internal/c4/game.d.ts.map +1 -1
- package/dist/internal/c4/game.js +39 -9
- package/dist/internal/c4/game.js.map +1 -1
- package/dist/internal/c4/identity.d.ts +2 -7
- package/dist/internal/c4/identity.d.ts.map +1 -1
- package/dist/internal/c4/identity.js +2 -23
- package/dist/internal/c4/identity.js.map +1 -1
- 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 +1 -37
- package/dist/internal/c4/market.d.ts.map +1 -1
- package/dist/internal/c4/market.js +11 -49
- 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/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/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/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 +11 -7
- 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.js +2 -1
- package/dist/internal/c4/world.js.map +1 -1
- 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 +19 -6
- package/dist/internal/planning/authorization-adapter.d.ts.map +1 -1
- package/dist/internal/planning/authorization-adapter.js +99 -16
- package/dist/internal/planning/authorization-adapter.js.map +1 -1
- 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 +12 -0
- package/dist/internal/planning/faction-enrollment.d.ts.map +1 -0
- package/dist/internal/planning/faction-enrollment.js +67 -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 +38 -0
- package/dist/internal/planning/fleet-arrival.d.ts.map +1 -0
- package/dist/internal/planning/fleet-arrival.js +100 -0
- package/dist/internal/planning/fleet-arrival.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-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/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/runtime-guards.d.ts +43 -0
- package/dist/internal/planning/runtime-guards.d.ts.map +1 -0
- package/dist/internal/planning/runtime-guards.js +550 -0
- package/dist/internal/planning/runtime-guards.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 +10 -0
- package/dist/internal/planning/ship-token.d.ts.map +1 -0
- package/dist/internal/planning/ship-token.js +47 -0
- package/dist/internal/planning/ship-token.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 +20 -0
- package/dist/internal/planning/xp-runtime.d.ts.map +1 -0
- package/dist/internal/planning/xp-runtime.js +94 -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 +1 -0
- package/dist/markets/actions/index.d.ts.map +1 -1
- package/dist/markets/actions/index.js +42 -16
- 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/mining/actions/index.d.ts +84 -0
- package/dist/mining/actions/index.d.ts.map +1 -0
- package/dist/mining/actions/index.js +314 -0
- package/dist/mining/actions/index.js.map +1 -0
- package/dist/planning/assembly.d.ts.map +1 -1
- package/dist/planning/assembly.js +6 -0
- package/dist/planning/assembly.js.map +1 -1
- package/dist/planning/execution.d.ts.map +1 -1
- package/dist/planning/execution.js +290 -17
- package/dist/planning/execution.js.map +1 -1
- package/dist/planning/index.d.ts +151 -86
- package/dist/planning/index.d.ts.map +1 -1
- package/dist/planning/index.js +470 -57
- package/dist/planning/index.js.map +1 -1
- package/dist/planning/simulation.d.ts +18 -1
- package/dist/planning/simulation.d.ts.map +1 -1
- package/dist/planning/simulation.js +56 -10
- package/dist/planning/simulation.js.map +1 -1
- package/dist/registry/cargo.d.ts +6 -6
- package/dist/registry/cargo.d.ts.map +1 -1
- package/dist/registry/cargo.js +25 -4
- package/dist/registry/cargo.js.map +1 -1
- package/dist/registry/onboarding.d.ts +2 -0
- package/dist/registry/onboarding.d.ts.map +1 -1
- package/dist/registry/onboarding.js +11 -6
- package/dist/registry/onboarding.js.map +1 -1
- package/dist/registry/ship-stats-snapshot.js +5 -5
- package/dist/registry/ship-stats-snapshot.js.map +1 -1
- package/dist/registry/ships.d.ts +28 -0
- package/dist/registry/ships.d.ts.map +1 -0
- package/dist/registry/ships.js +51 -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/index.d.ts +1 -1
- package/dist/scanning/index.d.ts.map +1 -1
- package/dist/scanning/index.js +2 -2
- package/dist/scanning/index.js.map +1 -1
- package/package.json +10 -2
|
@@ -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,12 @@
|
|
|
1
|
+
import { type Address } from '@solana/kit';
|
|
2
|
+
import type { RawAccount } from '../../client/contracts.js';
|
|
3
|
+
import type { PlanPrecondition } from '../../planning/index.js';
|
|
4
|
+
import type { AddressOnlyInstruction, PlanAuthorization } from './authorization-adapter.js';
|
|
5
|
+
export declare const RENT_ADDRESS: Address;
|
|
6
|
+
export declare const CLOCK_ADDRESS: Address;
|
|
7
|
+
export declare function enrollmentFailure(message: string, address: Address): never;
|
|
8
|
+
export declare function readRent(account: RawAccount): (length: number) => bigint;
|
|
9
|
+
export declare function readClock(account: RawAccount): bigint;
|
|
10
|
+
export declare function observeEnrollmentAccount(account: RawAccount, describes: string): Promise<PlanPrecondition>;
|
|
11
|
+
export declare function adaptChooseFaction(authorization: PlanAuthorization, target: Address, faction: 1 | 2 | 3): AddressOnlyInstruction;
|
|
12
|
+
//# sourceMappingURL=faction-enrollment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faction-enrollment.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/faction-enrollment.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAMxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,4BAA4B,CAAC;AAEpC,eAAO,MAAM,YAAY,EAC0B,OAAO,CAAC;AAC3D,eAAO,MAAM,aAAa,EACyB,OAAO,CAAC;AAE3D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,KAAK,CAE1E;AACD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAqCxE;AACD,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAerD;AACD,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,CAAC,CAO3B;AACD,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,iBAAiB,EAChC,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GACjB,sBAAsB,CAoBxB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { hashAccountState } from './account-state.js';
|
|
2
|
+
import { AccountRole } from '@solana/kit';
|
|
3
|
+
import { encodeChooseFactionData, PROFILE_FACTION_PROGRAM_ADDRESS, PLAYER_PROFILE_PROGRAM_ADDRESS, } from '../c4/faction-enrollment.js';
|
|
4
|
+
import { SageSdkError } from '../../client/errors.js';
|
|
5
|
+
export const RENT_ADDRESS = 'SysvarRent111111111111111111111111111111111';
|
|
6
|
+
export const CLOCK_ADDRESS = 'SysvarC1ock11111111111111111111111111111111';
|
|
7
|
+
const SYSVAR_OWNER = 'Sysvar1111111111111111111111111111111111111';
|
|
8
|
+
export function enrollmentFailure(message, address) {
|
|
9
|
+
throw new SageSdkError('ACTION_PRECONDITION_FAILED', message, { address });
|
|
10
|
+
}
|
|
11
|
+
export function readRent(account) {
|
|
12
|
+
if (account.owner !== SYSVAR_OWNER ||
|
|
13
|
+
account.executable ||
|
|
14
|
+
account.data.length !== 17)
|
|
15
|
+
enrollmentFailure('The Rent sysvar has an unexpected owner or layout. Refresh the configured deployment before calculating Profile funding.', account.address);
|
|
16
|
+
const view = new DataView(account.data.buffer, account.data.byteOffset, account.data.byteLength);
|
|
17
|
+
const rate = view.getBigUint64(0, true), threshold = view.getFloat64(8, true);
|
|
18
|
+
if (!Number.isFinite(threshold) || threshold < 0 || view.getUint8(16) > 100)
|
|
19
|
+
enrollmentFailure('The Rent sysvar contains unsupported values. Refresh the deployment or use a supported configuration before planning this action.', account.address);
|
|
20
|
+
return (length) => {
|
|
21
|
+
const base = (BigInt(length) + 128n) * rate;
|
|
22
|
+
const result = Number(base) * threshold;
|
|
23
|
+
if (base > BigInt(Number.MAX_SAFE_INTEGER) ||
|
|
24
|
+
!Number.isFinite(result) ||
|
|
25
|
+
result < 0 ||
|
|
26
|
+
result > Number.MAX_SAFE_INTEGER)
|
|
27
|
+
enrollmentFailure('Profile storage funding exceeds the supported exact calculation range. Use a supported Rent configuration before planning this action.', account.address);
|
|
28
|
+
return BigInt(Math.trunc(result));
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function readClock(account) {
|
|
32
|
+
if (account.owner !== SYSVAR_OWNER ||
|
|
33
|
+
account.executable ||
|
|
34
|
+
account.data.length !== 40)
|
|
35
|
+
enrollmentFailure('The Clock sysvar has an unexpected owner or layout. Refresh chain time before checking Profile key expiry.', account.address);
|
|
36
|
+
return new DataView(account.data.buffer, account.data.byteOffset, account.data.byteLength).getBigInt64(32, true);
|
|
37
|
+
}
|
|
38
|
+
export async function observeEnrollmentAccount(account, describes) {
|
|
39
|
+
return {
|
|
40
|
+
kind: 'account-state',
|
|
41
|
+
address: account.address,
|
|
42
|
+
dataHash: await hashAccountState(account.owner, account.data),
|
|
43
|
+
describes,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function adaptChooseFaction(authorization, target, faction) {
|
|
47
|
+
return {
|
|
48
|
+
programAddress: PROFILE_FACTION_PROGRAM_ADDRESS,
|
|
49
|
+
accounts: [
|
|
50
|
+
{ address: authorization.authority, role: AccountRole.READONLY_SIGNER },
|
|
51
|
+
{ address: authorization.profile, role: AccountRole.WRITABLE },
|
|
52
|
+
{
|
|
53
|
+
address: authorization.certificate ?? PROFILE_FACTION_PROGRAM_ADDRESS,
|
|
54
|
+
role: AccountRole.READONLY,
|
|
55
|
+
},
|
|
56
|
+
{ address: PLAYER_PROFILE_PROGRAM_ADDRESS, role: AccountRole.READONLY },
|
|
57
|
+
{ address: target, role: AccountRole.WRITABLE },
|
|
58
|
+
{
|
|
59
|
+
address: '11111111111111111111111111111111',
|
|
60
|
+
role: AccountRole.READONLY,
|
|
61
|
+
},
|
|
62
|
+
{ address: PLAYER_PROFILE_PROGRAM_ADDRESS, role: AccountRole.READONLY },
|
|
63
|
+
],
|
|
64
|
+
data: encodeChooseFactionData(authorization.keyIndex, faction),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=faction-enrollment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faction-enrollment.js","sourceRoot":"","sources":["../../../src/internal/planning/faction-enrollment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,uBAAuB,EACvB,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAOtD,MAAM,CAAC,MAAM,YAAY,GACvB,6CAAwD,CAAC;AAC3D,MAAM,CAAC,MAAM,aAAa,GACxB,6CAAwD,CAAC;AAC3D,MAAM,YAAY,GAAG,6CAA6C,CAAC;AACnE,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,OAAgB;IACjE,MAAM,IAAI,YAAY,CAAC,4BAA4B,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAC7E,CAAC;AACD,MAAM,UAAU,QAAQ,CAAC,OAAmB;IAC1C,IACE,OAAO,CAAC,KAAK,KAAK,YAAY;QAC9B,OAAO,CAAC,UAAU;QAClB,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE;QAE1B,iBAAiB,CACf,0HAA0H,EAC1H,OAAO,CAAC,OAAO,CAChB,CAAC;IACJ,MAAM,IAAI,GAAG,IAAI,QAAQ,CACvB,OAAO,CAAC,IAAI,CAAC,MAAM,EACnB,OAAO,CAAC,IAAI,CAAC,UAAU,EACvB,OAAO,CAAC,IAAI,CAAC,UAAU,CACxB,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,EACrC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG;QACzE,iBAAiB,CACf,mIAAmI,EACnI,OAAO,CAAC,OAAO,CAChB,CAAC;IACJ,OAAO,CAAC,MAAc,EAAE,EAAE;QACxB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;QACxC,IACE,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACtC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxB,MAAM,GAAG,CAAC;YACV,MAAM,GAAG,MAAM,CAAC,gBAAgB;YAEhC,iBAAiB,CACf,wIAAwI,EACxI,OAAO,CAAC,OAAO,CAChB,CAAC;QACJ,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,SAAS,CAAC,OAAmB;IAC3C,IACE,OAAO,CAAC,KAAK,KAAK,YAAY;QAC9B,OAAO,CAAC,UAAU;QAClB,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE;QAE1B,iBAAiB,CACf,4GAA4G,EAC5G,OAAO,CAAC,OAAO,CAChB,CAAC;IACJ,OAAO,IAAI,QAAQ,CACjB,OAAO,CAAC,IAAI,CAAC,MAAM,EACnB,OAAO,CAAC,IAAI,CAAC,UAAU,EACvB,OAAO,CAAC,IAAI,CAAC,UAAU,CACxB,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC1B,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAmB,EACnB,SAAiB;IAEjB,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,MAAM,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC;QAC7D,SAAS;KACV,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,kBAAkB,CAChC,aAAgC,EAChC,MAAe,EACf,OAAkB;IAElB,OAAO;QACL,cAAc,EAAE,+BAA+B;QAC/C,QAAQ,EAAE;YACR,EAAE,OAAO,EAAE,aAAa,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,eAAe,EAAE;YACvE,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE;YAC9D;gBACE,OAAO,EAAE,aAAa,CAAC,WAAW,IAAI,+BAA+B;gBACrE,IAAI,EAAE,WAAW,CAAC,QAAQ;aAC3B;YACD,EAAE,OAAO,EAAE,8BAA8B,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE;YACvE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE;YAC/C;gBACE,OAAO,EAAE,kCAA6C;gBACtD,IAAI,EAAE,WAAW,CAAC,QAAQ;aAC3B;YACD,EAAE,OAAO,EAAE,8BAA8B,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE;SACxE;QACD,IAAI,EAAE,uBAAuB,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC;KAC/D,CAAC;AACJ,CAAC"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Address, SageContext } from '../../client/contracts.js';
|
|
2
|
+
import { type FleetArrivalJourney } from '../c4/fleet-arrival.js';
|
|
3
|
+
import type { PlanAuthorization } from './authorization-adapter.js';
|
|
4
|
+
export interface FleetArrivalOptions {
|
|
5
|
+
readonly authorization: PlanAuthorization;
|
|
6
|
+
}
|
|
7
|
+
export interface FleetArrivalIntent {
|
|
8
|
+
readonly fleet: Address;
|
|
9
|
+
readonly game: Address;
|
|
10
|
+
readonly profile: Address;
|
|
11
|
+
readonly journey: Extract<FleetArrivalJourney, {
|
|
12
|
+
kind: 'subwarp';
|
|
13
|
+
}>;
|
|
14
|
+
readonly authorization: Omit<PlanAuthorization, 'certificate'>;
|
|
15
|
+
}
|
|
16
|
+
/** Read fresh movement, chain time and direct authority without retaining signer data. */
|
|
17
|
+
export declare function resolveFleetArrival(ctx: SageContext, fleetAddress: Address, options: FleetArrivalOptions): Promise<{
|
|
18
|
+
intent: FleetArrivalIntent;
|
|
19
|
+
character: Address;
|
|
20
|
+
regionTracker: Address;
|
|
21
|
+
xp: {
|
|
22
|
+
readonly gameVersion: 2;
|
|
23
|
+
readonly intent: import("./xp-runtime.js").XpRuntimeIntent;
|
|
24
|
+
readonly accounts: import("./xp-runtime.js").XpRuntimeAccounts;
|
|
25
|
+
};
|
|
26
|
+
}>;
|
|
27
|
+
/** Recheck only the selected journey/authority, permitting unrelated Fleet and XP changes. */
|
|
28
|
+
export declare function validateFleetArrivalIntent(ctx: SageContext, intent: FleetArrivalIntent): Promise<{
|
|
29
|
+
intent: FleetArrivalIntent;
|
|
30
|
+
character: Address;
|
|
31
|
+
regionTracker: Address;
|
|
32
|
+
xp: {
|
|
33
|
+
readonly gameVersion: 2;
|
|
34
|
+
readonly intent: import("./xp-runtime.js").XpRuntimeIntent;
|
|
35
|
+
readonly accounts: import("./xp-runtime.js").XpRuntimeAccounts;
|
|
36
|
+
};
|
|
37
|
+
}>;
|
|
38
|
+
//# sourceMappingURL=fleet-arrival.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-arrival.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/fleet-arrival.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAEP,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,wBAAwB,CAAC;AAahC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;CAC3C;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,mBAAmB,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IACpE,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;CAChE;AAaD,0FAA0F;AAC1F,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,OAAO,EACrB,OAAO,EAAE,mBAAmB;;;;;;;;;GA0G7B;AACD,8FAA8F;AAC9F,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,kBAAkB;;;;;;;;;GAmB3B"}
|