@dime-technology/dime-js-sdk 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +169 -4
- package/dist/index.cjs +912 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +588 -89
- package/dist/index.d.ts +588 -89
- package/dist/index.js +898 -7
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts","../src/exceptions/dime-exception.ts","../src/exceptions/validation-exception.ts","../src/exceptions/rate-limit-exception.ts","../src/exceptions/api-exception.ts","../src/exceptions/authentication-exception.ts","../src/exceptions/permission-denied-exception.ts","../src/exceptions/not-found-exception.ts","../src/exceptions/server-exception.ts","../src/exceptions/connection-exception.ts","../src/http/error-handler.ts","../src/http/transport.ts","../src/support/arr.ts","../src/data-objects/address.ts","../src/data-objects/message-result.ts","../src/pagination/cursor-page.ts","../src/resources/abstract-resource.ts","../src/resources/addresses.ts","../src/data-objects/customer.ts","../src/resources/customers.ts","../src/data-objects/deposit.ts","../src/data-objects/transaction-address.ts","../src/data-objects/transaction.ts","../src/data-objects/deposit-with-transactions.ts","../src/data-objects/deposit-group.ts","../src/resources/deposits.ts","../src/data-objects/cover-fee-quote.ts","../src/data-objects/invoice-customer.ts","../src/data-objects/invoice-event.ts","../src/data-objects/invoice-line-item.ts","../src/data-objects/invoice-payment.ts","../src/data-objects/invoice.ts","../src/data-objects/invoice-item.ts","../src/data-objects/invoice-link.ts","../src/resources/invoices.ts","../src/data-objects/form-link.ts","../src/data-objects/merchant.ts","../src/resources/merchants.ts","../src/data-objects/payment-method.ts","../src/resources/payment-methods.ts","../src/data-objects/recurring-invoice.ts","../src/resources/recurring-invoices.ts","../src/data-objects/recurring-payment-method.ts","../src/data-objects/recurring-payment.ts","../src/resources/recurring-payments.ts","../src/data-objects/tokenize-result.ts","../src/resources/transactions.ts","../src/client.ts"],"sourcesContent":["export const DEFAULT_BASE_URL = 'https://app.dimepayments.com'\nexport const VERSION = '1.3.0'\n\nexport interface ConfigOptions {\n /** Sanctum personal access token (sent as Bearer). */\n token: string\n /** Base URL; defaults to https://app.dimepayments.com. */\n baseUrl?: string\n /** Per-request timeout in seconds. Default 30. */\n timeout?: number\n /** How many times to retry 429/5xx/network errors. Default 2. */\n maxRetries?: number\n /** Base seconds for exponential backoff. Default 0.5. */\n retryBaseDelay?: number\n /** Custom fetch implementation — inject a mock in tests. */\n fetch?: typeof globalThis.fetch\n /** Custom sleep implementation — inject a no-op in tests to skip delays. */\n sleep?: (ms: number) => Promise<void>\n}\n\nexport class Config {\n readonly token: string\n readonly baseUrl: string\n readonly timeout: number\n readonly maxRetries: number\n readonly retryBaseDelay: number\n readonly fetch?: typeof globalThis.fetch\n readonly sleep?: (ms: number) => Promise<void>\n\n constructor(options: ConfigOptions | string, baseUrl?: string) {\n if (typeof options === 'string') {\n this.token = options\n this.baseUrl = baseUrl ?? DEFAULT_BASE_URL\n this.timeout = 30\n this.maxRetries = 2\n this.retryBaseDelay = 0.5\n } else {\n this.token = options.token\n this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL\n this.timeout = options.timeout ?? 30\n this.maxRetries = options.maxRetries ?? 2\n this.retryBaseDelay = options.retryBaseDelay ?? 0.5\n this.fetch = options.fetch\n this.sleep = options.sleep\n }\n }\n\n baseUri(): string {\n return `${this.baseUrl.replace(/\\/$/, '')}/api/`\n }\n}\n","export class DimeException extends Error {\n constructor(\n message: string,\n public readonly statusCode?: number,\n public readonly responseBody: Record<string, unknown> = {},\n cause?: unknown,\n ) {\n super(message, { cause })\n this.name = this.constructor.name\n Object.setPrototypeOf(this, new.target.prototype)\n }\n\n getStatusCode(): number | undefined {\n return this.statusCode\n }\n\n getResponseBody(): Record<string, unknown> {\n return this.responseBody\n }\n}\n","import { DimeException } from './dime-exception.js'\n\nexport class ValidationException extends DimeException {\n constructor(\n message: string,\n public readonly errors: Record<string, string[]> = {},\n statusCode?: number,\n responseBody: Record<string, unknown> = {},\n cause?: unknown,\n ) {\n super(message, statusCode, responseBody, cause)\n }\n\n getErrors(): Record<string, string[]> {\n return this.errors\n }\n\n firstError(): string | undefined {\n for (const messages of Object.values(this.errors)) {\n if (messages.length > 0) return messages[0]\n }\n return undefined\n }\n}\n","import { DimeException } from './dime-exception.js'\n\nexport class RateLimitException extends DimeException {\n constructor(\n message: string,\n public readonly retryAfter?: number,\n statusCode = 429,\n responseBody: Record<string, unknown> = {},\n cause?: unknown,\n ) {\n super(message, statusCode, responseBody, cause)\n }\n\n getRetryAfter(): number | undefined {\n return this.retryAfter\n }\n}\n","import { DimeException } from './dime-exception.js'\n\nexport class ApiException extends DimeException {}\n","import { DimeException } from './dime-exception.js'\n\nexport class AuthenticationException extends DimeException {}\n","import { DimeException } from './dime-exception.js'\n\nexport class PermissionDeniedException extends DimeException {}\n","import { DimeException } from './dime-exception.js'\n\nexport class NotFoundException extends DimeException {}\n","import { DimeException } from './dime-exception.js'\n\nexport class ServerException extends DimeException {}\n","import { DimeException } from './dime-exception.js'\n\nexport class ConnectionException extends DimeException {}\n","import {\n ApiException,\n AuthenticationException,\n NotFoundException,\n PermissionDeniedException,\n RateLimitException,\n ServerException,\n ValidationException,\n} from '../exceptions/index.js'\n\ntype Raw = Record<string, unknown>\n\nfunction looksLikeValidation(status: number, body: Raw): boolean {\n if (\n body['errors'] !== undefined &&\n typeof body['errors'] === 'object' &&\n !Array.isArray(body['errors'])\n ) {\n return true\n }\n return (\n (status === 400 || status === 422) &&\n body['message'] !== undefined &&\n typeof body['message'] === 'object' &&\n !Array.isArray(body['message'])\n )\n}\n\nfunction extractErrors(body: Raw): Record<string, string[]> {\n const raw = body['errors'] ?? body['message']\n if (raw === null || raw === undefined || typeof raw !== 'object' || Array.isArray(raw)) {\n return {}\n }\n\n const errors: Record<string, string[]> = {}\n for (const [field, messages] of Object.entries(raw as Record<string, unknown>)) {\n errors[field] = Array.isArray(messages) ? messages.map(String) : [String(messages)]\n }\n return errors\n}\n\nfunction extractMessage(body: Raw): string | undefined {\n const data = body['data']\n if (data !== null && data !== undefined && typeof data === 'object' && !Array.isArray(data)) {\n const msg = (data as Raw)['message']\n if (typeof msg === 'string') return msg\n }\n if (typeof body['message'] === 'string') return body['message']\n return undefined\n}\n\nfunction firstMessage(errors: Record<string, string[]>): string | undefined {\n for (const messages of Object.values(errors)) {\n if (messages.length > 0) return messages[0]\n }\n return undefined\n}\n\nexport function handleError(status: number, body: Raw, retryAfter?: number): never {\n if (looksLikeValidation(status, body)) {\n const errors = extractErrors(body)\n throw new ValidationException(\n firstMessage(errors) ?? 'The given data was invalid.',\n errors,\n status,\n body,\n )\n }\n\n const message = extractMessage(body) ?? `Dime API request failed with status ${status}.`\n\n if (status === 401) throw new AuthenticationException(message, status, body)\n if (status === 403) throw new PermissionDeniedException(message, status, body)\n if (status === 404) throw new NotFoundException(message, status, body)\n if (status === 429) throw new RateLimitException(message, retryAfter, status, body)\n if (status >= 500) throw new ServerException(message, status, body)\n throw new ApiException(message, status, body)\n}\n","import { Config, VERSION } from '../config.js'\nimport { ConnectionException } from '../exceptions/index.js'\nimport { handleError } from './error-handler.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Transport {\n private readonly fetchFn: typeof globalThis.fetch\n private readonly sleepFn: (ms: number) => Promise<void>\n\n constructor(private readonly config: Config) {\n this.fetchFn = config.fetch ?? globalThis.fetch\n this.sleepFn = config.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)))\n }\n\n /**\n * Execute a request and return the decoded JSON body.\n *\n * The Dime API reads the same `{ data, filters }` envelope whether it arrives\n * as a JSON body or as nested query parameters. The Fetch standard forbids a\n * body on GET/HEAD (undici throws), so for those methods the envelope is\n * serialised into the query string (`data[sid]=…&filters[status]=…`) and no\n * body is sent; every other method sends the envelope as a JSON body.\n */\n async request(\n method: string,\n path: string,\n body: Raw = {},\n query: Record<string, string> = {},\n ): Promise<Raw> {\n let url = `${this.config.baseUri()}${path.replace(/^\\//, '')}`\n\n const bodyless = method.toUpperCase() === 'GET' || method.toUpperCase() === 'HEAD'\n\n const params: Record<string, string> = { ...query }\n if (bodyless) Object.assign(params, flattenParams(body))\n\n if (Object.keys(params).length > 0) {\n url += '?' + new URLSearchParams(params).toString()\n }\n\n const sendBody = !bodyless && Object.keys(body).length > 0\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.config.token}`,\n Accept: 'application/json',\n 'X-Dime-Sdk': `dime-js-sdk/${VERSION}`,\n }\n // Only advertise a JSON body when we actually send one; otherwise the API\n // tries to parse the empty body and rejects the request with \"Invalid JSON\".\n if (sendBody) headers['Content-Type'] = 'application/json'\n\n const init: RequestInit = {\n method,\n headers,\n ...(sendBody ? { body: JSON.stringify(body) } : {}),\n }\n\n return this.attempt(url, init, 0)\n }\n\n private async attempt(url: string, init: RequestInit, attempt: number): Promise<Raw> {\n let response: Response\n\n try {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), this.config.timeout * 1_000)\n try {\n response = await this.fetchFn(url, { ...init, signal: controller.signal })\n } finally {\n clearTimeout(timer)\n }\n } catch (err) {\n const isAbort = err instanceof Error && err.name === 'AbortError'\n const label = isAbort\n ? `Request timed out after ${this.config.timeout}s`\n : `Could not reach the Dime API: ${err instanceof Error ? err.message : String(err)}`\n\n if (attempt < this.config.maxRetries) {\n await this.sleep(attempt, undefined)\n return this.attempt(url, init, attempt + 1)\n }\n\n throw new ConnectionException(label, undefined, {}, err instanceof Error ? err : undefined)\n }\n\n const status = response.status\n\n if ((status === 429 || status >= 500) && attempt < this.config.maxRetries) {\n const retryAfter = parseRetryAfter(response)\n await this.sleep(attempt, retryAfter)\n return this.attempt(url, init, attempt + 1)\n }\n\n const decoded = await decode(response)\n\n if (status < 200 || status >= 300) {\n handleError(status, decoded, parseRetryAfter(response))\n }\n\n return decoded\n }\n\n private async sleep(attempt: number, retryAfter: number | undefined): Promise<void> {\n const ms =\n retryAfter !== undefined\n ? retryAfter * 1_000\n : Math.min(2 ** attempt * this.config.retryBaseDelay * 1_000, 30_000)\n await this.sleepFn(ms)\n }\n}\n\n/**\n * Flatten a nested envelope into PHP-style bracketed query pairs, e.g.\n * `{ data: { sid: '1' }, filters: { status: 'all' } }` becomes\n * `{ 'data[sid]': '1', 'filters[status]': 'all' }`. Booleans follow the same\n * '1'/'0' convention the API uses elsewhere; null/undefined are dropped.\n */\nfunction flattenParams(obj: Raw, prefix = ''): Record<string, string> {\n const out: Record<string, string> = {}\n\n for (const [key, value] of Object.entries(obj)) {\n if (value === null || value === undefined) continue\n\n const name = prefix ? `${prefix}[${key}]` : key\n\n if (Array.isArray(value)) {\n value.forEach((item, i) => {\n Object.assign(out, flattenParams({ [i]: item }, name))\n })\n } else if (typeof value === 'object') {\n Object.assign(out, flattenParams(value as Raw, name))\n } else {\n out[name] = typeof value === 'boolean' ? (value ? '1' : '0') : String(value)\n }\n }\n\n return out\n}\n\nfunction parseRetryAfter(response: Response): number | undefined {\n const header = response.headers.get('Retry-After')\n if (header !== null && /^\\d+$/.test(header)) return parseInt(header, 10)\n return undefined\n}\n\nasync function decode(response: Response): Promise<Raw> {\n const text = await response.text()\n if (!text) return {}\n\n try {\n const parsed: unknown = JSON.parse(text)\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return parsed as Raw\n }\n return { message: text }\n } catch {\n return { message: text }\n }\n}\n","type Raw = Record<string, unknown>\n\nexport function arrString(data: Raw, key: string): string | undefined {\n const value = data[key]\n if (value === null || value === undefined || Array.isArray(value)) return undefined\n if (typeof value === 'boolean') return value ? '1' : '0'\n return String(value)\n}\n\nexport function arrStringFrom(data: Raw, keys: string[]): string | undefined {\n for (const key of keys) {\n if (key in data && data[key] !== null && data[key] !== undefined) {\n return arrString(data, key)\n }\n }\n return undefined\n}\n\nexport function arrInt(data: Raw, key: string): number | undefined {\n const value = data[key]\n if (value === null || value === undefined) return undefined\n const n = Number(value)\n return Number.isNaN(n) ? undefined : Math.trunc(n)\n}\n\nexport function arrBool(data: Raw, key: string, defaultValue = false): boolean {\n const value = data[key]\n return value === null || value === undefined ? defaultValue : Boolean(value)\n}\n\nexport function arrObjectFrom(data: Raw, keys: string[]): Raw {\n for (const key of keys) {\n const value = data[key]\n if (\n value !== null &&\n value !== undefined &&\n typeof value === 'object' &&\n !Array.isArray(value)\n ) {\n return value as Raw\n }\n }\n return {}\n}\n\nexport function arrArrayFrom(data: Raw, key: string): Raw[] {\n const value = data[key]\n if (Array.isArray(value)) return value as Raw[]\n return []\n}\n","import { arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Address {\n constructor(\n public readonly id?: number,\n public readonly recipient?: string,\n public readonly lineOne?: string,\n public readonly lineTwo?: string,\n public readonly lineThree?: string,\n public readonly city?: string,\n public readonly state?: string,\n public readonly zip?: string,\n ) {}\n\n static fromRaw(data: Raw): Address {\n return new Address(\n // show returns address_id; list returns id\n arrInt(data, 'address_id') ?? arrInt(data, 'id'),\n arrString(data, 'recipient'),\n arrString(data, 'line_one'),\n arrString(data, 'line_two'),\n arrString(data, 'line_three'),\n arrString(data, 'city'),\n arrString(data, 'state'),\n arrString(data, 'zip'),\n )\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class MessageResult {\n constructor(public readonly message?: string) {}\n\n static fromRaw(data: Raw): MessageResult {\n return new MessageResult(arrString(data, 'message'))\n }\n}\n","export type PageFetcher<T> = (cursor: string) => Promise<CursorPage<T>>\n\nexport class CursorPage<T> {\n constructor(\n public readonly data: T[],\n public readonly nextCursor?: string,\n public readonly prevCursor?: string,\n public readonly perPage?: number,\n public readonly path?: string,\n private readonly fetcher?: PageFetcher<T>,\n ) {}\n\n hasMore(): boolean {\n return this.nextCursor !== undefined && this.fetcher !== undefined\n }\n\n async next(): Promise<CursorPage<T> | null> {\n if (!this.hasMore() || this.nextCursor === undefined || this.fetcher === undefined) {\n return null\n }\n return this.fetcher(this.nextCursor)\n }\n\n /** Lazily iterate every item across all remaining pages. */\n async *autoPaging(): AsyncGenerator<T> {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let page: CursorPage<T> | null = this\n while (page !== null) {\n for (const item of page.data) {\n yield item\n }\n page = await page.next()\n }\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.data[Symbol.iterator]()\n }\n\n get length(): number {\n return this.data.length\n }\n}\n","import { Transport } from '../http/transport.js'\nimport { CursorPage, type PageFetcher } from '../pagination/cursor-page.js'\n\ntype Raw = Record<string, unknown>\n\nexport abstract class AbstractResource {\n constructor(protected readonly transport: Transport) {}\n\n /**\n * Build the standard Dime request envelope, dropping null/undefined values.\n */\n protected envelope(data: Raw = {}, filters: Raw = {}): Raw {\n const body: Raw = {}\n\n const prunedData = pruneNulls(data)\n if (Object.keys(prunedData).length > 0) body['data'] = prunedData\n\n const prunedFilters = pruneNulls(filters)\n if (Object.keys(prunedFilters).length > 0) body['filters'] = prunedFilters\n\n return body\n }\n\n protected async paginate<T>(\n method: string,\n path: string,\n body: Raw,\n map: (item: Raw) => T,\n query: Record<string, string> = {},\n ): Promise<CursorPage<T>> {\n const raw = await this.transport.request(method, path, body, query)\n\n const items = Array.isArray(raw['data']) ? (raw['data'] as Raw[]) : []\n const meta =\n raw['meta'] !== null && typeof raw['meta'] === 'object' && !Array.isArray(raw['meta'])\n ? (raw['meta'] as Raw)\n : {}\n\n const nextCursor = extractCursor(meta, 'next_cursor')\n const prevCursor = extractCursor(meta, 'prev_cursor')\n\n const fetcher: PageFetcher<T> = (cursor) => this.paginate(method, path, body, map, { cursor })\n\n return new CursorPage<T>(\n items.map(map),\n nextCursor,\n prevCursor,\n typeof meta['per_page'] === 'number' ? (meta['per_page'] as number) : undefined,\n typeof meta['path'] === 'string' ? (meta['path'] as string) : undefined,\n nextCursor !== undefined ? fetcher : undefined,\n )\n }\n}\n\nfunction extractCursor(meta: Raw, key: string): string | undefined {\n const v = meta[key]\n return typeof v === 'string' && v !== '' ? v : undefined\n}\n\nfunction pruneNulls(obj: Raw): Raw {\n return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== null && v !== undefined))\n}\n","import { Address } from '../data-objects/address.js'\nimport { MessageResult } from '../data-objects/message-result.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Addresses extends AbstractResource {\n async list(sid: string, uuid: string): Promise<CursorPage<Address>> {\n return this.paginate('GET', 'address/list', this.envelope({ sid, uuid }), Address.fromRaw)\n }\n\n async show(sid: string, uuid: string, addressId: number | string): Promise<Address> {\n const raw = await this.transport.request(\n 'GET',\n 'address/show',\n this.envelope({ sid, uuid, address_id: addressId }),\n )\n return Address.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async create(sid: string, uuid: string, attributes: Raw): Promise<Address> {\n const raw = await this.transport.request(\n 'POST',\n 'address/create',\n this.envelope({ sid, uuid, ...attributes }),\n )\n return Address.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async update(\n sid: string,\n uuid: string,\n addressId: number | string,\n attributes: Raw,\n ): Promise<Address> {\n const raw = await this.transport.request(\n 'PATCH',\n 'address/update',\n this.envelope({ sid, uuid, address_id: addressId, ...attributes }),\n )\n return Address.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async delete(sid: string, uuid: string, addressId: number | string): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'POST',\n 'address/delete',\n this.envelope({ sid, uuid, address_id: addressId }),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Customer {\n constructor(\n public readonly uuid?: string,\n public readonly firstName?: string,\n public readonly lastName?: string,\n public readonly phone?: string,\n public readonly email?: string,\n public readonly addr1?: string,\n public readonly addr2?: string,\n public readonly addr3?: string,\n public readonly city?: string,\n public readonly state?: string,\n public readonly zip?: string,\n public readonly country?: string,\n ) {}\n\n static fromRaw(data: Raw): Customer {\n return new Customer(\n arrString(data, 'uuid'),\n arrString(data, 'first_name'),\n arrString(data, 'last_name'),\n arrString(data, 'phone'),\n arrString(data, 'email'),\n arrString(data, 'addr1'),\n arrString(data, 'addr2'),\n arrString(data, 'addr3'),\n arrString(data, 'city'),\n arrString(data, 'state'),\n arrString(data, 'zip'),\n arrString(data, 'country'),\n )\n }\n}\n","import { Customer } from '../data-objects/customer.js'\nimport { MessageResult } from '../data-objects/message-result.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Customers extends AbstractResource {\n async list(sid: string, filters: Raw = {}): Promise<CursorPage<Customer>> {\n return this.paginate('GET', 'customer/list', this.envelope({ sid }, filters), Customer.fromRaw)\n }\n\n async show(sid: string, filters: Raw): Promise<Customer> {\n const raw = await this.transport.request(\n 'GET',\n 'customer/show',\n this.envelope({ sid }, filters),\n )\n return Customer.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async create(sid: string, attributes: Raw): Promise<Customer> {\n const raw = await this.transport.request(\n 'POST',\n 'customer/create',\n this.envelope({ sid, ...attributes }),\n )\n return Customer.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async update(sid: string, filters: Raw, attributes: Raw): Promise<Customer> {\n const raw = await this.transport.request(\n 'PATCH',\n 'customer/update',\n this.envelope({ sid, ...attributes }, filters),\n )\n return Customer.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async delete(sid: string, filters: Raw): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'POST',\n 'customer/delete',\n this.envelope({ sid }, filters),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Deposit {\n constructor(\n public readonly transactionDate?: string,\n public readonly fundDate?: string,\n public readonly transactionInfoId?: string,\n public readonly transactionId?: string,\n public readonly transactionDetailAccount?: string,\n public readonly authorizationAmount?: string,\n public readonly netAmount?: string,\n public readonly sweepId?: string,\n public readonly type?: string,\n ) {}\n\n static fromRaw(data: Raw): Deposit {\n return new Deposit(\n arrString(data, 'transaction_date'),\n arrString(data, 'fund_date'),\n arrString(data, 'transaction_info_id'),\n arrString(data, 'transaction_id'),\n arrString(data, 'transaction_detail_account'),\n arrString(data, 'authorization_amount'),\n arrString(data, 'net_amount'),\n arrString(data, 'sweep_id'),\n arrString(data, 'type'),\n )\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class TransactionAddress {\n constructor(\n public readonly firstName?: string,\n public readonly lastName?: string,\n public readonly addr1?: string,\n public readonly addr2?: string,\n public readonly city?: string,\n public readonly state?: string,\n public readonly zip?: string,\n ) {}\n\n static fromRaw(data: Raw): TransactionAddress {\n return new TransactionAddress(\n arrString(data, 'first_name'),\n arrString(data, 'last_name'),\n arrString(data, 'addr1'),\n arrString(data, 'addr2'),\n arrString(data, 'city'),\n arrString(data, 'state'),\n arrString(data, 'zip'),\n )\n }\n}\n","import { arrBool, arrObjectFrom, arrString } from '../support/arr.js'\nimport { TransactionAddress } from './transaction-address.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Transaction {\n constructor(\n public readonly transactionType?: string,\n public readonly transactionStatus?: string,\n public readonly transactionStatusDescription?: string,\n public readonly transactionNumber?: string,\n public readonly transactionDate?: string,\n public readonly fundDate?: string,\n public readonly settleDate?: string,\n public readonly amount?: string,\n public readonly description?: string,\n public readonly statusCode?: string,\n public readonly statusText?: string,\n public readonly email?: string,\n public readonly phone?: string,\n public readonly customerUuid?: string,\n public readonly multiUseToken?: string,\n public readonly pending: boolean = false,\n public readonly transactionInfoId?: string,\n public readonly parentTransactionInfoId?: string,\n public readonly billingAddress: TransactionAddress = new TransactionAddress(),\n public readonly shippingAddress: TransactionAddress = new TransactionAddress(),\n ) {}\n\n static fromRaw(data: Raw): Transaction {\n return new Transaction(\n arrString(data, 'transaction_type'),\n arrString(data, 'transaction_status'),\n arrString(data, 'transaction_status_description'),\n arrString(data, 'transaction_number'),\n arrString(data, 'transaction_date'),\n arrString(data, 'fund_date'),\n arrString(data, 'settle_date'),\n arrString(data, 'amount'),\n arrString(data, 'description'),\n arrString(data, 'status_code'),\n arrString(data, 'status_text'),\n arrString(data, 'email'),\n arrString(data, 'phone'),\n arrString(data, 'customer_uuid'),\n arrString(data, 'multi_use_token'),\n arrBool(data, 'pending'),\n arrString(data, 'transaction_info_id'),\n arrString(data, 'parent_transaction_info_id'),\n TransactionAddress.fromRaw(arrObjectFrom(data, ['billing_address'])),\n // The API returns shipping under the camelCase key `shippingAddress`; accept\n // snake_case too in case that is ever corrected server-side.\n TransactionAddress.fromRaw(arrObjectFrom(data, ['shippingAddress', 'shipping_address'])),\n )\n }\n}\n","import { arrInt, arrObjectFrom, arrString } from '../support/arr.js'\nimport { Transaction } from './transaction.js'\n\ntype Raw = Record<string, unknown>\n\nexport class DepositWithTransactions {\n constructor(\n public readonly sid?: string,\n public readonly transactionInfoId?: string,\n public readonly transactionId?: string,\n public readonly transactionDate?: string,\n public readonly fundDate?: string,\n public readonly type?: string,\n public readonly countOfTransactions?: number,\n public readonly transTotal?: string,\n public readonly transactions: Transaction[] = [],\n ) {}\n\n static fromRaw(data: Raw): DepositWithTransactions {\n const txRaw = data['transactions']\n const transactions = Array.isArray(txRaw)\n ? (txRaw as Raw[]).map((t) => Transaction.fromRaw(t))\n : typeof txRaw === 'object' && txRaw !== null\n ? Object.values(txRaw as Record<string, Raw>).map((t) => Transaction.fromRaw(t))\n : []\n\n return new DepositWithTransactions(\n arrString(data, 'sid'),\n arrString(data, 'transaction_info_id'),\n arrString(data, 'transaction_id'),\n arrString(data, 'transaction_date'),\n arrString(data, 'fund_date'),\n arrString(data, 'type'),\n arrInt(data, 'countOfTransactions'),\n arrString(data, 'transTotal'),\n transactions,\n )\n }\n}\n","import { arrInt, arrString } from '../support/arr.js'\nimport { DepositWithTransactions } from './deposit-with-transactions.js'\n\ntype Raw = Record<string, unknown>\n\nexport class DepositGroup {\n constructor(\n public readonly sid?: string,\n public readonly count?: number,\n public readonly deposits: DepositWithTransactions[] = [],\n ) {}\n\n static fromRaw(data: Raw): DepositGroup {\n const depositsRaw = data['deposits']\n const deposits =\n typeof depositsRaw === 'object' && depositsRaw !== null && !Array.isArray(depositsRaw)\n ? Object.values(depositsRaw as Record<string, Raw>).map((d) =>\n DepositWithTransactions.fromRaw(d),\n )\n : []\n\n return new DepositGroup(arrString(data, 'sid'), arrInt(data, 'count'), deposits)\n }\n}\n","import { Deposit } from '../data-objects/deposit.js'\nimport { DepositGroup } from '../data-objects/deposit-group.js'\nimport { DepositWithTransactions } from '../data-objects/deposit-with-transactions.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Deposits extends AbstractResource {\n async list(sid: string, filters: Raw = {}): Promise<CursorPage<Deposit>> {\n return this.paginate('GET', 'deposit/list', this.envelope({ sid }, filters), Deposit.fromRaw)\n }\n\n async listWithTransactions(sid: string, filters: Raw): Promise<DepositGroup> {\n const raw = await this.transport.request(\n 'GET',\n 'deposit/list-with-trans',\n this.envelope({ sid }, filters),\n )\n return DepositGroup.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async show(sid: string, identifier: Raw): Promise<DepositWithTransactions> {\n const raw = await this.transport.request(\n 'GET',\n 'deposit/show',\n this.envelope({ sid, ...identifier }),\n )\n return DepositWithTransactions.fromRaw((raw['data'] as Raw) ?? {})\n }\n}\n","import { arrObjectFrom, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * The processing fee a cover-fee invoice adds on top of what the customer pays,\n * quoted for both payment methods.\n *\n * Present on an {@link Invoice} only when `coverFeeRequired` is true. The fee is\n * NOT a line item and is NOT part of the invoice's `total`: the merchant is owed\n * `total`, and the customer is charged `total` plus this fee. Card and ACH rates\n * differ, so the amount depends on how the customer chooses to pay — `ccTotal` is\n * the higher of the two and what the invoice and its emails lead with.\n *\n * `basis` names what the quote was computed against — currently always `balance`,\n * the amount still outstanding. Paying a partial amount re-quotes the fee against\n * that amount, so treat these as a quote for settling in full today rather than a\n * fixed charge.\n *\n * Monetary values are kept as strings to avoid float rounding.\n */\nexport class CoverFeeQuote {\n constructor(\n public readonly basis?: string,\n public readonly base?: string,\n public readonly ccFee?: string,\n public readonly ccTotal?: string,\n public readonly achFee?: string,\n public readonly achTotal?: string,\n ) {}\n\n static fromRaw(data: Raw): CoverFeeQuote {\n const cc = arrObjectFrom(data, ['cc'])\n const ach = arrObjectFrom(data, ['ach'])\n\n return new CoverFeeQuote(\n arrString(data, 'basis'),\n arrString(data, 'base'),\n arrString(cc, 'fee'),\n arrString(cc, 'total'),\n arrString(ach, 'fee'),\n arrString(ach, 'total'),\n )\n }\n}\n","import { arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class InvoiceCustomer {\n constructor(\n public readonly id?: number,\n public readonly name?: string,\n public readonly email?: string,\n ) {}\n\n static fromRaw(data: Raw): InvoiceCustomer {\n return new InvoiceCustomer(\n arrInt(data, 'id'),\n arrString(data, 'name'),\n arrString(data, 'email'),\n )\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class InvoiceEvent {\n constructor(\n public readonly type?: string,\n public readonly label?: string,\n public readonly description?: string,\n public readonly createdAt?: string,\n ) {}\n\n static fromRaw(data: Raw): InvoiceEvent {\n return new InvoiceEvent(\n arrString(data, 'type'),\n arrString(data, 'label'),\n arrString(data, 'description'),\n arrString(data, 'created_at'),\n )\n }\n}\n","import { arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class InvoiceLineItem {\n constructor(\n public readonly id?: number,\n public readonly itemId?: number,\n public readonly name?: string,\n public readonly description?: string,\n public readonly quantity?: string,\n public readonly unitPrice?: string,\n public readonly amount?: string,\n ) {}\n\n static fromRaw(data: Raw): InvoiceLineItem {\n return new InvoiceLineItem(\n arrInt(data, 'id'),\n arrInt(data, 'item_id'),\n arrString(data, 'name'),\n arrString(data, 'description'),\n arrString(data, 'quantity'),\n arrString(data, 'unit_price'),\n arrString(data, 'amount'),\n )\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * A payment recorded against an invoice.\n *\n * `amount` is what was credited to the invoice; `coverFee` is the processing fee\n * charged on top of it, so `amount + coverFee` is what the customer actually paid.\n * It is zero unless the invoice required the customer to cover fees.\n */\nexport class InvoicePayment {\n constructor(\n public readonly amount?: string,\n public readonly paidAt?: string,\n public readonly method?: string,\n public readonly transactionId?: string,\n public readonly coverFee?: string,\n ) {}\n\n static fromRaw(data: Raw): InvoicePayment {\n return new InvoicePayment(\n arrString(data, 'amount'),\n arrString(data, 'paid_at'),\n arrString(data, 'method'),\n arrString(data, 'transaction_id'),\n arrString(data, 'cover_fee'),\n )\n }\n}\n","import { arrArrayFrom, arrBool, arrInt, arrObjectFrom, arrString } from '../support/arr.js'\nimport { CoverFeeQuote } from './cover-fee-quote.js'\nimport { InvoiceCustomer } from './invoice-customer.js'\nimport { InvoiceEvent } from './invoice-event.js'\nimport { InvoiceLineItem } from './invoice-line-item.js'\nimport { InvoicePayment } from './invoice-payment.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Invoice {\n constructor(\n public readonly id?: number,\n public readonly invoiceNumber?: string,\n public readonly status?: string,\n public readonly token?: string,\n public readonly paymentTerms?: string,\n public readonly issueDate?: string,\n public readonly dueDate?: string,\n public readonly isOverdue: boolean = false,\n public readonly subtotal?: string,\n public readonly total?: string,\n public readonly amountPaid?: string,\n public readonly balance?: string,\n public readonly allowPartialPayment: boolean = false,\n public readonly thankYouNote?: string,\n // Present on the list-summary shape; the full shape nests these under `customer`.\n public readonly customerName?: string,\n public readonly customerEmail?: string,\n public readonly publicUrl?: string,\n public readonly customer: InvoiceCustomer = new InvoiceCustomer(),\n public readonly items: InvoiceLineItem[] = [],\n public readonly payments: InvoicePayment[] = [],\n public readonly events: InvoiceEvent[] = [],\n // Whether the customer must pay the processing fee. The fee is not a line item\n // and not part of `total` — see CoverFeeQuote. Appended rather than slotted in\n // beside allowPartialPayment so the positional constructor stays compatible.\n public readonly coverFeeRequired: boolean = false,\n public readonly coverFeeQuote?: CoverFeeQuote,\n ) {}\n\n static fromRaw(data: Raw): Invoice {\n return new Invoice(\n arrInt(data, 'id'),\n arrString(data, 'invoice_number'),\n arrString(data, 'status'),\n arrString(data, 'token'),\n arrString(data, 'payment_terms'),\n arrString(data, 'issue_date'),\n arrString(data, 'due_date'),\n arrBool(data, 'is_overdue'),\n arrString(data, 'subtotal'),\n arrString(data, 'total'),\n arrString(data, 'amount_paid'),\n arrString(data, 'balance'),\n arrBool(data, 'allow_partial_payment'),\n arrString(data, 'thank_you_note'),\n arrString(data, 'customer_name'),\n arrString(data, 'customer_email'),\n arrString(data, 'public_url'),\n InvoiceCustomer.fromRaw(arrObjectFrom(data, ['customer'])),\n arrArrayFrom(data, 'items').map(InvoiceLineItem.fromRaw),\n arrArrayFrom(data, 'payments').map(InvoicePayment.fromRaw),\n arrArrayFrom(data, 'events').map(InvoiceEvent.fromRaw),\n arrBool(data, 'cover_fee_required'),\n data['cover_fee_quote'] && typeof data['cover_fee_quote'] === 'object'\n ? CoverFeeQuote.fromRaw(data['cover_fee_quote'] as Raw)\n : undefined,\n )\n }\n}\n","import { arrBool, arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class InvoiceItem {\n constructor(\n public readonly id?: number,\n public readonly name?: string,\n public readonly description?: string,\n public readonly price?: string,\n public readonly taxDeductible: boolean = false,\n ) {}\n\n static fromRaw(data: Raw): InvoiceItem {\n return new InvoiceItem(\n arrInt(data, 'id'),\n arrString(data, 'name'),\n arrString(data, 'description'),\n arrString(data, 'price'),\n arrBool(data, 'tax_deductible'),\n )\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class InvoiceLink {\n constructor(\n public readonly publicUrl?: string,\n public readonly token?: string,\n ) {}\n\n static fromRaw(data: Raw): InvoiceLink {\n return new InvoiceLink(arrString(data, 'public_url'), arrString(data, 'token'))\n }\n}\n","import { Invoice } from '../data-objects/invoice.js'\nimport { InvoiceItem } from '../data-objects/invoice-item.js'\nimport { InvoiceLink } from '../data-objects/invoice-link.js'\nimport { MessageResult } from '../data-objects/message-result.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * Invoice endpoints.\n *\n * Identify the customer with `customer_uuid` — the same identifier the customer,\n * payment-method and address endpoints use, and the only one `Customer` exposes.\n * `customer_id` remains accepted for integrations written against the original\n * contract; supply exactly one.\n *\n * Line-item mutations return the refreshed invoice so the caller sees\n * recalculated totals rather than a detached fragment.\n */\nexport class Invoices extends AbstractResource {\n /**\n * List invoices for a merchant.\n *\n * @param filters `status` — draft | sent | paid | partial | void | overdue\n */\n async list(sid: string, filters: Raw = {}): Promise<CursorPage<Invoice>> {\n return this.paginate('GET', 'invoices', this.envelope({ sid }, filters), Invoice.fromRaw)\n }\n\n async show(sid: string, invoiceId: number | string): Promise<Invoice> {\n const raw = await this.transport.request(\n 'GET',\n 'invoice',\n this.envelope({ sid, invoice_id: invoiceId }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Create a draft invoice with its line items. Every line must reference a\n * Merchant `item_id`; the line name and unit price are snapshotted.\n *\n * @param attributes\n * `customer_uuid` (or `customer_id`), `customer_name`, `customer_email`,\n * `payment_terms` (`due_on_receipt` | `net_15` | `net_30` | `net_60`) and\n * `lines` are required. `lines[]` takes `item_id`, `name`, `quantity`,\n * `unit_price` and optional `description`. Optional: `invoice_number`,\n * `issue_date` (Y-m-d, defaults to today — `due_date` is derived from\n * `payment_terms`), `thank_you_note`, `allow_partial_payment`,\n * `cover_fee_required`, `reminder_settings`.\n *\n * Set `cover_fee_required` to make the customer pay the processing fee. The\n * fee is added on top of the invoice at payment time rather than becoming a\n * line item, so `total` stays the amount owed to the merchant — read\n * `invoice.coverFeeQuote` for what the customer will actually be charged.\n * Omitting the field inherits the merchant's invoice setting.\n */\n async create(sid: string, attributes: Raw): Promise<Invoice> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/create',\n this.envelope({ sid, ...attributes }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Update a draft invoice. Only drafts can be edited, and passing `lines`\n * replaces the existing line items.\n *\n * @param attributes same shape as {@link Invoices.create}\n */\n async update(sid: string, invoiceId: number | string, attributes: Raw): Promise<Invoice> {\n const raw = await this.transport.request(\n 'PATCH',\n 'invoice/update',\n this.envelope({ sid, invoice_id: invoiceId, ...attributes }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async delete(sid: string, invoiceId: number | string): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/delete',\n this.envelope({ sid, invoice_id: invoiceId }),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n\n /** Email the invoice to the customer and advance it to Sent. */\n async send(sid: string, invoiceId: number | string): Promise<Invoice> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/send',\n this.envelope({ sid, invoice_id: invoiceId }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** Activate a draft invoice for payment without emailing it. */\n async markSent(sid: string, invoiceId: number | string): Promise<Invoice> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/mark-sent',\n this.envelope({ sid, invoice_id: invoiceId }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async void(sid: string, invoiceId: number | string): Promise<Invoice> {\n const raw = await this.transport.request(\n 'PATCH',\n 'invoice/void',\n this.envelope({ sid, invoice_id: invoiceId }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** Clone any invoice into a new draft with a freshly allocated number. */\n async duplicate(sid: string, invoiceId: number | string): Promise<Invoice> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/duplicate',\n this.envelope({ sid, invoice_id: invoiceId }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Record a merchant-initiated (MOTO) card or ACH payment against an open\n * invoice.\n *\n * @param attributes\n * `payment_type` is required and is `cc` or `ach`. For a card, pass a stored\n * `token` or raw `cardholder_name` / `card_number` / `expiration_date` (m/Y)\n * plus optional `cvv`; for ACH, pass `routing_number` / `account_number` /\n * `account_type` (Checking | Savings) / `account_name`. Omit `amount` to pay\n * the full balance — partial amounts require the invoice to allow them.\n * Optional: `memo`, `billing_address`.\n *\n * On a cover-fee invoice the processing fee for `payment_type` is charged on\n * top of `amount`, so the card or bank account is debited more than the\n * invoice is credited. The fee lands as `coverFee` on the matching entry in\n * `invoice.payments`. Card and ACH rates differ, so the same `amount` settles\n * differently per `payment_type`.\n */\n async pay(sid: string, invoiceId: number | string, attributes: Raw): Promise<Invoice> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/pay',\n this.envelope({ sid, invoice_id: invoiceId, ...attributes }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** Get the public pay link (and token) for an invoice. */\n async getLink(sid: string, invoiceId: number | string): Promise<InvoiceLink> {\n const raw = await this.transport.request(\n 'GET',\n 'invoice/link',\n this.envelope({ sid, invoice_id: invoiceId }),\n )\n return InvoiceLink.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Append a single line item to a draft invoice.\n *\n * @param attributes `item_id`, `name`, `quantity` and `unit_price` are\n * required; `description` is optional.\n */\n async addLineItem(sid: string, invoiceId: number | string, attributes: Raw): Promise<Invoice> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/line-item/add',\n this.envelope({ sid, invoice_id: invoiceId, ...attributes }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Update a single line item on a draft invoice.\n *\n * @param attributes any of `item_id`, `name`, `description`, `quantity`,\n * `unit_price`\n */\n async updateLineItem(\n sid: string,\n invoiceId: number | string,\n lineItemId: number | string,\n attributes: Raw,\n ): Promise<Invoice> {\n const raw = await this.transport.request(\n 'PATCH',\n 'invoice/line-item/update',\n this.envelope({ sid, invoice_id: invoiceId, line_item_id: lineItemId, ...attributes }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** Remove a single line item from a draft invoice. */\n async deleteLineItem(\n sid: string,\n invoiceId: number | string,\n lineItemId: number | string,\n ): Promise<Invoice> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/line-item/delete',\n this.envelope({ sid, invoice_id: invoiceId, line_item_id: lineItemId }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** List the Merchant's items (funds/designations) available as invoice line items. */\n async listItems(sid: string): Promise<InvoiceItem[]> {\n const raw = await this.transport.request('GET', 'invoice/items', this.envelope({ sid }))\n const items = Array.isArray(raw['data']) ? (raw['data'] as Raw[]) : []\n return items.map(InvoiceItem.fromRaw)\n }\n\n /**\n * Create an invoicing-only item (fund/designation) for the Merchant. The item\n * is hidden from public giving pages and can be referenced as a line's\n * `item_id`.\n *\n * @param attributes `name` is required; `description`, `price` and\n * `tax_deductible` are optional.\n */\n async createItem(sid: string, attributes: Raw): Promise<InvoiceItem> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/item/create',\n this.envelope({ sid, ...attributes }),\n )\n return InvoiceItem.fromRaw((raw['data'] as Raw) ?? {})\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class FormLink {\n constructor(public readonly link?: string) {}\n\n static fromRaw(data: Raw): FormLink {\n return new FormLink(arrString(data, 'link'))\n }\n}\n","import { arrBool, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Merchant {\n constructor(\n public readonly name?: string,\n public readonly sid?: string,\n public readonly mcc?: string,\n public readonly slug?: string,\n public readonly pubApiKey?: string,\n public readonly processorMid?: string,\n public readonly active: boolean = false,\n public readonly activeAt?: string,\n public readonly gPay: boolean = false,\n public readonly aPay: boolean = false,\n public readonly pciCompliance: boolean = false,\n public readonly website?: string,\n public readonly addr1?: string,\n public readonly addr2?: string,\n public readonly city?: string,\n public readonly state?: string,\n public readonly zip?: string,\n public readonly phone?: string,\n public readonly primaryPhone?: string,\n public readonly primaryEmail?: string,\n public readonly primaryName?: string,\n ) {}\n\n static fromRaw(data: Raw): Merchant {\n return new Merchant(\n arrString(data, 'name'),\n arrString(data, 'sid'),\n arrString(data, 'mcc'),\n arrString(data, 'slug'),\n arrString(data, 'pub_api_key'),\n arrString(data, 'processor_mid'),\n arrBool(data, 'active'),\n arrString(data, 'active_at'),\n arrBool(data, 'g_pay'),\n arrBool(data, 'a_pay'),\n arrBool(data, 'pci_compliance'),\n arrString(data, 'website'),\n arrString(data, 'addr1'),\n arrString(data, 'addr2'),\n arrString(data, 'city'),\n arrString(data, 'state'),\n arrString(data, 'zip'),\n arrString(data, 'phone'),\n arrString(data, 'primary_phone'),\n arrString(data, 'primary_email'),\n arrString(data, 'primary_name'),\n )\n }\n}\n","import { FormLink } from '../data-objects/form-link.js'\nimport { Merchant } from '../data-objects/merchant.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Merchants extends AbstractResource {\n async list(filters: Raw = {}): Promise<CursorPage<Merchant>> {\n return this.paginate('GET', 'merchant/list', this.envelope({}, filters), Merchant.fromRaw)\n }\n\n async show(sid: string): Promise<Merchant> {\n const raw = await this.transport.request('GET', 'merchant/show', this.envelope({ sid }))\n return Merchant.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async create(attributes: Raw): Promise<Merchant> {\n const raw = await this.transport.request('POST', 'merchant/create', this.envelope(attributes))\n return Merchant.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async update(sid: string, attributes: Raw): Promise<Merchant> {\n const raw = await this.transport.request(\n 'PATCH',\n 'merchant/update',\n this.envelope({ sid, ...attributes }),\n )\n return Merchant.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async getFormLink(sid: string): Promise<FormLink> {\n const raw = await this.transport.request(\n 'GET',\n 'merchant/get-form-link',\n this.envelope({ sid }),\n )\n return FormLink.fromRaw((raw['data'] as Raw) ?? {})\n }\n}\n","import { arrBool, arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class PaymentMethod {\n constructor(\n public readonly id?: number,\n public readonly type?: string,\n public readonly token?: string,\n public readonly firstName?: string,\n public readonly lastName?: string,\n public readonly ccNameOnCard?: string,\n public readonly ccLastFour?: string,\n public readonly ccExpirationDate?: string,\n public readonly ccBrand?: string,\n public readonly achBankAccountName?: string,\n public readonly achRoutingNumber?: string,\n public readonly achAccountNumber?: string,\n public readonly achOwnershipType?: string,\n public readonly achAccountType?: string,\n public readonly achBankName?: string,\n public readonly status?: string,\n public readonly statusDate?: string,\n public readonly enabled: boolean = false,\n public readonly isDefault: boolean = false,\n public readonly addr1?: string,\n public readonly addr2?: string,\n public readonly addr3?: string,\n public readonly city?: string,\n public readonly state?: string,\n public readonly zip?: string,\n ) {}\n\n static fromRaw(data: Raw): PaymentMethod {\n return new PaymentMethod(\n arrInt(data, 'id'),\n arrString(data, 'type'),\n arrString(data, 'token'),\n arrString(data, 'first_name'),\n arrString(data, 'last_name'),\n arrString(data, 'cc_name_on_card'),\n arrString(data, 'cc_last_four'),\n arrString(data, 'cc_expiration_date'),\n arrString(data, 'cc_brand'),\n arrString(data, 'ach_bank_account_name'),\n arrString(data, 'ach_routing_number'),\n arrString(data, 'ach_account_number'),\n arrString(data, 'ach_ownership_type'),\n arrString(data, 'ach_account_type'),\n arrString(data, 'ach_bank_name'),\n arrString(data, 'status'),\n arrString(data, 'status_date'),\n arrBool(data, 'enabled'),\n arrBool(data, 'default'),\n arrString(data, 'addr1'),\n arrString(data, 'addr2'),\n arrString(data, 'addr3'),\n arrString(data, 'city'),\n arrString(data, 'state'),\n arrString(data, 'zip'),\n )\n }\n}\n","import { MessageResult } from '../data-objects/message-result.js'\nimport { PaymentMethod } from '../data-objects/payment-method.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\nexport class PaymentMethods extends AbstractResource {\n async list(sid: string, filters: Raw): Promise<CursorPage<PaymentMethod>> {\n return this.paginate(\n 'GET',\n 'payment-method/list',\n this.envelope({ sid }, filters),\n PaymentMethod.fromRaw,\n )\n }\n\n async show(sid: string, paymentMethodId: number | string, filters: Raw): Promise<PaymentMethod> {\n const raw = await this.transport.request(\n 'GET',\n 'payment-method/show',\n this.envelope({ sid, payment_method_id: paymentMethodId }, filters),\n )\n return PaymentMethod.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async create(sid: string, attributes: Raw): Promise<PaymentMethod> {\n const raw = await this.transport.request(\n 'POST',\n 'payment-method/create',\n this.envelope({ sid, ...attributes }),\n )\n return PaymentMethod.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async update(sid: string, attributes: Raw): Promise<PaymentMethod> {\n const raw = await this.transport.request(\n 'PATCH',\n 'payment-method/update',\n this.envelope({ sid, ...attributes }),\n )\n return PaymentMethod.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async delete(\n sid: string,\n paymentMethodId: number | string,\n uuid: string,\n ): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'POST',\n 'payment-method/delete',\n this.envelope({ sid, payment_method_id: paymentMethodId, uuid }),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n}\n","import { arrArrayFrom, arrBool, arrInt, arrObjectFrom, arrString } from '../support/arr.js'\nimport { Invoice } from './invoice.js'\nimport { InvoiceCustomer } from './invoice-customer.js'\nimport { InvoiceLineItem } from './invoice-line-item.js'\n\ntype Raw = Record<string, unknown>\n\nexport class RecurringInvoice {\n constructor(\n public readonly id?: number,\n public readonly status?: string,\n public readonly recurrenceSchedule?: string,\n public readonly paymentTerms?: string,\n public readonly startDate?: string,\n public readonly endDate?: string,\n public readonly nextRunDate?: string,\n public readonly lastRunDate?: string,\n // Present on the list-summary shape; the full shape nests this under `customer`.\n public readonly customerName?: string,\n public readonly thankYouNote?: string,\n public readonly customer: InvoiceCustomer = new InvoiceCustomer(),\n public readonly items: InvoiceLineItem[] = [],\n public readonly upcomingRunDates: string[] = [],\n // The most recent invoices generated by this template.\n public readonly invoices: Invoice[] = [],\n // Copied onto every invoice this template generates.\n public readonly coverFeeRequired: boolean = false,\n ) {}\n\n static fromRaw(data: Raw): RecurringInvoice {\n const runDates = data['upcoming_run_dates']\n\n return new RecurringInvoice(\n arrInt(data, 'id'),\n arrString(data, 'status'),\n arrString(data, 'recurrence_schedule'),\n arrString(data, 'payment_terms'),\n arrString(data, 'start_date'),\n arrString(data, 'end_date'),\n arrString(data, 'next_run_date'),\n arrString(data, 'last_run_date'),\n arrString(data, 'customer_name'),\n arrString(data, 'thank_you_note'),\n InvoiceCustomer.fromRaw(arrObjectFrom(data, ['customer'])),\n arrArrayFrom(data, 'items').map(InvoiceLineItem.fromRaw),\n Array.isArray(runDates) ? runDates.map((d) => String(d)) : [],\n arrArrayFrom(data, 'invoices').map(Invoice.fromRaw),\n arrBool(data, 'cover_fee_required'),\n )\n }\n}\n","import { RecurringInvoice } from '../data-objects/recurring-invoice.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * Recurring-invoice templates, which generate and send an invoice on a schedule.\n *\n * Identify the customer with `customer_uuid`; `customer_id` remains accepted.\n */\nexport class RecurringInvoices extends AbstractResource {\n /**\n * List recurring-invoice templates.\n *\n * @param filters `status` — Active | Paused | Cancelled | Completed\n */\n async list(sid: string, filters: Raw = {}): Promise<CursorPage<RecurringInvoice>> {\n return this.paginate(\n 'GET',\n 'recurring-invoices',\n this.envelope({ sid }, filters),\n RecurringInvoice.fromRaw,\n )\n }\n\n async show(sid: string, recurringInvoiceId: number | string): Promise<RecurringInvoice> {\n const raw = await this.transport.request(\n 'GET',\n 'recurring-invoice',\n this.envelope({ sid, recurring_invoice_id: recurringInvoiceId }),\n )\n return RecurringInvoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Create a recurring-invoice template. When `recurring_start_date` is today the\n * first invoice is generated and sent immediately.\n *\n * @param attributes\n * `customer_uuid` (or `customer_id`), `payment_terms` (`due_on_receipt` |\n * `net_15` | `net_30` | `net_60`), `recurring_frequency` (`Weekly` |\n * `Biweekly` | `FirstFifteenth` | `Monthly` | `Yearly`),\n * `recurring_start_date` (Y-m-d) and `lines` are required. Optional:\n * `recurring_end_date` (Y-m-d, on or after the start date),\n * `thank_you_note`.\n *\n * `cover_fee_required` makes the customer cover the processing fee on every\n * invoice this template generates.\n */\n async create(sid: string, attributes: Raw): Promise<RecurringInvoice> {\n const raw = await this.transport.request(\n 'POST',\n 'recurring-invoice/create',\n this.envelope({ sid, ...attributes }),\n )\n return RecurringInvoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async cancel(sid: string, recurringInvoiceId: number | string): Promise<RecurringInvoice> {\n const raw = await this.transport.request(\n 'POST',\n 'recurring-invoice/cancel',\n this.envelope({ sid, recurring_invoice_id: recurringInvoiceId }),\n )\n return RecurringInvoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n}\n","import { arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class RecurringPaymentMethod {\n constructor(\n public readonly id?: number,\n public readonly type?: string,\n public readonly lastFour?: string,\n public readonly expiration?: string,\n public readonly zip?: string,\n public readonly nameOnCard?: string,\n public readonly bankAccountName?: string,\n public readonly routingNumber?: string,\n public readonly accountNumber?: string,\n public readonly ownershipType?: string,\n public readonly accountType?: string,\n public readonly bankName?: string,\n ) {}\n\n static fromRaw(data: Raw): RecurringPaymentMethod {\n return new RecurringPaymentMethod(\n arrInt(data, 'id'),\n arrString(data, 'type'),\n arrString(data, 'last_four'),\n arrString(data, 'expiration'),\n arrString(data, 'zip'),\n arrString(data, 'name_on_card'),\n arrString(data, 'bank_account_name'),\n arrString(data, 'routing_number'),\n arrString(data, 'account_number'),\n arrString(data, 'ownership_type'),\n arrString(data, 'account_type'),\n arrString(data, 'bank_name'),\n )\n }\n}\n","import { arrInt, arrObjectFrom, arrString } from '../support/arr.js'\nimport { RecurringPaymentMethod } from './recurring-payment-method.js'\nimport { TransactionAddress } from './transaction-address.js'\n\ntype Raw = Record<string, unknown>\n\nexport class RecurringPayment {\n constructor(\n public readonly id?: number,\n public readonly name?: string,\n public readonly amount?: string,\n public readonly startDate?: string,\n public readonly endDate?: string,\n public readonly recurrenceSchedule?: string,\n public readonly lastRunDate?: string,\n public readonly lastRunStatus?: string,\n public readonly lastRunFailedCount?: number,\n public readonly nextRunDate?: string,\n public readonly status?: string,\n public readonly pausedUntilDate?: string,\n public readonly customerUuid?: string,\n public readonly cancelledAt?: string,\n public readonly error?: string,\n public readonly paymentMethod: RecurringPaymentMethod = new RecurringPaymentMethod(),\n public readonly shippingAddress: TransactionAddress = new TransactionAddress(),\n ) {}\n\n static fromRaw(data: Raw): RecurringPayment {\n return new RecurringPayment(\n arrInt(data, 'id'),\n arrString(data, 'name'),\n arrString(data, 'amount'),\n arrString(data, 'start_date'),\n arrString(data, 'end_date'),\n arrString(data, 'recurrence_schedule'),\n arrString(data, 'last_run_date'),\n arrString(data, 'last_run_status'),\n arrInt(data, 'last_run_failed_count'),\n arrString(data, 'next_run_date'),\n arrString(data, 'status'),\n arrString(data, 'paused_until_date'),\n arrString(data, 'customer_uuid'),\n arrString(data, 'cancelled_at'),\n arrString(data, 'error'),\n RecurringPaymentMethod.fromRaw(arrObjectFrom(data, ['payment_method'])),\n TransactionAddress.fromRaw(arrObjectFrom(data, ['shipping_address'])),\n )\n }\n}\n","import { MessageResult } from '../data-objects/message-result.js'\nimport { RecurringPayment } from '../data-objects/recurring-payment.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\nexport class RecurringPayments extends AbstractResource {\n async list(sid: string, filters: Raw = {}): Promise<CursorPage<RecurringPayment>> {\n return this.paginate(\n 'GET',\n 'recurring-payment/list',\n this.envelope({ sid }, filters),\n RecurringPayment.fromRaw,\n )\n }\n\n async show(sid: string, recurringPaymentId: number | string): Promise<RecurringPayment> {\n const raw = await this.transport.request(\n 'GET',\n 'recurring-payment/show',\n this.envelope({ sid, recurring_payment_id: recurringPaymentId }),\n )\n return RecurringPayment.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async create(sid: string, attributes: Raw): Promise<RecurringPayment> {\n const raw = await this.transport.request(\n 'POST',\n 'recurring-payment/create',\n this.envelope({ sid, ...attributes }),\n )\n return RecurringPayment.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async edit(\n sid: string,\n recurringPaymentId: number | string,\n attributes: Raw,\n ): Promise<RecurringPayment> {\n const raw = await this.transport.request(\n 'PATCH',\n 'recurring-payment/edit',\n this.envelope({ sid, recurring_payment_id: recurringPaymentId, ...attributes }),\n )\n return RecurringPayment.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async pause(\n sid: string,\n recurringPaymentId: number | string,\n pauseUntilDate?: string,\n ): Promise<RecurringPayment> {\n const raw = await this.transport.request(\n 'PATCH',\n 'recurring-payment/pause',\n this.envelope({\n sid,\n recurring_payment_id: recurringPaymentId,\n pause_until_date: pauseUntilDate,\n }),\n )\n return RecurringPayment.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async cancel(sid: string, recurringPaymentId: number | string): Promise<RecurringPayment> {\n const raw = await this.transport.request(\n 'PATCH',\n 'recurring-payment/cancel',\n this.envelope({ sid, recurring_payment_id: recurringPaymentId }),\n )\n return RecurringPayment.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async activate(sid: string, recurringPaymentId: number | string): Promise<RecurringPayment> {\n const raw = await this.transport.request(\n 'PATCH',\n 'recurring-payment/activate',\n this.envelope({ sid, recurring_payment_id: recurringPaymentId }),\n )\n return RecurringPayment.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async delete(sid: string, recurringPaymentId: number | string): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'POST',\n 'recurring-payment/delete',\n this.envelope({ sid, recurring_payment_id: recurringPaymentId }),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class TokenizeResult {\n constructor(public readonly token?: string) {}\n\n static fromRaw(data: Raw): TokenizeResult {\n return new TokenizeResult(arrString(data, 'token'))\n }\n}\n","import { MessageResult } from '../data-objects/message-result.js'\nimport { TokenizeResult } from '../data-objects/tokenize-result.js'\nimport { Transaction } from '../data-objects/transaction.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Transactions extends AbstractResource {\n async list(sid: string, filters: Raw = {}): Promise<CursorPage<Transaction>> {\n return this.paginate(\n 'GET',\n 'transactions',\n this.envelope({ sid }, filters),\n Transaction.fromRaw,\n )\n }\n\n async show(sid: string, identifier: Raw): Promise<Transaction> {\n const raw = await this.transport.request(\n 'GET',\n 'transaction',\n this.envelope({ sid, ...identifier }),\n )\n return Transaction.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async chargeCard(sid: string, attributes: Raw): Promise<Transaction> {\n const raw = await this.transport.request(\n 'POST',\n 'transaction/charge-card',\n this.envelope({ sid, ...attributes }),\n )\n return Transaction.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** @deprecated The API marks this deprecated; prefer chargeCard() with a token. */\n async chargeCardToken(sid: string, attributes: Raw): Promise<Transaction> {\n const raw = await this.transport.request(\n 'POST',\n 'transaction/charge-card-token',\n this.envelope({ sid, ...attributes }),\n )\n return Transaction.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async chargeAch(sid: string, attributes: Raw): Promise<Transaction> {\n const raw = await this.transport.request(\n 'POST',\n 'transaction/charge-ach',\n this.envelope({ sid, ...attributes }),\n )\n return Transaction.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async tokenizeCard(sid: string, attributes: Raw): Promise<TokenizeResult> {\n const raw = await this.transport.request(\n 'POST',\n 'transaction/tokenize-card',\n this.envelope({ sid, ...attributes }),\n )\n return TokenizeResult.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async refund(sid: string, attributes: Raw): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'POST',\n 'transaction/refund',\n this.envelope({ sid, ...attributes }),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n\n async void(\n sid: string,\n transactionType: string,\n transactionId: number | string,\n ): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'PATCH',\n 'transaction/void',\n this.envelope({ sid, transaction_type: transactionType, transaction_id: transactionId }),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n}\n","import { Config, DEFAULT_BASE_URL } from './config.js'\nimport { Transport } from './http/transport.js'\nimport { Addresses } from './resources/addresses.js'\nimport { Customers } from './resources/customers.js'\nimport { Deposits } from './resources/deposits.js'\nimport { Invoices } from './resources/invoices.js'\nimport { Merchants } from './resources/merchants.js'\nimport { PaymentMethods } from './resources/payment-methods.js'\nimport { RecurringInvoices } from './resources/recurring-invoices.js'\nimport { RecurringPayments } from './resources/recurring-payments.js'\nimport { Transactions } from './resources/transactions.js'\n\n/**\n * Entry point for the Dime Payments API.\n *\n * ```ts\n * const dime = new Client('your-api-token')\n * const txn = await dime.transactions.chargeCard('000010', {\n * amount: '49.99',\n * token: 'tok_abc123',\n * })\n * ```\n */\nexport class Client {\n readonly transactions: Transactions\n readonly customers: Customers\n readonly paymentMethods: PaymentMethods\n readonly merchants: Merchants\n readonly addresses: Addresses\n readonly deposits: Deposits\n readonly recurringPayments: RecurringPayments\n readonly invoices: Invoices\n readonly recurringInvoices: RecurringInvoices\n\n private readonly _config: Config\n\n constructor(token: string | Config, baseUrl: string = DEFAULT_BASE_URL) {\n this._config = token instanceof Config ? token : new Config(token, baseUrl)\n\n const transport = new Transport(this._config)\n\n this.transactions = new Transactions(transport)\n this.customers = new Customers(transport)\n this.paymentMethods = new PaymentMethods(transport)\n this.merchants = new Merchants(transport)\n this.addresses = new Addresses(transport)\n this.deposits = new Deposits(transport)\n this.recurringPayments = new RecurringPayments(transport)\n this.invoices = new Invoices(transport)\n this.recurringInvoices = new RecurringInvoices(transport)\n }\n\n config(): Config {\n return this._config\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/config.ts","../src/exceptions/dime-exception.ts","../src/exceptions/validation-exception.ts","../src/exceptions/rate-limit-exception.ts","../src/exceptions/api-exception.ts","../src/exceptions/authentication-exception.ts","../src/exceptions/permission-denied-exception.ts","../src/exceptions/not-found-exception.ts","../src/exceptions/server-exception.ts","../src/exceptions/connection-exception.ts","../src/http/error-handler.ts","../src/http/transport.ts","../src/support/arr.ts","../src/data-objects/address.ts","../src/data-objects/message-result.ts","../src/pagination/cursor-page.ts","../src/resources/abstract-resource.ts","../src/resources/addresses.ts","../src/data-objects/chargeback.ts","../src/resources/chargebacks.ts","../src/data-objects/customer.ts","../src/resources/customers.ts","../src/data-objects/deposit.ts","../src/data-objects/transaction-address.ts","../src/data-objects/transaction.ts","../src/data-objects/deposit-with-transactions.ts","../src/data-objects/deposit-group.ts","../src/resources/deposits.ts","../src/data-objects/document-upload-failure.ts","../src/data-objects/merchant-document.ts","../src/data-objects/document-upload-result.ts","../src/resources/documents.ts","../src/data-objects/fund-release.ts","../src/data-objects/fund-release-result.ts","../src/data-objects/held-balance.ts","../src/data-objects/releasable-transaction.ts","../src/data-objects/releasable-transactions.ts","../src/resources/funds.ts","../src/data-objects/cover-fee-quote.ts","../src/data-objects/invoice-customer.ts","../src/data-objects/invoice-event.ts","../src/data-objects/invoice-line-item.ts","../src/data-objects/invoice-payment.ts","../src/data-objects/invoice.ts","../src/data-objects/invoice-item.ts","../src/data-objects/invoice-link.ts","../src/resources/invoices.ts","../src/data-objects/application-status.ts","../src/data-objects/form-link.ts","../src/data-objects/merchant.ts","../src/resources/merchants.ts","../src/data-objects/payment-method.ts","../src/resources/payment-methods.ts","../src/data-objects/recurring-invoice.ts","../src/resources/recurring-invoices.ts","../src/data-objects/recurring-payment-method.ts","../src/data-objects/recurring-payment.ts","../src/resources/recurring-payments.ts","../src/data-objects/subscribe-result.ts","../src/data-objects/subscription-item.ts","../src/data-objects/subscription-plan.ts","../src/resources/subscription-plans.ts","../src/data-objects/subscription.ts","../src/resources/subscriptions.ts","../src/data-objects/tokenize-result.ts","../src/resources/transactions.ts","../src/client.ts"],"sourcesContent":["export const DEFAULT_BASE_URL = 'https://app.dimepayments.com'\nexport const VERSION = '1.4.0'\n\nexport interface ConfigOptions {\n /** Sanctum personal access token (sent as Bearer). */\n token: string\n /** Base URL; defaults to https://app.dimepayments.com. */\n baseUrl?: string\n /** Per-request timeout in seconds. Default 30. */\n timeout?: number\n /** How many times to retry 429/5xx/network errors. Default 2. */\n maxRetries?: number\n /** Base seconds for exponential backoff. Default 0.5. */\n retryBaseDelay?: number\n /** Custom fetch implementation — inject a mock in tests. */\n fetch?: typeof globalThis.fetch\n /** Custom sleep implementation — inject a no-op in tests to skip delays. */\n sleep?: (ms: number) => Promise<void>\n}\n\nexport class Config {\n readonly token: string\n readonly baseUrl: string\n readonly timeout: number\n readonly maxRetries: number\n readonly retryBaseDelay: number\n readonly fetch?: typeof globalThis.fetch\n readonly sleep?: (ms: number) => Promise<void>\n\n constructor(options: ConfigOptions | string, baseUrl?: string) {\n if (typeof options === 'string') {\n this.token = options\n this.baseUrl = baseUrl ?? DEFAULT_BASE_URL\n this.timeout = 30\n this.maxRetries = 2\n this.retryBaseDelay = 0.5\n } else {\n this.token = options.token\n this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL\n this.timeout = options.timeout ?? 30\n this.maxRetries = options.maxRetries ?? 2\n this.retryBaseDelay = options.retryBaseDelay ?? 0.5\n this.fetch = options.fetch\n this.sleep = options.sleep\n }\n }\n\n baseUri(): string {\n return `${this.baseUrl.replace(/\\/$/, '')}/api/`\n }\n}\n","export class DimeException extends Error {\n constructor(\n message: string,\n public readonly statusCode?: number,\n public readonly responseBody: Record<string, unknown> = {},\n cause?: unknown,\n ) {\n super(message, { cause })\n this.name = this.constructor.name\n Object.setPrototypeOf(this, new.target.prototype)\n }\n\n getStatusCode(): number | undefined {\n return this.statusCode\n }\n\n getResponseBody(): Record<string, unknown> {\n return this.responseBody\n }\n}\n","import { DimeException } from './dime-exception.js'\n\nexport class ValidationException extends DimeException {\n constructor(\n message: string,\n public readonly errors: Record<string, string[]> = {},\n statusCode?: number,\n responseBody: Record<string, unknown> = {},\n cause?: unknown,\n ) {\n super(message, statusCode, responseBody, cause)\n }\n\n getErrors(): Record<string, string[]> {\n return this.errors\n }\n\n firstError(): string | undefined {\n for (const messages of Object.values(this.errors)) {\n if (messages.length > 0) return messages[0]\n }\n return undefined\n }\n}\n","import { DimeException } from './dime-exception.js'\n\nexport class RateLimitException extends DimeException {\n constructor(\n message: string,\n public readonly retryAfter?: number,\n statusCode = 429,\n responseBody: Record<string, unknown> = {},\n cause?: unknown,\n ) {\n super(message, statusCode, responseBody, cause)\n }\n\n getRetryAfter(): number | undefined {\n return this.retryAfter\n }\n}\n","import { DimeException } from './dime-exception.js'\n\nexport class ApiException extends DimeException {}\n","import { DimeException } from './dime-exception.js'\n\nexport class AuthenticationException extends DimeException {}\n","import { DimeException } from './dime-exception.js'\n\nexport class PermissionDeniedException extends DimeException {}\n","import { DimeException } from './dime-exception.js'\n\nexport class NotFoundException extends DimeException {}\n","import { DimeException } from './dime-exception.js'\n\nexport class ServerException extends DimeException {}\n","import { DimeException } from './dime-exception.js'\n\nexport class ConnectionException extends DimeException {}\n","import {\n ApiException,\n AuthenticationException,\n NotFoundException,\n PermissionDeniedException,\n RateLimitException,\n ServerException,\n ValidationException,\n} from '../exceptions/index.js'\n\ntype Raw = Record<string, unknown>\n\nfunction looksLikeValidation(status: number, body: Raw): boolean {\n if (\n body['errors'] !== undefined &&\n typeof body['errors'] === 'object' &&\n !Array.isArray(body['errors'])\n ) {\n return true\n }\n return (\n (status === 400 || status === 422) &&\n body['message'] !== undefined &&\n typeof body['message'] === 'object' &&\n !Array.isArray(body['message'])\n )\n}\n\nfunction extractErrors(body: Raw): Record<string, string[]> {\n const raw = body['errors'] ?? body['message']\n if (raw === null || raw === undefined || typeof raw !== 'object' || Array.isArray(raw)) {\n return {}\n }\n\n const errors: Record<string, string[]> = {}\n for (const [field, messages] of Object.entries(raw as Record<string, unknown>)) {\n errors[field] = Array.isArray(messages) ? messages.map(String) : [String(messages)]\n }\n return errors\n}\n\nfunction extractMessage(body: Raw): string | undefined {\n const data = body['data']\n if (data !== null && data !== undefined && typeof data === 'object' && !Array.isArray(data)) {\n const msg = (data as Raw)['message']\n if (typeof msg === 'string') return msg\n }\n if (typeof body['message'] === 'string') return body['message']\n return undefined\n}\n\nfunction firstMessage(errors: Record<string, string[]>): string | undefined {\n for (const messages of Object.values(errors)) {\n if (messages.length > 0) return messages[0]\n }\n return undefined\n}\n\nexport function handleError(status: number, body: Raw, retryAfter?: number): never {\n if (looksLikeValidation(status, body)) {\n const errors = extractErrors(body)\n throw new ValidationException(\n firstMessage(errors) ?? 'The given data was invalid.',\n errors,\n status,\n body,\n )\n }\n\n const message = extractMessage(body) ?? `Dime API request failed with status ${status}.`\n\n if (status === 401) throw new AuthenticationException(message, status, body)\n if (status === 403) throw new PermissionDeniedException(message, status, body)\n if (status === 404) throw new NotFoundException(message, status, body)\n if (status === 429) throw new RateLimitException(message, retryAfter, status, body)\n if (status >= 500) throw new ServerException(message, status, body)\n throw new ApiException(message, status, body)\n}\n","import { Config, VERSION } from '../config.js'\nimport { ConnectionException } from '../exceptions/index.js'\nimport { handleError } from './error-handler.js'\n\ntype Raw = Record<string, unknown>\n\nexport interface MultipartFile {\n /** The form field name, e.g. `files[]`. */\n field: string\n content: Blob\n filename: string\n}\n\nexport class Transport {\n private readonly fetchFn: typeof globalThis.fetch\n private readonly sleepFn: (ms: number) => Promise<void>\n\n constructor(private readonly config: Config) {\n this.fetchFn = config.fetch ?? globalThis.fetch\n this.sleepFn = config.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)))\n }\n\n /**\n * Execute a request and return the decoded JSON body.\n *\n * The Dime API reads the same `{ data, filters }` envelope whether it arrives\n * as a JSON body or as nested query parameters. The Fetch standard forbids a\n * body on GET/HEAD (undici throws), so for those methods the envelope is\n * serialised into the query string (`data[sid]=…&filters[status]=…`) and no\n * body is sent; every other method sends the envelope as a JSON body.\n */\n async request(\n method: string,\n path: string,\n body: Raw = {},\n query: Record<string, string> = {},\n ): Promise<Raw> {\n let url = `${this.config.baseUri()}${path.replace(/^\\//, '')}`\n\n const bodyless = method.toUpperCase() === 'GET' || method.toUpperCase() === 'HEAD'\n\n const params: Record<string, string> = { ...query }\n if (bodyless) Object.assign(params, flattenParams(body))\n\n if (Object.keys(params).length > 0) {\n url += '?' + new URLSearchParams(params).toString()\n }\n\n const sendBody = !bodyless && Object.keys(body).length > 0\n const headers = this.headers()\n // Only advertise a JSON body when we actually send one; otherwise the API\n // tries to parse the empty body and rejects the request with \"Invalid JSON\".\n if (sendBody) headers['Content-Type'] = 'application/json'\n\n const init: RequestInit = {\n method,\n headers,\n ...(sendBody ? { body: JSON.stringify(body) } : {}),\n }\n\n return this.attempt(url, init, 0)\n }\n\n /**\n * Execute a `multipart/form-data` request and return the decoded JSON body.\n *\n * Multipart has no JSON parsing, so the envelope is sent as bracketed form\n * fields (`data[sid]=…`) — a single `data` field holding JSON would be read\n * as a plain string. No Content-Type is set here: fetch derives it, boundary\n * included, from the FormData body.\n */\n async requestMultipart(\n method: string,\n path: string,\n body: Raw,\n files: MultipartFile[],\n ): Promise<Raw> {\n const url = `${this.config.baseUri()}${path.replace(/^\\//, '')}`\n\n const form = new FormData()\n for (const [name, value] of Object.entries(flattenParams(body))) {\n form.append(name, value)\n }\n for (const file of files) {\n form.append(file.field, file.content, file.filename)\n }\n\n return this.attempt(url, { method, headers: this.headers(), body: form }, 0)\n }\n\n private headers(): Record<string, string> {\n return {\n Authorization: `Bearer ${this.config.token}`,\n Accept: 'application/json',\n 'X-Dime-Sdk': `dime-js-sdk/${VERSION}`,\n }\n }\n\n private async attempt(url: string, init: RequestInit, attempt: number): Promise<Raw> {\n let response: Response\n\n try {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), this.config.timeout * 1_000)\n try {\n response = await this.fetchFn(url, { ...init, signal: controller.signal })\n } finally {\n clearTimeout(timer)\n }\n } catch (err) {\n const isAbort = err instanceof Error && err.name === 'AbortError'\n const label = isAbort\n ? `Request timed out after ${this.config.timeout}s`\n : `Could not reach the Dime API: ${err instanceof Error ? err.message : String(err)}`\n\n if (attempt < this.config.maxRetries) {\n await this.sleep(attempt, undefined)\n return this.attempt(url, init, attempt + 1)\n }\n\n throw new ConnectionException(label, undefined, {}, err instanceof Error ? err : undefined)\n }\n\n const status = response.status\n\n if ((status === 429 || status >= 500) && attempt < this.config.maxRetries) {\n const retryAfter = parseRetryAfter(response)\n await this.sleep(attempt, retryAfter)\n return this.attempt(url, init, attempt + 1)\n }\n\n const decoded = await decode(response)\n\n if (status < 200 || status >= 300) {\n handleError(status, decoded, parseRetryAfter(response))\n }\n\n return decoded\n }\n\n private async sleep(attempt: number, retryAfter: number | undefined): Promise<void> {\n const ms =\n retryAfter !== undefined\n ? retryAfter * 1_000\n : Math.min(2 ** attempt * this.config.retryBaseDelay * 1_000, 30_000)\n await this.sleepFn(ms)\n }\n}\n\n/**\n * Flatten a nested envelope into PHP-style bracketed query pairs, e.g.\n * `{ data: { sid: '1' }, filters: { status: 'all' } }` becomes\n * `{ 'data[sid]': '1', 'filters[status]': 'all' }`. Booleans follow the same\n * '1'/'0' convention the API uses elsewhere; null/undefined are dropped.\n */\nfunction flattenParams(obj: Raw, prefix = ''): Record<string, string> {\n const out: Record<string, string> = {}\n\n for (const [key, value] of Object.entries(obj)) {\n if (value === null || value === undefined) continue\n\n const name = prefix ? `${prefix}[${key}]` : key\n\n if (Array.isArray(value)) {\n value.forEach((item, i) => {\n Object.assign(out, flattenParams({ [i]: item }, name))\n })\n } else if (typeof value === 'object') {\n Object.assign(out, flattenParams(value as Raw, name))\n } else {\n out[name] = typeof value === 'boolean' ? (value ? '1' : '0') : String(value)\n }\n }\n\n return out\n}\n\nfunction parseRetryAfter(response: Response): number | undefined {\n const header = response.headers.get('Retry-After')\n if (header !== null && /^\\d+$/.test(header)) return parseInt(header, 10)\n return undefined\n}\n\nasync function decode(response: Response): Promise<Raw> {\n const text = await response.text()\n if (!text) return {}\n\n try {\n const parsed: unknown = JSON.parse(text)\n if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {\n return parsed as Raw\n }\n return { message: text }\n } catch {\n return { message: text }\n }\n}\n","type Raw = Record<string, unknown>\n\nexport function arrString(data: Raw, key: string): string | undefined {\n const value = data[key]\n if (value === null || value === undefined || Array.isArray(value)) return undefined\n if (typeof value === 'boolean') return value ? '1' : '0'\n return String(value)\n}\n\nexport function arrStringFrom(data: Raw, keys: string[]): string | undefined {\n for (const key of keys) {\n if (key in data && data[key] !== null && data[key] !== undefined) {\n return arrString(data, key)\n }\n }\n return undefined\n}\n\nexport function arrInt(data: Raw, key: string): number | undefined {\n const value = data[key]\n if (value === null || value === undefined) return undefined\n const n = Number(value)\n return Number.isNaN(n) ? undefined : Math.trunc(n)\n}\n\nexport function arrBool(data: Raw, key: string, defaultValue = false): boolean {\n const value = data[key]\n return value === null || value === undefined ? defaultValue : Boolean(value)\n}\n\nexport function arrObjectFrom(data: Raw, keys: string[]): Raw {\n for (const key of keys) {\n const value = data[key]\n if (\n value !== null &&\n value !== undefined &&\n typeof value === 'object' &&\n !Array.isArray(value)\n ) {\n return value as Raw\n }\n }\n return {}\n}\n\nexport function arrArrayFrom(data: Raw, key: string): Raw[] {\n const value = data[key]\n if (Array.isArray(value)) return value as Raw[]\n return []\n}\n","import { arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Address {\n constructor(\n public readonly id?: number,\n public readonly recipient?: string,\n public readonly lineOne?: string,\n public readonly lineTwo?: string,\n public readonly lineThree?: string,\n public readonly city?: string,\n public readonly state?: string,\n public readonly zip?: string,\n ) {}\n\n static fromRaw(data: Raw): Address {\n return new Address(\n // show returns address_id; list returns id\n arrInt(data, 'address_id') ?? arrInt(data, 'id'),\n arrString(data, 'recipient'),\n arrString(data, 'line_one'),\n arrString(data, 'line_two'),\n arrString(data, 'line_three'),\n arrString(data, 'city'),\n arrString(data, 'state'),\n arrString(data, 'zip'),\n )\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class MessageResult {\n constructor(public readonly message?: string) {}\n\n static fromRaw(data: Raw): MessageResult {\n return new MessageResult(arrString(data, 'message'))\n }\n}\n","export type PageFetcher<T> = (cursor: string) => Promise<CursorPage<T>>\n\nexport class CursorPage<T> {\n constructor(\n public readonly data: T[],\n public readonly nextCursor?: string,\n public readonly prevCursor?: string,\n public readonly perPage?: number,\n public readonly path?: string,\n private readonly fetcher?: PageFetcher<T>,\n ) {}\n\n hasMore(): boolean {\n return this.nextCursor !== undefined && this.fetcher !== undefined\n }\n\n async next(): Promise<CursorPage<T> | null> {\n if (!this.hasMore() || this.nextCursor === undefined || this.fetcher === undefined) {\n return null\n }\n return this.fetcher(this.nextCursor)\n }\n\n /** Lazily iterate every item across all remaining pages. */\n async *autoPaging(): AsyncGenerator<T> {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let page: CursorPage<T> | null = this\n while (page !== null) {\n for (const item of page.data) {\n yield item\n }\n page = await page.next()\n }\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.data[Symbol.iterator]()\n }\n\n get length(): number {\n return this.data.length\n }\n}\n","import { Transport } from '../http/transport.js'\nimport { CursorPage, type PageFetcher } from '../pagination/cursor-page.js'\n\ntype Raw = Record<string, unknown>\n\nexport abstract class AbstractResource {\n constructor(protected readonly transport: Transport) {}\n\n /**\n * Build the standard Dime request envelope, dropping null/undefined values.\n */\n protected envelope(data: Raw = {}, filters: Raw = {}): Raw {\n const body: Raw = {}\n\n const prunedData = pruneNulls(data)\n if (Object.keys(prunedData).length > 0) body['data'] = prunedData\n\n const prunedFilters = pruneNulls(filters)\n if (Object.keys(prunedFilters).length > 0) body['filters'] = prunedFilters\n\n return body\n }\n\n protected async paginate<T>(\n method: string,\n path: string,\n body: Raw,\n map: (item: Raw) => T,\n query: Record<string, string> = {},\n ): Promise<CursorPage<T>> {\n const raw = await this.transport.request(method, path, body, query)\n\n const items = Array.isArray(raw['data']) ? (raw['data'] as Raw[]) : []\n const meta =\n raw['meta'] !== null && typeof raw['meta'] === 'object' && !Array.isArray(raw['meta'])\n ? (raw['meta'] as Raw)\n : {}\n\n const nextCursor = extractCursor(meta, 'next_cursor')\n const prevCursor = extractCursor(meta, 'prev_cursor')\n\n const fetcher: PageFetcher<T> = (cursor) => this.paginate(method, path, body, map, { cursor })\n\n return new CursorPage<T>(\n items.map(map),\n nextCursor,\n prevCursor,\n typeof meta['per_page'] === 'number' ? (meta['per_page'] as number) : undefined,\n typeof meta['path'] === 'string' ? (meta['path'] as string) : undefined,\n nextCursor !== undefined ? fetcher : undefined,\n )\n }\n}\n\nfunction extractCursor(meta: Raw, key: string): string | undefined {\n const v = meta[key]\n return typeof v === 'string' && v !== '' ? v : undefined\n}\n\nfunction pruneNulls(obj: Raw): Raw {\n return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== null && v !== undefined))\n}\n","import { Address } from '../data-objects/address.js'\nimport { MessageResult } from '../data-objects/message-result.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Addresses extends AbstractResource {\n async list(sid: string, uuid: string): Promise<CursorPage<Address>> {\n return this.paginate('GET', 'address/list', this.envelope({ sid, uuid }), Address.fromRaw)\n }\n\n async show(sid: string, uuid: string, addressId: number | string): Promise<Address> {\n const raw = await this.transport.request(\n 'GET',\n 'address/show',\n this.envelope({ sid, uuid, address_id: addressId }),\n )\n return Address.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async create(sid: string, uuid: string, attributes: Raw): Promise<Address> {\n const raw = await this.transport.request(\n 'POST',\n 'address/create',\n this.envelope({ sid, uuid, ...attributes }),\n )\n return Address.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async update(\n sid: string,\n uuid: string,\n addressId: number | string,\n attributes: Raw,\n ): Promise<Address> {\n const raw = await this.transport.request(\n 'PATCH',\n 'address/update',\n this.envelope({ sid, uuid, address_id: addressId, ...attributes }),\n )\n return Address.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async delete(sid: string, uuid: string, addressId: number | string): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'POST',\n 'address/delete',\n this.envelope({ sid, uuid, address_id: addressId }),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n}\n","import { arrBool, arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * A chargeback raised against a merchant, as of the processor's most recent\n * daily file. The same shape the `chargeback_*` webhooks carry.\n *\n * `transactionInfoId` identifies the chargeback itself; the disputed payment is\n * `parentTransactionInfoId`. Amounts are kept as strings to avoid float rounding.\n */\nexport class Chargeback {\n constructor(\n public readonly transactionInfoId?: string,\n public readonly parentTransactionInfoId?: string,\n public readonly gatewayTransactionId?: string,\n public readonly transactionNumber?: string,\n public readonly invoiceNumber?: string,\n public readonly chargebackDate?: string,\n public readonly merchantChargebackDate?: string,\n public readonly transactionAmount?: string,\n public readonly chargebackAmount?: string,\n public readonly cardBrand?: string,\n public readonly ccLastFour?: string,\n public readonly payeeName?: string,\n public readonly daysToRepresent?: number,\n public readonly representmentDate?: string,\n public readonly merchantRepresentmentDate?: string,\n public readonly representmentStatus?: string,\n public readonly result?: string,\n public readonly chargebackCode?: string,\n public readonly chargebackResponseCode?: string,\n public readonly resolved: boolean = false,\n ) {}\n\n static fromRaw(data: Raw): Chargeback {\n return new Chargeback(\n arrString(data, 'transaction_info_id'),\n arrString(data, 'parent_transaction_info_id'),\n arrString(data, 'gateway_transaction_id'),\n arrString(data, 'transaction_number'),\n arrString(data, 'invoice_number'),\n arrString(data, 'chargeback_date'),\n arrString(data, 'merchant_chargeback_date'),\n arrString(data, 'transaction_amount'),\n arrString(data, 'chargeback_amount'),\n arrString(data, 'card_brand'),\n arrString(data, 'cc_last_four'),\n arrString(data, 'payee_name'),\n arrInt(data, 'days_to_represent'),\n arrString(data, 'representment_date'),\n arrString(data, 'merchant_representment_date'),\n arrString(data, 'representment_status'),\n arrString(data, 'result'),\n arrString(data, 'chargeback_code'),\n arrString(data, 'chargeback_response_code'),\n arrBool(data, 'resolved'),\n )\n }\n}\n","import { Chargeback } from '../data-objects/chargeback.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * Chargebacks raised against a merchant. Needs the `chargeback:read` ability.\n *\n * The data arrives in a once-daily file from the processor, so it reflects the\n * latest import rather than live dispute activity. Pair it with the\n * `chargeback_opened` / `chargeback_updated` / `chargeback_resolved` webhooks\n * and use these endpoints to reconcile or backfill.\n */\nexport class Chargebacks extends AbstractResource {\n /**\n * List a merchant's chargebacks.\n *\n * @param filters `start_date` and `end_date` (UTC, `Y-m-d H:i:s`, sent\n * together), `representment_status` (free text from the processor, e.g.\n * `New` or `Resolved`)\n */\n async list(sid: string, filters: Raw = {}): Promise<CursorPage<Chargeback>> {\n return this.paginate(\n 'GET',\n 'chargeback/list',\n this.envelope({ sid }, filters),\n Chargeback.fromRaw,\n )\n }\n\n async show(sid: string, transactionInfoId: string): Promise<Chargeback> {\n const raw = await this.transport.request(\n 'GET',\n 'chargeback/show',\n this.envelope({ sid, transaction_info_id: transactionInfoId }),\n )\n return Chargeback.fromRaw((raw['data'] as Raw) ?? {})\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Customer {\n constructor(\n public readonly uuid?: string,\n public readonly firstName?: string,\n public readonly lastName?: string,\n public readonly phone?: string,\n public readonly email?: string,\n public readonly addr1?: string,\n public readonly addr2?: string,\n public readonly addr3?: string,\n public readonly city?: string,\n public readonly state?: string,\n public readonly zip?: string,\n public readonly country?: string,\n ) {}\n\n static fromRaw(data: Raw): Customer {\n return new Customer(\n arrString(data, 'uuid'),\n arrString(data, 'first_name'),\n arrString(data, 'last_name'),\n arrString(data, 'phone'),\n arrString(data, 'email'),\n arrString(data, 'addr1'),\n arrString(data, 'addr2'),\n arrString(data, 'addr3'),\n arrString(data, 'city'),\n arrString(data, 'state'),\n arrString(data, 'zip'),\n arrString(data, 'country'),\n )\n }\n}\n","import { Customer } from '../data-objects/customer.js'\nimport { MessageResult } from '../data-objects/message-result.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Customers extends AbstractResource {\n async list(sid: string, filters: Raw = {}): Promise<CursorPage<Customer>> {\n return this.paginate('GET', 'customer/list', this.envelope({ sid }, filters), Customer.fromRaw)\n }\n\n async show(sid: string, filters: Raw): Promise<Customer> {\n const raw = await this.transport.request(\n 'GET',\n 'customer/show',\n this.envelope({ sid }, filters),\n )\n return Customer.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async create(sid: string, attributes: Raw): Promise<Customer> {\n const raw = await this.transport.request(\n 'POST',\n 'customer/create',\n this.envelope({ sid, ...attributes }),\n )\n return Customer.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async update(sid: string, filters: Raw, attributes: Raw): Promise<Customer> {\n const raw = await this.transport.request(\n 'PATCH',\n 'customer/update',\n this.envelope({ sid, ...attributes }, filters),\n )\n return Customer.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async delete(sid: string, filters: Raw): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'POST',\n 'customer/delete',\n this.envelope({ sid }, filters),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Deposit {\n constructor(\n public readonly transactionDate?: string,\n public readonly fundDate?: string,\n public readonly transactionInfoId?: string,\n public readonly transactionId?: string,\n public readonly transactionDetailAccount?: string,\n public readonly authorizationAmount?: string,\n public readonly netAmount?: string,\n public readonly sweepId?: string,\n public readonly type?: string,\n ) {}\n\n static fromRaw(data: Raw): Deposit {\n return new Deposit(\n arrString(data, 'transaction_date'),\n arrString(data, 'fund_date'),\n arrString(data, 'transaction_info_id'),\n arrString(data, 'transaction_id'),\n arrString(data, 'transaction_detail_account'),\n arrString(data, 'authorization_amount'),\n arrString(data, 'net_amount'),\n arrString(data, 'sweep_id'),\n arrString(data, 'type'),\n )\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class TransactionAddress {\n constructor(\n public readonly firstName?: string,\n public readonly lastName?: string,\n public readonly addr1?: string,\n public readonly addr2?: string,\n public readonly city?: string,\n public readonly state?: string,\n public readonly zip?: string,\n ) {}\n\n static fromRaw(data: Raw): TransactionAddress {\n return new TransactionAddress(\n arrString(data, 'first_name'),\n arrString(data, 'last_name'),\n arrString(data, 'addr1'),\n arrString(data, 'addr2'),\n arrString(data, 'city'),\n arrString(data, 'state'),\n arrString(data, 'zip'),\n )\n }\n}\n","import { arrBool, arrObjectFrom, arrString } from '../support/arr.js'\nimport { TransactionAddress } from './transaction-address.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Transaction {\n constructor(\n public readonly transactionType?: string,\n public readonly transactionStatus?: string,\n public readonly transactionStatusDescription?: string,\n public readonly transactionNumber?: string,\n public readonly transactionDate?: string,\n public readonly fundDate?: string,\n public readonly settleDate?: string,\n public readonly amount?: string,\n public readonly description?: string,\n public readonly statusCode?: string,\n public readonly statusText?: string,\n public readonly email?: string,\n public readonly phone?: string,\n public readonly customerUuid?: string,\n public readonly multiUseToken?: string,\n public readonly pending: boolean = false,\n public readonly transactionInfoId?: string,\n public readonly parentTransactionInfoId?: string,\n public readonly billingAddress: TransactionAddress = new TransactionAddress(),\n public readonly shippingAddress: TransactionAddress = new TransactionAddress(),\n ) {}\n\n static fromRaw(data: Raw): Transaction {\n return new Transaction(\n arrString(data, 'transaction_type'),\n arrString(data, 'transaction_status'),\n arrString(data, 'transaction_status_description'),\n arrString(data, 'transaction_number'),\n arrString(data, 'transaction_date'),\n arrString(data, 'fund_date'),\n arrString(data, 'settle_date'),\n arrString(data, 'amount'),\n arrString(data, 'description'),\n arrString(data, 'status_code'),\n arrString(data, 'status_text'),\n arrString(data, 'email'),\n arrString(data, 'phone'),\n arrString(data, 'customer_uuid'),\n arrString(data, 'multi_use_token'),\n arrBool(data, 'pending'),\n arrString(data, 'transaction_info_id'),\n arrString(data, 'parent_transaction_info_id'),\n TransactionAddress.fromRaw(arrObjectFrom(data, ['billing_address'])),\n // The API returns shipping under the camelCase key `shippingAddress`; accept\n // snake_case too in case that is ever corrected server-side.\n TransactionAddress.fromRaw(arrObjectFrom(data, ['shippingAddress', 'shipping_address'])),\n )\n }\n}\n","import { arrInt, arrObjectFrom, arrString } from '../support/arr.js'\nimport { Transaction } from './transaction.js'\n\ntype Raw = Record<string, unknown>\n\nexport class DepositWithTransactions {\n constructor(\n public readonly sid?: string,\n public readonly transactionInfoId?: string,\n public readonly transactionId?: string,\n public readonly transactionDate?: string,\n public readonly fundDate?: string,\n public readonly type?: string,\n public readonly countOfTransactions?: number,\n public readonly transTotal?: string,\n public readonly transactions: Transaction[] = [],\n ) {}\n\n static fromRaw(data: Raw): DepositWithTransactions {\n const txRaw = data['transactions']\n const transactions = Array.isArray(txRaw)\n ? (txRaw as Raw[]).map((t) => Transaction.fromRaw(t))\n : typeof txRaw === 'object' && txRaw !== null\n ? Object.values(txRaw as Record<string, Raw>).map((t) => Transaction.fromRaw(t))\n : []\n\n return new DepositWithTransactions(\n arrString(data, 'sid'),\n arrString(data, 'transaction_info_id'),\n arrString(data, 'transaction_id'),\n arrString(data, 'transaction_date'),\n arrString(data, 'fund_date'),\n arrString(data, 'type'),\n arrInt(data, 'countOfTransactions'),\n arrString(data, 'transTotal'),\n transactions,\n )\n }\n}\n","import { arrInt, arrString } from '../support/arr.js'\nimport { DepositWithTransactions } from './deposit-with-transactions.js'\n\ntype Raw = Record<string, unknown>\n\nexport class DepositGroup {\n constructor(\n public readonly sid?: string,\n public readonly count?: number,\n public readonly deposits: DepositWithTransactions[] = [],\n ) {}\n\n static fromRaw(data: Raw): DepositGroup {\n const depositsRaw = data['deposits']\n const deposits =\n typeof depositsRaw === 'object' && depositsRaw !== null && !Array.isArray(depositsRaw)\n ? Object.values(depositsRaw as Record<string, Raw>).map((d) =>\n DepositWithTransactions.fromRaw(d),\n )\n : []\n\n return new DepositGroup(arrString(data, 'sid'), arrInt(data, 'count'), deposits)\n }\n}\n","import { Deposit } from '../data-objects/deposit.js'\nimport { DepositGroup } from '../data-objects/deposit-group.js'\nimport { DepositWithTransactions } from '../data-objects/deposit-with-transactions.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Deposits extends AbstractResource {\n async list(sid: string, filters: Raw = {}): Promise<CursorPage<Deposit>> {\n return this.paginate('GET', 'deposit/list', this.envelope({ sid }, filters), Deposit.fromRaw)\n }\n\n async listWithTransactions(sid: string, filters: Raw): Promise<DepositGroup> {\n const raw = await this.transport.request(\n 'GET',\n 'deposit/list-with-trans',\n this.envelope({ sid }, filters),\n )\n return DepositGroup.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async show(sid: string, identifier: Raw): Promise<DepositWithTransactions> {\n const raw = await this.transport.request(\n 'GET',\n 'deposit/show',\n this.envelope({ sid, ...identifier }),\n )\n return DepositWithTransactions.fromRaw((raw['data'] as Raw) ?? {})\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class DocumentUploadFailure {\n constructor(\n public readonly fileName?: string,\n public readonly reason?: string,\n ) {}\n\n static fromRaw(data: Raw): DocumentUploadFailure {\n return new DocumentUploadFailure(arrString(data, 'file_name'), arrString(data, 'reason'))\n }\n}\n","import { arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * A document held for a merchant. Named `MerchantDocument` rather than\n * `Document` so it does not shadow the DOM's global `Document` type.\n *\n * The upload response carries only `uuid`, `fileName`, `docType` and `size`;\n * the list response fills in the rest. `sentToProcessorAt` and\n * `processorResponse` stay undefined until our team forwards the document.\n */\nexport class MerchantDocument {\n constructor(\n public readonly uuid?: string,\n public readonly fileName?: string,\n public readonly docType?: string,\n public readonly chargebackTransactionInfoId?: string,\n public readonly size?: number,\n public readonly uploadedAt?: string,\n public readonly uploadedVia?: string,\n public readonly sentToProcessorAt?: string,\n public readonly processorResponse?: string,\n ) {}\n\n static fromRaw(data: Raw): MerchantDocument {\n // `sent_to_processor` is null, or a [when, processor response] pair.\n const sent = Array.isArray(data['sent_to_processor'])\n ? (data['sent_to_processor'] as unknown[])\n : []\n const [sentAt, processorResponse] = sent.map((value) =>\n value === null || value === undefined ? undefined : String(value),\n )\n\n return new MerchantDocument(\n arrString(data, 'uuid'),\n arrString(data, 'file_name'),\n arrString(data, 'doc_type'),\n arrString(data, 'chargeback_transaction_info_id'),\n arrInt(data, 'size'),\n arrString(data, 'uploaded_at'),\n arrString(data, 'uploaded_via'),\n sentAt,\n processorResponse,\n )\n }\n}\n","import { arrArrayFrom, arrString } from '../support/arr.js'\nimport { DocumentUploadFailure } from './document-upload-failure.js'\nimport { MerchantDocument } from './merchant-document.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * The outcome of a document upload. Files are stored independently, so a\n * request can partly succeed: `documents` lists what was stored and `failed`\n * what was not, so only the failures need re-sending.\n */\nexport class DocumentUploadResult {\n constructor(\n public readonly message?: string,\n public readonly documents: MerchantDocument[] = [],\n public readonly failed: DocumentUploadFailure[] = [],\n ) {}\n\n static fromRaw(data: Raw): DocumentUploadResult {\n return new DocumentUploadResult(\n arrString(data, 'message'),\n arrArrayFrom(data, 'documents').map(MerchantDocument.fromRaw),\n arrArrayFrom(data, 'failed').map(DocumentUploadFailure.fromRaw),\n )\n }\n}\n","import { DocumentUploadResult } from '../data-objects/document-upload-result.js'\nimport { MerchantDocument } from '../data-objects/merchant-document.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * A file to upload: a `Blob` or `File`, or raw bytes (a Node `Buffer` from\n * `fs.readFile`, say) with a file name. A bare `Blob` without a name is sent\n * as `document`. The server identifies the type from the content, so\n * `contentType` is optional.\n */\nexport type DocumentFile =\n | Blob\n | { content: Blob | ArrayBuffer | Uint8Array; filename: string; contentType?: string }\n\n/**\n * Documents held for a merchant: underwriting paperwork, identity\n * verification, and evidence contesting a chargeback.\n */\nexport class Documents extends AbstractResource {\n /**\n * Upload up to 10 documents for a merchant (PDF, JPG, PNG, DOC, DOCX or RTF,\n * each 9 MB or smaller). Sent as `multipart/form-data`.\n *\n * Files are stored independently: check `failed` on the result and re-send\n * only those. A 413 means the request as a whole was too large — send fewer\n * files per request.\n *\n * Uploading does not forward the document to the processor; our team\n * reviews it and does that.\n *\n * @param docType `Verification`, `FraudHolds`, `Underwriting` or\n * `RetrievalRequest` (evidence for a chargeback or retrieval request)\n * @param chargebackTransactionInfoId attach the files as evidence to this\n * chargeback (its `transactionInfoId`)\n */\n async upload(\n sid: string,\n docType: string,\n files: DocumentFile[],\n chargebackTransactionInfoId?: string,\n ): Promise<DocumentUploadResult> {\n const raw = await this.transport.requestMultipart(\n 'POST',\n 'document/upload',\n this.envelope({\n sid,\n doc_type: docType,\n chargeback_transaction_info_id: chargebackTransactionInfoId,\n }),\n files.map((file) => ({ field: 'files[]', ...toBlob(file) })),\n )\n return DocumentUploadResult.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * List the documents held for a merchant, whether uploaded through the API,\n * by our team, or through the merchant application.\n *\n * @param filters `doc_type`, `chargeback_transaction_info_id`\n */\n async list(sid: string, filters: Raw = {}): Promise<MerchantDocument[]> {\n const raw = await this.transport.request(\n 'GET',\n 'document/list',\n this.envelope({ sid }, filters),\n )\n const documents = Array.isArray(raw['data']) ? (raw['data'] as Raw[]) : []\n return documents.map(MerchantDocument.fromRaw)\n }\n}\n\nfunction toBlob(file: DocumentFile): { content: Blob; filename: string } {\n if (file instanceof Blob) {\n const name = (file as Blob & { name?: unknown }).name\n return { content: file, filename: typeof name === 'string' && name !== '' ? name : 'document' }\n }\n\n // Cast because TypeScript's BlobPart narrows typed arrays to ArrayBuffer-backed\n // ones, which a Node Buffer (typed over ArrayBufferLike) does not satisfy.\n const content =\n file.content instanceof Blob\n ? file.content\n : new Blob([file.content as BlobPart], file.contentType ? { type: file.contentType } : {})\n\n return { content, filename: file.filename }\n}\n","import { arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * A release of held funds to the merchant's bank account.\n *\n * `status` is `released`, `failed` (declined, nothing moved — see\n * `failureReason`) or `unknown` (no confirmation came back; it may have gone\n * through, and its amount is held back from `releasable` until reconciled).\n * `transactionInfoIds` is empty for a release requested by amount.\n */\nexport class FundRelease {\n constructor(\n public readonly id?: number,\n public readonly amount?: string,\n public readonly fee?: string,\n public readonly status?: string,\n public readonly statusLabel?: string,\n public readonly idempotencyKey?: string,\n public readonly transactionInfoIds: string[] = [],\n public readonly failureReason?: string,\n public readonly requestedAt?: string,\n public readonly completedAt?: string,\n ) {}\n\n static fromRaw(data: Raw): FundRelease {\n const ids = Array.isArray(data['transaction_info_ids'])\n ? (data['transaction_info_ids'] as unknown[]).map(String)\n : []\n\n return new FundRelease(\n arrInt(data, 'id'),\n arrString(data, 'amount'),\n arrString(data, 'fee'),\n arrString(data, 'status'),\n arrString(data, 'status_label'),\n arrString(data, 'idempotency_key'),\n ids,\n arrString(data, 'failure_reason'),\n arrString(data, 'requested_at'),\n arrString(data, 'completed_at'),\n )\n }\n}\n","import { arrBool, arrObjectFrom, arrString } from '../support/arr.js'\nimport { FundRelease } from './fund-release.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * The response to a release request. `replayed` is true when the idempotency\n * key had been used before and the original release is being returned rather\n * than a new one sent.\n */\nexport class FundReleaseResult {\n constructor(\n public readonly sid?: string,\n public readonly replayed: boolean = false,\n public readonly release: FundRelease = new FundRelease(),\n ) {}\n\n static fromRaw(data: Raw): FundReleaseResult {\n return new FundReleaseResult(\n arrString(data, 'sid'),\n arrBool(data, 'replayed'),\n FundRelease.fromRaw(arrObjectFrom(data, ['release'])),\n )\n }\n}\n","import { arrBool, arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * A held-funds merchant's balance at the processor, in dollars.\n *\n * `releasable` is the figure that matters, and the one a release is checked\n * against: `available` less `atRisk`, `owedToSplit`, `unresolved` and\n * `releaseFee`, never below zero and never above `achOutLimitRemaining`.\n *\n * Monetary values are kept as strings to avoid float rounding.\n */\nexport class HeldBalance {\n constructor(\n public readonly sid?: string,\n public readonly available?: string,\n public readonly pending?: string,\n public readonly reserve?: string,\n public readonly atRisk?: string,\n public readonly owedToSplit?: string,\n public readonly unresolved?: string,\n public readonly releaseFee?: string,\n public readonly releasable?: string,\n public readonly achSettlementDays?: number,\n public readonly achOutEnabled: boolean = false,\n public readonly achOutLimitRemaining?: string,\n ) {}\n\n static fromRaw(data: Raw): HeldBalance {\n return new HeldBalance(\n arrString(data, 'sid'),\n arrString(data, 'available'),\n arrString(data, 'pending'),\n arrString(data, 'reserve'),\n arrString(data, 'at_risk'),\n arrString(data, 'owed_to_split'),\n arrString(data, 'unresolved'),\n arrString(data, 'release_fee'),\n arrString(data, 'releasable'),\n arrInt(data, 'ach_settlement_days'),\n arrBool(data, 'ach_out_enabled'),\n arrString(data, 'ach_out_limit_remaining'),\n )\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * A payment that can be released from a held balance. `amount` is what\n * releasing it pays the merchant: `netAmount` less `splitAmount`.\n */\nexport class ReleasableTransaction {\n constructor(\n public readonly transactionInfoId?: string,\n public readonly type?: string,\n public readonly transactionDate?: string,\n public readonly grossAmount?: string,\n public readonly netAmount?: string,\n public readonly splitAmount?: string,\n public readonly amount?: string,\n ) {}\n\n static fromRaw(data: Raw): ReleasableTransaction {\n return new ReleasableTransaction(\n arrString(data, 'transaction_info_id'),\n arrString(data, 'type'),\n arrString(data, 'transaction_date'),\n arrString(data, 'gross_amount'),\n arrString(data, 'net_amount'),\n arrString(data, 'split_amount'),\n arrString(data, 'amount'),\n )\n }\n}\n","import { arrArrayFrom, arrBool, arrString } from '../support/arr.js'\nimport { ReleasableTransaction } from './releasable-transaction.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * The payments releasable right now, newest first and capped at 500 —\n * `truncated` says whether there were more.\n */\nexport class ReleasableTransactions {\n constructor(\n public readonly sid?: string,\n public readonly transactions: ReleasableTransaction[] = [],\n public readonly total?: string,\n public readonly truncated: boolean = false,\n ) {}\n\n static fromRaw(data: Raw): ReleasableTransactions {\n return new ReleasableTransactions(\n arrString(data, 'sid'),\n arrArrayFrom(data, 'transactions').map(ReleasableTransaction.fromRaw),\n arrString(data, 'total'),\n arrBool(data, 'truncated'),\n )\n }\n}\n","import { FundReleaseResult } from '../data-objects/fund-release-result.js'\nimport { HeldBalance } from '../data-objects/held-balance.js'\nimport { ReleasableTransactions } from '../data-objects/releasable-transactions.js'\nimport { ApiException } from '../exceptions/index.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * Held funds, for merchants on a tier that does not sweep their balance to\n * their bank automatically. Every other merchant gets a 422 from these\n * endpoints rather than a misleading zero.\n *\n * Reading needs `funds:read`. Releasing needs `funds:release`, a separate\n * ability, and is open to affiliate keys only.\n */\nexport class Funds extends AbstractResource {\n /** The merchant's balance at the processor, and how much is releasable today. */\n async balance(sid: string): Promise<HeldBalance> {\n const raw = await this.transport.request('GET', 'funds/balance', this.envelope({ sid }))\n return HeldBalance.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** The payments that can be released right now — the list to release by `transaction_info_ids`. */\n async transactions(sid: string): Promise<ReleasableTransactions> {\n const raw = await this.transport.request('GET', 'funds/transactions', this.envelope({ sid }))\n return ReleasableTransactions.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Send part of a merchant's held balance to the bank account on file.\n *\n * Use a fresh `idempotencyKey` per intended release and reuse it when\n * retrying: a retry with the same key and request returns the original\n * release instead of sending the money again. The SDK's own retries of\n * timeouts and 5xx responses resend the same key, so they are safe.\n *\n * Check `release.status`, not only whether this resolved. A declined release\n * (`failed`) is returned rather than thrown, alongside `released` and\n * `unknown`. Refusals that create no release — a transaction that does not\n * qualify, more than is releasable, a key reused for a different request, a\n * release already in flight — throw an {@link ApiException} whose response\n * body carries the detail (`data.ineligible`, `data.releasable`).\n *\n * @param attributes exactly one of `amount` (dollars, at most two decimal\n * places) or `transaction_info_ids` (up to 100, all or nothing)\n */\n async release(sid: string, idempotencyKey: string, attributes: Raw): Promise<FundReleaseResult> {\n let raw: Raw\n\n try {\n raw = await this.transport.request(\n 'POST',\n 'funds/release',\n this.envelope({ sid, idempotency_key: idempotencyKey, ...attributes }),\n )\n } catch (e) {\n const data = e instanceof ApiException ? e.getResponseBody()['data'] : undefined\n if (data !== null && typeof data === 'object' && 'release' in data) {\n return FundReleaseResult.fromRaw(data as Raw)\n }\n throw e\n }\n\n return FundReleaseResult.fromRaw((raw['data'] as Raw) ?? {})\n }\n}\n","import { arrObjectFrom, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * The processing fee a cover-fee invoice adds on top of what the customer pays,\n * quoted for both payment methods.\n *\n * Present on an {@link Invoice} only when `coverFeeRequired` is true. The fee is\n * NOT a line item and is NOT part of the invoice's `total`: the merchant is owed\n * `total`, and the customer is charged `total` plus this fee. Card and ACH rates\n * differ, so the amount depends on how the customer chooses to pay — `ccTotal` is\n * the higher of the two and what the invoice and its emails lead with.\n *\n * `basis` names what the quote was computed against — currently always `balance`,\n * the amount still outstanding. Paying a partial amount re-quotes the fee against\n * that amount, so treat these as a quote for settling in full today rather than a\n * fixed charge.\n *\n * Monetary values are kept as strings to avoid float rounding.\n */\nexport class CoverFeeQuote {\n constructor(\n public readonly basis?: string,\n public readonly base?: string,\n public readonly ccFee?: string,\n public readonly ccTotal?: string,\n public readonly achFee?: string,\n public readonly achTotal?: string,\n ) {}\n\n static fromRaw(data: Raw): CoverFeeQuote {\n const cc = arrObjectFrom(data, ['cc'])\n const ach = arrObjectFrom(data, ['ach'])\n\n return new CoverFeeQuote(\n arrString(data, 'basis'),\n arrString(data, 'base'),\n arrString(cc, 'fee'),\n arrString(cc, 'total'),\n arrString(ach, 'fee'),\n arrString(ach, 'total'),\n )\n }\n}\n","import { arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class InvoiceCustomer {\n constructor(\n public readonly id?: number,\n public readonly name?: string,\n public readonly email?: string,\n ) {}\n\n static fromRaw(data: Raw): InvoiceCustomer {\n return new InvoiceCustomer(\n arrInt(data, 'id'),\n arrString(data, 'name'),\n arrString(data, 'email'),\n )\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class InvoiceEvent {\n constructor(\n public readonly type?: string,\n public readonly label?: string,\n public readonly description?: string,\n public readonly createdAt?: string,\n ) {}\n\n static fromRaw(data: Raw): InvoiceEvent {\n return new InvoiceEvent(\n arrString(data, 'type'),\n arrString(data, 'label'),\n arrString(data, 'description'),\n arrString(data, 'created_at'),\n )\n }\n}\n","import { arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class InvoiceLineItem {\n constructor(\n public readonly id?: number,\n public readonly itemId?: number,\n public readonly name?: string,\n public readonly description?: string,\n public readonly quantity?: string,\n public readonly unitPrice?: string,\n public readonly amount?: string,\n ) {}\n\n static fromRaw(data: Raw): InvoiceLineItem {\n return new InvoiceLineItem(\n arrInt(data, 'id'),\n arrInt(data, 'item_id'),\n arrString(data, 'name'),\n arrString(data, 'description'),\n arrString(data, 'quantity'),\n arrString(data, 'unit_price'),\n arrString(data, 'amount'),\n )\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * A payment recorded against an invoice.\n *\n * `amount` is what was credited to the invoice; `coverFee` is the processing fee\n * charged on top of it, so `amount + coverFee` is what the customer actually paid.\n * It is zero unless the invoice required the customer to cover fees.\n */\nexport class InvoicePayment {\n constructor(\n public readonly amount?: string,\n public readonly paidAt?: string,\n public readonly method?: string,\n public readonly transactionId?: string,\n public readonly coverFee?: string,\n ) {}\n\n static fromRaw(data: Raw): InvoicePayment {\n return new InvoicePayment(\n arrString(data, 'amount'),\n arrString(data, 'paid_at'),\n arrString(data, 'method'),\n arrString(data, 'transaction_id'),\n arrString(data, 'cover_fee'),\n )\n }\n}\n","import { arrArrayFrom, arrBool, arrInt, arrObjectFrom, arrString } from '../support/arr.js'\nimport { CoverFeeQuote } from './cover-fee-quote.js'\nimport { InvoiceCustomer } from './invoice-customer.js'\nimport { InvoiceEvent } from './invoice-event.js'\nimport { InvoiceLineItem } from './invoice-line-item.js'\nimport { InvoicePayment } from './invoice-payment.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Invoice {\n constructor(\n public readonly id?: number,\n public readonly invoiceNumber?: string,\n public readonly status?: string,\n public readonly token?: string,\n public readonly paymentTerms?: string,\n public readonly issueDate?: string,\n public readonly dueDate?: string,\n public readonly isOverdue: boolean = false,\n public readonly subtotal?: string,\n public readonly total?: string,\n public readonly amountPaid?: string,\n public readonly balance?: string,\n public readonly allowPartialPayment: boolean = false,\n public readonly thankYouNote?: string,\n // Present on the list-summary shape; the full shape nests these under `customer`.\n public readonly customerName?: string,\n public readonly customerEmail?: string,\n public readonly publicUrl?: string,\n public readonly customer: InvoiceCustomer = new InvoiceCustomer(),\n public readonly items: InvoiceLineItem[] = [],\n public readonly payments: InvoicePayment[] = [],\n public readonly events: InvoiceEvent[] = [],\n // Whether the customer must pay the processing fee. The fee is not a line item\n // and not part of `total` — see CoverFeeQuote. Appended rather than slotted in\n // beside allowPartialPayment so the positional constructor stays compatible.\n public readonly coverFeeRequired: boolean = false,\n public readonly coverFeeQuote?: CoverFeeQuote,\n ) {}\n\n static fromRaw(data: Raw): Invoice {\n return new Invoice(\n arrInt(data, 'id'),\n arrString(data, 'invoice_number'),\n arrString(data, 'status'),\n arrString(data, 'token'),\n arrString(data, 'payment_terms'),\n arrString(data, 'issue_date'),\n arrString(data, 'due_date'),\n arrBool(data, 'is_overdue'),\n arrString(data, 'subtotal'),\n arrString(data, 'total'),\n arrString(data, 'amount_paid'),\n arrString(data, 'balance'),\n arrBool(data, 'allow_partial_payment'),\n arrString(data, 'thank_you_note'),\n arrString(data, 'customer_name'),\n arrString(data, 'customer_email'),\n arrString(data, 'public_url'),\n InvoiceCustomer.fromRaw(arrObjectFrom(data, ['customer'])),\n arrArrayFrom(data, 'items').map(InvoiceLineItem.fromRaw),\n arrArrayFrom(data, 'payments').map(InvoicePayment.fromRaw),\n arrArrayFrom(data, 'events').map(InvoiceEvent.fromRaw),\n arrBool(data, 'cover_fee_required'),\n data['cover_fee_quote'] && typeof data['cover_fee_quote'] === 'object'\n ? CoverFeeQuote.fromRaw(data['cover_fee_quote'] as Raw)\n : undefined,\n )\n }\n}\n","import { arrBool, arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class InvoiceItem {\n constructor(\n public readonly id?: number,\n public readonly name?: string,\n public readonly description?: string,\n public readonly price?: string,\n public readonly taxDeductible: boolean = false,\n ) {}\n\n static fromRaw(data: Raw): InvoiceItem {\n return new InvoiceItem(\n arrInt(data, 'id'),\n arrString(data, 'name'),\n arrString(data, 'description'),\n arrString(data, 'price'),\n arrBool(data, 'tax_deductible'),\n )\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class InvoiceLink {\n constructor(\n public readonly publicUrl?: string,\n public readonly token?: string,\n ) {}\n\n static fromRaw(data: Raw): InvoiceLink {\n return new InvoiceLink(arrString(data, 'public_url'), arrString(data, 'token'))\n }\n}\n","import { Invoice } from '../data-objects/invoice.js'\nimport { InvoiceItem } from '../data-objects/invoice-item.js'\nimport { InvoiceLink } from '../data-objects/invoice-link.js'\nimport { MessageResult } from '../data-objects/message-result.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * Invoice endpoints.\n *\n * Identify the customer with `customer_uuid` — the same identifier the customer,\n * payment-method and address endpoints use, and the only one `Customer` exposes.\n * `customer_id` remains accepted for integrations written against the original\n * contract; supply exactly one.\n *\n * Line-item mutations return the refreshed invoice so the caller sees\n * recalculated totals rather than a detached fragment.\n */\nexport class Invoices extends AbstractResource {\n /**\n * List invoices for a merchant.\n *\n * @param filters `status` — draft | sent | viewed | partially_paid | paid | void | refunded | overdue | all\n */\n async list(sid: string, filters: Raw = {}): Promise<CursorPage<Invoice>> {\n return this.paginate('GET', 'invoices', this.envelope({ sid }, filters), Invoice.fromRaw)\n }\n\n async show(sid: string, invoiceId: number | string): Promise<Invoice> {\n const raw = await this.transport.request(\n 'GET',\n 'invoice',\n this.envelope({ sid, invoice_id: invoiceId }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Create a draft invoice with its line items. Every line must reference a\n * Merchant `item_id`; the line name and unit price are snapshotted.\n *\n * @param attributes\n * `customer_uuid` (or `customer_id`), `customer_name`, `customer_email`,\n * `payment_terms` (`due_on_receipt` | `net_15` | `net_30` | `net_60`) and\n * `lines` are required. `lines[]` takes `item_id`, `name`, `quantity`,\n * `unit_price` and optional `description`. Optional: `invoice_number`,\n * `issue_date` (Y-m-d, defaults to today — `due_date` is derived from\n * `payment_terms`), `thank_you_note`, `allow_partial_payment`,\n * `cover_fee_required`, `reminder_settings`.\n *\n * Set `cover_fee_required` to make the customer pay the processing fee. The\n * fee is added on top of the invoice at payment time rather than becoming a\n * line item, so `total` stays the amount owed to the merchant — read\n * `invoice.coverFeeQuote` for what the customer will actually be charged.\n * Omitting the field inherits the merchant's invoice setting.\n */\n async create(sid: string, attributes: Raw): Promise<Invoice> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/create',\n this.envelope({ sid, ...attributes }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Update a draft invoice. Only drafts can be edited, and passing `lines`\n * replaces the existing line items.\n *\n * @param attributes same shape as {@link Invoices.create}\n */\n async update(sid: string, invoiceId: number | string, attributes: Raw): Promise<Invoice> {\n const raw = await this.transport.request(\n 'PATCH',\n 'invoice/update',\n this.envelope({ sid, invoice_id: invoiceId, ...attributes }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async delete(sid: string, invoiceId: number | string): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/delete',\n this.envelope({ sid, invoice_id: invoiceId }),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n\n /** Email the invoice to the customer and advance it to Sent. */\n async send(sid: string, invoiceId: number | string): Promise<Invoice> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/send',\n this.envelope({ sid, invoice_id: invoiceId }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** Activate a draft invoice for payment without emailing it. */\n async markSent(sid: string, invoiceId: number | string): Promise<Invoice> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/mark-sent',\n this.envelope({ sid, invoice_id: invoiceId }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async void(sid: string, invoiceId: number | string): Promise<Invoice> {\n const raw = await this.transport.request(\n 'PATCH',\n 'invoice/void',\n this.envelope({ sid, invoice_id: invoiceId }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** Clone any invoice into a new draft with a freshly allocated number. */\n async duplicate(sid: string, invoiceId: number | string): Promise<Invoice> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/duplicate',\n this.envelope({ sid, invoice_id: invoiceId }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Record a merchant-initiated (MOTO) card or ACH payment against an open\n * invoice.\n *\n * @param attributes\n * `payment_type` is required and is `cc` or `ach`. For a card, pass a stored\n * `token` or raw `cardholder_name` / `card_number` / `expiration_date` (m/Y)\n * plus optional `cvv`; for ACH, pass `routing_number` / `account_number` /\n * `account_type` (Checking | Savings) / `account_name`. Omit `amount` to pay\n * the full balance — partial amounts require the invoice to allow them.\n * Optional: `memo`, `billing_address`.\n *\n * On a cover-fee invoice the processing fee for `payment_type` is charged on\n * top of `amount`, so the card or bank account is debited more than the\n * invoice is credited. The fee lands as `coverFee` on the matching entry in\n * `invoice.payments`. Card and ACH rates differ, so the same `amount` settles\n * differently per `payment_type`.\n */\n async pay(sid: string, invoiceId: number | string, attributes: Raw): Promise<Invoice> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/pay',\n this.envelope({ sid, invoice_id: invoiceId, ...attributes }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** Get the public pay link (and token) for an invoice. */\n async getLink(sid: string, invoiceId: number | string): Promise<InvoiceLink> {\n const raw = await this.transport.request(\n 'GET',\n 'invoice/link',\n this.envelope({ sid, invoice_id: invoiceId }),\n )\n return InvoiceLink.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Append a single line item to a draft invoice.\n *\n * @param attributes `item_id`, `name`, `quantity` and `unit_price` are\n * required; `description` is optional.\n */\n async addLineItem(sid: string, invoiceId: number | string, attributes: Raw): Promise<Invoice> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/line-item/add',\n this.envelope({ sid, invoice_id: invoiceId, ...attributes }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Update a single line item on a draft invoice.\n *\n * @param attributes any of `item_id`, `name`, `description`, `quantity`,\n * `unit_price`\n */\n async updateLineItem(\n sid: string,\n invoiceId: number | string,\n lineItemId: number | string,\n attributes: Raw,\n ): Promise<Invoice> {\n const raw = await this.transport.request(\n 'PATCH',\n 'invoice/line-item/update',\n this.envelope({ sid, invoice_id: invoiceId, line_item_id: lineItemId, ...attributes }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** Remove a single line item from a draft invoice. */\n async deleteLineItem(\n sid: string,\n invoiceId: number | string,\n lineItemId: number | string,\n ): Promise<Invoice> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/line-item/delete',\n this.envelope({ sid, invoice_id: invoiceId, line_item_id: lineItemId }),\n )\n return Invoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** List the Merchant's items (funds/designations) available as invoice line items. */\n async listItems(sid: string): Promise<InvoiceItem[]> {\n const raw = await this.transport.request('GET', 'invoice/items', this.envelope({ sid }))\n const items = Array.isArray(raw['data']) ? (raw['data'] as Raw[]) : []\n return items.map(InvoiceItem.fromRaw)\n }\n\n /**\n * Create an invoicing-only item (fund/designation) for the Merchant. The item\n * is hidden from public giving pages and can be referenced as a line's\n * `item_id`.\n *\n * @param attributes `name` is required; `description`, `price` and\n * `tax_deductible` are optional.\n */\n async createItem(sid: string, attributes: Raw): Promise<InvoiceItem> {\n const raw = await this.transport.request(\n 'POST',\n 'invoice/item/create',\n this.envelope({ sid, ...attributes }),\n )\n return InvoiceItem.fromRaw((raw['data'] as Raw) ?? {})\n }\n}\n","import { arrBool, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * Where a merchant sits in onboarding.\n *\n * `status` is the headline: `lead`, `discovery`, `proposal`,\n * `application_in_progress`, `underwriting`, `live`, `cancellation_pending`,\n * `churned` or `declined`, or undefined for a merchant that has not started.\n * `applicationStatus` is the application record's own state — `draft`,\n * `pending_review`, `submitted`, `approved`, `needs_documents` or `failed` —\n * and is the field to read while `status` is `underwriting`, since only\n * `needs_documents` asks anything of the merchant.\n *\n * `boarded` is the ground truth for \"can they take money\": a merchant can be\n * `live` without the application ever reading `approved`.\n */\nexport class ApplicationStatus {\n constructor(\n public readonly sid?: string,\n public readonly name?: string,\n public readonly status?: string,\n public readonly applicationStatus?: string,\n public readonly boarded: boolean = false,\n public readonly applicationSubmittedAt?: string,\n ) {}\n\n static fromRaw(data: Raw): ApplicationStatus {\n return new ApplicationStatus(\n arrString(data, 'sid'),\n arrString(data, 'name'),\n arrString(data, 'status'),\n arrString(data, 'application_status'),\n arrBool(data, 'boarded'),\n arrString(data, 'application_submitted_at'),\n )\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class FormLink {\n constructor(public readonly link?: string) {}\n\n static fromRaw(data: Raw): FormLink {\n return new FormLink(arrString(data, 'link'))\n }\n}\n","import { arrBool, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Merchant {\n constructor(\n public readonly name?: string,\n public readonly sid?: string,\n public readonly mcc?: string,\n public readonly slug?: string,\n public readonly pubApiKey?: string,\n public readonly processorMid?: string,\n public readonly active: boolean = false,\n public readonly activeAt?: string,\n public readonly gPay: boolean = false,\n public readonly aPay: boolean = false,\n public readonly pciCompliance: boolean = false,\n public readonly website?: string,\n public readonly addr1?: string,\n public readonly addr2?: string,\n public readonly city?: string,\n public readonly state?: string,\n public readonly zip?: string,\n public readonly phone?: string,\n public readonly primaryPhone?: string,\n public readonly primaryEmail?: string,\n public readonly primaryName?: string,\n ) {}\n\n static fromRaw(data: Raw): Merchant {\n return new Merchant(\n arrString(data, 'name'),\n arrString(data, 'sid'),\n arrString(data, 'mcc'),\n arrString(data, 'slug'),\n arrString(data, 'pub_api_key'),\n arrString(data, 'processor_mid'),\n arrBool(data, 'active'),\n arrString(data, 'active_at'),\n arrBool(data, 'g_pay'),\n arrBool(data, 'a_pay'),\n arrBool(data, 'pci_compliance'),\n arrString(data, 'website'),\n arrString(data, 'addr1'),\n arrString(data, 'addr2'),\n arrString(data, 'city'),\n arrString(data, 'state'),\n arrString(data, 'zip'),\n arrString(data, 'phone'),\n arrString(data, 'primary_phone'),\n arrString(data, 'primary_email'),\n arrString(data, 'primary_name'),\n )\n }\n}\n","import { ApplicationStatus } from '../data-objects/application-status.js'\nimport { FormLink } from '../data-objects/form-link.js'\nimport { Merchant } from '../data-objects/merchant.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Merchants extends AbstractResource {\n async list(filters: Raw = {}): Promise<CursorPage<Merchant>> {\n return this.paginate('GET', 'merchant/list', this.envelope({}, filters), Merchant.fromRaw)\n }\n\n async show(sid: string): Promise<Merchant> {\n const raw = await this.transport.request('GET', 'merchant/show', this.envelope({ sid }))\n return Merchant.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async create(attributes: Raw): Promise<Merchant> {\n const raw = await this.transport.request('POST', 'merchant/create', this.envelope(attributes))\n return Merchant.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async update(sid: string, attributes: Raw): Promise<Merchant> {\n const raw = await this.transport.request(\n 'PATCH',\n 'merchant/update',\n this.envelope({ sid, ...attributes }),\n )\n return Merchant.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async getFormLink(sid: string): Promise<FormLink> {\n const raw = await this.transport.request(\n 'GET',\n 'merchant/get-form-link',\n this.envelope({ sid }),\n )\n return FormLink.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Where the merchant sits in onboarding — follow up an application sent with\n * {@link Merchants.getFormLink}. Prefer the `application_status_changed`\n * webhook to polling; poll only to reconcile after an outage.\n */\n async applicationStatus(sid: string): Promise<ApplicationStatus> {\n const raw = await this.transport.request(\n 'GET',\n 'merchant/application-status',\n this.envelope({ sid }),\n )\n return ApplicationStatus.fromRaw((raw['data'] as Raw) ?? {})\n }\n}\n","import { arrBool, arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class PaymentMethod {\n constructor(\n public readonly id?: number,\n public readonly type?: string,\n public readonly token?: string,\n public readonly firstName?: string,\n public readonly lastName?: string,\n public readonly ccNameOnCard?: string,\n public readonly ccLastFour?: string,\n public readonly ccExpirationDate?: string,\n public readonly ccBrand?: string,\n public readonly achBankAccountName?: string,\n public readonly achRoutingNumber?: string,\n public readonly achAccountNumber?: string,\n public readonly achOwnershipType?: string,\n public readonly achAccountType?: string,\n public readonly achBankName?: string,\n public readonly status?: string,\n public readonly statusDate?: string,\n public readonly enabled: boolean = false,\n public readonly isDefault: boolean = false,\n public readonly addr1?: string,\n public readonly addr2?: string,\n public readonly addr3?: string,\n public readonly city?: string,\n public readonly state?: string,\n public readonly zip?: string,\n ) {}\n\n static fromRaw(data: Raw): PaymentMethod {\n return new PaymentMethod(\n arrInt(data, 'id'),\n arrString(data, 'type'),\n arrString(data, 'token'),\n arrString(data, 'first_name'),\n arrString(data, 'last_name'),\n arrString(data, 'cc_name_on_card'),\n arrString(data, 'cc_last_four'),\n arrString(data, 'cc_expiration_date'),\n arrString(data, 'cc_brand'),\n arrString(data, 'ach_bank_account_name'),\n arrString(data, 'ach_routing_number'),\n arrString(data, 'ach_account_number'),\n arrString(data, 'ach_ownership_type'),\n arrString(data, 'ach_account_type'),\n arrString(data, 'ach_bank_name'),\n arrString(data, 'status'),\n arrString(data, 'status_date'),\n arrBool(data, 'enabled'),\n arrBool(data, 'default'),\n arrString(data, 'addr1'),\n arrString(data, 'addr2'),\n arrString(data, 'addr3'),\n arrString(data, 'city'),\n arrString(data, 'state'),\n arrString(data, 'zip'),\n )\n }\n}\n","import { MessageResult } from '../data-objects/message-result.js'\nimport { PaymentMethod } from '../data-objects/payment-method.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\nexport class PaymentMethods extends AbstractResource {\n async list(sid: string, filters: Raw): Promise<CursorPage<PaymentMethod>> {\n return this.paginate(\n 'GET',\n 'payment-method/list',\n this.envelope({ sid }, filters),\n PaymentMethod.fromRaw,\n )\n }\n\n async show(sid: string, paymentMethodId: number | string, filters: Raw): Promise<PaymentMethod> {\n const raw = await this.transport.request(\n 'GET',\n 'payment-method/show',\n this.envelope({ sid, payment_method_id: paymentMethodId }, filters),\n )\n return PaymentMethod.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async create(sid: string, attributes: Raw): Promise<PaymentMethod> {\n const raw = await this.transport.request(\n 'POST',\n 'payment-method/create',\n this.envelope({ sid, ...attributes }),\n )\n return PaymentMethod.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async update(sid: string, attributes: Raw): Promise<PaymentMethod> {\n const raw = await this.transport.request(\n 'PATCH',\n 'payment-method/update',\n this.envelope({ sid, ...attributes }),\n )\n return PaymentMethod.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async delete(\n sid: string,\n paymentMethodId: number | string,\n uuid: string,\n ): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'POST',\n 'payment-method/delete',\n this.envelope({ sid, payment_method_id: paymentMethodId, uuid }),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n}\n","import { arrArrayFrom, arrBool, arrInt, arrObjectFrom, arrString } from '../support/arr.js'\nimport { Invoice } from './invoice.js'\nimport { InvoiceCustomer } from './invoice-customer.js'\nimport { InvoiceLineItem } from './invoice-line-item.js'\n\ntype Raw = Record<string, unknown>\n\nexport class RecurringInvoice {\n constructor(\n public readonly id?: number,\n public readonly status?: string,\n public readonly recurrenceSchedule?: string,\n public readonly paymentTerms?: string,\n public readonly startDate?: string,\n public readonly endDate?: string,\n public readonly nextRunDate?: string,\n public readonly lastRunDate?: string,\n // Present on the list-summary shape; the full shape nests this under `customer`.\n public readonly customerName?: string,\n public readonly thankYouNote?: string,\n public readonly customer: InvoiceCustomer = new InvoiceCustomer(),\n public readonly items: InvoiceLineItem[] = [],\n public readonly upcomingRunDates: string[] = [],\n // The most recent invoices generated by this template.\n public readonly invoices: Invoice[] = [],\n // Copied onto every invoice this template generates.\n public readonly coverFeeRequired: boolean = false,\n ) {}\n\n static fromRaw(data: Raw): RecurringInvoice {\n const runDates = data['upcoming_run_dates']\n\n return new RecurringInvoice(\n arrInt(data, 'id'),\n arrString(data, 'status'),\n arrString(data, 'recurrence_schedule'),\n arrString(data, 'payment_terms'),\n arrString(data, 'start_date'),\n arrString(data, 'end_date'),\n arrString(data, 'next_run_date'),\n arrString(data, 'last_run_date'),\n arrString(data, 'customer_name'),\n arrString(data, 'thank_you_note'),\n InvoiceCustomer.fromRaw(arrObjectFrom(data, ['customer'])),\n arrArrayFrom(data, 'items').map(InvoiceLineItem.fromRaw),\n Array.isArray(runDates) ? runDates.map((d) => String(d)) : [],\n arrArrayFrom(data, 'invoices').map(Invoice.fromRaw),\n arrBool(data, 'cover_fee_required'),\n )\n }\n}\n","import { RecurringInvoice } from '../data-objects/recurring-invoice.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * Recurring-invoice templates, which generate and send an invoice on a schedule.\n *\n * Identify the customer with `customer_uuid`; `customer_id` remains accepted.\n */\nexport class RecurringInvoices extends AbstractResource {\n /**\n * List recurring-invoice templates.\n *\n * @param filters `status` — Active | Paused | Cancelled | Completed\n */\n async list(sid: string, filters: Raw = {}): Promise<CursorPage<RecurringInvoice>> {\n return this.paginate(\n 'GET',\n 'recurring-invoices',\n this.envelope({ sid }, filters),\n RecurringInvoice.fromRaw,\n )\n }\n\n async show(sid: string, recurringInvoiceId: number | string): Promise<RecurringInvoice> {\n const raw = await this.transport.request(\n 'GET',\n 'recurring-invoice',\n this.envelope({ sid, recurring_invoice_id: recurringInvoiceId }),\n )\n return RecurringInvoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Create a recurring-invoice template. When `recurring_start_date` is today the\n * first invoice is generated and sent immediately.\n *\n * @param attributes\n * `customer_uuid` (or `customer_id`), `payment_terms` (`due_on_receipt` |\n * `net_15` | `net_30` | `net_60`), `recurring_frequency` (`Weekly` |\n * `Biweekly` | `FirstFifteenth` | `Monthly` | `Yearly`),\n * `recurring_start_date` (Y-m-d) and `lines` are required. Optional:\n * `recurring_end_date` (Y-m-d, on or after the start date),\n * `thank_you_note`.\n *\n * `cover_fee_required` makes the customer cover the processing fee on every\n * invoice this template generates.\n */\n async create(sid: string, attributes: Raw): Promise<RecurringInvoice> {\n const raw = await this.transport.request(\n 'POST',\n 'recurring-invoice/create',\n this.envelope({ sid, ...attributes }),\n )\n return RecurringInvoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async cancel(sid: string, recurringInvoiceId: number | string): Promise<RecurringInvoice> {\n const raw = await this.transport.request(\n 'POST',\n 'recurring-invoice/cancel',\n this.envelope({ sid, recurring_invoice_id: recurringInvoiceId }),\n )\n return RecurringInvoice.fromRaw((raw['data'] as Raw) ?? {})\n }\n}\n","import { arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class RecurringPaymentMethod {\n constructor(\n public readonly id?: number,\n public readonly type?: string,\n public readonly lastFour?: string,\n public readonly expiration?: string,\n public readonly zip?: string,\n public readonly nameOnCard?: string,\n public readonly bankAccountName?: string,\n public readonly routingNumber?: string,\n public readonly accountNumber?: string,\n public readonly ownershipType?: string,\n public readonly accountType?: string,\n public readonly bankName?: string,\n ) {}\n\n static fromRaw(data: Raw): RecurringPaymentMethod {\n return new RecurringPaymentMethod(\n arrInt(data, 'id'),\n arrString(data, 'type'),\n arrString(data, 'last_four'),\n arrString(data, 'expiration'),\n arrString(data, 'zip'),\n arrString(data, 'name_on_card'),\n arrString(data, 'bank_account_name'),\n arrString(data, 'routing_number'),\n arrString(data, 'account_number'),\n arrString(data, 'ownership_type'),\n arrString(data, 'account_type'),\n arrString(data, 'bank_name'),\n )\n }\n}\n","import { arrInt, arrObjectFrom, arrString } from '../support/arr.js'\nimport { RecurringPaymentMethod } from './recurring-payment-method.js'\nimport { TransactionAddress } from './transaction-address.js'\n\ntype Raw = Record<string, unknown>\n\nexport class RecurringPayment {\n constructor(\n public readonly id?: number,\n public readonly name?: string,\n public readonly amount?: string,\n public readonly startDate?: string,\n public readonly endDate?: string,\n public readonly recurrenceSchedule?: string,\n public readonly lastRunDate?: string,\n public readonly lastRunStatus?: string,\n public readonly lastRunFailedCount?: number,\n public readonly nextRunDate?: string,\n public readonly status?: string,\n public readonly pausedUntilDate?: string,\n public readonly customerUuid?: string,\n public readonly cancelledAt?: string,\n public readonly error?: string,\n public readonly paymentMethod: RecurringPaymentMethod = new RecurringPaymentMethod(),\n public readonly shippingAddress: TransactionAddress = new TransactionAddress(),\n ) {}\n\n static fromRaw(data: Raw): RecurringPayment {\n return new RecurringPayment(\n arrInt(data, 'id'),\n arrString(data, 'name'),\n arrString(data, 'amount'),\n arrString(data, 'start_date'),\n arrString(data, 'end_date'),\n arrString(data, 'recurrence_schedule'),\n arrString(data, 'last_run_date'),\n arrString(data, 'last_run_status'),\n arrInt(data, 'last_run_failed_count'),\n arrString(data, 'next_run_date'),\n arrString(data, 'status'),\n arrString(data, 'paused_until_date'),\n arrString(data, 'customer_uuid'),\n arrString(data, 'cancelled_at'),\n arrString(data, 'error'),\n RecurringPaymentMethod.fromRaw(arrObjectFrom(data, ['payment_method'])),\n TransactionAddress.fromRaw(arrObjectFrom(data, ['shipping_address'])),\n )\n }\n}\n","import { MessageResult } from '../data-objects/message-result.js'\nimport { RecurringPayment } from '../data-objects/recurring-payment.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\nexport class RecurringPayments extends AbstractResource {\n async list(sid: string, filters: Raw = {}): Promise<CursorPage<RecurringPayment>> {\n return this.paginate(\n 'GET',\n 'recurring-payment/list',\n this.envelope({ sid }, filters),\n RecurringPayment.fromRaw,\n )\n }\n\n async show(sid: string, recurringPaymentId: number | string): Promise<RecurringPayment> {\n const raw = await this.transport.request(\n 'GET',\n 'recurring-payment/show',\n this.envelope({ sid, recurring_payment_id: recurringPaymentId }),\n )\n return RecurringPayment.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async create(sid: string, attributes: Raw): Promise<RecurringPayment> {\n const raw = await this.transport.request(\n 'POST',\n 'recurring-payment/create',\n this.envelope({ sid, ...attributes }),\n )\n return RecurringPayment.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async edit(\n sid: string,\n recurringPaymentId: number | string,\n attributes: Raw,\n ): Promise<RecurringPayment> {\n const raw = await this.transport.request(\n 'PATCH',\n 'recurring-payment/edit',\n this.envelope({ sid, recurring_payment_id: recurringPaymentId, ...attributes }),\n )\n return RecurringPayment.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async pause(\n sid: string,\n recurringPaymentId: number | string,\n pauseUntilDate?: string,\n ): Promise<RecurringPayment> {\n const raw = await this.transport.request(\n 'PATCH',\n 'recurring-payment/pause',\n this.envelope({\n sid,\n recurring_payment_id: recurringPaymentId,\n pause_until_date: pauseUntilDate,\n }),\n )\n return RecurringPayment.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async cancel(sid: string, recurringPaymentId: number | string): Promise<RecurringPayment> {\n const raw = await this.transport.request(\n 'PATCH',\n 'recurring-payment/cancel',\n this.envelope({ sid, recurring_payment_id: recurringPaymentId }),\n )\n return RecurringPayment.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async activate(sid: string, recurringPaymentId: number | string): Promise<RecurringPayment> {\n const raw = await this.transport.request(\n 'PATCH',\n 'recurring-payment/activate',\n this.envelope({ sid, recurring_payment_id: recurringPaymentId }),\n )\n return RecurringPayment.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async delete(sid: string, recurringPaymentId: number | string): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'POST',\n 'recurring-payment/delete',\n this.envelope({ sid, recurring_payment_id: recurringPaymentId }),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n}\n","import { arrInt, arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\n/** The subscription created by subscribing a customer, and its first charge. */\nexport class SubscribeResult {\n constructor(\n public readonly subscriptionId?: number,\n public readonly status?: string,\n public readonly nextRunDate?: string,\n public readonly transactionNumber?: string,\n public readonly amount?: string,\n ) {}\n\n static fromRaw(data: Raw): SubscribeResult {\n return new SubscribeResult(\n arrInt(data, 'subscription_id'),\n arrString(data, 'status'),\n arrString(data, 'next_run_date'),\n arrString(data, 'transaction_number'),\n arrString(data, 'amount'),\n )\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * A line item on a subscription plan, or the snapshot a subscription took of\n * it when the customer subscribed. `amount` is present on subscriptions only.\n */\nexport class SubscriptionItem {\n constructor(\n public readonly name?: string,\n public readonly description?: string,\n public readonly quantity?: string,\n public readonly unitPrice?: string,\n public readonly amount?: string,\n ) {}\n\n static fromRaw(data: Raw): SubscriptionItem {\n return new SubscriptionItem(\n arrString(data, 'name'),\n arrString(data, 'description'),\n arrString(data, 'quantity'),\n arrString(data, 'unit_price'),\n arrString(data, 'amount'),\n )\n }\n}\n","import { arrArrayFrom, arrBool, arrInt, arrString } from '../support/arr.js'\nimport { SubscriptionItem } from './subscription-item.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * A subscription plan. `status` is `draft`, `active` or `archived`; only an\n * active plan takes new subscribers. `publicUrl` is the plan's hosted\n * subscribe page.\n */\nexport class SubscriptionPlan {\n constructor(\n public readonly id?: number,\n public readonly name?: string,\n public readonly description?: string,\n public readonly recurrenceSchedule?: string,\n public readonly status?: string,\n public readonly subtotal?: string,\n public readonly total?: string,\n public readonly token?: string,\n public readonly publicUrl?: string,\n public readonly allowPublic: boolean = false,\n public readonly createdAt?: string,\n public readonly items: SubscriptionItem[] = [],\n ) {}\n\n static fromRaw(data: Raw): SubscriptionPlan {\n return new SubscriptionPlan(\n arrInt(data, 'id'),\n arrString(data, 'name'),\n arrString(data, 'description'),\n arrString(data, 'recurrence_schedule'),\n arrString(data, 'status'),\n arrString(data, 'subtotal'),\n arrString(data, 'total'),\n arrString(data, 'token'),\n arrString(data, 'public_url'),\n arrBool(data, 'allow_public'),\n arrString(data, 'created_at'),\n arrArrayFrom(data, 'items').map(SubscriptionItem.fromRaw),\n )\n }\n}\n","import { MessageResult } from '../data-objects/message-result.js'\nimport { SubscribeResult } from '../data-objects/subscribe-result.js'\nimport { SubscriptionPlan } from '../data-objects/subscription-plan.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * Subscription plans: a recurring bundle of line items customers subscribe to.\n *\n * A plan is created as a `draft`, published to `active` to take subscribers,\n * and archived to stop new ones. Existing subscribers keep the snapshot they\n * subscribed to, so editing or archiving a plan never changes them.\n */\nexport class SubscriptionPlans extends AbstractResource {\n /**\n * List a merchant's plans, newest first.\n *\n * @param status `draft`, `active` or `archived`\n */\n async list(sid: string, status?: string): Promise<CursorPage<SubscriptionPlan>> {\n return this.paginate(\n 'GET',\n 'subscription-plan/list',\n this.envelope({ sid, status }),\n SubscriptionPlan.fromRaw,\n )\n }\n\n async show(sid: string, subscriptionPlanId: number | string): Promise<SubscriptionPlan> {\n const raw = await this.transport.request(\n 'GET',\n 'subscription-plan/show',\n this.envelope({ sid, subscription_plan_id: subscriptionPlanId }),\n )\n return SubscriptionPlan.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Create a plan as a draft. Publish it before customers can subscribe.\n *\n * @param attributes\n * `name`, `recurrence_schedule` (`Weekly` | `Biweekly` | `FirstFifteenth` |\n * `Monthly` | `Yearly`) and `lines` are required. `lines[]` takes\n * `item_id` (a Merchant item), `name`, `quantity`, `unit_price` and\n * optional `description`. Optional: `description`, `allow_public` (list\n * the plan in the public catalog).\n */\n async create(sid: string, attributes: Raw): Promise<SubscriptionPlan> {\n const raw = await this.transport.request(\n 'POST',\n 'subscription-plan/create',\n this.envelope({ sid, ...attributes }),\n )\n return SubscriptionPlan.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Replace a plan's fields and line items wholesale — send the full plan, not\n * just what changed. Existing subscribers are unaffected.\n *\n * @param attributes same shape as {@link SubscriptionPlans.create}\n */\n async edit(\n sid: string,\n subscriptionPlanId: number | string,\n attributes: Raw,\n ): Promise<SubscriptionPlan> {\n const raw = await this.transport.request(\n 'PATCH',\n 'subscription-plan/edit',\n this.envelope({ sid, subscription_plan_id: subscriptionPlanId, ...attributes }),\n )\n return SubscriptionPlan.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** Delete a plan with no subscribers. A plan that has any must be archived instead. */\n async delete(sid: string, subscriptionPlanId: number | string): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'POST',\n 'subscription-plan/delete',\n this.envelope({ sid, subscription_plan_id: subscriptionPlanId }),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n\n /** Move a draft plan with at least one line item to active, so customers can subscribe. */\n async publish(sid: string, subscriptionPlanId: number | string): Promise<SubscriptionPlan> {\n const raw = await this.transport.request(\n 'PATCH',\n 'subscription-plan/publish',\n this.envelope({ sid, subscription_plan_id: subscriptionPlanId }),\n )\n return SubscriptionPlan.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** Stop new subscriptions and hide the plan from the public catalog. */\n async archive(sid: string, subscriptionPlanId: number | string): Promise<SubscriptionPlan> {\n const raw = await this.transport.request(\n 'PATCH',\n 'subscription-plan/archive',\n this.envelope({ sid, subscription_plan_id: subscriptionPlanId }),\n )\n return SubscriptionPlan.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Move an archived plan back to draft, to review and re-publish.\n * `allowPublic` stays off until the merchant opts back into the catalog.\n */\n async unarchive(sid: string, subscriptionPlanId: number | string): Promise<SubscriptionPlan> {\n const raw = await this.transport.request(\n 'PATCH',\n 'subscription-plan/unarchive',\n this.envelope({ sid, subscription_plan_id: subscriptionPlanId }),\n )\n return SubscriptionPlan.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Subscribe a customer to an active plan: charges the first payment to one\n * of the customer's saved payment methods and enrolls them.\n */\n async subscribe(\n sid: string,\n subscriptionPlanId: number | string,\n customerUuid: string,\n paymentMethodId: number | string,\n ): Promise<SubscribeResult> {\n const raw = await this.transport.request(\n 'POST',\n 'subscription-plan/subscribe',\n this.envelope({\n sid,\n subscription_plan_id: subscriptionPlanId,\n customer_uuid: customerUuid,\n payment_method: paymentMethodId,\n }),\n )\n return SubscribeResult.fromRaw((raw['data'] as Raw) ?? {})\n }\n}\n","import { arrArrayFrom, arrInt, arrObjectFrom, arrString } from '../support/arr.js'\nimport { RecurringPaymentMethod } from './recurring-payment-method.js'\nimport { SubscriptionItem } from './subscription-item.js'\n\ntype Raw = Record<string, unknown>\n\n/**\n * A customer's subscription to a plan. `status` is `Active`, `Failed`,\n * `Paused`, `Cancelled` or `Ended`.\n */\nexport class Subscription {\n constructor(\n public readonly id?: number,\n public readonly subscriptionPlanId?: number,\n public readonly planName?: string,\n public readonly amount?: string,\n public readonly recurrenceSchedule?: string,\n public readonly startDate?: string,\n public readonly endDate?: string,\n public readonly lastRunDate?: string,\n public readonly lastRunStatus?: string,\n public readonly lastRunFailedCount?: number,\n public readonly nextRunDate?: string,\n public readonly status?: string,\n public readonly pausedUntilDate?: string,\n public readonly cancelledAt?: string,\n public readonly cancelledBy?: string,\n public readonly customerUuid?: string,\n public readonly error?: string,\n public readonly paymentMethod: RecurringPaymentMethod = new RecurringPaymentMethod(),\n // The line items snapshotted at subscribe time — present on `show` only.\n public readonly items: SubscriptionItem[] = [],\n ) {}\n\n static fromRaw(data: Raw): Subscription {\n return new Subscription(\n arrInt(data, 'id'),\n arrInt(data, 'subscription_plan_id'),\n arrString(data, 'plan_name'),\n arrString(data, 'amount'),\n arrString(data, 'recurrence_schedule'),\n arrString(data, 'start_date'),\n arrString(data, 'end_date'),\n arrString(data, 'last_run_date'),\n arrString(data, 'last_run_status'),\n arrInt(data, 'last_run_failed_count'),\n arrString(data, 'next_run_date'),\n arrString(data, 'status'),\n arrString(data, 'paused_until_date'),\n arrString(data, 'cancelled_at'),\n arrString(data, 'cancelled_by'),\n arrString(data, 'customer_uuid'),\n arrString(data, 'error'),\n RecurringPaymentMethod.fromRaw(arrObjectFrom(data, ['payment_method'])),\n arrArrayFrom(data, 'items').map(SubscriptionItem.fromRaw),\n )\n }\n}\n","import { Subscription } from '../data-objects/subscription.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\n/** Customers' subscriptions to subscription plans. */\nexport class Subscriptions extends AbstractResource {\n /**\n * List a merchant's subscriptions, newest first.\n *\n * @param filters `status` — Active | Failed | Paused | Cancelled | Ended;\n * `customer_uuid`\n */\n async list(sid: string, filters: Raw = {}): Promise<CursorPage<Subscription>> {\n return this.paginate(\n 'GET',\n 'subscription/list',\n this.envelope({ sid }, filters),\n Subscription.fromRaw,\n )\n }\n\n async show(sid: string, subscriptionId: number | string): Promise<Subscription> {\n const raw = await this.transport.request(\n 'GET',\n 'subscription/show',\n this.envelope({ sid, subscription_id: subscriptionId }),\n )\n return Subscription.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Pause a subscription until `pauseUntilDate` (Y-m-d, in the future), or\n * indefinitely when it is omitted.\n */\n async pause(\n sid: string,\n subscriptionId: number | string,\n pauseUntilDate?: string,\n ): Promise<Subscription> {\n const raw = await this.transport.request(\n 'PATCH',\n 'subscription/pause',\n this.envelope({\n sid,\n subscription_id: subscriptionId,\n pause_until_date: pauseUntilDate,\n }),\n )\n return Subscription.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** Reactivate a paused subscription and recompute its next charge date. */\n async resume(sid: string, subscriptionId: number | string): Promise<Subscription> {\n const raw = await this.transport.request(\n 'PATCH',\n 'subscription/resume',\n this.envelope({ sid, subscription_id: subscriptionId }),\n )\n return Subscription.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** Cancel a subscription permanently; no further charges are made. */\n async cancel(sid: string, subscriptionId: number | string): Promise<Subscription> {\n const raw = await this.transport.request(\n 'PATCH',\n 'subscription/cancel',\n this.envelope({ sid, subscription_id: subscriptionId }),\n )\n return Subscription.fromRaw((raw['data'] as Raw) ?? {})\n }\n}\n","import { arrString } from '../support/arr.js'\n\ntype Raw = Record<string, unknown>\n\nexport class TokenizeResult {\n constructor(public readonly token?: string) {}\n\n static fromRaw(data: Raw): TokenizeResult {\n return new TokenizeResult(arrString(data, 'token'))\n }\n}\n","import { MessageResult } from '../data-objects/message-result.js'\nimport { TokenizeResult } from '../data-objects/tokenize-result.js'\nimport { Transaction } from '../data-objects/transaction.js'\nimport { CursorPage } from '../pagination/cursor-page.js'\nimport { AbstractResource } from './abstract-resource.js'\n\ntype Raw = Record<string, unknown>\n\nexport class Transactions extends AbstractResource {\n async list(sid: string, filters: Raw = {}): Promise<CursorPage<Transaction>> {\n return this.paginate(\n 'GET',\n 'transactions',\n this.envelope({ sid }, filters),\n Transaction.fromRaw,\n )\n }\n\n async show(sid: string, identifier: Raw): Promise<Transaction> {\n const raw = await this.transport.request(\n 'GET',\n 'transaction',\n this.envelope({ sid, ...identifier }),\n )\n return Transaction.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async chargeCard(sid: string, attributes: Raw): Promise<Transaction> {\n const raw = await this.transport.request(\n 'POST',\n 'transaction/charge-card',\n this.envelope({ sid, ...attributes }),\n )\n return Transaction.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /** @deprecated The API marks this deprecated; prefer chargeCard() with a token. */\n async chargeCardToken(sid: string, attributes: Raw): Promise<Transaction> {\n const raw = await this.transport.request(\n 'POST',\n 'transaction/charge-card-token',\n this.envelope({ sid, ...attributes }),\n )\n return Transaction.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async chargeAch(sid: string, attributes: Raw): Promise<Transaction> {\n const raw = await this.transport.request(\n 'POST',\n 'transaction/charge-ach',\n this.envelope({ sid, ...attributes }),\n )\n return Transaction.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async tokenizeCard(sid: string, attributes: Raw): Promise<TokenizeResult> {\n const raw = await this.transport.request(\n 'POST',\n 'transaction/tokenize-card',\n this.envelope({ sid, ...attributes }),\n )\n return TokenizeResult.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Place a hold on a card without moving money. Pass a `token` or the raw\n * card fields, as for {@link Transactions.chargeCard}.\n *\n * The returned `transactionNumber` is the handle on the authorization:\n * collect it with {@link Transactions.capture}, or release the hold with\n * {@link Transactions.void} (type `CC`). Capture promptly — the issuer\n * releases an uncaptured hold on its own schedule.\n */\n async authorize(sid: string, attributes: Raw): Promise<Transaction> {\n const raw = await this.transport.request(\n 'POST',\n 'transaction/authorize',\n this.envelope({ sid, ...attributes }),\n )\n return Transaction.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n /**\n * Capture an authorization. Omit `amount` to capture the full authorized\n * amount, or pass less to capture part of it.\n *\n * An authorization is captured once: a partial capture settles that amount\n * and releases the rest to the cardholder.\n *\n * @param transactionId the `transactionNumber` returned by {@link Transactions.authorize}\n */\n async capture(\n sid: string,\n transactionId: number | string,\n amount?: number | string,\n ): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'POST',\n 'transaction/capture',\n this.envelope({ sid, transaction_id: transactionId, amount }),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n\n async refund(sid: string, attributes: Raw): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'POST',\n 'transaction/refund',\n this.envelope({ sid, ...attributes }),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n\n async void(\n sid: string,\n transactionType: string,\n transactionId: number | string,\n ): Promise<MessageResult> {\n const raw = await this.transport.request(\n 'PATCH',\n 'transaction/void',\n this.envelope({ sid, transaction_type: transactionType, transaction_id: transactionId }),\n )\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n}\n","import { Config, DEFAULT_BASE_URL } from './config.js'\nimport { Transport } from './http/transport.js'\nimport { Addresses } from './resources/addresses.js'\nimport { Chargebacks } from './resources/chargebacks.js'\nimport { Customers } from './resources/customers.js'\nimport { Deposits } from './resources/deposits.js'\nimport { Documents } from './resources/documents.js'\nimport { Funds } from './resources/funds.js'\nimport { Invoices } from './resources/invoices.js'\nimport { Merchants } from './resources/merchants.js'\nimport { PaymentMethods } from './resources/payment-methods.js'\nimport { RecurringInvoices } from './resources/recurring-invoices.js'\nimport { RecurringPayments } from './resources/recurring-payments.js'\nimport { SubscriptionPlans } from './resources/subscription-plans.js'\nimport { Subscriptions } from './resources/subscriptions.js'\nimport { Transactions } from './resources/transactions.js'\n\n/**\n * Entry point for the Dime Payments API.\n *\n * ```ts\n * const dime = new Client('your-api-token')\n * const txn = await dime.transactions.chargeCard('000010', {\n * amount: '49.99',\n * token: 'tok_abc123',\n * })\n * ```\n */\nexport class Client {\n readonly transactions: Transactions\n readonly customers: Customers\n readonly paymentMethods: PaymentMethods\n readonly merchants: Merchants\n readonly addresses: Addresses\n readonly deposits: Deposits\n readonly recurringPayments: RecurringPayments\n readonly invoices: Invoices\n readonly recurringInvoices: RecurringInvoices\n readonly chargebacks: Chargebacks\n readonly documents: Documents\n readonly funds: Funds\n readonly subscriptionPlans: SubscriptionPlans\n readonly subscriptions: Subscriptions\n\n private readonly _config: Config\n\n constructor(token: string | Config, baseUrl: string = DEFAULT_BASE_URL) {\n this._config = token instanceof Config ? token : new Config(token, baseUrl)\n\n const transport = new Transport(this._config)\n\n this.transactions = new Transactions(transport)\n this.customers = new Customers(transport)\n this.paymentMethods = new PaymentMethods(transport)\n this.merchants = new Merchants(transport)\n this.addresses = new Addresses(transport)\n this.deposits = new Deposits(transport)\n this.recurringPayments = new RecurringPayments(transport)\n this.invoices = new Invoices(transport)\n this.recurringInvoices = new RecurringInvoices(transport)\n this.chargebacks = new Chargebacks(transport)\n this.documents = new Documents(transport)\n this.funds = new Funds(transport)\n this.subscriptionPlans = new SubscriptionPlans(transport)\n this.subscriptions = new Subscriptions(transport)\n }\n\n config(): Config {\n return this._config\n }\n}\n"],"mappings":"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","names":[]}
|