@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 @@
1
+ {"version":3,"file":"combat.d.ts","sourceRoot":"","sources":["../../src/registry/combat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,wBAAwB,CAAC;AAGhC,kFAAkF;AAClF,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAC,CAMxD"}
@@ -0,0 +1,7 @@
1
+ import { gameCombatAccountDefinition, } from '../internal/c4/game.js';
2
+ import { requireGameAddress } from '../internal/game-context.js';
3
+ /** Reads the registry-owned Game combat section through the shared data plane. */
4
+ export function readGameCombatConfiguration(context, options) {
5
+ return context.data.read(gameCombatAccountDefinition, requireGameAddress(context), options);
6
+ }
7
+ //# sourceMappingURL=combat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combat.js","sourceRoot":"","sources":["../../src/registry/combat.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,2BAA2B,GAE5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEjE,kFAAkF;AAClF,MAAM,UAAU,2BAA2B,CACzC,OAAoB,EACpB,OAAqB;IAErB,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CACtB,2BAA2B,EAC3B,kBAAkB,CAAC,OAAO,CAAC,EAC3B,OAAO,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,138 @@
1
+ import type { Address, SageContext } from '../client/contracts.js';
2
+ import { type GameCraftingHabDefinitionData, type GameHabBuildingDefinitionData, type GameResearchNodeData, type GameXpDefinitionsSectionData } from '../internal/c4/game.js';
3
+ /** Definition sections implemented by the first registry slice.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * const section: DefinitionSection = 'ships';
8
+ * ```
9
+ */
10
+ export type DefinitionSection = 'ships' | 'cargo' | 'craftingHabs' | 'habBuildings' | 'xp' | 'research';
11
+ /** Small, stable ship definition returned to gameplay domains.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * declare const ctx: SageContext;
16
+ * const ship: ShipDefinitionSummary = await resolveShip(ctx, 3);
17
+ * ```
18
+ */
19
+ export interface ShipDefinitionSummary {
20
+ readonly id: number;
21
+ readonly mint: Address;
22
+ readonly name: string;
23
+ readonly sizeClass: 'xx-small' | 'x-small' | 'small' | 'medium' | 'large' | 'capital' | 'commander' | 'titan';
24
+ }
25
+ /** Small, stable cargo definition returned to gameplay domains.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * declare const ctx: SageContext;
30
+ * const cargo: CargoDefinitionSummary = await resolveCargo(ctx, 7);
31
+ * ```
32
+ */
33
+ export interface CargoDefinitionSummary {
34
+ readonly categoryId: number;
35
+ readonly id: number;
36
+ readonly mint: Address;
37
+ readonly name: string;
38
+ readonly storageCost: number;
39
+ }
40
+ /** Serializable cold-start snapshot for one Game definitions section.
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * declare const store: RegistrySnapshotStore;
45
+ * declare const snapshot: DefinitionSectionSnapshot;
46
+ * await store.save(snapshot);
47
+ * ```
48
+ */
49
+ export type DefinitionSectionSnapshot = {
50
+ readonly schemaVersion: 1;
51
+ readonly game: Address;
52
+ readonly section: 'ships';
53
+ readonly sequenceId: number;
54
+ readonly definitions: readonly ShipDefinitionSummary[];
55
+ } | {
56
+ readonly schemaVersion: 1;
57
+ readonly game: Address;
58
+ readonly section: 'cargo';
59
+ readonly sequenceId: number;
60
+ readonly definitions: readonly CargoDefinitionSummary[];
61
+ };
62
+ /** Optional application storage contract for registry cold starts.
63
+ *
64
+ * Implementations may use IndexedDB, a filesystem, or another application-owned
65
+ * store. Loading remains lazy and begins only with the first definition lookup.
66
+ * Schema version 1 persists only the bigint-free ship and cargo sections.
67
+ * Crafting Hab and Hab building sections continue to load lazily from Game
68
+ * because their exact bigint fields do not yet have a versioned JSON encoding.
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * declare const load: RegistrySnapshotStore['load'];
73
+ * declare const save: RegistrySnapshotStore['save'];
74
+ * declare const rpc: SageRpc;
75
+ * const store: RegistrySnapshotStore = { load, save };
76
+ * const ctx = createSageContext({ cluster: 'zink-ptr', rpc, registrySnapshotStore: store });
77
+ * ```
78
+ */
79
+ export interface RegistrySnapshotStore {
80
+ load(game: Address, section: DefinitionSectionSnapshot['section']): Promise<DefinitionSectionSnapshot | undefined>;
81
+ save(snapshot: DefinitionSectionSnapshot): Promise<void>;
82
+ }
83
+ /** Sequence information supplied by a live account that references a definition.
84
+ *
85
+ * @example
86
+ * ```ts
87
+ * const options: DefinitionLookupOptions = { expectedSequenceId: 12 };
88
+ * ```
89
+ */
90
+ export interface DefinitionLookupOptions {
91
+ readonly expectedSequenceId?: number;
92
+ }
93
+ /** Resolves one ship id to an immutable SDK-owned definition summary.
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * declare const ctx: SageContext;
98
+ * declare const fleet: { readonly shipId: number; readonly shipDefinitionsSeqId: number };
99
+ * const ship = await resolveShip(ctx, fleet.shipId, { expectedSequenceId: fleet.shipDefinitionsSeqId });
100
+ * ```
101
+ */
102
+ export declare function resolveShip(context: SageContext, shipId: number, options?: DefinitionLookupOptions): Promise<ShipDefinitionSummary>;
103
+ /** Resolves one cargo id to an immutable SDK-owned definition summary.
104
+ *
105
+ * @example
106
+ * ```ts
107
+ * declare const ctx: SageContext;
108
+ * declare const cargoId: number;
109
+ * declare const expectedSequenceId: number;
110
+ * const cargo = await resolveCargo(ctx, cargoId, { expectedSequenceId });
111
+ * ```
112
+ */
113
+ export declare function resolveCargo(context: SageContext, cargoId: number, options?: DefinitionLookupOptions): Promise<CargoDefinitionSummary>;
114
+ /** Resolves one Crafting Hab definition with sequence-aware invalidation.
115
+ * @example
116
+ * ```ts
117
+ * declare const ctx: SageContext;
118
+ * const hab = await resolveCraftingHabDefinition(ctx, 5);
119
+ * ```
120
+ */
121
+ export declare function resolveCraftingHabDefinition(context: SageContext, definitionId: number, options?: DefinitionLookupOptions): Promise<GameCraftingHabDefinitionData>;
122
+ /** Resolves one Crafting Hab building definition with sequence-aware invalidation.
123
+ * @example
124
+ * ```ts
125
+ * declare const ctx: SageContext;
126
+ * const building = await resolveHabBuildingDefinition(ctx, 21);
127
+ * ```
128
+ */
129
+ export declare function resolveHabBuildingDefinition(context: SageContext, buildingId: number, options?: DefinitionLookupOptions): Promise<GameHabBuildingDefinitionData>;
130
+ /** Resolves the Game XP rules matching one Character XP sequence. */
131
+ export declare function resolveXpDefinitions(context: SageContext, options?: DefinitionLookupOptions): Promise<GameXpDefinitionsSectionData>;
132
+ /** Lists the independent immutable Game research catalog. */
133
+ export declare function listResearchDefinitions(context: SageContext): Promise<{
134
+ readonly definitions: readonly GameResearchNodeData[];
135
+ readonly sequenceId: number;
136
+ }>;
137
+ export { RegistryOutOfSyncError } from '../client/errors.js';
138
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,397 @@
1
+ import { isAddress } from '@solana/kit';
2
+ import { AccountNotFoundError, MissingGameContextError, ProviderError, RegistryOutOfSyncError, } from '../client/errors.js';
3
+ import { assertContextActive } from '../client/lifecycle.js';
4
+ import { deepFreeze, validateImmutableTree, } from '../internal/immutable-tree.js';
5
+ import { decodeGameRegistrySections, } from '../internal/c4/game.js';
6
+ const SEQUENCE_MISMATCH_RETRY_DELAY_MS = 1_000;
7
+ // Ship summaries expose stable identity fields; every other section is strict.
8
+ const SECTIONS_TOLERATING_OLDER_CALLERS = new Set(['ships']);
9
+ const registryStates = new WeakMap();
10
+ function stateFor(context) {
11
+ let state = registryStates.get(context);
12
+ if (state === undefined) {
13
+ state = {
14
+ confirmedMissingSequenceIds: {},
15
+ confirmedSequenceMismatches: {},
16
+ confirmingMissing: new Set(),
17
+ confirmingSequenceIds: {},
18
+ loading: {},
19
+ refresh: new Set(),
20
+ sections: {},
21
+ };
22
+ registryStates.set(context, state);
23
+ }
24
+ return state;
25
+ }
26
+ function freezeDefinitions(definitions) {
27
+ return Object.freeze(definitions.map((definition) => deepFreeze({ ...definition })));
28
+ }
29
+ function sectionFromGame(game, section) {
30
+ if (section === 'xp') {
31
+ const definitions = freezeDefinitions([
32
+ game,
33
+ ]);
34
+ return {
35
+ definitions: new Map([[0, definitions[0]]]),
36
+ sequenceId: definitions[0].sequenceId,
37
+ };
38
+ }
39
+ if (section === 'research') {
40
+ const research = game;
41
+ const definitions = freezeDefinitions(research.nodes);
42
+ return {
43
+ definitions: new Map(definitions.map((definition) => [definition.id, definition])),
44
+ sequenceId: research.sequenceId,
45
+ };
46
+ }
47
+ if (section === 'ships') {
48
+ const ships = game;
49
+ const definitions = freezeDefinitions(ships.definitions);
50
+ return {
51
+ definitions: new Map(definitions.map((definition) => [definition.id, definition])),
52
+ sequenceId: ships.sequenceId,
53
+ };
54
+ }
55
+ const values = game;
56
+ const definitions = freezeDefinitions(values.definitions);
57
+ return {
58
+ definitions: new Map(definitions.map((definition) => [definition.id, definition])),
59
+ sequenceId: values.sequenceId,
60
+ };
61
+ }
62
+ const SHIP_SIZE_CLASSES = new Set([
63
+ 'xx-small',
64
+ 'x-small',
65
+ 'small',
66
+ 'medium',
67
+ 'large',
68
+ 'capital',
69
+ 'commander',
70
+ 'titan',
71
+ ]);
72
+ function isNonnegativeInteger(value) {
73
+ return typeof value === 'number' && Number.isInteger(value) && value >= 0;
74
+ }
75
+ function isRecord(value) {
76
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
77
+ }
78
+ function hasOwnKeyCount(value, expected) {
79
+ return Reflect.ownKeys(value).length === expected;
80
+ }
81
+ function hasUniqueDefinitionIds(definitions) {
82
+ return (new Set(definitions.map((definition) => definition.id)).size ===
83
+ definitions.length);
84
+ }
85
+ function isShipDefinition(value) {
86
+ return (isRecord(value) &&
87
+ hasOwnKeyCount(value, 4) &&
88
+ isNonnegativeInteger(value.id) &&
89
+ typeof value.mint === 'string' &&
90
+ isAddress(value.mint) &&
91
+ typeof value.name === 'string' &&
92
+ SHIP_SIZE_CLASSES.has(value.sizeClass));
93
+ }
94
+ function isCargoDefinition(value) {
95
+ return (isRecord(value) &&
96
+ hasOwnKeyCount(value, 5) &&
97
+ isNonnegativeInteger(value.categoryId) &&
98
+ isNonnegativeInteger(value.id) &&
99
+ typeof value.mint === 'string' &&
100
+ isAddress(value.mint) &&
101
+ typeof value.name === 'string' &&
102
+ isNonnegativeInteger(value.storageCost));
103
+ }
104
+ function isCompatibleSnapshot(snapshot, game, section) {
105
+ try {
106
+ validateImmutableTree(snapshot);
107
+ }
108
+ catch {
109
+ return false;
110
+ }
111
+ if (!isRecord(snapshot) ||
112
+ !hasOwnKeyCount(snapshot, 5) ||
113
+ snapshot.schemaVersion !== 1 ||
114
+ snapshot.game !== game ||
115
+ snapshot.section !== section ||
116
+ !isNonnegativeInteger(snapshot.sequenceId) ||
117
+ !Array.isArray(snapshot.definitions)) {
118
+ return false;
119
+ }
120
+ if (section === 'ships') {
121
+ return (snapshot.definitions.every(isShipDefinition) &&
122
+ hasUniqueDefinitionIds(snapshot.definitions));
123
+ }
124
+ return (snapshot.definitions.every(isCargoDefinition) &&
125
+ hasUniqueDefinitionIds(snapshot.definitions));
126
+ }
127
+ function snapshotFor(game, section, loaded) {
128
+ return {
129
+ definitions: [...loaded.definitions.values()],
130
+ game,
131
+ schemaVersion: 1,
132
+ section,
133
+ sequenceId: loaded.sequenceId,
134
+ };
135
+ }
136
+ function sectionFromSnapshot(snapshot) {
137
+ if (snapshot.section === 'ships') {
138
+ const definitions = freezeDefinitions(snapshot.definitions);
139
+ return {
140
+ definitions: new Map(definitions.map((definition) => [definition.id, definition])),
141
+ sequenceId: snapshot.sequenceId,
142
+ };
143
+ }
144
+ const definitions = freezeDefinitions(snapshot.definitions);
145
+ return {
146
+ definitions: new Map(definitions.map((definition) => [definition.id, definition])),
147
+ sequenceId: snapshot.sequenceId,
148
+ };
149
+ }
150
+ async function loadStoredSection(context, game, section) {
151
+ // Snapshot schema v1 is JSON-native and intentionally excludes crafting
152
+ // sections whose exact public definitions contain bigint values.
153
+ if (section !== 'ships' && section !== 'cargo') {
154
+ return undefined;
155
+ }
156
+ const store = context.registrySnapshotStore;
157
+ if (store === undefined)
158
+ return undefined;
159
+ try {
160
+ const snapshot = await store.load(game, section);
161
+ if (!isCompatibleSnapshot(snapshot, game, section)) {
162
+ return undefined;
163
+ }
164
+ return sectionFromSnapshot(snapshot);
165
+ }
166
+ catch {
167
+ throw new ProviderError(`The application registry snapshot store could not load the ${section} definitions. Repair or disable the snapshot store, then retry.`, { accountType: 'game', address: game });
168
+ }
169
+ }
170
+ async function saveSection(context, game, section, loaded) {
171
+ // Keep the load/save boundary symmetric until a versioned bigint encoding
172
+ // extends DefinitionSectionSnapshot.
173
+ if (section !== 'ships' && section !== 'cargo')
174
+ return;
175
+ const store = context.registrySnapshotStore;
176
+ if (store === undefined)
177
+ return;
178
+ try {
179
+ if (section === 'ships') {
180
+ await store.save(snapshotFor(game, section, loaded));
181
+ }
182
+ else {
183
+ await store.save(snapshotFor(game, section, loaded));
184
+ }
185
+ }
186
+ catch {
187
+ // Snapshot persistence is a cold-start optimization. A successful Game
188
+ // read remains authoritative when application-owned storage is unavailable.
189
+ }
190
+ }
191
+ async function populateFromGame(context, game, sectionsToPopulate, state) {
192
+ const account = await context.data.readRaw(game);
193
+ if (account === undefined)
194
+ throw new AccountNotFoundError('game', game);
195
+ const decoded = decodeGameRegistrySections(account, sectionsToPopulate);
196
+ const populated = sectionsToPopulate.map((populatedSection) => {
197
+ const loaded = (() => {
198
+ if (populatedSection === 'ships') {
199
+ const ships = sectionFromGame(decoded.ships, 'ships');
200
+ state.sections.ships = ships;
201
+ return ships;
202
+ }
203
+ if (populatedSection === 'cargo') {
204
+ const cargo = sectionFromGame(decoded.cargo, 'cargo');
205
+ state.sections.cargo = cargo;
206
+ return cargo;
207
+ }
208
+ if (populatedSection === 'craftingHabs') {
209
+ const craftingHabs = sectionFromGame(decoded.craftingHabs, 'craftingHabs');
210
+ state.sections.craftingHabs = craftingHabs;
211
+ return craftingHabs;
212
+ }
213
+ if (populatedSection === 'habBuildings') {
214
+ const habBuildings = sectionFromGame(decoded.habBuildings, 'habBuildings');
215
+ state.sections.habBuildings = habBuildings;
216
+ return habBuildings;
217
+ }
218
+ if (populatedSection === 'xp') {
219
+ const xp = sectionFromGame(decoded.xp, 'xp');
220
+ state.sections.xp = xp;
221
+ return xp;
222
+ }
223
+ const research = sectionFromGame(decoded.research, 'research');
224
+ state.sections.research = research;
225
+ return research;
226
+ })();
227
+ const confirmingSequenceId = state.confirmingSequenceIds[populatedSection];
228
+ if (confirmingSequenceId !== undefined) {
229
+ state.confirmedSequenceMismatches[populatedSection] = {
230
+ actualSequenceId: loaded.sequenceId,
231
+ confirmedAtMonotonicMs: performance.now(),
232
+ expectedSequenceId: confirmingSequenceId,
233
+ };
234
+ delete state.confirmingSequenceIds[populatedSection];
235
+ }
236
+ else if (state.confirmedSequenceMismatches[populatedSection]?.actualSequenceId !==
237
+ loaded.sequenceId) {
238
+ delete state.confirmedSequenceMismatches[populatedSection];
239
+ }
240
+ if (state.confirmingMissing.has(populatedSection)) {
241
+ state.confirmedMissingSequenceIds[populatedSection] = loaded.sequenceId;
242
+ state.confirmingMissing.delete(populatedSection);
243
+ }
244
+ state.refresh.delete(populatedSection);
245
+ return { loaded, section: populatedSection };
246
+ });
247
+ await Promise.all(populated.map(({ loaded, section }) => saveSection(context, game, section, loaded)));
248
+ }
249
+ async function populateSection(context, game, section, state) {
250
+ if (!state.refresh.has(section)) {
251
+ const stored = await loadStoredSection(context, game, section);
252
+ if (stored !== undefined) {
253
+ if (section === 'ships')
254
+ state.sections.ships = stored;
255
+ else
256
+ state.sections.cargo = stored;
257
+ return;
258
+ }
259
+ }
260
+ let gameLoading = state.gameLoading;
261
+ if (gameLoading === undefined) {
262
+ const sections = (section === 'ships' || section === 'cargo') &&
263
+ ((state.refresh.has('ships') && state.refresh.has('cargo')) ||
264
+ (state.sections.ships === undefined &&
265
+ state.sections.cargo === undefined))
266
+ ? ['ships', 'cargo']
267
+ : [section];
268
+ const promise = populateFromGame(context, game, sections, state).finally(() => {
269
+ delete state.gameLoading;
270
+ });
271
+ gameLoading = [promise, sections];
272
+ state.gameLoading = gameLoading;
273
+ }
274
+ else if (!gameLoading[1].includes(section)) {
275
+ try {
276
+ await gameLoading[0];
277
+ }
278
+ catch {
279
+ // An unrelated population cannot satisfy or fail this section. Retry
280
+ // after it settles so Game reads remain serialized.
281
+ }
282
+ return populateSection(context, game, section, state);
283
+ }
284
+ await gameLoading[0];
285
+ if (state.sections[section] === undefined || state.refresh.has(section)) {
286
+ return populateSection(context, game, section, state);
287
+ }
288
+ }
289
+ async function ensureSection(context, section) {
290
+ assertContextActive(context);
291
+ const game = context.game;
292
+ if (game === undefined)
293
+ throw new MissingGameContextError();
294
+ const state = stateFor(context);
295
+ const existing = state.sections[section];
296
+ if (existing !== undefined && !state.refresh.has(section))
297
+ return existing;
298
+ let loading = state.loading[section];
299
+ if (loading === undefined) {
300
+ loading = populateSection(context, game, section, state).finally(() => {
301
+ delete state.loading[section];
302
+ });
303
+ state.loading[section] = loading;
304
+ }
305
+ await loading;
306
+ return state.sections[section];
307
+ }
308
+ async function resolveDefinition(context, section, id, options) {
309
+ const loaded = await ensureSection(context, section);
310
+ const expected = options.expectedSequenceId;
311
+ const definition = loaded.definitions.get(id);
312
+ const state = stateFor(context);
313
+ const callerIsAhead = expected !== undefined && expected > loaded.sequenceId;
314
+ const callerIsBehind = expected !== undefined && expected < loaded.sequenceId;
315
+ const toleratesOlderCaller = callerIsBehind && SECTIONS_TOLERATING_OLDER_CALLERS.has(section);
316
+ const sequenceMismatch = callerIsAhead || (callerIsBehind && !toleratesOlderCaller);
317
+ if (sequenceMismatch) {
318
+ if (callerIsAhead) {
319
+ const confirmed = state.confirmedSequenceMismatches[section];
320
+ if (confirmed?.actualSequenceId !== loaded.sequenceId ||
321
+ performance.now() - confirmed.confirmedAtMonotonicMs >=
322
+ SEQUENCE_MISMATCH_RETRY_DELAY_MS) {
323
+ state.confirmingSequenceIds[section] = expected;
324
+ state.refresh.add(section);
325
+ }
326
+ }
327
+ throw new RegistryOutOfSyncError(section, expected, loaded.sequenceId, id);
328
+ }
329
+ if (definition === undefined) {
330
+ const definitionMissingAfterRefresh = state.confirmedMissingSequenceIds[section] === loaded.sequenceId;
331
+ if (!definitionMissingAfterRefresh && !toleratesOlderCaller) {
332
+ state.confirmingMissing.add(section);
333
+ state.refresh.add(section);
334
+ }
335
+ throw new RegistryOutOfSyncError(section, expected, loaded.sequenceId, id, definitionMissingAfterRefresh);
336
+ }
337
+ return definition;
338
+ }
339
+ /** Resolves one ship id to an immutable SDK-owned definition summary.
340
+ *
341
+ * @example
342
+ * ```ts
343
+ * declare const ctx: SageContext;
344
+ * declare const fleet: { readonly shipId: number; readonly shipDefinitionsSeqId: number };
345
+ * const ship = await resolveShip(ctx, fleet.shipId, { expectedSequenceId: fleet.shipDefinitionsSeqId });
346
+ * ```
347
+ */
348
+ export function resolveShip(context, shipId, options = {}) {
349
+ return resolveDefinition(context, 'ships', shipId, options);
350
+ }
351
+ /** Resolves one cargo id to an immutable SDK-owned definition summary.
352
+ *
353
+ * @example
354
+ * ```ts
355
+ * declare const ctx: SageContext;
356
+ * declare const cargoId: number;
357
+ * declare const expectedSequenceId: number;
358
+ * const cargo = await resolveCargo(ctx, cargoId, { expectedSequenceId });
359
+ * ```
360
+ */
361
+ export function resolveCargo(context, cargoId, options = {}) {
362
+ return resolveDefinition(context, 'cargo', cargoId, options);
363
+ }
364
+ /** Resolves one Crafting Hab definition with sequence-aware invalidation.
365
+ * @example
366
+ * ```ts
367
+ * declare const ctx: SageContext;
368
+ * const hab = await resolveCraftingHabDefinition(ctx, 5);
369
+ * ```
370
+ */
371
+ export function resolveCraftingHabDefinition(context, definitionId, options = {}) {
372
+ return resolveDefinition(context, 'craftingHabs', definitionId, options);
373
+ }
374
+ /** Resolves one Crafting Hab building definition with sequence-aware invalidation.
375
+ * @example
376
+ * ```ts
377
+ * declare const ctx: SageContext;
378
+ * const building = await resolveHabBuildingDefinition(ctx, 21);
379
+ * ```
380
+ */
381
+ export function resolveHabBuildingDefinition(context, buildingId, options = {}) {
382
+ return resolveDefinition(context, 'habBuildings', buildingId, options);
383
+ }
384
+ /** Resolves the Game XP rules matching one Character XP sequence. */
385
+ export function resolveXpDefinitions(context, options = {}) {
386
+ return resolveDefinition(context, 'xp', 0, options);
387
+ }
388
+ /** Lists the independent immutable Game research catalog. */
389
+ export async function listResearchDefinitions(context) {
390
+ const loaded = (await ensureSection(context, 'research'));
391
+ return deepFreeze({
392
+ definitions: [...loaded.definitions.values()],
393
+ sequenceId: loaded.sequenceId,
394
+ });
395
+ }
396
+ export { RegistryOutOfSyncError } from '../client/errors.js';
397
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"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"}