import * as react_jsx_runtime from 'react/jsx-runtime';
import z__default from 'zod';
import { Timestamp } from '@bufbuild/protobuf/wkt';
import { Message } from '@bufbuild/protobuf';

declare function BitsnapCart({ projectID, children, onVisibleChange, className, }: {
    projectID: string;
    children?: React.ReactNode;
    onVisibleChange?: (isVisible: boolean) => void;
    className?: string;
}): react_jsx_runtime.JSX.Element;

type ErrTypes = 'internal' | 'badInput' | 'notFound';
type Err = {
    ERR: true;
    error: unknown;
    type?: ErrTypes;
};
declare function Err(message: string, type?: ErrTypes): Err;

declare function setProjectID(projectID: string): void;

declare function setCustomHost(host: string): void;

declare enum BillingPeriod$1 {
    DAILY = "daily",
    WEEKLY = "weekly",
    MONTHLY = "monthly",
    QUARTERLY = "quarterly",
    SEMI_ANNUALLY = "semi-annually",
    ANNUALLY = "annually"
}
type LinkRequest = z__default.infer<typeof linkRequestSchema>;
declare const linkRequestSchema: z__default.ZodObject<{
    askForAddress: z__default.ZodOptional<z__default.ZodBoolean>;
    askForPhone: z__default.ZodOptional<z__default.ZodBoolean>;
    askForNote: z__default.ZodOptional<z__default.ZodBoolean>;
    askForNip: z__default.ZodOptional<z__default.ZodBoolean>;
    delivery: z__default.ZodOptional<z__default.ZodArray<z__default.ZodObject<{
        name: z__default.ZodString;
        desc: z__default.ZodOptional<z__default.ZodString>;
        min: z__default.ZodNumber;
        max: z__default.ZodNumber;
        price: z__default.ZodPipe<z__default.ZodNumber, z__default.ZodTransform<number, number>>;
    }, {}>>>;
    deliveryMethod: z__default.ZodOptional<z__default.ZodString>;
    details: z__default.ZodOptional<z__default.ZodObject<{
        email: z__default.ZodOptional<z__default.ZodString>;
        name: z__default.ZodOptional<z__default.ZodString>;
        lastName: z__default.ZodOptional<z__default.ZodString>;
        phone: z__default.ZodOptional<z__default.ZodString>;
        address: z__default.ZodOptional<z__default.ZodObject<{
            name: z__default.ZodOptional<z__default.ZodString>;
            line1: z__default.ZodOptional<z__default.ZodString>;
            line2: z__default.ZodOptional<z__default.ZodString>;
            city: z__default.ZodOptional<z__default.ZodString>;
            zipCode: z__default.ZodOptional<z__default.ZodString>;
            country: z__default.ZodOptional<z__default.ZodString>;
        }, {}>>;
        billingAddress: z__default.ZodOptional<z__default.ZodObject<{
            nip: z__default.ZodOptional<z__default.ZodString>;
            name: z__default.ZodOptional<z__default.ZodString>;
            line1: z__default.ZodOptional<z__default.ZodString>;
            line2: z__default.ZodOptional<z__default.ZodString>;
            city: z__default.ZodOptional<z__default.ZodString>;
            zipCode: z__default.ZodOptional<z__default.ZodString>;
        }, {}>>;
    }, {}>>;
    countries: z__default.ZodOptional<z__default.ZodArray<z__default.ZodString>>;
    items: z__default.ZodArray<z__default.ZodObject<{
        id: z__default.ZodString;
        quantity: z__default.ZodNumber;
        name: z__default.ZodOptional<z__default.ZodString>;
        description: z__default.ZodOptional<z__default.ZodString>;
        imageURL: z__default.ZodOptional<z__default.ZodString>;
        price: z__default.ZodOptional<z__default.ZodNumber>;
        currency: z__default.ZodOptional<z__default.ZodString>;
        recurring: z__default.ZodOptional<z__default.ZodObject<{
            billingPeriod: z__default.ZodEnum<{
                daily: BillingPeriod$1.DAILY;
                weekly: BillingPeriod$1.WEEKLY;
                monthly: BillingPeriod$1.MONTHLY;
                quarterly: BillingPeriod$1.QUARTERLY;
                "semi-annually": BillingPeriod$1.SEMI_ANNUALLY;
                annually: BillingPeriod$1.ANNUALLY;
            }>;
            trialDays: z__default.ZodOptional<z__default.ZodNumber>;
            subscriptionSchedule: z__default.ZodOptional<z__default.ZodNumber>;
        }, {}>>;
    }, {}>>;
    metadata: z__default.ZodOptional<z__default.ZodRecord<z__default.ZodString, z__default.ZodString>>;
    additionalAgreements: z__default.ZodOptional<z__default.ZodArray<z__default.ZodObject<{
        id: z__default.ZodOptional<z__default.ZodString>;
        name: z__default.ZodString;
        description: z__default.ZodOptional<z__default.ZodString>;
        required: z__default.ZodDefault<z__default.ZodBoolean>;
        answer: z__default.ZodOptional<z__default.ZodBoolean>;
    }, {}>>>;
    blikCode: z__default.ZodOptional<z__default.ZodString>;
    couponCode: z__default.ZodOptional<z__default.ZodString>;
    redirect: z__default.ZodOptional<z__default.ZodObject<{
        successURL: z__default.ZodOptional<z__default.ZodString>;
        cancelURL: z__default.ZodOptional<z__default.ZodString>;
    }, {}>>;
}, {}>;

declare function addProductToCart(id: string, quantity?: number, metadata?: Record<string, string | undefined>): Promise<Err | undefined>;
declare function showCart(): void;
declare function hideCart(): void;
declare namespace Bitsnap {
    function addProductToCart(id: string, quantity?: number, metadata?: Record<string, string | undefined>): Promise<Err | undefined>;
    function showCart(): void;
    function hideCart(): void;
}
declare function createPaymentURL(request: LinkRequest): Promise<Err | {
    url: string;
}>;
declare function createCheckout(request: LinkRequest & {
    apiKey?: string;
    testMode?: boolean;
}): Promise<{
    status: string;
    redirectURL: string;
}>;
declare function injectReferenceToRequestIfNeeded(request: LinkRequest): LinkRequest;

/**
 * @generated from enum common.v1.Environment
 */
declare enum Environment {
    /**
     * @generated from enum value: PRODUCTION = 0;
     */
    PRODUCTION = 0,
    /**
     * @generated from enum value: TEST = 1;
     */
    TEST = 1
}

/**
 * @generated from enum common.v1.Gateway
 */
declare enum Gateway {
    /**
     * @generated from enum value: GATEWAY_ALL = 0;
     */
    ALL = 0,
    /**
     * @generated from enum value: GATEWAY_PRZELEWY_24 = 1;
     */
    PRZELEWY_24 = 1,
    /**
     * @generated from enum value: GATEWAY_STRIPE = 2;
     */
    STRIPE = 2,
    /**
     * @generated from enum value: GATEWAY_TPAY = 3;
     */
    TPAY = 3,
    /**
     * @generated from enum value: GATEWAY_CASH_ON_DELIVERY = 4;
     */
    CASH_ON_DELIVERY = 4,
    /**
     * @generated from enum value: GATEWAY_FREE = 5;
     */
    FREE = 5
}

/**
 * @generated from message integrations.v1.Order
 */
type Order = Message<"integrations.v1.Order"> & {
    /**
     * @generated from field: string id = 1;
     */
    id: string;
    /**
     * @generated from field: integrations.v1.OrderStatus status = 2;
     */
    status: OrderStatus;
    /**
     * @generated from field: common.v1.Environment environment = 3;
     */
    environment: Environment;
    /**
     * @generated from field: repeated integrations.v1.OrderItem items = 4;
     */
    items: OrderItem[];
    /**
     * @generated from field: repeated string available_countries = 5;
     */
    availableCountries: string[];
    /**
     * @generated from field: optional integrations.v1.BillingAddress billing_address = 6;
     */
    billingAddress?: BillingAddress;
    /**
     * @generated from field: optional integrations.v1.Address shipping_address = 7;
     */
    shippingAddress?: Address;
    /**
     * @generated from field: optional integrations.v1.OrderDetails details = 8;
     */
    details?: OrderDetails;
    /**
     * @generated from field: optional integrations.v1.Customer customer = 9;
     */
    customer?: Customer;
    /**
     * @generated from field: google.protobuf.Timestamp created_at = 10;
     */
    createdAt?: Timestamp;
};
/**
 * @generated from message integrations.v1.OrderDetails
 */
type OrderDetails = Message<"integrations.v1.OrderDetails"> & {
    /**
     * @generated from field: common.v1.Gateway gateway = 1;
     */
    gateway: Gateway;
    /**
     * @generated from field: repeated integrations.v1.DeliveryMethod delivery_methods = 2;
     */
    deliveryMethods: DeliveryMethod[];
    /**
     * @generated from field: optional int64 delivery_method_price = 3;
     */
    deliveryMethodPrice?: bigint;
    /**
     * @generated from field: optional string delivery_method = 4;
     */
    deliveryMethod?: string;
    /**
     * @generated from field: bool ask_for_phone = 6;
     */
    askForPhone: boolean;
    /**
     * @generated from field: bool ask_for_note = 7;
     */
    askForNote: boolean;
    /**
     * @generated from field: bool ask_for_nip = 8;
     */
    askForNip: boolean;
    /**
     * @generated from field: optional string coupon_code = 9;
     */
    couponCode?: string;
    /**
     * @generated from field: optional int64 coupon_discount_amount = 10;
     */
    couponDiscountAmount?: bigint;
    /**
     * @generated from field: optional string coupon_discount_currency = 11;
     */
    couponDiscountCurrency?: string;
    /**
     * @generated from field: optional string coupon_discount_type = 12;
     */
    couponDiscountType?: string;
    /**
     * @generated from field: optional bool coupon_includes_delivery = 13;
     */
    couponIncludesDelivery?: boolean;
    /**
     * @generated from field: optional string success_url = 14;
     */
    successUrl?: string;
    /**
     * @generated from field: optional string cancel_url = 15;
     */
    cancelUrl?: string;
    /**
     * @generated from field: optional string payment_gateway_id = 16;
     */
    paymentGatewayId?: string;
    /**
     * @generated from field: map<string, string> metadata = 17;
     */
    metadata: {
        [key: string]: string;
    };
    /**
     * @generated from field: repeated integrations.v1.CheckoutAgreement additional_agreements = 18;
     */
    additionalAgreements: CheckoutAgreement[];
};
/**
 * @generated from message integrations.v1.CheckoutAgreement
 */
type CheckoutAgreement = Message<"integrations.v1.CheckoutAgreement"> & {
    /**
     * @generated from field: optional string id = 1;
     */
    id?: string;
    /**
     * @generated from field: string name = 2;
     */
    name: string;
    /**
     * @generated from field: optional string description = 3;
     */
    description?: string;
    /**
     * @generated from field: bool required = 4;
     */
    required: boolean;
    /**
     * @generated from field: optional bool answer = 5;
     */
    answer?: boolean;
};
/**
 * @generated from message integrations.v1.Address
 */
type Address = Message<"integrations.v1.Address"> & {
    /**
     * @generated from field: string name = 1;
     */
    name: string;
    /**
     * @generated from field: string line1 = 2;
     */
    line1: string;
    /**
     * @generated from field: optional string line2 = 3;
     */
    line2?: string;
    /**
     * @generated from field: string city = 4;
     */
    city: string;
    /**
     * @generated from field: string country = 5;
     */
    country: string;
    /**
     * @generated from field: optional string zip_code = 6;
     */
    zipCode?: string;
};
/**
 * @generated from message integrations.v1.BillingAddress
 */
type BillingAddress = Message<"integrations.v1.BillingAddress"> & {
    /**
     * @generated from field: string name = 1;
     */
    name: string;
    /**
     * @generated from field: string line1 = 2;
     */
    line1: string;
    /**
     * @generated from field: optional string line2 = 3;
     */
    line2?: string;
    /**
     * @generated from field: string city = 4;
     */
    city: string;
    /**
     * @generated from field: string country = 5;
     */
    country: string;
    /**
     * @generated from field: optional string zip_code = 6;
     */
    zipCode?: string;
    /**
     * @generated from field: optional string tax_id = 7;
     */
    taxId?: string;
};
/**
 * @generated from message integrations.v1.OrderItem
 */
type OrderItem = Message<"integrations.v1.OrderItem"> & {
    /**
     * @generated from field: string id = 1;
     */
    id: string;
    /**
     * @generated from field: int32 quantity = 2;
     */
    quantity: number;
    /**
     * @generated from field: int64 price = 3;
     */
    price: bigint;
    /**
     * @generated from field: string currency = 4;
     */
    currency: string;
    /**
     * @generated from field: optional int32 tax = 5;
     */
    tax?: number;
    /**
     * @generated from field: optional string name = 6;
     */
    name?: string;
    /**
     * @generated from field: optional integrations.v1.Recurring recurring = 7;
     */
    recurring?: Recurring;
};
/**
 * @generated from message integrations.v1.Customer
 */
type Customer = Message<"integrations.v1.Customer"> & {
    /**
     * @generated from field: string email = 1;
     */
    email: string;
    /**
     * @generated from field: optional string phone = 2;
     */
    phone?: string;
    /**
     * @generated from field: optional string name = 3;
     */
    name?: string;
};
/**
 * @generated from message integrations.v1.DeliveryMethod
 */
type DeliveryMethod = Message<"integrations.v1.DeliveryMethod"> & {
    /**
     * @generated from field: string name = 1;
     */
    name: string;
    /**
     * @generated from field: int32 min = 2;
     */
    min: number;
    /**
     * @generated from field: int32 max = 3;
     */
    max: number;
    /**
     * @generated from field: int64 price = 4;
     */
    price: bigint;
};
/**
 * @generated from message integrations.v1.Recurring
 */
type Recurring = Message<"integrations.v1.Recurring"> & {
    /**
     * @generated from field: integrations.v1.BillingPeriod billing_period = 1;
     */
    billingPeriod: BillingPeriod;
    /**
     * @generated from field: optional int32 trial_days = 2;
     */
    trialDays?: number;
    /**
     * @generated from field: optional int32 number_of_payments = 3;
     */
    numberOfPayments?: number;
};
/**
 * @generated from enum integrations.v1.OrderStatus
 */
declare enum OrderStatus {
    /**
     * @generated from enum value: CREATED = 0;
     */
    CREATED = 0,
    /**
     * @generated from enum value: PAID = 1;
     */
    PAID = 1,
    /**
     * @generated from enum value: UNPAID = 2;
     */
    UNPAID = 2,
    /**
     * @generated from enum value: CANCELED = 3;
     */
    CANCELED = 3
}
/**
 * @generated from enum integrations.v1.BillingPeriod
 */
declare enum BillingPeriod {
    /**
     * @generated from enum value: DAILY = 0;
     */
    DAILY = 0,
    /**
     * @generated from enum value: WEEKLY = 1;
     */
    WEEKLY = 1,
    /**
     * @generated from enum value: MONTHLY = 2;
     */
    MONTHLY = 2,
    /**
     * @generated from enum value: QUARTERLY = 3;
     */
    QUARTERLY = 3,
    /**
     * @generated from enum value: SEMI_ANNUALLY = 4;
     */
    SEMI_ANNUALLY = 4,
    /**
     * @generated from enum value: ANNUALLY = 5;
     */
    ANNUALLY = 5
}

/**
 * @generated from message integrations.v1.EventData
 */
type EventData = Message<"integrations.v1.EventData"> & {
    /**
     * @generated from field: string id = 1;
     */
    id: string;
    /**
     * @generated from field: integrations.v1.Event event = 2;
     */
    event: Event;
    /**
     * @generated from field: optional integrations.v1.Order order = 3;
     */
    order?: Order;
    /**
     * @generated from field: optional integrations.v1.Customer customer = 4;
     */
    customer?: Customer;
};
/**
 * @generated from enum integrations.v1.Event
 */
declare enum Event {
    /**
     * @generated from enum value: UNKNOWN = 0;
     */
    UNKNOWN = 0,
    /**
     * @generated from enum value: TRANSACTION_CREATED = 1;
     */
    TRANSACTION_CREATED = 1,
    /**
     * @generated from enum value: TRANSACTION_SUCCESS = 2;
     */
    TRANSACTION_SUCCESS = 2,
    /**
     * @generated from enum value: TRANSACTION_FAILURE = 3;
     */
    TRANSACTION_FAILURE = 3,
    /**
     * @generated from enum value: TRANSACTION_EXPIRED = 4;
     */
    TRANSACTION_EXPIRED = 4,
    /**
     * @generated from enum value: TRANSACTION_CHARGE = 5;
     */
    TRANSACTION_CHARGE = 5,
    /**
     * @generated from enum value: SUBSCRIPTION_CREATED = 6;
     */
    SUBSCRIPTION_CREATED = 6,
    /**
     * @generated from enum value: SUBSCRIPTION_PAUSED = 7;
     */
    SUBSCRIPTION_PAUSED = 7,
    /**
     * @generated from enum value: SUBSCRIPTION_RESUMED = 8;
     */
    SUBSCRIPTION_RESUMED = 8,
    /**
     * @generated from enum value: SUBSCRIPTION_UPDATED = 9;
     */
    SUBSCRIPTION_UPDATED = 9,
    /**
     * @generated from enum value: SUBSCRIPTION_DELETED = 10;
     */
    SUBSCRIPTION_DELETED = 10
}

/**
 * @generated from message jobs.v1.IntegrationEventJob
 */
type IntegrationEventJob = Message<"jobs.v1.IntegrationEventJob"> & {
    /**
     * @generated from field: string project_id = 1;
     */
    projectId: string;
    /**
     * @generated from field: common.v1.Environment environment = 2;
     */
    environment: Environment;
    /**
     * @generated from field: integrations.v1.EventData event_data = 3;
     */
    eventData?: EventData;
};

declare function handleWebhook(payload: string, url: string, headers: Record<string, string | undefined>, secret: string): Promise<ReturnType>;
declare function handleWebhookSignature(payload: string, signature: string, secret: string): Promise<ReturnType>;
type ReturnType = (Err & {
    isErr: true;
}) | (IntegrationEventJob & {
    isErr: false;
});

export { Bitsnap, BitsnapCart as BitsnapCheckout, type LinkRequest, addProductToCart, createCheckout, createPaymentURL, handleWebhook, handleWebhookSignature, hideCart, injectReferenceToRequestIfNeeded, setCustomHost, setProjectID, showCart };
