@aephia/atlas-kit 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +124 -0
- package/dist/bindings.d.ts +11 -0
- package/dist/bindings.d.ts.map +1 -0
- package/dist/bindings.js +11 -0
- package/dist/bindings.js.map +1 -0
- package/dist/cargo/actions/index.d.ts +122 -0
- package/dist/cargo/actions/index.d.ts.map +1 -0
- package/dist/cargo/actions/index.js +526 -0
- package/dist/cargo/actions/index.js.map +1 -0
- package/dist/cargo/index.d.ts +77 -0
- package/dist/cargo/index.d.ts.map +1 -0
- package/dist/cargo/index.js +102 -0
- package/dist/cargo/index.js.map +1 -0
- package/dist/claim-stakes/index.d.ts +64 -0
- package/dist/claim-stakes/index.d.ts.map +1 -0
- package/dist/claim-stakes/index.js +97 -0
- package/dist/claim-stakes/index.js.map +1 -0
- package/dist/client/context.d.ts +21 -0
- package/dist/client/context.d.ts.map +1 -0
- package/dist/client/context.js +1374 -0
- package/dist/client/context.js.map +1 -0
- package/dist/client/contracts.d.ts +671 -0
- package/dist/client/contracts.d.ts.map +1 -0
- package/dist/client/contracts.js +2 -0
- package/dist/client/contracts.js.map +1 -0
- package/dist/client/deployments.d.ts +3 -0
- package/dist/client/deployments.d.ts.map +1 -0
- package/dist/client/deployments.js +2 -0
- package/dist/client/deployments.js.map +1 -0
- package/dist/client/errors.d.ts +227 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +288 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +5 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/lifecycle.d.ts +4 -0
- package/dist/client/lifecycle.d.ts.map +1 -0
- package/dist/client/lifecycle.js +10 -0
- package/dist/client/lifecycle.js.map +1 -0
- package/dist/client/provider-errors.d.ts +9 -0
- package/dist/client/provider-errors.d.ts.map +1 -0
- package/dist/client/provider-errors.js +12 -0
- package/dist/client/provider-errors.js.map +1 -0
- package/dist/client/reconciliation.d.ts +10 -0
- package/dist/client/reconciliation.d.ts.map +1 -0
- package/dist/client/reconciliation.js +9 -0
- package/dist/client/reconciliation.js.map +1 -0
- package/dist/client/refs.d.ts +23 -0
- package/dist/client/refs.d.ts.map +1 -0
- package/dist/client/refs.js +12 -0
- package/dist/client/refs.js.map +1 -0
- package/dist/combat/index.d.ts +256 -0
- package/dist/combat/index.d.ts.map +1 -0
- package/dist/combat/index.js +222 -0
- package/dist/combat/index.js.map +1 -0
- package/dist/crafting/index.d.ts +308 -0
- package/dist/crafting/index.d.ts.map +1 -0
- package/dist/crafting/index.js +400 -0
- package/dist/crafting/index.js.map +1 -0
- package/dist/factions/index.d.ts +292 -0
- package/dist/factions/index.d.ts.map +1 -0
- package/dist/factions/index.js +334 -0
- package/dist/factions/index.js.map +1 -0
- package/dist/fleets/actions/index.d.ts +200 -0
- package/dist/fleets/actions/index.d.ts.map +1 -0
- package/dist/fleets/actions/index.js +854 -0
- package/dist/fleets/actions/index.js.map +1 -0
- package/dist/fleets/index.d.ts +100 -0
- package/dist/fleets/index.d.ts.map +1 -0
- package/dist/fleets/index.js +124 -0
- package/dist/fleets/index.js.map +1 -0
- package/dist/identity/index.d.ts +225 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +341 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/index.d.ts +401 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +519 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/c4/adapter.d.ts +6 -0
- package/dist/internal/c4/adapter.d.ts.map +1 -0
- package/dist/internal/c4/adapter.js +2 -0
- package/dist/internal/c4/adapter.js.map +1 -0
- package/dist/internal/c4/bindings.d.ts +4 -0
- package/dist/internal/c4/bindings.d.ts.map +1 -0
- package/dist/internal/c4/bindings.js +4 -0
- package/dist/internal/c4/bindings.js.map +1 -0
- package/dist/internal/c4/character-modifier.d.ts +5 -0
- package/dist/internal/c4/character-modifier.d.ts.map +1 -0
- package/dist/internal/c4/character-modifier.js +100 -0
- package/dist/internal/c4/character-modifier.js.map +1 -0
- package/dist/internal/c4/claim-stake.d.ts +140 -0
- package/dist/internal/c4/claim-stake.d.ts.map +1 -0
- package/dist/internal/c4/claim-stake.js +205 -0
- package/dist/internal/c4/claim-stake.js.map +1 -0
- package/dist/internal/c4/combat.d.ts +98 -0
- package/dist/internal/c4/combat.d.ts.map +1 -0
- package/dist/internal/c4/combat.js +232 -0
- package/dist/internal/c4/combat.js.map +1 -0
- package/dist/internal/c4/crafting.d.ts +170 -0
- package/dist/internal/c4/crafting.d.ts.map +1 -0
- package/dist/internal/c4/crafting.js +387 -0
- package/dist/internal/c4/crafting.js.map +1 -0
- package/dist/internal/c4/factions.d.ts +248 -0
- package/dist/internal/c4/factions.d.ts.map +1 -0
- package/dist/internal/c4/factions.js +589 -0
- package/dist/internal/c4/factions.js.map +1 -0
- package/dist/internal/c4/fleet-crew-binding.d.ts +12 -0
- package/dist/internal/c4/fleet-crew-binding.d.ts.map +1 -0
- package/dist/internal/c4/fleet-crew-binding.js +51 -0
- package/dist/internal/c4/fleet-crew-binding.js.map +1 -0
- package/dist/internal/c4/fleet.d.ts +310 -0
- package/dist/internal/c4/fleet.d.ts.map +1 -0
- package/dist/internal/c4/fleet.js +393 -0
- package/dist/internal/c4/fleet.js.map +1 -0
- package/dist/internal/c4/game.d.ts +192 -0
- package/dist/internal/c4/game.d.ts.map +1 -0
- package/dist/internal/c4/game.js +396 -0
- package/dist/internal/c4/game.js.map +1 -0
- package/dist/internal/c4/identity.d.ts +193 -0
- package/dist/internal/c4/identity.d.ts.map +1 -0
- package/dist/internal/c4/identity.js +180 -0
- package/dist/internal/c4/identity.js.map +1 -0
- package/dist/internal/c4/loot-layout.d.ts +20 -0
- package/dist/internal/c4/loot-layout.d.ts.map +1 -0
- package/dist/internal/c4/loot-layout.js +29 -0
- package/dist/internal/c4/loot-layout.js.map +1 -0
- package/dist/internal/c4/loyalty.d.ts +102 -0
- package/dist/internal/c4/loyalty.d.ts.map +1 -0
- package/dist/internal/c4/loyalty.js +318 -0
- package/dist/internal/c4/loyalty.js.map +1 -0
- package/dist/internal/c4/market.d.ts +112 -0
- package/dist/internal/c4/market.d.ts.map +1 -0
- package/dist/internal/c4/market.js +247 -0
- package/dist/internal/c4/market.js.map +1 -0
- package/dist/internal/c4/pda.d.ts +6 -0
- package/dist/internal/c4/pda.d.ts.map +1 -0
- package/dist/internal/c4/pda.js +45 -0
- package/dist/internal/c4/pda.js.map +1 -0
- package/dist/internal/c4/profile-faction.d.ts +14 -0
- package/dist/internal/c4/profile-faction.d.ts.map +1 -0
- package/dist/internal/c4/profile-faction.js +69 -0
- package/dist/internal/c4/profile-faction.js.map +1 -0
- package/dist/internal/c4/rewards.d.ts +135 -0
- package/dist/internal/c4/rewards.d.ts.map +1 -0
- package/dist/internal/c4/rewards.js +305 -0
- package/dist/internal/c4/rewards.js.map +1 -0
- package/dist/internal/c4/scanning.d.ts +85 -0
- package/dist/internal/c4/scanning.d.ts.map +1 -0
- package/dist/internal/c4/scanning.js +180 -0
- package/dist/internal/c4/scanning.js.map +1 -0
- package/dist/internal/c4/starbase.d.ts +186 -0
- package/dist/internal/c4/starbase.d.ts.map +1 -0
- package/dist/internal/c4/starbase.js +259 -0
- package/dist/internal/c4/starbase.js.map +1 -0
- package/dist/internal/c4/world.d.ts +294 -0
- package/dist/internal/c4/world.d.ts.map +1 -0
- package/dist/internal/c4/world.js +417 -0
- package/dist/internal/c4/world.js.map +1 -0
- package/dist/internal/cargo.d.ts +65 -0
- package/dist/internal/cargo.d.ts.map +1 -0
- package/dist/internal/cargo.js +46 -0
- package/dist/internal/cargo.js.map +1 -0
- package/dist/internal/claim-stake.d.ts +31 -0
- package/dist/internal/claim-stake.d.ts.map +1 -0
- package/dist/internal/claim-stake.js +20 -0
- package/dist/internal/claim-stake.js.map +1 -0
- package/dist/internal/fleet.d.ts +165 -0
- package/dist/internal/fleet.d.ts.map +1 -0
- package/dist/internal/fleet.js +179 -0
- package/dist/internal/fleet.js.map +1 -0
- package/dist/internal/game-context.d.ts +4 -0
- package/dist/internal/game-context.d.ts.map +1 -0
- package/dist/internal/game-context.js +9 -0
- package/dist/internal/game-context.js.map +1 -0
- package/dist/internal/immutable-tree.d.ts +5 -0
- package/dist/internal/immutable-tree.d.ts.map +1 -0
- package/dist/internal/immutable-tree.js +47 -0
- package/dist/internal/immutable-tree.js.map +1 -0
- package/dist/internal/json.d.ts +7 -0
- package/dist/internal/json.d.ts.map +1 -0
- package/dist/internal/json.js +33 -0
- package/dist/internal/json.js.map +1 -0
- package/dist/internal/planning/authorization-adapter.d.ts +63 -0
- package/dist/internal/planning/authorization-adapter.d.ts.map +1 -0
- package/dist/internal/planning/authorization-adapter.js +222 -0
- package/dist/internal/planning/authorization-adapter.js.map +1 -0
- package/dist/internal/read-meta.d.ts +84 -0
- package/dist/internal/read-meta.d.ts.map +1 -0
- package/dist/internal/read-meta.js +28 -0
- package/dist/internal/read-meta.js.map +1 -0
- package/dist/internal/resolved-snapshot.d.ts +3 -0
- package/dist/internal/resolved-snapshot.d.ts.map +1 -0
- package/dist/internal/resolved-snapshot.js +11 -0
- package/dist/internal/resolved-snapshot.js.map +1 -0
- package/dist/internal/zink/provider.d.ts +9 -0
- package/dist/internal/zink/provider.d.ts.map +1 -0
- package/dist/internal/zink/provider.js +213 -0
- package/dist/internal/zink/provider.js.map +1 -0
- package/dist/loyalty/index.d.ts +195 -0
- package/dist/loyalty/index.d.ts.map +1 -0
- package/dist/loyalty/index.js +289 -0
- package/dist/loyalty/index.js.map +1 -0
- package/dist/markets/index.d.ts +195 -0
- package/dist/markets/index.d.ts.map +1 -0
- package/dist/markets/index.js +232 -0
- package/dist/markets/index.js.map +1 -0
- package/dist/mining/index.d.ts +156 -0
- package/dist/mining/index.d.ts.map +1 -0
- package/dist/mining/index.js +236 -0
- package/dist/mining/index.js.map +1 -0
- package/dist/planning/assembly.d.ts +42 -0
- package/dist/planning/assembly.d.ts.map +1 -0
- package/dist/planning/assembly.js +141 -0
- package/dist/planning/assembly.js.map +1 -0
- package/dist/planning/composition.d.ts +4 -0
- package/dist/planning/composition.d.ts.map +1 -0
- package/dist/planning/composition.js +76 -0
- package/dist/planning/composition.js.map +1 -0
- package/dist/planning/execution.d.ts +93 -0
- package/dist/planning/execution.d.ts.map +1 -0
- package/dist/planning/execution.js +549 -0
- package/dist/planning/execution.js.map +1 -0
- package/dist/planning/index.d.ts +219 -0
- package/dist/planning/index.d.ts.map +1 -0
- package/dist/planning/index.js +375 -0
- package/dist/planning/index.js.map +1 -0
- package/dist/planning/plan-instances.d.ts +3 -0
- package/dist/planning/plan-instances.d.ts.map +1 -0
- package/dist/planning/plan-instances.js +8 -0
- package/dist/planning/plan-instances.js.map +1 -0
- package/dist/planning/plan-sequence-checkpoint.d.ts +154 -0
- package/dist/planning/plan-sequence-checkpoint.d.ts.map +1 -0
- package/dist/planning/plan-sequence-checkpoint.js +449 -0
- package/dist/planning/plan-sequence-checkpoint.js.map +1 -0
- package/dist/planning/plan-sequence-execution.d.ts +72 -0
- package/dist/planning/plan-sequence-execution.d.ts.map +1 -0
- package/dist/planning/plan-sequence-execution.js +410 -0
- package/dist/planning/plan-sequence-execution.js.map +1 -0
- package/dist/planning/plan-sequence.d.ts +244 -0
- package/dist/planning/plan-sequence.d.ts.map +1 -0
- package/dist/planning/plan-sequence.js +264 -0
- package/dist/planning/plan-sequence.js.map +1 -0
- package/dist/planning/simulation.d.ts +50 -0
- package/dist/planning/simulation.d.ts.map +1 -0
- package/dist/planning/simulation.js +69 -0
- package/dist/planning/simulation.js.map +1 -0
- package/dist/registry/combat.d.ts +5 -0
- package/dist/registry/combat.d.ts.map +1 -0
- package/dist/registry/combat.js +7 -0
- package/dist/registry/combat.js.map +1 -0
- package/dist/registry/index.d.ts +138 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +397 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/rewards/index.d.ts +202 -0
- package/dist/rewards/index.d.ts.map +1 -0
- package/dist/rewards/index.js +290 -0
- package/dist/rewards/index.js.map +1 -0
- package/dist/scanning/index.d.ts +185 -0
- package/dist/scanning/index.d.ts.map +1 -0
- package/dist/scanning/index.js +207 -0
- package/dist/scanning/index.js.map +1 -0
- package/dist/starbases/actions/index.d.ts +60 -0
- package/dist/starbases/actions/index.d.ts.map +1 -0
- package/dist/starbases/actions/index.js +245 -0
- package/dist/starbases/actions/index.js.map +1 -0
- package/dist/starbases/index.d.ts +165 -0
- package/dist/starbases/index.d.ts.map +1 -0
- package/dist/starbases/index.js +213 -0
- package/dist/starbases/index.js.map +1 -0
- package/dist/world/index.d.ts +180 -0
- package/dist/world/index.d.ts.map +1 -0
- package/dist/world/index.js +265 -0
- package/dist/world/index.js.map +1 -0
- package/package.json +140 -0
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
import { AccountDecodeError, ProviderError, SageSdkError, entityRef, } from '../client/index.js';
|
|
2
|
+
import { isAddress } from '@solana/kit';
|
|
3
|
+
import { contextCommitment, discoverWalletProfileCandidates, } from '../client/context.js';
|
|
4
|
+
import { attachJsonSerialization } from '../internal/json.js';
|
|
5
|
+
import { requireGameAddress } from '../internal/game-context.js';
|
|
6
|
+
import { attachReadMeta, readMeta } from '../internal/read-meta.js';
|
|
7
|
+
import { assertContextActive } from '../client/lifecycle.js';
|
|
8
|
+
import { characterAccountDefinition, findCharacterPda, profileAccountDefinition, } from '../internal/c4/identity.js';
|
|
9
|
+
import { listResearchDefinitions, resolveXpDefinitions, } from '../registry/index.js';
|
|
10
|
+
const PROFILE_SNAPSHOTS = new WeakMap();
|
|
11
|
+
const CHARACTER_SNAPSHOTS = new WeakMap();
|
|
12
|
+
const PROGRESSION_SNAPSHOTS = new WeakMap();
|
|
13
|
+
const RESEARCH_CATALOG_SNAPSHOTS = new WeakMap();
|
|
14
|
+
function readMetadata(envelope, strategy) {
|
|
15
|
+
return {
|
|
16
|
+
commitment: envelope.commitment,
|
|
17
|
+
slot: envelope.slot,
|
|
18
|
+
source: envelope.source,
|
|
19
|
+
strategy,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function toProfileSnapshot(envelope) {
|
|
23
|
+
const existing = PROFILE_SNAPSHOTS.get(envelope);
|
|
24
|
+
if (existing !== undefined) {
|
|
25
|
+
return existing;
|
|
26
|
+
}
|
|
27
|
+
const snapshot = Object.freeze(attachReadMeta(attachJsonSerialization({
|
|
28
|
+
...envelope.data,
|
|
29
|
+
address: envelope.address,
|
|
30
|
+
kind: 'profile',
|
|
31
|
+
}), readMetadata(envelope, 'direct')));
|
|
32
|
+
PROFILE_SNAPSHOTS.set(envelope, snapshot);
|
|
33
|
+
return snapshot;
|
|
34
|
+
}
|
|
35
|
+
function toCharacterSnapshot(envelope) {
|
|
36
|
+
const existing = CHARACTER_SNAPSHOTS.get(envelope);
|
|
37
|
+
if (existing !== undefined) {
|
|
38
|
+
return existing;
|
|
39
|
+
}
|
|
40
|
+
const { playerProfile, ...data } = envelope.data;
|
|
41
|
+
const snapshot = Object.freeze(attachReadMeta(attachJsonSerialization({
|
|
42
|
+
...data,
|
|
43
|
+
address: envelope.address,
|
|
44
|
+
kind: 'character',
|
|
45
|
+
profile: entityRef('profile', playerProfile),
|
|
46
|
+
}), readMetadata(envelope, 'derived')));
|
|
47
|
+
CHARACTER_SNAPSHOTS.set(envelope, snapshot);
|
|
48
|
+
return snapshot;
|
|
49
|
+
}
|
|
50
|
+
function toProgressionSnapshot(character, xpDefinitions) {
|
|
51
|
+
let definitions = PROGRESSION_SNAPSHOTS.get(character);
|
|
52
|
+
if (definitions === undefined) {
|
|
53
|
+
definitions = new WeakMap();
|
|
54
|
+
PROGRESSION_SNAPSHOTS.set(character, definitions);
|
|
55
|
+
}
|
|
56
|
+
const existing = definitions.get(xpDefinitions);
|
|
57
|
+
if (existing !== undefined)
|
|
58
|
+
return existing;
|
|
59
|
+
const snapshot = Object.freeze(attachReadMeta(attachJsonSerialization({
|
|
60
|
+
character: entityRef('character', character.address),
|
|
61
|
+
kind: 'characterProgression',
|
|
62
|
+
pilotXpBudget: character.pilotXpBudget,
|
|
63
|
+
xp: character.xp,
|
|
64
|
+
xpDefinitions,
|
|
65
|
+
}), readMeta(character)));
|
|
66
|
+
definitions.set(xpDefinitions, snapshot);
|
|
67
|
+
return snapshot;
|
|
68
|
+
}
|
|
69
|
+
function validateCharacterRelationship(envelope, profileAddress, game) {
|
|
70
|
+
if (envelope.data.playerProfile !== profileAddress ||
|
|
71
|
+
envelope.data.game !== game) {
|
|
72
|
+
throw new AccountDecodeError('character', envelope.address, new RangeError(`The decoded Character references Player Profile ${envelope.data.playerProfile} and Game ${envelope.data.game}, but the derived address was requested for Player Profile ${profileAddress} and Game ${game}.`), `The Character at ${envelope.address} references Player Profile ${envelope.data.playerProfile} and Game ${envelope.data.game}, not the requested Player Profile ${profileAddress} and Game ${game}. Verify the Profile address, Game address, configured cluster, and installed binding version before retrying.`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function toValidatedCharacterSnapshot(envelope, profileAddress, game) {
|
|
76
|
+
validateCharacterRelationship(envelope, profileAddress, game);
|
|
77
|
+
return toCharacterSnapshot(envelope);
|
|
78
|
+
}
|
|
79
|
+
function walletReadOptions(options) {
|
|
80
|
+
return {
|
|
81
|
+
...(options.commitment === undefined
|
|
82
|
+
? {}
|
|
83
|
+
: { commitment: options.commitment }),
|
|
84
|
+
...(options.policy === undefined ? {} : { policy: options.policy }),
|
|
85
|
+
refresh: true,
|
|
86
|
+
...(options.signal === undefined ? {} : { signal: options.signal }),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function validateWalletProfileRelationship(profile, wallet) {
|
|
90
|
+
if (profile.keys.some((key) => key.address === wallet))
|
|
91
|
+
return;
|
|
92
|
+
throw new AccountDecodeError('profile', profile.address, new RangeError(`The decoded Player Profile does not contain wallet ${wallet} in its key list.`), `The Player Profile at ${profile.address} does not contain wallet ${wallet} in its on-chain key list. Discovery validates stored key presence regardless of expiry. Refresh the discovery provider or known Profile addresses before retrying.`);
|
|
93
|
+
}
|
|
94
|
+
function uniqueAddresses(addresses) {
|
|
95
|
+
return Object.freeze([...new Set(addresses)]);
|
|
96
|
+
}
|
|
97
|
+
/** Reads a required Player Profile by account address.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```ts
|
|
101
|
+
* declare const ctx: SageContext;
|
|
102
|
+
* declare const profileAddress: Address;
|
|
103
|
+
* const profile = await getProfile(ctx, profileAddress);
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export async function getProfile(ctx, address, options) {
|
|
107
|
+
return toProfileSnapshot(await ctx.data.read(profileAccountDefinition, address, options));
|
|
108
|
+
}
|
|
109
|
+
/** Reads a derived Character and joins its XP state to matching Game rules.
|
|
110
|
+
*
|
|
111
|
+
* The Profile-to-Character PDA remains the canonical discovery path. Game XP
|
|
112
|
+
* rules are loaded lazily and must carry the Character's exact sequence id.
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```ts
|
|
116
|
+
* declare const ctx: SageContext;
|
|
117
|
+
* declare const profileAddress: Address;
|
|
118
|
+
* const progression = await getCharacterProgressionForProfile(ctx, profileAddress);
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
export async function getCharacterProgressionForProfile(ctx, profileAddress, options) {
|
|
122
|
+
const character = await getCharacterForProfile(ctx, profileAddress, options);
|
|
123
|
+
const xpDefinitions = await resolveXpDefinitions(ctx, {
|
|
124
|
+
expectedSequenceId: character.xp.seqId,
|
|
125
|
+
});
|
|
126
|
+
return toProgressionSnapshot(character, xpDefinitions);
|
|
127
|
+
}
|
|
128
|
+
/** Reads the Game research tree as an independent, context-cached catalog.
|
|
129
|
+
*
|
|
130
|
+
* The result intentionally has no Character relation, unlock flags, perk
|
|
131
|
+
* state, or inferred player ownership. It also has no read metadata because
|
|
132
|
+
* the definitions registry does not expose an authoritative per-read envelope.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```ts
|
|
136
|
+
* declare const ctx: SageContext;
|
|
137
|
+
* const catalog = await getResearchCatalog(ctx);
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
export async function getResearchCatalog(ctx) {
|
|
141
|
+
assertContextActive(ctx);
|
|
142
|
+
const existing = RESEARCH_CATALOG_SNAPSHOTS.get(ctx);
|
|
143
|
+
if (existing !== undefined)
|
|
144
|
+
return existing;
|
|
145
|
+
const pending = (async () => {
|
|
146
|
+
const game = requireGameAddress(ctx);
|
|
147
|
+
const research = await listResearchDefinitions(ctx);
|
|
148
|
+
return Object.freeze(attachJsonSerialization({
|
|
149
|
+
game: entityRef('game', game),
|
|
150
|
+
kind: 'researchCatalog',
|
|
151
|
+
nodes: research.definitions,
|
|
152
|
+
sequenceId: research.sequenceId,
|
|
153
|
+
}));
|
|
154
|
+
})();
|
|
155
|
+
RESEARCH_CATALOG_SNAPSHOTS.set(ctx, pending);
|
|
156
|
+
void pending.catch(() => {
|
|
157
|
+
RESEARCH_CATALOG_SNAPSHOTS.delete(ctx);
|
|
158
|
+
});
|
|
159
|
+
return pending;
|
|
160
|
+
}
|
|
161
|
+
/** Reads an optional Player Profile by account address.
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```ts
|
|
165
|
+
* declare const ctx: SageContext;
|
|
166
|
+
* declare const profileAddress: Address;
|
|
167
|
+
* const profile = await maybeGetProfile(ctx, profileAddress);
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
export async function maybeGetProfile(ctx, address, options) {
|
|
171
|
+
const [envelope] = await ctx.data.readMany(profileAccountDefinition, [address], options);
|
|
172
|
+
return envelope === undefined ? undefined : toProfileSnapshot(envelope);
|
|
173
|
+
}
|
|
174
|
+
/** Derives and reads the Character associated with a known Player Profile.
|
|
175
|
+
*
|
|
176
|
+
* @example
|
|
177
|
+
* ```ts
|
|
178
|
+
* declare const ctx: SageContext;
|
|
179
|
+
* declare const profileAddress: Address;
|
|
180
|
+
* const character = await getCharacterForProfile(ctx, profileAddress);
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
export async function getCharacterForProfile(ctx, profileAddress, options) {
|
|
184
|
+
const game = requireGameAddress(ctx);
|
|
185
|
+
const characterAddress = await findCharacterPda(profileAddress, game);
|
|
186
|
+
return toValidatedCharacterSnapshot(await ctx.data.read(characterAccountDefinition, characterAddress, options), profileAddress, game);
|
|
187
|
+
}
|
|
188
|
+
/** Derives and optionally reads the Character for a known Player Profile.
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```ts
|
|
192
|
+
* declare const ctx: SageContext;
|
|
193
|
+
* declare const profileAddress: Address;
|
|
194
|
+
* const character = await maybeGetCharacterForProfile(ctx, profileAddress);
|
|
195
|
+
* ```
|
|
196
|
+
*/
|
|
197
|
+
export async function maybeGetCharacterForProfile(ctx, profileAddress, options) {
|
|
198
|
+
const game = requireGameAddress(ctx);
|
|
199
|
+
const characterAddress = await findCharacterPda(profileAddress, game);
|
|
200
|
+
const [envelope] = await ctx.data.readMany(characterAccountDefinition, [characterAddress], options);
|
|
201
|
+
return envelope === undefined
|
|
202
|
+
? undefined
|
|
203
|
+
: toValidatedCharacterSnapshot(envelope, profileAddress, game);
|
|
204
|
+
}
|
|
205
|
+
/** Resolves and directly validates zero, one, or many Player Profiles for a wallet.
|
|
206
|
+
*
|
|
207
|
+
* Provider and known-address results are address hints only. Every unique
|
|
208
|
+
* candidate is read through the context data plane, validated as a Player
|
|
209
|
+
* Profile, and checked for the requested wallet in its decoded key list.
|
|
210
|
+
* Stored matching keys are accepted regardless of expiry; consumers remain
|
|
211
|
+
* responsible for applying authorization policy to the returned key details.
|
|
212
|
+
* Missing candidates are treated as stale hints and omitted; a contradictory
|
|
213
|
+
* present Profile rejects the discovery.
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* ```ts
|
|
217
|
+
* declare const ctx: SageContext;
|
|
218
|
+
* declare const wallet: Address;
|
|
219
|
+
* const profiles = await getProfilesForWallet(ctx, wallet, {
|
|
220
|
+
* strategy: 'provider',
|
|
221
|
+
* });
|
|
222
|
+
* ```
|
|
223
|
+
*/
|
|
224
|
+
export async function getProfilesForWallet(ctx, wallet, options) {
|
|
225
|
+
if (!isAddress(wallet)) {
|
|
226
|
+
throw new SageSdkError('INVALID_DERIVATION_INPUT', 'Wallet-to-Profile discovery requires a valid z.ink/Solana wallet address. Fix the wallet address before retrying discovery.', {
|
|
227
|
+
accountType: 'profile',
|
|
228
|
+
strategy: options.strategy === 'provider'
|
|
229
|
+
? 'wallet-profile-provider'
|
|
230
|
+
: 'known-addresses',
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
const readOptions = walletReadOptions(options);
|
|
234
|
+
let candidates;
|
|
235
|
+
let source;
|
|
236
|
+
let commitment;
|
|
237
|
+
if (options.strategy === 'provider') {
|
|
238
|
+
const discovered = await discoverWalletProfileCandidates(ctx, wallet, {
|
|
239
|
+
...(options.commitment === undefined
|
|
240
|
+
? {}
|
|
241
|
+
: { commitment: options.commitment }),
|
|
242
|
+
...(options.signal === undefined ? {} : { signal: options.signal }),
|
|
243
|
+
});
|
|
244
|
+
candidates = discovered.addresses;
|
|
245
|
+
commitment = discovered.commitment;
|
|
246
|
+
source = discovered.source;
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
if (!Array.isArray(options.addresses) ||
|
|
250
|
+
options.addresses.some((address) => !isAddress(address))) {
|
|
251
|
+
throw new SageSdkError('INVALID_DERIVATION_INPUT', 'Known wallet-to-Profile addresses must contain only valid z.ink/Solana addresses. Fix the known address list before retrying discovery.', { accountType: 'profile', strategy: 'known-addresses' });
|
|
252
|
+
}
|
|
253
|
+
candidates = Object.freeze([...options.addresses]);
|
|
254
|
+
commitment = contextCommitment(ctx, options.commitment);
|
|
255
|
+
source = Object.freeze({
|
|
256
|
+
kind: 'application',
|
|
257
|
+
name: 'known-profile-addresses',
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
const unique = uniqueAddresses(candidates);
|
|
261
|
+
const envelopes = await ctx.data.readMany(profileAccountDefinition, unique, readOptions);
|
|
262
|
+
const profiles = [];
|
|
263
|
+
let missingCount = 0;
|
|
264
|
+
let earliestSlot;
|
|
265
|
+
for (const envelope of envelopes) {
|
|
266
|
+
if (envelope === undefined) {
|
|
267
|
+
missingCount += 1;
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
const profile = toProfileSnapshot(envelope);
|
|
271
|
+
try {
|
|
272
|
+
validateWalletProfileRelationship(profile, wallet);
|
|
273
|
+
}
|
|
274
|
+
catch (cause) {
|
|
275
|
+
if (options.strategy === 'provider' &&
|
|
276
|
+
cause instanceof AccountDecodeError) {
|
|
277
|
+
throw new ProviderError(`The configured wallet-to-Profile discovery provider returned Profile ${profile.address}, but it does not contain wallet ${wallet} in its on-chain key list. Refresh or repair the provider mapping before retrying.`, {
|
|
278
|
+
accountType: 'profile',
|
|
279
|
+
address: profile.address,
|
|
280
|
+
cause,
|
|
281
|
+
provider: source,
|
|
282
|
+
strategy: 'wallet-profile-provider',
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
throw cause;
|
|
286
|
+
}
|
|
287
|
+
profiles.push(profile);
|
|
288
|
+
earliestSlot =
|
|
289
|
+
earliestSlot === undefined || envelope.slot < earliestSlot
|
|
290
|
+
? envelope.slot
|
|
291
|
+
: earliestSlot;
|
|
292
|
+
}
|
|
293
|
+
return Object.freeze(attachReadMeta(profiles, {
|
|
294
|
+
commitment,
|
|
295
|
+
slot: earliestSlot ?? 0n,
|
|
296
|
+
source,
|
|
297
|
+
strategy: options.strategy === 'provider'
|
|
298
|
+
? 'wallet-profile-provider'
|
|
299
|
+
: 'known-addresses',
|
|
300
|
+
walletProfiles: Object.freeze({
|
|
301
|
+
candidateCount: candidates.length,
|
|
302
|
+
duplicateCount: candidates.length - unique.length,
|
|
303
|
+
missingCount,
|
|
304
|
+
validatedCount: profiles.length,
|
|
305
|
+
}),
|
|
306
|
+
}));
|
|
307
|
+
}
|
|
308
|
+
/** Resolves wallet Profiles and derives every Character currently present for them.
|
|
309
|
+
*
|
|
310
|
+
* The returned list preserves the wallet discovery strategy metadata. Profiles
|
|
311
|
+
* without a Character are omitted because Character creation is optional.
|
|
312
|
+
*
|
|
313
|
+
* @example
|
|
314
|
+
* ```ts
|
|
315
|
+
* declare const ctx: SageContext;
|
|
316
|
+
* declare const wallet: Address;
|
|
317
|
+
* const characters = await getCharactersForWallet(ctx, wallet, {
|
|
318
|
+
* strategy: 'provider',
|
|
319
|
+
* });
|
|
320
|
+
* ```
|
|
321
|
+
*/
|
|
322
|
+
export async function getCharactersForWallet(ctx, wallet, options) {
|
|
323
|
+
requireGameAddress(ctx);
|
|
324
|
+
const profiles = await getProfilesForWallet(ctx, wallet, options);
|
|
325
|
+
const characters = (await Promise.all(profiles.map((profile) => maybeGetCharacterForProfile(ctx, profile.address, walletReadOptions(options))))).filter((character) => character !== undefined);
|
|
326
|
+
const profileMetadata = readMeta(profiles);
|
|
327
|
+
let earliestSlot;
|
|
328
|
+
for (const character of characters) {
|
|
329
|
+
const slot = readMeta(character).slot;
|
|
330
|
+
earliestSlot =
|
|
331
|
+
earliestSlot === undefined || slot < earliestSlot ? slot : earliestSlot;
|
|
332
|
+
}
|
|
333
|
+
const metadata = attachReadMeta(characters, {
|
|
334
|
+
commitment: profileMetadata.commitment,
|
|
335
|
+
slot: earliestSlot ?? 0n,
|
|
336
|
+
source: profileMetadata.source,
|
|
337
|
+
strategy: profileMetadata.strategy,
|
|
338
|
+
});
|
|
339
|
+
return Object.freeze(metadata);
|
|
340
|
+
}
|
|
341
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"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"}
|