@aephia/atlas-kit 0.0.0

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 (279) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +124 -0
  3. package/dist/bindings.d.ts +11 -0
  4. package/dist/bindings.d.ts.map +1 -0
  5. package/dist/bindings.js +11 -0
  6. package/dist/bindings.js.map +1 -0
  7. package/dist/cargo/actions/index.d.ts +122 -0
  8. package/dist/cargo/actions/index.d.ts.map +1 -0
  9. package/dist/cargo/actions/index.js +526 -0
  10. package/dist/cargo/actions/index.js.map +1 -0
  11. package/dist/cargo/index.d.ts +77 -0
  12. package/dist/cargo/index.d.ts.map +1 -0
  13. package/dist/cargo/index.js +102 -0
  14. package/dist/cargo/index.js.map +1 -0
  15. package/dist/claim-stakes/index.d.ts +64 -0
  16. package/dist/claim-stakes/index.d.ts.map +1 -0
  17. package/dist/claim-stakes/index.js +97 -0
  18. package/dist/claim-stakes/index.js.map +1 -0
  19. package/dist/client/context.d.ts +21 -0
  20. package/dist/client/context.d.ts.map +1 -0
  21. package/dist/client/context.js +1374 -0
  22. package/dist/client/context.js.map +1 -0
  23. package/dist/client/contracts.d.ts +671 -0
  24. package/dist/client/contracts.d.ts.map +1 -0
  25. package/dist/client/contracts.js +2 -0
  26. package/dist/client/contracts.js.map +1 -0
  27. package/dist/client/deployments.d.ts +3 -0
  28. package/dist/client/deployments.d.ts.map +1 -0
  29. package/dist/client/deployments.js +2 -0
  30. package/dist/client/deployments.js.map +1 -0
  31. package/dist/client/errors.d.ts +227 -0
  32. package/dist/client/errors.d.ts.map +1 -0
  33. package/dist/client/errors.js +288 -0
  34. package/dist/client/errors.js.map +1 -0
  35. package/dist/client/index.d.ts +7 -0
  36. package/dist/client/index.d.ts.map +1 -0
  37. package/dist/client/index.js +5 -0
  38. package/dist/client/index.js.map +1 -0
  39. package/dist/client/lifecycle.d.ts +4 -0
  40. package/dist/client/lifecycle.d.ts.map +1 -0
  41. package/dist/client/lifecycle.js +10 -0
  42. package/dist/client/lifecycle.js.map +1 -0
  43. package/dist/client/provider-errors.d.ts +9 -0
  44. package/dist/client/provider-errors.d.ts.map +1 -0
  45. package/dist/client/provider-errors.js +12 -0
  46. package/dist/client/provider-errors.js.map +1 -0
  47. package/dist/client/reconciliation.d.ts +10 -0
  48. package/dist/client/reconciliation.d.ts.map +1 -0
  49. package/dist/client/reconciliation.js +9 -0
  50. package/dist/client/reconciliation.js.map +1 -0
  51. package/dist/client/refs.d.ts +23 -0
  52. package/dist/client/refs.d.ts.map +1 -0
  53. package/dist/client/refs.js +12 -0
  54. package/dist/client/refs.js.map +1 -0
  55. package/dist/combat/index.d.ts +256 -0
  56. package/dist/combat/index.d.ts.map +1 -0
  57. package/dist/combat/index.js +222 -0
  58. package/dist/combat/index.js.map +1 -0
  59. package/dist/crafting/index.d.ts +308 -0
  60. package/dist/crafting/index.d.ts.map +1 -0
  61. package/dist/crafting/index.js +400 -0
  62. package/dist/crafting/index.js.map +1 -0
  63. package/dist/factions/index.d.ts +292 -0
  64. package/dist/factions/index.d.ts.map +1 -0
  65. package/dist/factions/index.js +334 -0
  66. package/dist/factions/index.js.map +1 -0
  67. package/dist/fleets/actions/index.d.ts +200 -0
  68. package/dist/fleets/actions/index.d.ts.map +1 -0
  69. package/dist/fleets/actions/index.js +854 -0
  70. package/dist/fleets/actions/index.js.map +1 -0
  71. package/dist/fleets/index.d.ts +100 -0
  72. package/dist/fleets/index.d.ts.map +1 -0
  73. package/dist/fleets/index.js +124 -0
  74. package/dist/fleets/index.js.map +1 -0
  75. package/dist/identity/index.d.ts +225 -0
  76. package/dist/identity/index.d.ts.map +1 -0
  77. package/dist/identity/index.js +341 -0
  78. package/dist/identity/index.js.map +1 -0
  79. package/dist/index.d.ts +401 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +519 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/internal/c4/adapter.d.ts +6 -0
  84. package/dist/internal/c4/adapter.d.ts.map +1 -0
  85. package/dist/internal/c4/adapter.js +2 -0
  86. package/dist/internal/c4/adapter.js.map +1 -0
  87. package/dist/internal/c4/bindings.d.ts +4 -0
  88. package/dist/internal/c4/bindings.d.ts.map +1 -0
  89. package/dist/internal/c4/bindings.js +4 -0
  90. package/dist/internal/c4/bindings.js.map +1 -0
  91. package/dist/internal/c4/character-modifier.d.ts +5 -0
  92. package/dist/internal/c4/character-modifier.d.ts.map +1 -0
  93. package/dist/internal/c4/character-modifier.js +100 -0
  94. package/dist/internal/c4/character-modifier.js.map +1 -0
  95. package/dist/internal/c4/claim-stake.d.ts +140 -0
  96. package/dist/internal/c4/claim-stake.d.ts.map +1 -0
  97. package/dist/internal/c4/claim-stake.js +205 -0
  98. package/dist/internal/c4/claim-stake.js.map +1 -0
  99. package/dist/internal/c4/combat.d.ts +98 -0
  100. package/dist/internal/c4/combat.d.ts.map +1 -0
  101. package/dist/internal/c4/combat.js +232 -0
  102. package/dist/internal/c4/combat.js.map +1 -0
  103. package/dist/internal/c4/crafting.d.ts +170 -0
  104. package/dist/internal/c4/crafting.d.ts.map +1 -0
  105. package/dist/internal/c4/crafting.js +387 -0
  106. package/dist/internal/c4/crafting.js.map +1 -0
  107. package/dist/internal/c4/factions.d.ts +248 -0
  108. package/dist/internal/c4/factions.d.ts.map +1 -0
  109. package/dist/internal/c4/factions.js +589 -0
  110. package/dist/internal/c4/factions.js.map +1 -0
  111. package/dist/internal/c4/fleet-crew-binding.d.ts +12 -0
  112. package/dist/internal/c4/fleet-crew-binding.d.ts.map +1 -0
  113. package/dist/internal/c4/fleet-crew-binding.js +51 -0
  114. package/dist/internal/c4/fleet-crew-binding.js.map +1 -0
  115. package/dist/internal/c4/fleet.d.ts +310 -0
  116. package/dist/internal/c4/fleet.d.ts.map +1 -0
  117. package/dist/internal/c4/fleet.js +393 -0
  118. package/dist/internal/c4/fleet.js.map +1 -0
  119. package/dist/internal/c4/game.d.ts +192 -0
  120. package/dist/internal/c4/game.d.ts.map +1 -0
  121. package/dist/internal/c4/game.js +396 -0
  122. package/dist/internal/c4/game.js.map +1 -0
  123. package/dist/internal/c4/identity.d.ts +193 -0
  124. package/dist/internal/c4/identity.d.ts.map +1 -0
  125. package/dist/internal/c4/identity.js +180 -0
  126. package/dist/internal/c4/identity.js.map +1 -0
  127. package/dist/internal/c4/loot-layout.d.ts +20 -0
  128. package/dist/internal/c4/loot-layout.d.ts.map +1 -0
  129. package/dist/internal/c4/loot-layout.js +29 -0
  130. package/dist/internal/c4/loot-layout.js.map +1 -0
  131. package/dist/internal/c4/loyalty.d.ts +102 -0
  132. package/dist/internal/c4/loyalty.d.ts.map +1 -0
  133. package/dist/internal/c4/loyalty.js +318 -0
  134. package/dist/internal/c4/loyalty.js.map +1 -0
  135. package/dist/internal/c4/market.d.ts +112 -0
  136. package/dist/internal/c4/market.d.ts.map +1 -0
  137. package/dist/internal/c4/market.js +247 -0
  138. package/dist/internal/c4/market.js.map +1 -0
  139. package/dist/internal/c4/pda.d.ts +6 -0
  140. package/dist/internal/c4/pda.d.ts.map +1 -0
  141. package/dist/internal/c4/pda.js +45 -0
  142. package/dist/internal/c4/pda.js.map +1 -0
  143. package/dist/internal/c4/profile-faction.d.ts +14 -0
  144. package/dist/internal/c4/profile-faction.d.ts.map +1 -0
  145. package/dist/internal/c4/profile-faction.js +69 -0
  146. package/dist/internal/c4/profile-faction.js.map +1 -0
  147. package/dist/internal/c4/rewards.d.ts +135 -0
  148. package/dist/internal/c4/rewards.d.ts.map +1 -0
  149. package/dist/internal/c4/rewards.js +305 -0
  150. package/dist/internal/c4/rewards.js.map +1 -0
  151. package/dist/internal/c4/scanning.d.ts +85 -0
  152. package/dist/internal/c4/scanning.d.ts.map +1 -0
  153. package/dist/internal/c4/scanning.js +180 -0
  154. package/dist/internal/c4/scanning.js.map +1 -0
  155. package/dist/internal/c4/starbase.d.ts +186 -0
  156. package/dist/internal/c4/starbase.d.ts.map +1 -0
  157. package/dist/internal/c4/starbase.js +259 -0
  158. package/dist/internal/c4/starbase.js.map +1 -0
  159. package/dist/internal/c4/world.d.ts +294 -0
  160. package/dist/internal/c4/world.d.ts.map +1 -0
  161. package/dist/internal/c4/world.js +417 -0
  162. package/dist/internal/c4/world.js.map +1 -0
  163. package/dist/internal/cargo.d.ts +65 -0
  164. package/dist/internal/cargo.d.ts.map +1 -0
  165. package/dist/internal/cargo.js +46 -0
  166. package/dist/internal/cargo.js.map +1 -0
  167. package/dist/internal/claim-stake.d.ts +31 -0
  168. package/dist/internal/claim-stake.d.ts.map +1 -0
  169. package/dist/internal/claim-stake.js +20 -0
  170. package/dist/internal/claim-stake.js.map +1 -0
  171. package/dist/internal/fleet.d.ts +165 -0
  172. package/dist/internal/fleet.d.ts.map +1 -0
  173. package/dist/internal/fleet.js +179 -0
  174. package/dist/internal/fleet.js.map +1 -0
  175. package/dist/internal/game-context.d.ts +4 -0
  176. package/dist/internal/game-context.d.ts.map +1 -0
  177. package/dist/internal/game-context.js +9 -0
  178. package/dist/internal/game-context.js.map +1 -0
  179. package/dist/internal/immutable-tree.d.ts +5 -0
  180. package/dist/internal/immutable-tree.d.ts.map +1 -0
  181. package/dist/internal/immutable-tree.js +47 -0
  182. package/dist/internal/immutable-tree.js.map +1 -0
  183. package/dist/internal/json.d.ts +7 -0
  184. package/dist/internal/json.d.ts.map +1 -0
  185. package/dist/internal/json.js +33 -0
  186. package/dist/internal/json.js.map +1 -0
  187. package/dist/internal/planning/authorization-adapter.d.ts +63 -0
  188. package/dist/internal/planning/authorization-adapter.d.ts.map +1 -0
  189. package/dist/internal/planning/authorization-adapter.js +222 -0
  190. package/dist/internal/planning/authorization-adapter.js.map +1 -0
  191. package/dist/internal/read-meta.d.ts +84 -0
  192. package/dist/internal/read-meta.d.ts.map +1 -0
  193. package/dist/internal/read-meta.js +28 -0
  194. package/dist/internal/read-meta.js.map +1 -0
  195. package/dist/internal/resolved-snapshot.d.ts +3 -0
  196. package/dist/internal/resolved-snapshot.d.ts.map +1 -0
  197. package/dist/internal/resolved-snapshot.js +11 -0
  198. package/dist/internal/resolved-snapshot.js.map +1 -0
  199. package/dist/internal/zink/provider.d.ts +9 -0
  200. package/dist/internal/zink/provider.d.ts.map +1 -0
  201. package/dist/internal/zink/provider.js +213 -0
  202. package/dist/internal/zink/provider.js.map +1 -0
  203. package/dist/loyalty/index.d.ts +195 -0
  204. package/dist/loyalty/index.d.ts.map +1 -0
  205. package/dist/loyalty/index.js +289 -0
  206. package/dist/loyalty/index.js.map +1 -0
  207. package/dist/markets/index.d.ts +195 -0
  208. package/dist/markets/index.d.ts.map +1 -0
  209. package/dist/markets/index.js +232 -0
  210. package/dist/markets/index.js.map +1 -0
  211. package/dist/mining/index.d.ts +156 -0
  212. package/dist/mining/index.d.ts.map +1 -0
  213. package/dist/mining/index.js +236 -0
  214. package/dist/mining/index.js.map +1 -0
  215. package/dist/planning/assembly.d.ts +42 -0
  216. package/dist/planning/assembly.d.ts.map +1 -0
  217. package/dist/planning/assembly.js +141 -0
  218. package/dist/planning/assembly.js.map +1 -0
  219. package/dist/planning/composition.d.ts +4 -0
  220. package/dist/planning/composition.d.ts.map +1 -0
  221. package/dist/planning/composition.js +76 -0
  222. package/dist/planning/composition.js.map +1 -0
  223. package/dist/planning/execution.d.ts +93 -0
  224. package/dist/planning/execution.d.ts.map +1 -0
  225. package/dist/planning/execution.js +549 -0
  226. package/dist/planning/execution.js.map +1 -0
  227. package/dist/planning/index.d.ts +219 -0
  228. package/dist/planning/index.d.ts.map +1 -0
  229. package/dist/planning/index.js +375 -0
  230. package/dist/planning/index.js.map +1 -0
  231. package/dist/planning/plan-instances.d.ts +3 -0
  232. package/dist/planning/plan-instances.d.ts.map +1 -0
  233. package/dist/planning/plan-instances.js +8 -0
  234. package/dist/planning/plan-instances.js.map +1 -0
  235. package/dist/planning/plan-sequence-checkpoint.d.ts +154 -0
  236. package/dist/planning/plan-sequence-checkpoint.d.ts.map +1 -0
  237. package/dist/planning/plan-sequence-checkpoint.js +449 -0
  238. package/dist/planning/plan-sequence-checkpoint.js.map +1 -0
  239. package/dist/planning/plan-sequence-execution.d.ts +72 -0
  240. package/dist/planning/plan-sequence-execution.d.ts.map +1 -0
  241. package/dist/planning/plan-sequence-execution.js +410 -0
  242. package/dist/planning/plan-sequence-execution.js.map +1 -0
  243. package/dist/planning/plan-sequence.d.ts +244 -0
  244. package/dist/planning/plan-sequence.d.ts.map +1 -0
  245. package/dist/planning/plan-sequence.js +264 -0
  246. package/dist/planning/plan-sequence.js.map +1 -0
  247. package/dist/planning/simulation.d.ts +50 -0
  248. package/dist/planning/simulation.d.ts.map +1 -0
  249. package/dist/planning/simulation.js +69 -0
  250. package/dist/planning/simulation.js.map +1 -0
  251. package/dist/registry/combat.d.ts +5 -0
  252. package/dist/registry/combat.d.ts.map +1 -0
  253. package/dist/registry/combat.js +7 -0
  254. package/dist/registry/combat.js.map +1 -0
  255. package/dist/registry/index.d.ts +138 -0
  256. package/dist/registry/index.d.ts.map +1 -0
  257. package/dist/registry/index.js +397 -0
  258. package/dist/registry/index.js.map +1 -0
  259. package/dist/rewards/index.d.ts +202 -0
  260. package/dist/rewards/index.d.ts.map +1 -0
  261. package/dist/rewards/index.js +290 -0
  262. package/dist/rewards/index.js.map +1 -0
  263. package/dist/scanning/index.d.ts +185 -0
  264. package/dist/scanning/index.d.ts.map +1 -0
  265. package/dist/scanning/index.js +207 -0
  266. package/dist/scanning/index.js.map +1 -0
  267. package/dist/starbases/actions/index.d.ts +60 -0
  268. package/dist/starbases/actions/index.d.ts.map +1 -0
  269. package/dist/starbases/actions/index.js +245 -0
  270. package/dist/starbases/actions/index.js.map +1 -0
  271. package/dist/starbases/index.d.ts +165 -0
  272. package/dist/starbases/index.d.ts.map +1 -0
  273. package/dist/starbases/index.js +213 -0
  274. package/dist/starbases/index.js.map +1 -0
  275. package/dist/world/index.d.ts +180 -0
  276. package/dist/world/index.d.ts.map +1 -0
  277. package/dist/world/index.js +265 -0
  278. package/dist/world/index.js.map +1 -0
  279. package/package.json +140 -0
@@ -0,0 +1,245 @@
1
+ import { getAddressEncoder, isAddress } from '@solana/kit';
2
+ import { InvalidActionInputError, SageSdkError } from '../../client/errors.js';
3
+ import { ProviderAccountAddressMismatchError } from '../../client/provider-errors.js';
4
+ import { readContextRawAccounts } from '../../client/reconciliation.js';
5
+ import { deriveFactionConfigAddress, deriveFactionOwnershipAddress, deriveFactionRelationTrackerAddress, deriveFactionStandingAddress, factionConfigAccountDefinition, factionOwnershipAccountDefinition, factionRelationTrackerAccountDefinition, factionStandingAccountDefinition, } from '../../internal/c4/factions.js';
6
+ import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/identity.js';
7
+ import { deriveProfileFactionAddress, profileFactionAccountDefinition, } from '../../internal/c4/profile-faction.js';
8
+ import { deriveStarbasePlayerAddress } from '../../internal/c4/starbase.js';
9
+ import { deriveStarSystemAddress, starSystemAccountDefinition, } from '../../internal/c4/world.js';
10
+ import { requireGameAddress } from '../../internal/game-context.js';
11
+ import { adaptRegisterStarbasePlayerInstruction } from '../../internal/planning/authorization-adapter.js';
12
+ import { createPlan, } from '../../planning/index.js';
13
+ function fail(message, address) {
14
+ throw new SageSdkError('ACTION_PRECONDITION_FAILED', message, { address });
15
+ }
16
+ function validateOptions(value) {
17
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
18
+ throw new InvalidActionInputError('options', value, 'an object containing only funder', 'Pass { funder } with one valid z.ink/Solana address before retrying.');
19
+ }
20
+ const record = value;
21
+ if (Object.keys(record).length !== 1 ||
22
+ !Object.hasOwn(record, 'funder') ||
23
+ typeof record.funder !== 'string' ||
24
+ !isAddress(record.funder)) {
25
+ throw new InvalidActionInputError('options.funder', record.funder, 'one valid z.ink/Solana account address and no other option fields', 'Set options.funder to the address that will pay StarbasePlayer account rent before retrying.');
26
+ }
27
+ return { funder: record.funder };
28
+ }
29
+ function requireAccount(account, address, message) {
30
+ return account ?? fail(message, address);
31
+ }
32
+ function isProviderAddressMismatch(cause, addresses) {
33
+ return (cause instanceof ProviderAccountAddressMismatchError &&
34
+ addresses.includes(cause.requestedAddress));
35
+ }
36
+ async function readAccounts(ctx, addresses) {
37
+ try {
38
+ return await readContextRawAccounts(ctx, addresses);
39
+ }
40
+ catch (cause) {
41
+ if (isProviderAddressMismatch(cause, addresses)) {
42
+ fail(`StarbasePlayer registration cannot continue because the provider returned a contradictory account address for ${cause.requestedAddress}. Fix the provider response, refresh the Character and Star System, and retry.`, cause.requestedAddress);
43
+ }
44
+ throw cause;
45
+ }
46
+ }
47
+ async function hashAccountState(account) {
48
+ const owner = getAddressEncoder().encode(account.owner);
49
+ const canonical = new Uint8Array(owner.length + account.data.length);
50
+ canonical.set(owner);
51
+ canonical.set(account.data, owner.length);
52
+ const digest = new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', canonical));
53
+ return [...digest].map((byte) => byte.toString(16).padStart(2, '0')).join('');
54
+ }
55
+ async function precondition(account, describes) {
56
+ return Object.freeze({
57
+ address: account.address,
58
+ dataHash: await hashAccountState(account),
59
+ describes,
60
+ kind: 'account-state',
61
+ });
62
+ }
63
+ function legacyController(owner) {
64
+ switch (owner) {
65
+ case 'unaligned':
66
+ return 0;
67
+ case 'mud':
68
+ return 1;
69
+ case 'oni':
70
+ return 2;
71
+ case 'ustur':
72
+ return 3;
73
+ }
74
+ }
75
+ /** Plans one StarbasePlayer registration without signing, assembly, or writes.
76
+ *
77
+ * The Character and Star System must already be loaded public snapshots. The
78
+ * planner derives and directly validates every plumbing account, requires the
79
+ * current fail-closed Starbase FactionOwnership sidecar, and returns a Plan only
80
+ * when the canonical StarbasePlayer address is absent. Optional faction
81
+ * expansion accounts use the generated omitted-account convention.
82
+ *
83
+ * @example
84
+ * ```ts
85
+ * declare const ctx: SageContext;
86
+ * declare const character: CharacterSnapshot;
87
+ * declare const system: StarSystemSnapshot;
88
+ * declare const funder: Address;
89
+ * const plan = await planRegisterStarbasePlayer(
90
+ * ctx,
91
+ * character,
92
+ * system,
93
+ * { funder },
94
+ * );
95
+ * console.log(plan.describe());
96
+ * ```
97
+ */
98
+ export async function planRegisterStarbasePlayer(ctx, character, system, input) {
99
+ const { funder } = validateOptions(input);
100
+ const game = requireGameAddress(ctx);
101
+ if (character.game !== game) {
102
+ fail(`Character ${character.address} does not match the configured Game ${game}. Refresh the Character through this context and retry.`, character.address);
103
+ }
104
+ const profile = character.profile.address;
105
+ const canonicalCharacter = await findCharacterPda(profile, game);
106
+ if (canonicalCharacter !== character.address) {
107
+ fail(`Character ${character.address} is not the canonical Character for Profile ${profile} in the configured Game. Refresh the Character for this Profile and retry.`, character.address);
108
+ }
109
+ if (system.game !== game) {
110
+ fail(`Star System ${system.address} does not match the configured Game ${game}. Refresh the Star System through this context and retry.`, system.address);
111
+ }
112
+ const canonicalSystem = await deriveStarSystemAddress(game, system.systemId);
113
+ if (canonicalSystem !== system.address) {
114
+ fail(`Star System ${system.address} is not the canonical System ${String(system.systemId)} for the configured Game. Refresh the Star System and retry.`, system.address);
115
+ }
116
+ if (system.starbase === undefined) {
117
+ fail(`Star System ${system.name} has no nested Starbase. Choose a Star System with a shared Starbase, refresh it, and retry registration.`, system.address);
118
+ }
119
+ const playerFaction = await deriveProfileFactionAddress(profile);
120
+ const starbasePlayer = await deriveStarbasePlayerAddress(system.address, character.address);
121
+ const ownership = await deriveFactionOwnershipAddress(game, 'starbase', system.address);
122
+ const relation = await deriveFactionRelationTrackerAddress(game);
123
+ const config = await deriveFactionConfigAddress(game);
124
+ const firstAddresses = [
125
+ character.address,
126
+ playerFaction,
127
+ system.address,
128
+ starbasePlayer,
129
+ ownership,
130
+ relation,
131
+ config,
132
+ ];
133
+ const [characterCandidate, factionCandidate, systemCandidate, playerCandidate, ownershipCandidate, relationCandidate, configCandidate,] = await readAccounts(ctx, firstAddresses);
134
+ const characterAccount = requireAccount(characterCandidate, character.address, `Canonical Character ${character.address} is missing. Create or repair the Character for Profile ${profile}, refresh it, and retry registration.`);
135
+ const factionAccount = requireAccount(factionCandidate, playerFaction, `ProfileFaction ${playerFaction} is missing for Profile ${profile}. Choose or repair the Profile faction, refresh it, and retry registration.`);
136
+ const systemAccount = requireAccount(systemCandidate, system.address, `Star System ${system.address} is missing. Refresh the Star System and retry registration.`);
137
+ if (playerCandidate !== undefined) {
138
+ fail(`StarbasePlayer ${starbasePlayer} already exists for this Character and Star System. Use the existing Starbase Player instead of registering it again.`, starbasePlayer);
139
+ }
140
+ const ownershipAccount = requireAccount(ownershipCandidate, ownership, `The required FactionOwnership ${ownership} for Starbase ${system.name} is missing. Refresh the Starbase faction state or repair the ownership sidecar, then retry registration.`);
141
+ const characterData = characterAccountDefinition.decode(characterAccount);
142
+ if (characterData.playerProfile !== profile ||
143
+ characterData.game !== game ||
144
+ (await findCharacterPda(characterData.playerProfile, characterData.game)) !== character.address) {
145
+ fail(`The canonical Character does not match Profile ${profile} and the configured Game. Refresh or repair the Character relationship before retrying.`, character.address);
146
+ }
147
+ const factionData = profileFactionAccountDefinition.decode(factionAccount);
148
+ if (factionData.profile !== profile) {
149
+ fail(`ProfileFaction ${playerFaction} does not match Character Profile ${profile}. Refresh or repair the Profile faction before retrying.`, playerFaction);
150
+ }
151
+ const systemData = starSystemAccountDefinition.decode(systemAccount);
152
+ if (systemData.game !== game ||
153
+ systemData.systemId !== system.systemId ||
154
+ (await deriveStarSystemAddress(systemData.game, systemData.systemId)) !==
155
+ system.address ||
156
+ systemData.starbase === undefined) {
157
+ fail(`Star System ${system.address} does not match the configured Game, canonical PDA, System id, or required nested Starbase. Refresh the Star System and retry registration.`, system.address);
158
+ }
159
+ const ownershipData = factionOwnershipAccountDefinition.decode(ownershipAccount);
160
+ if (ownershipData.game !== game ||
161
+ ownershipData.asset.kind !== 'starbase' ||
162
+ ownershipData.asset.system !== system.address) {
163
+ fail(`FactionOwnership ${ownership} does not match the configured Game and Star System ${system.address}. Refresh or repair the Starbase ownership sidecar before retrying.`, ownership);
164
+ }
165
+ let relationAccount;
166
+ if (relationCandidate !== undefined) {
167
+ const relationData = factionRelationTrackerAccountDefinition.decode(relationCandidate);
168
+ if (relationData.game !== game) {
169
+ fail(`FactionRelationTracker ${relation} does not match the configured Game. Refresh or repair the faction relation data before retrying.`, relation);
170
+ }
171
+ relationAccount = relationCandidate;
172
+ }
173
+ if (configCandidate !== undefined) {
174
+ factionConfigAccountDefinition.decode(configCandidate);
175
+ }
176
+ const controller = ownershipData.controllingFactionId ??
177
+ legacyController(systemData.starbase.owner);
178
+ let standingAddress;
179
+ let standingAccount;
180
+ if (controller !== 0) {
181
+ standingAddress = await deriveFactionStandingAddress(game, profile, controller);
182
+ [standingAccount] = await readAccounts(ctx, [standingAddress]);
183
+ if (standingAccount !== undefined) {
184
+ const standingData = factionStandingAccountDefinition.decode(standingAccount);
185
+ if (standingData.game !== game ||
186
+ standingData.profile !== profile ||
187
+ standingData.factionId !== controller) {
188
+ fail(`FactionStanding ${standingAddress} does not match Profile ${profile} and the current Starbase controller. Refresh or repair the standing account before retrying.`, standingAddress);
189
+ }
190
+ }
191
+ }
192
+ const factionExpansion = relationAccount !== undefined &&
193
+ standingAddress !== undefined &&
194
+ standingAccount !== undefined &&
195
+ configCandidate !== undefined
196
+ ? {
197
+ configAccount: configCandidate,
198
+ relationAccount,
199
+ standingAccount,
200
+ standingAddress,
201
+ }
202
+ : undefined;
203
+ const description = `Register Profile ${profile}'s Character at Starbase ${systemData.name} for player-local Starbase services.`;
204
+ const preconditions = [
205
+ precondition(characterAccount, `The canonical Character remains assigned to Profile ${profile} in the configured Game.`),
206
+ precondition(factionAccount, `The Profile faction remains assigned to Profile ${profile}.`),
207
+ precondition(systemAccount, `Star System ${systemData.name} remains the selected System with its nested Starbase.`),
208
+ precondition(ownershipAccount, `The Starbase faction ownership remains assigned to System ${system.address}.`),
209
+ ...(factionExpansion === undefined
210
+ ? []
211
+ : [
212
+ precondition(factionExpansion.relationAccount, 'The faction relation tracker remains assigned to the configured Game.'),
213
+ precondition(factionExpansion.standingAccount, `The Profile standing remains assigned to current Starbase controller ${String(controller)}.`),
214
+ precondition(factionExpansion.configAccount, 'The faction configuration remains available with the Profile standing expansion.'),
215
+ ]),
216
+ ];
217
+ return createPlan({
218
+ kind: 'starbases.register-player',
219
+ preconditions: await Promise.all(preconditions),
220
+ steps: [
221
+ {
222
+ describes: description,
223
+ instruction: adaptRegisterStarbasePlayerInstruction({
224
+ character: character.address,
225
+ factionOwnership: ownership,
226
+ funder,
227
+ game,
228
+ profileFaction: playerFaction,
229
+ starbasePlayer,
230
+ system: system.address,
231
+ ...(factionExpansion === undefined
232
+ ? {}
233
+ : {
234
+ factionConfig: config,
235
+ factionRelationTracker: relation,
236
+ factionStanding: factionExpansion.standingAddress,
237
+ }),
238
+ }),
239
+ signers: [funder],
240
+ },
241
+ ],
242
+ summary: `Register Profile ${profile}'s Character at Starbase ${systemData.name}.`,
243
+ });
244
+ }
245
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/starbases/actions/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ import { type Address, type DiscoveryRequest, type EntityRef, type ReadOptions, type SageContext } from '../client/index.js';
2
+ import { type StarbaseEscrowedShipData, type StarbasePlayerAccountData, type StarbaseShipRespawnData, type StarbaseUpgradeProcessAccountData } from '../internal/c4/starbase.js';
3
+ import { type CargoDefinitionSummary, type ShipDefinitionSummary } from '../registry/index.js';
4
+ export type { StarbaseCargoAmountData, StarbaseCargoPodData, StarbaseEscrowedShipData, StarbaseFacilityRespawnData, StarbasePlayerAccountData, StarbasePlayerFaction, StarbaseRespawnQueueData, StarbaseShipRespawnData, StarbaseUpgradeProcessAccountData, } from '../internal/c4/starbase.js';
5
+ /** Options supported by targeted player-local Starbase discovery.
6
+ * @example
7
+ * ```ts
8
+ * const options: StarbaseDiscoveryOptions = { commitment: 'confirmed' };
9
+ * ```
10
+ */
11
+ export type StarbaseDiscoveryOptions = Omit<DiscoveryRequest, 'filters' | 'strategy'>;
12
+ /** One resolved cargo quantity stored in a player-local Starbase CargoPod.
13
+ * @example
14
+ * ```ts
15
+ * declare const item: StarbaseCargoItem;
16
+ * console.log(item.name, item.quantityRaw);
17
+ * ```
18
+ */
19
+ export interface StarbaseCargoItem extends CargoDefinitionSummary {
20
+ readonly quantityRaw: bigint;
21
+ }
22
+ /** One resolved player-local Starbase CargoPod.
23
+ * @example
24
+ * ```ts
25
+ * declare const cargo: StarbaseCargoInventory;
26
+ * console.log(cargo.items);
27
+ * ```
28
+ */
29
+ export interface StarbaseCargoInventory {
30
+ readonly sequenceId: number;
31
+ readonly usedStorageUnitsRaw: bigint;
32
+ readonly items: readonly StarbaseCargoItem[];
33
+ }
34
+ /** One resolved ship respawn queue.
35
+ * @example
36
+ * ```ts
37
+ * declare const ship: StarbaseShipRespawn;
38
+ * console.log(ship.name, ship.completesAtUnixSeconds);
39
+ * ```
40
+ */
41
+ export interface StarbaseShipRespawn extends ShipDefinitionSummary, Omit<StarbaseShipRespawnData, 'shipId'> {
42
+ }
43
+ /** One resolved escrowed ship quantity.
44
+ * @example
45
+ * ```ts
46
+ * declare const ship: StarbaseEscrowedShip;
47
+ * console.log(ship.name, ship.quantityRaw);
48
+ * ```
49
+ */
50
+ export interface StarbaseEscrowedShip extends ShipDefinitionSummary, Omit<StarbaseEscrowedShipData, 'shipId'> {
51
+ }
52
+ /** Immutable, translated player-local Starbase snapshot.
53
+ * @example
54
+ * ```ts
55
+ * declare const starbase: StarbasePlayerSnapshot;
56
+ * console.log(starbase.availableCrew, starbase.cargo.items);
57
+ * ```
58
+ */
59
+ export interface StarbasePlayerSnapshot extends Omit<StarbasePlayerAccountData, 'cargo' | 'character' | 'playerProfile' | 'respawning' | 'shipsInEscrow' | 'system'> {
60
+ readonly kind: 'starbasePlayer';
61
+ readonly address: Address;
62
+ readonly playerProfile: EntityRef<'profile'>;
63
+ readonly system: EntityRef<'starSystem'>;
64
+ readonly character: EntityRef<'character'>;
65
+ readonly availableCrew: number;
66
+ readonly cargo: StarbaseCargoInventory;
67
+ readonly respawning: Omit<StarbasePlayerAccountData['respawning'], 'cargo' | 'ships'> & {
68
+ readonly cargo: StarbaseCargoInventory;
69
+ readonly ships: readonly StarbaseShipRespawn[];
70
+ };
71
+ readonly shipsInEscrow: readonly StarbaseEscrowedShip[];
72
+ toJSON(): unknown;
73
+ }
74
+ /** Immutable, translated Starbase upgrade-process snapshot.
75
+ * @example
76
+ * ```ts
77
+ * declare const upgrade: StarbaseUpgradeProcessSnapshot;
78
+ * console.log(upgrade.resource.name, upgrade.endsAtUnixSeconds);
79
+ * ```
80
+ */
81
+ export interface StarbaseUpgradeProcessSnapshot extends Omit<StarbaseUpgradeProcessAccountData, 'playerProfile' | 'quantityRaw' | 'resourceId' | 'starbasePlayer' | 'system'> {
82
+ readonly kind: 'starbaseUpgradeProcess';
83
+ readonly address: Address;
84
+ readonly playerProfile: EntityRef<'profile'>;
85
+ readonly starbasePlayer: EntityRef<'starbasePlayer'>;
86
+ readonly system: EntityRef<'starSystem'>;
87
+ readonly resource: CargoDefinitionSummary & {
88
+ readonly quantityRaw: bigint;
89
+ };
90
+ toJSON(): unknown;
91
+ }
92
+ /** Reads one required StarbasePlayer by address.
93
+ * @example
94
+ * ```ts
95
+ * declare const ctx: SageContext;
96
+ * declare const address: Address;
97
+ * const starbase = await getStarbasePlayer(ctx, address);
98
+ * ```
99
+ */
100
+ export declare function getStarbasePlayer(context: SageContext, address: Address, options?: ReadOptions): Promise<StarbasePlayerSnapshot>;
101
+ /** Reads one optional StarbasePlayer by address.
102
+ * @example
103
+ * ```ts
104
+ * declare const ctx: SageContext;
105
+ * declare const address: Address;
106
+ * const starbase = await maybeGetStarbasePlayer(ctx, address);
107
+ * ```
108
+ */
109
+ export declare function maybeGetStarbasePlayer(context: SageContext, address: Address, options?: ReadOptions): Promise<StarbasePlayerSnapshot | undefined>;
110
+ /** Derives and reads StarbasePlayer for one Character at one Star System.
111
+ * @example
112
+ * ```ts
113
+ * declare const ctx: SageContext;
114
+ * declare const character: Address;
115
+ * declare const system: Address;
116
+ * const starbase = await getStarbasePlayerForCharacterAtSystem(ctx, character, system);
117
+ * ```
118
+ */
119
+ export declare function getStarbasePlayerForCharacterAtSystem(context: SageContext, character: Address, system: Address, options?: ReadOptions): Promise<StarbasePlayerSnapshot>;
120
+ /** Discovers player-local Starbases for one Character.
121
+ * @example
122
+ * ```ts
123
+ * declare const ctx: SageContext;
124
+ * declare const character: Address;
125
+ * const starbases = await getStarbasePlayersByCharacter(ctx, character);
126
+ * ```
127
+ */
128
+ export declare function getStarbasePlayersByCharacter(context: SageContext, character: Address, options?: StarbaseDiscoveryOptions): Promise<readonly StarbasePlayerSnapshot[]>;
129
+ /** Discovers player-local Starbases in one Star System.
130
+ * @example
131
+ * ```ts
132
+ * declare const ctx: SageContext;
133
+ * declare const system: Address;
134
+ * const starbases = await getStarbasePlayersBySystem(ctx, system);
135
+ * ```
136
+ */
137
+ export declare function getStarbasePlayersBySystem(context: SageContext, system: Address, options?: StarbaseDiscoveryOptions): Promise<readonly StarbasePlayerSnapshot[]>;
138
+ /** Reads one required StarbaseUpgradeProcess by its signer-created address.
139
+ * @example
140
+ * ```ts
141
+ * declare const ctx: SageContext;
142
+ * declare const address: Address;
143
+ * const upgrade = await getStarbaseUpgradeProcess(ctx, address);
144
+ * ```
145
+ */
146
+ export declare function getStarbaseUpgradeProcess(context: SageContext, address: Address, options?: ReadOptions): Promise<StarbaseUpgradeProcessSnapshot>;
147
+ /** Reads one optional StarbaseUpgradeProcess by address.
148
+ * @example
149
+ * ```ts
150
+ * declare const ctx: SageContext;
151
+ * declare const address: Address;
152
+ * const upgrade = await maybeGetStarbaseUpgradeProcess(ctx, address);
153
+ * ```
154
+ */
155
+ export declare function maybeGetStarbaseUpgradeProcess(context: SageContext, address: Address, options?: ReadOptions): Promise<StarbaseUpgradeProcessSnapshot | undefined>;
156
+ /** Discovers Starbase upgrade processes stored against one StarbasePlayer.
157
+ * @example
158
+ * ```ts
159
+ * declare const ctx: SageContext;
160
+ * declare const player: Address;
161
+ * const upgrades = await getStarbaseUpgradeProcessesByPlayer(ctx, player);
162
+ * ```
163
+ */
164
+ export declare function getStarbaseUpgradeProcessesByPlayer(context: SageContext, player: Address, options?: StarbaseDiscoveryOptions): Promise<readonly StarbaseUpgradeProcessSnapshot[]>;
165
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/starbases/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,SAAS,EAEd,KAAK,WAAW,EAChB,KAAK,WAAW,EAEjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAQL,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,iCAAiC,EACvC,MAAM,4BAA4B,CAAC;AAKpC,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,EACxB,2BAA2B,EAC3B,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,iCAAiC,GAClC,MAAM,4BAA4B,CAAC;AAEpC;;;;;GAKG;AACH,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,gBAAgB,EAChB,SAAS,GAAG,UAAU,CACvB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;IAC/D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBACf,SAAQ,qBAAqB,EAAE,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC;CAAG;AAE3E;;;;;;GAMG;AACH,MAAM,WAAW,oBACf,SAAQ,qBAAqB,EAAE,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC;CAAG;AAE5E;;;;;;GAMG;AACH,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAClD,yBAAyB,EACvB,OAAO,GACP,WAAW,GACX,eAAe,GACf,YAAY,GACZ,eAAe,GACf,QAAQ,CACX;IACC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,IAAI,CACvB,yBAAyB,CAAC,YAAY,CAAC,EACvC,OAAO,GAAG,OAAO,CAClB,GAAG;QACF,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;QACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;KAChD,CAAC;IACF,QAAQ,CAAC,aAAa,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACxD,MAAM,IAAI,OAAO,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,8BAA+B,SAAQ,IAAI,CAC1D,iCAAiC,EACjC,eAAe,GAAG,aAAa,GAAG,YAAY,GAAG,gBAAgB,GAAG,QAAQ,CAC7E;IACC,QAAQ,CAAC,IAAI,EAAE,wBAAwB,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,GAAG;QAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7E,MAAM,IAAI,OAAO,CAAC;CACnB;AAqKD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,sBAAsB,CAAC,CAMjC;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAU7C;AAED;;;;;;;;GAQG;AACH,wBAAsB,qCAAqC,CACzD,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,OAAO,EAClB,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,sBAAsB,CAAC,CAoBjC;AAED;;;;;;;GAOG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAM5C;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAM5C;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,8BAA8B,CAAC,CAUzC;AAED;;;;;;;GAOG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,8BAA8B,GAAG,SAAS,CAAC,CAUrD;AAED;;;;;;;GAOG;AACH,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,SAAS,8BAA8B,EAAE,CAAC,CAYpD"}
@@ -0,0 +1,213 @@
1
+ import { AccountDecodeError, entityRef, } from '../client/index.js';
2
+ import { deriveStarbasePlayerAddress, discoverStarbasePlayersByCharacter, discoverStarbasePlayersBySystem, discoverStarbaseUpgradeProcessesByPlayer, starbasePlayerAccountDefinition, starbaseUpgradeProcessAccountDefinition, } from '../internal/c4/starbase.js';
3
+ import { requireGameAddress } from '../internal/game-context.js';
4
+ import { attachJsonSerialization } from '../internal/json.js';
5
+ import { attachReadMeta, readMeta } from '../internal/read-meta.js';
6
+ import { freezeResolvedSnapshot } from '../internal/resolved-snapshot.js';
7
+ import { resolveCargo, resolveShip, } from '../registry/index.js';
8
+ const PLAYER_SNAPSHOTS = new WeakMap();
9
+ const UPGRADE_SNAPSHOTS = new WeakMap();
10
+ function directMetadata(envelope) {
11
+ return {
12
+ commitment: envelope.commitment,
13
+ slot: envelope.slot,
14
+ source: envelope.source,
15
+ strategy: 'direct',
16
+ };
17
+ }
18
+ async function cargoInventory(context, pod) {
19
+ return {
20
+ items: await Promise.all(pod.amounts.map(async ({ amount, cargoId }) => ({
21
+ ...(await resolveCargo(context, cargoId)),
22
+ quantityRaw: amount,
23
+ }))),
24
+ sequenceId: pod.sequenceId,
25
+ usedStorageUnitsRaw: pod.usedStorageUnitsRaw,
26
+ };
27
+ }
28
+ async function shipRespawn(context, value) {
29
+ const { shipId, ...queue } = value;
30
+ return { ...(await resolveShip(context, shipId)), ...queue };
31
+ }
32
+ async function escrowedShip(context, value) {
33
+ const { shipId, ...quantity } = value;
34
+ return { ...(await resolveShip(context, shipId)), ...quantity };
35
+ }
36
+ async function createPlayerSnapshot(context, envelope) {
37
+ requireGameAddress(context);
38
+ const { cargo, character, playerProfile, respawning, shipsInEscrow, system, ...data } = envelope.data;
39
+ const [resolvedCargo, respawningCargo, respawningShips, resolvedEscrow] = await Promise.all([
40
+ cargoInventory(context, cargo),
41
+ cargoInventory(context, respawning.cargo),
42
+ Promise.all(respawning.ships.map((value) => shipRespawn(context, value))),
43
+ Promise.all(shipsInEscrow.map((value) => escrowedShip(context, value))),
44
+ ]);
45
+ return freezeResolvedSnapshot(attachReadMeta(attachJsonSerialization({
46
+ ...data,
47
+ address: envelope.address,
48
+ availableCrew: Math.max(0, data.totalCrew - data.busyCrew),
49
+ cargo: resolvedCargo,
50
+ character: entityRef('character', character),
51
+ kind: 'starbasePlayer',
52
+ playerProfile: entityRef('profile', playerProfile),
53
+ respawning: {
54
+ ...respawning,
55
+ cargo: respawningCargo,
56
+ ships: respawningShips,
57
+ },
58
+ shipsInEscrow: resolvedEscrow,
59
+ system: entityRef('starSystem', system),
60
+ }), directMetadata(envelope)));
61
+ }
62
+ function toPlayerSnapshot(context, envelope) {
63
+ const existing = PLAYER_SNAPSHOTS.get(envelope);
64
+ if (existing !== undefined)
65
+ return existing;
66
+ const pending = createPlayerSnapshot(context, envelope);
67
+ PLAYER_SNAPSHOTS.set(envelope, pending);
68
+ void pending.catch(() => PLAYER_SNAPSHOTS.delete(envelope));
69
+ return pending;
70
+ }
71
+ async function createUpgradeSnapshot(context, envelope) {
72
+ requireGameAddress(context);
73
+ const { playerProfile, quantityRaw, resourceId, starbasePlayer, system, ...data } = envelope.data;
74
+ return freezeResolvedSnapshot(attachReadMeta(attachJsonSerialization({
75
+ ...data,
76
+ address: envelope.address,
77
+ kind: 'starbaseUpgradeProcess',
78
+ playerProfile: entityRef('profile', playerProfile),
79
+ resource: {
80
+ ...(await resolveCargo(context, resourceId)),
81
+ quantityRaw,
82
+ },
83
+ starbasePlayer: entityRef('starbasePlayer', starbasePlayer),
84
+ system: entityRef('starSystem', system),
85
+ }), directMetadata(envelope)));
86
+ }
87
+ function toUpgradeSnapshot(context, envelope) {
88
+ const existing = UPGRADE_SNAPSHOTS.get(envelope);
89
+ if (existing !== undefined)
90
+ return existing;
91
+ const pending = createUpgradeSnapshot(context, envelope);
92
+ UPGRADE_SNAPSHOTS.set(envelope, pending);
93
+ void pending.catch(() => UPGRADE_SNAPSHOTS.delete(envelope));
94
+ return pending;
95
+ }
96
+ async function playerSnapshotsFromDiscovery(context, envelopes) {
97
+ const metadata = readMeta(envelopes);
98
+ const snapshots = await Promise.all(envelopes.map((envelope) => toPlayerSnapshot(context, envelope)));
99
+ return Object.freeze(attachReadMeta(snapshots, metadata));
100
+ }
101
+ /** Reads one required StarbasePlayer by address.
102
+ * @example
103
+ * ```ts
104
+ * declare const ctx: SageContext;
105
+ * declare const address: Address;
106
+ * const starbase = await getStarbasePlayer(ctx, address);
107
+ * ```
108
+ */
109
+ export async function getStarbasePlayer(context, address, options) {
110
+ requireGameAddress(context);
111
+ return toPlayerSnapshot(context, await context.data.read(starbasePlayerAccountDefinition, address, options));
112
+ }
113
+ /** Reads one optional StarbasePlayer by address.
114
+ * @example
115
+ * ```ts
116
+ * declare const ctx: SageContext;
117
+ * declare const address: Address;
118
+ * const starbase = await maybeGetStarbasePlayer(ctx, address);
119
+ * ```
120
+ */
121
+ export async function maybeGetStarbasePlayer(context, address, options) {
122
+ requireGameAddress(context);
123
+ const [envelope] = await context.data.readMany(starbasePlayerAccountDefinition, [address], options);
124
+ return envelope === undefined
125
+ ? undefined
126
+ : toPlayerSnapshot(context, envelope);
127
+ }
128
+ /** Derives and reads StarbasePlayer for one Character at one Star System.
129
+ * @example
130
+ * ```ts
131
+ * declare const ctx: SageContext;
132
+ * declare const character: Address;
133
+ * declare const system: Address;
134
+ * const starbase = await getStarbasePlayerForCharacterAtSystem(ctx, character, system);
135
+ * ```
136
+ */
137
+ export async function getStarbasePlayerForCharacterAtSystem(context, character, system, options) {
138
+ requireGameAddress(context);
139
+ const address = await deriveStarbasePlayerAddress(system, character);
140
+ const envelope = await context.data.read(starbasePlayerAccountDefinition, address, options);
141
+ if (envelope.data.character !== character ||
142
+ envelope.data.system !== system) {
143
+ throw new AccountDecodeError('starbasePlayer', address, new RangeError('The decoded StarbasePlayer contradicted its PDA seeds.'), `The Starbase Player at ${address} does not reference the requested Character and Star System. Verify both addresses, the configured cluster, and pinned binding version before retrying.`);
144
+ }
145
+ return toPlayerSnapshot(context, envelope);
146
+ }
147
+ /** Discovers player-local Starbases for one Character.
148
+ * @example
149
+ * ```ts
150
+ * declare const ctx: SageContext;
151
+ * declare const character: Address;
152
+ * const starbases = await getStarbasePlayersByCharacter(ctx, character);
153
+ * ```
154
+ */
155
+ export async function getStarbasePlayersByCharacter(context, character, options) {
156
+ requireGameAddress(context);
157
+ return playerSnapshotsFromDiscovery(context, await discoverStarbasePlayersByCharacter(context, character, options));
158
+ }
159
+ /** Discovers player-local Starbases in one Star System.
160
+ * @example
161
+ * ```ts
162
+ * declare const ctx: SageContext;
163
+ * declare const system: Address;
164
+ * const starbases = await getStarbasePlayersBySystem(ctx, system);
165
+ * ```
166
+ */
167
+ export async function getStarbasePlayersBySystem(context, system, options) {
168
+ requireGameAddress(context);
169
+ return playerSnapshotsFromDiscovery(context, await discoverStarbasePlayersBySystem(context, system, options));
170
+ }
171
+ /** Reads one required StarbaseUpgradeProcess by its signer-created address.
172
+ * @example
173
+ * ```ts
174
+ * declare const ctx: SageContext;
175
+ * declare const address: Address;
176
+ * const upgrade = await getStarbaseUpgradeProcess(ctx, address);
177
+ * ```
178
+ */
179
+ export async function getStarbaseUpgradeProcess(context, address, options) {
180
+ requireGameAddress(context);
181
+ return toUpgradeSnapshot(context, await context.data.read(starbaseUpgradeProcessAccountDefinition, address, options));
182
+ }
183
+ /** Reads one optional StarbaseUpgradeProcess by address.
184
+ * @example
185
+ * ```ts
186
+ * declare const ctx: SageContext;
187
+ * declare const address: Address;
188
+ * const upgrade = await maybeGetStarbaseUpgradeProcess(ctx, address);
189
+ * ```
190
+ */
191
+ export async function maybeGetStarbaseUpgradeProcess(context, address, options) {
192
+ requireGameAddress(context);
193
+ const [envelope] = await context.data.readMany(starbaseUpgradeProcessAccountDefinition, [address], options);
194
+ return envelope === undefined
195
+ ? undefined
196
+ : toUpgradeSnapshot(context, envelope);
197
+ }
198
+ /** Discovers Starbase upgrade processes stored against one StarbasePlayer.
199
+ * @example
200
+ * ```ts
201
+ * declare const ctx: SageContext;
202
+ * declare const player: Address;
203
+ * const upgrades = await getStarbaseUpgradeProcessesByPlayer(ctx, player);
204
+ * ```
205
+ */
206
+ export async function getStarbaseUpgradeProcessesByPlayer(context, player, options) {
207
+ requireGameAddress(context);
208
+ const envelopes = await discoverStarbaseUpgradeProcessesByPlayer(context, player, options);
209
+ const metadata = readMeta(envelopes);
210
+ const snapshots = await Promise.all(envelopes.map((envelope) => toUpgradeSnapshot(context, envelope)));
211
+ return Object.freeze(attachReadMeta(snapshots, metadata));
212
+ }
213
+ //# sourceMappingURL=index.js.map