@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,180 @@
1
+ import { PLAYER_PROFILE_PROGRAM_ADDRESS, PROFILE_DISCRIMINATOR, PROFILE_FLAGS, getProfileDecoder, } from '@staratlas/dev-player-profile';
2
+ import { CHARACTER_DISCRIMINATOR, SAGE_PROGRAM_ADDRESS, getCharacterDecoder, } from '@staratlas/dev-sage';
3
+ import { getAddressEncoder, getBytesEncoder, getProgramDerivedAddress, } from '@solana/kit';
4
+ import { AccountDecodeError, InvalidAccountOwnerError, InvalidDiscriminatorError, } from '../../client/errors.js';
5
+ import { translateCharacterModifier } from './character-modifier.js';
6
+ const FLOYDS_PER_ATLAS = 100_000_000;
7
+ const PROFILE_MINIMUM_DATA_LENGTH = 30;
8
+ const PROFILE_KEY_DATA_LENGTH = 80;
9
+ const CHARACTER_MINIMUM_DATA_LENGTH = 415;
10
+ function immutableBytes(bytes) {
11
+ return Object.freeze(Array.from(bytes));
12
+ }
13
+ const PROFILE_ACCOUNT_DISCRIMINATOR = immutableBytes(PROFILE_DISCRIMINATOR);
14
+ const CHARACTER_ACCOUNT_DISCRIMINATOR = immutableBytes(CHARACTER_DISCRIMINATOR);
15
+ const PROFILE_PERMISSION_BITS = [
16
+ [PROFILE_FLAGS.AUTH, 'authenticate'],
17
+ [PROFILE_FLAGS.ADD_KEYS, 'addKeys'],
18
+ [PROFILE_FLAGS.REMOVE_KEYS, 'removeKeys'],
19
+ [PROFILE_FLAGS.CHANGE_NAME, 'changeName'],
20
+ [PROFILE_FLAGS.CREATE_ROLE, 'createRole'],
21
+ [PROFILE_FLAGS.REMOVE_ROLE, 'removeRole'],
22
+ [PROFILE_FLAGS.SET_AUTHORIZER, 'setAuthorizer'],
23
+ [PROFILE_FLAGS.JOIN_ROLE, 'joinRole'],
24
+ [PROFILE_FLAGS.LEAVE_ROLE, 'leaveRole'],
25
+ [PROFILE_FLAGS.TOGGLE_ACCEPTING_NEW_MEMBERS, 'toggleAcceptingNewMembers'],
26
+ [PROFILE_FLAGS.ADD_MEMBER, 'addMember'],
27
+ [PROFILE_FLAGS.REMOVE_MEMBER, 'removeMember'],
28
+ [PROFILE_FLAGS.DRAIN_SOL_VAULT, 'drainSolVault'],
29
+ ];
30
+ function littleEndianBytesToBigInt(bytes) {
31
+ return bytes.reduceRight((value, byte) => (value << 8n) | BigInt(byte), 0n);
32
+ }
33
+ function translatePermissions(raw, scope) {
34
+ const isPlayerProfileScope = scope === PLAYER_PROFILE_PROGRAM_ADDRESS;
35
+ return PROFILE_PERMISSION_BITS.flatMap(([flag, permission]) => (raw & flag) !== 0n &&
36
+ (isPlayerProfileScope || permission === 'drainSolVault')
37
+ ? [permission]
38
+ : []);
39
+ }
40
+ function validateAccount(account, type, owner, discriminator, minimumDataLength) {
41
+ if (account.owner !== owner) {
42
+ throw new InvalidAccountOwnerError(type, account.address, owner, account.owner);
43
+ }
44
+ if (account.data.length < discriminator.length ||
45
+ discriminator.some((byte, index) => account.data[index] !== byte)) {
46
+ throw new InvalidDiscriminatorError(type, account.address);
47
+ }
48
+ if (account.data.length < minimumDataLength) {
49
+ throw new AccountDecodeError(type, account.address, new RangeError(`Expected at least ${minimumDataLength} account bytes, received ${account.data.length}.`));
50
+ }
51
+ }
52
+ function decodeExactly(account, type, decoder) {
53
+ try {
54
+ const [decoded, offset] = decoder.read(account.data, 0);
55
+ if (offset !== account.data.length) {
56
+ throw new RangeError(`Decoded ${offset} of ${account.data.length} account bytes; trailing bytes are not accepted.`);
57
+ }
58
+ return decoded;
59
+ }
60
+ catch (cause) {
61
+ throw new AccountDecodeError(type, account.address, cause);
62
+ }
63
+ }
64
+ function validateProfileShape(account) {
65
+ const keyCount = account.data[28] | (account.data[29] << 8);
66
+ const expectedLength = PROFILE_MINIMUM_DATA_LENGTH + keyCount * PROFILE_KEY_DATA_LENGTH;
67
+ if (account.data.length !== expectedLength) {
68
+ throw new AccountDecodeError('profile', account.address, new RangeError(`Profile declares ${keyCount} keys and requires ${expectedLength} bytes, received ${account.data.length}.`));
69
+ }
70
+ }
71
+ function translateProfile(profile) {
72
+ return {
73
+ authKeyCount: profile.authKeyCount,
74
+ createdAt: profile.createdAt,
75
+ keyThreshold: profile.keyThreshold,
76
+ keys: profile.profileKeys.map((key) => {
77
+ const permissionsRaw = littleEndianBytesToBigInt(key.permissions);
78
+ return {
79
+ address: key.key,
80
+ ...(key.expireTime < 0n ? {} : { expiresAt: key.expireTime }),
81
+ expiresAtRaw: key.expireTime,
82
+ permissions: translatePermissions(permissionsRaw, key.scope),
83
+ permissionsRaw,
84
+ scope: key.scope,
85
+ };
86
+ }),
87
+ nextSeqId: profile.nextSeqId,
88
+ version: profile.version,
89
+ };
90
+ }
91
+ function translateCharacter(character) {
92
+ const carryRaw = littleEndianBytesToBigInt(character.pilotXpBudget.fractionalCarry);
93
+ return {
94
+ atlas: Number(character.atlas) / FLOYDS_PER_ATLAS,
95
+ atlasRaw: character.atlas,
96
+ bump: character.bump,
97
+ checkIn: {
98
+ lastCheckInTime: character.checkInInfo.lastCheckInTime,
99
+ streak: character.checkInInfo.checkInStreak,
100
+ },
101
+ counts: { ...character.counts },
102
+ game: character.gameId,
103
+ modifiers: {
104
+ nodeLevels: [...character.characterModifiers.nodeLevels].map(([nodeId, level]) => ({ level, nodeId })),
105
+ seqId: character.characterModifiers.seqId,
106
+ unlockedNodes: [...character.characterModifiers.unlockedNodes],
107
+ unupdatedCount: character.characterModifiers.unupdatedCount,
108
+ values: translateCharacterModifier(character.characterModifiers.modifiers),
109
+ },
110
+ pilotXpBudget: {
111
+ available: character.pilotXpBudget.available,
112
+ fractionalCarry: Number(carryRaw) / 2 ** 48,
113
+ fractionalCarryRaw: carryRaw,
114
+ lastAccrualTime: character.pilotXpBudget.lastAccrualTime,
115
+ },
116
+ playerProfile: character.playerProfile,
117
+ version: character.version,
118
+ xp: {
119
+ ...character.xpInfo,
120
+ building: { ...character.xpInfo.building },
121
+ combat: { ...character.xpInfo.combat },
122
+ councilRank: { ...character.xpInfo.councilRank },
123
+ crafting: { ...character.xpInfo.crafting },
124
+ dailyXp: { ...character.xpInfo.dailyXp },
125
+ dataRunner: { ...character.xpInfo.dataRunner },
126
+ mining: { ...character.xpInfo.mining },
127
+ pilot: { ...character.xpInfo.pilot },
128
+ },
129
+ };
130
+ }
131
+ function validateProfileAccount(account) {
132
+ validateAccount(account, 'profile', PLAYER_PROFILE_PROGRAM_ADDRESS, PROFILE_ACCOUNT_DISCRIMINATOR, PROFILE_MINIMUM_DATA_LENGTH);
133
+ }
134
+ function validateCharacterAccount(account) {
135
+ validateAccount(account, 'character', SAGE_PROGRAM_ADDRESS, CHARACTER_ACCOUNT_DISCRIMINATOR, CHARACTER_MINIMUM_DATA_LENGTH);
136
+ }
137
+ function validateProfileAccountShape(account) {
138
+ validateProfileAccount(account);
139
+ validateProfileShape(account);
140
+ }
141
+ /** Stable Player Profile account definition for the pinned C4 bindings. */
142
+ export const profileAccountDefinition = Object.freeze({
143
+ decode(account) {
144
+ validateProfileAccountShape(account);
145
+ return translateProfile(decodeExactly(account, 'profile', getProfileDecoder()));
146
+ },
147
+ discriminator: PROFILE_ACCOUNT_DISCRIMINATOR,
148
+ minimumDataLength: PROFILE_MINIMUM_DATA_LENGTH,
149
+ programAddress: PLAYER_PROFILE_PROGRAM_ADDRESS,
150
+ type: 'profile',
151
+ validate: validateProfileAccountShape,
152
+ });
153
+ /** Stable Character account definition for the pinned C4 bindings. */
154
+ export const characterAccountDefinition = Object.freeze({
155
+ decode(account) {
156
+ validateCharacterAccount(account);
157
+ return translateCharacter(decodeExactly(account, 'character', getCharacterDecoder()));
158
+ },
159
+ discriminator: CHARACTER_ACCOUNT_DISCRIMINATOR,
160
+ minimumDataLength: CHARACTER_MINIMUM_DATA_LENGTH,
161
+ programAddress: SAGE_PROGRAM_ADDRESS,
162
+ type: 'character',
163
+ validate: validateCharacterAccount,
164
+ });
165
+ /** Derives the C4 Character address for a Player Profile and Game. */
166
+ export async function findCharacterPda(playerProfile, game) {
167
+ // Mirrors the pinned generated `findCharacterPda` seed recipe. Calling the
168
+ // generated bundle directly selects its browser-only crypto assertion under
169
+ // Node, while Kit's conditional export works in both supported environments.
170
+ const [address] = await getProgramDerivedAddress({
171
+ programAddress: SAGE_PROGRAM_ADDRESS,
172
+ seeds: [
173
+ getBytesEncoder().encode(new Uint8Array([67, 104, 97, 114, 97, 99, 116, 101, 114])),
174
+ getAddressEncoder().encode(playerProfile),
175
+ getAddressEncoder().encode(game),
176
+ ],
177
+ });
178
+ return address;
179
+ }
180
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/internal/c4/identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { Loot } from '@staratlas/dev-sage';
2
+ import type { RawAccount } from '../../client/contracts.js';
3
+ /** Minimum byte length shared by every validated C4 Loot adapter. */
4
+ export declare const LOOT_MINIMUM_DATA_LENGTH = 221;
5
+ /** Stable Loot filter offsets verified against the pinned generated codec. */
6
+ export declare const LOOT_FILTER_OFFSETS: Readonly<{
7
+ discriminator: 0;
8
+ game: 9;
9
+ profile: 41;
10
+ }>;
11
+ /**
12
+ * Enforces structural Loot invariants shared by combat and rewards reads.
13
+ *
14
+ * The generated codec fixes two reward-leg slots and describes `offsetList`
15
+ * entries as byte offsets to variable items. Status `NONE` therefore has no
16
+ * active reward legs, but inactive commitment metadata is deliberately ignored:
17
+ * the binding does not require those storage fields to be cleared.
18
+ */
19
+ export declare function assertLootLayout(account: RawAccount, value: Loot): void;
20
+ //# sourceMappingURL=loot-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loot-layout.d.ts","sourceRoot":"","sources":["../../../src/internal/c4/loot-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAG5D,qEAAqE;AACrE,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB;;;;EAI9B,CAAC;AAEH;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,CA2BvE"}
@@ -0,0 +1,29 @@
1
+ import { AccountDecodeError } from '../../client/errors.js';
2
+ /** Minimum byte length shared by every validated C4 Loot adapter. */
3
+ export const LOOT_MINIMUM_DATA_LENGTH = 221;
4
+ /** Stable Loot filter offsets verified against the pinned generated codec. */
5
+ export const LOOT_FILTER_OFFSETS = Object.freeze({
6
+ discriminator: 0,
7
+ game: 9,
8
+ profile: 41,
9
+ });
10
+ /**
11
+ * Enforces structural Loot invariants shared by combat and rewards reads.
12
+ *
13
+ * The generated codec fixes two reward-leg slots and describes `offsetList`
14
+ * entries as byte offsets to variable items. Status `NONE` therefore has no
15
+ * active reward legs, but inactive commitment metadata is deliberately ignored:
16
+ * the binding does not require those storage fields to be cleared.
17
+ */
18
+ export function assertLootLayout(account, value) {
19
+ const offsetsAreOrdered = value.items.offsetList.every((offset, index) => index === 0 || offset > value.items.offsetList[index - 1]);
20
+ if (value.rewardLegCount > value.rewardLegs.length ||
21
+ value.items.offsetList.length !== value.items.unsizedList.length ||
22
+ !offsetsAreOrdered) {
23
+ throw new AccountDecodeError('loot', account.address, new RangeError('Loot reward or variable-item shape is inconsistent.'), `Loot ${account.address} contains inconsistent reward legs or item offsets. Refresh the account and verify the pinned binding version before retrying.`);
24
+ }
25
+ if (value.rewardStatus === 0 && value.rewardLegCount !== 0) {
26
+ throw new AccountDecodeError('loot', account.address, new RangeError('Loot with reward status NONE exposes active reward legs.'), `Loot ${account.address} has reward status NONE but exposes active reward legs. Refresh the account and retry after its reward status and leg count agree.`);
27
+ }
28
+ }
29
+ //# sourceMappingURL=loot-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loot-layout.js","sourceRoot":"","sources":["../../../src/internal/c4/loot-layout.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,qEAAqE;AACrE,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAE5C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/C,aAAa,EAAE,CAAC;IAChB,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,EAAE;CACZ,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAmB,EAAE,KAAW;IAC/D,MAAM,iBAAiB,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CACpD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAChB,KAAK,KAAK,CAAC,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAE,CAC7D,CAAC;IACF,IACE,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM;QAC9C,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM;QAChE,CAAC,iBAAiB,EAClB,CAAC;QACD,MAAM,IAAI,kBAAkB,CAC1B,MAAM,EACN,OAAO,CAAC,OAAO,EACf,IAAI,UAAU,CAAC,qDAAqD,CAAC,EACrE,QAAQ,OAAO,CAAC,OAAO,gIAAgI,CACxJ,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,kBAAkB,CAC1B,MAAM,EACN,OAAO,CAAC,OAAO,EACf,IAAI,UAAU,CACZ,0DAA0D,CAC3D,EACD,QAAQ,OAAO,CAAC,OAAO,oIAAoI,CAC5J,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,102 @@
1
+ import { type Address } from '@solana/kit';
2
+ import type { DiscoveryRequest, ProgramAccountFilter, SageContext, SnapshotEnvelope } from '../../client/contracts.js';
3
+ import type { C4AccountAdapter } from './adapter.js';
4
+ import { deriveAtlasRewardConfigAddress, deriveFactionAccountAddress } from './pda.js';
5
+ export declare const LOYALTY_EPOCH_FILTER_OFFSETS: Readonly<{
6
+ discriminator: 0;
7
+ game: 12;
8
+ faction: 44;
9
+ }>;
10
+ export declare const LOYALTY_CONTRIBUTION_FILTER_OFFSETS: Readonly<{
11
+ discriminator: 0;
12
+ game: 12;
13
+ profile: 44;
14
+ }>;
15
+ export declare const LOYALTY_ATLAS_BANK_FILTER_OFFSETS: Readonly<{
16
+ discriminator: 0;
17
+ game: 10;
18
+ profile: 42;
19
+ }>;
20
+ /** Audited read and deferred-action relationships for loyalty state. */
21
+ export declare const LOYALTY_RELATIONSHIPS: readonly [{
22
+ readonly from: "game + faction + epoch | game + profile + faction";
23
+ readonly kind: "derived";
24
+ readonly mechanism: "generated LoyaltyEpoch, LoyaltyContribution, and LoyaltyAtlasBank PDA seeds";
25
+ readonly to: "loyalty state";
26
+ }, {
27
+ readonly from: "loyalty account";
28
+ readonly kind: "stored";
29
+ readonly mechanism: "repeated Game, Profile, faction, epoch, and reward config identity fields";
30
+ readonly to: "game | profile | faction | epoch | reward config";
31
+ }, {
32
+ readonly from: "epoch | contribution | bank";
33
+ readonly kind: "nested";
34
+ readonly mechanism: "lifecycle timestamps and exact LP/ATLAS values";
35
+ readonly to: "loyalty lifecycle and balances";
36
+ }, {
37
+ readonly from: "loyalty";
38
+ readonly kind: "instruction-only";
39
+ readonly mechanism: "initialization, settlement, sweeping, and claiming co-accounts are not durable relations";
40
+ readonly to: "actions";
41
+ }, {
42
+ readonly from: "faction | profile";
43
+ readonly kind: "discovered";
44
+ readonly mechanism: "verified discriminator and Game plus faction (epochs) or Profile (contributions and banks) offsets";
45
+ readonly to: "epochs | contributions | banks";
46
+ }];
47
+ export type LoyaltyEpochStatus = 'open' | 'closed' | 'swept';
48
+ export interface LoyaltyEpochAccountData {
49
+ readonly version: number;
50
+ readonly bump: number;
51
+ readonly status: LoyaltyEpochStatus;
52
+ readonly kingSystems: number;
53
+ readonly game: Address;
54
+ readonly factionId: number;
55
+ readonly configVersion: number;
56
+ readonly epochIndex: bigint;
57
+ readonly startsAtUnixSeconds: bigint;
58
+ readonly endsAtUnixSeconds: bigint;
59
+ readonly settlementDeadlineUnixSeconds: bigint;
60
+ readonly totalLpRaw: bigint;
61
+ readonly poolAtlasRaw: bigint;
62
+ readonly unsettledAtlasRaw: bigint;
63
+ readonly settledAtlasRaw: bigint;
64
+ }
65
+ export interface LoyaltyContributionAccountData {
66
+ readonly version: number;
67
+ readonly bump: number;
68
+ readonly settled: boolean;
69
+ readonly game: Address;
70
+ readonly profile: Address;
71
+ readonly factionId: number;
72
+ readonly epochIndex: bigint;
73
+ readonly lpRaw: bigint;
74
+ readonly atlasEntitlementRaw: bigint;
75
+ readonly settledAtUnixSeconds: bigint;
76
+ }
77
+ export interface LoyaltyAtlasBankAccountData {
78
+ readonly version: number;
79
+ readonly bump: number;
80
+ readonly game: Address;
81
+ readonly profile: Address;
82
+ readonly factionId: number;
83
+ readonly claimableAtlasRaw: bigint;
84
+ readonly lifetimeLpRaw: bigint;
85
+ readonly lifetimeAtlasRaw: bigint;
86
+ readonly lastCreditedAtUnixSeconds: bigint;
87
+ readonly expiresAtUnixSeconds: bigint;
88
+ }
89
+ export declare const loyaltyEpochAccountDefinition: C4AccountAdapter<LoyaltyEpochAccountData>;
90
+ export declare const loyaltyContributionAccountDefinition: C4AccountAdapter<LoyaltyContributionAccountData>;
91
+ export declare const loyaltyAtlasBankAccountDefinition: C4AccountAdapter<LoyaltyAtlasBankAccountData>;
92
+ export declare function deriveLoyaltyEpochAddress(game: Address, factionId: number, epochIndex: bigint): Promise<Address>;
93
+ export declare function deriveLoyaltyContributionAddress(game: Address, profile: Address, factionId: number, epochIndex: bigint): Promise<Address>;
94
+ export declare function deriveLoyaltyAtlasBankAddress(game: Address, profile: Address, factionId: number): Promise<Address>;
95
+ export { deriveFactionAccountAddress as deriveLoyaltyFactionAddress, deriveAtlasRewardConfigAddress as deriveLoyaltyRewardConfigAddress, };
96
+ export declare function buildLoyaltyEpochDiscoveryFilters(game: Address, factionId: number): readonly ProgramAccountFilter[];
97
+ export declare function buildLoyaltyContributionDiscoveryFilters(game: Address, profile: Address): readonly ProgramAccountFilter[];
98
+ export declare function buildLoyaltyAtlasBankDiscoveryFilters(game: Address, profile: Address): readonly ProgramAccountFilter[];
99
+ export declare function discoverLoyaltyEpochsByFaction(context: SageContext, factionId: number, options?: Omit<DiscoveryRequest, 'filters' | 'strategy'>): Promise<readonly SnapshotEnvelope<LoyaltyEpochAccountData>[]>;
100
+ export declare function discoverLoyaltyContributionsByProfile(context: SageContext, profile: Address, options?: Omit<DiscoveryRequest, 'filters' | 'strategy'>): Promise<readonly SnapshotEnvelope<LoyaltyContributionAccountData>[]>;
101
+ export declare function discoverLoyaltyAtlasBanksByProfile(context: SageContext, profile: Address, options?: Omit<DiscoveryRequest, 'filters' | 'strategy'>): Promise<readonly SnapshotEnvelope<LoyaltyAtlasBankAccountData>[]>;
102
+ //# sourceMappingURL=loyalty.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loyalty.d.ts","sourceRoot":"","sources":["../../../src/internal/c4/loyalty.ts"],"names":[],"mappings":"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"}