fix cfte lookup mode when generating cfte mailboxes
This commit is contained in:
+34
-13
@@ -2935,6 +2935,20 @@ function normalizeCloudflareTempEmailReceiveMailbox(value = '') {
|
|||||||
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(normalized) ? normalized : '';
|
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(normalized) ? normalized : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function resolveCloudflareTempEmailEffectiveLookupMode(state = {}, lookupMode = '', originalRecipient = '') {
|
||||||
|
const mailProvider = String(state?.mailProvider || '').trim().toLowerCase();
|
||||||
|
const emailGenerator = String(state?.emailGenerator || '').trim().toLowerCase();
|
||||||
|
const normalizedLookupMode = normalizeCloudflareTempEmailLookupMode(lookupMode);
|
||||||
|
const normalizedOriginalRecipient = normalizeCloudflareTempEmailReceiveMailbox(originalRecipient);
|
||||||
|
const canUseRegistrationLookup = mailProvider === CLOUDFLARE_TEMP_EMAIL_PROVIDER
|
||||||
|
&& emailGenerator !== CLOUDFLARE_TEMP_EMAIL_GENERATOR
|
||||||
|
&& normalizedLookupMode === CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL
|
||||||
|
&& Boolean(normalizedOriginalRecipient);
|
||||||
|
return canUseRegistrationLookup
|
||||||
|
? CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL
|
||||||
|
: CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_RECEIVE_MAILBOX;
|
||||||
|
}
|
||||||
|
|
||||||
function resolveCloudflareTempEmailPollTargetEmail(state = {}, pollPayload = {}, config = getCloudflareTempEmailConfig(state)) {
|
function resolveCloudflareTempEmailPollTargetEmail(state = {}, pollPayload = {}, config = getCloudflareTempEmailConfig(state)) {
|
||||||
const configuredReceiveMailbox = normalizeCloudflareTempEmailReceiveMailbox(config.receiveMailbox);
|
const configuredReceiveMailbox = normalizeCloudflareTempEmailReceiveMailbox(config.receiveMailbox);
|
||||||
const mailProvider = String(state?.mailProvider || '').trim().toLowerCase();
|
const mailProvider = String(state?.mailProvider || '').trim().toLowerCase();
|
||||||
@@ -2942,11 +2956,14 @@ function resolveCloudflareTempEmailPollTargetEmail(state = {}, pollPayload = {},
|
|||||||
const shouldPreferConfiguredReceiveMailbox = mailProvider === 'cloudflare-temp-email'
|
const shouldPreferConfiguredReceiveMailbox = mailProvider === 'cloudflare-temp-email'
|
||||||
&& emailGenerator !== 'cloudflare-temp-email';
|
&& emailGenerator !== 'cloudflare-temp-email';
|
||||||
const requestedTarget = normalizeCloudflareTempEmailReceiveMailbox(pollPayload.targetEmail);
|
const requestedTarget = normalizeCloudflareTempEmailReceiveMailbox(pollPayload.targetEmail);
|
||||||
if (
|
const registrationEmail = normalizeCloudflareTempEmailReceiveMailbox(state.email);
|
||||||
shouldPreferConfiguredReceiveMailbox
|
const effectiveLookupMode = resolveCloudflareTempEmailEffectiveLookupMode(
|
||||||
&& normalizeCloudflareTempEmailLookupMode(config.lookupMode) === CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL
|
state,
|
||||||
) {
|
config.lookupMode,
|
||||||
return requestedTarget || normalizeCloudflareTempEmailReceiveMailbox(state.email);
|
requestedTarget || registrationEmail
|
||||||
|
);
|
||||||
|
if (effectiveLookupMode === CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL) {
|
||||||
|
return requestedTarget || registrationEmail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shouldPreferConfiguredReceiveMailbox && configuredReceiveMailbox) {
|
if (shouldPreferConfiguredReceiveMailbox && configuredReceiveMailbox) {
|
||||||
@@ -2957,7 +2974,7 @@ function resolveCloudflareTempEmailPollTargetEmail(state = {}, pollPayload = {},
|
|||||||
return requestedTarget;
|
return requestedTarget;
|
||||||
}
|
}
|
||||||
|
|
||||||
return normalizeCloudflareTempEmailReceiveMailbox(state.email);
|
return registrationEmail;
|
||||||
}
|
}
|
||||||
|
|
||||||
const cloudMailProvider = self.MultiPageBackgroundCloudMailProvider.createCloudMailProvider({
|
const cloudMailProvider = self.MultiPageBackgroundCloudMailProvider.createCloudMailProvider({
|
||||||
@@ -6885,8 +6902,12 @@ async function deleteCloudflareTempEmailMail(config, mailId) {
|
|||||||
async function listCloudflareTempEmailMessages(state, options = {}) {
|
async function listCloudflareTempEmailMessages(state, options = {}) {
|
||||||
const config = ensureCloudflareTempEmailConfig(state, { requireAdminAuth: true });
|
const config = ensureCloudflareTempEmailConfig(state, { requireAdminAuth: true });
|
||||||
const address = normalizeCloudflareTempEmailAddress(options.address);
|
const address = normalizeCloudflareTempEmailAddress(options.address);
|
||||||
const lookupMode = normalizeCloudflareTempEmailLookupMode(options.lookupMode || config.lookupMode);
|
|
||||||
const originalRecipient = normalizeCloudflareTempEmailReceiveMailbox(options.originalRecipient);
|
const originalRecipient = normalizeCloudflareTempEmailReceiveMailbox(options.originalRecipient);
|
||||||
|
const lookupMode = resolveCloudflareTempEmailEffectiveLookupMode(
|
||||||
|
state,
|
||||||
|
options.lookupMode || config.lookupMode,
|
||||||
|
originalRecipient
|
||||||
|
);
|
||||||
const useRegistrationLookup = lookupMode === CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL
|
const useRegistrationLookup = lookupMode === CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL
|
||||||
&& Boolean(originalRecipient);
|
&& Boolean(originalRecipient);
|
||||||
const queryAddress = useRegistrationLookup ? '' : address;
|
const queryAddress = useRegistrationLookup ? '' : address;
|
||||||
@@ -6922,15 +6943,15 @@ async function pollCloudflareTempEmailVerificationCode(step, state, pollPayload
|
|||||||
const config = ensureCloudflareTempEmailConfig(state, { requireAdminAuth: true });
|
const config = ensureCloudflareTempEmailConfig(state, { requireAdminAuth: true });
|
||||||
const targetEmail = resolveCloudflareTempEmailPollTargetEmail(state, pollPayload, config);
|
const targetEmail = resolveCloudflareTempEmailPollTargetEmail(state, pollPayload, config);
|
||||||
const registrationEmail = normalizeCloudflareTempEmailReceiveMailbox(state.email);
|
const registrationEmail = normalizeCloudflareTempEmailReceiveMailbox(state.email);
|
||||||
const lookupMode = normalizeCloudflareTempEmailLookupMode(config.lookupMode);
|
|
||||||
const mailProvider = String(state?.mailProvider || '').trim().toLowerCase();
|
|
||||||
const emailGenerator = String(state?.emailGenerator || '').trim().toLowerCase();
|
|
||||||
const useRegistrationLookup = mailProvider === 'cloudflare-temp-email'
|
|
||||||
&& emailGenerator !== 'cloudflare-temp-email'
|
|
||||||
&& lookupMode === CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL;
|
|
||||||
const originalRecipient = normalizeCloudflareTempEmailReceiveMailbox(pollPayload.targetEmail)
|
const originalRecipient = normalizeCloudflareTempEmailReceiveMailbox(pollPayload.targetEmail)
|
||||||
|| registrationEmail
|
|| registrationEmail
|
||||||
|| targetEmail;
|
|| targetEmail;
|
||||||
|
const lookupMode = resolveCloudflareTempEmailEffectiveLookupMode(
|
||||||
|
state,
|
||||||
|
config.lookupMode,
|
||||||
|
originalRecipient
|
||||||
|
);
|
||||||
|
const useRegistrationLookup = lookupMode === CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL;
|
||||||
if (!targetEmail) {
|
if (!targetEmail) {
|
||||||
throw new Error('Cloudflare Temp Email 轮询前缺少目标邮箱地址,请先填写注册邮箱或“邮件接收”邮箱。');
|
throw new Error('Cloudflare Temp Email 轮询前缺少目标邮箱地址,请先填写注册邮箱或“邮件接收”邮箱。');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ function createProviderApi(options = {}) {
|
|||||||
extractFunction('throwIfStopped'),
|
extractFunction('throwIfStopped'),
|
||||||
extractFunction('normalizeCloudflareTempEmailLookupMode'),
|
extractFunction('normalizeCloudflareTempEmailLookupMode'),
|
||||||
extractFunction('normalizeCloudflareTempEmailReceiveMailbox'),
|
extractFunction('normalizeCloudflareTempEmailReceiveMailbox'),
|
||||||
|
extractFunction('resolveCloudflareTempEmailEffectiveLookupMode'),
|
||||||
extractFunction('resolveCloudflareTempEmailPollTargetEmail'),
|
extractFunction('resolveCloudflareTempEmailPollTargetEmail'),
|
||||||
extractFunction('summarizeCloudflareTempEmailMessagesForLog'),
|
extractFunction('summarizeCloudflareTempEmailMessagesForLog'),
|
||||||
extractFunction('pollCloudflareTempEmailVerificationCode'),
|
extractFunction('pollCloudflareTempEmailVerificationCode'),
|
||||||
@@ -82,6 +83,8 @@ const CLOUDFLARE_TEMP_EMAIL_DEFAULT_PAGE_SIZE = 20;
|
|||||||
const CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_RECEIVE_MAILBOX = 'receive-mailbox';
|
const CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_RECEIVE_MAILBOX = 'receive-mailbox';
|
||||||
const CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL = 'registration-email';
|
const CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_REGISTRATION_EMAIL = 'registration-email';
|
||||||
const DEFAULT_CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE = CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_RECEIVE_MAILBOX;
|
const DEFAULT_CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE = CLOUDFLARE_TEMP_EMAIL_LOOKUP_MODE_RECEIVE_MAILBOX;
|
||||||
|
const CLOUDFLARE_TEMP_EMAIL_PROVIDER = 'cloudflare-temp-email';
|
||||||
|
const CLOUDFLARE_TEMP_EMAIL_GENERATOR = 'cloudflare-temp-email';
|
||||||
const logs = [];
|
const logs = [];
|
||||||
const listCalls = [];
|
const listCalls = [];
|
||||||
const messages = options.messages;
|
const messages = options.messages;
|
||||||
@@ -233,6 +236,41 @@ test('pollCloudflareTempEmailVerificationCode ignores stale receive mailbox when
|
|||||||
assert.deepEqual(api.snapshot().listCalls.map((call) => call.address), ['generated@email.20021108.xyz']);
|
assert.deepEqual(api.snapshot().listCalls.map((call) => call.address), ['generated@email.20021108.xyz']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('pollCloudflareTempEmailVerificationCode ignores stale registration lookup mode for generated CFTE mailboxes', async () => {
|
||||||
|
const api = createProviderApi({
|
||||||
|
receiveMailbox: 'forward-box@email.20021108.xyz',
|
||||||
|
lookupMode: 'registration-email',
|
||||||
|
messages: [{
|
||||||
|
id: 'mail-4',
|
||||||
|
address: 'generated@email.20021108.xyz',
|
||||||
|
originalRecipient: '',
|
||||||
|
receivedDateTime: '2026-04-13T11:30:00.000Z',
|
||||||
|
subject: 'Signup verification code',
|
||||||
|
from: { emailAddress: { address: 'noreply@tm.openai.com' } },
|
||||||
|
bodyPreview: 'Your verification code is 975310.',
|
||||||
|
}],
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await api.pollCloudflareTempEmailVerificationCode(4, {
|
||||||
|
email: 'generated@email.20021108.xyz',
|
||||||
|
mailProvider: 'cloudflare-temp-email',
|
||||||
|
emailGenerator: 'cloudflare-temp-email',
|
||||||
|
cloudflareTempEmailLookupMode: 'registration-email',
|
||||||
|
cloudflareTempEmailReceiveMailbox: 'forward-box@email.20021108.xyz',
|
||||||
|
}, {
|
||||||
|
targetEmail: 'generated@email.20021108.xyz',
|
||||||
|
maxAttempts: 1,
|
||||||
|
intervalMs: 1,
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(result.code, '975310');
|
||||||
|
assert.deepEqual(api.snapshot().listCalls, [{
|
||||||
|
address: 'generated@email.20021108.xyz',
|
||||||
|
lookupMode: 'receive-mailbox',
|
||||||
|
originalRecipient: 'generated@email.20021108.xyz',
|
||||||
|
}]);
|
||||||
|
});
|
||||||
|
|
||||||
test('pollCloudflareTempEmailVerificationCode filters by original recipient in registration lookup mode', async () => {
|
test('pollCloudflareTempEmailVerificationCode filters by original recipient in registration lookup mode', async () => {
|
||||||
const api = createProviderApi({
|
const api = createProviderApi({
|
||||||
receiveMailbox: 'forward-box@email.20021108.xyz',
|
receiveMailbox: 'forward-box@email.20021108.xyz',
|
||||||
|
|||||||
Reference in New Issue
Block a user