better-auth-paystack
Version:
Production-ready Paystack billing plugin for Better Auth. Supports subscriptions, one-time payments, organization billing, secure webhooks and more
154 lines • 5.9 kB
text/typescript
import { A as PaystackClientLike, E as parsePaystackMetadata, F as PaystackPlan, I as PaystackProduct, K as Subscription, M as PaystackInitializeResult, O as AnyPaystackOptions, U as PaystackTransaction, W as PaystackTransactionResponse, n as paystack$1, v as PaystackMetadata } from "./index-CQ0SNlBx.mjs";
import { BetterFetch, BetterFetchOption, BetterFetchResponse } from "@better-fetch/fetch";
import { BetterAuthClientPlugin } from "better-auth/client";
//#region src/client.d.ts
/**
* Helper type to handle the conditional return type based on 'throw' option.
*/
export type FetchResult<T, O extends BetterFetchOption | undefined> = O extends {
throw: true;
} ? T : BetterFetchResponse<T>;
/**
* Paystack Client Action Definitions
*/
export interface PaystackActions {
/**
* Initialize a transaction.
*/
initializeTransaction: <O extends BetterFetchOption | undefined = undefined>(data: Record<string, unknown> & {
callbackUrl?: string;
callbackURL?: string;
product?: string;
referenceId?: string;
/** Required to start a trial after the customer has been told about its tokenization charge. */
confirmTrialTokenizationCharge?: boolean;
}, options?: O) => Promise<FetchResult<PaystackInitializeResult, O>>;
/**
* Verify a transaction by reference.
*/
verifyTransaction: <O extends BetterFetchOption | undefined = undefined>(data: {
reference: string;
}, options?: O) => Promise<FetchResult<{
status: string;
reference: string;
data: PaystackTransactionResponse;
}, O>>;
/**
* List transactions for the current user/reference.
*/
listTransactions: <O extends BetterFetchOption | undefined = undefined>(data?: {
query?: Record<string, unknown>;
}, options?: O) => Promise<FetchResult<{
transactions: PaystackTransaction[];
}, O>>;
/**
* List subscriptions for the current user/reference.
*/
listSubscriptions: <O extends BetterFetchOption | undefined = undefined>(data?: {
query?: Record<string, unknown>;
}, options?: O) => Promise<FetchResult<{
subscriptions: Subscription[];
}, O>>;
/**
* Get a manage link/billing portal link for a subscription.
*/
getSubscriptionManageLink: <O extends BetterFetchOption | undefined = undefined>(data: {
subscriptionCode: string;
}, options?: O) => Promise<FetchResult<{
link: string;
}, O>>;
/**
* Get the plugin configuration (plans and products).
*/
config: () => Promise<BetterFetchResponse<Record<string, unknown>>>;
/**
* List available products.
*/
listProducts: <O extends BetterFetchOption | undefined = undefined>(options?: O) => Promise<FetchResult<{
products: PaystackProduct[];
}, O>>;
/**
* List available plans.
*/
listPlans: <O extends BetterFetchOption | undefined = undefined>(options?: O) => Promise<FetchResult<{
plans: PaystackPlan[];
}, O>>;
}
/**
* Paystack Client Plugin Actions including namespaces
*/
export interface PaystackClientActions extends PaystackActions {
transaction: {
initialize: PaystackActions["initializeTransaction"];
verify: PaystackActions["verifyTransaction"];
list: PaystackActions["listTransactions"];
};
subscription: {
upgrade: PaystackActions["initializeTransaction"];
create: PaystackActions["initializeTransaction"];
cancel: <O extends BetterFetchOption | undefined = undefined>(data: {
subscriptionCode: string;
emailToken?: string;
atPeriodEnd?: boolean;
}, options?: O) => Promise<FetchResult<{
status: string;
}, O>>;
restore: <O extends BetterFetchOption | undefined = undefined>(data: {
subscriptionCode: string;
emailToken?: string;
}, options?: O) => Promise<FetchResult<{
status: string;
}, O>>;
list: PaystackActions["listSubscriptions"];
billingPortal: PaystackActions["getSubscriptionManageLink"];
manageLink: PaystackActions["getSubscriptionManageLink"];
/**
* @deprecated Use `subscription.cancel` instead.
*/
disable: PaystackClientActions["subscription"]["cancel"];
/**
* @deprecated Use `subscription.restore` instead.
*/
enable: PaystackClientActions["subscription"]["restore"];
};
paystack: PaystackClientActions;
}
declare module "better-auth/client" {
interface BetterAuthClient {
paystack: PaystackClientActions;
subscription: PaystackClientActions["subscription"];
transaction: PaystackClientActions["transaction"];
}
}
declare module "better-auth" {
interface BetterAuthClientPlugins {
paystack: ReturnType<typeof paystackClient>;
}
}
/**
* The concrete shape returned by {@link paystackClient}.
*
* `id` and `$InferServerPlugin` are deliberately narrower than the
* `BetterAuthClientPlugin` defaults: Better Auth keys its plugin merge on the *literal*
* plugin id and reads the server plugin's endpoints off `$InferServerPlugin`. Widening
* either one (e.g. by annotating this function as returning plain
* `BetterAuthClientPlugin`) collapses the entire inferred auth client to `never`.
*/
type PaystackClientServerPlugin = Pick<ReturnType<typeof paystack$1<PaystackClientLike, AnyPaystackOptions>>, "id" | "endpoints" | "schema" | "$ERROR_CODES">;
type PaystackClientPluginInstance = Omit<BetterAuthClientPlugin, "id" | "$InferServerPlugin" | "getActions"> & {
id: "paystack";
$InferServerPlugin: PaystackClientServerPlugin;
getActions: ($fetch: BetterFetch, $store: unknown, options: unknown) => PaystackClientActions;
};
/**
* Better Auth Paystack Client Plugin
*/
export declare const paystackClient: <O extends {
subscription?: boolean;
} = {
subscription?: boolean;
}>(_options?: O) => PaystackClientPluginInstance;
export declare const paystack: typeof paystackClient;
//#endregion
export { type PaystackMetadata, type PaystackTransaction, parsePaystackMetadata };
//# sourceMappingURL=client.d.mts.map