import { request, requestBlob, requestForm, withQuery } from '../core/httpClient'; import type { ApplicationCmppParams, ApplicationConnectionsResponse, ApplicationDeactivationPreview, ApplicationReportField, CaptchaResponse, EnterpriseApplication, HttpApiConfig, HttpApiConfigResponse, HttpWebhookEndpoint, ManagedUser, PagedResult, TenantManagementRow, TenantOption, UserPayload } from '../types'; import type { LoginSession } from '../session'; import { portalSessionApi } from './session.api'; // R1 domain fragment. src/api/adminApi.ts remains the public compatibility facade. export const adminIdentityApi = { getCaptcha: () => request('/admin/auth/captcha'), login: (body: { login: string; password: string; captchaId: string; captchaText: string }) => request('/admin/auth/login', { method: 'POST', body: JSON.stringify(body) }), touchSession: () => portalSessionApi.touch('admin'), lockSession: () => portalSessionApi.lock('admin'), unlockSession: (password: string) => portalSessionApi.unlock('admin', password), reauthenticate: (password: string) => portalSessionApi.reauthenticate('admin', password), logout: () => portalSessionApi.logout('admin'), changeOwnPassword: (body: { currentPassword: string; password: string }) => portalSessionApi.changeOwnPassword('admin', body), listTenants: () => request('/admin/tenants'), listTenantManagementRows: () => request('/admin/tenants/management-list'), getTenant: (id: string) => request(`/admin/tenants/${id}`), createTenant: (body: { name: string; code?: string; status?: string; creditCode?: string; province?: string; city?: string; address?: string; contactName?: string; contactIdCard?: string; contactPhone?: string; contactEmail?: string; photoFileObjectId?: string }) => request('/admin/tenants', { method: 'POST', body: JSON.stringify(body) }), updateTenant: (id: string, body: { name?: string; code?: string; status?: string; creditCode?: string; province?: string; city?: string; address?: string; contactName?: string; contactIdCard?: string; contactPhone?: string; contactEmail?: string; photoFileObjectId?: string }) => request(`/admin/tenants/${id}`, { method: 'PUT', body: JSON.stringify(body) }), changeTenantStatus: (id: string, status: string) => request(`/admin/tenants/${id}/status`, { method: 'POST', body: JSON.stringify({ status }) }), deleteTenant: (id: string) => request(`/admin/tenants/${id}`, { method: 'DELETE' }), listUsers: (query: { tenantId?: string; roleCode?: string; displayName?: string; login?: string; status?: string } = {}) => request(withQuery('/admin/users', query)), createUser: (body: UserPayload) => request('/admin/users', { method: 'POST', body: JSON.stringify(body) }), updateUser: (id: string, body: Omit) => request(`/admin/users/${id}`, { method: 'PUT', body: JSON.stringify(body) }), changeUserStatus: (id: string, status: string, operatorId?: string) => request(`/admin/users/${id}/status`, { method: 'POST', body: JSON.stringify({ status, operatorId }) }), deleteUser: (id: string, operatorId?: string) => request(`/admin/users/${id}`, { method: 'DELETE', body: JSON.stringify({ operatorId }) }), changeUserPassword: (id: string, password: string, operatorId?: string) => request(`/admin/users/${id}/password`, { method: 'POST', body: JSON.stringify({ password, operatorId }) }), listEnterpriseApplications: (query: { tenantId?: string; keyword?: string; enterpriseKeyword?: string; applicationKeyword?: string; status?: string } = {}) => request(withQuery('/admin/enterprise-applications', query)), listEnterpriseApplicationsPage: (query: { tenantId?: string; keyword?: string; enterpriseKeyword?: string; applicationKeyword?: string; status?: string; page: number; pageSize: number }) => request>(withQuery('/admin/enterprise-applications', query)), listEnterpriseApplicationOptions: (query: { tenantId?: string } = {}) => request(withQuery('/admin/enterprise-application-options', query)), getEnterpriseApplication: (id: string) => request(`/admin/enterprise-applications/${id}`), createEnterpriseApplication: (body: { tenantId: string; name: string; scene?: string; dailyLimit?: number; customerUnitPrice?: number; queuePriority?: 'normal' | 'priority'; templateMismatchMode?: string; downstreamReceiptRetryEnabled?: boolean; downstreamUplinkRetryEnabled?: boolean; cmppAccount?: string; cmppEnterpriseCode?: string; cmppApplicationExtension?: string; cmppAccessNumberFillEnabled?: boolean; cmppAccessNumberFillPrefix?: string; passwordCipher?: string; interfaceEnabled?: boolean; interfaceType?: 'cmpp20'; cmppMaxConnections?: number; cmppWindowSize?: number; ipAllowlist?: string[] }) => request('/admin/enterprise-applications', { method: 'POST', body: JSON.stringify(body) }), updateEnterpriseApplication: (id: string, body: { name?: string; scene?: string; dailyLimit?: number; customerUnitPrice?: number; queuePriority?: 'normal' | 'priority'; templateMismatchMode?: string; downstreamReceiptRetryEnabled?: boolean; downstreamUplinkRetryEnabled?: boolean; cmppAccount?: string; cmppEnterpriseCode?: string; cmppApplicationExtension?: string; cmppAccessNumberFillEnabled?: boolean; cmppAccessNumberFillPrefix?: string; passwordCipher?: string; interfaceEnabled?: boolean; interfaceType?: 'cmpp20'; cmppMaxConnections?: number; cmppWindowSize?: number; ipAllowlist?: string[] }) => request(`/admin/enterprise-applications/${id}`, { method: 'PUT', body: JSON.stringify(body) }), getApplicationDeactivationPreview: (id: string) => request(`/admin/enterprise-applications/${id}/deactivation-preview`), changeApplicationStatus: (id: string, status: string, reason?: string, force = false) => request(`/admin/enterprise-applications/${id}/status`, { method: 'POST', body: JSON.stringify({ status, reason, force }), }), listApplicationConnections: (applicationId: string) => request(`/admin/enterprise-applications/${applicationId}/connections`), listApplicationReportFields: (applicationId: string, reportType?: 'signature' | 'drainage') => request(withQuery(`/admin/enterprise-applications/${applicationId}/report-fields`, { reportType })), listCommonApplicationReportFields: (reportType: 'signature' | 'drainage') => request(withQuery('/admin/report-fields/common', { reportType })), getApplicationCmppParams: (applicationId: string) => request(`/admin/enterprise-applications/${applicationId}/cmpp-params`), getApplicationHttpApiConfig: (applicationId: string) => request(`/admin/enterprise-applications/${applicationId}/http-api`), updateApplicationHttpApiConfig: (applicationId: string, body: Partial & { ipAllowlist?: string[] }) => request(`/admin/enterprise-applications/${applicationId}/http-api`, { method: 'PUT', body: JSON.stringify(body) }), listApplicationHttpWebhooks: (applicationId: string) => request(`/admin/enterprise-applications/${applicationId}/http-api/webhooks`), saveApplicationHttpWebhook: ( applicationId: string, eventType: 'receipt' | 'uplink', body: { url: string; rotateSecret?: boolean; status?: string }, ) => request(`/admin/enterprise-applications/${applicationId}/http-api/webhooks/${eventType}`, { method: 'PUT', body: JSON.stringify(body), }), };