UNPKG

lightrail-stripe

Version:

A Javascript and Typescript library for creating Lightrail-Stripe integrated applications.

132 lines (131 loc) 6.81 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const lightrail = require("lightrail-client"); function simulateSplitTenderCharge(params, lightrailShare) { return __awaiter(this, void 0, void 0, function* () { if (!params) { throw new Error("params not set"); } else if (!params.userSuppliedId) { throw new Error("params.userSuppliedId not set"); } let splitTenderSimulation = { lightrailTransaction: null, stripeCharge: null }; if (lightrailShare > 0) { const contact = yield lightrail.contacts.getContactByUserSuppliedId(params.shopperId); const card = yield lightrail.cards.getAccountCardByContactAndCurrency(contact, params.currency); if (!card) { throw new Error(`No ${params.currency} card found for shopperId '${params.shopperId}'.`); } let lightrailTransactionParameters = { value: 0 - lightrailShare, currency: params.currency, userSuppliedId: params.userSuppliedId, nsf: params.nsf, }; lightrailTransactionParameters.metadata = appendSplitTenderMetadataForLightrail(params, null); const lightrailSimulatedTransaction = yield lightrail.cards.transactions.simulateTransaction(card, lightrailTransactionParameters); splitTenderSimulation.lightrailTransaction = lightrailSimulatedTransaction; } return splitTenderSimulation; }); } exports.simulateSplitTenderCharge = simulateSplitTenderCharge; function createSplitTenderCharge(params, lightrailShare, stripeParam) { return __awaiter(this, void 0, void 0, function* () { if (!params) { throw new Error("params not set"); } else if (!params.userSuppliedId) { throw new Error("params.userSuppliedId not set"); } const stripeObject = getStripeObject(stripeParam); let splitTenderCharge = { lightrailTransaction: null, stripeCharge: null }; const stripeShare = params.amount - lightrailShare; if (lightrailShare > 0) { const contact = yield lightrail.contacts.getContactByUserSuppliedId(params.shopperId); const card = yield lightrail.cards.getAccountCardByContactAndCurrency(contact, params.currency); if (!card) { throw new Error(`No ${params.currency} card found for shopperId '${params.shopperId}'.`); } let lightrailTransactionParameters = { value: 0 - lightrailShare, currency: params.currency, pending: (stripeShare > 0), userSuppliedId: params.userSuppliedId, }; lightrailTransactionParameters.metadata = appendSplitTenderMetadataForLightrail(params, null); const lightrailPendingTransaction = yield lightrail.cards.transactions.createTransaction(card, lightrailTransactionParameters); splitTenderCharge.lightrailTransaction = lightrailPendingTransaction; if (stripeShare) { try { let stripeParameters = splitTenderParamsToStripeParams(params, stripeShare, lightrailPendingTransaction); splitTenderCharge.stripeCharge = yield stripeObject.charges.create(stripeParameters, { idempotency_key: params.userSuppliedId }); splitTenderCharge.lightrailTransaction = yield lightrail.cards.transactions.capturePending(card, lightrailPendingTransaction, { userSuppliedId: params.userSuppliedId + "-capture", metadata: appendSplitTenderMetadataForLightrail(params, splitTenderCharge.stripeCharge), }); } catch (error) { splitTenderCharge.lightrailTransaction = yield lightrail.cards.transactions.voidPending(card, lightrailPendingTransaction, { userSuppliedId: params.userSuppliedId + "-void", metadata: appendSplitTenderMetadataForLightrail(params, splitTenderCharge.stripeCharge), }); } } } else { let stripeParameters = splitTenderParamsToStripeParams(params, stripeShare, null); splitTenderCharge.stripeCharge = yield stripeObject.charges.create(stripeParameters, { idempotency_key: params.userSuppliedId }); } return splitTenderCharge; }); } exports.createSplitTenderCharge = createSplitTenderCharge; // Helpers function splitTenderParamsToStripeParams(splitTenderParams, stripeAmount, lightrailTransaction) { let paramsForStripe = Object.assign({}, splitTenderParams, { metadata: splitTenderParams.metadata || {}, shopperId: undefined, userSuppliedId: undefined }); paramsForStripe.metadata._split_tender_total = paramsForStripe.amount; paramsForStripe.metadata._split_tender_partner = "LIGHTRAIL"; paramsForStripe.metadata._split_tender_partner_transaction_id = ""; if (lightrailTransaction && lightrailTransaction.transactionId) { paramsForStripe.metadata._split_tender_partner_transaction_id = lightrailTransaction.transactionId; } paramsForStripe.amount = stripeAmount; return paramsForStripe; } function appendSplitTenderMetadataForLightrail(splitTenderParams, stripeTransaction) { if (!splitTenderParams.metadata) { splitTenderParams.metadata = {}; } splitTenderParams.metadata._split_tender_total = splitTenderParams.amount; splitTenderParams.metadata._split_tender_partner = "STRIPE"; if (stripeTransaction) { splitTenderParams.metadata._split_tender_partner_transaction_id = stripeTransaction.id; } return splitTenderParams.metadata; } function getStripeObject(stripeParam) { if (!stripeParam) { throw new Error("stripeParam not set"); } else if (typeof stripeParam === "object") { return stripeParam; } else if (typeof stripeParam === "string") { return require("stripe")(stripeParam); } }