You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
chajia/scripts/probe-ms-logged-in-salem-sa...

117 lines
3.7 KiB

/**
* 本地复现:截图同款地址 + 可选预约附加服务
* npx tsx scripts/probe-ms-logged-in-salem-sancarlos.ts
* PROBE_APPOINTMENT=1 npx tsx scripts/probe-ms-logged-in-salem-sancarlos.ts
*/
import { loadDevEnv } from "@/lib/dev-env";
loadDevEnv();
process.env.RPA_HEADED = process.env.DIAG_HEADED === "true" ? "true" : "false";
process.env.RPA_HEADLESS = process.env.DIAG_HEADED === "true" ? "false" : "true";
import fs from "node:fs";
import { runWithMothershipLoginContext } from "@/lib/rpa/mothership-login-context";
import type { QuoteRequest } from "@/modules/providers/quote-provider";
import { runMothershipLoggedInDashboardQuote } from "@/workers/rpa/mothership-logged-in-quote";
import { RpaError } from "@/modules/rpa/errors";
function nextWeekdayIso(daysAhead = 2): string {
const d = new Date();
d.setDate(d.getDate() + daysAhead);
while (d.getDay() === 0 || d.getDay() === 6) {
d.setDate(d.getDate() + 1);
}
const yyyy = d.getFullYear();
const mm = String(d.getMonth() + 1).padStart(2, "0");
const dd = String(d.getDate()).padStart(2, "0");
return `${yyyy}-${mm}-${dd}`;
}
async function main(): Promise<void> {
let email = process.env.MOTHERSHIP_EMAIL?.trim() ?? "";
let password = process.env.MOTHERSHIP_PASSWORD?.trim() ?? "";
const hasStorage = fs.existsSync(".rpa/mothership-logged-in-storage.json");
if ((!email || !password) && hasStorage) {
email = email || "storage-session@local";
password = password || "storage-session";
console.log("[probe] 使用 logged-in storage 会话");
}
if (!email || !password) {
console.error("[probe] 缺账密且无 storage");
process.exit(1);
}
const withAppointment = process.env.PROBE_APPOINTMENT === "1";
const readyDate = nextWeekdayIso(2);
const req: QuoteRequest = {
cargoHash: `probe-salem-sc-${Date.now()}`,
pickup: {
street: "888 Liberty Street Northeast",
city: "Salem",
state: "OR",
zip: "97301",
placeId: "probe-salem",
formattedAddress: "888 Liberty Street Northeast unit d 3, Salem, OR, USA",
selectedFromSuggestions: true,
mothershipOptionId: "probe-salem",
mothershipDisplayLabel: "888 Liberty Street Northeast unit d 3, Salem, OR, USA",
selectedFromMothership: true,
},
delivery: {
street: "789 Elm Street",
city: "San Carlos",
state: "CA",
zip: "94070",
placeId: "probe-sancarlos",
formattedAddress: "789 Elm Street suite 301, San Carlos, CA, USA",
selectedFromSuggestions: true,
mothershipOptionId: "probe-sancarlos",
mothershipDisplayLabel: "789 Elm Street suite 301, San Carlos, CA, USA",
selectedFromMothership: true,
},
weightLb: 500,
dimsIn: { l: 48, w: 40, h: 48 },
palletCount: 1,
cargoType: "general_freight",
readyDate,
readyTime: "11:00 AM",
deliveryAccessorials: withAppointment ? ["appointment"] : [],
cargoLines: [
{
cargoType: "pallet",
quantity: 1,
weightLb: 500,
lengthIn: 48,
widthIn: 40,
heightIn: 48,
},
],
};
console.log(
`=== Salem OR → San Carlos CA appointment=${withAppointment} ready=${readyDate} ===`,
);
try {
const items = await runWithMothershipLoginContext(
{ email, password },
"env",
() => runMothershipLoggedInDashboardQuote(req),
);
console.log(
`[probe] OK n=${items.length} ${items.map((i) => `${i.carrier}=$${i.rawTotal}`).join(" | ")}`,
);
} catch (e) {
if (e instanceof RpaError) {
console.error(`[probe] FAIL code=${e.code} msg=${e.message}`);
} else {
console.error("[probe] FAIL", e instanceof Error ? e.message : e);
}
process.exit(1);
}
}
main();