feat: 重构优化2925邮箱和gmail邮箱逻辑

This commit is contained in:
QLHazyCoder
2026-04-17 11:33:02 +08:00
parent 6bd00e9129
commit 511cfcfcc7
10 changed files with 711 additions and 41 deletions
@@ -102,6 +102,8 @@ let currentState = {
autoStepDelaySeconds: null,
mailProvider: '163',
emailGenerator: 'duck',
gmailBaseEmail: 'demo@gmail.com',
mail2925BaseEmail: 'demo@2925.com',
emailPrefix: 'demo',
inbucketHost: '',
inbucketMailbox: '',
@@ -151,6 +153,8 @@ async function resetState() {
autoStepDelaySeconds: prev.autoStepDelaySeconds,
mailProvider: prev.mailProvider,
emailGenerator: prev.emailGenerator,
gmailBaseEmail: prev.gmailBaseEmail,
mail2925BaseEmail: prev.mail2925BaseEmail,
emailPrefix: prev.emailPrefix,
inbucketHost: prev.inbucketHost,
inbucketMailbox: prev.inbucketMailbox,
@@ -302,6 +306,8 @@ return {
assert.strictEqual(snapshot.currentState.autoRunPhase, 'complete', 'both runs should complete after reset');
assert.strictEqual(snapshot.currentState.autoRunCurrentRun, 2, 'final run index should be recorded');
assert.strictEqual(snapshot.autoRunActive, false, 'auto-run should exit active state after completion');
assert.strictEqual(snapshot.currentState.gmailBaseEmail, 'demo@gmail.com', 'gmail base email should survive fresh-attempt reset');
assert.strictEqual(snapshot.currentState.mail2925BaseEmail, 'demo@2925.com', '2925 base email should survive fresh-attempt reset');
console.log('auto-run fresh attempt reset tests passed');
})().catch((error) => {
@@ -132,3 +132,42 @@ test('signup flow helper recognizes email verification page as post-email landin
assert.equal(ensureCalls, 1);
assert.equal(passwordReadyChecks, 0);
});
test('signup flow helper reuses existing managed alias email when it is still compatible', async () => {
let buildCalls = 0;
let setEmailCalls = 0;
const helpers = signupFlowApi.createSignupFlowHelpers({
buildGeneratedAliasEmail: () => {
buildCalls += 1;
return 'demo+fresh@gmail.com';
},
chrome: { tabs: { get: async () => ({ id: 21, url: 'https://auth.openai.com/create-account/password' }) } },
ensureContentScriptReadyOnTab: async () => {},
ensureHotmailAccountForFlow: async () => ({}),
ensureLuckmailPurchaseForFlow: async () => ({}),
isGeneratedAliasProvider: () => true,
isReusableGeneratedAliasEmail: (_state, email) => email === 'demo+saved@gmail.com',
isHotmailProvider: () => false,
isLuckmailProvider: () => false,
isSignupEmailVerificationPageUrl: () => false,
isSignupPasswordPageUrl: () => true,
reuseOrCreateTab: async () => 21,
sendToContentScriptResilient: async () => ({}),
setEmailState: async () => {
setEmailCalls += 1;
},
SIGNUP_ENTRY_URL: 'https://chatgpt.com/',
SIGNUP_PAGE_INJECT_FILES: [],
waitForTabUrlMatch: async () => null,
});
const email = await helpers.resolveSignupEmailForFlow({
mailProvider: 'gmail',
email: 'demo+saved@gmail.com',
});
assert.equal(email, 'demo+saved@gmail.com');
assert.equal(buildCalls, 0);
assert.equal(setEmailCalls, 0);
});
+28
View File
@@ -0,0 +1,28 @@
const test = require('node:test');
const assert = require('node:assert/strict');
const fs = require('node:fs');
const source = fs.readFileSync('managed-alias-utils.js', 'utf8');
const scope = {};
const api = new Function('self', `${source}; return self.MultiPageManagedAliasUtils;`)(scope);
test('managed alias utils build gmail +tag email from full base email', () => {
assert.equal(
api.buildManagedAliasEmail('gmail', 'demo@gmail.com', 'riverstone'),
'demo+riverstone@gmail.com'
);
});
test('managed alias utils build 2925 email from full base email', () => {
assert.equal(
api.buildManagedAliasEmail('2925', 'demo@2925.com', '123456'),
'demo123456@2925.com'
);
});
test('managed alias utils validate provider email with or without configured base email', () => {
assert.equal(api.isManagedAliasEmail('demo+riverstone@gmail.com', 'gmail', 'demo@gmail.com'), true);
assert.equal(api.isManagedAliasEmail('demo123456@2925.com', '2925', 'demo@2925.com'), true);
assert.equal(api.isManagedAliasEmail('manual@gmail.com', 'gmail', ''), true);
assert.equal(api.isManagedAliasEmail('manual@qq.com', 'gmail', ''), false);
});