@dime-technology/dime-js-sdk 1.0.0 → 1.2.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../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/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-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 { Client } from './client.js'\nexport { Config, DEFAULT_BASE_URL, VERSION } from './config.js'\nexport { CursorPage } from './pagination/cursor-page.js'\n\n// Data objects\nexport { Transaction } from './data-objects/transaction.js'\nexport { TransactionAddress } from './data-objects/transaction-address.js'\nexport { Customer } from './data-objects/customer.js'\nexport { PaymentMethod } from './data-objects/payment-method.js'\nexport { Merchant } from './data-objects/merchant.js'\nexport { FormLink } from './data-objects/form-link.js'\nexport { Address } from './data-objects/address.js'\nexport { Deposit } from './data-objects/deposit.js'\nexport { DepositWithTransactions } from './data-objects/deposit-with-transactions.js'\nexport { DepositGroup } from './data-objects/deposit-group.js'\nexport { RecurringPayment } from './data-objects/recurring-payment.js'\nexport { RecurringPaymentMethod } from './data-objects/recurring-payment-method.js'\nexport { MessageResult } from './data-objects/message-result.js'\nexport { TokenizeResult } from './data-objects/tokenize-result.js'\n\n// Exceptions\nexport {\n DimeException,\n ValidationException,\n RateLimitException,\n ApiException,\n AuthenticationException,\n PermissionDeniedException,\n NotFoundException,\n ServerException,\n ConnectionException,\n} from './exceptions/index.js'\n","export const DEFAULT_BASE_URL = 'https://app.dimepayments.com'\nexport const VERSION = '1.0.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 =\n 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 expects request parameters in the JSON body even for GET\n * requests; this transport always sends the payload as a JSON body regardless\n * of HTTP method, matching the server's expectation.\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 if (Object.keys(query).length > 0) {\n url += '?' + new URLSearchParams(query).toString()\n }\n\n const hasBody = Object.keys(body).length > 0\n const init: RequestInit = {\n method,\n headers: {\n Authorization: `Bearer ${this.config.token}`,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-Dime-Sdk': `dime-js-sdk/${VERSION}`,\n },\n ...(hasBody ? { 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 ? `Request timed out after ${this.config.timeout}s` : `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\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 &&\n typeof raw['meta'] === 'object' &&\n !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) =>\n 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(\n Object.entries(obj).filter(([, v]) => v !== null && v !== undefined),\n )\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('GET', 'address/show', this.envelope({ sid, uuid, address_id: addressId }))\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('POST', 'address/create', this.envelope({ sid, uuid, ...attributes }))\n return Address.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async update(sid: string, uuid: string, addressId: number | string, attributes: Raw): Promise<Address> {\n const raw = await this.transport.request('PATCH', 'address/update', this.envelope({ sid, uuid, address_id: addressId, ...attributes }))\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('POST', 'address/delete', this.envelope({ sid, uuid, address_id: addressId }))\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('GET', 'customer/show', this.envelope({ sid }, filters))\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('POST', 'customer/create', this.envelope({ sid, ...attributes }))\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('PATCH', 'customer/update', this.envelope({ sid, ...attributes }, filters))\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('POST', 'customer/delete', this.envelope({ sid }, filters))\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('GET', 'deposit/list-with-trans', this.envelope({ sid }, filters))\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('GET', 'deposit/show', this.envelope({ sid, ...identifier }))\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 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('PATCH', 'merchant/update', this.envelope({ sid, ...attributes }))\n return Merchant.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async getFormLink(sid: string): Promise<FormLink> {\n const raw = await this.transport.request('GET', 'merchant/get-form-link', this.envelope({ sid }))\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('GET', 'payment-method/list', this.envelope({ sid }, filters), PaymentMethod.fromRaw)\n }\n\n async show(sid: string, paymentMethodId: number | string, filters: Raw): Promise<PaymentMethod> {\n const raw = await this.transport.request('GET', 'payment-method/show', this.envelope({ sid, payment_method_id: paymentMethodId }, filters))\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('POST', 'payment-method/create', this.envelope({ sid, ...attributes }))\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('PATCH', 'payment-method/update', this.envelope({ sid, ...attributes }))\n return PaymentMethod.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async delete(sid: string, paymentMethodId: number | string, uuid: string): Promise<MessageResult> {\n const raw = await this.transport.request('POST', 'payment-method/delete', this.envelope({ sid, payment_method_id: paymentMethodId, uuid }))\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\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('GET', 'recurring-payment/list', this.envelope({ sid }, filters), RecurringPayment.fromRaw)\n }\n\n async show(sid: string, recurringPaymentId: number | string): Promise<RecurringPayment> {\n const raw = await this.transport.request('GET', 'recurring-payment/show', this.envelope({ sid, recurring_payment_id: recurringPaymentId }))\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('POST', 'recurring-payment/create', this.envelope({ sid, ...attributes }))\n return RecurringPayment.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async edit(sid: string, recurringPaymentId: number | string, attributes: Raw): Promise<RecurringPayment> {\n const raw = await this.transport.request('PATCH', 'recurring-payment/edit', this.envelope({ sid, recurring_payment_id: recurringPaymentId, ...attributes }))\n return RecurringPayment.fromRaw((raw['data'] as Raw) ?? {})\n }\n\n async pause(sid: string, recurringPaymentId: number | string, pauseUntilDate?: string): Promise<RecurringPayment> {\n const raw = await this.transport.request('PATCH', 'recurring-payment/pause', this.envelope({ sid, recurring_payment_id: recurringPaymentId, pause_until_date: pauseUntilDate }))\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('PATCH', 'recurring-payment/cancel', this.envelope({ sid, recurring_payment_id: recurringPaymentId }))\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('PATCH', 'recurring-payment/activate', this.envelope({ sid, recurring_payment_id: recurringPaymentId }))\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('POST', 'recurring-payment/delete', this.envelope({ sid, recurring_payment_id: recurringPaymentId }))\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('GET', 'transactions', this.envelope({ sid }, filters), Transaction.fromRaw)\n }\n\n async show(sid: string, identifier: Raw): Promise<Transaction> {\n const raw = await this.transport.request('GET', 'transaction', this.envelope({ sid, ...identifier }))\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('POST', 'transaction/charge-card', this.envelope({ sid, ...attributes }))\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('POST', 'transaction/charge-card-token', this.envelope({ sid, ...attributes }))\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('POST', 'transaction/charge-ach', this.envelope({ sid, ...attributes }))\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('POST', 'transaction/tokenize-card', this.envelope({ sid, ...attributes }))\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('POST', 'transaction/refund', this.envelope({ sid, ...attributes }))\n return MessageResult.fromRaw((raw['data'] as Raw) ?? raw)\n }\n\n async void(sid: string, transactionType: string, transactionId: number | string): Promise<MessageResult> {\n const raw = await this.transport.request('PATCH', 'transaction/void', this.envelope({ sid, transaction_type: transactionType, transaction_id: transactionId }))\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 { Merchants } from './resources/merchants.js'\nimport { PaymentMethods } from './resources/payment-methods.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\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 }\n\n config(): Config {\n return this._config\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../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/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 { Client } from './client.js'\nexport { Config, DEFAULT_BASE_URL, VERSION } from './config.js'\nexport { CursorPage } from './pagination/cursor-page.js'\n\n// Data objects\nexport { Transaction } from './data-objects/transaction.js'\nexport { TransactionAddress } from './data-objects/transaction-address.js'\nexport { Customer } from './data-objects/customer.js'\nexport { PaymentMethod } from './data-objects/payment-method.js'\nexport { Merchant } from './data-objects/merchant.js'\nexport { FormLink } from './data-objects/form-link.js'\nexport { Address } from './data-objects/address.js'\nexport { Deposit } from './data-objects/deposit.js'\nexport { DepositWithTransactions } from './data-objects/deposit-with-transactions.js'\nexport { DepositGroup } from './data-objects/deposit-group.js'\nexport { RecurringPayment } from './data-objects/recurring-payment.js'\nexport { RecurringPaymentMethod } from './data-objects/recurring-payment-method.js'\nexport { Invoice } from './data-objects/invoice.js'\nexport { InvoiceCustomer } from './data-objects/invoice-customer.js'\nexport { InvoiceLineItem } from './data-objects/invoice-line-item.js'\nexport { InvoicePayment } from './data-objects/invoice-payment.js'\nexport { InvoiceEvent } from './data-objects/invoice-event.js'\nexport { InvoiceItem } from './data-objects/invoice-item.js'\nexport { InvoiceLink } from './data-objects/invoice-link.js'\nexport { RecurringInvoice } from './data-objects/recurring-invoice.js'\nexport { MessageResult } from './data-objects/message-result.js'\nexport { TokenizeResult } from './data-objects/tokenize-result.js'\n\n// Exceptions\nexport {\n DimeException,\n ValidationException,\n RateLimitException,\n ApiException,\n AuthenticationException,\n PermissionDeniedException,\n NotFoundException,\n ServerException,\n ConnectionException,\n} from './exceptions/index.js'\n","export const DEFAULT_BASE_URL = 'https://app.dimepayments.com'\nexport const VERSION = '1.2.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 { 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\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 ) {}\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 )\n }\n}\n","import { arrArrayFrom, arrBool, arrInt, arrObjectFrom, arrString } from '../support/arr.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 ) {}\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 )\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 * `reminder_settings`.\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 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, 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 ) {}\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 )\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 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":[]}