1import * as Layer from "effect/Layer";
2import * as FetchHttpClient from "effect/http/FetchHttpClient";
3import { CredentialsStoreLive } from "../Auth/Credentials.ts";
4import { ProfileStoreLive } from "../Auth/Profile.ts";
5import * as Provider from "../Provider.ts";
6import { Annotation, AnnotationProvider } from "./Annotation.ts";
7import { ApiToken, ApiTokenProvider } from "./ApiToken.ts";
8import { AxiomAuth } from "./AuthProvider.ts";
9import * as Credentials from "./Credentials.ts";
10import { Dashboard, DashboardProvider } from "./Dashboard.ts";
11import { Dataset, DatasetProvider } from "./Dataset.ts";
12import { Monitor, MonitorProvider } from "./Monitor.ts";
13import { Notifier, NotifierProvider } from "./Notifier.ts";
14import { View, ViewProvider } from "./View.ts";
15import { VirtualField, VirtualFieldProvider } from "./VirtualField.ts";
16
17export { Credentials } from "@distilled.cloud/axiom/Credentials";
18
19export class Providers extends Provider.ProviderCollection<Providers>()(
20 "Axiom",
21) {}
22
23export type ProviderRequirements = Layer.Services<ReturnType<typeof providers>>;
24
25/**
26 * Axiom providers and credentials. Wires up Dataset, ApiToken, Notifier,
27 * Monitor, Dashboard, VirtualField, View and Annotation resources, and
28 * registers the Axiom AuthProvider so `alchemy profile edit` can configure it.
29 */
30export const providers = () =>
31 Layer.effect(
32 Providers,
33 Provider.collection([
34 Annotation,
35 ApiToken,
36 Dashboard,
37 Dataset,
38 Monitor,
39 Notifier,
40 View,
41 VirtualField,
42 ]),
43 ).pipe(
44 Layer.provide(
45 Layer.mergeAll(
46 AnnotationProvider(),
47 ApiTokenProvider(),
48 DashboardProvider(),
49 DatasetProvider(),
50 MonitorProvider(),
51 NotifierProvider(),
52 ViewProvider(),
53 VirtualFieldProvider(),
54 ),
55 ),
56 Layer.provideMerge(Credentials.fromAuthProvider()),
57 Layer.provideMerge(FetchHttpClient.layer),
58 Layer.provideMerge(AxiomAuth),
59 Layer.provideMerge(ProfileStoreLive),
60 Layer.provideMerge(CredentialsStoreLive),
61 Layer.orDie,
62 );