Files
2026-08-20 15:08:32 +00:00

56 lines
1.8 KiB
JavaScript

import { getConfig } from "../../common/config.js";
import { listCore, listAudit, getEvent, getAgreement, getEventDetails } from "./transactions.js";
import { getApiUsage } from "./usage.js";
import { getStorage } from "./storage.js";
import { getSeries } from "./series.js";
import { countApiKeys } from "./account.js";
import { getCached } from "./cache.js";
import { verifyMany } from "./verify.js";
// Expensive full per-tenant byte scan that changes slowly.
const STORAGE_TTL_MS = 4 * 60 * 60 * 1000;
export async function summary(userId, { from, to }) {
const [apiUsage, apiKeys, storage] = await Promise.all([
getApiUsage(userId, { from, to }),
countApiKeys(userId),
getCached(userId, "storage", STORAGE_TTL_MS, () => getStorage(userId)),
]);
return {
apiUsage,
apiKeys,
// Externally-facing modules only, not internal ones like `dashboard`.
endpoints: Object.values(getConfig().appModules).filter((m) => !m?.internal).length,
storage,
};
}
export async function transactions(userId, opts) {
const { rows, total } = opts.type === "audit"
? await listAudit(userId, opts)
: await listCore(userId, opts);
return { rows, total, limit: opts.limit, offset: opts.offset };
}
export async function series(userId, window) {
return getSeries(userId, window);
}
export async function event(userId, eventUuid) {
return getEvent(userId, eventUuid);
}
export async function agreement(userId, agreementUuid) {
return getAgreement(userId, agreementUuid);
}
export async function verify(userId, targets) {
return { results: await verifyMany(userId, targets) };
}
export async function details(userId, eventUuid) {
return getEventDetails(userId, eventUuid);
}
export const service = { summary, transactions, series, event, verify, agreement, details };