feat: add phone frequency controls and modularize codebase
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import { request, requestBlob, requestForm, withQuery } from '../core/httpClient';
|
||||
import type { FileObject } from '../types';
|
||||
import { assertUploadFileSize } from '@/utils/fileUpload';
|
||||
import { clearSession, dispatchSessionEvent, hasRecentUserActivity, readSession, redirectToPortalLogin } from '../session';
|
||||
import { readErrorBody } from '../core/httpClient';
|
||||
|
||||
export const adminFilesApi = {
|
||||
uploadFileObject: async (file: File, body: { purpose: string; prefix?: string }, tenantId?: string) => {
|
||||
assertUploadFileSize(file);
|
||||
const form = new FormData();
|
||||
form.set('file', file);
|
||||
form.set('purpose', body.purpose);
|
||||
if (body.prefix) {
|
||||
form.set('prefix', body.prefix);
|
||||
}
|
||||
const headers = new Headers();
|
||||
const session = readSession('admin');
|
||||
if (session && hasRecentUserActivity()) headers.set('x-session-activity', 'user');
|
||||
if (tenantId) {
|
||||
headers.set('x-tenant-id', tenantId);
|
||||
}
|
||||
const response = await fetch('/api/admin/files/upload', { method: 'POST', headers, body: form, credentials: 'same-origin' });
|
||||
if (response.status === 401 && session) {
|
||||
const error = await readErrorBody(response.clone());
|
||||
if (error.code === 'SESSION_LOCKED') {
|
||||
dispatchSessionEvent('admin', 'locked', { message: error.message });
|
||||
} else {
|
||||
clearSession('admin');
|
||||
dispatchSessionEvent('admin', 'logout', { code: error.code, message: error.message });
|
||||
redirectToPortalLogin('admin');
|
||||
}
|
||||
}
|
||||
if (!response.ok) {
|
||||
throw new Error(await response.text());
|
||||
}
|
||||
return response.json() as Promise<FileObject>;
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user