Skip to content
← Public packages

@kentcdodds/paypal

PayPal helpers for invoices, sending invoices, transactions, and reimbursements.

src/smoke-test.ts

55 lines · 1.6 KB · TypeScript
import { findInvoice, listInvoices } from './invoices.ts'
import { searchTransactions } from './transactions.ts'

export type PayPalSmokeTestInput = {
  invoiceNumber?: string
  invoiceId?: string
  recipientEmail?: string
  amount?: string | number
  startDate?: string | Date
  endDate?: string | Date
}

/**
 * Run a safe read-only smoke test against PayPal invoices and optionally transaction reporting.
 */
export async function smokeTest(input: PayPalSmokeTestInput = {}) {
  const invoices = await listInvoices({ pageSize: 3 })
  const invoiceLookup = input.invoiceId || input.invoiceNumber || input.recipientEmail || input.amount
    ? await findInvoice({
        id: input.invoiceId,
        invoiceNumber: input.invoiceNumber,
        recipientEmail: input.recipientEmail,
        amount: input.amount,
      })
    : null
  const transactionLookup = input.startDate || input.endDate || input.amount || input.recipientEmail
    ? await searchTransactions({
        startDate: input.startDate,
        endDate: input.endDate,
        email: input.recipientEmail,
        amount: input.amount,
        direction: input.amount == null ? undefined : 'incoming',
      })
    : null

  return {
    ok: true,
    invoiceList: {
      total_items: invoices.total_items,
      total_pages: invoices.total_pages,
      sampleCount: invoices.items.length,
      sample: invoices.items,
    },
    invoiceLookup,
    transactionLookup: transactionLookup
      ? {
          scanned: transactionLookup.scanned,
          matchCount: transactionLookup.matches.length,
          matches: transactionLookup.matches,
        }
      : null,
  }
}

export default smokeTest