@alphabite/medusa-paypal
Version:
Alphabite's Medusa Paypal Plugin
129 lines • 10 kB
JavaScript
;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5cGFsLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL3BheXBhbC9wYXlwYWwtY29yZS9wYXlwYWwtY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxpRUFXbUM7QUFDbkMsa0RBQTZDO0FBRTdDLE1BQWEsYUFBYTtJQVV4QixZQUFZLEVBQ1YsUUFBUSxFQUNSLFlBQVksRUFDWixTQUFTLEVBQ1QsZUFBZSxHQU1oQjtRQThITSxrQkFBYSxHQUFHLEtBQUssRUFBRSxFQUM1QixPQUFPLEVBQ1AsSUFBSSxHQUlMLEVBQTRELEVBQUU7WUFDN0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFaEQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUM1Qyw0Q0FBNEMsRUFDNUM7Z0JBQ0UsU0FBUyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztnQkFDdEMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztnQkFDcEMsZUFBZSxFQUFFLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztnQkFDbEQsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLHlCQUF5QixDQUFDO2dCQUNwRCxpQkFBaUIsRUFBRSxPQUFPLENBQUMsMEJBQTBCLENBQUM7Z0JBQ3RELFVBQVUsRUFBRSxJQUFJLENBQUMsa0JBQWtCLElBQUksRUFBRTtnQkFDekMsYUFBYSxFQUFFLElBQUk7YUFDcEIsRUFDRDtnQkFDRSxPQUFPLEVBQUU7b0JBQ1AsYUFBYSxFQUFFLFVBQVUsV0FBVyxFQUFFO29CQUN0QyxjQUFjLEVBQUUsa0JBQWtCO2lCQUNuQzthQUNGLENBQ0YsQ0FBQztZQUVGLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1RCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7WUFDeEQsQ0FBQztZQUVELE9BQU8sRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3JFLENBQUMsQ0FBQztRQTlKQSxNQUFNLFdBQVcsR0FBRyxTQUFTO1lBQzNCLENBQUMsQ0FBQywrQkFBVyxDQUFDLE9BQU87WUFDckIsQ0FBQyxDQUFDLCtCQUFXLENBQUMsVUFBVSxDQUFDO1FBRTNCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSwwQkFBTSxDQUFDO1lBQ3ZCLGdDQUFnQyxFQUFFO2dCQUNoQyxhQUFhLEVBQUUsUUFBUTtnQkFDdkIsaUJBQWlCLEVBQUUsWUFBWTthQUNoQztZQUNELE9BQU8sRUFBRSxDQUFDO1lBQ1YsV0FBVztZQUNYLE9BQU8sRUFBRTtnQkFDUCxRQUFRLEVBQUUsNEJBQVEsQ0FBQyxJQUFJO2dCQUN2QixVQUFVLEVBQUU7b0JBQ1YsT0FBTyxFQUFFLElBQUk7aUJBQ2Q7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxTQUFTO2dCQUNoQixDQUFDLENBQUMsa0NBQWtDO2dCQUNwQyxDQUFDLENBQUMsMEJBQTBCO1NBQy9CLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsWUFBWSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxlQUFlLENBQUM7UUFFMUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksb0NBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLHNDQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksZ0RBQTRCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQ2hCLE1BQU0sRUFDTixRQUFRLEVBQ1IsU0FBUyxHQUtWO1FBQ0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLG9DQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUzRCxNQUFNLFlBQVksR0FBRyxNQUFNLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztZQUN0RCxJQUFJLEVBQUU7Z0JBQ0osTUFBTSxFQUFFLHlDQUFxQixDQUFDLE9BQU87Z0JBQ3JDLGFBQWEsRUFBRTtvQkFDYjt3QkFDRSxNQUFNLEVBQUU7NEJBQ04sWUFBWSxFQUFFLFFBQVE7NEJBQ3RCLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFO3lCQUN6Qjt3QkFDRCxRQUFRLEVBQUUsU0FBUztxQkFDcEI7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFekUsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYztRQUNsQixJQUFJLENBQUM7WUFDSCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUMvQixHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUM5QyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVyQixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDO2dCQUNyRCxhQUFhLEVBQUUsU0FBUyxhQUFhLEVBQUU7YUFDeEMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFFL0MsSUFBSSxDQUFDLFdBQVc7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBRWhFLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEUsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQVU7UUFDN0IsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDO1lBQ2pFLEVBQUU7U0FDSCxDQUFDLENBQUM7UUFFSCxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBVTtRQUMzQixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7WUFDN0QsRUFBRTtTQUNILENBQUMsQ0FBQztRQUVILE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFvQjtRQUN0QyxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFFN0IsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDakUsU0FBUzthQUNWLENBQUMsQ0FBQztZQUVILE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFVO1FBQzlCLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztZQUN4RCxFQUFFO1NBQ0gsQ0FBQyxDQUFDO1FBRUgsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7Q0FvQ0Y7QUFwTEQsc0NBb0xDIn0=