// umami's provisioner — the adapter that makes umami a provider of the mesh `analytics` interface. // The watching, sealing and grant-file handling are the sdk harness's; this writes only the // per-service half: how umami creates and removes a tracked site (novox/hq ADR 0044/0045). // // The `analytics` interface: a consumer contributes `{ domain }` (the site it wants tracked) and // receives `{ siteId, snippet, dashboard }`. umami adapts its own API to that contract, so a // consumer depends on `analytics`, not on umami. import { runProvisioner, type Grant, type Credential } from "@novox/mesh-sdk/provisioner"; import { UmamiClient } from "../client.js"; const umami = UmamiClient.fromEnv(); runProvisioner("analytics", { async create(grant: Grant): Promise { const domain = grant.values.domain ?? grant.consumer; const name = grant.values.name ?? domain; const token = await umami.getToken(); const site = (await umami.findWebsite(token, domain)) ?? (await umami.createWebsite(token, domain, name)); return { fields: { siteId: site.id, snippet: umami.snippet(site.id), dashboard: umami.dashboard(site.id), }, }; }, async remove(grant: Grant): Promise { const domain = grant.values.domain ?? grant.consumer; const token = await umami.getToken(); const site = await umami.findWebsite(token, domain); if (site) await umami.deleteWebsite(token, site.id); }, });