UNPKG

@alexasomba/paystack-browser

Version:

A browser-compatible Paystack SDK - Complete, Type-safe, and Fetch-ready with full OpenAPI coverage.

4,008 lines 114 kB
import createClient from "openapi-fetch";
//#region src/idempotency.ts
const DEFAULT_IDEMPOTENCY_HEADER = "Idempotency-Key";
function fallbackRandomHex(bytes) {
	const chars = "0123456789abcdef";
	let out = "";
	for (let i = 0; i < bytes * 2; i += 1) out += chars[Math.floor(Math.random() * 16)];
	return out;
}
function createIdempotencyKey() {
	const cryptoObj = globalThis.crypto;
	if (cryptoObj !== void 0 && typeof cryptoObj.randomUUID === "function") return cryptoObj.randomUUID();
	if (cryptoObj !== void 0 && typeof cryptoObj.getRandomValues === "function") {
		const buf = new Uint8Array(16);
		cryptoObj.getRandomValues(buf);
		return Array.from(buf).map((b) => b.toString(16).padStart(2, "0")).join("");
	}
	return fallbackRandomHex(16);
}
function hasHeader(headers, name) {
	if (headers === void 0) return false;
	const target = name.toLowerCase();
	if (headers instanceof Headers) return headers.has(name);
	if (Array.isArray(headers)) return headers.some(([k]) => String(k).toLowerCase() === target);
	for (const k of Object.keys(headers)) if (k.toLowerCase() === target) return true;
	return false;
}
function setHeader(headers, name, value) {
	const out = new Headers(headers ?? void 0);
	out.set(name, value);
	return out;
}
function resolveIdempotencyKey(input) {
	switch (input.mode) {
		case "none": return;
		case "static": return input.key;
		case "auto": return createIdempotencyKey();
		case "custom": return input.generate();
	}
}
//#endregion
//#region src/client.ts
function assertPublicBrowserKey(apiKey) {
	if (/^sk_(test|live)_/.test(apiKey)) throw new Error("The browser SDK only accepts Paystack public keys. Secret keys must stay on a server-side SDK.");
}
function sleep(ms) {
	return new Promise((resolve) => setTimeout(resolve, ms));
}
function isBodyRetryable(body) {
	if (typeof body === "undefined" || body === null) return true;
	if (typeof body === "string") return true;
	if (body instanceof ArrayBuffer) return true;
	if (ArrayBuffer.isView(body)) return true;
	return false;
}
function resolveIdempotencyMode(options) {
	const key = options.idempotencyKey;
	if (key === void 0 || key === "") return { mode: "none" };
	if (key === "auto") return { mode: "auto" };
	if (typeof key === "function") return {
		mode: "custom",
		generate: key
	};
	return {
		mode: "static",
		key
	};
}
function wrapFetch(fetchImpl, options) {
	const retries = options.retry?.retries ?? 2;
	const minDelayMs = options.retry?.minDelayMs ?? 250;
	const maxDelayMs = options.retry?.maxDelayMs ?? 2e3;
	const retryOnStatuses = options.retry?.retryOnStatuses ?? [
		408,
		429,
		500,
		502,
		503,
		504
	];
	const retryOnMethods = (options.retry?.retryOnMethods ?? [
		"GET",
		"HEAD",
		"OPTIONS"
	]).map((m) => m.toUpperCase());
	const idempotencyHeader = options.idempotencyHeader ?? "Idempotency-Key";
	return (async (input, init) => {
		const method = (init?.method ?? (input instanceof Request ? input.method : "GET")).toUpperCase();
		const requestHeaders = init?.headers ?? (input instanceof Request ? input.headers : void 0);
		const idempotencyAlreadySet = hasHeader(requestHeaders, idempotencyHeader);
		const autoKey = method === "POST" && !idempotencyAlreadySet && options.idempotency ? resolveIdempotencyKey(options.idempotency) : void 0;
		const initWithIdempotency = {
			...init,
			method,
			headers: autoKey !== void 0 ? setHeader(requestHeaders, idempotencyHeader, autoKey) : requestHeaders
		};
		const canRetryByMethod = retries > 0 && retryOnMethods.includes(method) && isBodyRetryable(init?.body);
		const canRetryByIdempotency = retries > 0 && method === "POST" && (idempotencyAlreadySet || Boolean(autoKey)) && isBodyRetryable(init?.body);
		const canRetry = canRetryByMethod || canRetryByIdempotency;
		const attemptFetch = async () => {
			const timeoutMs = options.timeoutMs;
			if (timeoutMs === void 0 || timeoutMs <= 0) return fetchImpl(input, initWithIdempotency);
			const controller = new AbortController();
			const timer = setTimeout(() => controller.abort(), timeoutMs);
			const onAbort = () => controller.abort();
			const signal = init?.signal ?? (input instanceof Request ? input.signal : void 0);
			if (signal !== void 0) if (signal.aborted) controller.abort();
			else signal.addEventListener("abort", onAbort, { once: true });
			try {
				return await fetchImpl(input, {
					...initWithIdempotency,
					signal: controller.signal
				});
			} finally {
				clearTimeout(timer);
				if (signal !== void 0) signal.removeEventListener("abort", onAbort);
			}
		};
		let lastError;
		for (let attempt = 0; attempt <= (canRetry ? retries : 0); attempt += 1) try {
			const response = await attemptFetch();
			if (!canRetry) return response;
			if (!retryOnStatuses.includes(response.status)) return response;
			let delayMs;
			if (response.status === 429) {
				const retryAfter = response.headers.get("retry-after");
				if (retryAfter !== null) {
					const seconds = Number.parseInt(retryAfter, 10);
					if (Number.isFinite(seconds) && seconds >= 0) delayMs = seconds * 1e3;
				}
			}
			if (attempt >= retries) return response;
			const backoffBase = Math.min(maxDelayMs, minDelayMs * 2 ** attempt);
			const jitter = .5 + Math.random();
			await sleep(Math.min(maxDelayMs, delayMs ?? Math.floor(backoffBase * jitter)));
		} catch (err) {
			lastError = err;
			if (!canRetry || attempt >= retries) throw err;
			const backoffBase = Math.min(maxDelayMs, minDelayMs * 2 ** attempt);
			const jitter = .5 + Math.random();
			await sleep(Math.floor(backoffBase * jitter));
		}
		throw lastError;
	});
}
function createPaystackClient(options) {
	assertPublicBrowserKey(options.apiKey);
	return createClient({
		baseUrl: options.baseUrl ?? "https://api.paystack.co",
		fetch: wrapFetch(options.fetch ?? fetch, {
			timeoutMs: options.timeoutMs,
			retry: options.retry,
			idempotency: resolveIdempotencyMode(options),
			idempotencyHeader: options.idempotencyHeader
		}),
		headers: {
			Authorization: `Bearer ${options.apiKey}`,
			...options.headers
		}
	});
}
//#endregion
//#region src/errors.ts
const DEFAULT_REQUEST_ID_HEADERS = ["x-paystack-request-id", "x-request-id"];
/**
* Extracts a Paystack Request ID from response headers.
*/
function getPaystackRequestId(headers) {
	const h = headers instanceof Headers ? headers : new Headers(headers);
	for (const name of DEFAULT_REQUEST_ID_HEADERS) {
		const value = h.get(name);
		if (value !== null && value.trim() !== "") return value.trim();
	}
}
/**
* Standard Paystack API Error
*/
var PaystackError = class PaystackError extends Error {
	/** The machine-readable error code */
	code;
	/** The error type (e.g., api_error, validation_error, processor_error) */
	type;
	/** The HTTP status code */
	status;
	/** The request ID for debugging with Paystack support */
	requestId;
	/** Additional metadata from the error response */
	meta;
	/** Parsed Paystack response envelope or transport payload used to create this error. */
	raw;
	/** Alias for raw, kept for callers that prefer body-oriented naming. */
	body;
	constructor(options) {
		const requestId = options.requestId;
		const suffix = requestId !== void 0 && requestId !== null && requestId !== "" ? ` (requestId: ${requestId})` : "";
		super(`${options.message}${suffix}`, options.cause === void 0 ? void 0 : { cause: options.cause });
		this.name = "PaystackError";
		this.code = options.code;
		this.type = options.type;
		this.status = options.status;
		this.requestId = options.requestId;
		this.meta = options.meta;
		this.raw = options.raw ?? options.body;
		this.body = options.body ?? options.raw;
		if (typeof Error.captureStackTrace === "function") Error.captureStackTrace(this, PaystackError);
	}
	/**
	* Helper to determine if the error is a processor-level issue
	* (e.g., insufficient funds, card declined)
	*/
	isProcessorError() {
		return this.type === "processor_error";
	}
	/**
	* Helper to determine if the error is due to invalid request parameters
	*/
	isValidationError() {
		return this.type === "validation_error";
	}
};
/**
* @deprecated Use PaystackError
*/
const PaystackApiError = PaystackError;
/**
* @deprecated Use PaystackError
*/
function isPaystackApiError(value) {
	return value instanceof PaystackError;
}
//#endregion
//#region src/response.ts
function isRecord(value) {
	return typeof value === "object" && value !== null;
}
function getStringField(source, field) {
	if (!isRecord(source)) return void 0;
	const value = source[field];
	return typeof value === "string" && value !== "" ? value : void 0;
}
function getMeta(source) {
	if (!isRecord(source)) return void 0;
	const value = source.meta;
	return isRecord(value) ? value : void 0;
}
function getPaystackEnvelope(source) {
	return {
		message: getStringField(source, "message"),
		code: getStringField(source, "code"),
		type: getStringField(source, "type"),
		meta: getMeta(source)
	};
}
function resolveErrorMessage(error, raw) {
	const errorEnvelope = getPaystackEnvelope(error);
	if (errorEnvelope.message !== void 0) return errorEnvelope.message;
	const rawEnvelope = getPaystackEnvelope(raw);
	if (rawEnvelope.message !== void 0) return rawEnvelope.message;
	if (error instanceof Error && error.message !== "") return error.message;
	return "Network or HTTP Error";
}
/**
* Enhanced response wrapper for the Paystack SDK.
* Provides .unwrap() and .data helpers for elegant error handling.
*/
var PaystackResponse = class {
	constructor(raw, error, response) {
		this.raw = raw;
		this.error = error;
		this.response = response;
	}
	/**
	* The success indicator from the Paystack API body.
	*/
	get status() {
		return this.raw?.status ?? false;
	}
	/**
	* The message from the Paystack API body.
	*/
	get message() {
		return this.raw?.message ?? "Unknown response";
	}
	/**
	* Helper to automatically check the Paystack status and throw a descriptive
	* PaystackError if it fails. Returns the unwrapped 'data' payload on success.
	*
	* @throws {PaystackError} if status is false or an HTTP error occurred.
	*/
	unwrap() {
		const requestId = getPaystackRequestId(this.response.headers);
		if (this.error !== void 0 && this.error !== null) {
			const errorEnvelope = getPaystackEnvelope(this.error);
			const rawEnvelope = getPaystackEnvelope(this.raw);
			throw new PaystackError({
				message: resolveErrorMessage(this.error, this.raw),
				code: errorEnvelope.code ?? rawEnvelope.code,
				type: errorEnvelope.type ?? rawEnvelope.type,
				status: this.response.status,
				requestId,
				meta: errorEnvelope.meta ?? rawEnvelope.meta,
				raw: this.error,
				body: this.error,
				cause: this.error
			});
		}
		if (this.raw === void 0 || this.raw === null) throw new PaystackError({
			message: "Empty response body",
			status: this.response.status,
			requestId,
			raw: this.raw,
			body: this.raw
		});
		if (!this.raw.status) {
			const rawEnvelope = getPaystackEnvelope(this.raw);
			throw new PaystackError({
				message: rawEnvelope.message ?? "Paystack API Error",
				code: rawEnvelope.code,
				type: rawEnvelope.type,
				status: this.response.status,
				requestId,
				meta: rawEnvelope.meta,
				raw: this.raw,
				body: this.raw
			});
		}
		return this.raw.data;
	}
	/**
	* A convenience getter that returns the data payload after unwrapping.
	* Use this when you are confident the request succeeded or want to catch at a higher level.
	*
	* @throws {PaystackError} if status is false.
	*/
	get data() {
		return this.unwrap();
	}
};
function assertOk(result) {
	return result.unwrap();
}
function toPaystackApiError(result) {
	try {
		result.unwrap();
		return;
	} catch (error) {
		if (error instanceof PaystackError) return error;
		throw error;
	}
}
//#endregion
//#region src/operations.ts
/**
* List Domains
*
* Lists all registered domains on your integration. Returns an empty array if no domains have been added.
*/
async function applePay_listDomain(client, ...init) {
	const result = await client.GET("/apple-pay/domain", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Register Domain
*
* Register a top-level domain or subdomain for your Apple Pay integration.
*
* > This endpoint can only be called with one domain or subdomain at a time.
*
*/
async function applePay_registerDomain(client, ...init) {
	const result = await client.POST("/apple-pay/domain", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Unregister Domain
*
* Unregister a top-level domain or subdomain previously used for your Apple
* Pay integration.
*
*/
async function applePay_unregisterDomain(client, ...init) {
	const result = await client.DELETE("/apple-pay/domain", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Balance
*
* Fetch the available balance on your integration
*/
async function balance_fetch(client, ...init) {
	const result = await client.GET("/balance", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Balance Ledger
*
* Fetch all pay-ins and pay-outs that occured on your integration
*/
async function balance_ledger(client, ...init) {
	const result = await client.GET("/balance/ledger", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Banks
*
* Get a list of all supported banks and their properties
*/
async function bank_list(client, ...init) {
	const result = await client.GET("/bank", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Resolve Account Number
*
* Resolve an account number to confirm the name associated with it
*/
async function bank_resolveAccountNumber(client, ...init) {
	const result = await client.GET("/bank/resolve", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Validate Bank Account
*
* Confirm the authenticity of a customer's account number before sending money
*/
async function bank_validateAccountNumber(client, ...init) {
	const result = await client.POST("/bank/validate", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Charges in a Batch
*
* This endpoint retrieves the charges associated with a specified batch code
*
* @param id_or_code An ID or code for the batch whose charges you want to retrieve.
*/
async function bulkCharge_charges(client, id_or_code, ...init) {
	const result = await client.GET("/bulkcharge/{id_or_code}/charges", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Bulk Charge Batch
*
* This endpoint retrieves a specific batch code. It also returns useful information on its progress by
* way of the `total_charges` and `pending_charges` attributes.
*
*
* @param id_or_code An ID or code for the charge whose batches you want to retrieve.
*/
async function bulkCharge_fetch(client, id_or_code, ...init) {
	const result = await client.GET("/bulkcharge/{id_or_code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Initiate Bulk Charge
*
* Charge multiple customers in batches
*/
async function bulkCharge_initiate(client, ...init) {
	const result = await client.POST("/bulkcharge", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Bulk Charge Batches
*
* List all bulk charge batches.
*/
async function bulkCharge_list(client, ...init) {
	const result = await client.GET("/bulkcharge", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Pause Bulk Charge Batch
*
* Pause the processing of a charge batch
*
* @param code The batch code for the bulk charge you want to pause
*/
async function bulkCharge_pause(client, code, ...init) {
	const result = await client.GET("/bulkcharge/pause/{code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Resume Bulk Charge Batch
*
* Resume the processing of a previously paused charge batch
*
* @param code The batch code for the bulk charge you want to pause
*/
async function bulkCharge_resume(client, code, ...init) {
	const result = await client.GET("/bulkcharge/resume/{code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Requery Transaction
*
* Check the status of a charge made with Capitec Pay. This endpoint should be used from your frontend application as it requires the use of your public key for request authorization.
*
* @param ref The transaction reference from the previously initiated charge request
*/
async function capitecPay_requery(client, ref, ...init) {
	const result = await client.POST("/capitec-pay/requery/{ref}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				ref
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Check pending charge
*
* When you get `pending` as a charge status or if there was an exception when calling any of the `/charge` endpoints, wait 10 seconds or more, then make a check to see if its status has changed. Don't call too early as you may get a lot more pending than you should.
*
*
* @param reference The reference of the ongoing transaction
*/
async function charge_check(client, reference, ...init) {
	const result = await client.GET("/charge/{reference}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				reference
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Charge
*
* Initiate a payment by integrating the payment channel of your choice.
*/
async function charge_create(client, ...init) {
	const result = await client.POST("/charge", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Submit Address
*
* Send the details of the customer's address for address verification
*/
async function charge_submitAddress(client, ...init) {
	const result = await client.POST("/charge/submit_address", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Submit Birthday
*
* Submit the customer's birthday when requested
*/
async function charge_submitBirthday(client, ...init) {
	const result = await client.POST("/charge/submit_birthday", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Submit OTP
*
* Submit OTP to complete a charge
*/
async function charge_submitOtp(client, ...init) {
	const result = await client.POST("/charge/submit_otp", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Submit Phone
*
* Submit phone number when requested
*/
async function charge_submitPhone(client, ...init) {
	const result = await client.POST("/charge/submit_phone", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Submit PIN
*
* Submit PIN to continue a charge
*/
async function charge_submitPin(client, ...init) {
	const result = await client.POST("/charge/submit_pin", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Customer
*
* Create a customer on your integration
*/
async function customer_create(client, ...init) {
	const result = await client.POST("/customer", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Deactivate Authorization
*
* Deactivate an authorization for any payment channel.
*/
async function customer_deactivateAuthorization(client, ...init) {
	const result = await client.POST("/customer/authorization/deactivate", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Direct Debit Activation Charge
*
* Trigger an activation charge on an inactive mandate on behalf of your customer
*
* @param id The customer ID attached to the authorization
*/
async function customer_directDebitActivationCharge(client, id, ...init) {
	const result = await client.PUT("/customer/{id}/directdebit-activation-charge", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Customer
*
* Get details of a customer on your integration.
*
* @param email_or_code An email or customer code for the customer you want to fetch
*/
async function customer_fetch(client, email_or_code, ...init) {
	const result = await client.GET("/customer/{email_or_code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				email_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Mandate Authorizations
*
* Get the list of direct debit mandates associated with a customer
*
* @param id The customer ID for the authorizations to fetch
*/
async function customer_fetchMandateAuthorizations(client, id, ...init) {
	const result = await client.GET("/customer/{id}/directdebit-mandate-authorizations", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Initialize Authorization
*
* Initiate a request to create a reusable authorization code for recurring transactions
*/
async function customer_initializeAuthorization(client, ...init) {
	const result = await client.POST("/customer/authorization/initialize", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Initialize Direct Debit
*
* Initialize the process of linking an account to a customer for Direct Debit transactions
*
* @param id The ID of the customer to initialize the direct debit for
*/
async function customer_initializeDirectDebit(client, id, ...init) {
	const result = await client.POST("/customer/{id}/initialize-direct-debit", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Customers
*
* List customers available on your integration
*/
async function customer_list(client, ...init) {
	const result = await client.GET("/customer", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Set Risk Action
*
* Set customer's risk action by whitelisting or blacklisting the customer
*/
async function customer_riskAction(client, ...init) {
	const result = await client.POST("/customer/set_risk_action", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Update Customer
*
* Update a customer's details on your integration
*
* @param email_or_code An email or customer code for the customer you want to fetch
*/
async function customer_update(client, email_or_code, ...init) {
	const result = await client.PUT("/customer/{email_or_code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				email_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Validate Customer
*
* Validate a customer's identity
*
* @param customer_code Customer code
*/
async function customer_validate(client, customer_code, ...init) {
	const result = await client.POST("/customer/{customer_code}/identification", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				customer_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Verify Authorization
*
* Check the status of an authorization request
*
* @param reference The reference returned in the initialization response
*/
async function customer_verifyAuthorization(client, reference, ...init) {
	const result = await client.GET("/customer/authorization/verify/{reference}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				reference
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Split Dedicated Account Transaction
*
* Split a dedicated virtual account transaction with one or more accounts
*/
async function dedicatedAccount_addSplit(client, ...init) {
	const result = await client.POST("/dedicated_account/split", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Assign Dedicated Account
*
* With this endpoint, you can create a customer, validate the customer, and assign a DVA to the customer.
*/
async function dedicatedAccount_assign(client, ...init) {
	const result = await client.POST("/dedicated_account/assign", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Bank Providers
*
* Get available bank providers for a dedicated virtual account
*/
async function dedicatedAccount_availableProviders(client, ...init) {
	const result = await client.GET("/dedicated_account/available_providers", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Dedicated Account
*
* Create a dedicated virtual account for an existing customer
*/
async function dedicatedAccount_create(client, ...init) {
	const result = await client.POST("/dedicated_account", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Deactivate Dedicated Account
*
* Deactivate a dedicated virtual account on your integration.
*
* @param id ID of dedicated virtual account
*/
async function dedicatedAccount_deactivate(client, id, ...init) {
	const result = await client.DELETE("/dedicated_account/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Dedicated Account
*
* Get details of a dedicated virtual account on your integration.
*
* @param id ID of dedicated virtual account
*/
async function dedicatedAccount_fetch(client, id, ...init) {
	const result = await client.GET("/dedicated_account/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Dedicated Accounts
*
* List dedicated virtual accounts available on your integration.
*/
async function dedicatedAccount_list(client, ...init) {
	const result = await client.GET("/dedicated_account", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Remove Split from Dedicated Account
*
* If you've previously set up split payment for transactions on a dedicated virtual account, you can remove it with this endpoint
*/
async function dedicatedAccount_removeSplit(client, ...init) {
	const result = await client.DELETE("/dedicated_account/split", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Requery Dedicated Account
*
* Requery Dedicated Virtual Account for new transactions
*/
async function dedicatedAccount_requery(client, ...init) {
	const result = await client.GET("/dedicated_account/requery", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Mandate Authorizations
*
* Get a list of all the direct debit mandates on your integration
*/
async function directdebit_listMandateAuthorizations(client, ...init) {
	const result = await client.GET("/directdebit/mandate-authorizations", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Trigger Activation Charge
*
* Trigger activation charge for specified customers
*/
async function directdebit_triggerActivationCharge(client, ...init) {
	const result = await client.PUT("/directdebit/activation-charge", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Export Disputes
*
* Export the disputes available on your integration
*/
async function dispute_download(client, ...init) {
	const result = await client.GET("/dispute/export", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Add Evidence
*
* Provide evidence for a dispute
*
* @param id The unique identifier of the dispute
*/
async function dispute_evidence(client, id, ...init) {
	const result = await client.POST("/dispute/{id}/evidence", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Dispute
*
* Fetch a transaction dispute
*
* @param id The unique identifier of the dispute
*/
async function dispute_fetch(client, id, ...init) {
	const result = await client.GET("/dispute/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Disputes
*
* List transaction disputes filed by customers
*/
async function dispute_list(client, ...init) {
	const result = await client.GET("/dispute", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Resolve Dispute
*
* Resolve a transaction dispute
*
* @param id The unique identifier of the dispute
*/
async function dispute_resolve(client, id, ...init) {
	const result = await client.PUT("/dispute/{id}/resolve", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Transaction Disputes
*
* List all disputes filed for a transaction
*
* @param id The unique identifier of the transaction
*/
async function dispute_transaction(client, id, ...init) {
	const result = await client.GET("/dispute/transaction/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Update Dispute
*
* Update a transaction dispute
*
* @param id The unique identifier of the dispute
*/
async function dispute_update(client, id, ...init) {
	const result = await client.PUT("/dispute/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Upload URL
*
* Get the URL to upload a dispute evidence
*
* @param id The unique identifier of the dispute
*/
async function dispute_uploadUrl(client, id, ...init) {
	const result = await client.GET("/dispute/{id}/upload_url", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Payment Session Timeout
*
* Fetch the session timeout of a transaction
*/
async function integration_fetchPaymentSessionTimeout(client, ...init) {
	const result = await client.GET("/integration/payment_session_timeout", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Update Payment Session Timeout
*
* Update the session timeout of a transaction
*/
async function integration_updatePaymentSessionTimeout(client, ...init) {
	const result = await client.PUT("/integration/payment_session_timeout", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Internal path for schema generation
*
* This path is internal and used to ensure that schemas like WebhookEvent are considered 'used' for SDK generation and linting.
*/
async function misc_generateWebhookEventTypes(client, ...init) {
	const result = await client.GET("/___internal___", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List States (AVS)
*
* Get a list of states for a country for address verification
*/
async function miscellaneous_avs(client, ...init) {
	const result = await client.GET("/address_verification/states", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Countries
*
* List all supported countries on Paystack
*/
async function miscellaneous_listCountries(client, ...init) {
	const result = await client.GET("/country", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Resolve Card BIN
*
* Get the details of a card BIN
*
* @param bin The card bank identification number
*/
async function miscellaneous_resolveCardBin(client, bin, ...init) {
	const result = await client.GET("/decision/bin/{bin}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				bin
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Order
*
* Create an order for selected items
*/
async function order_create(client, ...init) {
	const result = await client.POST("/order", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Order
*
* Fetch the details of a previously created order
*
* @param id The unique identifier of the order
*/
async function order_fetch(client, id, ...init) {
	const result = await client.GET("/order/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Orders
*
* List the previously created orders
*/
async function order_list(client, ...init) {
	const result = await client.GET("/order", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Product Orders
*
* Fetch all orders for a particular product
*
* @param id The unique identifier of the order
*/
async function order_product(client, id, ...init) {
	const result = await client.GET("/order/product/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Validate Order
*
* Validate a pay for me order
*
* @param code The unique code of a previously created order
*/
async function order_validate(client, code, ...init) {
	const result = await client.GET("/order/{code}/validate", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Add Products
*
* Add products to a previously created payment page. You can only add products to pages
* that was created with a `product` type.
*
*
* @param id
*/
async function page_addProducts(client, id, ...init) {
	const result = await client.POST("/page/{id}/product", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Check Slug Availability
*
* Check if a custom slug is available for use when creating a payment page
*
* @param slug The custom slug to check
*/
async function page_checkSlugAvailability(client, slug, ...init) {
	const result = await client.GET("/page/check_slug_availability/{slug}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				slug
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Page
*
* Create a webpage to receive payments
*/
async function page_create(client, ...init) {
	const result = await client.POST("/page", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Page
*
* Get a previously created payment page
*
* @param id_or_slug The page ID or slug you want to fetch
*/
async function page_fetch(client, id_or_slug, ...init) {
	const result = await client.GET("/page/{id_or_slug}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_slug
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Pages
*
* List all previously created payment pages
*/
async function page_list(client, ...init) {
	const result = await client.GET("/page", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Update Page
*
* Update a previously created payment page
*
* @param id_or_slug The page ID or slug you want to fetch
*/
async function page_update(client, id_or_slug, ...init) {
	const result = await client.PUT("/page/{id_or_slug}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_slug
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Archive Payment Request
*
* Archive a payment request to clean up your records. An archived payment request cannot be verified and will not
* be returned when listing all previously created payment requests.
*
*
* @param id The unique identifier of a previously created payment request
*/
async function paymentRequest_archive(client, id, ...init) {
	const result = await client.POST("/paymentrequest/archive/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Payment Request
*
* Create a new payment request by issuing an invoice to a customer
*/
async function paymentRequest_create(client, ...init) {
	const result = await client.POST("/paymentrequest", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Payment Request
*
* Fetch a previously created payment request
*
* @param id_or_code The payment request ID or code you want to fetch
*/
async function paymentRequest_fetch(client, id_or_code, ...init) {
	const result = await client.GET("/paymentrequest/{id_or_code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Finalize Payment Request
*
* Finalise the creation of a draft payment request for a customer
*
* @param id The unique identifier of a draft payment request
*/
async function paymentRequest_finalize(client, id, ...init) {
	const result = await client.POST("/paymentrequest/finalize/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Payment Request
*
* List all previously created payment requests to your customers
*/
async function paymentRequest_list(client, ...init) {
	const result = await client.GET("/paymentrequest", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Send Notification
*
* Trigger an email reminder to a customer for a previously created payment request
*
* @param id The unique identifier of a previously created payment request
*/
async function paymentRequest_notify(client, id, ...init) {
	const result = await client.POST("/paymentrequest/notify/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Payment Request Total
*
* Get the metric of all pending and successful payment requests
*/
async function paymentRequest_totals(client, ...init) {
	const result = await client.GET("/paymentrequest/totals", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Update Payment Request
*
* Update a previously created payment request
*
* @param id_or_code The payment request ID or code you want to fetch
*/
async function paymentRequest_update(client, id_or_code, ...init) {
	const result = await client.PUT("/paymentrequest/{id_or_code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Verify Payment Request
*
* Verify the status of a previously created payment request
*
* @param id The unique identifier of a previously created payment request
*/
async function paymentRequest_verify(client, id, ...init) {
	const result = await client.GET("/paymentrequest/verify/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Plan
*
* Create a plan for recurring payments
*/
async function plan_create(client, ...init) {
	const result = await client.POST("/plan", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Plan
*
* Get the details of a payment plan
*
* @param id_or_code The plan ID or code you want to fetch
*/
async function plan_fetch(client, id_or_code, ...init) {
	const result = await client.GET("/plan/{id_or_code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Plans
*
* List all recurring payment plans
*/
async function plan_list(client, ...init) {
	const result = await client.GET("/plan", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Update Plan
*
* Update a plan details on your integration
*
* @param id_or_code The plan ID or code you want to fetch
*/
async function plan_update(client, id_or_code, ...init) {
	const result = await client.PUT("/plan/{id_or_code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Capture Preauthorization
*
* Charge a preauthorized transaction upon service delivery
*/
async function preauthorization_capture(client, ...init) {
	const result = await client.POST("/preauthorization/capture", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Initialize Preauthorization
*
* Initialize a preauthorization transaction for a new customer
*/
async function preauthorization_initialize(client, ...init) {
	const result = await client.POST("/preauthorization/initialize", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Preauthorizations
*
* List preauthorizations carried out on your integration
*/
async function preauthorization_list(client, ...init) {
	const result = await client.GET("/preauthorization", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Release Preauthorization
*
* For when a customer cancels an order or you want to release the hold from their card.
*/
async function preauthorization_release(client, ...init) {
	const result = await client.POST("/preauthorization/release", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Reserve Preauthorization
*
* Hold an amount using an existing customer's authorization that's marked reusable.
*/
async function preauthorization_reserve_authorization(client, ...init) {
	const result = await client.POST("/preauthorization/reserve_authorization", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Verify Preauthorization
*
* Fetch and confirm the status of a preauthorized transaction.
*
* @param reference The transaction reference used to intiate the transaction
*/
async function preauthorization_verify(client, reference, ...init) {
	const result = await client.GET("/preauthorization/verify/{reference}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				reference
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Product
*
* Create a new product on your integration
*/
async function product_create(client, ...init) {
	const result = await client.POST("/product", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Delete Product
*
* Delete a previously created product
*
* @param id The unique identifier of the product
*/
async function product_delete(client, id, ...init) {
	const result = await client.DELETE("/product/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Product
*
* Fetch a previously created product
*
* @param id The unique identifier of the product
*/
async function product_fetch(client, id, ...init) {
	const result = await client.GET("/product/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Products
*
* List all previously created products
*/
async function product_list(client, ...init) {
	const result = await client.GET("/product", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Update product
*
* Update a previously created product
*
* @param id The unique identifier of the product
*/
async function product_update(client, id, ...init) {
	const result = await client.PUT("/product/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Refund
*
* Initiate a refund for a previously completed transaction
*/
async function refund_create(client, ...init) {
	const result = await client.POST("/refund", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Refund
*
* Get a previously created refund
*
* @param id The identifier of the refund
*/
async function refund_fetch(client, id, ...init) {
	const result = await client.GET("/refund/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Refunds
*
* List previously created refunds
*/
async function refund_list(client, ...init) {
	const result = await client.GET("/refund", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Retry Refund
*
* Retry a refund with a `needs-attention` status by providing the bank account details of a customer.
*
* @param id The identifier of the refund
*/
async function refund_retry(client, id, ...init) {
	const result = await client.POST("/refund/retry_with_customer_details/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Settlements
*
* List settlements made to your settlement accounts
*/
async function settlements_fetch(client, ...init) {
	const result = await client.GET("/settlement", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Settlement Transactions
*
* Get the transactions that make up a particular settlement
*
* @param id The settlement ID in which you want to fetch its transactions
*/
async function settlements_transaction(client, id, ...init) {
	const result = await client.GET("/settlement/{id}/transactions", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Add Subaccount to Split
*
* Add a subaccount to a split configuration, or update the share of an existing subaccount
*
* @param id The ID of the split configuration to fetch
*/
async function split_addSubaccount(client, id, ...init) {
	const result = await client.POST("/split/{id}/subaccount/add", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Split
*
* Create a split configuration for transactions
*/
async function split_create(client, ...init) {
	const result = await client.POST("/split", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Split
*
* Get details of a split configuration for a transaction
*
* @param id The ID of the split configuration to fetch
*/
async function split_fetch(client, id, ...init) {
	const result = await client.GET("/split/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Splits
*
* List the transaction splits available on your integration
*/
async function split_list(client, ...init) {
	const result = await client.GET("/split", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Remove Subaccount from split
*
* Remove a subaccount from a split configuration
*
* @param id The ID of the split configuration to fetch
*/
async function split_removeSubaccount(client, id, ...init) {
	const result = await client.POST("/split/{id}/subaccount/remove", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Update Split
*
* Update a split configuration for transactions
*
* @param id
*/
async function split_update(client, id, ...init) {
	const result = await client.PUT("/split/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Add Products to Storefront
*
* Add previously created products to a Storefront
*
* @param id The unique identifier of the Storefront
*/
async function storefront_addProducts(client, id, ...init) {
	const result = await client.POST("/storefront/{id}/product", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Storefront
*
* Create a digital shop to manage and display your products
*/
async function storefront_create(client, ...init) {
	const result = await client.POST("/storefront", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Delete Storefront
*
* Delete a previously created Storefront
*
* @param id The unique identifier of the Storefront
*/
async function storefront_delete(client, id, ...init) {
	const result = await client.DELETE("/storefront/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Duplicate Storefront
*
* Duplicate a previously created Storefront
*
* @param id The unique identifier of the Storefront
*/
async function storefront_duplicate(client, id, ...init) {
	const result = await client.POST("/storefront/{id}/duplicate", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Storefront
*
* Get the details of a previously created Storefront
*
* @param id The unique identifier of the Storefront
*/
async function storefront_fetch(client, id, ...init) {
	const result = await client.GET("/storefront/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Storefront Orders
*
* Fetch all orders in your Storefront
*
* @param id The unique identifier of the Storefront
*/
async function storefront_fetchOrders(client, id, ...init) {
	const result = await client.GET("/storefront/{id}/order", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Storefronts
*
* List the storefronts you previously created
*/
async function storefront_list(client, ...init) {
	const result = await client.GET("/storefront", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Storefront Products
*
* List the products in a Storefront
*
* @param id The unique identifier of the Storefront
*/
async function storefront_listProducts(client, id, ...init) {
	const result = await client.GET("/storefront/{id}/product", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Publish Storefront
*
* Make your Storefront publicly available
*
* @param id The unique identifier of the Storefront
*/
async function storefront_publish(client, id, ...init) {
	const result = await client.POST("/storefront/{id}/publish", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Update Storefront
*
* Update the details of a previously created Storefront
*
* @param id The unique identifier of the Storefront
*/
async function storefront_update(client, id, ...init) {
	const result = await client.PUT("/storefront/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Verify Storefront Slug
*
* Verify the availability of a slug before using it for your Storefront
*
* @param slug The custom slug to check
*/
async function storefront_verifySlug(client, slug, ...init) {
	const result = await client.GET("/storefront/verify/{slug}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				slug
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Subaccount
*
* Create a subacount for a partner
*/
async function subaccount_create(client, ...init) {
	const result = await client.POST("/subaccount", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Subaccount
*
* Get details of a subaccount on your integration
*
* @param id_or_code The subaccount ID or code you want to fetch
*/
async function subaccount_fetch(client, id_or_code, ...init) {
	const result = await client.GET("/subaccount/{id_or_code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Subaccounts
*
* List subaccounts available on your integration
*/
async function subaccount_list(client, ...init) {
	const result = await client.GET("/subaccount", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Update Subaccount
*
* Update a subaccount details on your integration
*
* @param id_or_code The subaccount ID or code you want to fetch
*/
async function subaccount_update(client, id_or_code, ...init) {
	const result = await client.PUT("/subaccount/{id_or_code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Subscription
*
* Create a subscription a customer
*/
async function subscription_create(client, ...init) {
	const result = await client.POST("/subscription", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Disable Subscription
*
* Disable a subscription on your integration
*/
async function subscription_disable(client, ...init) {
	const result = await client.POST("/subscription/disable", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Enable Subscription
*
* Enable a subscription on your integration
*/
async function subscription_enable(client, ...init) {
	const result = await client.POST("/subscription/enable", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Subscription
*
* Get details of a customer's subscription
*
* @param id_or_code The subscription ID or code you want to fetch
*/
async function subscription_fetch(client, id_or_code, ...init) {
	const result = await client.GET("/subscription/{id_or_code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Subscriptions
*
* List all subscriptions available on your integration
*/
async function subscription_list(client, ...init) {
	const result = await client.GET("/subscription", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Send Update Subscription Link
*
* Email a customer a link for updating the card on their subscription
*
* @param code Subscription code
*/
async function subscription_manageEmail(client, code, ...init) {
	const result = await client.POST("/subscription/{code}/manage/email", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Generate Update Subscription Link
*
* Generate a link for updating the card on a subscription
*
* @param code Subscription code
*/
async function subscription_manageLink(client, code, ...init) {
	const result = await client.GET("/subscription/{code}/manage/link", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Commission Terminal
*
* Activate your debug device by linking it to your integration
*/
async function terminal_commission(client, ...init) {
	const result = await client.POST("/terminal/commission_device", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Decommission Terminal
*
* Unlink your debug device from your integration
*/
async function terminal_decommission(client, ...init) {
	const result = await client.POST("/terminal/decommission_device", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Terminal
*
* Get the details of a Terminal
*
* @param terminal_id The ID of the Terminal the event should be sent to.
*/
async function terminal_fetch(client, terminal_id, ...init) {
	const result = await client.GET("/terminal/{terminal_id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				terminal_id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Event Status
*
* Check the status of an event sent to the Terminal
*
* @param terminal_id The ID of the Terminal the event should be sent to.
* @param event_id The ID of the event that was sent to the Terminal
*/
async function terminal_fetchEventStatus(client, terminal_id, event_id, ...init) {
	const result = await client.GET("/terminal/{terminal_id}/event/{event_id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				terminal_id,
				event_id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Terminal Status
*
* Check the availiability of a Terminal before sending an event to it
*
* @param terminal_id The ID of the Terminal the event should be sent to.
*/
async function terminal_fetchTerminalStatus(client, terminal_id, ...init) {
	const result = await client.GET("/terminal/{terminal_id}/presence", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				terminal_id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Terminals
*
* List the Terminals available on your integration
*/
async function terminal_list(client, ...init) {
	const result = await client.GET("/terminal", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Send Event
*
* Send an event from your application to the Paystack Terminal
*
* @param id The ID of the Terminal the event should be sent to.
*/
async function terminal_sendEvent(client, id, ...init) {
	const result = await client.POST("/terminal/{id}/event", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Update Terminal
*
* Update the details of a Terminal
*
* @param terminal_id The ID of the Terminal the event should be sent to.
*/
async function terminal_update(client, terminal_id, ...init) {
	const result = await client.PUT("/terminal/{terminal_id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				terminal_id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Charge Authorization
*
* Charge all authorizations marked as reusable with this endpoint whenever you need to receive payments
*/
async function transaction_chargeAuthorization(client, ...init) {
	const result = await client.POST("/transaction/charge_authorization", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Check Authorization
*
* Check if an authorization code can be used for a charge.
*/
async function transaction_checkAuthorization(client, ...init) {
	const result = await client.POST("/transaction/check_authorization", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Get Transaction Event
*
* Fetch the event for a specific transaction.
*
* @param id The ID of the transaction
*/
async function transaction_event(client, id, ...init) {
	const result = await client.GET("/transaction/{id}/event", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Export Transactions
*
* Download transactions that occurred on your integration for a specific timeframe
*/
async function transaction_export(client, ...init) {
	const result = await client.GET("/transaction/export", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Transaction
*
* Fetch a transaction to get its details
*
* @param id The ID of the transaction to fetch
*/
async function transaction_fetch(client, id, ...init) {
	const result = await client.GET("/transaction/{id}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Initialize Transaction
*
* Create a new transaction
*/
async function transaction_initialize(client, ...init) {
	const result = await client.POST("/transaction/initialize", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Transactions
*
* List transactions carried out on your integration
*/
async function transaction_list(client, ...init) {
	const result = await client.GET("/transaction", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Partial Debit
*
* Retrieve part of a payment from a customer
*/
async function transaction_partialDebit(client, ...init) {
	const result = await client.POST("/transaction/partial_debit", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Get Transaction Session
*
* Fetch the session for a specific transaction.
*
* @param id The ID of the transaction
*/
async function transaction_session(client, id, ...init) {
	const result = await client.GET("/transaction/{id}/session", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Transaction Timeline
*
* Fetch the steps taken from the initiation to the completion of a transaction
*
* @param id_or_reference The ID or the reference of the transaction
*/
async function transaction_timeline(client, id_or_reference, ...init) {
	const result = await client.GET("/transaction/timeline/{id_or_reference}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_reference
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Transaction Totals
*
* Get the total amount of all transactions
*/
async function transaction_totals(client, ...init) {
	const result = await client.GET("/transaction/totals", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Verify Transaction
*
* Verify a previously initiated transaction using it's reference
*
* @param reference The transaction reference to verify
*/
async function transaction_verify(client, reference, ...init) {
	const result = await client.GET("/transaction/verify/{reference}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				reference
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Initiate Bulk Transfer
*
* Batch multiple transfers in a single request.
*
* You need to disable the Transfers OTP requirement to use this endpoint.
*
*/
async function transfer_bulk(client, ...init) {
	const result = await client.POST("/transfer/bulk", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Disable OTP for Transfers
*
* This is used in the event that you want to be able to complete transfers programmatically without use of OTPs.
* No arguments required. You will get an OTP to complete the request.
*
*/
async function transfer_disableOtp(client, ...init) {
	const result = await client.POST("/transfer/disable_otp", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Finalize Disabling OTP for Transfers
*
* Finalize the request to disable OTP on your transfers
*/
async function transfer_disableOtpFinalize(client, ...init) {
	const result = await client.POST("/transfer/disable_otp_finalize", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Enable OTP requirement for Transfers
*
* In the event that a customer wants to stop being able to complete transfers programmatically, this endpoint helps turn OTP requirement back on.
* No arguments required.
*
*/
async function transfer_enableOtp(client, ...init) {
	const result = await client.POST("/transfer/enable_otp", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Export Transfers
*
* Export a list of transfers carried out on your integration
*/
async function transfer_exportTransfer(client, ...init) {
	const result = await client.GET("/transfer/export", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Transfer
*
* Get details of a transfer on your integration
*
* @param id_or_code The transfer ID or code you want to fetch
*/
async function transfer_fetch(client, id_or_code, ...init) {
	const result = await client.GET("/transfer/{id_or_code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Finalize Transfer
*
* Finalize an initiated transfer
*/
async function transfer_finalize(client, ...init) {
	const result = await client.POST("/transfer/finalize_transfer", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Initiate Transfer
*
* Send money to your customers
*/
async function transfer_initiate(client, ...init) {
	const result = await client.POST("/transfer", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Transfers
*
* List the transfers made on your integration
*/
async function transfer_list(client, ...init) {
	const result = await client.GET("/transfer", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Resend OTP for Transfer
*
* Generates and send a new OTP to customer in the event they are having trouble receiving one.
*/
async function transfer_resendOtp(client, ...init) {
	const result = await client.POST("/transfer/resend_otp", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Verify Transfer
*
* Verify the status of a transfer on your integration
*
* @param reference Transfer reference
*/
async function transfer_verify(client, reference, ...init) {
	const result = await client.GET("/transfer/verify/{reference}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				reference
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Bulk Create Transfer Recipient
*
* Create multiple transfer recipients in batches. A duplicate account number will lead to the retrieval of the existing record.
*
*/
async function transferrecipient_bulk(client, ...init) {
	const result = await client.POST("/transferrecipient/bulk", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Transfer Recipient
*
* Creates a new recipient. A duplicate account number will lead to the retrieval of the existing record.
*/
async function transferrecipient_create(client, ...init) {
	const result = await client.POST("/transferrecipient", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Delete Transfer Recipient
*
* Delete a transfer recipient (sets the transfer recipient to inactive)
*
* @param id_or_code An ID or code for the recipient whose details you want to receive.
*/
async function transferrecipient_delete(client, id_or_code, ...init) {
	const result = await client.DELETE("/transferrecipient/{id_or_code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Transfer recipient
*
* Fetch the details of a transfer recipient
*
* @param id_or_code An ID or code for the recipient whose details you want to receive.
*/
async function transferrecipient_fetch(client, id_or_code, ...init) {
	const result = await client.GET("/transferrecipient/{id_or_code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Transfer Recipients
*
* List transfer recipients available on your integration
*/
async function transferrecipient_list(client, ...init) {
	const result = await client.GET("/transferrecipient", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Update Transfer Recipient
*
* Update the details of a transfer recipient
*
* @param id_or_code An ID or code for the recipient whose details you want to receive.
*/
async function transferrecipient_update(client, id_or_code, ...init) {
	const result = await client.PUT("/transferrecipient/{id_or_code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				id_or_code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Add Split Code to Virtual Terminal
*
* Add Split Code to Virtual Terminal
*
* @param code Code of the Virtual Terminal
*/
async function virtualTerminal_addSplitCode(client, code, ...init) {
	const result = await client.PUT("/virtual_terminal/{code}/split_code", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Create Virtual Terminal
*
* Create a Virtual Terminal on your integration
*/
async function virtualTerminal_create(client, ...init) {
	const result = await client.POST("/virtual_terminal", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Deactivate Virtual Terminal
*
* Deactivate a Virtual Terminal on your integration
*
* @param code Code of the Virtual Terminal
*/
async function virtualTerminal_deactivate(client, code, ...init) {
	const result = await client.PUT("/virtual_terminal/{code}/deactivate", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Remove Split Code from Virtual Terminal
*
* Remove Split Code from Virtual Terminal
*
* @param code Code of the Virtual Terminal
*/
async function virtualTerminal_deleteSplitCode(client, code, ...init) {
	const result = await client.DELETE("/virtual_terminal/{code}/split_code", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Assign Destination to Virtual Terminal
*
* Add a destination (WhatsApp number) to a Virtual Terminal on your integration
*
* @param code Code of the Virtual Terminal
*/
async function virtualTerminal_destinationAssign(client, code, ...init) {
	const result = await client.POST("/virtual_terminal/{code}/destination/assign", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Unassign Destination from Virtual Terminal
*
* Unassign a destination (WhatsApp Number) from a Virtual Terminal on your integration
*
* @param code Code of the Virtual Terminal
*/
async function virtualTerminal_destinationUnassign(client, code, ...init) {
	const result = await client.POST("/virtual_terminal/{code}/destination/unassign", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Fetch Virtual Terminal
*
* Fetch a Virtual Terminal on your integration
*
* @param code Code of the Virtual Terminal
*/
async function virtualTerminal_fetch(client, code, ...init) {
	const result = await client.GET("/virtual_terminal/{code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* List Virtual Terminals
*
* List Virtual Terminals on your integration
*/
async function virtualTerminal_list(client, ...init) {
	const result = await client.GET("/virtual_terminal", ...init);
	return new PaystackResponse(result.data, result.error, result.response);
}
/**
* Update Virtual Terminal
*
* Update a Virtual Terminal on your integration
*
* @param code Code of the Virtual Terminal
*/
async function virtualTerminal_update(client, code, ...init) {
	const result = await client.PUT("/virtual_terminal/{code}", {
		...init[0],
		params: {
			...init[0]?.params,
			path: {
				...init[0]?.params?.path,
				code
			}
		}
	});
	return new PaystackResponse(result.data, result.error, result.response);
}
function bindOperations(client) {
	return {
		applePay: {
			/**
			* List Domains
			*
			* Lists all registered domains on your integration. Returns an empty array if no domains have been added.
			*/
			listDomain: (...init) => applePay_listDomain(client, ...init),
			/**
			* Register Domain
			*
			* Register a top-level domain or subdomain for your Apple Pay integration.
			
			> This endpoint can only be called with one domain or subdomain at a time.
			*/
			registerDomain: (...init) => applePay_registerDomain(client, ...init),
			/**
			* Unregister Domain
			*
			* Unregister a top-level domain or subdomain previously used for your Apple
			Pay integration.
			*/
			unregisterDomain: (...init) => applePay_unregisterDomain(client, ...init)
		},
		balance: {
			/**
			* Fetch Balance
			*
			* Fetch the available balance on your integration
			*/
			fetch: (...init) => balance_fetch(client, ...init),
			/**
			* Balance Ledger
			*
			* Fetch all pay-ins and pay-outs that occured on your integration
			*/
			ledger: (...init) => balance_ledger(client, ...init)
		},
		bank: {
			/**
			* List Banks
			*
			* Get a list of all supported banks and their properties
			*/
			list: (...init) => bank_list(client, ...init),
			/**
			* Resolve Account Number
			*
			* Resolve an account number to confirm the name associated with it
			*/
			resolveAccountNumber: (...init) => bank_resolveAccountNumber(client, ...init),
			/**
			* Validate Bank Account
			*
			* Confirm the authenticity of a customer's account number before sending money
			*/
			validateAccountNumber: (...init) => bank_validateAccountNumber(client, ...init)
		},
		bulkCharge: {
			/**
			* List Charges in a Batch
			*
			* This endpoint retrieves the charges associated with a specified batch code
			*/
			charges: (id_or_code, ...init) => bulkCharge_charges(client, id_or_code, ...init),
			/**
			* Fetch Bulk Charge Batch
			*
			* This endpoint retrieves a specific batch code. It also returns useful information on its progress by 
			way of the `total_charges` and `pending_charges` attributes.
			*/
			fetch: (id_or_code, ...init) => bulkCharge_fetch(client, id_or_code, ...init),
			/**
			* Initiate Bulk Charge
			*
			* Charge multiple customers in batches
			*/
			initiate: (...init) => bulkCharge_initiate(client, ...init),
			/**
			* List Bulk Charge Batches
			*
			* List all bulk charge batches.
			*/
			list: (...init) => bulkCharge_list(client, ...init),
			/**
			* Pause Bulk Charge Batch
			*
			* Pause the processing of a charge batch
			*/
			pause: (code, ...init) => bulkCharge_pause(client, code, ...init),
			/**
			* Resume Bulk Charge Batch
			*
			* Resume the processing of a previously paused charge batch
			*/
			resume: (code, ...init) => bulkCharge_resume(client, code, ...init)
		},
		capitecPay: { 
		/**
		* Requery Transaction
		*
		* Check the status of a charge made with Capitec Pay. This endpoint should be used from your frontend application as it requires the use of your public key for request authorization.
		*/
requery: (ref, ...init) => capitecPay_requery(client, ref, ...init) },
		charge: {
			/**
			* Check pending charge
			*
			* When you get `pending` as a charge status or if there was an exception when calling any of the `/charge` endpoints, wait 10 seconds or more, then make a check to see if its status has changed. Don't call too early as you may get a lot more pending than you should.
			*/
			check: (reference, ...init) => charge_check(client, reference, ...init),
			/**
			* Create Charge
			*
			* Initiate a payment by integrating the payment channel of your choice.
			*/
			create: (...init) => charge_create(client, ...init),
			/**
			* Submit Address
			*
			* Send the details of the customer's address for address verification
			*/
			submitAddress: (...init) => charge_submitAddress(client, ...init),
			/**
			* Submit Birthday
			*
			* Submit the customer's birthday when requested
			*/
			submitBirthday: (...init) => charge_submitBirthday(client, ...init),
			/**
			* Submit OTP
			*
			* Submit OTP to complete a charge
			*/
			submitOtp: (...init) => charge_submitOtp(client, ...init),
			/**
			* Submit Phone
			*
			* Submit phone number when requested
			*/
			submitPhone: (...init) => charge_submitPhone(client, ...init),
			/**
			* Submit PIN
			*
			* Submit PIN to continue a charge
			*/
			submitPin: (...init) => charge_submitPin(client, ...init)
		},
		customer: {
			/**
			* Create Customer
			*
			* Create a customer on your integration
			*/
			create: (...init) => customer_create(client, ...init),
			/**
			* Deactivate Authorization
			*
			* Deactivate an authorization for any payment channel.
			*/
			deactivateAuthorization: (...init) => customer_deactivateAuthorization(client, ...init),
			/**
			* Direct Debit Activation Charge
			*
			* Trigger an activation charge on an inactive mandate on behalf of your customer
			*/
			directDebitActivationCharge: (id, ...init) => customer_directDebitActivationCharge(client, id, ...init),
			/**
			* Fetch Customer
			*
			* Get details of a customer on your integration.
			*/
			fetch: (email_or_code, ...init) => customer_fetch(client, email_or_code, ...init),
			/**
			* Fetch Mandate Authorizations
			*
			* Get the list of direct debit mandates associated with a customer
			*/
			fetchMandateAuthorizations: (id, ...init) => customer_fetchMandateAuthorizations(client, id, ...init),
			/**
			* Initialize Authorization
			*
			* Initiate a request to create a reusable authorization code for recurring transactions
			*/
			initializeAuthorization: (...init) => customer_initializeAuthorization(client, ...init),
			/**
			* Initialize Direct Debit
			*
			* Initialize the process of linking an account to a customer for Direct Debit transactions
			*/
			initializeDirectDebit: (id, ...init) => customer_initializeDirectDebit(client, id, ...init),
			/**
			* List Customers
			*
			* List customers available on your integration
			*/
			list: (...init) => customer_list(client, ...init),
			/**
			* Set Risk Action
			*
			* Set customer's risk action by whitelisting or blacklisting the customer
			*/
			riskAction: (...init) => customer_riskAction(client, ...init),
			/**
			* Update Customer
			*
			* Update a customer's details on your integration
			*/
			update: (email_or_code, ...init) => customer_update(client, email_or_code, ...init),
			/**
			* Validate Customer
			*
			* Validate a customer's identity
			*/
			validate: (customer_code, ...init) => customer_validate(client, customer_code, ...init),
			/**
			* Verify Authorization
			*
			* Check the status of an authorization request
			*/
			verifyAuthorization: (reference, ...init) => customer_verifyAuthorization(client, reference, ...init)
		},
		dedicatedAccount: {
			/**
			* Split Dedicated Account Transaction
			*
			* Split a dedicated virtual account transaction with one or more accounts
			*/
			addSplit: (...init) => dedicatedAccount_addSplit(client, ...init),
			/**
			* Assign Dedicated Account
			*
			* With this endpoint, you can create a customer, validate the customer, and assign a DVA to the customer.
			*/
			assign: (...init) => dedicatedAccount_assign(client, ...init),
			/**
			* Fetch Bank Providers
			*
			* Get available bank providers for a dedicated virtual account
			*/
			availableProviders: (...init) => dedicatedAccount_availableProviders(client, ...init),
			/**
			* Create Dedicated Account
			*
			* Create a dedicated virtual account for an existing customer
			*/
			create: (...init) => dedicatedAccount_create(client, ...init),
			/**
			* Deactivate Dedicated Account
			*
			* Deactivate a dedicated virtual account on your integration.
			*/
			deactivate: (id, ...init) => dedicatedAccount_deactivate(client, id, ...init),
			/**
			* Fetch Dedicated Account
			*
			* Get details of a dedicated virtual account on your integration.
			*/
			fetch: (id, ...init) => dedicatedAccount_fetch(client, id, ...init),
			/**
			* List Dedicated Accounts
			*
			* List dedicated virtual accounts available on your integration.
			*/
			list: (...init) => dedicatedAccount_list(client, ...init),
			/**
			* Remove Split from Dedicated Account
			*
			* If you've previously set up split payment for transactions on a dedicated virtual account, you can remove it with this endpoint
			*/
			removeSplit: (...init) => dedicatedAccount_removeSplit(client, ...init),
			/**
			* Requery Dedicated Account
			*
			* Requery Dedicated Virtual Account for new transactions
			*/
			requery: (...init) => dedicatedAccount_requery(client, ...init)
		},
		directdebit: {
			/**
			* List Mandate Authorizations
			*
			* Get a list of all the direct debit mandates on your integration
			*/
			listMandateAuthorizations: (...init) => directdebit_listMandateAuthorizations(client, ...init),
			/**
			* Trigger Activation Charge
			*
			* Trigger activation charge for specified customers
			*/
			triggerActivationCharge: (...init) => directdebit_triggerActivationCharge(client, ...init)
		},
		dispute: {
			/**
			* Export Disputes
			*
			* Export the disputes available on your integration
			*/
			download: (...init) => dispute_download(client, ...init),
			/**
			* Add Evidence
			*
			* Provide evidence for a dispute
			*/
			evidence: (id, ...init) => dispute_evidence(client, id, ...init),
			/**
			* Fetch Dispute
			*
			* Fetch a transaction dispute
			*/
			fetch: (id, ...init) => dispute_fetch(client, id, ...init),
			/**
			* List Disputes
			*
			* List transaction disputes filed by customers
			*/
			list: (...init) => dispute_list(client, ...init),
			/**
			* Resolve Dispute
			*
			* Resolve a transaction dispute
			*/
			resolve: (id, ...init) => dispute_resolve(client, id, ...init),
			/**
			* List Transaction Disputes
			*
			* List all disputes filed for a transaction
			*/
			transaction: (id, ...init) => dispute_transaction(client, id, ...init),
			/**
			* Update Dispute
			*
			* Update a transaction dispute
			*/
			update: (id, ...init) => dispute_update(client, id, ...init),
			/**
			* Fetch Upload URL
			*
			* Get the URL to upload a dispute evidence
			*/
			uploadUrl: (id, ...init) => dispute_uploadUrl(client, id, ...init)
		},
		integration: {
			/**
			* Fetch Payment Session Timeout
			*
			* Fetch the session timeout of a transaction
			*/
			fetchPaymentSessionTimeout: (...init) => integration_fetchPaymentSessionTimeout(client, ...init),
			/**
			* Update Payment Session Timeout
			*
			* Update the session timeout of a transaction
			*/
			updatePaymentSessionTimeout: (...init) => integration_updatePaymentSessionTimeout(client, ...init)
		},
		misc: { 
		/**
		* Internal path for schema generation
		*
		* This path is internal and used to ensure that schemas like WebhookEvent are considered 'used' for SDK generation and linting.
		*/
generateWebhookEventTypes: (...init) => misc_generateWebhookEventTypes(client, ...init) },
		miscellaneous: {
			/**
			* List States (AVS)
			*
			* Get a list of states for a country for address verification
			*/
			avs: (...init) => miscellaneous_avs(client, ...init),
			/**
			* List Countries
			*
			* List all supported countries on Paystack
			*/
			listCountries: (...init) => miscellaneous_listCountries(client, ...init),
			/**
			* Resolve Card BIN
			*
			* Get the details of a card BIN
			*/
			resolveCardBin: (bin, ...init) => miscellaneous_resolveCardBin(client, bin, ...init)
		},
		order: {
			/**
			* Create Order
			*
			* Create an order for selected items
			*/
			create: (...init) => order_create(client, ...init),
			/**
			* Fetch Order
			*
			* Fetch the details of a previously created order
			*/
			fetch: (id, ...init) => order_fetch(client, id, ...init),
			/**
			* List Orders
			*
			* List the previously created orders
			*/
			list: (...init) => order_list(client, ...init),
			/**
			* Fetch Product Orders
			*
			* Fetch all orders for a particular product
			*/
			product: (id, ...init) => order_product(client, id, ...init),
			/**
			* Validate Order
			*
			* Validate a pay for me order
			*/
			validate: (code, ...init) => order_validate(client, code, ...init)
		},
		page: {
			/**
			* Add Products
			*
			* Add products to a previously created payment page. You can only add products to pages
			that was created with a `product` type.
			*/
			addProducts: (id, ...init) => page_addProducts(client, id, ...init),
			/**
			* Check Slug Availability
			*
			* Check if a custom slug is available for use when creating a payment page
			*/
			checkSlugAvailability: (slug, ...init) => page_checkSlugAvailability(client, slug, ...init),
			/**
			* Create Page
			*
			* Create a webpage to receive payments
			*/
			create: (...init) => page_create(client, ...init),
			/**
			* Fetch Page
			*
			* Get a previously created payment page
			*/
			fetch: (id_or_slug, ...init) => page_fetch(client, id_or_slug, ...init),
			/**
			* List Pages
			*
			* List all previously created payment pages
			*/
			list: (...init) => page_list(client, ...init),
			/**
			* Update Page
			*
			* Update a previously created payment page
			*/
			update: (id_or_slug, ...init) => page_update(client, id_or_slug, ...init)
		},
		paymentRequest: {
			/**
			* Archive Payment Request
			*
			* Archive a payment request to clean up your records. An archived payment request cannot be verified and will not 
			be returned when listing all previously created payment requests.
			*/
			archive: (id, ...init) => paymentRequest_archive(client, id, ...init),
			/**
			* Create Payment Request
			*
			* Create a new payment request by issuing an invoice to a customer
			*/
			create: (...init) => paymentRequest_create(client, ...init),
			/**
			* Fetch Payment Request
			*
			* Fetch a previously created payment request
			*/
			fetch: (id_or_code, ...init) => paymentRequest_fetch(client, id_or_code, ...init),
			/**
			* Finalize Payment Request
			*
			* Finalise the creation of a draft payment request for a customer
			*/
			finalize: (id, ...init) => paymentRequest_finalize(client, id, ...init),
			/**
			* List Payment Request
			*
			* List all previously created payment requests to your customers
			*/
			list: (...init) => paymentRequest_list(client, ...init),
			/**
			* Send Notification
			*
			* Trigger an email reminder to a customer for a previously created payment request
			*/
			notify: (id, ...init) => paymentRequest_notify(client, id, ...init),
			/**
			* Payment Request Total
			*
			* Get the metric of all pending and successful payment requests
			*/
			totals: (...init) => paymentRequest_totals(client, ...init),
			/**
			* Update Payment Request
			*
			* Update a previously created payment request
			*/
			update: (id_or_code, ...init) => paymentRequest_update(client, id_or_code, ...init),
			/**
			* Verify Payment Request
			*
			* Verify the status of a previously created payment request
			*/
			verify: (id, ...init) => paymentRequest_verify(client, id, ...init)
		},
		plan: {
			/**
			* Create Plan
			*
			* Create a plan for recurring payments
			*/
			create: (...init) => plan_create(client, ...init),
			/**
			* Fetch Plan
			*
			* Get the details of a payment plan
			*/
			fetch: (id_or_code, ...init) => plan_fetch(client, id_or_code, ...init),
			/**
			* List Plans
			*
			* List all recurring payment plans
			*/
			list: (...init) => plan_list(client, ...init),
			/**
			* Update Plan
			*
			* Update a plan details on your integration
			*/
			update: (id_or_code, ...init) => plan_update(client, id_or_code, ...init)
		},
		preauthorization: {
			/**
			* Capture Preauthorization
			*
			* Charge a preauthorized transaction upon service delivery
			*/
			capture: (...init) => preauthorization_capture(client, ...init),
			/**
			* Initialize Preauthorization
			*
			* Initialize a preauthorization transaction for a new customer
			*/
			initialize: (...init) => preauthorization_initialize(client, ...init),
			/**
			* List Preauthorizations
			*
			* List preauthorizations carried out on your integration
			*/
			list: (...init) => preauthorization_list(client, ...init),
			/**
			* Release Preauthorization
			*
			* For when a customer cancels an order or you want to release the hold from their card.
			*/
			release: (...init) => preauthorization_release(client, ...init),
			/**
			* Reserve Preauthorization
			*
			* Hold an amount using an existing customer's authorization that's marked reusable.
			*/
			reserve_authorization: (...init) => preauthorization_reserve_authorization(client, ...init),
			/**
			* Verify Preauthorization
			*
			* Fetch and confirm the status of a preauthorized transaction.
			*/
			verify: (reference, ...init) => preauthorization_verify(client, reference, ...init)
		},
		product: {
			/**
			* Create Product
			*
			* Create a new product on your integration
			*/
			create: (...init) => product_create(client, ...init),
			/**
			* Delete Product
			*
			* Delete a previously created product
			*/
			delete: (id, ...init) => product_delete(client, id, ...init),
			/**
			* Fetch Product
			*
			* Fetch a previously created product
			*/
			fetch: (id, ...init) => product_fetch(client, id, ...init),
			/**
			* List Products
			*
			* List all previously created products
			*/
			list: (...init) => product_list(client, ...init),
			/**
			* Update product
			*
			* Update a previously created product
			*/
			update: (id, ...init) => product_update(client, id, ...init)
		},
		refund: {
			/**
			* Create Refund
			*
			* Initiate a refund for a previously completed transaction
			*/
			create: (...init) => refund_create(client, ...init),
			/**
			* Fetch Refund
			*
			* Get a previously created refund
			*/
			fetch: (id, ...init) => refund_fetch(client, id, ...init),
			/**
			* List Refunds
			*
			* List previously created refunds
			*/
			list: (...init) => refund_list(client, ...init),
			/**
			* Retry Refund
			*
			* Retry a refund with a `needs-attention` status by providing the bank account details of a customer.
			*/
			retry: (id, ...init) => refund_retry(client, id, ...init)
		},
		settlements: {
			/**
			* List Settlements
			*
			* List settlements made to your settlement accounts
			*/
			fetch: (...init) => settlements_fetch(client, ...init),
			/**
			* Fetch Settlement Transactions
			*
			* Get the transactions that make up a particular settlement
			*/
			transaction: (id, ...init) => settlements_transaction(client, id, ...init)
		},
		split: {
			/**
			* Add Subaccount to Split
			*
			* Add a subaccount to a split configuration, or update the share of an existing subaccount
			*/
			addSubaccount: (id, ...init) => split_addSubaccount(client, id, ...init),
			/**
			* Create Split
			*
			* Create a split configuration for transactions
			*/
			create: (...init) => split_create(client, ...init),
			/**
			* Fetch Split
			*
			* Get details of a split configuration for a transaction
			*/
			fetch: (id, ...init) => split_fetch(client, id, ...init),
			/**
			* List Splits
			*
			* List the transaction splits available on your integration
			*/
			list: (...init) => split_list(client, ...init),
			/**
			* Remove Subaccount from split
			*
			* Remove a subaccount from a split configuration
			*/
			removeSubaccount: (id, ...init) => split_removeSubaccount(client, id, ...init),
			/**
			* Update Split
			*
			* Update a split configuration for transactions
			*/
			update: (id, ...init) => split_update(client, id, ...init)
		},
		storefront: {
			/**
			* Add Products to Storefront
			*
			* Add previously created products to a Storefront
			*/
			addProducts: (id, ...init) => storefront_addProducts(client, id, ...init),
			/**
			* Create Storefront
			*
			* Create a digital shop to manage and display your products
			*/
			create: (...init) => storefront_create(client, ...init),
			/**
			* Delete Storefront
			*
			* Delete a previously created Storefront
			*/
			delete: (id, ...init) => storefront_delete(client, id, ...init),
			/**
			* Duplicate Storefront
			*
			* Duplicate a previously created Storefront
			*/
			duplicate: (id, ...init) => storefront_duplicate(client, id, ...init),
			/**
			* Fetch Storefront
			*
			* Get the details of a previously created Storefront
			*/
			fetch: (id, ...init) => storefront_fetch(client, id, ...init),
			/**
			* Fetch Storefront Orders
			*
			* Fetch all orders in your Storefront
			*/
			fetchOrders: (id, ...init) => storefront_fetchOrders(client, id, ...init),
			/**
			* List Storefronts
			*
			* List the storefronts you previously created
			*/
			list: (...init) => storefront_list(client, ...init),
			/**
			* List Storefront Products
			*
			* List the products in a Storefront
			*/
			listProducts: (id, ...init) => storefront_listProducts(client, id, ...init),
			/**
			* Publish Storefront
			*
			* Make your Storefront publicly available
			*/
			publish: (id, ...init) => storefront_publish(client, id, ...init),
			/**
			* Update Storefront
			*
			* Update the details of a previously created Storefront
			*/
			update: (id, ...init) => storefront_update(client, id, ...init),
			/**
			* Verify Storefront Slug
			*
			* Verify the availability of a slug before using it for your Storefront
			*/
			verifySlug: (slug, ...init) => storefront_verifySlug(client, slug, ...init)
		},
		subaccount: {
			/**
			* Create Subaccount
			*
			* Create a subacount for a partner
			*/
			create: (...init) => subaccount_create(client, ...init),
			/**
			* Fetch Subaccount
			*
			* Get details of a subaccount on your integration
			*/
			fetch: (id_or_code, ...init) => subaccount_fetch(client, id_or_code, ...init),
			/**
			* List Subaccounts
			*
			* List subaccounts available on your integration
			*/
			list: (...init) => subaccount_list(client, ...init),
			/**
			* Update Subaccount
			*
			* Update a subaccount details on your integration
			*/
			update: (id_or_code, ...init) => subaccount_update(client, id_or_code, ...init)
		},
		subscription: {
			/**
			* Create Subscription
			*
			* Create a subscription a customer
			*/
			create: (...init) => subscription_create(client, ...init),
			/**
			* Disable Subscription
			*
			* Disable a subscription on your integration
			*/
			disable: (...init) => subscription_disable(client, ...init),
			/**
			* Enable Subscription
			*
			* Enable a subscription on your integration
			*/
			enable: (...init) => subscription_enable(client, ...init),
			/**
			* Fetch Subscription
			*
			* Get details of a customer's subscription
			*/
			fetch: (id_or_code, ...init) => subscription_fetch(client, id_or_code, ...init),
			/**
			* List Subscriptions
			*
			* List all subscriptions available on your integration
			*/
			list: (...init) => subscription_list(client, ...init),
			/**
			* Send Update Subscription Link
			*
			* Email a customer a link for updating the card on their subscription
			*/
			manageEmail: (code, ...init) => subscription_manageEmail(client, code, ...init),
			/**
			* Generate Update Subscription Link
			*
			* Generate a link for updating the card on a subscription
			*/
			manageLink: (code, ...init) => subscription_manageLink(client, code, ...init)
		},
		terminal: {
			/**
			* Commission Terminal
			*
			* Activate your debug device by linking it to your integration
			*/
			commission: (...init) => terminal_commission(client, ...init),
			/**
			* Decommission Terminal
			*
			* Unlink your debug device from your integration
			*/
			decommission: (...init) => terminal_decommission(client, ...init),
			/**
			* Fetch Terminal
			*
			* Get the details of a Terminal
			*/
			fetch: (terminal_id, ...init) => terminal_fetch(client, terminal_id, ...init),
			/**
			* Fetch Event Status
			*
			* Check the status of an event sent to the Terminal
			*/
			fetchEventStatus: (terminal_id, event_id, ...init) => terminal_fetchEventStatus(client, terminal_id, event_id, ...init),
			/**
			* Fetch Terminal Status
			*
			* Check the availiability of a Terminal before sending an event to it
			*/
			fetchTerminalStatus: (terminal_id, ...init) => terminal_fetchTerminalStatus(client, terminal_id, ...init),
			/**
			* List Terminals
			*
			* List the Terminals available on your integration
			*/
			list: (...init) => terminal_list(client, ...init),
			/**
			* Send Event
			*
			* Send an event from your application to the Paystack Terminal
			*/
			sendEvent: (id, ...init) => terminal_sendEvent(client, id, ...init),
			/**
			* Update Terminal
			*
			* Update the details of a Terminal
			*/
			update: (terminal_id, ...init) => terminal_update(client, terminal_id, ...init)
		},
		transaction: {
			/**
			* Charge Authorization
			*
			* Charge all authorizations marked as reusable with this endpoint whenever you need to receive payments
			*/
			chargeAuthorization: (...init) => transaction_chargeAuthorization(client, ...init),
			/**
			* Check Authorization
			*
			* Check if an authorization code can be used for a charge.
			*/
			checkAuthorization: (...init) => transaction_checkAuthorization(client, ...init),
			/**
			* Get Transaction Event
			*
			* Fetch the event for a specific transaction.
			*/
			event: (id, ...init) => transaction_event(client, id, ...init),
			/**
			* Export Transactions
			*
			* Download transactions that occurred on your integration for a specific timeframe
			*/
			export: (...init) => transaction_export(client, ...init),
			/**
			* Fetch Transaction
			*
			* Fetch a transaction to get its details
			*/
			fetch: (id, ...init) => transaction_fetch(client, id, ...init),
			/**
			* Initialize Transaction
			*
			* Create a new transaction
			*/
			initialize: (...init) => transaction_initialize(client, ...init),
			/**
			* List Transactions
			*
			* List transactions carried out on your integration
			*/
			list: (...init) => transaction_list(client, ...init),
			/**
			* Partial Debit
			*
			* Retrieve part of a payment from a customer
			*/
			partialDebit: (...init) => transaction_partialDebit(client, ...init),
			/**
			* Get Transaction Session
			*
			* Fetch the session for a specific transaction.
			*/
			session: (id, ...init) => transaction_session(client, id, ...init),
			/**
			* Fetch Transaction Timeline
			*
			* Fetch the steps taken from the initiation to the completion of a transaction
			*/
			timeline: (id_or_reference, ...init) => transaction_timeline(client, id_or_reference, ...init),
			/**
			* Transaction Totals
			*
			* Get the total amount of all transactions
			*/
			totals: (...init) => transaction_totals(client, ...init),
			/**
			* Verify Transaction
			*
			* Verify a previously initiated transaction using it's reference
			*/
			verify: (reference, ...init) => transaction_verify(client, reference, ...init)
		},
		transfer: {
			/**
			* Initiate Bulk Transfer
			*
			* Batch multiple transfers in a single request.
			
			You need to disable the Transfers OTP requirement to use this endpoint.
			*/
			bulk: (...init) => transfer_bulk(client, ...init),
			/**
			* Disable OTP for Transfers
			*
			* This is used in the event that you want to be able to complete transfers programmatically without use of OTPs. 
			No arguments required. You will get an OTP to complete the request.
			*/
			disableOtp: (...init) => transfer_disableOtp(client, ...init),
			/**
			* Finalize Disabling OTP for Transfers
			*
			* Finalize the request to disable OTP on your transfers
			*/
			disableOtpFinalize: (...init) => transfer_disableOtpFinalize(client, ...init),
			/**
			* Enable OTP requirement for Transfers
			*
			* In the event that a customer wants to stop being able to complete transfers programmatically, this endpoint helps turn OTP requirement back on. 
			No arguments required.
			*/
			enableOtp: (...init) => transfer_enableOtp(client, ...init),
			/**
			* Export Transfers
			*
			* Export a list of transfers carried out on your integration
			*/
			exportTransfer: (...init) => transfer_exportTransfer(client, ...init),
			/**
			* Fetch Transfer
			*
			* Get details of a transfer on your integration
			*/
			fetch: (id_or_code, ...init) => transfer_fetch(client, id_or_code, ...init),
			/**
			* Finalize Transfer
			*
			* Finalize an initiated transfer
			*/
			finalize: (...init) => transfer_finalize(client, ...init),
			/**
			* Initiate Transfer
			*
			* Send money to your customers
			*/
			initiate: (...init) => transfer_initiate(client, ...init),
			/**
			* List Transfers
			*
			* List the transfers made on your integration
			*/
			list: (...init) => transfer_list(client, ...init),
			/**
			* Resend OTP for Transfer
			*
			* Generates and send a new OTP to customer in the event they are having trouble receiving one.
			*/
			resendOtp: (...init) => transfer_resendOtp(client, ...init),
			/**
			* Verify Transfer
			*
			* Verify the status of a transfer on your integration
			*/
			verify: (reference, ...init) => transfer_verify(client, reference, ...init)
		},
		transferrecipient: {
			/**
			* Bulk Create Transfer Recipient
			*
			* Create multiple transfer recipients in batches. A duplicate account number will lead to the retrieval of the existing record.
			*/
			bulk: (...init) => transferrecipient_bulk(client, ...init),
			/**
			* Create Transfer Recipient
			*
			* Creates a new recipient. A duplicate account number will lead to the retrieval of the existing record.
			*/
			create: (...init) => transferrecipient_create(client, ...init),
			/**
			* Delete Transfer Recipient
			*
			* Delete a transfer recipient (sets the transfer recipient to inactive)
			*/
			delete: (id_or_code, ...init) => transferrecipient_delete(client, id_or_code, ...init),
			/**
			* Fetch Transfer recipient
			*
			* Fetch the details of a transfer recipient
			*/
			fetch: (id_or_code, ...init) => transferrecipient_fetch(client, id_or_code, ...init),
			/**
			* List Transfer Recipients
			*
			* List transfer recipients available on your integration
			*/
			list: (...init) => transferrecipient_list(client, ...init),
			/**
			* Update Transfer Recipient
			*
			* Update the details of a transfer recipient
			*/
			update: (id_or_code, ...init) => transferrecipient_update(client, id_or_code, ...init)
		},
		virtualTerminal: {
			/**
			* Add Split Code to Virtual Terminal
			*
			* Add Split Code to Virtual Terminal
			*/
			addSplitCode: (code, ...init) => virtualTerminal_addSplitCode(client, code, ...init),
			/**
			* Create Virtual Terminal
			*
			* Create a Virtual Terminal on your integration
			*/
			create: (...init) => virtualTerminal_create(client, ...init),
			/**
			* Deactivate Virtual Terminal
			*
			* Deactivate a Virtual Terminal on your integration
			*/
			deactivate: (code, ...init) => virtualTerminal_deactivate(client, code, ...init),
			/**
			* Remove Split Code from Virtual Terminal
			*
			* Remove Split Code from Virtual Terminal
			*/
			deleteSplitCode: (code, ...init) => virtualTerminal_deleteSplitCode(client, code, ...init),
			/**
			* Assign Destination to Virtual Terminal
			*
			* Add a destination (WhatsApp number) to a Virtual Terminal on your integration
			*/
			destinationAssign: (code, ...init) => virtualTerminal_destinationAssign(client, code, ...init),
			/**
			* Unassign Destination from Virtual Terminal
			*
			* Unassign a destination (WhatsApp Number) from a Virtual Terminal on your integration
			*/
			destinationUnassign: (code, ...init) => virtualTerminal_destinationUnassign(client, code, ...init),
			/**
			* Fetch Virtual Terminal
			*
			* Fetch a Virtual Terminal on your integration
			*/
			fetch: (code, ...init) => virtualTerminal_fetch(client, code, ...init),
			/**
			* List Virtual Terminals
			*
			* List Virtual Terminals on your integration
			*/
			list: (...init) => virtualTerminal_list(client, ...init),
			/**
			* Update Virtual Terminal
			*
			* Update a Virtual Terminal on your integration
			*/
			update: (code, ...init) => virtualTerminal_update(client, code, ...init)
		}
	};
}
//#endregion
//#region src/webhooks.ts
var Webhooks = class {
	/**
	* Parses and types a Paystack webhook event payload.
	*
	* @example
	* const event = Webhooks.parseEvent(req.body);
	* if (event.event === 'charge.success') {
	*   console.log(event.data.amount);
	* }
	*/
	static parseEvent(payload) {
		return payload;
	}
};
//#endregion
//#region src/index.ts
function createPaystack(options) {
	const client = createPaystackClient(options);
	return {
		client,
		...bindOperations(client)
	};
}
//#endregion
export { DEFAULT_IDEMPOTENCY_HEADER, DEFAULT_REQUEST_ID_HEADERS, PaystackApiError, PaystackError, PaystackResponse, Webhooks, applePay_listDomain, applePay_registerDomain, applePay_unregisterDomain, assertOk, balance_fetch, balance_ledger, bank_list, bank_resolveAccountNumber, bank_validateAccountNumber, bindOperations, bulkCharge_charges, bulkCharge_fetch, bulkCharge_initiate, bulkCharge_list, bulkCharge_pause, bulkCharge_resume, capitecPay_requery, charge_check, charge_create, charge_submitAddress, charge_submitBirthday, charge_submitOtp, charge_submitPhone, charge_submitPin, createIdempotencyKey, createPaystack, createPaystackClient, customer_create, customer_deactivateAuthorization, customer_directDebitActivationCharge, customer_fetch, customer_fetchMandateAuthorizations, customer_initializeAuthorization, customer_initializeDirectDebit, customer_list, customer_riskAction, customer_update, customer_validate, customer_verifyAuthorization, dedicatedAccount_addSplit, dedicatedAccount_assign, dedicatedAccount_availableProviders, dedicatedAccount_create, dedicatedAccount_deactivate, dedicatedAccount_fetch, dedicatedAccount_list, dedicatedAccount_removeSplit, dedicatedAccount_requery, directdebit_listMandateAuthorizations, directdebit_triggerActivationCharge, dispute_download, dispute_evidence, dispute_fetch, dispute_list, dispute_resolve, dispute_transaction, dispute_update, dispute_uploadUrl, getPaystackRequestId, hasHeader, integration_fetchPaymentSessionTimeout, integration_updatePaymentSessionTimeout, isPaystackApiError, misc_generateWebhookEventTypes, miscellaneous_avs, miscellaneous_listCountries, miscellaneous_resolveCardBin, order_create, order_fetch, order_list, order_product, order_validate, page_addProducts, page_checkSlugAvailability, page_create, page_fetch, page_list, page_update, paymentRequest_archive, paymentRequest_create, paymentRequest_fetch, paymentRequest_finalize, paymentRequest_list, paymentRequest_notify, paymentRequest_totals, paymentRequest_update, paymentRequest_verify, plan_create, plan_fetch, plan_list, plan_update, preauthorization_capture, preauthorization_initialize, preauthorization_list, preauthorization_release, preauthorization_reserve_authorization, preauthorization_verify, product_create, product_delete, product_fetch, product_list, product_update, refund_create, refund_fetch, refund_list, refund_retry, resolveIdempotencyKey, setHeader, settlements_fetch, settlements_transaction, split_addSubaccount, split_create, split_fetch, split_list, split_removeSubaccount, split_update, storefront_addProducts, storefront_create, storefront_delete, storefront_duplicate, storefront_fetch, storefront_fetchOrders, storefront_list, storefront_listProducts, storefront_publish, storefront_update, storefront_verifySlug, subaccount_create, subaccount_fetch, subaccount_list, subaccount_update, subscription_create, subscription_disable, subscription_enable, subscription_fetch, subscription_list, subscription_manageEmail, subscription_manageLink, terminal_commission, terminal_decommission, terminal_fetch, terminal_fetchEventStatus, terminal_fetchTerminalStatus, terminal_list, terminal_sendEvent, terminal_update, toPaystackApiError, transaction_chargeAuthorization, transaction_checkAuthorization, transaction_event, transaction_export, transaction_fetch, transaction_initialize, transaction_list, transaction_partialDebit, transaction_session, transaction_timeline, transaction_totals, transaction_verify, transfer_bulk, transfer_disableOtp, transfer_disableOtpFinalize, transfer_enableOtp, transfer_exportTransfer, transfer_fetch, transfer_finalize, transfer_initiate, transfer_list, transfer_resendOtp, transfer_verify, transferrecipient_bulk, transferrecipient_create, transferrecipient_delete, transferrecipient_fetch, transferrecipient_list, transferrecipient_update, virtualTerminal_addSplitCode, virtualTerminal_create, virtualTerminal_deactivate, virtualTerminal_deleteSplitCode, virtualTerminal_destinationAssign, virtualTerminal_destinationUnassign, virtualTerminal_fetch, virtualTerminal_list, virtualTerminal_update };