{"version":3,"file":"client.mjs","names":[],"sources":["../src/client.ts"],"sourcesContent":["import type { BetterFetchResponse, BetterFetchOption, BetterFetch } from \"@better-fetch/fetch\";\nimport type { BetterAuthClientPlugin } from \"better-auth/client\";\nimport type {\n  PaystackPlan,\n  PaystackProduct,\n  PaystackTransaction,\n  PaystackTransactionResponse,\n  Subscription,\n  PaystackClientLike,\n  AnyPaystackOptions,\n  PaystackInitializeResult,\n} from \"./types\";\n\nimport type { paystack as paystackServer } from \"./index\";\nimport { PACKAGE_VERSION } from \"./version\";\n\nexport { parsePaystackMetadata } from \"./metadata\";\nexport type { PaystackMetadata } from \"./metadata\";\n\n/**\n * Helper type to handle the conditional return type based on 'throw' option.\n */\nexport type FetchResult<T, O extends BetterFetchOption | undefined> = O extends { throw: true }\n  ? T\n  : BetterFetchResponse<T>;\n\n/**\n * Paystack Client Action Definitions\n */\nexport interface PaystackActions {\n  /**\n   * Initialize a transaction.\n   */\n  initializeTransaction: <O extends BetterFetchOption | undefined = undefined>(\n    data: Record<string, unknown> & {\n      callbackUrl?: string;\n      callbackURL?: string;\n      product?: string;\n      referenceId?: string;\n    },\n    options?: O,\n  ) => Promise<FetchResult<PaystackInitializeResult, O>>;\n  /**\n   * Verify a transaction by reference.\n   */\n  verifyTransaction: <O extends BetterFetchOption | undefined = undefined>(\n    data: { reference: string },\n    options?: O,\n  ) => Promise<\n    FetchResult<\n      {\n        status: string;\n        reference: string;\n        data: PaystackTransactionResponse;\n      },\n      O\n    >\n  >;\n  /**\n   * List transactions for the current user/reference.\n   */\n  listTransactions: <O extends BetterFetchOption | undefined = undefined>(\n    data?: { query?: Record<string, unknown> },\n    options?: O,\n  ) => Promise<FetchResult<{ transactions: PaystackTransaction[] }, O>>;\n  /**\n   * List subscriptions for the current user/reference.\n   */\n  listSubscriptions: <O extends BetterFetchOption | undefined = undefined>(\n    data?: { query?: Record<string, unknown> },\n    options?: O,\n  ) => Promise<FetchResult<{ subscriptions: Subscription[] }, O>>;\n  /**\n   * Get a manage link/billing portal link for a subscription.\n   */\n  getSubscriptionManageLink: <O extends BetterFetchOption | undefined = undefined>(\n    data: { subscriptionCode: string },\n    options?: O,\n  ) => Promise<FetchResult<{ link: string }, O>>;\n  /**\n   * Get the plugin configuration (plans and products).\n   */\n  config: () => Promise<BetterFetchResponse<Record<string, unknown>>>;\n  /**\n   * List available products.\n   */\n  listProducts: <O extends BetterFetchOption | undefined = undefined>(\n    options?: O,\n  ) => Promise<FetchResult<{ products: PaystackProduct[] }, O>>;\n  /**\n   * List available plans.\n   */\n  listPlans: <O extends BetterFetchOption | undefined = undefined>(\n    options?: O,\n  ) => Promise<FetchResult<{ plans: PaystackPlan[] }, O>>;\n}\n\n/**\n * Paystack Client Plugin Actions including namespaces\n */\nexport interface PaystackClientActions extends PaystackActions {\n  transaction: {\n    initialize: PaystackActions[\"initializeTransaction\"];\n    verify: PaystackActions[\"verifyTransaction\"];\n    list: PaystackActions[\"listTransactions\"];\n  };\n  subscription: {\n    upgrade: PaystackActions[\"initializeTransaction\"];\n    create: PaystackActions[\"initializeTransaction\"];\n    cancel: <O extends BetterFetchOption | undefined = undefined>(\n      data: {\n        subscriptionCode: string;\n        emailToken?: string;\n        atPeriodEnd?: boolean;\n      },\n      options?: O,\n    ) => Promise<FetchResult<{ status: string }, O>>;\n    restore: <O extends BetterFetchOption | undefined = undefined>(\n      data: {\n        subscriptionCode: string;\n        emailToken?: string;\n      },\n      options?: O,\n    ) => Promise<FetchResult<{ status: string }, O>>;\n    list: PaystackActions[\"listSubscriptions\"];\n    billingPortal: PaystackActions[\"getSubscriptionManageLink\"];\n    manageLink: PaystackActions[\"getSubscriptionManageLink\"];\n    /**\n     * @deprecated Use `subscription.cancel` instead.\n     */\n    disable: PaystackClientActions[\"subscription\"][\"cancel\"];\n    /**\n     * @deprecated Use `subscription.restore` instead.\n     */\n    enable: PaystackClientActions[\"subscription\"][\"restore\"];\n  };\n  paystack: PaystackClientActions;\n}\n\ndeclare module \"better-auth/client\" {\n  interface BetterAuthClient {\n    paystack: PaystackClientActions;\n    subscription: PaystackClientActions[\"subscription\"];\n    transaction: PaystackClientActions[\"transaction\"];\n  }\n}\n\ndeclare module \"better-auth\" {\n  interface BetterAuthClientPlugins {\n    paystack: ReturnType<typeof paystackClient>;\n  }\n}\n\n/**\n * Better Auth Paystack Client Plugin\n */\nexport const paystackClient = <\n  O extends {\n    subscription?: boolean;\n  } = { subscription?: boolean },\n>(\n  _options?: O,\n): BetterAuthClientPlugin & {\n  getActions: ($fetch: BetterFetch, $store: unknown, options: unknown) => PaystackClientActions;\n} => {\n  return {\n    id: \"paystack\",\n    version: PACKAGE_VERSION,\n    $InferServerPlugin: {} as ReturnType<\n      typeof paystackServer<PaystackClientLike, AnyPaystackOptions>\n    >,\n    pathMethods: {\n      \"/paystack/initialize-transaction\": \"POST\",\n      \"/paystack/verify-transaction\": \"POST\",\n      \"/paystack/disable-subscription\": \"POST\",\n      \"/paystack/enable-subscription\": \"POST\",\n      \"/paystack/create-subscription\": \"POST\",\n      \"/paystack/upgrade-subscription\": \"POST\",\n      \"/paystack/cancel-subscription\": \"POST\",\n      \"/paystack/restore-subscription\": \"POST\",\n    },\n    getActions: (\n      $fetch: BetterFetch,\n      _store: unknown,\n      _options: unknown,\n    ): PaystackClientActions => {\n      const fetch = $fetch;\n\n      const actions = {\n        transaction: {\n          initialize: (data: unknown, options?: BetterFetchOption) =>\n            fetch(\"/paystack/initialize-transaction\", { method: \"POST\", body: data, ...options }),\n          verify: (data: unknown, options?: BetterFetchOption) =>\n            fetch(\"/paystack/verify-transaction\", { method: \"POST\", body: data, ...options }),\n          list: (data?: { query?: Record<string, unknown> }, options?: BetterFetchOption) =>\n            fetch(\"/paystack/list-transactions\", { method: \"GET\", query: data?.query, ...options }),\n        },\n        subscription: {\n          upgrade: (data: unknown, options?: BetterFetchOption) =>\n            fetch(\"/paystack/initialize-transaction\", { method: \"POST\", body: data, ...options }),\n          create: (data: unknown, options?: BetterFetchOption) =>\n            fetch(\"/paystack/initialize-transaction\", { method: \"POST\", body: data, ...options }),\n          cancel: (data: unknown, options?: BetterFetchOption) =>\n            fetch(\"/paystack/disable-subscription\", { method: \"POST\", body: data, ...options }),\n          restore: (data: unknown, options?: BetterFetchOption) =>\n            fetch(\"/paystack/enable-subscription\", { method: \"POST\", body: data, ...options }),\n          list: (data?: { query?: Record<string, unknown> }, options?: BetterFetchOption) =>\n            fetch(\"/paystack/list-subscriptions\", {\n              method: \"GET\",\n              query: data?.query,\n              ...options,\n            }),\n          billingPortal: (data: unknown, options?: BetterFetchOption) =>\n            fetch(\"/paystack/subscription-manage-link\", { method: \"GET\", query: data, ...options }),\n          manageLink: (data: unknown, options?: BetterFetchOption) =>\n            fetch(\"/paystack/subscription-manage-link\", { method: \"GET\", query: data, ...options }),\n          disable: function (data: unknown, options?: BetterFetchOption) {\n            return this.cancel(data, options);\n          },\n          enable: function (data: unknown, options?: BetterFetchOption) {\n            return this.restore(data, options);\n          },\n        },\n        initializeTransaction: (data: unknown, options?: BetterFetchOption) =>\n          fetch(\"/paystack/initialize-transaction\", { method: \"POST\", body: data, ...options }),\n        verifyTransaction: (data: unknown, options?: BetterFetchOption) =>\n          fetch(\"/paystack/verify-transaction\", { method: \"POST\", body: data, ...options }),\n        listTransactions: (\n          data?: { query?: Record<string, unknown> },\n          options?: BetterFetchOption,\n        ) =>\n          fetch(\"/paystack/list-transactions\", { method: \"GET\", query: data?.query, ...options }),\n        listSubscriptions: (\n          data?: { query?: Record<string, unknown> },\n          options?: BetterFetchOption,\n        ) =>\n          fetch(\"/paystack/list-subscriptions\", { method: \"GET\", query: data?.query, ...options }),\n        getSubscriptionManageLink: (data: unknown, options?: BetterFetchOption) =>\n          fetch(\"/paystack/subscription-manage-link\", { method: \"GET\", query: data, ...options }),\n        config: () => fetch(\"/paystack/config\", { method: \"GET\" }),\n        listProducts: (options?: BetterFetchOption) =>\n          fetch(\"/paystack/list-products\", { method: \"GET\", ...options }),\n        listPlans: (options?: BetterFetchOption) =>\n          fetch(\"/paystack/list-plans\", { method: \"GET\", ...options }),\n        paystack: {} as unknown,\n      } as unknown as PaystackClientActions;\n\n      actions.paystack = actions;\n\n      return actions;\n    },\n  } satisfies BetterAuthClientPlugin;\n};\n\nexport const paystack: typeof paystackClient = paystackClient;\n"],"mappings":";;;;;AA4JA,MAAa,kBAKX,aAGG;CACH,OAAO;EACL,IAAI;EACJ,SAAS;EACT,oBAAoB,CAAC;EAGrB,aAAa;GACX,oCAAoC;GACpC,gCAAgC;GAChC,kCAAkC;GAClC,iCAAiC;GACjC,iCAAiC;GACjC,kCAAkC;GAClC,iCAAiC;GACjC,kCAAkC;EACpC;EACA,aACE,QACA,QACA,aAC0B;GAC1B,MAAM,QAAQ;GAEd,MAAM,UAAU;IACd,aAAa;KACX,aAAa,MAAe,YAC1B,MAAM,oCAAoC;MAAE,QAAQ;MAAQ,MAAM;MAAM,GAAG;KAAQ,CAAC;KACtF,SAAS,MAAe,YACtB,MAAM,gCAAgC;MAAE,QAAQ;MAAQ,MAAM;MAAM,GAAG;KAAQ,CAAC;KAClF,OAAO,MAA4C,YACjD,MAAM,+BAA+B;MAAE,QAAQ;MAAO,OAAO,MAAM;MAAO,GAAG;KAAQ,CAAC;IAC1F;IACA,cAAc;KACZ,UAAU,MAAe,YACvB,MAAM,oCAAoC;MAAE,QAAQ;MAAQ,MAAM;MAAM,GAAG;KAAQ,CAAC;KACtF,SAAS,MAAe,YACtB,MAAM,oCAAoC;MAAE,QAAQ;MAAQ,MAAM;MAAM,GAAG;KAAQ,CAAC;KACtF,SAAS,MAAe,YACtB,MAAM,kCAAkC;MAAE,QAAQ;MAAQ,MAAM;MAAM,GAAG;KAAQ,CAAC;KACpF,UAAU,MAAe,YACvB,MAAM,iCAAiC;MAAE,QAAQ;MAAQ,MAAM;MAAM,GAAG;KAAQ,CAAC;KACnF,OAAO,MAA4C,YACjD,MAAM,gCAAgC;MACpC,QAAQ;MACR,OAAO,MAAM;MACb,GAAG;KACL,CAAC;KACH,gBAAgB,MAAe,YAC7B,MAAM,sCAAsC;MAAE,QAAQ;MAAO,OAAO;MAAM,GAAG;KAAQ,CAAC;KACxF,aAAa,MAAe,YAC1B,MAAM,sCAAsC;MAAE,QAAQ;MAAO,OAAO;MAAM,GAAG;KAAQ,CAAC;KACxF,SAAS,SAAU,MAAe,SAA6B;MAC7D,OAAO,KAAK,OAAO,MAAM,OAAO;KAClC;KACA,QAAQ,SAAU,MAAe,SAA6B;MAC5D,OAAO,KAAK,QAAQ,MAAM,OAAO;KACnC;IACF;IACA,wBAAwB,MAAe,YACrC,MAAM,oCAAoC;KAAE,QAAQ;KAAQ,MAAM;KAAM,GAAG;IAAQ,CAAC;IACtF,oBAAoB,MAAe,YACjC,MAAM,gCAAgC;KAAE,QAAQ;KAAQ,MAAM;KAAM,GAAG;IAAQ,CAAC;IAClF,mBACE,MACA,YAEA,MAAM,+BAA+B;KAAE,QAAQ;KAAO,OAAO,MAAM;KAAO,GAAG;IAAQ,CAAC;IACxF,oBACE,MACA,YAEA,MAAM,gCAAgC;KAAE,QAAQ;KAAO,OAAO,MAAM;KAAO,GAAG;IAAQ,CAAC;IACzF,4BAA4B,MAAe,YACzC,MAAM,sCAAsC;KAAE,QAAQ;KAAO,OAAO;KAAM,GAAG;IAAQ,CAAC;IACxF,cAAc,MAAM,oBAAoB,EAAE,QAAQ,MAAM,CAAC;IACzD,eAAe,YACb,MAAM,2BAA2B;KAAE,QAAQ;KAAO,GAAG;IAAQ,CAAC;IAChE,YAAY,YACV,MAAM,wBAAwB;KAAE,QAAQ;KAAO,GAAG;IAAQ,CAAC;IAC7D,UAAU,CAAC;GACb;GAEA,QAAQ,WAAW;GAEnB,OAAO;EACT;CACF;AACF;AAEA,MAAa,WAAkC"}