import { Event, Store } from "effector"; import { Validator } from "../effector/validator"; import { Stripe, StripeCardElement, StripeCardNumberElement } from "@stripe/stripe-js"; import { GraphQLOpts, RequestResponseError } from "../request"; import { CustomerBalanceFragment, CustomerFragment, CustomerOrderBriefFragment, CustomerOrderFullFragment, CustomerPaymentSourceFragment, IPAndUAInfoFragment, CustomerFavoriteFragment, StorefrontCustomerFavoriteModify, CustomerOAuthProviderKind, StorefrontCustomerFavoriteCreate, CustomerBalanceHistoryFragment, CustomerReturnBriefFragment, CustomerReturnFullFragment, ReturnReasonType, CustomerOrderFulfillmentFragment, CustomerReturnPolicyFragment, ReturnReasonFragment, CartVariantFragment, CustomerSubscriptionBriefFragment, CustomerSubscriptionFullFragment, SubscriptionParam } from "../graphql/types"; import { InvalidInputField } from "../mapInvalidInput"; import { Dict, ListItem } from "../commonTypes"; import { StripeCVCError, StripeExpiryError, StripeNumberError } from "../stripeError"; export declare type MessageType = "favorite_added" | "favorite_deleted" | "favorite_modified" | "oauth2_connected" | "oauth2_disconnected"; export interface CustomerInfo { customer: CustomerFragment; favorites: { id: string; variantID: string; inventoryNotification: boolean; priceNotification: boolean; }[]; } export declare function createVariantMap(order: CustomerOrderFullFragment): Dict; declare type CommonPageParam = { action: "push" | "pop" | "push_redirect" | "pop_redirect"; }; declare type OrderPageParam = CommonPageParam & { kind: "order"; orderID: string; }; declare type SubscriptionPageParam = CommonPageParam & { kind: "subscription"; subscriptionID: string; }; declare type ReturnPageParam = CommonPageParam & { kind: "return"; returnID: string; }; declare type CreateReturnPageParam = CommonPageParam & { kind: "create_return"; orderID: string; }; declare type ConfirmPageParam = CommonPageParam & { kind: "confirm"; token: string; }; declare type SignupPageParam = CommonPageParam & { kind: "signup"; }; declare type SigninPageParam = CommonPageParam & { kind: "signin"; }; declare type ResetPasswordPageParam = CommonPageParam & { kind: "reset_password"; }; declare type ProfilePageParam = CommonPageParam & { kind: "profile"; }; declare type PaymentMethodsPageParam = CommonPageParam & { kind: "payment_methods"; }; declare type AddressesPageParam = CommonPageParam & { kind: "addresses"; }; declare type FavoritesPageParam = CommonPageParam & { kind: "favorites"; }; declare type OrdersPageParam = CommonPageParam & { kind: "orders"; }; declare type SubscriptionsPageParam = CommonPageParam & { kind: "subscriptions"; }; declare type ReturnsPageParam = CommonPageParam & { kind: "returns"; }; declare type StoreCreditPageParam = CommonPageParam & { kind: "store_credit"; }; export declare type PageParam = SignupPageParam | SigninPageParam | ResetPasswordPageParam | ProfilePageParam | PaymentMethodsPageParam | AddressesPageParam | FavoritesPageParam | OrdersPageParam | SubscriptionsPageParam | ReturnsPageParam | StoreCreditPageParam | ConfirmPageParam | CreateReturnPageParam | OrderPageParam | SubscriptionPageParam | ReturnPageParam; export declare function isSamePageParam(a: PageParam, b: PageParam): boolean; export declare type ParamExt

= { param: P; previousPageKind: PageParam["kind"] | null; }; export interface CreateReturnItemMutable { selected: boolean; quantity: number; reason: ReturnReasonType | null; } export interface CreateReturnItem extends CreateReturnItemMutable { readonly maxQuantity: number; } export interface OAuth2Request { kind: CustomerOAuthProviderKind; randomToken: string; } export declare type OAuth2Response = { kind: "success"; code: string; } | { kind: "success_oauth1"; token: string; verifier: string; } | { kind: "failure"; }; export interface CustomerConfig { /** Your shop id. */ readonly shopID: string; /** Stripe library instance */ readonly stripePromise?: Promise; /** These graphql options are applied to all "request" api calls customer profile module does. */ readonly opts?: Readonly>; /** A store that represents current auth state. You should pass it in to keep auth state in-sync. */ readonly jwt: Store; /** Current locale. Module will react to its changes. */ readonly locale: Store; /** Currently set global currency. Module might react to its changes if it's provided. */ readonly currency?: Store; /** Shop's default currency. */ readonly shopCurrency: string; /** A list of currently available customer oauth2 providers and a request hook */ readonly oauth2?: { readonly request: (request: OAuth2Request) => [Promise, () => void]; readonly providers: CustomerOAuthProviderKind[]; }; } export declare type CustomerInit = { kind: "goto"; dest: PageParam; } | { kind: "idle"; } | { kind: "default"; }; export declare function createCustomer(config: CustomerConfig, init: CustomerInit): { message: Event; logout: Event; currentPage: Store; customerLoggedIn: Store; customerInfo: Store; goTo: Event; unexpectedError: Event; reloadPage: Event; pages: { signin: { init: { event: Event; load: Event>; loaded: Event; pending: Store; }; form: { init: Event>; reset: Event; submit: Event; submitted: Event<{ email: string; password: string; }>; valid: Store; propagateErrors: Event>; propagateInitialValues: Event>; errorPropagationFailed: Event; } & { email: import("../effector/form").StringField<[Validator<"invalid_non_empty">, Validator<"invalid_email">, Validator<"max_length_exceeded">], string>; password: import("../effector/form").StringField<[Validator<"invalid_non_empty">], string>; } & import("../effector/form").CustomFormError<"unauthorized" | "unauthorized_oauth" | null>; oauth2Click: Event; somethingIsPending: Store; }; signup: { init: { event: Event; load: Event>; loaded: Event; pending: Store; }; form: import("../effector/form").Form<{ name: import("../effector/form").StringField<[Validator<"invalid_non_empty">, Validator<"max_length_exceeded">], string>; email: import("../effector/form").StringField<[Validator<"invalid_non_empty">, Validator<"invalid_email">, Validator<"max_length_exceeded">], string>; password: import("../effector/form").StringField<[Validator<"invalid_non_empty">], string>; accepts_marketing: import("../effector/form").BooleanField; }>; somethingIsPending: Store; }; resetPassword: { init: { event: Event; load: Event>; loaded: Event; pending: Store; }; currentStep: Store<{ kind: "step1"; form: { init: Event>; reset: Event; submit: Event; submitted: Event<{ email: string; }>; valid: Store; propagateErrors: Event>; propagateInitialValues: Event>; errorPropagationFailed: Event; } & { email: import("../effector/form").StringField<[Validator<"invalid_non_empty">, Validator<"invalid_email">, Validator<"max_length_exceeded">], string>; } & import("../effector/form").CustomFormError<"try_again_later" | null>; } | { kind: "step2"; form: { init: Event>; reset: Event; submit: Event; submitted: Event<{ code: string; }>; valid: Store; propagateErrors: Event>; propagateInitialValues: Event>; errorPropagationFailed: Event; } & { code: import("../effector/form").StringField<[Validator<"invalid_non_empty">], string>; } & import("../effector/form").CustomFormError<"not_found" | null>; } | { kind: "step3"; form: import("../effector/form").Form<{ password: import("../effector/form").StringField<[Validator<"invalid_non_empty">], string>; }>; }>; somethingIsPending: Store; }; addresses: { init: { event: Event<{ availableCountries: ListItem[]; customer: CustomerFragment; geoCountryCode: string; geoProvinceCode: string; }>; load: Event>; loaded: Event; pending: Store; }; form: import("../effector/form").Form<{ id: import("../effector/form").StringField<[], string>; name: import("../effector/form").StringField<[Validator<"invalid_non_empty">, Validator<"max_length_exceeded">], string>; address1: import("../effector/form").StringField<[Validator<"invalid_non_empty">, Validator<"max_length_exceeded">], string>; address2: import("../effector/form").StringField<[Validator<"max_length_exceeded">], string>; city: import("../effector/form").StringField<[Validator<"invalid_non_empty">, Validator<"max_length_exceeded">], string>; zip: import("../effector/form").StringField<[Validator<"invalid_non_empty">, Validator<"max_length_exceeded">], string>; country: import("../effector/form").StringField<[Validator<"invalid_non_empty">], string>; province: import("../effector/form").StringField<[Validator<"invalid_non_empty">], string>; default_shipping: import("../effector/form").BooleanField; default_billing: import("../effector/form").BooleanField; }>; showFormFor: Event; toggleFormVisibility: Event; isFormVisible: Store; addressEditIndex: Store; pageData: Store<{ availableCountries: ListItem[]; customer: CustomerFragment; geoCountryCode: string; geoProvinceCode: string; } | null>; availableProvinces: Store; deleteAddress: Event; makeDefault: Event; somethingIsPending: Store; }; favorites: { init: { event: Event<{ favorites: CustomerFavoriteFragment[]; }>; load: Event>; loaded: Event; pending: Store; }; favorites: Store; addFavorite: Event; addFavoriteEx: Event; modifyFavorite: Event<[string, StorefrontCustomerFavoriteModify]>; deleteFavorite: Event; somethingIsPending: Store; }; orders: { init: { event: Event<{ orders: CustomerOrderBriefFragment[]; lastKey: string; }>; load: Event>; loaded: Event; pending: Store; }; orders: Store; loadMore: Event; somethingIsPending: Store; }; subscriptions: { init: { event: Event<{ subscriptions: CustomerSubscriptionBriefFragment[]; lastKey: string; }>; load: Event>; loaded: Event; pending: Store; }; subscriptions: Store; loadMore: Event; somethingIsPending: Store; }; returns: { init: { event: Event<{ returns: CustomerReturnBriefFragment[]; lastKey: string; }>; load: Event>; loaded: Event; pending: Store; }; returns: Store; loadMore: Event; somethingIsPending: Store; }; order: { init: { event: Event<{ order: CustomerOrderFullFragment; }>; load: Event>; loaded: Event; pending: Store; }; order: Store; cancelOrder: Event; canCancelOrder: Store; somethingIsPending: Store; }; subscription: { init: { event: Event<{ customer: CustomerFragment; paymentMethods: CustomerPaymentSourceFragment[]; subscription: CustomerSubscriptionFullFragment; }>; load: Event>; loaded: Event; pending: Store; }; form: import("../effector/form").Form<{ billing_address: import("../effector/form").StringField<[], SubscriptionParam>; billing_address_id: import("../effector/form").StringField<[], string>; shipping_address: import("../effector/form").StringField<[], SubscriptionParam>; shipping_address_id: import("../effector/form").StringField<[], string>; payment_source: import("../effector/form").StringField<[], SubscriptionParam>; payment_source_id: import("../effector/form").StringField<[], string>; }>; subscription: Store; customer: Store; paymentMethods: Store; cancel: Event; pause: Event; resume: Event; skipNext: Event; somethingIsPending: Store; setBillingAddressValueAndID: Event<[SubscriptionParam, string]>; setShippingAddressValueAndID: Event<[SubscriptionParam, string]>; setPaymentSourceValueAndID: Event<[SubscriptionParam, string]>; }; return: { init: { event: Event<{ reasons: ReturnReasonFragment[]; ret: CustomerReturnFullFragment; }>; load: Event>; loaded: Event; pending: Store; }; data: Store<{ ret: CustomerReturnFullFragment; reasons: ReturnReasonFragment[]; } | null>; somethingIsPending: Store; }; createReturn: { init: { event: Event<{ fulfillments: CustomerOrderFulfillmentFragment[]; order: CustomerOrderFullFragment; policy: CustomerReturnPolicyFragment | null; reasons: ReturnReasonFragment[]; }>; load: Event>; loaded: Event; pending: Store; }; ret: Store; info: Store<{ fulfillments: CustomerOrderFulfillmentFragment[]; order: CustomerOrderFullFragment; policy: CustomerReturnPolicyFragment | null; reasons: ReturnReasonFragment[]; } | null>; items: Store; updateItem: Event<[number, number, Partial]>; setRefundToCustomerBalance: Event; refundToCustomerBalance: Store; setShippingOptionIndex: Event; shippingOptionIndex: Store; submit: Event; canSubmit: Store; somethingIsPending: Store; }; storeCredit: { customerBalance: Store; somethingIsPending: Store; redeemedGiftCard: Event; setCurrency: Event; currency: Store; loadMore: Event; historyCurrency: Store; history: Store; toggleFormVisibility: Event; isFormVisible: Store; init: { event: Event<{ customerBalance: CustomerBalanceFragment; history: { items: CustomerBalanceHistoryFragment[]; last_key: string; }; currency: string; resetSuccess: boolean; }>; load: Event>; loaded: Event; pending: Store; }; form: { init: Event>; reset: Event; submit: Event; submitted: Event<{ gift_card_code: string; }>; valid: Store; propagateErrors: Event>; propagateInitialValues: Event>; errorPropagationFailed: Event; } & { gift_card_code: import("../effector/form").StringField<[Validator<"invalid_non_empty">], string>; } & import("../effector/form").CustomFormError<"not_found" | null>; }; profile: { init: { event: Event<{ customer: CustomerFragment; }>; load: Event>; loaded: Event; pending: Store; }; form: import("../effector/form").Form<{ name: import("../effector/form").StringField<[Validator<"invalid_non_empty">, Validator<"max_length_exceeded">], string>; display_name: import("../effector/form").StringField<[Validator<"max_length_exceeded">], string>; mobile: import("../effector/form").StringField<[], string>; mobile_notifications: import("../effector/form").BooleanField; accepts_marketing: import("../effector/form").BooleanField; }>; somethingIsPending: Store; }; paymentMethods: { pageData: Store<{ availableCountries: ListItem[]; customer: CustomerFragment; paymentMethods: CustomerPaymentSourceFragment[]; geoip: IPAndUAInfoFragment; } | null>; availableProvinces: Store; somethingIsPending: Store; setStripeElement: Event; stripeNumber: { setAPIError: Event; setInvalid: Event<"unknown" | StripeNumberError | null>; setComplete: Event; touched: Store; complete: Store; invalid: Store<"unknown" | StripeNumberError | null>; apiError: Store; error: Store<"unknown" | StripeNumberError | "incomplete" | null>; }; stripeExpiry: { setAPIError: Event; setInvalid: Event<"unknown" | StripeExpiryError | null>; setComplete: Event; touched: Store; complete: Store; invalid: Store<"unknown" | StripeExpiryError | null>; apiError: Store; error: Store<"unknown" | StripeExpiryError | "incomplete" | null>; }; stripeCVC: { setAPIError: Event; setInvalid: Event<"unknown" | StripeCVCError | null>; setComplete: Event; touched: Store; complete: Store; invalid: Store<"unknown" | StripeCVCError | null>; apiError: Store; error: Store<"unknown" | StripeCVCError | "incomplete" | null>; }; deletePaymentMethod: Event; toggleFormVisibility: Event; isFormVisible: Store; init: { event: Event<{ availableCountries: ListItem[]; customer: CustomerFragment; paymentMethods: CustomerPaymentSourceFragment[]; geoip: IPAndUAInfoFragment; }>; load: Event>; loaded: Event; pending: Store; }; form: import("../effector/form").Form<{ name: import("../effector/form").StringField<[], string>; address: import("../effector/form").StringField<[], string>; city: import("../effector/form").StringField<[], string>; zip: import("../effector/form").StringField<[], string>; country: import("../effector/form").StringField<[], string>; province: import("../effector/form").StringField<[], string>; as_default: import("../effector/form").BooleanField; }>; }; }; somethingPending: Store; oauth2: { cancel: Event; pending: Store; providers: Store; connect: Event; disconnect: Event; }; }; export declare type Customer = ReturnType; export {};