Skip to Content
Game ImportersEchoes of AstraEchoes of Astra Importer Technical Overview

Echoes of Astra Importer Technical Overview

The Echoes of Astra importer extends the generic SheetImporter. It reads two tabs from a Google Sheet (Expansions, Products), pulls card art from a Google Drive folder, and produces cards + printings with no external marketplace IDs.

Data Sources

SourceRoleData Provided
Google SheetPrimaryExpansions, products, attributes, finishes, rules text
Google DriveImagesCard fronts and expansion logos

The sheet and Drive folder IDs are hardcoded in eoa-importer.ts (getSheetId() / getDriveFolderId()), matching the convention used by the other sheet-only importers.

Because the game is sheet-only, the importer reuses SheetImporter’s generic attribute auto-mapping: each attribute key declared in the game configuration is read from the matching CSV column. Only a few columns need explicit mappings.

Column Mapping

Sheet columnAttributeTypeNotes
rarityrarityenumCommon / Uncommon / Rare / Legendary (printing-level)
finishfinishesenum[]Standard / Foil — split into separate printings per finish
affinityaffinityenumColour identity (Solara, Lux, Terra, Caelum, Nox, Neutral)
card_typecardTypeenumUnit / Tactic / Territory / Item
subtypesubtypesenum[]Pipe-separated traits, e.g. Renowned|Vampire
supply costsupplyCostrangeNote the space in the column name
influenceinfluencerangeCan be the literal X (see ADR)
attack / healthattack / healthrangeAuto-mapped (column name matches attribute)
artistartiststring[]Pipe-separated artist credits
variantvariantenumNormal / Serialized / Framebreak / Signature
rules_textrulesTextstringPrinting-level ability text

Import Flow

Game-Specific Transform Logic

The importer overrides transformSheetProduct for two reasons:

  1. Variant slug handling — Normal is the base treatment and must not append a -normal suffix to the slug (matching games that have no variant column). Special variants (Serialized, Framebreak, Signature) keep their suffix so they form distinct printings. See the variant/influence ADR.
  2. Influence X sanitisation — some cards have variable influence printed as X. The base importer coerces range attributes with Number(), producing NaN; the override strips any NaN stat so it is never persisted.

Each finish is its own printing: a card available in Standard and Foil becomes two printings (…imp001 and …imp001-foil), each with a single-element finishes array. This matches the convention used by Drakerion and other sheet-only games.

Pricing

There is no price importer for Echoes of Astra. The game is absent from TCGplayer and Cardmarket, so gameToTcgcsvCategory, gameToCardMarketGameIdMap, and the price-importer map all resolve to undefined/[], and CATALOGUE_QUALITY is NONE.

Code Locations

ComponentLocation
Importerpackages/games/game-importer/src/eoa/eoa-importer.ts
Staging importerpackages/games/game-importer/src/eoa/eoa-staging-importer.ts
Game configpackages/games/game-configuration/src/lib/games/eoa/eoa.game.ts
Typespackages/games/game-configuration/src/lib/games/eoa/eoa.types.ts
DTO schemaspackages/core/api-dtos/src/lib/product/games/eoa.schema.ts
Base sheet importerpackages/games/game-importer/src/sheet-importer.ts
Last updated on