Files
relay-returns/dist/returns.mjs
T

31 lines
1.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import {run} from "./engine.mjs";
const reasons = new Set(["damaged","wrong-item","changed-mind","other"]);
export function submitReturn({order,reason}, storage) {
const id = String(order ?? "").trim().toUpperCase();
if (!/^RX-\d{3}$/.test(id)) return {status:"invalid",message:"Enter an order number in the format RX-104."};
if (!reasons.has(reason)) return {status:"invalid",message:"Choose a reason for the return."};
const decision = run(id);
if (decision.status !== "review") {
return {
status: decision.status,
message: decision.status === "retry"
? "We couldn’t reach the order service. No refund was processed. Please try again later."
: decision.status === "clarify"
? "We couldn’t find that order. Check your order number and try again."
: decision.reply
};
}
const key = "relay.demo.refund." + id;
try {
const raw = storage.getItem(key);
const existing = raw ? JSON.parse(raw) : null;
if (existing) return {status:"duplicate",receipt:existing,message:"A demo refund already exists for this order. No second refund was processed."};
const receipt = {id:"RF-" + id.slice(3),order:id,amount:decision.draft.amount,reason};
storage.setItem(key,JSON.stringify(receipt));
return {status:"refunded",receipt,message:"Your return was approved and the demo refund was processed automatically."};
} catch {
return {status:"retry",message:"We couldn’t save your return in this browser. No refund was confirmed. Enable site storage and try again."};
}
}