import { Checkout } from '../resources/checkout.mjs';
import { Customer } from '../resources/customer.mjs';
import { Subscription } from '../resources/subscription.mjs';
import '../resources/webhook.mjs';
import '../resources/invoice.mjs';
import '../resources/metadata.mjs';
import { Payment } from '../resources/payment.mjs';
import { Refund } from '../resources/refund.mjs';
import '../resources/billing.mjs';
import 'zod';
import { P as PayKitProvider, W as WebhookSetupConfig, b as Webhook } from '../paykit-provider-BGUqO4Yp.mjs';
import { PayKitAdapterMetadata } from '../provider-schema.mjs';
import '../error.mjs';
import '../http-client.mjs';
import '../oauth2-token-manager.mjs';
import { EndpointPath, EndpointHandler } from './endpoints.mjs';
import '../tools/utils.mjs';
import '../tools/try-catch.mjs';
import '../types.mjs';

/**
 * Creates type-safe endpoint handlers for any PayKit instance
 * Usage in your API route:
 *
 * ```ts
 * import { paykit } from '@/lib/paykit';
 * import { createEndpointHandlers } from '@paykit-sdk/core';
 *
 * const endpoints = createEndpointHandlers(paykit);
 * ```
 */
declare function createEndpointHandlers(paykit: PayKit<any>): {
    [K in EndpointPath]: EndpointHandler<K>;
};

/**
 * @template TMetadata - The registry of provider-specific metadata types
 * @template TNative - The type of the underlying native SDK client
 */
declare class PayKit<P extends PayKitProvider<any, any, any>> {
    private provider;
    private adapterMetadata?;
    constructor(provider: P, adapterMetadata?: PayKitAdapterMetadata | undefined);
    private readonly sdkVersion;
    /**
     * Access the underlying native SDK (e.g., Stripe, Adyen) directly
     * with full type safety.
     */
    get _native(): P['_native'];
    private _track;
    /**
     * Access the provider's name (e.g., 'stripe')
     */
    get providerName(): string;
    get customers(): {
        create: (params: Parameters<P["createCustomer"]>[0]) => Promise<Customer>;
        update: (id: string, params: Parameters<P["updateCustomer"]>[1]) => Promise<Customer>;
        retrieve: (id: string) => Promise<Customer | null>;
        delete: (id: string) => Promise<null>;
    };
    get checkouts(): {
        create: (params: Parameters<P["createCheckout"]>[0]) => Promise<Checkout>;
        retrieve: (id: string) => Promise<Checkout | null>;
        update: (id: string, params: Parameters<P["updateCheckout"]>[1]) => Promise<Checkout>;
        delete: (id: string) => Promise<null>;
    };
    get payments(): {
        create: (params: Parameters<P["createPayment"]>[0]) => Promise<Payment>;
        retrieve: (id: string) => Promise<Payment | null>;
        update: (id: string, params: Parameters<P["updatePayment"]>[1]) => Promise<Payment>;
        capture: (id: string, params: Parameters<P["capturePayment"]>[1]) => Promise<Payment>;
        delete: (id: string) => Promise<null>;
        cancel: (id: string) => Promise<Payment>;
    };
    get subscriptions(): {
        create: (params: Parameters<P["createSubscription"]>[0]) => Promise<Subscription>;
        update: (id: string, params: Parameters<P["updateSubscription"]>[1]) => Promise<Subscription>;
        cancel: (id: string) => Promise<Subscription>;
        retrieve: (id: string) => Promise<Subscription | null>;
        delete: (id: string) => Promise<null>;
    };
    get refunds(): {
        create: (params: Parameters<P["createRefund"]>[0]) => Promise<Refund>;
    };
    get webhooks(): {
        setup: (config: Omit<WebhookSetupConfig<P extends PayKitProvider<any, any, infer R extends Record<string, any>> ? R : any>, "provider">) => Webhook<P extends PayKitProvider<any, any, infer R extends Record<string, any>> ? R : any>;
    };
}

export { PayKit as P, createEndpointHandlers };
