109 lines
2.9 KiB
TypeScript
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);
|
|
},
|
|
};
|