/** * Fetches filtered org metadata and writes src/generated/metadata-catalog.json * and src/generated/metadata-types.ts. * * Requires CLARIZEN_API_KEY or CLARIZEN_USERNAME + CLARIZEN_PASSWORD in .env */ import "dotenv/config"; import { mkdirSync, writeFileSync } from "node:fs"; import { resolve } from "node:path"; import { Clarizen } from "../src/clarizen.js"; import { generateMetadataTypesFile } from "../src/metadata/generate-types.js"; const baseUrl = process.env.CLARIZEN_BASE_URL ?? "https://api.clarizen.com"; const apiKey = process.env.CLARIZEN_API_KEY ?? process.env.API_KEY_AW; const userName = process.env.CLARIZEN_USERNAME; const password = process.env.CLARIZEN_PASSWORD; const outDir = resolve(import.meta.dirname, "../src/generated"); const catalogPath = resolve(outDir, "metadata-catalog.json"); const typesPath = resolve(outDir, "metadata-types.ts"); async function createClient(): Promise { if (apiKey) { return new Clarizen({ baseUrl, apiToken: apiKey }); } if (userName && password) { const clarizen = Clarizen.createForLogin(baseUrl); await clarizen.loginWithDiscovery({ userName, password }); return clarizen; } console.error( "Set CLARIZEN_API_KEY or CLARIZEN_USERNAME + CLARIZEN_PASSWORD in .env", ); process.exit(1); } const clarizen = await createClient(); console.log("Fetching metadata catalog..."); const catalog = await clarizen.metadata.fetchCatalog({ onProgress: (msg) => console.log(msg), }); mkdirSync(outDir, { recursive: true }); writeFileSync(catalogPath, `${JSON.stringify(catalog, null, 2)}\n`); writeFileSync(typesPath, generateMetadataTypesFile(catalog)); console.log( `Wrote ${catalog.entities.length} entities to:\n ${catalogPath}\n ${typesPath}`, );