Skip to content
← Public packages

@kentcdodds/paypal

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

AGENTS.md

101 lines · 3.0 KB · Markdown

@kentcdodds/paypal — agent notes

Human setup and intent live in README.md. This file is for agents: imports, smoke snippets, and edge cases. Secrets by name only — never paste values. Do not disable live webhooks or jobs.

Secrets

KindNameNotes
User secretpaypalClientIdOAuth client id
User secretpaypalClientSecretOAuth client secret

Defaults: live api-m.paypal.com. Pass environment: 'sandbox' (or apiBaseUrl) per call for sandbox. Optional overrides: clientIdSecret / clientSecretSecret / secretScope.

Import paths

ExportImport
root dispatcher (default smoke-test)kody:@kentcdodds/paypal
invoiceskody:@kentcdodds/paypal/invoices
transactionskody:@kentcdodds/paypal/transactions
smoke-testkody:@kentcdodds/paypal/smoke-test

Prefer static kody:@kentcdodds/paypal/... imports from execute. Root re-exports helpers and dispatches on action.

Smoke test (read-only)

import smokeTest from 'kody:@kentcdodds/paypal/smoke-test'

export default async function main() {
	return await smokeTest()
	// => { ok: true, invoiceList: { sampleCount, sample, ... }, ... }
}

Equivalent via root:

import paypal from 'kody:@kentcdodds/paypal'

export default async function main() {
	return await paypal({ action: 'smoke-test' })
}

Read-only list:

import listInvoices from 'kody:@kentcdodds/paypal/invoices'
// or: import { listInvoices } from 'kody:@kentcdodds/paypal/invoices'

export default async function main() {
	return await listInvoices({ pageSize: 5 })
}

Optional smoke filters (invoiceId, invoiceNumber, recipientEmail, amount, startDate, endDate) trigger invoice find / transaction search — still read-only.

Mutations (no dryRun flag)

create-invoice / send-invoice mutate PayPal immediately. There is no package-level dryRun / confirm guard — get explicit user approval before calling, and prefer draft create (send omitted/false) over send: true.

import paypal from 'kody:@kentcdodds/paypal'

export default async function main() {
	// Only after explicit user approval
	return await paypal({
		action: 'create-invoice',
		send: false,
		recipientEmail: 'ada@example.com',
		itemName: 'Airfare reimbursement',
		amount: '100.00',
		memo: 'Conference flight reimbursement',
	})
}

Root actions include: smoke-test, list-invoices, get-invoice, search-invoices, find-invoice, summarize-invoice, search-reimbursement / search-invoices-for-reimbursement, list-transactions, search-transactions, find-transaction, list-balances, create-invoice, send-invoice.

Edge cases

  • PayPal transaction reporting rejects ranges over 31 days; searchTransactions chunks longer ranges (~30-day windows).
  • listTransactions requires startDate and endDate in one reporting window.
  • Amount matching uses absolute value within ~0.005.
  • Never run create/send in smoke tests.