更新 Scripts/authorization&cartId.js
This commit is contained in:
@@ -1,86 +1,44 @@
|
|||||||
/**
|
/**
|
||||||
* Surge 脚本:捕获 cart 请求的 Authorization 和 cartId
|
* Surge 脚本:捕获特定 URL 请求的 Authorization 和 cartId(仅限 PUT 请求)
|
||||||
*
|
* 并存储到持久化存储($persistentStore),只有在成功捕获到新值时才更新
|
||||||
* 功能:
|
|
||||||
* - 保持原有:始终在 $persistentStore 中维护最新的 authorization 和 cartId
|
|
||||||
* - 把每次捕获追加到 cart_records 数组(cartId 去重)
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const patterns = [
|
const pattern = /^https:\/\/cart\.production\.store-web\.dynamics\.com\/v1\.0\/Cart\/eligibilityCheck\?/;
|
||||||
/^https:\/\/cart\.production\.store-web\.dynamics\.com\/v1\.0\/cart\/eligibilityCheck\?/i,
|
const url = $request.url;
|
||||||
/^https:\/\/cart\.production\.store-web\.dynamics\.com\/cart\/v1\.0\/cart\/eligibilityCheck\?/i,
|
|
||||||
/^https:\/\/cart\.production\.store-web\.dynamics\.com\/.*eligibilityCheck\?/i
|
|
||||||
];
|
|
||||||
|
|
||||||
const url = $request.url || "";
|
// 仅处理 PUT 请求
|
||||||
const matched = patterns.some(p => p.test(url));
|
if ($request.method === "PUT" && pattern.test(url)) {
|
||||||
|
|
||||||
const MAX_RECORDS = 10; // cart 记录保留最近 10 条
|
|
||||||
|
|
||||||
// 兼容不同平台 Header 大小写差异
|
|
||||||
function getHeader(name) {
|
|
||||||
const headers = $request.headers || {};
|
|
||||||
const target = name.toLowerCase();
|
|
||||||
|
|
||||||
for (const key in headers) {
|
|
||||||
if (key.toLowerCase() === target) {
|
|
||||||
return headers[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($request.method || "").toUpperCase() === "PUT" && matched) {
|
|
||||||
try {
|
try {
|
||||||
const authorization = getHeader('authorization');
|
// 获取 Authorization 请求头的值
|
||||||
|
const authorization = $request.headers['authorization'];
|
||||||
|
// 解析 URL 以提取 cartId 参数
|
||||||
const urlObj = new URL(url);
|
const urlObj = new URL(url);
|
||||||
const cartId = urlObj.searchParams.get('cartId');
|
const cartId = urlObj.searchParams.get('cartId');
|
||||||
const now = Date.now();
|
|
||||||
|
|
||||||
|
// 只有在成功捕获到新值时,才更新 $persistentStore 中的值
|
||||||
if (authorization && authorization !== $persistentStore.read("authorization")) {
|
if (authorization && authorization !== $persistentStore.read("authorization")) {
|
||||||
$persistentStore.write(authorization, "authorization");
|
$persistentStore.write(authorization, "authorization");
|
||||||
console.log(`Stored authorization: ${authorization}`);
|
console.log(`Stored authorization: ${authorization}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cartId && cartId !== $persistentStore.read("cartId")) {
|
if (cartId && cartId !== $persistentStore.read("cartId")) {
|
||||||
$persistentStore.write(cartId, "cartId");
|
$persistentStore.write(cartId, "cartId");
|
||||||
console.log(`Stored cartId: ${cartId}`);
|
console.log(`Stored cartId: ${cartId}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cartId && authorization) {
|
// 发送通知,成功捕获并存储 Authorization 和 CartId
|
||||||
appendCartRecord({ cartId, authorization, ts: now });
|
|
||||||
}
|
|
||||||
|
|
||||||
// 保留原始的这条通知
|
|
||||||
$notification.post(
|
$notification.post(
|
||||||
"Surge 信息存储",
|
"Surge 信息存储",
|
||||||
"已捕获并存储 authorization 和 cartId"
|
"已捕获并存储 authorization 和 cartId"
|
||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(`Error capturing authorization & cartId: ${error}`);
|
console.log(`Error capturing authorization & cartId: ${error}`);
|
||||||
|
$notification.post(
|
||||||
|
"Surge 脚本错误",
|
||||||
|
"无法捕获 authorization 和 cartId",
|
||||||
|
`${error}`
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function appendCartRecord(entry) {
|
|
||||||
let records = [];
|
|
||||||
const raw = $persistentStore.read("cart_records");
|
|
||||||
if (raw) {
|
|
||||||
try {
|
|
||||||
const parsed = JSON.parse(raw);
|
|
||||||
if (Array.isArray(parsed)) records = parsed;
|
|
||||||
} catch (e) { records = []; }
|
|
||||||
}
|
|
||||||
|
|
||||||
if (records.some(r => r.cartId === entry.cartId)) {
|
|
||||||
console.log(`[cart] SKIP: cartId=${entry.cartId} 已存在`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
records.push(entry);
|
|
||||||
if (records.length > MAX_RECORDS) records = records.slice(-MAX_RECORDS);
|
|
||||||
$persistentStore.write(JSON.stringify(records), "cart_records");
|
|
||||||
|
|
||||||
console.log(`[cart] ✅ 已记录 cartId=${entry.cartId}, total=${records.length}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
$done({});
|
$done({});
|
||||||
Reference in New Issue
Block a user