281 lines
9.3 KiB
TypeScript
281 lines
9.3 KiB
TypeScript
import type {
|
|
ConsentBinding,
|
|
DatasetJob,
|
|
DatasetSyncState,
|
|
EntityResolution,
|
|
InventoryCursor,
|
|
InventoryCursorState,
|
|
InventoryCursorLookup,
|
|
InventoryQuery,
|
|
InventoryRow,
|
|
InventoryQueryResult,
|
|
LocationFact,
|
|
ReferenceStationRecord,
|
|
ResourceAuthorization,
|
|
SignedMoneyNormalizationPolicy,
|
|
WalletBalanceResult,
|
|
} from '../../src/lib/domain/model';
|
|
|
|
/** Synthetic, offline-only values used to exercise contract shape and pinning. */
|
|
export const syntheticPrincipal = { kind: 'character', id: '90000000000000001', ownerUserId: 'fixture-user-a' } as const;
|
|
export const syntheticResource = {
|
|
principal: syntheticPrincipal,
|
|
requiredScopes: ['esi-assets.read_assets.v1'],
|
|
authorizationRevision: 7,
|
|
authorizationEpoch: 1,
|
|
} as const;
|
|
|
|
export const datasetState: DatasetSyncState = {
|
|
principal: syntheticPrincipal,
|
|
dataset: 'assets',
|
|
status: 'ready',
|
|
authorizationStatus: 'active',
|
|
authorizationEpoch: 1,
|
|
grantRevision: 7,
|
|
credentialVersion: 3,
|
|
coverage: { kind: 'snapshot', generation: 'assets-g7', complete: true },
|
|
fetchedAt: 1_700_000_100_000,
|
|
upstreamEffectiveAt: null,
|
|
};
|
|
|
|
export const appendDatasetState: DatasetSyncState = {
|
|
principal: { kind: 'character', id: '90000000000000001', ownerUserId: 'fixture-user-a' },
|
|
dataset: 'wallet_journal',
|
|
status: 'partial',
|
|
authorizationStatus: 'active',
|
|
authorizationEpoch: 1,
|
|
grantRevision: 4,
|
|
credentialVersion: 2,
|
|
coverage: {
|
|
kind: 'append',
|
|
checkpoint: 'journal-from-90000000000000001',
|
|
sourceIdentity: 'esi:character-wallet-journal',
|
|
windowStart: 1_699_900_000_000,
|
|
windowEnd: 1_700_000_100_000,
|
|
gaps: [{ from: null, to: 'journal-from-90000000000000001', reason: 'older history unavailable upstream' }],
|
|
complete: false,
|
|
},
|
|
fetchedAt: 1_700_000_100_000,
|
|
upstreamEffectiveAt: null,
|
|
};
|
|
|
|
export const singletonRows: readonly Pick<InventoryRow, 'isSingleton'>[] = [
|
|
{ isSingleton: true },
|
|
{ isSingleton: false },
|
|
{ isSingleton: null },
|
|
];
|
|
|
|
export const verifiedNamelessStation: ReferenceStationRecord = {
|
|
id: 60000001, systemId: 30000142, systemName: 'Jita', regionId: 10000002,
|
|
name: null, typeId: 1531, ownerId: 1000125, evidence: 'verified', sourceVerified: true, x: null, y: null, z: null,
|
|
};
|
|
export const systemListedStationPlaceholder: ReferenceStationRecord = {
|
|
...verifiedNamelessStation, id: 60000002, evidence: 'system_listed', sourceVerified: false,
|
|
};
|
|
export const absentLocation: LocationFact = {
|
|
kind: 'unknown', id: '60000003', name: null, parentId: null, sourceVerified: null, referenceVersion: 'reference-g1',
|
|
};
|
|
|
|
export const ambiguousType: EntityResolution<{ id: number; name: string }> = {
|
|
status: 'ambiguous',
|
|
candidates: [{ id: 34, name: 'Tritanium' }, { id: 35, name: 'Pyerite' }],
|
|
};
|
|
|
|
export const authorization: ResourceAuthorization = {
|
|
principal: syntheticPrincipal,
|
|
userId: 'fixture-user-a',
|
|
status: 'active',
|
|
grantRevision: 7,
|
|
credentialVersion: 3,
|
|
grantedScopes: ['esi-assets.read_assets.v1'],
|
|
observedAt: 1_700_000_100_000,
|
|
staleAuthority: { state: 'current', observedAt: 1_700_000_100_000, maximumWindowMs: null },
|
|
authorizationEpoch: 1,
|
|
};
|
|
|
|
export const consent: ConsentBinding = {
|
|
bindingId: 'consent-fixture-1',
|
|
sessionId: 'session-fixture-1',
|
|
userId: 'fixture-user-a',
|
|
intent: 'upgrade_dataset',
|
|
capability: 'inventory_query',
|
|
resourceRequests: [{
|
|
resource: syntheticResource,
|
|
requestedScopes: ['esi-assets.read_assets.v1'],
|
|
approvedExistingScopes: [],
|
|
}],
|
|
createdAt: 1_700_000_000_000,
|
|
expiresAt: 1_700_000_300_000,
|
|
state: 'pending',
|
|
};
|
|
|
|
export const systemJob: DatasetJob = {
|
|
id: 'job-reference-fixture-1',
|
|
owner: { kind: 'system', service: 'reference' },
|
|
authority: 'system',
|
|
dataset: 'reference_data',
|
|
status: 'queued',
|
|
attempts: 0,
|
|
dueAt: 1_700_000_200_000,
|
|
leaseExpiresAt: null,
|
|
publicationFence: {
|
|
jobId: 'job-reference-fixture-1',
|
|
principal: { kind: 'system', id: 'reference-public' },
|
|
dataset: 'reference_data',
|
|
resources: [],
|
|
coverageKind: 'snapshot',
|
|
generation: 'reference-g1',
|
|
checkpoint: null,
|
|
},
|
|
};
|
|
|
|
export const inventoryCursor: InventoryCursor = { token: 'cursor-fixture-opaque' };
|
|
export const inventoryCursorState: InventoryCursorState = {
|
|
token: inventoryCursor.token,
|
|
status: 'active',
|
|
position: { offset: 0, lastItemId: null },
|
|
pin: {
|
|
callerUserId: 'fixture-user-a',
|
|
queryFingerprint: 'sha256:fixture-query',
|
|
selectedResources: [syntheticResource],
|
|
authorizationRevisions: { 'character:90000000000000001': 7 },
|
|
authorizationEpochs: { 'character:90000000000000001': 1 },
|
|
snapshotGenerations: { assets: 'assets-g7' },
|
|
referenceVersion: 'reference-g1',
|
|
priceVersion: 'prices-g1',
|
|
expiresAt: 1_700_000_300_000,
|
|
},
|
|
};
|
|
|
|
export const inventoryCursorLookup: InventoryCursorLookup = {
|
|
token: inventoryCursor.token,
|
|
callerUserId: 'fixture-user-a',
|
|
queryFingerprint: 'sha256:fixture-query',
|
|
selectedResources: [syntheticResource],
|
|
authorizationRevisions: { 'character:90000000000000001': 7 },
|
|
authorizationEpochs: { 'character:90000000000000001': 1 },
|
|
snapshotGenerations: { assets: 'assets-g7' },
|
|
referenceVersion: 'reference-g1',
|
|
priceVersion: 'prices-g1',
|
|
now: 1_700_000_200_000,
|
|
};
|
|
|
|
export const borrowedInventoryCursorLookup: InventoryCursorLookup = { ...inventoryCursorLookup, callerUserId: 'fixture-user-b' };
|
|
export const changedQueryInventoryCursorLookup: InventoryCursorLookup = { ...inventoryCursorLookup, queryFingerprint: 'sha256:changed-query' };
|
|
export const changedRevisionInventoryCursorLookup: InventoryCursorLookup = {
|
|
...inventoryCursorLookup,
|
|
authorizationRevisions: { 'character:90000000000000001': 8 },
|
|
};
|
|
|
|
export const inventoryQuery: InventoryQuery = {
|
|
callerUserId: 'fixture-user-a',
|
|
selectedResources: [syntheticResource],
|
|
authorizationRevisions: { 'character:90000000000000001': 7 },
|
|
authorizationEpochs: { 'character:90000000000000001': 1 },
|
|
filters: { typeIds: [34], minQuantity: '2', blueprintState: 'all' },
|
|
sort: { field: 'name', direction: 'ascending', tieBreaker: 'item_id' },
|
|
pageSize: 50,
|
|
cursor: inventoryCursor,
|
|
};
|
|
|
|
export const inventoryResult: InventoryQueryResult = {
|
|
status: 'ready',
|
|
rows: [],
|
|
summary: { matchingRows: 0, matchingQuantity: '0', estimatedValue: '0', scope: 'all_matching_rows' },
|
|
nextCursor: null,
|
|
pageState: 'initial',
|
|
provenance: {
|
|
reportId: 'report-fixture-1',
|
|
generatedAt: 1_700_000_200_000,
|
|
fetchedAt: { assets: 1_700_000_100_000 },
|
|
upstreamEffectiveAt: { assets: null },
|
|
input: {
|
|
selectedResources: [syntheticResource],
|
|
requiredDatasetKinds: ['assets'],
|
|
pinSet: 'exact_selected_resource_dataset_set',
|
|
datasetPins: [{
|
|
selectedResource: syntheticResource,
|
|
principal: syntheticPrincipal,
|
|
dataset: 'assets',
|
|
coverage: { kind: 'snapshot', generation: 'assets-g7', complete: true },
|
|
authorizationRevision: 7,
|
|
authorizationEpoch: 1,
|
|
fetchedAt: 1_700_000_100_000,
|
|
upstreamEffectiveAt: null,
|
|
}],
|
|
authorizationRevisions: { 'character:90000000000000001': 7 },
|
|
authorizationEpochs: { 'character:90000000000000001': 1 },
|
|
snapshotGenerations: { assets: 'assets-g7' },
|
|
appendCheckpoints: {},
|
|
referenceVersion: 'reference-g1',
|
|
priceVersion: 'prices-g1',
|
|
},
|
|
sourceSkew: false,
|
|
assumptions: [],
|
|
},
|
|
};
|
|
|
|
export const afterEndInventoryCursorState: InventoryCursorState = {
|
|
...inventoryCursorState,
|
|
status: 'exhausted',
|
|
position: { offset: 2, lastItemId: '90000000000000042' },
|
|
};
|
|
|
|
export const afterEndInventoryResult: InventoryQueryResult = {
|
|
status: 'ready',
|
|
rows: [],
|
|
summary: { matchingRows: 2, matchingQuantity: '3', estimatedValue: '100', scope: 'all_matching_rows' },
|
|
nextCursor: null,
|
|
pageState: 'after_end',
|
|
provenance: inventoryResult.provenance,
|
|
};
|
|
|
|
export const walletResult: WalletBalanceResult = {
|
|
status: 'ready',
|
|
components: [{
|
|
component: 'wallet_balance',
|
|
principal: syntheticPrincipal,
|
|
amount: '-125',
|
|
fetchedAt: 1_700_000_100_000,
|
|
upstreamEffectiveAt: null,
|
|
coverage: { kind: 'snapshot', generation: 'wallet-g2', complete: true },
|
|
authorizationRevision: 4,
|
|
credentialVersion: 2,
|
|
}],
|
|
provenance: {
|
|
...inventoryResult.provenance,
|
|
input: {
|
|
...inventoryResult.provenance.input,
|
|
requiredDatasetKinds: ['wallet_balance'],
|
|
pinSet: 'exact_selected_resource_dataset_set',
|
|
datasetPins: [{
|
|
selectedResource: syntheticResource,
|
|
principal: syntheticPrincipal,
|
|
dataset: 'wallet_balance',
|
|
coverage: { kind: 'snapshot', generation: 'wallet-g2', complete: true },
|
|
authorizationRevision: 4,
|
|
authorizationEpoch: 1,
|
|
fetchedAt: 1_700_000_100_000,
|
|
upstreamEffectiveAt: null,
|
|
}],
|
|
authorizationRevisions: { 'character:90000000000000001': 4 },
|
|
authorizationEpochs: { 'character:90000000000000001': 1 },
|
|
snapshotGenerations: { wallet_balance: 'wallet-g2' },
|
|
},
|
|
},
|
|
};
|
|
|
|
/** Synthetic fixture for the approved, fixed signed-decimal policy. */
|
|
export const approvedMoneyPolicy: SignedMoneyNormalizationPolicy = {
|
|
input: 'decimal_text',
|
|
scale: 2,
|
|
rounding: 'half_away_from_zero',
|
|
grammar: 'json_number_ascii_decimal',
|
|
maxRawInputCharacters: 8192,
|
|
maxCoefficientDigits: 4096,
|
|
exponentRange: [-1000, 1000],
|
|
centsShiftRange: [-1000, 1000],
|
|
rejectWhitespace: true,
|
|
canonicalizeNegativeZero: true,
|
|
};
|