UNPKG

@hoxhaolsi/cloud-sdk

Version:

LiquidCommerce Cloud SDK

788 lines (787 loc) 31.7 kB
import type { IApiResponseWithData, IApiResponseWithoutData, ILiquidCommerceConfig } from '../types'; import type { IAddressAutocompleteParams, IAddressAutocompleteResult, IAddressDetailsParams, IAddressDetailsResult } from './address.interface'; import type { ICart, ICartUpdateParams } from './cart.interface'; import type { IAvailabilityParams, IAvailabilityResponse, ICatalog, ICatalogParams } from './catalog.interface'; import type { ICheckoutCompleteParams, ICheckoutCompleteResponse, ICheckoutPrepareParams, ICheckoutPrepareResponse } from './checkout.interface'; import type { ILiquidPaymentConfig, ILiquidPaymentToken, IPaymentElementEventMap } from './payment.interface'; import type { BaseUser, IPurgeResponse, IUser, IUserAddress, IUserAddressParams, IUserPayment, IUserPaymentAddParams, IUserPaymentParams, IUserPaymentUpdateParams, IUserSessionParams } from './user.interface'; /** * Interface representing the LiquidCommerce client. * Provides access to methods related to addresses, catalogs, carts, and initialization. * * @interface */ export interface ILiquidCommerceClient { /** * Initializes the client by authenticating with the LiquidCommerce API. * Should be called before making any API requests. * * @return {Promise<void>} - Resolves when the client is successfully initialized. * @throws {Error} - Throws an error if initialization fails. */ init(): Promise<void>; /** * Provides methods for performing address autocompletion and retrieving address details. * See {@link IAddressMethod} for more details on the available methods. */ address: IAddressMethod; /** * Provides methods for checking item availability and performing catalog searches. * See {@link ICatalogMethod} for more details on the available methods. */ catalog: ICatalogMethod; /** * Provides methods for retrieving and updating cart data. * See {@link ICartMethod} for more details on the available methods. */ cart: ICartMethod; /** * Provides methods for managing user data and authentication. * See {@link IUserMethod} for more details on the available methods. */ user: IUserMethod; /** * Provides methods for processing payments. * See {@link IPaymentMethod} for more details on the available methods. */ payment: IPaymentMethod; /** * Provides methods for managing the checkout process. * See {@link ICheckoutMethod} for more details on the available methods. */ checkout: ICheckoutMethod; } /** * Type for the LiquidCommerceClient constructor. * Used to define the expected constructor signature. * * @type {new (apiKey: string, config: ILiquidCommerceConfig) => ILiquidCommerceClient} ILiquidCommerceClientConstructor */ export type ILiquidCommerceClientConstructor = new (apiKey: string, config: ILiquidCommerceConfig) => ILiquidCommerceClient; /** * Interface for methods related to address operations, including autocompletion and address details retrieval. * * @interface */ export interface IAddressMethod { /** * Performs address autocompletion based on the provided parameters. * * @param {Omit<IAddressAutocompleteParams, 'key'>} params - The parameters for the autocomplete request, excluding the API key. * @returns {Promise<IApiResponseWithData<IAddressAutocompleteResult[]>>} - A promise that resolves to an API response containing a list of autocomplete results. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const autocompleteResults = await liquidCommerce.address.autocomplete({ * input: '123 Main', * refresh: false * }); * * console.log('Autocomplete results:', autocompleteResults.data); * // This will log an array of IAddressAutocompleteResult objects * } catch (error) { * console.error('Address autocomplete failed:', error); * } * const liquidClient = await LiquidCommerce('your-api-key', { * env: LIQUID_COMMERCE_ENV.STAGE, * googlePlacesApiKey: 'your-google-places-api-key', * }); * * @throws {Error} - Throws an error if the autocompletion request fails or if authentication is unsuccessful. * * @see {@link IAddressAutocompleteParams} for the structure of the autocomplete request parameters. * @see {@link IAddressAutocompleteResult} for the structure of the autocomplete result data. */ autocomplete: (params: Omit<IAddressAutocompleteParams, 'key'>) => Promise<IApiResponseWithData<IAddressAutocompleteResult[]>>; /** * Retrieves address details based on the provided parameters. * * @param {Omit<IAddressDetailsParams, 'key'>} params - The parameters for the address details request, excluding the API key. * @returns {Promise<IApiResponseWithData<IAddressDetailsResult>>} - A promise that resolves to an API response containing address details. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const addressDetails = await liquidCommerce.address.details({ * id: 'ChIJd8BlQ2BZwokRjMKtTjMezRw', * refresh: true * }); * * console.log('Address details:', addressDetails.data); * // This will log an IAddressDetailsResult object * } catch (error) { * console.error('Address details retrieval failed:', error); * } * * @throws {Error} - Throws an error if the address details request fails or if authentication is unsuccessful. * * @see {@link IAddressDetailsParams} for the structure of the details request parameters. * @see {@link IAddressDetailsResult} for the structure of the address details result data. */ details: (params: Omit<IAddressDetailsParams, 'key'>) => Promise<IApiResponseWithData<IAddressDetailsResult>>; } /** * Interface for methods related to catalog operations, including item availability checks and catalog searches. * * @interface */ export interface ICatalogMethod { /** * Checks the availability of a specific item in the catalog. * * @param {IAvailabilityParams} params - The parameters for the availability request. * @return {Promise<IApiResponseWithoutData<IAvailabilityResponse>>} - A promise that resolves to an API response object containing availability information. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const availabilityResponse = await liquidCommerce.catalog.availability({ * upcs: ['123456789012', '210987654321'], * loc: { * address: { * one: '123 Main St', * city: 'New York', * state: 'NY', * zip: '10001' * } * }, * shouldShowOffHours: true, * refresh: false * }); * * console.log('Availability results:', availabilityResponse); * // This will log an IAvailabilityResponse object * } catch (error) { * console.error('Availability check failed:', error); * } * * @throws {Error} - Throws an error if the availability request fails. * * @see {@link IAvailabilityParams} for the structure of the availability request parameters. * @see {@link IAvailabilityResponse} for the structure of the availability response. */ availability: (params: IAvailabilityParams) => Promise<IApiResponseWithoutData<IAvailabilityResponse>>; /** * Searches the catalog based on the provided parameters. * * @param {ICatalogParams} params - The search parameters. * @return {Promise<IApiResponseWithoutData<ICatalog>>} - A promise that resolves to an API response object containing catalog search results. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const searchResults = await liquidCommerce.catalog.search({ * search: 'whiskey', * pageToken: '', * page: 1, * perPage: 20, * orderBy: ENUM_ORDER_BY.PRICE, * orderDirection: ENUM_NAVIGATION_ORDER_DIRECTION_TYPE.ASC, * filters: [ * { key: ENUM_FILTER_KEYS.CATEGORIES, values: [ENUM_SPIRITS.WHISKEY] }, * { key: ENUM_FILTER_KEYS.PRICE, values: { min: 20, max: 100 } } * ], * loc: { * address: { * one: '123 Main St', * city: 'New York', * state: 'NY', * zip: '10001' * } * } * }); * * console.log('Search results:', searchResults); * // This will log an ICatalog object * } catch (error) { * console.error('Catalog search failed:', error); * } * * @throws {Error} - Throws an error if the search request fails or if the parameters are invalid. * * @see {@link ICatalogParams} for the structure of the search request parameters. * @see {@link ICatalog} for the structure of the catalog data returned. */ search: (params: ICatalogParams) => Promise<IApiResponseWithoutData<ICatalog>>; } /** * Interface for methods related to cart operations, including retrieving and updating cart data. * * @interface */ export interface ICartMethod { /** * Retrieves a cart by its ID, or returns a new cart if no ID is provided. * * @param {string} [id] - The ID of the cart to retrieve. If not provided, a new cart is returned. * @return {Promise<IApiResponseWithoutData<ICart>>} - A promise that resolves to an API response containing the cart data. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * // Get an existing cart * const existingCart = await liquidCommerce.cart.get('existing_cart_id'); * console.log('Existing cart:', existingCart); * * // Get a new cart * const newCart = await liquidCommerce.cart.get(); * console.log('New cart:', newCart); * * // Both will log an ICart object * } catch (error) { * console.error('Cart retrieval failed:', error); * } * * @throws {Error} - Throws an error if the cart retrieval request fails or if authentication is unsuccessful. * * @see {@link ICart} for the structure of the cart data returned. */ get: (id?: string) => Promise<IApiResponseWithoutData<ICart>>; /** * Updates the cart with the provided parameters. * * @param {ICartUpdateParams} params - The parameters required for updating the cart. * @return {Promise<IApiResponseWithoutData<ICart>>} - A promise that resolves to an API response containing the updated cart data. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const updatedCart = await liquidCommerce.cart.update({ * id: 'existing_cart_id', * items: [ * { * id: 'item_id_1', * partNumber: '123456789012_retailer_id', * quantity: 2, * engravingLines: ['Happy Birthday', 'John!'], * fulfillmentId: 'fulfillment_id_1' * }, * { * id: 'item_id_2', * partNumber: '210987654321_retailer_id', * quantity: 1, * fulfillmentId: 'fulfillment_id_2' * } * ], * loc: { * address: { * one: '123 Main St', * city: 'New York', * state: 'NY', * zip: '10001' * } * }, * refresh: true * }); * * console.log('Updated cart:', updatedCart); * // This will log an ICart object * } catch (error) { * console.error('Cart update failed:', error); * } * * @throws {Error} - Throws an error if the cart update request fails or if authentication is unsuccessful. * * @see {@link ICartUpdateParams} for the structure of the update request parameters. * @see {@link ICart} for the structure of the cart data returned. */ update: (params: ICartUpdateParams) => Promise<IApiResponseWithoutData<ICart>>; } export interface IUserMethod { /** * Represents a session object used for user authentication and authorization. * * @param {IUserSessionParams} params - The parameters for creating a session. * @returns {Promise<IApiResponseWithData<IUser>>} A Promise that resolves to the API response with user data. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const userSession = await liquidCommerce.user.session({ * email: "user@example.com", * firstName: "John" * }); * * console.log('User session:', userSession?.data); * } catch (error) { * console.error('Failed to create/update user session:', error); * } * * @throws {Error} - Throws an error if the sessions request fails or if authentication is unsuccessful. * * @see {@link IUserSessionParams} for the structure of the session request parameters. * @see {@link IUser} for the structure of the user data returned. */ session: (params: IUserSessionParams) => Promise<IApiResponseWithData<IUser>>; /** * Represents a user object without creating a new session. * * @param {string} identifier - The parameters for fetching a user. * @returns {Promise<IApiResponseWithData<BaseUser>>} A Promise that resolves to the API response with user data. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * // Fetch by user ID * const userFetched = await liquidCommerce.user.fetch('c1fbd454-a540-4f42-86e9-f87a98bf1812'); * console.log('User fetch response:', userFetched?.data); * } catch (error) { * console.error('Failed to fetch user data:', error); * } * * @throws {Error} - Throws an error if the sessions request fails or if authentication is unsuccessful. * * @see {@link BaseUser} for the structure of the user data returned. */ fetch: (identifier: string) => Promise<IApiResponseWithData<BaseUser>>; /** * Purges a user's data from the system. * * @param {string} identifier - The user's ID or email. * @returns {Promise<IApiResponseWithData<IPurgeResponse>>} A promise that resolves to the purge response. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * // Purge by user ID * const purgeResponse1 = await liquidCommerce.user.purge('c1fbd454-a540-4f42-86e9-f87a98bf1812'); * console.log('User purge response:', purgeResponse1.data); * * // Purge by email * const purgeResponse2 = await liquidCommerce.user.purge('user@example.com'); * console.log('User purge response:', purgeResponse2.data); * } catch (error) { * console.error('Failed to purge user data:', error); * } * * @throws {Error} - Throws an error if the sessions request fails or if authentication is unsuccessful. * * @see {@link IPurgeResponse} for the structure of the user data returned. */ purge: (identifier: string) => Promise<IApiResponseWithData<IPurgeResponse>>; /** * Adds a new address for a user. * * @param {IUserAddressParams} params - The parameters for adding a new address. * @returns {Promise<IApiResponseWithData<IUserAddress>>} A promise that resolves to the API response with the added address data. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const newAddress = await liquidCommerce.user.addAddress({ * customerId: 'c1fbd454-a540-4f42-86e9-f87a98bf1812', * one: '100 Madison St', * city: 'New York', * state: 'NY', * zip: '10004', * type: 'shipping', * isDefault: true * }); * * console.log('Added address:', newAddress?.data); * } catch (error) { * console.error('Failed to add address:', error); * } * * @throws {Error} - Throws an error if the add address request fails or if authentication is unsuccessful. * * @see {@link IUserAddressParams} for the structure of the add address request parameters. * @see {@link IUserAddress} for the structure of the user's address data returned. */ addAddress: (params: IUserAddressParams) => Promise<IApiResponseWithData<IUserAddress>>; /** * Updates or creates a new address for a user. * * @param {IUserAddressParams} params - The parameters for updating or creating an address. * @returns {Promise<IApiResponseWithData<IUserAddress>>} A promise that resolves to the updated or created address. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const addressResponse = await liquidCommerce.user.updateAddress({ * customerId: 'c1fbd454-a540-4f42-86e9-f87a98bf1812', * one: '100 Madison St', * two: 'Apt 1707', * city: 'New York', * state: 'NY', * zip: '10004', * type: 'shipping', * isDefault: true * }); * * console.log('Updated/Created address:', addressResponse?.data); * } catch (error) { * console.error('Failed to update/create address:', error); * } * * @throws {Error} - Throws an error if the sessions request fails or if authentication is unsuccessful. * * @see {@link IUserAddressParams} for the structure of the address update request parameters. * @see {@link IUserAddress} for the structure of the user's address data returned. */ updateAddress: (params: IUserAddressParams) => Promise<IApiResponseWithData<IUserAddress>>; /** * Purges an address for a user. * * @param {string} addressId - The ID of the address to purge. * @returns {Promise<IApiResponseWithData<IPurgeResponse>>} A promise that resolves to the purge response. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const addressPurgeResponse = await liquidCommerce.user.purgeAddress('26af8958-0deb-44ec-b9fd-ca150b198e45'); * * console.log('Address purge response:', addressPurgeResponse?.data); * } catch (error) { * console.error('Failed to purge address:', error); * } * * @throws {Error} - Throws an error if the sessions request fails or if authentication is unsuccessful. * * @see {@link IPurgeResponse} for the structure of the user's purged data state. */ purgeAddress: (addressId: string) => Promise<IApiResponseWithData<IPurgeResponse>>; /** * Adds a new payment method for a user. * * @param {IUserPaymentAddParams} params - The parameters for adding a new payment method. * @returns {Promise<IApiResponseWithData<IUserPayment>>} A promise that resolves to the API response with the added payment method data. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const newPayment = await liquidCommerce.user.addPayment({ * customerId: 'c1fbd454-a540-4f42-86e9-f87a98bf1812', * paymentMethodId: 'pm_1234567890abcdef', * isDefault: true * }); * * console.log('Added payment method:', newPayment?.data); * } catch (error) { * console.error('Failed to add payment method:', error); * } * * @throws {Error} - Throws an error if the add payment request fails or if authentication is unsuccessful. * * @see {@link IUserPaymentParams} for the structure of the add payment request parameters. * @see {@link IUserPayment} for the structure of the user's payment method data returned. */ addPayment: (params: IUserPaymentAddParams) => Promise<IApiResponseWithData<IUserPayment>>; /** * Updates a payment method for a user. * * @param {IUserPaymentUpdateParams} params - The parameters for updating a payment method. * @returns {Promise<IApiResponseWithData<IUserPayment>>} A promise that resolves to the API response with the updated payment method data. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const updatedPayment = await liquidCommerce.user.updatePayment({ * customerId: 'c1fbd454-a540-4f42-86e9-f87a98bf1812', * paymentMethodId: 'pm_1234567890abcdef', * isDefault: true * }); * * console.log('Updated payment method:', updatedPayment?.data); * } catch (error) { * console.error('Failed to update payment method:', error); * } * * @throws {Error} - Throws an error if the update payment request fails or if authentication is unsuccessful. * * @see {@link IUserPaymentParams} for the structure of the update payment request parameters. * @see {@link IUserPayment} for the structure of the user's payment method data returned. */ updatePayment: (params: IUserPaymentParams | IUserPaymentUpdateParams) => Promise<IApiResponseWithData<boolean>>; /** * Purges a payment method for a user. * * @param {string} customerId - The ID of the customer. * @param {string} paymentId - The ID of the payment method to purge. * @returns {Promise<IApiResponseWithData<IPurgeResponse>>} A promise that resolves to the purge response. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const paymentPurgeResponse = await liquidCommerce.user.purgePayment( * 'c1fbd454-a540-4f42-86e9-f87a98bf1812', * 'pm_1234567890abcdef' * ); * * console.log('Payment method purge response:', paymentPurgeResponse?.data); * } catch (error) { * console.error('Failed to purge payment method:', error); * } * * @throws {Error} - Throws an error if the purge payment request fails or if authentication is unsuccessful. * * @see {@link IPurgeResponse} for the structure of the purge response data. */ purgePayment: (customerId: string, paymentId: string) => Promise<IApiResponseWithData<IPurgeResponse>>; } export interface IPaymentMethod { /** * Mounts the payment element into the DOM. * * @param {ILiquidPaymentConfig} config - Configuration for the payment element. * @returns {Promise<void>} A promise that resolves when the element is mounted. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * await liquidCommerce.payment.mount({ * clientSecret: 'client_secret_from_server', * elementId: 'payment-element-container', * appearance: { theme: 'night' }, * elementOptions: { layout: 'tabs' } * }); * console.log('Payment element mounted'); * } catch (error) { * console.error('Failed to mount payment element:', error); * } * * @throws {Error} - Throws an error if injection fails. */ mount(config: ILiquidPaymentConfig): Promise<void>; /** * Generates a payment token for the current payment information. * * @returns {Promise<ILiquidPaymentToken>} A promise that resolves to the payment token or an error. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const token = await liquidCommerce.payment.generateToken(); * if ('error' in token) { * console.error('Failed to generate payment token:', token.error.message); * } else { * console.log('Generated payment token:', token); * } * } catch (error) { * console.error('An unexpected error occurred:', error); * } * * @throws {Error} - Throws an error if token generation fails. */ generateToken(): Promise<ILiquidPaymentToken>; /** * Subscribes to a specific event type on the payment element. * * @param {K} eventType - The type of event to subscribe to. * @param {function} handler - The function to be called when the event occurs. * @returns {void} * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * liquidCommerce.payment.subscribe('change', (event) => { * console.log('Payment element changed:', event); * }); * * liquidCommerce.payment.subscribe('ready', () => { * console.log('Payment element is ready'); * }); * } catch (error) { * console.error('Failed to subscribe to payment element event:', error); * } * * @throws {Error} - Throws an error if the payment element has not been initialized. */ subscribe<K extends keyof IPaymentElementEventMap>(eventType: K, handler: (event: IPaymentElementEventMap[K]) => void): void; /** * Unsubscribes from a specific event type on the payment element. * * @param {K} eventType - The type of event to unsubscribe from. * @param {function} [handler] - The function to be removed. If not provided, all handlers for the event type will be removed. * @returns {void} * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * const changeHandler = (event) => { * console.log('Payment element changed:', event); * }; * * try { * // Subscribe to the event * liquidCommerce.payment.subscribe('change', changeHandler); * * // Later, unsubscribe from the event * liquidCommerce.payment.unsubscribe('change', changeHandler); * * // Or, remove all handlers for the 'change' event * liquidCommerce.payment.unsubscribe('change'); * } catch (error) { * console.error('Failed to unsubscribe from payment element event:', error); * } * * @throws {Error} - Throws an error if the payment element has not been initialized. */ unsubscribe<K extends keyof IPaymentElementEventMap>(eventType: K, handler?: (event: IPaymentElementEventMap[K]) => void): void; /** * Collapses the payment element if it has been initialized. * * @returns {void} * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * liquidCommerce.payment.collapse(); * console.log('Payment element collapsed'); * } catch (error) { * console.error('Failed to collapse payment element:', error); * } * * @throws {Error} - Throws an error if the payment element has not been initialized. */ collapse(): void; /** * Unmounts the payment element from the DOM. * * @returns {void} * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * liquidCommerce.payment.unmount(); * console.log('Payment element unmounted'); * } catch (error) { * console.error('Failed to unmount payment element:', error); * } * * @throws {Error} - Throws an error if the payment element has not been initialized. */ unmount(): void; /** * Destroys the payment element if it has been initialized. * * @returns {void} * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * liquidCommerce.payment.destroy(); * console.log('Payment element destroyed'); * } catch (error) { * console.error('Failed to destroy payment element:', error); * } * * @throws {Error} - Throws an error if the payment element has not been initialized. */ destroy(): void; } export interface ICheckoutMethod { /** * Prepares a checkout based on the provided parameters. * * @param {ICheckoutPrepareParams} params - The parameters for preparing the checkout. * @returns {Promise<IApiResponseWithoutData<ICheckoutPrepareResponse>>} A promise that resolves to an API response containing the prepared checkout data. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const preparedCheckout = await liquidCommerce.checkout.prepare({ * cartId: "65df5c***********512f", // create a new cart and add the cart id * recipient: { * firstName: "Jack", * lastName: "Smith", * email: "sample.jack@gmail.com", * phone: "2129983315", * birthDate: "11-22-1998", * hasAgeVerify: false * }, * billingAddress: { * firstName: "Jenna", * lastName: "Smith", * email: "sample.jenna@gmail.com", * phone: "2129983315", * one: "251 Mercer St", * two: "", * city: "New York", * state: "NY", * zip: "10012" * }, * hasSubstitutionPolicy: true, * isGift: false, * billingSameAsShipping: false, * giftOptions: { * message: "", * recipient: { * name: "", * phone: "", * email: "" * } * }, * marketingPreferences: { * canEmail: true, * canSms: true * }, * deliveryTips: [ * { * fulfillmentId: "6570c3e********1910c105", * tip: 2500 * } * ], * }); * * console.log('Prepared checkout:', preparedCheckout); * } catch (error) { * console.error('Checkout preparation failed:', error); * } * * @throws {Error} Throws an error if the checkout preparation request fails or if authentication is unsuccessful. * * @see {@link ICheckoutPrepareParams} for the structure of the prepare request parameters. * @see {@link ICheckoutPrepareResponse} for the structure of the prepared checkout data returned. */ prepare: (params: ICheckoutPrepareParams) => Promise<IApiResponseWithoutData<ICheckoutPrepareResponse>>; /** * Completes a checkout process with the provided token and payment information. * * @param {ICheckoutCompleteParams} params - The parameters for completing the checkout. * @returns {Promise<IApiResponseWithoutData<ICheckoutCompleteResponse>>} A promise that resolves to the completed checkout data. * * @example * const liquidCommerce = await LiquidCommerce(apiKey, config); * * try { * const completedCheckout = await liquidCommerce.checkout.complete({ * token: 'checkout_token_123', * payment: 'payment_id_456' * }); * console.log('Completed checkout:', completedCheckout); * } catch (error) { * console.error('Checkout completion failed:', error); * } * * @throws {Error} If the checkout completion request fails. * * @see {@link ICheckoutCompleteParams} for the structure of the complete request parameters. * @see {@link ICheckoutCompleteResponse} for the structure of the complete checkout data returned. * */ complete: (params: ICheckoutCompleteParams) => Promise<IApiResponseWithoutData<ICheckoutCompleteResponse>>; }