import type { ApiSettings, MailConnectionTestResponse, MailImapFolderListResponse, MailImapTestPayload, MailProfilePolicy, MailProfilePolicyResponse, MailProfileScope, MailSecurity, MailServerProfile, MailServerProfilePayload, MailSmtpTestPayload, MockMailboxMessageResponse } from "@govoplan/core-webui"; import { apiFetch, apiGetList, apiPath, apiPost, apiPostJson } from "./client"; const profileActionEndpoints = { smtp: "test-smtp", imap: "test-imap", folders: "list-imap-folders" } as const; const rawSettingsEndpoints = { smtp: "/api/v1/mail/test-smtp", imap: "/api/v1/mail/test-imap", folders: "/api/v1/mail/list-imap-folders" } as const; function runProfileAction( settings: ApiSettings, profileId: string, action: keyof typeof profileActionEndpoints ): Promise { return apiPost( settings, `/api/v1/mail/profiles/${encodeURIComponent(profileId)}/${profileActionEndpoints[action]}` ); } function runRawSettingsAction( settings: ApiSettings, payload: TPayload, action: keyof typeof rawSettingsEndpoints ): Promise { return apiPostJson(settings, rawSettingsEndpoints[action], payload); } export async function listMailServerProfiles(settings: ApiSettings, includeInactive = false, campaignId?: string): Promise { return apiGetList(settings, "/api/v1/mail/profiles", "profiles", { include_inactive: includeInactive ? true : undefined, campaign_id: campaignId }); } export async function createMailServerProfile(settings: ApiSettings, payload: MailServerProfilePayload): Promise { return apiFetch(settings, "/api/v1/mail/profiles", { method: "POST", body: JSON.stringify(payload) }); } export async function getMailProfilePolicy( settings: ApiSettings, scopeType: MailProfileScope, scopeId?: string | null, campaignId?: string | null ): Promise { return apiFetch(settings, apiPath(`/api/v1/mail/policies/${encodeURIComponent(scopeType)}`, { scope_id: scopeId, campaign_id: campaignId })); } export async function testMailProfileSmtp(settings: ApiSettings, profileId: string): Promise { return runProfileAction(settings, profileId, "smtp"); } export async function testMailProfileImap(settings: ApiSettings, profileId: string): Promise { return runProfileAction(settings, profileId, "imap"); } export async function listMailProfileImapFolders(settings: ApiSettings, profileId: string): Promise { return runProfileAction(settings, profileId, "folders"); } export async function testSmtpSettings(settings: ApiSettings, payload: MailSmtpTestPayload): Promise { return runRawSettingsAction(settings, payload, "smtp"); } export async function testImapSettings(settings: ApiSettings, payload: MailImapTestPayload): Promise { return runRawSettingsAction(settings, payload, "imap"); } export async function listImapFolders(settings: ApiSettings, payload: MailImapTestPayload): Promise { return runRawSettingsAction(settings, payload, "folders"); } export async function getMockMailboxMessage(settings: ApiSettings, id: string): Promise { return apiFetch(settings, `/api/v1/dev/mailbox/messages/${encodeURIComponent(id)}`); } export { mailProfilePatternKeys, mailProfilePolicyLimitKeys } from "@govoplan/core-webui"; export type { MailConnectionTestResponse, MailCredentialPolicy, MailImapFolderListResponse, MailImapFolderResponse, MailImapTestPayload, MailProfilePatternKey, MailProfilePatternRules, MailProfilePolicy, MailProfilePolicyLimitKey, MailProfilePolicyLimitPermissions, MailProfilePolicyResponse, MailProfileScope, MailSecurity, MailServerProfile, MailServerProfileCredentialsPayload, MailServerProfileListResponse, MailServerProfilePayload, MailSmtpTestPayload, MailTransportCredentialsPayload, MockMailboxMessage, MockMailboxMessageResponse } from "@govoplan/core-webui"; export type { MailPolicySourceStep as PolicySourceStep } from "@govoplan/core-webui";