UNPKG

@attestate/crawler

Version:

@attestate/crawler is a tool chain to retrieve on-chain data from Ethereum.

67 lines (56 loc) 1.92 kB
//@format import "dotenv/config"; import { Worker } from "worker_threads"; import { resolve } from "path"; import { env } from "process"; import Ajv from "ajv"; import addFormats from "ajv-formats"; import configSchema from "./schemata/configuration.mjs"; import { __dirname } from "./node_filler.mjs"; import logger from "./logger.mjs"; import { init } from "./lifecycle.mjs"; import * as environment from "./environment.mjs"; import * as disc from "./disc.mjs"; export * as database from "./database.mjs"; const workerPath = resolve(__dirname, "./worker_start.mjs"); const log = logger("boot"); export async function getConfig(configFile) { return (await import(resolve(configFile))).default; } export function validateConfig(config) { const ajv = new Ajv(); addFormats(ajv); const check = ajv.compile(configSchema); const valid = check(config); if (!valid) { log(check.errors); throw new Error("Received invalid config"); } return config; } export async function createWorker(config) { await disc.provisionDir(resolve(config.environment.dataDir)); const worker = new Worker(workerPath, { workerData: config, }); return worker; } export function augment(config) { const { requiredVars, optionalVars } = environment; const collected = environment.collect({ ...requiredVars, ...optionalVars }); const configEnv = config.environment ?? {}; const copy = { ...config }; copy.environment = { ...collected, ...configEnv }; return copy; } export async function boot(config) { config = augment(config); validateConfig(config); environment.set(config.environment); // NOTE: @attestate/extraction-worker still supports an old version of the // schema, where the path and the configuration haven't been merged yet. const configCopy = { ...config }; delete configCopy.path; const worker = await createWorker(configCopy); return await init(worker, config); }