@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
| Kind | Name | Notes |
|---|---|---|
| User secret | paypalClientId | OAuth client id |
| User secret | paypalClientSecret | OAuth client secret |
Defaults: live api-m.paypal.com. Pass environment: 'sandbox' (or
apiBaseUrl) per call for sandbox. Optional overrides:
clientIdSecret / clientSecretSecret / secretScope.
Import paths
| Export | Import |
|---|---|
root dispatcher (default smoke-test) | kody:@kentcdodds/paypal |
| invoices | kody:@kentcdodds/paypal/invoices |
| transactions | kody:@kentcdodds/paypal/transactions |
| smoke-test | kody:@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;
searchTransactionschunks longer ranges (~30-day windows). listTransactionsrequiresstartDateandendDatein one reporting window.- Amount matching uses absolute value within ~0.005.
- Never run create/send in smoke tests.