paysafe-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/LICENSE +21 -0
- package/README.md +170 -0
- package/dist/index.cjs +1572 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1211 -0
- package/dist/index.d.ts +1211 -0
- package/dist/index.js +1548 -0
- package/dist/index.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/errors.ts","../src/core/config.ts","../src/core/telemetry.ts","../src/core/http-client.ts","../src/core/rate-limiter.ts","../src/types/shared.ts","../src/resources/payment-handles.ts","../src/resources/payments.ts","../src/resources/settlements.ts","../src/resources/refunds.ts","../src/resources/payouts.ts","../src/resources/verifications.ts","../src/resources/customers.ts","../src/resources/applications.ts","../src/resources/plans.ts","../src/resources/subscriptions.ts","../src/resources/fx-rates.ts","../src/resources/customer-identity.ts","../src/resources/bank-account-validation.ts","../src/core/webhook-crypto.ts","../src/resources/webhooks.ts","../src/client.ts"],"names":["API_NAME"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Structured error taxonomy for the Paysafe SDK, mirroring the reference\n * Go and Elixir implementations so callers can branch reliably.\n */\n\n/** Classifies the failure mode of a {@link PaysafeError}. */\nexport type PaysafeErrorKind =\n | \"api_error\"\n | \"http_error\"\n | \"rate_limited\"\n | \"timeout\"\n | \"invalid_config\"\n | \"invalid_params\"\n | \"webhook_signature_mismatch\"\n | \"decode_error\"\n | \"context_canceled\";\n\n/** A single field-level validation error returned by the Paysafe API. */\nexport interface PaysafeFieldError {\n field: string;\n error: string;\n}\n\nexport interface PaysafeErrorInit {\n kind: PaysafeErrorKind;\n message: string;\n code?: string;\n httpStatus?: number;\n fieldErrors?: PaysafeFieldError[];\n details?: Record<string, unknown>;\n retryable?: boolean;\n cause?: unknown;\n}\n\nconst RETRYABLE_API_CODES = new Set([\"3028\", \"5000\", \"5001\", \"5002\"]);\nconst RETRYABLE_HTTP_STATUSES = new Set([429, 500, 502, 503, 504]);\n\n/**\n * The structured error type thrown by every Paysafe SDK operation.\n * Every rejected promise from this SDK rejects with an instance of\n * `PaysafeError` (never a bare string or plain object).\n *\n * @example\n * ```ts\n * try {\n * await client.payments.create(req);\n * } catch (err) {\n * if (err instanceof PaysafeError) {\n * console.error(err.kind, err.code, err.message, err.fieldErrors);\n * }\n * }\n * ```\n */\nexport class PaysafeError extends Error {\n readonly kind: PaysafeErrorKind;\n readonly code?: string;\n readonly httpStatus?: number;\n readonly fieldErrors: PaysafeFieldError[];\n readonly details?: Record<string, unknown>;\n readonly retryable: boolean;\n\n constructor(init: PaysafeErrorInit) {\n super(formatMessage(init));\n this.name = \"PaysafeError\";\n this.kind = init.kind;\n this.code = init.code;\n this.httpStatus = init.httpStatus;\n this.fieldErrors = init.fieldErrors ?? [];\n this.details = init.details;\n this.retryable = init.retryable ?? false;\n if (init.cause !== undefined) {\n this.cause = init.cause;\n }\n Object.setPrototypeOf(this, PaysafeError.prototype);\n }\n\n /** Whether the SDK's retry policy should attempt this request again. */\n isRetryable(): boolean {\n return this.retryable;\n }\n\n static fromApiResponse(body: Record<string, unknown>, httpStatus: number): PaysafeError {\n const errObj = isRecord(body.error) ? body.error : undefined;\n const code = errObj ? stringify(errObj.code) : \"\";\n let message = \"Unknown API error\";\n if (errObj && typeof errObj.message === \"string\" && errObj.message !== \"\") {\n message = errObj.message;\n } else if (typeof body.message === \"string\" && body.message !== \"\") {\n message = body.message;\n }\n\n let fieldErrors: PaysafeFieldError[] = [];\n if (errObj && Array.isArray(errObj.fieldErrors)) {\n fieldErrors = errObj.fieldErrors\n .filter(isRecord)\n .map((fe) => ({ field: stringify(fe.field), error: stringify(fe.error) }));\n }\n\n return new PaysafeError({\n kind: \"api_error\",\n code,\n message,\n httpStatus,\n fieldErrors,\n details: body,\n retryable: RETRYABLE_API_CODES.has(code) || RETRYABLE_HTTP_STATUSES.has(httpStatus),\n });\n }\n\n static httpError(cause: unknown, timedOut: boolean): PaysafeError {\n if (timedOut) {\n return new PaysafeError({\n kind: \"timeout\",\n message: \"Request timed out\",\n retryable: true,\n cause,\n });\n }\n return new PaysafeError({\n kind: \"http_error\",\n message: `HTTP transport error: ${describeCause(cause)}`,\n retryable: false,\n cause,\n });\n }\n\n static rateLimited(): PaysafeError {\n return new PaysafeError({\n kind: \"rate_limited\",\n message: \"Rate limit exceeded. Reduce request frequency.\",\n retryable: true,\n });\n }\n\n static invalidParams(message: string): PaysafeError {\n return new PaysafeError({ kind: \"invalid_params\", message, retryable: false });\n }\n\n static invalidConfig(message: string): PaysafeError {\n return new PaysafeError({ kind: \"invalid_config\", message, retryable: false });\n }\n\n static webhookMismatch(): PaysafeError {\n return new PaysafeError({\n kind: \"webhook_signature_mismatch\",\n message: \"Webhook HMAC-SHA256 signature does not match.\",\n retryable: false,\n });\n }\n\n static decodeError(cause: unknown): PaysafeError {\n return new PaysafeError({\n kind: \"decode_error\",\n message: `Failed to decode response: ${describeCause(cause)}`,\n retryable: false,\n cause,\n });\n }\n\n static contextCanceled(cause: unknown): PaysafeError {\n return new PaysafeError({\n kind: \"context_canceled\",\n message: `Request aborted: ${describeCause(cause)}`,\n retryable: false,\n cause,\n });\n }\n}\n\nfunction formatMessage(init: PaysafeErrorInit): string {\n return init.code\n ? `paysafe: ${init.kind} [${init.code}]: ${init.message}`\n : `paysafe: ${init.kind}: ${init.message}`;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction stringify(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (value === null || value === undefined) return \"\";\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return String(value);\n }\n try {\n return JSON.stringify(value) ?? \"\";\n } catch {\n return \"\";\n }\n}\n\nfunction describeCause(cause: unknown): string {\n if (cause instanceof Error) return cause.message;\n return String(cause);\n}\n","/**\n * Client configuration: credentials, environment selection, HTTP tuning\n * knobs, and the base-URL builders used by every resource.\n */\nimport { PaysafeError } from \"./errors.js\";\n\n/** Selects which Paysafe environment a client talks to. */\nexport type Environment = \"test\" | \"production\";\n\nexport const Environments = {\n Test: \"test\" as const,\n Production: \"production\" as const,\n};\n\nconst BASE_URLS: Record<Environment, string> = {\n test: \"https://api.test.paysafe.com\",\n production: \"https://api.paysafe.com\",\n};\n\nconst PAYMENTS_PATH = \"/paymenthub/v1\";\nconst SCHEDULER_PATH = \"/subscriptionsplans/v1\";\nconst APPLICATIONS_PATH = \"/merchant/v1\";\nconst FX_RATES_PATH = \"/fxrates/v1\";\nconst BANK_ACCOUNT_VALIDATOR_PATH = \"/bankaccountvalidator/v1\";\nconst CUSTOMER_IDENTIFICATION_PATH = \"/customeridentification/v1\";\n\n/** Local token-bucket rate limit applied before every outbound request. */\nexport interface RateLimitConfig {\n /** Maximum number of requests allowed within `windowMs`. */\n limit: number;\n /** Window, in milliseconds, over which `limit` applies. */\n windowMs: number;\n}\n\n/**\n * `fetch`-compatible function signature. Defaults to `globalThis.fetch`;\n * override for testing or to inject a custom transport (proxying,\n * connection pooling, request signing middleware, etc.).\n */\nexport type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;\n\nexport interface PaysafeClientOptions {\n /** API username from the Paysafe Business Portal. */\n username: string;\n /** API password from the Paysafe Business Portal. */\n password: string;\n /** Test or Production. Defaults to `\"test\"`. */\n environment?: Environment;\n /** Default account ID used when a resource call doesn't specify one. */\n accountId?: string;\n /** Overrides the environment-derived base URL entirely (e.g. a mock server in tests). */\n baseUrlOverride?: string;\n /** Overall per-request timeout, in milliseconds. Defaults to 30_000. */\n timeoutMs?: number;\n /** Maximum number of retries on transient failures. Defaults to 3. */\n maxRetries?: number;\n /** Base delay, in milliseconds, for exponential backoff between retries. Defaults to 500. */\n retryBaseDelayMs?: number;\n /** Local token-bucket rate limit. Defaults to 100 requests / 1000ms. */\n rateLimit?: RateLimitConfig;\n /** Custom `fetch` implementation. Defaults to `globalThis.fetch`. */\n fetch?: FetchLike;\n /** Metric/event name prefix emitted by telemetry hooks. Defaults to `\"paysafe\"`. */\n telemetryPrefix?: string;\n}\n\n/** Fully-resolved, validated configuration used internally by the SDK. */\nexport class ResolvedConfig {\n readonly username: string;\n readonly password: string;\n readonly environment: Environment;\n readonly accountId?: string;\n readonly baseUrlOverride?: string;\n readonly timeoutMs: number;\n readonly maxRetries: number;\n readonly retryBaseDelayMs: number;\n readonly rateLimit: RateLimitConfig;\n readonly fetchImpl: FetchLike;\n readonly telemetryPrefix: string;\n\n constructor(opts: PaysafeClientOptions) {\n this.username = opts.username;\n this.password = opts.password;\n this.environment = opts.environment ?? \"test\";\n this.accountId = opts.accountId;\n this.baseUrlOverride = opts.baseUrlOverride;\n this.timeoutMs = opts.timeoutMs ?? 30_000;\n this.maxRetries = opts.maxRetries ?? 3;\n this.retryBaseDelayMs = opts.retryBaseDelayMs ?? 500;\n this.rateLimit = opts.rateLimit ?? { limit: 100, windowMs: 1000 };\n this.telemetryPrefix = opts.telemetryPrefix ?? \"paysafe\";\n\n const fetchImpl = opts.fetch ?? globalThis.fetch;\n if (typeof fetchImpl !== \"function\") {\n throw PaysafeError.invalidConfig(\n \"No fetch implementation available. Provide one via `fetch` in PaysafeClientOptions \" +\n \"(the global fetch is unavailable in this runtime).\",\n );\n }\n this.fetchImpl = fetchImpl.bind(globalThis);\n\n this.validate();\n }\n\n private validate(): void {\n if (!this.username) {\n throw PaysafeError.invalidConfig(\"username is required\");\n }\n if (!this.password) {\n throw PaysafeError.invalidConfig(\"password is required\");\n }\n if (this.environment !== \"test\" && this.environment !== \"production\") {\n throw PaysafeError.invalidConfig('environment must be \"test\" or \"production\"');\n }\n if (this.maxRetries < 0) {\n throw PaysafeError.invalidConfig(\"maxRetries must be >= 0\");\n }\n if (this.rateLimit.limit <= 0 || this.rateLimit.windowMs <= 0) {\n throw PaysafeError.invalidConfig(\"rateLimit must have a positive limit and windowMs\");\n }\n if (this.timeoutMs <= 0) {\n throw PaysafeError.invalidConfig(\"timeoutMs must be > 0\");\n }\n }\n\n baseUrl(): string {\n return this.baseUrlOverride ?? BASE_URLS[this.environment];\n }\n\n paymentsUrl(): string {\n return this.baseUrl() + PAYMENTS_PATH;\n }\n\n schedulerUrl(): string {\n return this.baseUrl() + SCHEDULER_PATH;\n }\n\n applicationsUrl(): string {\n return this.baseUrl() + APPLICATIONS_PATH;\n }\n\n fxRatesUrl(): string {\n return this.baseUrl() + FX_RATES_PATH;\n }\n\n bankAccountValidatorUrl(): string {\n return this.baseUrl() + BANK_ACCOUNT_VALIDATOR_PATH;\n }\n\n customerIdentificationUrl(): string {\n return this.baseUrl() + CUSTOMER_IDENTIFICATION_PATH;\n }\n\n /** Computes the Base64-encoded HTTP Basic Auth header value. */\n authHeader(): string {\n const raw = `${this.username}:${this.password}`;\n return `Basic ${base64Encode(raw)}`;\n }\n\n /** Returns `override` if non-empty, otherwise the configured default account ID. */\n resolveAccountId(override?: string): string {\n if (override) return override;\n if (this.accountId) return this.accountId;\n throw PaysafeError.invalidParams(\n \"accountId is required: pass it explicitly or set a default via PaysafeClientOptions.accountId\",\n );\n }\n}\n\nfunction base64Encode(raw: string): string {\n if (typeof btoa === \"function\") {\n // Browser / edge runtimes.\n return btoa(raw);\n }\n // Node.js.\n return Buffer.from(raw, \"utf-8\").toString(\"base64\");\n}\n\n/** Builds a {@link ResolvedConfig} from `PAYSAFE_*` environment variables (Node.js only). */\nexport function configFromEnv(overrides: Partial<PaysafeClientOptions> = {}): PaysafeClientOptions {\n const env = typeof process !== \"undefined\" ? process.env : undefined;\n if (!env) {\n throw PaysafeError.invalidConfig(\n \"configFromEnv() requires a Node.js-like `process.env`; pass options explicitly in this runtime.\",\n );\n }\n\n const base: PaysafeClientOptions = {\n username: env.PAYSAFE_USERNAME ?? \"\",\n password: env.PAYSAFE_PASSWORD ?? \"\",\n };\n if (env.PAYSAFE_ENVIRONMENT === \"production\") {\n base.environment = \"production\";\n }\n if (env.PAYSAFE_ACCOUNT_ID) {\n base.accountId = env.PAYSAFE_ACCOUNT_ID;\n }\n\n return { ...base, ...overrides };\n}\n","/**\n * Lightweight, dependency-free instrumentation hooks around every\n * outbound Paysafe API call. Attach a {@link TelemetryHook} to observe\n * start/stop/exception events for logging, metrics, or tracing.\n */\n\nexport interface TelemetryStartMeta {\n prefix: string;\n api: string;\n method: string;\n path: string;\n operation: string;\n}\n\nexport interface TelemetryStopMeta extends TelemetryStartMeta {\n durationMs: number;\n httpStatus: number;\n ok: boolean;\n error?: unknown;\n}\n\nexport interface TelemetryExceptionMeta extends TelemetryStartMeta {\n durationMs: number;\n reason: unknown;\n}\n\n/**\n * Receives telemetry events. All methods are optional — implement only\n * what you need; the SDK checks for each method's presence before\n * calling it.\n */\nexport interface TelemetryHook {\n onStart?: (meta: TelemetryStartMeta) => void;\n onStop?: (meta: TelemetryStopMeta) => void;\n onException?: (meta: TelemetryExceptionMeta) => void;\n}\n\ninterface HasStatusCode {\n httpStatus?: number;\n}\n\nfunction hasStatusCode(value: unknown): value is HasStatusCode {\n return typeof value === \"object\" && value !== null && \"httpStatus\" in value;\n}\n\n/**\n * Wraps `fn` with start/stop telemetry events, re-emitting an exception\n * event (then re-throwing) if `fn` throws or rejects.\n */\nexport async function span<T>(\n hook: TelemetryHook | undefined,\n meta: TelemetryStartMeta,\n fn: () => Promise<T>,\n): Promise<T> {\n const start = Date.now();\n hook?.onStart?.(meta);\n\n try {\n const result = await fn();\n hook?.onStop?.({\n ...meta,\n durationMs: Date.now() - start,\n httpStatus: 0,\n ok: true,\n });\n return result;\n } catch (error) {\n const httpStatus = hasStatusCode(error) ? (error.httpStatus ?? 0) : 0;\n hook?.onStop?.({\n ...meta,\n durationMs: Date.now() - start,\n httpStatus,\n ok: false,\n error,\n });\n throw error;\n }\n}\n","/**\n * Shared low-level transport used by every resource (payment handles,\n * payments, plans, subscriptions, ...). Resources depend on this rather\n * than calling `fetch` directly.\n */\nimport type { ResolvedConfig } from \"./config.js\";\nimport { PaysafeError } from \"./errors.js\";\nimport type { RateLimiter } from \"./rate-limiter.js\";\nimport type { TelemetryHook } from \"./telemetry.js\";\nimport { span } from \"./telemetry.js\";\n\nexport type HttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n\nconst SDK_USER_AGENT = \"paysafe-sdk/1.0.0 (+https://github.com/iamkanishka/paysafe-sdk)\";\nconst MAX_JITTER_MS = 100;\n\n/** Computes `base * 2^attempt` with up to `MAX_JITTER_MS` of random jitter. */\nfunction backoffDelayMs(baseMs: number, attempt: number): number {\n const multiplier = 2 ** attempt;\n const jitter = Math.random() * MAX_JITTER_MS;\n return baseMs * multiplier + jitter;\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(resolve, ms);\n signal?.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n reject(PaysafeError.contextCanceled(signal.reason));\n },\n { once: true },\n );\n });\n}\n\nasync function decodeErrorBody(response: Response): Promise<Record<string, unknown>> {\n const text = await response.text();\n if (!text) return {};\n try {\n const parsed: unknown = JSON.parse(text);\n if (typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n return parsed as Record<string, unknown>;\n }\n return { message: text };\n } catch {\n return { message: text };\n }\n}\n\nexport interface RequestOptions {\n /** Bounded-context API name for telemetry, e.g. `\"payments\"`, `\"scheduler\"`. */\n api: string;\n /** Dotted operation name for telemetry, e.g. `\"payments.create\"`. */\n operation: string;\n method: HttpMethod;\n url: string;\n body?: unknown;\n /** Caller-supplied abort signal, composed with the client's own timeout. */\n signal?: AbortSignal;\n}\n\n/**\n * The shared transport: rate limiting, retry with exponential backoff +\n * jitter, telemetry spans, and JSON encode/decode all happen here so\n * every resource method stays a thin one-liner.\n */\nexport class HttpTransport {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly limiter: RateLimiter,\n private readonly hook?: TelemetryHook,\n ) {}\n\n /**\n * Performs the HTTP round trip and returns the raw response body as\n * text. Used directly for endpoints with no JSON object response body\n * (e.g. `DELETE`).\n */\n async raw(options: RequestOptions): Promise<string> {\n const meta = {\n prefix: this.cfg.telemetryPrefix,\n api: options.api,\n method: options.method,\n path: options.url,\n operation: options.operation,\n };\n\n return span(this.hook, meta, async () => {\n this.limiter.allow(this.cfg.username, this.cfg.rateLimit.limit, this.cfg.rateLimit.windowMs);\n return this.doWithRetry(options, 0);\n });\n }\n\n /**\n * Performs the HTTP round trip and decodes the JSON response body as\n * `T`. This is the common case used by nearly every resource method.\n */\n async do<T>(options: RequestOptions): Promise<T> {\n const raw = await this.raw(options);\n if (!raw) {\n return {} as T;\n }\n try {\n return JSON.parse(raw) as T;\n } catch (cause) {\n throw PaysafeError.decodeError(cause);\n }\n }\n\n private async doWithRetry(options: RequestOptions, attempt: number): Promise<string> {\n try {\n return await this.doOnce(options);\n } catch (err) {\n const retryable = err instanceof PaysafeError && err.isRetryable();\n if (retryable && attempt < this.cfg.maxRetries) {\n const delay = backoffDelayMs(this.cfg.retryBaseDelayMs, attempt);\n await sleep(delay, options.signal);\n return this.doWithRetry(options, attempt + 1);\n }\n throw err;\n }\n }\n\n private async doOnce(options: RequestOptions): Promise<string> {\n const controller = new AbortController();\n const timeoutTimer = setTimeout(\n () => controller.abort(new Error(\"timeout\")),\n this.cfg.timeoutMs,\n );\n\n if (options.signal) {\n if (options.signal.aborted) {\n controller.abort(options.signal.reason);\n } else {\n options.signal.addEventListener(\"abort\", () => controller.abort(options.signal?.reason), {\n once: true,\n });\n }\n }\n\n const headers: Record<string, string> = {\n Authorization: this.cfg.authHeader(),\n Accept: \"application/json\",\n \"User-Agent\": SDK_USER_AGENT,\n };\n\n let requestBody: string | undefined;\n if (options.body !== undefined) {\n try {\n requestBody = JSON.stringify(options.body);\n } catch (cause) {\n clearTimeout(timeoutTimer);\n throw PaysafeError.invalidParams(`failed to encode request body: ${String(cause)}`);\n }\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n let response: Response;\n try {\n response = await this.cfg.fetchImpl(options.url, {\n method: options.method,\n headers,\n body: requestBody,\n signal: controller.signal,\n });\n } catch (cause) {\n clearTimeout(timeoutTimer);\n const timedOut = controller.signal.aborted;\n throw PaysafeError.httpError(cause, timedOut);\n }\n clearTimeout(timeoutTimer);\n\n if (response.ok) {\n return response.text();\n }\n\n const errorBody = await decodeErrorBody(response);\n throw PaysafeError.fromApiResponse(errorBody, response.status);\n }\n}\n","/**\n * Per-credential token-bucket rate limiter guarding outbound Paysafe API\n * calls, mirroring the Go/Elixir reference implementations. Zero\n * dependencies; pure timer-based math, no background intervals.\n */\nimport { PaysafeError } from \"./errors.js\";\n\ninterface Bucket {\n capacity: number;\n tokens: number;\n refillRatePerMs: number;\n updatedAt: number;\n}\n\nfunction newBucket(limit: number, windowMs: number): Bucket {\n return {\n capacity: limit,\n tokens: limit,\n refillRatePerMs: limit / windowMs,\n updatedAt: Date.now(),\n };\n}\n\nfunction tryConsume(bucket: Bucket): boolean {\n const now = Date.now();\n const elapsedMs = now - bucket.updatedAt;\n bucket.updatedAt = now;\n\n bucket.tokens = Math.min(bucket.capacity, bucket.tokens + elapsedMs * bucket.refillRatePerMs);\n\n if (bucket.tokens >= 1) {\n bucket.tokens -= 1;\n return true;\n }\n return false;\n}\n\n/**\n * Manages one token bucket per key (typically the API username), so\n * multiple clients sharing a process don't starve each other's budget.\n */\nexport class RateLimiter {\n private readonly buckets = new Map<string, Bucket>();\n\n private bucketFor(key: string, limit: number, windowMs: number): Bucket {\n let bucket = this.buckets.get(key);\n if (!bucket) {\n bucket = newBucket(limit, windowMs);\n this.buckets.set(key, bucket);\n }\n return bucket;\n }\n\n /**\n * Checks (and, if permitted, consumes) one token for `key`. Throws a\n * {@link PaysafeError} with `kind === \"rate_limited\"` if the bucket is\n * exhausted.\n */\n allow(key: string, limit: number, windowMs: number): void {\n const window = windowMs > 0 ? windowMs : 1000;\n const bucket = this.bucketFor(key, limit, window);\n if (!tryConsume(bucket)) {\n throw PaysafeError.rateLimited();\n }\n }\n}\n","/** A HATEOAS-style link returned by the Paysafe API. */\nexport interface PaysafeLink {\n rel: string;\n href: string;\n}\n\n/** Returns the href of the first link whose `rel` matches, or `undefined`. */\nexport function findLinkByRel(links: PaysafeLink[] | undefined, rel: string): string | undefined {\n return links?.find((link) => link.rel === rel)?.href;\n}\n","import type { ResolvedConfig } from \"../core/config.js\";\nimport type { HttpTransport } from \"../core/http-client.js\";\nimport type { CreatePaymentHandleRequest, PaymentHandle } from \"../types/payment.js\";\nimport { findLinkByRel } from \"../types/shared.js\";\n\nconst API_NAME = \"payments\";\n\n/**\n * Payment Handle operations: the entry point for every payment, payout,\n * and verification transaction. A Payment Handle tokenizes a payment\n * instrument (card, wallet, bank redirect, etc.) before it's used.\n */\nexport class PaymentHandlesResource {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly transport: HttpTransport,\n ) {}\n\n /**\n * Tokenizes a payment instrument, returning a Payment Handle. If\n * `req.accountId` is omitted, the client's default account ID is used.\n */\n async create(req: CreatePaymentHandleRequest, signal?: AbortSignal): Promise<PaymentHandle> {\n const accountId = req.accountId ?? this.cfg.resolveAccountId();\n const body: CreatePaymentHandleRequest = { ...req, accountId };\n const url = `${this.cfg.paymentsUrl()}/paymenthandles`;\n return this.transport.do<PaymentHandle>({\n api: API_NAME,\n operation: \"paymentHandles.create\",\n method: \"POST\",\n url,\n body,\n signal,\n });\n }\n\n /**\n * Retrieves a Payment Handle by ID. Useful for polling status if\n * webhooks are not received; always verify via `get` after receiving a\n * webhook before trusting the status.\n */\n async get(paymentHandleId: string, signal?: AbortSignal): Promise<PaymentHandle> {\n const url = `${this.cfg.paymentsUrl()}/paymenthandles/${encodeURIComponent(paymentHandleId)}`;\n return this.transport.do<PaymentHandle>({\n api: API_NAME,\n operation: \"paymentHandles.get\",\n method: \"GET\",\n url,\n signal,\n });\n }\n}\n\n/**\n * Returns the URL the customer should be sent to when\n * `handle.action === \"REDIRECT\"`, and `undefined` otherwise.\n */\nexport function paymentHandleRedirectUrl(handle: PaymentHandle): string | undefined {\n if (handle.action !== \"REDIRECT\") return undefined;\n return findLinkByRel(handle.links, \"payment_redirect\");\n}\n\n/** Whether the caller must redirect the customer before proceeding. */\nexport function paymentHandleRequiresAction(handle: PaymentHandle): boolean {\n return handle.action === \"REDIRECT\";\n}\n","import type { ResolvedConfig } from \"../core/config.js\";\nimport type { HttpTransport } from \"../core/http-client.js\";\nimport type {\n CreatePaymentRequest,\n ListPaymentsFilter,\n ListPaymentsResponse,\n Payment,\n} from \"../types/payment.js\";\n\nconst API_NAME = \"payments\";\n\n/**\n * Payment operations: the final transaction step after a Payment Handle\n * has reached `PAYABLE` status.\n */\nexport class PaymentsResource {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly transport: HttpTransport,\n ) {}\n\n /** Creates a payment using a `paymentHandleToken` from a `PAYABLE` Payment Handle. */\n async create(req: CreatePaymentRequest, signal?: AbortSignal): Promise<Payment> {\n const url = `${this.cfg.paymentsUrl()}/payments`;\n return this.transport.do<Payment>({\n api: API_NAME,\n operation: \"payments.create\",\n method: \"POST\",\n url,\n body: req,\n signal,\n });\n }\n\n /** Retrieves a payment by ID. */\n async get(paymentId: string, signal?: AbortSignal): Promise<Payment> {\n const url = `${this.cfg.paymentsUrl()}/payments/${encodeURIComponent(paymentId)}`;\n return this.transport.do<Payment>({\n api: API_NAME,\n operation: \"payments.get\",\n method: \"GET\",\n url,\n signal,\n });\n }\n\n /** Returns payments matching the given filter. */\n async list(filter: ListPaymentsFilter = {}, signal?: AbortSignal): Promise<Payment[]> {\n const query = new URLSearchParams();\n if (filter.merchantRefNum) query.set(\"merchantRefNum\", filter.merchantRefNum);\n if (filter.startDate) query.set(\"startDate\", filter.startDate);\n if (filter.endDate) query.set(\"endDate\", filter.endDate);\n if (filter.limit !== undefined) query.set(\"limit\", String(filter.limit));\n if (filter.offset !== undefined) query.set(\"offset\", String(filter.offset));\n\n const qs = query.toString();\n const url = `${this.cfg.paymentsUrl()}/payments${qs ? `?${qs}` : \"\"}`;\n\n const resp = await this.transport.do<ListPaymentsResponse>({\n api: API_NAME,\n operation: \"payments.list\",\n method: \"GET\",\n url,\n signal,\n });\n return resp.payments;\n }\n\n /** Cancels an authorized (not-yet-settled) payment. */\n async cancel(paymentId: string, signal?: AbortSignal): Promise<Payment> {\n const url = `${this.cfg.paymentsUrl()}/payments/${encodeURIComponent(paymentId)}/cancels`;\n return this.transport.do<Payment>({\n api: API_NAME,\n operation: \"payments.cancel\",\n method: \"POST\",\n url,\n body: {},\n signal,\n });\n }\n}\n","import type { ResolvedConfig } from \"../core/config.js\";\nimport type { HttpTransport } from \"../core/http-client.js\";\nimport type { CreateSettlementRequest, Settlement } from \"../types/payment.js\";\n\nconst API_NAME = \"payments\";\n\n/**\n * Settlement operations: capturing an authorized payment, including\n * partial settlement and cancellation of a pending settlement.\n */\nexport class SettlementsResource {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly transport: HttpTransport,\n ) {}\n\n /** Settles (captures) an authorized payment by payment ID. */\n async create(\n paymentId: string,\n req: CreateSettlementRequest,\n signal?: AbortSignal,\n ): Promise<Settlement> {\n const url = `${this.cfg.paymentsUrl()}/payments/${encodeURIComponent(paymentId)}/settlements`;\n return this.transport.do<Settlement>({\n api: API_NAME,\n operation: \"settlements.create\",\n method: \"POST\",\n url,\n body: req,\n signal,\n });\n }\n\n /** Retrieves a settlement by ID. */\n async get(settlementId: string, signal?: AbortSignal): Promise<Settlement> {\n const url = `${this.cfg.paymentsUrl()}/settlements/${encodeURIComponent(settlementId)}`;\n return this.transport.do<Settlement>({\n api: API_NAME,\n operation: \"settlements.get\",\n method: \"GET\",\n url,\n signal,\n });\n }\n\n /** Cancels a pending settlement. */\n async cancel(settlementId: string, signal?: AbortSignal): Promise<Settlement> {\n const url = `${this.cfg.paymentsUrl()}/settlements/${encodeURIComponent(settlementId)}/cancels`;\n return this.transport.do<Settlement>({\n api: API_NAME,\n operation: \"settlements.cancel\",\n method: \"POST\",\n url,\n body: {},\n signal,\n });\n }\n}\n","import type { ResolvedConfig } from \"../core/config.js\";\nimport type { HttpTransport } from \"../core/http-client.js\";\nimport type { CreateRefundRequest, Refund } from \"../types/payment.js\";\n\nconst API_NAME = \"payments\";\n\n/**\n * Refund operations.\n *\n * Refunds are addressed by *settlement* ID, not payment ID. If\n * `settleWithAuth` was `true` on the original payment, the settlement ID\n * equals the payment ID — pass it directly. Otherwise pass the\n * settlement ID returned by `SettlementsResource.create`. Don't mix\n * refund paths on the same transaction: once a refund has been issued\n * against a settlement ID, stick to that same ID for any further refunds\n * on that transaction.\n */\nexport class RefundsResource {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly transport: HttpTransport,\n ) {}\n\n /** Issues a refund for a completed payment or settlement. */\n async create(\n settlementId: string,\n req: CreateRefundRequest,\n signal?: AbortSignal,\n ): Promise<Refund> {\n const url = `${this.cfg.paymentsUrl()}/settlements/${encodeURIComponent(settlementId)}/refunds`;\n return this.transport.do<Refund>({\n api: API_NAME,\n operation: \"refunds.create\",\n method: \"POST\",\n url,\n body: req,\n signal,\n });\n }\n\n /** Retrieves a refund by ID. */\n async get(refundId: string, signal?: AbortSignal): Promise<Refund> {\n const url = `${this.cfg.paymentsUrl()}/refunds/${encodeURIComponent(refundId)}`;\n return this.transport.do<Refund>({\n api: API_NAME,\n operation: \"refunds.get\",\n method: \"GET\",\n url,\n signal,\n });\n }\n\n /** Cancels a pending refund. */\n async cancel(refundId: string, signal?: AbortSignal): Promise<Refund> {\n const url = `${this.cfg.paymentsUrl()}/refunds/${encodeURIComponent(refundId)}/cancels`;\n return this.transport.do<Refund>({\n api: API_NAME,\n operation: \"refunds.cancel\",\n method: \"POST\",\n url,\n body: {},\n signal,\n });\n }\n}\n","import type { ResolvedConfig } from \"../core/config.js\";\nimport type { HttpTransport } from \"../core/http-client.js\";\nimport type { CreatePayoutRequest, Payout } from \"../types/payment.js\";\n\nconst API_NAME = \"payments\";\n\n/**\n * Payout (credit) operations: standalone credits (general payouts) and\n * original credits (iGaming-sector payouts). 3DS does not apply to\n * payouts.\n */\nexport class PayoutsResource {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly transport: HttpTransport,\n ) {}\n\n /**\n * Creates a standalone credit (payout for non-iGaming merchants). The\n * Payment Handle must have `transactionType: \"STANDALONE_CREDIT\"`.\n */\n async standaloneCredit(req: CreatePayoutRequest, signal?: AbortSignal): Promise<Payout> {\n const accountId = req.accountId ?? this.cfg.resolveAccountId();\n const body: CreatePayoutRequest = { ...req, accountId };\n const url = `${this.cfg.paymentsUrl()}/standalonecredits`;\n return this.transport.do<Payout>({\n api: API_NAME,\n operation: \"payouts.standaloneCredit\",\n method: \"POST\",\n url,\n body,\n signal,\n });\n }\n\n /**\n * Creates an original credit (payout for iGaming merchants). The\n * Payment Handle must have `transactionType: \"ORIGINAL_CREDIT\"`.\n */\n async originalCredit(req: CreatePayoutRequest, signal?: AbortSignal): Promise<Payout> {\n const accountId = req.accountId ?? this.cfg.resolveAccountId();\n const body: CreatePayoutRequest = { ...req, accountId };\n const url = `${this.cfg.paymentsUrl()}/originalcredits`;\n return this.transport.do<Payout>({\n api: API_NAME,\n operation: \"payouts.originalCredit\",\n method: \"POST\",\n url,\n body,\n signal,\n });\n }\n\n /** Retrieves a standalone credit by ID. */\n async getStandaloneCredit(creditId: string, signal?: AbortSignal): Promise<Payout> {\n const url = `${this.cfg.paymentsUrl()}/standalonecredits/${encodeURIComponent(creditId)}`;\n return this.transport.do<Payout>({\n api: API_NAME,\n operation: \"payouts.getStandaloneCredit\",\n method: \"GET\",\n url,\n signal,\n });\n }\n\n /** Retrieves an original credit by ID. */\n async getOriginalCredit(creditId: string, signal?: AbortSignal): Promise<Payout> {\n const url = `${this.cfg.paymentsUrl()}/originalcredits/${encodeURIComponent(creditId)}`;\n return this.transport.do<Payout>({\n api: API_NAME,\n operation: \"payouts.getOriginalCredit\",\n method: \"GET\",\n url,\n signal,\n });\n }\n\n /** Cancels a standalone credit. */\n async cancelStandaloneCredit(creditId: string, signal?: AbortSignal): Promise<Payout> {\n const url = `${this.cfg.paymentsUrl()}/standalonecredits/${encodeURIComponent(creditId)}/cancels`;\n return this.transport.do<Payout>({\n api: API_NAME,\n operation: \"payouts.cancelStandaloneCredit\",\n method: \"POST\",\n url,\n body: {},\n signal,\n });\n }\n}\n","import type { ResolvedConfig } from \"../core/config.js\";\nimport type { HttpTransport } from \"../core/http-client.js\";\nimport type { CreateVerificationRequest, Verification } from \"../types/payment.js\";\n\nconst API_NAME = \"payments\";\n\n/**\n * Card verification: a zero-value authorization check used to validate a\n * card without charging it. The Payment Handle must have\n * `transactionType: \"VERIFICATION\"`.\n */\nexport class VerificationsResource {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly transport: HttpTransport,\n ) {}\n\n /** Creates a card verification. */\n async create(req: CreateVerificationRequest, signal?: AbortSignal): Promise<Verification> {\n const url = `${this.cfg.paymentsUrl()}/verifications`;\n return this.transport.do<Verification>({\n api: API_NAME,\n operation: \"verifications.create\",\n method: \"POST\",\n url,\n body: req,\n signal,\n });\n }\n\n /** Retrieves a verification by ID. */\n async get(verificationId: string, signal?: AbortSignal): Promise<Verification> {\n const url = `${this.cfg.paymentsUrl()}/verifications/${encodeURIComponent(verificationId)}`;\n return this.transport.do<Verification>({\n api: API_NAME,\n operation: \"verifications.get\",\n method: \"GET\",\n url,\n signal,\n });\n }\n}\n","import type { ResolvedConfig } from \"../core/config.js\";\nimport type { HttpTransport } from \"../core/http-client.js\";\nimport type {\n CreateCustomerPaymentHandleRequest,\n CreateCustomerRequest,\n Customer,\n ListPaymentHandlesResponse,\n SingleUseCustomerToken,\n UpdateCustomerRequest,\n} from \"../types/customer.js\";\n\nconst API_NAME = \"payments\";\n\n/**\n * Customer Vault profile and saved-instrument management. Base path is\n * flat (`/paymenthub/v1/customers` — no account ID in the URL).\n */\nexport class CustomersResource {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly transport: HttpTransport,\n ) {}\n\n /** Creates a customer profile in the vault. */\n async create(req: CreateCustomerRequest, signal?: AbortSignal): Promise<Customer> {\n const accountId = req.accountId ?? this.cfg.resolveAccountId();\n const body: CreateCustomerRequest = { ...req, accountId };\n const url = `${this.cfg.paymentsUrl()}/customers`;\n return this.transport.do<Customer>({\n api: API_NAME,\n operation: \"customers.create\",\n method: \"POST\",\n url,\n body,\n signal,\n });\n }\n\n /** Retrieves a customer profile by Paysafe's customer ID. */\n async get(customerId: string, signal?: AbortSignal): Promise<Customer> {\n const url = `${this.cfg.paymentsUrl()}/customers/${encodeURIComponent(customerId)}`;\n return this.transport.do<Customer>({\n api: API_NAME,\n operation: \"customers.get\",\n method: \"GET\",\n url,\n signal,\n });\n }\n\n /** Retrieves a customer profile by your own `merchantCustomerId`. */\n async getByMerchantCustomerId(\n merchantCustomerId: string,\n signal?: AbortSignal,\n ): Promise<Customer> {\n const url = `${this.cfg.paymentsUrl()}/customers?merchantCustomerId=${encodeURIComponent(merchantCustomerId)}`;\n return this.transport.do<Customer>({\n api: API_NAME,\n operation: \"customers.getByMerchantCustomerId\",\n method: \"GET\",\n url,\n signal,\n });\n }\n\n /** Updates a customer profile. Only the fields set in `req` are changed server-side. */\n async update(\n customerId: string,\n req: UpdateCustomerRequest,\n signal?: AbortSignal,\n ): Promise<Customer> {\n const url = `${this.cfg.paymentsUrl()}/customers/${encodeURIComponent(customerId)}`;\n return this.transport.do<Customer>({\n api: API_NAME,\n operation: \"customers.update\",\n method: \"PUT\",\n url,\n body: req,\n signal,\n });\n }\n\n /** Deletes a customer profile. */\n async delete(customerId: string, signal?: AbortSignal): Promise<void> {\n const url = `${this.cfg.paymentsUrl()}/customers/${encodeURIComponent(customerId)}`;\n await this.transport.raw({\n api: API_NAME,\n operation: \"customers.delete\",\n method: \"DELETE\",\n url,\n signal,\n });\n }\n\n /**\n * Converts a single-use token (SUT) returned from an initial payment\n * into a multi-use token (MUT) attached to the customer profile,\n * enabling saved-card/recurring flows.\n */\n async createPaymentHandle(\n customerId: string,\n req: CreateCustomerPaymentHandleRequest,\n signal?: AbortSignal,\n ): Promise<Record<string, unknown>> {\n const url = `${this.cfg.paymentsUrl()}/customers/${encodeURIComponent(customerId)}/paymenthandles`;\n return this.transport.do<Record<string, unknown>>({\n api: API_NAME,\n operation: \"customers.createPaymentHandle\",\n method: \"POST\",\n url,\n body: req,\n signal,\n });\n }\n\n /** Lists all saved payment handles (saved instruments) for a customer. */\n async listPaymentHandles(\n customerId: string,\n signal?: AbortSignal,\n ): Promise<Record<string, unknown>[]> {\n const url = `${this.cfg.paymentsUrl()}/customers/${encodeURIComponent(customerId)}/paymenthandles`;\n const resp = await this.transport.do<ListPaymentHandlesResponse>({\n api: API_NAME,\n operation: \"customers.listPaymentHandles\",\n method: \"GET\",\n url,\n signal,\n });\n return resp.paymentHandles;\n }\n\n /** Deletes a specific saved payment handle for a customer. */\n async deletePaymentHandle(\n customerId: string,\n handleId: string,\n signal?: AbortSignal,\n ): Promise<void> {\n const url = `${this.cfg.paymentsUrl()}/customers/${encodeURIComponent(customerId)}/paymenthandles/${encodeURIComponent(handleId)}`;\n await this.transport.raw({\n api: API_NAME,\n operation: \"customers.deletePaymentHandle\",\n method: \"DELETE\",\n url,\n signal,\n });\n }\n\n /**\n * Tokenizes the customer's entire saved profile — profile details,\n * saved cards, addresses, and bank mandates — into one short-lived\n * token valid for 900 seconds. Used to display a returning customer's\n * saved instruments, or to re-collect a one-time CVV for a saved card.\n */\n async createSingleUseCustomerToken(\n customerId: string,\n signal?: AbortSignal,\n ): Promise<SingleUseCustomerToken> {\n const url = `${this.cfg.paymentsUrl()}/customers/${encodeURIComponent(customerId)}/singleusecustomertokens`;\n return this.transport.do<SingleUseCustomerToken>({\n api: API_NAME,\n operation: \"customers.createSingleUseCustomerToken\",\n method: \"POST\",\n url,\n body: {},\n signal,\n });\n }\n}\n","import type { ResolvedConfig } from \"../core/config.js\";\nimport type { HttpTransport } from \"../core/http-client.js\";\nimport type {\n Application,\n CreateApplicationRequest,\n UploadDocumentRequest,\n} from \"../types/application.js\";\n\nconst API_NAME = \"applications\";\n\n/**\n * Merchant onboarding Application operations.\n *\n * Workflow: `create` -> `update` (optional, pre-submission) ->\n * `uploadDocument` (optional) -> `getTermsAndConditions` -> `submit`.\n * After `submit` succeeds, the application can no longer be modified via\n * the API; subscribe to webhooks for status updates rather than polling.\n */\nexport class ApplicationsResource {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly transport: HttpTransport,\n ) {}\n\n /** Creates a draft merchant application. */\n async create(req: CreateApplicationRequest, signal?: AbortSignal): Promise<Application> {\n const url = `${this.cfg.applicationsUrl()}/applications`;\n return this.transport.do<Application>({\n api: API_NAME,\n operation: \"applications.create\",\n method: \"POST\",\n url,\n body: req,\n signal,\n });\n }\n\n /** Retrieves an application by ID. */\n async get(applicationId: string, signal?: AbortSignal): Promise<Application> {\n const url = `${this.cfg.applicationsUrl()}/applications/${encodeURIComponent(applicationId)}`;\n return this.transport.do<Application>({\n api: API_NAME,\n operation: \"applications.get\",\n method: \"GET\",\n url,\n signal,\n });\n }\n\n /** Updates a draft application. Only possible before `submit` is called. */\n async update(\n applicationId: string,\n req: CreateApplicationRequest,\n signal?: AbortSignal,\n ): Promise<Application> {\n const url = `${this.cfg.applicationsUrl()}/applications/${encodeURIComponent(applicationId)}`;\n return this.transport.do<Application>({\n api: API_NAME,\n operation: \"applications.update\",\n method: \"PUT\",\n url,\n body: req,\n signal,\n });\n }\n\n /**\n * Sends the application to Paysafe for review. After this call\n * succeeds, the application can no longer be modified via the API.\n */\n async submit(applicationId: string, signal?: AbortSignal): Promise<Application> {\n const url = `${this.cfg.applicationsUrl()}/applications/${encodeURIComponent(applicationId)}`;\n return this.transport.do<Application>({\n api: API_NAME,\n operation: \"applications.submit\",\n method: \"PATCH\",\n url,\n body: {},\n signal,\n });\n }\n\n /** Retrieves the terms the merchant must accept before processing can begin. */\n async getTermsAndConditions(\n applicationId: string,\n signal?: AbortSignal,\n ): Promise<Record<string, unknown>> {\n const url = `${this.cfg.applicationsUrl()}/applications/${encodeURIComponent(applicationId)}/termsandconditions`;\n return this.transport.do<Record<string, unknown>>({\n api: API_NAME,\n operation: \"applications.getTermsAndConditions\",\n method: \"GET\",\n url,\n signal,\n });\n }\n\n /**\n * Attaches a supporting document to an application (e.g. requested by\n * a credit underwriter during review). Documents can be uploaded before\n * or after submission.\n */\n async uploadDocument(\n applicationId: string,\n req: UploadDocumentRequest,\n signal?: AbortSignal,\n ): Promise<Record<string, unknown>> {\n const url = `${this.cfg.applicationsUrl()}/applications/${encodeURIComponent(applicationId)}/documents`;\n return this.transport.do<Record<string, unknown>>({\n api: API_NAME,\n operation: \"applications.uploadDocument\",\n method: \"POST\",\n url,\n body: req,\n signal,\n });\n }\n}\n","import type { ResolvedConfig } from \"../core/config.js\";\nimport type { HttpTransport } from \"../core/http-client.js\";\nimport type {\n CreatePlanRequest,\n ListPlansResponse,\n Plan,\n UpdatePlanRequest,\n} from \"../types/scheduler.js\";\n\nconst API_NAME = \"scheduler\";\n\n/** Recurring billing Plan operations. */\nexport class PlansResource {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly transport: HttpTransport,\n ) {}\n\n /**\n * Creates a recurring billing plan under `accountId` (or the client's\n * default account ID if `accountId` is omitted).\n */\n async create(\n accountId: string | undefined,\n req: CreatePlanRequest,\n signal?: AbortSignal,\n ): Promise<Plan> {\n const resolvedAccountId = this.cfg.resolveAccountId(accountId);\n const url = `${this.cfg.schedulerUrl()}/accounts/${encodeURIComponent(resolvedAccountId)}/plans`;\n return this.transport.do<Plan>({\n api: API_NAME,\n operation: \"plans.create\",\n method: \"POST\",\n url,\n body: req,\n signal,\n });\n }\n\n /** Retrieves a plan by ID. */\n async get(accountId: string | undefined, planId: string, signal?: AbortSignal): Promise<Plan> {\n const resolvedAccountId = this.cfg.resolveAccountId(accountId);\n const url = `${this.cfg.schedulerUrl()}/accounts/${encodeURIComponent(resolvedAccountId)}/plans/${encodeURIComponent(planId)}`;\n return this.transport.do<Plan>({\n api: API_NAME,\n operation: \"plans.get\",\n method: \"GET\",\n url,\n signal,\n });\n }\n\n /** Lists all billing plans for an account. */\n async list(accountId: string | undefined, signal?: AbortSignal): Promise<Plan[]> {\n const resolvedAccountId = this.cfg.resolveAccountId(accountId);\n const url = `${this.cfg.schedulerUrl()}/accounts/${encodeURIComponent(resolvedAccountId)}/plans`;\n const resp = await this.transport.do<ListPlansResponse>({\n api: API_NAME,\n operation: \"plans.list\",\n method: \"GET\",\n url,\n signal,\n });\n return resp.plans;\n }\n\n /**\n * Updates a plan's mutable fields. Keep amount increases below 20% to\n * comply with card scheme guidelines. Discontinuing a plan prevents new\n * subscriptions but does not affect existing ones.\n */\n async update(\n accountId: string | undefined,\n planId: string,\n req: UpdatePlanRequest,\n signal?: AbortSignal,\n ): Promise<Plan> {\n const resolvedAccountId = this.cfg.resolveAccountId(accountId);\n const url = `${this.cfg.schedulerUrl()}/accounts/${encodeURIComponent(resolvedAccountId)}/plans/${encodeURIComponent(planId)}`;\n return this.transport.do<Plan>({\n api: API_NAME,\n operation: \"plans.update\",\n method: \"PATCH\",\n url,\n body: req,\n signal,\n });\n }\n\n /** Discontinues a plan. */\n async delete(accountId: string | undefined, planId: string, signal?: AbortSignal): Promise<void> {\n const resolvedAccountId = this.cfg.resolveAccountId(accountId);\n const url = `${this.cfg.schedulerUrl()}/accounts/${encodeURIComponent(resolvedAccountId)}/plans/${encodeURIComponent(planId)}`;\n await this.transport.raw({\n api: API_NAME,\n operation: \"plans.delete\",\n method: \"DELETE\",\n url,\n signal,\n });\n }\n}\n","import type { ResolvedConfig } from \"../core/config.js\";\nimport type { HttpTransport } from \"../core/http-client.js\";\nimport type {\n CreateSubscriptionRequest,\n ListSubscriptionsFilter,\n ListSubscriptionsResponse,\n Subscription,\n UpdateSubscriptionRequest,\n} from \"../types/scheduler.js\";\n\nconst API_NAME = \"scheduler\";\n\n/**\n * Subscription operations: binding a customer (via multi-use token) to a\n * Plan to create a recurring billing schedule.\n */\nexport class SubscriptionsResource {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly transport: HttpTransport,\n ) {}\n\n /** Creates a subscription for a customer under a plan. */\n async create(\n accountId: string | undefined,\n req: CreateSubscriptionRequest,\n signal?: AbortSignal,\n ): Promise<Subscription> {\n const resolvedAccountId = this.cfg.resolveAccountId(accountId);\n const url = `${this.cfg.schedulerUrl()}/accounts/${encodeURIComponent(resolvedAccountId)}/subscriptions`;\n return this.transport.do<Subscription>({\n api: API_NAME,\n operation: \"subscriptions.create\",\n method: \"POST\",\n url,\n body: req,\n signal,\n });\n }\n\n /** Retrieves a subscription by ID. */\n async get(\n accountId: string | undefined,\n subscriptionId: string,\n signal?: AbortSignal,\n ): Promise<Subscription> {\n const resolvedAccountId = this.cfg.resolveAccountId(accountId);\n const url = `${this.cfg.schedulerUrl()}/accounts/${encodeURIComponent(resolvedAccountId)}/subscriptions/${encodeURIComponent(subscriptionId)}`;\n return this.transport.do<Subscription>({\n api: API_NAME,\n operation: \"subscriptions.get\",\n method: \"GET\",\n url,\n signal,\n });\n }\n\n /** Lists subscriptions matching the given filter. */\n async list(\n accountId: string | undefined,\n filter: ListSubscriptionsFilter = {},\n signal?: AbortSignal,\n ): Promise<Subscription[]> {\n const resolvedAccountId = this.cfg.resolveAccountId(accountId);\n\n const query = new URLSearchParams();\n if (filter.planId) query.set(\"planId\", filter.planId);\n if (filter.status) query.set(\"status\", filter.status);\n if (filter.merchantCustomerId) query.set(\"merchantCustomerId\", filter.merchantCustomerId);\n if (filter.limit !== undefined) query.set(\"limit\", String(filter.limit));\n if (filter.offset !== undefined) query.set(\"offset\", String(filter.offset));\n\n const qs = query.toString();\n const url = `${this.cfg.schedulerUrl()}/accounts/${encodeURIComponent(resolvedAccountId)}/subscriptions${qs ? `?${qs}` : \"\"}`;\n\n const resp = await this.transport.do<ListSubscriptionsResponse>({\n api: API_NAME,\n operation: \"subscriptions.list\",\n method: \"GET\",\n url,\n signal,\n });\n return resp.subscriptions;\n }\n\n /**\n * Updates a subscription: extend cycles (`numCycles`), apply a discount\n * (`discountAmount`/`discountNumPayments`), or change `status` directly.\n * Prefer `cancel`/`suspend`/`reactivate` for status transitions.\n */\n async update(\n accountId: string | undefined,\n subscriptionId: string,\n req: UpdateSubscriptionRequest,\n signal?: AbortSignal,\n ): Promise<Subscription> {\n const resolvedAccountId = this.cfg.resolveAccountId(accountId);\n const url = `${this.cfg.schedulerUrl()}/accounts/${encodeURIComponent(resolvedAccountId)}/subscriptions/${encodeURIComponent(subscriptionId)}`;\n return this.transport.do<Subscription>({\n api: API_NAME,\n operation: \"subscriptions.update\",\n method: \"PATCH\",\n url,\n body: req,\n signal,\n });\n }\n\n /** Cancels a subscription immediately. */\n async cancel(\n accountId: string | undefined,\n subscriptionId: string,\n signal?: AbortSignal,\n ): Promise<Subscription> {\n return this.update(accountId, subscriptionId, { status: \"CANCELLED\" }, signal);\n }\n\n /** Pauses billing on a subscription; it can later be reactivated. */\n async suspend(\n accountId: string | undefined,\n subscriptionId: string,\n signal?: AbortSignal,\n ): Promise<Subscription> {\n return this.update(accountId, subscriptionId, { status: \"SUSPENDED\" }, signal);\n }\n\n /**\n * Re-activates a suspended subscription. The last failed payment is\n * retried; subsequent cycles resume on their original schedule.\n */\n async reactivate(\n accountId: string | undefined,\n subscriptionId: string,\n signal?: AbortSignal,\n ): Promise<Subscription> {\n return this.update(accountId, subscriptionId, { status: \"ACTIVE\" }, signal);\n }\n}\n","import type { ResolvedConfig } from \"../core/config.js\";\nimport type { HttpTransport } from \"../core/http-client.js\";\nimport type { FxRate, GetFxRateRequest } from \"../types/vas.js\";\n\nconst API_NAME = \"fx_rates\";\n\n/**\n * FX Rates API operations: guaranteed exchange rate quotes with expiry\n * timestamps. Available for Europe & UK merchants.\n *\n * The exact request/response JSON shape could not be confirmed against a\n * concrete example at the time this client was written — the base path\n * (`/fxrates/v1`) and account-scoped URL pattern are consistent with\n * every other Payments API resource, but double-check field names\n * against the current API reference before relying on this in\n * production.\n */\nexport class FxRatesResource {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly transport: HttpTransport,\n ) {}\n\n /** Gets a guaranteed FX rate for a currency pair. */\n async getRate(\n accountId: string | undefined,\n req: GetFxRateRequest,\n signal?: AbortSignal,\n ): Promise<FxRate> {\n const resolvedAccountId = this.cfg.resolveAccountId(accountId);\n const url = `${this.cfg.fxRatesUrl()}/accounts/${encodeURIComponent(resolvedAccountId)}/fxrates`;\n return this.transport.do<FxRate>({\n api: API_NAME,\n operation: \"fxRates.getRate\",\n method: \"POST\",\n url,\n body: req,\n signal,\n });\n }\n\n /** Retrieves a specific FX rate by quote ID. */\n async getQuote(\n accountId: string | undefined,\n quoteId: string,\n signal?: AbortSignal,\n ): Promise<FxRate> {\n const resolvedAccountId = this.cfg.resolveAccountId(accountId);\n const url = `${this.cfg.fxRatesUrl()}/accounts/${encodeURIComponent(resolvedAccountId)}/fxrates/${encodeURIComponent(quoteId)}`;\n return this.transport.do<FxRate>({\n api: API_NAME,\n operation: \"fxRates.getQuote\",\n method: \"GET\",\n url,\n signal,\n });\n }\n}\n","import type { ResolvedConfig } from \"../core/config.js\";\nimport type { HttpTransport } from \"../core/http-client.js\";\nimport type { IdentityProfile, VerifyIdentityRequest } from \"../types/vas.js\";\n\nconst API_NAME = \"customer_identity\";\n\n/**\n * Customer Identity (KYC) API: AML/KYC identity verification in a single\n * API request. Available globally (CA, EU/UK, US). Base path is flat —\n * not nested under `/accounts/{accountId}` like most other Payments API\n * resources.\n */\nexport class CustomerIdentityResource {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly transport: HttpTransport,\n ) {}\n\n /** Submits an identity verification request. */\n async verify(req: VerifyIdentityRequest, signal?: AbortSignal): Promise<IdentityProfile> {\n const url = `${this.cfg.customerIdentificationUrl()}/identityprofiles`;\n return this.transport.do<IdentityProfile>({\n api: API_NAME,\n operation: \"customerIdentity.verify\",\n method: \"POST\",\n url,\n body: req,\n signal,\n });\n }\n\n /** Retrieves a previously submitted identity profile by ID. */\n async get(profileId: string, signal?: AbortSignal): Promise<IdentityProfile> {\n const url = `${this.cfg.customerIdentificationUrl()}/identityprofiles/${encodeURIComponent(profileId)}`;\n return this.transport.do<IdentityProfile>({\n api: API_NAME,\n operation: \"customerIdentity.get\",\n method: \"GET\",\n url,\n signal,\n });\n }\n\n /**\n * Reruns a failed identity check. Only rerun a check whose `decision`\n * was `\"ERROR\"` — this indicates a transient downstream provider\n * issue. Do not rerun a check whose `decision` was `\"FAIL\"`;\n * resubmitting returns the same `\"FAIL\"` result again.\n */\n async rerun(profileId: string, signal?: AbortSignal): Promise<IdentityProfile> {\n const url = `${this.cfg.customerIdentificationUrl()}/identityprofiles/${encodeURIComponent(profileId)}/rerunfailedchecks`;\n return this.transport.do<IdentityProfile>({\n api: API_NAME,\n operation: \"customerIdentity.rerun\",\n method: \"POST\",\n url,\n body: {},\n signal,\n });\n }\n}\n","import type { ResolvedConfig } from \"../core/config.js\";\nimport type { HttpTransport } from \"../core/http-client.js\";\nimport type {\n BankVerification,\n CreateBankVerificationRequest,\n CreateInteracVerificationRequest,\n} from \"../types/vas.js\";\nimport { findLinkByRel } from \"../types/shared.js\";\n\n/**\n * Bank Account Validation API: a redirect-based open-banking flow that\n * lets a customer verify bank account ownership before payouts are sent\n * to that account. Available for Canada and the United States.\n */\nexport class BankAccountValidationResource {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly transport: HttpTransport,\n ) {}\n\n /**\n * Starts a bank account verification session. Redirect the customer to\n * {@link bankVerificationRedirectUrl} to complete the flow; there is no\n * synchronous result.\n */\n async create(\n accountId: string | undefined,\n req: CreateBankVerificationRequest,\n signal?: AbortSignal,\n ): Promise<BankVerification> {\n const resolvedAccountId = this.cfg.resolveAccountId(accountId);\n const url = `${this.cfg.bankAccountValidatorUrl()}/accounts/${encodeURIComponent(resolvedAccountId)}/verifications`;\n return this.transport.do<BankVerification>({\n api: \"bank_account_validation\",\n operation: \"bankAccountValidation.create\",\n method: \"POST\",\n url,\n body: req,\n signal,\n });\n }\n\n /**\n * Looks up a bank account verification by ID. Returns validated\n * account details and a single-use payment token once the customer has\n * completed the redirect flow.\n */\n async get(verificationId: string, signal?: AbortSignal): Promise<BankVerification> {\n const url = `${this.cfg.bankAccountValidatorUrl()}/verifications/${encodeURIComponent(verificationId)}`;\n return this.transport.do<BankVerification>({\n api: \"bank_account_validation\",\n operation: \"bankAccountValidation.get\",\n method: \"GET\",\n url,\n signal,\n });\n }\n}\n\n/**\n * Interac Verification Service (VerifiedMe): AML Assist Verification via\n * the customer's bank login credentials, through the Interac digital\n * identity network. Available only in Canada. Shares the\n * `/bankaccountvalidator/v1` base path with Bank Account Validation,\n * under `/verifiedme`.\n */\nexport class InteracVerificationResource {\n constructor(\n private readonly cfg: ResolvedConfig,\n private readonly transport: HttpTransport,\n ) {}\n\n /** Starts an Interac AML Assist verification session. */\n async create(\n accountId: string | undefined,\n req: CreateInteracVerificationRequest,\n signal?: AbortSignal,\n ): Promise<BankVerification> {\n const resolvedAccountId = this.cfg.resolveAccountId(accountId);\n const url = `${this.cfg.bankAccountValidatorUrl()}/verifiedme/accounts/${encodeURIComponent(resolvedAccountId)}/verifications`;\n return this.transport.do<BankVerification>({\n api: \"interac_verification\",\n operation: \"interacVerification.create\",\n method: \"POST\",\n url,\n body: req,\n signal,\n });\n }\n\n /**\n * Fetches the user's verified information once they have completed the\n * redirect flow on Interac's bank page.\n */\n async get(verificationId: string, signal?: AbortSignal): Promise<BankVerification> {\n const url = `${this.cfg.bankAccountValidatorUrl()}/verifiedme/verifications/${encodeURIComponent(verificationId)}`;\n return this.transport.do<BankVerification>({\n api: \"interac_verification\",\n operation: \"interacVerification.get\",\n method: \"GET\",\n url,\n signal,\n });\n }\n}\n\n/**\n * Returns the URL the customer should be sent to in order to complete\n * the bank validation or Interac flow.\n */\nexport function bankVerificationRedirectUrl(verification: BankVerification): string | undefined {\n return findLinkByRel(verification.links, \"redirect_bank_validation\");\n}\n","/**\n * HMAC-SHA256 webhook signature computation, portable across Node.js\n * (`node:crypto`) and Web Crypto (`SubtleCrypto`) runtimes — browsers,\n * Deno, Cloudflare Workers, and edge functions all implement the latter.\n *\n * Node.js is preferred when available because it gives us\n * `crypto.timingSafeEqual` for constant-time comparison without extra\n * work; the Web Crypto path implements an equivalent manual comparison.\n */\n\nconst encoder = new TextEncoder();\n\nfunction isNodeRuntime(): boolean {\n return (\n typeof process !== \"undefined\" &&\n typeof process.versions === \"object\" &&\n typeof process.versions.node === \"string\"\n );\n}\n\nasync function hmacSha256Base64Node(key: string, data: Uint8Array): Promise<string> {\n const nodeCrypto = await import(\"node:crypto\");\n const mac = nodeCrypto.createHmac(\"sha256\", key);\n mac.update(data);\n return mac.digest(\"base64\");\n}\n\nasync function hmacSha256Base64WebCrypto(key: string, data: Uint8Array): Promise<string> {\n const subtle = globalThis.crypto?.subtle;\n if (!subtle) {\n throw new Error(\n \"No HMAC implementation available: neither node:crypto nor globalThis.crypto.subtle is present in this runtime.\",\n );\n }\n const cryptoKey = await subtle.importKey(\n \"raw\",\n encoder.encode(key),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n const signature = await subtle.sign(\"HMAC\", cryptoKey, data);\n return bufferToBase64(new Uint8Array(signature));\n}\n\nfunction bufferToBase64(bytes: Uint8Array): string {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(bytes).toString(\"base64\");\n }\n let binary = \"\";\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n return btoa(binary);\n}\n\n/** Computes the Base64-encoded HMAC-SHA256 digest of `data` under `key`. */\nexport async function hmacSha256Base64(key: string, data: Uint8Array | string): Promise<string> {\n const bytes = typeof data === \"string\" ? encoder.encode(data) : data;\n return isNodeRuntime() ? hmacSha256Base64Node(key, bytes) : hmacSha256Base64WebCrypto(key, bytes);\n}\n\n/**\n * Constant-time string comparison. Uses `node:crypto.timingSafeEqual`\n * when available; falls back to a manual XOR-accumulate comparison\n * (equalizing on the longer input's length) elsewhere.\n */\nexport async function timingSafeStringEqual(a: string, b: string): Promise<boolean> {\n if (isNodeRuntime()) {\n const nodeCrypto = await import(\"node:crypto\");\n const bufA = Buffer.from(a, \"utf-8\");\n const bufB = Buffer.from(b, \"utf-8\");\n if (bufA.length !== bufB.length) {\n // Still run a same-cost comparison to avoid a fast-path timing leak\n // on length mismatches.\n nodeCrypto.timingSafeEqual(bufA, bufA);\n return false;\n }\n return nodeCrypto.timingSafeEqual(bufA, bufB);\n }\n\n const bytesA = encoder.encode(a);\n const bytesB = encoder.encode(b);\n const length = Math.max(bytesA.length, bytesB.length);\n let mismatch = bytesA.length === bytesB.length ? 0 : 1;\n for (let i = 0; i < length; i++) {\n const byteA = bytesA[i] ?? 0;\n const byteB = bytesB[i] ?? 0;\n mismatch |= byteA ^ byteB;\n }\n return mismatch === 0;\n}\n","import { PaysafeError } from \"../core/errors.js\";\nimport { hmacSha256Base64, timingSafeStringEqual } from \"../core/webhook-crypto.js\";\nimport type { PaysafeWebhookEvent, WebhookTopic } from \"../types/webhook.js\";\n\n/**\n * Verifies HMAC-SHA256 webhook signatures and parses event payloads.\n * Stateless and safe for concurrent use; construct once per HMAC key (or\n * once and pass the key per call).\n */\nexport class WebhooksResource {\n /**\n * Verifies the HMAC-SHA256 signature of `rawBody` against `signature`\n * using `hmacKey`, then decodes the payload into a\n * {@link PaysafeWebhookEvent}.\n *\n * @param rawBody - The exact, unmodified request body bytes/text as received.\n * @param signature - The value of the `Signature` HTTP header.\n * @param hmacKey - The merchant's webhook HMAC key from the Paysafe portal.\n *\n * Verification uses a constant-time comparison to prevent timing\n * attacks.\n */\n async verifyAndParse(\n rawBody: string | Uint8Array,\n signature: string,\n hmacKey: string,\n ): Promise<PaysafeWebhookEvent> {\n await this.verifySignature(rawBody, signature, hmacKey);\n return this.parse(rawBody);\n }\n\n /**\n * Verifies the webhook signature without parsing the body. Resolves on\n * success, or throws a {@link PaysafeError} with\n * `kind === \"webhook_signature_mismatch\"` on failure.\n */\n async verifySignature(\n rawBody: string | Uint8Array,\n signature: string,\n hmacKey: string,\n ): Promise<void> {\n const expected = await hmacSha256Base64(hmacKey, rawBody);\n const matches = await timingSafeStringEqual(expected, signature);\n if (!matches) {\n throw PaysafeError.webhookMismatch();\n }\n }\n\n /**\n * Decodes a webhook body that has already been verified (e.g. by a\n * signature-checking middleware) into a {@link PaysafeWebhookEvent}.\n */\n parse(rawBody: string | Uint8Array): PaysafeWebhookEvent {\n const text = typeof rawBody === \"string\" ? rawBody : new TextDecoder().decode(rawBody);\n try {\n return JSON.parse(text) as PaysafeWebhookEvent;\n } catch (cause) {\n throw PaysafeError.decodeError(cause);\n }\n }\n\n /**\n * Parses an already-decoded object into a {@link PaysafeWebhookEvent},\n * useful when the caller's web framework has already deserialized the\n * JSON body.\n */\n parseObject(obj: Record<string, unknown>): PaysafeWebhookEvent {\n return obj as unknown as PaysafeWebhookEvent;\n }\n}\n\n/** Classifies `event` by its `eventName` prefix. */\nexport function webhookTopic(event: PaysafeWebhookEvent): WebhookTopic {\n const name = event.eventName;\n if (name.startsWith(\"PAYMENT_HANDLE_\")) return \"payment_handle\";\n if (name.startsWith(\"PAYMENT_\")) return \"payment\";\n if (name.startsWith(\"SETTLEMENT_\")) return \"settlement\";\n if (name.startsWith(\"REFUND_\")) return \"refund\";\n if (name.startsWith(\"STANDALONE_CREDIT_\") || name.startsWith(\"ORIGINAL_CREDIT_\")) return \"payout\";\n if (name.startsWith(\"SUBSCRIPTION_\")) return \"subscription\";\n if (name.startsWith(\"ACCOUNT_UPDATER_\")) return \"account_updater\";\n return \"unknown\";\n}\n\nconst PAYMENT_HANDLE_STATUS_BY_EVENT: Record<string, string> = {\n PAYMENT_HANDLE_INITIATED: \"INITIATED\",\n PAYMENT_HANDLE_PROCESSING: \"PROCESSING\",\n PAYMENT_HANDLE_PAYABLE: \"PAYABLE\",\n PAYMENT_HANDLE_COMPLETED: \"COMPLETED\",\n PAYMENT_HANDLE_FAILED: \"FAILED\",\n PAYMENT_HANDLE_EXPIRED: \"EXPIRED\",\n PAYMENT_HANDLE_CANCELLED: \"CANCELLED\",\n};\n\n/**\n * Extracts the payment-handle lifecycle status implied by `event`'s\n * name, or `undefined` for non-payment-handle events.\n */\nexport function webhookPaymentHandleStatus(event: PaysafeWebhookEvent): string | undefined {\n return PAYMENT_HANDLE_STATUS_BY_EVENT[event.eventName];\n}\n","import {\n ResolvedConfig,\n configFromEnv,\n type PaysafeClientOptions,\n type Environment,\n} from \"./core/config.js\";\nimport { HttpTransport } from \"./core/http-client.js\";\nimport { RateLimiter } from \"./core/rate-limiter.js\";\nimport type { TelemetryHook } from \"./core/telemetry.js\";\nimport {\n ApplicationsResource,\n BankAccountValidationResource,\n CustomerIdentityResource,\n CustomersResource,\n FxRatesResource,\n InteracVerificationResource,\n PaymentHandlesResource,\n PaymentsResource,\n PayoutsResource,\n PlansResource,\n RefundsResource,\n SettlementsResource,\n SubscriptionsResource,\n VerificationsResource,\n WebhooksResource,\n} from \"./resources/index.js\";\n\nexport type { PaysafeClientOptions, Environment };\n\n/**\n * The top-level Paysafe SDK client. Construct one with `new\n * PaysafeClient(options)` or {@link PaysafeClient.fromEnv}, then call\n * operations through its resource properties (`paymentHandles`,\n * `payments`, `customers`, `plans`, `subscriptions`, `applications`,\n * `webhooks`, ...).\n *\n * A `PaysafeClient` is safe for concurrent use across multiple requests.\n *\n * @example\n * ```ts\n * const client = new PaysafeClient({\n * username: \"1001062690\",\n * password: \"B-qa2-0-...\",\n * environment: \"test\",\n * accountId: \"1009688230\",\n * });\n *\n * const handle = await client.paymentHandles.create({\n * merchantRefNum: \"order-1\",\n * amount: 5000,\n * currencyCode: \"USD\",\n * paymentType: \"CARD\",\n * transactionType: \"PAYMENT\",\n * card: {\n * cardNum: \"4111111111111111\",\n * cardExpiry: { month: 12, year: 2030 },\n * cvv: \"123\",\n * holderName: \"Jane Doe\",\n * },\n * billingDetails: { street: \"123 Main St\", city: \"New York\", state: \"NY\", country: \"US\", zip: \"10001\" },\n * });\n *\n * const payment = await client.payments.create({\n * merchantRefNum: \"payment-001\",\n * amount: 5000,\n * currencyCode: \"USD\",\n * paymentHandleToken: handle.paymentHandleToken,\n * });\n * ```\n */\nexport class PaysafeClient {\n private readonly cfg: ResolvedConfig;\n\n // Payments API\n readonly paymentHandles: PaymentHandlesResource;\n readonly payments: PaymentsResource;\n readonly settlements: SettlementsResource;\n readonly refunds: RefundsResource;\n readonly payouts: PayoutsResource;\n readonly verifications: VerificationsResource;\n readonly customers: CustomersResource;\n\n // Payment Scheduler API\n readonly plans: PlansResource;\n readonly subscriptions: SubscriptionsResource;\n\n // Applications (Onboarding) API\n readonly applications: ApplicationsResource;\n\n // Value Added Services\n readonly fxRates: FxRatesResource;\n readonly customerIdentity: CustomerIdentityResource;\n readonly bankAccountValidation: BankAccountValidationResource;\n readonly interacVerification: InteracVerificationResource;\n\n // Webhooks\n readonly webhooks: WebhooksResource;\n\n constructor(options: PaysafeClientOptions, telemetryHook?: TelemetryHook) {\n this.cfg = new ResolvedConfig(options);\n const limiter = new RateLimiter();\n const transport = new HttpTransport(this.cfg, limiter, telemetryHook);\n\n this.paymentHandles = new PaymentHandlesResource(this.cfg, transport);\n this.payments = new PaymentsResource(this.cfg, transport);\n this.settlements = new SettlementsResource(this.cfg, transport);\n this.refunds = new RefundsResource(this.cfg, transport);\n this.payouts = new PayoutsResource(this.cfg, transport);\n this.verifications = new VerificationsResource(this.cfg, transport);\n this.customers = new CustomersResource(this.cfg, transport);\n\n this.plans = new PlansResource(this.cfg, transport);\n this.subscriptions = new SubscriptionsResource(this.cfg, transport);\n\n this.applications = new ApplicationsResource(this.cfg, transport);\n\n this.fxRates = new FxRatesResource(this.cfg, transport);\n this.customerIdentity = new CustomerIdentityResource(this.cfg, transport);\n this.bankAccountValidation = new BankAccountValidationResource(this.cfg, transport);\n this.interacVerification = new InteracVerificationResource(this.cfg, transport);\n\n this.webhooks = new WebhooksResource();\n }\n\n /**\n * Builds a `PaysafeClient` from `PAYSAFE_USERNAME`, `PAYSAFE_PASSWORD`,\n * `PAYSAFE_ENVIRONMENT`, and `PAYSAFE_ACCOUNT_ID` environment variables\n * (Node.js only), merged with any additional `overrides` (last-wins).\n */\n static fromEnv(\n overrides: Partial<PaysafeClientOptions> = {},\n telemetryHook?: TelemetryHook,\n ): PaysafeClient {\n return new PaysafeClient(configFromEnv(overrides), telemetryHook);\n }\n\n /** The client's configured default account ID, if set. */\n get accountId(): string | undefined {\n return this.cfg.accountId;\n }\n\n /** The client's configured environment (`\"test\"` or `\"production\"`). */\n get environment(): Environment {\n return this.cfg.environment;\n }\n\n /** The resolved base URL the client sends requests to. */\n get baseUrl(): string {\n return this.cfg.baseUrl();\n }\n}\n"]}
|