step2.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. (function attachBackgroundStep2(root, factory) {
  2. root.MultiPageBackgroundStep2 = factory();
  3. })(typeof self !== 'undefined' ? self : globalThis, function createBackgroundStep2Module() {
  4. function createStep2Executor(deps = {}) {
  5. const {
  6. addLog,
  7. chrome,
  8. completeStepFromBackground,
  9. ensureContentScriptReadyOnTab,
  10. ensureSignupEntryPageReady,
  11. ensureSignupPasswordPageReadyInTab,
  12. getTabId,
  13. isTabAlive,
  14. resolveSignupEmailForFlow,
  15. sendToContentScriptResilient,
  16. SIGNUP_PAGE_INJECT_FILES,
  17. } = deps;
  18. async function executeStep2(state) {
  19. const resolvedEmail = await resolveSignupEmailForFlow(state);
  20. let signupTabId = await getTabId('signup-page');
  21. if (!signupTabId || !(await isTabAlive('signup-page'))) {
  22. await addLog('步骤 2:未发现可用的注册页标签,正在重新打开 ChatGPT 官网...', 'warn');
  23. signupTabId = (await ensureSignupEntryPageReady(2)).tabId;
  24. } else {
  25. await chrome.tabs.update(signupTabId, { active: true });
  26. await ensureContentScriptReadyOnTab('signup-page', signupTabId, {
  27. inject: SIGNUP_PAGE_INJECT_FILES,
  28. injectSource: 'signup-page',
  29. timeoutMs: 45000,
  30. retryDelayMs: 900,
  31. logMessage: '步骤 2:注册入口页内容脚本未就绪,正在等待页面恢复...',
  32. });
  33. }
  34. const step2Result = await sendToContentScriptResilient('signup-page', {
  35. type: 'EXECUTE_STEP',
  36. step: 2,
  37. source: 'background',
  38. payload: { email: resolvedEmail },
  39. }, {
  40. timeoutMs: 20000,
  41. retryDelayMs: 700,
  42. logMessage: '步骤 2:官网注册入口正在切换,等待页面恢复后继续输入邮箱...',
  43. });
  44. if (step2Result?.error) {
  45. throw new Error(step2Result.error);
  46. }
  47. if (!step2Result?.alreadyOnPasswordPage) {
  48. await addLog(`步骤 2:邮箱 ${resolvedEmail} 已提交,正在等待进入密码页...`);
  49. }
  50. await ensureSignupPasswordPageReadyInTab(signupTabId, 2, {
  51. skipUrlWait: Boolean(step2Result?.alreadyOnPasswordPage),
  52. });
  53. await completeStepFromBackground(2, {});
  54. }
  55. return { executeStep2 };
  56. }
  57. return { createStep2Executor };
  58. });