Skip to content

identity

Defined in: packages/sage/src/internal/c4/identity.ts:231

SDK-owned decoded Character data.

declare const character: CharacterAccountData;
const atlas = character.atlas;

readonly atlas: number;

Defined in: packages/sage/src/internal/c4/identity.ts:242

readonly atlasRaw: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:241

readonly bump: number;

Defined in: packages/sage/src/internal/c4/identity.ts:235

readonly checkIn: {
lastCheckInTime: bigint;
streak: number;
};

Defined in: packages/sage/src/internal/c4/identity.ts:236

readonly lastCheckInTime: bigint;
readonly streak: number;

readonly counts: {
claimStakes: number;
craftingHabs: number;
fleets: number;
};

Defined in: packages/sage/src/internal/c4/identity.ts:243

readonly claimStakes: number;
readonly craftingHabs: number;
readonly fleets: number;

readonly game: Address;

Defined in: packages/sage/src/internal/c4/identity.ts:234

readonly modifiers: CharacterModifiersData;

Defined in: packages/sage/src/internal/c4/identity.ts:254

readonly pilotXpBudget: {
available: number;
fractionalCarry: number;
fractionalCarryRaw: bigint;
lastAccrualTime: bigint;
};

Defined in: packages/sage/src/internal/c4/identity.ts:248

readonly available: number;
readonly fractionalCarry: number;
readonly fractionalCarryRaw: bigint;
readonly lastAccrualTime: bigint;

readonly playerProfile: Address;

Defined in: packages/sage/src/internal/c4/identity.ts:233

readonly version: number;

Defined in: packages/sage/src/internal/c4/identity.ts:232

readonly xp: CharacterXpData;

Defined in: packages/sage/src/internal/c4/identity.ts:240


Defined in: packages/sage/src/internal/c4/identity.ts:171

SDK-owned translation of Character modifier values.

declare const modifiers: CharacterModifierData;
const fleetLimit = modifiers.fleetSize;

readonly cargoCategories: readonly number[];

Defined in: packages/sage/src/internal/c4/identity.ts:202

readonly craftingEfficiencyModifier: number;

Defined in: packages/sage/src/internal/c4/identity.ts:184

readonly craftingEfficiencyModifierRaw: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:185

readonly craftingJobConcurrencyBonus: number;

Defined in: packages/sage/src/internal/c4/identity.ts:188

readonly craftingTimeModifier: number;

Defined in: packages/sage/src/internal/c4/identity.ts:186

readonly craftingTimeModifierRaw: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:187

readonly enemyFactionZoneAccess: boolean;

Defined in: packages/sage/src/internal/c4/identity.ts:194

readonly fleetConcurrency: number;

Defined in: packages/sage/src/internal/c4/identity.ts:173

readonly fleetSize: number;

Defined in: packages/sage/src/internal/c4/identity.ts:172

readonly maxDailyStreakLength: number;

Defined in: packages/sage/src/internal/c4/identity.ts:195

readonly maxProductivePlots: number;

Defined in: packages/sage/src/internal/c4/identity.ts:192

readonly optional maxProductivePlotTier?: 1 | 2 | 3 | 4 | 5;

Defined in: packages/sage/src/internal/c4/identity.ts:191

readonly maxResidentialPlots: number;

Defined in: packages/sage/src/internal/c4/identity.ts:190

readonly optional maxResidentialPlotTier?: 1 | 2 | 3 | 4 | 5;

Defined in: packages/sage/src/internal/c4/identity.ts:189

readonly maxShipSize: ShipSize;

Defined in: packages/sage/src/internal/c4/identity.ts:196

readonly rareMineralDiscovery: readonly RareMineralDiscoveryData[];

Defined in: packages/sage/src/internal/c4/identity.ts:203

readonly researchTags: readonly number[];

Defined in: packages/sage/src/internal/c4/identity.ts:201

readonly respawnTimeModifier: number;

Defined in: packages/sage/src/internal/c4/identity.ts:174

readonly respawnTimeModifierRaw: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:175

readonly scanCoolDownModifier: number;

Defined in: packages/sage/src/internal/c4/identity.ts:199

readonly scanCoolDownModifierRaw: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:200

readonly scanPowerModifier: number;

Defined in: packages/sage/src/internal/c4/identity.ts:197

readonly scanPowerModifierRaw: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:198

readonly securityZoneAccess: RiskZoneAccess;

Defined in: packages/sage/src/internal/c4/identity.ts:193

readonly subwarpSpeedModifier: number;

Defined in: packages/sage/src/internal/c4/identity.ts:180

readonly subwarpSpeedModifierRaw: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:181

readonly warpCooldownModifier: number;

Defined in: packages/sage/src/internal/c4/identity.ts:182

readonly warpCooldownModifierRaw: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:183

readonly warpLaneFeeModifier: number;

Defined in: packages/sage/src/internal/c4/identity.ts:176

readonly warpLaneFeeModifierRaw: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:177

readonly warpSpeedModifier: number;

Defined in: packages/sage/src/internal/c4/identity.ts:178

readonly warpSpeedModifierRaw: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:179


Defined in: packages/sage/src/internal/c4/identity.ts:213

SDK-owned Character modifier state from the Character account.

declare const modifiers: CharacterModifiersData;
const nodes = modifiers.unlockedNodes;

readonly nodeLevels: readonly {
level: number;
nodeId: number;
}[];

Defined in: packages/sage/src/internal/c4/identity.ts:217

readonly seqId: number;

Defined in: packages/sage/src/internal/c4/identity.ts:214

readonly unlockedNodes: readonly number[];

Defined in: packages/sage/src/internal/c4/identity.ts:216

readonly unupdatedCount: number;

Defined in: packages/sage/src/internal/c4/identity.ts:215

readonly values: CharacterModifierData;

Defined in: packages/sage/src/internal/c4/identity.ts:221


Defined in: packages/sage/src/identity/index.ts:138

Character XP and pilot state joined to sequence-matched Game XP rules.

declare const ctx: SageContext;
declare const profileAddress: Address;
const progression: CharacterProgressionSnapshot =
await getCharacterProgressionForProfile(ctx, profileAddress);
console.log(progression.xp.pilot.level);

readonly character: EntityRef<"character">;

Defined in: packages/sage/src/identity/index.ts:140

readonly kind: "characterProgression";

Defined in: packages/sage/src/identity/index.ts:139

readonly pilotXpBudget: {
available: number;
fractionalCarry: number;
fractionalCarryRaw: bigint;
lastAccrualTime: bigint;
};

Defined in: packages/sage/src/identity/index.ts:142

readonly available: number;
readonly fractionalCarry: number;
readonly fractionalCarryRaw: bigint;
readonly lastAccrualTime: bigint;

readonly xp: CharacterXpData;

Defined in: packages/sage/src/identity/index.ts:141

readonly xpDefinitions: GameXpDefinitionsSectionData;

Defined in: packages/sage/src/identity/index.ts:143

toJSON(): unknown;

Defined in: packages/sage/src/identity/index.ts:144

unknown


Defined in: packages/sage/src/identity/index.ts:117

Immutable Character snapshot derived from a Player Profile and Game.

declare const ctx: SageContext;
declare const profileAddress: Address;
const character: CharacterSnapshot = await getCharacterForProfile(ctx, profileAddress);
console.log(character.profile.address);

readonly address: Address;

Defined in: packages/sage/src/identity/index.ts:122

readonly atlas: number;

Defined in: packages/sage/src/internal/c4/identity.ts:242

CharacterAccountData.atlas

readonly atlasRaw: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:241

CharacterAccountData.atlasRaw

readonly bump: number;

Defined in: packages/sage/src/internal/c4/identity.ts:235

CharacterAccountData.bump

readonly checkIn: {
lastCheckInTime: bigint;
streak: number;
};

Defined in: packages/sage/src/internal/c4/identity.ts:236

readonly lastCheckInTime: bigint;
readonly streak: number;

CharacterAccountData.checkIn

readonly counts: {
claimStakes: number;
craftingHabs: number;
fleets: number;
};

Defined in: packages/sage/src/internal/c4/identity.ts:243

readonly claimStakes: number;
readonly craftingHabs: number;
readonly fleets: number;

CharacterAccountData.counts

readonly game: Address;

Defined in: packages/sage/src/internal/c4/identity.ts:234

CharacterAccountData.game

readonly kind: "character";

Defined in: packages/sage/src/identity/index.ts:121

readonly modifiers: CharacterModifiersData;

Defined in: packages/sage/src/internal/c4/identity.ts:254

CharacterAccountData.modifiers

readonly pilotXpBudget: {
available: number;
fractionalCarry: number;
fractionalCarryRaw: bigint;
lastAccrualTime: bigint;
};

Defined in: packages/sage/src/internal/c4/identity.ts:248

readonly available: number;
readonly fractionalCarry: number;
readonly fractionalCarryRaw: bigint;
readonly lastAccrualTime: bigint;

CharacterAccountData.pilotXpBudget

readonly profile: EntityRef<"profile">;

Defined in: packages/sage/src/identity/index.ts:123

readonly version: number;

Defined in: packages/sage/src/internal/c4/identity.ts:232

CharacterAccountData.version

readonly xp: CharacterXpData;

Defined in: packages/sage/src/internal/c4/identity.ts:240

CharacterAccountData.xp

toJSON(): unknown;

Defined in: packages/sage/src/identity/index.ts:124

unknown


Defined in: packages/sage/src/internal/c4/identity.ts:101

SDK-owned XP values for one Character category.

declare const category: CharacterXpCategoryData;
const level = category.level;

readonly earned: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:103

readonly level: number;

Defined in: packages/sage/src/internal/c4/identity.ts:104

readonly spent: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:102


Defined in: packages/sage/src/internal/c4/identity.ts:114

SDK-owned Character XP state.

declare const xp: CharacterXpData;
const pilotLevel = xp.pilot.level;

readonly building: CharacterXpCategoryData;

Defined in: packages/sage/src/internal/c4/identity.ts:121

readonly combat: CharacterXpCategoryData;

Defined in: packages/sage/src/internal/c4/identity.ts:123

readonly councilRank: CharacterXpCategoryData;

Defined in: packages/sage/src/internal/c4/identity.ts:116

readonly councilRankLevelCarry: number;

Defined in: packages/sage/src/internal/c4/identity.ts:124

readonly crafting: CharacterXpCategoryData;

Defined in: packages/sage/src/internal/c4/identity.ts:122

readonly dailyXp: CharacterXpCategoryData;

Defined in: packages/sage/src/internal/c4/identity.ts:117

readonly dataRunner: CharacterXpCategoryData;

Defined in: packages/sage/src/internal/c4/identity.ts:119

readonly mining: CharacterXpCategoryData;

Defined in: packages/sage/src/internal/c4/identity.ts:120

readonly pilot: CharacterXpCategoryData;

Defined in: packages/sage/src/internal/c4/identity.ts:118

readonly seqId: number;

Defined in: packages/sage/src/internal/c4/identity.ts:115


Defined in: packages/sage/src/internal/c4/identity.ts:85

SDK-owned decoded Player Profile data.

declare const profile: ProfileAccountData;
const keys = profile.keys;

readonly authKeyCount: number;

Defined in: packages/sage/src/internal/c4/identity.ts:87

readonly createdAt: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:90

readonly keys: readonly ProfileKeyData[];

Defined in: packages/sage/src/internal/c4/identity.ts:91

readonly keyThreshold: number;

Defined in: packages/sage/src/internal/c4/identity.ts:88

readonly nextSeqId: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:89

readonly version: number;

Defined in: packages/sage/src/internal/c4/identity.ts:86


Defined in: packages/sage/src/internal/c4/identity.ts:69

SDK-owned representation of one Player Profile key.

declare const key: ProfileKeyData;
const expiresAt = key.expiresAt;

readonly address: Address;

Defined in: packages/sage/src/internal/c4/identity.ts:70

readonly optional expiresAt?: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:73

readonly expiresAtRaw: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:72

readonly permissions: readonly ProfilePermission[];

Defined in: packages/sage/src/internal/c4/identity.ts:75

readonly permissionsRaw: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:74

readonly scope: Address;

Defined in: packages/sage/src/internal/c4/identity.ts:71


Defined in: packages/sage/src/identity/index.ts:101

Immutable, translated Player Profile snapshot.

declare const ctx: SageContext;
declare const profileAddress: Address;
const profile: ProfileSnapshot = await getProfile(ctx, profileAddress);
console.log(profile.address, profile.keys.length);

readonly address: Address;

Defined in: packages/sage/src/identity/index.ts:103

readonly authKeyCount: number;

Defined in: packages/sage/src/internal/c4/identity.ts:87

ProfileAccountData.authKeyCount

readonly createdAt: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:90

ProfileAccountData.createdAt

readonly keys: readonly ProfileKeyData[];

Defined in: packages/sage/src/internal/c4/identity.ts:91

ProfileAccountData.keys

readonly keyThreshold: number;

Defined in: packages/sage/src/internal/c4/identity.ts:88

ProfileAccountData.keyThreshold

readonly kind: "profile";

Defined in: packages/sage/src/identity/index.ts:102

readonly nextSeqId: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:89

ProfileAccountData.nextSeqId

readonly version: number;

Defined in: packages/sage/src/internal/c4/identity.ts:86

ProfileAccountData.version

toJSON(): unknown;

Defined in: packages/sage/src/identity/index.ts:104

unknown


Defined in: packages/sage/src/internal/c4/identity.ts:158

One translated cargo-specific research modifier.

declare const discovery: RareMineralDiscoveryData;
const multiplier = discovery.multiplier;

readonly cargoId: number;

Defined in: packages/sage/src/internal/c4/identity.ts:159

readonly multiplier: number;

Defined in: packages/sage/src/internal/c4/identity.ts:160

readonly multiplierRaw: bigint;

Defined in: packages/sage/src/internal/c4/identity.ts:161


Defined in: packages/sage/src/identity/index.ts:156

Independent Game research catalog without Character perk or unlock claims.

declare const ctx: SageContext;
const catalog: ResearchCatalogSnapshot = await getResearchCatalog(ctx);
console.log(catalog.nodes.length);

readonly game: EntityRef<"game">;

Defined in: packages/sage/src/identity/index.ts:158

readonly kind: "researchCatalog";

Defined in: packages/sage/src/identity/index.ts:157

readonly nodes: readonly GameResearchNodeData[];

Defined in: packages/sage/src/identity/index.ts:159

readonly sequenceId: number;

Defined in: packages/sage/src/identity/index.ts:160

toJSON(): unknown;

Defined in: packages/sage/src/identity/index.ts:161

unknown

type ProfilePermission =
| "authenticate"
| "addKeys"
| "removeKeys"
| "changeName"
| "createRole"
| "removeRole"
| "setAuthorizer"
| "joinRole"
| "leaveRole"
| "toggleAcceptingNewMembers"
| "addMember"
| "removeMember"
| "drainSolVault";

Defined in: packages/sage/src/internal/c4/identity.ts:47

Stable labels for Player Profile key permissions.

const permission: ProfilePermission = 'authenticate';

type ResearchNodeDefinition = GameResearchNodeData;

Defined in: packages/sage/src/identity/index.ts:89

One Game research node definition with no claimed player unlock state.

declare const node: ResearchNodeDefinition;
console.log(node.name, node.maxLevel);

type RiskZoneAccess = "low" | "medium" | "high";

Defined in: packages/sage/src/internal/c4/identity.ts:149

Stable risk-zone labels translated from generated numeric enums.

const access: RiskZoneAccess = 'low';

type ShipSize =
| "xx-small"
| "x-small"
| "small"
| "medium"
| "large"
| "capital"
| "commander"
| "titan";

Defined in: packages/sage/src/internal/c4/identity.ts:133

Stable ship-size labels translated from generated numeric enums.

const size: ShipSize = 'medium';

type WalletProfileDiscoveryOptions =
| Omit<ReadOptions, "maxAgeMs" | "refresh"> & {
addresses: readonly Address[];
strategy: "known-addresses";
}
| Omit<ReadOptions, "maxAgeMs" | "refresh"> & {
addresses?: never;
strategy: "provider";
};

Defined in: packages/sage/src/identity/index.ts:179

Explicit strategy and read controls for wallet-to-Profile discovery.

Known addresses and provider hints follow the same direct on-chain validation path. The strategy is required so callers never mistake a known application mapping for provider discovery.

declare const profileAddress: Address;
const options: WalletProfileDiscoveryOptions = {
strategy: 'known-addresses',
addresses: [profileAddress],
};

type XpCategory = GameXpCategory;

Defined in: packages/sage/src/identity/index.ts:62

Stable gameplay label for one Game XP category.

const category: XpCategory = 'pilot';

type XpDefinitions = GameXpDefinitionsSectionData;

Defined in: packages/sage/src/identity/index.ts:80

Sequence-versioned Game XP rules joined to Character XP.

declare const definitions: XpDefinitions;
console.log(definitions.sequenceId);

type XpLevelThreshold = GameXpLevelThresholdData;

Defined in: packages/sage/src/identity/index.ts:71

Exact XP thresholds for one level across every category.

declare const threshold: XpLevelThreshold;
console.log(threshold.pilot);

function getCharacterForProfile(
ctx,
profileAddress,
options?): Promise<CharacterSnapshot>;

Defined in: packages/sage/src/identity/index.ts:458

Derives and reads the Character associated with a known Player Profile.

ParameterType
ctxSageContext
profileAddressAddress
options?ReadOptions

Promise<CharacterSnapshot>

declare const ctx: SageContext;
declare const profileAddress: Address;
const character = await getCharacterForProfile(ctx, profileAddress);

function getCharacterProgressionForProfile(
ctx,
profileAddress,
options?): Promise<CharacterProgressionSnapshot>;

Defined in: packages/sage/src/identity/index.ts:377

Reads a derived Character and joins its XP state to matching Game rules.

The Profile-to-Character PDA remains the canonical discovery path. Game XP rules are loaded lazily and must carry the Character’s exact sequence id.

ParameterType
ctxSageContext
profileAddressAddress
options?ReadOptions

Promise<CharacterProgressionSnapshot>

declare const ctx: SageContext;
declare const profileAddress: Address;
const progression = await getCharacterProgressionForProfile(ctx, profileAddress);

function getCharactersForWallet(
ctx,
wallet,
options): Promise<readonly CharacterSnapshot[]>;

Defined in: packages/sage/src/identity/index.ts:645

Resolves wallet Profiles and derives every Character currently present for them.

The returned list preserves the wallet discovery strategy metadata. Profiles without a Character are omitted because Character creation is optional.

ParameterType
ctxSageContext
walletAddress
optionsWalletProfileDiscoveryOptions

Promise<readonly CharacterSnapshot[]>

declare const ctx: SageContext;
declare const wallet: Address;
const characters = await getCharactersForWallet(ctx, wallet, {
strategy: 'provider',
});

function getProfile(
ctx,
address,
options?): Promise<ProfileSnapshot>;

Defined in: packages/sage/src/identity/index.ts:355

Reads a required Player Profile by account address.

ParameterType
ctxSageContext
addressAddress
options?ReadOptions

Promise<ProfileSnapshot>

declare const ctx: SageContext;
declare const profileAddress: Address;
const profile = await getProfile(ctx, profileAddress);

function getProfilesForWallet(
ctx,
wallet,
options): Promise<readonly ProfileSnapshot[]>;

Defined in: packages/sage/src/identity/index.ts:517

Resolves and directly validates zero, one, or many Player Profiles for a wallet.

Provider and known-address results are address hints only. Every unique candidate is read through the context data plane, validated as a Player Profile, and checked for the requested wallet in its decoded key list. Stored matching keys are accepted regardless of expiry; consumers remain responsible for applying authorization policy to the returned key details. Missing candidates are treated as stale hints and omitted; a contradictory present Profile rejects the discovery.

ParameterType
ctxSageContext
walletAddress
optionsWalletProfileDiscoveryOptions

Promise<readonly ProfileSnapshot[]>

declare const ctx: SageContext;
declare const wallet: Address;
const profiles = await getProfilesForWallet(ctx, wallet, {
strategy: 'provider',
});

function getResearchCatalog(ctx): Promise<ResearchCatalogSnapshot>;

Defined in: packages/sage/src/identity/index.ts:401

Reads the Game research tree as an independent, context-cached catalog.

The result intentionally has no Character relation, unlock flags, perk state, or inferred player ownership. It also has no read metadata because the definitions registry does not expose an authoritative per-read envelope.

ParameterType
ctxSageContext

Promise<ResearchCatalogSnapshot>

declare const ctx: SageContext;
const catalog = await getResearchCatalog(ctx);

function maybeGetCharacterForProfile(
ctx,
profileAddress,
options?): Promise<
| CharacterSnapshot
| undefined>;

Defined in: packages/sage/src/identity/index.ts:481

Derives and optionally reads the Character for a known Player Profile.

ParameterType
ctxSageContext
profileAddressAddress
options?ReadOptions

Promise< | CharacterSnapshot | undefined>

declare const ctx: SageContext;
declare const profileAddress: Address;
const character = await maybeGetCharacterForProfile(ctx, profileAddress);

function maybeGetProfile(
ctx,
address,
options?): Promise<ProfileSnapshot | undefined>;

Defined in: packages/sage/src/identity/index.ts:436

Reads an optional Player Profile by account address.

ParameterType
ctxSageContext
addressAddress
options?ReadOptions

Promise<ProfileSnapshot | undefined>

declare const ctx: SageContext;
declare const profileAddress: Address;
const profile = await maybeGetProfile(ctx, profileAddress);