identity
Interfaces
Section titled “Interfaces”CharacterAccountData
Section titled “CharacterAccountData”Defined in: packages/sage/src/internal/c4/character.ts:158
SDK-owned decoded Character data.
Example
Section titled “Example”declare const character: CharacterAccountData;const atlas = character.atlas;Properties
Section titled “Properties”readonly atlas: number;Defined in: packages/sage/src/internal/c4/character.ts:169
atlasRaw
Section titled “atlasRaw”readonly atlasRaw: bigint;Defined in: packages/sage/src/internal/c4/character.ts:168
readonly bump: number;Defined in: packages/sage/src/internal/c4/character.ts:162
checkIn
Section titled “checkIn”readonly checkIn: { lastCheckInTime: bigint; streak: number;};Defined in: packages/sage/src/internal/c4/character.ts:163
lastCheckInTime
Section titled “lastCheckInTime”readonly lastCheckInTime: bigint;streak
Section titled “streak”readonly streak: number;counts
Section titled “counts”readonly counts: { claimStakes: number; craftingHabs: number; fleets: number;};Defined in: packages/sage/src/internal/c4/character.ts:170
claimStakes
Section titled “claimStakes”readonly claimStakes: number;craftingHabs
Section titled “craftingHabs”readonly craftingHabs: number;fleets
Section titled “fleets”readonly fleets: number;readonly game: Address;Defined in: packages/sage/src/internal/c4/character.ts:161
modifiers
Section titled “modifiers”readonly modifiers: CharacterModifiersData;Defined in: packages/sage/src/internal/c4/character.ts:181
pilotXpBudget
Section titled “pilotXpBudget”readonly pilotXpBudget: { available: number; fractionalCarry: number; fractionalCarryRaw: bigint; lastAccrualTime: bigint;};Defined in: packages/sage/src/internal/c4/character.ts:175
available
Section titled “available”readonly available: number;fractionalCarry
Section titled “fractionalCarry”readonly fractionalCarry: number;fractionalCarryRaw
Section titled “fractionalCarryRaw”readonly fractionalCarryRaw: bigint;lastAccrualTime
Section titled “lastAccrualTime”readonly lastAccrualTime: bigint;playerProfile
Section titled “playerProfile”readonly playerProfile: Address;Defined in: packages/sage/src/internal/c4/character.ts:160
version
Section titled “version”readonly version: number;Defined in: packages/sage/src/internal/c4/character.ts:159
readonly xp: CharacterXpData;Defined in: packages/sage/src/internal/c4/character.ts:167
CharacterModifierData
Section titled “CharacterModifierData”Defined in: packages/sage/src/internal/c4/character.ts:98
SDK-owned translation of Character modifier values.
Example
Section titled “Example”declare const modifiers: CharacterModifierData;const shipCapacityPerFleet = modifiers.fleetSize;const maximumFleetCount = modifiers.fleetConcurrency;Properties
Section titled “Properties”cargoCategories
Section titled “cargoCategories”readonly cargoCategories: readonly number[];Defined in: packages/sage/src/internal/c4/character.ts:129
craftingEfficiencyModifier
Section titled “craftingEfficiencyModifier”readonly craftingEfficiencyModifier: number;Defined in: packages/sage/src/internal/c4/character.ts:111
craftingEfficiencyModifierRaw
Section titled “craftingEfficiencyModifierRaw”readonly craftingEfficiencyModifierRaw: bigint;Defined in: packages/sage/src/internal/c4/character.ts:112
craftingJobConcurrencyBonus
Section titled “craftingJobConcurrencyBonus”readonly craftingJobConcurrencyBonus: number;Defined in: packages/sage/src/internal/c4/character.ts:115
craftingTimeModifier
Section titled “craftingTimeModifier”readonly craftingTimeModifier: number;Defined in: packages/sage/src/internal/c4/character.ts:113
craftingTimeModifierRaw
Section titled “craftingTimeModifierRaw”readonly craftingTimeModifierRaw: bigint;Defined in: packages/sage/src/internal/c4/character.ts:114
enemyFactionZoneAccess
Section titled “enemyFactionZoneAccess”readonly enemyFactionZoneAccess: boolean;Defined in: packages/sage/src/internal/c4/character.ts:121
fleetConcurrency
Section titled “fleetConcurrency”readonly fleetConcurrency: number;Defined in: packages/sage/src/internal/c4/character.ts:100
fleetSize
Section titled “fleetSize”readonly fleetSize: number;Defined in: packages/sage/src/internal/c4/character.ts:99
maxDailyStreakLength
Section titled “maxDailyStreakLength”readonly maxDailyStreakLength: number;Defined in: packages/sage/src/internal/c4/character.ts:122
maxProductivePlots
Section titled “maxProductivePlots”readonly maxProductivePlots: number;Defined in: packages/sage/src/internal/c4/character.ts:119
maxProductivePlotTier?
Section titled “maxProductivePlotTier?”readonly optional maxProductivePlotTier?: 1 | 5 | 2 | 4 | 3;Defined in: packages/sage/src/internal/c4/character.ts:118
maxResidentialPlots
Section titled “maxResidentialPlots”readonly maxResidentialPlots: number;Defined in: packages/sage/src/internal/c4/character.ts:117
maxResidentialPlotTier?
Section titled “maxResidentialPlotTier?”readonly optional maxResidentialPlotTier?: 1 | 5 | 2 | 4 | 3;Defined in: packages/sage/src/internal/c4/character.ts:116
maxShipSize
Section titled “maxShipSize”readonly maxShipSize: ShipSize;Defined in: packages/sage/src/internal/c4/character.ts:123
rareMineralDiscovery
Section titled “rareMineralDiscovery”readonly rareMineralDiscovery: readonly RareMineralDiscoveryData[];Defined in: packages/sage/src/internal/c4/character.ts:130
researchTags
Section titled “researchTags”readonly researchTags: readonly number[];Defined in: packages/sage/src/internal/c4/character.ts:128
respawnTimeModifier
Section titled “respawnTimeModifier”readonly respawnTimeModifier: number;Defined in: packages/sage/src/internal/c4/character.ts:101
respawnTimeModifierRaw
Section titled “respawnTimeModifierRaw”readonly respawnTimeModifierRaw: bigint;Defined in: packages/sage/src/internal/c4/character.ts:102
scanCoolDownModifier
Section titled “scanCoolDownModifier”readonly scanCoolDownModifier: number;Defined in: packages/sage/src/internal/c4/character.ts:126
scanCoolDownModifierRaw
Section titled “scanCoolDownModifierRaw”readonly scanCoolDownModifierRaw: bigint;Defined in: packages/sage/src/internal/c4/character.ts:127
scanPowerModifier
Section titled “scanPowerModifier”readonly scanPowerModifier: number;Defined in: packages/sage/src/internal/c4/character.ts:124
scanPowerModifierRaw
Section titled “scanPowerModifierRaw”readonly scanPowerModifierRaw: bigint;Defined in: packages/sage/src/internal/c4/character.ts:125
securityZoneAccess
Section titled “securityZoneAccess”readonly securityZoneAccess: RiskZoneAccess;Defined in: packages/sage/src/internal/c4/character.ts:120
subwarpSpeedModifier
Section titled “subwarpSpeedModifier”readonly subwarpSpeedModifier: number;Defined in: packages/sage/src/internal/c4/character.ts:107
subwarpSpeedModifierRaw
Section titled “subwarpSpeedModifierRaw”readonly subwarpSpeedModifierRaw: bigint;Defined in: packages/sage/src/internal/c4/character.ts:108
warpCooldownModifier
Section titled “warpCooldownModifier”readonly warpCooldownModifier: number;Defined in: packages/sage/src/internal/c4/character.ts:109
warpCooldownModifierRaw
Section titled “warpCooldownModifierRaw”readonly warpCooldownModifierRaw: bigint;Defined in: packages/sage/src/internal/c4/character.ts:110
warpLaneFeeModifier
Section titled “warpLaneFeeModifier”readonly warpLaneFeeModifier: number;Defined in: packages/sage/src/internal/c4/character.ts:103
warpLaneFeeModifierRaw
Section titled “warpLaneFeeModifierRaw”readonly warpLaneFeeModifierRaw: bigint;Defined in: packages/sage/src/internal/c4/character.ts:104
warpSpeedModifier
Section titled “warpSpeedModifier”readonly warpSpeedModifier: number;Defined in: packages/sage/src/internal/c4/character.ts:105
warpSpeedModifierRaw
Section titled “warpSpeedModifierRaw”readonly warpSpeedModifierRaw: bigint;Defined in: packages/sage/src/internal/c4/character.ts:106
CharacterModifiersData
Section titled “CharacterModifiersData”Defined in: packages/sage/src/internal/c4/character.ts:140
SDK-owned Character modifier state from the Character account.
Example
Section titled “Example”declare const modifiers: CharacterModifiersData;const nodes = modifiers.unlockedNodes;Properties
Section titled “Properties”nodeLevels
Section titled “nodeLevels”readonly nodeLevels: readonly { level: number; nodeId: number;}[];Defined in: packages/sage/src/internal/c4/character.ts:144
readonly seqId: number;Defined in: packages/sage/src/internal/c4/character.ts:141
unlockedNodes
Section titled “unlockedNodes”readonly unlockedNodes: readonly number[];Defined in: packages/sage/src/internal/c4/character.ts:143
unupdatedCount
Section titled “unupdatedCount”readonly unupdatedCount: number;Defined in: packages/sage/src/internal/c4/character.ts:142
values
Section titled “values”readonly values: CharacterModifierData;Defined in: packages/sage/src/internal/c4/character.ts:148
CharacterProgressionSnapshot
Section titled “CharacterProgressionSnapshot”Defined in: packages/sage/src/identity/index.ts:144
Character XP and pilot state joined to sequence-matched Game XP rules.
Example
Section titled “Example”declare const ctx: SageContext;declare const profileAddress: Address;const progression: CharacterProgressionSnapshot = await getCharacterProgressionForProfile(ctx, profileAddress);console.log(progression.xp.pilot.level);Properties
Section titled “Properties”character
Section titled “character”readonly character: EntityRef<"character">;Defined in: packages/sage/src/identity/index.ts:146
readonly kind: "characterProgression";Defined in: packages/sage/src/identity/index.ts:145
pilotXpBudget
Section titled “pilotXpBudget”readonly pilotXpBudget: { available: number; fractionalCarry: number; fractionalCarryRaw: bigint; lastAccrualTime: bigint;};Defined in: packages/sage/src/identity/index.ts:148
available
Section titled “available”readonly available: number;fractionalCarry
Section titled “fractionalCarry”readonly fractionalCarry: number;fractionalCarryRaw
Section titled “fractionalCarryRaw”readonly fractionalCarryRaw: bigint;lastAccrualTime
Section titled “lastAccrualTime”readonly lastAccrualTime: bigint;readonly xp: CharacterXpData;Defined in: packages/sage/src/identity/index.ts:147
xpDefinitions
Section titled “xpDefinitions”readonly xpDefinitions: GameXpDefinitionsSectionData;Defined in: packages/sage/src/identity/index.ts:149
Methods
Section titled “Methods”toJSON()
Section titled “toJSON()”toJSON(): unknown;Defined in: packages/sage/src/identity/index.ts:150
Returns
Section titled “Returns”unknown
CharacterResearchState
Section titled “CharacterResearchState”Defined in: packages/sage/src/identity/research-state.ts:22
Display balances derived from one Character, not research purchase eligibility. Sequences describe the input; no current Game definitions are consulted.
Example
Section titled “Example”declare const state: CharacterResearchState;console.log(state.careers.mining.researchPointsAvailable, state.renown.available);Properties
Section titled “Properties”careers
Section titled “careers”readonly careers: Readonly<Record<typeof careers[number], { earnedXp: bigint; level: number; researchPointsAvailable: bigint; researchPointsSpent: bigint;}>>;Defined in: packages/sage/src/identity/research-state.ts:27
characterAddress
Section titled “characterAddress”readonly characterAddress: Address;Defined in: packages/sage/src/identity/research-state.ts:23
readonly nodes: readonly { level: number; nodeId: number;}[];Defined in: packages/sage/src/identity/research-state.ts:48
Acquired nodes only. Stored levels are reported as-is, including 0; only a missing entry defaults to 1. This preserves observed state rather than applying the official client’s minimum-1 sync-step estimate.
pendingNodeUpdates
Section titled “pendingNodeUpdates”readonly pendingNodeUpdates: number;Defined in: packages/sage/src/identity/research-state.ts:26
renown
Section titled “renown”readonly renown: { available: bigint; careerLevelCarry: number; earned: bigint; level: number; spent: bigint;};Defined in: packages/sage/src/identity/research-state.ts:38
available
Section titled “available”readonly available: bigint;careerLevelCarry
Section titled “careerLevelCarry”readonly careerLevelCarry: number;earned
Section titled “earned”readonly earned: bigint;readonly level: number;readonly spent: bigint;researchSequenceId
Section titled “researchSequenceId”readonly researchSequenceId: number;Defined in: packages/sage/src/identity/research-state.ts:25
xpSequenceId
Section titled “xpSequenceId”readonly xpSequenceId: number;Defined in: packages/sage/src/identity/research-state.ts:24
Methods
Section titled “Methods”toJSON()
Section titled “toJSON()”toJSON(): unknown;Defined in: packages/sage/src/identity/research-state.ts:52
Returns
Section titled “Returns”unknown
CharacterSnapshot
Section titled “CharacterSnapshot”Defined in: packages/sage/src/identity/index.ts:123
Immutable Character snapshot derived from a Player Profile and Game.
Example
Section titled “Example”declare const ctx: SageContext;declare const profileAddress: Address;const character: CharacterSnapshot = await getCharacterForProfile(ctx, profileAddress);console.log(character.profile.address);Extends
Section titled “Extends”Omit<CharacterAccountData,"playerProfile">
Extended by
Section titled “Extended by”Properties
Section titled “Properties”address
Section titled “address”readonly address: Address;Defined in: packages/sage/src/identity/index.ts:128
readonly atlas: number;Defined in: packages/sage/src/internal/c4/character.ts:169
Inherited from
Section titled “Inherited from”atlasRaw
Section titled “atlasRaw”readonly atlasRaw: bigint;Defined in: packages/sage/src/internal/c4/character.ts:168
Inherited from
Section titled “Inherited from”readonly bump: number;Defined in: packages/sage/src/internal/c4/character.ts:162
Inherited from
Section titled “Inherited from”checkIn
Section titled “checkIn”readonly checkIn: { lastCheckInTime: bigint; streak: number;};Defined in: packages/sage/src/internal/c4/character.ts:163
lastCheckInTime
Section titled “lastCheckInTime”readonly lastCheckInTime: bigint;streak
Section titled “streak”readonly streak: number;Inherited from
Section titled “Inherited from”counts
Section titled “counts”readonly counts: { claimStakes: number; craftingHabs: number; fleets: number;};Defined in: packages/sage/src/internal/c4/character.ts:170
claimStakes
Section titled “claimStakes”readonly claimStakes: number;craftingHabs
Section titled “craftingHabs”readonly craftingHabs: number;fleets
Section titled “fleets”readonly fleets: number;Inherited from
Section titled “Inherited from”readonly game: Address;Defined in: packages/sage/src/internal/c4/character.ts:161
Inherited from
Section titled “Inherited from”readonly kind: "character";Defined in: packages/sage/src/identity/index.ts:127
modifiers
Section titled “modifiers”readonly modifiers: CharacterModifiersData;Defined in: packages/sage/src/internal/c4/character.ts:181
Inherited from
Section titled “Inherited from”CharacterAccountData.modifiers
pilotXpBudget
Section titled “pilotXpBudget”readonly pilotXpBudget: { available: number; fractionalCarry: number; fractionalCarryRaw: bigint; lastAccrualTime: bigint;};Defined in: packages/sage/src/internal/c4/character.ts:175
available
Section titled “available”readonly available: number;fractionalCarry
Section titled “fractionalCarry”readonly fractionalCarry: number;fractionalCarryRaw
Section titled “fractionalCarryRaw”readonly fractionalCarryRaw: bigint;lastAccrualTime
Section titled “lastAccrualTime”readonly lastAccrualTime: bigint;Inherited from
Section titled “Inherited from”CharacterAccountData.pilotXpBudget
profile
Section titled “profile”readonly profile: EntityRef<"profile">;Defined in: packages/sage/src/identity/index.ts:129
version
Section titled “version”readonly version: number;Defined in: packages/sage/src/internal/c4/character.ts:159
Inherited from
Section titled “Inherited from”readonly xp: CharacterXpData;Defined in: packages/sage/src/internal/c4/character.ts:167
Inherited from
Section titled “Inherited from”Methods
Section titled “Methods”toJSON()
Section titled “toJSON()”toJSON(): unknown;Defined in: packages/sage/src/identity/index.ts:130
Returns
Section titled “Returns”unknown
CharacterXpCategoryData
Section titled “CharacterXpCategoryData”Defined in: packages/sage/src/internal/c4/character.ts:27
SDK-owned XP values for one Character category.
Example
Section titled “Example”declare const category: CharacterXpCategoryData;const level = category.level;Properties
Section titled “Properties”earned
Section titled “earned”readonly earned: bigint;Defined in: packages/sage/src/internal/c4/character.ts:29
readonly level: number;Defined in: packages/sage/src/internal/c4/character.ts:30
readonly spent: bigint;Defined in: packages/sage/src/internal/c4/character.ts:28
CharacterXpData
Section titled “CharacterXpData”Defined in: packages/sage/src/internal/c4/character.ts:40
SDK-owned Character XP state.
Example
Section titled “Example”declare const xp: CharacterXpData;const pilotLevel = xp.pilot.level;Properties
Section titled “Properties”building
Section titled “building”readonly building: CharacterXpCategoryData;Defined in: packages/sage/src/internal/c4/character.ts:47
combat
Section titled “combat”readonly combat: CharacterXpCategoryData;Defined in: packages/sage/src/internal/c4/character.ts:49
councilRank
Section titled “councilRank”readonly councilRank: CharacterXpCategoryData;Defined in: packages/sage/src/internal/c4/character.ts:42
councilRankLevelCarry
Section titled “councilRankLevelCarry”readonly councilRankLevelCarry: number;Defined in: packages/sage/src/internal/c4/character.ts:50
crafting
Section titled “crafting”readonly crafting: CharacterXpCategoryData;Defined in: packages/sage/src/internal/c4/character.ts:48
dailyXp
Section titled “dailyXp”readonly dailyXp: CharacterXpCategoryData;Defined in: packages/sage/src/internal/c4/character.ts:43
dataRunner
Section titled “dataRunner”readonly dataRunner: CharacterXpCategoryData;Defined in: packages/sage/src/internal/c4/character.ts:45
mining
Section titled “mining”readonly mining: CharacterXpCategoryData;Defined in: packages/sage/src/internal/c4/character.ts:46
readonly pilot: CharacterXpCategoryData;Defined in: packages/sage/src/internal/c4/character.ts:44
readonly seqId: number;Defined in: packages/sage/src/internal/c4/character.ts:41
ProfileAccountData
Section titled “ProfileAccountData”Defined in: packages/sage/src/internal/c4/identity.ts:54
SDK-owned decoded Player Profile data.
Example
Section titled “Example”declare const profile: ProfileAccountData;const keys = profile.keys;Extended by
Section titled “Extended by”Properties
Section titled “Properties”authKeyCount
Section titled “authKeyCount”readonly authKeyCount: number;Defined in: packages/sage/src/internal/c4/identity.ts:56
createdAt
Section titled “createdAt”readonly createdAt: bigint;Defined in: packages/sage/src/internal/c4/identity.ts:59
readonly keys: readonly ProfileKeyData[];Defined in: packages/sage/src/internal/c4/identity.ts:60
keyThreshold
Section titled “keyThreshold”readonly keyThreshold: number;Defined in: packages/sage/src/internal/c4/identity.ts:57
nextSeqId
Section titled “nextSeqId”readonly nextSeqId: bigint;Defined in: packages/sage/src/internal/c4/identity.ts:58
version
Section titled “version”readonly version: number;Defined in: packages/sage/src/internal/c4/identity.ts:55
ProfileKeyData
Section titled “ProfileKeyData”Defined in: packages/sage/src/internal/c4/identity.ts:38
SDK-owned representation of one Player Profile key.
Example
Section titled “Example”declare const key: ProfileKeyData;const expiresAt = key.expiresAt;Properties
Section titled “Properties”address
Section titled “address”readonly address: Address;Defined in: packages/sage/src/internal/c4/identity.ts:39
expiresAt?
Section titled “expiresAt?”readonly optional expiresAt?: bigint;Defined in: packages/sage/src/internal/c4/identity.ts:42
expiresAtRaw
Section titled “expiresAtRaw”readonly expiresAtRaw: bigint;Defined in: packages/sage/src/internal/c4/identity.ts:41
permissions
Section titled “permissions”readonly permissions: readonly ProfilePermission[];Defined in: packages/sage/src/internal/c4/identity.ts:44
permissionsRaw
Section titled “permissionsRaw”readonly permissionsRaw: bigint;Defined in: packages/sage/src/internal/c4/identity.ts:43
readonly scope: Address;Defined in: packages/sage/src/internal/c4/identity.ts:40
ProfileKeyInspection
Section titled “ProfileKeyInspection”Defined in: packages/sage/src/identity/permissions.ts:194
Immutable diagnostics for one original Profile key, never a selected authority. A match is advisory, not chain authorization; unknown requirements are indeterminate.
Example
Section titled “Example”declare const candidate: ProfileKeyInspection;console.log(candidate.keyIndex, candidate.status, candidate.diagnostics);Properties
Section titled “Properties”address
Section titled “address”readonly address: Address;Defined in: packages/sage/src/identity/permissions.ts:196
diagnostics
Section titled “diagnostics”readonly diagnostics: readonly ProfileKeyDiagnostic[];Defined in: packages/sage/src/identity/permissions.ts:203
expired
Section titled “expired”readonly expired: boolean;Defined in: packages/sage/src/identity/permissions.ts:202
expiresAt?
Section titled “expiresAt?”readonly optional expiresAt?: bigint;Defined in: packages/sage/src/identity/permissions.ts:201
expiresAtRaw
Section titled “expiresAtRaw”readonly expiresAtRaw: bigint;Defined in: packages/sage/src/identity/permissions.ts:200
isProfileAuthority
Section titled “isProfileAuthority”readonly isProfileAuthority: boolean;Defined in: packages/sage/src/identity/permissions.ts:199
keyIndex
Section titled “keyIndex”readonly keyIndex: number;Defined in: packages/sage/src/identity/permissions.ts:195
permissionsRaw
Section titled “permissionsRaw”readonly permissionsRaw: bigint;Defined in: packages/sage/src/identity/permissions.ts:198
readonly scope: Address;Defined in: packages/sage/src/identity/permissions.ts:197
status
Section titled “status”readonly status: "match" | "mismatch" | "indeterminate";Defined in: packages/sage/src/identity/permissions.ts:204
Methods
Section titled “Methods”toJSON()
Section titled “toJSON()”toJSON(): unknown;Defined in: packages/sage/src/identity/permissions.ts:205
Returns
Section titled “Returns”unknown
ProfileKeyRequirement
Section titled “ProfileKeyRequirement”Defined in: packages/sage/src/identity/permissions.ts:168
Explicit direct-key requirement evaluated only at the caller’s supplied time.
Example
Section titled “Example”declare const signer: Address;const requirement: ProfileKeyRequirement = {signer, scope: PROFILE_PERMISSION_SCOPE, permissionsRaw: 4n, at: 100n};Properties
Section titled “Properties”readonly at: bigint;Defined in: packages/sage/src/identity/permissions.ts:172
permissionsRaw
Section titled “permissionsRaw”readonly permissionsRaw: bigint;Defined in: packages/sage/src/identity/permissions.ts:171
readonly scope: Address;Defined in: packages/sage/src/identity/permissions.ts:170
signer
Section titled “signer”readonly signer: Address;Defined in: packages/sage/src/identity/permissions.ts:169
ProfilePermissionInspection
Section titled “ProfilePermissionInspection”Defined in: packages/sage/src/identity/permissions.ts:129
Immutable scoped permission meanings with all raw bits retained.
Example
Section titled “Example”const inspection: ProfilePermissionInspection = inspectProfilePermissions(PROFILE_PERMISSION_SCOPE, 1n);Properties
Section titled “Properties”permissions
Section titled “permissions”readonly permissions: readonly ProfilePermission[];Defined in: packages/sage/src/identity/permissions.ts:132
permissionsRaw
Section titled “permissionsRaw”readonly permissionsRaw: bigint;Defined in: packages/sage/src/identity/permissions.ts:131
readonly scope: Address;Defined in: packages/sage/src/identity/permissions.ts:130
unrecognizedBitsRaw
Section titled “unrecognizedBitsRaw”readonly unrecognizedBitsRaw: bigint;Defined in: packages/sage/src/identity/permissions.ts:133
Methods
Section titled “Methods”toJSON()
Section titled “toJSON()”toJSON(): unknown;Defined in: packages/sage/src/identity/permissions.ts:134
Returns
Section titled “Returns”unknown
ProfileSnapshot
Section titled “ProfileSnapshot”Defined in: packages/sage/src/identity/index.ts:107
Immutable, translated Player Profile snapshot.
Example
Section titled “Example”declare const ctx: SageContext;declare const profileAddress: Address;const profile: ProfileSnapshot = await getProfile(ctx, profileAddress);console.log(profile.address, profile.keys.length);Extends
Section titled “Extends”Extended by
Section titled “Extended by”Properties
Section titled “Properties”address
Section titled “address”readonly address: Address;Defined in: packages/sage/src/identity/index.ts:109
authKeyCount
Section titled “authKeyCount”readonly authKeyCount: number;Defined in: packages/sage/src/internal/c4/identity.ts:56
Inherited from
Section titled “Inherited from”ProfileAccountData.authKeyCount
createdAt
Section titled “createdAt”readonly createdAt: bigint;Defined in: packages/sage/src/internal/c4/identity.ts:59
Inherited from
Section titled “Inherited from”readonly keys: readonly ProfileKeyData[];Defined in: packages/sage/src/internal/c4/identity.ts:60
Inherited from
Section titled “Inherited from”keyThreshold
Section titled “keyThreshold”readonly keyThreshold: number;Defined in: packages/sage/src/internal/c4/identity.ts:57
Inherited from
Section titled “Inherited from”ProfileAccountData.keyThreshold
readonly kind: "profile";Defined in: packages/sage/src/identity/index.ts:108
nextSeqId
Section titled “nextSeqId”readonly nextSeqId: bigint;Defined in: packages/sage/src/internal/c4/identity.ts:58
Inherited from
Section titled “Inherited from”version
Section titled “version”readonly version: number;Defined in: packages/sage/src/internal/c4/identity.ts:55
Inherited from
Section titled “Inherited from”Methods
Section titled “Methods”toJSON()
Section titled “toJSON()”toJSON(): unknown;Defined in: packages/sage/src/identity/index.ts:110
Returns
Section titled “Returns”unknown
RareMineralDiscoveryData
Section titled “RareMineralDiscoveryData”Defined in: packages/sage/src/internal/c4/character.ts:84
One translated cargo-specific research modifier.
Example
Section titled “Example”declare const discovery: RareMineralDiscoveryData;const multiplier = discovery.multiplier;Properties
Section titled “Properties”cargoId
Section titled “cargoId”readonly cargoId: number;Defined in: packages/sage/src/internal/c4/character.ts:85
multiplier
Section titled “multiplier”readonly multiplier: number;Defined in: packages/sage/src/internal/c4/character.ts:86
multiplierRaw
Section titled “multiplierRaw”readonly multiplierRaw: bigint;Defined in: packages/sage/src/internal/c4/character.ts:87
ResearchCatalogSnapshot
Section titled “ResearchCatalogSnapshot”Defined in: packages/sage/src/identity/index.ts:162
Independent Game research catalog without Character perk or unlock claims.
Example
Section titled “Example”declare const ctx: SageContext;const catalog: ResearchCatalogSnapshot = await getResearchCatalog(ctx);console.log(catalog.nodes.length);Properties
Section titled “Properties”readonly game: EntityRef<"game">;Defined in: packages/sage/src/identity/index.ts:164
readonly kind: "researchCatalog";Defined in: packages/sage/src/identity/index.ts:163
readonly nodes: readonly GameResearchNodeData[];Defined in: packages/sage/src/identity/index.ts:165
sequenceId
Section titled “sequenceId”readonly sequenceId: number;Defined in: packages/sage/src/identity/index.ts:166
Methods
Section titled “Methods”toJSON()
Section titled “toJSON()”toJSON(): unknown;Defined in: packages/sage/src/identity/index.ts:167
Returns
Section titled “Returns”unknown
Type Aliases
Section titled “Type Aliases”ProfileKeyDiagnostic
Section titled “ProfileKeyDiagnostic”type ProfileKeyDiagnostic = | "address-mismatch" | "scope-mismatch" | "expired" | "missing-permissions" | "unrecognized-permissions";Defined in: packages/sage/src/identity/permissions.ts:180
Reasons an inspected entry does not prove a direct scoped snapshot match.
Example
Section titled “Example”const diagnostic: ProfileKeyDiagnostic = 'scope-mismatch';ProfilePermission
Section titled “ProfilePermission”type ProfilePermission = | "authenticate" | "addKeys" | "removeKeys" | "changeName" | "createRole" | "removeRole" | "setAuthorizer" | "joinRole" | "leaveRole" | "toggleAcceptingNewMembers" | "addMember" | "removeMember" | "drainSolVault" | "manageGame" | "manageSystem" | "manageStar" | "managePlanet" | "manageShip" | "manageCharacter" | "manageStarbase" | "manageMineItem" | "manageResource" | "removeShipEscrow" | "moveFleet" | "undock" | "dock" | "rentFleet" | "doCrafting" | "manageCargoPod" | "addRemoveCargo" | "doStarbaseUpgrades" | "manageFleet" | "manageFleetCargo" | "doMining" | "respawn" | "manageSurveyDataUnit" | "scanSurveyDataUnit" | "doStarbaseUpkeep" | "manageProgression" | "manageCrewConfig" | "manageCrew" | "withdrawCrew" | "manageRegion" | "manageCargo" | "manageClaimStakeConfig" | "manageCombat" | "manageClaimStake" | "manageCrafting" | "engageInCombat" | "repair" | "manageScanning" | "scan" | "manageLocalMarketOrders" | "doResearch" | "dailyCheckIn" | "manageCurrency" | "manageMissions" | "doGovernance" | "manageMissionTreasuries";Defined in: packages/sage/src/internal/c4/profile-permissions.ts:16
Stable labels for recognized scoped permissions carried by Profile keys. Profile and SAGE meanings require their exact supported program scope.
Example
Section titled “Example”const permission: ProfilePermission = 'authenticate';ResearchNodeDefinition
Section titled “ResearchNodeDefinition”type ResearchNodeDefinition = GameResearchNodeData;Defined in: packages/sage/src/identity/index.ts:95
One Game research node definition with no claimed player unlock state.
Example
Section titled “Example”declare const node: ResearchNodeDefinition;console.log(node.name, node.maxLevel);RiskZoneAccess
Section titled “RiskZoneAccess”type RiskZoneAccess = "low" | "medium" | "high";Defined in: packages/sage/src/internal/c4/character.ts:75
Stable risk-zone labels translated from generated numeric enums.
Example
Section titled “Example”const access: RiskZoneAccess = 'low';ShipSize
Section titled “ShipSize”type ShipSize = | "xx-small" | "x-small" | "small" | "medium" | "large" | "capital" | "commander" | "titan";Defined in: packages/sage/src/internal/c4/character.ts:59
Stable ship-size labels translated from generated numeric enums.
Example
Section titled “Example”const size: ShipSize = 'medium';WalletProfileDiscoveryOptions
Section titled “WalletProfileDiscoveryOptions”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:185
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.
Example
Section titled “Example”declare const profileAddress: Address;const options: WalletProfileDiscoveryOptions = { strategy: 'known-addresses', addresses: [profileAddress],};XpCategory
Section titled “XpCategory”type XpCategory = GameXpCategory;Defined in: packages/sage/src/identity/index.ts:68
Stable gameplay label for one Game XP category.
Example
Section titled “Example”const category: XpCategory = 'pilot';XpDefinitions
Section titled “XpDefinitions”type XpDefinitions = GameXpDefinitionsSectionData;Defined in: packages/sage/src/identity/index.ts:86
Sequence-versioned Game XP rules joined to Character XP.
Example
Section titled “Example”declare const definitions: XpDefinitions;console.log(definitions.sequenceId);XpLevelThreshold
Section titled “XpLevelThreshold”type XpLevelThreshold = GameXpLevelThresholdData;Defined in: packages/sage/src/identity/index.ts:77
Exact XP thresholds for one level across every category.
Example
Section titled “Example”declare const threshold: XpLevelThreshold;console.log(threshold.pilot);Variables
Section titled “Variables”PROFILE_PERMISSION_SCOPE
Section titled “PROFILE_PERMISSION_SCOPE”const PROFILE_PERMISSION_SCOPE: Address = PROFILE_SCOPE;Defined in: packages/sage/src/identity/permissions.ts:19
Pinned supported Player Profile program scope, where bit zero means AUTH.
Example
Section titled “Example”const mask = composeProfilePermissions(PROFILE_PERMISSION_SCOPE, ['authenticate']);SAGE_PERMISSION_SCOPE
Section titled “SAGE_PERMISSION_SCOPE”const SAGE_PERMISSION_SCOPE: Address = SAGE_SCOPE;Defined in: packages/sage/src/identity/permissions.ts:28
Pinned supported SAGE program scope, where bit zero means manageGame. Recognized names describe bits, not complete action authorization policies.
Example
Section titled “Example”const mask = composeProfilePermissions(SAGE_PERMISSION_SCOPE, ['moveFleet']);Functions
Section titled “Functions”composeProfilePermissions()
Section titled “composeProfilePermissions()”function composeProfilePermissions(scope, names): bigint;Defined in: packages/sage/src/identity/permissions.ts:67
Compose only verified names under an explicit scope. Empty input returns zero. Profile and SAGE names require their exact supported program scope; drainSolVault is recognized across scopes. Names identify verified bits, not complete action authorization policies. No default authority mask is added.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
scope | Address |
names | readonly ProfilePermission[] |
Returns
Section titled “Returns”bigint
Example
Section titled “Example”const raw = composeProfilePermissions(PROFILE_PERMISSION_SCOPE, ['addKeys', 'removeKeys']);containsProfilePermissions()
Section titled “containsProfilePermissions()”function containsProfilePermissions(availableRaw, requiredRaw): boolean;Defined in: packages/sage/src/identity/permissions.ts:115
Numeric bit containment only, including unknown bits; this is not authorization. Callers must track the scope each mask belongs to; this pure bit operation neither checks scope compatibility nor interprets permission meanings.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
availableRaw | bigint |
requiredRaw | bigint |
Returns
Section titled “Returns”boolean
Example
Section titled “Example”const contains = containsProfilePermissions(6n, 4n);deriveCharacterResearchState()
Section titled “deriveCharacterResearchState()”function deriveCharacterResearchState(character): CharacterResearchState;Defined in: packages/sage/src/identity/research-state.ts:79
Projects stored XP, career research points, Renown and acquired nodes without I/O, mutation, or a separate cache. Career points use level minus spent; Renown uses earned minus spent. Daily XP is not a career and is excluded. Balances clamp at zero; bigint values serialize as decimal strings.
Input must be an SDK-loaded Character. The result reflects that read’s state, not necessarily current Game rules: compare researchSequenceId with the catalog sequence and require pendingNodeUpdates === 0 before treating perks as synchronized. Use getCharacterProgressionForProfile for the optional sequence-matched XP-definition join. This helper does not authorize research.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
character | Pick<CharacterSnapshot, "address" | "xp" | "modifiers"> |
Returns
Section titled “Returns”Example
Section titled “Example”declare const ctx: SageContext;declare const profileAddress: Address;const character = await getCharacterForProfile(ctx, profileAddress);const state = deriveCharacterResearchState(character);console.log(state.careers.pilot.earnedXp, state.careers.pilot.level);console.log(state.renown.available, state.nodes);getCharacterForProfile()
Section titled “getCharacterForProfile()”function getCharacterForProfile( ctx, profileAddress,options?): Promise<CharacterSnapshot>;Defined in: packages/sage/src/identity/index.ts:452
Derives and reads the Character associated with a known Player Profile.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
ctx | SageContext |
profileAddress | Address |
options? | ReadOptions |
Returns
Section titled “Returns”Promise<CharacterSnapshot>
Example
Section titled “Example”declare const ctx: SageContext;declare const profileAddress: Address;const character = await getCharacterForProfile(ctx, profileAddress);getCharacterProgressionForProfile()
Section titled “getCharacterProgressionForProfile()”function getCharacterProgressionForProfile( ctx, profileAddress,options?): Promise<CharacterProgressionSnapshot>;Defined in: packages/sage/src/identity/index.ts:371
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.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
ctx | SageContext |
profileAddress | Address |
options? | ReadOptions |
Returns
Section titled “Returns”Promise<CharacterProgressionSnapshot>
Example
Section titled “Example”declare const ctx: SageContext;declare const profileAddress: Address;const progression = await getCharacterProgressionForProfile(ctx, profileAddress);getCharactersForWallet()
Section titled “getCharactersForWallet()”function getCharactersForWallet( ctx, wallet,options): Promise<readonly CharacterSnapshot[]>;Defined in: packages/sage/src/identity/index.ts:639
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.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
ctx | SageContext |
wallet | Address |
options | WalletProfileDiscoveryOptions |
Returns
Section titled “Returns”Promise<readonly CharacterSnapshot[]>
Example
Section titled “Example”declare const ctx: SageContext;declare const wallet: Address;const characters = await getCharactersForWallet(ctx, wallet, { strategy: 'provider',});getProfile()
Section titled “getProfile()”function getProfile( ctx, address,options?): Promise<ProfileSnapshot>;Defined in: packages/sage/src/identity/index.ts:349
Reads a required Player Profile by account address.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
ctx | SageContext |
address | Address |
options? | ReadOptions |
Returns
Section titled “Returns”Promise<ProfileSnapshot>
Example
Section titled “Example”declare const ctx: SageContext;declare const profileAddress: Address;const profile = await getProfile(ctx, profileAddress);getProfilesForWallet()
Section titled “getProfilesForWallet()”function getProfilesForWallet( ctx, wallet,options): Promise<readonly ProfileSnapshot[]>;Defined in: packages/sage/src/identity/index.ts:511
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.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
ctx | SageContext |
wallet | Address |
options | WalletProfileDiscoveryOptions |
Returns
Section titled “Returns”Promise<readonly ProfileSnapshot[]>
Example
Section titled “Example”declare const ctx: SageContext;declare const wallet: Address;const profiles = await getProfilesForWallet(ctx, wallet, { strategy: 'provider',});getResearchCatalog()
Section titled “getResearchCatalog()”function getResearchCatalog(ctx): Promise<ResearchCatalogSnapshot>;Defined in: packages/sage/src/identity/index.ts:395
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.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
ctx | SageContext |
Returns
Section titled “Returns”Promise<ResearchCatalogSnapshot>
Example
Section titled “Example”declare const ctx: SageContext;const catalog = await getResearchCatalog(ctx);inspectProfileKeys()
Section titled “inspectProfileKeys()”function inspectProfileKeys(profile, requirement): readonly ProfileKeyInspection[];Defined in: packages/sage/src/identity/permissions.ts:221
Inspect every key against an exact scope, mask, direct signer and explicit time. No AUTH override, role/certificate delegation, threshold policy, RPC, wall clock, refresh or signer is used. All original indices remain visible; select an index explicitly for an existing planner and retain its freshness and simulation checks. Canonical expiresAtRaw controls expiry; negative values are permanent. A key remains unexpired at its exact expiry second and expires only when at is later.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
profile | ProfileSnapshot |
requirement | ProfileKeyRequirement |
Returns
Section titled “Returns”readonly ProfileKeyInspection[]
Example
Section titled “Example”declare const profile: ProfileSnapshot;declare const requirement: ProfileKeyRequirement;const candidates = inspectProfileKeys(profile, requirement);console.log(candidates.map(key => [key.keyIndex, key.status]));inspectProfilePermissions()
Section titled “inspectProfilePermissions()”function inspectProfilePermissions(scope, permissionsRaw): ProfilePermissionInspection;Defined in: packages/sage/src/identity/permissions.ts:143
Inspect known meanings without discarding unrecognized raw bits.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
scope | Address |
permissionsRaw | bigint |
Returns
Section titled “Returns”Example
Section titled “Example”const inspection = inspectProfilePermissions(PROFILE_PERMISSION_SCOPE, 1n);console.log(inspection.permissions, inspection.unrecognizedBitsRaw);maybeGetCharacterForProfile()
Section titled “maybeGetCharacterForProfile()”function maybeGetCharacterForProfile( ctx, profileAddress, options?): Promise< | CharacterSnapshot| undefined>;Defined in: packages/sage/src/identity/index.ts:475
Derives and optionally reads the Character for a known Player Profile.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
ctx | SageContext |
profileAddress | Address |
options? | ReadOptions |
Returns
Section titled “Returns”Promise<
| CharacterSnapshot
| undefined>
Example
Section titled “Example”declare const ctx: SageContext;declare const profileAddress: Address;const character = await maybeGetCharacterForProfile(ctx, profileAddress);maybeGetProfile()
Section titled “maybeGetProfile()”function maybeGetProfile( ctx, address,options?): Promise<ProfileSnapshot | undefined>;Defined in: packages/sage/src/identity/index.ts:430
Reads an optional Player Profile by account address.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
ctx | SageContext |
address | Address |
options? | ReadOptions |
Returns
Section titled “Returns”Promise<ProfileSnapshot | undefined>
Example
Section titled “Example”declare const ctx: SageContext;declare const profileAddress: Address;const profile = await maybeGetProfile(ctx, profileAddress);unionProfilePermissionMasks()
Section titled “unionProfilePermissionMasks()”function unionProfilePermissionMasks(masks): bigint;Defined in: packages/sage/src/identity/permissions.ts:99
Union exact raw masks, preserving unknown bits. Empty input returns zero. This is a pure bit operation. Callers must track the scope each mask belongs to; combining masks does not establish permission meanings or authorization.
Parameters
Section titled “Parameters”| Parameter | Type |
|---|---|
masks | readonly bigint[] |
Returns
Section titled “Returns”bigint
Example
Section titled “Example”const raw = unionProfilePermissionMasks([4n, 0n]);