/** * Listmonk API proxy helper — reads per-space credentials from module settings * and forwards requests with Basic Auth. */ import { loadCommunity, getDocumentData } from "../../../server/community-store"; export interface ListmonkConfig { url: string; user: string; password: string; } /** Read Listmonk credentials from the space's module settings. */ export async function getListmonkConfig(spaceSlug: string): Promise { await loadCommunity(spaceSlug); const data = getDocumentData(spaceSlug); if (!data) return null; const settings = data.meta.moduleSettings?.rsocials; if (!settings) return null; const url = settings.listmonkUrl as string | undefined; const user = settings.listmonkUser as string | undefined; const password = settings.listmonkPassword as string | undefined; if (!url || !user || !password) return null; return { url: url.replace(/\/+$/, ''), user, password }; } /** Proxy a request to the Listmonk API with Basic Auth. */ export async function listmonkFetch( config: ListmonkConfig, path: string, opts: RequestInit = {}, ): Promise { const auth = Buffer.from(`${config.user}:${config.password}`).toString("base64"); const headers = new Headers(opts.headers); headers.set("Authorization", `Basic ${auth}`); if (!headers.has("Content-Type") && opts.body) { headers.set("Content-Type", "application/json"); } return fetch(`${config.url}${path}`, { ...opts, headers }); }