import { requestJson } from "@/shared/api/http-client" import type { IpsecCertBundle, IpsecInitRequest, IpsecListResponse, IpsecServerSummaryDto, IpsecUserCreateRequest, IpsecUserCreated, IpsecUserPatch, } from "@mmapp/contracts/ipsec" export async function listIpsec( baseUrl: string, opts?: { serverId?: string }, ): Promise { const q = new URLSearchParams() if (opts?.serverId) q.set("serverId", opts.serverId) const suffix = q.size > 0 ? `?${q.toString()}` : "" return requestJson(baseUrl, `/api/ipsec${suffix}`, { method: "GET" }) } export async function initIpsecServer( baseUrl: string, body: IpsecInitRequest, ): Promise { return requestJson(baseUrl, "/api/ipsec/server/init", { method: "POST", body: JSON.stringify(body), }) } export async function deleteIpsecServer( baseUrl: string, serverId: string, opts?: { removeCertificates?: boolean }, ): Promise<{ ok: boolean }> { const q = new URLSearchParams() if (opts?.removeCertificates === false) q.set("removeCertificates", "false") const suffix = q.size > 0 ? `?${q.toString()}` : "" return requestJson<{ ok: boolean }>( baseUrl, `/api/ipsec/server/${encodeURIComponent(serverId)}${suffix}`, { method: "DELETE" }, ) } export async function createIpsecUser( baseUrl: string, body: IpsecUserCreateRequest, ): Promise { return requestJson(baseUrl, "/api/ipsec/users", { method: "POST", body: JSON.stringify(body), }) } export async function patchIpsecUser( baseUrl: string, serverId: string, clientId: string, patch: IpsecUserPatch, ): Promise<{ ok: boolean }> { return requestJson<{ ok: boolean }>( baseUrl, `/api/ipsec/users/${encodeURIComponent(serverId)}/${encodeURIComponent(clientId)}`, { method: "PATCH", body: JSON.stringify(patch) }, ) } export async function deleteIpsecUser( baseUrl: string, serverId: string, clientId: string, opts?: { removeCertificate?: boolean }, ): Promise<{ ok: boolean }> { const q = new URLSearchParams() if (opts?.removeCertificate === false) q.set("removeCertificate", "false") const suffix = q.size > 0 ? `?${q.toString()}` : "" return requestJson<{ ok: boolean }>( baseUrl, `/api/ipsec/users/${encodeURIComponent(serverId)}/${encodeURIComponent(clientId)}${suffix}`, { method: "DELETE" }, ) } export async function exportIpsecUserCert( baseUrl: string, serverId: string, clientId: string, passphrase: string, ): Promise { return requestJson( baseUrl, `/api/ipsec/users/${encodeURIComponent(serverId)}/${encodeURIComponent(clientId)}/cert`, { method: "POST", body: JSON.stringify({ passphrase }) }, ) } export async function restoreIpsecRevision( baseUrl: string, revisionId: string, serverId: string, ): Promise<{ ok: boolean }> { return requestJson<{ ok: boolean }>(baseUrl, `/api/ipsec/revisions/${encodeURIComponent(revisionId)}/restore`, { method: "POST", body: JSON.stringify({ serverId }), }) }