@conquest-eth/tools 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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +259 -0
  3. package/dist/cli-tool-generator.d.ts +22 -0
  4. package/dist/cli-tool-generator.d.ts.map +1 -0
  5. package/dist/cli-tool-generator.js +217 -0
  6. package/dist/cli-tool-generator.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +76 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/contracts/space-info.d.ts +7 -0
  12. package/dist/contracts/space-info.d.ts.map +1 -0
  13. package/dist/contracts/space-info.js +34 -0
  14. package/dist/contracts/space-info.js.map +1 -0
  15. package/dist/fleet/index.d.ts +4 -0
  16. package/dist/fleet/index.d.ts.map +1 -0
  17. package/dist/fleet/index.js +7 -0
  18. package/dist/fleet/index.js.map +1 -0
  19. package/dist/fleet/manager.d.ts +70 -0
  20. package/dist/fleet/manager.d.ts.map +1 -0
  21. package/dist/fleet/manager.js +92 -0
  22. package/dist/fleet/manager.js.map +1 -0
  23. package/dist/fleet/resolve.d.ts +51 -0
  24. package/dist/fleet/resolve.d.ts.map +1 -0
  25. package/dist/fleet/resolve.js +140 -0
  26. package/dist/fleet/resolve.js.map +1 -0
  27. package/dist/fleet/send.d.ts +29 -0
  28. package/dist/fleet/send.d.ts.map +1 -0
  29. package/dist/fleet/send.js +81 -0
  30. package/dist/fleet/send.js.map +1 -0
  31. package/dist/helpers/index.d.ts +14 -0
  32. package/dist/helpers/index.d.ts.map +1 -0
  33. package/dist/helpers/index.js +28 -0
  34. package/dist/helpers/index.js.map +1 -0
  35. package/dist/index.d.ts +36 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +143 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/planet/acquire.d.ts +16 -0
  40. package/dist/planet/acquire.d.ts.map +1 -0
  41. package/dist/planet/acquire.js +27 -0
  42. package/dist/planet/acquire.js.map +1 -0
  43. package/dist/planet/exit.d.ts +17 -0
  44. package/dist/planet/exit.d.ts.map +1 -0
  45. package/dist/planet/exit.js +56 -0
  46. package/dist/planet/exit.js.map +1 -0
  47. package/dist/planet/index.d.ts +4 -0
  48. package/dist/planet/index.d.ts.map +1 -0
  49. package/dist/planet/index.js +6 -0
  50. package/dist/planet/index.js.map +1 -0
  51. package/dist/planet/manager.d.ts +106 -0
  52. package/dist/planet/manager.d.ts.map +1 -0
  53. package/dist/planet/manager.js +253 -0
  54. package/dist/planet/manager.js.map +1 -0
  55. package/dist/storage/interface.d.ts +93 -0
  56. package/dist/storage/interface.d.ts.map +1 -0
  57. package/dist/storage/interface.js +2 -0
  58. package/dist/storage/interface.js.map +1 -0
  59. package/dist/storage/json-storage.d.ts +28 -0
  60. package/dist/storage/json-storage.d.ts.map +1 -0
  61. package/dist/storage/json-storage.js +148 -0
  62. package/dist/storage/json-storage.js.map +1 -0
  63. package/dist/tools/acquire_planets.d.ts +7 -0
  64. package/dist/tools/acquire_planets.d.ts.map +1 -0
  65. package/dist/tools/acquire_planets.js +63 -0
  66. package/dist/tools/acquire_planets.js.map +1 -0
  67. package/dist/tools/exit_planets.d.ts +5 -0
  68. package/dist/tools/exit_planets.d.ts.map +1 -0
  69. package/dist/tools/exit_planets.js +31 -0
  70. package/dist/tools/exit_planets.js.map +1 -0
  71. package/dist/tools/get_my_planets.d.ts +5 -0
  72. package/dist/tools/get_my_planets.d.ts.map +1 -0
  73. package/dist/tools/get_my_planets.js +30 -0
  74. package/dist/tools/get_my_planets.js.map +1 -0
  75. package/dist/tools/get_pending_exits.d.ts +3 -0
  76. package/dist/tools/get_pending_exits.d.ts.map +1 -0
  77. package/dist/tools/get_pending_exits.js +37 -0
  78. package/dist/tools/get_pending_exits.js.map +1 -0
  79. package/dist/tools/get_pending_fleets.d.ts +3 -0
  80. package/dist/tools/get_pending_fleets.d.ts.map +1 -0
  81. package/dist/tools/get_pending_fleets.js +41 -0
  82. package/dist/tools/get_pending_fleets.js.map +1 -0
  83. package/dist/tools/get_planets_around.d.ts +7 -0
  84. package/dist/tools/get_planets_around.d.ts.map +1 -0
  85. package/dist/tools/get_planets_around.js +41 -0
  86. package/dist/tools/get_planets_around.js.map +1 -0
  87. package/dist/tools/index.d.ts +10 -0
  88. package/dist/tools/index.d.ts.map +1 -0
  89. package/dist/tools/index.js +11 -0
  90. package/dist/tools/index.js.map +1 -0
  91. package/dist/tools/resolve_fleet.d.ts +5 -0
  92. package/dist/tools/resolve_fleet.d.ts.map +1 -0
  93. package/dist/tools/resolve_fleet.js +37 -0
  94. package/dist/tools/resolve_fleet.js.map +1 -0
  95. package/dist/tools/send_fleet.d.ts +16 -0
  96. package/dist/tools/send_fleet.d.ts.map +1 -0
  97. package/dist/tools/send_fleet.js +62 -0
  98. package/dist/tools/send_fleet.js.map +1 -0
  99. package/dist/tools/verify_exit_status.d.ts +5 -0
  100. package/dist/tools/verify_exit_status.d.ts.map +1 -0
  101. package/dist/tools/verify_exit_status.js +39 -0
  102. package/dist/tools/verify_exit_status.js.map +1 -0
  103. package/dist/types.d.ts +126 -0
  104. package/dist/types.d.ts.map +1 -0
  105. package/dist/types.js +34 -0
  106. package/dist/types.js.map +1 -0
  107. package/dist/util/hashing.d.ts +33 -0
  108. package/dist/util/hashing.d.ts.map +1 -0
  109. package/dist/util/hashing.js +38 -0
  110. package/dist/util/hashing.js.map +1 -0
  111. package/dist/util/time.d.ts +43 -0
  112. package/dist/util/time.d.ts.map +1 -0
  113. package/dist/util/time.js +55 -0
  114. package/dist/util/time.js.map +1 -0
  115. package/package.json +78 -0
  116. package/src/cli-tool-generator.ts +287 -0
  117. package/src/cli.ts +109 -0
  118. package/src/contracts/space-info.ts +41 -0
  119. package/src/fleet/index.ts +8 -0
  120. package/src/fleet/manager.ts +140 -0
  121. package/src/fleet/resolve.ts +187 -0
  122. package/src/fleet/send.ts +112 -0
  123. package/src/helpers/index.ts +59 -0
  124. package/src/index.ts +181 -0
  125. package/src/planet/acquire.ts +41 -0
  126. package/src/planet/exit.ts +71 -0
  127. package/src/planet/index.ts +6 -0
  128. package/src/planet/manager.ts +335 -0
  129. package/src/storage/interface.ts +111 -0
  130. package/src/storage/json-storage.ts +184 -0
  131. package/src/tools/acquire_planets.ts +81 -0
  132. package/src/tools/exit_planets.ts +35 -0
  133. package/src/tools/get_my_planets.ts +30 -0
  134. package/src/tools/get_pending_exits.ts +37 -0
  135. package/src/tools/get_pending_fleets.ts +41 -0
  136. package/src/tools/get_planets_around.ts +44 -0
  137. package/src/tools/index.ts +10 -0
  138. package/src/tools/resolve_fleet.ts +37 -0
  139. package/src/tools/send_fleet.ts +68 -0
  140. package/src/tools/verify_exit_status.ts +43 -0
  141. package/src/types.ts +178 -0
  142. package/src/util/hashing.ts +60 -0
  143. package/src/util/time.ts +66 -0
@@ -0,0 +1,253 @@
1
+ import { zeroAddress } from 'viem';
2
+ import { acquirePlanets } from './acquire.js';
3
+ import { exitPlanets } from './exit.js';
4
+ /**
5
+ * PlanetManager manages planet-related operations in the Conquest game
6
+ * including acquiring new planets and initiating exit processes
7
+ */
8
+ export class PlanetManager {
9
+ clients;
10
+ gameContract;
11
+ spaceInfo;
12
+ contractConfig;
13
+ storage;
14
+ constructor(clients, gameContract, spaceInfo, contractConfig, storage) {
15
+ this.clients = clients;
16
+ this.gameContract = gameContract;
17
+ this.spaceInfo = spaceInfo;
18
+ this.contractConfig = contractConfig;
19
+ this.storage = storage;
20
+ }
21
+ /**
22
+ * Ensure walletClient is available for operations that require it
23
+ */
24
+ requireWalletClient() {
25
+ if (!this.clients.walletClient) {
26
+ throw new Error('Wallet client is required for this operation. Please provide a PRIVATE_KEY environment variable.');
27
+ }
28
+ return this.clients;
29
+ }
30
+ /**
31
+ * Acquire (stake) multiple planets
32
+ */
33
+ async acquire(planetIds, amountToMint, tokenAmount) {
34
+ return acquirePlanets(this.requireWalletClient(), this.gameContract, planetIds, amountToMint, tokenAmount);
35
+ }
36
+ /**
37
+ * Acquire (stake) multiple planets with automatic cost calculation
38
+ */
39
+ async acquireWithAutoCalc(planetIds) {
40
+ const costs = this.calculateAcquisitionCosts(planetIds);
41
+ const result = await acquirePlanets(this.requireWalletClient(), this.gameContract, planetIds, costs.amountToMint, costs.tokenAmount);
42
+ return { ...result, costs };
43
+ }
44
+ /**
45
+ * Calculate acquisition costs for planets based on their stats
46
+ *
47
+ * @param planetIds - Array of planet location IDs
48
+ * @returns Object with total amountToMint and tokenAmount
49
+ */
50
+ calculateAcquisitionCosts(planetIds) {
51
+ const DECIMAL_14 = 100000000000000n;
52
+ let totalTokenAmount = 0n;
53
+ for (const planetId of planetIds) {
54
+ const planet = this.getPlanetInfo(planetId);
55
+ if (!planet) {
56
+ throw new Error(`Planet ${planetId} not found`);
57
+ }
58
+ // Use the planet's stake value from its statistics
59
+ // Multiply by DECIMAL_14 as the contract does
60
+ totalTokenAmount += BigInt(planet.stats.stake) * DECIMAL_14;
61
+ }
62
+ const amountToMint = totalTokenAmount;
63
+ // When using native token, we set tokenAmount to 0
64
+ return { amountToMint, tokenAmount: 0n };
65
+ }
66
+ /**
67
+ * Exit (unstake) multiple planets
68
+ */
69
+ async exit(planetIds) {
70
+ return exitPlanets(this.requireWalletClient(), this.gameContract, planetIds, this.contractConfig.exitDuration, this.storage);
71
+ }
72
+ /**
73
+ * Get planet info by location ID
74
+ */
75
+ getPlanetInfo(planetId) {
76
+ return this.spaceInfo.getPlanetInfoViaId(planetId);
77
+ }
78
+ /**
79
+ * Get planet ID by x,y coordinates
80
+ * @param x - X coordinate
81
+ * @param y - Y coordinate
82
+ * @returns Planet location ID as bigint, or undefined if no planet exists at coordinates
83
+ */
84
+ getPlanetIdByCoordinates(x, y) {
85
+ const planet = this.spaceInfo.getPlanetInfo(x, y);
86
+ return planet?.location.id;
87
+ }
88
+ /**
89
+ * Get multiple planet infos
90
+ */
91
+ getPlanetInfos(planetIds) {
92
+ return planetIds.map((id) => this.getPlanetInfo(id));
93
+ }
94
+ /**
95
+ * Get planets around a center point within a radius
96
+ */
97
+ async getPlanetsAround(centerX, centerY, radius) {
98
+ // Get planet infos from SpaceInfo within the bounding box
99
+ const planetsInRect = [];
100
+ for (const planet of this.spaceInfo.yieldPlanetsFromRect(centerX - radius, centerY - radius, centerX + radius, centerY + radius)) {
101
+ // Calculate actual distance to filter by radius
102
+ const dx = planet.location.x - centerX;
103
+ const dy = planet.location.y - centerY;
104
+ const distance = Math.sqrt(dx * dx + dy * dy);
105
+ if (distance <= radius) {
106
+ planetsInRect.push(planet);
107
+ }
108
+ }
109
+ // Batch query contract for planet states
110
+ const planetIds = planetsInRect.map((p) => p.location.id);
111
+ const result = await this.clients.publicClient.readContract({
112
+ address: this.gameContract.address,
113
+ abi: this.gameContract.abi,
114
+ functionName: 'getPlanetStates',
115
+ args: [planetIds],
116
+ });
117
+ const states = result[0];
118
+ // Get current time for computing latest state
119
+ const currentTime = Math.floor(Date.now() / 1000);
120
+ // Combine info with states and compute latest state
121
+ return planetsInRect.map((planet, index) => {
122
+ const rawState = states[index];
123
+ // Create a mutable copy of the state to compute updates
124
+ const stateCopy = {
125
+ owner: rawState.owner === zeroAddress ? undefined : rawState.owner,
126
+ ownerYakuzaSubscriptionEndTime: 0, // TODO
127
+ lastUpdatedSaved: rawState.lastUpdated,
128
+ startExitTime: rawState.exitStartTime,
129
+ numSpaceships: rawState.numSpaceships,
130
+ flagTime: 0, // TODO
131
+ travelingUpkeep: 0, // TODO
132
+ overflow: 0, // TODO
133
+ active: rawState.active,
134
+ exiting: false, // will be populated
135
+ exitTimeLeft: 0, // will be populated
136
+ natives: false, // will be populated
137
+ capturing: false, // will be populated
138
+ inReach: false, // will be populated
139
+ rewardGiver: '', // will be populated
140
+ metadata: {},
141
+ };
142
+ // Compute the latest state using SpaceInfo
143
+ this.spaceInfo.computePlanetUpdateForTimeElapsed(stateCopy, planet, currentTime);
144
+ return {
145
+ info: planet,
146
+ state: stateCopy,
147
+ };
148
+ });
149
+ }
150
+ /**
151
+ * Get my planets (owned by the current wallet)
152
+ */
153
+ async getMyPlanets(radius = 100) {
154
+ const sender = this.requireWalletClient().walletClient.account.address;
155
+ // For now, use a simple approach: get all planets in area and filter by owner
156
+ // A better approach would be to use an index or The Graph
157
+ const planetsInRect = [];
158
+ // Get planets from 0,0 out to radius
159
+ for (const planet of this.spaceInfo.yieldPlanetsFromRect(-radius, -radius, radius, radius)) {
160
+ planetsInRect.push(planet);
161
+ }
162
+ // Batch query contract for planet states
163
+ const planetIds = planetsInRect.map((p) => p.location.id);
164
+ const result = await this.clients.publicClient.readContract({
165
+ address: this.gameContract.address,
166
+ abi: this.gameContract.abi,
167
+ functionName: 'getPlanetStates',
168
+ args: [planetIds],
169
+ });
170
+ const states = result[0];
171
+ // Get current time for computing latest state
172
+ const currentTime = Math.floor(Date.now() / 1000);
173
+ // Filter by owner and compute latest state
174
+ const myPlanets = [];
175
+ for (let i = 0; i < planetsInRect.length; i++) {
176
+ const rawState = states[i];
177
+ if (rawState && rawState.owner && rawState.owner.toLowerCase() === sender.toLowerCase()) {
178
+ // Create a mutable copy of the state to compute updates
179
+ const stateCopy = { ...rawState };
180
+ // Compute the latest state using SpaceInfo
181
+ this.spaceInfo.computePlanetUpdateForTimeElapsed(stateCopy, planetsInRect[i], currentTime);
182
+ myPlanets.push({ info: planetsInRect[i], state: stateCopy });
183
+ }
184
+ }
185
+ return myPlanets;
186
+ }
187
+ /**
188
+ * Get pending exits for the current player
189
+ */
190
+ async getMyPendingExits() {
191
+ const sender = this.requireWalletClient().walletClient.account.address;
192
+ return this.storage.getPendingExitsByPlayer(sender);
193
+ }
194
+ /**
195
+ * Verify exit status for a planet
196
+ */
197
+ async verifyExitStatus(planetId) {
198
+ const exit = await this.storage.getPendingExit(planetId);
199
+ if (!exit) {
200
+ throw new Error(`No pending exit found for planet ${planetId}`);
201
+ }
202
+ // Query contract for current planet state
203
+ const result = await this.clients.publicClient.readContract({
204
+ ...this.gameContract,
205
+ functionName: 'getPlanetStates',
206
+ args: [[planetId]],
207
+ });
208
+ const states = result[0];
209
+ if (states.length === 0) {
210
+ throw new Error(`Could not get planet state for ${planetId}`);
211
+ }
212
+ const currentState = states[0];
213
+ const currentTime = Math.floor(Date.now() / 1000);
214
+ // Check if exit was interrupted by an attack
215
+ let interrupted = false;
216
+ if (currentState.owner && currentState.owner.toLowerCase() !== exit.player.toLowerCase()) {
217
+ interrupted = true;
218
+ await this.storage.markExitInterrupted(planetId, currentTime, currentState.owner);
219
+ }
220
+ // Check if exit is complete
221
+ if (!currentState.active && currentTime >= exit.exitCompleteTime) {
222
+ await this.storage.markExitCompleted(planetId, currentTime);
223
+ }
224
+ const updatedExit = await this.storage.getPendingExit(planetId);
225
+ if (!updatedExit) {
226
+ throw new Error('Exit was cleaned up during verification');
227
+ }
228
+ return {
229
+ exit: updatedExit,
230
+ interrupted,
231
+ newOwner: currentState.owner,
232
+ };
233
+ }
234
+ /**
235
+ * Clean up old completed exits
236
+ */
237
+ async cleanupOldCompletedExits(olderThanDays = 7) {
238
+ const olderThan = Math.floor(Date.now() / 1000) - olderThanDays * 24 * 60 * 60;
239
+ await this.storage.cleanupOldCompletedExits(olderThan);
240
+ }
241
+ /**
242
+ * Calculate distance between two planets
243
+ */
244
+ calculateDistance(fromPlanetId, toPlanetId) {
245
+ const fromPlanet = this.getPlanetInfo(fromPlanetId);
246
+ const toPlanet = this.getPlanetInfo(toPlanetId);
247
+ if (!fromPlanet || !toPlanet) {
248
+ return undefined;
249
+ }
250
+ return this.spaceInfo.distance(fromPlanet, toPlanet);
251
+ }
252
+ }
253
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/planet/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import type { Address } from 'viem';
2
+ import { PendingExit, PendingFleet } from '../types.js';
3
+ /**
4
+ * Storage interface for managing fleets and planet exits
5
+ * Provides methods to persist and retrieve game state data
6
+ */
7
+ export interface FleetStorage {
8
+ /**
9
+ * Save a pending fleet to storage
10
+ * @param fleet - The fleet to save
11
+ */
12
+ saveFleet(fleet: PendingFleet): Promise<void>;
13
+ /**
14
+ * Retrieve a fleet by its ID
15
+ * @param fleetId - The fleet ID to retrieve
16
+ * @returns The fleet or null if not found
17
+ */
18
+ getFleet(fleetId: string): Promise<PendingFleet | null>;
19
+ /**
20
+ * Get all pending fleets for a specific sender
21
+ * @param sender - The address of the fleet sender
22
+ * @returns Array of pending fleets
23
+ */
24
+ getPendingFleetsBySender(sender: Address): Promise<PendingFleet[]>;
25
+ /**
26
+ * Get all fleets that can be resolved (not yet resolved)
27
+ * @returns Array of resolvable fleets
28
+ */
29
+ getResolvableFleets(): Promise<PendingFleet[]>;
30
+ /**
31
+ * Mark a fleet as resolved
32
+ * @param fleetId - The fleet ID to mark as resolved
33
+ * @param resolvedAt - The timestamp when the fleet was resolved
34
+ */
35
+ markResolved(fleetId: string, resolvedAt: number): Promise<void>;
36
+ /**
37
+ * Clean up old resolved fleets from storage
38
+ * @param olderThan - Unix timestamp; fleets resolved before this time will be removed
39
+ */
40
+ cleanupOldResolvedFleets(olderThan: number): Promise<void>;
41
+ /**
42
+ * Get all fleets in storage
43
+ * @returns Array of all fleets
44
+ */
45
+ getAllFleets(): Promise<PendingFleet[]>;
46
+ /**
47
+ * Save a pending exit to storage
48
+ * @param exit - The exit to save
49
+ */
50
+ savePendingExit(exit: PendingExit): Promise<void>;
51
+ /**
52
+ * Retrieve a pending exit by planet ID
53
+ * @param planetId - The planet location ID
54
+ * @returns The pending exit or null if not found
55
+ */
56
+ getPendingExit(planetId: bigint): Promise<PendingExit | null>;
57
+ /**
58
+ * Get all pending exits for a specific player
59
+ * @param player - The address of the player
60
+ * @returns Array of pending exits
61
+ */
62
+ getPendingExitsByPlayer(player: Address): Promise<PendingExit[]>;
63
+ /**
64
+ * Update the status of a pending exit
65
+ * @param planetId - The planet location ID
66
+ * @param updates - Partial updates to apply to the exit record
67
+ */
68
+ updateExitStatus(planetId: bigint, updates: Partial<PendingExit>): Promise<void>;
69
+ /**
70
+ * Mark an exit as completed
71
+ * @param planetId - The planet location ID
72
+ * @param completedAt - The timestamp when the exit completed
73
+ */
74
+ markExitCompleted(planetId: bigint, completedAt: number): Promise<void>;
75
+ /**
76
+ * Mark an exit as interrupted by an attack
77
+ * @param planetId - The planet location ID
78
+ * @param interruptedAt - The timestamp when the exit was interrupted
79
+ * @param newOwner - The address of the new owner who interrupted the exit
80
+ */
81
+ markExitInterrupted(planetId: bigint, interruptedAt: number, newOwner: Address): Promise<void>;
82
+ /**
83
+ * Clean up old completed exits from storage
84
+ * @param olderThan - Unix timestamp; exits completed before this time will be removed
85
+ */
86
+ cleanupOldCompletedExits(olderThan: number): Promise<void>;
87
+ /**
88
+ * Get all pending exits in storage
89
+ * @returns Array of all pending exits
90
+ */
91
+ getAllPendingExits(): Promise<PendingExit[]>;
92
+ }
93
+ //# sourceMappingURL=interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/storage/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAClC,OAAO,EAAC,WAAW,EAAE,YAAY,EAAC,MAAM,aAAa,CAAC;AAEtD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAG5B;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9C;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAExD;;;;OAIG;IACH,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAEnE;;;OAGG;IACH,mBAAmB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAE/C;;;;OAIG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE;;;OAGG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D;;;OAGG;IACH,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAIxC;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAE9D;;;;OAIG;IACH,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAEjE;;;;OAIG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjF;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE;;;;;OAKG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/F;;;OAGG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D;;;OAGG;IACH,kBAAkB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CAC7C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/storage/interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import type { Address } from 'viem';
2
+ import type { FleetStorage } from './interface.js';
3
+ import { PendingExit, PendingFleet } from '../types.js';
4
+ export declare class JsonFleetStorage implements FleetStorage {
5
+ private dataPath;
6
+ private data;
7
+ private initialized;
8
+ constructor(dataDir?: string);
9
+ initialize(): Promise<void>;
10
+ private ensureInitialized;
11
+ private save;
12
+ saveFleet(fleet: PendingFleet): Promise<void>;
13
+ getFleet(fleetId: string): Promise<PendingFleet | null>;
14
+ getPendingFleetsBySender(sender: Address): Promise<PendingFleet[]>;
15
+ getResolvableFleets(): Promise<PendingFleet[]>;
16
+ markResolved(fleetId: string, resolvedAt: number): Promise<void>;
17
+ cleanupOldResolvedFleets(olderThan: number): Promise<void>;
18
+ getAllFleets(): Promise<PendingFleet[]>;
19
+ savePendingExit(exit: PendingExit): Promise<void>;
20
+ getPendingExit(planetId: bigint): Promise<PendingExit | null>;
21
+ getPendingExitsByPlayer(player: Address): Promise<PendingExit[]>;
22
+ updateExitStatus(planetId: bigint, updates: Partial<PendingExit>): Promise<void>;
23
+ markExitCompleted(planetId: bigint, completedAt: number): Promise<void>;
24
+ markExitInterrupted(planetId: bigint, interruptedAt: number, newOwner: Address): Promise<void>;
25
+ cleanupOldCompletedExits(olderThan: number): Promise<void>;
26
+ getAllPendingExits(): Promise<PendingExit[]>;
27
+ }
28
+ //# sourceMappingURL=json-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-storage.d.ts","sourceRoot":"","sources":["../../src/storage/json-storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAClC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAC,WAAW,EAAE,YAAY,EAAC,MAAM,aAAa,CAAC;AAQtD,qBAAa,gBAAiB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE,MAAiB;IAKhC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YA4BnB,iBAAiB;YAMjB,IAAI;IAKZ,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAKvD,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAOlE,mBAAmB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAQ9C,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhE,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1D,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAMvC,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAK7D,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAOhE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAShF,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvE,mBAAmB,CACxB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC;IAWV,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1D,kBAAkB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;CAIlD"}
@@ -0,0 +1,148 @@
1
+ import { promises as fs } from 'fs';
2
+ import path from 'path';
3
+ import { stringifyWithBigInt } from '../helpers/index.js';
4
+ export class JsonFleetStorage {
5
+ dataPath;
6
+ data;
7
+ initialized = false;
8
+ constructor(dataDir = './data') {
9
+ this.dataPath = path.join(dataDir, 'conquest-data.json');
10
+ this.data = { fleets: {}, exits: {} };
11
+ }
12
+ async initialize() {
13
+ if (this.initialized) {
14
+ return;
15
+ }
16
+ // Load from disk or create new
17
+ try {
18
+ await fs.mkdir(path.dirname(this.dataPath), { recursive: true });
19
+ const content = await fs.readFile(this.dataPath, 'utf-8');
20
+ const data = JSON.parse(content);
21
+ // Convert BigInt strings back to BigInt
22
+ for (const fleetId in data.fleets) {
23
+ const fleet = data.fleets[fleetId];
24
+ fleet.fromPlanetId = BigInt(fleet.fromPlanetId);
25
+ fleet.toPlanetId = BigInt(fleet.toPlanetId);
26
+ fleet.arrivalTimeWanted = BigInt(fleet.arrivalTimeWanted);
27
+ }
28
+ for (const planetId in data.exits) {
29
+ const exit = data.exits[planetId];
30
+ exit.planetId = BigInt(exit.planetId);
31
+ }
32
+ this.data = data;
33
+ }
34
+ catch (error) {
35
+ // File doesn't exist, create new
36
+ await this.save();
37
+ }
38
+ this.initialized = true;
39
+ }
40
+ async ensureInitialized() {
41
+ if (!this.initialized) {
42
+ await this.initialize();
43
+ }
44
+ }
45
+ async save() {
46
+ await fs.writeFile(this.dataPath, stringifyWithBigInt(this.data, 2));
47
+ }
48
+ // Fleet operations
49
+ async saveFleet(fleet) {
50
+ await this.ensureInitialized();
51
+ this.data.fleets[fleet.fleetId] = fleet;
52
+ await this.save();
53
+ }
54
+ async getFleet(fleetId) {
55
+ await this.ensureInitialized();
56
+ return this.data.fleets[fleetId] || null;
57
+ }
58
+ async getPendingFleetsBySender(sender) {
59
+ await this.ensureInitialized();
60
+ return Object.values(this.data.fleets).filter((fleet) => fleet.fleetSender.toLowerCase() === sender.toLowerCase() && !fleet.resolved);
61
+ }
62
+ async getResolvableFleets() {
63
+ await this.ensureInitialized();
64
+ const now = Math.floor(Date.now() / 1000);
65
+ return Object.values(this.data.fleets).filter((fleet) => !fleet.resolved && fleet.estimatedArrivalTime <= now);
66
+ }
67
+ async markResolved(fleetId, resolvedAt) {
68
+ await this.ensureInitialized();
69
+ const fleet = this.data.fleets[fleetId];
70
+ if (fleet) {
71
+ fleet.resolved = true;
72
+ fleet.resolvedAt = resolvedAt;
73
+ await this.save();
74
+ }
75
+ }
76
+ async cleanupOldResolvedFleets(olderThan) {
77
+ await this.ensureInitialized();
78
+ const now = Math.floor(Date.now() / 1000);
79
+ for (const fleetId in this.data.fleets) {
80
+ const fleet = this.data.fleets[fleetId];
81
+ if (fleet.resolved && fleet.resolvedAt && fleet.resolvedAt < now - olderThan) {
82
+ delete this.data.fleets[fleetId];
83
+ }
84
+ }
85
+ await this.save();
86
+ }
87
+ async getAllFleets() {
88
+ await this.ensureInitialized();
89
+ return Object.values(this.data.fleets);
90
+ }
91
+ // Exit operations
92
+ async savePendingExit(exit) {
93
+ await this.ensureInitialized();
94
+ this.data.exits[exit.planetId.toString()] = exit;
95
+ await this.save();
96
+ }
97
+ async getPendingExit(planetId) {
98
+ await this.ensureInitialized();
99
+ return this.data.exits[planetId.toString()] || null;
100
+ }
101
+ async getPendingExitsByPlayer(player) {
102
+ await this.ensureInitialized();
103
+ return Object.values(this.data.exits).filter((exit) => exit.player.toLowerCase() === player.toLowerCase() && !exit.completed);
104
+ }
105
+ async updateExitStatus(planetId, updates) {
106
+ await this.ensureInitialized();
107
+ const exit = this.data.exits[planetId.toString()];
108
+ if (exit) {
109
+ Object.assign(exit, updates);
110
+ await this.save();
111
+ }
112
+ }
113
+ async markExitCompleted(planetId, completedAt) {
114
+ await this.ensureInitialized();
115
+ const exit = this.data.exits[planetId.toString()];
116
+ if (exit) {
117
+ exit.completed = true;
118
+ exit.lastCheckedAt = completedAt;
119
+ await this.save();
120
+ }
121
+ }
122
+ async markExitInterrupted(planetId, interruptedAt, newOwner) {
123
+ await this.ensureInitialized();
124
+ const exit = this.data.exits[planetId.toString()];
125
+ if (exit) {
126
+ exit.interrupted = true;
127
+ exit.lastCheckedAt = interruptedAt;
128
+ exit.owner = newOwner;
129
+ await this.save();
130
+ }
131
+ }
132
+ async cleanupOldCompletedExits(olderThan) {
133
+ await this.ensureInitialized();
134
+ const now = Math.floor(Date.now() / 1000);
135
+ for (const planetId in this.data.exits) {
136
+ const exit = this.data.exits[planetId];
137
+ if (exit.completed && exit.lastCheckedAt < now - olderThan) {
138
+ delete this.data.exits[planetId];
139
+ }
140
+ }
141
+ await this.save();
142
+ }
143
+ async getAllPendingExits() {
144
+ await this.ensureInitialized();
145
+ return Object.values(this.data.exits);
146
+ }
147
+ }
148
+ //# sourceMappingURL=json-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-storage.js","sourceRoot":"","sources":["../../src/storage/json-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ export declare const acquire_planets: import("../types.js").Tool<z.ZodObject<{
3
+ planetIds: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
4
+ amountToMint: z.ZodOptional<z.ZodNumber>;
5
+ tokenAmount: z.ZodOptional<z.ZodNumber>;
6
+ }, z.core.$strip>>;
7
+ //# sourceMappingURL=acquire_planets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acquire_planets.d.ts","sourceRoot":"","sources":["../../src/tools/acquire_planets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAItB,eAAO,MAAM,eAAe;;;;kBA4E1B,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { z } from 'zod';
2
+ import { createTool } from '../types.js';
3
+ export const acquire_planets = createTool({
4
+ description: 'Acquire (stake) multiple planets in the Conquest game. This allows you to take ownership of unclaimed planets.',
5
+ schema: z.object({
6
+ planetIds: z
7
+ .array(z.union([z.string(), z.number()]))
8
+ .describe('Array of planet location IDs to acquire (as hex strings or numbers)'),
9
+ amountToMint: z
10
+ .number()
11
+ .optional()
12
+ .describe('Amount of native token to spend to acquire the planets. If not provided, will be calculated automatically based on planet stats.'),
13
+ tokenAmount: z
14
+ .number()
15
+ .optional()
16
+ .describe('Amount of staking token to spend to acquire the planets. If not provided, will be calculated automatically based on planet stats.'),
17
+ }),
18
+ execute: async (env, { planetIds, amountToMint, tokenAmount }) => {
19
+ try {
20
+ // Convert planet IDs to BigInt
21
+ const planetIdsBigInt = planetIds.map((id) => typeof id === 'string' ? BigInt(id) : BigInt(id));
22
+ let result;
23
+ // If BOTH amounts are provided, use them; otherwise use auto-calculation
24
+ if (amountToMint !== undefined && tokenAmount !== undefined) {
25
+ // Use provided amounts
26
+ // TODO decimal handling, for now BigInt()
27
+ const acquireResult = await env.planetManager.acquire(planetIdsBigInt, BigInt(amountToMint), BigInt(tokenAmount));
28
+ result = {
29
+ hash: acquireResult.hash,
30
+ planetsAcquired: acquireResult.planetsAcquired,
31
+ amountToMint: BigInt(amountToMint),
32
+ tokenAmount: BigInt(tokenAmount),
33
+ };
34
+ }
35
+ else {
36
+ // Use auto-calculation
37
+ const autoResult = await env.planetManager.acquireWithAutoCalc(planetIdsBigInt);
38
+ result = {
39
+ hash: autoResult.hash,
40
+ planetsAcquired: autoResult.planetsAcquired,
41
+ amountToMint: autoResult.costs.amountToMint,
42
+ tokenAmount: autoResult.costs.tokenAmount,
43
+ };
44
+ }
45
+ return {
46
+ success: true,
47
+ result: {
48
+ transactionHash: result.hash,
49
+ planetsAcquired: result.planetsAcquired,
50
+ amountToMint: result.amountToMint,
51
+ tokenAmount: result.tokenAmount,
52
+ },
53
+ };
54
+ }
55
+ catch (error) {
56
+ return {
57
+ success: false,
58
+ error: error instanceof Error ? error.message : String(error),
59
+ };
60
+ }
61
+ },
62
+ });
63
+ //# sourceMappingURL=acquire_planets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acquire_planets.js","sourceRoot":"","sources":["../../src/tools/acquire_planets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAGvC,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;IACzC,WAAW,EACV,gHAAgH;IACjH,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,SAAS,EAAE,CAAC;aACV,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;aACxC,QAAQ,CAAC,qEAAqE,CAAC;QACjF,YAAY,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACR,kIAAkI,CAClI;QACF,WAAW,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACR,mIAAmI,CACnI;KACF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAC,SAAS,EAAE,YAAY,EAAE,WAAW,EAAC,EAAE,EAAE;QAC9D,IAAI,CAAC;YACJ,+BAA+B;YAC/B,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAC5C,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAChD,CAAC;YAEF,IAAI,MAKH,CAAC;YAEF,yEAAyE;YACzE,IAAI,YAAY,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC7D,uBAAuB;gBACvB,0CAA0C;gBAC1C,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,OAAO,CACpD,eAAe,EACf,MAAM,CAAC,YAAY,CAAC,EACpB,MAAM,CAAC,WAAW,CAAC,CACnB,CAAC;gBACF,MAAM,GAAG;oBACR,IAAI,EAAE,aAAa,CAAC,IAAI;oBACxB,eAAe,EAAE,aAAa,CAAC,eAAe;oBAC9C,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;oBAClC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;iBAChC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,uBAAuB;gBACvB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;gBAChF,MAAM,GAAG;oBACR,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,eAAe,EAAE,UAAU,CAAC,eAAe;oBAC3C,YAAY,EAAE,UAAU,CAAC,KAAK,CAAC,YAAY;oBAC3C,WAAW,EAAE,UAAU,CAAC,KAAK,CAAC,WAAW;iBACzC,CAAC;YACH,CAAC;YAED,OAAO;gBACN,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE;oBACP,eAAe,EAAE,MAAM,CAAC,IAAI;oBAC5B,eAAe,EAAE,MAAM,CAAC,eAAe;oBACvC,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,WAAW,EAAE,MAAM,CAAC,WAAW;iBAC/B;aACD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC7D,CAAC;QACH,CAAC;IACF,CAAC;CACD,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { z } from 'zod';
2
+ export declare const exit_planets: import("../types.js").Tool<z.ZodObject<{
3
+ planetIds: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
4
+ }, z.core.$strip>>;
5
+ //# sourceMappingURL=exit_planets.d.ts.map