51 lines
1.7 KiB
TypeScript
51 lines
1.7 KiB
TypeScript
/**
|
|
* 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}`,
|
|
);
|