# scanning
Documentation: next (source: develop).

Install the preview: `pnpm add @aephia/atlas-kit@next`. These docs follow develop and may include changes not yet published to npm.

Markdown source of https://develop.atlas-kit-docs.pages.dev/reference/scanning/ — see https://develop.atlas-kit-docs.pages.dev/ai/ for the full machine-readable surface.

## Interfaces

<a id="characterscanningstatesnapshot"></a>

### CharacterScanningStateSnapshot

Defined in: [packages/sage/src/scanning/index.ts:144](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L144)

Focused read-only scanning projection of one derived Character.

#### Example

```ts
declare const state: CharacterScanningStateSnapshot;
console.log(state.dataRunnerXp.level, state.modifiers.power.value);
```

#### Properties

<a id="character"></a>

##### character

```ts
readonly character: EntityRef<"character">;
```

Defined in: [packages/sage/src/scanning/index.ts:146](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L146)

<a id="datarunnerxp"></a>

##### dataRunnerXp

```ts
readonly dataRunnerXp: CharacterXpCategoryData & {
  sequenceId: number;
};
```

Defined in: [packages/sage/src/scanning/index.ts:148](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L148)

###### Type Declaration

###### sequenceId

```ts
readonly sequenceId: number;
```

<a id="kind"></a>

##### kind

```ts
readonly kind: "characterScanningState";
```

Defined in: [packages/sage/src/scanning/index.ts:145](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L145)

<a id="modifiers"></a>

##### modifiers

```ts
readonly modifiers: {
  cooldown: ScanFixedValueData;
  power: ScanFixedValueData;
  sequenceId: number;
};
```

Defined in: [packages/sage/src/scanning/index.ts:151](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L151)

###### cooldown

```ts
readonly cooldown: ScanFixedValueData;
```

###### power

```ts
readonly power: ScanFixedValueData;
```

###### sequenceId

```ts
readonly sequenceId: number;
```

<a id="profile"></a>

##### profile

```ts
readonly profile: EntityRef<"profile">;
```

Defined in: [packages/sage/src/scanning/index.ts:147](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L147)

<a id="researchtagids"></a>

##### researchTagIds

```ts
readonly researchTagIds: readonly number[];
```

Defined in: [packages/sage/src/scanning/index.ts:156](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L156)

#### Methods

<a id="tojson"></a>

##### toJSON()

```ts
toJSON(): unknown;
```

Defined in: [packages/sage/src/scanning/index.ts:157](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L157)

###### Returns

`unknown`

***

<a id="fleetscanningstatesnapshot"></a>

### FleetScanningStateSnapshot

Defined in: [packages/sage/src/scanning/index.ts:123](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L123)

Focused read-only scanning projection of one Fleet.

#### Example

```ts
declare const state: FleetScanningStateSnapshot;
console.log(state.stats.power, state.cooldownEndsAtUnixSeconds);
```

#### Properties

<a id="cooldownendsatunixseconds"></a>

##### cooldownEndsAtUnixSeconds

```ts
readonly cooldownEndsAtUnixSeconds: bigint;
```

Defined in: [packages/sage/src/scanning/index.ts:127](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L127)

<a id="fleet"></a>

##### fleet

```ts
readonly fleet: EntityRef<"fleet">;
```

Defined in: [packages/sage/src/scanning/index.ts:125](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L125)

<a id="kind-1"></a>

##### kind

```ts
readonly kind: "fleetScanningState";
```

Defined in: [packages/sage/src/scanning/index.ts:124](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L124)

<a id="ownerprofile"></a>

##### ownerProfile

```ts
readonly ownerProfile: EntityRef<"profile">;
```

Defined in: [packages/sage/src/scanning/index.ts:126](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L126)

<a id="stats"></a>

##### stats

```ts
readonly stats: {
  bonus: number;
  cooldownSeconds: number;
  cost: number;
  power: number;
};
```

Defined in: [packages/sage/src/scanning/index.ts:128](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L128)

###### bonus

```ts
readonly bonus: number;
```

###### cooldownSeconds

```ts
readonly cooldownSeconds: number;
```

###### cost

```ts
readonly cost: number;
```

###### power

```ts
readonly power: number;
```

#### Methods

<a id="tojson-1"></a>

##### toJSON()

```ts
toJSON(): unknown;
```

Defined in: [packages/sage/src/scanning/index.ts:134](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L134)

###### Returns

`unknown`

***

<a id="scanexhaustion"></a>

### ScanExhaustion

Defined in: [packages/sage/src/scanning/odds.ts:128](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/odds.ts#L128)

Client-derived exhaustion from an explicit clock and retained recovery history.

#### Example

```ts
declare const exhaustion: ScanExhaustion;
console.log(exhaustion.exhaustionBasisPoints, exhaustion.effectiveRecoveries);
```

#### Properties

<a id="effectiverecoveries"></a>

##### effectiveRecoveries

```ts
readonly effectiveRecoveries: number;
```

Defined in: [packages/sage/src/scanning/odds.ts:131](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/odds.ts#L131)

<a id="exhaustionbasispoints"></a>

##### exhaustionBasisPoints

```ts
readonly exhaustionBasisPoints: number;
```

Defined in: [packages/sage/src/scanning/odds.ts:130](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/odds.ts#L130)

<a id="kind-2"></a>

##### kind

```ts
readonly kind: "client-derived-estimate";
```

Defined in: [packages/sage/src/scanning/odds.ts:129](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/odds.ts#L129)

#### Methods

<a id="tojson-2"></a>

##### toJSON()

```ts
toJSON(): unknown;
```

Defined in: [packages/sage/src/scanning/odds.ts:132](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/odds.ts#L132)

###### Returns

`unknown`

***

<a id="scanlootoddsoptions"></a>

### ScanLootOddsOptions

Defined in: [packages/sage/src/scanning/odds.ts:84](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/odds.ts#L84)

Explicit eligibility knowledge for prospective client estimates. Empty tag arrays mean known none.
Regional requirements must describe the supplied loot profile's region. Focus defaults to any.

#### Example

```ts
const options: ScanLootOddsOptions = { unlockedResearchTagIds: [12], requiredRegionResearchTagIds: [], exhaustionBasisPoints: 0 };
```

#### Properties

<a id="exhaustionbasispoints-1"></a>

##### exhaustionBasisPoints

```ts
readonly exhaustionBasisPoints: number;
```

Defined in: [packages/sage/src/scanning/odds.ts:87](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/odds.ts#L87)

<a id="focus"></a>

##### focus?

```ts
readonly optional focus?: "any" | "industrial" | "technology" | "tactical" | "exotic";
```

Defined in: [packages/sage/src/scanning/odds.ts:88](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/odds.ts#L88)

<a id="requiredregionresearchtagids"></a>

##### requiredRegionResearchTagIds

```ts
readonly requiredRegionResearchTagIds: readonly number[];
```

Defined in: [packages/sage/src/scanning/odds.ts:86](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/odds.ts#L86)

<a id="unlockedresearchtagids"></a>

##### unlockedResearchTagIds

```ts
readonly unlockedResearchTagIds: readonly number[];
```

Defined in: [packages/sage/src/scanning/odds.ts:85](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/odds.ts#L85)

***

<a id="scanpatterncost"></a>

### ScanPatternCost

Defined in: [packages/sage/src/scanning/index.ts:68](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L68)

One cargo-backed scan cost.

#### Example

```ts
declare const cost: ScanPatternCost;
console.log(cost.cargo.name, cost.multiplier.value);
```

#### Properties

<a id="cargo"></a>

##### cargo

```ts
readonly cargo: CargoDefinitionSummary;
```

Defined in: [packages/sage/src/scanning/index.ts:69](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L69)

<a id="multiplier"></a>

##### multiplier

```ts
readonly multiplier: ScanFixedValueData;
```

Defined in: [packages/sage/src/scanning/index.ts:70](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L70)

***

<a id="scanpatternlootoutcome"></a>

### ScanPatternLootOutcome

Defined in: [packages/sage/src/scanning/index.ts:80](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L80)

One cargo-backed scan outcome and its research-tag requirements.

#### Example

```ts
declare const outcome: ScanPatternLootOutcome;
console.log(outcome.output.name, outcome.researchRequirementTagIds);
```

#### Properties

<a id="output"></a>

##### output

```ts
readonly output: CargoDefinitionSummary;
```

Defined in: [packages/sage/src/scanning/index.ts:81](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L81)

<a id="outputamountraw"></a>

##### outputAmountRaw

```ts
readonly outputAmountRaw: bigint;
```

Defined in: [packages/sage/src/scanning/index.ts:82](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L82)

<a id="researchrequirementtagids"></a>

##### researchRequirementTagIds

```ts
readonly researchRequirementTagIds: readonly number[];
```

Defined in: [packages/sage/src/scanning/index.ts:86](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L86)

<a id="rollweight"></a>

##### rollWeight

```ts
readonly rollWeight: ScanFixedValueData;
```

Defined in: [packages/sage/src/scanning/index.ts:84](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L84)

<a id="threshold"></a>

##### threshold

```ts
readonly threshold: ScanFixedValueData;
```

Defined in: [packages/sage/src/scanning/index.ts:83](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L83)

<a id="xpvalue"></a>

##### xpValue

```ts
readonly xpValue: ScanFixedValueData;
```

Defined in: [packages/sage/src/scanning/index.ts:85](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L85)

***

<a id="scanpatternsnapshot"></a>

### ScanPatternSnapshot

Defined in: [packages/sage/src/scanning/index.ts:96](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L96)

Immutable, definition-resolved ScanPattern catalog entry.

#### Example

```ts
declare const pattern: ScanPatternSnapshot;
console.log(pattern.name, pattern.loot.length);
```

#### Properties

<a id="address"></a>

##### address

```ts
readonly address: Address;
```

Defined in: [packages/sage/src/scanning/index.ts:98](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L98)

<a id="blankweight"></a>

##### blankWeight

```ts
readonly blankWeight: ScanFixedValueData;
```

Defined in: [packages/sage/src/scanning/index.ts:105](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L105)

<a id="blankxpvalue"></a>

##### blankXpValue

```ts
readonly blankXpValue: ScanFixedValueData;
```

Defined in: [packages/sage/src/scanning/index.ts:106](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L106)

<a id="bump"></a>

##### bump

```ts
readonly bump: number;
```

Defined in: [packages/sage/src/scanning/index.ts:100](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L100)

<a id="cooldownmultiplier"></a>

##### cooldownMultiplier

```ts
readonly cooldownMultiplier: ScanFixedValueData;
```

Defined in: [packages/sage/src/scanning/index.ts:104](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L104)

<a id="costs"></a>

##### costs

```ts
readonly costs: readonly ScanPatternCost[];
```

Defined in: [packages/sage/src/scanning/index.ts:108](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L108)

<a id="game"></a>

##### game

```ts
readonly game: EntityRef<"game">;
```

Defined in: [packages/sage/src/scanning/index.ts:103](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L103)

<a id="id"></a>

##### id

```ts
readonly id: number;
```

Defined in: [packages/sage/src/scanning/index.ts:101](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L101)

<a id="kind-3"></a>

##### kind

```ts
readonly kind: "scanPattern";
```

Defined in: [packages/sage/src/scanning/index.ts:97](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L97)

<a id="loot"></a>

##### loot

```ts
readonly loot: readonly ScanPatternLootOutcome[];
```

Defined in: [packages/sage/src/scanning/index.ts:109](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L109)

<a id="name"></a>

##### name

```ts
readonly name: string;
```

Defined in: [packages/sage/src/scanning/index.ts:102](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L102)

<a id="noisemapcount"></a>

##### noiseMapCount

```ts
readonly noiseMapCount: number;
```

Defined in: [packages/sage/src/scanning/index.ts:112](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L112)

How many noise-map rows the pattern stores. The rows are opaque program
data: Atlas Kit does not interpret them and offers no way to.

<a id="status"></a>

##### status

```ts
readonly status: "active" | "draft" | "removed";
```

Defined in: [packages/sage/src/scanning/index.ts:107](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L107)

<a id="version"></a>

##### version

```ts
readonly version: number;
```

Defined in: [packages/sage/src/scanning/index.ts:99](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L99)

#### Methods

<a id="tojson-3"></a>

##### toJSON()

```ts
toJSON(): unknown;
```

Defined in: [packages/sage/src/scanning/index.ts:113](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L113)

###### Returns

`unknown`

***

<a id="scansignalclock"></a>

### ScanSignalClock

Defined in: [packages/sage/src/scanning/lifecycle.ts:16](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/lifecycle.ts#L16)

Explicit chain clock inputs; slots and Unix seconds are independent units.

#### Example

```ts
const clock: ScanSignalClock = { slot: 54_000_000n, unixSeconds: 1_790_000_000n };
```

#### Properties

<a id="slot"></a>

##### slot

```ts
readonly slot: bigint;
```

Defined in: [packages/sage/src/scanning/lifecycle.ts:17](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/lifecycle.ts#L17)

<a id="unixseconds"></a>

##### unixSeconds

```ts
readonly unixSeconds: bigint;
```

Defined in: [packages/sage/src/scanning/lifecycle.ts:18](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/lifecycle.ts#L18)

***

<a id="scansignaltiming"></a>

### ScanSignalTiming

Defined in: [packages/sage/src/scanning/lifecycle.ts:27](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/lifecycle.ts#L27)

Timing observations from the fingerprinted client, not permission to execute a scan action.

#### Example

```ts
declare const result: ScanSignalTiming;
console.log(result.entropy?.phase, result.cooldownRemainingSeconds);
```

#### Properties

<a id="contactexpiry"></a>

##### contactExpiry

```ts
readonly contactExpiry: 
  | Readonly<{
  expired: boolean;
  remainingSeconds: bigint;
}>
  | undefined;
```

Defined in: [packages/sage/src/scanning/lifecycle.ts:38](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/lifecycle.ts#L38)

<a id="cooldownremainingseconds"></a>

##### cooldownRemainingSeconds

```ts
readonly cooldownRemainingSeconds: bigint;
```

Defined in: [packages/sage/src/scanning/lifecycle.ts:29](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/lifecycle.ts#L29)

<a id="entropy"></a>

##### entropy

```ts
readonly entropy: 
  | Readonly<{
  deadlineSlot: bigint;
  phase: "expired" | "ready" | "waiting";
  readyAtSlot: bigint;
  slotsUntilReady: bigint;
}>
  | undefined;
```

Defined in: [packages/sage/src/scanning/lifecycle.ts:30](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/lifecycle.ts#L30)

<a id="status-1"></a>

##### status

```ts
readonly status: 
  | "expired"
  | "absent"
  | "empty"
  | "pending-entropy"
  | "contact"
  | "no-contact"
  | "recovered"
  | "abandoned";
```

Defined in: [packages/sage/src/scanning/lifecycle.ts:28](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/lifecycle.ts#L28)

#### Methods

<a id="tojson-4"></a>

##### toJSON()

```ts
toJSON(): unknown;
```

Defined in: [packages/sage/src/scanning/lifecycle.ts:40](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/lifecycle.ts#L40)

###### Returns

`unknown`

## Type Aliases

<a id="scancooldownstate"></a>

### ScanCooldownState

```ts
type ScanCooldownState = 
  | {
  kind: "ready";
}
  | {
  kind: "cooldown";
  remainingSeconds: bigint;
};
```

Defined in: [packages/sage/src/scanning/index.ts:170](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L170)

Pure Fleet cooldown state at one explicit Unix timestamp.

#### Example

```ts
declare const fleet: FleetScanningStateSnapshot;
const state: ScanCooldownState = deriveScanCooldownState(
  fleet,
  1_700_000_000n,
);
```

***

<a id="scancoordinates"></a>

### ScanCoordinates

```ts
type ScanCoordinates = Immutable<ScanPointData>;
```

Defined in: [packages/sage/src/scanning/signals.ts:51](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/signals.ts#L51)

Coordinates in map units, with exact signed I8F56 storage retained per axis.

#### Example

```ts
declare const point: ScanCoordinates;
console.log(point.x.value, point.x.raw);
```

***

<a id="scanfixedvalue"></a>

### ScanFixedValue

```ts
type ScanFixedValue = ScanFixedValueData;
```

Defined in: [packages/sage/src/scanning/index.ts:48](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L48)

Fixed-point scanning value with exact raw storage.

#### Example

```ts
const value: ScanFixedValue = { raw: 65_536n, value: 1 };
```

***

<a id="scanlootodds"></a>

### ScanLootOdds

```ts
type ScanLootOdds = Readonly<{
  basis: "prospective" | "committed";
  kind: "client-derived-estimate";
  provenance: Provenance;
  toJSON: unknown;
}> & 
  | Readonly<{
  reasons: readonly UnavailableReason[];
  status: "unavailable";
}>
  | Readonly<{
  contactChanceBasisPoints: number;
  contactProbability: number;
  eligibleRows: readonly Share & Readonly<{
     rowIndex: ...;
  }>[];
  excludedRows: readonly Readonly<{
     reasons: readonly ...[];
     rowIndex: number;
  }>[];
  noContactProbability: number;
  resources: readonly Share[];
  status: "available";
  totalWeight: bigint;
}>;
```

Defined in: [packages/sage/src/scanning/odds.ts:99](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/odds.ts#L99)

Client-derived selection estimates, never program-verified probabilities or recovery quantities.
Unavailable results deliberately contain no probability fields. Conditional shares remain meaningful
when contact probability is zero. Probabilities are numeric fractions from zero through one.

#### Example

```ts
declare const odds: ScanLootOdds;
if (odds.status === 'available') console.log(odds.resources[0]?.perScanProbability);
```

***

<a id="scanlootprofilesnapshot"></a>

### ScanLootProfileSnapshot

```ts
type ScanLootProfileSnapshot = Immutable<Base<Omit<ScanLootProfileData, "loot">> & {
  kind: "scanLootProfile";
  loot: readonly CargoRow<ScanLootProfileData["loot"][number]>[];
}>;
```

Defined in: [packages/sage/src/scanning/signals.ts:111](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/signals.ts#L111)

Regional loot configuration, not a reward forecast. Weights are relative integers.
Pattern eligibility is translated to IDs; opaque quantity modes remain unprojected.

#### Example

```ts
declare const profile: ScanLootProfileSnapshot;
console.log(profile.regionId, profile.loot[0]?.cargo.name);
```

***

<a id="scanpatterndiscoveryoptions"></a>

### ScanPatternDiscoveryOptions

```ts
type ScanPatternDiscoveryOptions = Omit<DiscoveryRequest, "filters" | "strategy">;
```

Defined in: [packages/sage/src/scanning/index.ts:56](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L56)

Options supported by targeted ScanPattern catalog discovery.

#### Example

```ts
const options: ScanPatternDiscoveryOptions = { commitment: 'confirmed' };
```

***

<a id="scanpatternpolicysnapshot"></a>

### ScanPatternPolicySnapshot

```ts
type ScanPatternPolicySnapshot = Immutable<Base<ScanPatternPolicyData> & {
  kind: "scanPatternPolicy";
}>;
```

Defined in: [packages/sage/src/scanning/signals.ts:100](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/signals.ts#L100)

Current scan policy parameters. Basis points use 10,000 = 100%; XP stays exact raw units.
Value budgets and permitted focus categories support client-derived estimates.

#### Example

```ts
declare const policy: ScanPatternPolicySnapshot;
console.log(policy.strategy, policy.signalLifetimeSeconds);
```

***

<a id="scanrecoveryrange"></a>

### ScanRecoveryRange

```ts
type ScanRecoveryRange = 
  | Readonly<{
  kind: "no-contact";
}>
  | Readonly<{
  distanceSquaredRaw: bigint;
  kind: "contact";
  radiusSquaredRaw: bigint;
  withinRange: boolean;
}> & {
  toJSON: unknown;
};
```

Defined in: [packages/sage/src/scanning/lifecycle.ts:50](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/lifecycle.ts#L50)

Exact geometric comparison; squared raw values use a 2^112 scale, not map units.
No-contact means geometry is unavailable, not that an action is allowed.

#### Type Declaration

##### toJSON()

```ts
toJSON(): unknown;
```

###### Returns

`unknown`

#### Example

```ts
declare const result: ScanRecoveryRange;
if (result.kind === 'contact') console.log(result.withinRange);
```

***

<a id="scansignalsnapshot"></a>

### ScanSignalSnapshot

```ts
type ScanSignalSnapshot = Immutable<Base<Omit<ScanSignalData, 
  | "fleet"
  | "ownerProfile"
  | "ownerCharacter"
  | "contact"
  | "receipt"
  | "attempt"
  | "noContact"
  | "ended">> & {
  attempt: NonNullable<ScanSignalData["attempt"]> | undefined;
  contact:   | CargoRow<NonNullable<ScanSignalData["contact"]>>
     | undefined;
  ended: NonNullable<ScanSignalData["ended"]> | undefined;
  fleet: EntityRef<"fleet">;
  kind: "scanSignal";
  noContact: NonNullable<ScanSignalData["noContact"]> | undefined;
  ownerCharacter: EntityRef<"character">;
  ownerProfile: EntityRef<"profile">;
  receipt:   | CargoRow<NonNullable<ScanSignalData["receipt"]>>
     | undefined;
}>;
```

Defined in: [packages/sage/src/scanning/signals.ts:67](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/signals.ts#L67)

Fleet signal snapshot. Empty signals have no attempt, contact or receipt.
Contact/recovered cargo is resolved only for that state; no-contact has its own XP receipt.

#### Example

```ts
declare const signal: ScanSignalSnapshot;
console.log(signal.status, signal.contact?.cargo.name);
```

***

<a id="scansignalstatus"></a>

### ScanSignalStatus

```ts
type ScanSignalStatus = ScanSignalData["status"];
```

Defined in: [packages/sage/src/scanning/signals.ts:58](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/signals.ts#L58)

Observed signal lifecycle state; it does not predict transition eligibility.

#### Example

```ts
const status: ScanSignalStatus = 'pending-entropy';
```

## Functions

<a id="derivecommittedscanlootodds"></a>

### deriveCommittedScanLootOdds()

```ts
function deriveCommittedScanLootOdds(
   signal, 
   policy, 
   profile): ScanLootOdds;
```

Defined in: [packages/sage/src/scanning/odds.ts:365](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/odds.ts#L365)

Estimates a pending signal's recorded draw using its committed rows and contact chance.
Revisions AND full fingerprints must match. Current activity, focus and research do not
replace committed eligibility; terminal signals are not random forecasts.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `signal` | \| \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `attempt`: \| \{ `commitSlot`: `bigint`; `contactChanceBasisPoints`: `number`; `detectedAtUnixSeconds`: `bigint`; `eligibleLootRowIndexes`: readonly `number`[]; `exhaustionBasisPoints`: `number`; `focus`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`; `location`: \{ `x`: \{ `raw`: `bigint`; `value`: `number`; \}; `y`: \{ `raw`: `bigint`; `value`: `number`; \}; \}; `lootProfileContentFingerprint`: `string`; `lootProfileRevision`: `number`; `patternId`: `number`; `policyContentFingerprint`: `string`; `policyRevision`: `number`; `regionId`: `number`; `revealSlots`: readonly `bigint`[]; \} \| `undefined`; `contact`: \| \{ `baseQuantityRaw`: `bigint`; `cargo`: \{ `categoryId`: `number`; `id`: `number`; `mint`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `name`: `string`; `storageCost`: `number`; \}; `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`; `expiresAtUnixSeconds`: `bigint`; `nominalQuantityRaw`: `bigint`; `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`; `target`: \{ `x`: \{ `raw`: `bigint`; `value`: `number`; \}; `y`: \{ `raw`: `bigint`; `value`: `number`; \}; \}; `targetRadius`: \{ `raw`: `bigint`; `value`: `number`; \}; \} \| `undefined`; `cooldownEndsAtUnixSeconds`: `bigint`; `ended`: \| \{ `expiresAtUnixSeconds`: `bigint`; `terminalAtUnixSeconds`: `bigint`; \} \| `undefined`; `fleet`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"fleet"`; \}; `game`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"game"`; \}; `kind`: `"scanSignal"`; `noContact`: \| \{ `resolvedAtUnixSeconds`: `bigint`; `terminalAtUnixSeconds`: `bigint`; `xpAwardedRaw`: `bigint`; \} \| `undefined`; `ownerCharacter`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"character"`; \}; `ownerProfile`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"profile"`; \}; `receipt`: \| \{ `acceptedQuantityRaw`: `bigint`; `cargo`: \{ `categoryId`: `number`; `id`: `number`; `mint`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `name`: `string`; `storageCost`: `number`; \}; `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`; `clippedQuantityRaw`: `bigint`; `nominalQuantityRaw`: `bigint`; `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`; `resolvedAtUnixSeconds`: `bigint`; `terminalAtUnixSeconds`: `bigint`; `xpAwardedRaw`: `bigint`; \} \| `undefined`; `recoveryHistory`: \{ `consecutiveRecoveries`: `number`; `lastRecoveryAtUnixSeconds`: `bigint`; `lastRegionId`: `number`; \}; `sequence`: `bigint`; `status`: \| `"expired"` \| `"empty"` \| `"pending-entropy"` \| `"contact"` \| `"no-contact"` \| `"recovered"` \| `"abandoned"`; `version`: `number`; `toJSON`: `unknown`; \} \| `undefined` |
| `policy` | \| \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `allowedFocusCategories`: readonly (`"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`)[]; `contactChanceBasisPoints`: `number`; `contentFingerprint`: `string`; `exhaustionDecaySeconds`: `number`; `exhaustionPerRecoveryBasisPoints`: `number`; `game`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"game"`; \}; `kind`: `"scanPatternPolicy"`; `maximumExhaustionBasisPoints`: `number`; `maximumRarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`; `noContactXpRaw`: `bigint`; `patternId`: `number`; `recoveryXpRaw`: `bigint`; `requiredResearchTagIds`: readonly `number`[]; `revision`: `number`; `signalLifetimeSeconds`: `number`; `status`: `"active"` \| `"draft"` \| `"removed"`; `strategy`: `"broad"` \| `"focused"` \| `"enhanced"` \| `"deep"` \| `"spatial"`; `targetRadius`: \{ `raw`: `bigint`; `value`: `number`; \}; `valueBudgetRaw`: `bigint`; `version`: `number`; `toJSON`: `unknown`; \} \| `undefined` |
| `profile` | \| \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `anchors`: readonly \{ `x`: \{ `raw`: `bigint`; `value`: `number`; \}; `y`: \{ `raw`: `bigint`; `value`: `number`; \}; \}[]; `contentFingerprint`: `string`; `game`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"game"`; \}; `kind`: `"scanLootProfile"`; `loot`: readonly \{ `baseQuantityRaw`: `bigint`; `cargo`: \{ `categoryId`: `number`; `id`: `number`; `mint`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `name`: `string`; `storageCost`: `number`; \}; `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`; `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`; `requiredResearchTagIds`: readonly `number`[]; `rollWeight`: `number`; `supportedPatternIds`: readonly `number`[]; `valueUnits`: `number`; \}[]; `regionId`: `number`; `revision`: `number`; `riskValueMultiplierBasisPoints`: `number`; `status`: `"active"` \| `"draft"` \| `"removed"`; `version`: `number`; `toJSON`: `unknown`; \} \| `undefined` |

#### Returns

[`ScanLootOdds`](/reference/scanning/#scanlootodds)

#### Example

```ts
declare const signal: ScanSignalSnapshot, policy: ScanPatternPolicySnapshot, loot: ScanLootProfileSnapshot;
const odds = deriveCommittedScanLootOdds(signal, policy, loot);
```

***

<a id="derivescancooldownstate"></a>

### deriveScanCooldownState()

```ts
function deriveScanCooldownState(fleet, atUnixSeconds): ScanCooldownState;
```

Defined in: [packages/sage/src/scanning/index.ts:460](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L460)

Derives whether a Fleet scan cooldown is ready at an explicit timestamp.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `fleet` | [`FleetScanningStateSnapshot`](/reference/scanning/#fleetscanningstatesnapshot) |
| `atUnixSeconds` | `bigint` |

#### Returns

[`ScanCooldownState`](/reference/scanning/#scancooldownstate)

#### Example

```ts
declare const fleet: FleetScanningStateSnapshot;
const state = deriveScanCooldownState(fleet, 1_700_000_000n);
```

***

<a id="derivescanexhaustion"></a>

### deriveScanExhaustion()

```ts
function deriveScanExhaustion(
   policy, 
   signal, 
   options): ScanExhaustion;
```

Defined in: [packages/sage/src/scanning/odds.ts:447](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/odds.ts#L447)

Applies the client exhaustion decay rule with explicit region and Unix seconds, without clock reads.
An absent signal means known absence of recovery history, not an unknown/unread signal.
Another region, disabled decay or a clock before the last recovery produce zero exhaustion.

#### Parameters

| Parameter | Type | Description |
| ------ | ------ | ------ |
| `policy` | \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `allowedFocusCategories`: readonly (`"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`)[]; `contactChanceBasisPoints`: `number`; `contentFingerprint`: `string`; `exhaustionDecaySeconds`: `number`; `exhaustionPerRecoveryBasisPoints`: `number`; `game`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"game"`; \}; `kind`: `"scanPatternPolicy"`; `maximumExhaustionBasisPoints`: `number`; `maximumRarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`; `noContactXpRaw`: `bigint`; `patternId`: `number`; `recoveryXpRaw`: `bigint`; `requiredResearchTagIds`: readonly `number`[]; `revision`: `number`; `signalLifetimeSeconds`: `number`; `status`: `"active"` \| `"draft"` \| `"removed"`; `strategy`: `"broad"` \| `"focused"` \| `"enhanced"` \| `"deep"` \| `"spatial"`; `targetRadius`: \{ `raw`: `bigint`; `value`: `number`; \}; `valueBudgetRaw`: `bigint`; `version`: `number`; `toJSON`: `unknown`; \} | - |
| `policy.address` | \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \} | - |
| `policy.address.__brand:@solana/kit` | `"Address"` | - |
| `policy.address.__stringEncoding:@solana/kit` | `"base58"` | - |
| `policy.address.length` | `number` | Returns the length of a String object. |
| `policy.address.[iterator]` | - |
| `policy.address.anchor` | - |
| `policy.address.at` | - |
| `policy.address.big` | - |
| `policy.address.blink` | - |
| `policy.address.bold` | - |
| `policy.address.charAt` | - |
| `policy.address.charCodeAt` | - |
| `policy.address.codePointAt` | - |
| `policy.address.concat` | - |
| `policy.address.endsWith` | - |
| `policy.address.fixed` | - |
| `policy.address.fontcolor` | - |
| `policy.address.fontsize` | - |
| `policy.address.includes` | - |
| `policy.address.indexOf` | - |
| `policy.address.italics` | - |
| `policy.address.lastIndexOf` | - |
| `policy.address.link` | - |
| `policy.address.localeCompare` | - |
| `policy.address.match` | - |
| `policy.address.matchAll` | - |
| `policy.address.normalize` | - |
| `policy.address.padEnd` | - |
| `policy.address.padStart` | - |
| `policy.address.repeat` | - |
| `policy.address.replace` | - |
| `policy.address.replaceAll` | - |
| `policy.address.search` | - |
| `policy.address.slice` | - |
| `policy.address.small` | - |
| `policy.address.split` | - |
| `policy.address.startsWith` | - |
| `policy.address.strike` | - |
| `policy.address.sub` | - |
| `policy.address.substr` | - |
| `policy.address.substring` | - |
| `policy.address.sup` | - |
| `policy.address.toLocaleLowerCase` | - |
| `policy.address.toLocaleUpperCase` | - |
| `policy.address.toLowerCase` | - |
| `policy.address.toString` | - |
| `policy.address.toUpperCase` | - |
| `policy.address.trim` | - |
| `policy.address.trimEnd` | - |
| `policy.address.trimLeft` | - |
| `policy.address.trimRight` | - |
| `policy.address.trimStart` | - |
| `policy.address.valueOf` | - |
| `policy.allowedFocusCategories` | readonly (`"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`)[] | - |
| `policy.contactChanceBasisPoints` | `number` | - |
| `policy.contentFingerprint` | `string` | - |
| `policy.exhaustionDecaySeconds` | `number` | - |
| `policy.exhaustionPerRecoveryBasisPoints` | `number` | - |
| `policy.game` | \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"game"`; \} | - |
| `policy.game.address` | \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \} | - |
| `policy.game.address.__brand:@solana/kit` | `"Address"` | - |
| `policy.game.address.__stringEncoding:@solana/kit` | `"base58"` | - |
| `policy.game.address.length` | `number` | Returns the length of a String object. |
| `policy.game.address.[iterator]` | - |
| `policy.game.address.anchor` | - |
| `policy.game.address.at` | - |
| `policy.game.address.big` | - |
| `policy.game.address.blink` | - |
| `policy.game.address.bold` | - |
| `policy.game.address.charAt` | - |
| `policy.game.address.charCodeAt` | - |
| `policy.game.address.codePointAt` | - |
| `policy.game.address.concat` | - |
| `policy.game.address.endsWith` | - |
| `policy.game.address.fixed` | - |
| `policy.game.address.fontcolor` | - |
| `policy.game.address.fontsize` | - |
| `policy.game.address.includes` | - |
| `policy.game.address.indexOf` | - |
| `policy.game.address.italics` | - |
| `policy.game.address.lastIndexOf` | - |
| `policy.game.address.link` | - |
| `policy.game.address.localeCompare` | - |
| `policy.game.address.match` | - |
| `policy.game.address.matchAll` | - |
| `policy.game.address.normalize` | - |
| `policy.game.address.padEnd` | - |
| `policy.game.address.padStart` | - |
| `policy.game.address.repeat` | - |
| `policy.game.address.replace` | - |
| `policy.game.address.replaceAll` | - |
| `policy.game.address.search` | - |
| `policy.game.address.slice` | - |
| `policy.game.address.small` | - |
| `policy.game.address.split` | - |
| `policy.game.address.startsWith` | - |
| `policy.game.address.strike` | - |
| `policy.game.address.sub` | - |
| `policy.game.address.substr` | - |
| `policy.game.address.substring` | - |
| `policy.game.address.sup` | - |
| `policy.game.address.toLocaleLowerCase` | - |
| `policy.game.address.toLocaleUpperCase` | - |
| `policy.game.address.toLowerCase` | - |
| `policy.game.address.toString` | - |
| `policy.game.address.toUpperCase` | - |
| `policy.game.address.trim` | - |
| `policy.game.address.trimEnd` | - |
| `policy.game.address.trimLeft` | - |
| `policy.game.address.trimRight` | - |
| `policy.game.address.trimStart` | - |
| `policy.game.address.valueOf` | - |
| `policy.game.type` | `"game"` | - |
| `policy.kind` | `"scanPatternPolicy"` | - |
| `policy.maximumExhaustionBasisPoints` | `number` | - |
| `policy.maximumRarity` | `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"` | - |
| `policy.noContactXpRaw` | `bigint` | - |
| `policy.patternId` | `number` | - |
| `policy.recoveryXpRaw` | `bigint` | - |
| `policy.requiredResearchTagIds` | readonly `number`[] | - |
| `policy.revision` | `number` | - |
| `policy.signalLifetimeSeconds` | `number` | - |
| `policy.status` | `"active"` \| `"draft"` \| `"removed"` | - |
| `policy.strategy` | `"broad"` \| `"focused"` \| `"enhanced"` \| `"deep"` \| `"spatial"` | - |
| `policy.targetRadius` | \{ `raw`: `bigint`; `value`: `number`; \} | - |
| `policy.targetRadius.raw` | `bigint` | - |
| `policy.targetRadius.value` | `number` | - |
| `policy.valueBudgetRaw` | `bigint` | - |
| `policy.version` | `number` | - |
| `policy.toJSON` | - |
| `signal` | \| \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `attempt`: \| \{ `commitSlot`: `bigint`; `contactChanceBasisPoints`: `number`; `detectedAtUnixSeconds`: `bigint`; `eligibleLootRowIndexes`: readonly `number`[]; `exhaustionBasisPoints`: `number`; `focus`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`; `location`: \{ `x`: \{ `raw`: `bigint`; `value`: `number`; \}; `y`: \{ `raw`: `bigint`; `value`: `number`; \}; \}; `lootProfileContentFingerprint`: `string`; `lootProfileRevision`: `number`; `patternId`: `number`; `policyContentFingerprint`: `string`; `policyRevision`: `number`; `regionId`: `number`; `revealSlots`: readonly `bigint`[]; \} \| `undefined`; `contact`: \| \{ `baseQuantityRaw`: `bigint`; `cargo`: \{ `categoryId`: `number`; `id`: `number`; `mint`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `name`: `string`; `storageCost`: `number`; \}; `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`; `expiresAtUnixSeconds`: `bigint`; `nominalQuantityRaw`: `bigint`; `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`; `target`: \{ `x`: \{ `raw`: `bigint`; `value`: `number`; \}; `y`: \{ `raw`: `bigint`; `value`: `number`; \}; \}; `targetRadius`: \{ `raw`: `bigint`; `value`: `number`; \}; \} \| `undefined`; `cooldownEndsAtUnixSeconds`: `bigint`; `ended`: \| \{ `expiresAtUnixSeconds`: `bigint`; `terminalAtUnixSeconds`: `bigint`; \} \| `undefined`; `fleet`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"fleet"`; \}; `game`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"game"`; \}; `kind`: `"scanSignal"`; `noContact`: \| \{ `resolvedAtUnixSeconds`: `bigint`; `terminalAtUnixSeconds`: `bigint`; `xpAwardedRaw`: `bigint`; \} \| `undefined`; `ownerCharacter`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"character"`; \}; `ownerProfile`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"profile"`; \}; `receipt`: \| \{ `acceptedQuantityRaw`: `bigint`; `cargo`: \{ `categoryId`: `number`; `id`: `number`; `mint`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `name`: `string`; `storageCost`: `number`; \}; `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`; `clippedQuantityRaw`: `bigint`; `nominalQuantityRaw`: `bigint`; `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`; `resolvedAtUnixSeconds`: `bigint`; `terminalAtUnixSeconds`: `bigint`; `xpAwardedRaw`: `bigint`; \} \| `undefined`; `recoveryHistory`: \{ `consecutiveRecoveries`: `number`; `lastRecoveryAtUnixSeconds`: `bigint`; `lastRegionId`: `number`; \}; `sequence`: `bigint`; `status`: \| `"expired"` \| `"empty"` \| `"pending-entropy"` \| `"contact"` \| `"no-contact"` \| `"recovered"` \| `"abandoned"`; `version`: `number`; `toJSON`: `unknown`; \} \| `undefined` | - |
| `options` | `Readonly`\<\{ `regionId`: `number`; `unixSeconds`: `bigint`; \}\> | - |

#### Returns

[`ScanExhaustion`](/reference/scanning/#scanexhaustion)

#### Example

```ts
declare const policy: ScanPatternPolicySnapshot, signal: ScanSignalSnapshot | undefined;
const exhaustion = deriveScanExhaustion(policy, signal, { regionId: 3, unixSeconds: 1_790_000_000n });
```

***

<a id="derivescanlootodds"></a>

### deriveScanLootOdds()

```ts
function deriveScanLootOdds(
   policy, 
   profile, 
   options): ScanLootOdds;
```

Defined in: [packages/sage/src/scanning/odds.ts:286](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/odds.ts#L286)

Estimates prospective contact and cargo-selection odds using the fingerprinted client's eligibility rules.
Requires explicit research and exhaustion knowledge. This is not full scan-launch readiness:
permissions, costs, Fleet state, cooldown, target and recovery capacity are outside this calculation.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `policy` | \| \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `allowedFocusCategories`: readonly (`"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`)[]; `contactChanceBasisPoints`: `number`; `contentFingerprint`: `string`; `exhaustionDecaySeconds`: `number`; `exhaustionPerRecoveryBasisPoints`: `number`; `game`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"game"`; \}; `kind`: `"scanPatternPolicy"`; `maximumExhaustionBasisPoints`: `number`; `maximumRarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`; `noContactXpRaw`: `bigint`; `patternId`: `number`; `recoveryXpRaw`: `bigint`; `requiredResearchTagIds`: readonly `number`[]; `revision`: `number`; `signalLifetimeSeconds`: `number`; `status`: `"active"` \| `"draft"` \| `"removed"`; `strategy`: `"broad"` \| `"focused"` \| `"enhanced"` \| `"deep"` \| `"spatial"`; `targetRadius`: \{ `raw`: `bigint`; `value`: `number`; \}; `valueBudgetRaw`: `bigint`; `version`: `number`; `toJSON`: `unknown`; \} \| `undefined` |
| `profile` | \| \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `anchors`: readonly \{ `x`: \{ `raw`: `bigint`; `value`: `number`; \}; `y`: \{ `raw`: `bigint`; `value`: `number`; \}; \}[]; `contentFingerprint`: `string`; `game`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"game"`; \}; `kind`: `"scanLootProfile"`; `loot`: readonly \{ `baseQuantityRaw`: `bigint`; `cargo`: \{ `categoryId`: `number`; `id`: `number`; `mint`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `name`: `string`; `storageCost`: `number`; \}; `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`; `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`; `requiredResearchTagIds`: readonly `number`[]; `rollWeight`: `number`; `supportedPatternIds`: readonly `number`[]; `valueUnits`: `number`; \}[]; `regionId`: `number`; `revision`: `number`; `riskValueMultiplierBasisPoints`: `number`; `status`: `"active"` \| `"draft"` \| `"removed"`; `version`: `number`; `toJSON`: `unknown`; \} \| `undefined` |
| `options` | [`ScanLootOddsOptions`](/reference/scanning/#scanlootoddsoptions) |

#### Returns

[`ScanLootOdds`](/reference/scanning/#scanlootodds)

#### Example

```ts
declare const policy: ScanPatternPolicySnapshot, loot: ScanLootProfileSnapshot;
const odds = deriveScanLootOdds(policy, loot, { unlockedResearchTagIds: [], requiredRegionResearchTagIds: [], exhaustionBasisPoints: 0 });
```

***

<a id="derivescanrecoveryrange"></a>

### deriveScanRecoveryRange()

```ts
function deriveScanRecoveryRange(signal, location): ScanRecoveryRange;
```

Defined in: [packages/sage/src/scanning/lifecycle.ts:147](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/lifecycle.ts#L147)

Compares a contact's recovery radius with exact raw I8F56 coordinates, boundary included.
Supply current raw I8F56 coordinates, not Fleet display coordinates or the
original scan-attempt position. Never reconstruct exact bits from rounded values.
Uses raw components only. This is geometry, not expiry, authority, capacity or
instruction eligibility; an expired Contact still has measurable geometry.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `signal` | \| \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `attempt`: \| \{ `commitSlot`: `bigint`; `contactChanceBasisPoints`: `number`; `detectedAtUnixSeconds`: `bigint`; `eligibleLootRowIndexes`: readonly `number`[]; `exhaustionBasisPoints`: `number`; `focus`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`; `location`: \{ `x`: \{ `raw`: `bigint`; `value`: `number`; \}; `y`: \{ `raw`: `bigint`; `value`: `number`; \}; \}; `lootProfileContentFingerprint`: `string`; `lootProfileRevision`: `number`; `patternId`: `number`; `policyContentFingerprint`: `string`; `policyRevision`: `number`; `regionId`: `number`; `revealSlots`: readonly `bigint`[]; \} \| `undefined`; `contact`: \| \{ `baseQuantityRaw`: `bigint`; `cargo`: \{ `categoryId`: `number`; `id`: `number`; `mint`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `name`: `string`; `storageCost`: `number`; \}; `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`; `expiresAtUnixSeconds`: `bigint`; `nominalQuantityRaw`: `bigint`; `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`; `target`: \{ `x`: \{ `raw`: `bigint`; `value`: `number`; \}; `y`: \{ `raw`: `bigint`; `value`: `number`; \}; \}; `targetRadius`: \{ `raw`: `bigint`; `value`: `number`; \}; \} \| `undefined`; `cooldownEndsAtUnixSeconds`: `bigint`; `ended`: \| \{ `expiresAtUnixSeconds`: `bigint`; `terminalAtUnixSeconds`: `bigint`; \} \| `undefined`; `fleet`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"fleet"`; \}; `game`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"game"`; \}; `kind`: `"scanSignal"`; `noContact`: \| \{ `resolvedAtUnixSeconds`: `bigint`; `terminalAtUnixSeconds`: `bigint`; `xpAwardedRaw`: `bigint`; \} \| `undefined`; `ownerCharacter`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"character"`; \}; `ownerProfile`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"profile"`; \}; `receipt`: \| \{ `acceptedQuantityRaw`: `bigint`; `cargo`: \{ `categoryId`: `number`; `id`: `number`; `mint`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `name`: `string`; `storageCost`: `number`; \}; `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`; `clippedQuantityRaw`: `bigint`; `nominalQuantityRaw`: `bigint`; `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`; `resolvedAtUnixSeconds`: `bigint`; `terminalAtUnixSeconds`: `bigint`; `xpAwardedRaw`: `bigint`; \} \| `undefined`; `recoveryHistory`: \{ `consecutiveRecoveries`: `number`; `lastRecoveryAtUnixSeconds`: `bigint`; `lastRegionId`: `number`; \}; `sequence`: `bigint`; `status`: \| `"expired"` \| `"empty"` \| `"pending-entropy"` \| `"contact"` \| `"no-contact"` \| `"recovered"` \| `"abandoned"`; `version`: `number`; `toJSON`: `unknown`; \} \| `undefined` |
| `location` | \{ `x`: \{ `raw`: `bigint`; `value`: `number`; \}; `y`: \{ `raw`: `bigint`; `value`: `number`; \}; \} |
| `location.x` | \{ `raw`: `bigint`; `value`: `number`; \} |
| `location.x.raw` | `bigint` |
| `location.x.value` | `number` |
| `location.y` | \{ `raw`: `bigint`; `value`: `number`; \} |
| `location.y.raw` | `bigint` |
| `location.y.value` | `number` |

#### Returns

[`ScanRecoveryRange`](/reference/scanning/#scanrecoveryrange)

#### Example

```ts
declare const signal: ScanSignalSnapshot | undefined, location: ScanCoordinates;
const range = deriveScanRecoveryRange(signal, location);
if (range.kind === 'contact') console.log(range.withinRange);
```

***

<a id="derivescansignaltiming"></a>

### deriveScanSignalTiming()

```ts
function deriveScanSignalTiming(signal, clock): ScanSignalTiming;
```

Defined in: [packages/sage/src/scanning/lifecycle.ts:93](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/lifecycle.ts#L93)

Projects signal cooldown, pending entropy and contact expiry using explicit clock values.
Reveal starts at commitSlot + 10 and ends exclusively 256 slots later, matching
the fingerprinted client. No network, polling, clock access or acknowledgement
eligibility is implied; abandonment acknowledgement can shorten cooldown.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `signal` | \| \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `attempt`: \| \{ `commitSlot`: `bigint`; `contactChanceBasisPoints`: `number`; `detectedAtUnixSeconds`: `bigint`; `eligibleLootRowIndexes`: readonly `number`[]; `exhaustionBasisPoints`: `number`; `focus`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`; `location`: \{ `x`: \{ `raw`: `bigint`; `value`: `number`; \}; `y`: \{ `raw`: `bigint`; `value`: `number`; \}; \}; `lootProfileContentFingerprint`: `string`; `lootProfileRevision`: `number`; `patternId`: `number`; `policyContentFingerprint`: `string`; `policyRevision`: `number`; `regionId`: `number`; `revealSlots`: readonly `bigint`[]; \} \| `undefined`; `contact`: \| \{ `baseQuantityRaw`: `bigint`; `cargo`: \{ `categoryId`: `number`; `id`: `number`; `mint`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `name`: `string`; `storageCost`: `number`; \}; `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`; `expiresAtUnixSeconds`: `bigint`; `nominalQuantityRaw`: `bigint`; `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`; `target`: \{ `x`: \{ `raw`: `bigint`; `value`: `number`; \}; `y`: \{ `raw`: `bigint`; `value`: `number`; \}; \}; `targetRadius`: \{ `raw`: `bigint`; `value`: `number`; \}; \} \| `undefined`; `cooldownEndsAtUnixSeconds`: `bigint`; `ended`: \| \{ `expiresAtUnixSeconds`: `bigint`; `terminalAtUnixSeconds`: `bigint`; \} \| `undefined`; `fleet`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"fleet"`; \}; `game`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"game"`; \}; `kind`: `"scanSignal"`; `noContact`: \| \{ `resolvedAtUnixSeconds`: `bigint`; `terminalAtUnixSeconds`: `bigint`; `xpAwardedRaw`: `bigint`; \} \| `undefined`; `ownerCharacter`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"character"`; \}; `ownerProfile`: \{ `address`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `type`: `"profile"`; \}; `receipt`: \| \{ `acceptedQuantityRaw`: `bigint`; `cargo`: \{ `categoryId`: `number`; `id`: `number`; `mint`: \{ \[`key`: `number`\]: `string`; `__brand:@solana/kit`: `"Address"`; `__stringEncoding:@solana/kit`: `"base58"`; `length`: `number`; `[iterator]`: `StringIterator`\<`string`\>; `anchor`: `string`; `at`: `string` \| `undefined`; `big`: `string`; `blink`: `string`; `bold`: `string`; `charAt`: `string`; `charCodeAt`: `number`; `codePointAt`: `number` \| `undefined`; `concat`: `string`; `endsWith`: `boolean`; `fixed`: `string`; `fontcolor`: `string`; `fontsize`: `string`; `includes`: `boolean`; `indexOf`: `number`; `italics`: `string`; `lastIndexOf`: `number`; `link`: `string`; `localeCompare`: `number`; `match`: `RegExpMatchArray` \| `null`; `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>; `normalize`: `string`; `padEnd`: `string`; `padStart`: `string`; `repeat`: `string`; `replace`: `string`; `replaceAll`: `string`; `search`: `number`; `slice`: `string`; `small`: `string`; `split`: `string`[]; `startsWith`: `boolean`; `strike`: `string`; `sub`: `string`; `substr`: `string`; `substring`: `string`; `sup`: `string`; `toLocaleLowerCase`: `string`; `toLocaleUpperCase`: `string`; `toLowerCase`: `string`; `toString`: `string`; `toUpperCase`: `string`; `trim`: `string`; `trimEnd`: `string`; `trimLeft`: `string`; `trimRight`: `string`; `trimStart`: `string`; `valueOf`: `string`; \}; `name`: `string`; `storageCost`: `number`; \}; `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`; `clippedQuantityRaw`: `bigint`; `nominalQuantityRaw`: `bigint`; `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`; `resolvedAtUnixSeconds`: `bigint`; `terminalAtUnixSeconds`: `bigint`; `xpAwardedRaw`: `bigint`; \} \| `undefined`; `recoveryHistory`: \{ `consecutiveRecoveries`: `number`; `lastRecoveryAtUnixSeconds`: `bigint`; `lastRegionId`: `number`; \}; `sequence`: `bigint`; `status`: \| `"expired"` \| `"empty"` \| `"pending-entropy"` \| `"contact"` \| `"no-contact"` \| `"recovered"` \| `"abandoned"`; `version`: `number`; `toJSON`: `unknown`; \} \| `undefined` |
| `clock` | [`ScanSignalClock`](/reference/scanning/#scansignalclock) |

#### Returns

[`ScanSignalTiming`](/reference/scanning/#scansignaltiming)

#### Example

```ts
declare const signal: ScanSignalSnapshot | undefined;
const timing = deriveScanSignalTiming(signal, { slot: 54_000_000n, unixSeconds: 1_790_000_000n });
console.log(timing.entropy?.phase);
```

***

<a id="getcharacterscanningstate"></a>

### getCharacterScanningState()

```ts
function getCharacterScanningState(
   context, 
   profile, 
options?): Promise<CharacterScanningStateSnapshot>;
```

Defined in: [packages/sage/src/scanning/index.ts:400](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L400)

Derives one Character from Profile and returns focused scanning progression.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `context` | [`SageContext`](/reference/#sagecontext) |
| `profile` | [`Address`](/reference/#address-20) |
| `options?` | [`ReadOptions`](/reference/client/#readoptions) |

#### Returns

`Promise`\<[`CharacterScanningStateSnapshot`](/reference/scanning/#characterscanningstatesnapshot)\>

#### Example

```ts
declare const ctx: SageContext;
declare const profile: Address;
const state = await getCharacterScanningState(ctx, profile);
```

***

<a id="getfleetscanningstate"></a>

### getFleetScanningState()

```ts
function getFleetScanningState(
   context, 
   address, 
options?): Promise<FleetScanningStateSnapshot>;
```

Defined in: [packages/sage/src/scanning/index.ts:348](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L348)

Reads one Fleet and returns only its translated scanning state.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `context` | [`SageContext`](/reference/#sagecontext) |
| `address` | [`Address`](/reference/#address-20) |
| `options?` | [`ReadOptions`](/reference/client/#readoptions) |

#### Returns

`Promise`\<[`FleetScanningStateSnapshot`](/reference/scanning/#fleetscanningstatesnapshot)\>

#### Example

```ts
declare const ctx: SageContext;
declare const fleet: Address;
const state = await getFleetScanningState(ctx, fleet);
```

***

<a id="getscanlootprofile"></a>

### getScanLootProfile()

```ts
function getScanLootProfile(
   context, 
   regionId, 
   options?): Promise<{
  address: {
   [key: number]: string;
     __brand:@solana/kit: "Address";
     __stringEncoding:@solana/kit: "base58";
     length: number;
     [iterator]: StringIterator<string>;
     anchor: string;
     at: string | undefined;
     big: string;
     blink: string;
     bold: string;
     charAt: string;
     charCodeAt: number;
     codePointAt: number | undefined;
     concat: string;
     endsWith: boolean;
     fixed: string;
     fontcolor: string;
     fontsize: string;
     includes: boolean;
     indexOf: number;
     italics: string;
     lastIndexOf: number;
     link: string;
     localeCompare: number;
     match: RegExpMatchArray | null;
     matchAll: RegExpStringIterator<RegExpExecArray>;
     normalize: string;
     padEnd: string;
     padStart: string;
     repeat: string;
     replace: string;
     replaceAll: string;
     search: number;
     slice: string;
     small: string;
     split: string[];
     startsWith: boolean;
     strike: string;
     sub: string;
     substr: string;
     substring: string;
     sup: string;
     toLocaleLowerCase: string;
     toLocaleUpperCase: string;
     toLowerCase: string;
     toString: string;
     toUpperCase: string;
     trim: string;
     trimEnd: string;
     trimLeft: string;
     trimRight: string;
     trimStart: string;
     valueOf: string;
  };
  anchors: readonly {
     x: {
        raw: bigint;
        value: number;
     };
     y: {
        raw: bigint;
        value: number;
     };
  }[];
  contentFingerprint: string;
  game: {
     address: {
      [key: number]: string;
        __brand:@solana/kit: "Address";
        __stringEncoding:@solana/kit: "base58";
        length: number;
        [iterator]: StringIterator<string>;
        anchor: string;
        at: string | undefined;
        big: string;
        blink: string;
        bold: string;
        charAt: string;
        charCodeAt: number;
        codePointAt: number | undefined;
        concat: string;
        endsWith: boolean;
        fixed: string;
        fontcolor: string;
        fontsize: string;
        includes: boolean;
        indexOf: number;
        italics: string;
        lastIndexOf: number;
        link: string;
        localeCompare: number;
        match: RegExpMatchArray | null;
        matchAll: RegExpStringIterator<RegExpExecArray>;
        normalize: string;
        padEnd: string;
        padStart: string;
        repeat: string;
        replace: string;
        replaceAll: string;
        search: number;
        slice: string;
        small: string;
        split: string[];
        startsWith: boolean;
        strike: string;
        sub: string;
        substr: string;
        substring: string;
        sup: string;
        toLocaleLowerCase: string;
        toLocaleUpperCase: string;
        toLowerCase: string;
        toString: string;
        toUpperCase: string;
        trim: string;
        trimEnd: string;
        trimLeft: string;
        trimRight: string;
        trimStart: string;
        valueOf: string;
     };
     type: "game";
  };
  kind: "scanLootProfile";
  loot: readonly {
     baseQuantityRaw: bigint;
     cargo: {
        categoryId: number;
        id: number;
        mint: {
         [key: number]: string;
           __brand:@solana/kit: "Address";
           __stringEncoding:@solana/kit: "base58";
           length: number;
           [iterator]: StringIterator<string>;
           anchor: string;
           at: string | undefined;
           big: string;
           blink: string;
           bold: string;
           charAt: string;
           charCodeAt: number;
           codePointAt: number | undefined;
           concat: string;
           endsWith: boolean;
           fixed: string;
           fontcolor: string;
           fontsize: string;
           includes: boolean;
           indexOf: number;
           italics: string;
           lastIndexOf: number;
           link: string;
           localeCompare: number;
           match: RegExpMatchArray | null;
           matchAll: RegExpStringIterator<RegExpExecArray>;
           normalize: string;
           padEnd: string;
           padStart: string;
           repeat: string;
           replace: string;
           replaceAll: string;
           search: number;
           slice: string;
           small: string;
           split: string[];
           startsWith: boolean;
           strike: string;
           sub: string;
           substr: string;
           substring: string;
           sup: string;
           toLocaleLowerCase: string;
           toLocaleUpperCase: string;
           toLowerCase: string;
           toString: string;
           toUpperCase: string;
           trim: string;
           trimEnd: string;
           trimLeft: string;
           trimRight: string;
           trimStart: string;
           valueOf: string;
        };
        name: string;
        storageCost: number;
     };
     category: "any" | "industrial" | "technology" | "tactical" | "exotic";
     rarity: "common" | "uncommon" | "rare" | "epic" | "legendary" | "anomalous";
     requiredResearchTagIds: readonly number[];
     rollWeight: number;
     supportedPatternIds: readonly number[];
     valueUnits: number;
  }[];
  regionId: number;
  revision: number;
  riskValueMultiplierBasisPoints: number;
  status: "active" | "draft" | "removed";
  version: number;
  toJSON: unknown;
}>;
```

Defined in: [packages/sage/src/scanning/signals.ts:365](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/signals.ts#L365)

Derives and reads a required ScanLootProfile for the configured Game. Absence throws AccountNotFoundError.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `context` | [`SageContext`](/reference/#sagecontext) |
| `regionId` | `number` |
| `options?` | [`ReadOptions`](/reference/client/#readoptions) |

#### Returns

`Promise`\<\{
  `address`: \{
   \[`key`: `number`\]: `string`;
     `__brand:@solana/kit`: `"Address"`;
     `__stringEncoding:@solana/kit`: `"base58"`;
     `length`: `number`;
     `[iterator]`: `StringIterator`\<`string`\>;
     `anchor`: `string`;
     `at`: `string` \| `undefined`;
     `big`: `string`;
     `blink`: `string`;
     `bold`: `string`;
     `charAt`: `string`;
     `charCodeAt`: `number`;
     `codePointAt`: `number` \| `undefined`;
     `concat`: `string`;
     `endsWith`: `boolean`;
     `fixed`: `string`;
     `fontcolor`: `string`;
     `fontsize`: `string`;
     `includes`: `boolean`;
     `indexOf`: `number`;
     `italics`: `string`;
     `lastIndexOf`: `number`;
     `link`: `string`;
     `localeCompare`: `number`;
     `match`: `RegExpMatchArray` \| `null`;
     `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
     `normalize`: `string`;
     `padEnd`: `string`;
     `padStart`: `string`;
     `repeat`: `string`;
     `replace`: `string`;
     `replaceAll`: `string`;
     `search`: `number`;
     `slice`: `string`;
     `small`: `string`;
     `split`: `string`[];
     `startsWith`: `boolean`;
     `strike`: `string`;
     `sub`: `string`;
     `substr`: `string`;
     `substring`: `string`;
     `sup`: `string`;
     `toLocaleLowerCase`: `string`;
     `toLocaleUpperCase`: `string`;
     `toLowerCase`: `string`;
     `toString`: `string`;
     `toUpperCase`: `string`;
     `trim`: `string`;
     `trimEnd`: `string`;
     `trimLeft`: `string`;
     `trimRight`: `string`;
     `trimStart`: `string`;
     `valueOf`: `string`;
  \};
  `anchors`: readonly \{
     `x`: \{
        `raw`: `bigint`;
        `value`: `number`;
     \};
     `y`: \{
        `raw`: `bigint`;
        `value`: `number`;
     \};
  \}[];
  `contentFingerprint`: `string`;
  `game`: \{
     `address`: \{
      \[`key`: `number`\]: `string`;
        `__brand:@solana/kit`: `"Address"`;
        `__stringEncoding:@solana/kit`: `"base58"`;
        `length`: `number`;
        `[iterator]`: `StringIterator`\<`string`\>;
        `anchor`: `string`;
        `at`: `string` \| `undefined`;
        `big`: `string`;
        `blink`: `string`;
        `bold`: `string`;
        `charAt`: `string`;
        `charCodeAt`: `number`;
        `codePointAt`: `number` \| `undefined`;
        `concat`: `string`;
        `endsWith`: `boolean`;
        `fixed`: `string`;
        `fontcolor`: `string`;
        `fontsize`: `string`;
        `includes`: `boolean`;
        `indexOf`: `number`;
        `italics`: `string`;
        `lastIndexOf`: `number`;
        `link`: `string`;
        `localeCompare`: `number`;
        `match`: `RegExpMatchArray` \| `null`;
        `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
        `normalize`: `string`;
        `padEnd`: `string`;
        `padStart`: `string`;
        `repeat`: `string`;
        `replace`: `string`;
        `replaceAll`: `string`;
        `search`: `number`;
        `slice`: `string`;
        `small`: `string`;
        `split`: `string`[];
        `startsWith`: `boolean`;
        `strike`: `string`;
        `sub`: `string`;
        `substr`: `string`;
        `substring`: `string`;
        `sup`: `string`;
        `toLocaleLowerCase`: `string`;
        `toLocaleUpperCase`: `string`;
        `toLowerCase`: `string`;
        `toString`: `string`;
        `toUpperCase`: `string`;
        `trim`: `string`;
        `trimEnd`: `string`;
        `trimLeft`: `string`;
        `trimRight`: `string`;
        `trimStart`: `string`;
        `valueOf`: `string`;
     \};
     `type`: `"game"`;
  \};
  `kind`: `"scanLootProfile"`;
  `loot`: readonly \{
     `baseQuantityRaw`: `bigint`;
     `cargo`: \{
        `categoryId`: `number`;
        `id`: `number`;
        `mint`: \{
         \[`key`: `number`\]: `string`;
           `__brand:@solana/kit`: `"Address"`;
           `__stringEncoding:@solana/kit`: `"base58"`;
           `length`: `number`;
           `[iterator]`: `StringIterator`\<`string`\>;
           `anchor`: `string`;
           `at`: `string` \| `undefined`;
           `big`: `string`;
           `blink`: `string`;
           `bold`: `string`;
           `charAt`: `string`;
           `charCodeAt`: `number`;
           `codePointAt`: `number` \| `undefined`;
           `concat`: `string`;
           `endsWith`: `boolean`;
           `fixed`: `string`;
           `fontcolor`: `string`;
           `fontsize`: `string`;
           `includes`: `boolean`;
           `indexOf`: `number`;
           `italics`: `string`;
           `lastIndexOf`: `number`;
           `link`: `string`;
           `localeCompare`: `number`;
           `match`: `RegExpMatchArray` \| `null`;
           `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
           `normalize`: `string`;
           `padEnd`: `string`;
           `padStart`: `string`;
           `repeat`: `string`;
           `replace`: `string`;
           `replaceAll`: `string`;
           `search`: `number`;
           `slice`: `string`;
           `small`: `string`;
           `split`: `string`[];
           `startsWith`: `boolean`;
           `strike`: `string`;
           `sub`: `string`;
           `substr`: `string`;
           `substring`: `string`;
           `sup`: `string`;
           `toLocaleLowerCase`: `string`;
           `toLocaleUpperCase`: `string`;
           `toLowerCase`: `string`;
           `toString`: `string`;
           `toUpperCase`: `string`;
           `trim`: `string`;
           `trimEnd`: `string`;
           `trimLeft`: `string`;
           `trimRight`: `string`;
           `trimStart`: `string`;
           `valueOf`: `string`;
        \};
        `name`: `string`;
        `storageCost`: `number`;
     \};
     `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`;
     `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`;
     `requiredResearchTagIds`: readonly `number`[];
     `rollWeight`: `number`;
     `supportedPatternIds`: readonly `number`[];
     `valueUnits`: `number`;
  \}[];
  `regionId`: `number`;
  `revision`: `number`;
  `riskValueMultiplierBasisPoints`: `number`;
  `status`: `"active"` \| `"draft"` \| `"removed"`;
  `version`: `number`;
  `toJSON`: `unknown`;
\}\>

#### Example

```ts
declare const ctx: SageContext, regionId: number;
const snapshot = await getScanLootProfile(ctx, regionId, { refresh: true });
```

***

<a id="getscanpattern"></a>

### getScanPattern()

```ts
function getScanPattern(
   context, 
   patternId, 
options?): Promise<ScanPatternSnapshot>;
```

Defined in: [packages/sage/src/scanning/index.ts:279](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L279)

Derives and reads one required ScanPattern for the configured Game.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `context` | [`SageContext`](/reference/#sagecontext) |
| `patternId` | `number` |
| `options?` | [`ReadOptions`](/reference/client/#readoptions) |

#### Returns

`Promise`\<[`ScanPatternSnapshot`](/reference/scanning/#scanpatternsnapshot)\>

#### Example

```ts
declare const ctx: SageContext;
const pattern = await getScanPattern(ctx, 2);
```

***

<a id="getscanpatternpolicy"></a>

### getScanPatternPolicy()

```ts
function getScanPatternPolicy(
   context, 
   patternId, 
   options?): Promise<{
  address: {
   [key: number]: string;
     __brand:@solana/kit: "Address";
     __stringEncoding:@solana/kit: "base58";
     length: number;
     [iterator]: StringIterator<string>;
     anchor: string;
     at: string | undefined;
     big: string;
     blink: string;
     bold: string;
     charAt: string;
     charCodeAt: number;
     codePointAt: number | undefined;
     concat: string;
     endsWith: boolean;
     fixed: string;
     fontcolor: string;
     fontsize: string;
     includes: boolean;
     indexOf: number;
     italics: string;
     lastIndexOf: number;
     link: string;
     localeCompare: number;
     match: RegExpMatchArray | null;
     matchAll: RegExpStringIterator<RegExpExecArray>;
     normalize: string;
     padEnd: string;
     padStart: string;
     repeat: string;
     replace: string;
     replaceAll: string;
     search: number;
     slice: string;
     small: string;
     split: string[];
     startsWith: boolean;
     strike: string;
     sub: string;
     substr: string;
     substring: string;
     sup: string;
     toLocaleLowerCase: string;
     toLocaleUpperCase: string;
     toLowerCase: string;
     toString: string;
     toUpperCase: string;
     trim: string;
     trimEnd: string;
     trimLeft: string;
     trimRight: string;
     trimStart: string;
     valueOf: string;
  };
  allowedFocusCategories: readonly ("any" | "industrial" | "technology" | "tactical" | "exotic")[];
  contactChanceBasisPoints: number;
  contentFingerprint: string;
  exhaustionDecaySeconds: number;
  exhaustionPerRecoveryBasisPoints: number;
  game: {
     address: {
      [key: number]: string;
        __brand:@solana/kit: "Address";
        __stringEncoding:@solana/kit: "base58";
        length: number;
        [iterator]: StringIterator<string>;
        anchor: string;
        at: string | undefined;
        big: string;
        blink: string;
        bold: string;
        charAt: string;
        charCodeAt: number;
        codePointAt: number | undefined;
        concat: string;
        endsWith: boolean;
        fixed: string;
        fontcolor: string;
        fontsize: string;
        includes: boolean;
        indexOf: number;
        italics: string;
        lastIndexOf: number;
        link: string;
        localeCompare: number;
        match: RegExpMatchArray | null;
        matchAll: RegExpStringIterator<RegExpExecArray>;
        normalize: string;
        padEnd: string;
        padStart: string;
        repeat: string;
        replace: string;
        replaceAll: string;
        search: number;
        slice: string;
        small: string;
        split: string[];
        startsWith: boolean;
        strike: string;
        sub: string;
        substr: string;
        substring: string;
        sup: string;
        toLocaleLowerCase: string;
        toLocaleUpperCase: string;
        toLowerCase: string;
        toString: string;
        toUpperCase: string;
        trim: string;
        trimEnd: string;
        trimLeft: string;
        trimRight: string;
        trimStart: string;
        valueOf: string;
     };
     type: "game";
  };
  kind: "scanPatternPolicy";
  maximumExhaustionBasisPoints: number;
  maximumRarity: "common" | "uncommon" | "rare" | "epic" | "legendary" | "anomalous";
  noContactXpRaw: bigint;
  patternId: number;
  recoveryXpRaw: bigint;
  requiredResearchTagIds: readonly number[];
  revision: number;
  signalLifetimeSeconds: number;
  status: "active" | "draft" | "removed";
  strategy: "broad" | "focused" | "enhanced" | "deep" | "spatial";
  targetRadius: {
     raw: bigint;
     value: number;
  };
  valueBudgetRaw: bigint;
  version: number;
  toJSON: unknown;
}>;
```

Defined in: [packages/sage/src/scanning/signals.ts:320](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/signals.ts#L320)

Derives and reads a required ScanPatternPolicy for the configured Game. Absence throws AccountNotFoundError.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `context` | [`SageContext`](/reference/#sagecontext) |
| `patternId` | `number` |
| `options?` | [`ReadOptions`](/reference/client/#readoptions) |

#### Returns

`Promise`\<\{
  `address`: \{
   \[`key`: `number`\]: `string`;
     `__brand:@solana/kit`: `"Address"`;
     `__stringEncoding:@solana/kit`: `"base58"`;
     `length`: `number`;
     `[iterator]`: `StringIterator`\<`string`\>;
     `anchor`: `string`;
     `at`: `string` \| `undefined`;
     `big`: `string`;
     `blink`: `string`;
     `bold`: `string`;
     `charAt`: `string`;
     `charCodeAt`: `number`;
     `codePointAt`: `number` \| `undefined`;
     `concat`: `string`;
     `endsWith`: `boolean`;
     `fixed`: `string`;
     `fontcolor`: `string`;
     `fontsize`: `string`;
     `includes`: `boolean`;
     `indexOf`: `number`;
     `italics`: `string`;
     `lastIndexOf`: `number`;
     `link`: `string`;
     `localeCompare`: `number`;
     `match`: `RegExpMatchArray` \| `null`;
     `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
     `normalize`: `string`;
     `padEnd`: `string`;
     `padStart`: `string`;
     `repeat`: `string`;
     `replace`: `string`;
     `replaceAll`: `string`;
     `search`: `number`;
     `slice`: `string`;
     `small`: `string`;
     `split`: `string`[];
     `startsWith`: `boolean`;
     `strike`: `string`;
     `sub`: `string`;
     `substr`: `string`;
     `substring`: `string`;
     `sup`: `string`;
     `toLocaleLowerCase`: `string`;
     `toLocaleUpperCase`: `string`;
     `toLowerCase`: `string`;
     `toString`: `string`;
     `toUpperCase`: `string`;
     `trim`: `string`;
     `trimEnd`: `string`;
     `trimLeft`: `string`;
     `trimRight`: `string`;
     `trimStart`: `string`;
     `valueOf`: `string`;
  \};
  `allowedFocusCategories`: readonly (`"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`)[];
  `contactChanceBasisPoints`: `number`;
  `contentFingerprint`: `string`;
  `exhaustionDecaySeconds`: `number`;
  `exhaustionPerRecoveryBasisPoints`: `number`;
  `game`: \{
     `address`: \{
      \[`key`: `number`\]: `string`;
        `__brand:@solana/kit`: `"Address"`;
        `__stringEncoding:@solana/kit`: `"base58"`;
        `length`: `number`;
        `[iterator]`: `StringIterator`\<`string`\>;
        `anchor`: `string`;
        `at`: `string` \| `undefined`;
        `big`: `string`;
        `blink`: `string`;
        `bold`: `string`;
        `charAt`: `string`;
        `charCodeAt`: `number`;
        `codePointAt`: `number` \| `undefined`;
        `concat`: `string`;
        `endsWith`: `boolean`;
        `fixed`: `string`;
        `fontcolor`: `string`;
        `fontsize`: `string`;
        `includes`: `boolean`;
        `indexOf`: `number`;
        `italics`: `string`;
        `lastIndexOf`: `number`;
        `link`: `string`;
        `localeCompare`: `number`;
        `match`: `RegExpMatchArray` \| `null`;
        `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
        `normalize`: `string`;
        `padEnd`: `string`;
        `padStart`: `string`;
        `repeat`: `string`;
        `replace`: `string`;
        `replaceAll`: `string`;
        `search`: `number`;
        `slice`: `string`;
        `small`: `string`;
        `split`: `string`[];
        `startsWith`: `boolean`;
        `strike`: `string`;
        `sub`: `string`;
        `substr`: `string`;
        `substring`: `string`;
        `sup`: `string`;
        `toLocaleLowerCase`: `string`;
        `toLocaleUpperCase`: `string`;
        `toLowerCase`: `string`;
        `toString`: `string`;
        `toUpperCase`: `string`;
        `trim`: `string`;
        `trimEnd`: `string`;
        `trimLeft`: `string`;
        `trimRight`: `string`;
        `trimStart`: `string`;
        `valueOf`: `string`;
     \};
     `type`: `"game"`;
  \};
  `kind`: `"scanPatternPolicy"`;
  `maximumExhaustionBasisPoints`: `number`;
  `maximumRarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`;
  `noContactXpRaw`: `bigint`;
  `patternId`: `number`;
  `recoveryXpRaw`: `bigint`;
  `requiredResearchTagIds`: readonly `number`[];
  `revision`: `number`;
  `signalLifetimeSeconds`: `number`;
  `status`: `"active"` \| `"draft"` \| `"removed"`;
  `strategy`: `"broad"` \| `"focused"` \| `"enhanced"` \| `"deep"` \| `"spatial"`;
  `targetRadius`: \{
     `raw`: `bigint`;
     `value`: `number`;
  \};
  `valueBudgetRaw`: `bigint`;
  `version`: `number`;
  `toJSON`: `unknown`;
\}\>

#### Example

```ts
declare const ctx: SageContext, patternId: number;
const snapshot = await getScanPatternPolicy(ctx, patternId, { refresh: true });
```

***

<a id="getscanpatterns"></a>

### getScanPatterns()

```ts
function getScanPatterns(context, options?): Promise<readonly ScanPatternSnapshot[]>;
```

Defined in: [packages/sage/src/scanning/index.ts:326](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L326)

Discovers the configured Game's ScanPattern catalog with targeted filters.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `context` | [`SageContext`](/reference/#sagecontext) |
| `options?` | [`ScanPatternDiscoveryOptions`](/reference/scanning/#scanpatterndiscoveryoptions) |

#### Returns

`Promise`\<readonly [`ScanPatternSnapshot`](/reference/scanning/#scanpatternsnapshot)[]\>

#### Example

```ts
declare const ctx: SageContext;
const patterns = await getScanPatterns(ctx);
```

***

<a id="getscansignalforfleet"></a>

### getScanSignalForFleet()

```ts
function getScanSignalForFleet(
   context, 
   fleet, 
   options?): Promise<{
  address: {
   [key: number]: string;
     __brand:@solana/kit: "Address";
     __stringEncoding:@solana/kit: "base58";
     length: number;
     [iterator]: StringIterator<string>;
     anchor: string;
     at: string | undefined;
     big: string;
     blink: string;
     bold: string;
     charAt: string;
     charCodeAt: number;
     codePointAt: number | undefined;
     concat: string;
     endsWith: boolean;
     fixed: string;
     fontcolor: string;
     fontsize: string;
     includes: boolean;
     indexOf: number;
     italics: string;
     lastIndexOf: number;
     link: string;
     localeCompare: number;
     match: RegExpMatchArray | null;
     matchAll: RegExpStringIterator<RegExpExecArray>;
     normalize: string;
     padEnd: string;
     padStart: string;
     repeat: string;
     replace: string;
     replaceAll: string;
     search: number;
     slice: string;
     small: string;
     split: string[];
     startsWith: boolean;
     strike: string;
     sub: string;
     substr: string;
     substring: string;
     sup: string;
     toLocaleLowerCase: string;
     toLocaleUpperCase: string;
     toLowerCase: string;
     toString: string;
     toUpperCase: string;
     trim: string;
     trimEnd: string;
     trimLeft: string;
     trimRight: string;
     trimStart: string;
     valueOf: string;
  };
  attempt:   | {
     commitSlot: bigint;
     contactChanceBasisPoints: number;
     detectedAtUnixSeconds: bigint;
     eligibleLootRowIndexes: readonly number[];
     exhaustionBasisPoints: number;
     focus: "any" | "industrial" | "technology" | "tactical" | "exotic";
     location: {
        x: {
           raw: bigint;
           value: number;
        };
        y: {
           raw: bigint;
           value: number;
        };
     };
     lootProfileContentFingerprint: string;
     lootProfileRevision: number;
     patternId: number;
     policyContentFingerprint: string;
     policyRevision: number;
     regionId: number;
     revealSlots: readonly bigint[];
   }
     | undefined;
  contact:   | {
     baseQuantityRaw: bigint;
     cargo: {
        categoryId: number;
        id: number;
        mint: {
         [key: number]: string;
           __brand:@solana/kit: "Address";
           __stringEncoding:@solana/kit: "base58";
           length: number;
           [iterator]: StringIterator<string>;
           anchor: string;
           at: string | undefined;
           big: string;
           blink: string;
           bold: string;
           charAt: string;
           charCodeAt: number;
           codePointAt: number | undefined;
           concat: string;
           endsWith: boolean;
           fixed: string;
           fontcolor: string;
           fontsize: string;
           includes: boolean;
           indexOf: number;
           italics: string;
           lastIndexOf: number;
           link: string;
           localeCompare: number;
           match: RegExpMatchArray | null;
           matchAll: RegExpStringIterator<RegExpExecArray>;
           normalize: string;
           padEnd: string;
           padStart: string;
           repeat: string;
           replace: string;
           replaceAll: string;
           search: number;
           slice: string;
           small: string;
           split: string[];
           startsWith: boolean;
           strike: string;
           sub: string;
           substr: string;
           substring: string;
           sup: string;
           toLocaleLowerCase: string;
           toLocaleUpperCase: string;
           toLowerCase: string;
           toString: string;
           toUpperCase: string;
           trim: string;
           trimEnd: string;
           trimLeft: string;
           trimRight: string;
           trimStart: string;
           valueOf: string;
        };
        name: string;
        storageCost: number;
     };
     category: "any" | "industrial" | "technology" | "tactical" | "exotic";
     expiresAtUnixSeconds: bigint;
     nominalQuantityRaw: bigint;
     rarity: "common" | "uncommon" | "rare" | "epic" | "legendary" | "anomalous";
     target: {
        x: {
           raw: bigint;
           value: number;
        };
        y: {
           raw: bigint;
           value: number;
        };
     };
     targetRadius: {
        raw: bigint;
        value: number;
     };
   }
     | undefined;
  cooldownEndsAtUnixSeconds: bigint;
  ended:   | {
     expiresAtUnixSeconds: bigint;
     terminalAtUnixSeconds: bigint;
   }
     | undefined;
  fleet: {
     address: {
      [key: number]: string;
        __brand:@solana/kit: "Address";
        __stringEncoding:@solana/kit: "base58";
        length: number;
        [iterator]: StringIterator<string>;
        anchor: string;
        at: string | undefined;
        big: string;
        blink: string;
        bold: string;
        charAt: string;
        charCodeAt: number;
        codePointAt: number | undefined;
        concat: string;
        endsWith: boolean;
        fixed: string;
        fontcolor: string;
        fontsize: string;
        includes: boolean;
        indexOf: number;
        italics: string;
        lastIndexOf: number;
        link: string;
        localeCompare: number;
        match: RegExpMatchArray | null;
        matchAll: RegExpStringIterator<RegExpExecArray>;
        normalize: string;
        padEnd: string;
        padStart: string;
        repeat: string;
        replace: string;
        replaceAll: string;
        search: number;
        slice: string;
        small: string;
        split: string[];
        startsWith: boolean;
        strike: string;
        sub: string;
        substr: string;
        substring: string;
        sup: string;
        toLocaleLowerCase: string;
        toLocaleUpperCase: string;
        toLowerCase: string;
        toString: string;
        toUpperCase: string;
        trim: string;
        trimEnd: string;
        trimLeft: string;
        trimRight: string;
        trimStart: string;
        valueOf: string;
     };
     type: "fleet";
  };
  game: {
     address: {
      [key: number]: string;
        __brand:@solana/kit: "Address";
        __stringEncoding:@solana/kit: "base58";
        length: number;
        [iterator]: StringIterator<string>;
        anchor: string;
        at: string | undefined;
        big: string;
        blink: string;
        bold: string;
        charAt: string;
        charCodeAt: number;
        codePointAt: number | undefined;
        concat: string;
        endsWith: boolean;
        fixed: string;
        fontcolor: string;
        fontsize: string;
        includes: boolean;
        indexOf: number;
        italics: string;
        lastIndexOf: number;
        link: string;
        localeCompare: number;
        match: RegExpMatchArray | null;
        matchAll: RegExpStringIterator<RegExpExecArray>;
        normalize: string;
        padEnd: string;
        padStart: string;
        repeat: string;
        replace: string;
        replaceAll: string;
        search: number;
        slice: string;
        small: string;
        split: string[];
        startsWith: boolean;
        strike: string;
        sub: string;
        substr: string;
        substring: string;
        sup: string;
        toLocaleLowerCase: string;
        toLocaleUpperCase: string;
        toLowerCase: string;
        toString: string;
        toUpperCase: string;
        trim: string;
        trimEnd: string;
        trimLeft: string;
        trimRight: string;
        trimStart: string;
        valueOf: string;
     };
     type: "game";
  };
  kind: "scanSignal";
  noContact:   | {
     resolvedAtUnixSeconds: bigint;
     terminalAtUnixSeconds: bigint;
     xpAwardedRaw: bigint;
   }
     | undefined;
  ownerCharacter: {
     address: {
      [key: number]: string;
        __brand:@solana/kit: "Address";
        __stringEncoding:@solana/kit: "base58";
        length: number;
        [iterator]: StringIterator<string>;
        anchor: string;
        at: string | undefined;
        big: string;
        blink: string;
        bold: string;
        charAt: string;
        charCodeAt: number;
        codePointAt: number | undefined;
        concat: string;
        endsWith: boolean;
        fixed: string;
        fontcolor: string;
        fontsize: string;
        includes: boolean;
        indexOf: number;
        italics: string;
        lastIndexOf: number;
        link: string;
        localeCompare: number;
        match: RegExpMatchArray | null;
        matchAll: RegExpStringIterator<RegExpExecArray>;
        normalize: string;
        padEnd: string;
        padStart: string;
        repeat: string;
        replace: string;
        replaceAll: string;
        search: number;
        slice: string;
        small: string;
        split: string[];
        startsWith: boolean;
        strike: string;
        sub: string;
        substr: string;
        substring: string;
        sup: string;
        toLocaleLowerCase: string;
        toLocaleUpperCase: string;
        toLowerCase: string;
        toString: string;
        toUpperCase: string;
        trim: string;
        trimEnd: string;
        trimLeft: string;
        trimRight: string;
        trimStart: string;
        valueOf: string;
     };
     type: "character";
  };
  ownerProfile: {
     address: {
      [key: number]: string;
        __brand:@solana/kit: "Address";
        __stringEncoding:@solana/kit: "base58";
        length: number;
        [iterator]: StringIterator<string>;
        anchor: string;
        at: string | undefined;
        big: string;
        blink: string;
        bold: string;
        charAt: string;
        charCodeAt: number;
        codePointAt: number | undefined;
        concat: string;
        endsWith: boolean;
        fixed: string;
        fontcolor: string;
        fontsize: string;
        includes: boolean;
        indexOf: number;
        italics: string;
        lastIndexOf: number;
        link: string;
        localeCompare: number;
        match: RegExpMatchArray | null;
        matchAll: RegExpStringIterator<RegExpExecArray>;
        normalize: string;
        padEnd: string;
        padStart: string;
        repeat: string;
        replace: string;
        replaceAll: string;
        search: number;
        slice: string;
        small: string;
        split: string[];
        startsWith: boolean;
        strike: string;
        sub: string;
        substr: string;
        substring: string;
        sup: string;
        toLocaleLowerCase: string;
        toLocaleUpperCase: string;
        toLowerCase: string;
        toString: string;
        toUpperCase: string;
        trim: string;
        trimEnd: string;
        trimLeft: string;
        trimRight: string;
        trimStart: string;
        valueOf: string;
     };
     type: "profile";
  };
  receipt:   | {
     acceptedQuantityRaw: bigint;
     cargo: {
        categoryId: number;
        id: number;
        mint: {
         [key: number]: string;
           __brand:@solana/kit: "Address";
           __stringEncoding:@solana/kit: "base58";
           length: number;
           [iterator]: StringIterator<string>;
           anchor: string;
           at: string | undefined;
           big: string;
           blink: string;
           bold: string;
           charAt: string;
           charCodeAt: number;
           codePointAt: number | undefined;
           concat: string;
           endsWith: boolean;
           fixed: string;
           fontcolor: string;
           fontsize: string;
           includes: boolean;
           indexOf: number;
           italics: string;
           lastIndexOf: number;
           link: string;
           localeCompare: number;
           match: RegExpMatchArray | null;
           matchAll: RegExpStringIterator<RegExpExecArray>;
           normalize: string;
           padEnd: string;
           padStart: string;
           repeat: string;
           replace: string;
           replaceAll: string;
           search: number;
           slice: string;
           small: string;
           split: string[];
           startsWith: boolean;
           strike: string;
           sub: string;
           substr: string;
           substring: string;
           sup: string;
           toLocaleLowerCase: string;
           toLocaleUpperCase: string;
           toLowerCase: string;
           toString: string;
           toUpperCase: string;
           trim: string;
           trimEnd: string;
           trimLeft: string;
           trimRight: string;
           trimStart: string;
           valueOf: string;
        };
        name: string;
        storageCost: number;
     };
     category: "any" | "industrial" | "technology" | "tactical" | "exotic";
     clippedQuantityRaw: bigint;
     nominalQuantityRaw: bigint;
     rarity: "common" | "uncommon" | "rare" | "epic" | "legendary" | "anomalous";
     resolvedAtUnixSeconds: bigint;
     terminalAtUnixSeconds: bigint;
     xpAwardedRaw: bigint;
   }
     | undefined;
  recoveryHistory: {
     consecutiveRecoveries: number;
     lastRecoveryAtUnixSeconds: bigint;
     lastRegionId: number;
  };
  sequence: bigint;
  status:   | "expired"
     | "empty"
     | "pending-entropy"
     | "contact"
     | "no-contact"
     | "recovered"
     | "abandoned";
  version: number;
  toJSON: unknown;
}>;
```

Defined in: [packages/sage/src/scanning/signals.ts:267](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/signals.ts#L267)

Derives and reads a required ScanSignal for the configured Game. Absence throws AccountNotFoundError.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `context` | [`SageContext`](/reference/#sagecontext) |
| `fleet` | [`Address`](/reference/#address-20) |
| `options?` | [`ReadOptions`](/reference/client/#readoptions) |

#### Returns

`Promise`\<\{
  `address`: \{
   \[`key`: `number`\]: `string`;
     `__brand:@solana/kit`: `"Address"`;
     `__stringEncoding:@solana/kit`: `"base58"`;
     `length`: `number`;
     `[iterator]`: `StringIterator`\<`string`\>;
     `anchor`: `string`;
     `at`: `string` \| `undefined`;
     `big`: `string`;
     `blink`: `string`;
     `bold`: `string`;
     `charAt`: `string`;
     `charCodeAt`: `number`;
     `codePointAt`: `number` \| `undefined`;
     `concat`: `string`;
     `endsWith`: `boolean`;
     `fixed`: `string`;
     `fontcolor`: `string`;
     `fontsize`: `string`;
     `includes`: `boolean`;
     `indexOf`: `number`;
     `italics`: `string`;
     `lastIndexOf`: `number`;
     `link`: `string`;
     `localeCompare`: `number`;
     `match`: `RegExpMatchArray` \| `null`;
     `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
     `normalize`: `string`;
     `padEnd`: `string`;
     `padStart`: `string`;
     `repeat`: `string`;
     `replace`: `string`;
     `replaceAll`: `string`;
     `search`: `number`;
     `slice`: `string`;
     `small`: `string`;
     `split`: `string`[];
     `startsWith`: `boolean`;
     `strike`: `string`;
     `sub`: `string`;
     `substr`: `string`;
     `substring`: `string`;
     `sup`: `string`;
     `toLocaleLowerCase`: `string`;
     `toLocaleUpperCase`: `string`;
     `toLowerCase`: `string`;
     `toString`: `string`;
     `toUpperCase`: `string`;
     `trim`: `string`;
     `trimEnd`: `string`;
     `trimLeft`: `string`;
     `trimRight`: `string`;
     `trimStart`: `string`;
     `valueOf`: `string`;
  \};
  `attempt`:   \| \{
     `commitSlot`: `bigint`;
     `contactChanceBasisPoints`: `number`;
     `detectedAtUnixSeconds`: `bigint`;
     `eligibleLootRowIndexes`: readonly `number`[];
     `exhaustionBasisPoints`: `number`;
     `focus`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`;
     `location`: \{
        `x`: \{
           `raw`: `bigint`;
           `value`: `number`;
        \};
        `y`: \{
           `raw`: `bigint`;
           `value`: `number`;
        \};
     \};
     `lootProfileContentFingerprint`: `string`;
     `lootProfileRevision`: `number`;
     `patternId`: `number`;
     `policyContentFingerprint`: `string`;
     `policyRevision`: `number`;
     `regionId`: `number`;
     `revealSlots`: readonly `bigint`[];
   \}
     \| `undefined`;
  `contact`:   \| \{
     `baseQuantityRaw`: `bigint`;
     `cargo`: \{
        `categoryId`: `number`;
        `id`: `number`;
        `mint`: \{
         \[`key`: `number`\]: `string`;
           `__brand:@solana/kit`: `"Address"`;
           `__stringEncoding:@solana/kit`: `"base58"`;
           `length`: `number`;
           `[iterator]`: `StringIterator`\<`string`\>;
           `anchor`: `string`;
           `at`: `string` \| `undefined`;
           `big`: `string`;
           `blink`: `string`;
           `bold`: `string`;
           `charAt`: `string`;
           `charCodeAt`: `number`;
           `codePointAt`: `number` \| `undefined`;
           `concat`: `string`;
           `endsWith`: `boolean`;
           `fixed`: `string`;
           `fontcolor`: `string`;
           `fontsize`: `string`;
           `includes`: `boolean`;
           `indexOf`: `number`;
           `italics`: `string`;
           `lastIndexOf`: `number`;
           `link`: `string`;
           `localeCompare`: `number`;
           `match`: `RegExpMatchArray` \| `null`;
           `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
           `normalize`: `string`;
           `padEnd`: `string`;
           `padStart`: `string`;
           `repeat`: `string`;
           `replace`: `string`;
           `replaceAll`: `string`;
           `search`: `number`;
           `slice`: `string`;
           `small`: `string`;
           `split`: `string`[];
           `startsWith`: `boolean`;
           `strike`: `string`;
           `sub`: `string`;
           `substr`: `string`;
           `substring`: `string`;
           `sup`: `string`;
           `toLocaleLowerCase`: `string`;
           `toLocaleUpperCase`: `string`;
           `toLowerCase`: `string`;
           `toString`: `string`;
           `toUpperCase`: `string`;
           `trim`: `string`;
           `trimEnd`: `string`;
           `trimLeft`: `string`;
           `trimRight`: `string`;
           `trimStart`: `string`;
           `valueOf`: `string`;
        \};
        `name`: `string`;
        `storageCost`: `number`;
     \};
     `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`;
     `expiresAtUnixSeconds`: `bigint`;
     `nominalQuantityRaw`: `bigint`;
     `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`;
     `target`: \{
        `x`: \{
           `raw`: `bigint`;
           `value`: `number`;
        \};
        `y`: \{
           `raw`: `bigint`;
           `value`: `number`;
        \};
     \};
     `targetRadius`: \{
        `raw`: `bigint`;
        `value`: `number`;
     \};
   \}
     \| `undefined`;
  `cooldownEndsAtUnixSeconds`: `bigint`;
  `ended`:   \| \{
     `expiresAtUnixSeconds`: `bigint`;
     `terminalAtUnixSeconds`: `bigint`;
   \}
     \| `undefined`;
  `fleet`: \{
     `address`: \{
      \[`key`: `number`\]: `string`;
        `__brand:@solana/kit`: `"Address"`;
        `__stringEncoding:@solana/kit`: `"base58"`;
        `length`: `number`;
        `[iterator]`: `StringIterator`\<`string`\>;
        `anchor`: `string`;
        `at`: `string` \| `undefined`;
        `big`: `string`;
        `blink`: `string`;
        `bold`: `string`;
        `charAt`: `string`;
        `charCodeAt`: `number`;
        `codePointAt`: `number` \| `undefined`;
        `concat`: `string`;
        `endsWith`: `boolean`;
        `fixed`: `string`;
        `fontcolor`: `string`;
        `fontsize`: `string`;
        `includes`: `boolean`;
        `indexOf`: `number`;
        `italics`: `string`;
        `lastIndexOf`: `number`;
        `link`: `string`;
        `localeCompare`: `number`;
        `match`: `RegExpMatchArray` \| `null`;
        `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
        `normalize`: `string`;
        `padEnd`: `string`;
        `padStart`: `string`;
        `repeat`: `string`;
        `replace`: `string`;
        `replaceAll`: `string`;
        `search`: `number`;
        `slice`: `string`;
        `small`: `string`;
        `split`: `string`[];
        `startsWith`: `boolean`;
        `strike`: `string`;
        `sub`: `string`;
        `substr`: `string`;
        `substring`: `string`;
        `sup`: `string`;
        `toLocaleLowerCase`: `string`;
        `toLocaleUpperCase`: `string`;
        `toLowerCase`: `string`;
        `toString`: `string`;
        `toUpperCase`: `string`;
        `trim`: `string`;
        `trimEnd`: `string`;
        `trimLeft`: `string`;
        `trimRight`: `string`;
        `trimStart`: `string`;
        `valueOf`: `string`;
     \};
     `type`: `"fleet"`;
  \};
  `game`: \{
     `address`: \{
      \[`key`: `number`\]: `string`;
        `__brand:@solana/kit`: `"Address"`;
        `__stringEncoding:@solana/kit`: `"base58"`;
        `length`: `number`;
        `[iterator]`: `StringIterator`\<`string`\>;
        `anchor`: `string`;
        `at`: `string` \| `undefined`;
        `big`: `string`;
        `blink`: `string`;
        `bold`: `string`;
        `charAt`: `string`;
        `charCodeAt`: `number`;
        `codePointAt`: `number` \| `undefined`;
        `concat`: `string`;
        `endsWith`: `boolean`;
        `fixed`: `string`;
        `fontcolor`: `string`;
        `fontsize`: `string`;
        `includes`: `boolean`;
        `indexOf`: `number`;
        `italics`: `string`;
        `lastIndexOf`: `number`;
        `link`: `string`;
        `localeCompare`: `number`;
        `match`: `RegExpMatchArray` \| `null`;
        `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
        `normalize`: `string`;
        `padEnd`: `string`;
        `padStart`: `string`;
        `repeat`: `string`;
        `replace`: `string`;
        `replaceAll`: `string`;
        `search`: `number`;
        `slice`: `string`;
        `small`: `string`;
        `split`: `string`[];
        `startsWith`: `boolean`;
        `strike`: `string`;
        `sub`: `string`;
        `substr`: `string`;
        `substring`: `string`;
        `sup`: `string`;
        `toLocaleLowerCase`: `string`;
        `toLocaleUpperCase`: `string`;
        `toLowerCase`: `string`;
        `toString`: `string`;
        `toUpperCase`: `string`;
        `trim`: `string`;
        `trimEnd`: `string`;
        `trimLeft`: `string`;
        `trimRight`: `string`;
        `trimStart`: `string`;
        `valueOf`: `string`;
     \};
     `type`: `"game"`;
  \};
  `kind`: `"scanSignal"`;
  `noContact`:   \| \{
     `resolvedAtUnixSeconds`: `bigint`;
     `terminalAtUnixSeconds`: `bigint`;
     `xpAwardedRaw`: `bigint`;
   \}
     \| `undefined`;
  `ownerCharacter`: \{
     `address`: \{
      \[`key`: `number`\]: `string`;
        `__brand:@solana/kit`: `"Address"`;
        `__stringEncoding:@solana/kit`: `"base58"`;
        `length`: `number`;
        `[iterator]`: `StringIterator`\<`string`\>;
        `anchor`: `string`;
        `at`: `string` \| `undefined`;
        `big`: `string`;
        `blink`: `string`;
        `bold`: `string`;
        `charAt`: `string`;
        `charCodeAt`: `number`;
        `codePointAt`: `number` \| `undefined`;
        `concat`: `string`;
        `endsWith`: `boolean`;
        `fixed`: `string`;
        `fontcolor`: `string`;
        `fontsize`: `string`;
        `includes`: `boolean`;
        `indexOf`: `number`;
        `italics`: `string`;
        `lastIndexOf`: `number`;
        `link`: `string`;
        `localeCompare`: `number`;
        `match`: `RegExpMatchArray` \| `null`;
        `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
        `normalize`: `string`;
        `padEnd`: `string`;
        `padStart`: `string`;
        `repeat`: `string`;
        `replace`: `string`;
        `replaceAll`: `string`;
        `search`: `number`;
        `slice`: `string`;
        `small`: `string`;
        `split`: `string`[];
        `startsWith`: `boolean`;
        `strike`: `string`;
        `sub`: `string`;
        `substr`: `string`;
        `substring`: `string`;
        `sup`: `string`;
        `toLocaleLowerCase`: `string`;
        `toLocaleUpperCase`: `string`;
        `toLowerCase`: `string`;
        `toString`: `string`;
        `toUpperCase`: `string`;
        `trim`: `string`;
        `trimEnd`: `string`;
        `trimLeft`: `string`;
        `trimRight`: `string`;
        `trimStart`: `string`;
        `valueOf`: `string`;
     \};
     `type`: `"character"`;
  \};
  `ownerProfile`: \{
     `address`: \{
      \[`key`: `number`\]: `string`;
        `__brand:@solana/kit`: `"Address"`;
        `__stringEncoding:@solana/kit`: `"base58"`;
        `length`: `number`;
        `[iterator]`: `StringIterator`\<`string`\>;
        `anchor`: `string`;
        `at`: `string` \| `undefined`;
        `big`: `string`;
        `blink`: `string`;
        `bold`: `string`;
        `charAt`: `string`;
        `charCodeAt`: `number`;
        `codePointAt`: `number` \| `undefined`;
        `concat`: `string`;
        `endsWith`: `boolean`;
        `fixed`: `string`;
        `fontcolor`: `string`;
        `fontsize`: `string`;
        `includes`: `boolean`;
        `indexOf`: `number`;
        `italics`: `string`;
        `lastIndexOf`: `number`;
        `link`: `string`;
        `localeCompare`: `number`;
        `match`: `RegExpMatchArray` \| `null`;
        `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
        `normalize`: `string`;
        `padEnd`: `string`;
        `padStart`: `string`;
        `repeat`: `string`;
        `replace`: `string`;
        `replaceAll`: `string`;
        `search`: `number`;
        `slice`: `string`;
        `small`: `string`;
        `split`: `string`[];
        `startsWith`: `boolean`;
        `strike`: `string`;
        `sub`: `string`;
        `substr`: `string`;
        `substring`: `string`;
        `sup`: `string`;
        `toLocaleLowerCase`: `string`;
        `toLocaleUpperCase`: `string`;
        `toLowerCase`: `string`;
        `toString`: `string`;
        `toUpperCase`: `string`;
        `trim`: `string`;
        `trimEnd`: `string`;
        `trimLeft`: `string`;
        `trimRight`: `string`;
        `trimStart`: `string`;
        `valueOf`: `string`;
     \};
     `type`: `"profile"`;
  \};
  `receipt`:   \| \{
     `acceptedQuantityRaw`: `bigint`;
     `cargo`: \{
        `categoryId`: `number`;
        `id`: `number`;
        `mint`: \{
         \[`key`: `number`\]: `string`;
           `__brand:@solana/kit`: `"Address"`;
           `__stringEncoding:@solana/kit`: `"base58"`;
           `length`: `number`;
           `[iterator]`: `StringIterator`\<`string`\>;
           `anchor`: `string`;
           `at`: `string` \| `undefined`;
           `big`: `string`;
           `blink`: `string`;
           `bold`: `string`;
           `charAt`: `string`;
           `charCodeAt`: `number`;
           `codePointAt`: `number` \| `undefined`;
           `concat`: `string`;
           `endsWith`: `boolean`;
           `fixed`: `string`;
           `fontcolor`: `string`;
           `fontsize`: `string`;
           `includes`: `boolean`;
           `indexOf`: `number`;
           `italics`: `string`;
           `lastIndexOf`: `number`;
           `link`: `string`;
           `localeCompare`: `number`;
           `match`: `RegExpMatchArray` \| `null`;
           `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
           `normalize`: `string`;
           `padEnd`: `string`;
           `padStart`: `string`;
           `repeat`: `string`;
           `replace`: `string`;
           `replaceAll`: `string`;
           `search`: `number`;
           `slice`: `string`;
           `small`: `string`;
           `split`: `string`[];
           `startsWith`: `boolean`;
           `strike`: `string`;
           `sub`: `string`;
           `substr`: `string`;
           `substring`: `string`;
           `sup`: `string`;
           `toLocaleLowerCase`: `string`;
           `toLocaleUpperCase`: `string`;
           `toLowerCase`: `string`;
           `toString`: `string`;
           `toUpperCase`: `string`;
           `trim`: `string`;
           `trimEnd`: `string`;
           `trimLeft`: `string`;
           `trimRight`: `string`;
           `trimStart`: `string`;
           `valueOf`: `string`;
        \};
        `name`: `string`;
        `storageCost`: `number`;
     \};
     `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`;
     `clippedQuantityRaw`: `bigint`;
     `nominalQuantityRaw`: `bigint`;
     `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`;
     `resolvedAtUnixSeconds`: `bigint`;
     `terminalAtUnixSeconds`: `bigint`;
     `xpAwardedRaw`: `bigint`;
   \}
     \| `undefined`;
  `recoveryHistory`: \{
     `consecutiveRecoveries`: `number`;
     `lastRecoveryAtUnixSeconds`: `bigint`;
     `lastRegionId`: `number`;
  \};
  `sequence`: `bigint`;
  `status`:   \| `"expired"`
     \| `"empty"`
     \| `"pending-entropy"`
     \| `"contact"`
     \| `"no-contact"`
     \| `"recovered"`
     \| `"abandoned"`;
  `version`: `number`;
  `toJSON`: `unknown`;
\}\>

#### Example

```ts
declare const ctx: SageContext, fleet: Address;
const snapshot = await getScanSignalForFleet(ctx, fleet, { refresh: true });
```

***

<a id="maybegetscanlootprofile"></a>

### maybeGetScanLootProfile()

```ts
function maybeGetScanLootProfile(
   context, 
   regionId, 
   options?): Promise<
  | {
  address: {
   [key: number]: string;
     __brand:@solana/kit: "Address";
     __stringEncoding:@solana/kit: "base58";
     length: number;
     [iterator]: StringIterator<string>;
     anchor: string;
     at: string | undefined;
     big: string;
     blink: string;
     bold: string;
     charAt: string;
     charCodeAt: number;
     codePointAt: number | undefined;
     concat: string;
     endsWith: boolean;
     fixed: string;
     fontcolor: string;
     fontsize: string;
     includes: boolean;
     indexOf: number;
     italics: string;
     lastIndexOf: number;
     link: string;
     localeCompare: number;
     match: RegExpMatchArray | null;
     matchAll: RegExpStringIterator<RegExpExecArray>;
     normalize: string;
     padEnd: string;
     padStart: string;
     repeat: string;
     replace: string;
     replaceAll: string;
     search: number;
     slice: string;
     small: string;
     split: string[];
     startsWith: boolean;
     strike: string;
     sub: string;
     substr: string;
     substring: string;
     sup: string;
     toLocaleLowerCase: string;
     toLocaleUpperCase: string;
     toLowerCase: string;
     toString: string;
     toUpperCase: string;
     trim: string;
     trimEnd: string;
     trimLeft: string;
     trimRight: string;
     trimStart: string;
     valueOf: string;
  };
  anchors: readonly {
     x: {
        raw: bigint;
        value: number;
     };
     y: {
        raw: bigint;
        value: number;
     };
  }[];
  contentFingerprint: string;
  game: {
     address: {
      [key: number]: string;
        __brand:@solana/kit: "Address";
        __stringEncoding:@solana/kit: "base58";
        length: number;
        [iterator]: StringIterator<string>;
        anchor: string;
        at: string | undefined;
        big: string;
        blink: string;
        bold: string;
        charAt: string;
        charCodeAt: number;
        codePointAt: number | undefined;
        concat: string;
        endsWith: boolean;
        fixed: string;
        fontcolor: string;
        fontsize: string;
        includes: boolean;
        indexOf: number;
        italics: string;
        lastIndexOf: number;
        link: string;
        localeCompare: number;
        match: RegExpMatchArray | null;
        matchAll: RegExpStringIterator<RegExpExecArray>;
        normalize: string;
        padEnd: string;
        padStart: string;
        repeat: string;
        replace: string;
        replaceAll: string;
        search: number;
        slice: string;
        small: string;
        split: string[];
        startsWith: boolean;
        strike: string;
        sub: string;
        substr: string;
        substring: string;
        sup: string;
        toLocaleLowerCase: string;
        toLocaleUpperCase: string;
        toLowerCase: string;
        toString: string;
        toUpperCase: string;
        trim: string;
        trimEnd: string;
        trimLeft: string;
        trimRight: string;
        trimStart: string;
        valueOf: string;
     };
     type: "game";
  };
  kind: "scanLootProfile";
  loot: readonly {
     baseQuantityRaw: bigint;
     cargo: {
        categoryId: number;
        id: number;
        mint: {
         [key: number]: string;
           __brand:@solana/kit: "Address";
           __stringEncoding:@solana/kit: "base58";
           length: number;
           [iterator]: StringIterator<string>;
           anchor: string;
           at: string | undefined;
           big: string;
           blink: string;
           bold: string;
           charAt: string;
           charCodeAt: number;
           codePointAt: number | undefined;
           concat: string;
           endsWith: boolean;
           fixed: string;
           fontcolor: string;
           fontsize: string;
           includes: boolean;
           indexOf: number;
           italics: string;
           lastIndexOf: number;
           link: string;
           localeCompare: number;
           match: RegExpMatchArray | null;
           matchAll: RegExpStringIterator<RegExpExecArray>;
           normalize: string;
           padEnd: string;
           padStart: string;
           repeat: string;
           replace: string;
           replaceAll: string;
           search: number;
           slice: string;
           small: string;
           split: string[];
           startsWith: boolean;
           strike: string;
           sub: string;
           substr: string;
           substring: string;
           sup: string;
           toLocaleLowerCase: string;
           toLocaleUpperCase: string;
           toLowerCase: string;
           toString: string;
           toUpperCase: string;
           trim: string;
           trimEnd: string;
           trimLeft: string;
           trimRight: string;
           trimStart: string;
           valueOf: string;
        };
        name: string;
        storageCost: number;
     };
     category: "any" | "industrial" | "technology" | "tactical" | "exotic";
     rarity: "common" | "uncommon" | "rare" | "epic" | "legendary" | "anomalous";
     requiredResearchTagIds: readonly number[];
     rollWeight: number;
     supportedPatternIds: readonly number[];
     valueUnits: number;
  }[];
  regionId: number;
  revision: number;
  riskValueMultiplierBasisPoints: number;
  status: "active" | "draft" | "removed";
  version: number;
  toJSON: unknown;
}
| undefined>;
```

Defined in: [packages/sage/src/scanning/signals.ts:391](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/signals.ts#L391)

Derives and reads an optional ScanLootProfile for the configured Game. Absence returns undefined; malformed accounts still throw.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `context` | [`SageContext`](/reference/#sagecontext) |
| `regionId` | `number` |
| `options?` | [`ReadOptions`](/reference/client/#readoptions) |

#### Returns

`Promise`\<
  \| \{
  `address`: \{
   \[`key`: `number`\]: `string`;
     `__brand:@solana/kit`: `"Address"`;
     `__stringEncoding:@solana/kit`: `"base58"`;
     `length`: `number`;
     `[iterator]`: `StringIterator`\<`string`\>;
     `anchor`: `string`;
     `at`: `string` \| `undefined`;
     `big`: `string`;
     `blink`: `string`;
     `bold`: `string`;
     `charAt`: `string`;
     `charCodeAt`: `number`;
     `codePointAt`: `number` \| `undefined`;
     `concat`: `string`;
     `endsWith`: `boolean`;
     `fixed`: `string`;
     `fontcolor`: `string`;
     `fontsize`: `string`;
     `includes`: `boolean`;
     `indexOf`: `number`;
     `italics`: `string`;
     `lastIndexOf`: `number`;
     `link`: `string`;
     `localeCompare`: `number`;
     `match`: `RegExpMatchArray` \| `null`;
     `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
     `normalize`: `string`;
     `padEnd`: `string`;
     `padStart`: `string`;
     `repeat`: `string`;
     `replace`: `string`;
     `replaceAll`: `string`;
     `search`: `number`;
     `slice`: `string`;
     `small`: `string`;
     `split`: `string`[];
     `startsWith`: `boolean`;
     `strike`: `string`;
     `sub`: `string`;
     `substr`: `string`;
     `substring`: `string`;
     `sup`: `string`;
     `toLocaleLowerCase`: `string`;
     `toLocaleUpperCase`: `string`;
     `toLowerCase`: `string`;
     `toString`: `string`;
     `toUpperCase`: `string`;
     `trim`: `string`;
     `trimEnd`: `string`;
     `trimLeft`: `string`;
     `trimRight`: `string`;
     `trimStart`: `string`;
     `valueOf`: `string`;
  \};
  `anchors`: readonly \{
     `x`: \{
        `raw`: `bigint`;
        `value`: `number`;
     \};
     `y`: \{
        `raw`: `bigint`;
        `value`: `number`;
     \};
  \}[];
  `contentFingerprint`: `string`;
  `game`: \{
     `address`: \{
      \[`key`: `number`\]: `string`;
        `__brand:@solana/kit`: `"Address"`;
        `__stringEncoding:@solana/kit`: `"base58"`;
        `length`: `number`;
        `[iterator]`: `StringIterator`\<`string`\>;
        `anchor`: `string`;
        `at`: `string` \| `undefined`;
        `big`: `string`;
        `blink`: `string`;
        `bold`: `string`;
        `charAt`: `string`;
        `charCodeAt`: `number`;
        `codePointAt`: `number` \| `undefined`;
        `concat`: `string`;
        `endsWith`: `boolean`;
        `fixed`: `string`;
        `fontcolor`: `string`;
        `fontsize`: `string`;
        `includes`: `boolean`;
        `indexOf`: `number`;
        `italics`: `string`;
        `lastIndexOf`: `number`;
        `link`: `string`;
        `localeCompare`: `number`;
        `match`: `RegExpMatchArray` \| `null`;
        `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
        `normalize`: `string`;
        `padEnd`: `string`;
        `padStart`: `string`;
        `repeat`: `string`;
        `replace`: `string`;
        `replaceAll`: `string`;
        `search`: `number`;
        `slice`: `string`;
        `small`: `string`;
        `split`: `string`[];
        `startsWith`: `boolean`;
        `strike`: `string`;
        `sub`: `string`;
        `substr`: `string`;
        `substring`: `string`;
        `sup`: `string`;
        `toLocaleLowerCase`: `string`;
        `toLocaleUpperCase`: `string`;
        `toLowerCase`: `string`;
        `toString`: `string`;
        `toUpperCase`: `string`;
        `trim`: `string`;
        `trimEnd`: `string`;
        `trimLeft`: `string`;
        `trimRight`: `string`;
        `trimStart`: `string`;
        `valueOf`: `string`;
     \};
     `type`: `"game"`;
  \};
  `kind`: `"scanLootProfile"`;
  `loot`: readonly \{
     `baseQuantityRaw`: `bigint`;
     `cargo`: \{
        `categoryId`: `number`;
        `id`: `number`;
        `mint`: \{
         \[`key`: `number`\]: `string`;
           `__brand:@solana/kit`: `"Address"`;
           `__stringEncoding:@solana/kit`: `"base58"`;
           `length`: `number`;
           `[iterator]`: `StringIterator`\<`string`\>;
           `anchor`: `string`;
           `at`: `string` \| `undefined`;
           `big`: `string`;
           `blink`: `string`;
           `bold`: `string`;
           `charAt`: `string`;
           `charCodeAt`: `number`;
           `codePointAt`: `number` \| `undefined`;
           `concat`: `string`;
           `endsWith`: `boolean`;
           `fixed`: `string`;
           `fontcolor`: `string`;
           `fontsize`: `string`;
           `includes`: `boolean`;
           `indexOf`: `number`;
           `italics`: `string`;
           `lastIndexOf`: `number`;
           `link`: `string`;
           `localeCompare`: `number`;
           `match`: `RegExpMatchArray` \| `null`;
           `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
           `normalize`: `string`;
           `padEnd`: `string`;
           `padStart`: `string`;
           `repeat`: `string`;
           `replace`: `string`;
           `replaceAll`: `string`;
           `search`: `number`;
           `slice`: `string`;
           `small`: `string`;
           `split`: `string`[];
           `startsWith`: `boolean`;
           `strike`: `string`;
           `sub`: `string`;
           `substr`: `string`;
           `substring`: `string`;
           `sup`: `string`;
           `toLocaleLowerCase`: `string`;
           `toLocaleUpperCase`: `string`;
           `toLowerCase`: `string`;
           `toString`: `string`;
           `toUpperCase`: `string`;
           `trim`: `string`;
           `trimEnd`: `string`;
           `trimLeft`: `string`;
           `trimRight`: `string`;
           `trimStart`: `string`;
           `valueOf`: `string`;
        \};
        `name`: `string`;
        `storageCost`: `number`;
     \};
     `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`;
     `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`;
     `requiredResearchTagIds`: readonly `number`[];
     `rollWeight`: `number`;
     `supportedPatternIds`: readonly `number`[];
     `valueUnits`: `number`;
  \}[];
  `regionId`: `number`;
  `revision`: `number`;
  `riskValueMultiplierBasisPoints`: `number`;
  `status`: `"active"` \| `"draft"` \| `"removed"`;
  `version`: `number`;
  `toJSON`: `unknown`;
\}
  \| `undefined`\>

#### Example

```ts
declare const ctx: SageContext, regionId: number;
const snapshot = await maybeGetScanLootProfile(ctx, regionId, { refresh: true });
```

***

<a id="maybegetscanpattern"></a>

### maybeGetScanPattern()

```ts
function maybeGetScanPattern(
   context, 
   patternId, 
   options?): Promise<
  | ScanPatternSnapshot
| undefined>;
```

Defined in: [packages/sage/src/scanning/index.ts:302](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/index.ts#L302)

Derives and reads one optional ScanPattern for the configured Game.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `context` | [`SageContext`](/reference/#sagecontext) |
| `patternId` | `number` |
| `options?` | [`ReadOptions`](/reference/client/#readoptions) |

#### Returns

`Promise`\<
  \| [`ScanPatternSnapshot`](/reference/scanning/#scanpatternsnapshot)
  \| `undefined`\>

#### Example

```ts
declare const ctx: SageContext;
const pattern = await maybeGetScanPattern(ctx, 2);
```

***

<a id="maybegetscanpatternpolicy"></a>

### maybeGetScanPatternPolicy()

```ts
function maybeGetScanPatternPolicy(
   context, 
   patternId, 
   options?): Promise<
  | {
  address: {
   [key: number]: string;
     __brand:@solana/kit: "Address";
     __stringEncoding:@solana/kit: "base58";
     length: number;
     [iterator]: StringIterator<string>;
     anchor: string;
     at: string | undefined;
     big: string;
     blink: string;
     bold: string;
     charAt: string;
     charCodeAt: number;
     codePointAt: number | undefined;
     concat: string;
     endsWith: boolean;
     fixed: string;
     fontcolor: string;
     fontsize: string;
     includes: boolean;
     indexOf: number;
     italics: string;
     lastIndexOf: number;
     link: string;
     localeCompare: number;
     match: RegExpMatchArray | null;
     matchAll: RegExpStringIterator<RegExpExecArray>;
     normalize: string;
     padEnd: string;
     padStart: string;
     repeat: string;
     replace: string;
     replaceAll: string;
     search: number;
     slice: string;
     small: string;
     split: string[];
     startsWith: boolean;
     strike: string;
     sub: string;
     substr: string;
     substring: string;
     sup: string;
     toLocaleLowerCase: string;
     toLocaleUpperCase: string;
     toLowerCase: string;
     toString: string;
     toUpperCase: string;
     trim: string;
     trimEnd: string;
     trimLeft: string;
     trimRight: string;
     trimStart: string;
     valueOf: string;
  };
  allowedFocusCategories: readonly ("any" | "industrial" | "technology" | "tactical" | "exotic")[];
  contactChanceBasisPoints: number;
  contentFingerprint: string;
  exhaustionDecaySeconds: number;
  exhaustionPerRecoveryBasisPoints: number;
  game: {
     address: {
      [key: number]: string;
        __brand:@solana/kit: "Address";
        __stringEncoding:@solana/kit: "base58";
        length: number;
        [iterator]: StringIterator<string>;
        anchor: string;
        at: string | undefined;
        big: string;
        blink: string;
        bold: string;
        charAt: string;
        charCodeAt: number;
        codePointAt: number | undefined;
        concat: string;
        endsWith: boolean;
        fixed: string;
        fontcolor: string;
        fontsize: string;
        includes: boolean;
        indexOf: number;
        italics: string;
        lastIndexOf: number;
        link: string;
        localeCompare: number;
        match: RegExpMatchArray | null;
        matchAll: RegExpStringIterator<RegExpExecArray>;
        normalize: string;
        padEnd: string;
        padStart: string;
        repeat: string;
        replace: string;
        replaceAll: string;
        search: number;
        slice: string;
        small: string;
        split: string[];
        startsWith: boolean;
        strike: string;
        sub: string;
        substr: string;
        substring: string;
        sup: string;
        toLocaleLowerCase: string;
        toLocaleUpperCase: string;
        toLowerCase: string;
        toString: string;
        toUpperCase: string;
        trim: string;
        trimEnd: string;
        trimLeft: string;
        trimRight: string;
        trimStart: string;
        valueOf: string;
     };
     type: "game";
  };
  kind: "scanPatternPolicy";
  maximumExhaustionBasisPoints: number;
  maximumRarity: "common" | "uncommon" | "rare" | "epic" | "legendary" | "anomalous";
  noContactXpRaw: bigint;
  patternId: number;
  recoveryXpRaw: bigint;
  requiredResearchTagIds: readonly number[];
  revision: number;
  signalLifetimeSeconds: number;
  status: "active" | "draft" | "removed";
  strategy: "broad" | "focused" | "enhanced" | "deep" | "spatial";
  targetRadius: {
     raw: bigint;
     value: number;
  };
  valueBudgetRaw: bigint;
  version: number;
  toJSON: unknown;
}
| undefined>;
```

Defined in: [packages/sage/src/scanning/signals.ts:342](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/signals.ts#L342)

Derives and reads an optional ScanPatternPolicy for the configured Game. Absence returns undefined; malformed accounts still throw.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `context` | [`SageContext`](/reference/#sagecontext) |
| `patternId` | `number` |
| `options?` | [`ReadOptions`](/reference/client/#readoptions) |

#### Returns

`Promise`\<
  \| \{
  `address`: \{
   \[`key`: `number`\]: `string`;
     `__brand:@solana/kit`: `"Address"`;
     `__stringEncoding:@solana/kit`: `"base58"`;
     `length`: `number`;
     `[iterator]`: `StringIterator`\<`string`\>;
     `anchor`: `string`;
     `at`: `string` \| `undefined`;
     `big`: `string`;
     `blink`: `string`;
     `bold`: `string`;
     `charAt`: `string`;
     `charCodeAt`: `number`;
     `codePointAt`: `number` \| `undefined`;
     `concat`: `string`;
     `endsWith`: `boolean`;
     `fixed`: `string`;
     `fontcolor`: `string`;
     `fontsize`: `string`;
     `includes`: `boolean`;
     `indexOf`: `number`;
     `italics`: `string`;
     `lastIndexOf`: `number`;
     `link`: `string`;
     `localeCompare`: `number`;
     `match`: `RegExpMatchArray` \| `null`;
     `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
     `normalize`: `string`;
     `padEnd`: `string`;
     `padStart`: `string`;
     `repeat`: `string`;
     `replace`: `string`;
     `replaceAll`: `string`;
     `search`: `number`;
     `slice`: `string`;
     `small`: `string`;
     `split`: `string`[];
     `startsWith`: `boolean`;
     `strike`: `string`;
     `sub`: `string`;
     `substr`: `string`;
     `substring`: `string`;
     `sup`: `string`;
     `toLocaleLowerCase`: `string`;
     `toLocaleUpperCase`: `string`;
     `toLowerCase`: `string`;
     `toString`: `string`;
     `toUpperCase`: `string`;
     `trim`: `string`;
     `trimEnd`: `string`;
     `trimLeft`: `string`;
     `trimRight`: `string`;
     `trimStart`: `string`;
     `valueOf`: `string`;
  \};
  `allowedFocusCategories`: readonly (`"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`)[];
  `contactChanceBasisPoints`: `number`;
  `contentFingerprint`: `string`;
  `exhaustionDecaySeconds`: `number`;
  `exhaustionPerRecoveryBasisPoints`: `number`;
  `game`: \{
     `address`: \{
      \[`key`: `number`\]: `string`;
        `__brand:@solana/kit`: `"Address"`;
        `__stringEncoding:@solana/kit`: `"base58"`;
        `length`: `number`;
        `[iterator]`: `StringIterator`\<`string`\>;
        `anchor`: `string`;
        `at`: `string` \| `undefined`;
        `big`: `string`;
        `blink`: `string`;
        `bold`: `string`;
        `charAt`: `string`;
        `charCodeAt`: `number`;
        `codePointAt`: `number` \| `undefined`;
        `concat`: `string`;
        `endsWith`: `boolean`;
        `fixed`: `string`;
        `fontcolor`: `string`;
        `fontsize`: `string`;
        `includes`: `boolean`;
        `indexOf`: `number`;
        `italics`: `string`;
        `lastIndexOf`: `number`;
        `link`: `string`;
        `localeCompare`: `number`;
        `match`: `RegExpMatchArray` \| `null`;
        `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
        `normalize`: `string`;
        `padEnd`: `string`;
        `padStart`: `string`;
        `repeat`: `string`;
        `replace`: `string`;
        `replaceAll`: `string`;
        `search`: `number`;
        `slice`: `string`;
        `small`: `string`;
        `split`: `string`[];
        `startsWith`: `boolean`;
        `strike`: `string`;
        `sub`: `string`;
        `substr`: `string`;
        `substring`: `string`;
        `sup`: `string`;
        `toLocaleLowerCase`: `string`;
        `toLocaleUpperCase`: `string`;
        `toLowerCase`: `string`;
        `toString`: `string`;
        `toUpperCase`: `string`;
        `trim`: `string`;
        `trimEnd`: `string`;
        `trimLeft`: `string`;
        `trimRight`: `string`;
        `trimStart`: `string`;
        `valueOf`: `string`;
     \};
     `type`: `"game"`;
  \};
  `kind`: `"scanPatternPolicy"`;
  `maximumExhaustionBasisPoints`: `number`;
  `maximumRarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`;
  `noContactXpRaw`: `bigint`;
  `patternId`: `number`;
  `recoveryXpRaw`: `bigint`;
  `requiredResearchTagIds`: readonly `number`[];
  `revision`: `number`;
  `signalLifetimeSeconds`: `number`;
  `status`: `"active"` \| `"draft"` \| `"removed"`;
  `strategy`: `"broad"` \| `"focused"` \| `"enhanced"` \| `"deep"` \| `"spatial"`;
  `targetRadius`: \{
     `raw`: `bigint`;
     `value`: `number`;
  \};
  `valueBudgetRaw`: `bigint`;
  `version`: `number`;
  `toJSON`: `unknown`;
\}
  \| `undefined`\>

#### Example

```ts
declare const ctx: SageContext, patternId: number;
const snapshot = await maybeGetScanPatternPolicy(ctx, patternId, { refresh: true });
```

***

<a id="maybegetscansignalforfleet"></a>

### maybeGetScanSignalForFleet()

```ts
function maybeGetScanSignalForFleet(
   context, 
   fleet, 
   options?): Promise<
  | {
  address: {
   [key: number]: string;
     __brand:@solana/kit: "Address";
     __stringEncoding:@solana/kit: "base58";
     length: number;
     [iterator]: StringIterator<string>;
     anchor: string;
     at: string | undefined;
     big: string;
     blink: string;
     bold: string;
     charAt: string;
     charCodeAt: number;
     codePointAt: number | undefined;
     concat: string;
     endsWith: boolean;
     fixed: string;
     fontcolor: string;
     fontsize: string;
     includes: boolean;
     indexOf: number;
     italics: string;
     lastIndexOf: number;
     link: string;
     localeCompare: number;
     match: RegExpMatchArray | null;
     matchAll: RegExpStringIterator<RegExpExecArray>;
     normalize: string;
     padEnd: string;
     padStart: string;
     repeat: string;
     replace: string;
     replaceAll: string;
     search: number;
     slice: string;
     small: string;
     split: string[];
     startsWith: boolean;
     strike: string;
     sub: string;
     substr: string;
     substring: string;
     sup: string;
     toLocaleLowerCase: string;
     toLocaleUpperCase: string;
     toLowerCase: string;
     toString: string;
     toUpperCase: string;
     trim: string;
     trimEnd: string;
     trimLeft: string;
     trimRight: string;
     trimStart: string;
     valueOf: string;
  };
  attempt:   | {
     commitSlot: bigint;
     contactChanceBasisPoints: number;
     detectedAtUnixSeconds: bigint;
     eligibleLootRowIndexes: readonly number[];
     exhaustionBasisPoints: number;
     focus: "any" | "industrial" | "technology" | "tactical" | "exotic";
     location: {
        x: {
           raw: bigint;
           value: number;
        };
        y: {
           raw: bigint;
           value: number;
        };
     };
     lootProfileContentFingerprint: string;
     lootProfileRevision: number;
     patternId: number;
     policyContentFingerprint: string;
     policyRevision: number;
     regionId: number;
     revealSlots: readonly bigint[];
   }
     | undefined;
  contact:   | {
     baseQuantityRaw: bigint;
     cargo: {
        categoryId: number;
        id: number;
        mint: {
         [key: number]: string;
           __brand:@solana/kit: "Address";
           __stringEncoding:@solana/kit: "base58";
           length: number;
           [iterator]: StringIterator<string>;
           anchor: string;
           at: string | undefined;
           big: string;
           blink: string;
           bold: string;
           charAt: string;
           charCodeAt: number;
           codePointAt: number | undefined;
           concat: string;
           endsWith: boolean;
           fixed: string;
           fontcolor: string;
           fontsize: string;
           includes: boolean;
           indexOf: number;
           italics: string;
           lastIndexOf: number;
           link: string;
           localeCompare: number;
           match: RegExpMatchArray | null;
           matchAll: RegExpStringIterator<RegExpExecArray>;
           normalize: string;
           padEnd: string;
           padStart: string;
           repeat: string;
           replace: string;
           replaceAll: string;
           search: number;
           slice: string;
           small: string;
           split: string[];
           startsWith: boolean;
           strike: string;
           sub: string;
           substr: string;
           substring: string;
           sup: string;
           toLocaleLowerCase: string;
           toLocaleUpperCase: string;
           toLowerCase: string;
           toString: string;
           toUpperCase: string;
           trim: string;
           trimEnd: string;
           trimLeft: string;
           trimRight: string;
           trimStart: string;
           valueOf: string;
        };
        name: string;
        storageCost: number;
     };
     category: "any" | "industrial" | "technology" | "tactical" | "exotic";
     expiresAtUnixSeconds: bigint;
     nominalQuantityRaw: bigint;
     rarity: "common" | "uncommon" | "rare" | "epic" | "legendary" | "anomalous";
     target: {
        x: {
           raw: bigint;
           value: number;
        };
        y: {
           raw: bigint;
           value: number;
        };
     };
     targetRadius: {
        raw: bigint;
        value: number;
     };
   }
     | undefined;
  cooldownEndsAtUnixSeconds: bigint;
  ended:   | {
     expiresAtUnixSeconds: bigint;
     terminalAtUnixSeconds: bigint;
   }
     | undefined;
  fleet: {
     address: {
      [key: number]: string;
        __brand:@solana/kit: "Address";
        __stringEncoding:@solana/kit: "base58";
        length: number;
        [iterator]: StringIterator<string>;
        anchor: string;
        at: string | undefined;
        big: string;
        blink: string;
        bold: string;
        charAt: string;
        charCodeAt: number;
        codePointAt: number | undefined;
        concat: string;
        endsWith: boolean;
        fixed: string;
        fontcolor: string;
        fontsize: string;
        includes: boolean;
        indexOf: number;
        italics: string;
        lastIndexOf: number;
        link: string;
        localeCompare: number;
        match: RegExpMatchArray | null;
        matchAll: RegExpStringIterator<RegExpExecArray>;
        normalize: string;
        padEnd: string;
        padStart: string;
        repeat: string;
        replace: string;
        replaceAll: string;
        search: number;
        slice: string;
        small: string;
        split: string[];
        startsWith: boolean;
        strike: string;
        sub: string;
        substr: string;
        substring: string;
        sup: string;
        toLocaleLowerCase: string;
        toLocaleUpperCase: string;
        toLowerCase: string;
        toString: string;
        toUpperCase: string;
        trim: string;
        trimEnd: string;
        trimLeft: string;
        trimRight: string;
        trimStart: string;
        valueOf: string;
     };
     type: "fleet";
  };
  game: {
     address: {
      [key: number]: string;
        __brand:@solana/kit: "Address";
        __stringEncoding:@solana/kit: "base58";
        length: number;
        [iterator]: StringIterator<string>;
        anchor: string;
        at: string | undefined;
        big: string;
        blink: string;
        bold: string;
        charAt: string;
        charCodeAt: number;
        codePointAt: number | undefined;
        concat: string;
        endsWith: boolean;
        fixed: string;
        fontcolor: string;
        fontsize: string;
        includes: boolean;
        indexOf: number;
        italics: string;
        lastIndexOf: number;
        link: string;
        localeCompare: number;
        match: RegExpMatchArray | null;
        matchAll: RegExpStringIterator<RegExpExecArray>;
        normalize: string;
        padEnd: string;
        padStart: string;
        repeat: string;
        replace: string;
        replaceAll: string;
        search: number;
        slice: string;
        small: string;
        split: string[];
        startsWith: boolean;
        strike: string;
        sub: string;
        substr: string;
        substring: string;
        sup: string;
        toLocaleLowerCase: string;
        toLocaleUpperCase: string;
        toLowerCase: string;
        toString: string;
        toUpperCase: string;
        trim: string;
        trimEnd: string;
        trimLeft: string;
        trimRight: string;
        trimStart: string;
        valueOf: string;
     };
     type: "game";
  };
  kind: "scanSignal";
  noContact:   | {
     resolvedAtUnixSeconds: bigint;
     terminalAtUnixSeconds: bigint;
     xpAwardedRaw: bigint;
   }
     | undefined;
  ownerCharacter: {
     address: {
      [key: number]: string;
        __brand:@solana/kit: "Address";
        __stringEncoding:@solana/kit: "base58";
        length: number;
        [iterator]: StringIterator<string>;
        anchor: string;
        at: string | undefined;
        big: string;
        blink: string;
        bold: string;
        charAt: string;
        charCodeAt: number;
        codePointAt: number | undefined;
        concat: string;
        endsWith: boolean;
        fixed: string;
        fontcolor: string;
        fontsize: string;
        includes: boolean;
        indexOf: number;
        italics: string;
        lastIndexOf: number;
        link: string;
        localeCompare: number;
        match: RegExpMatchArray | null;
        matchAll: RegExpStringIterator<RegExpExecArray>;
        normalize: string;
        padEnd: string;
        padStart: string;
        repeat: string;
        replace: string;
        replaceAll: string;
        search: number;
        slice: string;
        small: string;
        split: string[];
        startsWith: boolean;
        strike: string;
        sub: string;
        substr: string;
        substring: string;
        sup: string;
        toLocaleLowerCase: string;
        toLocaleUpperCase: string;
        toLowerCase: string;
        toString: string;
        toUpperCase: string;
        trim: string;
        trimEnd: string;
        trimLeft: string;
        trimRight: string;
        trimStart: string;
        valueOf: string;
     };
     type: "character";
  };
  ownerProfile: {
     address: {
      [key: number]: string;
        __brand:@solana/kit: "Address";
        __stringEncoding:@solana/kit: "base58";
        length: number;
        [iterator]: StringIterator<string>;
        anchor: string;
        at: string | undefined;
        big: string;
        blink: string;
        bold: string;
        charAt: string;
        charCodeAt: number;
        codePointAt: number | undefined;
        concat: string;
        endsWith: boolean;
        fixed: string;
        fontcolor: string;
        fontsize: string;
        includes: boolean;
        indexOf: number;
        italics: string;
        lastIndexOf: number;
        link: string;
        localeCompare: number;
        match: RegExpMatchArray | null;
        matchAll: RegExpStringIterator<RegExpExecArray>;
        normalize: string;
        padEnd: string;
        padStart: string;
        repeat: string;
        replace: string;
        replaceAll: string;
        search: number;
        slice: string;
        small: string;
        split: string[];
        startsWith: boolean;
        strike: string;
        sub: string;
        substr: string;
        substring: string;
        sup: string;
        toLocaleLowerCase: string;
        toLocaleUpperCase: string;
        toLowerCase: string;
        toString: string;
        toUpperCase: string;
        trim: string;
        trimEnd: string;
        trimLeft: string;
        trimRight: string;
        trimStart: string;
        valueOf: string;
     };
     type: "profile";
  };
  receipt:   | {
     acceptedQuantityRaw: bigint;
     cargo: {
        categoryId: number;
        id: number;
        mint: {
         [key: number]: string;
           __brand:@solana/kit: "Address";
           __stringEncoding:@solana/kit: "base58";
           length: number;
           [iterator]: StringIterator<string>;
           anchor: string;
           at: string | undefined;
           big: string;
           blink: string;
           bold: string;
           charAt: string;
           charCodeAt: number;
           codePointAt: number | undefined;
           concat: string;
           endsWith: boolean;
           fixed: string;
           fontcolor: string;
           fontsize: string;
           includes: boolean;
           indexOf: number;
           italics: string;
           lastIndexOf: number;
           link: string;
           localeCompare: number;
           match: RegExpMatchArray | null;
           matchAll: RegExpStringIterator<RegExpExecArray>;
           normalize: string;
           padEnd: string;
           padStart: string;
           repeat: string;
           replace: string;
           replaceAll: string;
           search: number;
           slice: string;
           small: string;
           split: string[];
           startsWith: boolean;
           strike: string;
           sub: string;
           substr: string;
           substring: string;
           sup: string;
           toLocaleLowerCase: string;
           toLocaleUpperCase: string;
           toLowerCase: string;
           toString: string;
           toUpperCase: string;
           trim: string;
           trimEnd: string;
           trimLeft: string;
           trimRight: string;
           trimStart: string;
           valueOf: string;
        };
        name: string;
        storageCost: number;
     };
     category: "any" | "industrial" | "technology" | "tactical" | "exotic";
     clippedQuantityRaw: bigint;
     nominalQuantityRaw: bigint;
     rarity: "common" | "uncommon" | "rare" | "epic" | "legendary" | "anomalous";
     resolvedAtUnixSeconds: bigint;
     terminalAtUnixSeconds: bigint;
     xpAwardedRaw: bigint;
   }
     | undefined;
  recoveryHistory: {
     consecutiveRecoveries: number;
     lastRecoveryAtUnixSeconds: bigint;
     lastRegionId: number;
  };
  sequence: bigint;
  status:   | "expired"
     | "empty"
     | "pending-entropy"
     | "contact"
     | "no-contact"
     | "recovered"
     | "abandoned";
  version: number;
  toJSON: unknown;
}
| undefined>;
```

Defined in: [packages/sage/src/scanning/signals.ts:293](https://github.com/Aephia/atlas-kit/blob/develop/packages/sage/src/scanning/signals.ts#L293)

Derives and reads an optional ScanSignal for the configured Game. Absence returns undefined; malformed accounts still throw.

#### Parameters

| Parameter | Type |
| ------ | ------ |
| `context` | [`SageContext`](/reference/#sagecontext) |
| `fleet` | [`Address`](/reference/#address-20) |
| `options?` | [`ReadOptions`](/reference/client/#readoptions) |

#### Returns

`Promise`\<
  \| \{
  `address`: \{
   \[`key`: `number`\]: `string`;
     `__brand:@solana/kit`: `"Address"`;
     `__stringEncoding:@solana/kit`: `"base58"`;
     `length`: `number`;
     `[iterator]`: `StringIterator`\<`string`\>;
     `anchor`: `string`;
     `at`: `string` \| `undefined`;
     `big`: `string`;
     `blink`: `string`;
     `bold`: `string`;
     `charAt`: `string`;
     `charCodeAt`: `number`;
     `codePointAt`: `number` \| `undefined`;
     `concat`: `string`;
     `endsWith`: `boolean`;
     `fixed`: `string`;
     `fontcolor`: `string`;
     `fontsize`: `string`;
     `includes`: `boolean`;
     `indexOf`: `number`;
     `italics`: `string`;
     `lastIndexOf`: `number`;
     `link`: `string`;
     `localeCompare`: `number`;
     `match`: `RegExpMatchArray` \| `null`;
     `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
     `normalize`: `string`;
     `padEnd`: `string`;
     `padStart`: `string`;
     `repeat`: `string`;
     `replace`: `string`;
     `replaceAll`: `string`;
     `search`: `number`;
     `slice`: `string`;
     `small`: `string`;
     `split`: `string`[];
     `startsWith`: `boolean`;
     `strike`: `string`;
     `sub`: `string`;
     `substr`: `string`;
     `substring`: `string`;
     `sup`: `string`;
     `toLocaleLowerCase`: `string`;
     `toLocaleUpperCase`: `string`;
     `toLowerCase`: `string`;
     `toString`: `string`;
     `toUpperCase`: `string`;
     `trim`: `string`;
     `trimEnd`: `string`;
     `trimLeft`: `string`;
     `trimRight`: `string`;
     `trimStart`: `string`;
     `valueOf`: `string`;
  \};
  `attempt`:   \| \{
     `commitSlot`: `bigint`;
     `contactChanceBasisPoints`: `number`;
     `detectedAtUnixSeconds`: `bigint`;
     `eligibleLootRowIndexes`: readonly `number`[];
     `exhaustionBasisPoints`: `number`;
     `focus`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`;
     `location`: \{
        `x`: \{
           `raw`: `bigint`;
           `value`: `number`;
        \};
        `y`: \{
           `raw`: `bigint`;
           `value`: `number`;
        \};
     \};
     `lootProfileContentFingerprint`: `string`;
     `lootProfileRevision`: `number`;
     `patternId`: `number`;
     `policyContentFingerprint`: `string`;
     `policyRevision`: `number`;
     `regionId`: `number`;
     `revealSlots`: readonly `bigint`[];
   \}
     \| `undefined`;
  `contact`:   \| \{
     `baseQuantityRaw`: `bigint`;
     `cargo`: \{
        `categoryId`: `number`;
        `id`: `number`;
        `mint`: \{
         \[`key`: `number`\]: `string`;
           `__brand:@solana/kit`: `"Address"`;
           `__stringEncoding:@solana/kit`: `"base58"`;
           `length`: `number`;
           `[iterator]`: `StringIterator`\<`string`\>;
           `anchor`: `string`;
           `at`: `string` \| `undefined`;
           `big`: `string`;
           `blink`: `string`;
           `bold`: `string`;
           `charAt`: `string`;
           `charCodeAt`: `number`;
           `codePointAt`: `number` \| `undefined`;
           `concat`: `string`;
           `endsWith`: `boolean`;
           `fixed`: `string`;
           `fontcolor`: `string`;
           `fontsize`: `string`;
           `includes`: `boolean`;
           `indexOf`: `number`;
           `italics`: `string`;
           `lastIndexOf`: `number`;
           `link`: `string`;
           `localeCompare`: `number`;
           `match`: `RegExpMatchArray` \| `null`;
           `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
           `normalize`: `string`;
           `padEnd`: `string`;
           `padStart`: `string`;
           `repeat`: `string`;
           `replace`: `string`;
           `replaceAll`: `string`;
           `search`: `number`;
           `slice`: `string`;
           `small`: `string`;
           `split`: `string`[];
           `startsWith`: `boolean`;
           `strike`: `string`;
           `sub`: `string`;
           `substr`: `string`;
           `substring`: `string`;
           `sup`: `string`;
           `toLocaleLowerCase`: `string`;
           `toLocaleUpperCase`: `string`;
           `toLowerCase`: `string`;
           `toString`: `string`;
           `toUpperCase`: `string`;
           `trim`: `string`;
           `trimEnd`: `string`;
           `trimLeft`: `string`;
           `trimRight`: `string`;
           `trimStart`: `string`;
           `valueOf`: `string`;
        \};
        `name`: `string`;
        `storageCost`: `number`;
     \};
     `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`;
     `expiresAtUnixSeconds`: `bigint`;
     `nominalQuantityRaw`: `bigint`;
     `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`;
     `target`: \{
        `x`: \{
           `raw`: `bigint`;
           `value`: `number`;
        \};
        `y`: \{
           `raw`: `bigint`;
           `value`: `number`;
        \};
     \};
     `targetRadius`: \{
        `raw`: `bigint`;
        `value`: `number`;
     \};
   \}
     \| `undefined`;
  `cooldownEndsAtUnixSeconds`: `bigint`;
  `ended`:   \| \{
     `expiresAtUnixSeconds`: `bigint`;
     `terminalAtUnixSeconds`: `bigint`;
   \}
     \| `undefined`;
  `fleet`: \{
     `address`: \{
      \[`key`: `number`\]: `string`;
        `__brand:@solana/kit`: `"Address"`;
        `__stringEncoding:@solana/kit`: `"base58"`;
        `length`: `number`;
        `[iterator]`: `StringIterator`\<`string`\>;
        `anchor`: `string`;
        `at`: `string` \| `undefined`;
        `big`: `string`;
        `blink`: `string`;
        `bold`: `string`;
        `charAt`: `string`;
        `charCodeAt`: `number`;
        `codePointAt`: `number` \| `undefined`;
        `concat`: `string`;
        `endsWith`: `boolean`;
        `fixed`: `string`;
        `fontcolor`: `string`;
        `fontsize`: `string`;
        `includes`: `boolean`;
        `indexOf`: `number`;
        `italics`: `string`;
        `lastIndexOf`: `number`;
        `link`: `string`;
        `localeCompare`: `number`;
        `match`: `RegExpMatchArray` \| `null`;
        `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
        `normalize`: `string`;
        `padEnd`: `string`;
        `padStart`: `string`;
        `repeat`: `string`;
        `replace`: `string`;
        `replaceAll`: `string`;
        `search`: `number`;
        `slice`: `string`;
        `small`: `string`;
        `split`: `string`[];
        `startsWith`: `boolean`;
        `strike`: `string`;
        `sub`: `string`;
        `substr`: `string`;
        `substring`: `string`;
        `sup`: `string`;
        `toLocaleLowerCase`: `string`;
        `toLocaleUpperCase`: `string`;
        `toLowerCase`: `string`;
        `toString`: `string`;
        `toUpperCase`: `string`;
        `trim`: `string`;
        `trimEnd`: `string`;
        `trimLeft`: `string`;
        `trimRight`: `string`;
        `trimStart`: `string`;
        `valueOf`: `string`;
     \};
     `type`: `"fleet"`;
  \};
  `game`: \{
     `address`: \{
      \[`key`: `number`\]: `string`;
        `__brand:@solana/kit`: `"Address"`;
        `__stringEncoding:@solana/kit`: `"base58"`;
        `length`: `number`;
        `[iterator]`: `StringIterator`\<`string`\>;
        `anchor`: `string`;
        `at`: `string` \| `undefined`;
        `big`: `string`;
        `blink`: `string`;
        `bold`: `string`;
        `charAt`: `string`;
        `charCodeAt`: `number`;
        `codePointAt`: `number` \| `undefined`;
        `concat`: `string`;
        `endsWith`: `boolean`;
        `fixed`: `string`;
        `fontcolor`: `string`;
        `fontsize`: `string`;
        `includes`: `boolean`;
        `indexOf`: `number`;
        `italics`: `string`;
        `lastIndexOf`: `number`;
        `link`: `string`;
        `localeCompare`: `number`;
        `match`: `RegExpMatchArray` \| `null`;
        `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
        `normalize`: `string`;
        `padEnd`: `string`;
        `padStart`: `string`;
        `repeat`: `string`;
        `replace`: `string`;
        `replaceAll`: `string`;
        `search`: `number`;
        `slice`: `string`;
        `small`: `string`;
        `split`: `string`[];
        `startsWith`: `boolean`;
        `strike`: `string`;
        `sub`: `string`;
        `substr`: `string`;
        `substring`: `string`;
        `sup`: `string`;
        `toLocaleLowerCase`: `string`;
        `toLocaleUpperCase`: `string`;
        `toLowerCase`: `string`;
        `toString`: `string`;
        `toUpperCase`: `string`;
        `trim`: `string`;
        `trimEnd`: `string`;
        `trimLeft`: `string`;
        `trimRight`: `string`;
        `trimStart`: `string`;
        `valueOf`: `string`;
     \};
     `type`: `"game"`;
  \};
  `kind`: `"scanSignal"`;
  `noContact`:   \| \{
     `resolvedAtUnixSeconds`: `bigint`;
     `terminalAtUnixSeconds`: `bigint`;
     `xpAwardedRaw`: `bigint`;
   \}
     \| `undefined`;
  `ownerCharacter`: \{
     `address`: \{
      \[`key`: `number`\]: `string`;
        `__brand:@solana/kit`: `"Address"`;
        `__stringEncoding:@solana/kit`: `"base58"`;
        `length`: `number`;
        `[iterator]`: `StringIterator`\<`string`\>;
        `anchor`: `string`;
        `at`: `string` \| `undefined`;
        `big`: `string`;
        `blink`: `string`;
        `bold`: `string`;
        `charAt`: `string`;
        `charCodeAt`: `number`;
        `codePointAt`: `number` \| `undefined`;
        `concat`: `string`;
        `endsWith`: `boolean`;
        `fixed`: `string`;
        `fontcolor`: `string`;
        `fontsize`: `string`;
        `includes`: `boolean`;
        `indexOf`: `number`;
        `italics`: `string`;
        `lastIndexOf`: `number`;
        `link`: `string`;
        `localeCompare`: `number`;
        `match`: `RegExpMatchArray` \| `null`;
        `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
        `normalize`: `string`;
        `padEnd`: `string`;
        `padStart`: `string`;
        `repeat`: `string`;
        `replace`: `string`;
        `replaceAll`: `string`;
        `search`: `number`;
        `slice`: `string`;
        `small`: `string`;
        `split`: `string`[];
        `startsWith`: `boolean`;
        `strike`: `string`;
        `sub`: `string`;
        `substr`: `string`;
        `substring`: `string`;
        `sup`: `string`;
        `toLocaleLowerCase`: `string`;
        `toLocaleUpperCase`: `string`;
        `toLowerCase`: `string`;
        `toString`: `string`;
        `toUpperCase`: `string`;
        `trim`: `string`;
        `trimEnd`: `string`;
        `trimLeft`: `string`;
        `trimRight`: `string`;
        `trimStart`: `string`;
        `valueOf`: `string`;
     \};
     `type`: `"character"`;
  \};
  `ownerProfile`: \{
     `address`: \{
      \[`key`: `number`\]: `string`;
        `__brand:@solana/kit`: `"Address"`;
        `__stringEncoding:@solana/kit`: `"base58"`;
        `length`: `number`;
        `[iterator]`: `StringIterator`\<`string`\>;
        `anchor`: `string`;
        `at`: `string` \| `undefined`;
        `big`: `string`;
        `blink`: `string`;
        `bold`: `string`;
        `charAt`: `string`;
        `charCodeAt`: `number`;
        `codePointAt`: `number` \| `undefined`;
        `concat`: `string`;
        `endsWith`: `boolean`;
        `fixed`: `string`;
        `fontcolor`: `string`;
        `fontsize`: `string`;
        `includes`: `boolean`;
        `indexOf`: `number`;
        `italics`: `string`;
        `lastIndexOf`: `number`;
        `link`: `string`;
        `localeCompare`: `number`;
        `match`: `RegExpMatchArray` \| `null`;
        `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
        `normalize`: `string`;
        `padEnd`: `string`;
        `padStart`: `string`;
        `repeat`: `string`;
        `replace`: `string`;
        `replaceAll`: `string`;
        `search`: `number`;
        `slice`: `string`;
        `small`: `string`;
        `split`: `string`[];
        `startsWith`: `boolean`;
        `strike`: `string`;
        `sub`: `string`;
        `substr`: `string`;
        `substring`: `string`;
        `sup`: `string`;
        `toLocaleLowerCase`: `string`;
        `toLocaleUpperCase`: `string`;
        `toLowerCase`: `string`;
        `toString`: `string`;
        `toUpperCase`: `string`;
        `trim`: `string`;
        `trimEnd`: `string`;
        `trimLeft`: `string`;
        `trimRight`: `string`;
        `trimStart`: `string`;
        `valueOf`: `string`;
     \};
     `type`: `"profile"`;
  \};
  `receipt`:   \| \{
     `acceptedQuantityRaw`: `bigint`;
     `cargo`: \{
        `categoryId`: `number`;
        `id`: `number`;
        `mint`: \{
         \[`key`: `number`\]: `string`;
           `__brand:@solana/kit`: `"Address"`;
           `__stringEncoding:@solana/kit`: `"base58"`;
           `length`: `number`;
           `[iterator]`: `StringIterator`\<`string`\>;
           `anchor`: `string`;
           `at`: `string` \| `undefined`;
           `big`: `string`;
           `blink`: `string`;
           `bold`: `string`;
           `charAt`: `string`;
           `charCodeAt`: `number`;
           `codePointAt`: `number` \| `undefined`;
           `concat`: `string`;
           `endsWith`: `boolean`;
           `fixed`: `string`;
           `fontcolor`: `string`;
           `fontsize`: `string`;
           `includes`: `boolean`;
           `indexOf`: `number`;
           `italics`: `string`;
           `lastIndexOf`: `number`;
           `link`: `string`;
           `localeCompare`: `number`;
           `match`: `RegExpMatchArray` \| `null`;
           `matchAll`: `RegExpStringIterator`\<`RegExpExecArray`\>;
           `normalize`: `string`;
           `padEnd`: `string`;
           `padStart`: `string`;
           `repeat`: `string`;
           `replace`: `string`;
           `replaceAll`: `string`;
           `search`: `number`;
           `slice`: `string`;
           `small`: `string`;
           `split`: `string`[];
           `startsWith`: `boolean`;
           `strike`: `string`;
           `sub`: `string`;
           `substr`: `string`;
           `substring`: `string`;
           `sup`: `string`;
           `toLocaleLowerCase`: `string`;
           `toLocaleUpperCase`: `string`;
           `toLowerCase`: `string`;
           `toString`: `string`;
           `toUpperCase`: `string`;
           `trim`: `string`;
           `trimEnd`: `string`;
           `trimLeft`: `string`;
           `trimRight`: `string`;
           `trimStart`: `string`;
           `valueOf`: `string`;
        \};
        `name`: `string`;
        `storageCost`: `number`;
     \};
     `category`: `"any"` \| `"industrial"` \| `"technology"` \| `"tactical"` \| `"exotic"`;
     `clippedQuantityRaw`: `bigint`;
     `nominalQuantityRaw`: `bigint`;
     `rarity`: `"common"` \| `"uncommon"` \| `"rare"` \| `"epic"` \| `"legendary"` \| `"anomalous"`;
     `resolvedAtUnixSeconds`: `bigint`;
     `terminalAtUnixSeconds`: `bigint`;
     `xpAwardedRaw`: `bigint`;
   \}
     \| `undefined`;
  `recoveryHistory`: \{
     `consecutiveRecoveries`: `number`;
     `lastRecoveryAtUnixSeconds`: `bigint`;
     `lastRegionId`: `number`;
  \};
  `sequence`: `bigint`;
  `status`:   \| `"expired"`
     \| `"empty"`
     \| `"pending-entropy"`
     \| `"contact"`
     \| `"no-contact"`
     \| `"recovered"`
     \| `"abandoned"`;
  `version`: `number`;
  `toJSON`: `unknown`;
\}
  \| `undefined`\>

#### Example

```ts
declare const ctx: SageContext, fleet: Address;
const snapshot = await maybeGetScanSignalForFleet(ctx, fleet, { refresh: true });
```
