import { AssistantCloudAPI, type AssistantCloudConfig, type SdkIdentity, type AssistantCloudTelemetryConfig, } from "./AssistantCloudAPI"; import { AssistantCloudAuthTokens } from "./AssistantCloudAuthTokens"; import { AssistantCloudProjects } from "./AssistantCloudProjects"; import { AssistantCloudRuns } from "./AssistantCloudRuns"; import { AssistantCloudThreads } from "./AssistantCloudThreads"; import { AssistantCloudFiles } from "./AssistantCloudFiles"; import { AssistantCloudEvents, clearPendingAssistantCloudEvents, } from "./AssistantCloudEvents"; import { AssistantCloudScores } from "./AssistantCloudScores"; export class AssistantCloud { public readonly threads; public readonly projects; public readonly auth; public readonly runs; public readonly files; public readonly events; public readonly scores; public readonly telemetry: AssistantCloudTelemetryConfig; public readonly registerSdk: (sdk: SdkIdentity) => void; constructor(config: AssistantCloudConfig) { const api = new AssistantCloudAPI(config); this.registerSdk = api.registerSdk; const t = config.telemetry; const telemetry = t === false ? { enabled: false } : t === true || t === undefined ? { enabled: true } : { ...t, enabled: t.enabled !== false, }; this.telemetry = new Proxy(telemetry, { set: (target, property, value) => { const updated = Reflect.set(target, property, value); if ( (property === "enabled" || property === "events") && (target.enabled === false || target.events === false) ) { clearPendingAssistantCloudEvents(this.events); } return updated; }, }); this.threads = new AssistantCloudThreads(api); this.projects = new AssistantCloudProjects(api); this.auth = { tokens: new AssistantCloudAuthTokens(api), invalidate: () => { api.invalidateAuth(); clearPendingAssistantCloudEvents(this.events); }, }; this.runs = new AssistantCloudRuns(api); this.files = new AssistantCloudFiles(api); this.events = new AssistantCloudEvents( api, () => this.telemetry.enabled !== false && this.telemetry.events !== false, ); this.scores = new AssistantCloudScores(api); } }