UNPKG

@gmisoftware/przelewy24-payments-medusa

Version:

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

106 lines 8.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.config = void 0; exports.default = reconcileP24PaymentsJob; const utils_1 = require("@medusajs/framework/utils"); const core_flows_1 = require("@medusajs/medusa/core-flows"); const utils_2 = require("@medusajs/framework/utils"); const charge_helper_1 = require("../api/store/payments/utils/charge-helper"); const payment_job_errors_1 = require("../utils/payment-job-errors"); const P24_PROVIDER_PREFIX = 'pp_p24'; const RECONCILE_AFTER_MINUTES = 5; const RECONCILE_MAX_AGE_HOURS = 48; const RECONCILE_BATCH_SIZE = 50; const RECONCILEABLE_STATUSES = ['pending', 'requires_more', 'authorized']; function hasRegisteredP24Transaction(sessionData) { if (sessionData.pending_card_tokenization === true) { return false; } return Boolean(sessionData.token || sessionData.order_id || sessionData.orderId); } async function reconcileP24PaymentsJob(container) { const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER); const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY); const cutoff = new Date(Date.now() - RECONCILE_AFTER_MINUTES * 60 * 1000); const maxAge = new Date(Date.now() - RECONCILE_MAX_AGE_HOURS * 60 * 60 * 1000); const { data: paymentSessions } = await query.graph({ entity: 'payment_session', fields: [ 'id', 'status', 'provider_id', 'data', 'amount', 'updated_at', 'deleted_at', 'payment_collection.payments.id', 'payment_collection.payments.captured_at', ], filters: { provider_id: { $like: `${P24_PROVIDER_PREFIX}%` }, status: { $in: [...RECONCILEABLE_STATUSES] }, deleted_at: null, updated_at: { $lte: cutoff.toISOString(), $gte: maxAge.toISOString(), }, }, pagination: { take: RECONCILE_BATCH_SIZE, order: { updated_at: 'DESC', }, }, }); let reconciled = 0; for (const session of paymentSessions ?? []) { const sessionData = (session.data ?? {}); if (!hasRegisteredP24Transaction(sessionData)) { continue; } const p24SessionId = sessionData.session_id || sessionData.sessionId || session.id; try { const providerId = session.provider_id; const provider = (0, charge_helper_1.resolvePaymentProviderById)(container, providerId); const { medusaStatus } = await provider.queryTransactionStatus(p24SessionId); if (medusaStatus !== 'captured' && medusaStatus !== 'authorized') { continue; } const payments = session.payment_collection?.payments ?? []; const hasCapturedPayment = payments.some((payment) => Boolean(payment?.captured_at)); if (hasCapturedPayment) { continue; } await (0, core_flows_1.processPaymentWorkflow)(container).run({ input: { action: utils_2.PaymentActions.SUCCESSFUL, data: { session_id: session.id, amount: session.amount, }, }, }); reconciled += 1; } catch (error) { const message = (0, payment_job_errors_1.getJobErrorMessage)(error); if ((0, payment_job_errors_1.isExpectedStalePaymentJobFailure)(error)) { logger.debug(`[p24-reconcile] Skipping payment session ${session.id}: ${message}`); continue; } logger.error(`[p24-reconcile] Failed to reconcile payment session ${session.id}: ${message}`); } } if (reconciled > 0) { logger.info(`[p24-reconcile] Reconciled ${reconciled} payment session(s)`); } } exports.config = { name: 'reconcile-p24-payments', schedule: '*/5 * * * *', }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb25jaWxlLXAyNC1wYXltZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9qb2JzL3JlY29uY2lsZS1wMjQtcGF5bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZ0NBLDBDQTJHQztBQTFJRCxxREFBcUU7QUFDckUsNERBQW9FO0FBQ3BFLHFEQUEwRDtBQUUxRCw2RUFBOEg7QUFDOUgsb0VBR29DO0FBRXBDLE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFBO0FBQ3BDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFBO0FBQ2pDLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFBO0FBQ2xDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFBO0FBRS9CLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBVSxDQUFBO0FBRWxGLFNBQVMsMkJBQTJCLENBQ2xDLFdBQW9DO0lBRXBDLElBQUksV0FBVyxDQUFDLHlCQUF5QixLQUFLLElBQUksRUFBRSxDQUFDO1FBQ25ELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUNaLFdBQVcsQ0FBQyxLQUFLO1FBQ2YsV0FBVyxDQUFDLFFBQVE7UUFDcEIsV0FBVyxDQUFDLE9BQU8sQ0FDdEIsQ0FBQTtBQUNILENBQUM7QUFFYyxLQUFLLFVBQVUsdUJBQXVCLENBQ25ELFNBQTBCO0lBRTFCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEUsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVoRSxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsdUJBQXVCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFBO0lB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