UNPKG

@alphabite/medusa-paypal

Version:

Alphabite's Medusa Paypal Plugin

129 lines 10 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PaypalService = void 0; const paypal_server_sdk_1 = require("@paypal/paypal-server-sdk"); const axios_1 = __importDefault(require("axios")); class PaypalService { constructor({ clientId, clientSecret, isSandbox, paypalWebhookId, }) { this.verifyWebhook = async ({ headers, body, }) => { const accessToken = await this.getAccessToken(); const verifyWebhookRes = await this.axios.post("/v1/notifications/verify-webhook-signature", { auth_algo: headers["paypal-auth-algo"], cert_url: headers["paypal-cert-url"], transmission_id: headers["paypal-transmission-id"], transmission_sig: headers["paypal-transmission-sig"], transmission_time: headers["paypal-transmission-time"], webhook_id: this.paypalWebhookIdEnv || "", webhook_event: body, }, { headers: { Authorization: `Bearer ${accessToken}`, "Content-Type": "application/json", }, }); if (verifyWebhookRes.data.verification_status !== "SUCCESS") { throw new Error("Failed to verify webhook signature"); } return { status: verifyWebhookRes.data.verification_status, body }; }; const environment = isSandbox ? paypal_server_sdk_1.Environment.Sandbox : paypal_server_sdk_1.Environment.Production; this.client = new paypal_server_sdk_1.Client({ clientCredentialsAuthCredentials: { oAuthClientId: clientId, oAuthClientSecret: clientSecret, }, timeout: 0, environment, logging: { logLevel: paypal_server_sdk_1.LogLevel.Info, logRequest: { logBody: true, }, logResponse: { logHeaders: true, }, }, }); this.axios = axios_1.default.create({ baseURL: isSandbox ? "https://api-m.sandbox.paypal.com" : "https://api-m.paypal.com", }); this.clientIdEnv = clientId; this.clientSecretEnv = clientSecret; this.paypalWebhookIdEnv = paypalWebhookId; this.ordersController = new paypal_server_sdk_1.OrdersController(this.client); this.paymentsController = new paypal_server_sdk_1.PaymentsController(this.client); this.authController = new paypal_server_sdk_1.OAuthAuthorizationController(this.client); } async createOrder({ amount, currency, sessionId, }) { const ordersController = new paypal_server_sdk_1.OrdersController(this.client); const createdOrder = await ordersController.createOrder({ body: { intent: paypal_server_sdk_1.CheckoutPaymentIntent.Capture, purchaseUnits: [ { amount: { currencyCode: currency, value: amount.toString(), }, customId: sessionId, }, ], }, }); if (!createdOrder?.result?.id) throw new Error("Failed to create order"); return createdOrder.result; } async getAccessToken() { try { const authorization = Buffer.from(`${this.clientIdEnv}:${this.clientSecretEnv}`).toString("base64"); const authRes = await this.authController.requestToken({ authorization: `Basic ${authorization}`, }); const accessToken = authRes.result.accessToken; if (!accessToken) throw new Error("Failed to get access token"); return accessToken; } catch (error) { throw new Error("Failed to get access token: " + error.message); } } async authorizeOrder(id) { const authorizedOrder = await this.ordersController.authorizeOrder({ id, }); return authorizedOrder.result; } async captureOrder(id) { const capturedOrder = await this.ordersController.captureOrder({ id, }); return capturedOrder.result; } async cancelPayment(captureIds) { const refunds = []; for (const captureId of captureIds) { const refund = await this.paymentsController.refundCapturedPayment({ captureId, }); refunds.push(refund.result); } return refunds; } async getOrderDetails(id) { const orderDetails = await this.ordersController.getOrder({ id, }); return orderDetails.result; } } exports.PaypalService = PaypalService; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5cGFsLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3BheXBhbC9wYXlwYWwtY29yZS9wYXlwYWwtY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxpRUFXbUM7QUFDbkMsa0RBQTZDO0FBRTdDLE1BQWEsYUFBYTtJQVV4QixZQUFZLEVBQ1YsUUFBUSxFQUNSLFlBQVksRUFDWixTQUFTLEVBQ1QsZUFBZSxHQU1oQjtRQThITSxrQkFBYSxHQUFHLEtBQUssRUFBRSxFQUM1QixPQUFPLEVBQ1AsSUFBSSxHQUlMLEVBQTRELEVBQUU7WUFDN0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFaEQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUM1Qyw0Q0FBNEMsRUFDNUM7Z0JBQ0UsU0FBUyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztnQkFDdEMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztnQkFDcEMsZUFBZSxFQUFFLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztnQkFDbEQsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLHlCQUF5QixDQUFDO2dCQUNwRCxpQkFBaUIsRUFBRSxPQUFPLENBQUMsMEJBQTBCLENBQUM7Z0JBQ3RELFVBQVUsRUFBRSxJQUFJLENBQUMsa0JBQWtCLElBQUksRUFBRTtnQkFDekMsYUFBYSxFQUFFLElBQUk7YUFDcEIsRUFDRDtnQkFDRSxPQUFPLEVBQUU7b0JBQ1AsYUFBYSxFQUFFLFVBQVUsV0FBVyxFQUFFO29CQUN0QyxjQUFjLEVBQUUsa0JBQWtCO2lCQUNuQzthQUNGLENBQ0YsQ0FBQztZQUVGLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1RCxNQUFNLElBQUksS0FBSyxDQUFD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