(payload)
| 3011 | } |
| 3012 | |
| 3013 | async function deleteIcloudAlias(payload) { |
| 3014 | return withIcloudLoginHelp('删除 iCloud 隐私邮箱', async () => { |
| 3015 | const alias = typeof payload === 'string' |
| 3016 | ? { email: String(payload).trim().toLowerCase(), anonymousId: '' } |
| 3017 | : { |
| 3018 | email: String(payload?.email || '').trim().toLowerCase(), |
| 3019 | anonymousId: String(payload?.anonymousId || '').trim(), |
| 3020 | }; |
| 3021 | |
| 3022 | if (!alias.email) { |
| 3023 | throw new Error('未提供需要删除的 iCloud 隐私邮箱。'); |
| 3024 | } |
| 3025 | if (!alias.anonymousId) { |
| 3026 | throw new Error(`缺少 ${alias.email} 的 anonymousId,请先刷新 iCloud 别名列表。`); |
| 3027 | } |
| 3028 | |
| 3029 | const { serviceUrl } = await resolveIcloudPremiumMailService(); |
| 3030 | |
| 3031 | try { |
| 3032 | const directDelete = await icloudRequest('POST', `${serviceUrl}/v1/hme/delete`, { |
| 3033 | data: { anonymousId: alias.anonymousId }, |
| 3034 | }); |
| 3035 | if (directDelete?.success === false) { |
| 3036 | throw new Error(directDelete?.error?.errorMessage || 'delete failed'); |
| 3037 | } |
| 3038 | } catch (err) { |
| 3039 | await addLog(`iCloud:直接删除 ${alias.email} 失败,尝试先停用再删除...`, 'warn'); |
| 3040 | |
| 3041 | const deactivated = await icloudRequest('POST', `${serviceUrl}/v1/hme/deactivate`, { |
| 3042 | data: { anonymousId: alias.anonymousId }, |
| 3043 | }); |
| 3044 | if (deactivated?.success === false) { |
| 3045 | throw new Error(deactivated?.error?.errorMessage || `停用 ${alias.email} 失败`); |
| 3046 | } |
| 3047 | |
| 3048 | const deleted = await icloudRequest('POST', `${serviceUrl}/v1/hme/delete`, { |
| 3049 | data: { anonymousId: alias.anonymousId }, |
| 3050 | }); |
| 3051 | if (deleted?.success === false) { |
| 3052 | throw new Error(deleted?.error?.errorMessage || `删除 ${alias.email} 失败`); |
| 3053 | } |
| 3054 | } |
| 3055 | |
| 3056 | const state = await getState(); |
| 3057 | const manualAliasUsage = getManualAliasUsageMap(state); |
| 3058 | const preservedAliases = getPreservedAliasMap(state); |
| 3059 | delete manualAliasUsage[alias.email]; |
| 3060 | delete preservedAliases[alias.email]; |
| 3061 | await setState({ manualAliasUsage, preservedAliases }); |
| 3062 | |
| 3063 | await addLog(`iCloud:已删除 ${alias.email}`, 'ok'); |
| 3064 | broadcastIcloudAliasesChanged({ reason: 'deleted', email: alias.email }); |
| 3065 | return { email: alias.email }; |
| 3066 | }); |
| 3067 | } |
| 3068 | |
| 3069 | async function deleteUsedIcloudAliases() { |
| 3070 | const aliases = await listIcloudAliases(); |
no test coverage detected