@aephia/atlas-kit 0.6.0-next.3 → 0.6.0-next.31

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.
Files changed (226) hide show
  1. package/README.md +4 -1
  2. package/dist/cargo/actions/deposit.d.ts.map +1 -1
  3. package/dist/cargo/actions/deposit.js +51 -9
  4. package/dist/cargo/actions/deposit.js.map +1 -1
  5. package/dist/cargo/actions/wallet-context.d.ts +2 -3
  6. package/dist/cargo/actions/wallet-context.d.ts.map +1 -1
  7. package/dist/cargo/actions/wallet-context.js +6 -33
  8. package/dist/cargo/actions/wallet-context.js.map +1 -1
  9. package/dist/cargo/actions/wallet-token.d.ts +1 -1
  10. package/dist/cargo/actions/wallet-token.d.ts.map +1 -1
  11. package/dist/cargo/actions/wallet-token.js +1 -9
  12. package/dist/cargo/actions/wallet-token.js.map +1 -1
  13. package/dist/cargo/actions/withdrawal.d.ts.map +1 -1
  14. package/dist/cargo/actions/withdrawal.js +54 -11
  15. package/dist/cargo/actions/withdrawal.js.map +1 -1
  16. package/dist/client/errors.d.ts +4 -0
  17. package/dist/client/errors.d.ts.map +1 -1
  18. package/dist/client/errors.js +31 -1
  19. package/dist/client/errors.js.map +1 -1
  20. package/dist/client/index.d.ts +1 -0
  21. package/dist/client/index.d.ts.map +1 -1
  22. package/dist/client/index.js +1 -0
  23. package/dist/client/index.js.map +1 -1
  24. package/dist/client/rpc-subscription-provider.d.ts +35 -0
  25. package/dist/client/rpc-subscription-provider.d.ts.map +1 -0
  26. package/dist/client/rpc-subscription-provider.js +190 -0
  27. package/dist/client/rpc-subscription-provider.js.map +1 -0
  28. package/dist/factions/actions/index.d.ts +36 -0
  29. package/dist/factions/actions/index.d.ts.map +1 -0
  30. package/dist/factions/actions/index.js +136 -0
  31. package/dist/factions/actions/index.js.map +1 -0
  32. package/dist/factions/index.d.ts +1 -0
  33. package/dist/factions/index.d.ts.map +1 -1
  34. package/dist/factions/index.js +1 -0
  35. package/dist/factions/index.js.map +1 -1
  36. package/dist/factions/profile-faction.d.ts +58 -0
  37. package/dist/factions/profile-faction.d.ts.map +1 -0
  38. package/dist/factions/profile-faction.js +63 -0
  39. package/dist/factions/profile-faction.js.map +1 -0
  40. package/dist/fleets/actions/add-ship.d.ts +35 -0
  41. package/dist/fleets/actions/add-ship.d.ts.map +1 -0
  42. package/dist/fleets/actions/add-ship.js +149 -0
  43. package/dist/fleets/actions/add-ship.js.map +1 -0
  44. package/dist/fleets/actions/create-fleet.d.ts +36 -0
  45. package/dist/fleets/actions/create-fleet.d.ts.map +1 -0
  46. package/dist/fleets/actions/create-fleet.js +138 -0
  47. package/dist/fleets/actions/create-fleet.js.map +1 -0
  48. package/dist/fleets/actions/index.d.ts +3 -0
  49. package/dist/fleets/actions/index.d.ts.map +1 -1
  50. package/dist/fleets/actions/index.js +3 -0
  51. package/dist/fleets/actions/index.js.map +1 -1
  52. package/dist/fleets/actions/ship-import.d.ts +48 -0
  53. package/dist/fleets/actions/ship-import.d.ts.map +1 -0
  54. package/dist/fleets/actions/ship-import.js +309 -0
  55. package/dist/fleets/actions/ship-import.js.map +1 -0
  56. package/dist/identity/actions/create-profile.d.ts +56 -0
  57. package/dist/identity/actions/create-profile.d.ts.map +1 -0
  58. package/dist/identity/actions/create-profile.js +139 -0
  59. package/dist/identity/actions/create-profile.js.map +1 -0
  60. package/dist/identity/actions/index.d.ts +38 -0
  61. package/dist/identity/actions/index.d.ts.map +1 -0
  62. package/dist/identity/actions/index.js +109 -0
  63. package/dist/identity/actions/index.js.map +1 -0
  64. package/dist/identity/index.d.ts +15 -0
  65. package/dist/identity/index.d.ts.map +1 -1
  66. package/dist/identity/index.js +15 -0
  67. package/dist/identity/index.js.map +1 -1
  68. package/dist/identity/permissions.d.ts +124 -0
  69. package/dist/identity/permissions.d.ts.map +1 -0
  70. package/dist/identity/permissions.js +171 -0
  71. package/dist/identity/permissions.js.map +1 -0
  72. package/dist/internal/c4/cargo-bytes-config.d.ts +7 -0
  73. package/dist/internal/c4/cargo-bytes-config.d.ts.map +1 -0
  74. package/dist/internal/c4/cargo-bytes-config.js +19 -0
  75. package/dist/internal/c4/cargo-bytes-config.js.map +1 -0
  76. package/dist/internal/c4/character-registration.d.ts +9 -0
  77. package/dist/internal/c4/character-registration.d.ts.map +1 -0
  78. package/dist/internal/c4/character-registration.js +21 -0
  79. package/dist/internal/c4/character-registration.js.map +1 -0
  80. package/dist/internal/c4/faction-adapter.d.ts +12 -0
  81. package/dist/internal/c4/faction-adapter.d.ts.map +1 -0
  82. package/dist/internal/c4/faction-adapter.js +52 -0
  83. package/dist/internal/c4/faction-adapter.js.map +1 -0
  84. package/dist/internal/c4/faction-enrollment.d.ts +6 -0
  85. package/dist/internal/c4/faction-enrollment.d.ts.map +1 -0
  86. package/dist/internal/c4/faction-enrollment.js +8 -0
  87. package/dist/internal/c4/faction-enrollment.js.map +1 -0
  88. package/dist/internal/c4/faction-epoch-meter.d.ts +10 -0
  89. package/dist/internal/c4/faction-epoch-meter.d.ts.map +1 -0
  90. package/dist/internal/c4/faction-epoch-meter.js +31 -0
  91. package/dist/internal/c4/faction-epoch-meter.js.map +1 -0
  92. package/dist/internal/c4/faction-treasury.d.ts +23 -0
  93. package/dist/internal/c4/faction-treasury.d.ts.map +1 -0
  94. package/dist/internal/c4/faction-treasury.js +48 -0
  95. package/dist/internal/c4/faction-treasury.js.map +1 -0
  96. package/dist/internal/c4/factions.d.ts +9 -30
  97. package/dist/internal/c4/factions.d.ts.map +1 -1
  98. package/dist/internal/c4/factions.js +22 -107
  99. package/dist/internal/c4/factions.js.map +1 -1
  100. package/dist/internal/c4/fleet-creation.d.ts +7 -0
  101. package/dist/internal/c4/fleet-creation.d.ts.map +1 -0
  102. package/dist/internal/c4/fleet-creation.js +180 -0
  103. package/dist/internal/c4/fleet-creation.js.map +1 -0
  104. package/dist/internal/c4/fleet-crew-binding.d.ts +2 -0
  105. package/dist/internal/c4/fleet-crew-binding.d.ts.map +1 -1
  106. package/dist/internal/c4/fleet-crew-binding.js +5 -0
  107. package/dist/internal/c4/fleet-crew-binding.js.map +1 -1
  108. package/dist/internal/c4/fleet-ship-assembly.d.ts +11 -0
  109. package/dist/internal/c4/fleet-ship-assembly.d.ts.map +1 -0
  110. package/dist/internal/c4/fleet-ship-assembly.js +44 -0
  111. package/dist/internal/c4/fleet-ship-assembly.js.map +1 -0
  112. package/dist/internal/c4/game.d.ts +18 -6
  113. package/dist/internal/c4/game.d.ts.map +1 -1
  114. package/dist/internal/c4/game.js +34 -9
  115. package/dist/internal/c4/game.js.map +1 -1
  116. package/dist/internal/c4/identity.d.ts +2 -7
  117. package/dist/internal/c4/identity.d.ts.map +1 -1
  118. package/dist/internal/c4/identity.js +2 -23
  119. package/dist/internal/c4/identity.js.map +1 -1
  120. package/dist/internal/c4/legacy-cargo-config.d.ts +6 -0
  121. package/dist/internal/c4/legacy-cargo-config.d.ts.map +1 -0
  122. package/dist/internal/c4/legacy-cargo-config.js +26 -0
  123. package/dist/internal/c4/legacy-cargo-config.js.map +1 -0
  124. package/dist/internal/c4/market.js +10 -6
  125. package/dist/internal/c4/market.js.map +1 -1
  126. package/dist/internal/c4/profile-creation.d.ts +17 -0
  127. package/dist/internal/c4/profile-creation.d.ts.map +1 -0
  128. package/dist/internal/c4/profile-creation.js +36 -0
  129. package/dist/internal/c4/profile-creation.js.map +1 -0
  130. package/dist/internal/c4/profile-faction.d.ts.map +1 -1
  131. package/dist/internal/c4/profile-faction.js +2 -0
  132. package/dist/internal/c4/profile-faction.js.map +1 -1
  133. package/dist/internal/c4/profile-permissions.d.ts +14 -0
  134. package/dist/internal/c4/profile-permissions.d.ts.map +1 -0
  135. package/dist/internal/c4/profile-permissions.js +80 -0
  136. package/dist/internal/c4/profile-permissions.js.map +1 -0
  137. package/dist/internal/c4/starbase.js +4 -3
  138. package/dist/internal/c4/starbase.js.map +1 -1
  139. package/dist/internal/c4/wallet-cargo-cache.d.ts +3 -0
  140. package/dist/internal/c4/wallet-cargo-cache.d.ts.map +1 -0
  141. package/dist/internal/c4/wallet-cargo-cache.js +24 -0
  142. package/dist/internal/c4/wallet-cargo-cache.js.map +1 -0
  143. package/dist/internal/c4/world.js +2 -1
  144. package/dist/internal/c4/world.js.map +1 -1
  145. package/dist/internal/loyalty-atlas-bank-state.d.ts +16 -0
  146. package/dist/internal/loyalty-atlas-bank-state.d.ts.map +1 -0
  147. package/dist/internal/loyalty-atlas-bank-state.js +10 -0
  148. package/dist/internal/loyalty-atlas-bank-state.js.map +1 -0
  149. package/dist/internal/planning/account-state.d.ts +4 -0
  150. package/dist/internal/planning/account-state.d.ts.map +1 -0
  151. package/dist/internal/planning/account-state.js +11 -0
  152. package/dist/internal/planning/account-state.js.map +1 -0
  153. package/dist/internal/planning/authorization-adapter.d.ts +17 -0
  154. package/dist/internal/planning/authorization-adapter.d.ts.map +1 -1
  155. package/dist/internal/planning/authorization-adapter.js +50 -0
  156. package/dist/internal/planning/authorization-adapter.js.map +1 -1
  157. package/dist/internal/planning/faction-enrollment.d.ts +12 -0
  158. package/dist/internal/planning/faction-enrollment.d.ts.map +1 -0
  159. package/dist/internal/planning/faction-enrollment.js +67 -0
  160. package/dist/internal/planning/faction-enrollment.js.map +1 -0
  161. package/dist/internal/planning/faction-trade-state.d.ts +16 -0
  162. package/dist/internal/planning/faction-trade-state.d.ts.map +1 -0
  163. package/dist/internal/planning/faction-trade-state.js +39 -0
  164. package/dist/internal/planning/faction-trade-state.js.map +1 -0
  165. package/dist/internal/planning/fleet-creation.d.ts +29 -0
  166. package/dist/internal/planning/fleet-creation.d.ts.map +1 -0
  167. package/dist/internal/planning/fleet-creation.js +106 -0
  168. package/dist/internal/planning/fleet-creation.js.map +1 -0
  169. package/dist/internal/planning/fleet-ship-assembly.d.ts +35 -0
  170. package/dist/internal/planning/fleet-ship-assembly.d.ts.map +1 -0
  171. package/dist/internal/planning/fleet-ship-assembly.js +135 -0
  172. package/dist/internal/planning/fleet-ship-assembly.js.map +1 -0
  173. package/dist/internal/planning/ship-token.d.ts +10 -0
  174. package/dist/internal/planning/ship-token.d.ts.map +1 -0
  175. package/dist/internal/planning/ship-token.js +47 -0
  176. package/dist/internal/planning/ship-token.js.map +1 -0
  177. package/dist/internal/planning/token-mint.d.ts +4 -0
  178. package/dist/internal/planning/token-mint.d.ts.map +1 -0
  179. package/dist/internal/planning/token-mint.js +15 -0
  180. package/dist/internal/planning/token-mint.js.map +1 -0
  181. package/dist/internal/planning/trade-faction-market.d.ts +20 -0
  182. package/dist/internal/planning/trade-faction-market.d.ts.map +1 -0
  183. package/dist/internal/planning/trade-faction-market.js +56 -0
  184. package/dist/internal/planning/trade-faction-market.js.map +1 -0
  185. package/dist/loyalty/actions/index.d.ts.map +1 -1
  186. package/dist/loyalty/actions/index.js +4 -3
  187. package/dist/loyalty/actions/index.js.map +1 -1
  188. package/dist/loyalty/index.d.ts.map +1 -1
  189. package/dist/loyalty/index.js +2 -6
  190. package/dist/loyalty/index.js.map +1 -1
  191. package/dist/markets/actions/index.d.ts +1 -0
  192. package/dist/markets/actions/index.d.ts.map +1 -1
  193. package/dist/markets/actions/index.js +1 -0
  194. package/dist/markets/actions/index.js.map +1 -1
  195. package/dist/markets/actions/trade-faction-market.d.ts +43 -0
  196. package/dist/markets/actions/trade-faction-market.d.ts.map +1 -0
  197. package/dist/markets/actions/trade-faction-market.js +288 -0
  198. package/dist/markets/actions/trade-faction-market.js.map +1 -0
  199. package/dist/mining/actions/index.d.ts +86 -0
  200. package/dist/mining/actions/index.d.ts.map +1 -0
  201. package/dist/mining/actions/index.js +295 -0
  202. package/dist/mining/actions/index.js.map +1 -0
  203. package/dist/planning/execution.d.ts.map +1 -1
  204. package/dist/planning/execution.js +191 -16
  205. package/dist/planning/execution.js.map +1 -1
  206. package/dist/planning/index.d.ts +316 -4
  207. package/dist/planning/index.d.ts.map +1 -1
  208. package/dist/planning/index.js +528 -14
  209. package/dist/planning/index.js.map +1 -1
  210. package/dist/planning/simulation.d.ts +18 -1
  211. package/dist/planning/simulation.d.ts.map +1 -1
  212. package/dist/planning/simulation.js +56 -10
  213. package/dist/planning/simulation.js.map +1 -1
  214. package/dist/registry/cargo.d.ts +9 -6
  215. package/dist/registry/cargo.d.ts.map +1 -1
  216. package/dist/registry/cargo.js +30 -4
  217. package/dist/registry/cargo.js.map +1 -1
  218. package/dist/registry/onboarding.d.ts +6 -0
  219. package/dist/registry/onboarding.d.ts.map +1 -0
  220. package/dist/registry/onboarding.js +24 -0
  221. package/dist/registry/onboarding.js.map +1 -0
  222. package/dist/registry/ships.d.ts +28 -0
  223. package/dist/registry/ships.d.ts.map +1 -0
  224. package/dist/registry/ships.js +51 -0
  225. package/dist/registry/ships.js.map +1 -0
  226. package/package.json +13 -1
@@ -0,0 +1,288 @@
1
+ import { deriveTradeEpochMeterAddress } from '../../internal/c4/faction-epoch-meter.js';
2
+ import { readTradeTreasury, validateTradeEpochMeter, } from '../../internal/planning/faction-trade-state.js';
3
+ import { adaptTradeFactionMarketInstruction } from '../../internal/planning/trade-faction-market.js';
4
+ import { isAddress } from '@solana/kit';
5
+ import { InvalidActionInputError, SageSdkError } from '../../client/errors.js';
6
+ import { readContextRawAccounts } from '../../client/reconciliation.js';
7
+ import { deriveFleetAddress, fleetAccountDefinition, } from '../../internal/c4/fleet.js';
8
+ import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/identity.js';
9
+ import { deriveFactionMarketAddress, factionMarketAccountDefinition, } from '../../internal/c4/market.js';
10
+ import { deriveFactionStandingAddress, deriveFactionConfigAddress, deriveFactionTreasuryAddress, factionStandingAccountDefinition, factionConfigAccountDefinition, } from '../../internal/c4/factions.js';
11
+ import { deriveStarbasePlayerAddress, starbasePlayerAccountDefinition, } from '../../internal/c4/starbase.js';
12
+ import { deriveStarSystemAddress, starSystemAccountDefinition, } from '../../internal/c4/world.js';
13
+ import { requireGameAddress } from '../../internal/game-context.js';
14
+ import { hashAccountState } from '../../internal/planning/account-state.js';
15
+ import { validatePlanAuthorization, } from '../../internal/planning/authorization-adapter.js';
16
+ import { createPlan, } from '../../planning/index.js';
17
+ function invalid(field) {
18
+ throw new InvalidActionInputError(field, undefined, 'the exact documented address-only trade input', `Provide ${field} without extra fields, accessors, coercion or signer objects; use direction buy/sell, an existing u16 offerIndex and bigint quantityRaw from 1 through 18446744073709551615.`);
19
+ }
20
+ function record(value, required, optional, field) {
21
+ if (value === null ||
22
+ typeof value !== 'object' ||
23
+ (Object.getPrototypeOf(value) !== Object.prototype &&
24
+ Object.getPrototypeOf(value) !== null))
25
+ invalid(field);
26
+ const descriptors = Object.getOwnPropertyDescriptors(value);
27
+ if (required.some((key) => !Object.hasOwn(descriptors, key)) ||
28
+ Reflect.ownKeys(value).some((key) => typeof key !== 'string' ||
29
+ ![...required, ...optional].includes(key) ||
30
+ !Object.hasOwn(descriptors[key], 'value')))
31
+ invalid(field);
32
+ return value;
33
+ }
34
+ function optionsFrom(value) {
35
+ const o = record(value, ['authorization', 'direction', 'offerIndex', 'quantityRaw'], [], 'options');
36
+ const a = record(o.authorization, ['profile', 'authority', 'keyIndex'], ['certificate'], 'authorization');
37
+ for (const key of ['profile', 'authority', 'certificate']) {
38
+ if (key === 'certificate' && a[key] === undefined)
39
+ continue;
40
+ if (typeof a[key] !== 'string' || !isAddress(a[key]))
41
+ invalid(`authorization.${key}`);
42
+ }
43
+ const authorization = { ...a };
44
+ validatePlanAuthorization(authorization);
45
+ if (o.direction !== 'buy' && o.direction !== 'sell')
46
+ invalid('direction');
47
+ if (typeof o.offerIndex !== 'number' ||
48
+ !Number.isInteger(o.offerIndex) ||
49
+ o.offerIndex < 0 ||
50
+ o.offerIndex > 65535)
51
+ invalid('offerIndex');
52
+ if (typeof o.quantityRaw !== 'bigint' ||
53
+ o.quantityRaw < 1n ||
54
+ o.quantityRaw > (1n << 64n) - 1n)
55
+ invalid('quantityRaw');
56
+ return {
57
+ authorization,
58
+ direction: o.direction,
59
+ offerIndex: o.offerIndex,
60
+ quantityRaw: o.quantityRaw,
61
+ };
62
+ }
63
+ function fail(message) {
64
+ throw new SageSdkError('ACTION_PRECONDITION_FAILED', `${message} Refresh the Fleet, Faction Market and required canonical accounts through this context, repair missing prerequisites, and retry.`);
65
+ }
66
+ function requireCrew(crewCount) {
67
+ if (!Number.isSafeInteger(crewCount) || crewCount <= 0)
68
+ fail('Fleet has no valid normalized crew. Crew the Fleet, refresh it, and retry.');
69
+ }
70
+ function required(raw, address) {
71
+ if (raw === undefined)
72
+ fail(`Required trade account ${address} is missing.`);
73
+ return raw;
74
+ }
75
+ /** Plans one explicit buy or sell using fresh canonical prerequisites, without simulation or writes.
76
+ * Buy moves cargo Treasury→Fleet and ATLAS Character→Treasury; sell reverses both.
77
+ * Partial fills, stock, floors, faucet caps/burn, fees, restock and final arithmetic
78
+ * remain chain-authoritative. Standing gates access and is credited on selling;
79
+ * it is not a local price adjustment. Offline construction is not live trade evidence.
80
+ * @example
81
+ * ```ts
82
+ * declare const ctx: SageContext;
83
+ * declare const fleet: FleetSnapshot;
84
+ * declare const market: FactionMarketSnapshot;
85
+ * declare const authorization: PlanAuthorization;
86
+ * const plan = await planTradeFactionMarket(ctx, fleet, market, { authorization, direction: 'sell', offerIndex: 0, quantityRaw: 5n });
87
+ * console.log(plan.describe());
88
+ * ```
89
+ */
90
+ export async function planTradeFactionMarket(ctx, fleet, market, input) {
91
+ const options = optionsFrom(input);
92
+ const game = requireGameAddress(ctx);
93
+ const { authorization, direction, offerIndex, quantityRaw } = options;
94
+ if (fleet.kind !== 'fleet' ||
95
+ market.kind !== 'factionMarket' ||
96
+ fleet.game !== game ||
97
+ market.game.address !== game ||
98
+ fleet.ownerProfile.address !== authorization.profile)
99
+ fail('Fleet/Market snapshots must belong to the configured Game and authorized Profile.');
100
+ requireCrew(fleet.crewCount);
101
+ const character = await findCharacterPda(authorization.profile, game);
102
+ const system = market.system.address;
103
+ const player = await deriveStarbasePlayerAddress(system, character);
104
+ const treasury = await deriveFactionTreasuryAddress(game, market.factionId);
105
+ const standing = await deriveFactionStandingAddress(game, authorization.profile, market.factionId);
106
+ const addresses = [
107
+ fleet.address,
108
+ character,
109
+ system,
110
+ player,
111
+ market.address,
112
+ treasury,
113
+ ];
114
+ const reads = await readContextRawAccounts(ctx, [...addresses, standing]);
115
+ const accounts = addresses.map((address, index) => required(reads[index], address));
116
+ const [fleetRaw, characterRaw, systemRaw, playerRaw, marketRaw, treasuryRaw] = accounts;
117
+ const f = fleetAccountDefinition.decode(fleetRaw);
118
+ requireCrew(f.crewCount);
119
+ if (f.game !== game ||
120
+ f.ownerProfile !== authorization.profile ||
121
+ (await deriveFleetAddress(f)) !== fleet.address)
122
+ fail('Fresh Fleet does not match its canonical Game/Profile identity.');
123
+ if (fleet.state.kind !== 'docked' ||
124
+ f.state.kind !== 'docked' ||
125
+ fleet.state.system.address !== system ||
126
+ f.state.system !== system ||
127
+ fleet.state.systemSeqId !== f.state.systemSeqId)
128
+ fail('Fleet must retain its selected Docked System and sequence.');
129
+ const c = characterAccountDefinition.decode(characterRaw);
130
+ if (c.game !== game || c.playerProfile !== authorization.profile)
131
+ fail('Canonical Character must match the configured Game and Profile.');
132
+ const s = starSystemAccountDefinition.decode(systemRaw);
133
+ if (s.game !== game ||
134
+ (await deriveStarSystemAddress(game, s.systemId)) !== system)
135
+ fail('Star System must match its canonical Game identity.');
136
+ if (s.starbase === undefined ||
137
+ s.starbase.hp <= 0 ||
138
+ s.sequenceId !== market.starbaseSequenceId ||
139
+ s.sequenceId !== f.state.systemSeqId)
140
+ fail('Trading requires an undestroyed local Starbase and current Starbase sequence.');
141
+ const p = starbasePlayerAccountDefinition.decode(playerRaw);
142
+ if (p.playerProfile !== authorization.profile ||
143
+ p.character !== character ||
144
+ p.system !== system ||
145
+ p.sequenceId !== s.sequenceId)
146
+ fail('Starbase Player must match the Profile, Character, System and current undestroyed Starbase sequence.');
147
+ const m = factionMarketAccountDefinition.decode(marketRaw);
148
+ if (m.game !== game ||
149
+ m.system !== system ||
150
+ m.factionId !== market.factionId ||
151
+ m.starbaseSequenceId !== s.sequenceId ||
152
+ (await deriveFactionMarketAddress(game, system, m.starbaseSequenceId)) !==
153
+ market.address)
154
+ fail('Faction Market must match its canonical Game, faction, System and Starbase sequence.');
155
+ if (m.status !== 'active' || market.status !== 'active')
156
+ fail('Faction Market must be active.');
157
+ const offer = m.offers[offerIndex];
158
+ const selected = market.offers[offerIndex];
159
+ if (offer === undefined || selected === undefined)
160
+ fail('offerIndex must identify an existing ordered offer in both the selected and fresh Faction Market.');
161
+ if (offer.cargoId !== selected.id ||
162
+ offer.priceRaw !== selected.priceRaw ||
163
+ offer.remainingQuantityRaw !== selected.remainingQuantityRaw ||
164
+ offer.canBuyFromFaction !== selected.canBuyFromFaction ||
165
+ offer.canSellToFaction !== selected.canSellToFaction ||
166
+ m.minimumStandingToBuy !== market.minimumStandingToBuy ||
167
+ m.minimumStandingToSell !== market.minimumStandingToSell)
168
+ fail('Selected Faction Market trade intent changed; select the refreshed offer explicitly.');
169
+ if (!(direction === 'buy' ? offer.canBuyFromFaction : offer.canSellToFaction))
170
+ fail('Selected offer does not support this trade direction.');
171
+ const identity = { game, factionId: m.factionId };
172
+ const t = await readTradeTreasury(treasuryRaw, identity);
173
+ const finite = [
174
+ direction === 'buy'
175
+ ? {
176
+ kind: 'faction-treasury-buy',
177
+ address: treasury,
178
+ ...identity,
179
+ cargoId: offer.cargoId,
180
+ floorRaw: t.reserves.find((row) => row.cargoId === offer.cargoId)?.floorRaw ??
181
+ 0n,
182
+ describes: `Faction Treasury ${treasury} retains its canonical identity and cargo ${offer.cargoId} reserve floor; live stock and balances may change.`,
183
+ }
184
+ : {
185
+ kind: 'faction-treasury-sell',
186
+ address: treasury,
187
+ ...identity,
188
+ atlasOutCapPerEpochRaw: t.atlasOutCapPerEpochRaw,
189
+ epochLengthSeconds: t.epochLengthSeconds,
190
+ describes: `Faction Treasury ${treasury} retains its canonical identity, ATLAS payout cap and epoch length; live balances and epoch counters may change.`,
191
+ },
192
+ ];
193
+ // The System is a freshly validated read-only anchor, not trade intent.
194
+ // Fleet/Market/StarbasePlayer bind the incarnation; the chain rechecks the System.
195
+ const bound = [
196
+ ['Fleet cargo and trade state', fleetRaw],
197
+ ['Character ATLAS and identity', characterRaw],
198
+ ['Starbase Player dock incarnation', playerRaw],
199
+ ['Faction Market ordered offers', marketRaw],
200
+ ];
201
+ let cohort;
202
+ const absent = [];
203
+ if (reads[6] === undefined) {
204
+ if ((direction === 'buy' ? m.minimumStandingToBuy : m.minimumStandingToSell) >
205
+ -1000)
206
+ fail('Canonical Standing is absent and the selected direction is not open; initialize Faction Standing before trading.');
207
+ absent.push({
208
+ kind: 'account-absent',
209
+ address: standing,
210
+ describes: 'Canonical Faction Standing remains strictly absent for this open-direction trade.',
211
+ });
212
+ }
213
+ else {
214
+ const standingRaw = required(reads[6], standing);
215
+ const st = factionStandingAccountDefinition.decode(standingRaw);
216
+ if (st.game !== game ||
217
+ st.profile !== authorization.profile ||
218
+ st.factionId !== m.factionId)
219
+ fail('Faction Standing must match the Game, Profile and Market faction.');
220
+ const config = await deriveFactionConfigAddress(game);
221
+ const meter = await deriveTradeEpochMeterAddress(identity);
222
+ const extra = await readContextRawAccounts(ctx, [config, meter]);
223
+ const configRaw = required(extra[0], config);
224
+ const meterRaw = required(extra[1], meter);
225
+ factionConfigAccountDefinition.decode(configRaw);
226
+ await validateTradeEpochMeter(meterRaw, identity);
227
+ finite.push({
228
+ kind: 'faction-epoch-meter',
229
+ address: meter,
230
+ ...identity,
231
+ describes: `Faction Epoch Meter ${meter} retains its canonical identity and layout; epoch and accrual counters may change.`,
232
+ });
233
+ bound.push(['Faction Standing access and accrual', standingRaw], ['Faction Config reputation rules', configRaw]);
234
+ cohort = {
235
+ factionStanding: standing,
236
+ factionConfig: config,
237
+ factionEpochMeter: meter,
238
+ };
239
+ }
240
+ const summary = `${direction === 'buy' ? 'Buy' : 'Sell'} up to ${String(quantityRaw)} raw units of ${selected.name} at Faction Market offer ${String(offerIndex)}. ${direction === 'buy' ? 'Cargo Treasury→Fleet; ATLAS Character→Treasury.' : 'Cargo Fleet→Treasury; ATLAS Treasury→Character.'} Partial fills, stock, treasury floors, faucet caps/burn, standing/epoch/decay, fees, restock and final arithmetic remain chain-authoritative. Standing gates access and is credited on selling, not a price adjustment.`;
241
+ return createPlan({
242
+ kind: 'markets.trade-faction-market',
243
+ summary,
244
+ preconditions: [
245
+ ...(await Promise.all(bound.map(async ([role, account]) => ({
246
+ kind: 'account-state',
247
+ address: account.address,
248
+ dataHash: await hashAccountState(account.owner, account.data),
249
+ describes: `${role} at ${account.address} remains unchanged. Refresh the Fleet and Market and prepare a new trade if this state changes.`,
250
+ })))),
251
+ ...finite,
252
+ ...absent,
253
+ ],
254
+ steps: [
255
+ {
256
+ describes: summary,
257
+ signers: [authorization.authority],
258
+ semantics: [
259
+ {
260
+ kind: 'requires',
261
+ resource: `faction-market:${market.address}`,
262
+ fact: 'ordered-offers',
263
+ },
264
+ {
265
+ kind: 'invalidates',
266
+ resource: `faction-market:${market.address}`,
267
+ fact: 'ordered-offers',
268
+ },
269
+ ],
270
+ instruction: adaptTradeFactionMarketInstruction({
271
+ authorization,
272
+ character,
273
+ game,
274
+ system,
275
+ starbasePlayer: player,
276
+ fleet: fleet.address,
277
+ factionMarket: market.address,
278
+ treasury,
279
+ offerIndex,
280
+ quantity: quantityRaw,
281
+ playerBuys: direction === 'buy',
282
+ ...cohort,
283
+ }),
284
+ },
285
+ ],
286
+ });
287
+ }
288
+ //# sourceMappingURL=trade-faction-market.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trade-faction-market.js","sourceRoot":"","sources":["../../../src/markets/actions/trade-faction-market.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import type { Address, SageContext } from '../../client/contracts.js';
2
+ import type { EntityRef } from '../../client/refs.js';
3
+ import type { ResolvedFleetAccountData } from '../../internal/fleet.js';
4
+ import { type PlanAuthorization } from '../../internal/planning/authorization-adapter.js';
5
+ import { type Plan } from '../../planning/index.js';
6
+ import type { ResourceDepositSnapshot } from '../index.js';
7
+ export type { PlanAuthorization };
8
+ interface FleetSnapshot extends Omit<ResolvedFleetAccountData, 'ownerProfile'> {
9
+ readonly kind: 'fleet';
10
+ readonly address: Address;
11
+ readonly ownerProfile: EntityRef<'profile'>;
12
+ toJSON(): unknown;
13
+ }
14
+ /** Select resources from one Asteroid deposit for an owned Fleet.
15
+ * @example
16
+ * ```ts
17
+ * declare const authorization: PlanAuthorization;
18
+ * declare const asteroid: ResourceDepositSnapshot;
19
+ * const options: PlanFleetStartMiningOptions = { authorization, asteroid, resourceIds: [8] };
20
+ * ```
21
+ */
22
+ export interface PlanFleetStartMiningOptions {
23
+ readonly authorization: PlanAuthorization;
24
+ readonly asteroid: ResourceDepositSnapshot;
25
+ /** Dense, non-empty, unique cargo ids in ascending order, selected from the deposit. */
26
+ readonly resourceIds: readonly number[];
27
+ }
28
+ /** Plans one inert Fleet mining start at an Asteroid, without signing or simulation.
29
+ *
30
+ * Idle Fleets use their current coordinate; warp/subwarp Fleets use their arrival
31
+ * coordinate, never a local clock. Moving snapshots support explicit composition
32
+ * with planFleetSettleArrival; this planner emits only the mining instruction and
33
+ * adds neither settlement nor a funder. Direct mining needs Idle: mining-specific
34
+ * PTR evidence rejected an elapsed warp despite its canonical Character account,
35
+ * while explicit settlement followed by mining succeeded. An in-transit subwarp
36
+ * also rejected; elapsed-subwarp mining composition remains unmeasured on chain.
37
+ * These results do not inherit startSubwarp's automatic refresh behavior.
38
+ * Explicitly prepend settlement with a visible funder, or settle and reload the
39
+ * Fleet before planning mining. Idle Fleets do not need that extra step.
40
+ * Simulate the complete Plan before execution; arrival, permissions, range, fuel,
41
+ * and mining eligibility remain program-authoritative. This planner neither
42
+ * estimates mining output nor stops mining. No FleetCrewBinding account exists
43
+ * in the pinned ten-account instruction.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * declare const ctx: SageContext;
48
+ * declare const fleet: FleetSnapshot;
49
+ * declare const authorization: PlanAuthorization;
50
+ * declare const asteroid: ResourceDepositSnapshot;
51
+ * const plan = await planFleetStartMining(ctx, fleet, { authorization, asteroid, resourceIds: [8] });
52
+ * ```
53
+ */
54
+ export declare function planFleetStartMining(ctx: SageContext, fleet: FleetSnapshot, options: PlanFleetStartMiningOptions): Promise<Plan>;
55
+ /** Address-only authorization to stop an owned Fleet's current mining operation.
56
+ * @example
57
+ * ```ts
58
+ * declare const authorization: PlanAuthorization;
59
+ * const options: PlanFleetStopMiningOptions = { authorization };
60
+ * ```
61
+ */
62
+ export interface PlanFleetStopMiningOptions {
63
+ readonly authorization: PlanAuthorization;
64
+ }
65
+ /** Plans one inert stop-mining instruction using the Asteroid in Fleet state.
66
+ *
67
+ * The snapshot must be mining; refresh any non-mining snapshot before retrying.
68
+ * If mining resolves to idle after planning, the instruction can still consume
69
+ * planet-exit fuel, as observed on PTR, or fail cargo/upkeep checks. Refresh
70
+ * before planning and simulate before execution; Idle is not a free no-op.
71
+ * No yield, cargo amount, or execution success is promised. DO_MINING
72
+ * permission remains chain-authoritative. Only validated canonical optional
73
+ * accounts are included, including the chain-created neutral CrewBinding at
74
+ * its canonical PDA; proven absence uses the generated omitted-account sentinel.
75
+ * Planning does not sign, simulate, or submit a transaction.
76
+ *
77
+ * @example
78
+ * ```ts
79
+ * declare const ctx: SageContext;
80
+ * declare const fleet: FleetSnapshot;
81
+ * declare const authorization: PlanAuthorization;
82
+ * const plan = await planFleetStopMining(ctx, fleet, { authorization });
83
+ * ```
84
+ */
85
+ export declare function planFleetStopMining(ctx: SageContext, fleet: FleetSnapshot, options: PlanFleetStopMiningOptions): Promise<Plan>;
86
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mining/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAEP,WAAW,EACZ,MAAM,2BAA2B,CAAC;AAGnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAoBtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAMxE,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3D,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,UAAU,aAAc,SAAQ,IAAI,CAAC,wBAAwB,EAAE,cAAc,CAAC;IAC5E,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,IAAI,OAAO,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,wFAAwF;IACxF,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAiFD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAiLf;AAED;;;;;;GAMG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,IAAI,CAAC,CAiFf"}