119 lines
4.1 KiB
JavaScript
119 lines
4.1 KiB
JavaScript
(function attachBackgroundStep4(root, factory) {
|
|
root.MultiPageBackgroundStep4 = factory();
|
|
})(typeof self !== 'undefined' ? self : globalThis, function createBackgroundStep4Module() {
|
|
function createStep4Executor(deps = {}) {
|
|
const {
|
|
addLog,
|
|
chrome,
|
|
completeStepFromBackground,
|
|
confirmCustomVerificationStepBypass,
|
|
ensureMail2925MailboxSession,
|
|
getMailConfig,
|
|
getTabId,
|
|
HOTMAIL_PROVIDER,
|
|
isTabAlive,
|
|
LUCKMAIL_PROVIDER,
|
|
CLOUDFLARE_TEMP_EMAIL_PROVIDER,
|
|
resolveVerificationStep,
|
|
reuseOrCreateTab,
|
|
sendToContentScriptResilient,
|
|
shouldUseCustomRegistrationEmail,
|
|
STANDARD_MAIL_VERIFICATION_RESEND_INTERVAL_MS,
|
|
throwIfStopped,
|
|
} = deps;
|
|
|
|
async function executeStep4(state) {
|
|
const mail = getMailConfig(state);
|
|
if (mail.error) throw new Error(mail.error);
|
|
const stepStartedAt = Date.now();
|
|
const verificationSessionKey = `4:${stepStartedAt}`;
|
|
const signupTabId = await getTabId('signup-page');
|
|
if (!signupTabId) {
|
|
throw new Error('认证页面标签页已关闭,无法继续步骤 4。');
|
|
}
|
|
|
|
await chrome.tabs.update(signupTabId, { active: true });
|
|
throwIfStopped();
|
|
await addLog('步骤 4:正在确认注册验证码页面是否就绪,必要时自动恢复密码页超时报错...');
|
|
const prepareResult = await sendToContentScriptResilient(
|
|
'signup-page',
|
|
{
|
|
type: 'PREPARE_SIGNUP_VERIFICATION',
|
|
step: 4,
|
|
source: 'background',
|
|
payload: {
|
|
password: state.password || state.customPassword || '',
|
|
prepareSource: 'step4_execute',
|
|
prepareLogLabel: '步骤 4 执行',
|
|
},
|
|
},
|
|
{
|
|
timeoutMs: 30000,
|
|
retryDelayMs: 700,
|
|
logMessage: '步骤 4:认证页正在切换,等待页面重新就绪后继续检测...',
|
|
}
|
|
);
|
|
|
|
if (prepareResult && prepareResult.error) {
|
|
throw new Error(prepareResult.error);
|
|
}
|
|
if (prepareResult?.alreadyVerified) {
|
|
await completeStepFromBackground(4, {});
|
|
return;
|
|
}
|
|
|
|
if (shouldUseCustomRegistrationEmail(state)) {
|
|
await confirmCustomVerificationStepBypass(4);
|
|
return;
|
|
}
|
|
|
|
throwIfStopped();
|
|
if (mail.provider === HOTMAIL_PROVIDER || mail.provider === LUCKMAIL_PROVIDER || mail.provider === CLOUDFLARE_TEMP_EMAIL_PROVIDER) {
|
|
await addLog(`步骤 4:正在通过 ${mail.label} 轮询验证码...`);
|
|
} else if (mail.provider === '2925') {
|
|
if (state?.mail2925UseAccountPool && typeof ensureMail2925MailboxSession === 'function') {
|
|
await ensureMail2925MailboxSession({
|
|
accountId: state.currentMail2925AccountId || null,
|
|
actionLabel: '步骤 4:确认 2925 邮箱登录态',
|
|
});
|
|
}
|
|
await addLog(`步骤 4:正在通过 ${mail.label} 轮询验证码...`);
|
|
} else {
|
|
await addLog(`步骤 4:正在打开${mail.label}...`);
|
|
|
|
const alive = await isTabAlive(mail.source);
|
|
if (alive) {
|
|
if (mail.navigateOnReuse) {
|
|
await reuseOrCreateTab(mail.source, mail.url, {
|
|
inject: mail.inject,
|
|
injectSource: mail.injectSource,
|
|
});
|
|
} else {
|
|
const tabId = await getTabId(mail.source);
|
|
await chrome.tabs.update(tabId, { active: true });
|
|
}
|
|
} else {
|
|
await reuseOrCreateTab(mail.source, mail.url, {
|
|
inject: mail.inject,
|
|
injectSource: mail.injectSource,
|
|
});
|
|
}
|
|
}
|
|
|
|
await resolveVerificationStep(4, state, mail, {
|
|
filterAfterTimestamp: mail.provider === '2925' ? 0 : stepStartedAt,
|
|
sessionKey: verificationSessionKey,
|
|
disableTimeBudgetCap: mail.provider === '2925',
|
|
requestFreshCodeFirst: mail.provider === HOTMAIL_PROVIDER ? false : true,
|
|
resendIntervalMs: (mail.provider === HOTMAIL_PROVIDER || mail.provider === '2925')
|
|
? 0
|
|
: STANDARD_MAIL_VERIFICATION_RESEND_INTERVAL_MS,
|
|
});
|
|
}
|
|
|
|
return { executeStep4 };
|
|
}
|
|
|
|
return { createStep4Executor };
|
|
});
|