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-mothership-open-ship.ts

104 lines
3.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/**
* 本地探:登录态能否打开 /ship 一级表单(用 .env 账密,不依赖 DB
* npx tsx scripts/probe-mothership-open-ship.ts
* DIAG_HEADED=true npx tsx scripts/probe-mothership-open-ship.ts
*/
import { loadDevEnv } from "@/lib/dev-env";
loadDevEnv();
const wantHeaded = process.env.DIAG_HEADED === "true";
process.env.RPA_HEADED = wantHeaded ? "true" : "false";
process.env.RPA_HEADLESS = wantHeaded ? "false" : "true";
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";
function readyDatePlusDays(daysAhead: number): string {
const d = new Date();
d.setDate(d.getDate() + daysAhead);
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> {
// 本地 .env 账密常为空;有 mothership-logged-in-storage 时用 ALS 占位即可走登录态 storage
let email = process.env.MOTHERSHIP_EMAIL?.trim() ?? "";
let password = process.env.MOTHERSHIP_PASSWORD?.trim() ?? "";
const hasStorage = require("node:fs").existsSync(
".rpa/mothership-logged-in-storage.json",
);
if ((!email || !password) && hasStorage) {
email = email || "storage-session@local";
password = password || "storage-session";
console.log("[probe] .env 账密为空,改用已有 logged-in storage 会话");
}
if (!email || !password) {
console.error("[probe] 缺 MOTHERSHIP_EMAIL / MOTHERSHIP_PASSWORD且无 logged-in storage");
process.exit(1);
}
const readyDate = readyDatePlusDays(3);
const req: QuoteRequest = {
cargoHash: `probe-open-ship-${Date.now()}`,
pickup: {
street: "456 Oak Ave",
city: "Fairhope",
state: "AL",
zip: "36532",
placeId: "probe-pickup",
formattedAddress: "456 Oak Ave, Fairhope, AL 36532",
selectedFromSuggestions: true,
mothershipOptionId: "probe-pickup",
mothershipDisplayLabel: "456 Oak Ave, Fairhope, AL",
selectedFromMothership: true,
},
delivery: {
street: "555 Market St",
city: "San Francisco",
state: "CA",
zip: "94105",
placeId: "probe-delivery",
formattedAddress: "555 Market St, San Francisco, CA 94105",
selectedFromSuggestions: true,
mothershipOptionId: "probe-delivery",
mothershipDisplayLabel: "555 Market St, San Francisco, CA",
selectedFromMothership: true,
},
weightLb: 250,
dimsIn: { l: 48, w: 40, h: 48 },
palletCount: 2,
cargoType: "general_freight",
readyDate,
readyTime: "12:00 PM",
cargoLines: [
{
cargoType: "general_freight",
quantity: 2,
weightLb: 250,
lengthIn: 48,
widthIn: 40,
heightIn: 48,
},
],
};
console.log("=== probe open /ship (env login) ===");
console.log(`email=${email.slice(0, 2)}*** headed=${wantHeaded} ready=${readyDate}`);
const items = await runWithMothershipLoginContext({ email, password }, "env", () =>
runMothershipLoggedInDashboardQuote(req),
);
console.log(
`[probe] OK carriers=${items.map((i) => `${i.carrier}=$${i.rawTotal}`).join(", ")}`,
);
}
main().catch((e) => {
console.error("[probe] FAIL", e instanceof Error ? e.message : e);
process.exit(1);
});