EventBuzz_Console/src/services/api/organization.ts

109 lines
2.9 KiB
TypeScript

import { api } from './client';
import type { OrganizationRecord } from './types';
export type OrganizationUpdatePayload = Partial<
Pick<
OrganizationRecord,
| 'name'
| 'description'
| 'email'
| 'phone'
| 'website'
| 'address'
| 'logo'
| 'timezone'
| 'dateFormat'
| 'language'
| 'subscription'
>
>;
export const organizationApi = {
/** Use cacheBust after subscription/checkout so browsers/CDNs cannot serve a stale org document. */
async get(options?: { cacheBust?: boolean }): Promise<OrganizationRecord | null> {
const suffix = options?.cacheBust ? `?_=${encodeURIComponent(String(Date.now()))}` : '';
const r = await api.get<OrganizationRecord | null>(`/organization${suffix}`);
if (r.error) throw new Error(r.error);
return r.data ?? null;
},
async update(payload: OrganizationUpdatePayload): Promise<OrganizationRecord> {
const r = await api.put<OrganizationRecord>('/organization', payload);
if (r.error || r.data == null) throw new Error(r.error ?? 'Update failed');
return r.data;
},
getEmailSettings() {
return api.get<{
enabled: boolean;
host: string;
port: number;
secure: boolean;
user: string;
userLast4: string;
hasPassword: boolean;
fromName: string;
fromAddress: string;
}>('/organization/email-settings');
},
updateEmailSettings(payload: {
enabled?: boolean;
host?: string;
port?: number;
secure?: boolean;
user?: string;
password?: string;
fromName?: string;
fromAddress?: string;
}) {
return api.put<{
enabled: boolean;
host: string;
port: number;
secure: boolean;
user: string;
userLast4: string;
hasPassword: boolean;
fromName: string;
fromAddress: string;
}>('/organization/email-settings', payload);
},
testEmailSettings(to: string) {
return api.post<{ ok: boolean }>('/organization/email-settings/test', { to });
},
getWhatsAppSettings() {
return api.get<{
enabled: boolean;
wabaId: string;
phoneNumberId: string;
hasAccessToken: boolean;
/** True when org has not saved its own WABA+token and env `META_WHATSAPP_*` defaults are in use. */
usingServerDefaults: boolean;
/** WABA + token available (org or server) — template sync / Graph. */
graphAccess: boolean;
/** Token + phone number id — required to send template messages. */
canSendMessages: boolean;
}>('/organization/whatsapp-settings');
},
updateWhatsAppSettings(payload: {
enabled?: boolean;
wabaId?: string;
phoneNumberId?: string;
accessToken?: string;
}) {
return api.put<{
enabled: boolean;
wabaId: string;
phoneNumberId: string;
hasAccessToken: boolean;
usingServerDefaults: boolean;
graphAccess: boolean;
canSendMessages: boolean;
}>('/organization/whatsapp-settings', payload);
},
};