@m-nasser-m/medusa-payment-vodafone-cash-manual
Version:
Vodafone Cash manual payment provider for Medusa
74 lines • 5.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GET = GET;
exports.POST = POST;
const zod_1 = require("zod");
// Validation schema for Vodafone Cash phone number
const vodafoneCashSchema = zod_1.z.object({
phone_number: zod_1.z.string()
.regex(/^0100\d{7}$/, "Phone number must start with 0100 and be exactly 11 digits")
.transform((phone) => phone.replace(/\s+/g, '').replace(/[^\d]/g, '')),
customer_name: zod_1.z.string().optional(),
amount: zod_1.z.number().positive("Amount must be positive"),
currency_code: zod_1.z.string().default("EGP")
});
async function GET(req, res) {
res.json({
message: "Vodafone Cash Payment Provider",
provider_id: "vodafone-cash",
supported_currencies: ["EGP"],
phone_format: "0100XXXXXXX (11 digits starting with 0100)"
});
}
async function POST(req, res) {
try {
// Validate request body
const validatedData = vodafoneCashSchema.parse(req.body);
const { phone_number, customer_name, amount, currency_code } = validatedData;
// Format phone number for display
const formattedPhone = `${phone_number.slice(0, 4)} ${phone_number.slice(4, 7)} ${phone_number.slice(7)}`;
// Create payment session data
const paymentSession = {
id: `vodafone_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
provider_id: "vodafone-cash",
amount,
currency_code,
phone_number: formattedPhone,
customer_name,
status: "pending",
created_at: new Date().toISOString(),
payment_instructions: {
message: `Please send ${amount} ${currency_code} via Vodafone Cash`,
phone_number: formattedPhone,
steps: [
"Open your Vodafone Cash app or dial *9*",
`Send ${amount} ${currency_code} to the merchant`,
"Keep your transaction reference number",
"Your order will be confirmed once payment is verified"
]
}
};
res.status(201).json({
success: true,
data: paymentSession
});
}
catch (error) {
if (error instanceof zod_1.z.ZodError) {
return res.status(400).json({
success: false,
error: "Validation failed",
details: error.errors.map(err => ({
field: err.path.join('.'),
message: err.message
}))
});
}
res.status(500).json({
success: false,
error: "Internal server error",
message: error.message
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3BsdWdpbi9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWFBLGtCQVVDO0FBRUQsb0JBeURDO0FBakZELDZCQUF3QjtBQUV4QixtREFBbUQ7QUFDbkQsTUFBTSxrQkFBa0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xDLFlBQVksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO1NBQ3JCLEtBQUssQ0FBQyxhQUFhLEVBQUUsNERBQTRELENBQUM7U0FDbEYsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLGFBQWEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3BDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDO0lBQ3RELGFBQWEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztDQUN6QyxDQUFDLENBQUM7QUFFSSxLQUFLLFVBQVUsR0FBRyxDQUN2QixHQUFrQixFQUNsQixHQUFtQjtJQUVuQixHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ1AsT0FBTyxFQUFFLGdDQUFnQztRQUN6QyxXQUFXLEVBQUUsZUFBZTtRQUM1QixvQkFBb0IsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUM3QixZQUFZLEVBQUUsNENBQTRDO0tBQzNELENBQUMsQ0FBQztBQUNMLENBQUM7QUFFTSxLQUFLLFVBQVUsSUFBSSxDQUN4QixHQUFrQixFQUNsQixHQUFtQjtJQUVuQixJQUFJLENBQUM7UUFDSCx3QkFBd0I7UUFDeEIsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6RCxNQUFNLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsYUFBYSxDQUFDO1FBRTdFLGtDQUFrQztRQUNsQyxNQUFNLGNBQWMsR0FBRyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUUxRyw4QkFBOEI7UUFDOUIsTUFBTSxjQUFjLEdBQUc7WUFDckIsRUFBRSxFQUFFLFlBQVksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUN2RSxXQUFXLEVBQUUsZUFBZTtZQUM1QixNQUFNO1lBQ04sYUFBYTtZQUNiLFlBQVksRUFBRSxjQUFjO1lBQzVCLGFBQWE7WUFDYixNQUFNLEVBQUUsU0FBUztZQUNqQixVQUFVLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDcEMsb0JBQW9CLEVBQUU7Z0JBQ3BCLE9BQU8sRUFBRSxlQUFlLE1BQU0sSUFBSSxhQUFhLG9CQUFvQjtnQkFDbkUsWUFBWSxFQUFFLGNBQWM7Z0JBQzVCLEtBQUssRUFBRTtvQkFDTCx5Q0FBeUM7b0JBQ3pDLFFBQVEsTUFBTSxJQUFJLGFBQWEsa0JBQWtCO29CQUNqRCx3Q0FBd0M7b0JBQ3hDLHVEQUF1RDtpQkFDeEQ7YUFDRjtTQUNGLENBQUM7UUFFRixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuQixPQUFPLEVBQUUsSUFBSTtZQUNiLElBQUksRUFBRSxjQUFjO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVksT0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLEtBQUssRUFBRSxtQkFBbUI7Z0JBQzFCLE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2hDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQ3pCLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztpQkFDckIsQ0FBQyxDQUFDO2FBQ0osQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxLQUFLO1lBQ2QsS0FBSyxFQUFFLHVCQUF1QjtZQUM5QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMifQ==