@aephia/atlas-kit 0.5.0 → 0.6.0-next.2
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.
- package/README.md +38 -27
- package/dist/cargo/actions/deposit.d.ts +52 -0
- package/dist/cargo/actions/deposit.d.ts.map +1 -0
- package/dist/cargo/actions/deposit.js +192 -0
- package/dist/cargo/actions/deposit.js.map +1 -0
- package/dist/cargo/actions/index.d.ts +1 -0
- package/dist/cargo/actions/index.d.ts.map +1 -1
- package/dist/cargo/actions/index.js +1 -0
- package/dist/cargo/actions/index.js.map +1 -1
- package/dist/cargo/actions/wallet-token.d.ts +8 -0
- package/dist/cargo/actions/wallet-token.d.ts.map +1 -0
- package/dist/cargo/actions/wallet-token.js +58 -0
- package/dist/cargo/actions/wallet-token.js.map +1 -0
- package/dist/cargo/index.d.ts +1 -0
- package/dist/cargo/index.d.ts.map +1 -1
- package/dist/cargo/index.js +1 -0
- package/dist/cargo/index.js.map +1 -1
- package/dist/claim-stakes/actions/index.d.ts +393 -0
- package/dist/claim-stakes/actions/index.d.ts.map +1 -0
- package/dist/claim-stakes/actions/index.js +1747 -0
- package/dist/claim-stakes/actions/index.js.map +1 -0
- package/dist/claim-stakes/index.d.ts +64 -0
- package/dist/claim-stakes/index.d.ts.map +1 -1
- package/dist/claim-stakes/index.js +49 -0
- package/dist/claim-stakes/index.js.map +1 -1
- package/dist/client/context.d.ts.map +1 -1
- package/dist/client/context.js +2 -1
- package/dist/client/context.js.map +1 -1
- package/dist/client/errors.d.ts +12 -3
- package/dist/client/errors.d.ts.map +1 -1
- package/dist/client/errors.js +11 -0
- package/dist/client/errors.js.map +1 -1
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/lifecycle.d.ts +2 -0
- package/dist/client/lifecycle.d.ts.map +1 -1
- package/dist/client/lifecycle.js +31 -0
- package/dist/client/lifecycle.js.map +1 -1
- package/dist/combat/actions/index.d.ts +239 -0
- package/dist/combat/actions/index.d.ts.map +1 -0
- package/dist/combat/actions/index.js +1146 -0
- package/dist/combat/actions/index.js.map +1 -0
- package/dist/crafting/actions/index.d.ts +140 -0
- package/dist/crafting/actions/index.d.ts.map +1 -0
- package/dist/crafting/actions/index.js +728 -0
- package/dist/crafting/actions/index.js.map +1 -0
- package/dist/crafting/index.d.ts +74 -8
- package/dist/crafting/index.d.ts.map +1 -1
- package/dist/crafting/index.js +55 -9
- package/dist/crafting/index.js.map +1 -1
- package/dist/fleets/actions/index.d.ts +5 -4
- package/dist/fleets/actions/index.d.ts.map +1 -1
- package/dist/fleets/actions/index.js +85 -58
- package/dist/fleets/actions/index.js.map +1 -1
- package/dist/fleets/index.d.ts +1 -0
- package/dist/fleets/index.d.ts.map +1 -1
- package/dist/fleets/index.js +1 -0
- package/dist/fleets/index.js.map +1 -1
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/internal/c4/claim-stake-building-definitions.d.ts +50 -0
- package/dist/internal/c4/claim-stake-building-definitions.d.ts.map +1 -0
- package/dist/internal/c4/claim-stake-building-definitions.js +56 -0
- package/dist/internal/c4/claim-stake-building-definitions.js.map +1 -0
- package/dist/internal/c4/claim-stake-configuration.d.ts +17 -0
- package/dist/internal/c4/claim-stake-configuration.d.ts.map +1 -0
- package/dist/internal/c4/claim-stake-configuration.js +47 -0
- package/dist/internal/c4/claim-stake-configuration.js.map +1 -0
- package/dist/internal/c4/claim-stake-definitions.d.ts +37 -0
- package/dist/internal/c4/claim-stake-definitions.d.ts.map +1 -0
- package/dist/internal/c4/claim-stake-definitions.js +77 -0
- package/dist/internal/c4/claim-stake-definitions.js.map +1 -0
- package/dist/internal/c4/fleet.d.ts.map +1 -1
- package/dist/internal/c4/fleet.js +2 -102
- package/dist/internal/c4/fleet.js.map +1 -1
- package/dist/internal/c4/game-definition-layout.d.ts +11 -0
- package/dist/internal/c4/game-definition-layout.d.ts.map +1 -0
- package/dist/internal/c4/game-definition-layout.js +32 -0
- package/dist/internal/c4/game-definition-layout.js.map +1 -0
- package/dist/internal/c4/game.d.ts +19 -1
- package/dist/internal/c4/game.d.ts.map +1 -1
- package/dist/internal/c4/game.js +26 -37
- package/dist/internal/c4/game.js.map +1 -1
- package/dist/internal/c4/profile-faction.d.ts +6 -0
- package/dist/internal/c4/profile-faction.d.ts.map +1 -1
- package/dist/internal/c4/profile-faction.js +22 -1
- package/dist/internal/c4/profile-faction.js.map +1 -1
- package/dist/internal/c4/ship-stats.d.ts +5 -0
- package/dist/internal/c4/ship-stats.d.ts.map +1 -0
- package/dist/internal/c4/ship-stats.js +106 -0
- package/dist/internal/c4/ship-stats.js.map +1 -0
- package/dist/internal/c4/world.d.ts +23 -1
- package/dist/internal/c4/world.d.ts.map +1 -1
- package/dist/internal/c4/world.js +53 -1
- package/dist/internal/c4/world.js.map +1 -1
- package/dist/internal/crafting-process-state.d.ts +15 -0
- package/dist/internal/crafting-process-state.d.ts.map +1 -0
- package/dist/internal/crafting-process-state.js +12 -0
- package/dist/internal/crafting-process-state.js.map +1 -0
- package/dist/internal/planning/authorization-adapter.d.ts +79 -0
- package/dist/internal/planning/authorization-adapter.d.ts.map +1 -1
- package/dist/internal/planning/authorization-adapter.js +402 -0
- package/dist/internal/planning/authorization-adapter.js.map +1 -1
- package/dist/internal/read-meta.d.ts +39 -3
- package/dist/internal/read-meta.d.ts.map +1 -1
- package/dist/internal/read-meta.js +0 -10
- package/dist/internal/read-meta.js.map +1 -1
- package/dist/loyalty/actions/index.d.ts +40 -0
- package/dist/loyalty/actions/index.d.ts.map +1 -0
- package/dist/loyalty/actions/index.js +159 -0
- package/dist/loyalty/actions/index.js.map +1 -0
- package/dist/markets/actions/index.d.ts +100 -0
- package/dist/markets/actions/index.d.ts.map +1 -0
- package/dist/markets/actions/index.js +417 -0
- package/dist/markets/actions/index.js.map +1 -0
- package/dist/planning/assembly.d.ts +4 -0
- package/dist/planning/assembly.d.ts.map +1 -1
- package/dist/planning/assembly.js +13 -0
- package/dist/planning/assembly.js.map +1 -1
- package/dist/planning/composition.d.ts.map +1 -1
- package/dist/planning/composition.js +20 -1
- package/dist/planning/composition.js.map +1 -1
- package/dist/planning/execution.d.ts.map +1 -1
- package/dist/planning/execution.js +7 -4
- package/dist/planning/execution.js.map +1 -1
- package/dist/planning/index.d.ts +27 -8
- package/dist/planning/index.d.ts.map +1 -1
- package/dist/planning/index.js +57 -13
- package/dist/planning/index.js.map +1 -1
- package/dist/planning/simulation.d.ts.map +1 -1
- package/dist/planning/simulation.js +2 -1
- package/dist/planning/simulation.js.map +1 -1
- package/dist/registry/cargo.d.ts +17 -0
- package/dist/registry/cargo.d.ts.map +1 -0
- package/dist/registry/cargo.js +35 -0
- package/dist/registry/cargo.js.map +1 -0
- package/dist/registry/claim-stakes.d.ts +11 -0
- package/dist/registry/claim-stakes.d.ts.map +1 -0
- package/dist/registry/claim-stakes.js +15 -0
- package/dist/registry/claim-stakes.js.map +1 -0
- package/dist/registry/definition-section-snapshot.d.ts +42 -0
- package/dist/registry/definition-section-snapshot.d.ts.map +1 -0
- package/dist/registry/definition-section-snapshot.js +214 -0
- package/dist/registry/definition-section-snapshot.js.map +1 -0
- package/dist/registry/index.d.ts +114 -7
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +372 -101
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/publication.d.ts +8 -0
- package/dist/registry/publication.d.ts.map +1 -0
- package/dist/registry/publication.js +10 -0
- package/dist/registry/publication.js.map +1 -0
- package/dist/registry/ship-stats-snapshot.d.ts +8 -0
- package/dist/registry/ship-stats-snapshot.d.ts.map +1 -0
- package/dist/registry/ship-stats-snapshot.js +154 -0
- package/dist/registry/ship-stats-snapshot.js.map +1 -0
- package/dist/world/index.d.ts +22 -1
- package/dist/world/index.d.ts.map +1 -1
- package/dist/world/index.js +24 -1
- package/dist/world/index.js.map +1 -1
- package/package.json +21 -1
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
import { getAddressEncoder } from '@solana/kit';
|
|
2
|
+
import { InvalidActionInputError, SageSdkError } from '../../client/errors.js';
|
|
3
|
+
import { readContextRawAccounts } from '../../client/reconciliation.js';
|
|
4
|
+
import { sage } from '../../internal/c4/bindings.js';
|
|
5
|
+
import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/identity.js';
|
|
6
|
+
import { deriveLocalMarketAddress, localMarketAccountDefinition, } from '../../internal/c4/market.js';
|
|
7
|
+
import { deriveStarbasePlayerAddress, starbasePlayerAccountDefinition, } from '../../internal/c4/starbase.js';
|
|
8
|
+
import { deriveStarSystemAddress, starSystemAccountDefinition, } from '../../internal/c4/world.js';
|
|
9
|
+
import { requireGameAddress } from '../../internal/game-context.js';
|
|
10
|
+
import { adaptCancelLocalMarketOrdersInstruction, adaptPlaceLocalMarketOrderInstruction, validatePlanAuthorization, } from '../../internal/planning/authorization-adapter.js';
|
|
11
|
+
import { createPlan, } from '../../planning/index.js';
|
|
12
|
+
const U64_MAX = (1n << 64n) - 1n;
|
|
13
|
+
const LEVELS = Object.freeze({
|
|
14
|
+
'level-0': 0,
|
|
15
|
+
'level-1': 1,
|
|
16
|
+
'level-2': 2,
|
|
17
|
+
'level-3': 3,
|
|
18
|
+
'level-4': 4,
|
|
19
|
+
'level-5': 5,
|
|
20
|
+
css: 6,
|
|
21
|
+
});
|
|
22
|
+
function invalid(field, value, acceptedRange, remedy) {
|
|
23
|
+
throw new InvalidActionInputError(field, value, acceptedRange, remedy);
|
|
24
|
+
}
|
|
25
|
+
function readRecord(value, field) {
|
|
26
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
27
|
+
return invalid(field, value, 'a plain object', `Provide ${field} as the documented object before retrying.`);
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
function assertKeys(value, field, required, optional = []) {
|
|
32
|
+
const accepted = new Set([...required, ...optional]);
|
|
33
|
+
const missing = required.find((key) => !Object.hasOwn(value, key));
|
|
34
|
+
const unexpected = Object.keys(value).find((key) => !accepted.has(key));
|
|
35
|
+
if (missing !== undefined || unexpected !== undefined) {
|
|
36
|
+
invalid(field, missing === undefined ? unexpected : `missing ${missing}`, `exactly the fields ${[...required, ...optional].join(', ')}`, `Remove unknown fields and provide every required ${field} field before retrying.`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function validateOptions(value) {
|
|
40
|
+
const options = readRecord(value, 'options');
|
|
41
|
+
assertKeys(options, 'options', [
|
|
42
|
+
'authorization',
|
|
43
|
+
'side',
|
|
44
|
+
'priceRaw',
|
|
45
|
+
'quantity',
|
|
46
|
+
]);
|
|
47
|
+
const authorizationRecord = readRecord(options.authorization, 'authorization');
|
|
48
|
+
assertKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
|
|
49
|
+
const authorization = authorizationRecord;
|
|
50
|
+
validatePlanAuthorization(authorization);
|
|
51
|
+
if (options.side !== 'bid' && options.side !== 'ask') {
|
|
52
|
+
invalid('side', options.side, 'either bid or ask', 'Set side to bid to buy cargo or ask to sell cargo before retrying.');
|
|
53
|
+
}
|
|
54
|
+
for (const field of ['priceRaw', 'quantity']) {
|
|
55
|
+
const amount = options[field];
|
|
56
|
+
if (typeof amount !== 'bigint' || amount <= 0n || amount > U64_MAX) {
|
|
57
|
+
invalid(field, amount, `a positive raw bigint from 1 through ${String(U64_MAX)} (unsigned u64)`, `Set ${field} to the exact positive raw value within the instruction codec range.`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
authorization,
|
|
62
|
+
priceRaw: options.priceRaw,
|
|
63
|
+
quantity: options.quantity,
|
|
64
|
+
side: options.side,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function validateCancelOptions(value) {
|
|
68
|
+
const options = readRecord(value, 'options');
|
|
69
|
+
assertKeys(options, 'options', ['authorization', 'orderIds']);
|
|
70
|
+
const authorizationRecord = readRecord(options.authorization, 'authorization');
|
|
71
|
+
assertKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
|
|
72
|
+
const authorization = authorizationRecord;
|
|
73
|
+
validatePlanAuthorization(authorization);
|
|
74
|
+
if (!Array.isArray(options.orderIds)) {
|
|
75
|
+
invalid('orderIds', options.orderIds, 'a dense array of unique non-negative safe integers', 'Provide orderIds as a plain array, or an empty array to withdraw filled escrow only.');
|
|
76
|
+
}
|
|
77
|
+
const orderIds = options.orderIds;
|
|
78
|
+
const seen = new Set();
|
|
79
|
+
for (let index = 0; index < orderIds.length; index += 1) {
|
|
80
|
+
if (!Object.hasOwn(orderIds, index)) {
|
|
81
|
+
invalid('orderIds', orderIds, 'a dense array without missing elements', 'Remove sparse positions from orderIds before retrying.');
|
|
82
|
+
}
|
|
83
|
+
const orderId = orderIds[index];
|
|
84
|
+
if (!Number.isSafeInteger(orderId) || orderId < 0) {
|
|
85
|
+
invalid(`orderIds[${String(index)}]`, orderId, 'a non-negative safe integer', 'Use the exact finite order id exposed by the Local Market snapshot.');
|
|
86
|
+
}
|
|
87
|
+
if (seen.has(orderId)) {
|
|
88
|
+
invalid(`orderIds[${String(index)}]`, orderId, 'a unique order id that appears once', 'Remove duplicate order ids before retrying.');
|
|
89
|
+
}
|
|
90
|
+
seen.add(orderId);
|
|
91
|
+
}
|
|
92
|
+
return { authorization, orderIds: Object.freeze([...seen]) };
|
|
93
|
+
}
|
|
94
|
+
function fail(message, address) {
|
|
95
|
+
throw new SageSdkError('ACTION_PRECONDITION_FAILED', message, { address });
|
|
96
|
+
}
|
|
97
|
+
function requireAccount(account, address, message) {
|
|
98
|
+
return account ?? fail(message, address);
|
|
99
|
+
}
|
|
100
|
+
function balance(items, cargoId) {
|
|
101
|
+
return items
|
|
102
|
+
.filter(({ id }) => id === cargoId)
|
|
103
|
+
.reduce((total, { quantityRaw }) => total + quantityRaw, 0n);
|
|
104
|
+
}
|
|
105
|
+
function sameBalances(snapshot, account) {
|
|
106
|
+
if (snapshot.length !== account.length)
|
|
107
|
+
return false;
|
|
108
|
+
const seen = new Set();
|
|
109
|
+
return snapshot.every((item) => {
|
|
110
|
+
if (seen.has(item.id))
|
|
111
|
+
return false;
|
|
112
|
+
seen.add(item.id);
|
|
113
|
+
return account.some((amount) => amount.cargoId === item.id && amount.amount === item.quantityRaw);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
async function hashAccountState(account) {
|
|
117
|
+
const owner = getAddressEncoder().encode(account.owner);
|
|
118
|
+
const canonical = new Uint8Array(owner.length + account.data.length);
|
|
119
|
+
canonical.set(owner);
|
|
120
|
+
canonical.set(account.data, owner.length);
|
|
121
|
+
const digest = new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', canonical));
|
|
122
|
+
return [...digest].map((byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
123
|
+
}
|
|
124
|
+
async function precondition(account, describes) {
|
|
125
|
+
return Object.freeze({
|
|
126
|
+
address: account.address,
|
|
127
|
+
dataHash: await hashAccountState(account),
|
|
128
|
+
describes,
|
|
129
|
+
kind: 'account-state',
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/** Plans one Local Market bid or ask without signing, simulation, or writes.
|
|
133
|
+
*
|
|
134
|
+
* The planner validates the loaded Local Market and Starbase Player, their
|
|
135
|
+
* canonical Character/System/Game graph, the current market-enabled Starbase
|
|
136
|
+
* incarnation, and the known bid ATLAS or ask cargo balance. Matching, rent,
|
|
137
|
+
* final capacity, permissions, and state races remain chain-authoritative.
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```ts
|
|
141
|
+
* declare const ctx: SageContext;
|
|
142
|
+
* declare const market: LocalMarketSnapshot;
|
|
143
|
+
* declare const player: StarbasePlayerSnapshot;
|
|
144
|
+
* declare const options: PlanPlaceLocalMarketOrderOptions;
|
|
145
|
+
* const plan = await planPlaceLocalMarketOrder(ctx, market, player, options);
|
|
146
|
+
* console.log(plan.describe());
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
export async function planPlaceLocalMarketOrder(ctx, market, player, input) {
|
|
150
|
+
const options = validateOptions(input);
|
|
151
|
+
const game = requireGameAddress(ctx);
|
|
152
|
+
if (market.system.address !== player.system.address) {
|
|
153
|
+
fail(`Local Market ${market.address} is in System ${market.system.address}, not Starbase Player System ${player.system.address}. Choose a Market at the player's Starbase and retry.`, market.address);
|
|
154
|
+
}
|
|
155
|
+
if (player.playerProfile.address !== options.authorization.profile) {
|
|
156
|
+
fail(`Starbase Player ${player.address} does not belong to authorization Profile ${options.authorization.profile}. Refresh the Starbase Player for that Profile and retry.`, player.address);
|
|
157
|
+
}
|
|
158
|
+
const character = await findCharacterPda(options.authorization.profile, game);
|
|
159
|
+
if (player.character.address !== character) {
|
|
160
|
+
fail(`Starbase Player ${player.address} does not reference the canonical Character ${character} for authorization Profile ${options.authorization.profile}. Refresh the Starbase Player and retry.`, player.address);
|
|
161
|
+
}
|
|
162
|
+
const canonicalPlayer = await deriveStarbasePlayerAddress(player.system.address, character);
|
|
163
|
+
if (canonicalPlayer !== player.address) {
|
|
164
|
+
fail(`Starbase Player ${player.address} is not canonical for its Character and System. Refresh the Starbase Player through this context and retry.`, player.address);
|
|
165
|
+
}
|
|
166
|
+
const canonicalMarket = await deriveLocalMarketAddress(market.system.address, market.cargo.id, market.starbaseSequenceId);
|
|
167
|
+
if (canonicalMarket !== market.address) {
|
|
168
|
+
fail(`Local Market ${market.address} does not match cargo ${String(market.cargo.id)} and Starbase sequence ${String(market.starbaseSequenceId)}. Refresh the active Local Market and retry.`, market.address);
|
|
169
|
+
}
|
|
170
|
+
if (options.side === 'ask') {
|
|
171
|
+
const available = balance(player.cargo.items, market.cargo.id);
|
|
172
|
+
if (available < options.quantity) {
|
|
173
|
+
fail(`Starbase Player ${player.address} has ${String(available)} raw ${market.cargo.name}, but this ask requires ${String(options.quantity)}. Add the missing cargo, refresh the Starbase Player, and retry.`, player.address);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const addresses = [
|
|
177
|
+
character,
|
|
178
|
+
player.system.address,
|
|
179
|
+
player.address,
|
|
180
|
+
market.address,
|
|
181
|
+
];
|
|
182
|
+
const reads = await readContextRawAccounts(ctx, addresses);
|
|
183
|
+
const characterAccount = requireAccount(reads[0], character, `Canonical Character ${character} is missing for Profile ${options.authorization.profile}. Create or repair the Character in the configured Game, refresh the Starbase Player, and retry.`);
|
|
184
|
+
const systemAccount = requireAccount(reads[1], player.system.address, `Star System ${player.system.address} is missing. Refresh the Starbase Player and Local Market, then retry.`);
|
|
185
|
+
const playerAccount = requireAccount(reads[2], player.address, `Starbase Player ${player.address} is missing. Refresh the Starbase Player and retry placing the order.`);
|
|
186
|
+
const marketAccount = requireAccount(reads[3], market.address, `Local Market ${market.address} is missing. Refresh the active Local Market and retry.`);
|
|
187
|
+
const characterData = characterAccountDefinition.decode(characterAccount);
|
|
188
|
+
if (characterAccount.address !== character ||
|
|
189
|
+
characterData.playerProfile !== options.authorization.profile ||
|
|
190
|
+
characterData.game !== game) {
|
|
191
|
+
fail(`The canonical Character does not match Profile ${options.authorization.profile} and the configured Game ${game}. Refresh or repair the Character relationship before retrying.`, characterAccount.address);
|
|
192
|
+
}
|
|
193
|
+
if (options.side === 'bid') {
|
|
194
|
+
const required = options.priceRaw * options.quantity;
|
|
195
|
+
if (characterData.atlasRaw < required) {
|
|
196
|
+
fail(`Character ${character} has ${String(characterData.atlasRaw)} raw ATLAS, but this bid requires ${String(required)}. Add the missing ATLAS, refresh the Character, and retry.`, character);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
const systemData = starSystemAccountDefinition.decode(systemAccount);
|
|
200
|
+
const canonicalSystem = await deriveStarSystemAddress(game, systemData.systemId);
|
|
201
|
+
if (systemAccount.address !== player.system.address ||
|
|
202
|
+
canonicalSystem !== player.system.address ||
|
|
203
|
+
systemData.game !== game) {
|
|
204
|
+
fail(`Star System ${player.system.address} does not match its canonical System id and configured Game ${game}. Refresh the Starbase Player and Local Market, then retry.`, player.system.address);
|
|
205
|
+
}
|
|
206
|
+
if (systemData.sequenceId !== market.starbaseSequenceId) {
|
|
207
|
+
fail(`Local Market ${market.address} has Starbase sequence ${String(market.starbaseSequenceId)}, but System ${player.system.address} is now sequence ${String(systemData.sequenceId)}. Refresh the active Local Market and retry.`, market.address);
|
|
208
|
+
}
|
|
209
|
+
if (systemData.starbase === undefined) {
|
|
210
|
+
fail(`System ${player.system.address} has no active Starbase for Local Market trading. Choose a System with a Starbase, refresh it, and retry.`, player.system.address);
|
|
211
|
+
}
|
|
212
|
+
if (LEVELS[systemData.starbase.level] <
|
|
213
|
+
LEVELS[systemData.starbase.localMarketEnableLevel]) {
|
|
214
|
+
fail(`Starbase ${player.system.address} is ${systemData.starbase.level}, but its Local Market requires ${systemData.starbase.localMarketEnableLevel}. Choose an active market-enabled Starbase, refresh it, and retry.`, player.system.address);
|
|
215
|
+
}
|
|
216
|
+
const playerData = starbasePlayerAccountDefinition.decode(playerAccount);
|
|
217
|
+
if (playerAccount.address !== player.address ||
|
|
218
|
+
playerData.playerProfile !== options.authorization.profile ||
|
|
219
|
+
playerData.character !== character ||
|
|
220
|
+
playerData.system !== player.system.address ||
|
|
221
|
+
(await deriveStarbasePlayerAddress(playerData.system, playerData.character)) !== player.address ||
|
|
222
|
+
playerData.sequenceId !== player.sequenceId ||
|
|
223
|
+
!sameBalances(player.cargo.items, playerData.cargo.amounts)) {
|
|
224
|
+
fail(`Starbase Player ${player.address} changed or does not match its canonical Profile, Character, System, sequence, or cargo state. Refresh the Starbase Player through this context and retry.`, player.address);
|
|
225
|
+
}
|
|
226
|
+
const marketData = localMarketAccountDefinition.decode(marketAccount);
|
|
227
|
+
if (marketAccount.address !== market.address ||
|
|
228
|
+
marketData.system !== market.system.address ||
|
|
229
|
+
marketData.starbaseSequenceId !== market.starbaseSequenceId ||
|
|
230
|
+
marketData.version !== market.version ||
|
|
231
|
+
marketData.bump !== market.bump ||
|
|
232
|
+
marketData.initializerProfile !== market.initializerProfile.address ||
|
|
233
|
+
marketData.cargo.cargoId !== market.cargo.id ||
|
|
234
|
+
marketData.cargo.amountRaw !== market.cargo.amountRaw ||
|
|
235
|
+
marketData.vaultRaw !== market.vaultRaw ||
|
|
236
|
+
(await deriveLocalMarketAddress(marketData.system, marketData.cargo.cargoId, marketData.starbaseSequenceId)) !== market.address) {
|
|
237
|
+
fail(`Local Market ${market.address} changed or does not match its canonical System, Starbase sequence, cargo, initializer, or vault state. Refresh the Local Market through this context and retry.`, market.address);
|
|
238
|
+
}
|
|
239
|
+
const encodedSide = options.side === 'bid' ? sage.OrderSide.Bid : sage.OrderSide.Ask;
|
|
240
|
+
const description = `Place ${options.side} for ${String(options.quantity)} raw units of ${market.cargo.name} at raw price ${String(options.priceRaw)} ATLAS Floyds each on Local Market ${market.address}.`;
|
|
241
|
+
return createPlan({
|
|
242
|
+
kind: 'markets.place-local-order',
|
|
243
|
+
preconditions: await Promise.all([
|
|
244
|
+
precondition(characterAccount, `The canonical Character retains Profile ${options.authorization.profile}, the configured Game, and the validated raw ATLAS balance.`),
|
|
245
|
+
precondition(systemAccount, `Star System ${player.system.address} retains the validated Starbase sequence and Local Market enablement.`),
|
|
246
|
+
precondition(playerAccount, `Starbase Player ${player.address} retains its Profile, Character, System, sequence, and cargo inventory.`),
|
|
247
|
+
precondition(marketAccount, `Local Market ${market.address} retains its System, Starbase sequence, cargo, initializer, and vault state.`),
|
|
248
|
+
]),
|
|
249
|
+
steps: [
|
|
250
|
+
{
|
|
251
|
+
describes: description,
|
|
252
|
+
instruction: adaptPlaceLocalMarketOrderInstruction({
|
|
253
|
+
authorization: options.authorization,
|
|
254
|
+
character,
|
|
255
|
+
game,
|
|
256
|
+
localMarket: market.address,
|
|
257
|
+
price: options.priceRaw,
|
|
258
|
+
quantity: options.quantity,
|
|
259
|
+
side: encodedSide,
|
|
260
|
+
starbasePlayer: player.address,
|
|
261
|
+
system: player.system.address,
|
|
262
|
+
}),
|
|
263
|
+
signers: [options.authorization.authority],
|
|
264
|
+
},
|
|
265
|
+
],
|
|
266
|
+
summary: description,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
/** Plans cancellation of owned Local Market orders and filled-escrow withdrawal.
|
|
270
|
+
*
|
|
271
|
+
* The planner validates the loaded Local Market and Starbase Player, their
|
|
272
|
+
* canonical Profile/Character/System/Game graph, and each selected order's
|
|
273
|
+
* ownership and price. An empty selection requests filled-escrow withdrawal.
|
|
274
|
+
* Final escrow availability and order races remain chain-authoritative.
|
|
275
|
+
*
|
|
276
|
+
* @example
|
|
277
|
+
* ```ts
|
|
278
|
+
* declare const ctx: SageContext;
|
|
279
|
+
* declare const market: LocalMarketSnapshot;
|
|
280
|
+
* declare const player: StarbasePlayerSnapshot;
|
|
281
|
+
* declare const options: PlanCancelLocalMarketOrdersOptions;
|
|
282
|
+
* const plan = await planCancelLocalMarketOrders(ctx, market, player, options);
|
|
283
|
+
* console.log(plan.describe());
|
|
284
|
+
* ```
|
|
285
|
+
*/
|
|
286
|
+
export async function planCancelLocalMarketOrders(ctx, market, player, input) {
|
|
287
|
+
const options = validateCancelOptions(input);
|
|
288
|
+
const game = requireGameAddress(ctx);
|
|
289
|
+
if (market.system.address !== player.system.address) {
|
|
290
|
+
fail(`Local Market ${market.address} is in System ${market.system.address}, not Starbase Player System ${player.system.address}. Choose the player's Market and retry.`, market.address);
|
|
291
|
+
}
|
|
292
|
+
if (player.playerProfile.address !== options.authorization.profile) {
|
|
293
|
+
fail(`Starbase Player ${player.address} does not belong to authorization Profile ${options.authorization.profile}. Refresh the Starbase Player for that Profile and retry.`, player.address);
|
|
294
|
+
}
|
|
295
|
+
const character = await findCharacterPda(options.authorization.profile, game);
|
|
296
|
+
if (player.character.address !== character) {
|
|
297
|
+
fail(`Starbase Player ${player.address} does not reference the canonical Character ${character} for authorization Profile ${options.authorization.profile}. Refresh the Starbase Player and retry.`, player.address);
|
|
298
|
+
}
|
|
299
|
+
const canonicalPlayer = await deriveStarbasePlayerAddress(player.system.address, character);
|
|
300
|
+
if (canonicalPlayer !== player.address) {
|
|
301
|
+
fail(`Starbase Player ${player.address} is not canonical for its Character and System. Refresh the Starbase Player through this context and retry.`, player.address);
|
|
302
|
+
}
|
|
303
|
+
const canonicalMarket = await deriveLocalMarketAddress(market.system.address, market.cargo.id, market.starbaseSequenceId);
|
|
304
|
+
if (canonicalMarket !== market.address) {
|
|
305
|
+
fail(`Local Market ${market.address} does not match cargo ${String(market.cargo.id)} and Starbase sequence ${String(market.starbaseSequenceId)}. Refresh the Local Market and retry.`, market.address);
|
|
306
|
+
}
|
|
307
|
+
const snapshotOrders = [...market.bids.orders, ...market.asks.orders];
|
|
308
|
+
const selected = options.orderIds.map((orderId) => {
|
|
309
|
+
const matches = snapshotOrders.filter((candidate) => candidate.orderId === BigInt(orderId));
|
|
310
|
+
if (matches.length === 0) {
|
|
311
|
+
return fail(`Local Market order ${String(orderId)} is not present in snapshot ${market.address}. Refresh the Local Market and select an existing owned order before retrying.`, market.address);
|
|
312
|
+
}
|
|
313
|
+
if (matches.some((candidate) => candidate.maker !== character)) {
|
|
314
|
+
return fail(`Local Market order ${String(orderId)} belongs to another Character, not ${character}. Select only orders owned by the authorization Profile's Character.`, market.address);
|
|
315
|
+
}
|
|
316
|
+
if (matches.length !== 1) {
|
|
317
|
+
return fail(`Local Market order id ${String(orderId)} is ambiguous across the order books. Refresh the Market and wait for an unambiguous owned selection before retrying.`, market.address);
|
|
318
|
+
}
|
|
319
|
+
const [match] = matches;
|
|
320
|
+
return {
|
|
321
|
+
orderId: match.orderId,
|
|
322
|
+
price: match.priceRaw,
|
|
323
|
+
side: match.side,
|
|
324
|
+
};
|
|
325
|
+
});
|
|
326
|
+
const addresses = [
|
|
327
|
+
character,
|
|
328
|
+
player.system.address,
|
|
329
|
+
player.address,
|
|
330
|
+
market.address,
|
|
331
|
+
];
|
|
332
|
+
const reads = await readContextRawAccounts(ctx, addresses);
|
|
333
|
+
const characterAccount = requireAccount(reads[0], character, `Canonical Character ${character} is missing for Profile ${options.authorization.profile}. Create or repair the Character, refresh the Starbase Player, and retry.`);
|
|
334
|
+
const systemAccount = requireAccount(reads[1], player.system.address, `Star System ${player.system.address} is missing. Refresh the Starbase Player and Local Market, then retry.`);
|
|
335
|
+
const playerAccount = requireAccount(reads[2], player.address, `Starbase Player ${player.address} is missing. Refresh the Starbase Player and retry cancelling the orders.`);
|
|
336
|
+
const marketAccount = requireAccount(reads[3], market.address, `Local Market ${market.address} is missing. Refresh the Local Market and retry.`);
|
|
337
|
+
const characterData = characterAccountDefinition.decode(characterAccount);
|
|
338
|
+
if (characterAccount.address !== character ||
|
|
339
|
+
characterData.playerProfile !== options.authorization.profile ||
|
|
340
|
+
characterData.game !== game) {
|
|
341
|
+
fail(`The canonical Character does not match Profile ${options.authorization.profile} and the configured Game ${game}. Refresh or repair the Character relationship before retrying.`, characterAccount.address);
|
|
342
|
+
}
|
|
343
|
+
const systemData = starSystemAccountDefinition.decode(systemAccount);
|
|
344
|
+
const canonicalSystem = await deriveStarSystemAddress(game, systemData.systemId);
|
|
345
|
+
if (systemAccount.address !== player.system.address ||
|
|
346
|
+
canonicalSystem !== player.system.address ||
|
|
347
|
+
systemData.game !== game) {
|
|
348
|
+
fail(`Star System ${player.system.address} does not match its canonical System id and configured Game ${game}. Refresh the Starbase Player and Local Market, then retry.`, player.system.address);
|
|
349
|
+
}
|
|
350
|
+
const playerData = starbasePlayerAccountDefinition.decode(playerAccount);
|
|
351
|
+
if (playerAccount.address !== player.address ||
|
|
352
|
+
playerData.playerProfile !== options.authorization.profile ||
|
|
353
|
+
playerData.character !== character ||
|
|
354
|
+
playerData.system !== player.system.address ||
|
|
355
|
+
(await deriveStarbasePlayerAddress(playerData.system, playerData.character)) !== player.address) {
|
|
356
|
+
fail(`Starbase Player ${player.address} changed or does not match its canonical Profile, Character, or System. Refresh the Starbase Player through this context and retry.`, player.address);
|
|
357
|
+
}
|
|
358
|
+
const marketData = localMarketAccountDefinition.decode(marketAccount);
|
|
359
|
+
if (marketAccount.address !== market.address ||
|
|
360
|
+
marketData.system !== market.system.address ||
|
|
361
|
+
marketData.starbaseSequenceId !== market.starbaseSequenceId ||
|
|
362
|
+
marketData.version !== market.version ||
|
|
363
|
+
marketData.bump !== market.bump ||
|
|
364
|
+
marketData.initializerProfile !== market.initializerProfile.address ||
|
|
365
|
+
marketData.cargo.cargoId !== market.cargo.id ||
|
|
366
|
+
(await deriveLocalMarketAddress(marketData.system, marketData.cargo.cargoId, marketData.starbaseSequenceId)) !== market.address) {
|
|
367
|
+
fail(`Local Market ${market.address} changed or does not match its canonical System, Starbase sequence, cargo, or initializer. Refresh the Local Market through this context and retry.`, market.address);
|
|
368
|
+
}
|
|
369
|
+
const rawOrders = [
|
|
370
|
+
...marketData.bids.orders.map((candidate) => ({
|
|
371
|
+
candidate,
|
|
372
|
+
side: 'bid',
|
|
373
|
+
})),
|
|
374
|
+
...marketData.asks.orders.map((candidate) => ({
|
|
375
|
+
candidate,
|
|
376
|
+
side: 'ask',
|
|
377
|
+
})),
|
|
378
|
+
];
|
|
379
|
+
if (selected.some(({ orderId, price, side }) => {
|
|
380
|
+
const matches = rawOrders.filter(({ candidate }) => candidate.orderId === orderId);
|
|
381
|
+
return (matches.length !== 1 ||
|
|
382
|
+
matches[0].side !== side ||
|
|
383
|
+
matches[0].candidate.priceRaw !== price ||
|
|
384
|
+
matches[0].candidate.maker !== character);
|
|
385
|
+
})) {
|
|
386
|
+
fail(`Local Market ${market.address} selected order data changed in book side, price, or ownership, or became ambiguous across the fresh books. Refresh the Local Market and choose the Character's current unambiguous orders before retrying.`, market.address);
|
|
387
|
+
}
|
|
388
|
+
const description = selected.length === 0
|
|
389
|
+
? `Withdraw filled escrow currently available to Character ${character} for ${market.cargo.name} on Local Market ${market.address}; final escrow availability and order races remain chain-authoritative.`
|
|
390
|
+
: `Cancel Local Market orders ${options.orderIds.join(', ')} for ${market.cargo.name} and withdraw all filled escrow currently available to Character ${character}; final escrow availability and order races remain chain-authoritative.`;
|
|
391
|
+
return createPlan({
|
|
392
|
+
kind: 'markets.cancel-local-orders',
|
|
393
|
+
preconditions: await Promise.all([
|
|
394
|
+
precondition(characterAccount, `The canonical Character retains Profile ${options.authorization.profile} and the configured Game.`),
|
|
395
|
+
precondition(systemAccount, `Star System ${player.system.address} retains its canonical configured-Game relationship.`),
|
|
396
|
+
precondition(playerAccount, `Starbase Player ${player.address} retains its Profile, Character, and System relationships.`),
|
|
397
|
+
precondition(marketAccount, `Local Market ${market.address} retains its canonical identity and the selected owned order book sides, prices, and ownership.`),
|
|
398
|
+
]),
|
|
399
|
+
steps: [
|
|
400
|
+
{
|
|
401
|
+
describes: description,
|
|
402
|
+
instruction: adaptCancelLocalMarketOrdersInstruction({
|
|
403
|
+
args: selected,
|
|
404
|
+
authorization: options.authorization,
|
|
405
|
+
character,
|
|
406
|
+
game,
|
|
407
|
+
localMarket: market.address,
|
|
408
|
+
starbasePlayer: player.address,
|
|
409
|
+
system: player.system.address,
|
|
410
|
+
}),
|
|
411
|
+
signers: [options.authorization.authority],
|
|
412
|
+
},
|
|
413
|
+
],
|
|
414
|
+
summary: description,
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/markets/actions/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,9 @@ import { type Address, type Commitment, type Transaction, type TransactionWithBl
|
|
|
2
2
|
import type { SageContext, SageWriteRpc } from '../client/contracts.js';
|
|
3
3
|
import type { Plan } from './index.js';
|
|
4
4
|
/** Policy for assembling an unsigned transaction from one Plan.
|
|
5
|
+
*
|
|
6
|
+
* Transaction-exclusive Plans reject `computeUnitLimit` and
|
|
7
|
+
* `priorityFeeMicroLamports` because either field adds another instruction.
|
|
5
8
|
*
|
|
6
9
|
* @example
|
|
7
10
|
* ```ts
|
|
@@ -24,6 +27,7 @@ export interface ValidatedAssemblyPolicy {
|
|
|
24
27
|
export declare function requireWriteRpc(context: SageContext): SageWriteRpc;
|
|
25
28
|
export declare function validateAssemblyPolicy(policy: AssemblyPolicy, mapInvalidValue?: (value: unknown) => unknown): ValidatedAssemblyPolicy;
|
|
26
29
|
export declare function validatePlan(plan: unknown): asserts plan is Plan;
|
|
30
|
+
export declare function validatePlanAssemblyPolicy(plan: Plan, policy: Pick<ValidatedAssemblyPolicy, 'computeUnitLimit' | 'priorityFeeMicroLamports'>): void;
|
|
27
31
|
/** Assembles one Plan into an unsigned blockhash-lifetime transaction.
|
|
28
32
|
*
|
|
29
33
|
* Assembly validates compute and priority-fee policy before RPC, fetches one
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assembly.d.ts","sourceRoot":"","sources":["../../src/planning/assembly.ts"],"names":[],"mappings":"AAAA,OAAO,EAgBL,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,gCAAgC,EACtC,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGxE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAevC
|
|
1
|
+
{"version":3,"file":"assembly.d.ts","sourceRoot":"","sources":["../../src/planning/assembly.ts"],"names":[],"mappings":"AAAA,OAAO,EAgBL,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,gCAAgC,EACtC,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGxE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAevC;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;CAClC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;CACjC;AAgCD,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,CAIlE;AAaD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,eAAe,GAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAA4B,GAChE,uBAAuB,CAmFzB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAwBhE;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,IAAI,CACV,uBAAuB,EACvB,kBAAkB,GAAG,0BAA0B,CAChD,GACA,IAAI,CAqBN;AASD;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,WAAW,GAAG,gCAAgC,CAAC,CAKzD;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,uBAAuB,GACvC,OAAO,CAAC,WAAW,GAAG,gCAAgC,CAAC,CAqCzD"}
|
|
@@ -93,6 +93,17 @@ export function validatePlan(plan) {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
|
+
export function validatePlanAssemblyPolicy(plan, policy) {
|
|
97
|
+
const exclusive = plan.steps.some((step) => step.semantics?.some((semantic) => semantic.kind === 'exclusive'));
|
|
98
|
+
if (!exclusive)
|
|
99
|
+
return;
|
|
100
|
+
if (policy.computeUnitLimit !== undefined) {
|
|
101
|
+
invalid('computeUnitLimit', policy.computeUnitLimit, 'no compute-unit limit for a transaction-exclusive Plan', 'Remove computeUnitLimit so the exclusive gameplay instruction remains the only instruction in its transaction.');
|
|
102
|
+
}
|
|
103
|
+
if (policy.priorityFeeMicroLamports !== undefined) {
|
|
104
|
+
invalid('priorityFeeMicroLamports', policy.priorityFeeMicroLamports, 'no priority-fee instruction for a transaction-exclusive Plan', 'Remove priorityFeeMicroLamports so the exclusive gameplay instruction remains the only instruction in its transaction.');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
96
107
|
function isTransactionCompileLimitError(cause) {
|
|
97
108
|
return (isSolanaError(cause) &&
|
|
98
109
|
TRANSACTION_COMPILE_LIMIT_ERROR_CODES.has(cause.context.__code));
|
|
@@ -113,9 +124,11 @@ function isTransactionCompileLimitError(cause) {
|
|
|
113
124
|
export async function assemblePlan(context, plan, policy) {
|
|
114
125
|
validatePlan(plan);
|
|
115
126
|
const validatedPolicy = validateAssemblyPolicy(policy);
|
|
127
|
+
validatePlanAssemblyPolicy(plan, validatedPolicy);
|
|
116
128
|
return assembleValidatedPlan(requireWriteRpc(context), plan, validatedPolicy);
|
|
117
129
|
}
|
|
118
130
|
export async function assembleValidatedPlan(writeRpc, plan, validatedPolicy) {
|
|
131
|
+
validatePlanAssemblyPolicy(plan, validatedPolicy);
|
|
119
132
|
const { value: lifetime } = await writeRpc
|
|
120
133
|
.getLatestBlockhash({ commitment: validatedPolicy.commitment })
|
|
121
134
|
.send();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assembly.js","sourceRoot":"","sources":["../../src/planning/assembly.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oCAAoC,EACpC,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,uBAAuB,EACvB,SAAS,EACT,aAAa,EACb,qCAAqC,EACrC,qCAAqC,EACrC,6BAA6B,EAC7B,2CAA2C,EAC3C,qDAAqD,EACrD,2DAA2D,EAC3D,gDAAgD,EAChD,oDAAoD,GAKrD,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,sBAAsB,GAAG,SAAS,CAAC;AACzC,MAAM,+BAA+B,GAAG,qBAA2B,CAAC;AACpE,MAAM,kBAAkB,GAAe,WAAW,CAAC;AACnD,MAAM,8BAA8B,GAClC,6CAAwD,CAAC;AAC3D,MAAM,qCAAqC,GAAG,IAAI,GAAG,CAAS;IAC5D,qDAAqD;IACrD,2DAA2D;IAC3D,gDAAgD;IAChD,oDAAoD;CACrD,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"assembly.js","sourceRoot":"","sources":["../../src/planning/assembly.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../src/planning/composition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../src/planning/composition.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,QAAQ,EAAE,MAAM,YAAY,CAAC;AAwG7D,iFAAiF;AACjF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,IAAI,CAsDxE"}
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import { SageSdkError } from '../client/errors.js';
|
|
2
2
|
const REMEDY = 'Use separate confirmed transactions for these Plans, or coordinate them with the PlanSequence API through createPlanSequence and executePlanSequence so each Plan is prepared and confirmed before the next.';
|
|
3
|
+
class ExclusivePlanCompositionError extends SageSdkError {
|
|
4
|
+
exclusiveStepDescription;
|
|
5
|
+
exclusiveStepIndex;
|
|
6
|
+
conflictingStepDescription;
|
|
7
|
+
conflictingStepIndex;
|
|
8
|
+
remedy = REMEDY;
|
|
9
|
+
constructor(exclusiveStep, exclusiveStepIndex, conflictingStep, conflictingStepIndex) {
|
|
10
|
+
super('INCOMPATIBLE_PLAN_COMPOSITION', `Plan step ${String(exclusiveStepIndex)} ("${exclusiveStep.describes}") must be the only instruction in its transaction, but step ${String(conflictingStepIndex)} ("${conflictingStep.describes}") would share that transaction. ${REMEDY}`);
|
|
11
|
+
this.exclusiveStepDescription = exclusiveStep.describes;
|
|
12
|
+
this.exclusiveStepIndex = exclusiveStepIndex;
|
|
13
|
+
this.conflictingStepDescription = conflictingStep.describes;
|
|
14
|
+
this.conflictingStepIndex = conflictingStepIndex;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
3
17
|
function describeEffect(fact) {
|
|
4
18
|
return fact.kind === 'invalidates'
|
|
5
19
|
? `invalidation of "${fact.fact}"`
|
|
@@ -38,6 +52,11 @@ function setFactState(states, resource, fact, state) {
|
|
|
38
52
|
}
|
|
39
53
|
/** Validates the exact opaque semantic facts on one flattened Plan step list. */
|
|
40
54
|
export function validatePlanComposition(steps) {
|
|
55
|
+
const exclusiveStepIndex = steps.findIndex((step) => step.semantics?.some((semantic) => semantic.kind === 'exclusive'));
|
|
56
|
+
if (exclusiveStepIndex >= 0 && steps.length > 1) {
|
|
57
|
+
const conflictingStepIndex = exclusiveStepIndex === 0 ? 1 : 0;
|
|
58
|
+
throw new ExclusivePlanCompositionError(steps[exclusiveStepIndex], exclusiveStepIndex, steps[conflictingStepIndex], conflictingStepIndex);
|
|
59
|
+
}
|
|
41
60
|
const states = new Map();
|
|
42
61
|
for (let stepIndex = 0; stepIndex < steps.length; stepIndex += 1) {
|
|
43
62
|
const step = steps[stepIndex];
|
|
@@ -51,7 +70,7 @@ export function validatePlanComposition(steps) {
|
|
|
51
70
|
}
|
|
52
71
|
}
|
|
53
72
|
for (const semantic of semantics) {
|
|
54
|
-
if (semantic.kind === 'requires')
|
|
73
|
+
if (semantic.kind === 'requires' || semantic.kind === 'exclusive')
|
|
55
74
|
continue;
|
|
56
75
|
const conflict = {
|
|
57
76
|
fact: semantic,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../../src/planning/composition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../../src/planning/composition.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/planning/execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAYL,KAAK,UAAU,EACf,KAAK,SAAS,EAOd,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,wBAAwB,CAAC;AAMxE,OAAO,KAAK,EAAE,IAAI,EAAoB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../src/planning/execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAYL,KAAK,UAAU,EACf,KAAK,SAAS,EAOd,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,wBAAwB,CAAC;AAMxE,OAAO,KAAK,EAAE,IAAI,EAAoB,MAAM,YAAY,CAAC;AAgBzD;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAChD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,CAAC;IACP,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,SAAS,CAAC;IAClB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,CAAC,GACF,QAAQ,CAAC;IACP,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,YAAY,GAAG,kBAAkB,GAAG,cAAc,CAAC;IAC9D,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,CAAC,CAAC;AAEP;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,sBAAsB,GAAG,oBAAoB,CAAC;AAYhF,2EAA2E;AAC3E,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,UAAU,EAAE,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AA2uBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAE9B;AAED,mFAAmF;AACnF,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,kBAAkB,EAC3B,SAAS,CAAC,EAAE,sBAAsB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAiD9B"}
|