Files
clarizen-lib/scripts/scrape-metadata.ts
T

51 lines
1.7 KiB
TypeScript
Raw Normal View History

2026-06-04 12:09:45 -03:00
/**
* 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<Clarizen> {
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}`,
);