@aephia/atlas-kit 0.6.0-next.132 → 0.6.0-next.134

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 (69) hide show
  1. package/dist/cargo/actions/deposit.d.ts +3 -0
  2. package/dist/cargo/actions/deposit.d.ts.map +1 -1
  3. package/dist/cargo/actions/deposit.js +39 -14
  4. package/dist/cargo/actions/deposit.js.map +1 -1
  5. package/dist/cargo/actions/index.d.ts +11 -5
  6. package/dist/cargo/actions/index.d.ts.map +1 -1
  7. package/dist/cargo/actions/index.js +68 -14
  8. package/dist/cargo/actions/index.js.map +1 -1
  9. package/dist/fleets/actions/add-ship.d.ts +12 -4
  10. package/dist/fleets/actions/add-ship.d.ts.map +1 -1
  11. package/dist/fleets/actions/add-ship.js +15 -7
  12. package/dist/fleets/actions/add-ship.js.map +1 -1
  13. package/dist/identity/actions/research-unlock.d.ts +11 -7
  14. package/dist/identity/actions/research-unlock.d.ts.map +1 -1
  15. package/dist/identity/actions/research-unlock.js +11 -7
  16. package/dist/identity/actions/research-unlock.js.map +1 -1
  17. package/dist/internal/c4/cargo-instructions.d.ts +24 -0
  18. package/dist/internal/c4/cargo-instructions.d.ts.map +1 -0
  19. package/dist/internal/c4/cargo-instructions.js +30 -0
  20. package/dist/internal/c4/cargo-instructions.js.map +1 -0
  21. package/dist/internal/c4/discriminators.d.ts +2 -0
  22. package/dist/internal/c4/discriminators.d.ts.map +1 -1
  23. package/dist/internal/c4/discriminators.js +5 -1
  24. package/dist/internal/c4/discriminators.js.map +1 -1
  25. package/dist/internal/c4/fleet-ship-assembly.d.ts +19 -3
  26. package/dist/internal/c4/fleet-ship-assembly.d.ts.map +1 -1
  27. package/dist/internal/c4/fleet-ship-assembly.js +57 -7
  28. package/dist/internal/c4/fleet-ship-assembly.js.map +1 -1
  29. package/dist/internal/planning/cargo-storage.d.ts +71 -0
  30. package/dist/internal/planning/cargo-storage.d.ts.map +1 -0
  31. package/dist/internal/planning/cargo-storage.js +274 -0
  32. package/dist/internal/planning/cargo-storage.js.map +1 -0
  33. package/dist/internal/planning/fleet-ship-assembly.d.ts.map +1 -1
  34. package/dist/internal/planning/fleet-ship-assembly.js +58 -29
  35. package/dist/internal/planning/fleet-ship-assembly.js.map +1 -1
  36. package/dist/internal/planning/own-starbase-facts.d.ts +7 -3
  37. package/dist/internal/planning/own-starbase-facts.d.ts.map +1 -1
  38. package/dist/internal/planning/own-starbase-facts.js +8 -5
  39. package/dist/internal/planning/own-starbase-facts.js.map +1 -1
  40. package/dist/internal/planning/plan-guards.d.ts.map +1 -1
  41. package/dist/internal/planning/plan-guards.js +2 -0
  42. package/dist/internal/planning/plan-guards.js.map +1 -1
  43. package/dist/internal/planning/profile-storage-funding-guard.d.ts +21 -0
  44. package/dist/internal/planning/profile-storage-funding-guard.d.ts.map +1 -0
  45. package/dist/internal/planning/profile-storage-funding-guard.js +98 -0
  46. package/dist/internal/planning/profile-storage-funding-guard.js.map +1 -0
  47. package/dist/internal/planning/profile-storage-funding.d.ts +46 -0
  48. package/dist/internal/planning/profile-storage-funding.d.ts.map +1 -0
  49. package/dist/internal/planning/profile-storage-funding.js +62 -0
  50. package/dist/internal/planning/profile-storage-funding.js.map +1 -0
  51. package/dist/internal/planning/research-unlock.d.ts.map +1 -1
  52. package/dist/internal/planning/research-unlock.js +40 -16
  53. package/dist/internal/planning/research-unlock.js.map +1 -1
  54. package/dist/planning/execution.d.ts.map +1 -1
  55. package/dist/planning/execution.js +58 -6
  56. package/dist/planning/execution.js.map +1 -1
  57. package/dist/planning/index.d.ts +22 -1
  58. package/dist/planning/index.d.ts.map +1 -1
  59. package/dist/planning/index.js +2 -2
  60. package/dist/planning/index.js.map +1 -1
  61. package/dist/planning/plan-construction.js +1 -1
  62. package/dist/planning/plan-validation.d.ts.map +1 -1
  63. package/dist/planning/plan-validation.js +4 -0
  64. package/dist/planning/plan-validation.js.map +1 -1
  65. package/dist/registry/cargo.d.ts +2 -2
  66. package/dist/registry/cargo.d.ts.map +1 -1
  67. package/dist/registry/cargo.js +1 -2
  68. package/dist/registry/cargo.js.map +1 -1
  69. package/package.json +1 -1
@@ -0,0 +1,274 @@
1
+ import { getAddressDecoder } from '@solana/kit';
2
+ import { SageSdkError } from '../../client/errors.js';
3
+ import { decodeDepositCargoData, decodeStarbaseTransferData, decodeWithinFleetTransferData, } from '../c4/cargo-instructions.js';
4
+ import { fleetAccountDefinition } from '../c4/fleet.js';
5
+ import { starbasePlayerAccountDefinition } from '../c4/starbase.js';
6
+ import { CARGO_LINE_BYTES, cargoStorageInstruction, } from './profile-storage-funding-guard.js';
7
+ import { checkProfileStorageFunding, profileStorageFundingGuard, } from './profile-storage-funding.js';
8
+ import { RENT_ADDRESS, readRent } from './rent.js';
9
+ const NONE = new Map();
10
+ function fail(address, message) {
11
+ throw new SageSdkError('ACTION_PRECONDITION_FAILED', message, { address });
12
+ }
13
+ function totals(entries) {
14
+ const sums = new Map();
15
+ for (const [cargoId, amount] of entries)
16
+ if (amount !== undefined && amount > 0n)
17
+ sums.set(cargoId, (sums.get(cargoId) ?? 0n) + amount);
18
+ return sums;
19
+ }
20
+ function present(accounts, address) {
21
+ const raw = accounts.get(address);
22
+ if (!raw || raw.executable)
23
+ fail(address, `Account ${address} is missing or executable, so the cargo action's storage funding cannot be checked. Refresh it and replan the cargo action.`);
24
+ return raw;
25
+ }
26
+ /** Fresh accounts a cargo instruction's storage reads, besides the Profile,
27
+ * Rent sysvar and Game. */
28
+ export function cargoStorageAccounts(kind, instruction) {
29
+ const at = (index) => instruction.accounts[index].address;
30
+ if (kind === 'deposit')
31
+ return [at(5), at(10)];
32
+ if (kind === 'starbase-transfer')
33
+ return [at(4), at(8)];
34
+ return [at(4)];
35
+ }
36
+ /** Reads one cargo instruction's storage effect from its bytes and the fresh
37
+ * Fleet and token accounts. `cargoIdForMint` resolves a deposit's cargo id from
38
+ * its source token mint, as the program does. */
39
+ export function readCargoStorageAction(instruction, accounts, cargoIdForMint) {
40
+ const kind = cargoStorageInstruction(instruction);
41
+ const metas = instruction.accounts;
42
+ const data = instruction.data;
43
+ const signer = {
44
+ profile: metas[1].address,
45
+ authority: metas[0].address,
46
+ };
47
+ if (kind === 'deposit') {
48
+ const { amount, keyIndex } = decodeDepositCargoData(data);
49
+ const source = present(accounts, metas[10].address);
50
+ // Deposit callers always resolve the mint. One the Game does not list
51
+ // matches no held line, so the deposit counts as adding one: a
52
+ // conservative bound. The Plan's cargo-definition guards refuse such a
53
+ // deposit before this estimate runs.
54
+ const cargoId = cargoIdForMint(getAddressDecoder().decode(source.data.slice(0, 32)));
55
+ return {
56
+ ...signer,
57
+ keyIndex,
58
+ settlement: 'each',
59
+ accounts: [
60
+ {
61
+ address: metas[5].address,
62
+ pod: 'starbase',
63
+ added: totals([[cargoId, amount]]),
64
+ removed: NONE,
65
+ },
66
+ ],
67
+ };
68
+ }
69
+ const fleetAddress = metas[4].address;
70
+ if (kind === 'within-fleet-transfer') {
71
+ const { amount, cargoId, intoHold, outOfHold, keyIndex } = decodeWithinFleetTransferData(data);
72
+ const moved = totals([[cargoId, amount]]);
73
+ return {
74
+ ...signer,
75
+ keyIndex,
76
+ settlement: 'each',
77
+ accounts: [
78
+ {
79
+ address: fleetAddress,
80
+ pod: 'fleet-hold',
81
+ added: intoHold ? moved : NONE,
82
+ removed: outOfHold ? moved : NONE,
83
+ },
84
+ ],
85
+ };
86
+ }
87
+ const { ammo, fuel, loads, unloads, keyIndex } = decodeStarbaseTransferData(data);
88
+ const fleet = fleetAccountDefinition.decode(present(accounts, fleetAddress));
89
+ // Positive ammo and fuel load the Fleet from the Starbase Player; the
90
+ // Fleet's ammo bank and fuel tank are fixed slots.
91
+ const fromStarbase = totals([
92
+ [fleet.ammoBank.cargoId, ammo > 0n ? ammo : undefined],
93
+ [fleet.fuelTank.cargoId, fuel > 0n ? fuel : undefined],
94
+ ...loads,
95
+ ]);
96
+ const toStarbase = totals([
97
+ [fleet.ammoBank.cargoId, ammo < 0n ? -ammo : undefined],
98
+ [fleet.fuelTank.cargoId, fuel < 0n ? -fuel : undefined],
99
+ ...unloads,
100
+ ]);
101
+ return {
102
+ ...signer,
103
+ keyIndex,
104
+ settlement: 'pair',
105
+ accounts: [
106
+ {
107
+ address: fleetAddress,
108
+ pod: 'fleet-hold',
109
+ added: totals(loads),
110
+ removed: totals(unloads),
111
+ },
112
+ {
113
+ address: metas[8].address,
114
+ pod: 'starbase',
115
+ added: toStarbase,
116
+ removed: fromStarbase,
117
+ },
118
+ ],
119
+ };
120
+ }
121
+ function podLines(raw, pod) {
122
+ const amounts = pod === 'fleet-hold'
123
+ ? fleetAccountDefinition.decode(raw).cargoHold.amounts
124
+ : starbasePlayerAccountDefinition.decode(raw).cargo.amounts;
125
+ return new Map(amounts.map(({ cargoId, amount }) => [cargoId, amount]));
126
+ }
127
+ /** Evaluates cargo actions in order, as the program runs them: each pod adds a
128
+ * line for a cargo id it lacks and drops a line its consumption empties, and
129
+ * after each action every resized account holds exactly the rent minimum of its
130
+ * new size. Later actions therefore see the storage earlier ones used. */
131
+ export function evaluateCargoStorage(actions, accounts) {
132
+ const rent = readRent(present(accounts, RENT_ADDRESS));
133
+ const state = new Map();
134
+ return actions.map((action) => {
135
+ let deficit = 0n;
136
+ let excess = 0n;
137
+ const resizes = action.accounts.map((account) => {
138
+ let current = state.get(account.address);
139
+ if (!current) {
140
+ const raw = present(accounts, account.address);
141
+ current = { raw, lines: podLines(raw, account.pod) };
142
+ state.set(account.address, current);
143
+ }
144
+ let lines = 0;
145
+ for (const cargoId of new Set([
146
+ ...account.added.keys(),
147
+ ...account.removed.keys(),
148
+ ])) {
149
+ const held = current.lines.get(cargoId);
150
+ const after = (held ?? 0n) +
151
+ (account.added.get(cargoId) ?? 0n) -
152
+ (account.removed.get(cargoId) ?? 0n);
153
+ if (held === undefined && after > 0n)
154
+ lines += 1;
155
+ else if (held !== undefined &&
156
+ after <= 0n &&
157
+ account.removed.has(cargoId))
158
+ lines -= 1;
159
+ // Only consumption can empty a line; an added line stays positive.
160
+ if (after > 0n)
161
+ current.lines.set(cargoId, after);
162
+ else
163
+ current.lines.delete(cargoId);
164
+ }
165
+ const before = current.raw;
166
+ const growthBytes = lines * CARGO_LINE_BYTES;
167
+ const length = before.data.length + growthBytes;
168
+ // The program leaves a zero-lamport account unchanged.
169
+ if (before.lamports !== 0n) {
170
+ const minimum = rent(length);
171
+ if (before.lamports < minimum)
172
+ deficit += minimum - before.lamports;
173
+ else
174
+ excess += before.lamports - minimum;
175
+ }
176
+ current.raw = {
177
+ ...before,
178
+ data: new Uint8Array(length),
179
+ lamports: before.lamports === 0n ? 0n : rent(length),
180
+ };
181
+ return { raw: before, growthBytes };
182
+ });
183
+ const profileDebit = action.settlement === 'each'
184
+ ? deficit
185
+ : deficit > excess
186
+ ? deficit - excess
187
+ : 0n;
188
+ return { resizes, profileDebit };
189
+ });
190
+ }
191
+ /** The cargo steps of a Plan, in order. */
192
+ export function cargoStorageSteps(steps) {
193
+ return steps.flatMap((step) => {
194
+ const kind = cargoStorageInstruction(step.instruction);
195
+ return kind ? [{ ...step, kind }] : [];
196
+ });
197
+ }
198
+ /** Rechecks every cargo action's storage funding before signing. Each guard's
199
+ * resized accounts, sizes and byte changes must equal what its instruction does
200
+ * to the fresh accounts, so a saved Plan cannot weaken them. The actions are then
201
+ * evaluated in order, and each guard's debit is the one its action meets after
202
+ * the earlier actions. Returns each guard's funding, or the failure to report
203
+ * for it. */
204
+ export function validateCargoStorageFunding(steps, guards, accounts, cargoIdForMint) {
205
+ const results = new Map();
206
+ const remaining = [...guards];
207
+ const bound = [];
208
+ for (const step of cargoStorageSteps(steps)) {
209
+ const action = readCargoStorageAction(step.instruction, accounts, cargoIdForMint);
210
+ // Plan validation already bound each instruction to exactly one guard.
211
+ const index = remaining.findIndex((guard) => guard.profile === action.profile &&
212
+ guard.authority === action.authority &&
213
+ guard.keyIndex === action.keyIndex &&
214
+ guard.address === action.accounts[0].address &&
215
+ guard.paired === action.accounts[1]?.address);
216
+ bound.push({ guard: remaining[index], action });
217
+ remaining.splice(index, 1);
218
+ }
219
+ const ordered = evaluateCargoStorage(bound.map(({ action }) => action), accounts);
220
+ bound.forEach(({ guard, action }, index) => {
221
+ try {
222
+ const [solo] = evaluateCargoStorage([action], accounts);
223
+ const [first, second] = solo.resizes;
224
+ const planned = [
225
+ [guard.length, guard.growth],
226
+ guard.paired ? [guard.pairedLength, guard.pairedGrowth] : undefined,
227
+ ];
228
+ [first, second].forEach((resize, at) => {
229
+ if (!resize)
230
+ return;
231
+ const [, growth] = planned[at];
232
+ if (resize.growthBytes !== growth)
233
+ fail(resize.raw.address, `The cargo action grows account ${resize.raw.address} by ${resize.growthBytes} bytes, not the ${growth} bytes its storage funding guard records. Recreate the Plan with its cargo planner.`);
234
+ });
235
+ results.set(guard, {
236
+ funding: checkProfileStorageFunding({
237
+ profileRaw: present(accounts, guard.profile),
238
+ rentRaw: present(accounts, RENT_ADDRESS),
239
+ authority: guard.authority,
240
+ keyIndex: guard.keyIndex,
241
+ profileDebit: ordered[index].profileDebit,
242
+ action: 'cargo action',
243
+ maximumProfileDebit: guard.maximumProfileDebit,
244
+ }),
245
+ });
246
+ }
247
+ catch (error) {
248
+ results.set(guard, { error });
249
+ }
250
+ });
251
+ return results;
252
+ }
253
+ /** Plans one cargo instruction's storage funding from the same derivation
254
+ * execution repeats: its guard and the Plan summary sentence. */
255
+ export function planCargoStorageFunding(input) {
256
+ const action = readCargoStorageAction(input.instruction, input.accounts, input.cargoIdForMint);
257
+ const [evaluated] = evaluateCargoStorage([action], input.accounts);
258
+ return profileStorageFundingGuard({
259
+ profile: action.profile,
260
+ authority: action.authority,
261
+ keyIndex: action.keyIndex,
262
+ resizes: evaluated.resizes,
263
+ settlement: action.settlement,
264
+ funding: checkProfileStorageFunding({
265
+ profileRaw: present(input.accounts, input.profile),
266
+ rentRaw: present(input.accounts, RENT_ADDRESS),
267
+ authority: action.authority,
268
+ keyIndex: action.keyIndex,
269
+ profileDebit: evaluated.profileDebit,
270
+ action: input.action,
271
+ }),
272
+ });
273
+ }
274
+ //# sourceMappingURL=cargo-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cargo-storage.js","sourceRoot":"","sources":["../../../src/internal/planning/cargo-storage.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-ship-assembly.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/fleet-ship-assembly.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAgB5D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AACD,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,yBAAyB,CAAC,CAkBpC;AAID,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,yBAAyB,EACnC,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC,EACtD,QAAQ,CAAC,EAAE;IACT,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC,EACD,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC;IACT,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAuKD"}
1
+ {"version":3,"file":"fleet-ship-assembly.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/fleet-ship-assembly.ts"],"names":[],"mappings":"AAYA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAgB5D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AACD,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,yBAAyB,CAAC,CAkBpC;AAID,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,yBAAyB,EACnC,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC,EACtD,QAAQ,CAAC,EAAE;IACT,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC,EACD,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC;IACT,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CA+ND"}
@@ -1,6 +1,6 @@
1
1
  import { SYSTEM_PROGRAM } from '../system-program.js';
2
2
  import { fleetAccountDefinition, deriveFleetAddress } from '../c4/fleet.js';
3
- import { fleetShipAssemblySize, isBasicFleetAssemblyShip, } from '../c4/fleet-ship-assembly.js';
3
+ import { MAX_COMMANDERS_AND_TITANS_PER_FLEET, MAX_TITANS_PER_FLEET, fleetCapacityPoints, fleetShipAssemblySize, prospectiveShipCounts, shipSizeName, shipSizeRank, starbasePlayerEscrowGrowth, } from '../c4/fleet-ship-assembly.js';
4
4
  import { decodeGameShipAssemblyCatalog, hashShipAssemblyConfiguration, } from '../../registry/ships.js';
5
5
  import { isOffCurveAddress } from '@solana/kit';
6
6
  import { SageSdkError } from '../../client/errors.js';
@@ -46,12 +46,14 @@ export async function validateFleetShipAssembly(input, resolved, accounts, expec
46
46
  fail(address, `${name} ${address} is executable. Refresh valid account state before assembling ships.`);
47
47
  return raw;
48
48
  };
49
- const { profileRaw, profile, character, faction, starbase, player } = await readOwnStarbaseFacts(intent, resolved, required, {
49
+ // The program assembles at any Starbase where the Character has a current
50
+ // StarbasePlayer of the Fleet's faction, whoever owns the Starbase.
51
+ const { profileRaw, profile, character, faction, system, player } = await readOwnStarbaseFacts(intent, resolved, required, {
50
52
  replan: 'replan ship assembly',
51
53
  before: 'before assembling ships',
52
- });
53
- if (starbase.level !== 'css')
54
- fail(resolved.system, 'Ship assembly currently supports own-faction CSS Starbases only. Dock at an own-faction CSS Starbase and replan; other access routes need separate support.');
54
+ }, { anyStarbase: true });
55
+ if (player.sequenceId !== system.sequenceId)
56
+ fail(resolved.starbasePlayer, `The StarbasePlayer belongs to Starbase generation ${String(player.sequenceId)}, but the Starbase is at generation ${String(system.sequenceId)}; the program treats it as destroyed. Register a current StarbasePlayer at this Starbase and replan ship assembly.`);
55
57
  const fleetRaw = required(resolved.fleet, 'Fleet');
56
58
  const fleet = fleetAccountDefinition.decode(fleetRaw);
57
59
  if ((await deriveFleetAddress(fleet)) !== intent.address ||
@@ -61,7 +63,7 @@ export async function validateFleetShipAssembly(input, resolved, accounts, expec
61
63
  fleet.npcFactionId !== 0)
62
64
  fail(resolved.fleet, 'The Fleet has a noncanonical address or different Game, Profile, faction or NPC affiliation. Select a canonical owned player Fleet and replan ship assembly.');
63
65
  if (fleet.state.kind !== 'docked' || fleet.state.system !== intent.system)
64
- fail(resolved.fleet, 'Ship assembly requires the Fleet to remain Docked at the selected System. Dock at an own-faction CSS Starbase and replan.');
66
+ fail(resolved.fleet, 'Ship assembly requires the Fleet to remain Docked at the selected System. Dock at a Starbase where the Character has a current StarbasePlayer and replan.');
65
67
  // A Fleet with a sub-profile is rented (or a rental was invalidated), and
66
68
  // the program never adds ships to it.
67
69
  if (fleet.subProfile !== SYSTEM_PROGRAM)
@@ -75,39 +77,65 @@ export async function validateFleetShipAssembly(input, resolved, accounts, expec
75
77
  const gameRaw = required(resolved.game, 'Game');
76
78
  const definitions = catalog ?? decodeGameShipAssemblyCatalog(gameRaw);
77
79
  if (fleet.shipDefinitionsSeqId !== definitions.sequenceId)
78
- fail(resolved.fleet, 'This SDK route supports current ship-definition sequences only. Refresh the Fleet definitions through a supported game client, then replan; stale-sequence refresh behavior remains chain-authoritative.');
80
+ fail(resolved.fleet, 'The Fleet was built under older ship definitions. The program resynchronizes it inside the assembly, which can change its stats, and this SDK plans current Fleets only. Run any action that updates the Fleet, or the permissionless Fleet sync, then replan.');
79
81
  const selected = definitions.rows.find((row) => row.id === intent.shipId);
80
- if (!isBasicFleetAssemblyShip(selected))
81
- fail(resolved.game, 'The selected ship ID is unresolved or is not a requirements-free XXS configuration. Select a defined requirements-free XXS configuration; research, component and other size routes need separate support.');
82
- // Every validated stored maxShipSize enum permits XXS, the smallest pinned size.
83
- let quantity = 0n;
84
- for (const entry of fleet.fleetShips) {
85
- if (entry.quantity === 0n)
86
- continue;
87
- if (!isBasicFleetAssemblyShip(definitions.rows.find((row) => row.id === entry.shipId)))
88
- fail(resolved.fleet, 'The Fleet already contains a positive unresolved or unsupported ship configuration. Use a Fleet containing only resolved requirements-free XXS ships; mixed-size capacity needs separate support.');
89
- quantity += entry.quantity;
90
- }
82
+ if (!selected)
83
+ fail(resolved.game, `Ship configuration ${String(intent.shipId)} is not in the current Game ship definitions. Select a defined configuration and replan.`);
84
+ // Components move from the StarbasePlayer into the Fleet's components pod;
85
+ // that route and its storage are not planned yet.
86
+ if (selected.componentRequirements.size > 0)
87
+ fail(resolved.game, `Ship configuration ${String(intent.shipId)} needs ship components, which this SDK does not plan yet. Select a configuration without component requirements, or use the game client.`);
88
+ const size = shipSizeName(selected.sizeClass);
89
+ const maxSize = character.modifiers.values.maxShipSize;
90
+ if (selected.sizeClass > shipSizeRank(maxSize))
91
+ fail(resolved.character, `Ship configuration ${String(intent.shipId)} is ${size}, above the Character's maximum ship size ${maxSize}. Unlock research that raises the maximum ship size, then replan.`);
92
+ const tags = character.modifiers.values.researchTags;
93
+ const missing = selected.researchRequirements.filter((tag) => !tags.includes(tag));
94
+ if (missing.length > 0)
95
+ fail(resolved.character, `Ship configuration ${String(intent.shipId)} requires every research tag in [${selected.researchRequirements.join(', ')}]; the Character lacks [${missing.join(', ')}]. Unlock the research nodes that grant them, then replan.`);
91
96
  const current = fleet.fleetShips.find((entry) => entry.shipId === intent.shipId)
92
97
  ?.quantity ?? 0n;
93
98
  if (current + intent.amount > 18446744073709551615n)
94
99
  fail(resolved.fleet, 'The resulting Fleet ship quantity exceeds the stored u64 limit. Select a smaller valid quantity and replan.');
95
- if (quantity + intent.amount > BigInt(character.modifiers.values.fleetSize))
96
- fail(resolved.character, 'The requested ships exceed the Character stored Fleet-size capacity. Reduce the amount or refresh changed Character modifiers, then replan.');
97
- if (quantity + intent.amount > BigInt(definitions.maxFleetSize))
98
- fail(resolved.game, 'The requested ships exceed the Game ship-assembly capacity. Reduce the resulting Fleet composition to fit the current Game limit, then replan; a larger Character allowance does not override it.');
99
- const entitlement = player.shipsInEscrow.find((entry) => entry.shipId === intent.shipId)
100
- ?.quantityRaw ?? 0n;
100
+ // The program checks the Fleet's stored ship counts plus the added ships,
101
+ // never the requirements of ships already aboard.
102
+ const classes = prospectiveShipCounts(fleet.shipCounts, selected.sizeClass, Number(intent.amount));
103
+ const points = fleetCapacityPoints(classes);
104
+ if (points > character.modifiers.values.fleetSize)
105
+ fail(resolved.character, `The resulting Fleet uses ${String(points)} Fleet points, above the Character's Fleet size ${String(character.modifiers.values.fleetSize)}. Reduce the amount or unlock Fleet-size research, then replan.`);
106
+ if (points > definitions.maxFleetSize)
107
+ fail(resolved.game, `The resulting Fleet uses ${String(points)} Fleet points, above the Game's ${String(definitions.maxFleetSize)}-point Fleet limit. Reduce the resulting Fleet composition, then replan; a larger Character allowance does not override it.`);
108
+ const [commanders, titans] = [classes[6], classes[7]];
109
+ if (titans > MAX_TITANS_PER_FLEET)
110
+ fail(resolved.fleet, `The resulting Fleet would hold ${String(titans)} Titans; a Fleet holds at most ${String(MAX_TITANS_PER_FLEET)}. Add the Titan to another Fleet and replan.`);
111
+ if (commanders + titans > MAX_COMMANDERS_AND_TITANS_PER_FLEET)
112
+ fail(resolved.fleet, `The resulting Fleet would hold ${String(commanders + titans)} Commander and Titan ships; a Fleet holds at most ${String(MAX_COMMANDERS_AND_TITANS_PER_FLEET)} together. Add the ship to another Fleet and replan.`);
113
+ // Escrowed hulls of any configuration of the same ship count: the program
114
+ // re-tags them to the selected configuration.
115
+ const siblings = new Set(definitions.rows
116
+ .filter((row) => row.mint === selected.mint)
117
+ .map((row) => row.id));
118
+ const entitlement = player.shipsInEscrow
119
+ .filter((entry) => siblings.has(entry.shipId))
120
+ .reduce((total, entry) => total + entry.quantityRaw, 0n);
101
121
  if (entitlement < intent.amount)
102
- fail(resolved.starbasePlayer, 'The StarbasePlayer has insufficient entitlement for this exact ship configuration. Explicitly import that configuration or reduce the amount, then replan.');
122
+ fail(resolved.starbasePlayer, `The StarbasePlayer holds ${String(entitlement)} escrowed hulls of this ship across its configurations, fewer than the ${String(intent.amount)} requested. Explicitly import more of this ship or reduce the amount, then replan.`);
103
123
  const configHash = await hashShipAssemblyConfiguration(definitions, selected);
104
124
  if (expected && expected.configHash !== configHash)
105
125
  fail(resolved.game, 'The selected ship configuration has changed. Replan and inspect its current configuration before signing.');
106
126
  const rent = readRent(required(resolved.rent, 'Rent sysvar'));
107
127
  const now = readClock(required(resolved.clock, 'Clock sysvar'));
108
128
  const fleetRent = rent(fleetShipAssemblySize(fleetRaw, intent.shipId, intent.amount));
109
- const balance = fleetRaw.lamports;
110
- const profileDebit = balance < fleetRent ? fleetRent - balance : 0n;
129
+ const shortfall = (raw, minimum) => raw.lamports < minimum ? minimum - raw.lamports : 0n;
130
+ // The program funds the Fleet, StarbasePlayer and Character as one group.
131
+ // Re-tagging adds an escrow entry when the configuration has none, and its
132
+ // cost is counted in full. A StarbasePlayer already below its rent minimum
133
+ // is left out, as a combined ship import funds that shortfall first.
134
+ const playerRaw = required(resolved.starbasePlayer, 'StarbasePlayer');
135
+ const profileDebit = shortfall(fleetRaw, fleetRent) +
136
+ rent(playerRaw.data.length +
137
+ starbasePlayerEscrowGrowth(playerRaw, intent.shipId)) -
138
+ rent(playerRaw.data.length);
111
139
  if (expected !== undefined && profileDebit > expected.maximumProfileDebit)
112
140
  fail(resolved.profile, 'Ship assembly now requires a larger Profile debit than this Plan approved. Replan and inspect the updated rent shortfall before signing.');
113
141
  const profileReserve = rent(profileRaw.data.length);
@@ -119,9 +147,10 @@ export async function validateFleetShipAssembly(input, resolved, accounts, expec
119
147
  if (profileKeyExpired(key, now))
120
148
  fail(resolved.profile, 'The selected Profile key has expired. Renew it or select a current direct key and replan ship assembly.');
121
149
  const auth = grantsPermission(key, PROFILE_SCOPE, 0n);
122
- const manages = grantsPermission(key, SAGE_SCOPE, 18n);
150
+ const manages = grantsPermission(key, SAGE_SCOPE, 18n) ||
151
+ grantsPermission(key, intent.address, 18n);
123
152
  if (!auth && !manages)
124
- fail(resolved.profile, 'The selected key cannot manage Fleets. Use a direct Profile AUTH key or a SAGE manageFleet key and replan.');
153
+ fail(resolved.profile, 'The selected key cannot manage Fleets. Use a direct Profile AUTH key or a manageFleet key scoped to SAGE or this Fleet, and replan.');
125
154
  if (profileDebit > 0n && !auth && !hasPermissionBit(key, 63n))
126
155
  fail(resolved.profile, 'The selected manageFleet key cannot fund the Fleet from the Profile vault. Explicitly prefund the target or choose an authorized vault-funding key, then replan; drainSolVault grants vault withdrawal authority.');
127
156
  return { profileDebit, profileReserve, fleetRent, configHash };
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-ship-assembly.js","sourceRoot":"","sources":["../../../src/internal/planning/fleet-ship-assembly.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet-ship-assembly.js","sourceRoot":"","sources":["../../../src/internal/planning/fleet-ship-assembly.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,9 @@ export interface OwnStarbaseAction {
10
10
  /** Decodes and relates the Profile, Character, faction membership, Star System
11
11
  * and StarbasePlayer that Fleet creation and ship assembly both require: one
12
12
  * canonical Character and membership for the Profile, a canonical Starbase
13
- * System owned by that faction, and the StarbasePlayer joining them.
14
- * `required` reads each account with the planner's own wording. */
13
+ * System, and the StarbasePlayer joining them. Unless `anyStarbase` is set, the
14
+ * Starbase must belong to the Profile's faction. `required` reads each account
15
+ * with the planner's own wording. */
15
16
  export declare function readOwnStarbaseFacts(intent: {
16
17
  readonly game: Address;
17
18
  readonly profile: Address;
@@ -22,11 +23,14 @@ export declare function readOwnStarbaseFacts(intent: {
22
23
  readonly profileFaction: Address;
23
24
  readonly system: Address;
24
25
  readonly starbasePlayer: Address;
25
- }, required: (address: Address, name: string) => RawAccount, action: OwnStarbaseAction): Promise<{
26
+ }, required: (address: Address, name: string) => RawAccount, action: OwnStarbaseAction, options?: {
27
+ readonly anyStarbase?: true;
28
+ }): Promise<{
26
29
  profileRaw: RawAccount;
27
30
  profile: Readonly<import("../c4/identity.js").ProfileAccountData>;
28
31
  character: Readonly<import("../c4/character.js").CharacterAccountData>;
29
32
  faction: Readonly<import("../c4/profile-faction.js").ProfileFactionAccountData>;
33
+ system: Readonly<import("../c4/world.js").StarSystemAccountData>;
30
34
  starbase: import("../c4/world.js").WorldStarbaseData;
31
35
  player: Readonly<import("../c4/starbase.js").StarbasePlayerAccountData>;
32
36
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"own-starbase-facts.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/own-starbase-facts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAW5D,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,uFAAuF;IACvF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,sFAAsF;IACtF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAMD;;;;mEAImE;AACnE,wBAAsB,oBAAoB,CACxC,MAAM,EAAE;IACN,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,EACD,QAAQ,EAAE;IACR,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC,EACD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,UAAU,EACxD,MAAM,EAAE,iBAAiB;;;;;;;GAiE1B"}
1
+ {"version":3,"file":"own-starbase-facts.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/own-starbase-facts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAW5D,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,uFAAuF;IACvF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,sFAAsF;IACtF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAMD;;;;;qCAKqC;AACrC,wBAAsB,oBAAoB,CACxC,MAAM,EAAE;IACN,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,EACD,QAAQ,EAAE;IACR,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC,EACD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,UAAU,EACxD,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE;IAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAA;CAAO;;;;;;;;GAmE9C"}
@@ -10,9 +10,10 @@ function fail(address, message) {
10
10
  /** Decodes and relates the Profile, Character, faction membership, Star System
11
11
  * and StarbasePlayer that Fleet creation and ship assembly both require: one
12
12
  * canonical Character and membership for the Profile, a canonical Starbase
13
- * System owned by that faction, and the StarbasePlayer joining them.
14
- * `required` reads each account with the planner's own wording. */
15
- export async function readOwnStarbaseFacts(intent, resolved, required, action) {
13
+ * System, and the StarbasePlayer joining them. Unless `anyStarbase` is set, the
14
+ * Starbase must belong to the Profile's faction. `required` reads each account
15
+ * with the planner's own wording. */
16
+ export async function readOwnStarbaseFacts(intent, resolved, required, action, options = {}) {
16
17
  const profileRaw = required(resolved.profile, 'Profile');
17
18
  const profile = profileAccountDefinition.decode(profileRaw);
18
19
  const character = characterAccountDefinition.decode(required(resolved.character, 'Character'));
@@ -34,14 +35,16 @@ export async function readOwnStarbaseFacts(intent, resolved, required, action) {
34
35
  player.system !== intent.system ||
35
36
  player.faction !== faction.faction)
36
37
  fail(resolved.starbasePlayer, 'The StarbasePlayer has a different Profile, Character, System or faction relationship. Refresh the canonical StarbasePlayer and replan.');
37
- if (faction.faction === 'unaligned' ||
38
- system.starbase.owner !== faction.faction)
38
+ if (!options.anyStarbase &&
39
+ (faction.faction === 'unaligned' ||
40
+ system.starbase.owner !== faction.faction))
39
41
  fail(resolved.system, 'This planner supports an existing own-faction StarbasePlayer only. Select an own-faction Starbase; other diplomacy or access routes require separate supported planning.');
40
42
  return {
41
43
  profileRaw,
42
44
  profile,
43
45
  character,
44
46
  faction,
47
+ system,
45
48
  starbase: system.starbase,
46
49
  player,
47
50
  };
@@ -1 +1 @@
1
- {"version":3,"file":"own-starbase-facts.js","sourceRoot":"","sources":["../../../src/internal/planning/own-starbase-facts.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EACL,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,gBAAgB,CAAC;AAUxB,SAAS,IAAI,CAAC,OAAgB,EAAE,OAAe;IAC7C,MAAM,IAAI,YAAY,CAAC,4BAA4B,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED;;;;mEAImE;AACnE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAIC,EACD,QAMC,EACD,QAAwD,EACxD,MAAyB;IAEzB,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,wBAAwB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,0BAA0B,CAAC,MAAM,CACjD,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,CAC1C,CAAC;IACF,MAAM,OAAO,GAAG,+BAA+B,CAAC,MAAM,CACpD,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,gBAAgB,CAAC,CACpD,CAAC;IACF,MAAM,MAAM,GAAG,2BAA2B,CAAC,MAAM,CAC/C,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CACzC,CAAC;IACF,MAAM,MAAM,GAAG,+BAA+B,CAAC,MAAM,CACnD,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,gBAAgB,CAAC,CACpD,CAAC;IACF,IACE,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;QAC9B,SAAS,CAAC,aAAa,KAAK,MAAM,CAAC,OAAO;QAE1C,IAAI,CACF,QAAQ,CAAC,SAAS,EAClB,6FAA6F,MAAM,CAAC,MAAM,GAAG,CAC9G,CAAC;IACJ,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO;QACpC,IAAI,CACF,QAAQ,CAAC,cAAc,EACvB,2FAA2F,MAAM,CAAC,MAAM,GAAG,CAC5G,CAAC;IACJ,IACE,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;QAC3B,CAAC,MAAM,uBAAuB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3D,MAAM,CAAC,MAAM;QACf,CAAC,MAAM,CAAC,QAAQ;QAEhB,IAAI,CACF,QAAQ,CAAC,MAAM,EACf,mHAAmH,CACpH,CAAC;IACJ,IACE,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,OAAO;QACvC,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS;QACvC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;QAC/B,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO;QAElC,IAAI,CACF,QAAQ,CAAC,cAAc,EACvB,yIAAyI,CAC1I,CAAC;IACJ,IACE,OAAO,CAAC,OAAO,KAAK,WAAW;QAC/B,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAK,OAAO,CAAC,OAAO;QAEzC,IAAI,CACF,QAAQ,CAAC,MAAM,EACf,0KAA0K,CAC3K,CAAC;IACJ,OAAO;QACL,UAAU;QACV,OAAO;QACP,SAAS;QACT,OAAO;QACP,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM;KACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"own-starbase-facts.js","sourceRoot":"","sources":["../../../src/internal/planning/own-starbase-facts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plan-guards.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/plan-guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAmVhE,mEAAmE;AACnE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,IAAI,UAAQ,GACX,gBAAgB,CAkBlB"}
1
+ {"version":3,"file":"plan-guards.d.ts","sourceRoot":"","sources":["../../../src/internal/planning/plan-guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAqVhE,mEAAmE;AACnE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,IAAI,UAAQ,GACX,gBAAgB,CAkBlB"}
@@ -1,6 +1,7 @@
1
1
  import { normalizeArrivalGuard } from './arrival-guards.js';
2
2
  import { FLEET_DOCK_FUNDING_SCHEMA } from './fleet-dock-funding-guard.js';
3
3
  import { LOCAL_MARKET_ORDER_SCHEMA } from './local-market-order.js';
4
+ import { PROFILE_STORAGE_FUNDING_SCHEMA } from './profile-storage-funding-guard.js';
4
5
  import { MAX_U64, invalid, normalizeSchemaGuard, readRecord, } from './plan-fields.js';
5
6
  import { isRuntimeGuard, normalizeRuntimeGuard } from './runtime-guards.js';
6
7
  import { scanCompletionDiscriminators } from './scan-completion-guard.js';
@@ -159,6 +160,7 @@ const GUARD_SCHEMAS = {
159
160
  'account-state': schema(address('address'), ['dataHash', 'hash'], DESCRIBES),
160
161
  'fleet-dock-funding': FLEET_DOCK_FUNDING_SCHEMA,
161
162
  'local-market-order': LOCAL_MARKET_ORDER_SCHEMA,
163
+ 'profile-storage-funding': PROFILE_STORAGE_FUNDING_SCHEMA,
162
164
  };
163
165
  /** Validates one Plan guard; `wire` decodes its Plan JSON form. */
164
166
  export function normalizePrecondition(value, field, wire = false) {