import { b as TBeamCartLocalStorage } from '../chunks/cart-contents-CLT7p7Gd.esm.js';
import { a as TPromoCodeAttribute, T as TPromoCodeRequest, b as TPromoCodeResponse, c as TValidatedPromoResponse } from '../chunks/promo-types-7r9-UuiP.esm.js';
import '../chunks/openapi-spec-Bk7E2QQP.esm.js';

/**
 * Retrieves all validated promo codes stored in the "beam_promo_codes" cookie and parses it
 *
 * @returns {TPromoCodeResponse | undefined} An array of `ValidatedPromoCode` objects if found and parsed successfully, otherwise `undefined`
 */
declare const getAllPromoCodesFromCookie: () => TPromoCodeResponse | undefined;
/**
 * Stores the validated promo codes in the "beam_promo_codes" cookie, replaces and does not merge
 *
 * @param {TValidatedPromoResponse} validatedPromoCodes
 * @param {string} domain
 */
declare const setPromoCodeInCookie: ({ validatedPromoCodes, domain, }: {
    validatedPromoCodes: TValidatedPromoResponse;
    domain?: string | undefined;
}) => void;
/**
 * Retrieves promo codes from localStorage, scoped by API key
 * @param {string} apiKey API key used for storage scoping
 * @returns {TPromoCodeRequest | null} - Returns stored promo codes object containing both
 * validated and unvalidated codes
 * - If no codes exist, returns a fresh object with empty arrays
 *
 */
declare const getPromoCodesLocalStorage: ({ apiKey }: {
    apiKey: string;
}) => TPromoCodeRequest | null;
/**
 * Sets promo codes in localStorage
 * @param {TPromoCodeRequest} promoCodes New promo codes to add
 * @param {string} apiKey API key for storage scoping
 */
declare const setPromoCodesInLocalStorage: ({ apiKey, promoCodes, }: {
    apiKey?: string | undefined;
    promoCodes: Partial<TPromoCodeRequest>;
}) => void;
/**
 * Merges new promo codes with existing ones and returns the combined result
 * @param {Partial<TPromoCodeRequest>} newPromos New promo codes to add
 * @param {string} apiKey API key for storage scoping
 * @returns {TPromoCodeRequest} An object containing both validated and unvalidated promo codes
 * @example
 * const result = mergePromoCodes({
 *   apiKey: 'beam_123',
 *   newPromos: {
 *     unvalidatedPromoCodes: [
 *       { type: 'manual', attributes: { value: 'WINTER20' } },
 *       { type: 'url', attributes: { url: 'www.example.com/?promo=HOLIDAY25' } }
 *     ]
 *   }
 * });
 */
declare const mergeStoreAndReturnPromos: ({ newPromos, apiKey, }: {
    newPromos: Partial<TPromoCodeRequest>;
    apiKey: string;
}) => TPromoCodeRequest;
/**
 * Formats unvalidated promo codes by determining their source and attributes
 * The function will assign `QueryParam` as the source if a `url` exists,
 * otherwise, it will assign `Manual` as the source
 *
 * @param {TPromoCodeAttribute[]} promoAttributes An array of promo attributes to be formatted
 * @returns {TUnvalidatedPromoRequest} - An array of UnvalidatedPromoCode objects,
 *    each with a source and attributes object
 */
declare const mapToUnvalidatedPromoCodes: (promoAttributes: TPromoCodeAttribute[]) => (Partial<{
    type?: "manual" | "url" | undefined;
} & {
    attributes?: {
        value?: string | undefined;
    } | undefined;
}> & Partial<{
    type?: "manual" | "url" | undefined;
} & {
    attributes?: {
        url?: string | undefined;
    } | undefined;
}>)[];
/**
 * @param {TPromoCodeAttribute[]} promoAttributes An array of promo attributes to be formatted
 * @param {string} apiKey API key for storage scoping
 * @returns {TPromoCodeRequest} An object containing both validated and unvalidated promo codes
 */
declare const formatStoreAndReturnPromoCodes: (promoAttributes: TPromoCodeAttribute[], apiKey: string) => TPromoCodeRequest;
/**
 * Extracts applicable promo codes from the cart object
 * This function retrieves discounts stored in the cart's `content.discounts` array,
 * filters out only the applicable promo codes, and returns them as an array of strings
 *
 * @param {TBeamCartLocalStorage} cart The cart object retrieved from local storage
 * @returns {string[]} An array of applicable promo codes
 */
declare const getPromoCodesFromCart: (cart: TBeamCartLocalStorage) => string[];
/**
 * Gets promo code exclusively from Shopify discount cookie
 * @returns {string | null} Single discount code or null if not found
 */
declare const getPromoCodeFromShopifyCookie: () => string | null;
/**
 * Safely parses a JSON string into an array of strings
 * If parsing fails or the input is not a valid JSON array, it returns an empty array
 *
 * @param {string | undefined | null} jsonString The JSON string to parse
 * @returns {string[]} The parsed array of strings or an empty array if parsing fails
 */
declare const parseJsonStringArray: (jsonString: string | undefined | null) => string[];
/**
 * Retrieves and sanitizes the current URL for storage, preserving only safe query parameters
 *
 * @returns {TPromoCodeAttribute} Returns an object with only the `url` property set
 */
declare const getSanitizedUrlForStorage: () => TPromoCodeAttribute | undefined;
declare const promoCodesAreEqual: (a: TPromoCodeRequest, b: TPromoCodeRequest) => boolean;
declare const isEmptyPromoData: (promos: {
    unvalidatedPromoCodes?: unknown[];
    validatedPromoCodes?: unknown[];
}) => boolean;

export { formatStoreAndReturnPromoCodes, getAllPromoCodesFromCookie, getPromoCodeFromShopifyCookie, getPromoCodesFromCart, getPromoCodesLocalStorage, getSanitizedUrlForStorage, isEmptyPromoData, mapToUnvalidatedPromoCodes, mergeStoreAndReturnPromos, parseJsonStringArray, promoCodesAreEqual, setPromoCodeInCookie, setPromoCodesInLocalStorage };
