fix cloudflare temp email aws code parsing

This commit is contained in:
QLHazyCoder
2026-05-22 09:58:05 +08:00
parent 6db6725c0c
commit acf29dbd87
4 changed files with 296 additions and 20 deletions
+70
View File
@@ -9,6 +9,9 @@ const {
normalizeCloudflareTempEmailDomains,
normalizeCloudflareTempEmailMailApiMessages,
} = require('../cloudflare-temp-email-utils.js');
const {
pickVerificationMessageWithTimeFallback,
} = require('../hotmail-utils.js');
test('normalizeCloudflareTempEmailBaseUrl normalizes host and preserves path', () => {
assert.equal(
@@ -103,6 +106,73 @@ test('normalizeCloudflareTempEmailMailApiMessages decodes multipart quoted print
assert.equal(messages[0].subject, 'Login code');
});
test('normalizeCloudflareTempEmailMailApiMessages supports nested CFTE rows with structured AWS html mail', () => {
const messages = normalizeCloudflareTempEmailMailApiMessages({
data: {
results: [
{
_id: 'aws-mail-1',
to: [{ address: 'tmpjjwk205m0h@edu.email.qlhazycoder.tech' }],
from: {
emailAddress: {
address: 'no-reply@signin.aws',
},
},
title: '验证您的 AWS 构建者 ID 电子邮件地址',
body_html: [
'<html><body>',
'<p>验证码</p>',
'<p style="background-color:#F3F3F3">248680</p>',
'</body></html>',
].join(''),
createdAt: '2026-05-22T09:41:00.000Z',
},
],
},
});
assert.equal(messages.length, 1);
assert.equal(messages[0].id, 'aws-mail-1');
assert.equal(messages[0].address, 'tmpjjwk205m0h@edu.email.qlhazycoder.tech');
assert.equal(messages[0].from.emailAddress.address, 'no-reply@signin.aws');
assert.equal(messages[0].subject, '验证您的 AWS 构建者 ID 电子邮件地址');
assert.match(messages[0].bodyPreview, /248680/);
assert.doesNotMatch(messages[0].bodyPreview, /<p/);
});
test('normalized CFTE AWS Builder ID mail matches Kiro verification rules', () => {
const messages = normalizeCloudflareTempEmailMailApiMessages({
data: {
results: [
{
id: 'aws-mail-2',
to: { address: 'tmpjjwk205m0h@edu.email.qlhazycoder.tech' },
from: { address: 'no-reply@signin.aws' },
subject: '验证您的 AWS 构建者 ID 电子邮件地址',
html: '<div>验证码</div><div>248680</div>',
receivedAt: '2026-05-22T09:41:00.000Z',
},
],
},
});
const result = pickVerificationMessageWithTimeFallback(messages, {
afterTimestamp: Date.UTC(2026, 4, 22, 9, 40, 0),
senderFilters: ['no-reply@signin.aws', 'aws'],
subjectFilters: ['aws builder id', 'verification', '验证码', 'code', 'aws'],
requiredKeywords: ['verification', '验证码', 'code', 'aws'],
codePatterns: [
{ source: '(?:verification\\s*code|验证码|Your code is|code is)[:\\s]*(\\d{6})', flags: 'gi' },
{ source: '^\\s*(\\d{6})\\s*$', flags: 'gm' },
{ source: '>\\s*(\\d{6})\\s*<', flags: 'g' },
],
excludeCodes: [],
});
assert.equal(result.match?.message.id, 'aws-mail-2');
assert.equal(result.match?.code, '248680');
});
test('getCloudflareTempEmailAddressFromResponse supports direct and nested response shapes', () => {
assert.equal(getCloudflareTempEmailAddressFromResponse({ address: 'one@example.com' }), 'one@example.com');
assert.equal(getCloudflareTempEmailAddressFromResponse({ data: { address: 'two@example.com' } }), 'two@example.com');