@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,159 @@
|
|
|
1
|
+
import { getAddressEncoder, isAddress } from '@solana/kit';
|
|
2
|
+
import { InvalidActionInputError, SageSdkError } from '../../client/errors.js';
|
|
3
|
+
import { readContextRawAccounts } from '../../client/reconciliation.js';
|
|
4
|
+
import { characterAccountDefinition, findCharacterPda, } from '../../internal/c4/identity.js';
|
|
5
|
+
import { deriveLoyaltyAtlasBankAddress, deriveLoyaltyFactionAddress, loyaltyAtlasBankAccountDefinition, } from '../../internal/c4/loyalty.js';
|
|
6
|
+
import { requireGameAddress } from '../../internal/game-context.js';
|
|
7
|
+
import { adaptClaimLoyaltyAtlasInstruction, validatePlanAuthorization, } from '../../internal/planning/authorization-adapter.js';
|
|
8
|
+
import { createPlan, } from '../../planning/index.js';
|
|
9
|
+
function invalid(field, value, acceptedRange, remedy) {
|
|
10
|
+
throw new InvalidActionInputError(field, value, acceptedRange, remedy);
|
|
11
|
+
}
|
|
12
|
+
function fail(message, address) {
|
|
13
|
+
throw new SageSdkError('ACTION_PRECONDITION_FAILED', message, { address });
|
|
14
|
+
}
|
|
15
|
+
function record(value, field) {
|
|
16
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
17
|
+
return invalid(field, value, 'a plain object', `Provide ${field} as the documented object before retrying.`);
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
function exactKeys(value, field, required, optional = []) {
|
|
22
|
+
const accepted = new Set([...required, ...optional]);
|
|
23
|
+
const missing = required.find((key) => !Object.hasOwn(value, key));
|
|
24
|
+
const unexpected = Object.keys(value).find((key) => !accepted.has(key));
|
|
25
|
+
if (missing !== undefined || unexpected !== undefined) {
|
|
26
|
+
invalid(field, missing === undefined ? unexpected : `missing ${missing}`, `exactly the fields ${[...required, ...optional].join(', ')}`, `Remove unknown fields and provide every required ${field} field before retrying.`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function address(value, field) {
|
|
30
|
+
if (typeof value !== 'string' || !isAddress(value)) {
|
|
31
|
+
return invalid(field, value, 'one valid z.ink/Solana account address', `Set ${field} to the documented public account address before retrying.`);
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
function validateOptions(value) {
|
|
36
|
+
const options = record(value, 'options');
|
|
37
|
+
exactKeys(options, 'options', ['atUnixSeconds', 'authorization']);
|
|
38
|
+
const authorizationRecord = record(options.authorization, 'authorization');
|
|
39
|
+
exactKeys(authorizationRecord, 'authorization', ['profile', 'authority', 'keyIndex'], ['certificate']);
|
|
40
|
+
const authorization = authorizationRecord;
|
|
41
|
+
address(authorization.profile, 'authorization.profile');
|
|
42
|
+
address(authorization.authority, 'authorization.authority');
|
|
43
|
+
if (authorization.certificate !== undefined) {
|
|
44
|
+
address(authorization.certificate, 'authorization.certificate');
|
|
45
|
+
}
|
|
46
|
+
validatePlanAuthorization(authorization);
|
|
47
|
+
if (typeof options.atUnixSeconds !== 'bigint' || options.atUnixSeconds < 0n) {
|
|
48
|
+
invalid('atUnixSeconds', options.atUnixSeconds, 'a non-negative bigint Unix timestamp', 'Provide the explicit current Unix timestamp used to evaluate Loyalty ATLAS Bank expiry before retrying.');
|
|
49
|
+
}
|
|
50
|
+
return { atUnixSeconds: options.atUnixSeconds, authorization };
|
|
51
|
+
}
|
|
52
|
+
function requireAccount(account, accountAddress, message) {
|
|
53
|
+
return account ?? fail(message, accountAddress);
|
|
54
|
+
}
|
|
55
|
+
async function hashAccountState(account) {
|
|
56
|
+
const owner = getAddressEncoder().encode(account.owner);
|
|
57
|
+
const canonical = new Uint8Array(owner.length + account.data.length);
|
|
58
|
+
canonical.set(owner);
|
|
59
|
+
canonical.set(account.data, owner.length);
|
|
60
|
+
const digest = new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', canonical));
|
|
61
|
+
return [...digest].map((byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
62
|
+
}
|
|
63
|
+
async function precondition(account, describes) {
|
|
64
|
+
return Object.freeze({
|
|
65
|
+
address: account.address,
|
|
66
|
+
dataHash: await hashAccountState(account),
|
|
67
|
+
describes,
|
|
68
|
+
kind: 'account-state',
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/** Plans one full Loyalty ATLAS Bank claim without signing or writes.
|
|
72
|
+
*
|
|
73
|
+
* Permission, final freshness, and concurrent claims remain
|
|
74
|
+
* chain-authoritative.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```ts
|
|
78
|
+
* declare const ctx: SageContext;
|
|
79
|
+
* declare const bank: LoyaltyAtlasBankSnapshot;
|
|
80
|
+
* declare const authorization: PlanAuthorization;
|
|
81
|
+
* const plan = await planClaimLoyaltyAtlas(ctx, bank, {
|
|
82
|
+
* atUnixSeconds: 1_786_000_000n,
|
|
83
|
+
* authorization,
|
|
84
|
+
* });
|
|
85
|
+
* console.log(plan.describe());
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export async function planClaimLoyaltyAtlas(ctx, bank, input) {
|
|
89
|
+
const options = validateOptions(input);
|
|
90
|
+
const game = requireGameAddress(ctx);
|
|
91
|
+
if (bank.game.address !== game) {
|
|
92
|
+
fail(`Loyalty ATLAS Bank ${bank.address} does not match the configured Game ${game}. Refresh the Bank through this context and retry.`, bank.address);
|
|
93
|
+
}
|
|
94
|
+
if (bank.profile.address !== options.authorization.profile) {
|
|
95
|
+
fail(`Loyalty ATLAS Bank ${bank.address} does not belong to authorization Profile ${options.authorization.profile}. Choose that Profile's Bank, refresh it, and retry.`, bank.address);
|
|
96
|
+
}
|
|
97
|
+
const canonicalBank = await deriveLoyaltyAtlasBankAddress(game, options.authorization.profile, bank.factionId);
|
|
98
|
+
if (bank.address !== canonicalBank) {
|
|
99
|
+
fail(`Loyalty ATLAS Bank ${bank.address} is not the canonical Loyalty ATLAS Bank ${canonicalBank} for authorization Profile ${options.authorization.profile} and faction ${String(bank.factionId)}. Refresh the Bank and retry.`, bank.address);
|
|
100
|
+
}
|
|
101
|
+
const faction = await deriveLoyaltyFactionAddress(game, bank.factionId);
|
|
102
|
+
if (bank.faction.address !== faction) {
|
|
103
|
+
fail(`Loyalty ATLAS Bank ${bank.address} does not match canonical faction account ${faction}. Refresh the Bank and retry.`, bank.address);
|
|
104
|
+
}
|
|
105
|
+
if (bank.claimableAtlasRaw === 0n) {
|
|
106
|
+
fail(`Loyalty ATLAS Bank ${bank.address} has no claimable ATLAS. Refresh it and retry after ATLAS is credited.`, bank.address);
|
|
107
|
+
}
|
|
108
|
+
if (bank.expiresAtUnixSeconds !== 0n &&
|
|
109
|
+
options.atUnixSeconds >= bank.expiresAtUnixSeconds) {
|
|
110
|
+
fail(`Loyalty ATLAS Bank ${bank.address} expired at Unix timestamp ${String(bank.expiresAtUnixSeconds)}. This balance cannot be claimed; refresh the Bank before choosing another action.`, bank.address);
|
|
111
|
+
}
|
|
112
|
+
const character = await findCharacterPda(options.authorization.profile, game);
|
|
113
|
+
const [bankCandidate, characterCandidate] = await readContextRawAccounts(ctx, [bank.address, character]);
|
|
114
|
+
const bankAccount = requireAccount(bankCandidate, bank.address, `Loyalty ATLAS Bank ${bank.address} is missing. Refresh it and retry the claim.`);
|
|
115
|
+
const characterAccount = requireAccount(characterCandidate, character, `Canonical Character ${character} is missing for authorization Profile ${options.authorization.profile}. Refresh the Profile Character and retry the claim.`);
|
|
116
|
+
const currentBank = loyaltyAtlasBankAccountDefinition.decode(bankAccount);
|
|
117
|
+
const currentCharacter = characterAccountDefinition.decode(characterAccount);
|
|
118
|
+
if (bankAccount.address !== bank.address ||
|
|
119
|
+
currentBank.version !== bank.version ||
|
|
120
|
+
currentBank.bump !== bank.bump ||
|
|
121
|
+
currentBank.game !== game ||
|
|
122
|
+
currentBank.profile !== options.authorization.profile ||
|
|
123
|
+
currentBank.factionId !== bank.factionId ||
|
|
124
|
+
currentBank.claimableAtlasRaw !== bank.claimableAtlasRaw ||
|
|
125
|
+
currentBank.lifetimeLpRaw !== bank.lifetimeLpRaw ||
|
|
126
|
+
currentBank.lifetimeAtlasRaw !== bank.lifetimeAtlasRaw ||
|
|
127
|
+
currentBank.lastCreditedAtUnixSeconds !== bank.lastCreditedAtUnixSeconds ||
|
|
128
|
+
currentBank.expiresAtUnixSeconds !== bank.expiresAtUnixSeconds) {
|
|
129
|
+
fail(`Loyalty ATLAS Bank ${bank.address} changed or does not match its canonical Game, Profile, faction, balance, lifetime, credit, or expiry state. Refresh the Bank through this context and retry.`, bank.address);
|
|
130
|
+
}
|
|
131
|
+
if (characterAccount.address !== character ||
|
|
132
|
+
currentCharacter.playerProfile !== options.authorization.profile ||
|
|
133
|
+
currentCharacter.game !== game) {
|
|
134
|
+
fail(`Canonical Character ${character} does not match Profile ${options.authorization.profile} and configured Game ${game}. Refresh or repair the Character relationship before retrying.`, character);
|
|
135
|
+
}
|
|
136
|
+
const description = `Claim ${String(bank.claimableAtlasRaw)} raw ATLAS from Loyalty ATLAS Bank ${bank.address} to Character ${character}; permission, final freshness, and concurrent claims remain chain-authoritative.`;
|
|
137
|
+
return createPlan({
|
|
138
|
+
kind: 'loyalty.claim-atlas',
|
|
139
|
+
preconditions: await Promise.all([
|
|
140
|
+
precondition(bankAccount, `Loyalty ATLAS Bank ${bank.address} retains its validated Game, Profile, faction, positive full balance, credit, and expiry state.`),
|
|
141
|
+
precondition(characterAccount, `Character ${character} remains the canonical Character for Profile ${options.authorization.profile} and the configured Game.`),
|
|
142
|
+
]),
|
|
143
|
+
steps: [
|
|
144
|
+
{
|
|
145
|
+
describes: description,
|
|
146
|
+
instruction: adaptClaimLoyaltyAtlasInstruction({
|
|
147
|
+
authorization: options.authorization,
|
|
148
|
+
bank: bank.address,
|
|
149
|
+
character,
|
|
150
|
+
factionId: bank.factionId,
|
|
151
|
+
game,
|
|
152
|
+
}),
|
|
153
|
+
signers: [options.authorization.authority],
|
|
154
|
+
},
|
|
155
|
+
],
|
|
156
|
+
summary: description,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/loyalty/actions/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { type Address } from '@solana/kit';
|
|
2
|
+
import type { SageContext } from '../../client/contracts.js';
|
|
3
|
+
import type { EntityRef } from '../../client/refs.js';
|
|
4
|
+
import { type PlanAuthorization } from '../../internal/planning/authorization-adapter.js';
|
|
5
|
+
import { type Plan } from '../../planning/index.js';
|
|
6
|
+
import type { LocalMarketSnapshot } from '../index.js';
|
|
7
|
+
export type { PlanAuthorization };
|
|
8
|
+
/** Inputs for placing one exact Local Market order.
|
|
9
|
+
*
|
|
10
|
+
* `priceRaw` is the positive raw ATLAS price per cargo unit and `quantity` is
|
|
11
|
+
* the positive raw cargo quantity. Both values are unsigned-u64 integers.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* declare const authorization: PlanAuthorization;
|
|
16
|
+
* const options: PlanPlaceLocalMarketOrderOptions = {
|
|
17
|
+
* authorization,
|
|
18
|
+
* side: 'bid',
|
|
19
|
+
* priceRaw: 100_000_000n,
|
|
20
|
+
* quantity: 5n,
|
|
21
|
+
* };
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export interface PlanPlaceLocalMarketOrderOptions {
|
|
25
|
+
readonly authorization: PlanAuthorization;
|
|
26
|
+
readonly side: 'bid' | 'ask';
|
|
27
|
+
readonly priceRaw: bigint;
|
|
28
|
+
readonly quantity: bigint;
|
|
29
|
+
}
|
|
30
|
+
/** Inputs for cancelling owned Local Market orders and withdrawing filled escrow.
|
|
31
|
+
*
|
|
32
|
+
* `orderIds` is a dense, unique list of non-negative safe integers. Pass an
|
|
33
|
+
* empty list to request withdrawal of filled escrow without cancelling an open
|
|
34
|
+
* order. The chain remains authoritative about whether escrow is available.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* declare const authorization: PlanAuthorization;
|
|
39
|
+
* const options: PlanCancelLocalMarketOrdersOptions = {
|
|
40
|
+
* authorization,
|
|
41
|
+
* orderIds: [4, 9],
|
|
42
|
+
* };
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export interface PlanCancelLocalMarketOrdersOptions {
|
|
46
|
+
readonly authorization: PlanAuthorization;
|
|
47
|
+
readonly orderIds: readonly number[];
|
|
48
|
+
}
|
|
49
|
+
interface StarbasePlayerSnapshot {
|
|
50
|
+
readonly kind: 'starbasePlayer';
|
|
51
|
+
readonly address: Address;
|
|
52
|
+
readonly playerProfile: EntityRef<'profile'>;
|
|
53
|
+
readonly system: EntityRef<'starSystem'>;
|
|
54
|
+
readonly character: EntityRef<'character'>;
|
|
55
|
+
readonly sequenceId: bigint;
|
|
56
|
+
readonly cargo: {
|
|
57
|
+
readonly items: readonly {
|
|
58
|
+
readonly id: number;
|
|
59
|
+
readonly name: string;
|
|
60
|
+
readonly quantityRaw: bigint;
|
|
61
|
+
}[];
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/** Plans one Local Market bid or ask without signing, simulation, or writes.
|
|
65
|
+
*
|
|
66
|
+
* The planner validates the loaded Local Market and Starbase Player, their
|
|
67
|
+
* canonical Character/System/Game graph, the current market-enabled Starbase
|
|
68
|
+
* incarnation, and the known bid ATLAS or ask cargo balance. Matching, rent,
|
|
69
|
+
* final capacity, permissions, and state races remain chain-authoritative.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* declare const ctx: SageContext;
|
|
74
|
+
* declare const market: LocalMarketSnapshot;
|
|
75
|
+
* declare const player: StarbasePlayerSnapshot;
|
|
76
|
+
* declare const options: PlanPlaceLocalMarketOrderOptions;
|
|
77
|
+
* const plan = await planPlaceLocalMarketOrder(ctx, market, player, options);
|
|
78
|
+
* console.log(plan.describe());
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare function planPlaceLocalMarketOrder(ctx: SageContext, market: LocalMarketSnapshot, player: StarbasePlayerSnapshot, input: PlanPlaceLocalMarketOrderOptions): Promise<Plan>;
|
|
82
|
+
/** Plans cancellation of owned Local Market orders and filled-escrow withdrawal.
|
|
83
|
+
*
|
|
84
|
+
* The planner validates the loaded Local Market and Starbase Player, their
|
|
85
|
+
* canonical Profile/Character/System/Game graph, and each selected order's
|
|
86
|
+
* ownership and price. An empty selection requests filled-escrow withdrawal.
|
|
87
|
+
* Final escrow availability and order races remain chain-authoritative.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* declare const ctx: SageContext;
|
|
92
|
+
* declare const market: LocalMarketSnapshot;
|
|
93
|
+
* declare const player: StarbasePlayerSnapshot;
|
|
94
|
+
* declare const options: PlanCancelLocalMarketOrdersOptions;
|
|
95
|
+
* const plan = await planCancelLocalMarketOrders(ctx, market, player, options);
|
|
96
|
+
* console.log(plan.describe());
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
export declare function planCancelLocalMarketOrders(ctx: SageContext, market: LocalMarketSnapshot, player: StarbasePlayerSnapshot, input: PlanCancelLocalMarketOrdersOptions): Promise<Plan>;
|
|
100
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/markets/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAoBtD,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAEL,KAAK,IAAI,EAEV,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,KAAK,EAAE,SAAS;YACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;YACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;YACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;SAC9B,EAAE,CAAC;KACL,CAAC;CACH;AA2ND;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,gCAAgC,GACtC,OAAO,CAAC,IAAI,CAAC,CA+Nf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,kCAAkC,GACxC,OAAO,CAAC,IAAI,CAAC,CA8Of"}
|