Skip to content
File

Blob: src/client/lib/api/admin.ts

typescript60 lines
1import {
2 AdminDomainRequest,
3 AdminDomainStatusRequest,
4 AdminDomainsResponse,
5 AdminInboxesResponse,
6 AdminTempInboxPage,
7 OkResponse,
8} from "@/shared/contracts";
9import { ADMIN_BOOKMARK_SCOPE } from "./shared";
10import { encodeJsonBody, request } from "./http";
11 
12export async function listAdminInboxes() {
13 const response = await request("/api/protected/admin/inboxes", AdminInboxesResponse, {
14 bookmarkScope: ADMIN_BOOKMARK_SCOPE,
15 });
16 return response.inboxes;
17}
18 
19export async function listAdminDomains() {
20 const response = await request("/api/protected/admin/domains", AdminDomainsResponse, {
21 bookmarkScope: ADMIN_BOOKMARK_SCOPE,
22 });
23 return response.domains;
24}
25 
26export async function listAdminTempInboxes(page = 0, hasEmails = false) {
27 const params = new URLSearchParams({ page: String(page) });
28 if (hasEmails) {
29 params.set("hasEmails", "true");
30 }
31 
32 return request(`/api/protected/admin/temp-inboxes?${params.toString()}`, AdminTempInboxPage, {
33 bookmarkScope: ADMIN_BOOKMARK_SCOPE,
34 });
35}
36 
37export async function addAdminDomain(domain: string, isActive = true) {
38 const response = await request("/api/protected/admin/domains", AdminDomainsResponse, {
39 method: "POST",
40 bookmarkScope: ADMIN_BOOKMARK_SCOPE,
41 body: encodeJsonBody(AdminDomainRequest, { domain, isActive }),
42 });
43 return response.domains;
44}
45 
46export async function updateAdminDomain(domain: string, isActive: boolean) {
47 return request(`/api/protected/admin/domains/${encodeURIComponent(domain)}`, OkResponse, {
48 method: "PATCH",
49 bookmarkScope: ADMIN_BOOKMARK_SCOPE,
50 body: encodeJsonBody(AdminDomainStatusRequest, { isActive }),
51 });
52}
53 
54export async function deleteAdminDomain(domain: string) {
55 return request(`/api/protected/admin/domains/${encodeURIComponent(domain)}`, OkResponse, {
56 method: "DELETE",
57 bookmarkScope: ADMIN_BOOKMARK_SCOPE,
58 });
59}