|
@@ -66,6 +66,8 @@ const rowSub2ApiGroup = document.getElementById('row-sub2api-group');
|
|
|
const inputSub2ApiGroup = document.getElementById('input-sub2api-group');
|
|
const inputSub2ApiGroup = document.getElementById('input-sub2api-group');
|
|
|
const selectMailProvider = document.getElementById('select-mail-provider');
|
|
const selectMailProvider = document.getElementById('select-mail-provider');
|
|
|
const btnMailLogin = document.getElementById('btn-mail-login');
|
|
const btnMailLogin = document.getElementById('btn-mail-login');
|
|
|
|
|
+const rowMail2925Mode = document.getElementById('row-mail-2925-mode');
|
|
|
|
|
+const mail2925ModeButtons = Array.from(document.querySelectorAll('[data-mail-2925-mode]'));
|
|
|
const rowEmailGenerator = document.getElementById('row-email-generator');
|
|
const rowEmailGenerator = document.getElementById('row-email-generator');
|
|
|
const selectEmailGenerator = document.getElementById('select-email-generator');
|
|
const selectEmailGenerator = document.getElementById('select-email-generator');
|
|
|
const rowTempEmailBaseUrl = document.getElementById('row-temp-email-base-url');
|
|
const rowTempEmailBaseUrl = document.getElementById('row-temp-email-base-url');
|
|
@@ -188,6 +190,9 @@ const AUTO_RUN_MAX_RETRIES_PER_ROUND = 3;
|
|
|
const AUTO_STEP_DELAY_MIN_SECONDS = 0;
|
|
const AUTO_STEP_DELAY_MIN_SECONDS = 0;
|
|
|
const AUTO_STEP_DELAY_MAX_SECONDS = 600;
|
|
const AUTO_STEP_DELAY_MAX_SECONDS = 600;
|
|
|
const DEFAULT_LOCAL_CPA_STEP9_MODE = 'submit';
|
|
const DEFAULT_LOCAL_CPA_STEP9_MODE = 'submit';
|
|
|
|
|
+const MAIL_2925_MODE_PROVIDE = 'provide';
|
|
|
|
|
+const MAIL_2925_MODE_RECEIVE = 'receive';
|
|
|
|
|
+const DEFAULT_MAIL_2925_MODE = MAIL_2925_MODE_PROVIDE;
|
|
|
const AUTO_SKIP_FAILURES_PROMPT_DISMISSED_STORAGE_KEY = 'multipage-auto-skip-failures-prompt-dismissed';
|
|
const AUTO_SKIP_FAILURES_PROMPT_DISMISSED_STORAGE_KEY = 'multipage-auto-skip-failures-prompt-dismissed';
|
|
|
const AUTO_RUN_FALLBACK_RISK_PROMPT_DISMISSED_STORAGE_KEY = 'multipage-auto-run-fallback-risk-prompt-dismissed';
|
|
const AUTO_RUN_FALLBACK_RISK_PROMPT_DISMISSED_STORAGE_KEY = 'multipage-auto-run-fallback-risk-prompt-dismissed';
|
|
|
const AUTO_RUN_FALLBACK_RISK_WARNING_MIN_RUNS = 15;
|
|
const AUTO_RUN_FALLBACK_RISK_WARNING_MIN_RUNS = 15;
|
|
@@ -304,7 +309,8 @@ const LOG_LEVEL_LABELS = {
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
function usesGeneratedAliasMailProvider(provider) {
|
|
function usesGeneratedAliasMailProvider(provider) {
|
|
|
- return provider === '2925';
|
|
|
|
|
|
|
+ return String(provider || '').trim() === '2925'
|
|
|
|
|
+ && getSelectedMail2925Mode() === MAIL_2925_MODE_PROVIDE;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function showToast(message, type = 'error', duration = 4000) {
|
|
function showToast(message, type = 'error', duration = 4000) {
|
|
@@ -1090,6 +1096,7 @@ function collectSettingsPayload() {
|
|
|
sub2apiGroupName: inputSub2ApiGroup.value.trim(),
|
|
sub2apiGroupName: inputSub2ApiGroup.value.trim(),
|
|
|
customPassword: inputPassword.value,
|
|
customPassword: inputPassword.value,
|
|
|
mailProvider: selectMailProvider.value,
|
|
mailProvider: selectMailProvider.value,
|
|
|
|
|
+ mail2925Mode: getSelectedMail2925Mode(),
|
|
|
emailGenerator: selectEmailGenerator.value,
|
|
emailGenerator: selectEmailGenerator.value,
|
|
|
autoDeleteUsedIcloudAlias: checkboxAutoDeleteIcloud?.checked,
|
|
autoDeleteUsedIcloudAlias: checkboxAutoDeleteIcloud?.checked,
|
|
|
icloudHostPreference: selectIcloudHostPreference?.value || 'auto',
|
|
icloudHostPreference: selectIcloudHostPreference?.value || 'auto',
|
|
@@ -1124,6 +1131,12 @@ function normalizeLocalCpaStep9Mode(value = '') {
|
|
|
: DEFAULT_LOCAL_CPA_STEP9_MODE;
|
|
: DEFAULT_LOCAL_CPA_STEP9_MODE;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+function normalizeMail2925Mode(value = '') {
|
|
|
|
|
+ return String(value || '').trim().toLowerCase() === MAIL_2925_MODE_RECEIVE
|
|
|
|
|
+ ? MAIL_2925_MODE_RECEIVE
|
|
|
|
|
+ : DEFAULT_MAIL_2925_MODE;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
function normalizeHotmailServiceMode(value = '') {
|
|
function normalizeHotmailServiceMode(value = '') {
|
|
|
return HOTMAIL_SERVICE_MODE_LOCAL;
|
|
return HOTMAIL_SERVICE_MODE_LOCAL;
|
|
|
}
|
|
}
|
|
@@ -1142,6 +1155,20 @@ function setLocalCpaStep9Mode(mode) {
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+function getSelectedMail2925Mode() {
|
|
|
|
|
+ const activeButton = mail2925ModeButtons.find((button) => button.classList.contains('is-active'));
|
|
|
|
|
+ return normalizeMail2925Mode(activeButton?.dataset.mail2925Mode);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function setMail2925Mode(mode) {
|
|
|
|
|
+ const resolvedMode = normalizeMail2925Mode(mode);
|
|
|
|
|
+ mail2925ModeButtons.forEach((button) => {
|
|
|
|
|
+ const active = button.dataset.mail2925Mode === resolvedMode;
|
|
|
|
|
+ button.classList.toggle('is-active', active);
|
|
|
|
|
+ button.setAttribute('aria-pressed', String(active));
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
function getSelectedHotmailServiceMode() {
|
|
function getSelectedHotmailServiceMode() {
|
|
|
const activeButton = hotmailServiceModeButtons.find((button) => button.classList.contains('is-active'));
|
|
const activeButton = hotmailServiceModeButtons.find((button) => button.classList.contains('is-active'));
|
|
|
return normalizeHotmailServiceMode(activeButton?.dataset.hotmailServiceMode);
|
|
return normalizeHotmailServiceMode(activeButton?.dataset.hotmailServiceMode);
|
|
@@ -1388,13 +1415,14 @@ function applySettingsState(state) {
|
|
|
? 'custom'
|
|
? 'custom'
|
|
|
: '163');
|
|
: '163');
|
|
|
selectMailProvider.value = restoredMailProvider;
|
|
selectMailProvider.value = restoredMailProvider;
|
|
|
|
|
+ setMail2925Mode(state?.mail2925Mode);
|
|
|
{
|
|
{
|
|
|
- const restoredGenerator = String(state?.emailGenerator || '').trim().toLowerCase();
|
|
|
|
|
- if (restoredGenerator === 'icloud') {
|
|
|
|
|
|
|
+ const restoredEmailGenerator = String(state?.emailGenerator || '').trim().toLowerCase();
|
|
|
|
|
+ if (restoredEmailGenerator === 'icloud') {
|
|
|
selectEmailGenerator.value = 'icloud';
|
|
selectEmailGenerator.value = 'icloud';
|
|
|
- } else if (restoredGenerator === 'cloudflare') {
|
|
|
|
|
|
|
+ } else if (restoredEmailGenerator === 'cloudflare') {
|
|
|
selectEmailGenerator.value = 'cloudflare';
|
|
selectEmailGenerator.value = 'cloudflare';
|
|
|
- } else if (restoredGenerator === 'cloudflare-temp-email') {
|
|
|
|
|
|
|
+ } else if (restoredEmailGenerator === 'cloudflare-temp-email') {
|
|
|
selectEmailGenerator.value = 'cloudflare-temp-email';
|
|
selectEmailGenerator.value = 'cloudflare-temp-email';
|
|
|
} else {
|
|
} else {
|
|
|
selectEmailGenerator.value = 'duck';
|
|
selectEmailGenerator.value = 'duck';
|
|
@@ -2253,9 +2281,13 @@ function isCurrentEmailManagedByLuckmail(state = latestState) {
|
|
|
return inputEmailValue === luckmailEmail || stateEmailValue === luckmailEmail;
|
|
return inputEmailValue === luckmailEmail || stateEmailValue === luckmailEmail;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-function isCurrentEmailManagedByGeneratedAlias(provider = latestState?.mailProvider, state = latestState) {
|
|
|
|
|
|
|
+function isCurrentEmailManagedByGeneratedAlias(
|
|
|
|
|
+ provider = latestState?.mailProvider,
|
|
|
|
|
+ state = latestState,
|
|
|
|
|
+ mail2925Mode = latestState?.mail2925Mode
|
|
|
|
|
+) {
|
|
|
const normalizedProvider = String(provider || '').trim();
|
|
const normalizedProvider = String(provider || '').trim();
|
|
|
- if (!usesGeneratedAliasMailProvider(normalizedProvider)) {
|
|
|
|
|
|
|
+ if (!(normalizedProvider === '2925' && normalizeMail2925Mode(mail2925Mode) === MAIL_2925_MODE_PROVIDE)) {
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -2490,7 +2522,8 @@ function renderHotmailAccounts() {
|
|
|
|
|
|
|
|
function updateMailProviderUI() {
|
|
function updateMailProviderUI() {
|
|
|
const use2925 = selectMailProvider.value === '2925';
|
|
const use2925 = selectMailProvider.value === '2925';
|
|
|
- const useGeneratedAlias = usesGeneratedAliasMailProvider(selectMailProvider.value);
|
|
|
|
|
|
|
+ const mail2925Mode = getSelectedMail2925Mode();
|
|
|
|
|
+ const useGeneratedAlias = use2925 && mail2925Mode === MAIL_2925_MODE_PROVIDE;
|
|
|
const useInbucket = selectMailProvider.value === 'inbucket';
|
|
const useInbucket = selectMailProvider.value === 'inbucket';
|
|
|
const useHotmail = selectMailProvider.value === 'hotmail-api';
|
|
const useHotmail = selectMailProvider.value === 'hotmail-api';
|
|
|
const useLuckmail = isLuckmailProvider();
|
|
const useLuckmail = isLuckmailProvider();
|
|
@@ -2498,6 +2531,9 @@ function updateMailProviderUI() {
|
|
|
const useEmailGenerator = !useHotmail && !useLuckmail && !useGeneratedAlias && !useCustomEmail;
|
|
const useEmailGenerator = !useHotmail && !useLuckmail && !useGeneratedAlias && !useCustomEmail;
|
|
|
const useCloudflareTempEmailProvider = selectMailProvider.value === 'cloudflare-temp-email';
|
|
const useCloudflareTempEmailProvider = selectMailProvider.value === 'cloudflare-temp-email';
|
|
|
updateMailLoginButtonState();
|
|
updateMailLoginButtonState();
|
|
|
|
|
+ if (rowMail2925Mode) {
|
|
|
|
|
+ rowMail2925Mode.style.display = use2925 ? '' : 'none';
|
|
|
|
|
+ }
|
|
|
rowEmailPrefix.style.display = useGeneratedAlias ? '' : 'none';
|
|
rowEmailPrefix.style.display = useGeneratedAlias ? '' : 'none';
|
|
|
const hotmailServiceMode = getSelectedHotmailServiceMode();
|
|
const hotmailServiceMode = getSelectedHotmailServiceMode();
|
|
|
rowInbucketHost.style.display = useInbucket ? '' : 'none';
|
|
rowInbucketHost.style.display = useInbucket ? '' : 'none';
|
|
@@ -2565,7 +2601,7 @@ function updateMailProviderUI() {
|
|
|
? '由 Hotmail 账号池自动分配'
|
|
? '由 Hotmail 账号池自动分配'
|
|
|
: (useLuckmail
|
|
: (useLuckmail
|
|
|
? '步骤 3 自动购买 LuckMail 邮箱并回填'
|
|
? '步骤 3 自动购买 LuckMail 邮箱并回填'
|
|
|
- : (use2925 ? '步骤 3 自动生成 2925 邮箱并回填' : uiCopy.placeholder));
|
|
|
|
|
|
|
+ : (useGeneratedAlias ? '步骤 3 自动生成 2925 邮箱并回填' : uiCopy.placeholder));
|
|
|
btnFetchEmail.disabled = useGeneratedAlias || useLuckmail || useCustomEmail || isAutoRunLockedPhase();
|
|
btnFetchEmail.disabled = useGeneratedAlias || useLuckmail || useCustomEmail || isAutoRunLockedPhase();
|
|
|
if (!btnFetchEmail.disabled) {
|
|
if (!btnFetchEmail.disabled) {
|
|
|
btnFetchEmail.textContent = uiCopy.buttonLabel;
|
|
btnFetchEmail.textContent = uiCopy.buttonLabel;
|
|
@@ -4292,6 +4328,7 @@ inputPassword.addEventListener('blur', () => {
|
|
|
|
|
|
|
|
selectMailProvider.addEventListener('change', async () => {
|
|
selectMailProvider.addEventListener('change', async () => {
|
|
|
const previousProvider = latestState?.mailProvider || '';
|
|
const previousProvider = latestState?.mailProvider || '';
|
|
|
|
|
+ const previousMail2925Mode = latestState?.mail2925Mode;
|
|
|
const nextProvider = selectMailProvider.value;
|
|
const nextProvider = selectMailProvider.value;
|
|
|
updateMailProviderUI();
|
|
updateMailProviderUI();
|
|
|
const leavingHotmail = previousProvider === 'hotmail-api'
|
|
const leavingHotmail = previousProvider === 'hotmail-api'
|
|
@@ -4300,9 +4337,12 @@ selectMailProvider.addEventListener('change', async () => {
|
|
|
const leavingLuckmail = previousProvider === LUCKMAIL_PROVIDER
|
|
const leavingLuckmail = previousProvider === LUCKMAIL_PROVIDER
|
|
|
&& nextProvider !== LUCKMAIL_PROVIDER
|
|
&& nextProvider !== LUCKMAIL_PROVIDER
|
|
|
&& isCurrentEmailManagedByLuckmail();
|
|
&& isCurrentEmailManagedByLuckmail();
|
|
|
- const leavingGeneratedAlias = previousProvider !== nextProvider
|
|
|
|
|
- && usesGeneratedAliasMailProvider(previousProvider)
|
|
|
|
|
- && isCurrentEmailManagedByGeneratedAlias(previousProvider);
|
|
|
|
|
|
|
+ const leavingGeneratedAlias = (
|
|
|
|
|
+ previousProvider !== nextProvider
|
|
|
|
|
+ || (previousProvider === '2925' && normalizeMail2925Mode(previousMail2925Mode) !== getSelectedMail2925Mode())
|
|
|
|
|
+ ) && previousProvider === '2925'
|
|
|
|
|
+ && normalizeMail2925Mode(previousMail2925Mode) === MAIL_2925_MODE_PROVIDE
|
|
|
|
|
+ && isCurrentEmailManagedByGeneratedAlias(previousProvider, latestState, previousMail2925Mode);
|
|
|
if (leavingHotmail || leavingLuckmail || leavingGeneratedAlias) {
|
|
if (leavingHotmail || leavingLuckmail || leavingGeneratedAlias) {
|
|
|
await clearRegistrationEmail({ silent: true }).catch(() => { });
|
|
await clearRegistrationEmail({ silent: true }).catch(() => { });
|
|
|
}
|
|
}
|
|
@@ -4313,6 +4353,30 @@ selectMailProvider.addEventListener('change', async () => {
|
|
|
saveSettings({ silent: true }).catch(() => { });
|
|
saveSettings({ silent: true }).catch(() => { });
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+mail2925ModeButtons.forEach((button) => {
|
|
|
|
|
+ button.addEventListener('click', async () => {
|
|
|
|
|
+ const nextMode = normalizeMail2925Mode(button.dataset.mail2925Mode);
|
|
|
|
|
+ const previousMode = normalizeMail2925Mode(latestState?.mail2925Mode);
|
|
|
|
|
+ if (nextMode === getSelectedMail2925Mode()) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ setMail2925Mode(nextMode);
|
|
|
|
|
+ updateMailProviderUI();
|
|
|
|
|
+
|
|
|
|
|
+ const leavingGeneratedAlias = selectMailProvider.value === '2925'
|
|
|
|
|
+ && previousMode === MAIL_2925_MODE_PROVIDE
|
|
|
|
|
+ && nextMode !== MAIL_2925_MODE_PROVIDE
|
|
|
|
|
+ && isCurrentEmailManagedByGeneratedAlias('2925', latestState, previousMode);
|
|
|
|
|
+ if (leavingGeneratedAlias) {
|
|
|
|
|
+ await clearRegistrationEmail({ silent: true }).catch(() => { });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ markSettingsDirty(true);
|
|
|
|
|
+ saveSettings({ silent: true }).catch(() => { });
|
|
|
|
|
+ });
|
|
|
|
|
+});
|
|
|
|
|
+
|
|
|
selectEmailGenerator.addEventListener('change', () => {
|
|
selectEmailGenerator.addEventListener('change', () => {
|
|
|
updateMailProviderUI();
|
|
updateMailProviderUI();
|
|
|
clearRegistrationEmail({ silent: true }).catch(() => { });
|
|
clearRegistrationEmail({ silent: true }).catch(() => { });
|
|
@@ -4832,6 +4896,7 @@ initHotmailListExpandedState();
|
|
|
updateSaveButtonState();
|
|
updateSaveButtonState();
|
|
|
updateConfigMenuControls();
|
|
updateConfigMenuControls();
|
|
|
setLocalCpaStep9Mode(DEFAULT_LOCAL_CPA_STEP9_MODE);
|
|
setLocalCpaStep9Mode(DEFAULT_LOCAL_CPA_STEP9_MODE);
|
|
|
|
|
+setMail2925Mode(DEFAULT_MAIL_2925_MODE);
|
|
|
initializeReleaseInfo().catch((err) => {
|
|
initializeReleaseInfo().catch((err) => {
|
|
|
console.error('Failed to initialize release info:', err);
|
|
console.error('Failed to initialize release info:', err);
|
|
|
});
|
|
});
|