111 lines
3.7 KiB
JavaScript
111 lines
3.7 KiB
JavaScript
// background/ip-proxy-provider-711proxy.js — 711Proxy 参数与账号规则
|
|
(function register711ProxyProvider(root) {
|
|
function normalizeCountryCode(value = '') {
|
|
const raw = String(value || '').trim().toUpperCase().replace(/[^A-Z]/g, '');
|
|
return /^[A-Z]{2}$/.test(raw) ? raw : '';
|
|
}
|
|
|
|
function normalize711SessionId(value = '') {
|
|
return String(value || '').trim().replace(/[^A-Za-z0-9_-]/g, '').slice(0, 64);
|
|
}
|
|
|
|
function normalize711SessionMinutes(value = '') {
|
|
const raw = String(value ?? '').trim();
|
|
if (!raw) return '';
|
|
const numeric = Number.parseInt(raw, 10);
|
|
if (!Number.isInteger(numeric)) return '';
|
|
return String(Math.max(1, Math.min(180, numeric)));
|
|
}
|
|
|
|
function apply711SessionToUsername(username = '', options = {}) {
|
|
const text = String(username || '').trim();
|
|
if (!text) {
|
|
return text;
|
|
}
|
|
|
|
const sessionId = normalize711SessionId(options?.sessionId || '');
|
|
const sessTime = normalize711SessionMinutes(options?.sessTime || '');
|
|
let next = text;
|
|
|
|
if (sessionId) {
|
|
if (/(?:^|[-_])session[-_:][A-Za-z0-9_-]+?(?=(?:[-_](?:sessTime|sessAuto|region|life|zone|ptype|country|area)\b)|$)/i.test(next)) {
|
|
next = next.replace(
|
|
/((?:^|[-_])session[-_:])([A-Za-z0-9_-]+?)(?=(?:[-_](?:sessTime|sessAuto|region|life|zone|ptype|country|area)\b)|$)/i,
|
|
`$1${sessionId}`
|
|
);
|
|
} else {
|
|
next = `${next}-session-${sessionId}`;
|
|
}
|
|
}
|
|
|
|
if (sessTime) {
|
|
if (/(?:^|[-_])sessTime[-_:]?\d+\b/i.test(next)) {
|
|
next = next.replace(/((?:^|[-_])sessTime[-_:]?)(\d+)\b/i, `$1${sessTime}`);
|
|
} else {
|
|
next = `${next}-sessTime-${sessTime}`;
|
|
}
|
|
}
|
|
|
|
return next;
|
|
}
|
|
|
|
function apply711RegionToUsername(username = '', regionCode = '') {
|
|
const text = String(username || '').trim();
|
|
const normalizedRegion = normalizeCountryCode(regionCode);
|
|
if (!text || !normalizedRegion) {
|
|
return text;
|
|
}
|
|
if (/(?:^|[-_])region[-_:]?[A-Za-z]{2}\b/i.test(text)) {
|
|
return text.replace(/((?:^|[-_])region[-_:]?)([A-Za-z]{2})\b/i, `$1${normalizedRegion}`);
|
|
}
|
|
return `${text}-region-${normalizedRegion}`;
|
|
}
|
|
|
|
function transform711ProxyAccountEntry(entry = {}, context = {}) {
|
|
const state = context?.state || {};
|
|
const hasAccountList = Boolean(context?.hasAccountList);
|
|
const nextEntry = { ...entry };
|
|
const username = String(nextEntry.username || '').trim();
|
|
if (!username) {
|
|
return nextEntry;
|
|
}
|
|
|
|
const configuredRegion = normalizeCountryCode(state?.ipProxyRegion || '');
|
|
if (!hasAccountList && configuredRegion) {
|
|
nextEntry.username = apply711RegionToUsername(username, configuredRegion);
|
|
if (!String(nextEntry.region || '').trim()) {
|
|
nextEntry.region = configuredRegion;
|
|
}
|
|
}
|
|
|
|
// 账号列表模式按每行原样生效,不叠加固定账号区的 session/sessTime。
|
|
if (hasAccountList) {
|
|
return nextEntry;
|
|
}
|
|
|
|
const sessionId = normalize711SessionId(state?.ipProxyAccountSessionPrefix || '');
|
|
const sessTime = normalize711SessionMinutes(state?.ipProxyAccountLifeMinutes || '');
|
|
if (!sessionId && !sessTime) {
|
|
return nextEntry;
|
|
}
|
|
|
|
nextEntry.username = apply711SessionToUsername(nextEntry.username, {
|
|
sessionId,
|
|
sessTime,
|
|
});
|
|
return nextEntry;
|
|
}
|
|
|
|
root.transformIpProxyAccountEntryByProvider = function transformIpProxyAccountEntryByProvider(
|
|
provider = '',
|
|
entry = {},
|
|
context = {}
|
|
) {
|
|
const normalizedProvider = String(provider || '').trim().toLowerCase();
|
|
if (normalizedProvider === '711proxy') {
|
|
return transform711ProxyAccountEntry(entry, context);
|
|
}
|
|
return entry;
|
|
};
|
|
})(typeof self !== 'undefined' ? self : globalThis);
|