UNPKG

@gmisoftware/przelewy24-payments-medusa

Version:

Przelewy24 (P24) payment integration plugin for Medusa e-commerce with BLIK, cards, and general P24 support.

125 lines 11.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.markPaymentSessionError = markPaymentSessionError; exports.parseP24ChargeResponse = parseP24ChargeResponse; exports.handleP24Charge = handleP24Charge; exports.resolvePaymentProviderById = resolvePaymentProviderById; exports.assertPaymentSessionProvider = assertPaymentSessionProvider; exports.resolvePaymentSessionIdempotencyKey = resolvePaymentSessionIdempotencyKey; exports.assertBlikChargeMatchesPaymentSession = assertBlikChargeMatchesPaymentSession; exports.resolveP24ProviderKeyForStatus = resolveP24ProviderKeyForStatus; exports.resolveP24Provider = resolveP24Provider; const utils_1 = require("@medusajs/framework/utils"); const p24_errors_1 = require("../../../../utils/p24-errors"); const types_1 = require("../../../../providers/przelewy24/types"); async function markPaymentSessionError(req, paymentSessionId, errorMessage) { const paymentModule = req.scope.resolve(utils_1.Modules.PAYMENT); const session = await paymentModule.retrievePaymentSession(paymentSessionId); await paymentModule.updatePaymentSession({ id: paymentSessionId, amount: session.amount, currency_code: session.currency_code, status: utils_1.PaymentSessionStatus.ERROR, data: { ...(session.data ?? {}), error_message: errorMessage, failed_at: new Date().toISOString(), }, }); } function parseP24ChargeResponse(response) { if (response.responseCode !== 0) { throw new Error((0, p24_errors_1.buildLocalizedP24ErrorMessage)(response, (typeof response.data?.message === "string" ? response.data.message : response.message) || "Payment charge failed")); } return { orderId: typeof response.data?.orderId === "number" ? response.data.orderId : undefined, redirectUrl: typeof response.data?.redirectUrl === "string" ? response.data.redirectUrl : undefined, message: typeof response.data?.message === "string" ? response.data.message : undefined, }; } async function handleP24Charge({ req, paymentSessionId, execute, }) { const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER); try { const result = await execute(); return { success: true, orderId: result.orderId, redirectUrl: result.redirectUrl, message: result.message, }; } catch (error) { const message = error instanceof Error ? error.message : "Unknown payment charge error"; logger.error(`[p24-charge] ${message}`); if (paymentSessionId) { await markPaymentSessionError(req, paymentSessionId, message).catch((markError) => { logger.error(`[p24-charge] Failed to mark payment session ${paymentSessionId} as error: ${markError instanceof Error ? markError.message : "unknown"}`); }); } throw error; } } function resolvePaymentProviderById(container, providerId) { const paymentModule = container.resolve(utils_1.Modules.PAYMENT); return paymentModule.__container__.paymentProviderService.retrieveProvider(providerId); } function assertPaymentSessionProvider(session, expectedProviderId) { if (session.provider_id !== expectedProviderId) { throw new Error("Payment session provider mismatch"); } } function resolvePaymentSessionIdempotencyKey(session) { const medusaPaymentSessionId = session.data?.medusa_payment_session_id; if (typeof medusaPaymentSessionId === "string" && medusaPaymentSessionId.length > 0) { return medusaPaymentSessionId; } return session.id; } async function assertBlikChargeMatchesPaymentSession(req, paymentSessionId, token, expectedProviderId) { const paymentModule = req.scope.resolve(utils_1.Modules.PAYMENT); const session = await paymentModule.retrievePaymentSession(paymentSessionId); assertPaymentSessionProvider(session, expectedProviderId); const sessionToken = typeof session.data?.token === "string" ? session.data.token : undefined; if (!sessionToken || sessionToken !== token) { throw new Error("Payment session token mismatch"); } } function isPaymentProviderKey(value) { return Object.values(types_1.PaymentProviderKeys).includes(value); } function resolveProviderKeyFromProviderId(providerId) { const match = providerId.match(/^pp_(.+)_przelewy24$/); if (match && isPaymentProviderKey(match[1])) { return match[1]; } throw new Error("Unsupported payment provider"); } function resolveP24ProviderKeyForStatus(input) { const providerKeyFromId = input.provider_id ? resolveProviderKeyFromProviderId(input.provider_id) : undefined; if (input.provider_key) { if (providerKeyFromId && providerKeyFromId !== input.provider_key) { throw new Error("Payment provider mismatch"); } return input.provider_key; } if (providerKeyFromId) { return providerKeyFromId; } return types_1.PaymentProviderKeys.P24_BLIK; } function resolveP24Provider(req, providerKey) { const providerId = `pp_${providerKey}_przelewy24`; return resolvePaymentProviderById(req.scope, providerId); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcmdlLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvcGF5bWVudHMvdXRpbHMvY2hhcmdlLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTZCQSwwREFtQkM7QUFFRCx3REE0QkM7QUFFRCwwQ0FvQ0M7QUFtQkQsZ0VBV0M7QUFFRCxvRUFPQztBQUVELGtGQWNDO0FBRUQsc0ZBaUJDO0FBMEJELHdFQXFCQztBQUVELGdEQU9DO0FBclBELHFEQUltQztBQUNuQyw2REFBNkU7QUFDN0Usa0VBQTZFO0FBc0J0RSxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLEdBQWtCLEVBQ2xCLGdCQUF3QixFQUN4QixZQUFvQjtJQUVwQixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekQsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU3RSxNQUFNLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQztRQUN2QyxFQUFFLEVBQUUsZ0JBQWdCO1FBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtRQUN0QixhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWE7UUFDcEMsTUFBTSxFQUFFLDRCQUFvQixDQUFDLEtBQUs7UUFDbEMsSUFBSSxFQUFFO1lBQ0osR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLGFBQWEsRUFBRSxZQUFZO1lBQzNCLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtTQUNwQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQixzQkFBc0IsQ0FDcEMsUUFBMkI7SUFFM0IsSUFBSSxRQUFRLENBQUMsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hD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