import { Observable } from "@noya-app/observable"; import { RPCManager } from "./rpcManager"; export type Secret = { id: string; stableId: string; name: string; // value: string; }; export type SecretManagerOptions = { initialSecrets?: Secret[]; }; export class SecretManager { constructor( public rpcManager: RPCManager, options: SecretManagerOptions ) { if (!options.initialSecrets) return; this.secrets$.set(options.initialSecrets); this.isInitialized$.set(true); } secrets$ = new Observable([]); isInitialized$ = new Observable(false); async fetchSecrets() { const response = await this.rpcManager.requestRoute("GET /api/secrets", {}); const secrets = this.rpcManager.getResponseBody(response); this.secrets$.set(secrets); this.isInitialized$.set(true); return secrets; } async createSecret(id: string | null, name: string, value: string) { const response = await this.rpcManager.requestRoute("POST /api/secrets", { body: JSON.stringify({ id, name, value }), headers: { "Content-Type": "application/json", }, }); const newSecret = this.rpcManager.getResponseBody(response); return newSecret; } async deleteSecret(id: string) { return await this.rpcManager.requestRoute("DELETE /api/secrets", { body: JSON.stringify({ id }), headers: { "Content-Type": "application/json", }, }); } }