Skip to content
Next — unreleased

Defined in: packages/sage/src/mining/index.ts:108

One selected and registry-resolved output of an active mining Fleet.

declare const output: FleetMiningOutput;
console.log(output.cargo.name, output.unitsPerSecond);

readonly activeMinerCountRaw: bigint;

Defined in: packages/sage/src/mining/index.ts:56

ResourceDepositItem.activeMinerCountRaw

readonly amountMinedUnitsRaw: bigint;

Defined in: packages/sage/src/mining/index.ts:55

ResourceDepositItem.amountMinedUnitsRaw

readonly cargo: CargoDefinitionSummary;

Defined in: packages/sage/src/mining/index.ts:53

ResourceDepositItem.cargo

readonly richness: WorldFixedValue;

Defined in: packages/sage/src/mining/index.ts:54

ResourceDepositItem.richness

readonly unitsPerSecond: number;

Defined in: packages/sage/src/mining/index.ts:110

Nominal cargo units per second, with Fleet capacity shared among selected resources.


Defined in: packages/sage/src/mining/index.ts:120

Immutable current extraction relationship for one active mining Fleet.

declare const mining: FleetMiningSnapshot;
console.log(mining.outputs);

readonly asteroid: EntityRef<"celestialBody">;

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

readonly fleet: EntityRef<"fleet">;

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

readonly kind: "fleetMining";

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

readonly lastUpdatedAtUnixSeconds: bigint;

Defined in: packages/sage/src/mining/index.ts:125

readonly miningRate: {
raw: bigint;
unitsPerSecond: number;
};

Defined in: packages/sage/src/mining/index.ts:128

Fleet base rate before sharing among selected resources and applying richness.

readonly raw: bigint;
readonly unitsPerSecond: number;

readonly outputs: readonly FleetMiningOutput[];

Defined in: packages/sage/src/mining/index.ts:132

readonly ownerProfile: EntityRef<"profile">;

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

readonly regionXpModifier: WorldFixedValue;

Defined in: packages/sage/src/mining/index.ts:126

toJSON(): unknown;

Defined in: packages/sage/src/mining/index.ts:133

unknown


Defined in: packages/sage/src/mining/estimate.ts:75

Immutable, JSON-safe constant-rate estimate, not a settlement guarantee. Projected quantities are fractional numbers; chain rounding, changing state, eligibility and tick ordering are excluded. A null limit means unbounded by that constraint, never an unknown balance. No-output scenarios run for zero time and project no upkeep. An initially full hold conservatively permits no mining, even when Food outflow could offset output: tick ordering is not established.

declare const estimate: MiningEstimate;
console.log(estimate.durationSeconds, estimate.limitingFactors);

readonly basis: "official-model-estimate";

Defined in: packages/sage/src/mining/estimate.ts:76

readonly consumedAmmoUnits: number;

Defined in: packages/sage/src/mining/estimate.ts:95

readonly consumedFoodUnits: number;

Defined in: packages/sage/src/mining/estimate.ts:94

readonly durationSeconds: number;

Defined in: packages/sage/src/mining/estimate.ts:78

Requested duration clipped to the modeled limits, in seconds.

readonly finalOccupiedSpace: number;

Defined in: packages/sage/src/mining/estimate.ts:96

readonly foodVolumeOutflowPerSecond: number;

Defined in: packages/sage/src/mining/estimate.ts:85

readonly limitingFactors: readonly MiningEstimateLimit[];

Defined in: packages/sage/src/mining/estimate.ts:93

readonly limitsSeconds: {
ammo: number | null;
cargo: number | null;
food: number | null;
};

Defined in: packages/sage/src/mining/estimate.ts:88

readonly ammo: number | null;
readonly cargo: number | null;
readonly food: number | null;

readonly netCargoGrowthPerSecond: number;

Defined in: packages/sage/src/mining/estimate.ts:87

May be negative when Food consumption frees more space than mining uses.

readonly outputs: readonly {
cargoId: number;
projectedUnits: number;
unitsPerSecond: number;
}[];

Defined in: packages/sage/src/mining/estimate.ts:79

readonly resourceVolumeInflowPerSecond: number;

Defined in: packages/sage/src/mining/estimate.ts:84


Defined in: packages/sage/src/mining/estimate.ts:37

Explicit constant-rate Asteroid scenario. Balances and rates use cargo units; capacity, occupancy and storage costs use translated storage units. Occupancy includes all available Food; Ammo is held separately and frees no cargo space. Supply all 1–8 selected resources, including zero-yield rows. Fleet rate already includes ship/component effects: do not apply those again in the multipliers.

const input: MiningEstimateInput = {
fleetUnitsPerSecond: 2, durationSeconds: 60,
resources: [{ cargoId: 300, richness: 1, storageCost: 1, runtimeMultiplier: 1 }],
cargo: { occupiedSpace: 10, capacity: 100 },
food: { availableUnits: 10, burnUnitsPerSecond: 0.1, storageCost: 1 },
ammo: { availableUnits: 10, burnUnitsPerSecond: 0.1 },
};

readonly ammo: {
availableUnits: number;
burnUnitsPerSecond: number;
};

Defined in: packages/sage/src/mining/estimate.ts:48

readonly availableUnits: number;
readonly burnUnitsPerSecond: number;

readonly cargo: {
capacity: number;
occupiedSpace: number;
};

Defined in: packages/sage/src/mining/estimate.ts:42

readonly capacity: number;
readonly occupiedSpace: number;

readonly durationSeconds: number;

Defined in: packages/sage/src/mining/estimate.ts:40

Requested duration; the result reports the clipped duration.

readonly fleetUnitsPerSecond: number;

Defined in: packages/sage/src/mining/estimate.ts:38

readonly food: {
availableUnits: number;
burnUnitsPerSecond: number;
storageCost: number;
};

Defined in: packages/sage/src/mining/estimate.ts:43

readonly availableUnits: number;
readonly burnUnitsPerSecond: number;
readonly storageCost: number;

readonly resources: readonly MiningEstimateResourceInput[];

Defined in: packages/sage/src/mining/estimate.ts:41


Defined in: packages/sage/src/mining/estimate.ts:14

One selected Asteroid resource, using translated storage units rather than encoded fixed point. runtimeMultiplier is the caller’s effective multiplier, including any applicable crew/research effects. No modifier composition or eligibility is inferred.

const resource: MiningEstimateResourceInput = {
cargoId: 300, richness: 2, storageCost: 2, runtimeMultiplier: 1.5,
};

readonly cargoId: number;

Defined in: packages/sage/src/mining/estimate.ts:15

readonly richness: number;

Defined in: packages/sage/src/mining/estimate.ts:16

readonly runtimeMultiplier: number;

Defined in: packages/sage/src/mining/estimate.ts:18

readonly storageCost: number;

Defined in: packages/sage/src/mining/estimate.ts:17


Defined in: packages/sage/src/mining/index.ts:96

One nominal resource output after sharing Fleet capacity and applying richness.

const rate: MiningOutputRate = { cargoId: 8, unitsPerSecond: 4.5 };

readonly cargoId: number;

Defined in: packages/sage/src/mining/index.ts:97

readonly unitsPerSecond: number;

Defined in: packages/sage/src/mining/index.ts:98


Defined in: packages/sage/src/mining/index.ts:85

A pure rate input pairing one cargo id with Asteroid richness.

const input: MiningOutputRateInput = { cargoId: 8, richness: 1.5 };

readonly cargoId: number;

Defined in: packages/sage/src/mining/index.ts:86

readonly richness: number;

Defined in: packages/sage/src/mining/index.ts:87


Defined in: packages/sage/src/mining/profile.ts:44

Reference mining values for one selected resource at the given richness, with no crew, research or rare-mineral multiplier. fullHold starts from an empty hold carrying exactly the Food it burns and a full Ammo bank; it is null when nothing is mined, the hold has no capacity, or Food outflow would keep pace with output. Ratios are null when that consumable is not burned.

declare const profile: MiningProfile;
console.log(profile.unitsPerHour, profile.fullHold?.durationSeconds);

readonly basis: "official-model-estimate";

Defined in: packages/sage/src/mining/profile.ts:45

readonly fullHold:
| {
ammoUnits: number;
durationSeconds: number;
foodUnits: number;
limitedBy: "cargo" | "ammo";
minedUnits: number;
}
| null;

Defined in: packages/sage/src/mining/profile.ts:52

{
ammoUnits: number;
durationSeconds: number;
foodUnits: number;
limitedBy: "cargo" | "ammo";
minedUnits: number;
}
readonly ammoUnits: number;
readonly durationSeconds: number;
readonly foodUnits: number;

Food burned, which is also the Food to carry in the hold at the start.

readonly limitedBy: "cargo" | "ammo";
readonly minedUnits: number;

null

readonly unitsPerAmmo: number | null;

Defined in: packages/sage/src/mining/profile.ts:51

Resource units mined per Ammo burned.

readonly unitsPerFood: number | null;

Defined in: packages/sage/src/mining/profile.ts:49

Resource units mined per Food burned.

readonly unitsPerHour: number;

Defined in: packages/sage/src/mining/profile.ts:47

readonly unitsPerSecond: number;

Defined in: packages/sage/src/mining/profile.ts:46


Defined in: packages/sage/src/mining/profile.ts:17

Fleet or ship configuration cargo stats plus one reference Asteroid resource. Richness and storage costs are explicit assumptions: storage costs are translated storage units per unit (an encoded 256 is 1), not raw values.

declare const ship: { readonly stats: MiningProfileInput['stats'] };
const input: MiningProfileInput = {
stats: ship.stats, richness: 1, resourceStorageCost: 1, foodStorageCost: 1,
};

readonly foodStorageCost: number;

Defined in: packages/sage/src/mining/profile.ts:30

readonly resourceStorageCost: number;

Defined in: packages/sage/src/mining/profile.ts:29

readonly richness: number;

Defined in: packages/sage/src/mining/profile.ts:28

readonly stats: {
cargo: Pick<FleetCargoStatsData,
| "miningRate"
| "foodConsumptionRate"
| "ammoConsumptionRate"
| "cargoCapacity"
| "ammoCapacity">;
};

Defined in: packages/sage/src/mining/profile.ts:18

readonly cargo: Pick<FleetCargoStatsData,
| "miningRate"
| "foodConsumptionRate"
| "ammoConsumptionRate"
| "cargoCapacity"
| "ammoCapacity">;

Defined in: packages/sage/src/mining/index.ts:52

One registry-resolved resource row nested in an Asteroid deposit.

declare const resource: ResourceDepositItem;
console.log(resource.cargo.name, resource.richness.value);

readonly activeMinerCountRaw: bigint;

Defined in: packages/sage/src/mining/index.ts:56

readonly amountMinedUnitsRaw: bigint;

Defined in: packages/sage/src/mining/index.ts:55

readonly cargo: CargoDefinitionSummary;

Defined in: packages/sage/src/mining/index.ts:53

readonly richness: WorldFixedValue;

Defined in: packages/sage/src/mining/index.ts:54


Defined in: packages/sage/src/mining/index.ts:66

Immutable, translated Asteroid resource-deposit snapshot.

declare const deposit: ResourceDepositSnapshot;
console.log(deposit.resources);

readonly address: Address;

Defined in: packages/sage/src/mining/index.ts:68

readonly bodyId: number;

Defined in: packages/sage/src/mining/index.ts:69

readonly game: Address;

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

readonly kind: "resourceDeposit";

Defined in: packages/sage/src/mining/index.ts:67

readonly lastSyncedAtUnixSeconds: bigint;

Defined in: packages/sage/src/mining/index.ts:74

readonly name: string;

Defined in: packages/sage/src/mining/index.ts:70

readonly resources: readonly ResourceDepositItem[];

Defined in: packages/sage/src/mining/index.ts:75

readonly system: EntityRef<"starSystem">;

Defined in: packages/sage/src/mining/index.ts:72

readonly systemSequenceId: bigint;

Defined in: packages/sage/src/mining/index.ts:73

toJSON(): unknown;

Defined in: packages/sage/src/mining/index.ts:76

unknown

type MiningDiscoveryOptions = Omit<DiscoveryRequest, "filters" | "strategy">;

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

Options supported by owner-scoped active-mining discovery.

const options: MiningDiscoveryOptions = { commitment: 'confirmed' };

type MiningEstimateLimit = "duration" | "food" | "ammo" | "cargo" | "no-output";

Defined in: packages/sage/src/mining/estimate.ts:60

Constraints reached at the end of an estimate; simultaneous limits are retained.

const reason: MiningEstimateLimit = 'food';

function deriveMiningEstimate(input): MiningEstimate;

Defined in: packages/sage/src/mining/estimate.ts:133

Estimates constant-rate Asteroid output, clipping duration to Food, Ammo and cargo capacity. Each rate is Fleet rate / selected count × richness × explicit effective runtime multiplier. Food consumption offsets volume growth while mining; Ammo does not. Hardness is absent from the official current C4 model. This is pure: it neither reads accounts nor validates resource eligibility.

ParameterType
inputMiningEstimateInput

MiningEstimate

InvalidDerivationInputError for invalid selections, inconsistent cargo occupancy, negative/nonfinite values or arithmetic overflow.

const estimate = deriveMiningEstimate({
fleetUnitsPerSecond: 2, durationSeconds: 60,
resources: [{ cargoId: 300, richness: 1, storageCost: 1, runtimeMultiplier: 1 }],
cargo: { occupiedSpace: 10, capacity: 100 },
food: { availableUnits: 10, burnUnitsPerSecond: 0.1, storageCost: 1 },
ammo: { availableUnits: 10, burnUnitsPerSecond: 0.1 },
});
console.log(estimate.outputs, estimate.limitingFactors);

function deriveMiningOutputRates(fleetUnitsPerSecond, outputs): readonly MiningOutputRate[];

Defined in: packages/sage/src/mining/index.ts:312

Shares Fleet units/second equally among selected resources, then applies richness. Supply the complete selected resource list, including zero-richness selections. An empty selection returns no rates. Results are nominal estimates; cargo limits, upkeep and whole-unit settlement remain chain-authoritative.

ParameterType
fleetUnitsPerSecondnumber
outputsreadonly MiningOutputRateInput[]

readonly MiningOutputRate[]

const rates = deriveMiningOutputRates(2, [{ cargoId: 8, richness: 1.5 }]);

function deriveMiningProfile(input): MiningProfile;

Defined in: packages/sage/src/mining/profile.ts:107

Derives reference mining values from Fleet or ship configuration stats with the official constant-rate model behind deriveMiningEstimate. The Fleet rate times richness gives output; foodConsumptionRate and ammoConsumptionRate are burned per second while mining, as the official SAGE Editor Suite scenario applies them.

The full-hold scenario carries Food equal to rate × fill time, so the Food burned frees exactly the space it occupied and the hold fills in capacity ÷ (output × storage cost) seconds, unless the Ammo bank runs out first. This is an estimate, not a settlement: fixed-point rounding, eligibility, regional research, planet-exit Fuel and changing state are excluded.

ParameterType
inputMiningProfileInput

MiningProfile

InvalidDerivationInputError for negative or non-finite stats or assumptions, or derived values that overflow to Infinity.

const profile = deriveMiningProfile({
stats: {
cargo: {
miningRate: { raw: 16384n, value: 1 },
foodConsumptionRate: { raw: 2048n, value: 0.125 },
ammoConsumptionRate: { raw: 1024n, value: 0.0625 },
cargoCapacity: 100n,
ammoCapacity: 1000n,
},
},
richness: 2, resourceStorageCost: 1, foodStorageCost: 1,
});
console.log(profile.unitsPerHour); // 7200
console.log(profile.fullHold?.durationSeconds); // 50: 100 capacity / 2 per second
console.log(profile.fullHold?.foodUnits); // 6.25 Food carried and burned

function deriveMiningStateAgeSeconds(lastUpdatedAtUnixSeconds, atUnixSeconds): number;

Defined in: packages/sage/src/mining/index.ts:292

Derives mining-state age in whole seconds and clamps future timestamps.

ParameterType
lastUpdatedAtUnixSecondsbigint
atUnixSecondsbigint

number

const age = deriveMiningStateAgeSeconds(100n, 112n); // 12

function getFleetMiningState(
context,
fleet,
options?): Promise<
| FleetMiningSnapshot
| undefined>;

Defined in: packages/sage/src/mining/index.ts:476

Reads a Fleet and returns its active extraction relationship, if mining.

ParameterType
contextSageContext
fleetAddress
options?ReadOptions

Promise< | FleetMiningSnapshot | undefined>

declare const ctx: SageContext;
declare const fleet: Address;
const mining = await getFleetMiningState(ctx, fleet);

function getFleetMiningStatesByOwner(
context,
owner,
options?): Promise<readonly FleetMiningSnapshot[]>;

Defined in: packages/sage/src/mining/index.ts:500

Finds active mining Fleets for one owner through stable Fleet filters.

ParameterType
contextSageContext
ownerAddress
options?MiningDiscoveryOptions

Promise<readonly FleetMiningSnapshot[]>

declare const ctx: SageContext;
declare const owner: Address;
const mining = await getFleetMiningStatesByOwner(ctx, owner);

function getResourceDeposit(
context,
asteroid,
options?): Promise<ResourceDepositSnapshot>;

Defined in: packages/sage/src/mining/index.ts:245

Reads a required Asteroid resource deposit by CelestialBody address.

ParameterType
contextSageContext
asteroidAddress
options?ReadOptions

Promise<ResourceDepositSnapshot>

declare const ctx: SageContext;
declare const asteroid: Address;
const deposit = await getResourceDeposit(ctx, asteroid);

function maybeGetResourceDeposit(
context,
asteroid,
options?): Promise<
| ResourceDepositSnapshot
| undefined>;

Defined in: packages/sage/src/mining/index.ts:270

Reads an optional Asteroid resource deposit by CelestialBody address.

Returns undefined only when the account does not exist. A present non-Asteroid CelestialBody throws AccountDecodeError because it is not a resource deposit.

ParameterType
contextSageContext
asteroidAddress
options?ReadOptions

Promise< | ResourceDepositSnapshot | undefined>

declare const ctx: SageContext;
declare const asteroid: Address;
const deposit = await maybeGetResourceDeposit(ctx, asteroid);

function projectMiningOutputUnits(unitsPerSecond, elapsedSeconds): number;

Defined in: packages/sage/src/mining/index.ts:346

Projects nominal output units from a rate and elapsed seconds.

ParameterType
unitsPerSecondnumber
elapsedSecondsnumber

number

const units = projectMiningOutputUnits(4.5, 20); // 90