mirror of
https://github.com/halfwaystudent/douyin-sparkflow.git
synced 2026-09-05 23:49:50 +08:00
100 lines
2.8 KiB
JavaScript
100 lines
2.8 KiB
JavaScript
(function attachEmailProviderHelpers(globalScope) {
|
|
const DEFAULT_CLOUDFLARE_TEMP_EMAIL_ADMIN_URL = 'https://mail.cloudflare.com/admin';
|
|
const EMAIL_PROVIDER_DUCK = 'duckduckgo';
|
|
const EMAIL_PROVIDER_RELAY_FIREFOX = 'relay_firefox';
|
|
const EMAIL_PROVIDER_CLOUDFLARE_TEMP_EMAIL = 'cloudflare_temp_email';
|
|
|
|
function normalizeEmailProvider(value) {
|
|
if (value === EMAIL_PROVIDER_RELAY_FIREFOX) {
|
|
return EMAIL_PROVIDER_RELAY_FIREFOX;
|
|
}
|
|
if (value === EMAIL_PROVIDER_CLOUDFLARE_TEMP_EMAIL) {
|
|
return EMAIL_PROVIDER_CLOUDFLARE_TEMP_EMAIL;
|
|
}
|
|
return EMAIL_PROVIDER_DUCK;
|
|
}
|
|
|
|
function isRelayFirefoxProvider(value) {
|
|
return normalizeEmailProvider(value) === EMAIL_PROVIDER_RELAY_FIREFOX;
|
|
}
|
|
|
|
function isCloudflareTempEmailProvider(value) {
|
|
return normalizeEmailProvider(value) === EMAIL_PROVIDER_CLOUDFLARE_TEMP_EMAIL;
|
|
}
|
|
|
|
function getEmailProviderDisplayName(value) {
|
|
if (isRelayFirefoxProvider(value)) {
|
|
return 'Firefox Relay';
|
|
}
|
|
if (isCloudflareTempEmailProvider(value)) {
|
|
return 'Cloudflare Temp Email';
|
|
}
|
|
return 'DuckDuckGo';
|
|
}
|
|
|
|
function shouldUseEmailSourceForVerification(value) {
|
|
return isCloudflareTempEmailProvider(value);
|
|
}
|
|
|
|
function shouldSkipStep9Cleanup(value) {
|
|
return !isRelayFirefoxProvider(value);
|
|
}
|
|
|
|
function normalizeCloudflareTempEmailAdminUrl(value) {
|
|
const raw = String(value || '').trim();
|
|
if (!raw) {
|
|
return DEFAULT_CLOUDFLARE_TEMP_EMAIL_ADMIN_URL;
|
|
}
|
|
|
|
const candidate = /^[a-z][a-z0-9+.-]*:\/\//i.test(raw) ? raw : `https://${raw}`;
|
|
|
|
try {
|
|
const parsed = new URL(candidate);
|
|
parsed.pathname = parsed.pathname.replace(/\/+$/, '') || '/';
|
|
return parsed.toString();
|
|
} catch {
|
|
return DEFAULT_CLOUDFLARE_TEMP_EMAIL_ADMIN_URL;
|
|
}
|
|
}
|
|
|
|
function getNextRelayMaskLabel(labels = []) {
|
|
const used = new Set();
|
|
|
|
for (const rawLabel of labels) {
|
|
const match = String(rawLabel || '').trim().match(/^t(\d+)$/i);
|
|
if (!match) continue;
|
|
const nextValue = Number(match[1]);
|
|
if (Number.isInteger(nextValue) && nextValue > 0) {
|
|
used.add(nextValue);
|
|
}
|
|
}
|
|
|
|
let candidate = 1;
|
|
while (used.has(candidate)) {
|
|
candidate += 1;
|
|
}
|
|
return `t${candidate}`;
|
|
}
|
|
|
|
const api = {
|
|
DEFAULT_CLOUDFLARE_TEMP_EMAIL_ADMIN_URL,
|
|
EMAIL_PROVIDER_CLOUDFLARE_TEMP_EMAIL,
|
|
EMAIL_PROVIDER_DUCK,
|
|
EMAIL_PROVIDER_RELAY_FIREFOX,
|
|
getEmailProviderDisplayName,
|
|
getNextRelayMaskLabel,
|
|
isCloudflareTempEmailProvider,
|
|
isRelayFirefoxProvider,
|
|
normalizeCloudflareTempEmailAdminUrl,
|
|
normalizeEmailProvider,
|
|
shouldUseEmailSourceForVerification,
|
|
shouldSkipStep9Cleanup,
|
|
};
|
|
|
|
globalScope.MultiPageEmailProvider = api;
|
|
|
|
if (typeof module !== 'undefined' && module.exports) {
|
|
module.exports = api;
|
|
}
|
|
})(typeof globalThis !== 'undefined' ? globalThis : this);
|