fill-profile.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. (function attachBackgroundStep5(root, factory) {
  2. root.MultiPageBackgroundStep5 = factory();
  3. })(typeof self !== 'undefined' ? self : globalThis, function createBackgroundStep5Module() {
  4. function createStep5Executor(deps = {}) {
  5. const {
  6. addLog,
  7. generateRandomBirthday,
  8. generateRandomName,
  9. getState,
  10. getTabId,
  11. handleChatgptOnboardingSkip,
  12. isRetryableContentScriptTransportError,
  13. LOG_PREFIX,
  14. sendToContentScript,
  15. waitForStep5ChatgptRedirect,
  16. } = deps;
  17. async function isStepAlreadyCompleted(step) {
  18. if (typeof getState !== 'function') {
  19. return false;
  20. }
  21. const latestState = await getState().catch(() => null);
  22. return latestState?.stepStatuses?.[step] === 'completed';
  23. }
  24. async function executeStep5() {
  25. const { firstName, lastName } = generateRandomName();
  26. const { year, month, day } = generateRandomBirthday();
  27. await addLog(`步骤 5:已生成姓名 ${firstName} ${lastName},生日 ${year}-${month}-${day}`);
  28. let step5Result = null;
  29. let step5TransportError = null;
  30. try {
  31. step5Result = await sendToContentScript('signup-page', {
  32. type: 'EXECUTE_STEP',
  33. step: 5,
  34. source: 'background',
  35. payload: { firstName, lastName, year, month, day },
  36. });
  37. } catch (err) {
  38. if (isRetryableContentScriptTransportError(err)) {
  39. step5TransportError = err;
  40. console.log(LOG_PREFIX, '步骤 5:内容脚本通信中断,正在检查是否跳转到 ChatGPT 引导页...', err?.message);
  41. } else {
  42. throw err;
  43. }
  44. }
  45. if (step5TransportError && await isStepAlreadyCompleted(5)) {
  46. await addLog('步骤 5:提交后的页面跳转打断了响应,但已收到完成信号,直接结束当前步骤。', 'info');
  47. return;
  48. }
  49. if (step5Result?.chatgptOnboarding) {
  50. await addLog('步骤 5:检测到 ChatGPT 引导页跳转,正在处理引导页跳过...');
  51. await handleChatgptOnboardingSkip();
  52. return;
  53. }
  54. if (step5Result?.chatgptHome) {
  55. await addLog('步骤 5:检测到已进入 ChatGPT 页面,注册成功。', 'ok');
  56. return;
  57. }
  58. if (step5TransportError) {
  59. const signupTabId = await getTabId('signup-page');
  60. const redirectedTab = await waitForStep5ChatgptRedirect(signupTabId);
  61. if (redirectedTab) {
  62. await addLog('步骤 5:内容脚本因页面跳转到 ChatGPT 而断开,正在处理引导页跳过...');
  63. await handleChatgptOnboardingSkip(redirectedTab.id);
  64. return;
  65. }
  66. throw step5TransportError;
  67. }
  68. }
  69. return { executeStep5 };
  70. }
  71. return { createStep5Executor };
  72. });