diff --git a/.env.template b/.env.template index a5885494e..cf58e89c7 100644 --- a/.env.template +++ b/.env.template @@ -1,4 +1,4 @@ -# Available providers: local, bigcommerce, shopify, swell, saleor +# Available providers: local, bigcommerce, shopify, swell, saleor, spree, ordercloud, vendure, kibocommerce, commercejs COMMERCE_PROVIDER= BIGCOMMERCE_STOREFRONT_API_URL= @@ -27,3 +27,13 @@ NEXT_PUBLIC_VENDURE_LOCAL_URL= ORDERCLOUD_CLIENT_ID= ORDERCLOUD_CLIENT_SECRET= STRIPE_SECRET= + +KIBO_API_URL= +KIBO_CLIENT_ID= +KIBO_SHARED_SECRET= +KIBO_CART_COOKIE= +KIBO_CUSTOMER_COOKIE= +KIBO_API_HOST= + +NEXT_PUBLIC_COMMERCEJS_PUBLIC_KEY= +NEXT_PUBLIC_COMMERCEJS_DEPLOYMENT_URL= diff --git a/.vscode/extensions.json b/.vscode/extensions.json index c83e26348..3af4e2d9b 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,3 +1,3 @@ { - "recommendations": ["esbenp.prettier-vscode"] + "recommendations": ["esbenp.prettier-vscode", "csstools.postcss", "bradlc.vscode-tailwindcss"] } diff --git a/README.md b/README.md index 2eeea375b..1de0cdead 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,10 @@ Demo live at: [demo.vercel.store](https://demo.vercel.store/) - BigCommerce Demo: https://bigcommerce.vercel.store/ - Vendure Demo: https://vendure.vercel.store - Saleor Demo: https://saleor.vercel.store/ +- Ordercloud Demo: https://ordercloud.vercel.store/ +- Spree Demo: https://spree.vercel.store/ +- Kibo Commerce Demo: https://kibocommerce.vercel.store/ +- Commerce.js Demo: https://commercejs.vercel.store/ ## Features @@ -27,7 +31,7 @@ Demo live at: [demo.vercel.store](https://demo.vercel.store/) ## Integrations -Next.js Commerce integrates out-of-the-box with BigCommerce, Shopify, Swell, Saleor and Vendure. We plan to support all major ecommerce backends. +Next.js Commerce integrates out-of-the-box with BigCommerce, Shopify, Swell, Saleor, Vendure, Spree and Commerce.js. We plan to support all major ecommerce backends. ## Considerations @@ -94,6 +98,8 @@ For example: Turning `cart` off will disable Cart capabilities. ### How to create a new provider +🔔 New providers are on hold [until we have a new API for commerce](https://github.com/vercel/commerce/pull/252) 🔔 + Follow our docs for [Adding a new Commerce Provider](framework/commerce/new-provider.md). If you succeeded building a provider, submit a PR with a valid demo and we'll review it asap. @@ -104,11 +110,10 @@ Our commitment to Open Source can be found [here](https://vercel.com/oss). 1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device. 2. Create a new branch `git checkout -b MY_BRANCH_NAME` -3. Install yarn: `npm install -g yarn` -4. Install the dependencies: `yarn` -5. Duplicate `.env.template` and rename it to `.env.local` -6. Add proper store values to `.env.local` -7. Run `yarn dev` to build and watch for code changes +3. Install the dependencies: `npm i` +4. Duplicate `.env.template` and rename it to `.env.local` +5. Add proper store values to `.env.local` +6. Run `npm run dev` to build and watch for code changes ## Work in progress diff --git a/components/cart/CartItem/CartItem.tsx b/components/cart/CartItem/CartItem.tsx index 334761b54..a9d143a1c 100644 --- a/components/cart/CartItem/CartItem.tsx +++ b/components/cart/CartItem/CartItem.tsx @@ -3,7 +3,6 @@ import cn from 'classnames' import Image from 'next/image' import Link from 'next/link' import s from './CartItem.module.css' -import { Trash, Plus, Minus, Cross } from '@components/icons' import { useUI } from '@components/ui/context' import type { LineItem } from '@commerce/types/cart' import usePrice from '@framework/product/use-price' @@ -18,6 +17,8 @@ type ItemOption = { valueId: number } +const placeholderImg = '/product-img-placeholder.svg' + const CartItem = ({ item, variant = 'default', @@ -91,8 +92,8 @@ const CartItem = ({ className={s.productImage} width={150} height={150} - src={item.variant.image!.url} - alt={item.variant.image!.altText} + src={item.variant.image?.url || placeholderImg} + alt={item.variant.image?.altText || "Product Image"} unoptimized /> </a> diff --git a/components/checkout/CheckoutSidebarView/CheckoutSidebarView.tsx b/components/checkout/CheckoutSidebarView/CheckoutSidebarView.tsx index 9d8661bfa..7bd88fedc 100644 --- a/components/checkout/CheckoutSidebarView/CheckoutSidebarView.tsx +++ b/components/checkout/CheckoutSidebarView/CheckoutSidebarView.tsx @@ -1,5 +1,5 @@ import Link from 'next/link' -import { FC } from 'react' +import { FC, useState } from 'react' import CartItem from '@components/cart/CartItem' import { Button, Text } from '@components/ui' import { useUI } from '@components/ui/context' @@ -10,18 +10,29 @@ import useCheckout from '@framework/checkout/use-checkout' import ShippingWidget from '../ShippingWidget' import PaymentWidget from '../PaymentWidget' import s from './CheckoutSidebarView.module.css' +import { useCheckoutContext } from '../context' const CheckoutSidebarView: FC = () => { + const [loadingSubmit, setLoadingSubmit] = useState(false) const { setSidebarView, closeSidebar } = useUI() - const { data: cartData } = useCart() + const { data: cartData, revalidate: refreshCart } = useCart() const { data: checkoutData, submit: onCheckout } = useCheckout() + const { clearCheckoutFields } = useCheckoutContext() async function handleSubmit(event: React.ChangeEvent<HTMLFormElement>) { - event.preventDefault() + try { + setLoadingSubmit(true) + event.preventDefault() - await onCheckout() - - closeSidebar() + await onCheckout() + clearCheckoutFields() + setLoadingSubmit(false) + refreshCart() + closeSidebar() + } catch { + // TODO - handle error UI here. + setLoadingSubmit(false) + } } const { price: subTotal } = usePrice( @@ -93,11 +104,12 @@ const CheckoutSidebarView: FC = () => { <span>{total}</span> </div> <div> - {/* Once data is correcly filled */} + {/* Once data is correctly filled */} <Button type="submit" width="100%" disabled={!checkoutData?.hasPayment || !checkoutData?.hasShipping} + loading={loadingSubmit} > Confirm Purchase </Button> diff --git a/components/checkout/ShippingView/ShippingView.tsx b/components/checkout/ShippingView/ShippingView.tsx index ed82bc8a2..571730ed5 100644 --- a/components/checkout/ShippingView/ShippingView.tsx +++ b/components/checkout/ShippingView/ShippingView.tsx @@ -22,7 +22,7 @@ interface Form extends HTMLFormElement { country: HTMLSelectElement } -const PaymentMethodView: FC = () => { +const ShippingView: FC = () => { const { setSidebarView } = useUI() const addAddress = useAddAddress() @@ -115,4 +115,4 @@ const PaymentMethodView: FC = () => { ) } -export default PaymentMethodView +export default ShippingView diff --git a/components/checkout/context.tsx b/components/checkout/context.tsx new file mode 100644 index 000000000..b53b45a5d --- /dev/null +++ b/components/checkout/context.tsx @@ -0,0 +1,111 @@ +import React, { + FC, + useCallback, + useMemo, + useReducer, + useContext, + createContext, +} from 'react' +import type { CardFields } from '@commerce/types/customer/card' +import type { AddressFields } from '@commerce/types/customer/address' + +export type State = { + cardFields: CardFields + addressFields: AddressFields +} + +type CheckoutContextType = State & { + setCardFields: (cardFields: CardFields) => void + setAddressFields: (addressFields: AddressFields) => void + clearCheckoutFields: () => void +} + +type Action = + | { + type: 'SET_CARD_FIELDS' + card: CardFields + } + | { + type: 'SET_ADDRESS_FIELDS' + address: AddressFields + } + | { + type: 'CLEAR_CHECKOUT_FIELDS' + } + +const initialState: State = { + cardFields: {} as CardFields, + addressFields: {} as AddressFields, +} + +export const CheckoutContext = createContext<State | any>(initialState) + +CheckoutContext.displayName = 'CheckoutContext' + +const checkoutReducer = (state: State, action: Action): State => { + switch (action.type) { + case 'SET_CARD_FIELDS': + return { + ...state, + cardFields: action.card, + } + case 'SET_ADDRESS_FIELDS': + return { + ...state, + addressFields: action.address, + } + case 'CLEAR_CHECKOUT_FIELDS': + return { + ...state, + cardFields: initialState.cardFields, + addressFields: initialState.addressFields, + } + default: + return state + } +} + +export const CheckoutProvider: FC = (props) => { + const [state, dispatch] = useReducer(checkoutReducer, initialState) + + const setCardFields = useCallback( + (card: CardFields) => dispatch({ type: 'SET_CARD_FIELDS', card }), + [dispatch] + ) + + const setAddressFields = useCallback( + (address: AddressFields) => + dispatch({ type: 'SET_ADDRESS_FIELDS', address }), + [dispatch] + ) + + const clearCheckoutFields = useCallback( + () => dispatch({ type: 'CLEAR_CHECKOUT_FIELDS' }), + [dispatch] + ) + + const cardFields = useMemo(() => state.cardFields, [state.cardFields]) + + const addressFields = useMemo(() => state.addressFields, [state.addressFields]) + + const value = useMemo( + () => ({ + cardFields, + addressFields, + setCardFields, + setAddressFields, + clearCheckoutFields, + }), + [cardFields, addressFields, setCardFields, setAddressFields, clearCheckoutFields] + ) + + return <CheckoutContext.Provider value={value} {...props} /> +} + +export const useCheckoutContext = () => { + const context = useContext<CheckoutContextType>(CheckoutContext) + if (context === undefined) { + throw new Error(`useCheckoutContext must be used within a CheckoutProvider`) + } + return context +} diff --git a/components/common/Layout/Layout.tsx b/components/common/Layout/Layout.tsx index 6266443e7..81861ee13 100644 --- a/components/common/Layout/Layout.tsx +++ b/components/common/Layout/Layout.tsx @@ -10,9 +10,11 @@ import type { Category } from '@commerce/types/site' import ShippingView from '@components/checkout/ShippingView' import CartSidebarView from '@components/cart/CartSidebarView' import { useAcceptCookies } from '@lib/hooks/useAcceptCookies' -import { Sidebar, Button, Modal, LoadingDots } from '@components/ui' +import { Sidebar, Button, LoadingDots } from '@components/ui' import PaymentMethodView from '@components/checkout/PaymentMethodView' import CheckoutSidebarView from '@components/checkout/CheckoutSidebarView' +import { CheckoutProvider } from '@components/checkout/context' +import MenuSidebarView, { Link } from '../UserNav/MenuSidebarView' import LoginView from '@components/auth/LoginView' import s from './Layout.module.css' @@ -29,17 +31,31 @@ const dynamicProps = { const SignUpView = dynamic( () => import('@components/auth/SignUpView'), - dynamicProps + { + ...dynamicProps + } ) const ForgotPassword = dynamic( () => import('@components/auth/ForgotPassword'), - dynamicProps + { + ...dynamicProps + } ) const FeatureBar = dynamic( () => import('@components/common/FeatureBar'), - dynamicProps + { + ...dynamicProps + } +) + +const Modal = dynamic( + () => import('@components/ui/Modal'), + { + ...dynamicProps, + ssr: false + } ) interface Props { @@ -69,12 +85,14 @@ const ModalUI: FC = () => { ) : null } -const SidebarView: FC<{ sidebarView: string; closeSidebar(): any }> = ({ - sidebarView, - closeSidebar, -}) => { +const SidebarView: FC<{ + sidebarView: string + closeSidebar(): any + links: Link[] +}> = ({ sidebarView, closeSidebar, links }) => { return ( <Sidebar onClose={closeSidebar}> + {sidebarView === 'MOBILEMENU_VIEW' && <MenuSidebarView links={links} />} {sidebarView === 'CART_VIEW' && <CartSidebarView />} {sidebarView === 'CHECKOUT_VIEW' && <CheckoutSidebarView />} {sidebarView === 'PAYMENT_VIEW' && <PaymentMethodView />} @@ -86,10 +104,14 @@ const SidebarView: FC<{ sidebarView: string; closeSidebar(): any }> = ({ ) } -const SidebarUI: FC = () => { +const SidebarUI: FC<{ links: any }> = ({ links }) => { const { displaySidebar, closeSidebar, sidebarView } = useUI() return displaySidebar ? ( - <SidebarView sidebarView={sidebarView} closeSidebar={closeSidebar} /> + <SidebarView + sidebarView={sidebarView} + closeSidebar={closeSidebar} + links={links} + /> ) : null } @@ -111,7 +133,9 @@ const Layout: FC<Props> = ({ <main className="fit">{children}</main> <Footer pages={pageProps.pages} /> <ModalUI /> - <SidebarUI /> + <CheckoutProvider> + <SidebarUI links={navBarlinks} /> + </CheckoutProvider> <FeatureBar title="This site uses cookies to improve your experience. By clicking, you agree to our Privacy Policy." hide={acceptedCookies} diff --git a/components/common/Navbar/Navbar.tsx b/components/common/Navbar/Navbar.tsx index c56fc5acb..0ae865f88 100644 --- a/components/common/Navbar/Navbar.tsx +++ b/components/common/Navbar/Navbar.tsx @@ -9,6 +9,7 @@ interface Link { href: string label: string } + interface NavbarProps { links?: Link[] } @@ -43,9 +44,11 @@ const Navbar: FC<NavbarProps> = ({ links }) => ( <UserNav /> </div> </div> - <div className="flex pb-4 lg:px-6 lg:hidden"> - <Searchbar id="mobile-search" /> - </div> + {process.env.COMMERCE_SEARCH_ENABLED && ( + <div className="flex pb-4 lg:px-6 lg:hidden"> + <Searchbar id="mobile-search" /> + </div> + )} </Container> </NavbarRoot> ) diff --git a/components/common/SidebarLayout/SidebarLayout.tsx b/components/common/SidebarLayout/SidebarLayout.tsx index a4e60a758..025bf20e6 100644 --- a/components/common/SidebarLayout/SidebarLayout.tsx +++ b/components/common/SidebarLayout/SidebarLayout.tsx @@ -22,7 +22,7 @@ const SidebarLayout: FC<ComponentProps> = ({ <button onClick={handleClose} aria-label="Close" - className="hover:text-accent-5 transition ease-in-out duration-150 flex items-center focus:outline-none" + className="hover:text-accent-5 transition ease-in-out duration-150 flex items-center focus:outline-none mr-6" > <Cross className="h-6 w-6 hover:text-accent-3" /> <span className="ml-2 text-accent-7 text-sm ">Close</span> diff --git a/components/common/UserNav/MenuSidebarView/MenuSidebarView.module.css b/components/common/UserNav/MenuSidebarView/MenuSidebarView.module.css new file mode 100644 index 000000000..26469d6b6 --- /dev/null +++ b/components/common/UserNav/MenuSidebarView/MenuSidebarView.module.css @@ -0,0 +1,7 @@ +.root { + @apply px-4 sm:px-6 sm:w-full flex-1 z-20; +} + +.item { + @apply text-2xl font-bold; +} \ No newline at end of file diff --git a/components/common/UserNav/MenuSidebarView/MenuSidebarView.tsx b/components/common/UserNav/MenuSidebarView/MenuSidebarView.tsx new file mode 100644 index 000000000..334b8de9e --- /dev/null +++ b/components/common/UserNav/MenuSidebarView/MenuSidebarView.tsx @@ -0,0 +1,41 @@ +import Link from 'next/link' +import s from './MenuSidebarView.module.css' +import { FC } from 'react' +import { useUI } from '@components/ui/context' +import SidebarLayout from '@components/common/SidebarLayout' +import { Link as LinkProps} from '.' + + +interface MenuProps { + links?: LinkProps[] +} + +const MenuSidebarView: FC<MenuProps> = (props) => { + const { closeSidebar } = useUI() + const handleClose = () => closeSidebar() + + return ( + <SidebarLayout handleClose={handleClose}> + <div className={s.root}> + <nav> + <ul> + <li className={s.item}> + <Link href="/search"> + <a>All</a> + </Link> + </li> + {props.links?.map((l: any) => ( + <li key={l.href} className={s.item}> + <Link href={l.href}> + <a>{l.label}</a> + </Link> + </li> + ))} + </ul> + </nav> + </div> + </SidebarLayout> + ) +} + +export default MenuSidebarView diff --git a/components/common/UserNav/MenuSidebarView/index.ts b/components/common/UserNav/MenuSidebarView/index.ts new file mode 100644 index 000000000..7b3d5333f --- /dev/null +++ b/components/common/UserNav/MenuSidebarView/index.ts @@ -0,0 +1,6 @@ +export { default } from './MenuSidebarView' + +export interface Link { + href: string + label: string +} \ No newline at end of file diff --git a/components/common/UserNav/UserNav.module.css b/components/common/UserNav/UserNav.module.css index 92f62c10d..d670c1e90 100644 --- a/components/common/UserNav/UserNav.module.css +++ b/components/common/UserNav/UserNav.module.css @@ -1,5 +1,5 @@ .root { - @apply relative; + @apply relative flex items-center; } .list { @@ -7,14 +7,14 @@ } .item { - @apply mr-6 cursor-pointer relative transition ease-in-out duration-100 flex items-center outline-none text-primary; + @apply ml-6 cursor-pointer relative transition ease-in-out duration-100 flex items-center outline-none text-primary; &:hover { @apply text-accent-6 transition scale-110 duration-100; } - &:last-child { - @apply mr-0; + &:first-child { + @apply ml-0; } &:focus, @@ -35,6 +35,11 @@ @apply inline-flex justify-center rounded-full; } -.avatarButton:focus { - @apply outline-none; +.mobileMenu { + @apply flex lg:hidden ml-6 } + +.avatarButton:focus, +.mobileMenu:focus { + @apply outline-none; +} \ No newline at end of file diff --git a/components/common/UserNav/UserNav.tsx b/components/common/UserNav/UserNav.tsx index 92df48fc2..bb2e48915 100644 --- a/components/common/UserNav/UserNav.tsx +++ b/components/common/UserNav/UserNav.tsx @@ -10,6 +10,7 @@ import { useUI } from '@components/ui/context' import Button from '@components/ui/Button' import DropdownMenu from './DropdownMenu' import s from './UserNav.module.css' +import Menu from '@components/icons/Menu' interface Props { className?: string @@ -20,7 +21,8 @@ const countItem = (count: number, item: LineItem) => count + item.quantity const UserNav: FC<Props> = ({ className }) => { const { data } = useCart() const { data: customer } = useCustomer() - const { toggleSidebar, closeSidebarIfPresent, openModal } = useUI() + const { toggleSidebar, closeSidebarIfPresent, openModal, setSidebarView } = + useUI() const itemsCount = data?.lineItems.reduce(countItem, 0) ?? 0 return ( @@ -28,9 +30,19 @@ const UserNav: FC<Props> = ({ className }) => { <ul className={s.list}> {process.env.COMMERCE_CART_ENABLED && ( <li className={s.item}> - <Button className={s.item} variant="naked" onClick={toggleSidebar} aria-label="Cart"> + <Button + className={s.item} + variant="naked" + onClick={() => { + setSidebarView('CART_VIEW') + toggleSidebar() + }} + aria-label={`Cart items: ${itemsCount}`} + > <Bag /> - {itemsCount > 0 && <span className={s.bagCount}>{itemsCount}</span>} + {itemsCount > 0 && ( + <span className={s.bagCount}>{itemsCount}</span> + )} </Button> </li> )} @@ -58,6 +70,19 @@ const UserNav: FC<Props> = ({ className }) => { )} </li> )} + <li className={s.mobileMenu}> + <Button + className={s.item} + variant="naked" + onClick={() => { + setSidebarView('MOBILEMENU_VIEW') + toggleSidebar() + }} + aria-label="Menu" + > + <Menu /> + </Button> + </li> </ul> </nav> ) diff --git a/components/icons/ChevronRight.tsx b/components/icons/ChevronRight.tsx index d72b77a32..8da0122ca 100644 --- a/components/icons/ChevronRight.tsx +++ b/components/icons/ChevronRight.tsx @@ -1,4 +1,4 @@ -const ChevronUp = ({ ...props }) => { +const ChevronRight = ({ ...props }) => { return ( <svg viewBox="0 0 24 24" @@ -17,4 +17,4 @@ const ChevronUp = ({ ...props }) => { ) } -export default ChevronUp +export default ChevronRight diff --git a/components/icons/Menu.tsx b/components/icons/Menu.tsx new file mode 100644 index 000000000..3f280e31f --- /dev/null +++ b/components/icons/Menu.tsx @@ -0,0 +1,21 @@ +const Menu = ({ ...props }) => { + return ( + <svg + xmlns="http://www.w3.org/2000/svg" + className="h-6 w-6" + fill="none" + viewBox="0 0 24 24" + stroke="currentColor" + {...props} + > + <path + strokeLinecap="round" + strokeLinejoin="round" + strokeWidth={2} + d="M4 6h16M4 12h16m-7 6h7" + /> + </svg> + ) +} + +export default Menu diff --git a/components/product/ProductCard/ProductCard.tsx b/components/product/ProductCard/ProductCard.tsx index 95f2f3f07..96e2382cb 100644 --- a/components/product/ProductCard/ProductCard.tsx +++ b/components/product/ProductCard/ProductCard.tsx @@ -39,22 +39,24 @@ const ProductCard: FC<Props> = ({ return ( <Link href={`/product/${product.slug}`}> - <a className={rootClassName}> + <a className={rootClassName} aria-label={product.name}> {variant === 'slim' && ( <> <div className={s.header}> <span>{product.name}</span> </div> {product?.images && ( - <Image - quality="85" - src={product.images[0]?.url || placeholderImg} - alt={product.name || 'Product Image'} - height={320} - width={320} - layout="fixed" - {...imgProps} - /> + <div> + <Image + quality="85" + src={product.images[0]?.url || placeholderImg} + alt={product.name || 'Product Image'} + height={320} + width={320} + layout="fixed" + {...imgProps} + /> + </div> )} </> )} @@ -80,16 +82,18 @@ const ProductCard: FC<Props> = ({ )} <div className={s.imageContainer}> {product?.images && ( - <Image - alt={product.name || 'Product Image'} - className={s.productImage} - src={product.images[0]?.url || placeholderImg} - height={540} - width={540} - quality="85" - layout="responsive" - {...imgProps} - /> + <div> + <Image + alt={product.name || 'Product Image'} + className={s.productImage} + src={product.images[0]?.url || placeholderImg} + height={540} + width={540} + quality="85" + layout="responsive" + {...imgProps} + /> + </div> )} </div> </> @@ -110,16 +114,18 @@ const ProductCard: FC<Props> = ({ /> <div className={s.imageContainer}> {product?.images && ( - <Image - alt={product.name || 'Product Image'} - className={s.productImage} - src={product.images[0]?.url || placeholderImg} - height={540} - width={540} - quality="85" - layout="responsive" - {...imgProps} - /> + <div> + <Image + alt={product.name || 'Product Image'} + className={s.productImage} + src={product.images[0]?.url || placeholderImg} + height={540} + width={540} + quality="85" + layout="responsive" + {...imgProps} + /> + </div> )} </div> </> diff --git a/components/product/ProductOptions/ProductOptions.tsx b/components/product/ProductOptions/ProductOptions.tsx index 456df4bfc..15c229edb 100644 --- a/components/product/ProductOptions/ProductOptions.tsx +++ b/components/product/ProductOptions/ProductOptions.tsx @@ -21,7 +21,7 @@ const ProductOptions: React.FC<ProductOptionsProps> = ({ <h2 className="uppercase font-medium text-sm tracking-wide"> {opt.displayName} </h2> - <div className="flex flex-row py-4"> + <div role="listbox" className="flex flex-row py-4"> {opt.values.map((v, i: number) => { const active = selectedOptions[opt.displayName.toLowerCase()] return ( diff --git a/components/product/ProductSidebar/ProductSidebar.tsx b/components/product/ProductSidebar/ProductSidebar.tsx index fd1ef1e0a..250aa41bc 100644 --- a/components/product/ProductSidebar/ProductSidebar.tsx +++ b/components/product/ProductSidebar/ProductSidebar.tsx @@ -31,7 +31,7 @@ const ProductSidebar: FC<ProductSidebarProps> = ({ product, className }) => { try { await addItem({ productId: String(product.id), - variantId: String(variant ? variant.id : product.variants[0].id), + variantId: String(variant ? variant.id : product.variants[0]?.id), }) openSidebar() setLoading(false) diff --git a/components/product/ProductSlider/ProductSlider.module.css b/components/product/ProductSlider/ProductSlider.module.css index 8d7265eb8..b95bffdd0 100644 --- a/components/product/ProductSlider/ProductSlider.module.css +++ b/components/product/ProductSlider/ProductSlider.module.css @@ -13,9 +13,7 @@ } .thumb { - @apply transition-transform transition-colors - ease-linear duration-75 overflow-hidden inline-block - cursor-pointer h-full; + @apply overflow-hidden inline-block cursor-pointer h-full; width: 125px; width: calc(100% / 3); } @@ -48,11 +46,6 @@ @screen md { .thumb:hover { transform: scale(1.02); - background-color: rgba(255, 255, 255, 0.08); - } - - .thumb.selected { - @apply bg-white; } .album { diff --git a/components/product/ProductSlider/ProductSlider.tsx b/components/product/ProductSlider/ProductSlider.tsx index 537a12a46..209256b9d 100644 --- a/components/product/ProductSlider/ProductSlider.tsx +++ b/components/product/ProductSlider/ProductSlider.tsx @@ -1,7 +1,6 @@ import { useKeenSlider } from 'keen-slider/react' import React, { Children, - FC, isValidElement, useState, useRef, @@ -28,16 +27,14 @@ const ProductSlider: React.FC<ProductSliderProps> = ({ const [ref, slider] = useKeenSlider<HTMLDivElement>({ loop: true, - slidesPerView: 1, - mounted: () => setIsMounted(true), + slides: { perView: 1 }, + created: () => setIsMounted(true), slideChanged(s) { - const slideNumber = s.details().relativeSlide + const slideNumber = s.track.details.rel setCurrentSlide(slideNumber) if (thumbsContainerRef.current) { - const $el = document.getElementById( - `thumb-${s.details().relativeSlide}` - ) + const $el = document.getElementById(`thumb-${slideNumber}`) if (slideNumber >= 3) { thumbsContainerRef.current.scrollLeft = $el!.offsetLeft } else { @@ -77,8 +74,8 @@ const ProductSlider: React.FC<ProductSliderProps> = ({ } }, []) - const onPrev = React.useCallback(() => slider.prev(), [slider]) - const onNext = React.useCallback(() => slider.next(), [slider]) + const onPrev = React.useCallback(() => slider.current?.prev(), [slider]) + const onNext = React.useCallback(() => slider.current?.next(), [slider]) return ( <div className={cn(s.root, className)} ref={sliderContainerRef}> @@ -117,7 +114,7 @@ const ProductSlider: React.FC<ProductSliderProps> = ({ }), id: `thumb-${idx}`, onClick: () => { - slider.moveToSlideRelative(idx) + slider.current?.moveToIdx(idx) }, }, } diff --git a/components/product/ProductView/ProductView.module.css b/components/product/ProductView/ProductView.module.css index 0b3ebf564..e68c76f21 100644 --- a/components/product/ProductView/ProductView.module.css +++ b/components/product/ProductView/ProductView.module.css @@ -17,16 +17,15 @@ } .imageContainer { - @apply text-center; + @apply text-center h-full relative; } -.imageContainer > div, -.imageContainer > div > div { - @apply h-full; +.imageContainer > span { + height: 100% !important; } .sliderContainer .img { - @apply w-full h-auto max-h-full object-cover; + @apply w-full h-full max-h-full object-cover; } .button { diff --git a/components/product/ProductView/ProductView.tsx b/components/product/ProductView/ProductView.tsx index 5c85eb084..1ddd3990b 100644 --- a/components/product/ProductView/ProductView.tsx +++ b/components/product/ProductView/ProductView.tsx @@ -58,7 +58,11 @@ const ProductView: FC<ProductViewProps> = ({ product, relatedProducts }) => { )} </div> - <ProductSidebar key={product.id} product={product} className={s.sidebar} /> + <ProductSidebar + key={product.id} + product={product} + className={s.sidebar} + /> </div> <hr className="mt-7 border-accent-2" /> <section className="py-12 px-6 mb-10"> diff --git a/components/product/Swatch/Swatch.tsx b/components/product/Swatch/Swatch.tsx index d04e77a78..1e0baadee 100644 --- a/components/product/Swatch/Swatch.tsx +++ b/components/product/Swatch/Swatch.tsx @@ -42,7 +42,9 @@ const Swatch: React.FC<Omit<ButtonProps, 'variant'> & SwatchProps> = React.memo( return ( <Button - aria-label="Variant Swatch" + role="option" + aria-selected={active} + aria-label={variant && label ? `${variant} ${label}` : 'Variant Swatch'} className={swatchClassName} {...(label && color && { title: label })} style={color ? { backgroundColor: color } : {}} diff --git a/components/product/helpers.ts b/components/product/helpers.ts index d3fbd5ef5..77e385bb8 100644 --- a/components/product/helpers.ts +++ b/components/product/helpers.ts @@ -23,7 +23,7 @@ export function selectDefaultOptionFromProduct( updater: Dispatch<SetStateAction<SelectedOptions>> ) { // Selects the default option - product.variants[0].options?.forEach((v) => { + product.variants[0]?.options?.forEach((v) => { updater((choices) => ({ ...choices, [v.displayName.toLowerCase()]: v.values[0].label.toLowerCase(), diff --git a/components/ui/Modal/Modal.tsx b/components/ui/Modal/Modal.tsx index de45c2814..40ed3b3ff 100644 --- a/components/ui/Modal/Modal.tsx +++ b/components/ui/Modal/Modal.tsx @@ -2,11 +2,8 @@ import { FC, useRef, useEffect, useCallback } from 'react' import s from './Modal.module.css' import FocusTrap from '@lib/focus-trap' import { Cross } from '@components/icons' -import { - disableBodyScroll, - clearAllBodyScrollLocks, - enableBodyScroll, -} from 'body-scroll-lock' +import { disableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock' + interface ModalProps { className?: string children?: any @@ -34,9 +31,6 @@ const Modal: FC<ModalProps> = ({ children, onClose }) => { window.addEventListener('keydown', handleKey) } return () => { - if (modal) { - enableBodyScroll(modal) - } clearAllBodyScrollLocks() window.removeEventListener('keydown', handleKey) } diff --git a/components/ui/Sidebar/Sidebar.tsx b/components/ui/Sidebar/Sidebar.tsx index 40698aec9..688d9aa58 100644 --- a/components/ui/Sidebar/Sidebar.tsx +++ b/components/ui/Sidebar/Sidebar.tsx @@ -1,11 +1,7 @@ import { FC, useEffect, useRef } from 'react' import s from './Sidebar.module.css' import cn from 'classnames' -import { - disableBodyScroll, - enableBodyScroll, - clearAllBodyScrollLocks, -} from 'body-scroll-lock' +import { disableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock' interface SidebarProps { children: any @@ -28,13 +24,12 @@ const Sidebar: FC<SidebarProps> = ({ children, onClose }) => { } const contentElement = contentRef.current - + if (contentElement) { disableBodyScroll(contentElement, { reserveScrollBarGap: true }) } return () => { - if (contentElement) enableBodyScroll(contentElement) clearAllBodyScrollLocks() } }, []) @@ -48,7 +43,7 @@ const Sidebar: FC<SidebarProps> = ({ children, onClose }) => { > <div className="absolute inset-0 overflow-hidden"> <div className={s.backdrop} onClick={onClose} /> - <section className="absolute inset-y-0 right-0 max-w-full flex outline-none pl-10"> + <section className="absolute inset-y-0 right-0 w-full md:w-auto max-w-full flex outline-none md:pl-10"> <div className="h-full w-full md:w-screen md:max-w-md"> <div className={s.sidebar} ref={contentRef}> {children} diff --git a/components/ui/Text/Text.module.css b/components/ui/Text/Text.module.css index b3bc8342b..dd35ff63b 100644 --- a/components/ui/Text/Text.module.css +++ b/components/ui/Text/Text.module.css @@ -14,7 +14,6 @@ @apply pt-1 pb-2 text-2xl font-bold tracking-wide cursor-pointer mb-2; } - /* Apply base font sizes and styles for typography markup (h2, h2, ul, p, etc.). A helpful addition for whenn page content is consumed from a source managed through a wysiwyg editor. */ diff --git a/components/wishlist/WishlistCard/WishlistCard.tsx b/components/wishlist/WishlistCard/WishlistCard.tsx index dfc1165c2..ee1403bf4 100644 --- a/components/wishlist/WishlistCard/WishlistCard.tsx +++ b/components/wishlist/WishlistCard/WishlistCard.tsx @@ -11,14 +11,16 @@ import type { Product } from '@commerce/types/product' import usePrice from '@framework/product/use-price' import useAddItem from '@framework/cart/use-add-item' import useRemoveItem from '@framework/wishlist/use-remove-item' +import { Wishlist } from '@commerce/types/wishlist' interface Props { - product: Product + item: Wishlist } const placeholderImg = '/product-img-placeholder.svg' -const WishlistCard: FC<Props> = ({ product }) => { +const WishlistCard: FC<Props> = ({ item }) => { + const product: Product = item.product const { price } = usePrice({ amount: product.price?.value, baseAmount: product.price?.retailPrice, @@ -40,7 +42,7 @@ const WishlistCard: FC<Props> = ({ product }) => { try { // If this action succeeds then there's no need to do `setRemoving(true)` // because the component will be removed from the view - await removeItem({ id: product.id! }) + await removeItem({ id: item.id! }) } catch (error) { setRemoving(false) } @@ -62,12 +64,14 @@ const WishlistCard: FC<Props> = ({ product }) => { return ( <div className={cn(s.root, { 'opacity-75 pointer-events-none': removing })}> <div className={`col-span-3 ${s.productBg}`}> - <Image - src={product.images[0]?.url || placeholderImg} - width={400} - height={400} - alt={product.images[0]?.alt || 'Product Image'} - /> + <div> + <Image + src={product.images[0]?.url || placeholderImg} + width={400} + height={400} + alt={product.images[0]?.alt || 'Product Image'} + /> + </div> </div> <div className="col-span-7"> diff --git a/framework/bigcommerce/api/endpoints/cart/add-item.ts b/framework/bigcommerce/api/endpoints/cart/add-item.ts index 52ef1223d..d2bb7ad6d 100644 --- a/framework/bigcommerce/api/endpoints/cart/add-item.ts +++ b/framework/bigcommerce/api/endpoints/cart/add-item.ts @@ -27,11 +27,11 @@ const addItem: CartEndpoint['handlers']['addItem'] = async ({ } const { data } = cartId ? await config.storeApiFetch( - `/v3/carts/${cartId}/items?include=line_items.physical_items.options`, + `/v3/carts/${cartId}/items?include=line_items.physical_items.options,line_items.digital_items.options`, options ) : await config.storeApiFetch( - '/v3/carts?include=line_items.physical_items.options', + '/v3/carts?include=line_items.physical_items.options,line_items.digital_items.options', options ) diff --git a/framework/bigcommerce/api/endpoints/cart/get-cart.ts b/framework/bigcommerce/api/endpoints/cart/get-cart.ts index d3bb309e2..b6a7d88e9 100644 --- a/framework/bigcommerce/api/endpoints/cart/get-cart.ts +++ b/framework/bigcommerce/api/endpoints/cart/get-cart.ts @@ -15,7 +15,7 @@ const getCart: CartEndpoint['handlers']['getCart'] = async ({ if (cartId) { try { result = await config.storeApiFetch( - `/v3/carts/${cartId}?include=line_items.physical_items.options` + `/v3/carts/${cartId}?include=line_items.physical_items.options,line_items.digital_items.options` ) } catch (error) { if (error instanceof BigcommerceApiError && error.status === 404) { diff --git a/framework/bigcommerce/api/endpoints/checkout/get-checkout.ts b/framework/bigcommerce/api/endpoints/checkout/get-checkout.ts index 7b308f8e8..e98e6ca54 100644 --- a/framework/bigcommerce/api/endpoints/checkout/get-checkout.ts +++ b/framework/bigcommerce/api/endpoints/checkout/get-checkout.ts @@ -42,7 +42,7 @@ const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ store_hash: config.storeHash, customer_id: customerId, channel_id: config.storeChannelId, - redirect_to: data.checkout_url, + redirect_to: data.checkout_url.replace(config.storeUrl, ""), } let token = jwt.sign(payload, config.storeApiClientSecret!, { algorithm: 'HS256', diff --git a/framework/bigcommerce/api/endpoints/customer/get-logged-in-customer.ts b/framework/bigcommerce/api/endpoints/customer/get-logged-in-customer.ts index cfcce9532..50bd5cf3f 100644 --- a/framework/bigcommerce/api/endpoints/customer/get-logged-in-customer.ts +++ b/framework/bigcommerce/api/endpoints/customer/get-logged-in-customer.ts @@ -24,36 +24,33 @@ export const getLoggedInCustomerQuery = /* GraphQL */ ` export type Customer = NonNullable<GetLoggedInCustomerQuery['customer']> -const getLoggedInCustomer: CustomerEndpoint['handlers']['getLoggedInCustomer'] = async ({ - req, - res, - config, -}) => { - const token = req.cookies[config.customerCookie] +const getLoggedInCustomer: CustomerEndpoint['handlers']['getLoggedInCustomer'] = + async ({ req, res, config }) => { + const token = req.cookies[config.customerCookie] - if (token) { - const { data } = await config.fetch<GetLoggedInCustomerQuery>( - getLoggedInCustomerQuery, - undefined, - { - headers: { - cookie: `${config.customerCookie}=${token}`, - }, + if (token) { + const { data } = await config.fetch<GetLoggedInCustomerQuery>( + getLoggedInCustomerQuery, + undefined, + { + headers: { + cookie: `${config.customerCookie}=${token}`, + }, + } + ) + const { customer } = data + + if (!customer) { + return res.status(400).json({ + data: null, + errors: [{ message: 'Customer not found', code: 'not_found' }], + }) } - ) - const { customer } = data - if (!customer) { - return res.status(400).json({ - data: null, - errors: [{ message: 'Customer not found', code: 'not_found' }], - }) + return res.status(200).json({ data: { customer } }) } - return res.status(200).json({ data: { customer } }) + res.status(200).json({ data: null }) } - res.status(200).json({ data: null }) -} - export default getLoggedInCustomer diff --git a/framework/bigcommerce/api/index.ts b/framework/bigcommerce/api/index.ts index 9dbe400f9..ecc0d0e0e 100644 --- a/framework/bigcommerce/api/index.ts +++ b/framework/bigcommerce/api/index.ts @@ -34,7 +34,7 @@ export interface BigcommerceConfig extends CommerceAPIConfig { storeChannelId?: string storeUrl?: string storeApiClientSecret?: string - storeHash?:string + storeHash?: string storeApiFetch<T>(endpoint: string, options?: RequestInit): Promise<T> } @@ -81,8 +81,8 @@ const config: BigcommerceConfig = { storeApiToken: STORE_API_TOKEN, storeApiClientId: STORE_API_CLIENT_ID, storeChannelId: STORE_CHANNEL_ID, - storeUrl:STORE_URL, - storeApiClientSecret:CLIENT_SECRET, + storeUrl: STORE_URL, + storeApiClientSecret: CLIENT_SECRET, storeHash: STOREFRONT_HASH, storeApiFetch: createFetchStoreApi(() => getCommerceApi().getConfig()), } diff --git a/framework/bigcommerce/api/utils/fetch-store-api.ts b/framework/bigcommerce/api/utils/fetch-store-api.ts index 1e44b28f9..a44e8957b 100644 --- a/framework/bigcommerce/api/utils/fetch-store-api.ts +++ b/framework/bigcommerce/api/utils/fetch-store-api.ts @@ -1,11 +1,11 @@ -import type { RequestInit, Response } from '@vercel/fetch' +import type { FetchOptions, Response } from '@vercel/fetch' import type { BigcommerceConfig } from '../index' import { BigcommerceApiError, BigcommerceNetworkError } from './errors' import fetch from './fetch' const fetchStoreApi = <T>(getConfig: () => BigcommerceConfig) => - async (endpoint: string, options?: RequestInit): Promise<T> => { + async (endpoint: string, options?: FetchOptions): Promise<T> => { const config = getConfig() let res: Response @@ -19,7 +19,7 @@ const fetchStoreApi = 'X-Auth-Client': config.storeApiClientId, }, }) - } catch (error) { + } catch (error: any) { throw new BigcommerceNetworkError( `Fetch to Bigcommerce failed: ${error.message}` ) diff --git a/framework/bigcommerce/api/utils/fetch.ts b/framework/bigcommerce/api/utils/fetch.ts index 9d9fff3ed..26f9ab674 100644 --- a/framework/bigcommerce/api/utils/fetch.ts +++ b/framework/bigcommerce/api/utils/fetch.ts @@ -1,3 +1,3 @@ -import zeitFetch from '@vercel/fetch' +import vercelFetch from '@vercel/fetch' -export default zeitFetch() +export default vercelFetch() diff --git a/framework/bigcommerce/auth/use-login.tsx b/framework/bigcommerce/auth/use-login.tsx index d366b5260..a8c049603 100644 --- a/framework/bigcommerce/auth/use-login.tsx +++ b/framework/bigcommerce/auth/use-login.tsx @@ -15,8 +15,7 @@ export const handler: MutationHook<LoginHook> = { async fetcher({ input: { email, password }, options, fetch }) { if (!(email && password)) { throw new CommerceError({ - message: - 'An email and password are required to login', + message: 'An email and password are required to login', }) } @@ -25,16 +24,18 @@ export const handler: MutationHook<LoginHook> = { body: { email, password }, }) }, - useHook: ({ fetch }) => () => { - const { revalidate } = useCustomer() + useHook: + ({ fetch }) => + () => { + const { revalidate } = useCustomer() - return useCallback( - async function login(input) { - const data = await fetch({ input }) - await revalidate() - return data - }, - [fetch, revalidate] - ) - }, + return useCallback( + async function login(input) { + const data = await fetch({ input }) + await revalidate() + return data + }, + [fetch, revalidate] + ) + }, } diff --git a/framework/bigcommerce/auth/use-logout.tsx b/framework/bigcommerce/auth/use-logout.tsx index e75563e04..1e8e9c666 100644 --- a/framework/bigcommerce/auth/use-logout.tsx +++ b/framework/bigcommerce/auth/use-logout.tsx @@ -11,16 +11,18 @@ export const handler: MutationHook<LogoutHook> = { url: '/api/logout', method: 'GET', }, - useHook: ({ fetch }) => () => { - const { mutate } = useCustomer() + useHook: + ({ fetch }) => + () => { + const { mutate } = useCustomer() - return useCallback( - async function logout() { - const data = await fetch() - await mutate(null, false) - return data - }, - [fetch, mutate] - ) - }, + return useCallback( + async function logout() { + const data = await fetch() + await mutate(null, false) + return data + }, + [fetch, mutate] + ) + }, } diff --git a/framework/bigcommerce/auth/use-signup.tsx b/framework/bigcommerce/auth/use-signup.tsx index da06fd3eb..8f183685f 100644 --- a/framework/bigcommerce/auth/use-signup.tsx +++ b/framework/bigcommerce/auth/use-signup.tsx @@ -29,16 +29,18 @@ export const handler: MutationHook<SignupHook> = { body: { firstName, lastName, email, password }, }) }, - useHook: ({ fetch }) => () => { - const { revalidate } = useCustomer() + useHook: + ({ fetch }) => + () => { + const { revalidate } = useCustomer() - return useCallback( - async function signup(input) { - const data = await fetch({ input }) - await revalidate() - return data - }, - [fetch, revalidate] - ) - }, + return useCallback( + async function signup(input) { + const data = await fetch({ input }) + await revalidate() + return data + }, + [fetch, revalidate] + ) + }, } diff --git a/framework/bigcommerce/cart/use-add-item.tsx b/framework/bigcommerce/cart/use-add-item.tsx index 441d32775..bdad1862c 100644 --- a/framework/bigcommerce/cart/use-add-item.tsx +++ b/framework/bigcommerce/cart/use-add-item.tsx @@ -29,16 +29,18 @@ export const handler: MutationHook<AddItemHook> = { return data }, - useHook: ({ fetch }) => () => { - const { mutate } = useCart() + useHook: + ({ fetch }) => + () => { + const { mutate } = useCart() - return useCallback( - async function addItem(input) { - const data = await fetch({ input }) - await mutate(data, false) - return data - }, - [fetch, mutate] - ) - }, -} \ No newline at end of file + return useCallback( + async function addItem(input) { + const data = await fetch({ input }) + await mutate(data, false) + return data + }, + [fetch, mutate] + ) + }, +} diff --git a/framework/bigcommerce/cart/use-cart.tsx b/framework/bigcommerce/cart/use-cart.tsx index 4ba1724d9..53fd3471c 100644 --- a/framework/bigcommerce/cart/use-cart.tsx +++ b/framework/bigcommerce/cart/use-cart.tsx @@ -10,22 +10,24 @@ export const handler: SWRHook<GetCartHook> = { url: '/api/cart', method: 'GET', }, - useHook: ({ useData }) => (input) => { - const response = useData({ - swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, - }) + useHook: + ({ useData }) => + (input) => { + const response = useData({ + swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, + }) - return useMemo( - () => - Object.create(response, { - isEmpty: { - get() { - return (response.data?.lineItems.length ?? 0) <= 0 + return useMemo( + () => + Object.create(response, { + isEmpty: { + get() { + return (response.data?.lineItems.length ?? 0) <= 0 + }, + enumerable: true, }, - enumerable: true, - }, - }), - [response] - ) - }, + }), + [response] + ) + }, } diff --git a/framework/bigcommerce/cart/use-remove-item.tsx b/framework/bigcommerce/cart/use-remove-item.tsx index 1376f29ce..daf155c26 100644 --- a/framework/bigcommerce/cart/use-remove-item.tsx +++ b/framework/bigcommerce/cart/use-remove-item.tsx @@ -30,27 +30,25 @@ export const handler = { }: HookFetcherContext<RemoveItemHook>) { return await fetch({ ...options, body: { itemId } }) }, - useHook: ({ fetch }: MutationHookContext<RemoveItemHook>) => < - T extends LineItem | undefined = undefined - >( - ctx: { item?: T } = {} - ) => { - const { item } = ctx - const { mutate } = useCart() - const removeItem: RemoveItemFn<LineItem> = async (input) => { - const itemId = input?.id ?? item?.id + useHook: + ({ fetch }: MutationHookContext<RemoveItemHook>) => + <T extends LineItem | undefined = undefined>(ctx: { item?: T } = {}) => { + const { item } = ctx + const { mutate } = useCart() + const removeItem: RemoveItemFn<LineItem> = async (input) => { + const itemId = input?.id ?? item?.id - if (!itemId) { - throw new ValidationError({ - message: 'Invalid input used for this operation', - }) + if (!itemId) { + throw new ValidationError({ + message: 'Invalid input used for this operation', + }) + } + + const data = await fetch({ input: { itemId } }) + await mutate(data, false) + return data } - const data = await fetch({ input: { itemId } }) - await mutate(data, false) - return data - } - - return useCallback(removeItem as RemoveItemFn<T>, [fetch, mutate]) - }, + return useCallback(removeItem as RemoveItemFn<T>, [fetch, mutate]) + }, } diff --git a/framework/bigcommerce/cart/use-update-item.tsx b/framework/bigcommerce/cart/use-update-item.tsx index 0f9f5754d..a4c7d178e 100644 --- a/framework/bigcommerce/cart/use-update-item.tsx +++ b/framework/bigcommerce/cart/use-update-item.tsx @@ -46,39 +46,39 @@ export const handler = { body: { itemId, item }, }) }, - useHook: ({ fetch }: MutationHookContext<UpdateItemHook>) => < - T extends LineItem | undefined = undefined - >( - ctx: { - item?: T - wait?: number - } = {} - ) => { - const { item } = ctx - const { mutate } = useCart() as any + useHook: + ({ fetch }: MutationHookContext<UpdateItemHook>) => + <T extends LineItem | undefined = undefined>( + ctx: { + item?: T + wait?: number + } = {} + ) => { + const { item } = ctx + const { mutate } = useCart() as any - return useCallback( - debounce(async (input: UpdateItemActionInput<T>) => { - const itemId = input.id ?? item?.id - const productId = input.productId ?? item?.productId - const variantId = input.productId ?? item?.variantId + return useCallback( + debounce(async (input: UpdateItemActionInput<T>) => { + const itemId = input.id ?? item?.id + const productId = input.productId ?? item?.productId + const variantId = input.productId ?? item?.variantId - if (!itemId || !productId || !variantId) { - throw new ValidationError({ - message: 'Invalid input used for this operation', + if (!itemId || !productId || !variantId) { + throw new ValidationError({ + message: 'Invalid input used for this operation', + }) + } + + const data = await fetch({ + input: { + itemId, + item: { productId, variantId, quantity: input.quantity }, + }, }) - } - - const data = await fetch({ - input: { - itemId, - item: { productId, variantId, quantity: input.quantity }, - }, - }) - await mutate(data, false) - return data - }, ctx.wait ?? 500), - [fetch, mutate] - ) - }, + await mutate(data, false) + return data + }, ctx.wait ?? 500), + [fetch, mutate] + ) + }, } diff --git a/framework/bigcommerce/customer/use-customer.tsx b/framework/bigcommerce/customer/use-customer.tsx index 238b1229b..ddecc2fcf 100644 --- a/framework/bigcommerce/customer/use-customer.tsx +++ b/framework/bigcommerce/customer/use-customer.tsx @@ -13,12 +13,14 @@ export const handler: SWRHook<CustomerHook> = { const data = await fetch(options) return data?.customer ?? null }, - useHook: ({ useData }) => (input) => { - return useData({ - swrOptions: { - revalidateOnFocus: false, - ...input?.swrOptions, - }, - }) - }, + useHook: + ({ useData }) => + (input) => { + return useData({ + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) + }, } diff --git a/framework/bigcommerce/lib/normalize.ts b/framework/bigcommerce/lib/normalize.ts index fee1fbcc3..059e3f871 100644 --- a/framework/bigcommerce/lib/normalize.ts +++ b/framework/bigcommerce/lib/normalize.ts @@ -8,11 +8,7 @@ import getSlug from './get-slug' function normalizeProductOption(productOption: any) { const { - node: { - entityId, - values: { edges = [] } = {}, - ...rest - }, + node: { entityId, values: { edges = [] } = {}, ...rest }, } = productOption return { @@ -122,6 +118,7 @@ function normalizeLineItem(item: any): LineItem { price: item.sale_price, listPrice: item.list_price, }, + options: item.options, path: item.url.split('/')[3], discounts: item.discounts.map((discount: any) => ({ value: discount.discounted_amount, diff --git a/framework/bigcommerce/product/use-search.tsx b/framework/bigcommerce/product/use-search.tsx index cd6c34612..76fab00a4 100644 --- a/framework/bigcommerce/product/use-search.tsx +++ b/framework/bigcommerce/product/use-search.tsx @@ -33,18 +33,20 @@ export const handler: SWRHook<SearchProductsHook> = { method: options.method, }) }, - useHook: ({ useData }) => (input = {}) => { - return useData({ - input: [ - ['search', input.search], - ['categoryId', input.categoryId], - ['brandId', input.brandId], - ['sort', input.sort], - ], - swrOptions: { - revalidateOnFocus: false, - ...input.swrOptions, - }, - }) - }, + useHook: + ({ useData }) => + (input = {}) => { + return useData({ + input: [ + ['search', input.search], + ['categoryId', input.categoryId], + ['brandId', input.brandId], + ['sort', input.sort], + ], + swrOptions: { + revalidateOnFocus: false, + ...input.swrOptions, + }, + }) + }, } diff --git a/framework/bigcommerce/types/wishlist.ts b/framework/bigcommerce/types/wishlist.ts index 1e148b88c..9e9c52353 100644 --- a/framework/bigcommerce/types/wishlist.ts +++ b/framework/bigcommerce/types/wishlist.ts @@ -20,4 +20,5 @@ export type WishlistTypes = { } export type WishlistSchema = Core.WishlistSchema<WishlistTypes> -export type GetCustomerWishlistOperation = Core.GetCustomerWishlistOperation<WishlistTypes> +export type GetCustomerWishlistOperation = + Core.GetCustomerWishlistOperation<WishlistTypes> diff --git a/framework/bigcommerce/wishlist/use-add-item.tsx b/framework/bigcommerce/wishlist/use-add-item.tsx index 1bf086731..6b3f7778d 100644 --- a/framework/bigcommerce/wishlist/use-add-item.tsx +++ b/framework/bigcommerce/wishlist/use-add-item.tsx @@ -13,25 +13,27 @@ export const handler: MutationHook<AddItemHook> = { url: '/api/wishlist', method: 'POST', }, - useHook: ({ fetch }) => () => { - const { data: customer } = useCustomer() - const { revalidate } = useWishlist() + useHook: + ({ fetch }) => + () => { + const { data: customer } = useCustomer() + const { revalidate } = useWishlist() - return useCallback( - async function addItem(item) { - if (!customer) { - // A signed customer is required in order to have a wishlist - throw new CommerceError({ - message: 'Signed customer not found', - }) - } + return useCallback( + async function addItem(item) { + if (!customer) { + // A signed customer is required in order to have a wishlist + throw new CommerceError({ + message: 'Signed customer not found', + }) + } - // TODO: add validations before doing the fetch - const data = await fetch({ input: { item } }) - await revalidate() - return data - }, - [fetch, revalidate, customer] - ) - }, + // TODO: add validations before doing the fetch + const data = await fetch({ input: { item } }) + await revalidate() + return data + }, + [fetch, revalidate, customer] + ) + }, } diff --git a/framework/bigcommerce/wishlist/use-remove-item.tsx b/framework/bigcommerce/wishlist/use-remove-item.tsx index 9d25c1439..bb8e6415e 100644 --- a/framework/bigcommerce/wishlist/use-remove-item.tsx +++ b/framework/bigcommerce/wishlist/use-remove-item.tsx @@ -15,24 +15,26 @@ export const handler: MutationHook<RemoveItemHook> = { url: '/api/wishlist', method: 'DELETE', }, - useHook: ({ fetch }) => ({ wishlist } = {}) => { - const { data: customer } = useCustomer() - const { revalidate } = useWishlist(wishlist) + useHook: + ({ fetch }) => + ({ wishlist } = {}) => { + const { data: customer } = useCustomer() + const { revalidate } = useWishlist(wishlist) - return useCallback( - async function removeItem(input) { - if (!customer) { - // A signed customer is required in order to have a wishlist - throw new CommerceError({ - message: 'Signed customer not found', - }) - } + return useCallback( + async function removeItem(input) { + if (!customer) { + // A signed customer is required in order to have a wishlist + throw new CommerceError({ + message: 'Signed customer not found', + }) + } - const data = await fetch({ input: { itemId: String(input.id) } }) - await revalidate() - return data - }, - [fetch, revalidate, customer] - ) - }, + const data = await fetch({ input: { itemId: String(input.id) } }) + await revalidate() + return data + }, + [fetch, revalidate, customer] + ) + }, } diff --git a/framework/bigcommerce/wishlist/use-wishlist.tsx b/framework/bigcommerce/wishlist/use-wishlist.tsx index b8fc946e3..7c09f835a 100644 --- a/framework/bigcommerce/wishlist/use-wishlist.tsx +++ b/framework/bigcommerce/wishlist/use-wishlist.tsx @@ -24,30 +24,32 @@ export const handler: SWRHook<GetWishlistHook> = { method: options.method, }) }, - useHook: ({ useData }) => (input) => { - const { data: customer } = useCustomer() - const response = useData({ - input: [ - ['customerId', customer?.entityId], - ['includeProducts', input?.includeProducts], - ], - swrOptions: { - revalidateOnFocus: false, - ...input?.swrOptions, - }, - }) + useHook: + ({ useData }) => + (input) => { + const { data: customer } = useCustomer() + const response = useData({ + input: [ + ['customerId', customer?.entityId], + ['includeProducts', input?.includeProducts], + ], + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) - return useMemo( - () => - Object.create(response, { - isEmpty: { - get() { - return (response.data?.items?.length || 0) <= 0 + return useMemo( + () => + Object.create(response, { + isEmpty: { + get() { + return (response.data?.items?.length || 0) <= 0 + }, + enumerable: true, }, - enumerable: true, - }, - }), - [response] - ) - }, + }), + [response] + ) + }, } diff --git a/framework/commerce/api/endpoints/cart.ts b/framework/commerce/api/endpoints/cart.ts index ca39e7da3..abd5df492 100644 --- a/framework/commerce/api/endpoints/cart.ts +++ b/framework/commerce/api/endpoints/cart.ts @@ -3,60 +3,58 @@ import { CommerceAPIError } from '../utils/errors' import isAllowedOperation from '../utils/is-allowed-operation' import type { GetAPISchema } from '..' -const cartEndpoint: GetAPISchema< - any, - CartSchema<any> ->['endpoint']['handler'] = async (ctx) => { - const { req, res, handlers, config } = ctx +const cartEndpoint: GetAPISchema<any, CartSchema<any>>['endpoint']['handler'] = + async (ctx) => { + const { req, res, handlers, config } = ctx - if ( - !isAllowedOperation(req, res, { - GET: handlers['getCart'], - POST: handlers['addItem'], - PUT: handlers['updateItem'], - DELETE: handlers['removeItem'], - }) - ) { - return + if ( + !isAllowedOperation(req, res, { + GET: handlers['getCart'], + POST: handlers['addItem'], + PUT: handlers['updateItem'], + DELETE: handlers['removeItem'], + }) + ) { + return + } + + const { cookies } = req + const cartId = cookies[config.cartCookie] + + try { + // Return current cart info + if (req.method === 'GET') { + const body = { cartId } + return await handlers['getCart']({ ...ctx, body }) + } + + // Create or add an item to the cart + if (req.method === 'POST') { + const body = { ...req.body, cartId } + return await handlers['addItem']({ ...ctx, body }) + } + + // Update item in cart + if (req.method === 'PUT') { + const body = { ...req.body, cartId } + return await handlers['updateItem']({ ...ctx, body }) + } + + // Remove an item from the cart + if (req.method === 'DELETE') { + const body = { ...req.body, cartId } + return await handlers['removeItem']({ ...ctx, body }) + } + } catch (error) { + console.error(error) + + const message = + error instanceof CommerceAPIError + ? 'An unexpected error ocurred with the Commerce API' + : 'An unexpected error ocurred' + + res.status(500).json({ data: null, errors: [{ message }] }) + } } - const { cookies } = req - const cartId = cookies[config.cartCookie] - - try { - // Return current cart info - if (req.method === 'GET') { - const body = { cartId } - return await handlers['getCart']({ ...ctx, body }) - } - - // Create or add an item to the cart - if (req.method === 'POST') { - const body = { ...req.body, cartId } - return await handlers['addItem']({ ...ctx, body }) - } - - // Update item in cart - if (req.method === 'PUT') { - const body = { ...req.body, cartId } - return await handlers['updateItem']({ ...ctx, body }) - } - - // Remove an item from the cart - if (req.method === 'DELETE') { - const body = { ...req.body, cartId } - return await handlers['removeItem']({ ...ctx, body }) - } - } catch (error) { - console.error(error) - - const message = - error instanceof CommerceAPIError - ? 'An unexpected error ocurred with the Commerce API' - : 'An unexpected error ocurred' - - res.status(500).json({ data: null, errors: [{ message }] }) - } -} - export default cartEndpoint diff --git a/framework/commerce/api/endpoints/login.ts b/framework/commerce/api/endpoints/login.ts index bc071b751..6f69629b1 100644 --- a/framework/commerce/api/endpoints/login.ts +++ b/framework/commerce/api/endpoints/login.ts @@ -12,6 +12,7 @@ const loginEndpoint: GetAPISchema< if ( !isAllowedOperation(req, res, { POST: handlers['login'], + GET: handlers['login'], }) ) { return diff --git a/framework/commerce/api/endpoints/logout.ts b/framework/commerce/api/endpoints/logout.ts index 8da11acb0..c2640eac3 100644 --- a/framework/commerce/api/endpoints/logout.ts +++ b/framework/commerce/api/endpoints/logout.ts @@ -3,35 +3,33 @@ import { CommerceAPIError } from '../utils/errors' import isAllowedOperation from '../utils/is-allowed-operation' import type { GetAPISchema } from '..' -const logoutEndpoint: GetAPISchema< - any, - LogoutSchema ->['endpoint']['handler'] = async (ctx) => { - const { req, res, handlers } = ctx +const logoutEndpoint: GetAPISchema<any, LogoutSchema>['endpoint']['handler'] = + async (ctx) => { + const { req, res, handlers } = ctx - if ( - !isAllowedOperation(req, res, { - GET: handlers['logout'], - }) - ) { - return + if ( + !isAllowedOperation(req, res, { + GET: handlers['logout'], + }) + ) { + return + } + + try { + const redirectTo = req.query.redirect_to + const body = typeof redirectTo === 'string' ? { redirectTo } : {} + + return await handlers['logout']({ ...ctx, body }) + } catch (error) { + console.error(error) + + const message = + error instanceof CommerceAPIError + ? 'An unexpected error ocurred with the Commerce API' + : 'An unexpected error ocurred' + + res.status(500).json({ data: null, errors: [{ message }] }) + } } - try { - const redirectTo = req.query.redirect_to - const body = typeof redirectTo === 'string' ? { redirectTo } : {} - - return await handlers['logout']({ ...ctx, body }) - } catch (error) { - console.error(error) - - const message = - error instanceof CommerceAPIError - ? 'An unexpected error ocurred with the Commerce API' - : 'An unexpected error ocurred' - - res.status(500).json({ data: null, errors: [{ message }] }) - } -} - export default logoutEndpoint diff --git a/framework/commerce/api/endpoints/signup.ts b/framework/commerce/api/endpoints/signup.ts index aa73ae739..78c4cf588 100644 --- a/framework/commerce/api/endpoints/signup.ts +++ b/framework/commerce/api/endpoints/signup.ts @@ -3,36 +3,34 @@ import { CommerceAPIError } from '../utils/errors' import isAllowedOperation from '../utils/is-allowed-operation' import type { GetAPISchema } from '..' -const signupEndpoint: GetAPISchema< - any, - SignupSchema ->['endpoint']['handler'] = async (ctx) => { - const { req, res, handlers, config } = ctx +const signupEndpoint: GetAPISchema<any, SignupSchema>['endpoint']['handler'] = + async (ctx) => { + const { req, res, handlers, config } = ctx - if ( - !isAllowedOperation(req, res, { - POST: handlers['signup'], - }) - ) { - return + if ( + !isAllowedOperation(req, res, { + POST: handlers['signup'], + }) + ) { + return + } + + const { cookies } = req + const cartId = cookies[config.cartCookie] + + try { + const body = { ...req.body, cartId } + return await handlers['signup']({ ...ctx, body }) + } catch (error) { + console.error(error) + + const message = + error instanceof CommerceAPIError + ? 'An unexpected error ocurred with the Commerce API' + : 'An unexpected error ocurred' + + res.status(500).json({ data: null, errors: [{ message }] }) + } } - const { cookies } = req - const cartId = cookies[config.cartCookie] - - try { - const body = { ...req.body, cartId } - return await handlers['signup']({ ...ctx, body }) - } catch (error) { - console.error(error) - - const message = - error instanceof CommerceAPIError - ? 'An unexpected error ocurred with the Commerce API' - : 'An unexpected error ocurred' - - res.status(500).json({ data: null, errors: [{ message }] }) - } -} - export default signupEndpoint diff --git a/framework/commerce/api/index.ts b/framework/commerce/api/index.ts index d7ba37059..6914b9364 100644 --- a/framework/commerce/api/index.ts +++ b/framework/commerce/api/index.ts @@ -1,5 +1,5 @@ import type { NextApiHandler } from 'next' -import type { RequestInit, Response } from '@vercel/fetch' +import type { FetchOptions, Response } from '@vercel/fetch' import type { APIEndpoint, APIHandler } from './utils/types' import type { CartSchema } from '../types/cart' import type { CustomerSchema } from '../types/customer' @@ -160,7 +160,7 @@ export interface CommerceAPIConfig { fetch<Data = any, Variables = any>( query: string, queryData?: CommerceAPIFetchOptions<Variables>, - fetchOptions?: RequestInit + fetchOptions?: FetchOptions ): Promise<GraphQLFetcherResult<Data>> } @@ -170,7 +170,7 @@ export type GraphQLFetcher< > = ( query: string, queryData?: CommerceAPIFetchOptions<Variables>, - fetchOptions?: RequestInit + fetchOptions?: FetchOptions ) => Promise<Data> export interface GraphQLFetcherResult<Data = any> { diff --git a/framework/commerce/config.js b/framework/commerce/config.js index 3c0b81352..a9e007ea7 100644 --- a/framework/commerce/config.js +++ b/framework/commerce/config.js @@ -16,7 +16,10 @@ const PROVIDERS = [ 'vendure', 'local', 'elasticpath', - 'ordercloud' + 'ordercloud', + 'kibocommerce', + 'spree', + 'commercejs', ] function getProviderName() { diff --git a/framework/commerce/new-provider.md b/framework/commerce/new-provider.md index 6e149a7d4..53b6c2a38 100644 --- a/framework/commerce/new-provider.md +++ b/framework/commerce/new-provider.md @@ -1,10 +1,19 @@ # Adding a new Commerce Provider +🔔 New providers are on hold [until we have a new API for commerce](https://github.com/vercel/commerce/pull/252) 🔔 + A commerce provider is a headless e-commerce platform that integrates with the [Commerce Framework](./README.md). Right now we have the following providers: -- BigCommerce ([framework/bigcommerce](../bigcommerce)) -- Saleor ([framework/saleor](../saleor)) +- Local ([framework/local](../local)) - Shopify ([framework/shopify](../shopify)) +- Swell ([framework/swell](../swell)) +- BigCommerce ([framework/bigcommerce](../bigcommerce)) +- Vendure ([framework/vendure](../vendure)) +- Saleor ([framework/saleor](../saleor)) +- OrderCloud ([framework/ordercloud](../ordercloud)) +- Spree ([framework/spree](../spree)) +- Kibo Commerce ([framework/kibocommerce](../kibocommerce)) +- Commerce.js ([framework/commercejs](../commercejs)) Adding a commerce provider means adding a new folder in `framework` with a folder structure like the next one: @@ -244,6 +253,30 @@ export const handler: MutationHook<Cart, {}, CartItemBody> = { } ``` +## Showing progress and features +When creating a PR for a new provider, include this list in the PR description and mark the progress as you push so we can organize the code review. Not all points are required (but advised) so make sure to keep the list up to date. + +**Status** + +* [ ] CommerceProvider +* [ ] Schema & TS types +* [ ] API Operations - Get all collections +* [ ] API Operations - Get all pages +* [ ] API Operations - Get all products +* [ ] API Operations - Get page +* [ ] API Operations - Get product +* [ ] API Operations - Get Shop Info (categories and vendors working — `vendors` query still a WIP PR on Reaction) +* [ ] Hook - Add Item +* [ ] Hook - Remove Item +* [ ] Hook - Update Item +* [ ] Hook - Get Cart (account-tied carts working, anonymous carts working, cart reconciliation working) +* [ ] Auth (based on a WIP PR on Reaction - still need to implement refresh tokens) +* [ ] Customer information +* [ ] Product attributes - Size, Colors +* [ ] Custom checkout +* [ ] Typing (in progress) +* [ ] Tests + ## Adding the Node.js provider API TODO diff --git a/framework/commerce/types/checkout.ts b/framework/commerce/types/checkout.ts index d75b63902..417604fdb 100644 --- a/framework/commerce/types/checkout.ts +++ b/framework/commerce/types/checkout.ts @@ -1,13 +1,13 @@ import type { UseSubmitCheckout } from '../checkout/use-submit-checkout' -import type { Address } from './customer/address' -import type { Card } from './customer/card' +import type { Address, AddressFields } from './customer/address' +import type { Card, CardFields } from './customer/card' // Index export type Checkout = any export type CheckoutTypes = { - card?: Card - address?: Address + card?: Card | CardFields + address?: Address | AddressFields checkout?: Checkout hasPayment?: boolean hasShipping?: boolean diff --git a/framework/commerce/types/customer/index.ts b/framework/commerce/types/customer/index.ts index 70c437c29..f0b210f62 100644 --- a/framework/commerce/types/customer/index.ts +++ b/framework/commerce/types/customer/index.ts @@ -1,5 +1,5 @@ -export * as Card from "./card" -export * as Address from "./address" +export * as Card from './card' +export * as Address from './address' // TODO: define this type export type Customer = any diff --git a/framework/commerce/types/product.ts b/framework/commerce/types/product.ts index 6a68d8ad1..400ac4160 100644 --- a/framework/commerce/types/product.ts +++ b/framework/commerce/types/product.ts @@ -77,12 +77,11 @@ export type ProductsSchema<T extends ProductTypes = ProductTypes> = { } } -export type GetAllProductPathsOperation< - T extends ProductTypes = ProductTypes -> = { - data: { products: Pick<T['product'], 'path'>[] } - variables: { first?: number } -} +export type GetAllProductPathsOperation<T extends ProductTypes = ProductTypes> = + { + data: { products: Pick<T['product'], 'path'>[] } + variables: { first?: number } + } export type GetAllProductsOperation<T extends ProductTypes = ProductTypes> = { data: { products: T['product'][] } diff --git a/framework/commerce/utils/define-property.ts b/framework/commerce/utils/define-property.ts index 875aaaa82..e89735226 100644 --- a/framework/commerce/utils/define-property.ts +++ b/framework/commerce/utils/define-property.ts @@ -11,16 +11,18 @@ type InferValue<Prop extends PropertyKey, Desc> = Desc extends { ? Record<Prop, T> : never -type DefineProperty<Prop extends PropertyKey, Desc extends PropertyDescriptor> = - Desc extends { writable: any; set(val: any): any } - ? never - : Desc extends { writable: any; get(): any } - ? never - : Desc extends { writable: false } - ? Readonly<InferValue<Prop, Desc>> - : Desc extends { writable: true } - ? InferValue<Prop, Desc> - : Readonly<InferValue<Prop, Desc>> +type DefineProperty< + Prop extends PropertyKey, + Desc extends PropertyDescriptor +> = Desc extends { writable: any; set(val: any): any } + ? never + : Desc extends { writable: any; get(): any } + ? never + : Desc extends { writable: false } + ? Readonly<InferValue<Prop, Desc>> + : Desc extends { writable: true } + ? InferValue<Prop, Desc> + : Readonly<InferValue<Prop, Desc>> export default function defineProperty< Obj extends object, diff --git a/framework/commercejs/.env.template b/framework/commercejs/.env.template new file mode 100644 index 000000000..daeb86c06 --- /dev/null +++ b/framework/commercejs/.env.template @@ -0,0 +1,7 @@ +COMMERCE_PROVIDER=commercejs + +# Public key for your Commerce.js account +NEXT_PUBLIC_COMMERCEJS_PUBLIC_KEY= + +# The URL for the current deployment, optional but should be used for production deployments +NEXT_PUBLIC_COMMERCEJS_DEPLOYMENT_URL= diff --git a/framework/commercejs/README.md b/framework/commercejs/README.md new file mode 100644 index 000000000..b0333c96a --- /dev/null +++ b/framework/commercejs/README.md @@ -0,0 +1,13 @@ +# [Commerce.js](https://commercejs.com/) Provider + +**Demo:** https://commercejs.vercel.store/ + +To use this provider you must have a [Commerce.js account](https://commercejs.com/) and you should add some products in the Commerce.js dashboard. + +Next, copy the `.env.template` file in this directory to `.env.local` in the main directory (which will be ignored by Git): + +```bash +cp framework/commercejs/.env.template .env.local +``` + +Then, set the environment variables in `.env.local` to match the ones from your store. You'll need your Commerce.js public API key, which can be found in your Commerce.js dashboard in the `Developer -> API keys` section. diff --git a/framework/ordercloud/api/endpoints/catalog/index.ts b/framework/commercejs/api/endpoints/cart/index.ts similarity index 100% rename from framework/ordercloud/api/endpoints/catalog/index.ts rename to framework/commercejs/api/endpoints/cart/index.ts diff --git a/framework/ordercloud/api/endpoints/catalog/products.ts b/framework/commercejs/api/endpoints/catalog/index.ts similarity index 100% rename from framework/ordercloud/api/endpoints/catalog/products.ts rename to framework/commercejs/api/endpoints/catalog/index.ts diff --git a/framework/commercejs/api/endpoints/catalog/products/index.ts b/framework/commercejs/api/endpoints/catalog/products/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/commercejs/api/endpoints/catalog/products/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/commercejs/api/endpoints/checkout/get-checkout.ts b/framework/commercejs/api/endpoints/checkout/get-checkout.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/commercejs/api/endpoints/checkout/get-checkout.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/commercejs/api/endpoints/checkout/index.ts b/framework/commercejs/api/endpoints/checkout/index.ts new file mode 100644 index 000000000..3fc7332e2 --- /dev/null +++ b/framework/commercejs/api/endpoints/checkout/index.ts @@ -0,0 +1,23 @@ +import { GetAPISchema, createEndpoint } from '@commerce/api' +import checkoutEndpoint from '@commerce/api/endpoints/checkout' +import type { CheckoutSchema } from '../../../types/checkout' +import type { CommercejsAPI } from '../..' + +import submitCheckout from './submit-checkout' +import getCheckout from './get-checkout' + +export type CheckoutAPI = GetAPISchema<CommercejsAPI, CheckoutSchema> + +export type CheckoutEndpoint = CheckoutAPI['endpoint'] + +export const handlers: CheckoutEndpoint['handlers'] = { + submitCheckout, + getCheckout, +} + +const checkoutApi = createEndpoint<CheckoutAPI>({ + handler: checkoutEndpoint, + handlers, +}) + +export default checkoutApi diff --git a/framework/commercejs/api/endpoints/checkout/submit-checkout.ts b/framework/commercejs/api/endpoints/checkout/submit-checkout.ts new file mode 100644 index 000000000..a06f349d7 --- /dev/null +++ b/framework/commercejs/api/endpoints/checkout/submit-checkout.ts @@ -0,0 +1,44 @@ +import type { CardFields } from '@commerce/types/customer/card' +import type { AddressFields } from '@commerce/types/customer/address' +import type { CheckoutEndpoint } from '.' +import sdkFetcherFunction from '../../utils/sdk-fetch' +import { normalizeTestCheckout } from '../../../utils/normalize-checkout' + +const submitCheckout: CheckoutEndpoint['handlers']['submitCheckout'] = async ({ + res, + body: { item, cartId }, + config: { sdkFetch }, +}) => { + const sdkFetcher: typeof sdkFetcherFunction = sdkFetch + + // Generate a checkout token + const { id: checkoutToken } = await sdkFetcher( + 'checkout', + 'generateTokenFrom', + 'cart', + cartId + ) + + const shippingMethods = await sdkFetcher( + 'checkout', + 'getShippingOptions', + checkoutToken, + { + country: 'US', + } + ) + + const shippingMethodToUse = shippingMethods?.[0]?.id || '' + const checkoutData = normalizeTestCheckout({ + paymentInfo: item?.card as CardFields, + shippingInfo: item?.address as AddressFields, + shippingOption: shippingMethodToUse, + }) + + // Capture the order + await sdkFetcher('checkout', 'capture', checkoutToken, checkoutData) + + res.status(200).json({ data: null, errors: [] }) +} + +export default submitCheckout diff --git a/framework/commercejs/api/endpoints/customer/address/index.ts b/framework/commercejs/api/endpoints/customer/address/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/commercejs/api/endpoints/customer/address/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/commercejs/api/endpoints/customer/card/index.ts b/framework/commercejs/api/endpoints/customer/card/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/commercejs/api/endpoints/customer/card/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/commercejs/api/endpoints/customer/index.ts b/framework/commercejs/api/endpoints/customer/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/commercejs/api/endpoints/customer/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/commercejs/api/endpoints/login/index.ts b/framework/commercejs/api/endpoints/login/index.ts new file mode 100644 index 000000000..d9eb5abce --- /dev/null +++ b/framework/commercejs/api/endpoints/login/index.ts @@ -0,0 +1,18 @@ +import { GetAPISchema, createEndpoint } from '@commerce/api' +import loginEndpoint from '@commerce/api/endpoints/login' +import type { LoginSchema } from '../../../types/login' +import type { CommercejsAPI } from '../..' +import login from './login' + +export type LoginAPI = GetAPISchema<CommercejsAPI, LoginSchema> + +export type LoginEndpoint = LoginAPI['endpoint'] + +export const handlers: LoginEndpoint['handlers'] = { login } + +const loginApi = createEndpoint<LoginAPI>({ + handler: loginEndpoint, + handlers, +}) + +export default loginApi diff --git a/framework/commercejs/api/endpoints/login/login.ts b/framework/commercejs/api/endpoints/login/login.ts new file mode 100644 index 000000000..b9088ad22 --- /dev/null +++ b/framework/commercejs/api/endpoints/login/login.ts @@ -0,0 +1,33 @@ +import { serialize } from 'cookie' +import sdkFetcherFunction from '../../utils/sdk-fetch' +import { getDeploymentUrl } from '../../../utils/get-deployment-url' +import type { LoginEndpoint } from '.' + +const login: LoginEndpoint['handlers']['login'] = async ({ + req, + res, + config: { sdkFetch, customerCookie }, +}) => { + const sdkFetcher: typeof sdkFetcherFunction = sdkFetch + const redirectUrl = getDeploymentUrl() + try { + const loginToken = req.query?.token as string + if (!loginToken) { + res.redirect(redirectUrl) + } + const { jwt } = await sdkFetcher('customer', 'getToken', loginToken, false) + res.setHeader( + 'Set-Cookie', + serialize(customerCookie, jwt, { + secure: process.env.NODE_ENV === 'production', + maxAge: 60 * 60 * 24, + path: '/', + }) + ) + res.redirect(redirectUrl) + } catch { + res.redirect(redirectUrl) + } +} + +export default login diff --git a/framework/commercejs/api/endpoints/logout/index.ts b/framework/commercejs/api/endpoints/logout/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/commercejs/api/endpoints/logout/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/commercejs/api/endpoints/signup/index.ts b/framework/commercejs/api/endpoints/signup/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/commercejs/api/endpoints/signup/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/commercejs/api/endpoints/wishlist/index.tsx b/framework/commercejs/api/endpoints/wishlist/index.tsx new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/commercejs/api/endpoints/wishlist/index.tsx @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/commercejs/api/index.ts b/framework/commercejs/api/index.ts new file mode 100644 index 000000000..faccd5a01 --- /dev/null +++ b/framework/commercejs/api/index.ts @@ -0,0 +1,46 @@ +import type { CommerceAPI, CommerceAPIConfig } from '@commerce/api' +import { getCommerceApi as commerceApi } from '@commerce/api' + +import getAllPages from './operations/get-all-pages' +import getPage from './operations/get-page' +import getSiteInfo from './operations/get-site-info' +import getAllProductPaths from './operations/get-all-product-paths' +import getAllProducts from './operations/get-all-products' +import getProduct from './operations/get-product' +import sdkFetch from './utils/sdk-fetch' +import createGraphqlFetcher from './utils/graphql-fetch' +import { API_URL, CART_COOKIE, CUSTOMER_COOKIE } from '../constants' + +export interface CommercejsConfig extends CommerceAPIConfig { + sdkFetch: typeof sdkFetch +} + +const config: CommercejsConfig = { + commerceUrl: API_URL, + cartCookie: CART_COOKIE, + cartCookieMaxAge: 2592000, + customerCookie: CUSTOMER_COOKIE, + apiToken: '', + fetch: createGraphqlFetcher(() => getCommerceApi().getConfig()), + sdkFetch, +} + +const operations = { + getAllPages, + getPage, + getSiteInfo, + getAllProductPaths, + getAllProducts, + getProduct, +} + +export const provider = { config, operations } + +export type Provider = typeof provider +export type CommercejsAPI<P extends Provider = Provider> = CommerceAPI<P | any> + +export function getCommerceApi<P extends Provider>( + customProvider: P = provider as any +): CommercejsAPI<P> { + return commerceApi(customProvider as any) +} diff --git a/framework/commercejs/api/operations/get-all-pages.ts b/framework/commercejs/api/operations/get-all-pages.ts new file mode 100644 index 000000000..c8c9e41b2 --- /dev/null +++ b/framework/commercejs/api/operations/get-all-pages.ts @@ -0,0 +1,21 @@ +import type { CommercejsConfig } from '..' +import { GetAllPagesOperation } from '../../types/page' + +export type Page = { url: string } +export type GetAllPagesResult = { pages: Page[] } + +export default function getAllPagesOperation() { + async function getAllPages<T extends GetAllPagesOperation>({ + config, + preview, + }: { + url?: string + config?: Partial<CommercejsConfig> + preview?: boolean + } = {}): Promise<T['data']> { + return Promise.resolve({ + pages: [], + }) + } + return getAllPages +} diff --git a/framework/commercejs/api/operations/get-all-product-paths.ts b/framework/commercejs/api/operations/get-all-product-paths.ts new file mode 100644 index 000000000..570d43b13 --- /dev/null +++ b/framework/commercejs/api/operations/get-all-product-paths.ts @@ -0,0 +1,35 @@ +import type { OperationContext } from '@commerce/api/operations' +import type { + GetAllProductPathsOperation, + CommercejsProduct, +} from '../../types/product' + +import type { CommercejsConfig, Provider } from '..' + +export type GetAllProductPathsResult = { + products: Array<{ path: string }> +} + +export default function getAllProductPathsOperation({ + commerce, +}: OperationContext<Provider>) { + async function getAllProductPaths<T extends GetAllProductPathsOperation>({ + config, + }: { + config?: Partial<CommercejsConfig> + } = {}): Promise<T['data']> { + const { sdkFetch } = commerce.getConfig(config) + const { data } = await sdkFetch('products', 'list') + + // Match a path for every product retrieved + const productPaths = data.map(({ permalink }: CommercejsProduct) => ({ + path: `/${permalink}`, + })) + + return { + products: productPaths, + } + } + + return getAllProductPaths +} diff --git a/framework/commercejs/api/operations/get-all-products.ts b/framework/commercejs/api/operations/get-all-products.ts new file mode 100644 index 000000000..14e49d2d3 --- /dev/null +++ b/framework/commercejs/api/operations/get-all-products.ts @@ -0,0 +1,29 @@ +import type { OperationContext } from '@commerce/api/operations' +import type { GetAllProductsOperation } from '../../types/product' +import type { CommercejsConfig, Provider } from '../index' + +import { normalizeProduct } from '../../utils/normalize-product' + +export default function getAllProductsOperation({ + commerce, +}: OperationContext<Provider>) { + async function getAllProducts<T extends GetAllProductsOperation>({ + config, + }: { + config?: Partial<CommercejsConfig> + } = {}): Promise<T['data']> { + const { sdkFetch } = commerce.getConfig(config) + const { data } = await sdkFetch('products', 'list', { + sortBy: 'sort_order', + }) + + const productsFormatted = + data?.map((product) => normalizeProduct(product)) || [] + + return { + products: productsFormatted, + } + } + + return getAllProducts +} diff --git a/framework/commercejs/api/operations/get-page.ts b/framework/commercejs/api/operations/get-page.ts new file mode 100644 index 000000000..f4b69c90d --- /dev/null +++ b/framework/commercejs/api/operations/get-page.ts @@ -0,0 +1,15 @@ +import { GetPageOperation } from '../../types/page' + +export type Page = any +export type GetPageResult = { page?: Page } + +export type PageVariables = { + id: number +} + +export default function getPageOperation() { + async function getPage<T extends GetPageOperation>(): Promise<T['data']> { + return Promise.resolve({}) + } + return getPage +} diff --git a/framework/commercejs/api/operations/get-product.ts b/framework/commercejs/api/operations/get-product.ts new file mode 100644 index 000000000..f71aab278 --- /dev/null +++ b/framework/commercejs/api/operations/get-product.ts @@ -0,0 +1,44 @@ +import type { OperationContext } from '@commerce/api/operations' +import type { GetProductOperation } from '../../types/product' +import type { CommercejsConfig, Provider } from '../index' +import { normalizeProduct } from '../../utils/normalize-product' + +export default function getProductOperation({ + commerce, +}: OperationContext<Provider>) { + async function getProduct<T extends GetProductOperation>({ + config, + variables, + }: { + query?: string + variables?: T['variables'] + config?: Partial<CommercejsConfig> + preview?: boolean + } = {}): Promise<T['data']> { + const { sdkFetch } = commerce.getConfig(config) + + // Fetch a product by its permalink. + const product = await sdkFetch( + 'products', + 'retrieve', + variables?.slug || '', + { + type: 'permalink', + } + ) + + const { data: variants } = await sdkFetch( + 'products', + 'getVariants', + product.id + ) + + const productFormatted = normalizeProduct(product, variants) + + return { + product: productFormatted, + } + } + + return getProduct +} diff --git a/framework/commercejs/api/operations/get-site-info.ts b/framework/commercejs/api/operations/get-site-info.ts new file mode 100644 index 000000000..922fd7e76 --- /dev/null +++ b/framework/commercejs/api/operations/get-site-info.ts @@ -0,0 +1,36 @@ +import type { OperationContext } from '@commerce/api/operations' +import type { Category, GetSiteInfoOperation } from '../../types/site' +import { normalizeCategory } from '../../utils/normalize-category' +import type { CommercejsConfig, Provider } from '../index' + +export type GetSiteInfoResult< + T extends { categories: any[]; brands: any[] } = { + categories: Category[] + brands: any[] + } +> = T + +export default function getSiteInfoOperation({ + commerce, +}: OperationContext<Provider>) { + async function getSiteInfo<T extends GetSiteInfoOperation>({ + config, + }: { + query?: string + variables?: any + config?: Partial<CommercejsConfig> + preview?: boolean + } = {}): Promise<T['data']> { + const { sdkFetch } = commerce.getConfig(config) + const { data: categories } = await sdkFetch('categories', 'list') + + const formattedCategories = categories.map(normalizeCategory) + + return { + categories: formattedCategories, + brands: [], + } + } + + return getSiteInfo +} diff --git a/framework/commercejs/api/operations/index.ts b/framework/commercejs/api/operations/index.ts new file mode 100644 index 000000000..84b04a978 --- /dev/null +++ b/framework/commercejs/api/operations/index.ts @@ -0,0 +1,6 @@ +export { default as getAllPages } from './get-all-pages' +export { default as getPage } from './get-page' +export { default as getSiteInfo } from './get-site-info' +export { default as getProduct } from './get-product' +export { default as getAllProducts } from './get-all-products' +export { default as getAllProductPaths } from './get-all-product-paths' diff --git a/framework/commercejs/api/utils/graphql-fetch.ts b/framework/commercejs/api/utils/graphql-fetch.ts new file mode 100644 index 000000000..805177405 --- /dev/null +++ b/framework/commercejs/api/utils/graphql-fetch.ts @@ -0,0 +1,14 @@ +import type { GraphQLFetcher } from '@commerce/api' +import type { CommercejsConfig } from '../' + +import { FetcherError } from '@commerce/utils/errors' + +const fetchGraphqlApi: (getConfig: () => CommercejsConfig) => GraphQLFetcher = + () => async () => { + throw new FetcherError({ + errors: [{ message: 'GraphQL fetch is not implemented' }], + status: 500, + }) + } + +export default fetchGraphqlApi diff --git a/framework/commercejs/api/utils/sdk-fetch.ts b/framework/commercejs/api/utils/sdk-fetch.ts new file mode 100644 index 000000000..c0123ac34 --- /dev/null +++ b/framework/commercejs/api/utils/sdk-fetch.ts @@ -0,0 +1,19 @@ +import { commerce } from '../../lib/commercejs' +import Commerce from '@chec/commerce.js' + +type MethodKeys<T> = { + [K in keyof T]: T[K] extends (...args: any) => infer R ? K : never +}[keyof T] + +// Calls the relevant Commerce.js SDK method based on resource and method arguments. +export default async function sdkFetch< + Resource extends keyof Commerce, + Method extends MethodKeys<Commerce[Resource]> +>( + resource: Resource, + method: Method, + ...variables: Parameters<Commerce[Resource][Method]> +): Promise<ReturnType<Commerce[Resource][Method]>> { + const data = await commerce[resource][method](...variables) + return data +} diff --git a/framework/commercejs/auth/index.ts b/framework/commercejs/auth/index.ts new file mode 100644 index 000000000..36e757a89 --- /dev/null +++ b/framework/commercejs/auth/index.ts @@ -0,0 +1,3 @@ +export { default as useLogin } from './use-login' +export { default as useLogout } from './use-logout' +export { default as useSignup } from './use-signup' diff --git a/framework/commercejs/auth/use-login.tsx b/framework/commercejs/auth/use-login.tsx new file mode 100644 index 000000000..7bc9fd534 --- /dev/null +++ b/framework/commercejs/auth/use-login.tsx @@ -0,0 +1,34 @@ +import { useCallback } from 'react' +import { MutationHook } from '@commerce/utils/types' +import useLogin, { UseLogin } from '@commerce/auth/use-login' +import type { LoginHook } from '@commerce/types/login' +import { getDeploymentUrl } from '../utils/get-deployment-url' + +export default useLogin as UseLogin<typeof handler> + +const getLoginCallbackUrl = () => { + const baseUrl = getDeploymentUrl() + const API_ROUTE_PATH = 'api/login' + return `${baseUrl}/${API_ROUTE_PATH}` +} + +export const handler: MutationHook<LoginHook> = { + fetchOptions: { + query: 'customer', + method: 'login', + }, + async fetcher({ input, options: { query, method }, fetch }) { + await fetch({ + query, + method, + variables: [input.email, getLoginCallbackUrl()], + }) + return null + }, + useHook: ({ fetch }) => + function useHook() { + return useCallback(async function login(input) { + return fetch({ input }) + }, []) + }, +} diff --git a/framework/commercejs/auth/use-logout.tsx b/framework/commercejs/auth/use-logout.tsx new file mode 100644 index 000000000..6b841637f --- /dev/null +++ b/framework/commercejs/auth/use-logout.tsx @@ -0,0 +1,27 @@ +import { useCallback } from 'react' +import Cookies from 'js-cookie' +import { MutationHook } from '@commerce/utils/types' +import useLogout, { UseLogout } from '@commerce/auth/use-logout' +import type { LogoutHook } from '@commerce/types/logout' +import useCustomer from '../customer/use-customer' +import { CUSTOMER_COOKIE } from '../constants' + +export default useLogout as UseLogout<typeof handler> + +export const handler: MutationHook<LogoutHook> = { + fetchOptions: { + query: '_', + method: '_', + }, + useHook: () => () => { + const { mutate } = useCustomer() + return useCallback( + async function logout() { + Cookies.remove(CUSTOMER_COOKIE) + await mutate(null, false) + return null + }, + [mutate] + ) + }, +} diff --git a/framework/commercejs/auth/use-signup.tsx b/framework/commercejs/auth/use-signup.tsx new file mode 100644 index 000000000..07fabce0f --- /dev/null +++ b/framework/commercejs/auth/use-signup.tsx @@ -0,0 +1,17 @@ +import { MutationHook } from '@commerce/utils/types' +import useSignup, { UseSignup } from '@commerce/auth/use-signup' + +export default useSignup as UseSignup<typeof handler> + +export const handler: MutationHook<any> = { + fetchOptions: { + query: '', + }, + async fetcher() { + return null + }, + useHook: + ({ fetch }) => + () => + () => {}, +} diff --git a/framework/commercejs/cart/index.ts b/framework/commercejs/cart/index.ts new file mode 100644 index 000000000..3b8ba990e --- /dev/null +++ b/framework/commercejs/cart/index.ts @@ -0,0 +1,4 @@ +export { default as useCart } from './use-cart' +export { default as useAddItem } from './use-add-item' +export { default as useRemoveItem } from './use-remove-item' +export { default as useUpdateItem } from './use-update-item' diff --git a/framework/commercejs/cart/use-add-item.tsx b/framework/commercejs/cart/use-add-item.tsx new file mode 100644 index 000000000..24dd057b6 --- /dev/null +++ b/framework/commercejs/cart/use-add-item.tsx @@ -0,0 +1,45 @@ +import type { AddItemHook } from '@commerce/types/cart' +import type { MutationHook } from '@commerce/utils/types' +import { useCallback } from 'react' +import useAddItem, { UseAddItem } from '@commerce/cart/use-add-item' +import type { CommercejsCart } from '../types/cart' +import { normalizeCart } from '../utils/normalize-cart' +import useCart from './use-cart' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<AddItemHook> = { + fetchOptions: { + query: 'cart', + method: 'add', + }, + async fetcher({ input: item, options, fetch }) { + // Frontend stringifies variantId even if undefined. + const hasVariant = !item.variantId || item.variantId !== 'undefined' + + const variables = [item.productId, item?.quantity || 1] + if (hasVariant) { + variables.push(item.variantId) + } + + const { cart } = await fetch<{ cart: CommercejsCart }>({ + query: options.query, + method: options.method, + variables, + }) + return normalizeCart(cart) + }, + useHook: ({ fetch }) => + function useHook() { + const { mutate } = useCart() + + return useCallback( + async function addItem(input) { + const cart = await fetch({ input }) + await mutate(cart, false) + return cart + }, + [mutate] + ) + }, +} diff --git a/framework/commercejs/cart/use-cart.tsx b/framework/commercejs/cart/use-cart.tsx new file mode 100644 index 000000000..beb807362 --- /dev/null +++ b/framework/commercejs/cart/use-cart.tsx @@ -0,0 +1,41 @@ +import { useMemo } from 'react' +import type { GetCartHook } from '@commerce/types/cart' +import { SWRHook } from '@commerce/utils/types' +import useCart, { UseCart } from '@commerce/cart/use-cart' +import type { CommercejsCart } from '../types/cart' +import { normalizeCart } from '../utils/normalize-cart' + +export default useCart as UseCart<typeof handler> + +export const handler: SWRHook<GetCartHook> = { + fetchOptions: { + query: 'cart', + method: 'retrieve', + }, + async fetcher({ options, fetch }) { + const cart = await fetch<CommercejsCart>({ + query: options.query, + method: options.method, + }) + return normalizeCart(cart) + }, + useHook: ({ useData }) => + function useHook(input) { + const response = useData({ + swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, + }) + + return useMemo( + () => + Object.create(response, { + isEmpty: { + get() { + return (response.data?.lineItems?.length ?? 0) <= 0 + }, + enumerable: true, + }, + }), + [response] + ) + }, +} diff --git a/framework/commercejs/cart/use-remove-item.tsx b/framework/commercejs/cart/use-remove-item.tsx new file mode 100644 index 000000000..9b492e9eb --- /dev/null +++ b/framework/commercejs/cart/use-remove-item.tsx @@ -0,0 +1,36 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import type { RemoveItemHook } from '@commerce/types/cart' +import useRemoveItem, { UseRemoveItem } from '@commerce/cart/use-remove-item' +import type { CommercejsCart } from '../types/cart' +import { normalizeCart } from '../utils/normalize-cart' +import useCart from './use-cart' + +export default useRemoveItem as UseRemoveItem<typeof handler> + +export const handler: MutationHook<RemoveItemHook> = { + fetchOptions: { + query: 'cart', + method: 'remove', + }, + async fetcher({ input, options, fetch }) { + const { cart } = await fetch<{ cart: CommercejsCart }>({ + query: options.query, + method: options.method, + variables: input.itemId, + }) + return normalizeCart(cart) + }, + useHook: ({ fetch }) => + function useHook() { + const { mutate } = useCart() + return useCallback( + async function removeItem(input) { + const cart = await fetch({ input: { itemId: input.id } }) + await mutate(cart, false) + return cart + }, + [mutate] + ) + }, +} diff --git a/framework/commercejs/cart/use-update-item.tsx b/framework/commercejs/cart/use-update-item.tsx new file mode 100644 index 000000000..8e890de49 --- /dev/null +++ b/framework/commercejs/cart/use-update-item.tsx @@ -0,0 +1,76 @@ +import type { UpdateItemHook, LineItem } from '@commerce/types/cart' +import type { + HookFetcherContext, + MutationHookContext, +} from '@commerce/utils/types' +import { ValidationError } from '@commerce/utils/errors' +import debounce from 'lodash.debounce' +import { useCallback } from 'react' +import useUpdateItem, { UseUpdateItem } from '@commerce/cart/use-update-item' +import type { CommercejsCart } from '../types/cart' +import { normalizeCart } from '../utils/normalize-cart' +import useCart from './use-cart' + +export default useUpdateItem as UseUpdateItem<typeof handler> + +export type UpdateItemActionInput<T = any> = T extends LineItem + ? Partial<UpdateItemHook['actionInput']> + : UpdateItemHook['actionInput'] + +export const handler = { + fetchOptions: { + query: 'cart', + method: 'update', + }, + async fetcher({ input, options, fetch }: HookFetcherContext<UpdateItemHook>) { + const variables = [input.itemId, { quantity: input.item.quantity }] + const { cart } = await fetch<{ cart: CommercejsCart }>({ + query: options.query, + method: options.method, + variables, + }) + return normalizeCart(cart) + }, + useHook: + ({ fetch }: MutationHookContext<UpdateItemHook>) => + <T extends LineItem | undefined = undefined>( + ctx: { + item?: T + wait?: number + } = {} + ) => { + // eslint-disable-next-line react-hooks/rules-of-hooks + const { mutate } = useCart() as any + const { item } = ctx + + // eslint-disable-next-line react-hooks/rules-of-hooks + return useCallback( + debounce(async (input: UpdateItemActionInput<T>) => { + const itemId = input.id ?? item?.id + const productId = input.productId ?? item?.productId + const variantId = input.productId ?? item?.variantId + const quantity = input?.quantity ?? item?.quantity + + if (!itemId || !productId || !variantId) { + throw new ValidationError({ + message: 'Invalid input for updating cart item', + }) + } + + const cart = await fetch({ + input: { + itemId, + item: { + quantity, + productId, + variantId, + }, + }, + }) + await mutate(cart, false) + return cart + }, ctx.wait ?? 500), + [mutate, item] + ) + }, +} diff --git a/framework/commercejs/checkout/index.ts b/framework/commercejs/checkout/index.ts new file mode 100644 index 000000000..306621059 --- /dev/null +++ b/framework/commercejs/checkout/index.ts @@ -0,0 +1,2 @@ +export { default as useSubmitCheckout } from './use-submit-checkout' +export { default as useCheckout } from './use-checkout' diff --git a/framework/commercejs/checkout/use-checkout.tsx b/framework/commercejs/checkout/use-checkout.tsx new file mode 100644 index 000000000..f41b01a59 --- /dev/null +++ b/framework/commercejs/checkout/use-checkout.tsx @@ -0,0 +1,52 @@ +import type { GetCheckoutHook } from '@commerce/types/checkout' + +import { useMemo } from 'react' +import { SWRHook } from '@commerce/utils/types' +import useCheckout, { UseCheckout } from '@commerce/checkout/use-checkout' +import useSubmitCheckout from './use-submit-checkout' +import { useCheckoutContext } from '@components/checkout/context' + +export default useCheckout as UseCheckout<typeof handler> + +export const handler: SWRHook<GetCheckoutHook> = { + fetchOptions: { + query: '_', + method: '_', + }, + useHook: () => + function useHook() { + const { cardFields, addressFields } = useCheckoutContext() + const submit = useSubmitCheckout() + + // Basic validation - check that at least one field has a value. + const hasEnteredCard = Object.values(cardFields).some( + (fieldValue) => !!fieldValue + ) + const hasEnteredAddress = Object.values(addressFields).some( + (fieldValue) => !!fieldValue + ) + + const response = useMemo( + () => ({ + data: { + hasPayment: hasEnteredCard, + hasShipping: hasEnteredAddress, + }, + }), + [hasEnteredCard, hasEnteredAddress] + ) + + return useMemo( + () => + Object.create(response, { + submit: { + get() { + return submit + }, + enumerable: true, + }, + }), + [submit, response] + ) + }, +} diff --git a/framework/commercejs/checkout/use-submit-checkout.tsx b/framework/commercejs/checkout/use-submit-checkout.tsx new file mode 100644 index 000000000..77039ef51 --- /dev/null +++ b/framework/commercejs/checkout/use-submit-checkout.tsx @@ -0,0 +1,38 @@ +import type { SubmitCheckoutHook } from '@commerce/types/checkout' +import type { MutationHook } from '@commerce/utils/types' + +import { useCallback } from 'react' +import useSubmitCheckout, { + UseSubmitCheckout, +} from '@commerce/checkout/use-submit-checkout' +import { useCheckoutContext } from '@components/checkout/context' + +export default useSubmitCheckout as UseSubmitCheckout<typeof handler> + +export const handler: MutationHook<SubmitCheckoutHook> = { + fetchOptions: { + url: '/api/checkout', + method: 'POST', + }, + async fetcher({ input: item, options, fetch }) { + const data = await fetch({ + ...options, + body: { item }, + }) + return data + }, + useHook: ({ fetch }) => + function useHook() { + const { cardFields, addressFields } = useCheckoutContext() + + return useCallback( + async function onSubmitCheckout(input) { + const data = await fetch({ + input: { card: cardFields, address: addressFields }, + }) + return data + }, + [cardFields, addressFields] + ) + }, +} diff --git a/framework/commercejs/commerce.config.json b/framework/commercejs/commerce.config.json new file mode 100644 index 000000000..ba52b04c4 --- /dev/null +++ b/framework/commercejs/commerce.config.json @@ -0,0 +1,10 @@ +{ + "provider": "commercejs", + "features": { + "cart": true, + "search": true, + "customCheckout": true, + "customerAuth": true, + "wishlist": false + } +} diff --git a/framework/commercejs/constants.ts b/framework/commercejs/constants.ts new file mode 100644 index 000000000..33a767793 --- /dev/null +++ b/framework/commercejs/constants.ts @@ -0,0 +1,4 @@ +export const CART_COOKIE = 'commercejs_cart_id' +export const CUSTOMER_COOKIE = 'commercejs_customer_token' +export const API_URL = 'https://api.chec.io/v1' +export const LOCALE = 'en-us' diff --git a/framework/commercejs/customer/address/index.ts b/framework/commercejs/customer/address/index.ts new file mode 100644 index 000000000..1fb07c055 --- /dev/null +++ b/framework/commercejs/customer/address/index.ts @@ -0,0 +1,2 @@ +export { default as useAddresses } from './use-addresses' +export { default as useAddItem } from './use-add-item' diff --git a/framework/commercejs/customer/address/use-add-item.tsx b/framework/commercejs/customer/address/use-add-item.tsx new file mode 100644 index 000000000..3e0022761 --- /dev/null +++ b/framework/commercejs/customer/address/use-add-item.tsx @@ -0,0 +1,25 @@ +import type { AddItemHook } from '@commerce/types/customer/address' +import type { MutationHook } from '@commerce/utils/types' +import { useCallback } from 'react' +import useAddItem, { UseAddItem } from '@commerce/customer/address/use-add-item' +import { useCheckoutContext } from '@components/checkout/context' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<AddItemHook> = { + fetchOptions: { + query: '_', + method: '_', + }, + useHook: () => + function useHook() { + const { setAddressFields } = useCheckoutContext() + return useCallback( + async function addItem(input) { + setAddressFields(input) + return undefined + }, + [setAddressFields] + ) + }, +} diff --git a/framework/commercejs/customer/address/use-addresses.tsx b/framework/commercejs/customer/address/use-addresses.tsx new file mode 100644 index 000000000..5d0ad0ab6 --- /dev/null +++ b/framework/commercejs/customer/address/use-addresses.tsx @@ -0,0 +1,34 @@ +import type { GetAddressesHook } from '@commerce/types/customer/address' + +import { useMemo } from 'react' +import { SWRHook } from '@commerce/utils/types' +import useAddresses, { + UseAddresses, +} from '@commerce/customer/address/use-addresses' + +export default useAddresses as UseAddresses<typeof handler> + +export const handler: SWRHook<GetAddressesHook> = { + fetchOptions: { + url: '_', + method: '_', + }, + useHook: () => + function useHook() { + return useMemo( + () => + Object.create( + {}, + { + isEmpty: { + get() { + return true + }, + enumerable: true, + }, + } + ), + [] + ) + }, +} diff --git a/framework/commercejs/customer/card/index.ts b/framework/commercejs/customer/card/index.ts new file mode 100644 index 000000000..4048ca29a --- /dev/null +++ b/framework/commercejs/customer/card/index.ts @@ -0,0 +1,2 @@ +export { default as useCards } from './use-cards' +export { default as useAddItem } from './use-add-item' diff --git a/framework/commercejs/customer/card/use-add-item.tsx b/framework/commercejs/customer/card/use-add-item.tsx new file mode 100644 index 000000000..d83c44cd5 --- /dev/null +++ b/framework/commercejs/customer/card/use-add-item.tsx @@ -0,0 +1,25 @@ +import type { AddItemHook } from '@commerce/types/customer/card' +import type { MutationHook } from '@commerce/utils/types' +import { useCallback } from 'react' +import useAddItem, { UseAddItem } from '@commerce/customer/card/use-add-item' +import { useCheckoutContext } from '@components/checkout/context' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<AddItemHook> = { + fetchOptions: { + url: '_', + method: '_', + }, + useHook: () => + function useHook() { + const { setCardFields } = useCheckoutContext() + return useCallback( + async function addItem(input) { + setCardFields(input) + return undefined + }, + [setCardFields] + ) + }, +} diff --git a/framework/commercejs/customer/card/use-cards.tsx b/framework/commercejs/customer/card/use-cards.tsx new file mode 100644 index 000000000..2372eaa53 --- /dev/null +++ b/framework/commercejs/customer/card/use-cards.tsx @@ -0,0 +1,31 @@ +import type { GetCardsHook } from '@commerce/types/customer/card' +import { useMemo } from 'react' +import { SWRHook } from '@commerce/utils/types' +import useCard, { UseCards } from '@commerce/customer/card/use-cards' + +export default useCard as UseCards<typeof handler> + +export const handler: SWRHook<GetCardsHook> = { + fetchOptions: { + query: '_', + method: '_', + }, + useHook: () => + function useHook() { + return useMemo( + () => + Object.create( + {}, + { + isEmpty: { + get() { + return true + }, + enumerable: true, + }, + } + ), + [] + ) + }, +} diff --git a/framework/commercejs/customer/index.ts b/framework/commercejs/customer/index.ts new file mode 100644 index 000000000..6c903ecc5 --- /dev/null +++ b/framework/commercejs/customer/index.ts @@ -0,0 +1 @@ +export { default as useCustomer } from './use-customer' diff --git a/framework/commercejs/customer/use-customer.tsx b/framework/commercejs/customer/use-customer.tsx new file mode 100644 index 000000000..3f91b5abe --- /dev/null +++ b/framework/commercejs/customer/use-customer.tsx @@ -0,0 +1,44 @@ +import Cookies from 'js-cookie' +import { decode } from 'jsonwebtoken' +import { SWRHook } from '@commerce/utils/types' +import useCustomer, { UseCustomer } from '@commerce/customer/use-customer' +import { CUSTOMER_COOKIE, API_URL } from '../constants' +import type { CustomerHook } from '../types/customer' + +export default useCustomer as UseCustomer<typeof handler> +export const handler: SWRHook<CustomerHook> = { + fetchOptions: { + query: 'customer', + method: '_request', + }, + async fetcher({ options, fetch }) { + const token = Cookies.get(CUSTOMER_COOKIE) + if (!token) { + return null + } + + const decodedToken = decode(token) as { cid: string } + const customer = await fetch({ + query: options.query, + method: options.method, + variables: [ + `${API_URL}/customers/${decodedToken.cid}`, + 'get', + null, + {}, + token, + ], + }) + return customer + }, + useHook: + ({ useData }) => + (input) => { + return useData({ + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) + }, +} diff --git a/framework/commercejs/fetcher.ts b/framework/commercejs/fetcher.ts new file mode 100644 index 000000000..c556582bf --- /dev/null +++ b/framework/commercejs/fetcher.ts @@ -0,0 +1,61 @@ +import { commerce } from './lib/commercejs' +import type { Fetcher } from '@commerce/utils/types' +import { FetcherError } from '@commerce/utils/errors' + +function isValidSDKQuery(query?: string): query is keyof typeof commerce { + if (!query) return false + return query in commerce +} + +// Fetches from an API route within /api/endpoints directory +const customFetcher: Fetcher = async ({ method, url, body }) => { + const response = await fetch(url!, { + method, + body: body ? JSON.stringify(body) : undefined, + headers: { + 'Content-Type': 'application/json', + }, + }) + .then((response) => response.json()) + .then((response) => response.data) + + return response +} + +const fetcher: Fetcher = async ({ url, query, method, variables, body }) => { + // If a URL is passed, it means that the fetch needs to be passed on to a custom API route. + const isCustomFetch = !!url + if (isCustomFetch) { + const data = await customFetcher({ url, method, body }) + return data + } + + // Fetch using the Commerce.js SDK, but make sure that it's a valid method. + if (!isValidSDKQuery(query)) { + throw new FetcherError({ + errors: [ + { message: `Query ${query} does not exist on Commerce.js SDK.` }, + ], + status: 400, + }) + } + + const resource: any = commerce[query] + + if (!method || !resource[method]) { + throw new FetcherError({ + errors: [ + { + message: `Method ${method} does not exist on Commerce.js SDK ${query} resource.`, + }, + ], + status: 400, + }) + } + + const variablesArgument = Array.isArray(variables) ? variables : [variables] + const data = await resource[method](...variablesArgument) + return data +} + +export default fetcher diff --git a/framework/commercejs/index.tsx b/framework/commercejs/index.tsx new file mode 100644 index 000000000..c1ca7e4be --- /dev/null +++ b/framework/commercejs/index.tsx @@ -0,0 +1,9 @@ +import { commercejsProvider, CommercejsProvider } from './provider' +import { getCommerceProvider, useCommerce as useCoreCommerce } from '@commerce' + +export { commercejsProvider } +export type { CommercejsProvider } + +export const CommerceProvider = getCommerceProvider(commercejsProvider) + +export const useCommerce = () => useCoreCommerce() diff --git a/framework/commercejs/lib/commercejs.ts b/framework/commercejs/lib/commercejs.ts new file mode 100644 index 000000000..8acea540b --- /dev/null +++ b/framework/commercejs/lib/commercejs.ts @@ -0,0 +1,11 @@ +import Commerce from '@chec/commerce.js' + +const commercejsPublicKey = process.env + .NEXT_PUBLIC_COMMERCEJS_PUBLIC_KEY as string +const devEnvironment = process.env.NODE_ENV === 'development' + +if (devEnvironment && !commercejsPublicKey) { + throw Error('A Commerce.js public API key must be provided') +} + +export const commerce = new Commerce(commercejsPublicKey, devEnvironment) diff --git a/framework/commercejs/next.config.js b/framework/commercejs/next.config.js new file mode 100644 index 000000000..0c9e96b4c --- /dev/null +++ b/framework/commercejs/next.config.js @@ -0,0 +1,16 @@ +const commerce = require('./commerce.config.json') + +module.exports = { + commerce, + images: { + domains: ['cdn.chec.io'], + }, + rewrites() { + return [ + { + source: '/api/login/:token', + destination: '/api/login?token=:token', + }, + ] + }, +} diff --git a/framework/commercejs/product/index.ts b/framework/commercejs/product/index.ts new file mode 100644 index 000000000..426a3edcd --- /dev/null +++ b/framework/commercejs/product/index.ts @@ -0,0 +1,2 @@ +export { default as usePrice } from './use-price' +export { default as useSearch } from './use-search' diff --git a/framework/commercejs/product/use-price.tsx b/framework/commercejs/product/use-price.tsx new file mode 100644 index 000000000..0174faf5e --- /dev/null +++ b/framework/commercejs/product/use-price.tsx @@ -0,0 +1,2 @@ +export * from '@commerce/product/use-price' +export { default } from '@commerce/product/use-price' diff --git a/framework/commercejs/product/use-search.tsx b/framework/commercejs/product/use-search.tsx new file mode 100644 index 000000000..e0561dc1f --- /dev/null +++ b/framework/commercejs/product/use-search.tsx @@ -0,0 +1,53 @@ +import { SWRHook } from '@commerce/utils/types' +import useSearch, { UseSearch } from '@commerce/product/use-search' +import { SearchProductsHook } from '@commerce/types/product' +import type { CommercejsProduct } from '../types/product' +import { getProductSearchVariables } from '../utils/product-search' +import { normalizeProduct } from '../utils/normalize-product' + +export default useSearch as UseSearch<typeof handler> + +export const handler: SWRHook<SearchProductsHook> = { + fetchOptions: { + query: 'products', + method: 'list', + }, + async fetcher({ input, options, fetch }) { + const { data, meta } = await fetch<{ + data: CommercejsProduct[] + meta: { + pagination: { + total: number + } + } + }>({ + query: options.query, + method: options.method, + variables: getProductSearchVariables(input), + }) + + const formattedProducts = + data?.map((product) => normalizeProduct(product)) || [] + + return { + products: formattedProducts, + found: meta.pagination.total > 0, + } + }, + useHook: + ({ useData }) => + (input = {}) => { + return useData({ + input: [ + ['search', input.search], + ['categoryId', input.categoryId], + ['brandId', input.brandId], + ['sort', input.sort], + ], + swrOptions: { + revalidateOnFocus: false, + ...input.swrOptions, + }, + }) + }, +} diff --git a/framework/commercejs/provider.ts b/framework/commercejs/provider.ts new file mode 100644 index 000000000..d596fa9b2 --- /dev/null +++ b/framework/commercejs/provider.ts @@ -0,0 +1,55 @@ +import { handler as useCart } from './cart/use-cart' +import { handler as useAddItem } from './cart/use-add-item' +import { handler as useUpdateItem } from './cart/use-update-item' +import { handler as useRemoveItem } from './cart/use-remove-item' + +import { handler as useCustomer } from './customer/use-customer' +import { handler as useSearch } from './product/use-search' + +import { handler as useLogin } from './auth/use-login' +import { handler as useLogout } from './auth/use-logout' +import { handler as useSignup } from './auth/use-signup' + +import { handler as useCheckout } from './checkout/use-checkout' +import { handler as useSubmitCheckout } from './checkout/use-submit-checkout' + +import { handler as useCards } from './customer/card/use-cards' +import { handler as useAddCardItem } from './customer/card/use-add-item' + +import { handler as useAddresses } from './customer/address/use-addresses' +import { handler as useAddAddressItem } from './customer/address/use-add-item' + +import { CART_COOKIE, CUSTOMER_COOKIE, LOCALE } from './constants' +import { default as sdkFetcher } from './fetcher' + +export const commercejsProvider = { + locale: LOCALE, + cartCookie: CART_COOKIE, + customerCookie: CUSTOMER_COOKIE, + fetcher: sdkFetcher, + cart: { + useCart, + useAddItem, + useUpdateItem, + useRemoveItem, + }, + checkout: { + useCheckout, + useSubmitCheckout, + }, + customer: { + useCustomer, + card: { + useCards, + useAddItem: useAddCardItem, + }, + address: { + useAddresses, + useAddItem: useAddAddressItem, + }, + }, + products: { useSearch }, + auth: { useLogin, useLogout, useSignup }, +} + +export type CommercejsProvider = typeof commercejsProvider diff --git a/framework/commercejs/types/cart.ts b/framework/commercejs/types/cart.ts new file mode 100644 index 000000000..fe7b7bdc2 --- /dev/null +++ b/framework/commercejs/types/cart.ts @@ -0,0 +1,4 @@ +export * from '@commerce/types/cart' + +export type { Cart as CommercejsCart } from '@chec/commerce.js/types/cart' +export type { LineItem as CommercejsLineItem } from '@chec/commerce.js/types/line-item' diff --git a/framework/commercejs/types/checkout.ts b/framework/commercejs/types/checkout.ts new file mode 100644 index 000000000..47b6a63b9 --- /dev/null +++ b/framework/commercejs/types/checkout.ts @@ -0,0 +1,3 @@ +export * from '@commerce/types/checkout' + +export type { CheckoutCapture as CommercejsCheckoutCapture } from '@chec/commerce.js/types/checkout-capture' diff --git a/framework/commercejs/types/common.ts b/framework/commercejs/types/common.ts new file mode 100644 index 000000000..b52c33a4d --- /dev/null +++ b/framework/commercejs/types/common.ts @@ -0,0 +1 @@ +export * from '@commerce/types/common' diff --git a/framework/commercejs/types/customer.ts b/framework/commercejs/types/customer.ts new file mode 100644 index 000000000..87c9afcc4 --- /dev/null +++ b/framework/commercejs/types/customer.ts @@ -0,0 +1 @@ +export * from '@commerce/types/customer' diff --git a/framework/commercejs/types/index.ts b/framework/commercejs/types/index.ts new file mode 100644 index 000000000..7ab0b7f64 --- /dev/null +++ b/framework/commercejs/types/index.ts @@ -0,0 +1,25 @@ +import * as Cart from './cart' +import * as Checkout from './checkout' +import * as Common from './common' +import * as Customer from './customer' +import * as Login from './login' +import * as Logout from './logout' +import * as Page from './page' +import * as Product from './product' +import * as Signup from './signup' +import * as Site from './site' +import * as Wishlist from './wishlist' + +export type { + Cart, + Checkout, + Common, + Customer, + Login, + Logout, + Page, + Product, + Signup, + Site, + Wishlist, +} diff --git a/framework/commercejs/types/login.ts b/framework/commercejs/types/login.ts new file mode 100644 index 000000000..97f879078 --- /dev/null +++ b/framework/commercejs/types/login.ts @@ -0,0 +1,9 @@ +import { LoginBody, LoginTypes } from '@commerce/types/login' +export * from '@commerce/types/login' + +export type LoginHook<T extends LoginTypes = LoginTypes> = { + data: null + actionInput: LoginBody + fetcherInput: LoginBody + body: T['body'] +} diff --git a/framework/commercejs/types/logout.ts b/framework/commercejs/types/logout.ts new file mode 100644 index 000000000..9f0a466af --- /dev/null +++ b/framework/commercejs/types/logout.ts @@ -0,0 +1 @@ +export * from '@commerce/types/logout' diff --git a/framework/commercejs/types/page.ts b/framework/commercejs/types/page.ts new file mode 100644 index 000000000..20ec8ea38 --- /dev/null +++ b/framework/commercejs/types/page.ts @@ -0,0 +1 @@ +export * from '@commerce/types/page' diff --git a/framework/commercejs/types/product.ts b/framework/commercejs/types/product.ts new file mode 100644 index 000000000..4db475d95 --- /dev/null +++ b/framework/commercejs/types/product.ts @@ -0,0 +1,4 @@ +export * from '@commerce/types/product' + +export type { Product as CommercejsProduct } from '@chec/commerce.js/types/product' +export type { Variant as CommercejsVariant } from '@chec/commerce.js/types/variant' diff --git a/framework/commercejs/types/signup.ts b/framework/commercejs/types/signup.ts new file mode 100644 index 000000000..58543c6f6 --- /dev/null +++ b/framework/commercejs/types/signup.ts @@ -0,0 +1 @@ +export * from '@commerce/types/signup' diff --git a/framework/commercejs/types/site.ts b/framework/commercejs/types/site.ts new file mode 100644 index 000000000..8fd61a07d --- /dev/null +++ b/framework/commercejs/types/site.ts @@ -0,0 +1,3 @@ +export * from '@commerce/types/site' + +export type { Category as CommercejsCategory } from '@chec/commerce.js/types/category' diff --git a/framework/commercejs/types/wishlist.ts b/framework/commercejs/types/wishlist.ts new file mode 100644 index 000000000..8907fbf82 --- /dev/null +++ b/framework/commercejs/types/wishlist.ts @@ -0,0 +1 @@ +export * from '@commerce/types/wishlist' diff --git a/framework/commercejs/utils/get-deployment-url.ts b/framework/commercejs/utils/get-deployment-url.ts new file mode 100644 index 000000000..b0926abc7 --- /dev/null +++ b/framework/commercejs/utils/get-deployment-url.ts @@ -0,0 +1,12 @@ +export const getDeploymentUrl = () => { + // Custom environment variable. + if (process.env.NEXT_PUBLIC_COMMERCEJS_DEPLOYMENT_URL) { + return process.env.NEXT_PUBLIC_COMMERCEJS_DEPLOYMENT_URL + } + // Automatic Vercel deployment URL. + if (process.env.NEXT_PUBLIC_VERCEL_URL) { + return `https://${process.env.NEXT_PUBLIC_VERCEL_URL}` + } + // Assume local development. + return 'http://localhost:3000' +} diff --git a/framework/commercejs/utils/normalize-cart.ts b/framework/commercejs/utils/normalize-cart.ts new file mode 100644 index 000000000..c01ea6dea --- /dev/null +++ b/framework/commercejs/utils/normalize-cart.ts @@ -0,0 +1,74 @@ +import type { + Cart, + LineItem, + CommercejsCart, + CommercejsLineItem, +} from '../types/cart' + +type CommercejsLineItemType = CommercejsLineItem & { image: { url: string } } + +const normalizeLineItem = ( + commercejsLineItem: CommercejsLineItemType +): LineItem => { + const { + id, + sku, + quantity, + price, + product_id, + product_name, + permalink, + variant, + image, + selected_options, + } = commercejsLineItem + return { + id, + variantId: variant?.id ?? '', + productId: product_id, + name: product_name, + quantity, + discounts: [], + path: permalink, + options: selected_options?.map(({ group_name, option_name }) => ({ + name: group_name, + value: option_name, + })), + variant: { + id: variant?.id ?? id, + sku: variant?.sku ?? sku, + name: product_name, + requiresShipping: false, + price: variant?.price?.raw ?? price.raw, + listPrice: variant?.price?.raw ?? price.raw, + image: { + url: image?.url, + }, + }, + } +} + +export const normalizeCart = (commercejsCart: CommercejsCart): Cart => { + const { + id, + created, + subtotal: { raw: rawPrice }, + currency, + line_items, + } = commercejsCart + + return { + id, + createdAt: new Date(created * 1000).toISOString(), + currency: { + code: currency.code, + }, + taxesIncluded: false, + lineItems: line_items.map((item) => { + return normalizeLineItem(item as CommercejsLineItemType) + }), + lineItemsSubtotalPrice: rawPrice, + subtotalPrice: rawPrice, + totalPrice: rawPrice, + } +} diff --git a/framework/commercejs/utils/normalize-category.ts b/framework/commercejs/utils/normalize-category.ts new file mode 100644 index 000000000..e47969e81 --- /dev/null +++ b/framework/commercejs/utils/normalize-category.ts @@ -0,0 +1,14 @@ +import type { Category } from '@commerce/types/site' +import type { Category as CommercejsCategory } from '@chec/commerce.js/types/category' + +export function normalizeCategory( + commercejsCatgeory: CommercejsCategory +): Category { + const { id, name, slug } = commercejsCatgeory + return { + id, + name, + slug, + path: slug, + } +} diff --git a/framework/commercejs/utils/normalize-checkout.ts b/framework/commercejs/utils/normalize-checkout.ts new file mode 100644 index 000000000..2cc996f88 --- /dev/null +++ b/framework/commercejs/utils/normalize-checkout.ts @@ -0,0 +1,63 @@ +import type { CardFields } from '@commerce/types/customer/card' +import type { AddressFields } from '@commerce/types/customer/address' +import type { CommercejsCheckoutCapture } from '../types/checkout' + +/** + * Creates a checkout payload suitable for test checkouts. + * 1. Hard-codes the payment values for the Commerce.js test gateway. + * 2. Hard-codes the email until an email field exists on the checkout form. + * 3. Gets as much as much checkout info as possible from the checkout form, and uses fallback values. + */ +export function normalizeTestCheckout({ + paymentInfo, + shippingInfo, + shippingOption, +}: { + paymentInfo?: CardFields + shippingInfo?: AddressFields + shippingOption: string +}): CommercejsCheckoutCapture { + const firstName = + shippingInfo?.firstName || paymentInfo?.firstName || 'Nextjs' + const lastName = shippingInfo?.lastName || paymentInfo?.lastName || 'Commerce' + const fullName = `${firstName} ${lastName}` + const postalCode = shippingInfo?.zipCode || paymentInfo?.zipCode || '94103' + const street = + shippingInfo?.streetNumber || paymentInfo?.streetNumber || 'Test Street' + const townCity = shippingInfo?.city || paymentInfo?.city || 'Test Town' + + return { + payment: { + gateway: 'test_gateway', + card: { + number: '4242 4242 4242 4242', + expiry_month: '01', + expiry_year: '2024', + cvc: '123', + postal_zip_code: postalCode, + }, + }, + customer: { + email: 'nextcommerce@test.com', + firstname: firstName, + lastname: lastName, + }, + shipping: { + name: fullName, + street, + town_city: townCity, + country: 'US', + }, + billing: { + name: fullName, + street, + town_city: townCity, + postal_zip_code: postalCode, + county_state: 'California', + country: 'US', + }, + fulfillment: { + shipping_method: shippingOption, + }, + } +} diff --git a/framework/commercejs/utils/normalize-product.ts b/framework/commercejs/utils/normalize-product.ts new file mode 100644 index 000000000..86c42d922 --- /dev/null +++ b/framework/commercejs/utils/normalize-product.ts @@ -0,0 +1,77 @@ +import type { + Product, + CommercejsProduct, + CommercejsVariant, +} from '../types/product' + +function getOptionsFromVariantGroups( + variantGroups: CommercejsProduct['variant_groups'] +): Product['options'] { + const optionsFromVariantGroups = variantGroups.map( + ({ id, name: variantName, options }) => ({ + id, + displayName: variantName, + values: options.map(({ name: optionName }) => ({ + label: optionName, + })), + }) + ) + return optionsFromVariantGroups +} + +function normalizeVariants( + variants: Array<CommercejsVariant> = [], + variantGroups: CommercejsProduct['variant_groups'] +) { + if (!Array.isArray(variants)) return [] + return variants?.map((variant) => ({ + id: variant.id, + options: Object.entries(variant.options).map( + ([variantGroupId, variantOptionId]) => { + const variantGroupFromId = variantGroups.find( + (group) => group.id === variantGroupId + ) + const valueLabel = variantGroupFromId?.options.find( + (option) => option.id === variantOptionId + )?.name + + return { + id: variantOptionId, + displayName: variantGroupFromId?.name || '', + __typename: 'MultipleChoiceOption' as 'MultipleChoiceOption', + values: [ + { + label: valueLabel || '', + }, + ], + } + } + ), + })) +} + +export function normalizeProduct( + commercejsProduct: CommercejsProduct, + commercejsProductVariants: Array<CommercejsVariant> = [] +): Product { + const { id, name, description, permalink, assets, price, variant_groups } = + commercejsProduct + return { + id, + name, + description, + descriptionHtml: description, + slug: permalink, + path: permalink, + images: assets.map(({ url, description, filename }) => ({ + url, + alt: description || filename, + })), + price: { + value: price.raw, + currencyCode: 'USD', + }, + variants: normalizeVariants(commercejsProductVariants, variant_groups), + options: getOptionsFromVariantGroups(variant_groups), + } +} diff --git a/framework/commercejs/utils/product-search.ts b/framework/commercejs/utils/product-search.ts new file mode 100644 index 000000000..b1ee96681 --- /dev/null +++ b/framework/commercejs/utils/product-search.ts @@ -0,0 +1,54 @@ +import { SearchProductsBody } from '@commerce/types/product' + +const getFilterVariables = ({ + search, + categoryId, +}: { + search?: string + categoryId?: string | number +}) => { + let filterVariables: { [key: string]: any } = {} + if (search) { + filterVariables.query = search + } + if (categoryId) { + filterVariables['category_id'] = categoryId + } + return filterVariables +} + +const getSortVariables = ({ sort }: { sort?: string }) => { + let sortVariables: { [key: string]: any } = {} + switch (sort) { + case 'trending-desc': + case 'latest-desc': + sortVariables = { + sortBy: 'updated', + sortDirection: 'desc', + } + break + case 'price-asc': + sortVariables = { + sortBy: 'price', + sortDirection: 'asc', + } + break + case 'price-desc': + sortVariables = { + sortBy: 'price', + sortDirection: 'desc', + } + break + } + return sortVariables +} + +export const getProductSearchVariables = (input: SearchProductsBody) => { + const { search, categoryId, sort } = input + const filterVariables = getFilterVariables({ search, categoryId }) + const sortVariables = getSortVariables({ sort }) + return { + ...filterVariables, + ...sortVariables, + } +} diff --git a/framework/commercejs/wishlist/use-add-item.tsx b/framework/commercejs/wishlist/use-add-item.tsx new file mode 100644 index 000000000..75f067c3a --- /dev/null +++ b/framework/commercejs/wishlist/use-add-item.tsx @@ -0,0 +1,13 @@ +import { useCallback } from 'react' + +export function emptyHook() { + const useEmptyHook = async (options = {}) => { + return useCallback(async function () { + return Promise.resolve() + }, []) + } + + return useEmptyHook +} + +export default emptyHook diff --git a/framework/commercejs/wishlist/use-remove-item.tsx b/framework/commercejs/wishlist/use-remove-item.tsx new file mode 100644 index 000000000..a2d3a8a05 --- /dev/null +++ b/framework/commercejs/wishlist/use-remove-item.tsx @@ -0,0 +1,17 @@ +import { useCallback } from 'react' + +type Options = { + includeProducts?: boolean +} + +export function emptyHook(options?: Options) { + const useEmptyHook = async ({ id }: { id: string | number }) => { + return useCallback(async function () { + return Promise.resolve() + }, []) + } + + return useEmptyHook +} + +export default emptyHook diff --git a/framework/commercejs/wishlist/use-wishlist.tsx b/framework/commercejs/wishlist/use-wishlist.tsx new file mode 100644 index 000000000..125ee2686 --- /dev/null +++ b/framework/commercejs/wishlist/use-wishlist.tsx @@ -0,0 +1,40 @@ +import { HookFetcher } from '@commerce/utils/types' + +export type Wishlist = { + items: [ + { + product_id: number + variant_id: number + id: number + product: any + } + ] +} + +export interface UseWishlistOptions { + includeProducts?: boolean +} + +export interface UseWishlistInput extends UseWishlistOptions { + customerId?: number +} + +export const fetcher: HookFetcher<Wishlist | null, UseWishlistInput> = () => { + return null +} + +export function extendHook( + customFetcher: typeof fetcher, + // swrOptions?: SwrOptions<Wishlist | null, UseWishlistInput> + swrOptions?: any +) { + const useWishlist = ({ includeProducts }: UseWishlistOptions = {}) => { + return { data: null } + } + + useWishlist.extend = extendHook + + return useWishlist +} + +export default extendHook(fetcher) diff --git a/framework/kibocommerce/.env.template b/framework/kibocommerce/.env.template new file mode 100644 index 000000000..75cfe67ff --- /dev/null +++ b/framework/kibocommerce/.env.template @@ -0,0 +1,7 @@ +COMMERCE_PROVIDER=kibocommerce +KIBO_API_URL= +KIBO_CART_COOKIE= +KIBO_CUSTOMER_COOKIE= +KIBO_CLIENT_ID= +KIBO_SHARED_SECRET= +KIBO_AUTH_URL= diff --git a/framework/kibocommerce/README.md b/framework/kibocommerce/README.md new file mode 100644 index 000000000..dc7589635 --- /dev/null +++ b/framework/kibocommerce/README.md @@ -0,0 +1,37 @@ +# Kibo Commerce Provider + +If you already have a Kibo Commerce account and want to use your current store, then copy the `.env.template` file in this directory to `.env.local` in the main directory (which will be ignored by Git): + +```bash +cp framework/kibocommerce/.env.template .env.local +``` + +Then, set the environment variables in `.env.local` to match the ones from your store. + +``` +COMMERCE_PROVIDER='kibocommerce' +KIBO_API_URL= 'https://t1234-s1234.sandbox.mozu.com/graphql' +KIBO_CART_COOKIE='kibo_cart' +KIBO_CUSTOMER_COOKIE='kibo_customer' +KIBO_CLIENT_ID='KIBO.APP.1.0.0.Release' +KIBO_SHARED_SECRET='12345secret' +KIBO_AUTH_URL='https://home.mozu.com' +``` + +- `KIBO_API_URL` - link to your Kibo Commerce GraphQL API instance. +- `KIBO_CART_COOKIE` - configurable cookie name for cart. +- `KIBO_CUSTOMER_COOKIE` - configurable cookie name for shopper identifier/authentication cookie +- `KIBO_CLIENT_ID` - Unique Application (Client) ID of your Application +- `KIBO_SHARED_SECRET` - Secret API key used to authenticate application/client id. + + +Your Kibo Client ID and Shared Secret can be found from your [Kibo eCommerce Dev Center](https://mozu.com/login) + +Visit [Kibo documentation](https://apidocs.kibong-perf.com/?spec=graphql#auth) for more details on API authentication + +Based on the config, this integration will handle Authenticating your application against the Kibo API using the Kibo Client ID and Kibo Shared Secret. +## Contribute + +Our commitment to Open Source can be found [here](https://vercel.com/oss). + +If you find an issue with the provider or want a new feature, feel free to open a PR or [create a new issue](https://github.com/vercel/commerce/issues). diff --git a/framework/kibocommerce/api/endpoints/cart/add-item.ts b/framework/kibocommerce/api/endpoints/cart/add-item.ts new file mode 100644 index 000000000..6cda2a944 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/cart/add-item.ts @@ -0,0 +1,102 @@ +import { Product } from './../../../schema.d' +import { normalizeCart } from '../../../lib/normalize' +import type { CartEndpoint } from '.' +import addToCurrentCartMutation from '../../../api/mutations/addToCart-mutation' + +import { getProductQuery } from '../../../api/queries/get-product-query' +import { getCartQuery } from '../../../api/queries/get-cart-query' +import CookieHandler from '../../../api/utils/cookie-handler' + +const buildAddToCartVariables = ({ + productId, + variantId, + quantity = 1, + productResponse, +}: { + productId: string + variantId: string + quantity: number + productResponse: any +}) => { + const { product } = productResponse.data + + const selectedOptions = product.variations?.find( + (v: any) => v.productCode === variantId + ).options + + let options: any[] = [] + selectedOptions?.forEach((each: any) => { + product?.options + .filter((option: any) => { + return option.attributeFQN == each.attributeFQN + }) + .forEach((po: any) => { + options.push({ + attributeFQN: po.attributeFQN, + name: po.attributeDetail.name, + value: po.values?.find((v: any) => v.value == each.value).value, + }) + }) + }) + + return { + productToAdd: { + product: { + productCode: productId, + variationProductCode: variantId ? variantId : null, + options, + }, + quantity, + fulfillmentMethod: 'Ship', + }, + } +} + +const addItem: CartEndpoint['handlers']['addItem'] = async ({ + req, + res, + body: { cartId, item }, + config, +}) => { + if (!item) { + return res.status(400).json({ + data: null, + errors: [{ message: 'Missing item' }], + }) + } + if (!item.quantity) item.quantity = 1 + + const productResponse = await config.fetch(getProductQuery, { + variables: { productCode: item?.productId }, + }) + + const cookieHandler = new CookieHandler(config, req, res) + let accessToken = null + + if (!cookieHandler.getAccessToken()) { + let anonymousShopperTokenResponse = await cookieHandler.getAnonymousToken() + accessToken = anonymousShopperTokenResponse.accessToken; + } else { + accessToken = cookieHandler.getAccessToken() + } + + const addToCartResponse = await config.fetch( + addToCurrentCartMutation, + { + variables: buildAddToCartVariables({ ...item, productResponse }), + }, + { headers: { 'x-vol-user-claims': accessToken } } + ) + let currentCart = null + if (addToCartResponse.data.addItemToCurrentCart) { + let result = await config.fetch( + getCartQuery, + {}, + { headers: { 'x-vol-user-claims': accessToken } } + ) + currentCart = result?.data?.currentCart + } + res.status(200).json({ data: normalizeCart(currentCart) }) +} + +export default addItem diff --git a/framework/kibocommerce/api/endpoints/cart/get-cart.ts b/framework/kibocommerce/api/endpoints/cart/get-cart.ts new file mode 100644 index 000000000..b7e672092 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/cart/get-cart.ts @@ -0,0 +1,41 @@ +import CookieHandler from '../../../api/utils/cookie-handler' +import { normalizeCart } from '../../../lib/normalize' +import { Cart } from '../../../schema' +import type { CartEndpoint } from '.' +import { getCartQuery } from '../../queries/get-cart-query' + +const getCart: CartEndpoint['handlers']['getCart'] = async ({ + req, + res, + body: { cartId }, + config, +}) => { + let currentCart: Cart = {} + try { + const cookieHandler = new CookieHandler(config, req, res) + let accessToken = null + + if (!cookieHandler.getAccessToken()) { + let anonymousShopperTokenResponse = await cookieHandler.getAnonymousToken() + const response = anonymousShopperTokenResponse.response + accessToken = anonymousShopperTokenResponse.accessToken + cookieHandler.setAnonymousShopperCookie(response) + } else { + accessToken = cookieHandler.getAccessToken() + } + + let result = await config.fetch( + getCartQuery, + {}, + { headers: { 'x-vol-user-claims': accessToken } } + ) + currentCart = result?.data?.currentCart + } catch (error) { + throw error + } + res.status(200).json({ + data: currentCart ? normalizeCart(currentCart) : null, + }) +} + +export default getCart diff --git a/framework/kibocommerce/api/endpoints/cart/index.ts b/framework/kibocommerce/api/endpoints/cart/index.ts new file mode 100644 index 000000000..53de2424e --- /dev/null +++ b/framework/kibocommerce/api/endpoints/cart/index.ts @@ -0,0 +1,25 @@ +import { GetAPISchema, createEndpoint } from '@commerce/api' +import cartEndpoint from '@commerce/api/endpoints/cart' +import type { KiboCommerceAPI } from '../..' +import getCart from './get-cart'; +import addItem from './add-item'; +import updateItem from './update-item' +import removeItem from './remove-item' + +export type CartAPI = GetAPISchema<KiboCommerceAPI, any> + +export type CartEndpoint = CartAPI['endpoint'] + +export const handlers: CartEndpoint['handlers'] = { + getCart, + addItem, + updateItem, + removeItem, +} + +const cartApi = createEndpoint<CartAPI>({ + handler: cartEndpoint, + handlers, +}) + +export default cartApi diff --git a/framework/kibocommerce/api/endpoints/cart/remove-item.ts b/framework/kibocommerce/api/endpoints/cart/remove-item.ts new file mode 100644 index 000000000..62f6afdc6 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/cart/remove-item.ts @@ -0,0 +1,45 @@ +import { normalizeCart } from '../../../lib/normalize' +import type { CartEndpoint } from '.' +import removeItemFromCartMutation from '../../../api/mutations/removeItemFromCart-mutation' +import { getCartQuery } from '../../../api/queries/get-cart-query' + +const removeItem: CartEndpoint['handlers']['removeItem'] = async ({ + req, + res, + body: { cartId, itemId }, + config, +}) => { + if (!itemId) { + return res.status(400).json({ + data: null, + errors: [{ message: 'Invalid request' }], + }) + } + const encodedToken = req.cookies[config.customerCookie] + const token = encodedToken + ? Buffer.from(encodedToken, 'base64').toString('ascii') + : null + + const accessToken = token ? JSON.parse(token).accessToken : null + + const removeItemResponse = await config.fetch( + removeItemFromCartMutation, + { + variables: { id: itemId }, + }, + { headers: { 'x-vol-user-claims': accessToken } } + ) + + let currentCart = null + if (removeItemResponse.data.deleteCurrentCartItem) { + let result = await config.fetch( + getCartQuery, + {}, + { headers: { 'x-vol-user-claims': accessToken } } + ) + currentCart = result?.data?.currentCart + } + res.status(200).json({ data: normalizeCart(currentCart) }) +} + +export default removeItem diff --git a/framework/kibocommerce/api/endpoints/cart/update-item.ts b/framework/kibocommerce/api/endpoints/cart/update-item.ts new file mode 100644 index 000000000..b42ff3430 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/cart/update-item.ts @@ -0,0 +1,45 @@ +import { normalizeCart } from '../../../lib/normalize' +import type { CartEndpoint } from '.' +import { getCartQuery } from '../../../api/queries/get-cart-query' +import updateCartItemQuantityMutation from '../../../api/mutations/updateCartItemQuantity-mutation' + +const updateItem: CartEndpoint['handlers']['updateItem'] = async ({ + req, + res, + body: { cartId, itemId, item }, + config, +}) => { + if (!itemId || !item) { + return res.status(400).json({ + data: null, + errors: [{ message: 'Invalid request' }], + }) + } + const encodedToken = req.cookies[config.customerCookie] + const token = encodedToken + ? Buffer.from(encodedToken, 'base64').toString('ascii') + : null + + const accessToken = token ? JSON.parse(token).accessToken : null + + const updateItemResponse = await config.fetch( + updateCartItemQuantityMutation, + { + variables: { itemId: itemId, quantity: item.quantity }, + }, + { headers: { 'x-vol-user-claims': accessToken } } + ) + + let currentCart = null + if (updateItemResponse.data) { + let result = await config.fetch( + getCartQuery, + {}, + { headers: { 'x-vol-user-claims': accessToken } } + ) + currentCart = result?.data?.currentCart + } + res.status(200).json({ data: normalizeCart(currentCart) }) +} + +export default updateItem diff --git a/framework/kibocommerce/api/endpoints/catalog/products/index.ts b/framework/kibocommerce/api/endpoints/catalog/products/index.ts new file mode 100644 index 000000000..12c72b27e --- /dev/null +++ b/framework/kibocommerce/api/endpoints/catalog/products/index.ts @@ -0,0 +1,17 @@ +import { GetAPISchema, createEndpoint } from '@commerce/api' +import productsEndpoint from '@commerce/api/endpoints/catalog/products' +import type { KiboCommerceAPI } from '../../..' +import getProducts from '../products/products' + +export type ProductsAPI = GetAPISchema<KiboCommerceAPI, any> + +export type ProductsEndpoint = ProductsAPI['endpoint'] + +export const handlers: ProductsEndpoint['handlers'] = { getProducts } + +const productsApi = createEndpoint<ProductsAPI>({ + handler: productsEndpoint, + handlers, +}) + +export default productsApi diff --git a/framework/kibocommerce/api/endpoints/catalog/products/products.ts b/framework/kibocommerce/api/endpoints/catalog/products/products.ts new file mode 100644 index 000000000..a4f5e6dac --- /dev/null +++ b/framework/kibocommerce/api/endpoints/catalog/products/products.ts @@ -0,0 +1,31 @@ +import { Product } from '@commerce/types/product' +import { ProductsEndpoint } from '.' +import productSearchQuery from '../../../queries/product-search-query' +import { buildProductSearchVars } from '../../../../lib/product-search-vars' +import {normalizeProduct} from '../../../../lib/normalize' + +const getProducts: ProductsEndpoint['handlers']['getProducts'] = async ({ + res, + body: { search, categoryId, brandId, sort }, + config, +}) => { + const pageSize = 100; + const filters = {}; + const startIndex = 0; + const variables = buildProductSearchVars({ + categoryCode: categoryId, + pageSize, + search, + sort, + filters, + startIndex, + }) + const {data} = await config.fetch(productSearchQuery, { variables }); + const found = data?.products?.items?.length > 0 ? true : false; + let productsResponse= data?.products?.items.map((item: any) =>normalizeProduct(item,config)); + const products: Product[] = found ? productsResponse : []; + + res.status(200).json({ data: { products, found } }); +} + +export default getProducts diff --git a/framework/kibocommerce/api/endpoints/checkout/index.ts b/framework/kibocommerce/api/endpoints/checkout/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/checkout/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/kibocommerce/api/endpoints/customer/address.ts b/framework/kibocommerce/api/endpoints/customer/address.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/customer/address.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/kibocommerce/api/endpoints/customer/card.ts b/framework/kibocommerce/api/endpoints/customer/card.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/customer/card.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/kibocommerce/api/endpoints/customer/customer.ts b/framework/kibocommerce/api/endpoints/customer/customer.ts new file mode 100644 index 000000000..c2e6db707 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/customer/customer.ts @@ -0,0 +1,36 @@ +import CookieHandler from '../../../api/utils/cookie-handler' +import type { CustomerEndpoint } from '.' +import { getCustomerAccountQuery } from '../../queries/get-customer-account-query' +import { normalizeCustomer } from '../../../lib/normalize' + +const getLoggedInCustomer: CustomerEndpoint['handlers']['getLoggedInCustomer'] = async ({ + req, + res, + config, +}) => { + const cookieHandler = new CookieHandler(config, req, res) + let accessToken = cookieHandler.getAccessToken(); + + if (!cookieHandler.isShopperCookieAnonymous()) { + const { data } = await config.fetch(getCustomerAccountQuery, undefined, { + headers: { + 'x-vol-user-claims': accessToken, + }, + }) + + const customer = normalizeCustomer(data?.customerAccount) + + if (!customer.id) { + return res.status(400).json({ + data: null, + errors: [{ message: 'Customer not found', code: 'not_found' }], + }) + } + + return res.status(200).json({ data: { customer } }) + } + + res.status(200).json({ data: null }) +} + +export default getLoggedInCustomer diff --git a/framework/kibocommerce/api/endpoints/customer/index.ts b/framework/kibocommerce/api/endpoints/customer/index.ts new file mode 100644 index 000000000..c32bcfa91 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/customer/index.ts @@ -0,0 +1,18 @@ +import { GetAPISchema, createEndpoint } from '@commerce/api' +import customerEndpoint from '@commerce/api/endpoints/customer' +import type { CustomerSchema } from '../../../types/customer' +import type { KiboCommerceAPI } from '../..' +import getLoggedInCustomer from './customer' + +export type CustomerAPI = GetAPISchema<KiboCommerceAPI, CustomerSchema> + +export type CustomerEndpoint = CustomerAPI['endpoint'] + +export const handlers: CustomerEndpoint['handlers'] = { getLoggedInCustomer } + +const customerApi = createEndpoint<CustomerAPI>({ + handler: customerEndpoint, + handlers, +}) + +export default customerApi diff --git a/framework/kibocommerce/api/endpoints/login/index.ts b/framework/kibocommerce/api/endpoints/login/index.ts new file mode 100644 index 000000000..f76e0f644 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/login/index.ts @@ -0,0 +1,20 @@ +import { GetAPISchema, createEndpoint } from '@commerce/api' +import loginEndpoint from '@commerce/api/endpoints/login' +import type { LoginSchema } from '../../../types/login' +import type { KiboCommerceAPI } from '../..' +import login from './login' + +export type LoginAPI = GetAPISchema<KiboCommerceAPI, LoginSchema> + +export type LoginEndpoint = LoginAPI['endpoint'] + +export const handlers: LoginEndpoint['handlers'] = { login } + +const loginApi = createEndpoint<LoginAPI>({ + handler: loginEndpoint, + handlers, +}) + +export default loginApi; + + diff --git a/framework/kibocommerce/api/endpoints/login/login.ts b/framework/kibocommerce/api/endpoints/login/login.ts new file mode 100644 index 000000000..84410a281 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/login/login.ts @@ -0,0 +1,66 @@ +import { FetcherError } from '@commerce/utils/errors' +import type { LoginEndpoint } from '.' +import { loginMutation } from '../../mutations/login-mutation' +import { prepareSetCookie } from '../../../lib/prepare-set-cookie'; +import { setCookies } from '../../../lib/set-cookie' +import { getCookieExpirationDate } from '../../../lib/get-cookie-expiration-date' + +const invalidCredentials = /invalid credentials/i + +const login: LoginEndpoint['handlers']['login'] = async ({ + req, + res, + body: { email, password }, + config, + commerce, +}) => { + + if (!(email && password)) { + return res.status(400).json({ + data: null, + errors: [{ message: 'Invalid request' }], + }) + } + + let response; + try { + + const variables = { loginInput : { username: email, password }}; + response = await config.fetch(loginMutation, { variables }) + const { account: token } = response.data; + + // Set Cookie + const cookieExpirationDate = getCookieExpirationDate(config.customerCookieMaxAgeInDays) + + const authCookie = prepareSetCookie( + config.customerCookie, + JSON.stringify(token), + token.accessTokenExpiration ? { expires: cookieExpirationDate }: {}, + ) + setCookies(res, [authCookie]) + + } catch (error) { + // Check if the email and password didn't match an existing account + if ( + error instanceof FetcherError && + invalidCredentials.test(error.message) + ) { + return res.status(401).json({ + data: null, + errors: [ + { + message: + 'Cannot find an account that matches the provided credentials', + code: 'invalid_credentials', + }, + ], + }) + } + + throw error + } + + res.status(200).json({ data: response }) +} + +export default login \ No newline at end of file diff --git a/framework/kibocommerce/api/endpoints/logout/index.ts b/framework/kibocommerce/api/endpoints/logout/index.ts new file mode 100644 index 000000000..ec4ded011 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/logout/index.ts @@ -0,0 +1,18 @@ +import { GetAPISchema, createEndpoint } from '@commerce/api' +import logoutEndpoint from '@commerce/api/endpoints/logout' +import type { LogoutSchema } from '../../../types/logout' +import type { KiboCommerceAPI } from '../..' +import logout from './logout' + +export type LogoutAPI = GetAPISchema<KiboCommerceAPI, LogoutSchema> + +export type LogoutEndpoint = LogoutAPI['endpoint'] + +export const handlers: LogoutEndpoint['handlers'] = { logout } + +const logoutApi = createEndpoint<LogoutAPI>({ + handler: logoutEndpoint, + handlers, +}) + +export default logoutApi diff --git a/framework/kibocommerce/api/endpoints/logout/logout.ts b/framework/kibocommerce/api/endpoints/logout/logout.ts new file mode 100644 index 000000000..1b0835e39 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/logout/logout.ts @@ -0,0 +1,22 @@ +import type { LogoutEndpoint } from '.' +import {prepareSetCookie} from '../../../lib/prepare-set-cookie'; +import {setCookies} from '../../../lib/set-cookie' + +const logout: LogoutEndpoint['handlers']['logout'] = async ({ + res, + body: { redirectTo }, + config, +}) => { + // Remove the cookie + const authCookie = prepareSetCookie(config.customerCookie,'',{ maxAge: -1, path: '/' }) + setCookies(res, [authCookie]) + + // Only allow redirects to a relative URL + if (redirectTo?.startsWith('/')) { + res.redirect(redirectTo) + } else { + res.status(200).json({ data: null }) + } +} + +export default logout diff --git a/framework/kibocommerce/api/endpoints/signup/index.ts b/framework/kibocommerce/api/endpoints/signup/index.ts new file mode 100644 index 000000000..3eda94d06 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/signup/index.ts @@ -0,0 +1,18 @@ +import { GetAPISchema, createEndpoint } from '@commerce/api' +import signupEndpoint from '@commerce/api/endpoints/signup' +import type { SignupSchema } from '../../../types/signup' +import type { KiboCommerceAPI } from '../..' +import signup from './signup' + +export type SignupAPI = GetAPISchema<KiboCommerceAPI, SignupSchema> + +export type SignupEndpoint = SignupAPI['endpoint'] + +export const handlers: SignupEndpoint['handlers'] = { signup } + +const singupApi = createEndpoint<SignupAPI>({ + handler: signupEndpoint, + handlers, +}) + +export default singupApi diff --git a/framework/kibocommerce/api/endpoints/signup/signup.ts b/framework/kibocommerce/api/endpoints/signup/signup.ts new file mode 100644 index 000000000..77790ca3a --- /dev/null +++ b/framework/kibocommerce/api/endpoints/signup/signup.ts @@ -0,0 +1,91 @@ +import { FetcherError } from '@commerce/utils/errors' +import type { SignupEndpoint } from '.' +import { registerUserMutation, registerUserLoginMutation } from '../../mutations/signup-mutation' +import { prepareSetCookie } from '../../../lib/prepare-set-cookie'; +import { setCookies } from '../../../lib/set-cookie' +import { getCookieExpirationDate } from '../../../lib/get-cookie-expiration-date' + +const invalidCredentials = /invalid credentials/i + +const signup: SignupEndpoint['handlers']['signup'] = async ({ + req, + res, + body: { email, password, firstName, lastName }, + config, + commerce, +}) => { + + if (!(email && password)) { + return res.status(400).json({ + data: null, + errors: [{ message: 'Invalid request' }], + }) + } + + let response; + try { + + // Register user + const registerUserVariables = { + customerAccountInput: { + emailAddress: email, + firstName: firstName, + lastName: lastName, + acceptsMarketing: true, + id: 0 + } + } + + const registerUserResponse = await config.fetch(registerUserMutation, { variables: registerUserVariables}) + const accountId = registerUserResponse.data?.account?.id; + + // Login user + const registerUserLoginVairables = { + accountId: accountId, + customerLoginInfoInput: { + emailAddress: email, + username: email, + password: password, + isImport: false + } + } + + response = await config.fetch(registerUserLoginMutation, { variables: registerUserLoginVairables}) + const { account: token } = response.data; + + // Set Cookie + const cookieExpirationDate = getCookieExpirationDate(config.customerCookieMaxAgeInDays) + + const authCookie = prepareSetCookie( + config.customerCookie, + JSON.stringify(token), + token.accessTokenExpiration ? { expires: cookieExpirationDate }: {}, + ) + + setCookies(res, [authCookie]) + + } catch (error) { + // Check if the email and password didn't match an existing account + if ( + error instanceof FetcherError && + invalidCredentials.test(error.message) + ) { + return res.status(401).json({ + data: null, + errors: [ + { + message: + 'Cannot find an account that matches the provided credentials', + code: 'invalid_credentials', + }, + ], + }) + } + + throw error + } + + res.status(200).json({ data: response }) +} + +export default signup \ No newline at end of file diff --git a/framework/kibocommerce/api/endpoints/wishlist/add-item.ts b/framework/kibocommerce/api/endpoints/wishlist/add-item.ts new file mode 100644 index 000000000..49cfc37d5 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/wishlist/add-item.ts @@ -0,0 +1,124 @@ +import getCustomerWishlist from '../../operations/get-customer-wishlist' +import getCustomerId from '../../utils/get-customer-id' +import type { WishlistEndpoint } from '.' +import { normalizeWishlistItem } from '../../../lib/normalize' +import { getProductQuery } from '../../../api/queries/get-product-query' +import addItemToWishlistMutation from '../../mutations/addItemToWishlist-mutation' +import createWishlist from '../../mutations/create-wishlist-mutation' + +// Return wishlist info +const buildAddToWishlistVariables = ({ + productId, + variantId, + productResponse, + wishlist +}: { + productId: string + variantId: string + productResponse: any + wishlist: any +}) => { + const { product } = productResponse.data + + const selectedOptions = product.variations?.find( + (v: any) => v.productCode === variantId + ).options + const quantity=1 + let options: any[] = [] + selectedOptions?.forEach((each: any) => { + product?.options + .filter((option: any) => { + return option.attributeFQN == each.attributeFQN + }) + .forEach((po: any) => { + options.push({ + attributeFQN: po.attributeFQN, + name: po.attributeDetail.name, + value: po.values?.find((v: any) => v.value == each.value).value, + }) + }) + }) + + return { + wishlistId: wishlist?.id, + wishlistItemInput: { + quantity, + product: { + productCode: productId, + variationProductCode: variantId ? variantId : null, + options, + } + }, + } +} + +const addItem: WishlistEndpoint['handlers']['addItem'] = async ({ + res, + body: { customerToken, item }, + config, + commerce, +}) => { + const token = customerToken ? Buffer.from(customerToken, 'base64').toString('ascii'): null; + const accessToken = token ? JSON.parse(token).accessToken : null; + let result: { data?: any } = {} + let wishlist: any + + if (!item) { + return res.status(400).json({ + data: null, + errors: [{ message: 'Missing item' }], + }) + } + + const customerId = customerToken && (await getCustomerId({ customerToken, config })) + const wishlistName= config.defaultWishlistName + + if (!customerId) { + return res.status(400).json({ + data: null, + errors: [{ message: 'Invalid request' }], + }) + } + + const wishlistResponse = await commerce.getCustomerWishlist({ + variables: { customerId, wishlistName }, + config, + }) + wishlist= wishlistResponse?.wishlist + if(Object.keys(wishlist).length === 0) { + const createWishlistResponse= await config.fetch(createWishlist, {variables: { + wishlistInput: { + customerAccountId: customerId, + name: wishlistName + } + } + }, {headers: { 'x-vol-user-claims': accessToken } }) + wishlist= createWishlistResponse?.data?.createWishlist + } + + const productResponse = await config.fetch(getProductQuery, { + variables: { productCode: item?.productId }, + }) + + const addItemToWishlistResponse = await config.fetch( + addItemToWishlistMutation, + { + variables: buildAddToWishlistVariables({ ...item, productResponse, wishlist }), + }, + { headers: { 'x-vol-user-claims': accessToken } } + ) + + if(addItemToWishlistResponse?.data?.createWishlistItem){ + const wishlistResponse= await commerce.getCustomerWishlist({ + variables: { customerId, wishlistName }, + config, + }) + wishlist= wishlistResponse?.wishlist + } + + result = { data: {...wishlist, items: wishlist?.items?.map((item:any) => normalizeWishlistItem(item, config))} } + + res.status(200).json({ data: result?.data }) +} + +export default addItem diff --git a/framework/kibocommerce/api/endpoints/wishlist/get-wishlist.ts b/framework/kibocommerce/api/endpoints/wishlist/get-wishlist.ts new file mode 100644 index 000000000..be4c403d9 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/wishlist/get-wishlist.ts @@ -0,0 +1,35 @@ +import type { WishlistEndpoint } from '.' +import getCustomerId from '../../utils/get-customer-id' +import { normalizeWishlistItem } from '../../../lib/normalize' + +// Return wishlist info +const getWishlist: WishlistEndpoint['handlers']['getWishlist'] = async ({ + res, + body: { customerToken, includeProducts }, + config, + commerce, +}) => { + let result: { data?: any } = {} + if (customerToken) { + const customerId = customerToken && (await getCustomerId({ customerToken, config })) + const wishlistName= config.defaultWishlistName + if (!customerId) { + // If the customerToken is invalid, then this request is too + return res.status(404).json({ + data: null, + errors: [{ message: 'Wishlist not found' }], + }) + } + const { wishlist } = await commerce.getCustomerWishlist({ + variables: { customerId, wishlistName }, + includeProducts, + config, + }) + + result = { data: {...wishlist, items: wishlist?.items?.map((item:any) => normalizeWishlistItem(item, config, includeProducts))} } + } + + res.status(200).json({ data: result?.data ?? null }) +} + +export default getWishlist diff --git a/framework/kibocommerce/api/endpoints/wishlist/index.ts b/framework/kibocommerce/api/endpoints/wishlist/index.ts new file mode 100644 index 000000000..052cdcef6 --- /dev/null +++ b/framework/kibocommerce/api/endpoints/wishlist/index.ts @@ -0,0 +1,23 @@ +import { GetAPISchema, createEndpoint } from '@commerce/api' +import wishlistEndpoint from '@commerce/api/endpoints/wishlist' +import type { KiboCommerceAPI } from '../..' +import getWishlist from './get-wishlist' +import addItem from './add-item' +import removeItem from './remove-item' + +export type WishlistAPI = GetAPISchema<KiboCommerceAPI, any> + +export type WishlistEndpoint = WishlistAPI['endpoint'] + +export const handlers: WishlistEndpoint['handlers'] = { + getWishlist, + addItem, + removeItem, +} + +const wishlistApi = createEndpoint<WishlistAPI>({ + handler: wishlistEndpoint, + handlers, +}) + +export default wishlistApi diff --git a/framework/kibocommerce/api/endpoints/wishlist/remove-item.ts b/framework/kibocommerce/api/endpoints/wishlist/remove-item.ts new file mode 100644 index 000000000..ae6a8d81c --- /dev/null +++ b/framework/kibocommerce/api/endpoints/wishlist/remove-item.ts @@ -0,0 +1,60 @@ +import getCustomerId from '../../utils/get-customer-id' +import type { WishlistEndpoint } from '.' +import { normalizeWishlistItem } from '../../../lib/normalize' +import removeItemFromWishlistMutation from '../../mutations/removeItemFromWishlist-mutation' + +// Return wishlist info +const removeItem: WishlistEndpoint['handlers']['removeItem'] = async ({ + res, + body: { customerToken, itemId }, + config, + commerce, +}) => { + const token = customerToken ? Buffer.from(customerToken, 'base64').toString('ascii'): null; + const accessToken = token ? JSON.parse(token).accessToken : null; + let result: { data?: any } = {} + let wishlist: any + + const customerId = customerToken && (await getCustomerId({ customerToken, config })) + const wishlistName= config.defaultWishlistName + const wishlistResponse = await commerce.getCustomerWishlist({ + variables: { customerId, wishlistName }, + config, + }) + wishlist= wishlistResponse?.wishlist + + if (!wishlist || !itemId) { + return res.status(400).json({ + data: null, + errors: [{ message: 'Invalid request' }], + }) + } + const removedItem = wishlist?.items?.find( + (item:any) => { + return item.product.productCode === itemId; + } + ); + + const removeItemFromWishlistResponse = await config.fetch( + removeItemFromWishlistMutation, + { + variables: { + wishlistId: wishlist?.id, + wishlistItemId: removedItem?.id + }, + }, + { headers: { 'x-vol-user-claims': accessToken } } + ) + + if(removeItemFromWishlistResponse?.data?.deleteWishlistItem){ + const wishlistResponse= await commerce.getCustomerWishlist({ + variables: { customerId, wishlistName }, + config, + }) + wishlist= wishlistResponse?.wishlist + } + result = { data: {...wishlist, items: wishlist?.items?.map((item:any) => normalizeWishlistItem(item, config))} } + res.status(200).json({ data: result?.data }) +} + +export default removeItem diff --git a/framework/kibocommerce/api/fragments/cartItemDetails.ts b/framework/kibocommerce/api/fragments/cartItemDetails.ts new file mode 100644 index 000000000..951813073 --- /dev/null +++ b/framework/kibocommerce/api/fragments/cartItemDetails.ts @@ -0,0 +1,11 @@ +import { productDetails } from '../fragments/productDetails' +export const cartItemDetails = /*GraphQL*/` +fragment cartItemDetails on CartItem { + id + product { + ...productDetails + } + quantity +} +${productDetails} +`; diff --git a/framework/kibocommerce/api/fragments/category.ts b/framework/kibocommerce/api/fragments/category.ts new file mode 100644 index 000000000..e6be159b2 --- /dev/null +++ b/framework/kibocommerce/api/fragments/category.ts @@ -0,0 +1,11 @@ +export const CategoryInfo = /* GraphQL */` +fragment categoryInfo on PrCategory { + categoryId + categoryCode + isDisplayed + content { + name + slug + description + } +}`; \ No newline at end of file diff --git a/framework/kibocommerce/api/fragments/product.ts b/framework/kibocommerce/api/fragments/product.ts new file mode 100644 index 000000000..b69d00827 --- /dev/null +++ b/framework/kibocommerce/api/fragments/product.ts @@ -0,0 +1,98 @@ +export const productPrices = /* GraphQL */` +fragment productPrices on Product { + price { + price + salePrice + } + priceRange { + lower { price, salePrice} + upper { price, salePrice } + } + } +`; +export const productAttributes = /* GraphQL */` +fragment productAttributes on Product { + properties { + attributeFQN + attributeDetail { + name + } + isHidden + values { + value + stringValue + } + } +} +`; +export const productContent = /* GraphQL */` +fragment productContent on Product { + content { + productFullDescription + productShortDescription + seoFriendlyUrl + productName + productImages { + imageUrl + imageLabel + mediaType + } + } +} +`; +export const productOptions = /* GraphQL */` +fragment productOptions on Product { + options { + attributeFQN + attributeDetail { + name + } + isProductImageGroupSelector + isRequired + isMultiValue + values { + value + isSelected + deltaPrice + stringValue + } + } +} +`; +export const productInfo = /* GraphQL */` +fragment productInfo on Product { + productCode + productUsage + + purchasableState { + isPurchasable + } + + variations { + productCode, + options { + __typename + attributeFQN + value + } + } + + categories { + categoryCode + categoryId + content { + name + slug + } + } + + ...productPrices + ...productAttributes + ...productContent + ...productOptions +} +${productPrices} +${productAttributes} +${productContent} +${productOptions} +`; diff --git a/framework/kibocommerce/api/fragments/productDetails.ts b/framework/kibocommerce/api/fragments/productDetails.ts new file mode 100644 index 000000000..e29ffa7b7 --- /dev/null +++ b/framework/kibocommerce/api/fragments/productDetails.ts @@ -0,0 +1,30 @@ +export const productDetails = /* GraphQL */ ` + fragment productDetails on CrProduct { + productCode + name + description + imageUrl + imageAlternateText + sku + variationProductCode + price { + price + salePrice + } + options { + attributeFQN + name + value + } + properties { + attributeFQN + name + values { + value + } + } + categories { + id + } +} +` diff --git a/framework/kibocommerce/api/fragments/search.ts b/framework/kibocommerce/api/fragments/search.ts new file mode 100644 index 000000000..dee242a07 --- /dev/null +++ b/framework/kibocommerce/api/fragments/search.ts @@ -0,0 +1,32 @@ +import { productInfo } from './product'; + +export const searchFacets = /* GraphQL */` +fragment searchFacets on Facet { + label + field + values { + label + value + isApplied + filterValue + isDisplayed + count + } +}`; + +export const searchResults = /* GraphQL */` +fragment searchResults on ProductSearchResult { + totalCount + pageSize + pageCount + startIndex + items { + ...productInfo + } + facets { + ...searchFacets + } +} +${searchFacets} +${productInfo} +`; diff --git a/framework/kibocommerce/api/index.ts b/framework/kibocommerce/api/index.ts new file mode 100644 index 000000000..a79745c57 --- /dev/null +++ b/framework/kibocommerce/api/index.ts @@ -0,0 +1,64 @@ +import type { CommerceAPI, CommerceAPIConfig } from '@commerce/api' +import { getCommerceApi as commerceApi } from '@commerce/api' +import createFetchGraphqlApi from './utils/fetch-graphql-api' + +import getAllPages from './operations/get-all-pages' +import getPage from './operations/get-page' +import getSiteInfo from './operations/get-site-info' +import getCustomerWishlist from './operations/get-customer-wishlist' +import getAllProductPaths from './operations/get-all-product-paths' +import getAllProducts from './operations/get-all-products' +import getProduct from './operations/get-product' +import type { RequestInit } from '@vercel/fetch' + +export interface KiboCommerceConfig extends CommerceAPIConfig { + apiHost?: string + clientId?: string + sharedSecret?: string + customerCookieMaxAgeInDays: number, + currencyCode: string, + documentListName: string, + defaultWishlistName: string, + authUrl?: string +} + +const config: KiboCommerceConfig = { + commerceUrl: process.env.KIBO_API_URL || '', + apiToken: process.env.KIBO_API_TOKEN || '', + cartCookie: process.env.KIBO_CART_COOKIE || '', + customerCookie: process.env.KIBO_CUSTOMER_COOKIE || '', + cartCookieMaxAge: 2592000, + documentListName: 'siteSnippets@mozu', + fetch: createFetchGraphqlApi(() => getCommerceApi().getConfig()), + authUrl: process.env.KIBO_AUTH_URL || '', + // REST API + apiHost: process.env.KIBO_API_HOST || '', + clientId: process.env.KIBO_CLIENT_ID || '', + sharedSecret: process.env.KIBO_SHARED_SECRET || '', + customerCookieMaxAgeInDays: 30, + currencyCode: 'USD', + defaultWishlistName: 'My Wishlist' +} + +const operations = { + getAllPages, + getPage, + getSiteInfo, + getCustomerWishlist, + getAllProductPaths, + getAllProducts, + getProduct, +} + +export const provider = { config, operations } + +export type KiboCommerceProvider = typeof provider +export type KiboCommerceAPI< + P extends KiboCommerceProvider = KiboCommerceProvider + > = CommerceAPI<P | any> + +export function getCommerceApi<P extends KiboCommerceProvider>( + customProvider: P = provider as any +): KiboCommerceAPI<P> { + return commerceApi(customProvider as any) +} diff --git a/framework/kibocommerce/api/mutations/addItemToWishlist-mutation.ts b/framework/kibocommerce/api/mutations/addItemToWishlist-mutation.ts new file mode 100644 index 000000000..f9088b0bb --- /dev/null +++ b/framework/kibocommerce/api/mutations/addItemToWishlist-mutation.ts @@ -0,0 +1,21 @@ +import {productDetails} from '../fragments/productDetails' +const addItemToWishlistMutation = /* GraphQL */` + mutation createWishlistItem( + $wishlistId: String! + $wishlistItemInput: WishlistItemInput + ) { + createWishlistItem( + wishlistId: $wishlistId + wishlistItemInput: $wishlistItemInput + ) { + id + quantity + product { + ...productDetails + } + } + } +${productDetails} +`; + +export default addItemToWishlistMutation; diff --git a/framework/kibocommerce/api/mutations/addToCart-mutation.ts b/framework/kibocommerce/api/mutations/addToCart-mutation.ts new file mode 100644 index 000000000..7cbf68801 --- /dev/null +++ b/framework/kibocommerce/api/mutations/addToCart-mutation.ts @@ -0,0 +1,12 @@ +import { cartItemDetails } from './../fragments/cartItemDetails' + +const addToCurrentCartMutation = /*GraphQL*/ ` +${cartItemDetails} + +mutation addToCart($productToAdd:CartItemInput!){ + addItemToCurrentCart(cartItemInput: $productToAdd) { + ...cartItemDetails + } +}` + +export default addToCurrentCartMutation diff --git a/framework/kibocommerce/api/mutations/create-wishlist-mutation.ts b/framework/kibocommerce/api/mutations/create-wishlist-mutation.ts new file mode 100644 index 000000000..66ad88309 --- /dev/null +++ b/framework/kibocommerce/api/mutations/create-wishlist-mutation.ts @@ -0,0 +1,11 @@ +const createWishlist = /*GraphQL*/` +mutation createWishlist($wishlistInput:WishlistInput!) { + createWishlist(wishlistInput:$wishlistInput){ + id + name + customerAccountId + } + } +`; + +export default createWishlist; \ No newline at end of file diff --git a/framework/kibocommerce/api/mutations/login-mutation.ts b/framework/kibocommerce/api/mutations/login-mutation.ts new file mode 100644 index 000000000..730adeda1 --- /dev/null +++ b/framework/kibocommerce/api/mutations/login-mutation.ts @@ -0,0 +1,20 @@ + +export const loginMutation = /* GraphQL */` +mutation login($loginInput:CustomerUserAuthInfoInput!) { + account:createCustomerAuthTicket(customerUserAuthInfoInput:$loginInput) { + accessToken + userId + refreshToken + refreshTokenExpiration + accessTokenExpiration + customerAccount { + id + firstName + lastName + emailAddress + userName + } + } + } +` + diff --git a/framework/kibocommerce/api/mutations/removeItemFromCart-mutation.ts b/framework/kibocommerce/api/mutations/removeItemFromCart-mutation.ts new file mode 100644 index 000000000..3cf5c5af5 --- /dev/null +++ b/framework/kibocommerce/api/mutations/removeItemFromCart-mutation.ts @@ -0,0 +1,9 @@ +/* +* Delete cart based on current user session +*/ +const removeItemFromCartMutation = /*GraphQL*/` +mutation deleteCartItem($id: String!) { + deleteCurrentCartItem(cartItemId:$id) +}`; + +export default removeItemFromCartMutation; diff --git a/framework/kibocommerce/api/mutations/removeItemFromWishlist-mutation.ts b/framework/kibocommerce/api/mutations/removeItemFromWishlist-mutation.ts new file mode 100644 index 000000000..ce3d994a5 --- /dev/null +++ b/framework/kibocommerce/api/mutations/removeItemFromWishlist-mutation.ts @@ -0,0 +1,8 @@ +const removeItemFromWishlistMutation = /* GraphQL */` +mutation deletewishlistitem($wishlistId: String!, $wishlistItemId: String!) { + deleteWishlistItem(wishlistId: $wishlistId, wishlistItemId:$wishlistItemId) + } +`; + +export default removeItemFromWishlistMutation; + diff --git a/framework/kibocommerce/api/mutations/signup-mutation.ts b/framework/kibocommerce/api/mutations/signup-mutation.ts new file mode 100644 index 000000000..bb25534ab --- /dev/null +++ b/framework/kibocommerce/api/mutations/signup-mutation.ts @@ -0,0 +1,41 @@ + +const registerUserMutation = /* GraphQL */` +mutation registerUser($customerAccountInput: CustomerAccountInput!) { + account:createCustomerAccount(customerAccountInput:$customerAccountInput) { + emailAddress + userName + firstName + lastName + localeCode + userId + id + isAnonymous + attributes { + values + fullyQualifiedName + } + } +}`; + +const registerUserLoginMutation = /* GraphQL */` +mutation registerUserLogin($accountId: Int!, $customerLoginInfoInput: CustomerLoginInfoInput!) { + account:createCustomerAccountLogin(accountId:$accountId, customerLoginInfoInput:$customerLoginInfoInput) { + accessToken + accessTokenExpiration + refreshToken + refreshTokenExpiration + userId + customerAccount { + id + emailAddress + firstName + userName + } + } +}`; + +export { + registerUserMutation, + registerUserLoginMutation +}; + diff --git a/framework/kibocommerce/api/mutations/updateCartItemQuantity-mutation.ts b/framework/kibocommerce/api/mutations/updateCartItemQuantity-mutation.ts new file mode 100644 index 000000000..7b2cd5c82 --- /dev/null +++ b/framework/kibocommerce/api/mutations/updateCartItemQuantity-mutation.ts @@ -0,0 +1,9 @@ +const updateCartItemQuantityMutation = /*GraphQL*/` +mutation updateCartItemQuantity($itemId:String!, $quantity: Int!){ + updateCurrentCartItemQuantity(cartItemId:$itemId, quantity:$quantity){ + id + quantity + } +}`; + +export default updateCartItemQuantityMutation; diff --git a/framework/kibocommerce/api/operations/get-all-pages.ts b/framework/kibocommerce/api/operations/get-all-pages.ts new file mode 100644 index 000000000..6bc0e4a8c --- /dev/null +++ b/framework/kibocommerce/api/operations/get-all-pages.ts @@ -0,0 +1,38 @@ +import type { OperationContext } from '@commerce/api/operations' +import type { KiboCommerceConfig } from '../index' +import { getAllPagesQuery } from '../queries/get-all-pages-query' +import { GetPagesQueryParams } from "../../types/page"; +import { normalizePage } from '../../lib/normalize' + +export type GetAllPagesResult< + T extends { pages: any[] } = { pages: any[] } + > = T + +export default function getAllPagesOperation({ + commerce, +}: OperationContext<any>) { + + async function getAllPages({ + query = getAllPagesQuery, + config, + variables, + }: { + url?: string + config?: Partial<KiboCommerceConfig> + variables?: GetPagesQueryParams + preview?: boolean + query?: string + } = {}): Promise<GetAllPagesResult> { + const cfg = commerce.getConfig(config) + variables = { + documentListName: cfg.documentListName + } + const { data } = await cfg.fetch(query, { variables }); + + const pages = data.documentListDocuments.items.map(normalizePage); + + return { pages } + } + + return getAllPages +} \ No newline at end of file diff --git a/framework/kibocommerce/api/operations/get-all-product-paths.ts b/framework/kibocommerce/api/operations/get-all-product-paths.ts new file mode 100644 index 000000000..3067b67fc --- /dev/null +++ b/framework/kibocommerce/api/operations/get-all-product-paths.ts @@ -0,0 +1,26 @@ +import { KiboCommerceConfig } from '../index' +import { getAllProductsQuery } from '../queries/get-all-products-query'; +import { normalizeProduct } from '../../lib/normalize' + +export type GetAllProductPathsResult = { + products: Array<{ path: string }> +} + +export default function getAllProductPathsOperation({commerce,}: any) { + async function getAllProductPaths({ config }: {config?: KiboCommerceConfig } = {}): Promise<GetAllProductPathsResult> { + + const cfg = commerce.getConfig(config) + + const productVariables = {startIndex: 0, pageSize: 100}; + const { data } = await cfg.fetch(getAllProductsQuery, { variables: productVariables }); + + const normalizedProducts = data.products.items ? data.products.items.map( (item:any) => normalizeProduct(item, cfg)) : []; + const products = normalizedProducts.map((product: any) => ({ path: product.path })) + + return Promise.resolve({ + products: products + }) + } + + return getAllProductPaths +} diff --git a/framework/kibocommerce/api/operations/get-all-products.ts b/framework/kibocommerce/api/operations/get-all-products.ts new file mode 100644 index 000000000..c60b88f4e --- /dev/null +++ b/framework/kibocommerce/api/operations/get-all-products.ts @@ -0,0 +1,32 @@ +import { Product } from '@commerce/types/product' +import { GetAllProductsOperation } from '@commerce/types/product' +import type { OperationContext } from '@commerce/api/operations' +import type { KiboCommerceConfig } from '../index' +import { getAllProductsQuery } from '../queries/get-all-products-query'; +import { normalizeProduct } from '../../lib/normalize' + +export default function getAllProductsOperation({ + commerce, +}: OperationContext<any>) { + async function getAllProducts<T extends GetAllProductsOperation>({ + query = getAllProductsQuery, + variables, + config, + }: { + query?: string + variables?: T['variables'] + config?: Partial<KiboCommerceConfig> + preview?: boolean + } = {}): Promise<{ products: Product[] | any[] }> { + + const cfg = commerce.getConfig(config) + const { data } = await cfg.fetch(query); + + let normalizedProducts = data.products.items ? data.products.items.map( (item:any) => normalizeProduct(item, cfg)) : []; + + return { + products: normalizedProducts, + } + } + return getAllProducts +} diff --git a/framework/kibocommerce/api/operations/get-customer-wishlist.ts b/framework/kibocommerce/api/operations/get-customer-wishlist.ts new file mode 100644 index 000000000..a2a60e9ae --- /dev/null +++ b/framework/kibocommerce/api/operations/get-customer-wishlist.ts @@ -0,0 +1,57 @@ +import type { + OperationContext, + OperationOptions, +} from '@commerce/api/operations' +import type { + GetCustomerWishlistOperation, + Wishlist, +} from '@commerce/types/wishlist' +// import type { RecursivePartial, RecursiveRequired } from '../utils/types' +import { KiboCommerceConfig } from '..' +// import getAllProducts, { ProductEdge } from './get-all-products' +import {getCustomerWishlistQuery} from '../queries/get-customer-wishlist-query' + +export default function getCustomerWishlistOperation({ + commerce, +}: OperationContext<any>) { + async function getCustomerWishlist< + T extends GetCustomerWishlistOperation + >(opts: { + variables: T['variables'] + config?: KiboCommerceConfig + includeProducts?: boolean + }): Promise<T['data']> + + async function getCustomerWishlist<T extends GetCustomerWishlistOperation>( + opts: { + variables: T['variables'] + config?: KiboCommerceConfig + includeProducts?: boolean + } & OperationOptions + ): Promise<T['data']> + + async function getCustomerWishlist<T extends GetCustomerWishlistOperation>({ + config, + variables, + includeProducts, + }: { + url?: string + variables: T['variables'] + config?: KiboCommerceConfig + includeProducts?: boolean + }): Promise<T['data']> { + let customerWishlist ={} + try { + + config = commerce.getConfig(config) + const result= await config?.fetch(getCustomerWishlistQuery,{variables}) + customerWishlist= result?.data?.customerWishlist; + } catch(e) { + customerWishlist= {} + } + + return { wishlist: customerWishlist as any } + } + + return getCustomerWishlist +} diff --git a/framework/kibocommerce/api/operations/get-page.ts b/framework/kibocommerce/api/operations/get-page.ts new file mode 100644 index 000000000..8cfccb7db --- /dev/null +++ b/framework/kibocommerce/api/operations/get-page.ts @@ -0,0 +1,40 @@ +import type { + OperationContext, +} from '@commerce/api/operations' +import type { KiboCommerceConfig, KiboCommerceProvider } from '..' +import { normalizePage } from '../../lib/normalize' +import { getPageQuery } from '../queries/get-page-query' +import type { Page, GetPageQueryParams } from "../../types/page"; +import type { Document } from '../../schema' + +export default function getPageOperation({ + commerce, +}: OperationContext<any>) { + async function getPage<T extends Page>({ + url, + variables, + config, + preview, + }: { + url?: string + variables: GetPageQueryParams + config?: Partial<KiboCommerceConfig> + preview?: boolean + }): Promise<any> { + // RecursivePartial forces the method to check for every prop in the data, which is + // required in case there's a custom `url` + const cfg = commerce.getConfig(config) + const pageVariables = { documentListName: cfg.documentListName, filter: `id eq ${variables.id}` } + + const { data } = await cfg.fetch(getPageQuery, { variables: pageVariables }) + + const firstPage = data.documentListDocuments.items?.[0]; + const page = firstPage as Document + if (preview || page?.properties?.is_visible) { + return { page: normalizePage(page as any) } + } + return {} + } + + return getPage +} \ No newline at end of file diff --git a/framework/kibocommerce/api/operations/get-product.ts b/framework/kibocommerce/api/operations/get-product.ts new file mode 100644 index 000000000..a3acf44d9 --- /dev/null +++ b/framework/kibocommerce/api/operations/get-product.ts @@ -0,0 +1,35 @@ +import type { KiboCommerceConfig } from '../index' +import { Product } from '@commerce/types/product' +import { GetProductOperation } from '@commerce/types/product' +import type { OperationContext } from '@commerce/api/operations' +import { getProductQuery } from '../queries/get-product-query' +import { normalizeProduct } from '../../lib/normalize' + +export default function getProductOperation({ + commerce, +}: OperationContext<any>) { + + async function getProduct<T extends GetProductOperation>({ + query = getProductQuery, + variables, + config, + }: { + query?: string + variables?: T['variables'] + config?: Partial<KiboCommerceConfig> + preview?: boolean + } = {}): Promise<Product | {} | any> { + const productVariables = { productCode: variables?.slug} + + const cfg = commerce.getConfig(config) + const { data } = await cfg.fetch(query, { variables: productVariables }); + + const normalizedProduct = normalizeProduct(data.product, cfg) + + return { + product: normalizedProduct + } + } + + return getProduct +} diff --git a/framework/kibocommerce/api/operations/get-site-info.ts b/framework/kibocommerce/api/operations/get-site-info.ts new file mode 100644 index 000000000..1bd0ddf63 --- /dev/null +++ b/framework/kibocommerce/api/operations/get-site-info.ts @@ -0,0 +1,35 @@ +import { OperationContext } from '@commerce/api/operations' +import { Category } from '@commerce/types/site' +import { KiboCommerceConfig } from '../index' +import {categoryTreeQuery} from '../queries/get-categories-tree-query' +import { normalizeCategory } from '../../lib/normalize' + +export type GetSiteInfoResult< + T extends { categories: any[]; brands: any[] } = { + categories: Category[] + brands: any[] + } +> = T + +export default function getSiteInfoOperation({commerce}: OperationContext<any>) { + async function getSiteInfo({ + query= categoryTreeQuery, + variables, + config, + }: { + query?: string + variables?: any + config?: Partial<KiboCommerceConfig> + preview?: boolean + } = {}): Promise<GetSiteInfoResult> { + const cfg = commerce.getConfig(config) + const { data } = await cfg.fetch(query); + const categories= data.categories.items.map(normalizeCategory); + return Promise.resolve({ + categories: categories ?? [], + brands: [], + }) + } + + return getSiteInfo +} diff --git a/framework/kibocommerce/api/operations/index.ts b/framework/kibocommerce/api/operations/index.ts new file mode 100644 index 000000000..086fdf83a --- /dev/null +++ b/framework/kibocommerce/api/operations/index.ts @@ -0,0 +1,6 @@ +export { default as getPage } from './get-page' +export { default as getSiteInfo } from './get-site-info' +export { default as getAllPages } from './get-all-pages' +export { default as getProduct } from './get-product' +export { default as getAllProducts } from './get-all-products' +export { default as getAllProductPaths } from './get-all-product-paths' diff --git a/framework/kibocommerce/api/queries/get-all-pages-query.ts b/framework/kibocommerce/api/queries/get-all-pages-query.ts new file mode 100644 index 000000000..6926914f5 --- /dev/null +++ b/framework/kibocommerce/api/queries/get-all-pages-query.ts @@ -0,0 +1,11 @@ +export const getAllPagesQuery = /* GraphQL */` +query($documentListName: String!) { + documentListDocuments(documentListName:$documentListName){ + items { + id + name + listFQN + properties + } + } + }`; \ No newline at end of file diff --git a/framework/kibocommerce/api/queries/get-all-products-query.ts b/framework/kibocommerce/api/queries/get-all-products-query.ts new file mode 100644 index 000000000..3c6599e34 --- /dev/null +++ b/framework/kibocommerce/api/queries/get-all-products-query.ts @@ -0,0 +1,21 @@ +import { productInfo } from '../fragments/product'; + +export const getAllProductsQuery = /* GraphQL */` +${productInfo} + +query products( + $filter: String + $startIndex: Int + $pageSize: Int +) { + products( + filter: $filter + startIndex: $startIndex + pageSize: $pageSize + ) { + items { + ...productInfo + } + } +} +` \ No newline at end of file diff --git a/framework/kibocommerce/api/queries/get-anonymous-shopper-token-query.ts b/framework/kibocommerce/api/queries/get-anonymous-shopper-token-query.ts new file mode 100644 index 000000000..031ffc0ee --- /dev/null +++ b/framework/kibocommerce/api/queries/get-anonymous-shopper-token-query.ts @@ -0,0 +1,11 @@ +export const getAnonymousShopperTokenQuery = /* GraphQL */ ` + query { + getAnonymousShopperToken { + accessToken + accessTokenExpiration + refreshToken + refreshTokenExpiration + jwtAccessToken + } + } +` diff --git a/framework/kibocommerce/api/queries/get-cart-query.ts b/framework/kibocommerce/api/queries/get-cart-query.ts new file mode 100644 index 000000000..5bbf5bbfa --- /dev/null +++ b/framework/kibocommerce/api/queries/get-cart-query.ts @@ -0,0 +1,32 @@ +import { productDetails } from '../fragments/productDetails' +export const getCartQuery = /* GraphQL */` +query cart { + currentCart { + id + userId + orderDiscounts { + impact + discount { + id + name + } + couponCode + } + subtotal + shippingTotal + total + items { + id + subtotal + unitPrice{ + extendedAmount + } + product { + ...productDetails + } + quantity + } + } + } +${productDetails} +` diff --git a/framework/kibocommerce/api/queries/get-categories-tree-query.ts b/framework/kibocommerce/api/queries/get-categories-tree-query.ts new file mode 100644 index 000000000..984833630 --- /dev/null +++ b/framework/kibocommerce/api/queries/get-categories-tree-query.ts @@ -0,0 +1,29 @@ +import { CategoryInfo } from '../fragments/category' + +export const categoryTreeQuery = /* GraphQL */` +query GetCategoryTree { + categories: categoriesTree { + items { + ...categoryInfo + childrenCategories { + ...categoryInfo + childrenCategories { + ...categoryInfo + childrenCategories { + ...categoryInfo + childrenCategories { + ...categoryInfo + childrenCategories { + ...categoryInfo + childrenCategories { + ...categoryInfo + } + } + } + } + } + } + } + } +} +${CategoryInfo}`; \ No newline at end of file diff --git a/framework/kibocommerce/api/queries/get-customer-account-query.ts b/framework/kibocommerce/api/queries/get-customer-account-query.ts new file mode 100644 index 000000000..9528b8467 --- /dev/null +++ b/framework/kibocommerce/api/queries/get-customer-account-query.ts @@ -0,0 +1,12 @@ +export const getCustomerAccountQuery = /* GraphQL */` +query getUser { + customerAccount:getCurrentAccount { + id + firstName + lastName + emailAddress + userName + isAnonymous + } +} +` \ No newline at end of file diff --git a/framework/kibocommerce/api/queries/get-customer-wishlist-query.ts b/framework/kibocommerce/api/queries/get-customer-wishlist-query.ts new file mode 100644 index 000000000..d2ae3edec --- /dev/null +++ b/framework/kibocommerce/api/queries/get-customer-wishlist-query.ts @@ -0,0 +1,25 @@ +import {productDetails} from '../fragments/productDetails' +export const getCustomerWishlistQuery= /* GraphQL */` +query wishlist($customerId: Int!, $wishlistName: String!) { + customerWishlist(customerAccountId:$customerId ,wishlistName: $wishlistName){ + customerAccountId + name + id + userId + items { + id + quantity + total + subtotal + unitPrice{ + extendedAmount + } + quantity + product { + ...productDetails + } + } + } + } +${productDetails} +` \ No newline at end of file diff --git a/framework/kibocommerce/api/queries/get-page-query.ts b/framework/kibocommerce/api/queries/get-page-query.ts new file mode 100644 index 000000000..69371d003 --- /dev/null +++ b/framework/kibocommerce/api/queries/get-page-query.ts @@ -0,0 +1,14 @@ +export const getPageQuery = /* GraphQL */` +query($documentListName: String!, $filter: String!) { + documentListDocuments(documentListName: $documentListName, filter: $filter){ + startIndex + totalCount + items { + id + name + listFQN + properties + } + } + } +`; \ No newline at end of file diff --git a/framework/kibocommerce/api/queries/get-product-query.ts b/framework/kibocommerce/api/queries/get-product-query.ts new file mode 100644 index 000000000..47db311e4 --- /dev/null +++ b/framework/kibocommerce/api/queries/get-product-query.ts @@ -0,0 +1,15 @@ +import { productInfo } from '../fragments/product'; + +export const getProductQuery = /* GraphQL */` +${productInfo} + + query product( + $productCode: String! + ) { + product( + productCode: $productCode + ) { + ...productInfo + } + } +` \ No newline at end of file diff --git a/framework/kibocommerce/api/queries/product-search-query.ts b/framework/kibocommerce/api/queries/product-search-query.ts new file mode 100644 index 000000000..d22f0ef12 --- /dev/null +++ b/framework/kibocommerce/api/queries/product-search-query.ts @@ -0,0 +1,20 @@ +import { searchResults } from '../fragments/search' + +const query = /* GraphQL */` +query ProductSearch($query:String, $startIndex:Int, + $pageSize:Int, $sortBy:String, $filter:String,$facetTemplate:String,$facetValueFilter:String ) { + products:productSearch ( + query:$query, + startIndex: $startIndex, + pageSize:$pageSize, + sortBy: $sortBy, + filter:$filter, + facetTemplate:$facetTemplate, + facetValueFilter:$facetValueFilter + ) { + ...searchResults + } + } + ${searchResults} +`; +export default query; diff --git a/framework/kibocommerce/api/utils/api-auth-helper.ts b/framework/kibocommerce/api/utils/api-auth-helper.ts new file mode 100644 index 000000000..cc4c0acf0 --- /dev/null +++ b/framework/kibocommerce/api/utils/api-auth-helper.ts @@ -0,0 +1,110 @@ +import getNextConfig from 'next/config' +import type { KiboCommerceConfig } from '../index' +import type { FetchOptions } from '@vercel/fetch' +import fetch from './fetch' + +interface AppAuthTicket { + access_token: string + token_type: string + expires_in: number + expires_at: number + refresh_token: string | null +} + +interface AuthTicketCache { + getAuthTicket: () => Promise<AppAuthTicket> + setAuthTicket: (kiboAuthTicket: AppAuthTicket) => void +} + +class RuntimeMemCache implements AuthTicketCache { + constructor() {} + async getAuthTicket() { + const { serverRuntimeConfig } = getNextConfig() + return serverRuntimeConfig.kiboAuthTicket + } + setAuthTicket(kiboAuthTicket: AppAuthTicket) { + const { serverRuntimeConfig } = getNextConfig() + serverRuntimeConfig.kiboAuthTicket = kiboAuthTicket + } +} + +export class APIAuthenticationHelper { + private _clientId: string + private _sharedSecret: string + private _authUrl: string + private _authTicketCache!: AuthTicketCache + + constructor( + { clientId = '', sharedSecret = '', authUrl = '' }: KiboCommerceConfig, + authTicketCache?: AuthTicketCache + ) { + this._clientId = clientId + this._sharedSecret = sharedSecret + this._authUrl = authUrl + if(!authTicketCache) { + this._authTicketCache = new RuntimeMemCache(); + } + } + private _buildFetchOptions(body: any = {}): FetchOptions { + return { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(body), + } + } + private _calculateTicketExpiration(kiboAuthTicket: AppAuthTicket) { + //calculate how many milliseconds until auth expires + const millisecsUntilExpiration = kiboAuthTicket.expires_in * 1000 + kiboAuthTicket.expires_at = Date.now() + millisecsUntilExpiration + + return kiboAuthTicket + } + public async authenticate(): Promise<AppAuthTicket> { + // create oauth fetch options + const options = this._buildFetchOptions({ + client_id: this._clientId, + client_secret: this._sharedSecret, + grant_type: 'client_credentials', + }) + // perform authentication + const authTicket = await fetch( + `${this._authUrl}/api/platform/applications/authtickets/oauth`, + options + ).then((response) => response.json()) + // set expiration time in ms on auth ticket + this._calculateTicketExpiration(authTicket) + // set authentication ticket on next server runtime object + this._authTicketCache.setAuthTicket(authTicket) + + return authTicket + } + public async refreshTicket(kiboAuthTicket: AppAuthTicket) { + // create oauth refresh fetch options + const options = this._buildFetchOptions({ + refreshToken: kiboAuthTicket?.refresh_token, + }) + // perform auth ticket refresh + const refreshedTicket = await fetch( + `${this._authUrl}/api/platform/applications/authtickets/refresh-ticket`, + options + ).then((response) => response.json()) + + return refreshedTicket + } + public async getAccessToken(): Promise<string> { + // get current Kibo API auth ticket + let authTicket = await this._authTicketCache.getAuthTicket() + + // if no current ticket, perform auth + // or if ticket expired, refresh auth + if (!authTicket) { + authTicket = await this.authenticate() + } else if (authTicket.expires_at < Date.now()) { + authTicket = await this.refreshTicket(authTicket) + } + + return authTicket.access_token + } +} diff --git a/framework/kibocommerce/api/utils/cookie-handler.ts b/framework/kibocommerce/api/utils/cookie-handler.ts new file mode 100644 index 000000000..b4c950fea --- /dev/null +++ b/framework/kibocommerce/api/utils/cookie-handler.ts @@ -0,0 +1,61 @@ +import { KiboCommerceConfig } from './../index' +import { getCookieExpirationDate } from '../../lib/get-cookie-expiration-date' +import { prepareSetCookie } from '../../lib/prepare-set-cookie' +import { setCookies } from '../../lib/set-cookie' +import { NextApiRequest } from 'next' +import getAnonymousShopperToken from './get-anonymous-shopper-token' + +const parseCookie = (cookieValue?: any) => { + return cookieValue + ? JSON.parse(Buffer.from(cookieValue, 'base64').toString('ascii')) + : null +} +export default class CookieHandler { + config: KiboCommerceConfig + request: NextApiRequest + response: any + accessToken: any + constructor(config: any, req: NextApiRequest, res: any) { + this.config = config + this.request = req + this.response = res + const encodedToken = req.cookies[config.customerCookie] + const token = parseCookie(encodedToken) + this.accessToken = token ? token.accessToken : null + } + + async getAnonymousToken() { + const response: any = await getAnonymousShopperToken({ + config: this.config, + }) + let anonymousAccessToken = response?.accessToken + return { + response, + accessToken: anonymousAccessToken, + } + } + isShopperCookieAnonymous() { + const customerCookieKey = this.config.customerCookie + const shopperCookie = this.request.cookies[customerCookieKey] + const shopperSession = parseCookie(shopperCookie); + const isAnonymous = shopperSession?.customerAccount ? false : true + return isAnonymous + } + setAnonymousShopperCookie(anonymousShopperTokenResponse: any) { + const cookieExpirationDate = getCookieExpirationDate( + this.config.customerCookieMaxAgeInDays + ) + + const authCookie = prepareSetCookie( + this.config.customerCookie, + JSON.stringify(anonymousShopperTokenResponse), + anonymousShopperTokenResponse?.accessTokenExpiration + ? { expires: cookieExpirationDate } + : {} + ) + setCookies(this.response, [authCookie]) + } + getAccessToken() { + return this.accessToken + } +} diff --git a/framework/kibocommerce/api/utils/fetch-graphql-api.ts b/framework/kibocommerce/api/utils/fetch-graphql-api.ts new file mode 100644 index 000000000..8638b35b7 --- /dev/null +++ b/framework/kibocommerce/api/utils/fetch-graphql-api.ts @@ -0,0 +1,43 @@ +import { FetcherError } from '@commerce/utils/errors' +import type { GraphQLFetcher } from '@commerce/api' +import type { KiboCommerceConfig } from '../index' +import fetch from './fetch' +import { APIAuthenticationHelper } from './api-auth-helper'; + +const fetchGraphqlApi: ( + getConfig: () => KiboCommerceConfig +) => GraphQLFetcher = (getConfig) => async ( + query: string, + { variables, preview } = {}, + fetchOptions +) => { + const config = getConfig() + const authHelper = new APIAuthenticationHelper(config); + const apiToken = await authHelper.getAccessToken(); + const res = await fetch(config.commerceUrl + (preview ? '/preview' : ''), { + ...fetchOptions, + method: 'POST', + headers: { + ...fetchOptions?.headers, + Authorization: `Bearer ${apiToken}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + query, + variables, + }), + }) + + const json = await res.json() + if (json.errors) { + console.warn(`Kibo API Request Correlation ID: ${res.headers.get('x-vol-correlation')}`); + throw new FetcherError({ + errors: json.errors ?? [{ message: 'Failed to fetch KiboCommerce API' }], + status: res.status, + }) + } + + return { data: json.data, res } +} + +export default fetchGraphqlApi diff --git a/framework/kibocommerce/api/utils/fetch-local.ts b/framework/kibocommerce/api/utils/fetch-local.ts new file mode 100644 index 000000000..2612188a9 --- /dev/null +++ b/framework/kibocommerce/api/utils/fetch-local.ts @@ -0,0 +1,36 @@ +import { FetcherError } from '@commerce/utils/errors' +import type { GraphQLFetcher } from '@commerce/api' +import type { KiboCommerceConfig } from '../index' +import fetch from './fetch' + +const fetchGraphqlApi: (getConfig: () => KiboCommerceConfig) => GraphQLFetcher = + (getConfig) => + async (query: string, { variables, preview } = {}, fetchOptions) => { + const config = getConfig() + const res = await fetch(config.commerceUrl, { + //const res = await fetch(config.commerceUrl + (preview ? '/preview' : ''), { + ...fetchOptions, + method: 'POST', + headers: { + Authorization: `Bearer ${config.apiToken}`, + ...fetchOptions?.headers, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + query, + variables, + }), + }) + + const json = await res.json() + if (json.errors) { + throw new FetcherError({ + errors: json.errors ?? [{ message: 'Failed to fetch KiboCommerce API' }], + status: res.status, + }) + } + + return { data: json.data, res } + } + +export default fetchGraphqlApi diff --git a/framework/kibocommerce/api/utils/fetch.ts b/framework/kibocommerce/api/utils/fetch.ts new file mode 100644 index 000000000..9d9fff3ed --- /dev/null +++ b/framework/kibocommerce/api/utils/fetch.ts @@ -0,0 +1,3 @@ +import zeitFetch from '@vercel/fetch' + +export default zeitFetch() diff --git a/framework/kibocommerce/api/utils/get-anonymous-shopper-token.ts b/framework/kibocommerce/api/utils/get-anonymous-shopper-token.ts new file mode 100644 index 000000000..9325a4ecd --- /dev/null +++ b/framework/kibocommerce/api/utils/get-anonymous-shopper-token.ts @@ -0,0 +1,13 @@ +import type { KiboCommerceConfig } from '../' +import { getAnonymousShopperTokenQuery } from '../queries/get-anonymous-shopper-token-query' + +async function getAnonymousShopperToken({ + config, +}: { + config: KiboCommerceConfig +}): Promise<string | undefined> { + const { data } = await config.fetch(getAnonymousShopperTokenQuery) + return data?.getAnonymousShopperToken +} + +export default getAnonymousShopperToken diff --git a/framework/kibocommerce/api/utils/get-customer-id.ts b/framework/kibocommerce/api/utils/get-customer-id.ts new file mode 100644 index 000000000..5ba3d7787 --- /dev/null +++ b/framework/kibocommerce/api/utils/get-customer-id.ts @@ -0,0 +1,26 @@ +import type { KiboCommerceConfig } from '..' +import { getCustomerAccountQuery } from '../queries/get-customer-account-query' + +async function getCustomerId({ + customerToken, + config, +}: { + customerToken: string + config: KiboCommerceConfig +}): Promise<string | undefined> { + const token = customerToken ? Buffer.from(customerToken, 'base64').toString('ascii'): null; + const accessToken = token ? JSON.parse(token).accessToken : null; + const { data } = await config.fetch( + getCustomerAccountQuery, + undefined, + { + headers: { + 'x-vol-user-claims': accessToken, + }, + } + ) + + return data?.customerAccount?.id +} + +export default getCustomerId diff --git a/framework/kibocommerce/auth/index.ts b/framework/kibocommerce/auth/index.ts new file mode 100644 index 000000000..36e757a89 --- /dev/null +++ b/framework/kibocommerce/auth/index.ts @@ -0,0 +1,3 @@ +export { default as useLogin } from './use-login' +export { default as useLogout } from './use-logout' +export { default as useSignup } from './use-signup' diff --git a/framework/kibocommerce/auth/use-login.tsx b/framework/kibocommerce/auth/use-login.tsx new file mode 100644 index 000000000..672263f7c --- /dev/null +++ b/framework/kibocommerce/auth/use-login.tsx @@ -0,0 +1,42 @@ +import { MutationHook } from '@commerce/utils/types' +import useLogin, { UseLogin } from '@commerce/auth/use-login' + +import { useCallback } from 'react' +import { CommerceError } from '@commerce/utils/errors' +import type { LoginHook } from '../types/login' +import useCustomer from '../customer/use-customer' +import useCart from '../cart/use-cart' +export default useLogin as UseLogin<typeof handler> + +export const handler: MutationHook<LoginHook> = { + fetchOptions: { + url: '/api/login', + method: 'POST' + }, + async fetcher({ input: { email, password }, options, fetch }) { + if (!(email && password)) { + throw new CommerceError({ + message: + 'An email and password are required to login', + }) + } + + return fetch({ + ...options, + body: { email, password }, + }) + }, + useHook: ({ fetch }) => () => { + const { revalidate } = useCustomer() + const {revalidate: revalidateCart} = useCart() + return useCallback( + async function login(input) { + const data = await fetch({ input }) + await revalidate() + await revalidateCart() + return data + }, + [fetch, revalidate, revalidateCart] + ) + }, +} diff --git a/framework/kibocommerce/auth/use-logout.tsx b/framework/kibocommerce/auth/use-logout.tsx new file mode 100644 index 000000000..3e344fb09 --- /dev/null +++ b/framework/kibocommerce/auth/use-logout.tsx @@ -0,0 +1,29 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import useLogout, { UseLogout } from '@commerce/auth/use-logout' +import type { LogoutHook } from '../types/logout' +import useCustomer from '../customer/use-customer' +import useCart from '../cart/use-cart' + +export default useLogout as UseLogout<typeof handler> + +export const handler: MutationHook<LogoutHook> = { + fetchOptions: { + url: '/api/logout', + method: 'GET', + }, + useHook: ({ fetch }) => () => { + const { mutate } = useCustomer() + const { mutate: mutateCart } = useCart() + + return useCallback( + async function logout() { + const data = await fetch() + await mutate(null, false) + await mutateCart(null, false) + return data + }, + [fetch, mutate, mutateCart] + ) + }, +} diff --git a/framework/kibocommerce/auth/use-signup.tsx b/framework/kibocommerce/auth/use-signup.tsx new file mode 100644 index 000000000..da06fd3eb --- /dev/null +++ b/framework/kibocommerce/auth/use-signup.tsx @@ -0,0 +1,44 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import { CommerceError } from '@commerce/utils/errors' +import useSignup, { UseSignup } from '@commerce/auth/use-signup' +import type { SignupHook } from '../types/signup' +import useCustomer from '../customer/use-customer' + +export default useSignup as UseSignup<typeof handler> + +export const handler: MutationHook<SignupHook> = { + fetchOptions: { + url: '/api/signup', + method: 'POST', + }, + async fetcher({ + input: { firstName, lastName, email, password }, + options, + fetch, + }) { + if (!(firstName && lastName && email && password)) { + throw new CommerceError({ + message: + 'A first name, last name, email and password are required to signup', + }) + } + + return fetch({ + ...options, + body: { firstName, lastName, email, password }, + }) + }, + useHook: ({ fetch }) => () => { + const { revalidate } = useCustomer() + + return useCallback( + async function signup(input) { + const data = await fetch({ input }) + await revalidate() + return data + }, + [fetch, revalidate] + ) + }, +} diff --git a/framework/kibocommerce/cart/index.ts b/framework/kibocommerce/cart/index.ts new file mode 100644 index 000000000..3b8ba990e --- /dev/null +++ b/framework/kibocommerce/cart/index.ts @@ -0,0 +1,4 @@ +export { default as useCart } from './use-cart' +export { default as useAddItem } from './use-add-item' +export { default as useRemoveItem } from './use-remove-item' +export { default as useUpdateItem } from './use-update-item' diff --git a/framework/kibocommerce/cart/use-add-item.tsx b/framework/kibocommerce/cart/use-add-item.tsx new file mode 100644 index 000000000..1ac6ac6f8 --- /dev/null +++ b/framework/kibocommerce/cart/use-add-item.tsx @@ -0,0 +1,44 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import { CommerceError } from '@commerce/utils/errors' +import useAddItem, { UseAddItem } from '@commerce/cart/use-add-item' +import type { AddItemHook } from '@commerce/types/cart' +import useCart from './use-cart' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<AddItemHook> = { + fetchOptions: { + url: '/api/cart', + method: 'POST', + }, + async fetcher({ input: item, options, fetch }) { + if ( + item.quantity && + (!Number.isInteger(item.quantity) || item.quantity! < 1) + ) { + throw new CommerceError({ + message: 'The item quantity has to be a valid integer greater than 0', + }) + } + + const data = await fetch({ + ...options, + body: { item }, + }) + + return data + }, + useHook: ({ fetch }) => () => { + const { mutate } = useCart() + + return useCallback( + async function addItem(input) { + const data = await fetch({ input }) + await mutate(data, false) + return data + }, + [fetch, mutate] + ) + }, +} diff --git a/framework/kibocommerce/cart/use-cart.tsx b/framework/kibocommerce/cart/use-cart.tsx new file mode 100644 index 000000000..0c565e094 --- /dev/null +++ b/framework/kibocommerce/cart/use-cart.tsx @@ -0,0 +1,33 @@ +import { useMemo } from 'react' +import { SWRHook } from '@commerce/utils/types' +import useCart, { UseCart } from '@commerce/cart/use-cart' + +export default useCart as UseCart<typeof handler> + +export const handler: SWRHook<any> = { + fetchOptions: { + method: 'GET', + url: '/api/cart', + }, + async fetcher({ options, fetch }) { + return await fetch({ ...options }) + }, + useHook: ({ useData }) => (input) => { + const response = useData({ + swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, + }) + + return useMemo( + () => + Object.create(response, { + isEmpty: { + get() { + return (response.data?.lineItems.length ?? 0) <= 0 + }, + enumerable: true, + }, + }), + [response] + ) + }, +} diff --git a/framework/kibocommerce/cart/use-remove-item.tsx b/framework/kibocommerce/cart/use-remove-item.tsx new file mode 100644 index 000000000..1376f29ce --- /dev/null +++ b/framework/kibocommerce/cart/use-remove-item.tsx @@ -0,0 +1,56 @@ +import { useCallback } from 'react' +import type { + MutationHookContext, + HookFetcherContext, +} from '@commerce/utils/types' +import { ValidationError } from '@commerce/utils/errors' +import useRemoveItem, { UseRemoveItem } from '@commerce/cart/use-remove-item' +import type { Cart, LineItem, RemoveItemHook } from '@commerce/types/cart' +import useCart from './use-cart' + +export type RemoveItemFn<T = any> = T extends LineItem + ? (input?: RemoveItemActionInput<T>) => Promise<Cart | null | undefined> + : (input: RemoveItemActionInput<T>) => Promise<Cart | null> + +export type RemoveItemActionInput<T = any> = T extends LineItem + ? Partial<RemoveItemHook['actionInput']> + : RemoveItemHook['actionInput'] + +export default useRemoveItem as UseRemoveItem<typeof handler> + +export const handler = { + fetchOptions: { + url: '/api/cart', + method: 'DELETE', + }, + async fetcher({ + input: { itemId }, + options, + fetch, + }: HookFetcherContext<RemoveItemHook>) { + return await fetch({ ...options, body: { itemId } }) + }, + useHook: ({ fetch }: MutationHookContext<RemoveItemHook>) => < + T extends LineItem | undefined = undefined + >( + ctx: { item?: T } = {} + ) => { + const { item } = ctx + const { mutate } = useCart() + const removeItem: RemoveItemFn<LineItem> = async (input) => { + const itemId = input?.id ?? item?.id + + if (!itemId) { + throw new ValidationError({ + message: 'Invalid input used for this operation', + }) + } + + const data = await fetch({ input: { itemId } }) + await mutate(data, false) + return data + } + + return useCallback(removeItem as RemoveItemFn<T>, [fetch, mutate]) + }, +} diff --git a/framework/kibocommerce/cart/use-update-item.tsx b/framework/kibocommerce/cart/use-update-item.tsx new file mode 100644 index 000000000..0f9f5754d --- /dev/null +++ b/framework/kibocommerce/cart/use-update-item.tsx @@ -0,0 +1,84 @@ +import { useCallback } from 'react' +import debounce from 'lodash.debounce' +import type { + MutationHookContext, + HookFetcherContext, +} from '@commerce/utils/types' +import { ValidationError } from '@commerce/utils/errors' +import useUpdateItem, { UseUpdateItem } from '@commerce/cart/use-update-item' +import type { LineItem, UpdateItemHook } from '@commerce/types/cart' +import { handler as removeItemHandler } from './use-remove-item' +import useCart from './use-cart' + +export type UpdateItemActionInput<T = any> = T extends LineItem + ? Partial<UpdateItemHook['actionInput']> + : UpdateItemHook['actionInput'] + +export default useUpdateItem as UseUpdateItem<typeof handler> + +export const handler = { + fetchOptions: { + url: '/api/cart', + method: 'PUT', + }, + async fetcher({ + input: { itemId, item }, + options, + fetch, + }: HookFetcherContext<UpdateItemHook>) { + if (Number.isInteger(item.quantity)) { + // Also allow the update hook to remove an item if the quantity is lower than 1 + if (item.quantity! < 1) { + return removeItemHandler.fetcher({ + options: removeItemHandler.fetchOptions, + input: { itemId }, + fetch, + }) + } + } else if (item.quantity) { + throw new ValidationError({ + message: 'The item quantity has to be a valid integer', + }) + } + + return await fetch({ + ...options, + body: { itemId, item }, + }) + }, + useHook: ({ fetch }: MutationHookContext<UpdateItemHook>) => < + T extends LineItem | undefined = undefined + >( + ctx: { + item?: T + wait?: number + } = {} + ) => { + const { item } = ctx + const { mutate } = useCart() as any + + return useCallback( + debounce(async (input: UpdateItemActionInput<T>) => { + const itemId = input.id ?? item?.id + const productId = input.productId ?? item?.productId + const variantId = input.productId ?? item?.variantId + + if (!itemId || !productId || !variantId) { + throw new ValidationError({ + message: 'Invalid input used for this operation', + }) + } + + const data = await fetch({ + input: { + itemId, + item: { productId, variantId, quantity: input.quantity }, + }, + }) + await mutate(data, false) + return data + }, ctx.wait ?? 500), + [fetch, mutate] + ) + }, +} diff --git a/framework/kibocommerce/checkout/use-checkout.tsx b/framework/kibocommerce/checkout/use-checkout.tsx new file mode 100644 index 000000000..8ba12c14a --- /dev/null +++ b/framework/kibocommerce/checkout/use-checkout.tsx @@ -0,0 +1,14 @@ +import { SWRHook } from '@commerce/utils/types' +import useCheckout, { UseCheckout } from '@commerce/checkout/use-checkout' + +export default useCheckout as UseCheckout<typeof handler> + +export const handler: SWRHook<any> = { + fetchOptions: { + query: '', + }, + async fetcher({ input, options, fetch }) {}, + useHook: + ({ useData }) => + async (input) => ({}), +} \ No newline at end of file diff --git a/framework/kibocommerce/codegen.json b/framework/kibocommerce/codegen.json new file mode 100644 index 000000000..cf25363ed --- /dev/null +++ b/framework/kibocommerce/codegen.json @@ -0,0 +1,23 @@ +{ + "schema": { + "https://t17194-s21127.dev10.kubedev.kibo-dev.com/graphql": {} + }, + + "generates": { + "./framework/kibocommerce/schema.d.ts": { + "plugins": ["typescript", "typescript-operations"], + "config": { + "scalars": { + "ID": "string" + } + } + }, + "./framework/kibocommerce/schema.graphql": { + "plugins": ["schema-ast"] + } + }, + "hooks": { + "afterAllFileWrite": ["prettier --write"] + } + } + \ No newline at end of file diff --git a/framework/kibocommerce/commerce.config.json b/framework/kibocommerce/commerce.config.json new file mode 100644 index 000000000..cd58f1e29 --- /dev/null +++ b/framework/kibocommerce/commerce.config.json @@ -0,0 +1,9 @@ +{ + "provider": "kibocommerce", + "features": { + "wishlist": true, + "cart": true, + "search": true, + "customerAuth": true + } +} \ No newline at end of file diff --git a/framework/kibocommerce/customer/address/use-add-item.tsx b/framework/kibocommerce/customer/address/use-add-item.tsx new file mode 100644 index 000000000..70bd044b2 --- /dev/null +++ b/framework/kibocommerce/customer/address/use-add-item.tsx @@ -0,0 +1,15 @@ +import useAddItem, { UseAddItem } from '@commerce/customer/address/use-add-item' +import { MutationHook } from '@commerce/utils/types' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<any> = { + fetchOptions: { + query: '', + }, + async fetcher({ input, options, fetch }) {}, + useHook: + ({ fetch }) => + () => + async () => ({}), +} \ No newline at end of file diff --git a/framework/kibocommerce/customer/card/use-add-item.tsx b/framework/kibocommerce/customer/card/use-add-item.tsx new file mode 100644 index 000000000..d6bd0d77f --- /dev/null +++ b/framework/kibocommerce/customer/card/use-add-item.tsx @@ -0,0 +1,15 @@ +import useAddItem, { UseAddItem } from '@commerce/customer/card/use-add-item' +import { MutationHook } from '@commerce/utils/types' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<any> = { + fetchOptions: { + query: '', + }, + async fetcher({ input, options, fetch }) {}, + useHook: + ({ fetch }) => + () => + async () => ({}), +} \ No newline at end of file diff --git a/framework/kibocommerce/customer/index.ts b/framework/kibocommerce/customer/index.ts new file mode 100644 index 000000000..6c903ecc5 --- /dev/null +++ b/framework/kibocommerce/customer/index.ts @@ -0,0 +1 @@ +export { default as useCustomer } from './use-customer' diff --git a/framework/kibocommerce/customer/use-customer.tsx b/framework/kibocommerce/customer/use-customer.tsx new file mode 100644 index 000000000..238b1229b --- /dev/null +++ b/framework/kibocommerce/customer/use-customer.tsx @@ -0,0 +1,24 @@ +import { SWRHook } from '@commerce/utils/types' +import useCustomer, { UseCustomer } from '@commerce/customer/use-customer' +import type { CustomerHook } from '../types/customer' + +export default useCustomer as UseCustomer<typeof handler> + +export const handler: SWRHook<CustomerHook> = { + fetchOptions: { + url: '/api/customer', + method: 'GET', + }, + async fetcher({ options, fetch }) { + const data = await fetch(options) + return data?.customer ?? null + }, + useHook: ({ useData }) => (input) => { + return useData({ + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) + }, +} diff --git a/framework/kibocommerce/fetcher.ts b/framework/kibocommerce/fetcher.ts new file mode 100644 index 000000000..f8ca0c578 --- /dev/null +++ b/framework/kibocommerce/fetcher.ts @@ -0,0 +1,41 @@ +import { FetcherError } from '@commerce/utils/errors' +import type { Fetcher } from '@commerce/utils/types' + +async function getText(res: Response) { + try { + return (await res.text()) || res.statusText + } catch (error) { + return res.statusText + } +} + +async function getError(res: Response) { + if (res.headers.get('Content-Type')?.includes('application/json')) { + const data = await res.json() + return new FetcherError({ errors: data.errors, status: res.status }) + } + return new FetcherError({ message: await getText(res), status: res.status }) +} + +const fetcher: Fetcher = async ({ + url, + method = 'GET', + variables, + body: bodyObj, +}) => { + const hasBody = Boolean(variables || bodyObj) + const body = hasBody + ? JSON.stringify(variables ? { variables } : bodyObj) + : undefined + const headers = hasBody ? { 'Content-Type': 'application/json' } : undefined + const res = await fetch(url!, { method, body, headers }) + + if (res.ok) { + const { data } = await res.json() + return data + } + + throw await getError(res) +} + +export default fetcher diff --git a/framework/kibocommerce/index.tsx b/framework/kibocommerce/index.tsx new file mode 100644 index 000000000..af8b66ee6 --- /dev/null +++ b/framework/kibocommerce/index.tsx @@ -0,0 +1,9 @@ +import { getCommerceProvider, useCommerce as useCoreCommerce } from '@commerce' +import { kiboCommerceProvider, KibocommerceProvider } from './provider' + +export { kiboCommerceProvider } +export type { KibocommerceProvider } + +export const CommerceProvider = getCommerceProvider(kiboCommerceProvider) + +export const useCommerce = () => useCoreCommerce() diff --git a/framework/kibocommerce/lib/get-cookie-expiration-date.ts b/framework/kibocommerce/lib/get-cookie-expiration-date.ts new file mode 100644 index 000000000..89fd24504 --- /dev/null +++ b/framework/kibocommerce/lib/get-cookie-expiration-date.ts @@ -0,0 +1,8 @@ +export function getCookieExpirationDate(maxAgeInDays: number){ + const today = new Date(); + const expirationDate = new Date(); + + const cookieExpirationDate = new Date ( expirationDate.setDate(today.getDate() + maxAgeInDays) ) + + return cookieExpirationDate; +} \ No newline at end of file diff --git a/framework/kibocommerce/lib/get-slug.ts b/framework/kibocommerce/lib/get-slug.ts new file mode 100644 index 000000000..329c5a27e --- /dev/null +++ b/framework/kibocommerce/lib/get-slug.ts @@ -0,0 +1,5 @@ +// Remove trailing and leading slash, usually included in nodes +// returned by the BigCommerce API +const getSlug = (path: string) => path.replace(/^\/|\/$/g, '') + +export default getSlug diff --git a/framework/kibocommerce/lib/immutability.ts b/framework/kibocommerce/lib/immutability.ts new file mode 100644 index 000000000..488d3570f --- /dev/null +++ b/framework/kibocommerce/lib/immutability.ts @@ -0,0 +1,13 @@ +import update, { Context } from 'immutability-helper' + +const c = new Context() + +c.extend('$auto', function (value, object) { + return object ? c.update(object, value) : c.update({}, value) +}) + +c.extend('$autoArray', function (value, object) { + return object ? c.update(object, value) : c.update([], value) +}) + +export default c.update diff --git a/framework/kibocommerce/lib/normalize.ts b/framework/kibocommerce/lib/normalize.ts new file mode 100644 index 000000000..5fd03b855 --- /dev/null +++ b/framework/kibocommerce/lib/normalize.ts @@ -0,0 +1,194 @@ +import update from './immutability' +import getSlug from './get-slug' +import type { PrCategory, CustomerAccountInput, Document } from '../schema' +import { Page } from '../types/page'; +import { Customer } from '../types/customer' + +function normalizeProductOption(productOption: any) { + const { + node: { entityId, values: { edges = [] } = {}, ...rest }, + } = productOption + + return { + id: entityId, + values: edges?.map(({ node }: any) => node), + ...rest, + } +} + +export function normalizeProduct(productNode: any, config: any): any { + const product = { + id: productNode.productCode, + name: productNode.content.productName, + vendor: '', + path: `/${productNode.productCode}`, + slug: productNode.productCode, + price: { + value: productNode?.price?.price, + currencyCode: config.currencyCode, + }, + descriptionHtml: productNode.content.productShortDescription, + + images: productNode.content.productImages.map((p: any) => ({ + url: `http:${p.imageUrl}`, + altText: p.imageLabel, + })), + + variants: productNode.variations?.map((v: any) => ({ + id: v.productCode, + options: v.options.map((o: any) => ({ + ['__typename']: 'MultipleChoiceOption', + id: o.attributeFQN, + displayName: + o.attributeFQN.split('~')[1][0].toUpperCase() + + o.attributeFQN.split('~')[1].slice(1).toLowerCase(), + values: [{ label: o.value.toString() }], + })), + })) || [ + { + id: '', + }, + ], + + options: + productNode.options?.map((o: any) => ({ + id: o.attributeFQN, + displayName: o.attributeDetail.name, + values: o.values.map((v: any) => ({ + label: v.value.toString(), + hexColors: '', + })), + })) || [], + } + + return product +} + +export function normalizePage(page: Document): Page { + return { + id: String(page.id), + name: String(page.name), + url: page.properties.url, + body: page.properties.body, + is_visible: page.properties.is_visible, + sort_order: page.properties.sort_order + } +} + +export function normalizeCart(data: any): any { + return { + id: data.id, + customerId: data.userId, + email: data?.email, + createdAt: data?.created_time, + currency: { + code: 'USD', + }, + taxesIncluded: true, + lineItems: data.items.map(normalizeLineItem), + lineItemsSubtotalPrice: data?.items.reduce( + (acc: number, obj: { subtotal: number }) => acc + obj.subtotal, + 0 + ), + subtotalPrice: data?.subtotal, + totalPrice: data?.total, + discounts: data.orderDiscounts?.map((discount: any) => ({ + value: discount.impact, + })), + } +} + +export function normalizeCustomer(customer: CustomerAccountInput): Customer { + return { + id: customer.id, + firstName: customer.firstName, + lastName: customer.lastName, + email: customer.emailAddress, + userName: customer.userName, + isAnonymous: customer.isAnonymous + } +} + +function normalizeLineItem(item: any): any { + return { + id: item.id, + variantId: item.product.variationProductCode, + productId: String(item.product.productCode), + name: item.product.name, + quantity: item.quantity, + variant: { + id: item.product.variationProductCode, + sku: item.product?.sku, + name: item.product.name, + image: { + url: item?.product?.imageUrl, + }, + requiresShipping: item?.is_require_shipping, + price: item?.unitPrice.extendedAmount, + listPrice: 0, + }, + options: item.product.options, + path: `${item.product.productCode}`, + discounts: item?.discounts?.map((discount: any) => ({ + value: discount.discounted_amount, + })), + } +} + +export function normalizeCategory(category: PrCategory): any { + return { + id: category?.categoryCode, + name: category?.content?.name, + slug: category?.content?.slug, + path: `/${category?.content?.slug}`, + } +} + +export function normalizeWishlistItem( + item: any, + config: any, + includeProducts=false +): any { + if (includeProducts) { + return { + id: item.id, + product: getProuducts(item, config), + } + } else { + return getProuducts(item, config) + } +} + +function getProuducts(item: any, config: any): any { + return { + variant_id: item.product.variationProductCode || '', + id: String(item.product.productCode), + product_id: String(item.product.productCode), + name: item.product.name, + quantity: item.quantity, + images: [ + { + url: `http:${item.product.imageUrl}`, + alt: item.product.imageAlternateText, + }, + ], + price: { + value: item.product.price.price, + retailPrice: item.product.price.retailPrice || 0, + currencyCode: config.currencyCode, + }, + variants: [ + { + id: item.product.variationProductCode || '', + sku: item.product?.sku, + name: item.product.name, + image: { + url: item?.product.imageUrl, + }, + }, + ], + options: item.product.options, + path: `/${item.product.productCode}`, + description: item.product.description, + } +} diff --git a/framework/kibocommerce/lib/prepare-set-cookie.ts b/framework/kibocommerce/lib/prepare-set-cookie.ts new file mode 100644 index 000000000..c1aeb1c83 --- /dev/null +++ b/framework/kibocommerce/lib/prepare-set-cookie.ts @@ -0,0 +1,15 @@ +export function prepareSetCookie(name: string, value: string, options: any = {}): string { + const encodedValue = Buffer.from(value).toString('base64') + const cookieValue = [`${name}=${encodedValue}`]; + + if (options.maxAge) { + cookieValue.push(`Max-Age=${options.maxAge}`); + } + + if (options.expires && !options.maxAge) { + cookieValue.push(`Expires=${options.expires.toUTCString()}`); + } + + const cookie = cookieValue.join('; ') + return cookie +} \ No newline at end of file diff --git a/framework/kibocommerce/lib/product-search-vars.ts b/framework/kibocommerce/lib/product-search-vars.ts new file mode 100644 index 000000000..37c4d81eb --- /dev/null +++ b/framework/kibocommerce/lib/product-search-vars.ts @@ -0,0 +1,55 @@ +function getFacetValueFilter(categoryCode: string, filters = []) { + let facetValueFilter = ''; + if (categoryCode) { + facetValueFilter = `categoryCode:${categoryCode},`; + } + return facetValueFilter + filters.join(','); +} + +export const buildProductSearchVars = ({ + categoryCode = '', + pageSize = 5, + filters = {} as any, + startIndex = 0, + sort = '', + search = '', +}) => { + let facetTemplate = ''; + let filter = ''; + let sortBy; + if (categoryCode) { + facetTemplate = `categoryCode:${categoryCode}`; + filter = `categoryCode req ${categoryCode}`; + } + const facetFilterList = Object.keys(filters).filter(k => filters[k].length).reduce((accum, k): any => { + return [...accum, ...filters[k].map((facetValue: any) => `Tenant~${k}:${facetValue}`)]; + }, []); + + const facetValueFilter = getFacetValueFilter(categoryCode, facetFilterList); + + switch(sort) { + case 'latest-desc': + sortBy= 'createDate desc'; + break; + case 'price-asc': + sortBy= 'price asc'; + break; + case 'price-desc': + sortBy= 'price desc'; + break; + case 'trending-desc': + default: + sortBy= ''; + break; + } + + return { + query: search, + startIndex, + pageSize, + sortBy, + filter: filter, + facetTemplate, + facetValueFilter + } +} diff --git a/framework/kibocommerce/lib/set-cookie.ts b/framework/kibocommerce/lib/set-cookie.ts new file mode 100644 index 000000000..2c194c921 --- /dev/null +++ b/framework/kibocommerce/lib/set-cookie.ts @@ -0,0 +1,3 @@ +export function setCookies(res: any, cookies: string[]): void { + res.setHeader('Set-Cookie', cookies); +} \ No newline at end of file diff --git a/framework/kibocommerce/next.config.js b/framework/kibocommerce/next.config.js new file mode 100644 index 000000000..79a348c88 --- /dev/null +++ b/framework/kibocommerce/next.config.js @@ -0,0 +1,12 @@ +const commerce = require('./commerce.config.json') + +module.exports = { + commerce, + serverRuntimeConfig: { + // Will only be available on the server side + kiboAuthTicket: null + }, + images: { + domains: ['d1slj7rdbjyb5l.cloudfront.net', 'cdn-tp1.mozu.com', 'cdn-sb.mozu.com'], + }, +} diff --git a/framework/kibocommerce/product/index.ts b/framework/kibocommerce/product/index.ts new file mode 100644 index 000000000..426a3edcd --- /dev/null +++ b/framework/kibocommerce/product/index.ts @@ -0,0 +1,2 @@ +export { default as usePrice } from './use-price' +export { default as useSearch } from './use-search' diff --git a/framework/kibocommerce/product/use-price.tsx b/framework/kibocommerce/product/use-price.tsx new file mode 100644 index 000000000..0174faf5e --- /dev/null +++ b/framework/kibocommerce/product/use-price.tsx @@ -0,0 +1,2 @@ +export * from '@commerce/product/use-price' +export { default } from '@commerce/product/use-price' diff --git a/framework/kibocommerce/product/use-search.tsx b/framework/kibocommerce/product/use-search.tsx new file mode 100644 index 000000000..204ca3181 --- /dev/null +++ b/framework/kibocommerce/product/use-search.tsx @@ -0,0 +1,37 @@ +import { SWRHook } from '@commerce/utils/types' +import useSearch, { UseSearch } from '@commerce/product/use-search' +export default useSearch as UseSearch<typeof handler> + +export const handler: SWRHook<any> = { + fetchOptions: { + method: 'GET', + url: '/api/catalog/products', + }, + fetcher({ input: { search, categoryId, brandId, sort }, options, fetch }) { + // Use a dummy base as we only care about the relative path + const url = new URL(options.url!, 'http://a') + + if (search) url.searchParams.set('search', search) + if (Number.isInteger(Number(categoryId))) + url.searchParams.set('categoryId', String(categoryId)) + if (Number.isInteger(brandId)) + url.searchParams.set('brandId', String(brandId)) + if (sort) url.searchParams.set('sort', sort) + + return fetch({ + url: url.pathname + url.search, + method: options.method, + }) + }, + useHook: ({ useData }) => (input) => { + return useData({ + input: [ + ['search', input.search], + ['categoryId', input.categoryId], + ['brandId', input.brandId], + ['sort', input.sort], + ], + swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, + }) + }, +} diff --git a/framework/kibocommerce/provider.ts b/framework/kibocommerce/provider.ts new file mode 100644 index 000000000..8ca1ddfde --- /dev/null +++ b/framework/kibocommerce/provider.ts @@ -0,0 +1,30 @@ +import fetcher from './fetcher' +import { handler as useCart } from './cart/use-cart' +import { handler as useAddItem } from './cart/use-add-item' +import { handler as useUpdateItem } from './cart/use-update-item' +import { handler as useRemoveItem } from './cart/use-remove-item' +import { handler as useCustomer } from './customer/use-customer' +import { handler as useSearch } from './product/use-search' +import { handler as useLogin } from './auth/use-login' +import { handler as useLogout } from './auth/use-logout' +import { handler as useSignup } from './auth/use-signup' +import { handler as useWishlist } from './wishlist/use-wishlist' +import { handler as useWishlistAddItem } from './wishlist/use-add-item' +import { handler as useWishlistRemoveItem } from './wishlist/use-remove-item' + +export const kiboCommerceProvider = { + locale: 'en-us', + cartCookie: 'kibo_cart', + fetcher, + cart: { useCart, useAddItem, useUpdateItem, useRemoveItem }, + wishlist: { + useWishlist, + useAddItem: useWishlistAddItem, + useRemoveItem: useWishlistRemoveItem, + }, + customer: { useCustomer }, + products: { useSearch }, + auth: { useLogin, useLogout, useSignup }, +} + +export type KibocommerceProvider = typeof kiboCommerceProvider diff --git a/framework/kibocommerce/schema.d.ts b/framework/kibocommerce/schema.d.ts new file mode 100644 index 000000000..cf52ddec9 --- /dev/null +++ b/framework/kibocommerce/schema.d.ts @@ -0,0 +1,11399 @@ +export type Maybe<T> = T | null +export type Exact<T extends { [key: string]: unknown }> = { + [K in keyof T]: T[K] +} +export type MakeOptional<T, K extends keyof T> = Omit<T, K> & + { [SubKey in K]?: Maybe<T[SubKey]> } +export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & + { [SubKey in K]: Maybe<T[SubKey]> } +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: string + String: string + Boolean: boolean + Int: number + Float: number + /** The `AnyScalar` type allows any scalar value by examining the input and passing the serialize, parseValue, and parseLiteral operations to their respective types. */ + AnyScalar: any + /** DateTime custom scalar type */ + DateTime: any + /** Object custom scalar type */ + Object: any +} + +export type AccountPasswordInfoCollectionInput = { + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<AccountPasswordInfoInput>>> +} + +export type AccountPasswordInfoInput = { + accountId: Scalars['Int'] + userId?: Maybe<Scalars['String']> + unlockAccount?: Maybe<Scalars['Boolean']> + passwordInfo?: Maybe<PasswordInfoInput> +} + +export type AccountSalesRep = { + __typename?: 'AccountSalesRep' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<AccountSalesRep> + accountId: Scalars['Int'] + adminUserId?: Maybe<Scalars['String']> +} + +export type AccountSalesRep_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type AccountSalesRepInput = { + accountId: Scalars['Int'] + adminUserId?: Maybe<Scalars['String']> +} + +export type ActiveDateRange = { + __typename?: 'ActiveDateRange' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ActiveDateRange> + startDate?: Maybe<Scalars['DateTime']> + endDate?: Maybe<Scalars['DateTime']> +} + +export type ActiveDateRange_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ActiveDateRangeInput = { + startDate?: Maybe<Scalars['DateTime']> + endDate?: Maybe<Scalars['DateTime']> +} + +export type AddressValidationRequestInput = { + address?: Maybe<CuAddressInput> +} + +export type AddressValidationResponse = { + __typename?: 'AddressValidationResponse' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<AddressValidationResponse> + addressCandidates?: Maybe<Array<Maybe<CuAddress>>> +} + +export type AddressValidationResponse_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type Adjustment = { + __typename?: 'Adjustment' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Adjustment> + amount?: Maybe<Scalars['Float']> + description?: Maybe<Scalars['String']> + internalComment?: Maybe<Scalars['String']> +} + +export type Adjustment_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type AdjustmentInput = { + amount?: Maybe<Scalars['Float']> + description?: Maybe<Scalars['String']> + internalComment?: Maybe<Scalars['String']> +} + +export type AppliedLineItemProductDiscount = { + __typename?: 'AppliedLineItemProductDiscount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<AppliedLineItemProductDiscount> + appliesToSalePrice?: Maybe<Scalars['Boolean']> + discountQuantity: Scalars['Int'] + productQuantity?: Maybe<Scalars['Int']> + impactPerUnit?: Maybe<Scalars['Float']> +} + +export type AppliedLineItemProductDiscount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type AppliedLineItemProductDiscountInput = { + appliesToSalePrice?: Maybe<Scalars['Boolean']> + discountQuantity: Scalars['Int'] + productQuantity?: Maybe<Scalars['Int']> + impactPerUnit?: Maybe<Scalars['Float']> +} + +export type AppliedLineItemShippingDiscount = { + __typename?: 'AppliedLineItemShippingDiscount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<AppliedLineItemShippingDiscount> + methodCode?: Maybe<Scalars['String']> + discount?: Maybe<CrAppliedDiscount> + discountQuantity: Scalars['Int'] + impactPerUnit: Scalars['Float'] +} + +export type AppliedLineItemShippingDiscount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type AppliedLineItemShippingDiscountInput = { + methodCode?: Maybe<Scalars['String']> + discount?: Maybe<CrAppliedDiscountInput> + discountQuantity: Scalars['Int'] + impactPerUnit: Scalars['Float'] +} + +export type AttributeDetail = { + __typename?: 'AttributeDetail' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<AttributeDetail> + valueType?: Maybe<Scalars['String']> + inputType?: Maybe<Scalars['String']> + dataType?: Maybe<Scalars['String']> + usageType?: Maybe<Scalars['String']> + dataTypeSequence: Scalars['Int'] + name?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + validation?: Maybe<PrAttributeValidation> + searchableInStorefront?: Maybe<Scalars['Boolean']> + searchDisplayValue?: Maybe<Scalars['Boolean']> + allowFilteringAndSortingInStorefront?: Maybe<Scalars['Boolean']> + indexValueWithCase?: Maybe<Scalars['Boolean']> + customWeightInStorefrontSearch?: Maybe<Scalars['Boolean']> + displayIntention?: Maybe<Scalars['String']> +} + +export type AttributeDetail_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type AttributeVocabularyValueDisplayInfo = { + __typename?: 'AttributeVocabularyValueDisplayInfo' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<AttributeVocabularyValueDisplayInfo> + cmsId?: Maybe<Scalars['String']> + imageUrl?: Maybe<Scalars['String']> + colorValue?: Maybe<Scalars['String']> +} + +export type AttributeVocabularyValueDisplayInfo_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type AuditRecord = { + __typename?: 'AuditRecord' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<AuditRecord> + id?: Maybe<Scalars['String']> + changes?: Maybe<Array<Maybe<AuditRecordChange>>> + auditInfo?: Maybe<CrAuditInfo> +} + +export type AuditRecord_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type AuditRecordChange = { + __typename?: 'AuditRecordChange' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<AuditRecordChange> + type?: Maybe<Scalars['String']> + path?: Maybe<Scalars['String']> + fields?: Maybe<Array<Maybe<AuditRecordChangeField>>> +} + +export type AuditRecordChange_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type AuditRecordChangeField = { + __typename?: 'AuditRecordChangeField' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<AuditRecordChangeField> + name?: Maybe<Scalars['String']> + oldValue?: Maybe<Scalars['String']> + newValue?: Maybe<Scalars['String']> +} + +export type AuditRecordChangeField_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type AuditRecordChangeFieldInput = { + name?: Maybe<Scalars['String']> + oldValue?: Maybe<Scalars['String']> + newValue?: Maybe<Scalars['String']> +} + +export type AuditRecordChangeInput = { + type?: Maybe<Scalars['String']> + path?: Maybe<Scalars['String']> + fields?: Maybe<Array<Maybe<AuditRecordChangeFieldInput>>> +} + +export type AuditRecordInput = { + id?: Maybe<Scalars['String']> + changes?: Maybe<Array<Maybe<AuditRecordChangeInput>>> + auditInfo?: Maybe<CrAuditInfoInput> +} + +export type B2BAccount = { + __typename?: 'B2BAccount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<B2BAccount> + users?: Maybe<Array<Maybe<B2BUser>>> + isActive?: Maybe<Scalars['Boolean']> + priceList?: Maybe<Scalars['String']> + salesReps?: Maybe<Array<Maybe<AccountSalesRep>>> + rootAccountId?: Maybe<Scalars['Int']> + parentAccountId?: Maybe<Scalars['Int']> + approvalStatus?: Maybe<Scalars['String']> + id: Scalars['Int'] + customerSet?: Maybe<Scalars['String']> + commerceSummary?: Maybe<CommerceSummary> + contacts?: Maybe<Array<Maybe<CustomerContact>>> + companyOrOrganization?: Maybe<Scalars['String']> + notes?: Maybe<Array<Maybe<CustomerNote>>> + attributes?: Maybe<Array<Maybe<CustomerAttribute>>> + segments?: Maybe<Array<Maybe<CustomerSegment>>> + taxId?: Maybe<Scalars['String']> + externalId?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfo> + customerSinceDate?: Maybe<Scalars['DateTime']> + accountType?: Maybe<Scalars['String']> +} + +export type B2BAccount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type B2BAccountCollection = { + __typename?: 'B2BAccountCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<B2BAccountCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<B2BAccount>>> +} + +export type B2BAccountCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type B2BAccountInput = { + users?: Maybe<Array<Maybe<B2BUserInput>>> + isActive?: Maybe<Scalars['Boolean']> + priceList?: Maybe<Scalars['String']> + salesReps?: Maybe<Array<Maybe<AccountSalesRepInput>>> + rootAccountId?: Maybe<Scalars['Int']> + parentAccountId?: Maybe<Scalars['Int']> + approvalStatus?: Maybe<Scalars['String']> + id: Scalars['Int'] + customerSet?: Maybe<Scalars['String']> + commerceSummary?: Maybe<CommerceSummaryInput> + contacts?: Maybe<Array<Maybe<CustomerContactInput>>> + companyOrOrganization?: Maybe<Scalars['String']> + notes?: Maybe<Array<Maybe<CustomerNoteInput>>> + attributes?: Maybe<Array<Maybe<CustomerAttributeInput>>> + segments?: Maybe<Array<Maybe<CustomerSegmentInput>>> + taxId?: Maybe<Scalars['String']> + externalId?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfoInput> + customerSinceDate?: Maybe<Scalars['DateTime']> + accountType?: Maybe<Scalars['String']> +} + +export type B2BUser = { + __typename?: 'B2BUser' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<B2BUser> + emailAddress?: Maybe<Scalars['String']> + userName?: Maybe<Scalars['String']> + firstName?: Maybe<Scalars['String']> + lastName?: Maybe<Scalars['String']> + localeCode?: Maybe<Scalars['String']> + userId?: Maybe<Scalars['String']> + roles?: Maybe<Array<Maybe<UserRole>>> + isLocked?: Maybe<Scalars['Boolean']> + isActive?: Maybe<Scalars['Boolean']> + isRemoved?: Maybe<Scalars['Boolean']> + acceptsMarketing?: Maybe<Scalars['Boolean']> + hasExternalPassword?: Maybe<Scalars['Boolean']> +} + +export type B2BUser_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type B2BUserAndAuthInfoInput = { + b2BUser?: Maybe<B2BUserInput> + externalPassword?: Maybe<Scalars['String']> + isImport?: Maybe<Scalars['Boolean']> +} + +export type B2BUserCollection = { + __typename?: 'B2BUserCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<B2BUserCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<B2BUser>>> +} + +export type B2BUserCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type B2BUserInput = { + emailAddress?: Maybe<Scalars['String']> + userName?: Maybe<Scalars['String']> + firstName?: Maybe<Scalars['String']> + lastName?: Maybe<Scalars['String']> + localeCode?: Maybe<Scalars['String']> + userId?: Maybe<Scalars['String']> + roles?: Maybe<Array<Maybe<UserRoleInput>>> + isLocked?: Maybe<Scalars['Boolean']> + isActive?: Maybe<Scalars['Boolean']> + isRemoved?: Maybe<Scalars['Boolean']> + acceptsMarketing?: Maybe<Scalars['Boolean']> + hasExternalPassword?: Maybe<Scalars['Boolean']> +} + +export type BillingInfo = { + __typename?: 'BillingInfo' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<BillingInfo> + paymentType?: Maybe<Scalars['String']> + paymentWorkflow?: Maybe<Scalars['String']> + billingContact?: Maybe<Contact> + isSameBillingShippingAddress?: Maybe<Scalars['Boolean']> + card?: Maybe<PaymentCard> + token?: Maybe<PaymentToken> + purchaseOrder?: Maybe<PurchaseOrderPayment> + check?: Maybe<CheckPayment> + auditInfo?: Maybe<CrAuditInfo> + storeCreditCode?: Maybe<Scalars['String']> + storeCreditType?: Maybe<Scalars['String']> + customCreditType?: Maybe<Scalars['String']> + externalTransactionId?: Maybe<Scalars['String']> + data?: Maybe<Scalars['Object']> +} + +export type BillingInfo_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type BillingInfoInput = { + paymentType?: Maybe<Scalars['String']> + paymentWorkflow?: Maybe<Scalars['String']> + billingContact?: Maybe<ContactInput> + isSameBillingShippingAddress?: Maybe<Scalars['Boolean']> + card?: Maybe<PaymentCardInput> + token?: Maybe<PaymentTokenInput> + purchaseOrder?: Maybe<PurchaseOrderPaymentInput> + check?: Maybe<CheckPaymentInput> + auditInfo?: Maybe<CrAuditInfoInput> + storeCreditCode?: Maybe<Scalars['String']> + storeCreditType?: Maybe<Scalars['String']> + customCreditType?: Maybe<Scalars['String']> + externalTransactionId?: Maybe<Scalars['String']> + data?: Maybe<Scalars['Object']> +} + +export type BoxType = { + __typename?: 'BoxType' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<BoxType> + name?: Maybe<Scalars['String']> + height?: Maybe<Scalars['Float']> + width?: Maybe<Scalars['Float']> + length?: Maybe<Scalars['Float']> +} + +export type BoxType_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type BpmConfiguration = { + __typename?: 'BpmConfiguration' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<BpmConfiguration> + shipmentType?: Maybe<Scalars['String']> + workflowContainerId?: Maybe<Scalars['String']> + workflowProcessId?: Maybe<Scalars['String']> +} + +export type BpmConfiguration_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type BundledProductSummary = { + __typename?: 'BundledProductSummary' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<BundledProductSummary> + productShortDescription?: Maybe<Scalars['String']> + productName?: Maybe<Scalars['String']> + productCode?: Maybe<Scalars['String']> + goodsType?: Maybe<Scalars['String']> + quantity: Scalars['Int'] + measurements?: Maybe<PrPackageMeasurements> + isPackagedStandAlone?: Maybe<Scalars['Boolean']> + inventoryInfo?: Maybe<ProductInventoryInfo> + optionAttributeFQN?: Maybe<Scalars['String']> + optionValue?: Maybe<Scalars['Object']> + creditValue?: Maybe<Scalars['Float']> + productType?: Maybe<Scalars['String']> +} + +export type BundledProductSummary_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export enum BundlingStrategyEnum { + ItemDependency = 'ITEM_DEPENDENCY', +} + +export type CancelReasonCollection = { + __typename?: 'CancelReasonCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CancelReasonCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<CancelReasonItem>>> +} + +export type CancelReasonCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CancelReasonItem = { + __typename?: 'CancelReasonItem' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CancelReasonItem> + reasonCode?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + needsMoreInfo?: Maybe<Scalars['Boolean']> +} + +export type CancelReasonItem_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CanceledItem = { + __typename?: 'CanceledItem' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CanceledItem> + canceledReason?: Maybe<CanceledReason> + auditInfo?: Maybe<CrAuditInfo> + lineId: Scalars['Int'] + originalOrderItemId?: Maybe<Scalars['String']> + parentId?: Maybe<Scalars['String']> + productCode?: Maybe<Scalars['String']> + variationProductCode?: Maybe<Scalars['String']> + optionAttributeFQN?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + fulfillmentLocationCode?: Maybe<Scalars['String']> + imageUrl?: Maybe<Scalars['String']> + isTaxable?: Maybe<Scalars['Boolean']> + quantity: Scalars['Int'] + unitPrice: Scalars['Float'] + actualPrice: Scalars['Float'] + overridePrice?: Maybe<Scalars['Float']> + itemDiscount: Scalars['Float'] + lineItemCost: Scalars['Float'] + itemTax: Scalars['Float'] + shipping: Scalars['Float'] + shippingDiscount: Scalars['Float'] + shippingTax: Scalars['Float'] + handling: Scalars['Float'] + handlingDiscount: Scalars['Float'] + handlingTax: Scalars['Float'] + duty: Scalars['Float'] + isPackagedStandAlone?: Maybe<Scalars['Boolean']> + readyForPickupQuantity?: Maybe<Scalars['Int']> + backorderReleaseDate?: Maybe<Scalars['DateTime']> + measurements?: Maybe<CrPackageMeasurements> + options?: Maybe<Array<Maybe<CrProductOption>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + weightedShipmentAdjustment: Scalars['Float'] + weightedLineItemTaxAdjustment: Scalars['Float'] + weightedShippingAdjustment: Scalars['Float'] + weightedShippingTaxAdjustment: Scalars['Float'] + weightedHandlingAdjustment: Scalars['Float'] + weightedHandlingTaxAdjustment: Scalars['Float'] + weightedDutyAdjustment: Scalars['Float'] + taxableShipping: Scalars['Float'] + taxableLineItemCost: Scalars['Float'] + taxableHandling: Scalars['Float'] + fulfillmentFields?: Maybe<Array<Maybe<FulfillmentField>>> + isAssemblyRequired?: Maybe<Scalars['Boolean']> + parentItemId?: Maybe<Scalars['String']> + childItemIds?: Maybe<Array<Scalars['String']>> + giftCards?: Maybe<Array<Maybe<GiftCard>>> +} + +export type CanceledItem_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CanceledItemInput = { + canceledReason?: Maybe<CanceledReasonInput> + auditInfo?: Maybe<CrAuditInfoInput> + lineId: Scalars['Int'] + originalOrderItemId?: Maybe<Scalars['String']> + parentId?: Maybe<Scalars['String']> + productCode?: Maybe<Scalars['String']> + variationProductCode?: Maybe<Scalars['String']> + optionAttributeFQN?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + fulfillmentLocationCode?: Maybe<Scalars['String']> + imageUrl?: Maybe<Scalars['String']> + isTaxable?: Maybe<Scalars['Boolean']> + quantity: Scalars['Int'] + unitPrice: Scalars['Float'] + actualPrice: Scalars['Float'] + overridePrice?: Maybe<Scalars['Float']> + itemDiscount: Scalars['Float'] + lineItemCost: Scalars['Float'] + itemTax: Scalars['Float'] + shipping: Scalars['Float'] + shippingDiscount: Scalars['Float'] + shippingTax: Scalars['Float'] + handling: Scalars['Float'] + handlingDiscount: Scalars['Float'] + handlingTax: Scalars['Float'] + duty: Scalars['Float'] + isPackagedStandAlone?: Maybe<Scalars['Boolean']> + readyForPickupQuantity?: Maybe<Scalars['Int']> + backorderReleaseDate?: Maybe<Scalars['DateTime']> + measurements?: Maybe<CrPackageMeasurementsInput> + options?: Maybe<Array<Maybe<CrProductOptionInput>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + weightedShipmentAdjustment: Scalars['Float'] + weightedLineItemTaxAdjustment: Scalars['Float'] + weightedShippingAdjustment: Scalars['Float'] + weightedShippingTaxAdjustment: Scalars['Float'] + weightedHandlingAdjustment: Scalars['Float'] + weightedHandlingTaxAdjustment: Scalars['Float'] + weightedDutyAdjustment: Scalars['Float'] + taxableShipping: Scalars['Float'] + taxableLineItemCost: Scalars['Float'] + taxableHandling: Scalars['Float'] + fulfillmentFields?: Maybe<Array<Maybe<FulfillmentFieldInput>>> + isAssemblyRequired?: Maybe<Scalars['Boolean']> + parentItemId?: Maybe<Scalars['String']> + childItemIds?: Maybe<Array<Scalars['String']>> + giftCards?: Maybe<Array<Maybe<GiftCardInput>>> +} + +export type CanceledReason = { + __typename?: 'CanceledReason' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CanceledReason> + reasonCode?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + moreInfo?: Maybe<Scalars['String']> +} + +export type CanceledReason_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CanceledReasonInput = { + reasonCode?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + moreInfo?: Maybe<Scalars['String']> +} + +export type CapturableShipmentSummary = { + __typename?: 'CapturableShipmentSummary' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CapturableShipmentSummary> + shipmentNumber: Scalars['Int'] + shipmentTotal: Scalars['Float'] + amountApplied: Scalars['Float'] +} + +export type CapturableShipmentSummary_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CapturableShipmentSummaryInput = { + shipmentNumber: Scalars['Int'] + shipmentTotal: Scalars['Float'] + amountApplied: Scalars['Float'] +} + +export type Card = { + __typename?: 'Card' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Card> + id?: Maybe<Scalars['String']> + nameOnCard?: Maybe<Scalars['String']> + cardType?: Maybe<Scalars['String']> + expireMonth?: Maybe<Scalars['Int']> + expireYear?: Maybe<Scalars['Int']> + cardNumberPart?: Maybe<Scalars['String']> + contactId: Scalars['Int'] + isDefaultPayMethod?: Maybe<Scalars['Boolean']> +} + +export type Card_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CardCollection = { + __typename?: 'CardCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CardCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<Card>>> +} + +export type CardCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CardInput = { + id?: Maybe<Scalars['String']> + nameOnCard?: Maybe<Scalars['String']> + cardType?: Maybe<Scalars['String']> + expireMonth?: Maybe<Scalars['Int']> + expireYear?: Maybe<Scalars['Int']> + cardNumberPart?: Maybe<Scalars['String']> + contactId: Scalars['Int'] + isDefaultPayMethod?: Maybe<Scalars['Boolean']> +} + +export type Carrier = { + __typename?: 'Carrier' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Carrier> + carrierType?: Maybe<Scalars['String']> + isEnabled?: Maybe<Scalars['Boolean']> + shippingMethodMappings?: Maybe<ShippingMethodMappings> +} + +export type Carrier_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CarrierServiceGenerateLabelResponse = { + __typename?: 'CarrierServiceGenerateLabelResponse' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CarrierServiceGenerateLabelResponse> + imageURL?: Maybe<Scalars['String']> + integratorId?: Maybe<Scalars['String']> + price?: Maybe<Scalars['Float']> + trackingNumber?: Maybe<Scalars['String']> +} + +export type CarrierServiceGenerateLabelResponse_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type Cart = { + __typename?: 'Cart' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Cart> + items?: Maybe<Array<Maybe<CartItem>>> + couponCodes?: Maybe<Array<Scalars['String']>> + invalidCoupons?: Maybe<Array<Maybe<InvalidCoupon>>> + priceListCode?: Maybe<Scalars['String']> + cartMessage?: Maybe<CartMessage> + cartMessages?: Maybe<Array<Maybe<CartMessage>>> + handlingAmount?: Maybe<Scalars['Float']> + handlingSubTotal?: Maybe<Scalars['Float']> + handlingTotal?: Maybe<Scalars['Float']> + userId?: Maybe<Scalars['String']> + id?: Maybe<Scalars['String']> + tenantId?: Maybe<Scalars['Int']> + siteId?: Maybe<Scalars['Int']> + channelCode?: Maybe<Scalars['String']> + currencyCode?: Maybe<Scalars['String']> + visitId?: Maybe<Scalars['String']> + webSessionId?: Maybe<Scalars['String']> + customerInteractionType?: Maybe<Scalars['String']> + fulfillmentInfo?: Maybe<FulfillmentInfo> + orderDiscounts?: Maybe<Array<Maybe<CrAppliedDiscount>>> + suggestedDiscounts?: Maybe<Array<Maybe<SuggestedDiscount>>> + rejectedDiscounts?: Maybe<Array<Maybe<SuggestedDiscount>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + subtotal?: Maybe<Scalars['Float']> + discountedSubtotal?: Maybe<Scalars['Float']> + discountTotal?: Maybe<Scalars['Float']> + discountedTotal?: Maybe<Scalars['Float']> + shippingTotal?: Maybe<Scalars['Float']> + shippingSubTotal?: Maybe<Scalars['Float']> + shippingTaxTotal?: Maybe<Scalars['Float']> + handlingTaxTotal?: Maybe<Scalars['Float']> + itemTaxTotal?: Maybe<Scalars['Float']> + taxTotal?: Maybe<Scalars['Float']> + feeTotal?: Maybe<Scalars['Float']> + total?: Maybe<Scalars['Float']> + lineItemSubtotalWithOrderAdjustments?: Maybe<Scalars['Float']> + shippingAmountBeforeDiscountsAndAdjustments?: Maybe<Scalars['Float']> + lastValidationDate?: Maybe<Scalars['DateTime']> + expirationDate?: Maybe<Scalars['DateTime']> + changeMessages?: Maybe<Array<Maybe<ChangeMessage>>> + extendedProperties?: Maybe<Array<Maybe<ExtendedProperty>>> + discountThresholdMessages?: Maybe<Array<Maybe<ThresholdMessage>>> + auditInfo?: Maybe<CrAuditInfo> +} + +export type Cart_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CartChangeMessageCollection = { + __typename?: 'CartChangeMessageCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CartChangeMessageCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<ChangeMessage>>> +} + +export type CartChangeMessageCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CartInput = { + items?: Maybe<Array<Maybe<CartItemInput>>> + couponCodes?: Maybe<Array<Scalars['String']>> + invalidCoupons?: Maybe<Array<Maybe<InvalidCouponInput>>> + priceListCode?: Maybe<Scalars['String']> + cartMessage?: Maybe<CartMessageInput> + cartMessages?: Maybe<Array<Maybe<CartMessageInput>>> + handlingAmount?: Maybe<Scalars['Float']> + handlingSubTotal?: Maybe<Scalars['Float']> + handlingTotal?: Maybe<Scalars['Float']> + userId?: Maybe<Scalars['String']> + id?: Maybe<Scalars['String']> + tenantId?: Maybe<Scalars['Int']> + siteId?: Maybe<Scalars['Int']> + channelCode?: Maybe<Scalars['String']> + currencyCode?: Maybe<Scalars['String']> + visitId?: Maybe<Scalars['String']> + webSessionId?: Maybe<Scalars['String']> + customerInteractionType?: Maybe<Scalars['String']> + fulfillmentInfo?: Maybe<FulfillmentInfoInput> + orderDiscounts?: Maybe<Array<Maybe<CrAppliedDiscountInput>>> + suggestedDiscounts?: Maybe<Array<Maybe<SuggestedDiscountInput>>> + rejectedDiscounts?: Maybe<Array<Maybe<SuggestedDiscountInput>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + subtotal?: Maybe<Scalars['Float']> + discountedSubtotal?: Maybe<Scalars['Float']> + discountTotal?: Maybe<Scalars['Float']> + discountedTotal?: Maybe<Scalars['Float']> + shippingTotal?: Maybe<Scalars['Float']> + shippingSubTotal?: Maybe<Scalars['Float']> + shippingTaxTotal?: Maybe<Scalars['Float']> + handlingTaxTotal?: Maybe<Scalars['Float']> + itemTaxTotal?: Maybe<Scalars['Float']> + taxTotal?: Maybe<Scalars['Float']> + feeTotal?: Maybe<Scalars['Float']> + total?: Maybe<Scalars['Float']> + lineItemSubtotalWithOrderAdjustments?: Maybe<Scalars['Float']> + shippingAmountBeforeDiscountsAndAdjustments?: Maybe<Scalars['Float']> + lastValidationDate?: Maybe<Scalars['DateTime']> + expirationDate?: Maybe<Scalars['DateTime']> + changeMessages?: Maybe<Array<Maybe<ChangeMessageInput>>> + extendedProperties?: Maybe<Array<Maybe<ExtendedPropertyInput>>> + discountThresholdMessages?: Maybe<Array<Maybe<ThresholdMessageInput>>> + auditInfo?: Maybe<CrAuditInfoInput> +} + +export type CartItem = { + __typename?: 'CartItem' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CartItem> + id?: Maybe<Scalars['String']> + fulfillmentLocationCode?: Maybe<Scalars['String']> + fulfillmentMethod?: Maybe<Scalars['String']> + localeCode?: Maybe<Scalars['String']> + purchaseLocation?: Maybe<Scalars['String']> + lineId?: Maybe<Scalars['Int']> + product?: Maybe<CrProduct> + quantity: Scalars['Int'] + isRecurring?: Maybe<Scalars['Boolean']> + isTaxable?: Maybe<Scalars['Boolean']> + subtotal?: Maybe<Scalars['Float']> + extendedTotal?: Maybe<Scalars['Float']> + taxableTotal?: Maybe<Scalars['Float']> + discountTotal?: Maybe<Scalars['Float']> + discountedTotal?: Maybe<Scalars['Float']> + itemTaxTotal?: Maybe<Scalars['Float']> + shippingTaxTotal?: Maybe<Scalars['Float']> + shippingTotal?: Maybe<Scalars['Float']> + handlingAmount?: Maybe<Scalars['Float']> + feeTotal?: Maybe<Scalars['Float']> + total?: Maybe<Scalars['Float']> + unitPrice?: Maybe<CommerceUnitPrice> + productDiscount?: Maybe<AppliedLineItemProductDiscount> + productDiscounts?: Maybe<Array<Maybe<AppliedLineItemProductDiscount>>> + shippingDiscounts?: Maybe<Array<Maybe<AppliedLineItemShippingDiscount>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + auditInfo?: Maybe<CrAuditInfo> + shippingAmountBeforeDiscountsAndAdjustments?: Maybe<Scalars['Float']> + weightedOrderAdjustment?: Maybe<Scalars['Float']> + weightedOrderDiscount?: Maybe<Scalars['Float']> + adjustedLineItemSubtotal?: Maybe<Scalars['Float']> + totalWithoutWeightedShippingAndHandling?: Maybe<Scalars['Float']> + weightedOrderTax?: Maybe<Scalars['Float']> + weightedOrderShipping?: Maybe<Scalars['Float']> + weightedOrderShippingDiscount?: Maybe<Scalars['Float']> + weightedOrderShippingManualAdjustment?: Maybe<Scalars['Float']> + weightedOrderShippingTax?: Maybe<Scalars['Float']> + weightedOrderHandlingFee?: Maybe<Scalars['Float']> + weightedOrderHandlingFeeTax?: Maybe<Scalars['Float']> + weightedOrderHandlingFeeDiscount?: Maybe<Scalars['Float']> + weightedOrderDuty?: Maybe<Scalars['Float']> + totalWithWeightedShippingAndHandling?: Maybe<Scalars['Float']> + weightedOrderHandlingAdjustment?: Maybe<Scalars['Float']> + autoAddDiscountId?: Maybe<Scalars['Int']> + isAssemblyRequired?: Maybe<Scalars['Boolean']> + childItemIds?: Maybe<Array<Scalars['String']>> + parentItemId?: Maybe<Scalars['String']> +} + +export type CartItem_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CartItemCollection = { + __typename?: 'CartItemCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CartItemCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<CartItem>>> +} + +export type CartItemCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CartItemInput = { + id?: Maybe<Scalars['String']> + fulfillmentLocationCode?: Maybe<Scalars['String']> + fulfillmentMethod?: Maybe<Scalars['String']> + localeCode?: Maybe<Scalars['String']> + purchaseLocation?: Maybe<Scalars['String']> + lineId?: Maybe<Scalars['Int']> + product?: Maybe<CrProductInput> + quantity: Scalars['Int'] + isRecurring?: Maybe<Scalars['Boolean']> + isTaxable?: Maybe<Scalars['Boolean']> + subtotal?: Maybe<Scalars['Float']> + extendedTotal?: Maybe<Scalars['Float']> + taxableTotal?: Maybe<Scalars['Float']> + discountTotal?: Maybe<Scalars['Float']> + discountedTotal?: Maybe<Scalars['Float']> + itemTaxTotal?: Maybe<Scalars['Float']> + shippingTaxTotal?: Maybe<Scalars['Float']> + shippingTotal?: Maybe<Scalars['Float']> + handlingAmount?: Maybe<Scalars['Float']> + feeTotal?: Maybe<Scalars['Float']> + total?: Maybe<Scalars['Float']> + unitPrice?: Maybe<CommerceUnitPriceInput> + productDiscount?: Maybe<AppliedLineItemProductDiscountInput> + productDiscounts?: Maybe<Array<Maybe<AppliedLineItemProductDiscountInput>>> + shippingDiscounts?: Maybe<Array<Maybe<AppliedLineItemShippingDiscountInput>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + auditInfo?: Maybe<CrAuditInfoInput> + shippingAmountBeforeDiscountsAndAdjustments?: Maybe<Scalars['Float']> + weightedOrderAdjustment?: Maybe<Scalars['Float']> + weightedOrderDiscount?: Maybe<Scalars['Float']> + adjustedLineItemSubtotal?: Maybe<Scalars['Float']> + totalWithoutWeightedShippingAndHandling?: Maybe<Scalars['Float']> + weightedOrderTax?: Maybe<Scalars['Float']> + weightedOrderShipping?: Maybe<Scalars['Float']> + weightedOrderShippingDiscount?: Maybe<Scalars['Float']> + weightedOrderShippingManualAdjustment?: Maybe<Scalars['Float']> + weightedOrderShippingTax?: Maybe<Scalars['Float']> + weightedOrderHandlingFee?: Maybe<Scalars['Float']> + weightedOrderHandlingFeeTax?: Maybe<Scalars['Float']> + weightedOrderHandlingFeeDiscount?: Maybe<Scalars['Float']> + weightedOrderDuty?: Maybe<Scalars['Float']> + totalWithWeightedShippingAndHandling?: Maybe<Scalars['Float']> + weightedOrderHandlingAdjustment?: Maybe<Scalars['Float']> + autoAddDiscountId?: Maybe<Scalars['Int']> + isAssemblyRequired?: Maybe<Scalars['Boolean']> + childItemIds?: Maybe<Array<Scalars['String']>> + parentItemId?: Maybe<Scalars['String']> +} + +export type CartMessage = { + __typename?: 'CartMessage' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CartMessage> + message?: Maybe<Scalars['String']> + messageType?: Maybe<Scalars['String']> + productsRemoved?: Maybe<Array<Maybe<CrProduct>>> +} + +export type CartMessage_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CartMessageInput = { + message?: Maybe<Scalars['String']> + messageType?: Maybe<Scalars['String']> + productsRemoved?: Maybe<Array<Maybe<CrProductInput>>> +} + +export type CartSummary = { + __typename?: 'CartSummary' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CartSummary> + itemCount?: Maybe<Scalars['Int']> + totalQuantity?: Maybe<Scalars['Int']> + total?: Maybe<Scalars['Float']> + isExpired?: Maybe<Scalars['Boolean']> + hasActiveCart?: Maybe<Scalars['Boolean']> +} + +export type CartSummary_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CategoryCollection = { + __typename?: 'CategoryCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CategoryCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<PrCategory>>> +} + +export type CategoryCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CategoryContent = { + __typename?: 'CategoryContent' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CategoryContent> + categoryImages?: Maybe<Array<Maybe<CategoryImage>>> + name?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + pageTitle?: Maybe<Scalars['String']> + metaTagTitle?: Maybe<Scalars['String']> + metaTagDescription?: Maybe<Scalars['String']> + metaTagKeywords?: Maybe<Scalars['String']> + slug?: Maybe<Scalars['String']> +} + +export type CategoryContent_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CategoryImage = { + __typename?: 'CategoryImage' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CategoryImage> + imageLabel?: Maybe<Scalars['String']> + altText?: Maybe<Scalars['String']> + imageUrl?: Maybe<Scalars['String']> + cmsId?: Maybe<Scalars['String']> + videoUrl?: Maybe<Scalars['String']> + mediaType?: Maybe<Scalars['String']> + sequence?: Maybe<Scalars['Int']> +} + +export type CategoryImage_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CategoryPagedCollection = { + __typename?: 'CategoryPagedCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CategoryPagedCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<PrCategory>>> +} + +export type CategoryPagedCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ChangeMessage = { + __typename?: 'ChangeMessage' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ChangeMessage> + id?: Maybe<Scalars['String']> + correlationId?: Maybe<Scalars['String']> + userId?: Maybe<Scalars['String']> + userFirstName?: Maybe<Scalars['String']> + userLastName?: Maybe<Scalars['String']> + userScopeType?: Maybe<Scalars['String']> + appId?: Maybe<Scalars['String']> + appKey?: Maybe<Scalars['String']> + appName?: Maybe<Scalars['String']> + subjectType?: Maybe<Scalars['String']> + success?: Maybe<Scalars['Boolean']> + identifier?: Maybe<Scalars['String']> + subject?: Maybe<Scalars['String']> + verb?: Maybe<Scalars['String']> + message?: Maybe<Scalars['String']> + metadata?: Maybe<Scalars['Object']> + oldValue?: Maybe<Scalars['String']> + newValue?: Maybe<Scalars['String']> + amount?: Maybe<Scalars['Float']> + createDate?: Maybe<Scalars['DateTime']> +} + +export type ChangeMessage_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ChangeMessageInput = { + id?: Maybe<Scalars['String']> + correlationId?: Maybe<Scalars['String']> + userId?: Maybe<Scalars['String']> + userFirstName?: Maybe<Scalars['String']> + userLastName?: Maybe<Scalars['String']> + userScopeType?: Maybe<Scalars['String']> + appId?: Maybe<Scalars['String']> + appKey?: Maybe<Scalars['String']> + appName?: Maybe<Scalars['String']> + subjectType?: Maybe<Scalars['String']> + success?: Maybe<Scalars['Boolean']> + identifier?: Maybe<Scalars['String']> + subject?: Maybe<Scalars['String']> + verb?: Maybe<Scalars['String']> + message?: Maybe<Scalars['String']> + metadata?: Maybe<Scalars['Object']> + oldValue?: Maybe<Scalars['String']> + newValue?: Maybe<Scalars['String']> + amount?: Maybe<Scalars['Float']> + createDate?: Maybe<Scalars['DateTime']> +} + +export type ChangePasswordResult = { + __typename?: 'ChangePasswordResult' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ChangePasswordResult> + accountId: Scalars['Int'] + succeeded?: Maybe<Scalars['Boolean']> + errorMessage?: Maybe<Scalars['String']> +} + +export type ChangePasswordResult_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ChangePasswordResultCollection = { + __typename?: 'ChangePasswordResultCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ChangePasswordResultCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<ChangePasswordResult>>> +} + +export type ChangePasswordResultCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type Channel = { + __typename?: 'Channel' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Channel> + tenantId: Scalars['Int'] + code?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + region?: Maybe<Scalars['String']> + countryCode?: Maybe<Scalars['String']> + groupCode?: Maybe<Scalars['String']> + siteIds?: Maybe<Array<Scalars['Int']>> + auditInfo?: Maybe<CrAuditInfo> +} + +export type Channel_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ChannelCollection = { + __typename?: 'ChannelCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ChannelCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<Channel>>> +} + +export type ChannelCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ChannelGroup = { + __typename?: 'ChannelGroup' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ChannelGroup> + tenantId: Scalars['Int'] + code?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfo> +} + +export type ChannelGroup_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ChannelGroupCollection = { + __typename?: 'ChannelGroupCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ChannelGroupCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<ChannelGroup>>> +} + +export type ChannelGroupCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ChannelGroupInput = { + tenantId: Scalars['Int'] + code?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfoInput> +} + +export type ChannelInput = { + tenantId: Scalars['Int'] + code?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + region?: Maybe<Scalars['String']> + countryCode?: Maybe<Scalars['String']> + groupCode?: Maybe<Scalars['String']> + siteIds?: Maybe<Array<Scalars['Int']>> + auditInfo?: Maybe<CrAuditInfoInput> +} + +export type CheckPayment = { + __typename?: 'CheckPayment' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CheckPayment> + checkNumber?: Maybe<Scalars['String']> +} + +export type CheckPayment_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CheckPaymentInput = { + checkNumber?: Maybe<Scalars['String']> +} + +export type Checkout = { + __typename?: 'Checkout' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Checkout> + id?: Maybe<Scalars['String']> + siteId: Scalars['Int'] + tenantId: Scalars['Int'] + number?: Maybe<Scalars['Int']> + originalCartId?: Maybe<Scalars['String']> + submittedDate?: Maybe<Scalars['DateTime']> + type?: Maybe<Scalars['String']> + items?: Maybe<Array<Maybe<CrOrderItem>>> + groupings?: Maybe<Array<Maybe<CheckoutGrouping>>> + auditInfo?: Maybe<CrAuditInfo> + destinations?: Maybe<Array<Maybe<Destination>>> + payments?: Maybe<Array<Maybe<Payment>>> + amountRemainingForPayment: Scalars['Float'] + acceptsMarketing?: Maybe<Scalars['Boolean']> + customerAccountId?: Maybe<Scalars['Int']> + email?: Maybe<Scalars['String']> + customerTaxId?: Maybe<Scalars['String']> + isTaxExempt?: Maybe<Scalars['Boolean']> + currencyCode?: Maybe<Scalars['String']> + priceListCode?: Maybe<Scalars['String']> + attributes?: Maybe<Array<Maybe<OrderAttribute>>> + shopperNotes?: Maybe<ShopperNotes> + availableActions?: Maybe<Array<Scalars['String']>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + channelCode?: Maybe<Scalars['String']> + locationCode?: Maybe<Scalars['String']> + ipAddress?: Maybe<Scalars['String']> + sourceDevice?: Maybe<Scalars['String']> + visitId?: Maybe<Scalars['String']> + webSessionId?: Maybe<Scalars['String']> + customerInteractionType?: Maybe<Scalars['String']> + orderDiscounts?: Maybe<Array<Maybe<CrAppliedDiscount>>> + couponCodes?: Maybe<Array<Scalars['String']>> + invalidCoupons?: Maybe<Array<Maybe<InvalidCoupon>>> + suggestedDiscounts?: Maybe<Array<Maybe<SuggestedDiscount>>> + discountThresholdMessages?: Maybe<Array<Maybe<ThresholdMessage>>> + dutyTotal?: Maybe<Scalars['Float']> + feeTotal: Scalars['Float'] + subTotal: Scalars['Float'] + itemLevelProductDiscountTotal: Scalars['Float'] + orderLevelProductDiscountTotal: Scalars['Float'] + itemTaxTotal: Scalars['Float'] + itemTotal: Scalars['Float'] + shippingSubTotal: Scalars['Float'] + itemLevelShippingDiscountTotal: Scalars['Float'] + orderLevelShippingDiscountTotal: Scalars['Float'] + shippingTaxTotal: Scalars['Float'] + shippingTotal: Scalars['Float'] + handlingSubTotal: Scalars['Float'] + itemLevelHandlingDiscountTotal: Scalars['Float'] + orderLevelHandlingDiscountTotal: Scalars['Float'] + handlingTaxTotal: Scalars['Float'] + handlingTotal: Scalars['Float'] + total: Scalars['Float'] +} + +export type Checkout_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CheckoutActionInput = { + actionName?: Maybe<Scalars['String']> +} + +export type CheckoutCollection = { + __typename?: 'CheckoutCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CheckoutCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<Checkout>>> +} + +export type CheckoutCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CheckoutGroupRates = { + __typename?: 'CheckoutGroupRates' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CheckoutGroupRates> + groupingId?: Maybe<Scalars['String']> + shippingRates?: Maybe<Array<Maybe<ShippingRate>>> +} + +export type CheckoutGroupRates_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CheckoutGroupShippingMethodInput = { + groupingId?: Maybe<Scalars['String']> + shippingRate?: Maybe<ShippingRateInput> +} + +export type CheckoutGrouping = { + __typename?: 'CheckoutGrouping' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CheckoutGrouping> + id?: Maybe<Scalars['String']> + destinationId?: Maybe<Scalars['String']> + fulfillmentMethod?: Maybe<Scalars['String']> + orderItemIds?: Maybe<Array<Scalars['String']>> + shippingMethodCode?: Maybe<Scalars['String']> + shippingMethodName?: Maybe<Scalars['String']> + standaloneGroup?: Maybe<Scalars['Boolean']> + shippingDiscounts?: Maybe<Array<Maybe<ShippingDiscount>>> + handlingDiscounts?: Maybe<Array<Maybe<CrAppliedDiscount>>> + dutyAmount?: Maybe<Scalars['Float']> + dutyTotal: Scalars['Float'] + shippingAmount?: Maybe<Scalars['Float']> + shippingSubTotal: Scalars['Float'] + itemLevelShippingDiscountTotal: Scalars['Float'] + orderLevelShippingDiscountTotal: Scalars['Float'] + shippingTax?: Maybe<Scalars['Float']> + shippingTaxTotal: Scalars['Float'] + shippingTotal: Scalars['Float'] + handlingAmount?: Maybe<Scalars['Float']> + handlingSubTotal: Scalars['Float'] + itemLevelHandlingDiscountTotal: Scalars['Float'] + orderLevelHandlingDiscountTotal: Scalars['Float'] + handlingTax?: Maybe<Scalars['Float']> + handlingTaxTotal: Scalars['Float'] + handlingTotal: Scalars['Float'] + taxData?: Maybe<Scalars['Object']> +} + +export type CheckoutGrouping_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CheckoutGroupingInput = { + id?: Maybe<Scalars['String']> + destinationId?: Maybe<Scalars['String']> + fulfillmentMethod?: Maybe<Scalars['String']> + orderItemIds?: Maybe<Array<Scalars['String']>> + shippingMethodCode?: Maybe<Scalars['String']> + shippingMethodName?: Maybe<Scalars['String']> + standaloneGroup?: Maybe<Scalars['Boolean']> + shippingDiscounts?: Maybe<Array<Maybe<ShippingDiscountInput>>> + handlingDiscounts?: Maybe<Array<Maybe<CrAppliedDiscountInput>>> + dutyAmount?: Maybe<Scalars['Float']> + dutyTotal: Scalars['Float'] + shippingAmount?: Maybe<Scalars['Float']> + shippingSubTotal: Scalars['Float'] + itemLevelShippingDiscountTotal: Scalars['Float'] + orderLevelShippingDiscountTotal: Scalars['Float'] + shippingTax?: Maybe<Scalars['Float']> + shippingTaxTotal: Scalars['Float'] + shippingTotal: Scalars['Float'] + handlingAmount?: Maybe<Scalars['Float']> + handlingSubTotal: Scalars['Float'] + itemLevelHandlingDiscountTotal: Scalars['Float'] + orderLevelHandlingDiscountTotal: Scalars['Float'] + handlingTax?: Maybe<Scalars['Float']> + handlingTaxTotal: Scalars['Float'] + handlingTotal: Scalars['Float'] + taxData?: Maybe<Scalars['Object']> +} + +export type CheckoutInput = { + id?: Maybe<Scalars['String']> + siteId: Scalars['Int'] + tenantId: Scalars['Int'] + number?: Maybe<Scalars['Int']> + originalCartId?: Maybe<Scalars['String']> + submittedDate?: Maybe<Scalars['DateTime']> + type?: Maybe<Scalars['String']> + items?: Maybe<Array<Maybe<CrOrderItemInput>>> + groupings?: Maybe<Array<Maybe<CheckoutGroupingInput>>> + auditInfo?: Maybe<CrAuditInfoInput> + destinations?: Maybe<Array<Maybe<DestinationInput>>> + payments?: Maybe<Array<Maybe<PaymentInput>>> + amountRemainingForPayment: Scalars['Float'] + acceptsMarketing?: Maybe<Scalars['Boolean']> + customerAccountId?: Maybe<Scalars['Int']> + email?: Maybe<Scalars['String']> + customerTaxId?: Maybe<Scalars['String']> + isTaxExempt?: Maybe<Scalars['Boolean']> + currencyCode?: Maybe<Scalars['String']> + priceListCode?: Maybe<Scalars['String']> + attributes?: Maybe<Array<Maybe<OrderAttributeInput>>> + shopperNotes?: Maybe<ShopperNotesInput> + availableActions?: Maybe<Array<Scalars['String']>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + channelCode?: Maybe<Scalars['String']> + locationCode?: Maybe<Scalars['String']> + ipAddress?: Maybe<Scalars['String']> + sourceDevice?: Maybe<Scalars['String']> + visitId?: Maybe<Scalars['String']> + webSessionId?: Maybe<Scalars['String']> + customerInteractionType?: Maybe<Scalars['String']> + orderDiscounts?: Maybe<Array<Maybe<CrAppliedDiscountInput>>> + couponCodes?: Maybe<Array<Scalars['String']>> + invalidCoupons?: Maybe<Array<Maybe<InvalidCouponInput>>> + suggestedDiscounts?: Maybe<Array<Maybe<SuggestedDiscountInput>>> + discountThresholdMessages?: Maybe<Array<Maybe<ThresholdMessageInput>>> + dutyTotal?: Maybe<Scalars['Float']> + feeTotal: Scalars['Float'] + subTotal: Scalars['Float'] + itemLevelProductDiscountTotal: Scalars['Float'] + orderLevelProductDiscountTotal: Scalars['Float'] + itemTaxTotal: Scalars['Float'] + itemTotal: Scalars['Float'] + shippingSubTotal: Scalars['Float'] + itemLevelShippingDiscountTotal: Scalars['Float'] + orderLevelShippingDiscountTotal: Scalars['Float'] + shippingTaxTotal: Scalars['Float'] + shippingTotal: Scalars['Float'] + handlingSubTotal: Scalars['Float'] + itemLevelHandlingDiscountTotal: Scalars['Float'] + orderLevelHandlingDiscountTotal: Scalars['Float'] + handlingTaxTotal: Scalars['Float'] + handlingTotal: Scalars['Float'] + total: Scalars['Float'] +} + +export type CoHttpContentInput = { + headers?: Maybe<Array<Maybe<KeyValuePair2Input>>> +} + +export type CoHttpMethodInput = { + method?: Maybe<Scalars['String']> +} + +export type CoHttpRequestMessageInput = { + version?: Maybe<Scalars['String']> + content?: Maybe<CoHttpContentInput> + method?: Maybe<CoHttpMethodInput> + requestUri?: Maybe<Scalars['DateTime']> + headers?: Maybe<Array<Maybe<KeyValuePair2Input>>> + properties?: Maybe<Scalars['Object']> +} + +export type CommerceSummary = { + __typename?: 'CommerceSummary' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CommerceSummary> + totalOrderAmount?: Maybe<CurrencyAmount> + orderCount: Scalars['Int'] + lastOrderDate?: Maybe<Scalars['DateTime']> + wishlistCount: Scalars['Int'] + visitsCount: Scalars['Int'] +} + +export type CommerceSummary_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CommerceSummaryInput = { + totalOrderAmount?: Maybe<CurrencyAmountInput> + orderCount: Scalars['Int'] + lastOrderDate?: Maybe<Scalars['DateTime']> + wishlistCount: Scalars['Int'] + visitsCount: Scalars['Int'] +} + +export type CommerceUnitPrice = { + __typename?: 'CommerceUnitPrice' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CommerceUnitPrice> + extendedAmount?: Maybe<Scalars['Float']> + listAmount?: Maybe<Scalars['Float']> + saleAmount?: Maybe<Scalars['Float']> + overrideAmount?: Maybe<Scalars['Float']> +} + +export type CommerceUnitPrice_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CommerceUnitPriceInput = { + extendedAmount?: Maybe<Scalars['Float']> + listAmount?: Maybe<Scalars['Float']> + saleAmount?: Maybe<Scalars['Float']> + overrideAmount?: Maybe<Scalars['Float']> +} + +export type ConfiguredProduct = { + __typename?: 'ConfiguredProduct' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ConfiguredProduct> + productCode?: Maybe<Scalars['String']> + purchaseLocation?: Maybe<Scalars['String']> + fulfillmentTypesSupported?: Maybe<Array<Scalars['String']>> + variationProductCode?: Maybe<Scalars['String']> + upc?: Maybe<Scalars['String']> + mfgPartNumber?: Maybe<Scalars['String']> + purchasableState?: Maybe<ProductPurchasableState> + priceRange?: Maybe<ProductPriceRange> + volumePriceBands?: Maybe<Array<Maybe<ProductVolumePrice>>> + volumePriceRange?: Maybe<ProductPriceRange> + price?: Maybe<ProductPrice> + availableShippingDiscounts?: Maybe<Array<Maybe<PrDiscount>>> + measurements?: Maybe<PrPackageMeasurements> + inventoryInfo?: Maybe<ProductInventoryInfo> + options?: Maybe<Array<Maybe<ProductOption>>> + properties?: Maybe<Array<Maybe<ProductProperty>>> + priceListEntryTypeProperty?: Maybe<ProductProperty> + productImages?: Maybe<Array<Maybe<ProductImage>>> +} + +export type ConfiguredProduct_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type Contact = { + __typename?: 'Contact' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Contact> + id?: Maybe<Scalars['Int']> + email?: Maybe<Scalars['String']> + firstName?: Maybe<Scalars['String']> + middleNameOrInitial?: Maybe<Scalars['String']> + lastNameOrSurname?: Maybe<Scalars['String']> + companyOrOrganization?: Maybe<Scalars['String']> + phoneNumbers?: Maybe<CrPhone> + address?: Maybe<CrAddress> +} + +export type Contact_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ContactInput = { + id?: Maybe<Scalars['Int']> + email?: Maybe<Scalars['String']> + firstName?: Maybe<Scalars['String']> + middleNameOrInitial?: Maybe<Scalars['String']> + lastNameOrSurname?: Maybe<Scalars['String']> + companyOrOrganization?: Maybe<Scalars['String']> + phoneNumbers?: Maybe<CrPhoneInput> + address?: Maybe<CrAddressInput> +} + +export type ContactType = { + __typename?: 'ContactType' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ContactType> + name?: Maybe<Scalars['String']> + isPrimary?: Maybe<Scalars['Boolean']> +} + +export type ContactType_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ContactTypeInput = { + name?: Maybe<Scalars['String']> + isPrimary?: Maybe<Scalars['Boolean']> +} + +export type Coordinates = { + __typename?: 'Coordinates' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Coordinates> + lat: Scalars['Float'] + lng: Scalars['Float'] +} + +export type Coordinates_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CoordinatesInput = { + lat: Scalars['Float'] + lng: Scalars['Float'] +} + +export type CrAddress = { + __typename?: 'CrAddress' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrAddress> + address1?: Maybe<Scalars['String']> + address2?: Maybe<Scalars['String']> + address3?: Maybe<Scalars['String']> + address4?: Maybe<Scalars['String']> + cityOrTown?: Maybe<Scalars['String']> + stateOrProvince?: Maybe<Scalars['String']> + postalOrZipCode?: Maybe<Scalars['String']> + countryCode?: Maybe<Scalars['String']> + addressType?: Maybe<Scalars['String']> + isValidated?: Maybe<Scalars['Boolean']> +} + +export type CrAddress_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrAddressInput = { + address1?: Maybe<Scalars['String']> + address2?: Maybe<Scalars['String']> + address3?: Maybe<Scalars['String']> + address4?: Maybe<Scalars['String']> + cityOrTown?: Maybe<Scalars['String']> + stateOrProvince?: Maybe<Scalars['String']> + postalOrZipCode?: Maybe<Scalars['String']> + countryCode?: Maybe<Scalars['String']> + addressType?: Maybe<Scalars['String']> + isValidated?: Maybe<Scalars['Boolean']> +} + +export type CrAppliedDiscount = { + __typename?: 'CrAppliedDiscount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrAppliedDiscount> + impact?: Maybe<Scalars['Float']> + discount?: Maybe<CrDiscount> + couponCode?: Maybe<Scalars['String']> + excluded?: Maybe<Scalars['Boolean']> +} + +export type CrAppliedDiscount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrAppliedDiscountInput = { + impact?: Maybe<Scalars['Float']> + discount?: Maybe<CrDiscountInput> + couponCode?: Maybe<Scalars['String']> + excluded?: Maybe<Scalars['Boolean']> +} + +export type CrAuditInfo = { + __typename?: 'CrAuditInfo' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrAuditInfo> + updateDate?: Maybe<Scalars['DateTime']> + createDate?: Maybe<Scalars['DateTime']> + updateBy?: Maybe<Scalars['String']> + createBy?: Maybe<Scalars['String']> +} + +export type CrAuditInfo_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrAuditInfoInput = { + updateDate?: Maybe<Scalars['DateTime']> + createDate?: Maybe<Scalars['DateTime']> + updateBy?: Maybe<Scalars['String']> + createBy?: Maybe<Scalars['String']> +} + +export type CrBundledProduct = { + __typename?: 'CrBundledProduct' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrBundledProduct> + quantity: Scalars['Int'] + optionAttributeFQN?: Maybe<Scalars['String']> + optionValue?: Maybe<Scalars['Object']> + creditValue?: Maybe<Scalars['Float']> + deltaPrice?: Maybe<Scalars['Float']> + productCode?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + goodsType?: Maybe<Scalars['String']> + isPackagedStandAlone?: Maybe<Scalars['Boolean']> + stock?: Maybe<ProductStock> + productReservationId?: Maybe<Scalars['Int']> + allocationId?: Maybe<Scalars['Int']> + allocationExpiration?: Maybe<Scalars['DateTime']> + measurements?: Maybe<CrPackageMeasurements> + fulfillmentStatus?: Maybe<Scalars['String']> +} + +export type CrBundledProduct_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrBundledProductInput = { + quantity: Scalars['Int'] + optionAttributeFQN?: Maybe<Scalars['String']> + optionValue?: Maybe<Scalars['Object']> + creditValue?: Maybe<Scalars['Float']> + deltaPrice?: Maybe<Scalars['Float']> + productCode?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + goodsType?: Maybe<Scalars['String']> + isPackagedStandAlone?: Maybe<Scalars['Boolean']> + stock?: Maybe<ProductStockInput> + productReservationId?: Maybe<Scalars['Int']> + allocationId?: Maybe<Scalars['Int']> + allocationExpiration?: Maybe<Scalars['DateTime']> + measurements?: Maybe<CrPackageMeasurementsInput> + fulfillmentStatus?: Maybe<Scalars['String']> +} + +export type CrCategory = { + __typename?: 'CrCategory' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrCategory> + id?: Maybe<Scalars['Int']> + parent?: Maybe<CrCategory> +} + +export type CrCategory_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrCategoryInput = { + id?: Maybe<Scalars['Int']> + parent?: Maybe<CrCategoryInput> +} + +export type CrDiscount = { + __typename?: 'CrDiscount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrDiscount> + id: Scalars['Int'] + name?: Maybe<Scalars['String']> + itemIds?: Maybe<Array<Scalars['String']>> + expirationDate?: Maybe<Scalars['DateTime']> + hasMultipleTargetProducts?: Maybe<Scalars['Boolean']> +} + +export type CrDiscount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrDiscountInput = { + id: Scalars['Int'] + name?: Maybe<Scalars['String']> + itemIds?: Maybe<Array<Scalars['String']>> + expirationDate?: Maybe<Scalars['DateTime']> + hasMultipleTargetProducts?: Maybe<Scalars['Boolean']> +} + +export type CrMeasurement = { + __typename?: 'CrMeasurement' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrMeasurement> + unit?: Maybe<Scalars['String']> + value?: Maybe<Scalars['Float']> +} + +export type CrMeasurement_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrMeasurementInput = { + unit?: Maybe<Scalars['String']> + value?: Maybe<Scalars['Float']> +} + +export type CrOrderItem = { + __typename?: 'CrOrderItem' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrOrderItem> + id?: Maybe<Scalars['String']> + destinationId?: Maybe<Scalars['String']> + originalCartItemId?: Maybe<Scalars['String']> + fulfillmentLocationCode?: Maybe<Scalars['String']> + fulfillmentMethod?: Maybe<Scalars['String']> + dutyAmount?: Maybe<Scalars['Float']> + expectedDeliveryDate?: Maybe<Scalars['DateTime']> + localeCode?: Maybe<Scalars['String']> + purchaseLocation?: Maybe<Scalars['String']> + lineId?: Maybe<Scalars['Int']> + product?: Maybe<CrProduct> + quantity: Scalars['Int'] + isRecurring?: Maybe<Scalars['Boolean']> + isTaxable?: Maybe<Scalars['Boolean']> + subtotal?: Maybe<Scalars['Float']> + extendedTotal?: Maybe<Scalars['Float']> + taxableTotal?: Maybe<Scalars['Float']> + discountTotal?: Maybe<Scalars['Float']> + discountedTotal?: Maybe<Scalars['Float']> + itemTaxTotal?: Maybe<Scalars['Float']> + shippingTaxTotal?: Maybe<Scalars['Float']> + shippingTotal?: Maybe<Scalars['Float']> + handlingAmount?: Maybe<Scalars['Float']> + feeTotal?: Maybe<Scalars['Float']> + total?: Maybe<Scalars['Float']> + unitPrice?: Maybe<CommerceUnitPrice> + productDiscount?: Maybe<AppliedLineItemProductDiscount> + productDiscounts?: Maybe<Array<Maybe<AppliedLineItemProductDiscount>>> + shippingDiscounts?: Maybe<Array<Maybe<AppliedLineItemShippingDiscount>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + auditInfo?: Maybe<CrAuditInfo> + shippingAmountBeforeDiscountsAndAdjustments?: Maybe<Scalars['Float']> + weightedOrderAdjustment?: Maybe<Scalars['Float']> + weightedOrderDiscount?: Maybe<Scalars['Float']> + adjustedLineItemSubtotal?: Maybe<Scalars['Float']> + totalWithoutWeightedShippingAndHandling?: Maybe<Scalars['Float']> + weightedOrderTax?: Maybe<Scalars['Float']> + weightedOrderShipping?: Maybe<Scalars['Float']> + weightedOrderShippingDiscount?: Maybe<Scalars['Float']> + weightedOrderShippingManualAdjustment?: Maybe<Scalars['Float']> + weightedOrderShippingTax?: Maybe<Scalars['Float']> + weightedOrderHandlingFee?: Maybe<Scalars['Float']> + weightedOrderHandlingFeeTax?: Maybe<Scalars['Float']> + weightedOrderHandlingFeeDiscount?: Maybe<Scalars['Float']> + weightedOrderDuty?: Maybe<Scalars['Float']> + totalWithWeightedShippingAndHandling?: Maybe<Scalars['Float']> + weightedOrderHandlingAdjustment?: Maybe<Scalars['Float']> + autoAddDiscountId?: Maybe<Scalars['Int']> + isAssemblyRequired?: Maybe<Scalars['Boolean']> + childItemIds?: Maybe<Array<Scalars['String']>> + parentItemId?: Maybe<Scalars['String']> +} + +export type CrOrderItem_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrOrderItemInput = { + id?: Maybe<Scalars['String']> + destinationId?: Maybe<Scalars['String']> + originalCartItemId?: Maybe<Scalars['String']> + fulfillmentLocationCode?: Maybe<Scalars['String']> + fulfillmentMethod?: Maybe<Scalars['String']> + dutyAmount?: Maybe<Scalars['Float']> + expectedDeliveryDate?: Maybe<Scalars['DateTime']> + localeCode?: Maybe<Scalars['String']> + purchaseLocation?: Maybe<Scalars['String']> + lineId?: Maybe<Scalars['Int']> + product?: Maybe<CrProductInput> + quantity: Scalars['Int'] + isRecurring?: Maybe<Scalars['Boolean']> + isTaxable?: Maybe<Scalars['Boolean']> + subtotal?: Maybe<Scalars['Float']> + extendedTotal?: Maybe<Scalars['Float']> + taxableTotal?: Maybe<Scalars['Float']> + discountTotal?: Maybe<Scalars['Float']> + discountedTotal?: Maybe<Scalars['Float']> + itemTaxTotal?: Maybe<Scalars['Float']> + shippingTaxTotal?: Maybe<Scalars['Float']> + shippingTotal?: Maybe<Scalars['Float']> + handlingAmount?: Maybe<Scalars['Float']> + feeTotal?: Maybe<Scalars['Float']> + total?: Maybe<Scalars['Float']> + unitPrice?: Maybe<CommerceUnitPriceInput> + productDiscount?: Maybe<AppliedLineItemProductDiscountInput> + productDiscounts?: Maybe<Array<Maybe<AppliedLineItemProductDiscountInput>>> + shippingDiscounts?: Maybe<Array<Maybe<AppliedLineItemShippingDiscountInput>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + auditInfo?: Maybe<CrAuditInfoInput> + shippingAmountBeforeDiscountsAndAdjustments?: Maybe<Scalars['Float']> + weightedOrderAdjustment?: Maybe<Scalars['Float']> + weightedOrderDiscount?: Maybe<Scalars['Float']> + adjustedLineItemSubtotal?: Maybe<Scalars['Float']> + totalWithoutWeightedShippingAndHandling?: Maybe<Scalars['Float']> + weightedOrderTax?: Maybe<Scalars['Float']> + weightedOrderShipping?: Maybe<Scalars['Float']> + weightedOrderShippingDiscount?: Maybe<Scalars['Float']> + weightedOrderShippingManualAdjustment?: Maybe<Scalars['Float']> + weightedOrderShippingTax?: Maybe<Scalars['Float']> + weightedOrderHandlingFee?: Maybe<Scalars['Float']> + weightedOrderHandlingFeeTax?: Maybe<Scalars['Float']> + weightedOrderHandlingFeeDiscount?: Maybe<Scalars['Float']> + weightedOrderDuty?: Maybe<Scalars['Float']> + totalWithWeightedShippingAndHandling?: Maybe<Scalars['Float']> + weightedOrderHandlingAdjustment?: Maybe<Scalars['Float']> + autoAddDiscountId?: Maybe<Scalars['Int']> + isAssemblyRequired?: Maybe<Scalars['Boolean']> + childItemIds?: Maybe<Array<Scalars['String']>> + parentItemId?: Maybe<Scalars['String']> +} + +export type CrPackageMeasurements = { + __typename?: 'CrPackageMeasurements' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrPackageMeasurements> + height?: Maybe<CrMeasurement> + width?: Maybe<CrMeasurement> + length?: Maybe<CrMeasurement> + weight?: Maybe<CrMeasurement> +} + +export type CrPackageMeasurements_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrPackageMeasurementsInput = { + height?: Maybe<CrMeasurementInput> + width?: Maybe<CrMeasurementInput> + length?: Maybe<CrMeasurementInput> + weight?: Maybe<CrMeasurementInput> +} + +export type CrPhone = { + __typename?: 'CrPhone' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrPhone> + home?: Maybe<Scalars['String']> + mobile?: Maybe<Scalars['String']> + work?: Maybe<Scalars['String']> +} + +export type CrPhone_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrPhoneInput = { + home?: Maybe<Scalars['String']> + mobile?: Maybe<Scalars['String']> + work?: Maybe<Scalars['String']> +} + +export type CrProduct = { + __typename?: 'CrProduct' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrProduct> + mfgPartNumber?: Maybe<Scalars['String']> + upc?: Maybe<Scalars['String']> + sku?: Maybe<Scalars['String']> + fulfillmentTypesSupported?: Maybe<Array<Scalars['String']>> + imageAlternateText?: Maybe<Scalars['String']> + imageUrl?: Maybe<Scalars['String']> + variationProductCode?: Maybe<Scalars['String']> + options?: Maybe<Array<Maybe<CrProductOption>>> + properties?: Maybe<Array<Maybe<CrProductProperty>>> + categories?: Maybe<Array<Maybe<CrCategory>>> + price?: Maybe<CrProductPrice> + discountsRestricted?: Maybe<Scalars['Boolean']> + discountsRestrictedStartDate?: Maybe<Scalars['DateTime']> + discountsRestrictedEndDate?: Maybe<Scalars['DateTime']> + isRecurring?: Maybe<Scalars['Boolean']> + isTaxable?: Maybe<Scalars['Boolean']> + productType?: Maybe<Scalars['String']> + productUsage?: Maybe<Scalars['String']> + bundledProducts?: Maybe<Array<Maybe<CrBundledProduct>>> + fulfillmentFields?: Maybe<Array<Maybe<FulfillmentField>>> + productCode?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + goodsType?: Maybe<Scalars['String']> + isPackagedStandAlone?: Maybe<Scalars['Boolean']> + stock?: Maybe<ProductStock> + productReservationId?: Maybe<Scalars['Int']> + allocationId?: Maybe<Scalars['Int']> + allocationExpiration?: Maybe<Scalars['DateTime']> + measurements?: Maybe<CrPackageMeasurements> + fulfillmentStatus?: Maybe<Scalars['String']> +} + +export type CrProduct_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrProductInput = { + mfgPartNumber?: Maybe<Scalars['String']> + upc?: Maybe<Scalars['String']> + sku?: Maybe<Scalars['String']> + fulfillmentTypesSupported?: Maybe<Array<Scalars['String']>> + imageAlternateText?: Maybe<Scalars['String']> + imageUrl?: Maybe<Scalars['String']> + variationProductCode?: Maybe<Scalars['String']> + options?: Maybe<Array<Maybe<CrProductOptionInput>>> + properties?: Maybe<Array<Maybe<CrProductPropertyInput>>> + categories?: Maybe<Array<Maybe<CrCategoryInput>>> + price?: Maybe<CrProductPriceInput> + discountsRestricted?: Maybe<Scalars['Boolean']> + discountsRestrictedStartDate?: Maybe<Scalars['DateTime']> + discountsRestrictedEndDate?: Maybe<Scalars['DateTime']> + isRecurring?: Maybe<Scalars['Boolean']> + isTaxable?: Maybe<Scalars['Boolean']> + productType?: Maybe<Scalars['String']> + productUsage?: Maybe<Scalars['String']> + bundledProducts?: Maybe<Array<Maybe<CrBundledProductInput>>> + fulfillmentFields?: Maybe<Array<Maybe<FulfillmentFieldInput>>> + productCode?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + goodsType?: Maybe<Scalars['String']> + isPackagedStandAlone?: Maybe<Scalars['Boolean']> + stock?: Maybe<ProductStockInput> + productReservationId?: Maybe<Scalars['Int']> + allocationId?: Maybe<Scalars['Int']> + allocationExpiration?: Maybe<Scalars['DateTime']> + measurements?: Maybe<CrPackageMeasurementsInput> + fulfillmentStatus?: Maybe<Scalars['String']> +} + +export type CrProductOption = { + __typename?: 'CrProductOption' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrProductOption> + name?: Maybe<Scalars['String']> + value?: Maybe<Scalars['Object']> + shopperEnteredValue?: Maybe<Scalars['Object']> + attributeFQN?: Maybe<Scalars['String']> + dataType?: Maybe<Scalars['String']> + stringValue?: Maybe<Scalars['String']> +} + +export type CrProductOption_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrProductOptionInput = { + name?: Maybe<Scalars['String']> + value?: Maybe<Scalars['Object']> + shopperEnteredValue?: Maybe<Scalars['Object']> + attributeFQN?: Maybe<Scalars['String']> + dataType?: Maybe<Scalars['String']> + stringValue?: Maybe<Scalars['String']> +} + +export type CrProductPrice = { + __typename?: 'CrProductPrice' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrProductPrice> + price?: Maybe<Scalars['Float']> + salePrice?: Maybe<Scalars['Float']> + tenantOverridePrice?: Maybe<Scalars['Float']> + msrp?: Maybe<Scalars['Float']> + creditValue?: Maybe<Scalars['Float']> + priceListCode?: Maybe<Scalars['String']> + priceListEntryMode?: Maybe<Scalars['String']> +} + +export type CrProductPrice_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrProductPriceInput = { + price?: Maybe<Scalars['Float']> + salePrice?: Maybe<Scalars['Float']> + tenantOverridePrice?: Maybe<Scalars['Float']> + msrp?: Maybe<Scalars['Float']> + creditValue?: Maybe<Scalars['Float']> + priceListCode?: Maybe<Scalars['String']> + priceListEntryMode?: Maybe<Scalars['String']> +} + +export type CrProductProperty = { + __typename?: 'CrProductProperty' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrProductProperty> + attributeFQN?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + dataType?: Maybe<Scalars['String']> + isMultiValue?: Maybe<Scalars['Boolean']> + values?: Maybe<Array<Maybe<CrProductPropertyValue>>> +} + +export type CrProductProperty_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrProductPropertyInput = { + attributeFQN?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + dataType?: Maybe<Scalars['String']> + isMultiValue?: Maybe<Scalars['Boolean']> + values?: Maybe<Array<Maybe<CrProductPropertyValueInput>>> +} + +export type CrProductPropertyValue = { + __typename?: 'CrProductPropertyValue' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CrProductPropertyValue> + stringValue?: Maybe<Scalars['String']> + value?: Maybe<Scalars['Object']> +} + +export type CrProductPropertyValue_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CrProductPropertyValueInput = { + stringValue?: Maybe<Scalars['String']> + value?: Maybe<Scalars['Object']> +} + +export type Credit = { + __typename?: 'Credit' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Credit> + code?: Maybe<Scalars['String']> + activationDate?: Maybe<Scalars['DateTime']> + creditType?: Maybe<Scalars['String']> + customCreditType?: Maybe<Scalars['String']> + currencyCode?: Maybe<Scalars['String']> + initialBalance?: Maybe<Scalars['Float']> + currentBalance?: Maybe<Scalars['Float']> + expirationDate?: Maybe<Scalars['DateTime']> + customerId?: Maybe<Scalars['Int']> + auditInfo?: Maybe<CuAuditInfo> + creditTypeId: Scalars['Int'] +} + +export type Credit_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CreditAuditEntry = { + __typename?: 'CreditAuditEntry' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CreditAuditEntry> + activityType?: Maybe<Scalars['String']> + details?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfo> + activityTypeId: Scalars['Int'] +} + +export type CreditAuditEntry_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CreditAuditEntryCollection = { + __typename?: 'CreditAuditEntryCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CreditAuditEntryCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<CreditAuditEntry>>> +} + +export type CreditAuditEntryCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CreditCollection = { + __typename?: 'CreditCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CreditCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<Credit>>> +} + +export type CreditCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CreditInput = { + code?: Maybe<Scalars['String']> + activationDate?: Maybe<Scalars['DateTime']> + creditType?: Maybe<Scalars['String']> + customCreditType?: Maybe<Scalars['String']> + currencyCode?: Maybe<Scalars['String']> + initialBalance?: Maybe<Scalars['Float']> + currentBalance?: Maybe<Scalars['Float']> + expirationDate?: Maybe<Scalars['DateTime']> + customerId?: Maybe<Scalars['Int']> + auditInfo?: Maybe<CuAuditInfoInput> + creditTypeId: Scalars['Int'] +} + +export type CreditTransaction = { + __typename?: 'CreditTransaction' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CreditTransaction> + id?: Maybe<Scalars['Int']> + transactionType?: Maybe<Scalars['String']> + comments?: Maybe<Scalars['String']> + impactAmount?: Maybe<Scalars['Float']> + auditInfo?: Maybe<CuAuditInfo> + orderId?: Maybe<Scalars['String']> + data?: Maybe<Scalars['Object']> +} + +export type CreditTransaction_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CreditTransactionCollection = { + __typename?: 'CreditTransactionCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CreditTransactionCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<CreditTransaction>>> +} + +export type CreditTransactionCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CreditTransactionInput = { + id?: Maybe<Scalars['Int']> + transactionType?: Maybe<Scalars['String']> + comments?: Maybe<Scalars['String']> + impactAmount?: Maybe<Scalars['Float']> + auditInfo?: Maybe<CuAuditInfoInput> + orderId?: Maybe<Scalars['String']> + data?: Maybe<Scalars['Object']> +} + +export type CuAddress = { + __typename?: 'CuAddress' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CuAddress> + address1?: Maybe<Scalars['String']> + address2?: Maybe<Scalars['String']> + address3?: Maybe<Scalars['String']> + address4?: Maybe<Scalars['String']> + cityOrTown?: Maybe<Scalars['String']> + stateOrProvince?: Maybe<Scalars['String']> + postalOrZipCode?: Maybe<Scalars['String']> + countryCode?: Maybe<Scalars['String']> + addressType?: Maybe<Scalars['String']> + isValidated?: Maybe<Scalars['Boolean']> +} + +export type CuAddress_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CuAddressInput = { + address1?: Maybe<Scalars['String']> + address2?: Maybe<Scalars['String']> + address3?: Maybe<Scalars['String']> + address4?: Maybe<Scalars['String']> + cityOrTown?: Maybe<Scalars['String']> + stateOrProvince?: Maybe<Scalars['String']> + postalOrZipCode?: Maybe<Scalars['String']> + countryCode?: Maybe<Scalars['String']> + addressType?: Maybe<Scalars['String']> + isValidated?: Maybe<Scalars['Boolean']> +} + +export type CuAttribute = { + __typename?: 'CuAttribute' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CuAttribute> + id?: Maybe<Scalars['Int']> + adminName?: Maybe<Scalars['String']> + namespace?: Maybe<Scalars['String']> + attributeCode: Scalars['String'] + inputType?: Maybe<Scalars['String']> + valueType: Scalars['String'] + dataType?: Maybe<Scalars['String']> + attributeMetadata?: Maybe<Array<Maybe<CuAttributeMetadataItem>>> + attributeFQN?: Maybe<Scalars['String']> + content?: Maybe<CuAttributeLocalizedContent> + validation?: Maybe<CuAttributeValidation> + vocabularyValues?: Maybe<Array<Maybe<CuAttributeVocabularyValue>>> + auditInfo?: Maybe<CuAuditInfo> + isActive?: Maybe<Scalars['Boolean']> + isRequired?: Maybe<Scalars['Boolean']> + isReadOnly?: Maybe<Scalars['Boolean']> + isMultiValued?: Maybe<Scalars['Boolean']> + isVisible?: Maybe<Scalars['Boolean']> + order?: Maybe<Scalars['Int']> + displayGroup: Scalars['String'] +} + +export type CuAttribute_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CuAttributeCollection = { + __typename?: 'CuAttributeCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CuAttributeCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<CuAttribute>>> +} + +export type CuAttributeCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CuAttributeInput = { + id?: Maybe<Scalars['Int']> + adminName?: Maybe<Scalars['String']> + namespace?: Maybe<Scalars['String']> + attributeCode: Scalars['String'] + inputType?: Maybe<Scalars['String']> + valueType: Scalars['String'] + dataType?: Maybe<Scalars['String']> + attributeMetadata?: Maybe<Array<Maybe<CuAttributeMetadataItemInput>>> + attributeFQN?: Maybe<Scalars['String']> + content?: Maybe<CuAttributeLocalizedContentInput> + validation?: Maybe<CuAttributeValidationInput> + vocabularyValues?: Maybe<Array<Maybe<CuAttributeVocabularyValueInput>>> + auditInfo?: Maybe<CuAuditInfoInput> + isActive?: Maybe<Scalars['Boolean']> + isRequired?: Maybe<Scalars['Boolean']> + isReadOnly?: Maybe<Scalars['Boolean']> + isMultiValued?: Maybe<Scalars['Boolean']> + isVisible?: Maybe<Scalars['Boolean']> + order?: Maybe<Scalars['Int']> + displayGroup: Scalars['String'] +} + +export type CuAttributeLocalizedContent = { + __typename?: 'CuAttributeLocalizedContent' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CuAttributeLocalizedContent> + localeCode?: Maybe<Scalars['String']> + value?: Maybe<Scalars['String']> +} + +export type CuAttributeLocalizedContent_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CuAttributeLocalizedContentInput = { + localeCode?: Maybe<Scalars['String']> + value?: Maybe<Scalars['String']> +} + +export type CuAttributeMetadataItem = { + __typename?: 'CuAttributeMetadataItem' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CuAttributeMetadataItem> + key: Scalars['String'] + value: Scalars['String'] +} + +export type CuAttributeMetadataItem_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CuAttributeMetadataItemInput = { + key: Scalars['String'] + value: Scalars['String'] +} + +export type CuAttributeValidation = { + __typename?: 'CuAttributeValidation' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CuAttributeValidation> + regularExpression?: Maybe<Scalars['String']> + minStringLength?: Maybe<Scalars['Int']> + maxStringLength?: Maybe<Scalars['Int']> + minNumericValue?: Maybe<Scalars['Float']> + maxNumericValue?: Maybe<Scalars['Float']> + minDateTime?: Maybe<Scalars['DateTime']> + maxDateTime?: Maybe<Scalars['DateTime']> +} + +export type CuAttributeValidation_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CuAttributeValidationInput = { + regularExpression?: Maybe<Scalars['String']> + minStringLength?: Maybe<Scalars['Int']> + maxStringLength?: Maybe<Scalars['Int']> + minNumericValue?: Maybe<Scalars['Float']> + maxNumericValue?: Maybe<Scalars['Float']> + minDateTime?: Maybe<Scalars['DateTime']> + maxDateTime?: Maybe<Scalars['DateTime']> +} + +export type CuAttributeValueLocalizedContent = { + __typename?: 'CuAttributeValueLocalizedContent' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CuAttributeValueLocalizedContent> + localeCode: Scalars['String'] + value: Scalars['String'] +} + +export type CuAttributeValueLocalizedContent_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CuAttributeValueLocalizedContentInput = { + localeCode: Scalars['String'] + value: Scalars['String'] +} + +export type CuAttributeVocabularyValue = { + __typename?: 'CuAttributeVocabularyValue' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CuAttributeVocabularyValue> + value: Scalars['String'] + sequence?: Maybe<Scalars['Int']> + isHidden?: Maybe<Scalars['Boolean']> + content?: Maybe<CuAttributeValueLocalizedContent> +} + +export type CuAttributeVocabularyValue_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CuAttributeVocabularyValueInput = { + value: Scalars['String'] + sequence?: Maybe<Scalars['Int']> + isHidden?: Maybe<Scalars['Boolean']> + content?: Maybe<CuAttributeValueLocalizedContentInput> +} + +export type CuAuditInfo = { + __typename?: 'CuAuditInfo' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CuAuditInfo> + updateDate?: Maybe<Scalars['DateTime']> + createDate?: Maybe<Scalars['DateTime']> + updateBy?: Maybe<Scalars['String']> + createBy?: Maybe<Scalars['String']> +} + +export type CuAuditInfo_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CuAuditInfoInput = { + updateDate?: Maybe<Scalars['DateTime']> + createDate?: Maybe<Scalars['DateTime']> + updateBy?: Maybe<Scalars['String']> + createBy?: Maybe<Scalars['String']> +} + +export type CuPhone = { + __typename?: 'CuPhone' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CuPhone> + home?: Maybe<Scalars['String']> + mobile?: Maybe<Scalars['String']> + work?: Maybe<Scalars['String']> +} + +export type CuPhone_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CuPhoneInput = { + home?: Maybe<Scalars['String']> + mobile?: Maybe<Scalars['String']> + work?: Maybe<Scalars['String']> +} + +export type CurrencyAmount = { + __typename?: 'CurrencyAmount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CurrencyAmount> + currencyCode?: Maybe<Scalars['String']> + amount: Scalars['Float'] +} + +export type CurrencyAmount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CurrencyAmountInput = { + currencyCode?: Maybe<Scalars['String']> + amount: Scalars['Float'] +} + +export type CurrencyExchangeRate = { + __typename?: 'CurrencyExchangeRate' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CurrencyExchangeRate> + fromCurrencyCode?: Maybe<Scalars['String']> + toCurrencyCode?: Maybe<Scalars['String']> + rate?: Maybe<Scalars['Float']> + multiplier?: Maybe<Scalars['Float']> + decimalPlaces?: Maybe<Scalars['Int']> + roundingStrategy?: Maybe<Scalars['Int']> + referenceData?: Maybe<Scalars['String']> +} + +export type CurrencyExchangeRate_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type Customer = { + __typename?: 'Customer' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Customer> + customerContact?: Maybe<Contact> + data?: Maybe<Scalars['Object']> + isDestinationCommercial?: Maybe<Scalars['Boolean']> +} + +export type Customer_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerAccount = { + __typename?: 'CustomerAccount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerAccount> + emailAddress?: Maybe<Scalars['String']> + userName?: Maybe<Scalars['String']> + firstName?: Maybe<Scalars['String']> + lastName?: Maybe<Scalars['String']> + localeCode?: Maybe<Scalars['String']> + userId?: Maybe<Scalars['String']> + isAnonymous?: Maybe<Scalars['Boolean']> + isLocked?: Maybe<Scalars['Boolean']> + isActive?: Maybe<Scalars['Boolean']> + acceptsMarketing?: Maybe<Scalars['Boolean']> + hasExternalPassword?: Maybe<Scalars['Boolean']> + id: Scalars['Int'] + customerSet?: Maybe<Scalars['String']> + commerceSummary?: Maybe<CommerceSummary> + contacts?: Maybe<Array<Maybe<CustomerContact>>> + companyOrOrganization?: Maybe<Scalars['String']> + notes?: Maybe<Array<Maybe<CustomerNote>>> + attributes?: Maybe<Array<Maybe<CustomerAttribute>>> + segments?: Maybe<Array<Maybe<CustomerSegment>>> + taxId?: Maybe<Scalars['String']> + externalId?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfo> + customerSinceDate?: Maybe<Scalars['DateTime']> + accountType?: Maybe<Scalars['String']> +} + +export type CustomerAccount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerAccountAndAuthInfoInput = { + account?: Maybe<CustomerAccountInput> + password?: Maybe<Scalars['String']> + externalPassword?: Maybe<Scalars['String']> + isImport?: Maybe<Scalars['Boolean']> +} + +export type CustomerAccountCollection = { + __typename?: 'CustomerAccountCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerAccountCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<CustomerAccount>>> +} + +export type CustomerAccountCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerAccountInput = { + emailAddress?: Maybe<Scalars['String']> + userName?: Maybe<Scalars['String']> + firstName?: Maybe<Scalars['String']> + lastName?: Maybe<Scalars['String']> + localeCode?: Maybe<Scalars['String']> + userId?: Maybe<Scalars['String']> + isAnonymous?: Maybe<Scalars['Boolean']> + isLocked?: Maybe<Scalars['Boolean']> + isActive?: Maybe<Scalars['Boolean']> + acceptsMarketing?: Maybe<Scalars['Boolean']> + hasExternalPassword?: Maybe<Scalars['Boolean']> + id: Scalars['Int'] + customerSet?: Maybe<Scalars['String']> + commerceSummary?: Maybe<CommerceSummaryInput> + contacts?: Maybe<Array<Maybe<CustomerContactInput>>> + companyOrOrganization?: Maybe<Scalars['String']> + notes?: Maybe<Array<Maybe<CustomerNoteInput>>> + attributes?: Maybe<Array<Maybe<CustomerAttributeInput>>> + segments?: Maybe<Array<Maybe<CustomerSegmentInput>>> + taxId?: Maybe<Scalars['String']> + externalId?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfoInput> + customerSinceDate?: Maybe<Scalars['DateTime']> + accountType?: Maybe<Scalars['String']> +} + +export type CustomerAttribute = { + __typename?: 'CustomerAttribute' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerAttribute> + auditInfo?: Maybe<CuAuditInfo> + fullyQualifiedName?: Maybe<Scalars['String']> + attributeDefinitionId?: Maybe<Scalars['Int']> + values?: Maybe<Array<Scalars['Object']>> +} + +export type CustomerAttribute_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerAttributeCollection = { + __typename?: 'CustomerAttributeCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerAttributeCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<CustomerAttribute>>> +} + +export type CustomerAttributeCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerAttributeInput = { + auditInfo?: Maybe<CuAuditInfoInput> + fullyQualifiedName?: Maybe<Scalars['String']> + attributeDefinitionId?: Maybe<Scalars['Int']> + values?: Maybe<Array<Scalars['Object']>> +} + +export type CustomerAuditEntry = { + __typename?: 'CustomerAuditEntry' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerAuditEntry> + customerAccountId: Scalars['Int'] + customerAuditEntryId: Scalars['Int'] + entryDate: Scalars['DateTime'] + entryUser?: Maybe<Scalars['String']> + application?: Maybe<Scalars['String']> + site?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + fieldPath?: Maybe<Scalars['String']> + oldValue?: Maybe<Scalars['String']> + newValue?: Maybe<Scalars['String']> +} + +export type CustomerAuditEntry_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerAuditEntryCollection = { + __typename?: 'CustomerAuditEntryCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerAuditEntryCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<CustomerAuditEntry>>> +} + +export type CustomerAuditEntryCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerAuthTicket = { + __typename?: 'CustomerAuthTicket' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerAuthTicket> + customerAccount?: Maybe<CustomerAccount> + accessToken?: Maybe<Scalars['String']> + accessTokenExpiration: Scalars['DateTime'] + refreshToken?: Maybe<Scalars['String']> + refreshTokenExpiration: Scalars['DateTime'] + userId?: Maybe<Scalars['String']> + jwtAccessToken?: Maybe<Scalars['String']> +} + +export type CustomerAuthTicket_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerContact = { + __typename?: 'CustomerContact' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerContact> + accountId: Scalars['Int'] + types?: Maybe<Array<Maybe<ContactType>>> + auditInfo?: Maybe<CuAuditInfo> + faxNumber?: Maybe<Scalars['String']> + label?: Maybe<Scalars['String']> + id?: Maybe<Scalars['Int']> + email?: Maybe<Scalars['String']> + firstName?: Maybe<Scalars['String']> + middleNameOrInitial?: Maybe<Scalars['String']> + lastNameOrSurname?: Maybe<Scalars['String']> + companyOrOrganization?: Maybe<Scalars['String']> + phoneNumbers?: Maybe<CuPhone> + address?: Maybe<CuAddress> +} + +export type CustomerContact_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerContactCollection = { + __typename?: 'CustomerContactCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerContactCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<CustomerContact>>> +} + +export type CustomerContactCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerContactInput = { + accountId: Scalars['Int'] + types?: Maybe<Array<Maybe<ContactTypeInput>>> + auditInfo?: Maybe<CuAuditInfoInput> + faxNumber?: Maybe<Scalars['String']> + label?: Maybe<Scalars['String']> + id?: Maybe<Scalars['Int']> + email?: Maybe<Scalars['String']> + firstName?: Maybe<Scalars['String']> + middleNameOrInitial?: Maybe<Scalars['String']> + lastNameOrSurname?: Maybe<Scalars['String']> + companyOrOrganization?: Maybe<Scalars['String']> + phoneNumbers?: Maybe<CuPhoneInput> + address?: Maybe<CuAddressInput> +} + +export type CustomerInput = { + customerContact?: Maybe<ContactInput> + data?: Maybe<Scalars['Object']> + isDestinationCommercial?: Maybe<Scalars['Boolean']> +} + +export type CustomerLoginInfoInput = { + emailAddress?: Maybe<Scalars['String']> + username?: Maybe<Scalars['String']> + password?: Maybe<Scalars['String']> + externalPassword?: Maybe<Scalars['String']> + isImport?: Maybe<Scalars['Boolean']> +} + +export type CustomerNote = { + __typename?: 'CustomerNote' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerNote> + id: Scalars['Int'] + content?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfo> +} + +export type CustomerNote_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerNoteCollection = { + __typename?: 'CustomerNoteCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerNoteCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<CustomerNote>>> +} + +export type CustomerNoteCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerNoteInput = { + id: Scalars['Int'] + content?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfoInput> +} + +export type CustomerPurchaseOrderAccount = { + __typename?: 'CustomerPurchaseOrderAccount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerPurchaseOrderAccount> + id: Scalars['Int'] + accountId: Scalars['Int'] + isEnabled?: Maybe<Scalars['Boolean']> + creditLimit: Scalars['Float'] + availableBalance: Scalars['Float'] + totalAvailableBalance: Scalars['Float'] + overdraftAllowance?: Maybe<Scalars['Float']> + overdraftAllowanceType?: Maybe<Scalars['String']> + customerPurchaseOrderPaymentTerms?: Maybe< + Array<Maybe<CustomerPurchaseOrderPaymentTerm>> + > + auditInfo?: Maybe<CuAuditInfo> +} + +export type CustomerPurchaseOrderAccount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerPurchaseOrderAccountCollection = { + __typename?: 'CustomerPurchaseOrderAccountCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerPurchaseOrderAccountCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<CustomerPurchaseOrderAccount>>> +} + +export type CustomerPurchaseOrderAccountCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerPurchaseOrderAccountInput = { + id: Scalars['Int'] + accountId: Scalars['Int'] + isEnabled?: Maybe<Scalars['Boolean']> + creditLimit: Scalars['Float'] + availableBalance: Scalars['Float'] + totalAvailableBalance: Scalars['Float'] + overdraftAllowance?: Maybe<Scalars['Float']> + overdraftAllowanceType?: Maybe<Scalars['String']> + customerPurchaseOrderPaymentTerms?: Maybe< + Array<Maybe<CustomerPurchaseOrderPaymentTermInput>> + > + auditInfo?: Maybe<CuAuditInfoInput> +} + +export type CustomerPurchaseOrderPaymentTerm = { + __typename?: 'CustomerPurchaseOrderPaymentTerm' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerPurchaseOrderPaymentTerm> + siteId: Scalars['Int'] + code?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfo> +} + +export type CustomerPurchaseOrderPaymentTerm_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerPurchaseOrderPaymentTermInput = { + siteId: Scalars['Int'] + code?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfoInput> +} + +export type CustomerSegment = { + __typename?: 'CustomerSegment' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerSegment> + id: Scalars['Int'] + code?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfo> +} + +export type CustomerSegment_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerSegmentCollection = { + __typename?: 'CustomerSegmentCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerSegmentCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<CustomerSegment>>> +} + +export type CustomerSegmentCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerSegmentInput = { + id: Scalars['Int'] + code?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfoInput> +} + +export type CustomerSet = { + __typename?: 'CustomerSet' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerSet> + code?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfo> + sites?: Maybe<Array<Maybe<CustomerSetSite>>> + isDefault?: Maybe<Scalars['Boolean']> + aggregateInfo?: Maybe<CustomerSetAggregateInfo> +} + +export type CustomerSet_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerSetAggregateInfo = { + __typename?: 'CustomerSetAggregateInfo' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerSetAggregateInfo> + customerCount: Scalars['Int'] +} + +export type CustomerSetAggregateInfo_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerSetCollection = { + __typename?: 'CustomerSetCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerSetCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<CustomerSet>>> +} + +export type CustomerSetCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerSetSite = { + __typename?: 'CustomerSetSite' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<CustomerSetSite> + siteId: Scalars['Int'] + customerSetCode?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> +} + +export type CustomerSetSite_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type CustomerUserAuthInfoInput = { + username?: Maybe<Scalars['String']> + password?: Maybe<Scalars['String']> +} + +export type Destination = { + __typename?: 'Destination' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Destination> + id?: Maybe<Scalars['String']> + destinationContact?: Maybe<Contact> + isDestinationCommercial?: Maybe<Scalars['Boolean']> + data?: Maybe<Scalars['Object']> +} + +export type Destination_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type DestinationInput = { + id?: Maybe<Scalars['String']> + destinationContact?: Maybe<ContactInput> + isDestinationCommercial?: Maybe<Scalars['Boolean']> + data?: Maybe<Scalars['Object']> +} + +export type DigitalPackage = { + __typename?: 'DigitalPackage' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<DigitalPackage> + id?: Maybe<Scalars['String']> + code?: Maybe<Scalars['String']> + status?: Maybe<Scalars['String']> + items?: Maybe<Array<Maybe<DigitalPackageItem>>> + fulfillmentDate?: Maybe<Scalars['DateTime']> + fulfillmentLocationCode?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfo> + availableActions?: Maybe<Array<Scalars['String']>> + changeMessages?: Maybe<Array<Maybe<ChangeMessage>>> +} + +export type DigitalPackage_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type DigitalPackageInput = { + id?: Maybe<Scalars['String']> + code?: Maybe<Scalars['String']> + status?: Maybe<Scalars['String']> + items?: Maybe<Array<Maybe<DigitalPackageItemInput>>> + fulfillmentDate?: Maybe<Scalars['DateTime']> + fulfillmentLocationCode?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfoInput> + availableActions?: Maybe<Array<Scalars['String']>> + changeMessages?: Maybe<Array<Maybe<ChangeMessageInput>>> +} + +export type DigitalPackageItem = { + __typename?: 'DigitalPackageItem' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<DigitalPackageItem> + giftCardCode?: Maybe<Scalars['String']> + productCode?: Maybe<Scalars['String']> + quantity: Scalars['Int'] + fulfillmentItemType?: Maybe<Scalars['String']> + lineId?: Maybe<Scalars['Int']> + optionAttributeFQN?: Maybe<Scalars['String']> +} + +export type DigitalPackageItem_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type DigitalPackageItemInput = { + giftCardCode?: Maybe<Scalars['String']> + productCode?: Maybe<Scalars['String']> + quantity: Scalars['Int'] + fulfillmentItemType?: Maybe<Scalars['String']> + lineId?: Maybe<Scalars['Int']> + optionAttributeFQN?: Maybe<Scalars['String']> +} + +export type DigitalWalletInput = { + digitalWalletData?: Maybe<Scalars['String']> + cartId?: Maybe<Scalars['String']> +} + +export type DiscountSelectionsInput = { + discountIds?: Maybe<Array<Scalars['Int']>> +} + +export type DiscountValidationSummary = { + __typename?: 'DiscountValidationSummary' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<DiscountValidationSummary> + applicableDiscounts?: Maybe<Array<Maybe<PrDiscount>>> +} + +export type DiscountValidationSummary_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type Document = { + __typename?: 'Document' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Document> + id?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + path?: Maybe<Scalars['String']> + publishSetCode?: Maybe<Scalars['String']> + extension?: Maybe<Scalars['String']> + documentTypeFQN?: Maybe<Scalars['String']> + listFQN?: Maybe<Scalars['String']> + contentLength?: Maybe<Scalars['Int']> + contentMimeType?: Maybe<Scalars['String']> + contentUpdateDate?: Maybe<Scalars['DateTime']> + publishState?: Maybe<Scalars['String']> + properties?: Maybe<Scalars['Object']> + insertDate?: Maybe<Scalars['DateTime']> + updateDate?: Maybe<Scalars['DateTime']> + activeDateRange?: Maybe<ActiveDateRange> +} + +export type Document_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type DocumentCollection = { + __typename?: 'DocumentCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<DocumentCollection> + subPaths?: Maybe<Array<Scalars['String']>> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<Document>>> +} + +export type DocumentCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type DocumentDraftSummary = { + __typename?: 'DocumentDraftSummary' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<DocumentDraftSummary> + id?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + documentTypeFQN?: Maybe<Scalars['String']> + listFQN?: Maybe<Scalars['String']> + activeUpdateDate?: Maybe<Scalars['DateTime']> + draftUpdateDate: Scalars['DateTime'] + updatedBy?: Maybe<Scalars['String']> + activeUpdatedBy?: Maybe<Scalars['String']> + publishType?: Maybe<Scalars['String']> + publishSetCode?: Maybe<Scalars['String']> + masterCatalogId?: Maybe<Scalars['Int']> + catalogId?: Maybe<Scalars['Int']> + siteId?: Maybe<Scalars['Int']> +} + +export type DocumentDraftSummary_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type DocumentDraftSummaryPagedCollection = { + __typename?: 'DocumentDraftSummaryPagedCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<DocumentDraftSummaryPagedCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<DocumentDraftSummary>>> +} + +export type DocumentDraftSummaryPagedCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type DocumentInput = { + id?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + path?: Maybe<Scalars['String']> + publishSetCode?: Maybe<Scalars['String']> + extension?: Maybe<Scalars['String']> + documentTypeFQN?: Maybe<Scalars['String']> + listFQN?: Maybe<Scalars['String']> + contentLength?: Maybe<Scalars['Int']> + contentMimeType?: Maybe<Scalars['String']> + contentUpdateDate?: Maybe<Scalars['DateTime']> + publishState?: Maybe<Scalars['String']> + properties?: Maybe<Scalars['Object']> + insertDate?: Maybe<Scalars['DateTime']> + updateDate?: Maybe<Scalars['DateTime']> + activeDateRange?: Maybe<ActiveDateRangeInput> +} + +export type DocumentInstallation = { + __typename?: 'DocumentInstallation' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<DocumentInstallation> + name?: Maybe<Scalars['String']> + documentTypeFQN?: Maybe<Scalars['String']> + properties?: Maybe<Scalars['Object']> + locale?: Maybe<Scalars['String']> +} + +export type DocumentInstallation_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type DocumentInstallationInput = { + name?: Maybe<Scalars['String']> + documentTypeFQN?: Maybe<Scalars['String']> + properties?: Maybe<Scalars['Object']> + locale?: Maybe<Scalars['String']> +} + +export type DocumentList = { + __typename?: 'DocumentList' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<DocumentList> + name?: Maybe<Scalars['String']> + namespace?: Maybe<Scalars['String']> + listFQN?: Maybe<Scalars['String']> + documentTypes?: Maybe<Array<Scalars['String']>> + supportsPublishing?: Maybe<Scalars['Boolean']> + enablePublishing?: Maybe<Scalars['Boolean']> + supportsActiveDateRanges?: Maybe<Scalars['Boolean']> + enableActiveDateRanges?: Maybe<Scalars['Boolean']> + views?: Maybe<Array<Maybe<View>>> + usages?: Maybe<Array<Scalars['String']>> + security?: Maybe<Scalars['String']> + scopeId?: Maybe<Scalars['Int']> + scopeType?: Maybe<Scalars['String']> + documentListType?: Maybe<Scalars['String']> + metadata?: Maybe<Scalars['Object']> +} + +export type DocumentList_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type DocumentListCollection = { + __typename?: 'DocumentListCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<DocumentListCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<DocumentList>>> +} + +export type DocumentListCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type DocumentListInput = { + name?: Maybe<Scalars['String']> + namespace?: Maybe<Scalars['String']> + listFQN?: Maybe<Scalars['String']> + documentTypes?: Maybe<Array<Scalars['String']>> + supportsPublishing?: Maybe<Scalars['Boolean']> + enablePublishing?: Maybe<Scalars['Boolean']> + supportsActiveDateRanges?: Maybe<Scalars['Boolean']> + enableActiveDateRanges?: Maybe<Scalars['Boolean']> + views?: Maybe<Array<Maybe<ViewInput>>> + usages?: Maybe<Array<Scalars['String']>> + security?: Maybe<Scalars['String']> + scopeId?: Maybe<Scalars['Int']> + scopeType?: Maybe<Scalars['String']> + documentListType?: Maybe<Scalars['String']> + metadata?: Maybe<Scalars['Object']> +} + +export type DocumentListType = { + __typename?: 'DocumentListType' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<DocumentListType> + name?: Maybe<Scalars['String']> + namespace?: Maybe<Scalars['String']> + documentListTypeFQN?: Maybe<Scalars['String']> + scopeType?: Maybe<Scalars['String']> + installationPackage?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + defaultDocuments?: Maybe<Array<Maybe<DocumentInstallation>>> + documentTypeFQNs?: Maybe<Array<Scalars['String']>> + supportsPublishing?: Maybe<Scalars['Boolean']> + enablePublishing?: Maybe<Scalars['Boolean']> + supportsActiveDateRanges?: Maybe<Scalars['Boolean']> + enableActiveDateRanges?: Maybe<Scalars['Boolean']> + views?: Maybe<Array<Maybe<View>>> + usages?: Maybe<Array<Scalars['String']>> + metadata?: Maybe<Scalars['Object']> +} + +export type DocumentListType_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type DocumentListTypeCollection = { + __typename?: 'DocumentListTypeCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<DocumentListTypeCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<DocumentListType>>> +} + +export type DocumentListTypeCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type DocumentListTypeInput = { + name?: Maybe<Scalars['String']> + namespace?: Maybe<Scalars['String']> + documentListTypeFQN?: Maybe<Scalars['String']> + scopeType?: Maybe<Scalars['String']> + installationPackage?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + defaultDocuments?: Maybe<Array<Maybe<DocumentInstallationInput>>> + documentTypeFQNs?: Maybe<Array<Scalars['String']>> + supportsPublishing?: Maybe<Scalars['Boolean']> + enablePublishing?: Maybe<Scalars['Boolean']> + supportsActiveDateRanges?: Maybe<Scalars['Boolean']> + enableActiveDateRanges?: Maybe<Scalars['Boolean']> + views?: Maybe<Array<Maybe<ViewInput>>> + usages?: Maybe<Array<Scalars['String']>> + metadata?: Maybe<Scalars['Object']> +} + +export type DocumentType = { + __typename?: 'DocumentType' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<DocumentType> + name?: Maybe<Scalars['String']> + namespace?: Maybe<Scalars['String']> + documentTypeFQN?: Maybe<Scalars['String']> + adminName?: Maybe<Scalars['String']> + installationPackage?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + metadata?: Maybe<Scalars['Object']> + properties?: Maybe<Array<Maybe<Property>>> +} + +export type DocumentType_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type DocumentTypeCollection = { + __typename?: 'DocumentTypeCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<DocumentTypeCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<DocumentType>>> +} + +export type DocumentTypeCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type DocumentTypeInput = { + name?: Maybe<Scalars['String']> + namespace?: Maybe<Scalars['String']> + documentTypeFQN?: Maybe<Scalars['String']> + adminName?: Maybe<Scalars['String']> + installationPackage?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + metadata?: Maybe<Scalars['Object']> + properties?: Maybe<Array<Maybe<PropertyInput>>> +} + +export type EntityCollection = { + __typename?: 'EntityCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<EntityCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Scalars['Object']>> +} + +export type EntityCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type EntityContainer = { + __typename?: 'EntityContainer' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<EntityContainer> + tenantId: Scalars['Int'] + siteId?: Maybe<Scalars['Int']> + masterCatalogId?: Maybe<Scalars['Int']> + catalogId?: Maybe<Scalars['Int']> + localeCode?: Maybe<Scalars['String']> + listFullName?: Maybe<Scalars['String']> + userId?: Maybe<Scalars['String']> + id?: Maybe<Scalars['String']> + item?: Maybe<Scalars['Object']> + createBy?: Maybe<Scalars['String']> + createDate: Scalars['DateTime'] + updateBy?: Maybe<Scalars['String']> + updateDate: Scalars['DateTime'] +} + +export type EntityContainer_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type EntityContainerCollection = { + __typename?: 'EntityContainerCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<EntityContainerCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<EntityContainer>>> +} + +export type EntityContainerCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type EntityList = { + __typename?: 'EntityList' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<EntityList> + tenantId: Scalars['Int'] + nameSpace?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + contextLevel?: Maybe<Scalars['String']> + useSystemAssignedId?: Maybe<Scalars['Boolean']> + idProperty?: Maybe<IndexedProperty> + indexA?: Maybe<IndexedProperty> + indexB?: Maybe<IndexedProperty> + indexC?: Maybe<IndexedProperty> + indexD?: Maybe<IndexedProperty> + isVisibleInStorefront?: Maybe<Scalars['Boolean']> + isLocaleSpecific?: Maybe<Scalars['Boolean']> + isShopperSpecific?: Maybe<Scalars['Boolean']> + isSandboxDataCloningSupported?: Maybe<Scalars['Boolean']> + views?: Maybe<Array<Maybe<ListView>>> + usages?: Maybe<Array<Scalars['String']>> + metadata?: Maybe<Scalars['Object']> + createDate: Scalars['DateTime'] + updateDate: Scalars['DateTime'] +} + +export type EntityList_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type EntityListCollection = { + __typename?: 'EntityListCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<EntityListCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<EntityList>>> +} + +export type EntityListCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type EntityListInput = { + tenantId: Scalars['Int'] + nameSpace?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + contextLevel?: Maybe<Scalars['String']> + useSystemAssignedId?: Maybe<Scalars['Boolean']> + idProperty?: Maybe<IndexedPropertyInput> + indexA?: Maybe<IndexedPropertyInput> + indexB?: Maybe<IndexedPropertyInput> + indexC?: Maybe<IndexedPropertyInput> + indexD?: Maybe<IndexedPropertyInput> + isVisibleInStorefront?: Maybe<Scalars['Boolean']> + isLocaleSpecific?: Maybe<Scalars['Boolean']> + isShopperSpecific?: Maybe<Scalars['Boolean']> + isSandboxDataCloningSupported?: Maybe<Scalars['Boolean']> + views?: Maybe<Array<Maybe<ListViewInput>>> + usages?: Maybe<Array<Scalars['String']>> + metadata?: Maybe<Scalars['Object']> + createDate: Scalars['DateTime'] + updateDate: Scalars['DateTime'] +} + +export type ExclusionListEntryLocationCodeInput = { + locationCode: Scalars['String'] + orderItemID: Scalars['Int'] +} + +export type ExtendedProperty = { + __typename?: 'ExtendedProperty' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ExtendedProperty> + key?: Maybe<Scalars['String']> + value?: Maybe<Scalars['String']> +} + +export type ExtendedProperty_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ExtendedPropertyInput = { + key?: Maybe<Scalars['String']> + value?: Maybe<Scalars['String']> +} + +export type Facet = { + __typename?: 'Facet' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Facet> + label?: Maybe<Scalars['String']> + facetType?: Maybe<Scalars['String']> + field?: Maybe<Scalars['String']> + values?: Maybe<Array<Maybe<FacetValue>>> +} + +export type Facet_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type FacetValue = { + __typename?: 'FacetValue' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<FacetValue> + label?: Maybe<Scalars['String']> + isApplied?: Maybe<Scalars['Boolean']> + count: Scalars['Int'] + value?: Maybe<Scalars['String']> + filterValue?: Maybe<Scalars['String']> + rangeQueryValueStart?: Maybe<Scalars['String']> + rangeQueryValueEnd?: Maybe<Scalars['String']> + parentFacetValue?: Maybe<Scalars['String']> + isDisplayed?: Maybe<Scalars['Boolean']> + childrenFacetValues?: Maybe<Array<Maybe<FacetValue>>> +} + +export type FacetValue_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type FulfillmentActionInput = { + actionName?: Maybe<Scalars['String']> + packageIds?: Maybe<Array<Scalars['String']>> + pickupIds?: Maybe<Array<Scalars['String']>> + digitalPackageIds?: Maybe<Array<Scalars['String']>> +} + +export type FulfillmentField = { + __typename?: 'FulfillmentField' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<FulfillmentField> + name?: Maybe<Scalars['String']> + userEnteredValue?: Maybe<Scalars['Object']> + required?: Maybe<Scalars['Boolean']> +} + +export type FulfillmentField_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type FulfillmentFieldInput = { + name?: Maybe<Scalars['String']> + userEnteredValue?: Maybe<Scalars['Object']> + required?: Maybe<Scalars['Boolean']> +} + +export type FulfillmentInfo = { + __typename?: 'FulfillmentInfo' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<FulfillmentInfo> + fulfillmentContact?: Maybe<Contact> + isDestinationCommercial?: Maybe<Scalars['Boolean']> + shippingMethodCode?: Maybe<Scalars['String']> + shippingMethodName?: Maybe<Scalars['String']> + data?: Maybe<Scalars['Object']> + auditInfo?: Maybe<CrAuditInfo> +} + +export type FulfillmentInfo_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type FulfillmentInfoInput = { + fulfillmentContact?: Maybe<ContactInput> + isDestinationCommercial?: Maybe<Scalars['Boolean']> + shippingMethodCode?: Maybe<Scalars['String']> + shippingMethodName?: Maybe<Scalars['String']> + data?: Maybe<Scalars['Object']> + auditInfo?: Maybe<CrAuditInfoInput> +} + +export type FulfillmentShopperNotes = { + __typename?: 'FulfillmentShopperNotes' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<FulfillmentShopperNotes> + comments?: Maybe<Scalars['String']> + deliveryInstructions?: Maybe<Scalars['String']> + giftMessage?: Maybe<Scalars['String']> +} + +export type FulfillmentShopperNotes_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type FulfillmentShopperNotesInput = { + comments?: Maybe<Scalars['String']> + deliveryInstructions?: Maybe<Scalars['String']> + giftMessage?: Maybe<Scalars['String']> +} + +export type FulfillmentTask = { + __typename?: 'FulfillmentTask' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<FulfillmentTask> + links?: Maybe<Scalars['Object']> + active?: Maybe<Scalars['Boolean']> + attributes?: Maybe<Scalars['Object']> + completed?: Maybe<Scalars['Boolean']> + completedDate?: Maybe<Scalars['DateTime']> + description?: Maybe<Scalars['String']> + inputs?: Maybe<Array<Maybe<TaskInput>>> + name?: Maybe<Scalars['String']> + skippable?: Maybe<Scalars['Boolean']> + subject?: Maybe<Scalars['String']> + taskId?: Maybe<Scalars['String']> +} + +export type FulfillmentTask_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type FulfillmentTaskInput = { + links?: Maybe<Scalars['Object']> + active?: Maybe<Scalars['Boolean']> + attributes?: Maybe<Scalars['Object']> + completed?: Maybe<Scalars['Boolean']> + completedDate?: Maybe<Scalars['DateTime']> + description?: Maybe<Scalars['String']> + inputs?: Maybe<Array<Maybe<TaskInputInput>>> + name?: Maybe<Scalars['String']> + skippable?: Maybe<Scalars['Boolean']> + subject?: Maybe<Scalars['String']> + taskId?: Maybe<Scalars['String']> +} + +export type GatewayGiftCard = { + __typename?: 'GatewayGiftCard' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<GatewayGiftCard> + cardNumber?: Maybe<Scalars['String']> + amount: Scalars['Float'] + currencyCode?: Maybe<Scalars['String']> +} + +export type GatewayGiftCard_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type GatewayGiftCardInput = { + cardNumber?: Maybe<Scalars['String']> + amount: Scalars['Float'] + currencyCode?: Maybe<Scalars['String']> +} + +export type GiftCard = { + __typename?: 'GiftCard' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<GiftCard> + activationDate?: Maybe<Scalars['DateTime']> + cardNumber?: Maybe<Scalars['String']> + code?: Maybe<Scalars['String']> + creditType?: Maybe<Scalars['String']> + creditValue?: Maybe<Scalars['Float']> + currencyCode?: Maybe<Scalars['String']> + currentBalance?: Maybe<Scalars['Float']> + customerId?: Maybe<Scalars['Int']> + expirationDate?: Maybe<Scalars['DateTime']> + initialBalance?: Maybe<Scalars['Float']> +} + +export type GiftCard_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type GiftCardInput = { + activationDate?: Maybe<Scalars['DateTime']> + cardNumber?: Maybe<Scalars['String']> + code?: Maybe<Scalars['String']> + creditType?: Maybe<Scalars['String']> + creditValue?: Maybe<Scalars['Float']> + currencyCode?: Maybe<Scalars['String']> + currentBalance?: Maybe<Scalars['Float']> + customerId?: Maybe<Scalars['Int']> + expirationDate?: Maybe<Scalars['DateTime']> + initialBalance?: Maybe<Scalars['Float']> +} + +export type Hours = { + __typename?: 'Hours' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Hours> + label?: Maybe<Scalars['String']> + openTime?: Maybe<Scalars['String']> + closeTime?: Maybe<Scalars['String']> + isClosed?: Maybe<Scalars['Boolean']> +} + +export type Hours_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type HoursInput = { + label?: Maybe<Scalars['String']> + openTime?: Maybe<Scalars['String']> + closeTime?: Maybe<Scalars['String']> + isClosed?: Maybe<Scalars['Boolean']> +} + +export type InStockNotificationSubscription = { + __typename?: 'InStockNotificationSubscription' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<InStockNotificationSubscription> + id?: Maybe<Scalars['Int']> + email?: Maybe<Scalars['String']> + customerId?: Maybe<Scalars['Int']> + productCode?: Maybe<Scalars['String']> + locationCode?: Maybe<Scalars['String']> + userId?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfo> +} + +export type InStockNotificationSubscription_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type InStockNotificationSubscriptionCollection = { + __typename?: 'InStockNotificationSubscriptionCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<InStockNotificationSubscriptionCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<InStockNotificationSubscription>>> +} + +export type InStockNotificationSubscriptionCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type InStockNotificationSubscriptionInput = { + id?: Maybe<Scalars['Int']> + email?: Maybe<Scalars['String']> + customerId?: Maybe<Scalars['Int']> + productCode?: Maybe<Scalars['String']> + locationCode?: Maybe<Scalars['String']> + userId?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfoInput> +} + +export type IndexedProperty = { + __typename?: 'IndexedProperty' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<IndexedProperty> + propertyName?: Maybe<Scalars['String']> + dataType?: Maybe<Scalars['String']> +} + +export type IndexedProperty_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type IndexedPropertyInput = { + propertyName?: Maybe<Scalars['String']> + dataType?: Maybe<Scalars['String']> +} + +export type InvalidCoupon = { + __typename?: 'InvalidCoupon' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<InvalidCoupon> + couponCode?: Maybe<Scalars['String']> + reasonCode: Scalars['Int'] + reason?: Maybe<Scalars['String']> + createDate: Scalars['DateTime'] + discountId: Scalars['Int'] +} + +export type InvalidCoupon_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type InvalidCouponInput = { + couponCode?: Maybe<Scalars['String']> + reasonCode: Scalars['Int'] + reason?: Maybe<Scalars['String']> + createDate: Scalars['DateTime'] + discountId: Scalars['Int'] +} + +export enum InventoryRequestTypeEnum { + All = 'ALL', + Partial = 'PARTIAL', + Any = 'ANY', + AllStores = 'ALL_STORES', +} + +export type ItemsForDestinationInput = { + destinationId?: Maybe<Scalars['String']> + itemIds?: Maybe<Array<Scalars['String']>> +} + +export type JsonNode = { + __typename?: 'JsonNode' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<JsonNode> + array?: Maybe<Scalars['Boolean']> + bigDecimal?: Maybe<Scalars['Boolean']> + bigInteger?: Maybe<Scalars['Boolean']> + binary?: Maybe<Scalars['Boolean']> + boolean?: Maybe<Scalars['Boolean']> + containerNode?: Maybe<Scalars['Boolean']> + double?: Maybe<Scalars['Boolean']> + float?: Maybe<Scalars['Boolean']> + floatingPointNumber?: Maybe<Scalars['Boolean']> + int?: Maybe<Scalars['Boolean']> + integralNumber?: Maybe<Scalars['Boolean']> + long?: Maybe<Scalars['Boolean']> + missingNode?: Maybe<Scalars['Boolean']> + nodeType?: Maybe<NodeTypeEnum> + null?: Maybe<Scalars['Boolean']> + number?: Maybe<Scalars['Boolean']> + object?: Maybe<Scalars['Boolean']> + pojo?: Maybe<Scalars['Boolean']> + short?: Maybe<Scalars['Boolean']> + textual?: Maybe<Scalars['Boolean']> + valueNode?: Maybe<Scalars['Boolean']> +} + +export type JsonNode_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type KeyValuePair2Input = { + key?: Maybe<Scalars['String']> + value?: Maybe<Array<Scalars['String']>> +} + +export type ListView = { + __typename?: 'ListView' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ListView> + name?: Maybe<Scalars['String']> + usages?: Maybe<Array<Scalars['String']>> + metaData?: Maybe<Scalars['Object']> + security?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + defaultSort?: Maybe<Scalars['String']> + fields?: Maybe<Array<Maybe<ListViewField>>> +} + +export type ListView_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ListViewCollection = { + __typename?: 'ListViewCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ListViewCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<ListView>>> +} + +export type ListViewCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ListViewField = { + __typename?: 'ListViewField' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ListViewField> + name?: Maybe<Scalars['String']> + type?: Maybe<Scalars['String']> + target?: Maybe<Scalars['String']> +} + +export type ListViewField_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ListViewFieldInput = { + name?: Maybe<Scalars['String']> + type?: Maybe<Scalars['String']> + target?: Maybe<Scalars['String']> +} + +export type ListViewInput = { + name?: Maybe<Scalars['String']> + usages?: Maybe<Array<Scalars['String']>> + metaData?: Maybe<Scalars['Object']> + security?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + defaultSort?: Maybe<Scalars['String']> + fields?: Maybe<Array<Maybe<ListViewFieldInput>>> +} + +export type LoAddress = { + __typename?: 'LoAddress' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LoAddress> + address1?: Maybe<Scalars['String']> + address2?: Maybe<Scalars['String']> + address3?: Maybe<Scalars['String']> + address4?: Maybe<Scalars['String']> + cityOrTown?: Maybe<Scalars['String']> + stateOrProvince?: Maybe<Scalars['String']> + postalOrZipCode?: Maybe<Scalars['String']> + countryCode?: Maybe<Scalars['String']> + addressType?: Maybe<Scalars['String']> + isValidated?: Maybe<Scalars['Boolean']> +} + +export type LoAddress_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LoAddressInput = { + address1?: Maybe<Scalars['String']> + address2?: Maybe<Scalars['String']> + address3?: Maybe<Scalars['String']> + address4?: Maybe<Scalars['String']> + cityOrTown?: Maybe<Scalars['String']> + stateOrProvince?: Maybe<Scalars['String']> + postalOrZipCode?: Maybe<Scalars['String']> + countryCode?: Maybe<Scalars['String']> + addressType?: Maybe<Scalars['String']> + isValidated?: Maybe<Scalars['Boolean']> +} + +export type LoAttribute = { + __typename?: 'LoAttribute' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LoAttribute> + id?: Maybe<Scalars['Int']> + adminName?: Maybe<Scalars['String']> + namespace?: Maybe<Scalars['String']> + attributeCode: Scalars['String'] + inputType?: Maybe<Scalars['String']> + valueType: Scalars['String'] + dataType?: Maybe<Scalars['String']> + attributeMetadata?: Maybe<Array<Maybe<LoAttributeMetadataItem>>> + attributeFQN?: Maybe<Scalars['String']> + content?: Maybe<LoAttributeLocalizedContent> + validation?: Maybe<LoAttributeValidation> + vocabularyValues?: Maybe<Array<Maybe<LoAttributeVocabularyValue>>> + auditInfo?: Maybe<LoAuditInfo> + isActive?: Maybe<Scalars['Boolean']> + isRequired?: Maybe<Scalars['Boolean']> + isReadOnly?: Maybe<Scalars['Boolean']> + isMultiValued?: Maybe<Scalars['Boolean']> + isVisible?: Maybe<Scalars['Boolean']> + order?: Maybe<Scalars['Int']> + displayGroup: Scalars['String'] +} + +export type LoAttribute_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LoAttributeCollection = { + __typename?: 'LoAttributeCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LoAttributeCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<LoAttribute>>> +} + +export type LoAttributeCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LoAttributeInput = { + id?: Maybe<Scalars['Int']> + adminName?: Maybe<Scalars['String']> + namespace?: Maybe<Scalars['String']> + attributeCode: Scalars['String'] + inputType?: Maybe<Scalars['String']> + valueType: Scalars['String'] + dataType?: Maybe<Scalars['String']> + attributeMetadata?: Maybe<Array<Maybe<LoAttributeMetadataItemInput>>> + attributeFQN?: Maybe<Scalars['String']> + content?: Maybe<LoAttributeLocalizedContentInput> + validation?: Maybe<LoAttributeValidationInput> + vocabularyValues?: Maybe<Array<Maybe<LoAttributeVocabularyValueInput>>> + auditInfo?: Maybe<LoAuditInfoInput> + isActive?: Maybe<Scalars['Boolean']> + isRequired?: Maybe<Scalars['Boolean']> + isReadOnly?: Maybe<Scalars['Boolean']> + isMultiValued?: Maybe<Scalars['Boolean']> + isVisible?: Maybe<Scalars['Boolean']> + order?: Maybe<Scalars['Int']> + displayGroup: Scalars['String'] +} + +export type LoAttributeLocalizedContent = { + __typename?: 'LoAttributeLocalizedContent' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LoAttributeLocalizedContent> + localeCode?: Maybe<Scalars['String']> + value?: Maybe<Scalars['String']> +} + +export type LoAttributeLocalizedContent_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LoAttributeLocalizedContentInput = { + localeCode?: Maybe<Scalars['String']> + value?: Maybe<Scalars['String']> +} + +export type LoAttributeMetadataItem = { + __typename?: 'LoAttributeMetadataItem' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LoAttributeMetadataItem> + key: Scalars['String'] + value: Scalars['String'] +} + +export type LoAttributeMetadataItem_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LoAttributeMetadataItemInput = { + key: Scalars['String'] + value: Scalars['String'] +} + +export type LoAttributeValidation = { + __typename?: 'LoAttributeValidation' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LoAttributeValidation> + regularExpression?: Maybe<Scalars['String']> + minStringLength?: Maybe<Scalars['Int']> + maxStringLength?: Maybe<Scalars['Int']> + minNumericValue?: Maybe<Scalars['Float']> + maxNumericValue?: Maybe<Scalars['Float']> + minDateTime?: Maybe<Scalars['DateTime']> + maxDateTime?: Maybe<Scalars['DateTime']> +} + +export type LoAttributeValidation_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LoAttributeValidationInput = { + regularExpression?: Maybe<Scalars['String']> + minStringLength?: Maybe<Scalars['Int']> + maxStringLength?: Maybe<Scalars['Int']> + minNumericValue?: Maybe<Scalars['Float']> + maxNumericValue?: Maybe<Scalars['Float']> + minDateTime?: Maybe<Scalars['DateTime']> + maxDateTime?: Maybe<Scalars['DateTime']> +} + +export type LoAttributeValueLocalizedContent = { + __typename?: 'LoAttributeValueLocalizedContent' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LoAttributeValueLocalizedContent> + localeCode: Scalars['String'] + value: Scalars['String'] +} + +export type LoAttributeValueLocalizedContent_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LoAttributeValueLocalizedContentInput = { + localeCode: Scalars['String'] + value: Scalars['String'] +} + +export type LoAttributeVocabularyValue = { + __typename?: 'LoAttributeVocabularyValue' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LoAttributeVocabularyValue> + value: Scalars['String'] + sequence?: Maybe<Scalars['Int']> + isHidden?: Maybe<Scalars['Boolean']> + content?: Maybe<LoAttributeValueLocalizedContent> +} + +export type LoAttributeVocabularyValue_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LoAttributeVocabularyValueInput = { + value: Scalars['String'] + sequence?: Maybe<Scalars['Int']> + isHidden?: Maybe<Scalars['Boolean']> + content?: Maybe<LoAttributeValueLocalizedContentInput> +} + +export type LoAuditInfo = { + __typename?: 'LoAuditInfo' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LoAuditInfo> + updateDate?: Maybe<Scalars['DateTime']> + createDate?: Maybe<Scalars['DateTime']> + updateBy?: Maybe<Scalars['String']> + createBy?: Maybe<Scalars['String']> +} + +export type LoAuditInfo_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LoAuditInfoInput = { + updateDate?: Maybe<Scalars['DateTime']> + createDate?: Maybe<Scalars['DateTime']> + updateBy?: Maybe<Scalars['String']> + createBy?: Maybe<Scalars['String']> +} + +export type LoFulfillmentType = { + __typename?: 'LoFulfillmentType' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LoFulfillmentType> + code?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> +} + +export type LoFulfillmentType_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LoFulfillmentTypeInput = { + code?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> +} + +export type Location = { + __typename?: 'Location' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Location> + code?: Maybe<Scalars['String']> + locationTypes?: Maybe<Array<Maybe<LocationType>>> + name?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + address?: Maybe<LoAddress> + geo?: Maybe<Coordinates> + phone?: Maybe<Scalars['String']> + fax?: Maybe<Scalars['String']> + supportsInventory?: Maybe<Scalars['Boolean']> + fulfillmentTypes?: Maybe<Array<Maybe<LoFulfillmentType>>> + regularHours?: Maybe<RegularHours> + shippingOriginContact?: Maybe<ShippingOriginContact> + note?: Maybe<Scalars['String']> + tags?: Maybe<Array<Scalars['String']>> + attributes?: Maybe<Array<Maybe<LocationAttribute>>> + auditInfo?: Maybe<LoAuditInfo> + allowFulfillmentWithNoStock?: Maybe<Scalars['Boolean']> + isDisabled?: Maybe<Scalars['Boolean']> + express?: Maybe<Scalars['Boolean']> + transferEnabled?: Maybe<Scalars['Boolean']> + includeInInventoryAggregrate?: Maybe<Scalars['Boolean']> + includeInLocationExport?: Maybe<Scalars['Boolean']> + warehouseEnabled?: Maybe<Scalars['Boolean']> + requiresManifest?: Maybe<Scalars['Boolean']> +} + +export type Location_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LocationAttribute = { + __typename?: 'LocationAttribute' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LocationAttribute> + attributeDefinition?: Maybe<LoAttribute> + auditInfo?: Maybe<LoAuditInfo> + fullyQualifiedName?: Maybe<Scalars['String']> + attributeDefinitionId?: Maybe<Scalars['Int']> + values?: Maybe<Array<Scalars['Object']>> +} + +export type LocationAttribute_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LocationAttributeInput = { + attributeDefinition?: Maybe<LoAttributeInput> + auditInfo?: Maybe<LoAuditInfoInput> + fullyQualifiedName?: Maybe<Scalars['String']> + attributeDefinitionId?: Maybe<Scalars['Int']> + values?: Maybe<Array<Scalars['Object']>> +} + +export type LocationCollection = { + __typename?: 'LocationCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LocationCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<Location>>> +} + +export type LocationCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LocationGroup = { + __typename?: 'LocationGroup' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LocationGroup> + locationGroupId: Scalars['Int'] + locationGroupCode?: Maybe<Scalars['String']> + siteIds?: Maybe<Array<Scalars['Int']>> + name?: Maybe<Scalars['String']> + locationCodes?: Maybe<Array<Scalars['String']>> + auditInfo?: Maybe<LoAuditInfo> +} + +export type LocationGroup_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LocationGroupCollection = { + __typename?: 'LocationGroupCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LocationGroupCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<LocationGroup>>> +} + +export type LocationGroupCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LocationGroupConfiguration = { + __typename?: 'LocationGroupConfiguration' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LocationGroupConfiguration> + tenantId: Scalars['Int'] + siteId: Scalars['Int'] + locationGroupId: Scalars['Int'] + locationGroupCode?: Maybe<Scalars['String']> + customerFailedToPickupAfterAction?: Maybe<Scalars['String']> + customerFailedToPickupDeadline?: Maybe<Scalars['Int']> + sendCustomerPickupReminder?: Maybe<Scalars['Int']> + enableForSTH?: Maybe<Scalars['Boolean']> + enableForISPU?: Maybe<Scalars['Boolean']> + enableAdvancedOptionForPickWaveCreation?: Maybe<Scalars['Boolean']> + maximumNumberOfOrdersInPickWave?: Maybe<Scalars['Int']> + defaultNumberOfOrdersInPickWave?: Maybe<Scalars['Int']> + pickWavePrintFormat?: Maybe<Scalars['String']> + closePickWavePermissions?: Maybe<Array<Scalars['String']>> + wmsEnabled?: Maybe<Scalars['Boolean']> + enableScanningOfUpcForShipToHome?: Maybe<Scalars['Boolean']> + allowReturns?: Maybe<Scalars['Boolean']> + returnRefundReduction?: Maybe<Scalars['Boolean']> + defaultReturnRefundReductionAmount?: Maybe<Scalars['Int']> + maximumReturnRefundReductionAmount?: Maybe<Scalars['Int']> + defaultCarrier?: Maybe<Scalars['String']> + carriers?: Maybe<Array<Maybe<Carrier>>> + printReturnLabel?: Maybe<Scalars['Boolean']> + defaultPrinterType?: Maybe<Scalars['String']> + boxTypes?: Maybe<Array<Maybe<BoxType>>> + attributes?: Maybe<Array<Maybe<LocationAttribute>>> + bpmConfigurations?: Maybe<Array<Maybe<BpmConfiguration>>> + auditInfo?: Maybe<LoAuditInfo> + autoPackingListPopup?: Maybe<Scalars['Boolean']> + blockPartialStock?: Maybe<Scalars['Boolean']> + defaultMaxNumberOfShipmentsInPickWave?: Maybe<Scalars['Int']> + displayProductImagesInPickWaveDetails?: Maybe<Scalars['Boolean']> + enablePnpForSTH?: Maybe<Scalars['Boolean']> + enablePnpForBOPIS?: Maybe<Scalars['Boolean']> + blockPartialCancel?: Maybe<Scalars['Boolean']> + packageSettings?: Maybe<PackageSettings> +} + +export type LocationGroupConfiguration_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LocationGroupInput = { + locationGroupId: Scalars['Int'] + locationGroupCode?: Maybe<Scalars['String']> + siteIds?: Maybe<Array<Scalars['Int']>> + name?: Maybe<Scalars['String']> + locationCodes?: Maybe<Array<Scalars['String']>> + auditInfo?: Maybe<LoAuditInfoInput> +} + +export type LocationInput = { + code?: Maybe<Scalars['String']> + locationTypes?: Maybe<Array<Maybe<LocationTypeInput>>> + name?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + address?: Maybe<LoAddressInput> + geo?: Maybe<CoordinatesInput> + phone?: Maybe<Scalars['String']> + fax?: Maybe<Scalars['String']> + supportsInventory?: Maybe<Scalars['Boolean']> + fulfillmentTypes?: Maybe<Array<Maybe<LoFulfillmentTypeInput>>> + regularHours?: Maybe<RegularHoursInput> + shippingOriginContact?: Maybe<ShippingOriginContactInput> + note?: Maybe<Scalars['String']> + tags?: Maybe<Array<Scalars['String']>> + attributes?: Maybe<Array<Maybe<LocationAttributeInput>>> + auditInfo?: Maybe<LoAuditInfoInput> + allowFulfillmentWithNoStock?: Maybe<Scalars['Boolean']> + isDisabled?: Maybe<Scalars['Boolean']> + express?: Maybe<Scalars['Boolean']> + transferEnabled?: Maybe<Scalars['Boolean']> + includeInInventoryAggregrate?: Maybe<Scalars['Boolean']> + includeInLocationExport?: Maybe<Scalars['Boolean']> + warehouseEnabled?: Maybe<Scalars['Boolean']> + requiresManifest?: Maybe<Scalars['Boolean']> +} + +export type LocationInventory = { + __typename?: 'LocationInventory' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LocationInventory> + productCode?: Maybe<Scalars['String']> + locationCode?: Maybe<Scalars['String']> + stockAvailable?: Maybe<Scalars['Int']> + softStockAvailable?: Maybe<Scalars['Int']> + sku?: Maybe<Scalars['String']> + mfgPartNumber?: Maybe<Scalars['String']> +} + +export type LocationInventory_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LocationInventoryCollection = { + __typename?: 'LocationInventoryCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LocationInventoryCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<LocationInventory>>> +} + +export type LocationInventoryCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LocationInventoryQueryInput = { + locationCodes?: Maybe<Array<Scalars['String']>> + productCodes?: Maybe<Array<Scalars['String']>> +} + +export type LocationType = { + __typename?: 'LocationType' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LocationType> + code?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + auditInfo?: Maybe<LoAuditInfo> +} + +export type LocationType_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LocationTypeInput = { + code?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + auditInfo?: Maybe<LoAuditInfoInput> +} + +export type LocationUsage = { + __typename?: 'LocationUsage' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LocationUsage> + locationUsageTypeCode?: Maybe<Scalars['String']> + locationTypeCodes?: Maybe<Array<Scalars['String']>> + locationCodes?: Maybe<Array<Scalars['String']>> + auditInfo?: Maybe<LoAuditInfo> +} + +export type LocationUsage_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LocationUsageCollection = { + __typename?: 'LocationUsageCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LocationUsageCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<LocationUsage>>> +} + +export type LocationUsageCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type LocationUsageInput = { + locationUsageTypeCode?: Maybe<Scalars['String']> + locationTypeCodes?: Maybe<Array<Scalars['String']>> + locationCodes?: Maybe<Array<Scalars['String']>> + auditInfo?: Maybe<LoAuditInfoInput> +} + +export type LoginState = { + __typename?: 'LoginState' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<LoginState> + isPasswordChangeRequired?: Maybe<Scalars['Boolean']> + lastPasswordChangeOn?: Maybe<Scalars['DateTime']> + isLocked?: Maybe<Scalars['Boolean']> + lastLockedOn?: Maybe<Scalars['DateTime']> + failedLoginAttemptCount: Scalars['Int'] + remainingLoginAttempts: Scalars['Int'] + firstFailedLoginAttemptOn?: Maybe<Scalars['DateTime']> + lastLoginOn?: Maybe<Scalars['DateTime']> + createdOn?: Maybe<Scalars['DateTime']> + updatedOn?: Maybe<Scalars['DateTime']> +} + +export type LoginState_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type MzdbHttpContentInput = { + headers?: Maybe<Array<Maybe<MzdbStringStringIEnumerableKeyValuePairInput>>> +} + +export type MzdbHttpMethodInput = { + method?: Maybe<Scalars['String']> +} + +export type MzdbHttpRequestMessageInput = { + version?: Maybe<Scalars['String']> + content?: Maybe<MzdbHttpContentInput> + method?: Maybe<MzdbHttpMethodInput> + requestUri?: Maybe<Scalars['DateTime']> + headers?: Maybe<Array<Maybe<MzdbStringStringIEnumerableKeyValuePairInput>>> + properties?: Maybe<Scalars['Object']> +} + +export type MzdbStringStringIEnumerableKeyValuePairInput = { + key?: Maybe<Scalars['String']> + value?: Maybe<Array<Scalars['String']>> +} + +export type Mutation = { + __typename?: 'Mutation' + createCustomerAccountAttributeDefinition?: Maybe<CuAttribute> + updateCustomerAccountAttributeDefinition?: Maybe<CuAttribute> + validateCustomerAddress?: Maybe<AddressValidationResponse> + validateAddress?: Maybe<Array<Maybe<CuAddress>>> + createCustomerAuthTicket?: Maybe<CustomerAuthTicket> + refreshCustomerAuthTickets?: Maybe<CustomerAuthTicket> + createCustomerB2bAccountAttribute?: Maybe<CustomerAttribute> + deleteB2bAccountAttribute?: Maybe<Scalars['Boolean']> + updateCustomerB2bAccountAttribute?: Maybe<CustomerAttribute> + createCustomerB2bAccount?: Maybe<B2BAccount> + updateCustomerB2bAccount?: Maybe<B2BAccount> + createCustomerB2bAccountUser?: Maybe<B2BUser> + updateCustomerB2bAccountUser?: Maybe<B2BUser> + removeCustomerB2bAccountUser?: Maybe<Scalars['Boolean']> + addRoleToCustomerB2bAccount?: Maybe<Scalars['Boolean']> + deleteB2bAccountRole?: Maybe<Scalars['Boolean']> + createCustomerCredit?: Maybe<Credit> + updateCustomerCredit?: Maybe<Credit> + deleteCustomerCredit?: Maybe<Scalars['Boolean']> + updateCustomerCreditAssociateToShopper?: Maybe<Credit> + resendCustomerCreditEmail?: Maybe<Scalars['Boolean']> + createCustomerCreditTransaction?: Maybe<CreditTransaction> + createCustomerAccountAttribute?: Maybe<CustomerAttribute> + deleteCustomerAccountAttribute?: Maybe<Scalars['Boolean']> + updateCustomerAccountAttribute?: Maybe<CustomerAttribute> + createCustomerAccountCard?: Maybe<Card> + updateCustomerAccountCard?: Maybe<Card> + deleteCustomerAccountCard?: Maybe<Scalars['Boolean']> + createCustomerAccountContact?: Maybe<CustomerContact> + updateCustomerAccountContacts?: Maybe<CustomerContactCollection> + updateCustomerAccountContact?: Maybe<CustomerContact> + deleteCustomerAccountContact?: Maybe<Scalars['Boolean']> + createCustomerAccount?: Maybe<CustomerAccount> + updateCustomerAccount?: Maybe<CustomerAccount> + deleteCustomerAccount?: Maybe<Scalars['Boolean']> + createCustomerAccountTransaction?: Maybe<Transaction> + deleteCustomerAccountTransaction?: Maybe<Scalars['Boolean']> + recomputeCustomerAccountLifetimeValue?: Maybe<Scalars['Boolean']> + createCustomerAccountNote?: Maybe<CustomerNote> + updateCustomerAccountNote?: Maybe<CustomerNote> + deleteCustomerAccountNote?: Maybe<Scalars['Boolean']> + createCustomerAccountPurchaseOrderAccount?: Maybe<CustomerPurchaseOrderAccount> + updateCustomerPurchaseOrderAccount?: Maybe<CustomerPurchaseOrderAccount> + createCustomerAccountPurchaseOrderAccountTransaction?: Maybe<PurchaseOrderTransaction> + createPurchaseOrderAccount?: Maybe<CustomerPurchaseOrderAccountCollection> + changeCustomerAccountPassword?: Maybe<Scalars['Boolean']> + updateCustomerAccountPasswords?: Maybe<ChangePasswordResultCollection> + resetCustomerAccountPassword?: Maybe<Scalars['Boolean']> + createCustomerAccountLogin?: Maybe<CustomerAuthTicket> + createCustomerAccountAndLogin?: Maybe<CustomerAuthTicket> + setCustomerAccountLoginLocked?: Maybe<Scalars['Boolean']> + setCustomerAccountPasswordChangeRequired?: Maybe<Scalars['Boolean']> + createCustomerAccounts?: Maybe<CustomerAccountCollection> + createCustomerSegment?: Maybe<CustomerSegment> + updateCustomerSegment?: Maybe<CustomerSegment> + deleteCustomerSegment?: Maybe<Scalars['Boolean']> + createCustomerSegmentAccount?: Maybe<Scalars['Boolean']> + deleteCustomerSegmentAccount?: Maybe<Scalars['Boolean']> + createInStockNotification?: Maybe<InStockNotificationSubscription> + deleteInStockNotification?: Maybe<Scalars['Boolean']> + createResolvedPriceList?: Maybe<ResolvedPriceList> + configureProduct?: Maybe<ConfiguredProduct> + validateProduct?: Maybe<ProductValidationSummary> + validateProductDiscounts?: Maybe<DiscountValidationSummary> + manageLocationProductInventory?: Maybe<LocationInventoryCollection> + createProductCost?: Maybe<ProductCostCollection> + createCartForUser?: Maybe<Cart> + updateUserCart?: Maybe<Cart> + updateCurrentCart?: Maybe<Cart> + deleteCurrentCart?: Maybe<Scalars['Boolean']> + updateCart?: Maybe<Cart> + deleteCart?: Maybe<Scalars['Boolean']> + deleteUserCart?: Maybe<Scalars['Boolean']> + rejectCartDiscount?: Maybe<Cart> + updateCartCoupon?: Maybe<Cart> + deleteCartCoupons?: Maybe<Cart> + deleteCartCoupon?: Maybe<Cart> + addExtendedPropertyToCurrentCart?: Maybe<Array<Maybe<ExtendedProperty>>> + updateCurrentCartExtendedProperties?: Maybe<Array<Maybe<ExtendedProperty>>> + deleteCurrentCartExtendedProperties?: Maybe<Scalars['Boolean']> + updateCurrentCartExtendedProperty?: Maybe<ExtendedProperty> + deleteCurrentCartExtendedProperty?: Maybe<Scalars['Boolean']> + deleteCurrentCartItems?: Maybe<Cart> + addItemToCurrentCart?: Maybe<CartItem> + deleteCartItems?: Maybe<Cart> + addItemToCart?: Maybe<CartItem> + updateCurrentCartItem?: Maybe<CartItem> + deleteCurrentCartItem?: Maybe<Scalars['Boolean']> + updateCartItem?: Maybe<CartItem> + deleteCartItem?: Maybe<Scalars['Boolean']> + addItemsToCurrentCart?: Maybe<Scalars['Boolean']> + addItemsToCart?: Maybe<Scalars['Boolean']> + updateCurrentCartItemQuantity?: Maybe<CartItem> + updateCartItemQuantity?: Maybe<CartItem> + deleteCurrentCartMessages?: Maybe<Scalars['Boolean']> + deleteCurrentCartMessage?: Maybe<Scalars['Boolean']> + createCommerceChannel?: Maybe<Channel> + updateChannel?: Maybe<Channel> + deleteCommerceChannel?: Maybe<Scalars['Boolean']> + createCommerceChannelGroup?: Maybe<ChannelGroup> + updateChannelGroup?: Maybe<ChannelGroup> + deleteCommerceChannelGroup?: Maybe<Scalars['Boolean']> + createCheckoutAttribute?: Maybe<Array<Maybe<OrderAttribute>>> + updateCheckoutAttributes?: Maybe<Array<Maybe<OrderAttribute>>> + updateCheckout?: Maybe<Checkout> + createCheckout?: Maybe<Checkout> + createCheckoutShippingMethod?: Maybe<Checkout> + createCheckoutAction?: Maybe<Checkout> + updateCheckoutDigitalWalletType?: Maybe<Checkout> + updateCheckoutPriceList?: Maybe<Checkout> + resendCheckoutEmail?: Maybe<Scalars['Boolean']> + updateCheckoutCoupon?: Maybe<Checkout> + deleteCheckoutCoupons?: Maybe<Checkout> + deleteCheckoutCoupon?: Maybe<Checkout> + updateCheckoutDestination?: Maybe<Destination> + deleteCheckoutDestination?: Maybe<Scalars['Boolean']> + createCheckoutDestination?: Maybe<Destination> + createCheckoutItem?: Maybe<Checkout> + deleteCheckoutItem?: Maybe<Checkout> + updateCheckoutItemDestination?: Maybe<Checkout> + createCheckoutItemDestination?: Maybe<Checkout> + createCheckoutPaymentAction?: Maybe<Checkout> + updateCheckoutPaymentAction?: Maybe<Checkout> + createOrderPaymentAction?: Maybe<Order> + createOrderPaymentPaymentAction?: Maybe<Order> + createOrderAutoCapture?: Maybe<Order> + createOrderPickup?: Maybe<Pickup> + updateOrderPickup?: Maybe<Pickup> + deleteOrderPickup?: Maybe<Scalars['Boolean']> + createOrderRefund?: Maybe<Refund> + updateOrderRefund?: Maybe<Scalars['Boolean']> + createOrderShipment?: Maybe<Array<Maybe<PackageObj>>> + deleteOrderShipment?: Maybe<Scalars['Boolean']> + repriceOrderShipment?: Maybe<Shipment> + createOrderShipmentAdjustment?: Maybe<Shipment> + createOrderShipmentItemAdjustment?: Maybe<Shipment> + splitOrderShipment?: Maybe<Array<Maybe<Shipment>>> + updateOrderValidationResults?: Maybe<OrderValidationResult> + updateOrderAdjustment?: Maybe<Order> + deleteOrderAdjustment?: Maybe<Order> + updateOrderShippingAdjustment?: Maybe<Order> + deleteOrderAdjustmentShipping?: Maybe<Order> + updateOrderHandlingAdjustment?: Maybe<Order> + deleteOrderAdjustmentHandling?: Maybe<Order> + createOrderAttribute?: Maybe<Array<Maybe<OrderAttribute>>> + updateOrderAttributes?: Maybe<Array<Maybe<OrderAttribute>>> + updateOrderBillingInfo?: Maybe<BillingInfo> + cancelOrder?: Maybe<Order> + createOrder?: Maybe<Order> + updateUserOrder?: Maybe<Order> + updateOrderPriceList?: Maybe<Order> + resendOrderEmail?: Maybe<Scalars['Boolean']> + updateOrder?: Maybe<Order> + updateOrderDigitalWalletTpe?: Maybe<Order> + updateOrderDraft?: Maybe<Scalars['Boolean']> + createOrderAction?: Maybe<Order> + updateOrderDiscount?: Maybe<Order> + updateOrderPrice?: Maybe<Order> + updateOrderCoupon?: Maybe<Order> + deleteOrderCoupons?: Maybe<Order> + deleteOrderCoupon?: Maybe<Order> + createOrderDigitalPackage?: Maybe<DigitalPackage> + updateOrderDigitalPackage?: Maybe<DigitalPackage> + deleteOrderDigitalPackage?: Maybe<Scalars['Boolean']> + createOrderExtendedProperties?: Maybe<Array<Maybe<ExtendedProperty>>> + updateOrderExtendedProperties?: Maybe<Array<Maybe<ExtendedProperty>>> + deleteOrderExtendedProperties?: Maybe<Scalars['Boolean']> + updateOrderExtendedProperty?: Maybe<ExtendedProperty> + deleteOrderExtendedProperty?: Maybe<Scalars['Boolean']> + createOrderFulfillmentAction?: Maybe<Order> + resendOrderFulfillmentEmail?: Maybe<Order> + updateOrderFulfillmentInfo?: Maybe<FulfillmentInfo> + createOrderItem?: Maybe<Order> + deleteOrderItem?: Maybe<Order> + updateOrderItemPrice?: Maybe<Order> + updateOrderItemQuantity?: Maybe<Order> + updateOrderItemDutyAmount?: Maybe<Order> + updateOrderItemFulfillment?: Maybe<Order> + updateOrderItemDiscount?: Maybe<Order> + createOrderNote?: Maybe<OrderNote> + updateOrderNotes?: Maybe<OrderNote> + deleteOrderNote?: Maybe<Scalars['Boolean']> + createOrderPackage?: Maybe<PackageObj> + updateOrderPackage?: Maybe<PackageObj> + deleteOrderPackage?: Maybe<Scalars['Boolean']> + validateOrder?: Maybe<OrderValidationResult> + updateQuote?: Maybe<Quote> + deleteQuote?: Maybe<Scalars['Boolean']> + createQuote?: Maybe<Quote> + createQuoteItem?: Maybe<Quote> + deleteQuoteItem?: Maybe<Scalars['Boolean']> + createReturn?: Maybe<ReturnObj> + resendReturnEmail?: Maybe<Scalars['Boolean']> + updateReturn?: Maybe<ReturnObj> + deleteReturn?: Maybe<Scalars['Boolean']> + createReturnAction?: Maybe<ReturnCollection> + setReturnShip?: Maybe<Order> + createReturnPaymentAction?: Maybe<ReturnObj> + createReturnPaymentPaymentAction?: Maybe<ReturnObj> + setReturnRestock?: Maybe<ReturnObj> + createReturnItem?: Maybe<ReturnObj> + deleteReturnItem?: Maybe<ReturnObj> + createReturnNote?: Maybe<OrderNote> + updateReturnNote?: Maybe<OrderNote> + deleteReturnNote?: Maybe<Scalars['Boolean']> + createReturnPackage?: Maybe<PackageObj> + updateReturnPackage?: Maybe<PackageObj> + deleteReturnPackage?: Maybe<Scalars['Boolean']> + createReturnShipment?: Maybe<Array<Maybe<PackageObj>>> + deleteReturnShipment?: Maybe<Scalars['Boolean']> + createWishlist?: Maybe<Wishlist> + updateWishlist?: Maybe<Wishlist> + deleteWishlist?: Maybe<Scalars['Boolean']> + deleteWishlistItems?: Maybe<Wishlist> + createWishlistItem?: Maybe<WishlistItem> + updateWishlistItem?: Maybe<WishlistItem> + deleteWishlistItem?: Maybe<Scalars['Boolean']> + updateWishlistItemQuantity?: Maybe<WishlistItem> + updateDocumentListDocumentContent?: Maybe<Scalars['Boolean']> + deleteDocumentListDocumentContent?: Maybe<Scalars['Boolean']> + updateDocumentListDocumentTreeContent?: Maybe<Scalars['Boolean']> + deleteDocumentListDocumentTreeContent?: Maybe<Scalars['Boolean']> + createDocumentListDocument?: Maybe<Document> + updateDocumentListDocument?: Maybe<Document> + patchDocumentListDocument?: Maybe<Document> + deleteDocumentListDocument?: Maybe<Scalars['Boolean']> + createDocumentList?: Maybe<DocumentList> + updateDocumentList?: Maybe<DocumentList> + deleteDocumentList?: Maybe<Scalars['Boolean']> + createDocumentListType?: Maybe<DocumentListType> + updateDocumentListType?: Maybe<DocumentListType> + createDocumentDraft?: Maybe<Scalars['Boolean']> + toggleDocumentPublishing?: Maybe<Scalars['Boolean']> + createDocumentType?: Maybe<DocumentType> + updateDocumentType?: Maybe<DocumentType> + createPropertyType?: Maybe<PropertyType> + updatePropertyType?: Maybe<PropertyType> + deletePropertyType?: Maybe<Scalars['Boolean']> + adminCreateLocation?: Maybe<Location> + adminUpdateLocation?: Maybe<Location> + deleteAdminLocation?: Maybe<Scalars['Boolean']> + adminCreateLocationAttribute?: Maybe<LoAttribute> + adminUpdateLocationAttribute?: Maybe<LoAttribute> + adminCreateLocationGroup?: Maybe<LocationGroup> + updateLocationUsage?: Maybe<LocationUsage> + adminCreateLocationType?: Maybe<LocationType> + adminUpdateLocationType?: Maybe<LocationType> + deleteAdminLocationType?: Maybe<Scalars['Boolean']> + updateEntityListEntities?: Maybe<Scalars['Boolean']> + deleteEntityListEntity?: Maybe<Scalars['Boolean']> + createEntityListEntity?: Maybe<Scalars['Boolean']> + updateEntityList?: Maybe<EntityList> + deleteEntityList?: Maybe<Scalars['Boolean']> + createEntityList?: Maybe<EntityList> + createEntityListView?: Maybe<ListView> + updateEntityListView?: Maybe<ListView> + deleteEntityListView?: Maybe<Scalars['Boolean']> + createTargetRule?: Maybe<TargetRule> + updateTargetRule?: Maybe<TargetRule> + deleteCommerceTargetRule?: Maybe<Scalars['Boolean']> + validateTargetRule?: Maybe<Scalars['Boolean']> + createOrderRoutingSuggestion?: Maybe<SuggestionResponse> +} + +export type MutationCreateCustomerAccountAttributeDefinitionArgs = { + attributeInput?: Maybe<CuAttributeInput> +} + +export type MutationUpdateCustomerAccountAttributeDefinitionArgs = { + attributeFQN: Scalars['String'] + attributeInput?: Maybe<CuAttributeInput> +} + +export type MutationValidateCustomerAddressArgs = { + addressValidationRequestInput?: Maybe<AddressValidationRequestInput> +} + +export type MutationValidateAddressArgs = { + addressInput?: Maybe<CuAddressInput> +} + +export type MutationCreateCustomerAuthTicketArgs = { + customerUserAuthInfoInput?: Maybe<CustomerUserAuthInfoInput> +} + +export type MutationRefreshCustomerAuthTicketsArgs = { + refreshToken?: Maybe<Scalars['String']> +} + +export type MutationCreateCustomerB2bAccountAttributeArgs = { + accountId: Scalars['Int'] + customerAttributeInput?: Maybe<CustomerAttributeInput> +} + +export type MutationDeleteB2bAccountAttributeArgs = { + accountId: Scalars['Int'] + attributeFQN: Scalars['String'] +} + +export type MutationUpdateCustomerB2bAccountAttributeArgs = { + accountId: Scalars['Int'] + attributeFQN: Scalars['String'] + customerAttributeInput?: Maybe<CustomerAttributeInput> +} + +export type MutationCreateCustomerB2bAccountArgs = { + b2BAccountInput?: Maybe<B2BAccountInput> +} + +export type MutationUpdateCustomerB2bAccountArgs = { + accountId: Scalars['Int'] + b2BAccountInput?: Maybe<B2BAccountInput> +} + +export type MutationCreateCustomerB2bAccountUserArgs = { + accountId: Scalars['Int'] + b2BUserAndAuthInfoInput?: Maybe<B2BUserAndAuthInfoInput> +} + +export type MutationUpdateCustomerB2bAccountUserArgs = { + accountId: Scalars['Int'] + userId: Scalars['String'] + b2BUserInput?: Maybe<B2BUserInput> +} + +export type MutationRemoveCustomerB2bAccountUserArgs = { + accountId: Scalars['Int'] + userId: Scalars['String'] +} + +export type MutationAddRoleToCustomerB2bAccountArgs = { + accountId: Scalars['Int'] + userId: Scalars['String'] + roleId: Scalars['Int'] +} + +export type MutationDeleteB2bAccountRoleArgs = { + accountId: Scalars['Int'] + userId: Scalars['String'] + roleId: Scalars['Int'] +} + +export type MutationCreateCustomerCreditArgs = { + userId?: Maybe<Scalars['String']> + creditInput?: Maybe<CreditInput> +} + +export type MutationUpdateCustomerCreditArgs = { + code: Scalars['String'] + creditInput?: Maybe<CreditInput> +} + +export type MutationDeleteCustomerCreditArgs = { + code: Scalars['String'] +} + +export type MutationUpdateCustomerCreditAssociateToShopperArgs = { + code: Scalars['String'] +} + +export type MutationResendCustomerCreditEmailArgs = { + code: Scalars['String'] + userId?: Maybe<Scalars['String']> +} + +export type MutationCreateCustomerCreditTransactionArgs = { + code: Scalars['String'] + creditTransactionInput?: Maybe<CreditTransactionInput> +} + +export type MutationCreateCustomerAccountAttributeArgs = { + accountId: Scalars['Int'] + userId?: Maybe<Scalars['String']> + customerAttributeInput?: Maybe<CustomerAttributeInput> +} + +export type MutationDeleteCustomerAccountAttributeArgs = { + accountId: Scalars['Int'] + attributeFQN: Scalars['String'] + userId?: Maybe<Scalars['String']> +} + +export type MutationUpdateCustomerAccountAttributeArgs = { + accountId: Scalars['Int'] + attributeFQN: Scalars['String'] + userId?: Maybe<Scalars['String']> + customerAttributeInput?: Maybe<CustomerAttributeInput> +} + +export type MutationCreateCustomerAccountCardArgs = { + accountId: Scalars['Int'] + cardInput?: Maybe<CardInput> +} + +export type MutationUpdateCustomerAccountCardArgs = { + accountId: Scalars['Int'] + cardId: Scalars['String'] + cardInput?: Maybe<CardInput> +} + +export type MutationDeleteCustomerAccountCardArgs = { + accountId: Scalars['Int'] + cardId: Scalars['String'] +} + +export type MutationCreateCustomerAccountContactArgs = { + accountId: Scalars['Int'] + customerContactInput?: Maybe<CustomerContactInput> +} + +export type MutationUpdateCustomerAccountContactsArgs = { + accountId: Scalars['Int'] + customerContactInput?: Maybe<CustomerContactInput> +} + +export type MutationUpdateCustomerAccountContactArgs = { + accountId: Scalars['Int'] + contactId: Scalars['Int'] + userId?: Maybe<Scalars['String']> + customerContactInput?: Maybe<CustomerContactInput> +} + +export type MutationDeleteCustomerAccountContactArgs = { + accountId: Scalars['Int'] + contactId: Scalars['Int'] +} + +export type MutationCreateCustomerAccountArgs = { + customerAccountInput?: Maybe<CustomerAccountInput> +} + +export type MutationUpdateCustomerAccountArgs = { + accountId: Scalars['Int'] + customerAccountInput?: Maybe<CustomerAccountInput> +} + +export type MutationDeleteCustomerAccountArgs = { + accountId: Scalars['Int'] +} + +export type MutationCreateCustomerAccountTransactionArgs = { + accountId: Scalars['Int'] + transactionInput?: Maybe<TransactionInput> +} + +export type MutationDeleteCustomerAccountTransactionArgs = { + accountId: Scalars['Int'] + transactionId: Scalars['String'] +} + +export type MutationRecomputeCustomerAccountLifetimeValueArgs = { + accountId: Scalars['Int'] +} + +export type MutationCreateCustomerAccountNoteArgs = { + accountId: Scalars['Int'] + customerNoteInput?: Maybe<CustomerNoteInput> +} + +export type MutationUpdateCustomerAccountNoteArgs = { + accountId: Scalars['Int'] + noteId: Scalars['Int'] + customerNoteInput?: Maybe<CustomerNoteInput> +} + +export type MutationDeleteCustomerAccountNoteArgs = { + accountId: Scalars['Int'] + noteId: Scalars['Int'] +} + +export type MutationCreateCustomerAccountPurchaseOrderAccountArgs = { + accountId: Scalars['Int'] + customerPurchaseOrderAccountInput?: Maybe<CustomerPurchaseOrderAccountInput> +} + +export type MutationUpdateCustomerPurchaseOrderAccountArgs = { + accountId: Scalars['Int'] + customerPurchaseOrderAccountInput?: Maybe<CustomerPurchaseOrderAccountInput> +} + +export type MutationCreateCustomerAccountPurchaseOrderAccountTransactionArgs = { + accountId: Scalars['Int'] + purchaseOrderTransactionInput?: Maybe<PurchaseOrderTransactionInput> +} + +export type MutationCreatePurchaseOrderAccountArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + accountType?: Maybe<Scalars['String']> +} + +export type MutationChangeCustomerAccountPasswordArgs = { + accountId: Scalars['Int'] + unlockAccount?: Maybe<Scalars['Boolean']> + userId?: Maybe<Scalars['String']> + passwordInfoInput?: Maybe<PasswordInfoInput> +} + +export type MutationUpdateCustomerAccountPasswordsArgs = { + accountPasswordInfoCollectionInput?: Maybe<AccountPasswordInfoCollectionInput> +} + +export type MutationResetCustomerAccountPasswordArgs = { + resetPasswordInfoInput?: Maybe<ResetPasswordInfoInput> +} + +export type MutationCreateCustomerAccountLoginArgs = { + accountId: Scalars['Int'] + customerLoginInfoInput?: Maybe<CustomerLoginInfoInput> +} + +export type MutationCreateCustomerAccountAndLoginArgs = { + customerAccountAndAuthInfoInput?: Maybe<CustomerAccountAndAuthInfoInput> +} + +export type MutationSetCustomerAccountLoginLockedArgs = { + accountId: Scalars['Int'] + userId?: Maybe<Scalars['String']> + graphQLBoolean?: Maybe<Scalars['Boolean']> +} + +export type MutationSetCustomerAccountPasswordChangeRequiredArgs = { + accountId: Scalars['Int'] + userId?: Maybe<Scalars['String']> + graphQLBoolean?: Maybe<Scalars['Boolean']> +} + +export type MutationCreateCustomerAccountsArgs = { + customerAccountAndAuthInfoInput?: Maybe<CustomerAccountAndAuthInfoInput> +} + +export type MutationCreateCustomerSegmentArgs = { + customerSegmentInput?: Maybe<CustomerSegmentInput> +} + +export type MutationUpdateCustomerSegmentArgs = { + id: Scalars['Int'] + customerSegmentInput?: Maybe<CustomerSegmentInput> +} + +export type MutationDeleteCustomerSegmentArgs = { + id: Scalars['Int'] +} + +export type MutationCreateCustomerSegmentAccountArgs = { + id: Scalars['Int'] + graphQLInt?: Maybe<Scalars['Int']> +} + +export type MutationDeleteCustomerSegmentAccountArgs = { + id: Scalars['Int'] + accountId: Scalars['Int'] +} + +export type MutationCreateInStockNotificationArgs = { + inStockNotificationSubscriptionInput?: Maybe<InStockNotificationSubscriptionInput> +} + +export type MutationDeleteInStockNotificationArgs = { + id: Scalars['Int'] +} + +export type MutationCreateResolvedPriceListArgs = { + object?: Maybe<Scalars['Object']> +} + +export type MutationConfigureProductArgs = { + productCode: Scalars['String'] + includeOptionDetails?: Maybe<Scalars['Boolean']> + skipInventoryCheck?: Maybe<Scalars['Boolean']> + quantity?: Maybe<Scalars['Int']> + purchaseLocation?: Maybe<Scalars['String']> + variationProductCodeFilter?: Maybe<Scalars['String']> + productOptionSelectionsInput?: Maybe<ProductOptionSelectionsInput> +} + +export type MutationValidateProductArgs = { + productCode: Scalars['String'] + skipInventoryCheck?: Maybe<Scalars['Boolean']> + quantity?: Maybe<Scalars['Int']> + skipDefaults?: Maybe<Scalars['Boolean']> + purchaseLocation?: Maybe<Scalars['String']> + productOptionSelectionsInput?: Maybe<ProductOptionSelectionsInput> +} + +export type MutationValidateProductDiscountsArgs = { + productCode: Scalars['String'] + variationProductCode?: Maybe<Scalars['String']> + customerAccountId?: Maybe<Scalars['Int']> + allowInactive?: Maybe<Scalars['Boolean']> + skipInventoryCheck?: Maybe<Scalars['Boolean']> + discountSelectionsInput?: Maybe<DiscountSelectionsInput> +} + +export type MutationManageLocationProductInventoryArgs = { + locationInventoryQueryInput?: Maybe<LocationInventoryQueryInput> +} + +export type MutationCreateProductCostArgs = { + productCostQueryInput?: Maybe<ProductCostQueryInput> +} + +export type MutationCreateCartForUserArgs = { + userId: Scalars['String'] +} + +export type MutationUpdateUserCartArgs = { + userId: Scalars['String'] + cartInput?: Maybe<CartInput> +} + +export type MutationUpdateCurrentCartArgs = { + cartInput?: Maybe<CartInput> +} + +export type MutationUpdateCartArgs = { + cartId: Scalars['String'] + cartInput?: Maybe<CartInput> +} + +export type MutationDeleteCartArgs = { + cartId: Scalars['String'] +} + +export type MutationDeleteUserCartArgs = { + userId: Scalars['String'] +} + +export type MutationRejectCartDiscountArgs = { + cartId: Scalars['String'] + discountId: Scalars['Int'] +} + +export type MutationUpdateCartCouponArgs = { + cartId: Scalars['String'] + couponCode: Scalars['String'] +} + +export type MutationDeleteCartCouponsArgs = { + cartId: Scalars['String'] +} + +export type MutationDeleteCartCouponArgs = { + cartId: Scalars['String'] + couponCode: Scalars['String'] +} + +export type MutationAddExtendedPropertyToCurrentCartArgs = { + extendedPropertyInput?: Maybe<ExtendedPropertyInput> +} + +export type MutationUpdateCurrentCartExtendedPropertiesArgs = { + upsert?: Maybe<Scalars['Boolean']> + extendedPropertyInput?: Maybe<ExtendedPropertyInput> +} + +export type MutationDeleteCurrentCartExtendedPropertiesArgs = { + graphQLString?: Maybe<Scalars['String']> +} + +export type MutationUpdateCurrentCartExtendedPropertyArgs = { + key: Scalars['String'] + upsert?: Maybe<Scalars['Boolean']> + extendedPropertyInput?: Maybe<ExtendedPropertyInput> +} + +export type MutationDeleteCurrentCartExtendedPropertyArgs = { + key: Scalars['String'] +} + +export type MutationAddItemToCurrentCartArgs = { + cartItemInput?: Maybe<CartItemInput> +} + +export type MutationDeleteCartItemsArgs = { + cartId: Scalars['String'] +} + +export type MutationAddItemToCartArgs = { + cartId: Scalars['String'] + cartItemInput?: Maybe<CartItemInput> +} + +export type MutationUpdateCurrentCartItemArgs = { + cartItemId: Scalars['String'] + cartItemInput?: Maybe<CartItemInput> +} + +export type MutationDeleteCurrentCartItemArgs = { + cartItemId: Scalars['String'] +} + +export type MutationUpdateCartItemArgs = { + cartId: Scalars['String'] + cartItemId: Scalars['String'] + cartItemInput?: Maybe<CartItemInput> +} + +export type MutationDeleteCartItemArgs = { + cartId: Scalars['String'] + cartItemId: Scalars['String'] +} + +export type MutationAddItemsToCurrentCartArgs = { + throwErrorOnInvalidItems?: Maybe<Scalars['Boolean']> + cartItemInput?: Maybe<CartItemInput> +} + +export type MutationAddItemsToCartArgs = { + cartId: Scalars['String'] + throwErrorOnInvalidItems?: Maybe<Scalars['Boolean']> + cartItemInput?: Maybe<CartItemInput> +} + +export type MutationUpdateCurrentCartItemQuantityArgs = { + cartItemId: Scalars['String'] + quantity: Scalars['Int'] +} + +export type MutationUpdateCartItemQuantityArgs = { + cartId: Scalars['String'] + cartItemId: Scalars['String'] + quantity: Scalars['Int'] +} + +export type MutationDeleteCurrentCartMessageArgs = { + messageId: Scalars['String'] +} + +export type MutationCreateCommerceChannelArgs = { + channelInput?: Maybe<ChannelInput> +} + +export type MutationUpdateChannelArgs = { + code: Scalars['String'] + channelInput?: Maybe<ChannelInput> +} + +export type MutationDeleteCommerceChannelArgs = { + code: Scalars['String'] +} + +export type MutationCreateCommerceChannelGroupArgs = { + channelGroupInput?: Maybe<ChannelGroupInput> +} + +export type MutationUpdateChannelGroupArgs = { + code: Scalars['String'] + channelGroupInput?: Maybe<ChannelGroupInput> +} + +export type MutationDeleteCommerceChannelGroupArgs = { + code: Scalars['String'] +} + +export type MutationCreateCheckoutAttributeArgs = { + checkoutId: Scalars['String'] + orderAttributeInput?: Maybe<OrderAttributeInput> +} + +export type MutationUpdateCheckoutAttributesArgs = { + checkoutId: Scalars['String'] + removeMissing?: Maybe<Scalars['Boolean']> + orderAttributeInput?: Maybe<OrderAttributeInput> +} + +export type MutationUpdateCheckoutArgs = { + checkoutId: Scalars['String'] + checkoutInput?: Maybe<CheckoutInput> +} + +export type MutationCreateCheckoutArgs = { + cartId?: Maybe<Scalars['String']> +} + +export type MutationCreateCheckoutShippingMethodArgs = { + checkoutId: Scalars['String'] + checkoutGroupShippingMethodInput?: Maybe<CheckoutGroupShippingMethodInput> +} + +export type MutationCreateCheckoutActionArgs = { + checkoutId: Scalars['String'] + checkoutActionInput?: Maybe<CheckoutActionInput> +} + +export type MutationUpdateCheckoutDigitalWalletTypeArgs = { + checkoutId: Scalars['String'] + digitalWalletType: Scalars['String'] + digitalWalletInput?: Maybe<DigitalWalletInput> +} + +export type MutationUpdateCheckoutPriceListArgs = { + checkoutId: Scalars['String'] + graphQLString?: Maybe<Scalars['String']> +} + +export type MutationResendCheckoutEmailArgs = { + checkoutId: Scalars['String'] +} + +export type MutationUpdateCheckoutCouponArgs = { + checkoutId: Scalars['String'] + couponCode: Scalars['String'] +} + +export type MutationDeleteCheckoutCouponsArgs = { + checkoutId: Scalars['String'] +} + +export type MutationDeleteCheckoutCouponArgs = { + checkoutId: Scalars['String'] + couponCode: Scalars['String'] +} + +export type MutationUpdateCheckoutDestinationArgs = { + checkoutId: Scalars['String'] + destinationId: Scalars['String'] + destinationInput?: Maybe<DestinationInput> +} + +export type MutationDeleteCheckoutDestinationArgs = { + checkoutId: Scalars['String'] + destinationId: Scalars['String'] +} + +export type MutationCreateCheckoutDestinationArgs = { + checkoutId: Scalars['String'] + destinationInput?: Maybe<DestinationInput> +} + +export type MutationCreateCheckoutItemArgs = { + checkoutId: Scalars['String'] + orderItemInput?: Maybe<CrOrderItemInput> +} + +export type MutationDeleteCheckoutItemArgs = { + checkoutId: Scalars['String'] + itemId: Scalars['String'] +} + +export type MutationUpdateCheckoutItemDestinationArgs = { + checkoutId: Scalars['String'] + itemId: Scalars['String'] + destinationId: Scalars['String'] +} + +export type MutationCreateCheckoutItemDestinationArgs = { + checkoutId: Scalars['String'] + itemsForDestinationInput?: Maybe<ItemsForDestinationInput> +} + +export type MutationCreateCheckoutPaymentActionArgs = { + checkoutId: Scalars['String'] + paymentActionInput?: Maybe<PaymentActionInput> +} + +export type MutationUpdateCheckoutPaymentActionArgs = { + checkoutId: Scalars['String'] + paymentId: Scalars['String'] + paymentActionInput?: Maybe<PaymentActionInput> +} + +export type MutationCreateOrderPaymentActionArgs = { + orderId: Scalars['String'] + paymentActionInput?: Maybe<PaymentActionInput> +} + +export type MutationCreateOrderPaymentPaymentActionArgs = { + orderId: Scalars['String'] + paymentId: Scalars['String'] + paymentActionInput?: Maybe<PaymentActionInput> +} + +export type MutationCreateOrderAutoCaptureArgs = { + orderId: Scalars['String'] + forceCapture?: Maybe<Scalars['Boolean']> +} + +export type MutationCreateOrderPickupArgs = { + orderId: Scalars['String'] + pickupInput?: Maybe<PickupInput> +} + +export type MutationUpdateOrderPickupArgs = { + orderId: Scalars['String'] + pickupId: Scalars['String'] + pickupInput?: Maybe<PickupInput> +} + +export type MutationDeleteOrderPickupArgs = { + orderId: Scalars['String'] + pickupId: Scalars['String'] +} + +export type MutationCreateOrderRefundArgs = { + orderId: Scalars['String'] + refundInput?: Maybe<RefundInput> +} + +export type MutationUpdateOrderRefundArgs = { + orderId: Scalars['String'] + refundId: Scalars['String'] +} + +export type MutationCreateOrderShipmentArgs = { + orderId: Scalars['String'] + graphQLString?: Maybe<Scalars['String']> +} + +export type MutationDeleteOrderShipmentArgs = { + orderId: Scalars['String'] + shipmentId: Scalars['String'] +} + +export type MutationRepriceOrderShipmentArgs = { + shipmentNumber: Scalars['Int'] + orderId: Scalars['String'] + repriceShipmentObjectInput?: Maybe<RepriceShipmentObjectInput> +} + +export type MutationCreateOrderShipmentAdjustmentArgs = { + orderId: Scalars['String'] + shipmentNumber: Scalars['Int'] + shipmentAdjustmentInput?: Maybe<ShipmentAdjustmentInput> +} + +export type MutationCreateOrderShipmentItemAdjustmentArgs = { + shipmentNumber: Scalars['Int'] + itemId: Scalars['Int'] + orderId: Scalars['String'] + shipmentItemAdjustmentInput?: Maybe<ShipmentItemAdjustmentInput> +} + +export type MutationSplitOrderShipmentArgs = { + orderId: Scalars['String'] + shipmentNumber: Scalars['String'] + splitShipmentsObjectInput?: Maybe<SplitShipmentsObjectInput> +} + +export type MutationUpdateOrderValidationResultsArgs = { + orderId: Scalars['String'] + orderValidationResultInput?: Maybe<OrderValidationResultInput> +} + +export type MutationUpdateOrderAdjustmentArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + adjustmentInput?: Maybe<AdjustmentInput> +} + +export type MutationDeleteOrderAdjustmentArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> +} + +export type MutationUpdateOrderShippingAdjustmentArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + adjustmentInput?: Maybe<AdjustmentInput> +} + +export type MutationDeleteOrderAdjustmentShippingArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> +} + +export type MutationUpdateOrderHandlingAdjustmentArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + adjustmentInput?: Maybe<AdjustmentInput> +} + +export type MutationDeleteOrderAdjustmentHandlingArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> +} + +export type MutationCreateOrderAttributeArgs = { + orderId: Scalars['String'] + orderAttributeInput?: Maybe<OrderAttributeInput> +} + +export type MutationUpdateOrderAttributesArgs = { + orderId: Scalars['String'] + removeMissing?: Maybe<Scalars['Boolean']> + orderAttributeInput?: Maybe<OrderAttributeInput> +} + +export type MutationUpdateOrderBillingInfoArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + billingInfoInput?: Maybe<BillingInfoInput> +} + +export type MutationCancelOrderArgs = { + orderId: Scalars['String'] + canceledReasonInput?: Maybe<CanceledReasonInput> +} + +export type MutationCreateOrderArgs = { + cartId?: Maybe<Scalars['String']> + quoteId?: Maybe<Scalars['String']> + orderInput?: Maybe<OrderInput> +} + +export type MutationUpdateUserOrderArgs = { + orderId: Scalars['String'] +} + +export type MutationUpdateOrderPriceListArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + graphQLString?: Maybe<Scalars['String']> +} + +export type MutationResendOrderEmailArgs = { + orderId: Scalars['String'] + orderActionInput?: Maybe<OrderActionInput> +} + +export type MutationUpdateOrderArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + orderInput?: Maybe<OrderInput> +} + +export type MutationUpdateOrderDigitalWalletTpeArgs = { + orderId: Scalars['String'] + digitalWalletType: Scalars['String'] + digitalWalletInput?: Maybe<DigitalWalletInput> +} + +export type MutationUpdateOrderDraftArgs = { + orderId: Scalars['String'] + version?: Maybe<Scalars['String']> +} + +export type MutationCreateOrderActionArgs = { + orderId: Scalars['String'] + orderActionInput?: Maybe<OrderActionInput> +} + +export type MutationUpdateOrderDiscountArgs = { + orderId: Scalars['String'] + discountId: Scalars['Int'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + appliedDiscountInput?: Maybe<CrAppliedDiscountInput> +} + +export type MutationUpdateOrderPriceArgs = { + refreshShipping?: Maybe<Scalars['Boolean']> + orderInput?: Maybe<OrderInput> +} + +export type MutationUpdateOrderCouponArgs = { + orderId: Scalars['String'] + couponCode: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> +} + +export type MutationDeleteOrderCouponsArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> +} + +export type MutationDeleteOrderCouponArgs = { + orderId: Scalars['String'] + couponCode: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> +} + +export type MutationCreateOrderDigitalPackageArgs = { + orderId: Scalars['String'] + digitalPackageInput?: Maybe<DigitalPackageInput> +} + +export type MutationUpdateOrderDigitalPackageArgs = { + orderId: Scalars['String'] + digitalPackageId: Scalars['String'] + digitalPackageInput?: Maybe<DigitalPackageInput> +} + +export type MutationDeleteOrderDigitalPackageArgs = { + orderId: Scalars['String'] + digitalPackageId: Scalars['String'] +} + +export type MutationCreateOrderExtendedPropertiesArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + extendedPropertyInput?: Maybe<ExtendedPropertyInput> +} + +export type MutationUpdateOrderExtendedPropertiesArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + upsert?: Maybe<Scalars['Boolean']> + extendedPropertyInput?: Maybe<ExtendedPropertyInput> +} + +export type MutationDeleteOrderExtendedPropertiesArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + graphQLString?: Maybe<Scalars['String']> +} + +export type MutationUpdateOrderExtendedPropertyArgs = { + orderId: Scalars['String'] + key: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + upsert?: Maybe<Scalars['Boolean']> + extendedPropertyInput?: Maybe<ExtendedPropertyInput> +} + +export type MutationDeleteOrderExtendedPropertyArgs = { + orderId: Scalars['String'] + key: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> +} + +export type MutationCreateOrderFulfillmentActionArgs = { + orderId: Scalars['String'] + fulfillmentActionInput?: Maybe<FulfillmentActionInput> +} + +export type MutationResendOrderFulfillmentEmailArgs = { + orderId: Scalars['String'] + fulfillmentActionInput?: Maybe<FulfillmentActionInput> +} + +export type MutationUpdateOrderFulfillmentInfoArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + fulfillmentInfoInput?: Maybe<FulfillmentInfoInput> +} + +export type MutationCreateOrderItemArgs = { + orderId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + skipInventoryCheck?: Maybe<Scalars['Boolean']> + orderItemInput?: Maybe<CrOrderItemInput> +} + +export type MutationDeleteOrderItemArgs = { + orderId: Scalars['String'] + orderItemId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> +} + +export type MutationUpdateOrderItemPriceArgs = { + orderId: Scalars['String'] + orderItemId: Scalars['String'] + price: Scalars['Float'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> +} + +export type MutationUpdateOrderItemQuantityArgs = { + orderId: Scalars['String'] + orderItemId: Scalars['String'] + quantity: Scalars['Int'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> +} + +export type MutationUpdateOrderItemDutyAmountArgs = { + orderId: Scalars['String'] + orderItemId: Scalars['String'] + dutyAmount: Scalars['Float'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> +} + +export type MutationUpdateOrderItemFulfillmentArgs = { + orderId: Scalars['String'] + orderItemId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + orderItemInput?: Maybe<CrOrderItemInput> +} + +export type MutationUpdateOrderItemDiscountArgs = { + orderId: Scalars['String'] + orderItemId: Scalars['String'] + discountId: Scalars['Int'] + updateMode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + appliedDiscountInput?: Maybe<CrAppliedDiscountInput> +} + +export type MutationCreateOrderNoteArgs = { + orderId: Scalars['String'] + orderNoteInput?: Maybe<OrderNoteInput> +} + +export type MutationUpdateOrderNotesArgs = { + orderId: Scalars['String'] + noteId: Scalars['String'] + orderNoteInput?: Maybe<OrderNoteInput> +} + +export type MutationDeleteOrderNoteArgs = { + orderId: Scalars['String'] + noteId: Scalars['String'] +} + +export type MutationCreateOrderPackageArgs = { + orderId: Scalars['String'] + packageObjInput?: Maybe<PackageObjInput> +} + +export type MutationUpdateOrderPackageArgs = { + orderId: Scalars['String'] + packageId: Scalars['String'] + packageObjInput?: Maybe<PackageObjInput> +} + +export type MutationDeleteOrderPackageArgs = { + orderId: Scalars['String'] + packageId: Scalars['String'] +} + +export type MutationValidateOrderArgs = { + orderInput?: Maybe<OrderInput> +} + +export type MutationUpdateQuoteArgs = { + quoteId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + quoteInput?: Maybe<QuoteInput> +} + +export type MutationDeleteQuoteArgs = { + quoteId: Scalars['String'] + draft?: Maybe<Scalars['Boolean']> +} + +export type MutationCreateQuoteArgs = { + quoteInput?: Maybe<QuoteInput> +} + +export type MutationCreateQuoteItemArgs = { + quoteId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> + orderItemInput?: Maybe<CrOrderItemInput> +} + +export type MutationDeleteQuoteItemArgs = { + quoteId: Scalars['String'] + quoteItemId: Scalars['String'] + updateMode?: Maybe<Scalars['String']> +} + +export type MutationCreateReturnArgs = { + returnObjInput?: Maybe<ReturnObjInput> +} + +export type MutationResendReturnEmailArgs = { + returnActionInput?: Maybe<ReturnActionInput> +} + +export type MutationUpdateReturnArgs = { + returnId: Scalars['String'] + returnObjInput?: Maybe<ReturnObjInput> +} + +export type MutationDeleteReturnArgs = { + returnId: Scalars['String'] +} + +export type MutationCreateReturnActionArgs = { + returnActionInput?: Maybe<ReturnActionInput> +} + +export type MutationSetReturnShipArgs = { + returnId: Scalars['String'] + returnItemSpecifierInput?: Maybe<ReturnItemSpecifierInput> +} + +export type MutationCreateReturnPaymentActionArgs = { + returnId: Scalars['String'] + paymentActionInput?: Maybe<PaymentActionInput> +} + +export type MutationCreateReturnPaymentPaymentActionArgs = { + returnId: Scalars['String'] + paymentId: Scalars['String'] + paymentActionInput?: Maybe<PaymentActionInput> +} + +export type MutationSetReturnRestockArgs = { + returnId: Scalars['String'] + restockableReturnItemInput?: Maybe<RestockableReturnItemInput> +} + +export type MutationCreateReturnItemArgs = { + returnId: Scalars['String'] + returnItemInput?: Maybe<ReturnItemInput> +} + +export type MutationDeleteReturnItemArgs = { + returnId?: Maybe<Scalars['String']> + returnItemId?: Maybe<Scalars['String']> + orderId: Scalars['String'] + orderItemId: Scalars['String'] +} + +export type MutationCreateReturnNoteArgs = { + returnId: Scalars['String'] + orderNoteInput?: Maybe<OrderNoteInput> +} + +export type MutationUpdateReturnNoteArgs = { + returnId: Scalars['String'] + noteId: Scalars['String'] + orderNoteInput?: Maybe<OrderNoteInput> +} + +export type MutationDeleteReturnNoteArgs = { + returnId: Scalars['String'] + noteId: Scalars['String'] +} + +export type MutationCreateReturnPackageArgs = { + returnId: Scalars['String'] + packageObjInput?: Maybe<PackageObjInput> +} + +export type MutationUpdateReturnPackageArgs = { + returnId: Scalars['String'] + packageId: Scalars['String'] + packageObjInput?: Maybe<PackageObjInput> +} + +export type MutationDeleteReturnPackageArgs = { + returnId: Scalars['String'] + packageId: Scalars['String'] +} + +export type MutationCreateReturnShipmentArgs = { + returnId: Scalars['String'] + graphQLString?: Maybe<Scalars['String']> +} + +export type MutationDeleteReturnShipmentArgs = { + returnId: Scalars['String'] + shipmentId: Scalars['String'] +} + +export type MutationCreateWishlistArgs = { + wishlistInput?: Maybe<WishlistInput> +} + +export type MutationUpdateWishlistArgs = { + wishlistId: Scalars['String'] + wishlistInput?: Maybe<WishlistInput> +} + +export type MutationDeleteWishlistArgs = { + wishlistId: Scalars['String'] +} + +export type MutationDeleteWishlistItemsArgs = { + wishlistId: Scalars['String'] +} + +export type MutationCreateWishlistItemArgs = { + wishlistId: Scalars['String'] + wishlistItemInput?: Maybe<WishlistItemInput> +} + +export type MutationUpdateWishlistItemArgs = { + wishlistId: Scalars['String'] + wishlistItemId: Scalars['String'] + wishlistItemInput?: Maybe<WishlistItemInput> +} + +export type MutationDeleteWishlistItemArgs = { + wishlistId: Scalars['String'] + wishlistItemId: Scalars['String'] +} + +export type MutationUpdateWishlistItemQuantityArgs = { + wishlistId: Scalars['String'] + wishlistItemId: Scalars['String'] + quantity: Scalars['Int'] +} + +export type MutationUpdateDocumentListDocumentContentArgs = { + documentListName: Scalars['String'] + documentId: Scalars['String'] + httpRequestMessageInput?: Maybe<CoHttpRequestMessageInput> +} + +export type MutationDeleteDocumentListDocumentContentArgs = { + documentListName: Scalars['String'] + documentId: Scalars['String'] +} + +export type MutationUpdateDocumentListDocumentTreeContentArgs = { + documentListName: Scalars['String'] + documentName: Scalars['String'] + httpRequestMessageInput?: Maybe<CoHttpRequestMessageInput> +} + +export type MutationDeleteDocumentListDocumentTreeContentArgs = { + documentListName: Scalars['String'] + documentName: Scalars['String'] + httpRequestMessageInput?: Maybe<CoHttpRequestMessageInput> +} + +export type MutationCreateDocumentListDocumentArgs = { + documentListName: Scalars['String'] + documentInput?: Maybe<DocumentInput> +} + +export type MutationUpdateDocumentListDocumentArgs = { + documentListName: Scalars['String'] + documentId: Scalars['String'] + documentInput?: Maybe<DocumentInput> +} + +export type MutationPatchDocumentListDocumentArgs = { + documentListName: Scalars['String'] + documentId: Scalars['String'] + documentInput?: Maybe<DocumentInput> +} + +export type MutationDeleteDocumentListDocumentArgs = { + documentListName: Scalars['String'] + documentId: Scalars['String'] +} + +export type MutationCreateDocumentListArgs = { + documentListInput?: Maybe<DocumentListInput> +} + +export type MutationUpdateDocumentListArgs = { + documentListName: Scalars['String'] + documentListInput?: Maybe<DocumentListInput> +} + +export type MutationDeleteDocumentListArgs = { + documentListName: Scalars['String'] +} + +export type MutationCreateDocumentListTypeArgs = { + documentListTypeInput?: Maybe<DocumentListTypeInput> +} + +export type MutationUpdateDocumentListTypeArgs = { + documentListTypeFQN: Scalars['String'] + documentListTypeInput?: Maybe<DocumentListTypeInput> +} + +export type MutationCreateDocumentDraftArgs = { + documentLists?: Maybe<Scalars['String']> + graphQLString?: Maybe<Scalars['String']> +} + +export type MutationToggleDocumentPublishingArgs = { + documentLists?: Maybe<Scalars['String']> + graphQLString?: Maybe<Scalars['String']> +} + +export type MutationCreateDocumentTypeArgs = { + documentTypeInput?: Maybe<DocumentTypeInput> +} + +export type MutationUpdateDocumentTypeArgs = { + documentTypeName: Scalars['String'] + documentTypeInput?: Maybe<DocumentTypeInput> +} + +export type MutationCreatePropertyTypeArgs = { + propertyTypeInput?: Maybe<PropertyTypeInput> +} + +export type MutationUpdatePropertyTypeArgs = { + propertyTypeName: Scalars['String'] + propertyTypeInput?: Maybe<PropertyTypeInput> +} + +export type MutationDeletePropertyTypeArgs = { + propertyTypeName: Scalars['String'] +} + +export type MutationAdminCreateLocationArgs = { + locationInput?: Maybe<LocationInput> +} + +export type MutationAdminUpdateLocationArgs = { + locationCode: Scalars['String'] + locationInput?: Maybe<LocationInput> +} + +export type MutationDeleteAdminLocationArgs = { + locationCode: Scalars['String'] +} + +export type MutationAdminCreateLocationAttributeArgs = { + attributeInput?: Maybe<LoAttributeInput> +} + +export type MutationAdminUpdateLocationAttributeArgs = { + attributeFQN: Scalars['String'] + attributeInput?: Maybe<LoAttributeInput> +} + +export type MutationAdminCreateLocationGroupArgs = { + locationGroupInput?: Maybe<LocationGroupInput> +} + +export type MutationUpdateLocationUsageArgs = { + code: Scalars['String'] + locationUsageInput?: Maybe<LocationUsageInput> +} + +export type MutationAdminCreateLocationTypeArgs = { + locationTypeInput?: Maybe<LocationTypeInput> +} + +export type MutationAdminUpdateLocationTypeArgs = { + locationTypeCode: Scalars['String'] + locationTypeInput?: Maybe<LocationTypeInput> +} + +export type MutationDeleteAdminLocationTypeArgs = { + locationTypeCode: Scalars['String'] +} + +export type MutationUpdateEntityListEntitiesArgs = { + entityListFullName: Scalars['String'] + id: Scalars['String'] + httpRequestMessageInput?: Maybe<MzdbHttpRequestMessageInput> +} + +export type MutationDeleteEntityListEntityArgs = { + entityListFullName: Scalars['String'] + id: Scalars['String'] +} + +export type MutationCreateEntityListEntityArgs = { + entityListFullName: Scalars['String'] + httpRequestMessageInput?: Maybe<MzdbHttpRequestMessageInput> +} + +export type MutationUpdateEntityListArgs = { + entityListFullName: Scalars['String'] + entityListInput?: Maybe<EntityListInput> +} + +export type MutationDeleteEntityListArgs = { + entityListFullName: Scalars['String'] +} + +export type MutationCreateEntityListArgs = { + entityListInput?: Maybe<EntityListInput> +} + +export type MutationCreateEntityListViewArgs = { + entityListFullName: Scalars['String'] + listViewInput?: Maybe<ListViewInput> +} + +export type MutationUpdateEntityListViewArgs = { + entityListFullName: Scalars['String'] + viewName: Scalars['String'] + listViewInput?: Maybe<ListViewInput> +} + +export type MutationDeleteEntityListViewArgs = { + entityListFullName: Scalars['String'] + viewName: Scalars['String'] +} + +export type MutationCreateTargetRuleArgs = { + targetRuleInput?: Maybe<TargetRuleInput> +} + +export type MutationUpdateTargetRuleArgs = { + code: Scalars['String'] + targetRuleInput?: Maybe<TargetRuleInput> +} + +export type MutationDeleteCommerceTargetRuleArgs = { + code: Scalars['String'] +} + +export type MutationValidateTargetRuleArgs = { + targetRuleInput?: Maybe<TargetRuleInput> +} + +export type MutationCreateOrderRoutingSuggestionArgs = { + returnSuggestionLog?: Maybe<Scalars['Boolean']> + suggestionRequestInput?: Maybe<SuggestionRequestInput> +} + +export enum NodeTypeEnum { + Array = 'ARRAY', + Binary = 'BINARY', + Boolean = 'BOOLEAN', + Missing = 'MISSING', + Null = 'NULL', + Number = 'NUMBER', + Object = 'OBJECT', + Pojo = 'POJO', + String = 'STRING', +} + +export type Order = { + __typename?: 'Order' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Order> + orderNumber?: Maybe<Scalars['Int']> + locationCode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + parentOrderId?: Maybe<Scalars['String']> + parentOrderNumber?: Maybe<Scalars['Int']> + parentCheckoutId?: Maybe<Scalars['String']> + parentCheckoutNumber?: Maybe<Scalars['Int']> + partialOrderNumber?: Maybe<Scalars['Int']> + partialOrderCount?: Maybe<Scalars['Int']> + isPartialOrder?: Maybe<Scalars['Boolean']> + parentReturnId?: Maybe<Scalars['String']> + parentReturnNumber?: Maybe<Scalars['Int']> + originalCartId?: Maybe<Scalars['String']> + originalQuoteId?: Maybe<Scalars['String']> + originalQuoteNumber?: Maybe<Scalars['Int']> + priceListCode?: Maybe<Scalars['String']> + availableActions?: Maybe<Array<Scalars['String']>> + shopperNotes?: Maybe<ShopperNotes> + customerAccountId?: Maybe<Scalars['Int']> + customerTaxId?: Maybe<Scalars['String']> + isTaxExempt?: Maybe<Scalars['Boolean']> + email?: Maybe<Scalars['String']> + ipAddress?: Maybe<Scalars['String']> + sourceDevice?: Maybe<Scalars['String']> + acceptsMarketing?: Maybe<Scalars['Boolean']> + status?: Maybe<Scalars['String']> + type?: Maybe<Scalars['String']> + paymentStatus?: Maybe<Scalars['String']> + returnStatus?: Maybe<Scalars['String']> + isEligibleForReturns?: Maybe<Scalars['Boolean']> + totalCollected: Scalars['Float'] + attributes?: Maybe<Array<Maybe<OrderAttribute>>> + adjustment?: Maybe<Adjustment> + shippingAdjustment?: Maybe<Adjustment> + handlingAdjustment?: Maybe<Adjustment> + shippingDiscounts?: Maybe<Array<Maybe<ShippingDiscount>>> + handlingDiscounts?: Maybe<Array<Maybe<CrAppliedDiscount>>> + handlingAmount?: Maybe<Scalars['Float']> + handlingSubTotal?: Maybe<Scalars['Float']> + handlingTotal?: Maybe<Scalars['Float']> + dutyAmount?: Maybe<Scalars['Float']> + dutyTotal?: Maybe<Scalars['Float']> + fulfillmentStatus?: Maybe<Scalars['String']> + submittedDate?: Maybe<Scalars['DateTime']> + cancelledDate?: Maybe<Scalars['DateTime']> + closedDate?: Maybe<Scalars['DateTime']> + acceptedDate?: Maybe<Scalars['DateTime']> + notes?: Maybe<Array<Maybe<OrderNote>>> + items?: Maybe<Array<Maybe<CrOrderItem>>> + validationResults?: Maybe<Array<Maybe<OrderValidationResult>>> + billingInfo?: Maybe<BillingInfo> + payments?: Maybe<Array<Maybe<Payment>>> + refunds?: Maybe<Array<Maybe<Refund>>> + packages?: Maybe<Array<Maybe<PackageObj>>> + pickups?: Maybe<Array<Maybe<Pickup>>> + digitalPackages?: Maybe<Array<Maybe<DigitalPackage>>> + shipments?: Maybe<Array<Maybe<Shipment>>> + isDraft?: Maybe<Scalars['Boolean']> + hasDraft?: Maybe<Scalars['Boolean']> + isImport?: Maybe<Scalars['Boolean']> + isHistoricalImport?: Maybe<Scalars['Boolean']> + importDate?: Maybe<Scalars['DateTime']> + isUnified?: Maybe<Scalars['Boolean']> + externalId?: Maybe<Scalars['String']> + couponCodes?: Maybe<Array<Scalars['String']>> + invalidCoupons?: Maybe<Array<Maybe<InvalidCoupon>>> + amountAvailableForRefund: Scalars['Float'] + amountRemainingForPayment: Scalars['Float'] + amountRefunded: Scalars['Float'] + readyToCapture?: Maybe<Scalars['Boolean']> + isOptInForSms?: Maybe<Scalars['Boolean']> + userId?: Maybe<Scalars['String']> + id?: Maybe<Scalars['String']> + tenantId?: Maybe<Scalars['Int']> + siteId?: Maybe<Scalars['Int']> + channelCode?: Maybe<Scalars['String']> + currencyCode?: Maybe<Scalars['String']> + visitId?: Maybe<Scalars['String']> + webSessionId?: Maybe<Scalars['String']> + customerInteractionType?: Maybe<Scalars['String']> + fulfillmentInfo?: Maybe<FulfillmentInfo> + orderDiscounts?: Maybe<Array<Maybe<CrAppliedDiscount>>> + suggestedDiscounts?: Maybe<Array<Maybe<SuggestedDiscount>>> + rejectedDiscounts?: Maybe<Array<Maybe<SuggestedDiscount>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + subtotal?: Maybe<Scalars['Float']> + discountedSubtotal?: Maybe<Scalars['Float']> + discountTotal?: Maybe<Scalars['Float']> + discountedTotal?: Maybe<Scalars['Float']> + shippingTotal?: Maybe<Scalars['Float']> + shippingSubTotal?: Maybe<Scalars['Float']> + shippingTaxTotal?: Maybe<Scalars['Float']> + handlingTaxTotal?: Maybe<Scalars['Float']> + itemTaxTotal?: Maybe<Scalars['Float']> + taxTotal?: Maybe<Scalars['Float']> + feeTotal?: Maybe<Scalars['Float']> + total?: Maybe<Scalars['Float']> + lineItemSubtotalWithOrderAdjustments?: Maybe<Scalars['Float']> + shippingAmountBeforeDiscountsAndAdjustments?: Maybe<Scalars['Float']> + lastValidationDate?: Maybe<Scalars['DateTime']> + expirationDate?: Maybe<Scalars['DateTime']> + changeMessages?: Maybe<Array<Maybe<ChangeMessage>>> + extendedProperties?: Maybe<Array<Maybe<ExtendedProperty>>> + discountThresholdMessages?: Maybe<Array<Maybe<ThresholdMessage>>> + auditInfo?: Maybe<CrAuditInfo> +} + +export type Order_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type OrderActionInput = { + actionName?: Maybe<Scalars['String']> +} + +export type OrderAttribute = { + __typename?: 'OrderAttribute' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<OrderAttribute> + auditInfo?: Maybe<CrAuditInfo> + fullyQualifiedName?: Maybe<Scalars['String']> + attributeDefinitionId?: Maybe<Scalars['Int']> + values?: Maybe<Array<Scalars['Object']>> +} + +export type OrderAttribute_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type OrderAttributeInput = { + auditInfo?: Maybe<CrAuditInfoInput> + fullyQualifiedName?: Maybe<Scalars['String']> + attributeDefinitionId?: Maybe<Scalars['Int']> + values?: Maybe<Array<Scalars['Object']>> +} + +export type OrderCollection = { + __typename?: 'OrderCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<OrderCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<Order>>> +} + +export type OrderCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type OrderInput = { + orderNumber?: Maybe<Scalars['Int']> + locationCode?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + parentOrderId?: Maybe<Scalars['String']> + parentOrderNumber?: Maybe<Scalars['Int']> + parentCheckoutId?: Maybe<Scalars['String']> + parentCheckoutNumber?: Maybe<Scalars['Int']> + partialOrderNumber?: Maybe<Scalars['Int']> + partialOrderCount?: Maybe<Scalars['Int']> + isPartialOrder?: Maybe<Scalars['Boolean']> + parentReturnId?: Maybe<Scalars['String']> + parentReturnNumber?: Maybe<Scalars['Int']> + originalCartId?: Maybe<Scalars['String']> + originalQuoteId?: Maybe<Scalars['String']> + originalQuoteNumber?: Maybe<Scalars['Int']> + priceListCode?: Maybe<Scalars['String']> + availableActions?: Maybe<Array<Scalars['String']>> + shopperNotes?: Maybe<ShopperNotesInput> + customerAccountId?: Maybe<Scalars['Int']> + customerTaxId?: Maybe<Scalars['String']> + isTaxExempt?: Maybe<Scalars['Boolean']> + email?: Maybe<Scalars['String']> + ipAddress?: Maybe<Scalars['String']> + sourceDevice?: Maybe<Scalars['String']> + acceptsMarketing?: Maybe<Scalars['Boolean']> + status?: Maybe<Scalars['String']> + type?: Maybe<Scalars['String']> + paymentStatus?: Maybe<Scalars['String']> + returnStatus?: Maybe<Scalars['String']> + isEligibleForReturns?: Maybe<Scalars['Boolean']> + totalCollected: Scalars['Float'] + attributes?: Maybe<Array<Maybe<OrderAttributeInput>>> + adjustment?: Maybe<AdjustmentInput> + shippingAdjustment?: Maybe<AdjustmentInput> + handlingAdjustment?: Maybe<AdjustmentInput> + shippingDiscounts?: Maybe<Array<Maybe<ShippingDiscountInput>>> + handlingDiscounts?: Maybe<Array<Maybe<CrAppliedDiscountInput>>> + handlingAmount?: Maybe<Scalars['Float']> + handlingSubTotal?: Maybe<Scalars['Float']> + handlingTotal?: Maybe<Scalars['Float']> + dutyAmount?: Maybe<Scalars['Float']> + dutyTotal?: Maybe<Scalars['Float']> + fulfillmentStatus?: Maybe<Scalars['String']> + submittedDate?: Maybe<Scalars['DateTime']> + cancelledDate?: Maybe<Scalars['DateTime']> + closedDate?: Maybe<Scalars['DateTime']> + acceptedDate?: Maybe<Scalars['DateTime']> + notes?: Maybe<Array<Maybe<OrderNoteInput>>> + items?: Maybe<Array<Maybe<CrOrderItemInput>>> + validationResults?: Maybe<Array<Maybe<OrderValidationResultInput>>> + billingInfo?: Maybe<BillingInfoInput> + payments?: Maybe<Array<Maybe<PaymentInput>>> + refunds?: Maybe<Array<Maybe<RefundInput>>> + packages?: Maybe<Array<Maybe<PackageObjInput>>> + pickups?: Maybe<Array<Maybe<PickupInput>>> + digitalPackages?: Maybe<Array<Maybe<DigitalPackageInput>>> + shipments?: Maybe<Array<Maybe<ShipmentInput>>> + isDraft?: Maybe<Scalars['Boolean']> + hasDraft?: Maybe<Scalars['Boolean']> + isImport?: Maybe<Scalars['Boolean']> + isHistoricalImport?: Maybe<Scalars['Boolean']> + importDate?: Maybe<Scalars['DateTime']> + isUnified?: Maybe<Scalars['Boolean']> + externalId?: Maybe<Scalars['String']> + couponCodes?: Maybe<Array<Scalars['String']>> + invalidCoupons?: Maybe<Array<Maybe<InvalidCouponInput>>> + amountAvailableForRefund: Scalars['Float'] + amountRemainingForPayment: Scalars['Float'] + amountRefunded: Scalars['Float'] + readyToCapture?: Maybe<Scalars['Boolean']> + isOptInForSms?: Maybe<Scalars['Boolean']> + userId?: Maybe<Scalars['String']> + id?: Maybe<Scalars['String']> + tenantId?: Maybe<Scalars['Int']> + siteId?: Maybe<Scalars['Int']> + channelCode?: Maybe<Scalars['String']> + currencyCode?: Maybe<Scalars['String']> + visitId?: Maybe<Scalars['String']> + webSessionId?: Maybe<Scalars['String']> + customerInteractionType?: Maybe<Scalars['String']> + fulfillmentInfo?: Maybe<FulfillmentInfoInput> + orderDiscounts?: Maybe<Array<Maybe<CrAppliedDiscountInput>>> + suggestedDiscounts?: Maybe<Array<Maybe<SuggestedDiscountInput>>> + rejectedDiscounts?: Maybe<Array<Maybe<SuggestedDiscountInput>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + subtotal?: Maybe<Scalars['Float']> + discountedSubtotal?: Maybe<Scalars['Float']> + discountTotal?: Maybe<Scalars['Float']> + discountedTotal?: Maybe<Scalars['Float']> + shippingTotal?: Maybe<Scalars['Float']> + shippingSubTotal?: Maybe<Scalars['Float']> + shippingTaxTotal?: Maybe<Scalars['Float']> + handlingTaxTotal?: Maybe<Scalars['Float']> + itemTaxTotal?: Maybe<Scalars['Float']> + taxTotal?: Maybe<Scalars['Float']> + feeTotal?: Maybe<Scalars['Float']> + total?: Maybe<Scalars['Float']> + lineItemSubtotalWithOrderAdjustments?: Maybe<Scalars['Float']> + shippingAmountBeforeDiscountsAndAdjustments?: Maybe<Scalars['Float']> + lastValidationDate?: Maybe<Scalars['DateTime']> + expirationDate?: Maybe<Scalars['DateTime']> + changeMessages?: Maybe<Array<Maybe<ChangeMessageInput>>> + extendedProperties?: Maybe<Array<Maybe<ExtendedPropertyInput>>> + discountThresholdMessages?: Maybe<Array<Maybe<ThresholdMessageInput>>> + auditInfo?: Maybe<CrAuditInfoInput> +} + +export type OrderItemCollection = { + __typename?: 'OrderItemCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<OrderItemCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<CrOrderItem>>> +} + +export type OrderItemCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type OrderItemInput = { + backorderable?: Maybe<Scalars['Boolean']> + customItemData: Scalars['Object'] + itemDependency: Scalars['Int'] + orderItemID: Scalars['Int'] + partNumber: Scalars['String'] + quantity: Scalars['Int'] + sku: Scalars['String'] + upc: Scalars['String'] +} + +export type OrderNote = { + __typename?: 'OrderNote' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<OrderNote> + id?: Maybe<Scalars['String']> + text?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfo> +} + +export type OrderNote_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type OrderNoteInput = { + id?: Maybe<Scalars['String']> + text?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfoInput> +} + +export type OrderReturnableItem = { + __typename?: 'OrderReturnableItem' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<OrderReturnableItem> + productCode?: Maybe<Scalars['String']> + productName?: Maybe<Scalars['String']> + shipmentNumber?: Maybe<Scalars['Int']> + shipmentItemId?: Maybe<Scalars['Int']> + quantityOrdered: Scalars['Int'] + quantityFulfilled: Scalars['Int'] + quantityReturned: Scalars['Int'] + quantityReturnable: Scalars['Int'] + fulfillmentStatus?: Maybe<Scalars['String']> + orderItemId?: Maybe<Scalars['String']> + orderLineId: Scalars['Int'] + orderItemOptionAttributeFQN?: Maybe<Scalars['String']> + unitQuantity: Scalars['Int'] + parentProductCode?: Maybe<Scalars['String']> + parentProductName?: Maybe<Scalars['String']> + fulfillmentFields?: Maybe<Array<Maybe<FulfillmentField>>> + sku?: Maybe<Scalars['String']> + mfgPartNumber?: Maybe<Scalars['String']> +} + +export type OrderReturnableItem_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type OrderReturnableItemCollection = { + __typename?: 'OrderReturnableItemCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<OrderReturnableItemCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<OrderReturnableItem>>> +} + +export type OrderReturnableItemCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export enum OrderTypeEnum { + Directship = 'DIRECTSHIP', + Transfer = 'TRANSFER', +} + +export type OrderValidationMessage = { + __typename?: 'OrderValidationMessage' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<OrderValidationMessage> + orderItemId?: Maybe<Scalars['String']> + messageType?: Maybe<Scalars['String']> + message?: Maybe<Scalars['String']> +} + +export type OrderValidationMessage_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type OrderValidationMessageInput = { + orderItemId?: Maybe<Scalars['String']> + messageType?: Maybe<Scalars['String']> + message?: Maybe<Scalars['String']> +} + +export type OrderValidationResult = { + __typename?: 'OrderValidationResult' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<OrderValidationResult> + validationId?: Maybe<Scalars['String']> + validatorName?: Maybe<Scalars['String']> + validatorType?: Maybe<Scalars['String']> + status?: Maybe<Scalars['String']> + createdDate?: Maybe<Scalars['DateTime']> + messages?: Maybe<Array<Maybe<OrderValidationMessage>>> +} + +export type OrderValidationResult_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type OrderValidationResultInput = { + validationId?: Maybe<Scalars['String']> + validatorName?: Maybe<Scalars['String']> + validatorType?: Maybe<Scalars['String']> + status?: Maybe<Scalars['String']> + createdDate?: Maybe<Scalars['DateTime']> + messages?: Maybe<Array<Maybe<OrderValidationMessageInput>>> +} + +export type PackageItem = { + __typename?: 'PackageItem' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PackageItem> + productCode?: Maybe<Scalars['String']> + quantity: Scalars['Int'] + fulfillmentItemType?: Maybe<Scalars['String']> + lineId?: Maybe<Scalars['Int']> + optionAttributeFQN?: Maybe<Scalars['String']> +} + +export type PackageItem_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PackageItemInput = { + productCode?: Maybe<Scalars['String']> + quantity: Scalars['Int'] + fulfillmentItemType?: Maybe<Scalars['String']> + lineId?: Maybe<Scalars['Int']> + optionAttributeFQN?: Maybe<Scalars['String']> +} + +export type PackageObj = { + __typename?: 'PackageObj' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PackageObj> + shippingMethodCode?: Maybe<Scalars['String']> + shippingMethodName?: Maybe<Scalars['String']> + shipmentId?: Maybe<Scalars['String']> + trackingNumber?: Maybe<Scalars['String']> + trackingNumbers?: Maybe<Array<Scalars['String']>> + packagingType?: Maybe<Scalars['String']> + hasLabel?: Maybe<Scalars['Boolean']> + measurements?: Maybe<CrPackageMeasurements> + carrier?: Maybe<Scalars['String']> + signatureRequired?: Maybe<Scalars['Boolean']> + trackings?: Maybe<Array<Maybe<Tracking>>> + id?: Maybe<Scalars['String']> + code?: Maybe<Scalars['String']> + status?: Maybe<Scalars['String']> + items?: Maybe<Array<Maybe<PackageItem>>> + fulfillmentDate?: Maybe<Scalars['DateTime']> + fulfillmentLocationCode?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfo> + availableActions?: Maybe<Array<Scalars['String']>> + changeMessages?: Maybe<Array<Maybe<ChangeMessage>>> +} + +export type PackageObj_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PackageObjInput = { + shippingMethodCode?: Maybe<Scalars['String']> + shippingMethodName?: Maybe<Scalars['String']> + shipmentId?: Maybe<Scalars['String']> + trackingNumber?: Maybe<Scalars['String']> + trackingNumbers?: Maybe<Array<Scalars['String']>> + packagingType?: Maybe<Scalars['String']> + hasLabel?: Maybe<Scalars['Boolean']> + measurements?: Maybe<CrPackageMeasurementsInput> + carrier?: Maybe<Scalars['String']> + signatureRequired?: Maybe<Scalars['Boolean']> + trackings?: Maybe<Array<Maybe<TrackingInput>>> + id?: Maybe<Scalars['String']> + code?: Maybe<Scalars['String']> + status?: Maybe<Scalars['String']> + items?: Maybe<Array<Maybe<PackageItemInput>>> + fulfillmentDate?: Maybe<Scalars['DateTime']> + fulfillmentLocationCode?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfoInput> + availableActions?: Maybe<Array<Scalars['String']>> + changeMessages?: Maybe<Array<Maybe<ChangeMessageInput>>> +} + +export type PackageSettings = { + __typename?: 'PackageSettings' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PackageSettings> + unitType?: Maybe<Scalars['String']> +} + +export type PackageSettings_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PasswordInfoInput = { + oldPassword?: Maybe<Scalars['String']> + newPassword?: Maybe<Scalars['String']> + externalPassword?: Maybe<Scalars['String']> +} + +export type Payment = { + __typename?: 'Payment' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Payment> + id?: Maybe<Scalars['String']> + groupId?: Maybe<PaymentActionTarget> + paymentServiceTransactionId?: Maybe<Scalars['String']> + availableActions?: Maybe<Array<Scalars['String']>> + orderId?: Maybe<Scalars['String']> + paymentType?: Maybe<Scalars['String']> + paymentWorkflow?: Maybe<Scalars['String']> + externalTransactionId?: Maybe<Scalars['String']> + billingInfo?: Maybe<BillingInfo> + data?: Maybe<Scalars['Object']> + status?: Maybe<Scalars['String']> + subPayments?: Maybe<Array<Maybe<SubPayment>>> + interactions?: Maybe<Array<Maybe<PaymentInteraction>>> + isRecurring?: Maybe<Scalars['Boolean']> + amountCollected: Scalars['Float'] + amountCredited: Scalars['Float'] + amountRequested: Scalars['Float'] + changeMessages?: Maybe<Array<Maybe<ChangeMessage>>> + auditInfo?: Maybe<CrAuditInfo> + gatewayGiftCard?: Maybe<GatewayGiftCard> +} + +export type Payment_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PaymentActionInput = { + actionName?: Maybe<Scalars['String']> + currencyCode?: Maybe<Scalars['String']> + checkNumber?: Maybe<Scalars['String']> + returnUrl?: Maybe<Scalars['String']> + cancelUrl?: Maybe<Scalars['String']> + amount?: Maybe<Scalars['Float']> + interactionDate?: Maybe<Scalars['DateTime']> + newBillingInfo?: Maybe<BillingInfoInput> + referenceSourcePaymentId?: Maybe<Scalars['String']> + manualGatewayInteraction?: Maybe<PaymentGatewayInteractionInput> + externalTransactionId?: Maybe<Scalars['String']> + data?: Maybe<Scalars['Object']> +} + +export type PaymentActionTarget = { + __typename?: 'PaymentActionTarget' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PaymentActionTarget> + targetType?: Maybe<Scalars['String']> + targetId?: Maybe<Scalars['String']> + targetNumber?: Maybe<Scalars['Int']> +} + +export type PaymentActionTarget_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PaymentActionTargetInput = { + targetType?: Maybe<Scalars['String']> + targetId?: Maybe<Scalars['String']> + targetNumber?: Maybe<Scalars['Int']> +} + +export type PaymentCard = { + __typename?: 'PaymentCard' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PaymentCard> + paymentServiceCardId?: Maybe<Scalars['String']> + isUsedRecurring?: Maybe<Scalars['Boolean']> + nameOnCard?: Maybe<Scalars['String']> + isCardInfoSaved?: Maybe<Scalars['Boolean']> + isTokenized?: Maybe<Scalars['Boolean']> + paymentOrCardType?: Maybe<Scalars['String']> + cardNumberPartOrMask?: Maybe<Scalars['String']> + expireMonth: Scalars['Int'] + expireYear: Scalars['Int'] + bin?: Maybe<Scalars['String']> +} + +export type PaymentCard_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PaymentCardInput = { + paymentServiceCardId?: Maybe<Scalars['String']> + isUsedRecurring?: Maybe<Scalars['Boolean']> + nameOnCard?: Maybe<Scalars['String']> + isCardInfoSaved?: Maybe<Scalars['Boolean']> + isTokenized?: Maybe<Scalars['Boolean']> + paymentOrCardType?: Maybe<Scalars['String']> + cardNumberPartOrMask?: Maybe<Scalars['String']> + expireMonth: Scalars['Int'] + expireYear: Scalars['Int'] + bin?: Maybe<Scalars['String']> +} + +export type PaymentCollection = { + __typename?: 'PaymentCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PaymentCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<Payment>>> +} + +export type PaymentCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PaymentGatewayInteractionInput = { + gatewayInteractionId?: Maybe<Scalars['Int']> + gatewayTransactionId?: Maybe<Scalars['String']> + gatewayAuthCode?: Maybe<Scalars['String']> + gatewayAVSCodes?: Maybe<Scalars['String']> + gatewayCVV2Codes?: Maybe<Scalars['String']> + gatewayResponseCode?: Maybe<Scalars['String']> + gatewayResponseText?: Maybe<Scalars['String']> +} + +export type PaymentGatewayResponseData = { + __typename?: 'PaymentGatewayResponseData' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PaymentGatewayResponseData> + key?: Maybe<Scalars['String']> + value?: Maybe<Scalars['String']> +} + +export type PaymentGatewayResponseData_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PaymentGatewayResponseDataInput = { + key?: Maybe<Scalars['String']> + value?: Maybe<Scalars['String']> +} + +export type PaymentInput = { + id?: Maybe<Scalars['String']> + groupId?: Maybe<PaymentActionTargetInput> + paymentServiceTransactionId?: Maybe<Scalars['String']> + availableActions?: Maybe<Array<Scalars['String']>> + orderId?: Maybe<Scalars['String']> + paymentType?: Maybe<Scalars['String']> + paymentWorkflow?: Maybe<Scalars['String']> + externalTransactionId?: Maybe<Scalars['String']> + billingInfo?: Maybe<BillingInfoInput> + data?: Maybe<Scalars['Object']> + status?: Maybe<Scalars['String']> + subPayments?: Maybe<Array<Maybe<SubPaymentInput>>> + interactions?: Maybe<Array<Maybe<PaymentInteractionInput>>> + isRecurring?: Maybe<Scalars['Boolean']> + amountCollected: Scalars['Float'] + amountCredited: Scalars['Float'] + amountRequested: Scalars['Float'] + changeMessages?: Maybe<Array<Maybe<ChangeMessageInput>>> + auditInfo?: Maybe<CrAuditInfoInput> + gatewayGiftCard?: Maybe<GatewayGiftCardInput> +} + +export type PaymentInteraction = { + __typename?: 'PaymentInteraction' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PaymentInteraction> + id?: Maybe<Scalars['String']> + gatewayInteractionId?: Maybe<Scalars['Int']> + paymentId?: Maybe<Scalars['String']> + orderId?: Maybe<Scalars['String']> + target?: Maybe<PaymentActionTarget> + currencyCode?: Maybe<Scalars['String']> + interactionType?: Maybe<Scalars['String']> + checkNumber?: Maybe<Scalars['String']> + status?: Maybe<Scalars['String']> + paymentEntryStatus?: Maybe<Scalars['String']> + isRecurring?: Maybe<Scalars['Boolean']> + isManual?: Maybe<Scalars['Boolean']> + gatewayTransactionId?: Maybe<Scalars['String']> + gatewayAuthCode?: Maybe<Scalars['String']> + gatewayAVSCodes?: Maybe<Scalars['String']> + gatewayCVV2Codes?: Maybe<Scalars['String']> + gatewayResponseCode?: Maybe<Scalars['String']> + gatewayResponseText?: Maybe<Scalars['String']> + gatewayResponseData?: Maybe<Array<Maybe<PaymentGatewayResponseData>>> + paymentTransactionInteractionIdReference?: Maybe<Scalars['Int']> + amount?: Maybe<Scalars['Float']> + note?: Maybe<Scalars['String']> + interactionDate?: Maybe<Scalars['DateTime']> + auditInfo?: Maybe<CrAuditInfo> + returnId?: Maybe<Scalars['String']> + refundId?: Maybe<Scalars['String']> + capturableShipmentsSummary?: Maybe<Array<Maybe<CapturableShipmentSummary>>> +} + +export type PaymentInteraction_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PaymentInteractionInput = { + id?: Maybe<Scalars['String']> + gatewayInteractionId?: Maybe<Scalars['Int']> + paymentId?: Maybe<Scalars['String']> + orderId?: Maybe<Scalars['String']> + target?: Maybe<PaymentActionTargetInput> + currencyCode?: Maybe<Scalars['String']> + interactionType?: Maybe<Scalars['String']> + checkNumber?: Maybe<Scalars['String']> + status?: Maybe<Scalars['String']> + paymentEntryStatus?: Maybe<Scalars['String']> + isRecurring?: Maybe<Scalars['Boolean']> + isManual?: Maybe<Scalars['Boolean']> + gatewayTransactionId?: Maybe<Scalars['String']> + gatewayAuthCode?: Maybe<Scalars['String']> + gatewayAVSCodes?: Maybe<Scalars['String']> + gatewayCVV2Codes?: Maybe<Scalars['String']> + gatewayResponseCode?: Maybe<Scalars['String']> + gatewayResponseText?: Maybe<Scalars['String']> + gatewayResponseData?: Maybe<Array<Maybe<PaymentGatewayResponseDataInput>>> + paymentTransactionInteractionIdReference?: Maybe<Scalars['Int']> + amount?: Maybe<Scalars['Float']> + note?: Maybe<Scalars['String']> + interactionDate?: Maybe<Scalars['DateTime']> + auditInfo?: Maybe<CrAuditInfoInput> + returnId?: Maybe<Scalars['String']> + refundId?: Maybe<Scalars['String']> + capturableShipmentsSummary?: Maybe< + Array<Maybe<CapturableShipmentSummaryInput>> + > +} + +export type PaymentToken = { + __typename?: 'PaymentToken' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PaymentToken> + paymentServiceTokenId?: Maybe<Scalars['String']> + type?: Maybe<Scalars['String']> +} + +export type PaymentToken_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PaymentTokenInput = { + paymentServiceTokenId?: Maybe<Scalars['String']> + type?: Maybe<Scalars['String']> +} + +export type Pickup = { + __typename?: 'Pickup' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Pickup> + id?: Maybe<Scalars['String']> + code?: Maybe<Scalars['String']> + status?: Maybe<Scalars['String']> + items?: Maybe<Array<Maybe<PickupItem>>> + fulfillmentDate?: Maybe<Scalars['DateTime']> + fulfillmentLocationCode?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfo> + availableActions?: Maybe<Array<Scalars['String']>> + changeMessages?: Maybe<Array<Maybe<ChangeMessage>>> +} + +export type Pickup_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PickupInput = { + id?: Maybe<Scalars['String']> + code?: Maybe<Scalars['String']> + status?: Maybe<Scalars['String']> + items?: Maybe<Array<Maybe<PickupItemInput>>> + fulfillmentDate?: Maybe<Scalars['DateTime']> + fulfillmentLocationCode?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfoInput> + availableActions?: Maybe<Array<Scalars['String']>> + changeMessages?: Maybe<Array<Maybe<ChangeMessageInput>>> +} + +export type PickupItem = { + __typename?: 'PickupItem' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PickupItem> + productCode?: Maybe<Scalars['String']> + quantity: Scalars['Int'] + fulfillmentItemType?: Maybe<Scalars['String']> + lineId?: Maybe<Scalars['Int']> + optionAttributeFQN?: Maybe<Scalars['String']> +} + +export type PickupItem_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PickupItemInput = { + productCode?: Maybe<Scalars['String']> + quantity: Scalars['Int'] + fulfillmentItemType?: Maybe<Scalars['String']> + lineId?: Maybe<Scalars['Int']> + optionAttributeFQN?: Maybe<Scalars['String']> +} + +export type PrAppliedDiscount = { + __typename?: 'PrAppliedDiscount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PrAppliedDiscount> + couponCode?: Maybe<Scalars['String']> + discount?: Maybe<PrDiscount> + discounts?: Maybe<Array<Maybe<PrDiscount>>> + impact: Scalars['Float'] +} + +export type PrAppliedDiscount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PrAttributeValidation = { + __typename?: 'PrAttributeValidation' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PrAttributeValidation> + regularExpression?: Maybe<Scalars['String']> + minStringLength?: Maybe<Scalars['Int']> + maxStringLength?: Maybe<Scalars['Int']> + minNumericValue?: Maybe<Scalars['Float']> + maxNumericValue?: Maybe<Scalars['Float']> + minDateValue?: Maybe<Scalars['DateTime']> + maxDateValue?: Maybe<Scalars['DateTime']> +} + +export type PrAttributeValidation_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PrBundledProduct = { + __typename?: 'PrBundledProduct' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PrBundledProduct> + content?: Maybe<ProductContent> + productCode?: Maybe<Scalars['String']> + goodsType?: Maybe<Scalars['String']> + quantity: Scalars['Int'] + measurements?: Maybe<PrPackageMeasurements> + isPackagedStandAlone?: Maybe<Scalars['Boolean']> + inventoryInfo?: Maybe<ProductInventoryInfo> + optionAttributeFQN?: Maybe<Scalars['String']> + optionValue?: Maybe<Scalars['Object']> + creditValue?: Maybe<Scalars['Float']> + productType?: Maybe<Scalars['String']> +} + +export type PrBundledProduct_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PrCategory = { + __typename?: 'PrCategory' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PrCategory> + categoryId: Scalars['Int'] + parentCategory?: Maybe<PrCategory> + content?: Maybe<CategoryContent> + childrenCategories?: Maybe<Array<Maybe<PrCategory>>> + sequence?: Maybe<Scalars['Int']> + isDisplayed?: Maybe<Scalars['Boolean']> + categoryCode?: Maybe<Scalars['String']> + count?: Maybe<Scalars['Int']> + updateDate: Scalars['DateTime'] + shouldSlice?: Maybe<Scalars['Boolean']> +} + +export type PrCategory_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PrDiscount = { + __typename?: 'PrDiscount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PrDiscount> + discountId: Scalars['Int'] + expirationDate?: Maybe<Scalars['DateTime']> + name?: Maybe<Scalars['String']> + friendlyDescription?: Maybe<Scalars['String']> + impact: Scalars['Float'] +} + +export type PrDiscount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PrMeasurement = { + __typename?: 'PrMeasurement' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PrMeasurement> + unit?: Maybe<Scalars['String']> + value?: Maybe<Scalars['Float']> +} + +export type PrMeasurement_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PrPackageMeasurements = { + __typename?: 'PrPackageMeasurements' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PrPackageMeasurements> + packageHeight?: Maybe<PrMeasurement> + packageWidth?: Maybe<PrMeasurement> + packageLength?: Maybe<PrMeasurement> + packageWeight?: Maybe<PrMeasurement> +} + +export type PrPackageMeasurements_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PriceList = { + __typename?: 'PriceList' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PriceList> + priceListCode?: Maybe<Scalars['String']> + priceListId: Scalars['Int'] + enabled?: Maybe<Scalars['Boolean']> + name?: Maybe<Scalars['String']> + resolvable?: Maybe<Scalars['Boolean']> + isIndexed?: Maybe<Scalars['Boolean']> + filteredInStoreFront?: Maybe<Scalars['Boolean']> + isSiteDefault?: Maybe<Scalars['Boolean']> + description?: Maybe<Scalars['String']> + ancestors?: Maybe<Array<Maybe<PriceListNode>>> + descendants?: Maybe<Array<Maybe<PriceListNode>>> + validSites?: Maybe<Array<Scalars['Int']>> +} + +export type PriceList_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PriceListNode = { + __typename?: 'PriceListNode' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PriceListNode> + priceListCode?: Maybe<Scalars['String']> + priceListId: Scalars['Int'] + parentPriceListId?: Maybe<Scalars['Int']> + priceListLevel: Scalars['Int'] +} + +export type PriceListNode_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PricingAppliedDiscount = { + __typename?: 'PricingAppliedDiscount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PricingAppliedDiscount> + impact: Scalars['Float'] + discount?: Maybe<PricingDiscount> + couponCode?: Maybe<Scalars['String']> + couponSetId?: Maybe<Scalars['Int']> +} + +export type PricingAppliedDiscount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PricingAppliedLineItemProductDiscount = { + __typename?: 'PricingAppliedLineItemProductDiscount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PricingAppliedLineItemProductDiscount> + appliesToSalePrice?: Maybe<Scalars['Boolean']> + quantity: Scalars['Int'] + impactPerUnit: Scalars['Float'] + isForced?: Maybe<Scalars['Boolean']> + normalizedImpact: Scalars['Float'] + impact: Scalars['Float'] + discount?: Maybe<PricingDiscount> + couponCode?: Maybe<Scalars['String']> + couponSetId?: Maybe<Scalars['Int']> +} + +export type PricingAppliedLineItemProductDiscount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PricingAppliedLineItemShippingDiscount = { + __typename?: 'PricingAppliedLineItemShippingDiscount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PricingAppliedLineItemShippingDiscount> + shippingMethodCode?: Maybe<Scalars['String']> + quantity: Scalars['Int'] + impactPerUnit: Scalars['Float'] + isForced?: Maybe<Scalars['Boolean']> + normalizedImpact: Scalars['Float'] + impact: Scalars['Float'] + discount?: Maybe<PricingDiscount> + couponCode?: Maybe<Scalars['String']> + couponSetId?: Maybe<Scalars['Int']> +} + +export type PricingAppliedLineItemShippingDiscount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PricingAppliedOrderShippingDiscount = { + __typename?: 'PricingAppliedOrderShippingDiscount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PricingAppliedOrderShippingDiscount> + shippingMethodCode?: Maybe<Scalars['String']> + impact: Scalars['Float'] + discount?: Maybe<PricingDiscount> + couponCode?: Maybe<Scalars['String']> + couponSetId?: Maybe<Scalars['Int']> +} + +export type PricingAppliedOrderShippingDiscount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PricingDiscount = { + __typename?: 'PricingDiscount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PricingDiscount> + discountId: Scalars['Int'] + name?: Maybe<Scalars['String']> + friendlyDescription?: Maybe<Scalars['String']> + amount: Scalars['Float'] + scope?: Maybe<Scalars['String']> + maxRedemptions?: Maybe<Scalars['Int']> + maximumUsesPerUser?: Maybe<Scalars['Int']> + requiresAuthenticatedUser?: Maybe<Scalars['Boolean']> + doesNotApplyToProductsWithSalePrice?: Maybe<Scalars['Boolean']> + maximumRedemptionsPerOrder?: Maybe<Scalars['Int']> + maximumDiscountValuePerOrder?: Maybe<Scalars['Float']> + maxDiscountValuePerRedemption?: Maybe<Scalars['Float']> + doesNotApplyToMultiShipToOrders?: Maybe<Scalars['Boolean']> + includedPriceLists?: Maybe<Array<Scalars['String']>> + redemptions: Scalars['Int'] + type?: Maybe<Scalars['String']> + amountType?: Maybe<Scalars['String']> + target?: Maybe<PricingDiscountTarget> + condition?: Maybe<PricingDiscountCondition> + expirationDate?: Maybe<Scalars['DateTime']> + stackingLayer: Scalars['Int'] +} + +export type PricingDiscount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PricingDiscountCondition = { + __typename?: 'PricingDiscountCondition' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PricingDiscountCondition> + requiresCoupon?: Maybe<Scalars['Boolean']> + couponCode?: Maybe<Scalars['String']> + minimumQuantityProductsRequiredInCategories?: Maybe<Scalars['Int']> + includedCategoryIds?: Maybe<Array<Scalars['Int']>> + excludedCategoryIds?: Maybe<Array<Scalars['Int']>> + minimumQuantityRequiredProducts?: Maybe<Scalars['Int']> + includedProductCodes?: Maybe<Array<Scalars['String']>> + excludedProductCodes?: Maybe<Array<Scalars['String']>> + paymentWorkflows?: Maybe<Array<Scalars['String']>> + customerSegmentIds?: Maybe<Array<Scalars['Int']>> + minimumOrderAmount?: Maybe<Scalars['Float']> + maximumOrderAmount?: Maybe<Scalars['Float']> + minimumLifetimeValueAmount?: Maybe<Scalars['Float']> + startDate?: Maybe<Scalars['DateTime']> + expirationDate?: Maybe<Scalars['DateTime']> + minimumCategorySubtotalBeforeDiscounts?: Maybe<Scalars['Float']> +} + +export type PricingDiscountCondition_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PricingDiscountTarget = { + __typename?: 'PricingDiscountTarget' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PricingDiscountTarget> + type?: Maybe<Scalars['String']> + includedCategoryIds?: Maybe<Array<Scalars['Int']>> + excludedCategoryIds?: Maybe<Array<Scalars['Int']>> + includedCategoriesOperator?: Maybe<Scalars['String']> + excludedCategoriesOperator?: Maybe<Scalars['String']> + includedProductCodes?: Maybe<Array<Scalars['String']>> + excludedProductCodes?: Maybe<Array<Scalars['String']>> + includeAllProducts?: Maybe<Scalars['Boolean']> + shippingMethods?: Maybe<Array<Scalars['String']>> + shippingZones?: Maybe<Array<Scalars['String']>> +} + +export type PricingDiscountTarget_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PricingProductAttribute = { + __typename?: 'PricingProductAttribute' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PricingProductAttribute> + inputType?: Maybe<Scalars['String']> + valueType?: Maybe<Scalars['String']> + dataType?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> +} + +export type PricingProductAttribute_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PricingProductProperty = { + __typename?: 'PricingProductProperty' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PricingProductProperty> + attributeFQN?: Maybe<Scalars['String']> + values?: Maybe<Array<Maybe<PricingProductPropertyValue>>> + attributeDetail?: Maybe<PricingProductAttribute> + isHidden?: Maybe<Scalars['Boolean']> + isMultiValue?: Maybe<Scalars['Boolean']> +} + +export type PricingProductProperty_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PricingProductPropertyValue = { + __typename?: 'PricingProductPropertyValue' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PricingProductPropertyValue> + value?: Maybe<Scalars['Object']> + stringValue?: Maybe<Scalars['String']> +} + +export type PricingProductPropertyValue_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PricingTaxAttribute = { + __typename?: 'PricingTaxAttribute' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PricingTaxAttribute> + fullyQualifiedName?: Maybe<Scalars['String']> + attributeDefinitionId?: Maybe<Scalars['Int']> + values?: Maybe<Array<Scalars['Object']>> +} + +export type PricingTaxAttribute_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PricingTaxContext = { + __typename?: 'PricingTaxContext' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PricingTaxContext> + taxContextId?: Maybe<Scalars['String']> + customerId?: Maybe<Scalars['String']> + taxExemptId?: Maybe<Scalars['String']> + originAddress?: Maybe<CrAddress> + destinationAddress?: Maybe<CrAddress> +} + +export type PricingTaxContext_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PricingTaxableLineItem = { + __typename?: 'PricingTaxableLineItem' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PricingTaxableLineItem> + id?: Maybe<Scalars['String']> + productCode?: Maybe<Scalars['String']> + variantProductCode?: Maybe<Scalars['String']> + productName?: Maybe<Scalars['String']> + productProperties?: Maybe<Array<Maybe<PricingProductProperty>>> + quantity: Scalars['Int'] + lineItemPrice: Scalars['Float'] + discountTotal?: Maybe<Scalars['Float']> + discountedTotal?: Maybe<Scalars['Float']> + shippingAmount: Scalars['Float'] + handlingAmount?: Maybe<Scalars['Float']> + feeTotal?: Maybe<Scalars['Float']> + isTaxable?: Maybe<Scalars['Boolean']> + reason?: Maybe<Scalars['String']> + data?: Maybe<Scalars['Object']> + productDiscount?: Maybe<PricingAppliedLineItemProductDiscount> + shippingDiscount?: Maybe<PricingAppliedLineItemShippingDiscount> + productDiscounts?: Maybe<Array<Maybe<PricingAppliedLineItemProductDiscount>>> + shippingDiscounts?: Maybe< + Array<Maybe<PricingAppliedLineItemShippingDiscount>> + > + originAddress?: Maybe<CrAddress> + destinationAddress?: Maybe<CrAddress> +} + +export type PricingTaxableLineItem_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PricingTaxableOrder = { + __typename?: 'PricingTaxableOrder' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PricingTaxableOrder> + orderDate: Scalars['DateTime'] + taxContext?: Maybe<PricingTaxContext> + lineItems?: Maybe<Array<Maybe<PricingTaxableLineItem>>> + shippingAmount: Scalars['Float'] + currencyCode?: Maybe<Scalars['String']> + handlingFee: Scalars['Float'] + originalDocumentCode?: Maybe<Scalars['String']> + orderId?: Maybe<Scalars['String']> + orderNumber?: Maybe<Scalars['Int']> + originalOrderDate: Scalars['DateTime'] + data?: Maybe<Scalars['Object']> + attributes?: Maybe<Array<Maybe<PricingTaxAttribute>>> + shippingDiscounts?: Maybe<Array<Maybe<PricingAppliedOrderShippingDiscount>>> + shippingDiscount?: Maybe<PricingAppliedOrderShippingDiscount> + orderDiscounts?: Maybe<Array<Maybe<PricingAppliedDiscount>>> + orderDiscount?: Maybe<PricingAppliedDiscount> + handlingDiscounts?: Maybe<Array<Maybe<PricingAppliedDiscount>>> + handlingDiscount?: Maybe<PricingAppliedDiscount> + shippingMethodCode?: Maybe<Scalars['String']> + shippingMethodName?: Maybe<Scalars['String']> + taxRequestType?: Maybe<Scalars['String']> +} + +export type PricingTaxableOrder_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type Product = { + __typename?: 'Product' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Product> + productCode?: Maybe<Scalars['String']> + purchaseLocation?: Maybe<Scalars['String']> + productSequence?: Maybe<Scalars['Int']> + productUsage?: Maybe<Scalars['String']> + fulfillmentTypesSupported?: Maybe<Array<Scalars['String']>> + goodsType?: Maybe<Scalars['String']> + bundledProducts?: Maybe<Array<Maybe<PrBundledProduct>>> + content?: Maybe<ProductContent> + purchasableState?: Maybe<ProductPurchasableState> + isActive?: Maybe<Scalars['Boolean']> + publishState?: Maybe<Scalars['String']> + price?: Maybe<ProductPrice> + priceRange?: Maybe<ProductPriceRange> + volumePriceBands?: Maybe<Array<Maybe<ProductVolumePrice>>> + volumePriceRange?: Maybe<ProductPriceRange> + availableShippingDiscounts?: Maybe<Array<Maybe<PrDiscount>>> + productType?: Maybe<Scalars['String']> + productTypeId?: Maybe<Scalars['Int']> + isTaxable?: Maybe<Scalars['Boolean']> + isRecurring?: Maybe<Scalars['Boolean']> + pricingBehavior?: Maybe<ProductPricingBehaviorInfo> + inventoryInfo?: Maybe<ProductInventoryInfo> + createDate: Scalars['DateTime'] + updateDate: Scalars['DateTime'] + dateFirstAvailableInCatalog?: Maybe<Scalars['DateTime']> + catalogStartDate?: Maybe<Scalars['DateTime']> + catalogEndDate?: Maybe<Scalars['DateTime']> + daysAvailableInCatalog?: Maybe<Scalars['Int']> + upc?: Maybe<Scalars['String']> + upCs?: Maybe<Array<Scalars['String']>> + mfgPartNumber?: Maybe<Scalars['String']> + mfgPartNumbers?: Maybe<Array<Scalars['String']>> + variationProductCode?: Maybe<Scalars['String']> + categories?: Maybe<Array<Maybe<PrCategory>>> + measurements?: Maybe<PrPackageMeasurements> + isPackagedStandAlone?: Maybe<Scalars['Boolean']> + properties?: Maybe<Array<Maybe<ProductProperty>>> + options?: Maybe<Array<Maybe<ProductOption>>> + variations?: Maybe<Array<Maybe<VariationSummary>>> + validPriceLists?: Maybe<Array<Scalars['String']>> + locationsInStock?: Maybe<Array<Scalars['String']>> + slicingAttributeFQN?: Maybe<Scalars['String']> + productImageGroups?: Maybe<Array<Maybe<ProductImageGroup>>> + sliceValue?: Maybe<Scalars['String']> + productCollections?: Maybe<Array<Maybe<ProductCollectionInfo>>> + productCollectionMembers?: Maybe<Array<Maybe<ProductCollectionMember>>> + collectionMembersProductContent?: Maybe<Array<Maybe<ProductContent>>> + score: Scalars['Float'] + personalizationScore: Scalars['Float'] +} + +export type Product_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductPropertiesArgs = { + filterAttribute?: Maybe<Scalars['String']> + filterOperator?: Maybe<Scalars['String']> + filterValue?: Maybe<Scalars['Object']> +} + +export type ProductCollection = { + __typename?: 'ProductCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductCollection> + nextCursorMark?: Maybe<Scalars['String']> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<Product>>> +} + +export type ProductCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductCollectionInfo = { + __typename?: 'ProductCollectionInfo' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductCollectionInfo> + productCode?: Maybe<Scalars['String']> + isPrimary?: Maybe<Scalars['Boolean']> +} + +export type ProductCollectionInfo_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductCollectionMember = { + __typename?: 'ProductCollectionMember' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductCollectionMember> + memberKey?: Maybe<ProductCollectionMemberKey> +} + +export type ProductCollectionMember_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductCollectionMemberKey = { + __typename?: 'ProductCollectionMemberKey' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductCollectionMemberKey> + value?: Maybe<Scalars['String']> +} + +export type ProductCollectionMemberKey_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductContent = { + __typename?: 'ProductContent' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductContent> + productName?: Maybe<Scalars['String']> + productFullDescription?: Maybe<Scalars['String']> + productShortDescription?: Maybe<Scalars['String']> + metaTagTitle?: Maybe<Scalars['String']> + metaTagDescription?: Maybe<Scalars['String']> + metaTagKeywords?: Maybe<Scalars['String']> + seoFriendlyUrl?: Maybe<Scalars['String']> + productImages?: Maybe<Array<Maybe<ProductImage>>> +} + +export type ProductContent_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductCost = { + __typename?: 'ProductCost' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductCost> + productCode?: Maybe<Scalars['String']> + cost: Scalars['Float'] +} + +export type ProductCost_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductCostCollection = { + __typename?: 'ProductCostCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductCostCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<ProductCost>>> +} + +export type ProductCostCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductCostQueryInput = { + productCodes?: Maybe<Array<Scalars['String']>> +} + +export type ProductForIndexing = { + __typename?: 'ProductForIndexing' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductForIndexing> + slices?: Maybe<Array<Maybe<Product>>> + productCode?: Maybe<Scalars['String']> + purchaseLocation?: Maybe<Scalars['String']> + productSequence?: Maybe<Scalars['Int']> + productUsage?: Maybe<Scalars['String']> + fulfillmentTypesSupported?: Maybe<Array<Scalars['String']>> + goodsType?: Maybe<Scalars['String']> + bundledProducts?: Maybe<Array<Maybe<PrBundledProduct>>> + content?: Maybe<ProductContent> + purchasableState?: Maybe<ProductPurchasableState> + isActive?: Maybe<Scalars['Boolean']> + publishState?: Maybe<Scalars['String']> + price?: Maybe<ProductPrice> + priceRange?: Maybe<ProductPriceRange> + volumePriceBands?: Maybe<Array<Maybe<ProductVolumePrice>>> + volumePriceRange?: Maybe<ProductPriceRange> + availableShippingDiscounts?: Maybe<Array<Maybe<PrDiscount>>> + productType?: Maybe<Scalars['String']> + productTypeId?: Maybe<Scalars['Int']> + isTaxable?: Maybe<Scalars['Boolean']> + isRecurring?: Maybe<Scalars['Boolean']> + pricingBehavior?: Maybe<ProductPricingBehaviorInfo> + inventoryInfo?: Maybe<ProductInventoryInfo> + createDate: Scalars['DateTime'] + updateDate: Scalars['DateTime'] + dateFirstAvailableInCatalog?: Maybe<Scalars['DateTime']> + catalogStartDate?: Maybe<Scalars['DateTime']> + catalogEndDate?: Maybe<Scalars['DateTime']> + daysAvailableInCatalog?: Maybe<Scalars['Int']> + upc?: Maybe<Scalars['String']> + upCs?: Maybe<Array<Scalars['String']>> + mfgPartNumber?: Maybe<Scalars['String']> + mfgPartNumbers?: Maybe<Array<Scalars['String']>> + variationProductCode?: Maybe<Scalars['String']> + categories?: Maybe<Array<Maybe<PrCategory>>> + measurements?: Maybe<PrPackageMeasurements> + isPackagedStandAlone?: Maybe<Scalars['Boolean']> + properties?: Maybe<Array<Maybe<ProductProperty>>> + options?: Maybe<Array<Maybe<ProductOption>>> + variations?: Maybe<Array<Maybe<VariationSummary>>> + validPriceLists?: Maybe<Array<Scalars['String']>> + locationsInStock?: Maybe<Array<Scalars['String']>> + slicingAttributeFQN?: Maybe<Scalars['String']> + productImageGroups?: Maybe<Array<Maybe<ProductImageGroup>>> + sliceValue?: Maybe<Scalars['String']> + productCollections?: Maybe<Array<Maybe<ProductCollectionInfo>>> + productCollectionMembers?: Maybe<Array<Maybe<ProductCollectionMember>>> + collectionMembersProductContent?: Maybe<Array<Maybe<ProductContent>>> + score: Scalars['Float'] + personalizationScore: Scalars['Float'] +} + +export type ProductForIndexing_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductImage = { + __typename?: 'ProductImage' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductImage> + imageLabel?: Maybe<Scalars['String']> + altText?: Maybe<Scalars['String']> + imageUrl?: Maybe<Scalars['String']> + cmsId?: Maybe<Scalars['String']> + videoUrl?: Maybe<Scalars['String']> + mediaType?: Maybe<Scalars['String']> + sequence?: Maybe<Scalars['Int']> + productImageGroupId?: Maybe<Scalars['String']> +} + +export type ProductImage_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductImageGroup = { + __typename?: 'ProductImageGroup' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductImageGroup> + productImageGroupId: Scalars['String'] + productImageGroupTags?: Maybe<Array<Maybe<ProductImageGroupTag>>> +} + +export type ProductImageGroup_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductImageGroupTag = { + __typename?: 'ProductImageGroupTag' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductImageGroupTag> + attributeFqn?: Maybe<Scalars['String']> + value?: Maybe<Scalars['String']> +} + +export type ProductImageGroupTag_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductInventoryInfo = { + __typename?: 'ProductInventoryInfo' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductInventoryInfo> + manageStock?: Maybe<Scalars['Boolean']> + outOfStockBehavior?: Maybe<Scalars['String']> + onlineStockAvailable?: Maybe<Scalars['Int']> + onlineSoftStockAvailable?: Maybe<Scalars['Int']> + onlineLocationCode?: Maybe<Scalars['String']> + availableDate?: Maybe<Scalars['DateTime']> +} + +export type ProductInventoryInfo_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductOption = { + __typename?: 'ProductOption' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductOption> + attributeFQN?: Maybe<Scalars['String']> + isRequired?: Maybe<Scalars['Boolean']> + isMultiValue?: Maybe<Scalars['Boolean']> + values?: Maybe<Array<Maybe<ProductOptionValue>>> + attributeDetail?: Maybe<AttributeDetail> + isProductImageGroupSelector?: Maybe<Scalars['Boolean']> +} + +export type ProductOption_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductOptionSelectionInput = { + attributeFQN?: Maybe<Scalars['String']> + value?: Maybe<Scalars['Object']> + attributeValueId?: Maybe<Scalars['Int']> + shopperEnteredValue?: Maybe<Scalars['Object']> +} + +export type ProductOptionSelectionsInput = { + variationProductCode?: Maybe<Scalars['String']> + options?: Maybe<Array<Maybe<ProductOptionSelectionInput>>> +} + +export type ProductOptionValue = { + __typename?: 'ProductOptionValue' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductOptionValue> + value?: Maybe<Scalars['Object']> + attributeValueId: Scalars['Int'] + stringValue?: Maybe<Scalars['String']> + isEnabled?: Maybe<Scalars['Boolean']> + isSelected?: Maybe<Scalars['Boolean']> + isDefault?: Maybe<Scalars['Boolean']> + deltaWeight?: Maybe<Scalars['Float']> + deltaPrice?: Maybe<Scalars['Float']> + shopperEnteredValue?: Maybe<Scalars['Object']> + bundledProduct?: Maybe<PrBundledProduct> + displayInfo?: Maybe<AttributeVocabularyValueDisplayInfo> +} + +export type ProductOptionValue_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductPrice = { + __typename?: 'ProductPrice' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductPrice> + msrp?: Maybe<Scalars['Float']> + price?: Maybe<Scalars['Float']> + priceType?: Maybe<Scalars['String']> + salePrice?: Maybe<Scalars['Float']> + salePriceType?: Maybe<Scalars['String']> + catalogSalePrice?: Maybe<Scalars['Float']> + catalogListPrice?: Maybe<Scalars['Float']> + discount?: Maybe<PrAppliedDiscount> + creditValue?: Maybe<Scalars['Float']> + effectivePricelistCode?: Maybe<Scalars['String']> + priceListEntryCode?: Maybe<Scalars['String']> + priceListEntryMode?: Maybe<Scalars['String']> +} + +export type ProductPrice_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductPriceRange = { + __typename?: 'ProductPriceRange' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductPriceRange> + lower?: Maybe<ProductPrice> + upper?: Maybe<ProductPrice> +} + +export type ProductPriceRange_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductPricingBehaviorInfo = { + __typename?: 'ProductPricingBehaviorInfo' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductPricingBehaviorInfo> + discountsRestricted?: Maybe<Scalars['Boolean']> + discountsRestrictedStartDate?: Maybe<Scalars['DateTime']> + discountsRestrictedEndDate?: Maybe<Scalars['DateTime']> +} + +export type ProductPricingBehaviorInfo_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductProperty = { + __typename?: 'ProductProperty' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductProperty> + attributeFQN?: Maybe<Scalars['String']> + isHidden?: Maybe<Scalars['Boolean']> + isMultiValue?: Maybe<Scalars['Boolean']> + attributeDetail?: Maybe<AttributeDetail> + values?: Maybe<Array<Maybe<ProductPropertyValue>>> + propertyType?: Maybe<Scalars['String']> +} + +export type ProductProperty_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductPropertyValue = { + __typename?: 'ProductPropertyValue' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductPropertyValue> + value?: Maybe<Scalars['Object']> + stringValue?: Maybe<Scalars['String']> + displayInfo?: Maybe<AttributeVocabularyValueDisplayInfo> +} + +export type ProductPropertyValue_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductPurchasableState = { + __typename?: 'ProductPurchasableState' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductPurchasableState> + isPurchasable?: Maybe<Scalars['Boolean']> + messages?: Maybe<Array<Maybe<ValidationMessage>>> +} + +export type ProductPurchasableState_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductSearchRandomAccessCursor = { + __typename?: 'ProductSearchRandomAccessCursor' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductSearchRandomAccessCursor> + cursorMarks?: Maybe<Array<Scalars['String']>> +} + +export type ProductSearchRandomAccessCursor_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductSearchResult = { + __typename?: 'ProductSearchResult' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductSearchResult> + facets?: Maybe<Array<Maybe<Facet>>> + solrDebugInfo?: Maybe<SolrDebugInfo> + searchRedirect?: Maybe<Scalars['String']> + searchEngine?: Maybe<Scalars['String']> + nextCursorMark?: Maybe<Scalars['String']> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<Product>>> +} + +export type ProductSearchResult_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductStock = { + __typename?: 'ProductStock' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductStock> + manageStock?: Maybe<Scalars['Boolean']> + isOnBackOrder?: Maybe<Scalars['Boolean']> + availableDate?: Maybe<Scalars['DateTime']> + stockAvailable?: Maybe<Scalars['Int']> + aggregateInventory?: Maybe<Scalars['Int']> +} + +export type ProductStock_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductStockInput = { + manageStock?: Maybe<Scalars['Boolean']> + isOnBackOrder?: Maybe<Scalars['Boolean']> + availableDate?: Maybe<Scalars['DateTime']> + stockAvailable?: Maybe<Scalars['Int']> + aggregateInventory?: Maybe<Scalars['Int']> +} + +export type ProductValidationSummary = { + __typename?: 'ProductValidationSummary' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductValidationSummary> + productCode?: Maybe<Scalars['String']> + purchaseLocation?: Maybe<Scalars['String']> + productUsage?: Maybe<Scalars['String']> + fulfillmentTypesSupported?: Maybe<Array<Scalars['String']>> + goodsType?: Maybe<Scalars['String']> + bundledProducts?: Maybe<Array<Maybe<BundledProductSummary>>> + upc?: Maybe<Scalars['String']> + mfgPartNumber?: Maybe<Scalars['String']> + variationProductCode?: Maybe<Scalars['String']> + purchasableState?: Maybe<ProductPurchasableState> + price?: Maybe<ProductPrice> + measurements?: Maybe<PrPackageMeasurements> + isPackagedStandAlone?: Maybe<Scalars['Boolean']> + image?: Maybe<ProductImage> + productShortDescription?: Maybe<Scalars['String']> + productName?: Maybe<Scalars['String']> + categories?: Maybe<Array<Maybe<PrCategory>>> + properties?: Maybe<Array<Maybe<ProductProperty>>> + pricingBehavior?: Maybe<ProductPricingBehaviorInfo> + inventoryInfo?: Maybe<ProductInventoryInfo> + isTaxable?: Maybe<Scalars['Boolean']> + productType?: Maybe<Scalars['String']> +} + +export type ProductValidationSummary_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ProductVolumePrice = { + __typename?: 'ProductVolumePrice' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ProductVolumePrice> + isCurrent?: Maybe<Scalars['Boolean']> + minQty: Scalars['Int'] + maxQty?: Maybe<Scalars['Int']> + priceRange?: Maybe<ProductPriceRange> + price?: Maybe<ProductPrice> +} + +export type ProductVolumePrice_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type Property = { + __typename?: 'Property' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Property> + name?: Maybe<Scalars['String']> + isRequired?: Maybe<Scalars['Boolean']> + isMultiValued?: Maybe<Scalars['Boolean']> + propertyType?: Maybe<PropertyType> +} + +export type Property_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PropertyInput = { + name?: Maybe<Scalars['String']> + isRequired?: Maybe<Scalars['Boolean']> + isMultiValued?: Maybe<Scalars['Boolean']> + propertyType?: Maybe<PropertyTypeInput> +} + +export type PropertyType = { + __typename?: 'PropertyType' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PropertyType> + name?: Maybe<Scalars['String']> + namespace?: Maybe<Scalars['String']> + propertyTypeFQN?: Maybe<Scalars['String']> + adminName?: Maybe<Scalars['String']> + installationPackage?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + dataType?: Maybe<Scalars['String']> + isQueryable?: Maybe<Scalars['Boolean']> + isSortable?: Maybe<Scalars['Boolean']> + isAggregatable?: Maybe<Scalars['Boolean']> +} + +export type PropertyType_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PropertyTypeCollection = { + __typename?: 'PropertyTypeCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PropertyTypeCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<PropertyType>>> +} + +export type PropertyTypeCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PropertyTypeInput = { + name?: Maybe<Scalars['String']> + namespace?: Maybe<Scalars['String']> + propertyTypeFQN?: Maybe<Scalars['String']> + adminName?: Maybe<Scalars['String']> + installationPackage?: Maybe<Scalars['String']> + version?: Maybe<Scalars['String']> + dataType?: Maybe<Scalars['String']> + isQueryable?: Maybe<Scalars['Boolean']> + isSortable?: Maybe<Scalars['Boolean']> + isAggregatable?: Maybe<Scalars['Boolean']> +} + +export type PurchaseOrderCustomField = { + __typename?: 'PurchaseOrderCustomField' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PurchaseOrderCustomField> + code?: Maybe<Scalars['String']> + label?: Maybe<Scalars['String']> + value?: Maybe<Scalars['String']> +} + +export type PurchaseOrderCustomField_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PurchaseOrderCustomFieldInput = { + code?: Maybe<Scalars['String']> + label?: Maybe<Scalars['String']> + value?: Maybe<Scalars['String']> +} + +export type PurchaseOrderPayment = { + __typename?: 'PurchaseOrderPayment' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PurchaseOrderPayment> + purchaseOrderNumber?: Maybe<Scalars['String']> + paymentTerm?: Maybe<PurchaseOrderPaymentTerm> + customFields?: Maybe<Array<Maybe<PurchaseOrderCustomField>>> +} + +export type PurchaseOrderPayment_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PurchaseOrderPaymentInput = { + purchaseOrderNumber?: Maybe<Scalars['String']> + paymentTerm?: Maybe<PurchaseOrderPaymentTermInput> + customFields?: Maybe<Array<Maybe<PurchaseOrderCustomFieldInput>>> +} + +export type PurchaseOrderPaymentTerm = { + __typename?: 'PurchaseOrderPaymentTerm' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PurchaseOrderPaymentTerm> + code?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> +} + +export type PurchaseOrderPaymentTerm_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PurchaseOrderPaymentTermInput = { + code?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> +} + +export type PurchaseOrderTransaction = { + __typename?: 'PurchaseOrderTransaction' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PurchaseOrderTransaction> + customerPurchaseOrderAccountId: Scalars['Int'] + externalId?: Maybe<Scalars['String']> + siteId: Scalars['Int'] + tenantId: Scalars['Int'] + transactionDate: Scalars['DateTime'] + orderId?: Maybe<Scalars['String']> + purchaseOrderNumber?: Maybe<Scalars['String']> + transactionAmount: Scalars['Float'] + creditLimit: Scalars['Float'] + additionalTransactionDetail?: Maybe<Scalars['String']> + availableBalance: Scalars['Float'] + transactionTypeId: Scalars['Int'] + transactionDescription?: Maybe<Scalars['String']> + author?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfo> +} + +export type PurchaseOrderTransaction_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PurchaseOrderTransactionCollection = { + __typename?: 'PurchaseOrderTransactionCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<PurchaseOrderTransactionCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<PurchaseOrderTransaction>>> +} + +export type PurchaseOrderTransactionCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type PurchaseOrderTransactionInput = { + customerPurchaseOrderAccountId: Scalars['Int'] + externalId?: Maybe<Scalars['String']> + siteId: Scalars['Int'] + tenantId: Scalars['Int'] + transactionDate: Scalars['DateTime'] + orderId?: Maybe<Scalars['String']> + purchaseOrderNumber?: Maybe<Scalars['String']> + transactionAmount: Scalars['Float'] + creditLimit: Scalars['Float'] + additionalTransactionDetail?: Maybe<Scalars['String']> + availableBalance: Scalars['Float'] + transactionTypeId: Scalars['Int'] + transactionDescription?: Maybe<Scalars['String']> + author?: Maybe<Scalars['String']> + auditInfo?: Maybe<CuAuditInfoInput> +} + +export type Query = { + __typename?: 'Query' + customerAccountAttributeDefinitions?: Maybe<CuAttributeCollection> + customerAccountAttributeVocabularyValues?: Maybe< + Array<Maybe<CuAttributeVocabularyValue>> + > + customerAccountAttributeDefinition?: Maybe<CuAttribute> + b2bAccountAttributes?: Maybe<CustomerAttributeCollection> + b2bAccountAttributeVocabularyValues?: Maybe<CustomerAttribute> + b2bAccounts?: Maybe<B2BAccountCollection> + b2bAccount?: Maybe<B2BAccount> + b2bAccountUsers?: Maybe<B2BUserCollection> + b2bAccountUserRoles?: Maybe<UserRoleCollection> + customerCreditAuditTrail?: Maybe<CreditAuditEntryCollection> + customerCredits?: Maybe<CreditCollection> + customerCredit?: Maybe<Credit> + customerCreditTransactions?: Maybe<CreditTransactionCollection> + customerAccountAttributes?: Maybe<CustomerAttributeCollection> + customerAccountAttribute?: Maybe<CustomerAttribute> + customerAccountCards?: Maybe<CardCollection> + customerAccountCard?: Maybe<Card> + customerAccountContacts?: Maybe<CustomerContactCollection> + customerAccountContact?: Maybe<CustomerContact> + customerAccounts?: Maybe<CustomerAccountCollection> + customerAccount?: Maybe<CustomerAccount> + getCurrentAccount?: Maybe<CustomerAccount> + customerAccountTransactions?: Maybe<Array<Maybe<Transaction>>> + customerAccountNotes?: Maybe<CustomerNoteCollection> + customerAccountNote?: Maybe<CustomerNote> + customerAccountSegments?: Maybe<CustomerSegmentCollection> + customerAccountAuditLog?: Maybe<CustomerAuditEntryCollection> + customerPurchaseOrderAccount?: Maybe<CustomerPurchaseOrderAccount> + customerPurchaseOrderAccountTransaction?: Maybe<PurchaseOrderTransactionCollection> + customerAccountLoginState?: Maybe<LoginState> + customerSegments?: Maybe<CustomerSegmentCollection> + customerSegment?: Maybe<CustomerSegment> + customerSets?: Maybe<CustomerSetCollection> + customerSet?: Maybe<CustomerSet> + inStockNotifications?: Maybe<InStockNotificationSubscriptionCollection> + inStockNotification?: Maybe<InStockNotificationSubscription> + authTicket?: Maybe<CustomerAuthTicket> + exchangeRates?: Maybe<Array<Maybe<CurrencyExchangeRate>>> + resolvedPriceList?: Maybe<ResolvedPriceList> + categoriesTree?: Maybe<CategoryCollection> + categories?: Maybe<CategoryPagedCollection> + category?: Maybe<PrCategory> + products?: Maybe<ProductCollection> + product?: Maybe<Product> + productVersion?: Maybe<ProductForIndexing> + productLocationInventory?: Maybe<LocationInventoryCollection> + suggestionSearch?: Maybe<SearchSuggestionResult> + productSearchRandomAccessCursor?: Maybe<ProductSearchRandomAccessCursor> + productSearch?: Maybe<ProductSearchResult> + priceList?: Maybe<PriceList> + cartsSummary?: Maybe<CartSummary> + userCartSummary?: Maybe<CartSummary> + cartSummary?: Maybe<CartSummary> + userCart?: Maybe<Cart> + currentCart?: Maybe<Cart> + cart?: Maybe<Cart> + currentCartExtendedProperties?: Maybe<Array<Maybe<ExtendedProperty>>> + currentCartItems?: Maybe<CartItemCollection> + cartItems?: Maybe<CartItemCollection> + currentCartItem?: Maybe<CartItem> + cartItem?: Maybe<CartItem> + currentCartMessages?: Maybe<CartChangeMessageCollection> + channels?: Maybe<ChannelCollection> + channel?: Maybe<Channel> + channelGroups?: Maybe<ChannelGroupCollection> + channelGroup?: Maybe<ChannelGroup> + checkoutAttributes?: Maybe<Array<Maybe<OrderAttribute>>> + checkout?: Maybe<Checkout> + checkouts?: Maybe<CheckoutCollection> + checkoutShippingMethods?: Maybe<Array<Maybe<CheckoutGroupRates>>> + checkoutActions?: Maybe<Array<Maybe<Scalars['String']>>> + checkoutDestination?: Maybe<Destination> + checkoutDestinations?: Maybe<Array<Maybe<Destination>>> + orderPackageActions?: Maybe<Array<Maybe<Scalars['String']>>> + orderPaymentActions?: Maybe<Array<Maybe<Scalars['String']>>> + orderPayment?: Maybe<Payment> + orderPayments?: Maybe<PaymentCollection> + orderPickup?: Maybe<Pickup> + orderPickupActions?: Maybe<Array<Maybe<Scalars['String']>>> + orderReturnableItems?: Maybe<OrderReturnableItemCollection> + orderShipment?: Maybe<Shipment> + orderShipmentMethods?: Maybe<Array<Maybe<ShippingRate>>> + orderValidationResults?: Maybe<Array<Maybe<OrderValidationResult>>> + orderAttributes?: Maybe<Array<Maybe<OrderAttribute>>> + orderBillingInfo?: Maybe<BillingInfo> + orderCancelReasons?: Maybe<CancelReasonCollection> + orders?: Maybe<OrderCollection> + order?: Maybe<Order> + orderActions?: Maybe<Array<Maybe<Scalars['String']>>> + orderTaxableOrders?: Maybe<Array<Maybe<PricingTaxableOrder>>> + orderDigitalPackage?: Maybe<DigitalPackage> + orderDigitalPackageActions?: Maybe<Array<Maybe<Scalars['String']>>> + orderExtendedProperties?: Maybe<Array<Maybe<ExtendedProperty>>> + orderFulfillmentInfo?: Maybe<FulfillmentInfo> + orderItems?: Maybe<OrderItemCollection> + orderNotes?: Maybe<Array<Maybe<OrderNote>>> + orderNote?: Maybe<OrderNote> + orderPackage?: Maybe<PackageObj> + orderPackageLabel?: Maybe<Scalars['Boolean']> + quote?: Maybe<Quote> + quotes?: Maybe<QuoteCollection> + customerAccountQuote?: Maybe<Quote> + quoteItems?: Maybe<Array<Maybe<CrOrderItem>>> + customerAccountQuoteItems?: Maybe<Array<Maybe<CrOrderItem>>> + quoteItem?: Maybe<CrOrderItem> + returns?: Maybe<ReturnCollection> + returnReasons?: Maybe<ReasonCollection> + returnReason?: Maybe<ReturnObj> + returnActions?: Maybe<Array<Maybe<Scalars['String']>>> + returnPayments?: Maybe<PaymentCollection> + returnPayment?: Maybe<Payment> + returnPaymentActions?: Maybe<Array<Maybe<Scalars['String']>>> + returnShippingLabel?: Maybe<CarrierServiceGenerateLabelResponse> + returnItems?: Maybe<ReturnItemCollection> + returnItem?: Maybe<ReturnItem> + returnNotes?: Maybe<Array<Maybe<OrderNote>>> + returnNote?: Maybe<OrderNote> + returnPackage?: Maybe<PackageObj> + returnPackageLabel?: Maybe<Scalars['Boolean']> + returnShipment?: Maybe<Shipment> + wishlists?: Maybe<WishlistCollection> + wishlist?: Maybe<Wishlist> + customerWishlist?: Maybe<Wishlist> + wishlistItems?: Maybe<WishlistItemCollection> + customerWishlistItems?: Maybe<WishlistItemCollection> + wishlistItem?: Maybe<WishlistItem> + orderItem?: Maybe<CrOrderItem> + documentListDocumentContent?: Maybe<Scalars['Boolean']> + documentListDocumentTransform?: Maybe<Scalars['Boolean']> + documentListTreeDocumentContent?: Maybe<Scalars['Boolean']> + documentListTreeDocumentTransform?: Maybe<Scalars['Boolean']> + documentListDocuments?: Maybe<DocumentCollection> + documentListDocument?: Maybe<Document> + documentListTreeDocument?: Maybe<Document> + documentLists?: Maybe<DocumentListCollection> + documentList?: Maybe<DocumentList> + documentListViewDocuments?: Maybe<DocumentCollection> + documentListTypes?: Maybe<DocumentListTypeCollection> + documentListType?: Maybe<DocumentListType> + documentDrafts?: Maybe<DocumentDraftSummaryPagedCollection> + documentTypes?: Maybe<DocumentTypeCollection> + documentType?: Maybe<DocumentType> + propertyTypes?: Maybe<PropertyTypeCollection> + propertyType?: Maybe<PropertyType> + adminLocations?: Maybe<LocationCollection> + adminLocation?: Maybe<Location> + adminLocationAttributes?: Maybe<LoAttributeCollection> + adminLocationAttributeVocabularyValues?: Maybe< + Array<Maybe<LoAttributeVocabularyValue>> + > + adminLocationAttribute?: Maybe<LoAttribute> + adminLocationGroups?: Maybe<LocationGroupCollection> + dslLocation?: Maybe<Location> + spLocations?: Maybe<LocationCollection> + spLocation?: Maybe<Location> + usageTypeLocations?: Maybe<LocationCollection> + location?: Maybe<Location> + locationUsages?: Maybe<LocationUsageCollection> + locationUsage?: Maybe<LocationUsage> + adminLocationTypes?: Maybe<Array<Maybe<LocationType>>> + adminLocationType?: Maybe<LocationType> + locationGroupConfig?: Maybe<LocationGroupConfiguration> + locationGroup?: Maybe<LocationGroup> + entityListEntity?: Maybe<Scalars['Boolean']> + entityListEntities?: Maybe<EntityCollection> + entityListEntityContainer?: Maybe<EntityContainer> + entityListEntityContainers?: Maybe<EntityContainerCollection> + entityList?: Maybe<EntityList> + entityLists?: Maybe<EntityListCollection> + entityListViews?: Maybe<ListViewCollection> + entityListView?: Maybe<ListView> + entityListViewEntityContainers?: Maybe<EntityContainerCollection> + entityListViewEntities?: Maybe<EntityCollection> + entityListViewEntityContainer?: Maybe<EntityContainer> + entityListViewEntity?: Maybe<Scalars['Boolean']> + carrierLocaleServiceTypes?: Maybe<Array<Maybe<ServiceType>>> + localeServiceTypes?: Maybe<Array<Maybe<ServiceType>>> + targetRules?: Maybe<TargetRuleCollection> + targetRule?: Maybe<TargetRule> + orderRoutingRoutingSuggestionLog?: Maybe<Array<Maybe<JsonNode>>> +} + +export type QueryCustomerAccountAttributeDefinitionsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryCustomerAccountAttributeVocabularyValuesArgs = { + attributeFQN: Scalars['String'] +} + +export type QueryCustomerAccountAttributeDefinitionArgs = { + attributeFQN: Scalars['String'] +} + +export type QueryB2bAccountAttributesArgs = { + accountId: Scalars['Int'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryB2bAccountAttributeVocabularyValuesArgs = { + accountId: Scalars['Int'] + attributeFQN: Scalars['String'] +} + +export type QueryB2bAccountsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + fields?: Maybe<Scalars['String']> + q?: Maybe<Scalars['String']> + qLimit?: Maybe<Scalars['Int']> +} + +export type QueryB2bAccountArgs = { + accountId: Scalars['Int'] +} + +export type QueryB2bAccountUsersArgs = { + accountId: Scalars['Int'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + q?: Maybe<Scalars['String']> + qLimit?: Maybe<Scalars['Int']> +} + +export type QueryB2bAccountUserRolesArgs = { + accountId: Scalars['Int'] + userId: Scalars['String'] +} + +export type QueryCustomerCreditAuditTrailArgs = { + code: Scalars['String'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryCustomerCreditsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryCustomerCreditArgs = { + code: Scalars['String'] +} + +export type QueryCustomerCreditTransactionsArgs = { + code: Scalars['String'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryCustomerAccountAttributesArgs = { + accountId: Scalars['Int'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + userId?: Maybe<Scalars['String']> +} + +export type QueryCustomerAccountAttributeArgs = { + accountId: Scalars['Int'] + attributeFQN: Scalars['String'] + userId?: Maybe<Scalars['String']> +} + +export type QueryCustomerAccountCardsArgs = { + accountId: Scalars['Int'] +} + +export type QueryCustomerAccountCardArgs = { + accountId: Scalars['Int'] + cardId: Scalars['String'] +} + +export type QueryCustomerAccountContactsArgs = { + accountId: Scalars['Int'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + userId?: Maybe<Scalars['String']> +} + +export type QueryCustomerAccountContactArgs = { + accountId: Scalars['Int'] + contactId: Scalars['Int'] + userId?: Maybe<Scalars['String']> +} + +export type QueryCustomerAccountsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + fields?: Maybe<Scalars['String']> + q?: Maybe<Scalars['String']> + qLimit?: Maybe<Scalars['Int']> + isAnonymous?: Maybe<Scalars['Boolean']> +} + +export type QueryCustomerAccountArgs = { + accountId: Scalars['Int'] + userId?: Maybe<Scalars['String']> +} + +export type QueryCustomerAccountTransactionsArgs = { + accountId: Scalars['Int'] +} + +export type QueryCustomerAccountNotesArgs = { + accountId: Scalars['Int'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryCustomerAccountNoteArgs = { + accountId: Scalars['Int'] + noteId: Scalars['Int'] +} + +export type QueryCustomerAccountSegmentsArgs = { + accountId: Scalars['Int'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryCustomerAccountAuditLogArgs = { + accountId: Scalars['Int'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryCustomerPurchaseOrderAccountArgs = { + accountId: Scalars['Int'] +} + +export type QueryCustomerPurchaseOrderAccountTransactionArgs = { + accountId: Scalars['Int'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryCustomerAccountLoginStateArgs = { + accountId: Scalars['Int'] + userId?: Maybe<Scalars['String']> +} + +export type QueryCustomerSegmentsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryCustomerSegmentArgs = { + id: Scalars['Int'] +} + +export type QueryCustomerSetsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> +} + +export type QueryCustomerSetArgs = { + code: Scalars['String'] +} + +export type QueryInStockNotificationsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryInStockNotificationArgs = { + id: Scalars['Int'] +} + +export type QueryAuthTicketArgs = { + accountId?: Maybe<Scalars['Int']> +} + +export type QueryResolvedPriceListArgs = { + customerAccountId?: Maybe<Scalars['Int']> +} + +export type QueryCategoriesArgs = { + filter?: Maybe<Scalars['String']> + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> +} + +export type QueryCategoryArgs = { + categoryId: Scalars['Int'] + allowInactive?: Maybe<Scalars['Boolean']> +} + +export type QueryProductsArgs = { + filter?: Maybe<Scalars['String']> + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + responseOptions?: Maybe<Scalars['String']> + cursorMark?: Maybe<Scalars['String']> + defaultSort?: Maybe<Scalars['String']> + mid?: Maybe<Scalars['String']> + includeAllImages?: Maybe<Scalars['Boolean']> +} + +export type QueryProductArgs = { + productCode: Scalars['String'] + variationProductCode?: Maybe<Scalars['String']> + allowInactive?: Maybe<Scalars['Boolean']> + skipInventoryCheck?: Maybe<Scalars['Boolean']> + supressOutOfStock404?: Maybe<Scalars['Boolean']> + quantity?: Maybe<Scalars['Int']> + acceptVariantProductCode?: Maybe<Scalars['Boolean']> + purchaseLocation?: Maybe<Scalars['String']> + variationProductCodeFilter?: Maybe<Scalars['String']> + sliceValue?: Maybe<Scalars['String']> + includeAllImages?: Maybe<Scalars['Boolean']> +} + +export type QueryProductVersionArgs = { + productCode: Scalars['String'] + productVersion?: Maybe<Scalars['Int']> + lastModifiedDate?: Maybe<Scalars['DateTime']> +} + +export type QueryProductLocationInventoryArgs = { + productCode: Scalars['String'] + locationCodes?: Maybe<Scalars['String']> +} + +export type QuerySuggestionSearchArgs = { + query?: Maybe<Scalars['String']> + groups?: Maybe<Scalars['String']> + pageSize?: Maybe<Scalars['Int']> + mid?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryProductSearchRandomAccessCursorArgs = { + query?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + pageSize?: Maybe<Scalars['Int']> +} + +export type QueryProductSearchArgs = { + query?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + facetTemplate?: Maybe<Scalars['String']> + facetTemplateSubset?: Maybe<Scalars['String']> + facet?: Maybe<Scalars['String']> + facetFieldRangeQuery?: Maybe<Scalars['String']> + facetHierPrefix?: Maybe<Scalars['String']> + facetHierValue?: Maybe<Scalars['String']> + facetHierDepth?: Maybe<Scalars['String']> + facetStartIndex?: Maybe<Scalars['String']> + facetPageSize?: Maybe<Scalars['String']> + facetSettings?: Maybe<Scalars['String']> + facetValueFilter?: Maybe<Scalars['String']> + sortBy?: Maybe<Scalars['String']> + pageSize?: Maybe<Scalars['Int']> + startIndex?: Maybe<Scalars['Int']> + searchSettings?: Maybe<Scalars['String']> + enableSearchTuningRules?: Maybe<Scalars['Boolean']> + searchTuningRuleContext?: Maybe<Scalars['String']> + searchTuningRuleCode?: Maybe<Scalars['String']> + facetTemplateExclude?: Maybe<Scalars['String']> + facetPrefix?: Maybe<Scalars['String']> + responseOptions?: Maybe<Scalars['String']> + cursorMark?: Maybe<Scalars['String']> + facetValueSort?: Maybe<Scalars['String']> + defaultSort?: Maybe<Scalars['String']> + sortDefinitionName?: Maybe<Scalars['String']> + defaultSortDefinitionName?: Maybe<Scalars['String']> + shouldSlice?: Maybe<Scalars['Boolean']> + mid?: Maybe<Scalars['String']> + omitNamespace?: Maybe<Scalars['Boolean']> +} + +export type QueryPriceListArgs = { + priceListCode?: Maybe<Scalars['String']> +} + +export type QueryUserCartSummaryArgs = { + userId: Scalars['String'] +} + +export type QueryCartSummaryArgs = { + cartId: Scalars['String'] +} + +export type QueryUserCartArgs = { + userId: Scalars['String'] +} + +export type QueryCartArgs = { + cartId: Scalars['String'] +} + +export type QueryCartItemsArgs = { + cartId: Scalars['String'] +} + +export type QueryCurrentCartItemArgs = { + cartItemId: Scalars['String'] +} + +export type QueryCartItemArgs = { + cartId: Scalars['String'] + cartItemId: Scalars['String'] +} + +export type QueryChannelsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryChannelArgs = { + code: Scalars['String'] +} + +export type QueryChannelGroupsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryChannelGroupArgs = { + code: Scalars['String'] +} + +export type QueryCheckoutAttributesArgs = { + checkoutId: Scalars['String'] +} + +export type QueryCheckoutArgs = { + checkoutId: Scalars['String'] +} + +export type QueryCheckoutsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + q?: Maybe<Scalars['String']> + qLimit?: Maybe<Scalars['Int']> +} + +export type QueryCheckoutShippingMethodsArgs = { + checkoutId: Scalars['String'] +} + +export type QueryCheckoutActionsArgs = { + checkoutId: Scalars['String'] +} + +export type QueryCheckoutDestinationArgs = { + checkoutId: Scalars['String'] + destinationId: Scalars['String'] +} + +export type QueryCheckoutDestinationsArgs = { + checkoutId: Scalars['String'] +} + +export type QueryOrderPackageActionsArgs = { + orderId: Scalars['String'] + packageId: Scalars['String'] +} + +export type QueryOrderPaymentActionsArgs = { + orderId: Scalars['String'] + paymentId: Scalars['String'] +} + +export type QueryOrderPaymentArgs = { + orderId: Scalars['String'] + paymentId: Scalars['String'] +} + +export type QueryOrderPaymentsArgs = { + orderId: Scalars['String'] +} + +export type QueryOrderPickupArgs = { + orderId: Scalars['String'] + pickupId: Scalars['String'] +} + +export type QueryOrderPickupActionsArgs = { + orderId: Scalars['String'] + pickupId: Scalars['String'] +} + +export type QueryOrderReturnableItemsArgs = { + orderId: Scalars['String'] +} + +export type QueryOrderShipmentArgs = { + orderId: Scalars['String'] + shipmentId: Scalars['String'] +} + +export type QueryOrderShipmentMethodsArgs = { + orderId: Scalars['String'] + draft?: Maybe<Scalars['Boolean']> +} + +export type QueryOrderValidationResultsArgs = { + orderId: Scalars['String'] +} + +export type QueryOrderAttributesArgs = { + orderId: Scalars['String'] +} + +export type QueryOrderBillingInfoArgs = { + orderId: Scalars['String'] + draft?: Maybe<Scalars['Boolean']> +} + +export type QueryOrderCancelReasonsArgs = { + category?: Maybe<Scalars['String']> +} + +export type QueryOrdersArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + q?: Maybe<Scalars['String']> + qLimit?: Maybe<Scalars['Int']> + includeBin?: Maybe<Scalars['Boolean']> + mode?: Maybe<Scalars['String']> +} + +export type QueryOrderArgs = { + orderId: Scalars['String'] + draft?: Maybe<Scalars['Boolean']> + includeBin?: Maybe<Scalars['Boolean']> + mode?: Maybe<Scalars['String']> +} + +export type QueryOrderActionsArgs = { + orderId: Scalars['String'] +} + +export type QueryOrderTaxableOrdersArgs = { + orderId: Scalars['String'] +} + +export type QueryOrderDigitalPackageArgs = { + orderId: Scalars['String'] + digitalPackageId: Scalars['String'] +} + +export type QueryOrderDigitalPackageActionsArgs = { + orderId: Scalars['String'] + digitalPackageId: Scalars['String'] +} + +export type QueryOrderExtendedPropertiesArgs = { + orderId: Scalars['String'] + draft?: Maybe<Scalars['Boolean']> +} + +export type QueryOrderFulfillmentInfoArgs = { + orderId: Scalars['String'] + draft?: Maybe<Scalars['Boolean']> +} + +export type QueryOrderItemsArgs = { + orderId: Scalars['String'] + draft?: Maybe<Scalars['Boolean']> +} + +export type QueryOrderNotesArgs = { + orderId: Scalars['String'] +} + +export type QueryOrderNoteArgs = { + orderId: Scalars['String'] + noteId: Scalars['String'] +} + +export type QueryOrderPackageArgs = { + orderId: Scalars['String'] + packageId: Scalars['String'] +} + +export type QueryOrderPackageLabelArgs = { + orderId: Scalars['String'] + packageId: Scalars['String'] +} + +export type QueryQuoteArgs = { + quoteId: Scalars['String'] + draft?: Maybe<Scalars['Boolean']> +} + +export type QueryQuotesArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + q?: Maybe<Scalars['String']> + qLimit?: Maybe<Scalars['Int']> +} + +export type QueryCustomerAccountQuoteArgs = { + customerAccountId: Scalars['Int'] + quoteName: Scalars['String'] + draft?: Maybe<Scalars['Boolean']> +} + +export type QueryQuoteItemsArgs = { + quoteId: Scalars['String'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryCustomerAccountQuoteItemsArgs = { + customerAccountId: Scalars['Int'] + quoteName: Scalars['String'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryQuoteItemArgs = { + quoteId: Scalars['String'] + quoteItemId: Scalars['String'] + draft?: Maybe<Scalars['Boolean']> +} + +export type QueryReturnsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + q?: Maybe<Scalars['String']> +} + +export type QueryReturnReasonArgs = { + returnId: Scalars['String'] +} + +export type QueryReturnActionsArgs = { + returnId: Scalars['String'] +} + +export type QueryReturnPaymentsArgs = { + returnId: Scalars['String'] +} + +export type QueryReturnPaymentArgs = { + returnId: Scalars['String'] + paymentId: Scalars['String'] +} + +export type QueryReturnPaymentActionsArgs = { + returnId: Scalars['String'] + paymentId: Scalars['String'] +} + +export type QueryReturnShippingLabelArgs = { + returnId: Scalars['String'] +} + +export type QueryReturnItemsArgs = { + returnId: Scalars['String'] +} + +export type QueryReturnItemArgs = { + returnId: Scalars['String'] + returnItemId: Scalars['String'] +} + +export type QueryReturnNotesArgs = { + returnId: Scalars['String'] +} + +export type QueryReturnNoteArgs = { + returnId: Scalars['String'] + noteId: Scalars['String'] +} + +export type QueryReturnPackageArgs = { + returnId: Scalars['String'] + packageId: Scalars['String'] +} + +export type QueryReturnPackageLabelArgs = { + returnId: Scalars['String'] + packageId: Scalars['String'] + returnAsBase64Png?: Maybe<Scalars['Boolean']> +} + +export type QueryReturnShipmentArgs = { + returnId: Scalars['String'] + shipmentId: Scalars['String'] +} + +export type QueryWishlistsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + q?: Maybe<Scalars['String']> + qLimit?: Maybe<Scalars['Int']> +} + +export type QueryWishlistArgs = { + wishlistId: Scalars['String'] +} + +export type QueryCustomerWishlistArgs = { + customerAccountId: Scalars['Int'] + wishlistName: Scalars['String'] +} + +export type QueryWishlistItemsArgs = { + wishlistId: Scalars['String'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryCustomerWishlistItemsArgs = { + customerAccountId: Scalars['Int'] + wishlistName: Scalars['String'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryWishlistItemArgs = { + wishlistId: Scalars['String'] + wishlistItemId: Scalars['String'] +} + +export type QueryOrderItemArgs = { + orderId?: Maybe<Scalars['String']> + lineId?: Maybe<Scalars['Int']> + orderItemId?: Maybe<Scalars['String']> + draft?: Maybe<Scalars['Boolean']> +} + +export type QueryDocumentListDocumentContentArgs = { + documentListName: Scalars['String'] + documentId: Scalars['String'] +} + +export type QueryDocumentListDocumentTransformArgs = { + documentListName: Scalars['String'] + documentId: Scalars['String'] + width?: Maybe<Scalars['Int']> + height?: Maybe<Scalars['Int']> + max?: Maybe<Scalars['Int']> + maxWidth?: Maybe<Scalars['Int']> + maxHeight?: Maybe<Scalars['Int']> + crop?: Maybe<Scalars['String']> + quality?: Maybe<Scalars['Int']> +} + +export type QueryDocumentListTreeDocumentContentArgs = { + documentListName: Scalars['String'] + documentName: Scalars['String'] +} + +export type QueryDocumentListTreeDocumentTransformArgs = { + documentListName: Scalars['String'] + documentName: Scalars['String'] + width?: Maybe<Scalars['Int']> + height?: Maybe<Scalars['Int']> + max?: Maybe<Scalars['Int']> + maxWidth?: Maybe<Scalars['Int']> + maxHeight?: Maybe<Scalars['Int']> + crop?: Maybe<Scalars['String']> + quality?: Maybe<Scalars['Int']> +} + +export type QueryDocumentListDocumentsArgs = { + documentListName: Scalars['String'] + filter?: Maybe<Scalars['String']> + sortBy?: Maybe<Scalars['String']> + pageSize?: Maybe<Scalars['Int']> + startIndex?: Maybe<Scalars['Int']> + includeInactive?: Maybe<Scalars['Boolean']> + path?: Maybe<Scalars['String']> + includeSubPaths?: Maybe<Scalars['Boolean']> + queryScope?: Maybe<Scalars['String']> +} + +export type QueryDocumentListDocumentArgs = { + documentListName: Scalars['String'] + documentId: Scalars['String'] + includeInactive?: Maybe<Scalars['Boolean']> +} + +export type QueryDocumentListTreeDocumentArgs = { + documentListName: Scalars['String'] + documentName: Scalars['String'] + includeInactive?: Maybe<Scalars['Boolean']> +} + +export type QueryDocumentListsArgs = { + pageSize?: Maybe<Scalars['Int']> + startIndex?: Maybe<Scalars['Int']> +} + +export type QueryDocumentListArgs = { + documentListName: Scalars['String'] +} + +export type QueryDocumentListViewDocumentsArgs = { + documentListName: Scalars['String'] + viewName: Scalars['String'] + filter?: Maybe<Scalars['String']> + sortBy?: Maybe<Scalars['String']> + pageSize?: Maybe<Scalars['Int']> + startIndex?: Maybe<Scalars['Int']> + includeInactive?: Maybe<Scalars['Boolean']> +} + +export type QueryDocumentListTypesArgs = { + pageSize?: Maybe<Scalars['Int']> + startIndex?: Maybe<Scalars['Int']> +} + +export type QueryDocumentListTypeArgs = { + documentListTypeFQN: Scalars['String'] +} + +export type QueryDocumentDraftsArgs = { + pageSize?: Maybe<Scalars['Int']> + startIndex?: Maybe<Scalars['Int']> + documentLists?: Maybe<Scalars['String']> +} + +export type QueryDocumentTypesArgs = { + pageSize?: Maybe<Scalars['Int']> + startIndex?: Maybe<Scalars['Int']> +} + +export type QueryDocumentTypeArgs = { + documentTypeName: Scalars['String'] +} + +export type QueryPropertyTypesArgs = { + pageSize?: Maybe<Scalars['Int']> + startIndex?: Maybe<Scalars['Int']> +} + +export type QueryPropertyTypeArgs = { + propertyTypeName: Scalars['String'] +} + +export type QueryAdminLocationsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryAdminLocationArgs = { + locationCode: Scalars['String'] +} + +export type QueryAdminLocationAttributesArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryAdminLocationAttributeVocabularyValuesArgs = { + attributeFQN: Scalars['String'] +} + +export type QueryAdminLocationAttributeArgs = { + attributeFQN: Scalars['String'] +} + +export type QueryAdminLocationGroupsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryDslLocationArgs = { + includeAttributeDefinition?: Maybe<Scalars['Boolean']> +} + +export type QuerySpLocationsArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + includeAttributeDefinition?: Maybe<Scalars['Boolean']> +} + +export type QuerySpLocationArgs = { + locationCode: Scalars['String'] + includeAttributeDefinition?: Maybe<Scalars['Boolean']> +} + +export type QueryUsageTypeLocationsArgs = { + locationUsageType: Scalars['String'] + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> + includeAttributeDefinition?: Maybe<Scalars['Boolean']> +} + +export type QueryLocationArgs = { + locationCode: Scalars['String'] + includeAttributeDefinition?: Maybe<Scalars['Boolean']> +} + +export type QueryLocationUsageArgs = { + code: Scalars['String'] +} + +export type QueryAdminLocationTypeArgs = { + locationTypeCode: Scalars['String'] +} + +export type QueryLocationGroupConfigArgs = { + locationGroupId?: Maybe<Scalars['Int']> + locationGroupCode?: Maybe<Scalars['String']> + locationCode?: Maybe<Scalars['String']> +} + +export type QueryLocationGroupArgs = { + groupId?: Maybe<Scalars['Int']> + locationGroupCode?: Maybe<Scalars['String']> +} + +export type QueryEntityListEntityArgs = { + entityListFullName: Scalars['String'] + id: Scalars['String'] +} + +export type QueryEntityListEntitiesArgs = { + entityListFullName: Scalars['String'] + pageSize?: Maybe<Scalars['Int']> + startIndex?: Maybe<Scalars['Int']> + filter?: Maybe<Scalars['String']> + sortBy?: Maybe<Scalars['String']> +} + +export type QueryEntityListEntityContainerArgs = { + entityListFullName: Scalars['String'] + id: Scalars['String'] +} + +export type QueryEntityListEntityContainersArgs = { + entityListFullName: Scalars['String'] + pageSize?: Maybe<Scalars['Int']> + startIndex?: Maybe<Scalars['Int']> + filter?: Maybe<Scalars['String']> + sortBy?: Maybe<Scalars['String']> +} + +export type QueryEntityListArgs = { + entityListFullName: Scalars['String'] +} + +export type QueryEntityListsArgs = { + pageSize?: Maybe<Scalars['Int']> + startIndex?: Maybe<Scalars['Int']> + filter?: Maybe<Scalars['String']> + sortBy?: Maybe<Scalars['String']> +} + +export type QueryEntityListViewsArgs = { + entityListFullName: Scalars['String'] +} + +export type QueryEntityListViewArgs = { + entityListFullName: Scalars['String'] + viewName: Scalars['String'] +} + +export type QueryEntityListViewEntityContainersArgs = { + entityListFullName: Scalars['String'] + viewName: Scalars['String'] + pageSize?: Maybe<Scalars['Int']> + startIndex?: Maybe<Scalars['Int']> + filter?: Maybe<Scalars['String']> +} + +export type QueryEntityListViewEntitiesArgs = { + entityListFullName: Scalars['String'] + viewName: Scalars['String'] + pageSize?: Maybe<Scalars['Int']> + startIndex?: Maybe<Scalars['Int']> + filter?: Maybe<Scalars['String']> +} + +export type QueryEntityListViewEntityContainerArgs = { + entityListFullName: Scalars['String'] + viewName: Scalars['String'] + entityId: Scalars['String'] +} + +export type QueryEntityListViewEntityArgs = { + entityListFullName: Scalars['String'] + viewName: Scalars['String'] + entityId: Scalars['String'] +} + +export type QueryCarrierLocaleServiceTypesArgs = { + carrierId: Scalars['String'] + localeCode: Scalars['String'] +} + +export type QueryLocaleServiceTypesArgs = { + localeCode: Scalars['String'] +} + +export type QueryTargetRulesArgs = { + startIndex?: Maybe<Scalars['Int']> + pageSize?: Maybe<Scalars['Int']> + sortBy?: Maybe<Scalars['String']> + filter?: Maybe<Scalars['String']> +} + +export type QueryTargetRuleArgs = { + code: Scalars['String'] +} + +export type QueryOrderRoutingRoutingSuggestionLogArgs = { + externalResponseID?: Maybe<Scalars['String']> + orderID?: Maybe<Scalars['Int']> + responseID?: Maybe<Scalars['Int']> + suggestionID?: Maybe<Scalars['Int']> +} + +export type Quote = { + __typename?: 'Quote' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Quote> + id?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + siteId: Scalars['Int'] + tenantId: Scalars['Int'] + number?: Maybe<Scalars['Int']> + submittedDate?: Maybe<Scalars['DateTime']> + items?: Maybe<Array<Maybe<CrOrderItem>>> + auditHistory?: Maybe<Array<Maybe<AuditRecord>>> + auditInfo?: Maybe<CrAuditInfo> + comments?: Maybe<Array<Maybe<QuoteComment>>> + expirationDate?: Maybe<Scalars['DateTime']> + fulfillmentInfo?: Maybe<FulfillmentInfo> + userId?: Maybe<Scalars['String']> + customerAccountId?: Maybe<Scalars['Int']> + email?: Maybe<Scalars['String']> + customerTaxId?: Maybe<Scalars['String']> + isTaxExempt?: Maybe<Scalars['Boolean']> + currencyCode?: Maybe<Scalars['String']> + priceListCode?: Maybe<Scalars['String']> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + channelCode?: Maybe<Scalars['String']> + locationCode?: Maybe<Scalars['String']> + ipAddress?: Maybe<Scalars['String']> + sourceDevice?: Maybe<Scalars['String']> + visitId?: Maybe<Scalars['String']> + webSessionId?: Maybe<Scalars['String']> + customerInteractionType?: Maybe<Scalars['String']> + orderDiscounts?: Maybe<Array<Maybe<CrAppliedDiscount>>> + subTotal: Scalars['Float'] + itemLevelProductDiscountTotal: Scalars['Float'] + orderLevelProductDiscountTotal: Scalars['Float'] + itemTaxTotal: Scalars['Float'] + adjustment?: Maybe<Adjustment> + itemTotal: Scalars['Float'] + total: Scalars['Float'] + shippingDiscounts?: Maybe<Array<Maybe<ShippingDiscount>>> + itemLevelShippingDiscountTotal: Scalars['Float'] + orderLevelShippingDiscountTotal: Scalars['Float'] + shippingAmount: Scalars['Float'] + shippingAdjustment?: Maybe<Adjustment> + shippingSubTotal: Scalars['Float'] + shippingTax?: Maybe<Scalars['Float']> + shippingTaxTotal: Scalars['Float'] + shippingTotal: Scalars['Float'] + handlingDiscounts?: Maybe<Array<Maybe<CrAppliedDiscount>>> + itemLevelHandlingDiscountTotal: Scalars['Float'] + orderLevelHandlingDiscountTotal: Scalars['Float'] + handlingAmount?: Maybe<Scalars['Float']> + handlingAdjustment?: Maybe<Adjustment> + handlingSubTotal: Scalars['Float'] + handlingTax?: Maybe<Scalars['Float']> + handlingTaxTotal: Scalars['Float'] + handlingTotal: Scalars['Float'] + dutyAmount?: Maybe<Scalars['Float']> + dutyTotal: Scalars['Float'] + feeTotal: Scalars['Float'] + isDraft?: Maybe<Scalars['Boolean']> + hasDraft?: Maybe<Scalars['Boolean']> + status?: Maybe<Scalars['String']> + couponCodes?: Maybe<Array<Scalars['String']>> + invalidCoupons?: Maybe<Array<Maybe<InvalidCoupon>>> +} + +export type Quote_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type QuoteCollection = { + __typename?: 'QuoteCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<QuoteCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<Quote>>> +} + +export type QuoteCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type QuoteComment = { + __typename?: 'QuoteComment' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<QuoteComment> + id?: Maybe<Scalars['String']> + text?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfo> +} + +export type QuoteComment_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type QuoteCommentInput = { + id?: Maybe<Scalars['String']> + text?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfoInput> +} + +export type QuoteInput = { + id?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + siteId: Scalars['Int'] + tenantId: Scalars['Int'] + number?: Maybe<Scalars['Int']> + submittedDate?: Maybe<Scalars['DateTime']> + items?: Maybe<Array<Maybe<CrOrderItemInput>>> + auditHistory?: Maybe<Array<Maybe<AuditRecordInput>>> + auditInfo?: Maybe<CrAuditInfoInput> + comments?: Maybe<Array<Maybe<QuoteCommentInput>>> + expirationDate?: Maybe<Scalars['DateTime']> + fulfillmentInfo?: Maybe<FulfillmentInfoInput> + userId?: Maybe<Scalars['String']> + customerAccountId?: Maybe<Scalars['Int']> + email?: Maybe<Scalars['String']> + customerTaxId?: Maybe<Scalars['String']> + isTaxExempt?: Maybe<Scalars['Boolean']> + currencyCode?: Maybe<Scalars['String']> + priceListCode?: Maybe<Scalars['String']> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + channelCode?: Maybe<Scalars['String']> + locationCode?: Maybe<Scalars['String']> + ipAddress?: Maybe<Scalars['String']> + sourceDevice?: Maybe<Scalars['String']> + visitId?: Maybe<Scalars['String']> + webSessionId?: Maybe<Scalars['String']> + customerInteractionType?: Maybe<Scalars['String']> + orderDiscounts?: Maybe<Array<Maybe<CrAppliedDiscountInput>>> + subTotal: Scalars['Float'] + itemLevelProductDiscountTotal: Scalars['Float'] + orderLevelProductDiscountTotal: Scalars['Float'] + itemTaxTotal: Scalars['Float'] + adjustment?: Maybe<AdjustmentInput> + itemTotal: Scalars['Float'] + total: Scalars['Float'] + shippingDiscounts?: Maybe<Array<Maybe<ShippingDiscountInput>>> + itemLevelShippingDiscountTotal: Scalars['Float'] + orderLevelShippingDiscountTotal: Scalars['Float'] + shippingAmount: Scalars['Float'] + shippingAdjustment?: Maybe<AdjustmentInput> + shippingSubTotal: Scalars['Float'] + shippingTax?: Maybe<Scalars['Float']> + shippingTaxTotal: Scalars['Float'] + shippingTotal: Scalars['Float'] + handlingDiscounts?: Maybe<Array<Maybe<CrAppliedDiscountInput>>> + itemLevelHandlingDiscountTotal: Scalars['Float'] + orderLevelHandlingDiscountTotal: Scalars['Float'] + handlingAmount?: Maybe<Scalars['Float']> + handlingAdjustment?: Maybe<AdjustmentInput> + handlingSubTotal: Scalars['Float'] + handlingTax?: Maybe<Scalars['Float']> + handlingTaxTotal: Scalars['Float'] + handlingTotal: Scalars['Float'] + dutyAmount?: Maybe<Scalars['Float']> + dutyTotal: Scalars['Float'] + feeTotal: Scalars['Float'] + isDraft?: Maybe<Scalars['Boolean']> + hasDraft?: Maybe<Scalars['Boolean']> + status?: Maybe<Scalars['String']> + couponCodes?: Maybe<Array<Scalars['String']>> + invalidCoupons?: Maybe<Array<Maybe<InvalidCouponInput>>> +} + +export type ReasonCollection = { + __typename?: 'ReasonCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ReasonCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Scalars['String']>> +} + +export type ReasonCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type Refund = { + __typename?: 'Refund' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Refund> + id?: Maybe<Scalars['String']> + orderId?: Maybe<Scalars['String']> + reason?: Maybe<Scalars['String']> + reasonCode?: Maybe<Scalars['String']> + payment?: Maybe<Payment> + amount: Scalars['Float'] + refundMethod?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfo> +} + +export type Refund_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type RefundInput = { + id?: Maybe<Scalars['String']> + orderId?: Maybe<Scalars['String']> + reason?: Maybe<Scalars['String']> + reasonCode?: Maybe<Scalars['String']> + payment?: Maybe<PaymentInput> + amount: Scalars['Float'] + refundMethod?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfoInput> +} + +export type RegularHours = { + __typename?: 'RegularHours' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<RegularHours> + sunday?: Maybe<Hours> + monday?: Maybe<Hours> + tuesday?: Maybe<Hours> + wednesday?: Maybe<Hours> + thursday?: Maybe<Hours> + friday?: Maybe<Hours> + saturday?: Maybe<Hours> + timeZone?: Maybe<Scalars['String']> +} + +export type RegularHours_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type RegularHoursInput = { + sunday?: Maybe<HoursInput> + monday?: Maybe<HoursInput> + tuesday?: Maybe<HoursInput> + wednesday?: Maybe<HoursInput> + thursday?: Maybe<HoursInput> + friday?: Maybe<HoursInput> + saturday?: Maybe<HoursInput> + timeZone?: Maybe<Scalars['String']> +} + +export type RepriceShipmentObjectInput = { + originalShipment?: Maybe<ShipmentInput> + newShipment?: Maybe<ShipmentInput> +} + +export type ResetPasswordInfoInput = { + emailAddress?: Maybe<Scalars['String']> + userName?: Maybe<Scalars['String']> + customerSetCode?: Maybe<Scalars['String']> +} + +export type ResolvedPriceList = { + __typename?: 'ResolvedPriceList' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ResolvedPriceList> + priceListCode?: Maybe<Scalars['String']> + priceListId: Scalars['Int'] + name?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> +} + +export type ResolvedPriceList_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type RestockableReturnItemInput = { + returnItemId?: Maybe<Scalars['String']> + quantity: Scalars['Int'] + locationCode?: Maybe<Scalars['String']> +} + +export type ReturnActionInput = { + actionName?: Maybe<Scalars['String']> + returnIds?: Maybe<Array<Scalars['String']>> +} + +export type ReturnBundle = { + __typename?: 'ReturnBundle' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ReturnBundle> + productCode?: Maybe<Scalars['String']> + quantity: Scalars['Int'] +} + +export type ReturnBundle_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ReturnBundleInput = { + productCode?: Maybe<Scalars['String']> + quantity: Scalars['Int'] +} + +export type ReturnCollection = { + __typename?: 'ReturnCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ReturnCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<ReturnObj>>> +} + +export type ReturnCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ReturnItem = { + __typename?: 'ReturnItem' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ReturnItem> + id?: Maybe<Scalars['String']> + orderItemId?: Maybe<Scalars['String']> + orderLineId?: Maybe<Scalars['Int']> + orderItemOptionAttributeFQN?: Maybe<Scalars['String']> + product?: Maybe<CrProduct> + reasons?: Maybe<Array<Maybe<ReturnReason>>> + excludeProductExtras?: Maybe<Scalars['Boolean']> + returnType?: Maybe<Scalars['String']> + returnNotRequired?: Maybe<Scalars['Boolean']> + quantityReceived: Scalars['Int'] + receiveStatus?: Maybe<Scalars['String']> + quantityShipped: Scalars['Int'] + replaceStatus?: Maybe<Scalars['String']> + quantityRestockable: Scalars['Int'] + quantityRestocked: Scalars['Int'] + refundAmount?: Maybe<Scalars['Float']> + refundStatus?: Maybe<Scalars['String']> + quantityReplaced?: Maybe<Scalars['Int']> + notes?: Maybe<Array<Maybe<OrderNote>>> + productLossAmount?: Maybe<Scalars['Float']> + productLossTaxAmount?: Maybe<Scalars['Float']> + shippingLossAmount?: Maybe<Scalars['Float']> + shippingLossTaxAmount?: Maybe<Scalars['Float']> + bundledProducts?: Maybe<Array<Maybe<ReturnBundle>>> + totalWithoutWeightedShippingAndHandling?: Maybe<Scalars['Float']> + totalWithWeightedShippingAndHandling?: Maybe<Scalars['Float']> + shipmentItemId?: Maybe<Scalars['Int']> + shipmentNumber?: Maybe<Scalars['Int']> +} + +export type ReturnItem_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ReturnItemCollection = { + __typename?: 'ReturnItemCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ReturnItemCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<ReturnItem>>> +} + +export type ReturnItemCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ReturnItemInput = { + id?: Maybe<Scalars['String']> + orderItemId?: Maybe<Scalars['String']> + orderLineId?: Maybe<Scalars['Int']> + orderItemOptionAttributeFQN?: Maybe<Scalars['String']> + product?: Maybe<CrProductInput> + reasons?: Maybe<Array<Maybe<ReturnReasonInput>>> + excludeProductExtras?: Maybe<Scalars['Boolean']> + returnType?: Maybe<Scalars['String']> + returnNotRequired?: Maybe<Scalars['Boolean']> + quantityReceived: Scalars['Int'] + receiveStatus?: Maybe<Scalars['String']> + quantityShipped: Scalars['Int'] + replaceStatus?: Maybe<Scalars['String']> + quantityRestockable: Scalars['Int'] + quantityRestocked: Scalars['Int'] + refundAmount?: Maybe<Scalars['Float']> + refundStatus?: Maybe<Scalars['String']> + quantityReplaced?: Maybe<Scalars['Int']> + notes?: Maybe<Array<Maybe<OrderNoteInput>>> + productLossAmount?: Maybe<Scalars['Float']> + productLossTaxAmount?: Maybe<Scalars['Float']> + shippingLossAmount?: Maybe<Scalars['Float']> + shippingLossTaxAmount?: Maybe<Scalars['Float']> + bundledProducts?: Maybe<Array<Maybe<ReturnBundleInput>>> + totalWithoutWeightedShippingAndHandling?: Maybe<Scalars['Float']> + totalWithWeightedShippingAndHandling?: Maybe<Scalars['Float']> + shipmentItemId?: Maybe<Scalars['Int']> + shipmentNumber?: Maybe<Scalars['Int']> +} + +export type ReturnItemSpecifierInput = { + returnItemId?: Maybe<Scalars['String']> + quantity: Scalars['Int'] +} + +export type ReturnObj = { + __typename?: 'ReturnObj' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ReturnObj> + id?: Maybe<Scalars['String']> + customerAccountId?: Maybe<Scalars['Int']> + visitId?: Maybe<Scalars['String']> + webSessionId?: Maybe<Scalars['String']> + customerInteractionType?: Maybe<Scalars['String']> + availableActions?: Maybe<Array<Scalars['String']>> + returnNumber?: Maybe<Scalars['Int']> + contact?: Maybe<Contact> + locationCode?: Maybe<Scalars['String']> + originalOrderId?: Maybe<Scalars['String']> + originalOrderNumber?: Maybe<Scalars['Int']> + returnOrderId?: Maybe<Scalars['String']> + currencyCode?: Maybe<Scalars['String']> + status?: Maybe<Scalars['String']> + receiveStatus?: Maybe<Scalars['String']> + refundStatus?: Maybe<Scalars['String']> + replaceStatus?: Maybe<Scalars['String']> + items?: Maybe<Array<Maybe<ReturnItem>>> + notes?: Maybe<Array<Maybe<OrderNote>>> + rmaDeadline?: Maybe<Scalars['DateTime']> + returnType?: Maybe<Scalars['String']> + refundAmount?: Maybe<Scalars['Float']> + auditInfo?: Maybe<CrAuditInfo> + payments?: Maybe<Array<Maybe<Payment>>> + packages?: Maybe<Array<Maybe<PackageObj>>> + productLossTotal?: Maybe<Scalars['Float']> + shippingLossTotal?: Maybe<Scalars['Float']> + lossTotal?: Maybe<Scalars['Float']> + productLossTaxTotal?: Maybe<Scalars['Float']> + shippingLossTaxTotal?: Maybe<Scalars['Float']> + tenantId?: Maybe<Scalars['Int']> + siteId?: Maybe<Scalars['Int']> + userId?: Maybe<Scalars['String']> + channelCode?: Maybe<Scalars['String']> + changeMessages?: Maybe<Array<Maybe<ChangeMessage>>> + actionRequired?: Maybe<Scalars['Boolean']> + isUnified?: Maybe<Scalars['Boolean']> +} + +export type ReturnObj_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ReturnObjInput = { + id?: Maybe<Scalars['String']> + customerAccountId?: Maybe<Scalars['Int']> + visitId?: Maybe<Scalars['String']> + webSessionId?: Maybe<Scalars['String']> + customerInteractionType?: Maybe<Scalars['String']> + availableActions?: Maybe<Array<Scalars['String']>> + returnNumber?: Maybe<Scalars['Int']> + contact?: Maybe<ContactInput> + locationCode?: Maybe<Scalars['String']> + originalOrderId?: Maybe<Scalars['String']> + originalOrderNumber?: Maybe<Scalars['Int']> + returnOrderId?: Maybe<Scalars['String']> + currencyCode?: Maybe<Scalars['String']> + status?: Maybe<Scalars['String']> + receiveStatus?: Maybe<Scalars['String']> + refundStatus?: Maybe<Scalars['String']> + replaceStatus?: Maybe<Scalars['String']> + items?: Maybe<Array<Maybe<ReturnItemInput>>> + notes?: Maybe<Array<Maybe<OrderNoteInput>>> + rmaDeadline?: Maybe<Scalars['DateTime']> + returnType?: Maybe<Scalars['String']> + refundAmount?: Maybe<Scalars['Float']> + auditInfo?: Maybe<CrAuditInfoInput> + payments?: Maybe<Array<Maybe<PaymentInput>>> + packages?: Maybe<Array<Maybe<PackageObjInput>>> + productLossTotal?: Maybe<Scalars['Float']> + shippingLossTotal?: Maybe<Scalars['Float']> + lossTotal?: Maybe<Scalars['Float']> + productLossTaxTotal?: Maybe<Scalars['Float']> + shippingLossTaxTotal?: Maybe<Scalars['Float']> + tenantId?: Maybe<Scalars['Int']> + siteId?: Maybe<Scalars['Int']> + userId?: Maybe<Scalars['String']> + channelCode?: Maybe<Scalars['String']> + changeMessages?: Maybe<Array<Maybe<ChangeMessageInput>>> + actionRequired?: Maybe<Scalars['Boolean']> + isUnified?: Maybe<Scalars['Boolean']> +} + +export type ReturnReason = { + __typename?: 'ReturnReason' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ReturnReason> + reason?: Maybe<Scalars['String']> + quantity: Scalars['Int'] +} + +export type ReturnReason_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ReturnReasonInput = { + reason?: Maybe<Scalars['String']> + quantity: Scalars['Int'] +} + +export type SearchSuggestion = { + __typename?: 'SearchSuggestion' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<SearchSuggestion> + suggestionType?: Maybe<Scalars['String']> + suggestion?: Maybe<Scalars['Object']> +} + +export type SearchSuggestion_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type SearchSuggestionGroup = { + __typename?: 'SearchSuggestionGroup' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<SearchSuggestionGroup> + name?: Maybe<Scalars['String']> + suggestions?: Maybe<Array<Maybe<SearchSuggestion>>> +} + +export type SearchSuggestionGroup_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type SearchSuggestionResult = { + __typename?: 'SearchSuggestionResult' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<SearchSuggestionResult> + query?: Maybe<Scalars['String']> + suggestionGroups?: Maybe<Array<Maybe<SearchSuggestionGroup>>> +} + +export type SearchSuggestionResult_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ServiceType = { + __typename?: 'ServiceType' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ServiceType> + code?: Maybe<Scalars['String']> + deliveryDuration?: Maybe<Scalars['String']> + content?: Maybe<ServiceTypeLocalizedContent> +} + +export type ServiceType_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ServiceTypeLocalizedContent = { + __typename?: 'ServiceTypeLocalizedContent' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ServiceTypeLocalizedContent> + localeCode?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> +} + +export type ServiceTypeLocalizedContent_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type Shipment = { + __typename?: 'Shipment' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Shipment> + id?: Maybe<Scalars['String']> + externalShipmentId?: Maybe<Scalars['String']> + number?: Maybe<Scalars['Int']> + orderId?: Maybe<Scalars['String']> + orderNumber: Scalars['Int'] + email?: Maybe<Scalars['String']> + currencyCode?: Maybe<Scalars['String']> + customerAccountId?: Maybe<Scalars['Int']> + customerTaxId?: Maybe<Scalars['String']> + shipmentType?: Maybe<Scalars['String']> + shippingMethodCode?: Maybe<Scalars['String']> + shippingMethodName?: Maybe<Scalars['String']> + fulfillmentLocationCode?: Maybe<Scalars['String']> + origin?: Maybe<Contact> + destination?: Maybe<Destination> + shipmentStatus?: Maybe<Scalars['String']> + shipmentStatusReason?: Maybe<ShipmentStatusReason> + transferShipmentNumbers?: Maybe<Array<Scalars['Int']>> + isTransfer?: Maybe<Scalars['Boolean']> + originalShipmentNumber?: Maybe<Scalars['Int']> + parentShipmentNumber?: Maybe<Scalars['Int']> + fulfillmentStatus?: Maybe<Scalars['String']> + workflowProcessId?: Maybe<Scalars['String']> + workflowProcessContainerId?: Maybe<Scalars['String']> + workflowState?: Maybe<WorkflowState> + backorderCreatedDate?: Maybe<Scalars['Int']> + fulfillmentDate?: Maybe<Scalars['DateTime']> + orderSubmitDate?: Maybe<Scalars['DateTime']> + pickStatus?: Maybe<Scalars['String']> + pickType?: Maybe<Scalars['String']> + changeMessages?: Maybe<Array<Maybe<ChangeMessage>>> + packages?: Maybe<Array<Maybe<PackageObj>>> + items?: Maybe<Array<Maybe<ShipmentItem>>> + canceledItems?: Maybe<Array<Maybe<CanceledItem>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + auditInfo?: Maybe<CrAuditInfo> + shipmentAdjustment: Scalars['Float'] + lineItemSubtotal: Scalars['Float'] + lineItemTaxAdjustment: Scalars['Float'] + lineItemTaxTotal: Scalars['Float'] + lineItemTotal: Scalars['Float'] + shippingAdjustment: Scalars['Float'] + shippingSubtotal: Scalars['Float'] + shippingTaxAdjustment: Scalars['Float'] + shippingTaxTotal: Scalars['Float'] + shippingTotal: Scalars['Float'] + handlingAdjustment: Scalars['Float'] + handlingSubtotal: Scalars['Float'] + handlingTaxAdjustment: Scalars['Float'] + handlingTaxTotal: Scalars['Float'] + handlingTotal: Scalars['Float'] + dutyAdjustment: Scalars['Float'] + dutyTotal: Scalars['Float'] + total: Scalars['Float'] + cost?: Maybe<Scalars['Float']> + externalOrderId?: Maybe<Scalars['String']> + isExpress?: Maybe<Scalars['Boolean']> + readyToCapture?: Maybe<Scalars['Boolean']> + pickupInfo?: Maybe<Scalars['Object']> + shopperNotes?: Maybe<FulfillmentShopperNotes> + customer?: Maybe<Customer> +} + +export type Shipment_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ShipmentAdjustmentInput = { + itemAdjustment?: Maybe<Scalars['Float']> + itemTaxAdjustment?: Maybe<Scalars['Float']> + shippingAdjustment?: Maybe<Scalars['Float']> + shippingTaxAdjustment?: Maybe<Scalars['Float']> + handlingAdjustment?: Maybe<Scalars['Float']> + handlingTaxAdjustment?: Maybe<Scalars['Float']> +} + +export type ShipmentInput = { + id?: Maybe<Scalars['String']> + externalShipmentId?: Maybe<Scalars['String']> + number?: Maybe<Scalars['Int']> + orderId?: Maybe<Scalars['String']> + orderNumber: Scalars['Int'] + email?: Maybe<Scalars['String']> + currencyCode?: Maybe<Scalars['String']> + customerAccountId?: Maybe<Scalars['Int']> + customerTaxId?: Maybe<Scalars['String']> + shipmentType?: Maybe<Scalars['String']> + shippingMethodCode?: Maybe<Scalars['String']> + shippingMethodName?: Maybe<Scalars['String']> + fulfillmentLocationCode?: Maybe<Scalars['String']> + origin?: Maybe<ContactInput> + destination?: Maybe<DestinationInput> + shipmentStatus?: Maybe<Scalars['String']> + shipmentStatusReason?: Maybe<ShipmentStatusReasonInput> + transferShipmentNumbers?: Maybe<Array<Scalars['Int']>> + isTransfer?: Maybe<Scalars['Boolean']> + originalShipmentNumber?: Maybe<Scalars['Int']> + parentShipmentNumber?: Maybe<Scalars['Int']> + fulfillmentStatus?: Maybe<Scalars['String']> + workflowProcessId?: Maybe<Scalars['String']> + workflowProcessContainerId?: Maybe<Scalars['String']> + workflowState?: Maybe<WorkflowStateInput> + backorderCreatedDate?: Maybe<Scalars['Int']> + fulfillmentDate?: Maybe<Scalars['DateTime']> + orderSubmitDate?: Maybe<Scalars['DateTime']> + pickStatus?: Maybe<Scalars['String']> + pickType?: Maybe<Scalars['String']> + changeMessages?: Maybe<Array<Maybe<ChangeMessageInput>>> + packages?: Maybe<Array<Maybe<PackageObjInput>>> + items?: Maybe<Array<Maybe<ShipmentItemInput>>> + canceledItems?: Maybe<Array<Maybe<CanceledItemInput>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + auditInfo?: Maybe<CrAuditInfoInput> + shipmentAdjustment: Scalars['Float'] + lineItemSubtotal: Scalars['Float'] + lineItemTaxAdjustment: Scalars['Float'] + lineItemTaxTotal: Scalars['Float'] + lineItemTotal: Scalars['Float'] + shippingAdjustment: Scalars['Float'] + shippingSubtotal: Scalars['Float'] + shippingTaxAdjustment: Scalars['Float'] + shippingTaxTotal: Scalars['Float'] + shippingTotal: Scalars['Float'] + handlingAdjustment: Scalars['Float'] + handlingSubtotal: Scalars['Float'] + handlingTaxAdjustment: Scalars['Float'] + handlingTaxTotal: Scalars['Float'] + handlingTotal: Scalars['Float'] + dutyAdjustment: Scalars['Float'] + dutyTotal: Scalars['Float'] + total: Scalars['Float'] + cost?: Maybe<Scalars['Float']> + externalOrderId?: Maybe<Scalars['String']> + isExpress?: Maybe<Scalars['Boolean']> + readyToCapture?: Maybe<Scalars['Boolean']> + pickupInfo?: Maybe<Scalars['Object']> + shopperNotes?: Maybe<FulfillmentShopperNotesInput> + customer?: Maybe<CustomerInput> +} + +export type ShipmentItem = { + __typename?: 'ShipmentItem' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ShipmentItem> + lineId: Scalars['Int'] + originalOrderItemId?: Maybe<Scalars['String']> + parentId?: Maybe<Scalars['String']> + productCode?: Maybe<Scalars['String']> + variationProductCode?: Maybe<Scalars['String']> + optionAttributeFQN?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfo> + fulfillmentLocationCode?: Maybe<Scalars['String']> + imageUrl?: Maybe<Scalars['String']> + isTaxable?: Maybe<Scalars['Boolean']> + quantity: Scalars['Int'] + unitPrice: Scalars['Float'] + actualPrice: Scalars['Float'] + overridePrice?: Maybe<Scalars['Float']> + itemDiscount: Scalars['Float'] + lineItemCost: Scalars['Float'] + itemTax: Scalars['Float'] + shipping: Scalars['Float'] + shippingDiscount: Scalars['Float'] + shippingTax: Scalars['Float'] + handling: Scalars['Float'] + handlingDiscount: Scalars['Float'] + handlingTax: Scalars['Float'] + duty: Scalars['Float'] + isPackagedStandAlone?: Maybe<Scalars['Boolean']> + readyForPickupQuantity?: Maybe<Scalars['Int']> + backorderReleaseDate?: Maybe<Scalars['DateTime']> + measurements?: Maybe<CrPackageMeasurements> + options?: Maybe<Array<Maybe<CrProductOption>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + weightedShipmentAdjustment: Scalars['Float'] + weightedLineItemTaxAdjustment: Scalars['Float'] + weightedShippingAdjustment: Scalars['Float'] + weightedShippingTaxAdjustment: Scalars['Float'] + weightedHandlingAdjustment: Scalars['Float'] + weightedHandlingTaxAdjustment: Scalars['Float'] + weightedDutyAdjustment: Scalars['Float'] + taxableShipping: Scalars['Float'] + taxableLineItemCost: Scalars['Float'] + taxableHandling: Scalars['Float'] + fulfillmentFields?: Maybe<Array<Maybe<FulfillmentField>>> + isAssemblyRequired?: Maybe<Scalars['Boolean']> + parentItemId?: Maybe<Scalars['String']> + childItemIds?: Maybe<Array<Scalars['String']>> + giftCards?: Maybe<Array<Maybe<GiftCard>>> +} + +export type ShipmentItem_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ShipmentItemAdjustmentInput = { + overridePrice?: Maybe<Scalars['Float']> +} + +export type ShipmentItemInput = { + lineId: Scalars['Int'] + originalOrderItemId?: Maybe<Scalars['String']> + parentId?: Maybe<Scalars['String']> + productCode?: Maybe<Scalars['String']> + variationProductCode?: Maybe<Scalars['String']> + optionAttributeFQN?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + auditInfo?: Maybe<CrAuditInfoInput> + fulfillmentLocationCode?: Maybe<Scalars['String']> + imageUrl?: Maybe<Scalars['String']> + isTaxable?: Maybe<Scalars['Boolean']> + quantity: Scalars['Int'] + unitPrice: Scalars['Float'] + actualPrice: Scalars['Float'] + overridePrice?: Maybe<Scalars['Float']> + itemDiscount: Scalars['Float'] + lineItemCost: Scalars['Float'] + itemTax: Scalars['Float'] + shipping: Scalars['Float'] + shippingDiscount: Scalars['Float'] + shippingTax: Scalars['Float'] + handling: Scalars['Float'] + handlingDiscount: Scalars['Float'] + handlingTax: Scalars['Float'] + duty: Scalars['Float'] + isPackagedStandAlone?: Maybe<Scalars['Boolean']> + readyForPickupQuantity?: Maybe<Scalars['Int']> + backorderReleaseDate?: Maybe<Scalars['DateTime']> + measurements?: Maybe<CrPackageMeasurementsInput> + options?: Maybe<Array<Maybe<CrProductOptionInput>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + weightedShipmentAdjustment: Scalars['Float'] + weightedLineItemTaxAdjustment: Scalars['Float'] + weightedShippingAdjustment: Scalars['Float'] + weightedShippingTaxAdjustment: Scalars['Float'] + weightedHandlingAdjustment: Scalars['Float'] + weightedHandlingTaxAdjustment: Scalars['Float'] + weightedDutyAdjustment: Scalars['Float'] + taxableShipping: Scalars['Float'] + taxableLineItemCost: Scalars['Float'] + taxableHandling: Scalars['Float'] + fulfillmentFields?: Maybe<Array<Maybe<FulfillmentFieldInput>>> + isAssemblyRequired?: Maybe<Scalars['Boolean']> + parentItemId?: Maybe<Scalars['String']> + childItemIds?: Maybe<Array<Scalars['String']>> + giftCards?: Maybe<Array<Maybe<GiftCardInput>>> +} + +export type ShipmentStatusReason = { + __typename?: 'ShipmentStatusReason' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ShipmentStatusReason> + reasonCode?: Maybe<Scalars['String']> + moreInfo?: Maybe<Scalars['String']> +} + +export type ShipmentStatusReason_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ShipmentStatusReasonInput = { + reasonCode?: Maybe<Scalars['String']> + moreInfo?: Maybe<Scalars['String']> +} + +export type ShippingAddressInput = { + addressID: Scalars['Int'] + addressLine1: Scalars['String'] + city: Scalars['String'] + countryCode: Scalars['String'] + customerID: Scalars['Int'] + latitude: Scalars['Float'] + longitude: Scalars['Float'] + phone: Scalars['String'] + postalCode: Scalars['String'] + state: Scalars['String'] +} + +export type ShippingDiscount = { + __typename?: 'ShippingDiscount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ShippingDiscount> + methodCode?: Maybe<Scalars['String']> + discount?: Maybe<CrAppliedDiscount> +} + +export type ShippingDiscount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ShippingDiscountInput = { + methodCode?: Maybe<Scalars['String']> + discount?: Maybe<CrAppliedDiscountInput> +} + +export type ShippingMethodMappings = { + __typename?: 'ShippingMethodMappings' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ShippingMethodMappings> + shippingMethods?: Maybe<Array<Scalars['String']>> + returnLabelShippingMethod?: Maybe<Scalars['String']> + standardDefault?: Maybe<Scalars['String']> + express1DayDefault?: Maybe<Scalars['String']> + express2DayDefault?: Maybe<Scalars['String']> + express3DayDefault?: Maybe<Scalars['String']> + enableSmartPost?: Maybe<Scalars['Boolean']> + internationalUsReturnLabelShippingMethod?: Maybe<Scalars['String']> +} + +export type ShippingMethodMappings_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ShippingOriginContact = { + __typename?: 'ShippingOriginContact' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ShippingOriginContact> + firstName?: Maybe<Scalars['String']> + middleNameOrInitial?: Maybe<Scalars['String']> + lastNameOrSurname?: Maybe<Scalars['String']> + companyOrOrganization?: Maybe<Scalars['String']> + phoneNumber?: Maybe<Scalars['String']> + email?: Maybe<Scalars['String']> +} + +export type ShippingOriginContact_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ShippingOriginContactInput = { + firstName?: Maybe<Scalars['String']> + middleNameOrInitial?: Maybe<Scalars['String']> + lastNameOrSurname?: Maybe<Scalars['String']> + companyOrOrganization?: Maybe<Scalars['String']> + phoneNumber?: Maybe<Scalars['String']> + email?: Maybe<Scalars['String']> +} + +export type ShippingRate = { + __typename?: 'ShippingRate' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ShippingRate> + shippingMethodCode?: Maybe<Scalars['String']> + shippingMethodName?: Maybe<Scalars['String']> + shippingZoneCode?: Maybe<Scalars['String']> + isValid?: Maybe<Scalars['Boolean']> + messages?: Maybe<Array<Scalars['String']>> + data?: Maybe<Scalars['Object']> + currencyCode?: Maybe<Scalars['String']> + price?: Maybe<Scalars['Float']> +} + +export type ShippingRate_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ShippingRateInput = { + shippingMethodCode?: Maybe<Scalars['String']> + shippingMethodName?: Maybe<Scalars['String']> + shippingZoneCode?: Maybe<Scalars['String']> + isValid?: Maybe<Scalars['Boolean']> + messages?: Maybe<Array<Scalars['String']>> + data?: Maybe<Scalars['Object']> + currencyCode?: Maybe<Scalars['String']> + price?: Maybe<Scalars['Float']> +} + +export type ShopperNotes = { + __typename?: 'ShopperNotes' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ShopperNotes> + giftMessage?: Maybe<Scalars['String']> + comments?: Maybe<Scalars['String']> + deliveryInstructions?: Maybe<Scalars['String']> +} + +export type ShopperNotes_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ShopperNotesInput = { + giftMessage?: Maybe<Scalars['String']> + comments?: Maybe<Scalars['String']> + deliveryInstructions?: Maybe<Scalars['String']> +} + +export type SolrDebugInfo = { + __typename?: 'SolrDebugInfo' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<SolrDebugInfo> + searchTuningRuleCode?: Maybe<Scalars['String']> + boostedProductCodes?: Maybe<Array<Scalars['String']>> + blockedProductCodes?: Maybe<Array<Scalars['String']>> + boostQueries?: Maybe<Array<Scalars['String']>> + boostFunctions?: Maybe<Array<Scalars['String']>> +} + +export type SolrDebugInfo_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type SplitShipmentsObjectInput = { + originalShipment?: Maybe<ShipmentInput> + newShipments?: Maybe<Array<Maybe<ShipmentInput>>> +} + +export type SubPayment = { + __typename?: 'SubPayment' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<SubPayment> + status?: Maybe<Scalars['String']> + amountCollected: Scalars['Float'] + amountCredited: Scalars['Float'] + amountRequested: Scalars['Float'] + amountRefunded: Scalars['Float'] + target?: Maybe<PaymentActionTarget> +} + +export type SubPayment_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type SubPaymentInput = { + status?: Maybe<Scalars['String']> + amountCollected: Scalars['Float'] + amountCredited: Scalars['Float'] + amountRequested: Scalars['Float'] + amountRefunded: Scalars['Float'] + target?: Maybe<PaymentActionTargetInput> +} + +export type SuggestedDiscount = { + __typename?: 'SuggestedDiscount' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<SuggestedDiscount> + productCode?: Maybe<Scalars['String']> + autoAdd?: Maybe<Scalars['Boolean']> + discountId: Scalars['Int'] + hasMultipleProducts?: Maybe<Scalars['Boolean']> + hasOptions?: Maybe<Scalars['Boolean']> +} + +export type SuggestedDiscount_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type SuggestedDiscountInput = { + productCode?: Maybe<Scalars['String']> + autoAdd?: Maybe<Scalars['Boolean']> + discountId: Scalars['Int'] + hasMultipleProducts?: Maybe<Scalars['Boolean']> + hasOptions?: Maybe<Scalars['Boolean']> +} + +export type SuggestionEvent = { + __typename?: 'SuggestionEvent' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<SuggestionEvent> + causeID: Scalars['Int'] + errors: Array<Scalars['String']> + name: Scalars['String'] + type?: Maybe<TypeEnum> +} + +export type SuggestionEvent_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type SuggestionLog = { + __typename?: 'SuggestionLog' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<SuggestionLog> + created: Scalars['DateTime'] + creatorUsername: Scalars['String'] + environmentID: Scalars['Int'] + events: Array<Maybe<SuggestionEvent>> + externalResponseID: Scalars['String'] + orderID: Scalars['Int'] + pathString: Scalars['String'] + persisted?: Maybe<Scalars['Boolean']> + siteID: Scalars['Int'] + suggestionID: Scalars['Int'] + tenantID: Scalars['Int'] + updated: Scalars['DateTime'] + updaterUsername: Scalars['String'] +} + +export type SuggestionLog_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type SuggestionRequestInput = { + bundlingStrategy?: Maybe<BundlingStrategyEnum> + customData: Scalars['Object'] + environmentID: Scalars['Int'] + exclusionListLocationCode: Array<Maybe<ExclusionListEntryLocationCodeInput>> + externalResponseID: Scalars['String'] + fraud: Scalars['Int'] + inventoryRequestType?: Maybe<InventoryRequestTypeEnum> + isExpress?: Maybe<Scalars['Boolean']> + items: Array<Maybe<OrderItemInput>> + locationCodeWhiteList: Array<Scalars['String']> + numShipmentsNotInRequest: Scalars['Int'] + orderID: Scalars['Int'] + orderType?: Maybe<OrderTypeEnum> + pickupLocationCode: Scalars['String'] + shippingAddress?: Maybe<ShippingAddressInput> + total: Scalars['Float'] +} + +export type SuggestionResponse = { + __typename?: 'SuggestionResponse' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<SuggestionResponse> + assignmentSuggestions: Scalars['Object'] + availableLocations: Array<Scalars['Int']> + externalResponseID: Scalars['String'] + responseID: Scalars['Int'] + stateChangeSuggestions: Scalars['Object'] + suggestionLog?: Maybe<SuggestionLog> +} + +export type SuggestionResponse_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type TargetRule = { + __typename?: 'TargetRule' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<TargetRule> + code?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + domain?: Maybe<Scalars['String']> + expression?: Maybe<Scalars['String']> +} + +export type TargetRule_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type TargetRuleCollection = { + __typename?: 'TargetRuleCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<TargetRuleCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<TargetRule>>> +} + +export type TargetRuleCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type TargetRuleInput = { + code?: Maybe<Scalars['String']> + description?: Maybe<Scalars['String']> + domain?: Maybe<Scalars['String']> + expression?: Maybe<Scalars['String']> +} + +export type TaskInput = { + __typename?: 'TaskInput' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<TaskInput> + helpMessage?: Maybe<Scalars['String']> + label?: Maybe<Scalars['String']> + maxLength?: Maybe<Scalars['Int']> + maximum: Scalars['Float'] + minLength?: Maybe<Scalars['Int']> + minimum: Scalars['Float'] + name?: Maybe<Scalars['String']> + options?: Maybe<Array<Scalars['Object']>> + pattern?: Maybe<Scalars['String']> + required?: Maybe<Scalars['Boolean']> + type?: Maybe<Scalars['String']> +} + +export type TaskInput_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type TaskInputInput = { + helpMessage?: Maybe<Scalars['String']> + label?: Maybe<Scalars['String']> + maxLength?: Maybe<Scalars['Int']> + maximum: Scalars['Float'] + minLength?: Maybe<Scalars['Int']> + minimum: Scalars['Float'] + name?: Maybe<Scalars['String']> + options?: Maybe<Array<Scalars['Object']>> + pattern?: Maybe<Scalars['String']> + required?: Maybe<Scalars['Boolean']> + type?: Maybe<Scalars['String']> +} + +export type ThresholdMessage = { + __typename?: 'ThresholdMessage' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ThresholdMessage> + discountId: Scalars['Int'] + message?: Maybe<Scalars['String']> + thresholdValue: Scalars['Float'] + showOnCheckout?: Maybe<Scalars['Boolean']> + showInCart?: Maybe<Scalars['Boolean']> + requiresCouponCode?: Maybe<Scalars['Boolean']> +} + +export type ThresholdMessage_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ThresholdMessageInput = { + discountId: Scalars['Int'] + message?: Maybe<Scalars['String']> + thresholdValue: Scalars['Float'] + showOnCheckout?: Maybe<Scalars['Boolean']> + showInCart?: Maybe<Scalars['Boolean']> + requiresCouponCode?: Maybe<Scalars['Boolean']> +} + +export type Tracking = { + __typename?: 'Tracking' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Tracking> + attributes?: Maybe<Scalars['Object']> + number?: Maybe<Scalars['String']> + url?: Maybe<Scalars['String']> +} + +export type Tracking_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type TrackingInput = { + attributes?: Maybe<Scalars['Object']> + number?: Maybe<Scalars['String']> + url?: Maybe<Scalars['String']> +} + +export type Transaction = { + __typename?: 'Transaction' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Transaction> + transactionId?: Maybe<Scalars['String']> + visitId?: Maybe<Scalars['String']> + transactionType?: Maybe<Scalars['String']> + interactionType?: Maybe<Scalars['String']> + amount: Scalars['Float'] + date: Scalars['DateTime'] + currencyCode?: Maybe<Scalars['String']> +} + +export type Transaction_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type TransactionInput = { + transactionId?: Maybe<Scalars['String']> + visitId?: Maybe<Scalars['String']> + transactionType?: Maybe<Scalars['String']> + interactionType?: Maybe<Scalars['String']> + amount: Scalars['Float'] + date: Scalars['DateTime'] + currencyCode?: Maybe<Scalars['String']> +} + +export enum TypeEnum { + NewRequest = 'NEW_REQUEST', + RouteSelected = 'ROUTE_SELECTED', + MakeLocationsAvailable = 'MAKE_LOCATIONS_AVAILABLE', + NoRouteFound = 'NO_ROUTE_FOUND', + RemovedInactiveLocations = 'REMOVED_INACTIVE_LOCATIONS', + RemovedOnHoldLocations = 'REMOVED_ON_HOLD_LOCATIONS', + RemovedOverfulfilledLocations = 'REMOVED_OVERFULFILLED_LOCATIONS', + Group = 'GROUP', + GroupFilter = 'GROUP_FILTER', + GroupSort = 'GROUP_SORT', + Filter = 'FILTER', + Sort = 'SORT', + AfterAction = 'AFTER_ACTION', + FoundFullOrderLocation = 'FOUND_FULL_ORDER_LOCATION', + Response = 'RESPONSE', + AfterActionSort = 'AFTER_ACTION_SORT', + DefaultResponse = 'DEFAULT_RESPONSE', + MaxSplitsExceeded = 'MAX_SPLITS_EXCEEDED', + AutoAssignLimitExceeded = 'AUTO_ASSIGN_LIMIT_EXCEEDED', + InventoryRequest = 'INVENTORY_REQUEST', + RemovedInternationalLocations = 'REMOVED_INTERNATIONAL_LOCATIONS', +} + +export type UserRole = { + __typename?: 'UserRole' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<UserRole> + userId?: Maybe<Scalars['String']> + assignedInScope?: Maybe<UserScope> + roleId: Scalars['Int'] + roleName?: Maybe<Scalars['String']> + roleTags?: Maybe<Array<Scalars['String']>> + auditInfo?: Maybe<CuAuditInfo> +} + +export type UserRole_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type UserRoleCollection = { + __typename?: 'UserRoleCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<UserRoleCollection> + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<UserRole>>> +} + +export type UserRoleCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type UserRoleInput = { + userId?: Maybe<Scalars['String']> + assignedInScope?: Maybe<UserScopeInput> + roleId: Scalars['Int'] + roleName?: Maybe<Scalars['String']> + roleTags?: Maybe<Array<Scalars['String']>> + auditInfo?: Maybe<CuAuditInfoInput> +} + +export type UserScope = { + __typename?: 'UserScope' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<UserScope> + type?: Maybe<Scalars['String']> + id?: Maybe<Scalars['Int']> + name?: Maybe<Scalars['String']> +} + +export type UserScope_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type UserScopeInput = { + type?: Maybe<Scalars['String']> + id?: Maybe<Scalars['Int']> + name?: Maybe<Scalars['String']> +} + +export type ValidationMessage = { + __typename?: 'ValidationMessage' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ValidationMessage> + severity?: Maybe<Scalars['String']> + source?: Maybe<Scalars['String']> + message?: Maybe<Scalars['String']> + validationType?: Maybe<Scalars['String']> + sourceId?: Maybe<Scalars['String']> +} + +export type ValidationMessage_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type VariationOption = { + __typename?: 'VariationOption' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<VariationOption> + valueSequence: Scalars['Int'] + attributeFQN?: Maybe<Scalars['String']> + value?: Maybe<Scalars['Object']> +} + +export type VariationOption_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type VariationSummary = { + __typename?: 'VariationSummary' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<VariationSummary> + productCode?: Maybe<Scalars['String']> + options?: Maybe<Array<Maybe<VariationOption>>> + inventoryInfo?: Maybe<ProductInventoryInfo> +} + +export type VariationSummary_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type View = { + __typename?: 'View' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<View> + name?: Maybe<Scalars['String']> + usages?: Maybe<Array<Scalars['String']>> + metadata?: Maybe<Scalars['Object']> + isVisibleInStorefront?: Maybe<Scalars['Boolean']> + filter?: Maybe<Scalars['String']> + includeInactiveMode?: Maybe<Scalars['String']> + isAdminDefault?: Maybe<Scalars['Boolean']> + fields?: Maybe<Array<Maybe<ViewField>>> +} + +export type View_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ViewField = { + __typename?: 'ViewField' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<ViewField> + name?: Maybe<Scalars['String']> + target?: Maybe<Scalars['String']> +} + +export type ViewField_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type ViewFieldInput = { + name?: Maybe<Scalars['String']> + target?: Maybe<Scalars['String']> +} + +export type ViewInput = { + name?: Maybe<Scalars['String']> + usages?: Maybe<Array<Scalars['String']>> + metadata?: Maybe<Scalars['Object']> + isVisibleInStorefront?: Maybe<Scalars['Boolean']> + filter?: Maybe<Scalars['String']> + includeInactiveMode?: Maybe<Scalars['String']> + isAdminDefault?: Maybe<Scalars['Boolean']> + fields?: Maybe<Array<Maybe<ViewFieldInput>>> +} + +export type Wishlist = { + __typename?: 'Wishlist' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<Wishlist> + customerAccountId?: Maybe<Scalars['Int']> + typeTag?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + items?: Maybe<Array<Maybe<WishlistItem>>> + privacyType?: Maybe<Scalars['String']> + sortOrder?: Maybe<Scalars['Int']> + version?: Maybe<Scalars['String']> + isImport?: Maybe<Scalars['Boolean']> + importDate?: Maybe<Scalars['DateTime']> + externalId?: Maybe<Scalars['String']> + userId?: Maybe<Scalars['String']> + id?: Maybe<Scalars['String']> + tenantId?: Maybe<Scalars['Int']> + siteId?: Maybe<Scalars['Int']> + channelCode?: Maybe<Scalars['String']> + currencyCode?: Maybe<Scalars['String']> + visitId?: Maybe<Scalars['String']> + webSessionId?: Maybe<Scalars['String']> + customerInteractionType?: Maybe<Scalars['String']> + fulfillmentInfo?: Maybe<FulfillmentInfo> + orderDiscounts?: Maybe<Array<Maybe<CrAppliedDiscount>>> + suggestedDiscounts?: Maybe<Array<Maybe<SuggestedDiscount>>> + rejectedDiscounts?: Maybe<Array<Maybe<SuggestedDiscount>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + subtotal?: Maybe<Scalars['Float']> + discountedSubtotal?: Maybe<Scalars['Float']> + discountTotal?: Maybe<Scalars['Float']> + discountedTotal?: Maybe<Scalars['Float']> + shippingTotal?: Maybe<Scalars['Float']> + shippingSubTotal?: Maybe<Scalars['Float']> + shippingTaxTotal?: Maybe<Scalars['Float']> + handlingTaxTotal?: Maybe<Scalars['Float']> + itemTaxTotal?: Maybe<Scalars['Float']> + taxTotal?: Maybe<Scalars['Float']> + feeTotal?: Maybe<Scalars['Float']> + total?: Maybe<Scalars['Float']> + lineItemSubtotalWithOrderAdjustments?: Maybe<Scalars['Float']> + shippingAmountBeforeDiscountsAndAdjustments?: Maybe<Scalars['Float']> + lastValidationDate?: Maybe<Scalars['DateTime']> + expirationDate?: Maybe<Scalars['DateTime']> + changeMessages?: Maybe<Array<Maybe<ChangeMessage>>> + extendedProperties?: Maybe<Array<Maybe<ExtendedProperty>>> + discountThresholdMessages?: Maybe<Array<Maybe<ThresholdMessage>>> + auditInfo?: Maybe<CrAuditInfo> +} + +export type Wishlist_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type WishlistCollection = { + __typename?: 'WishlistCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<WishlistCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<Wishlist>>> +} + +export type WishlistCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type WishlistInput = { + customerAccountId?: Maybe<Scalars['Int']> + typeTag?: Maybe<Scalars['String']> + name?: Maybe<Scalars['String']> + items?: Maybe<Array<Maybe<WishlistItemInput>>> + privacyType?: Maybe<Scalars['String']> + sortOrder?: Maybe<Scalars['Int']> + version?: Maybe<Scalars['String']> + isImport?: Maybe<Scalars['Boolean']> + importDate?: Maybe<Scalars['DateTime']> + externalId?: Maybe<Scalars['String']> + userId?: Maybe<Scalars['String']> + id?: Maybe<Scalars['String']> + tenantId?: Maybe<Scalars['Int']> + siteId?: Maybe<Scalars['Int']> + channelCode?: Maybe<Scalars['String']> + currencyCode?: Maybe<Scalars['String']> + visitId?: Maybe<Scalars['String']> + webSessionId?: Maybe<Scalars['String']> + customerInteractionType?: Maybe<Scalars['String']> + fulfillmentInfo?: Maybe<FulfillmentInfoInput> + orderDiscounts?: Maybe<Array<Maybe<CrAppliedDiscountInput>>> + suggestedDiscounts?: Maybe<Array<Maybe<SuggestedDiscountInput>>> + rejectedDiscounts?: Maybe<Array<Maybe<SuggestedDiscountInput>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + subtotal?: Maybe<Scalars['Float']> + discountedSubtotal?: Maybe<Scalars['Float']> + discountTotal?: Maybe<Scalars['Float']> + discountedTotal?: Maybe<Scalars['Float']> + shippingTotal?: Maybe<Scalars['Float']> + shippingSubTotal?: Maybe<Scalars['Float']> + shippingTaxTotal?: Maybe<Scalars['Float']> + handlingTaxTotal?: Maybe<Scalars['Float']> + itemTaxTotal?: Maybe<Scalars['Float']> + taxTotal?: Maybe<Scalars['Float']> + feeTotal?: Maybe<Scalars['Float']> + total?: Maybe<Scalars['Float']> + lineItemSubtotalWithOrderAdjustments?: Maybe<Scalars['Float']> + shippingAmountBeforeDiscountsAndAdjustments?: Maybe<Scalars['Float']> + lastValidationDate?: Maybe<Scalars['DateTime']> + expirationDate?: Maybe<Scalars['DateTime']> + changeMessages?: Maybe<Array<Maybe<ChangeMessageInput>>> + extendedProperties?: Maybe<Array<Maybe<ExtendedPropertyInput>>> + discountThresholdMessages?: Maybe<Array<Maybe<ThresholdMessageInput>>> + auditInfo?: Maybe<CrAuditInfoInput> +} + +export type WishlistItem = { + __typename?: 'WishlistItem' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<WishlistItem> + id?: Maybe<Scalars['String']> + comments?: Maybe<Scalars['String']> + priorityType?: Maybe<Scalars['String']> + purchasableStatusType?: Maybe<Scalars['String']> + localeCode?: Maybe<Scalars['String']> + purchaseLocation?: Maybe<Scalars['String']> + lineId?: Maybe<Scalars['Int']> + product?: Maybe<CrProduct> + quantity: Scalars['Int'] + isRecurring?: Maybe<Scalars['Boolean']> + isTaxable?: Maybe<Scalars['Boolean']> + subtotal?: Maybe<Scalars['Float']> + extendedTotal?: Maybe<Scalars['Float']> + taxableTotal?: Maybe<Scalars['Float']> + discountTotal?: Maybe<Scalars['Float']> + discountedTotal?: Maybe<Scalars['Float']> + itemTaxTotal?: Maybe<Scalars['Float']> + shippingTaxTotal?: Maybe<Scalars['Float']> + shippingTotal?: Maybe<Scalars['Float']> + handlingAmount?: Maybe<Scalars['Float']> + feeTotal?: Maybe<Scalars['Float']> + total?: Maybe<Scalars['Float']> + unitPrice?: Maybe<CommerceUnitPrice> + productDiscount?: Maybe<AppliedLineItemProductDiscount> + productDiscounts?: Maybe<Array<Maybe<AppliedLineItemProductDiscount>>> + shippingDiscounts?: Maybe<Array<Maybe<AppliedLineItemShippingDiscount>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + auditInfo?: Maybe<CrAuditInfo> + shippingAmountBeforeDiscountsAndAdjustments?: Maybe<Scalars['Float']> + weightedOrderAdjustment?: Maybe<Scalars['Float']> + weightedOrderDiscount?: Maybe<Scalars['Float']> + adjustedLineItemSubtotal?: Maybe<Scalars['Float']> + totalWithoutWeightedShippingAndHandling?: Maybe<Scalars['Float']> + weightedOrderTax?: Maybe<Scalars['Float']> + weightedOrderShipping?: Maybe<Scalars['Float']> + weightedOrderShippingDiscount?: Maybe<Scalars['Float']> + weightedOrderShippingManualAdjustment?: Maybe<Scalars['Float']> + weightedOrderShippingTax?: Maybe<Scalars['Float']> + weightedOrderHandlingFee?: Maybe<Scalars['Float']> + weightedOrderHandlingFeeTax?: Maybe<Scalars['Float']> + weightedOrderHandlingFeeDiscount?: Maybe<Scalars['Float']> + weightedOrderDuty?: Maybe<Scalars['Float']> + totalWithWeightedShippingAndHandling?: Maybe<Scalars['Float']> + weightedOrderHandlingAdjustment?: Maybe<Scalars['Float']> + autoAddDiscountId?: Maybe<Scalars['Int']> + isAssemblyRequired?: Maybe<Scalars['Boolean']> + childItemIds?: Maybe<Array<Scalars['String']>> + parentItemId?: Maybe<Scalars['String']> +} + +export type WishlistItem_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type WishlistItemCollection = { + __typename?: 'WishlistItemCollection' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<WishlistItemCollection> + startIndex: Scalars['Int'] + pageSize: Scalars['Int'] + pageCount: Scalars['Int'] + totalCount: Scalars['Int'] + items?: Maybe<Array<Maybe<WishlistItem>>> +} + +export type WishlistItemCollection_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type WishlistItemInput = { + id?: Maybe<Scalars['String']> + comments?: Maybe<Scalars['String']> + priorityType?: Maybe<Scalars['String']> + purchasableStatusType?: Maybe<Scalars['String']> + localeCode?: Maybe<Scalars['String']> + purchaseLocation?: Maybe<Scalars['String']> + lineId?: Maybe<Scalars['Int']> + product?: Maybe<CrProductInput> + quantity: Scalars['Int'] + isRecurring?: Maybe<Scalars['Boolean']> + isTaxable?: Maybe<Scalars['Boolean']> + subtotal?: Maybe<Scalars['Float']> + extendedTotal?: Maybe<Scalars['Float']> + taxableTotal?: Maybe<Scalars['Float']> + discountTotal?: Maybe<Scalars['Float']> + discountedTotal?: Maybe<Scalars['Float']> + itemTaxTotal?: Maybe<Scalars['Float']> + shippingTaxTotal?: Maybe<Scalars['Float']> + shippingTotal?: Maybe<Scalars['Float']> + handlingAmount?: Maybe<Scalars['Float']> + feeTotal?: Maybe<Scalars['Float']> + total?: Maybe<Scalars['Float']> + unitPrice?: Maybe<CommerceUnitPriceInput> + productDiscount?: Maybe<AppliedLineItemProductDiscountInput> + productDiscounts?: Maybe<Array<Maybe<AppliedLineItemProductDiscountInput>>> + shippingDiscounts?: Maybe<Array<Maybe<AppliedLineItemShippingDiscountInput>>> + data?: Maybe<Scalars['Object']> + taxData?: Maybe<Scalars['Object']> + auditInfo?: Maybe<CrAuditInfoInput> + shippingAmountBeforeDiscountsAndAdjustments?: Maybe<Scalars['Float']> + weightedOrderAdjustment?: Maybe<Scalars['Float']> + weightedOrderDiscount?: Maybe<Scalars['Float']> + adjustedLineItemSubtotal?: Maybe<Scalars['Float']> + totalWithoutWeightedShippingAndHandling?: Maybe<Scalars['Float']> + weightedOrderTax?: Maybe<Scalars['Float']> + weightedOrderShipping?: Maybe<Scalars['Float']> + weightedOrderShippingDiscount?: Maybe<Scalars['Float']> + weightedOrderShippingManualAdjustment?: Maybe<Scalars['Float']> + weightedOrderShippingTax?: Maybe<Scalars['Float']> + weightedOrderHandlingFee?: Maybe<Scalars['Float']> + weightedOrderHandlingFeeTax?: Maybe<Scalars['Float']> + weightedOrderHandlingFeeDiscount?: Maybe<Scalars['Float']> + weightedOrderDuty?: Maybe<Scalars['Float']> + totalWithWeightedShippingAndHandling?: Maybe<Scalars['Float']> + weightedOrderHandlingAdjustment?: Maybe<Scalars['Float']> + autoAddDiscountId?: Maybe<Scalars['Int']> + isAssemblyRequired?: Maybe<Scalars['Boolean']> + childItemIds?: Maybe<Array<Scalars['String']>> + parentItemId?: Maybe<Scalars['String']> +} + +export type WorkflowState = { + __typename?: 'WorkflowState' + _get?: Maybe<Scalars['AnyScalar']> + _root?: Maybe<WorkflowState> + attributes?: Maybe<Scalars['Object']> + auditInfo?: Maybe<CrAuditInfo> + completedDate?: Maybe<Scalars['DateTime']> + processInstanceId?: Maybe<Scalars['String']> + shipmentState?: Maybe<Scalars['String']> + taskList?: Maybe<Array<Maybe<FulfillmentTask>>> +} + +export type WorkflowState_GetArgs = { + path: Scalars['String'] + defaultValue?: Maybe<Scalars['AnyScalar']> + allowUndefined?: Maybe<Scalars['Boolean']> +} + +export type WorkflowStateInput = { + attributes?: Maybe<Scalars['Object']> + auditInfo?: Maybe<CrAuditInfoInput> + completedDate?: Maybe<Scalars['DateTime']> + processInstanceId?: Maybe<Scalars['String']> + shipmentState?: Maybe<Scalars['String']> + taskList?: Maybe<Array<Maybe<FulfillmentTaskInput>>> +} diff --git a/framework/kibocommerce/schema.graphql b/framework/kibocommerce/schema.graphql new file mode 100644 index 000000000..8d02ae535 --- /dev/null +++ b/framework/kibocommerce/schema.graphql @@ -0,0 +1,9129 @@ +input AccountPasswordInfoCollectionInput { + totalCount: Int! + items: [AccountPasswordInfoInput] +} + +input AccountPasswordInfoInput { + accountId: Int! + userId: String + unlockAccount: Boolean = false + passwordInfo: PasswordInfoInput +} + +type AccountSalesRep { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: AccountSalesRep + accountId: Int! + adminUserId: String +} + +input AccountSalesRepInput { + accountId: Int! + adminUserId: String +} + +type ActiveDateRange { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ActiveDateRange + startDate: DateTime + endDate: DateTime +} + +input ActiveDateRangeInput { + startDate: DateTime + endDate: DateTime +} + +input AddressValidationRequestInput { + address: CuAddressInput +} + +type AddressValidationResponse { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: AddressValidationResponse + addressCandidates: [CuAddress] +} + +type Adjustment { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Adjustment + amount: Float + description: String + internalComment: String +} + +input AdjustmentInput { + amount: Float + description: String + internalComment: String +} + +""" +The `AnyScalar` type allows any scalar value by examining the input and passing the serialize, parseValue, and parseLiteral operations to their respective types. +""" +scalar AnyScalar + +type AppliedLineItemProductDiscount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: AppliedLineItemProductDiscount + appliesToSalePrice: Boolean + discountQuantity: Int! + productQuantity: Int + impactPerUnit: Float +} + +input AppliedLineItemProductDiscountInput { + appliesToSalePrice: Boolean = false + discountQuantity: Int! + productQuantity: Int + impactPerUnit: Float +} + +type AppliedLineItemShippingDiscount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: AppliedLineItemShippingDiscount + methodCode: String + discount: CrAppliedDiscount + discountQuantity: Int! + impactPerUnit: Float! +} + +input AppliedLineItemShippingDiscountInput { + methodCode: String + discount: CrAppliedDiscountInput + discountQuantity: Int! + impactPerUnit: Float! +} + +type AttributeDetail { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: AttributeDetail + valueType: String + inputType: String + dataType: String + usageType: String + dataTypeSequence: Int! + name: String + description: String + validation: PrAttributeValidation + searchableInStorefront: Boolean + searchDisplayValue: Boolean + allowFilteringAndSortingInStorefront: Boolean + indexValueWithCase: Boolean + customWeightInStorefrontSearch: Boolean + displayIntention: String +} + +type AttributeVocabularyValueDisplayInfo { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: AttributeVocabularyValueDisplayInfo + cmsId: String + imageUrl: String + colorValue: String +} + +type AuditRecord { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: AuditRecord + id: String + changes: [AuditRecordChange] + auditInfo: CrAuditInfo +} + +type AuditRecordChange { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: AuditRecordChange + type: String + path: String + fields: [AuditRecordChangeField] +} + +type AuditRecordChangeField { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: AuditRecordChangeField + name: String + oldValue: String + newValue: String +} + +input AuditRecordChangeFieldInput { + name: String + oldValue: String + newValue: String +} + +input AuditRecordChangeInput { + type: String + path: String + fields: [AuditRecordChangeFieldInput] +} + +input AuditRecordInput { + id: String + changes: [AuditRecordChangeInput] + auditInfo: CrAuditInfoInput +} + +type B2BAccount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: B2BAccount + users: [B2BUser] + isActive: Boolean + priceList: String + salesReps: [AccountSalesRep] + rootAccountId: Int + parentAccountId: Int + approvalStatus: String + id: Int! + customerSet: String + commerceSummary: CommerceSummary + contacts: [CustomerContact] + companyOrOrganization: String + notes: [CustomerNote] + attributes: [CustomerAttribute] + segments: [CustomerSegment] + taxId: String + externalId: String + auditInfo: CuAuditInfo + customerSinceDate: DateTime + accountType: String +} + +type B2BAccountCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: B2BAccountCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [B2BAccount] +} + +input B2BAccountInput { + users: [B2BUserInput] + isActive: Boolean = false + priceList: String + salesReps: [AccountSalesRepInput] + rootAccountId: Int + parentAccountId: Int + approvalStatus: String + id: Int! + customerSet: String + commerceSummary: CommerceSummaryInput + contacts: [CustomerContactInput] + companyOrOrganization: String + notes: [CustomerNoteInput] + attributes: [CustomerAttributeInput] + segments: [CustomerSegmentInput] + taxId: String + externalId: String + auditInfo: CuAuditInfoInput + customerSinceDate: DateTime + accountType: String +} + +type B2BUser { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: B2BUser + emailAddress: String + userName: String + firstName: String + lastName: String + localeCode: String + userId: String + roles: [UserRole] + isLocked: Boolean + isActive: Boolean + isRemoved: Boolean + acceptsMarketing: Boolean + hasExternalPassword: Boolean +} + +input B2BUserAndAuthInfoInput { + b2BUser: B2BUserInput + externalPassword: String + isImport: Boolean = false +} + +type B2BUserCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: B2BUserCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [B2BUser] +} + +input B2BUserInput { + emailAddress: String + userName: String + firstName: String + lastName: String + localeCode: String + userId: String + roles: [UserRoleInput] + isLocked: Boolean = false + isActive: Boolean = false + isRemoved: Boolean = false + acceptsMarketing: Boolean = false + hasExternalPassword: Boolean = false +} + +type BillingInfo { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: BillingInfo + paymentType: String + paymentWorkflow: String + billingContact: Contact + isSameBillingShippingAddress: Boolean + card: PaymentCard + token: PaymentToken + purchaseOrder: PurchaseOrderPayment + check: CheckPayment + auditInfo: CrAuditInfo + storeCreditCode: String + storeCreditType: String + customCreditType: String + externalTransactionId: String + data: Object +} + +input BillingInfoInput { + paymentType: String + paymentWorkflow: String + billingContact: ContactInput + isSameBillingShippingAddress: Boolean = false + card: PaymentCardInput + token: PaymentTokenInput + purchaseOrder: PurchaseOrderPaymentInput + check: CheckPaymentInput + auditInfo: CrAuditInfoInput + storeCreditCode: String + storeCreditType: String + customCreditType: String + externalTransactionId: String + data: Object +} + +type BoxType { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: BoxType + name: String + height: Float + width: Float + length: Float +} + +type BpmConfiguration { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: BpmConfiguration + shipmentType: String + workflowContainerId: String + workflowProcessId: String +} + +type BundledProductSummary { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: BundledProductSummary + productShortDescription: String + productName: String + productCode: String + goodsType: String + quantity: Int! + measurements: PrPackageMeasurements + isPackagedStandAlone: Boolean + inventoryInfo: ProductInventoryInfo + optionAttributeFQN: String + optionValue: Object + creditValue: Float + productType: String +} + +enum BundlingStrategyEnum { + ITEM_DEPENDENCY +} + +type CancelReasonCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CancelReasonCollection + totalCount: Int! + items: [CancelReasonItem] +} + +type CancelReasonItem { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CancelReasonItem + reasonCode: String + name: String + needsMoreInfo: Boolean +} + +type CanceledItem { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CanceledItem + canceledReason: CanceledReason + auditInfo: CrAuditInfo + lineId: Int! + originalOrderItemId: String + parentId: String + productCode: String + variationProductCode: String + optionAttributeFQN: String + name: String + fulfillmentLocationCode: String + imageUrl: String + isTaxable: Boolean + quantity: Int! + unitPrice: Float! + actualPrice: Float! + overridePrice: Float + itemDiscount: Float! + lineItemCost: Float! + itemTax: Float! + shipping: Float! + shippingDiscount: Float! + shippingTax: Float! + handling: Float! + handlingDiscount: Float! + handlingTax: Float! + duty: Float! + isPackagedStandAlone: Boolean + readyForPickupQuantity: Int + backorderReleaseDate: DateTime + measurements: CrPackageMeasurements + options: [CrProductOption] + data: Object + taxData: Object + weightedShipmentAdjustment: Float! + weightedLineItemTaxAdjustment: Float! + weightedShippingAdjustment: Float! + weightedShippingTaxAdjustment: Float! + weightedHandlingAdjustment: Float! + weightedHandlingTaxAdjustment: Float! + weightedDutyAdjustment: Float! + taxableShipping: Float! + taxableLineItemCost: Float! + taxableHandling: Float! + fulfillmentFields: [FulfillmentField] + isAssemblyRequired: Boolean + parentItemId: String + childItemIds: [String!] + giftCards: [GiftCard] +} + +input CanceledItemInput { + canceledReason: CanceledReasonInput + auditInfo: CrAuditInfoInput + lineId: Int! + originalOrderItemId: String + parentId: String + productCode: String + variationProductCode: String + optionAttributeFQN: String + name: String + fulfillmentLocationCode: String + imageUrl: String + isTaxable: Boolean = false + quantity: Int! + unitPrice: Float! + actualPrice: Float! + overridePrice: Float + itemDiscount: Float! + lineItemCost: Float! + itemTax: Float! + shipping: Float! + shippingDiscount: Float! + shippingTax: Float! + handling: Float! + handlingDiscount: Float! + handlingTax: Float! + duty: Float! + isPackagedStandAlone: Boolean = false + readyForPickupQuantity: Int + backorderReleaseDate: DateTime + measurements: CrPackageMeasurementsInput + options: [CrProductOptionInput] + data: Object + taxData: Object + weightedShipmentAdjustment: Float! + weightedLineItemTaxAdjustment: Float! + weightedShippingAdjustment: Float! + weightedShippingTaxAdjustment: Float! + weightedHandlingAdjustment: Float! + weightedHandlingTaxAdjustment: Float! + weightedDutyAdjustment: Float! + taxableShipping: Float! + taxableLineItemCost: Float! + taxableHandling: Float! + fulfillmentFields: [FulfillmentFieldInput] + isAssemblyRequired: Boolean = false + parentItemId: String + childItemIds: [String!] + giftCards: [GiftCardInput] +} + +type CanceledReason { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CanceledReason + reasonCode: String + description: String + moreInfo: String +} + +input CanceledReasonInput { + reasonCode: String + description: String + moreInfo: String +} + +type CapturableShipmentSummary { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CapturableShipmentSummary + shipmentNumber: Int! + shipmentTotal: Float! + amountApplied: Float! +} + +input CapturableShipmentSummaryInput { + shipmentNumber: Int! + shipmentTotal: Float! + amountApplied: Float! +} + +type Card { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Card + id: String + nameOnCard: String + cardType: String + expireMonth: Int + expireYear: Int + cardNumberPart: String + contactId: Int! + isDefaultPayMethod: Boolean +} + +type CardCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CardCollection + totalCount: Int! + items: [Card] +} + +input CardInput { + id: String + nameOnCard: String + cardType: String + expireMonth: Int + expireYear: Int + cardNumberPart: String + contactId: Int! + isDefaultPayMethod: Boolean = false +} + +type Carrier { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Carrier + carrierType: String + isEnabled: Boolean + shippingMethodMappings: ShippingMethodMappings +} + +type CarrierServiceGenerateLabelResponse { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CarrierServiceGenerateLabelResponse + imageURL: String + integratorId: String + price: Float + trackingNumber: String +} + +type Cart { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Cart + items: [CartItem] + couponCodes: [String!] + invalidCoupons: [InvalidCoupon] + priceListCode: String + cartMessage: CartMessage + cartMessages: [CartMessage] + handlingAmount: Float + handlingSubTotal: Float + handlingTotal: Float + userId: String + id: String + tenantId: Int + siteId: Int + channelCode: String + currencyCode: String + visitId: String + webSessionId: String + customerInteractionType: String + fulfillmentInfo: FulfillmentInfo + orderDiscounts: [CrAppliedDiscount] + suggestedDiscounts: [SuggestedDiscount] + rejectedDiscounts: [SuggestedDiscount] + data: Object + taxData: Object + subtotal: Float + discountedSubtotal: Float + discountTotal: Float + discountedTotal: Float + shippingTotal: Float + shippingSubTotal: Float + shippingTaxTotal: Float + handlingTaxTotal: Float + itemTaxTotal: Float + taxTotal: Float + feeTotal: Float + total: Float + lineItemSubtotalWithOrderAdjustments: Float + shippingAmountBeforeDiscountsAndAdjustments: Float + lastValidationDate: DateTime + expirationDate: DateTime + changeMessages: [ChangeMessage] + extendedProperties: [ExtendedProperty] + discountThresholdMessages: [ThresholdMessage] + auditInfo: CrAuditInfo +} + +type CartChangeMessageCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CartChangeMessageCollection + totalCount: Int! + items: [ChangeMessage] +} + +input CartInput { + items: [CartItemInput] + couponCodes: [String!] + invalidCoupons: [InvalidCouponInput] + priceListCode: String + cartMessage: CartMessageInput + cartMessages: [CartMessageInput] + handlingAmount: Float + handlingSubTotal: Float + handlingTotal: Float + userId: String + id: String + tenantId: Int + siteId: Int + channelCode: String + currencyCode: String + visitId: String + webSessionId: String + customerInteractionType: String + fulfillmentInfo: FulfillmentInfoInput + orderDiscounts: [CrAppliedDiscountInput] + suggestedDiscounts: [SuggestedDiscountInput] + rejectedDiscounts: [SuggestedDiscountInput] + data: Object + taxData: Object + subtotal: Float + discountedSubtotal: Float + discountTotal: Float + discountedTotal: Float + shippingTotal: Float + shippingSubTotal: Float + shippingTaxTotal: Float + handlingTaxTotal: Float + itemTaxTotal: Float + taxTotal: Float + feeTotal: Float + total: Float + lineItemSubtotalWithOrderAdjustments: Float + shippingAmountBeforeDiscountsAndAdjustments: Float + lastValidationDate: DateTime + expirationDate: DateTime + changeMessages: [ChangeMessageInput] + extendedProperties: [ExtendedPropertyInput] + discountThresholdMessages: [ThresholdMessageInput] + auditInfo: CrAuditInfoInput +} + +type CartItem { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CartItem + id: String + fulfillmentLocationCode: String + fulfillmentMethod: String + localeCode: String + purchaseLocation: String + lineId: Int + product: CrProduct + quantity: Int! + isRecurring: Boolean + isTaxable: Boolean + subtotal: Float + extendedTotal: Float + taxableTotal: Float + discountTotal: Float + discountedTotal: Float + itemTaxTotal: Float + shippingTaxTotal: Float + shippingTotal: Float + handlingAmount: Float + feeTotal: Float + total: Float + unitPrice: CommerceUnitPrice + productDiscount: AppliedLineItemProductDiscount + productDiscounts: [AppliedLineItemProductDiscount] + shippingDiscounts: [AppliedLineItemShippingDiscount] + data: Object + taxData: Object + auditInfo: CrAuditInfo + shippingAmountBeforeDiscountsAndAdjustments: Float + weightedOrderAdjustment: Float + weightedOrderDiscount: Float + adjustedLineItemSubtotal: Float + totalWithoutWeightedShippingAndHandling: Float + weightedOrderTax: Float + weightedOrderShipping: Float + weightedOrderShippingDiscount: Float + weightedOrderShippingManualAdjustment: Float + weightedOrderShippingTax: Float + weightedOrderHandlingFee: Float + weightedOrderHandlingFeeTax: Float + weightedOrderHandlingFeeDiscount: Float + weightedOrderDuty: Float + totalWithWeightedShippingAndHandling: Float + weightedOrderHandlingAdjustment: Float + autoAddDiscountId: Int + isAssemblyRequired: Boolean + childItemIds: [String!] + parentItemId: String +} + +type CartItemCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CartItemCollection + totalCount: Int! + items: [CartItem] +} + +input CartItemInput { + id: String + fulfillmentLocationCode: String + fulfillmentMethod: String + localeCode: String + purchaseLocation: String + lineId: Int + product: CrProductInput + quantity: Int! + isRecurring: Boolean = false + isTaxable: Boolean = false + subtotal: Float + extendedTotal: Float + taxableTotal: Float + discountTotal: Float + discountedTotal: Float + itemTaxTotal: Float + shippingTaxTotal: Float + shippingTotal: Float + handlingAmount: Float + feeTotal: Float + total: Float + unitPrice: CommerceUnitPriceInput + productDiscount: AppliedLineItemProductDiscountInput + productDiscounts: [AppliedLineItemProductDiscountInput] + shippingDiscounts: [AppliedLineItemShippingDiscountInput] + data: Object + taxData: Object + auditInfo: CrAuditInfoInput + shippingAmountBeforeDiscountsAndAdjustments: Float + weightedOrderAdjustment: Float + weightedOrderDiscount: Float + adjustedLineItemSubtotal: Float + totalWithoutWeightedShippingAndHandling: Float + weightedOrderTax: Float + weightedOrderShipping: Float + weightedOrderShippingDiscount: Float + weightedOrderShippingManualAdjustment: Float + weightedOrderShippingTax: Float + weightedOrderHandlingFee: Float + weightedOrderHandlingFeeTax: Float + weightedOrderHandlingFeeDiscount: Float + weightedOrderDuty: Float + totalWithWeightedShippingAndHandling: Float + weightedOrderHandlingAdjustment: Float + autoAddDiscountId: Int + isAssemblyRequired: Boolean = false + childItemIds: [String!] + parentItemId: String +} + +type CartMessage { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CartMessage + message: String + messageType: String + productsRemoved: [CrProduct] +} + +input CartMessageInput { + message: String + messageType: String + productsRemoved: [CrProductInput] +} + +type CartSummary { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CartSummary + itemCount: Int + totalQuantity: Int + total: Float + isExpired: Boolean + hasActiveCart: Boolean +} + +type CategoryCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CategoryCollection + totalCount: Int! + items: [PrCategory] +} + +type CategoryContent { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CategoryContent + categoryImages: [CategoryImage] + name: String + description: String + pageTitle: String + metaTagTitle: String + metaTagDescription: String + metaTagKeywords: String + slug: String +} + +type CategoryImage { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CategoryImage + imageLabel: String + altText: String + imageUrl: String + cmsId: String + videoUrl: String + mediaType: String + sequence: Int +} + +type CategoryPagedCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CategoryPagedCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [PrCategory] +} + +type ChangeMessage { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ChangeMessage + id: String + correlationId: String + userId: String + userFirstName: String + userLastName: String + userScopeType: String + appId: String + appKey: String + appName: String + subjectType: String + success: Boolean + identifier: String + subject: String + verb: String + message: String + metadata: Object + oldValue: String + newValue: String + amount: Float + createDate: DateTime +} + +input ChangeMessageInput { + id: String + correlationId: String + userId: String + userFirstName: String + userLastName: String + userScopeType: String + appId: String + appKey: String + appName: String + subjectType: String + success: Boolean = false + identifier: String + subject: String + verb: String + message: String + metadata: Object + oldValue: String + newValue: String + amount: Float + createDate: DateTime +} + +type ChangePasswordResult { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ChangePasswordResult + accountId: Int! + succeeded: Boolean + errorMessage: String +} + +type ChangePasswordResultCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ChangePasswordResultCollection + totalCount: Int! + items: [ChangePasswordResult] +} + +type Channel { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Channel + tenantId: Int! + code: String + name: String + region: String + countryCode: String + groupCode: String + siteIds: [Int!] + auditInfo: CrAuditInfo +} + +type ChannelCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ChannelCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [Channel] +} + +type ChannelGroup { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ChannelGroup + tenantId: Int! + code: String + name: String + auditInfo: CrAuditInfo +} + +type ChannelGroupCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ChannelGroupCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [ChannelGroup] +} + +input ChannelGroupInput { + tenantId: Int! + code: String + name: String + auditInfo: CrAuditInfoInput +} + +input ChannelInput { + tenantId: Int! + code: String + name: String + region: String + countryCode: String + groupCode: String + siteIds: [Int!] + auditInfo: CrAuditInfoInput +} + +type CheckPayment { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CheckPayment + checkNumber: String +} + +input CheckPaymentInput { + checkNumber: String +} + +type Checkout { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Checkout + id: String + siteId: Int! + tenantId: Int! + number: Int + originalCartId: String + submittedDate: DateTime + type: String + items: [CrOrderItem] + groupings: [CheckoutGrouping] + auditInfo: CrAuditInfo + destinations: [Destination] + payments: [Payment] + amountRemainingForPayment: Float! + acceptsMarketing: Boolean + customerAccountId: Int + email: String + customerTaxId: String + isTaxExempt: Boolean + currencyCode: String + priceListCode: String + attributes: [OrderAttribute] + shopperNotes: ShopperNotes + availableActions: [String!] + data: Object + taxData: Object + channelCode: String + locationCode: String + ipAddress: String + sourceDevice: String + visitId: String + webSessionId: String + customerInteractionType: String + orderDiscounts: [CrAppliedDiscount] + couponCodes: [String!] + invalidCoupons: [InvalidCoupon] + suggestedDiscounts: [SuggestedDiscount] + discountThresholdMessages: [ThresholdMessage] + dutyTotal: Float + feeTotal: Float! + subTotal: Float! + itemLevelProductDiscountTotal: Float! + orderLevelProductDiscountTotal: Float! + itemTaxTotal: Float! + itemTotal: Float! + shippingSubTotal: Float! + itemLevelShippingDiscountTotal: Float! + orderLevelShippingDiscountTotal: Float! + shippingTaxTotal: Float! + shippingTotal: Float! + handlingSubTotal: Float! + itemLevelHandlingDiscountTotal: Float! + orderLevelHandlingDiscountTotal: Float! + handlingTaxTotal: Float! + handlingTotal: Float! + total: Float! +} + +input CheckoutActionInput { + actionName: String +} + +type CheckoutCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CheckoutCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [Checkout] +} + +type CheckoutGroupRates { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CheckoutGroupRates + groupingId: String + shippingRates: [ShippingRate] +} + +input CheckoutGroupShippingMethodInput { + groupingId: String + shippingRate: ShippingRateInput +} + +type CheckoutGrouping { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CheckoutGrouping + id: String + destinationId: String + fulfillmentMethod: String + orderItemIds: [String!] + shippingMethodCode: String + shippingMethodName: String + standaloneGroup: Boolean + shippingDiscounts: [ShippingDiscount] + handlingDiscounts: [CrAppliedDiscount] + dutyAmount: Float + dutyTotal: Float! + shippingAmount: Float + shippingSubTotal: Float! + itemLevelShippingDiscountTotal: Float! + orderLevelShippingDiscountTotal: Float! + shippingTax: Float + shippingTaxTotal: Float! + shippingTotal: Float! + handlingAmount: Float + handlingSubTotal: Float! + itemLevelHandlingDiscountTotal: Float! + orderLevelHandlingDiscountTotal: Float! + handlingTax: Float + handlingTaxTotal: Float! + handlingTotal: Float! + taxData: Object +} + +input CheckoutGroupingInput { + id: String + destinationId: String + fulfillmentMethod: String + orderItemIds: [String!] + shippingMethodCode: String + shippingMethodName: String + standaloneGroup: Boolean = false + shippingDiscounts: [ShippingDiscountInput] + handlingDiscounts: [CrAppliedDiscountInput] + dutyAmount: Float + dutyTotal: Float! + shippingAmount: Float + shippingSubTotal: Float! + itemLevelShippingDiscountTotal: Float! + orderLevelShippingDiscountTotal: Float! + shippingTax: Float + shippingTaxTotal: Float! + shippingTotal: Float! + handlingAmount: Float + handlingSubTotal: Float! + itemLevelHandlingDiscountTotal: Float! + orderLevelHandlingDiscountTotal: Float! + handlingTax: Float + handlingTaxTotal: Float! + handlingTotal: Float! + taxData: Object +} + +input CheckoutInput { + id: String + siteId: Int! + tenantId: Int! + number: Int + originalCartId: String + submittedDate: DateTime + type: String + items: [CrOrderItemInput] + groupings: [CheckoutGroupingInput] + auditInfo: CrAuditInfoInput + destinations: [DestinationInput] + payments: [PaymentInput] + amountRemainingForPayment: Float! + acceptsMarketing: Boolean = false + customerAccountId: Int + email: String + customerTaxId: String + isTaxExempt: Boolean = false + currencyCode: String + priceListCode: String + attributes: [OrderAttributeInput] + shopperNotes: ShopperNotesInput + availableActions: [String!] + data: Object + taxData: Object + channelCode: String + locationCode: String + ipAddress: String + sourceDevice: String + visitId: String + webSessionId: String + customerInteractionType: String + orderDiscounts: [CrAppliedDiscountInput] + couponCodes: [String!] + invalidCoupons: [InvalidCouponInput] + suggestedDiscounts: [SuggestedDiscountInput] + discountThresholdMessages: [ThresholdMessageInput] + dutyTotal: Float + feeTotal: Float! + subTotal: Float! + itemLevelProductDiscountTotal: Float! + orderLevelProductDiscountTotal: Float! + itemTaxTotal: Float! + itemTotal: Float! + shippingSubTotal: Float! + itemLevelShippingDiscountTotal: Float! + orderLevelShippingDiscountTotal: Float! + shippingTaxTotal: Float! + shippingTotal: Float! + handlingSubTotal: Float! + itemLevelHandlingDiscountTotal: Float! + orderLevelHandlingDiscountTotal: Float! + handlingTaxTotal: Float! + handlingTotal: Float! + total: Float! +} + +input CoHttpContentInput { + headers: [KeyValuePair2Input] +} + +input CoHttpMethodInput { + method: String +} + +input CoHttpRequestMessageInput { + version: String + content: CoHttpContentInput + method: CoHttpMethodInput + requestUri: DateTime + headers: [KeyValuePair2Input] + properties: Object +} + +type CommerceSummary { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CommerceSummary + totalOrderAmount: CurrencyAmount + orderCount: Int! + lastOrderDate: DateTime + wishlistCount: Int! + visitsCount: Int! +} + +input CommerceSummaryInput { + totalOrderAmount: CurrencyAmountInput + orderCount: Int! + lastOrderDate: DateTime + wishlistCount: Int! + visitsCount: Int! +} + +type CommerceUnitPrice { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CommerceUnitPrice + extendedAmount: Float + listAmount: Float + saleAmount: Float + overrideAmount: Float +} + +input CommerceUnitPriceInput { + extendedAmount: Float + listAmount: Float + saleAmount: Float + overrideAmount: Float +} + +type ConfiguredProduct { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ConfiguredProduct + productCode: String + purchaseLocation: String + fulfillmentTypesSupported: [String!] + variationProductCode: String + upc: String + mfgPartNumber: String + purchasableState: ProductPurchasableState + priceRange: ProductPriceRange + volumePriceBands: [ProductVolumePrice] + volumePriceRange: ProductPriceRange + price: ProductPrice + availableShippingDiscounts: [PrDiscount] + measurements: PrPackageMeasurements + inventoryInfo: ProductInventoryInfo + options: [ProductOption] + properties: [ProductProperty] + priceListEntryTypeProperty: ProductProperty + productImages: [ProductImage] +} + +type Contact { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Contact + id: Int + email: String + firstName: String + middleNameOrInitial: String + lastNameOrSurname: String + companyOrOrganization: String + phoneNumbers: CrPhone + address: CrAddress +} + +input ContactInput { + id: Int + email: String + firstName: String + middleNameOrInitial: String + lastNameOrSurname: String + companyOrOrganization: String + phoneNumbers: CrPhoneInput + address: CrAddressInput +} + +type ContactType { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ContactType + name: String + isPrimary: Boolean +} + +input ContactTypeInput { + name: String + isPrimary: Boolean = false +} + +type Coordinates { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Coordinates + lat: Float! + lng: Float! +} + +input CoordinatesInput { + lat: Float! + lng: Float! +} + +type CrAddress { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrAddress + address1: String + address2: String + address3: String + address4: String + cityOrTown: String + stateOrProvince: String + postalOrZipCode: String + countryCode: String + addressType: String + isValidated: Boolean +} + +input CrAddressInput { + address1: String + address2: String + address3: String + address4: String + cityOrTown: String + stateOrProvince: String + postalOrZipCode: String + countryCode: String + addressType: String + isValidated: Boolean = false +} + +type CrAppliedDiscount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrAppliedDiscount + impact: Float + discount: CrDiscount + couponCode: String + excluded: Boolean +} + +input CrAppliedDiscountInput { + impact: Float + discount: CrDiscountInput + couponCode: String + excluded: Boolean = false +} + +type CrAuditInfo { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrAuditInfo + updateDate: DateTime + createDate: DateTime + updateBy: String + createBy: String +} + +input CrAuditInfoInput { + updateDate: DateTime + createDate: DateTime + updateBy: String + createBy: String +} + +type CrBundledProduct { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrBundledProduct + quantity: Int! + optionAttributeFQN: String + optionValue: Object + creditValue: Float + deltaPrice: Float + productCode: String + name: String + description: String + goodsType: String + isPackagedStandAlone: Boolean + stock: ProductStock + productReservationId: Int + allocationId: Int + allocationExpiration: DateTime + measurements: CrPackageMeasurements + fulfillmentStatus: String +} + +input CrBundledProductInput { + quantity: Int! + optionAttributeFQN: String + optionValue: Object + creditValue: Float + deltaPrice: Float + productCode: String + name: String + description: String + goodsType: String + isPackagedStandAlone: Boolean = false + stock: ProductStockInput + productReservationId: Int + allocationId: Int + allocationExpiration: DateTime + measurements: CrPackageMeasurementsInput + fulfillmentStatus: String +} + +type CrCategory { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrCategory + id: Int + parent: CrCategory +} + +input CrCategoryInput { + id: Int + parent: CrCategoryInput +} + +type CrDiscount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrDiscount + id: Int! + name: String + itemIds: [String!] + expirationDate: DateTime + hasMultipleTargetProducts: Boolean +} + +input CrDiscountInput { + id: Int! + name: String + itemIds: [String!] + expirationDate: DateTime + hasMultipleTargetProducts: Boolean = false +} + +type CrMeasurement { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrMeasurement + unit: String + value: Float +} + +input CrMeasurementInput { + unit: String + value: Float +} + +type CrOrderItem { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrOrderItem + id: String + destinationId: String + originalCartItemId: String + fulfillmentLocationCode: String + fulfillmentMethod: String + dutyAmount: Float + expectedDeliveryDate: DateTime + localeCode: String + purchaseLocation: String + lineId: Int + product: CrProduct + quantity: Int! + isRecurring: Boolean + isTaxable: Boolean + subtotal: Float + extendedTotal: Float + taxableTotal: Float + discountTotal: Float + discountedTotal: Float + itemTaxTotal: Float + shippingTaxTotal: Float + shippingTotal: Float + handlingAmount: Float + feeTotal: Float + total: Float + unitPrice: CommerceUnitPrice + productDiscount: AppliedLineItemProductDiscount + productDiscounts: [AppliedLineItemProductDiscount] + shippingDiscounts: [AppliedLineItemShippingDiscount] + data: Object + taxData: Object + auditInfo: CrAuditInfo + shippingAmountBeforeDiscountsAndAdjustments: Float + weightedOrderAdjustment: Float + weightedOrderDiscount: Float + adjustedLineItemSubtotal: Float + totalWithoutWeightedShippingAndHandling: Float + weightedOrderTax: Float + weightedOrderShipping: Float + weightedOrderShippingDiscount: Float + weightedOrderShippingManualAdjustment: Float + weightedOrderShippingTax: Float + weightedOrderHandlingFee: Float + weightedOrderHandlingFeeTax: Float + weightedOrderHandlingFeeDiscount: Float + weightedOrderDuty: Float + totalWithWeightedShippingAndHandling: Float + weightedOrderHandlingAdjustment: Float + autoAddDiscountId: Int + isAssemblyRequired: Boolean + childItemIds: [String!] + parentItemId: String +} + +input CrOrderItemInput { + id: String + destinationId: String + originalCartItemId: String + fulfillmentLocationCode: String + fulfillmentMethod: String + dutyAmount: Float + expectedDeliveryDate: DateTime + localeCode: String + purchaseLocation: String + lineId: Int + product: CrProductInput + quantity: Int! + isRecurring: Boolean = false + isTaxable: Boolean = false + subtotal: Float + extendedTotal: Float + taxableTotal: Float + discountTotal: Float + discountedTotal: Float + itemTaxTotal: Float + shippingTaxTotal: Float + shippingTotal: Float + handlingAmount: Float + feeTotal: Float + total: Float + unitPrice: CommerceUnitPriceInput + productDiscount: AppliedLineItemProductDiscountInput + productDiscounts: [AppliedLineItemProductDiscountInput] + shippingDiscounts: [AppliedLineItemShippingDiscountInput] + data: Object + taxData: Object + auditInfo: CrAuditInfoInput + shippingAmountBeforeDiscountsAndAdjustments: Float + weightedOrderAdjustment: Float + weightedOrderDiscount: Float + adjustedLineItemSubtotal: Float + totalWithoutWeightedShippingAndHandling: Float + weightedOrderTax: Float + weightedOrderShipping: Float + weightedOrderShippingDiscount: Float + weightedOrderShippingManualAdjustment: Float + weightedOrderShippingTax: Float + weightedOrderHandlingFee: Float + weightedOrderHandlingFeeTax: Float + weightedOrderHandlingFeeDiscount: Float + weightedOrderDuty: Float + totalWithWeightedShippingAndHandling: Float + weightedOrderHandlingAdjustment: Float + autoAddDiscountId: Int + isAssemblyRequired: Boolean = false + childItemIds: [String!] + parentItemId: String +} + +type CrPackageMeasurements { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrPackageMeasurements + height: CrMeasurement + width: CrMeasurement + length: CrMeasurement + weight: CrMeasurement +} + +input CrPackageMeasurementsInput { + height: CrMeasurementInput + width: CrMeasurementInput + length: CrMeasurementInput + weight: CrMeasurementInput +} + +type CrPhone { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrPhone + home: String + mobile: String + work: String +} + +input CrPhoneInput { + home: String + mobile: String + work: String +} + +type CrProduct { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrProduct + mfgPartNumber: String + upc: String + sku: String + fulfillmentTypesSupported: [String!] + imageAlternateText: String + imageUrl: String + variationProductCode: String + options: [CrProductOption] + properties: [CrProductProperty] + categories: [CrCategory] + price: CrProductPrice + discountsRestricted: Boolean + discountsRestrictedStartDate: DateTime + discountsRestrictedEndDate: DateTime + isRecurring: Boolean + isTaxable: Boolean + productType: String + productUsage: String + bundledProducts: [CrBundledProduct] + fulfillmentFields: [FulfillmentField] + productCode: String + name: String + description: String + goodsType: String + isPackagedStandAlone: Boolean + stock: ProductStock + productReservationId: Int + allocationId: Int + allocationExpiration: DateTime + measurements: CrPackageMeasurements + fulfillmentStatus: String +} + +input CrProductInput { + mfgPartNumber: String + upc: String + sku: String + fulfillmentTypesSupported: [String!] + imageAlternateText: String + imageUrl: String + variationProductCode: String + options: [CrProductOptionInput] + properties: [CrProductPropertyInput] + categories: [CrCategoryInput] + price: CrProductPriceInput + discountsRestricted: Boolean = false + discountsRestrictedStartDate: DateTime + discountsRestrictedEndDate: DateTime + isRecurring: Boolean = false + isTaxable: Boolean = false + productType: String + productUsage: String + bundledProducts: [CrBundledProductInput] + fulfillmentFields: [FulfillmentFieldInput] + productCode: String + name: String + description: String + goodsType: String + isPackagedStandAlone: Boolean = false + stock: ProductStockInput + productReservationId: Int + allocationId: Int + allocationExpiration: DateTime + measurements: CrPackageMeasurementsInput + fulfillmentStatus: String +} + +type CrProductOption { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrProductOption + name: String + value: Object + shopperEnteredValue: Object + attributeFQN: String + dataType: String + stringValue: String +} + +input CrProductOptionInput { + name: String + value: Object + shopperEnteredValue: Object + attributeFQN: String + dataType: String + stringValue: String +} + +type CrProductPrice { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrProductPrice + price: Float + salePrice: Float + tenantOverridePrice: Float + msrp: Float + creditValue: Float + priceListCode: String + priceListEntryMode: String +} + +input CrProductPriceInput { + price: Float + salePrice: Float + tenantOverridePrice: Float + msrp: Float + creditValue: Float + priceListCode: String + priceListEntryMode: String +} + +type CrProductProperty { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrProductProperty + attributeFQN: String + name: String + dataType: String + isMultiValue: Boolean + values: [CrProductPropertyValue] +} + +input CrProductPropertyInput { + attributeFQN: String + name: String + dataType: String + isMultiValue: Boolean = false + values: [CrProductPropertyValueInput] +} + +type CrProductPropertyValue { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CrProductPropertyValue + stringValue: String + value: Object +} + +input CrProductPropertyValueInput { + stringValue: String + value: Object +} + +type Credit { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Credit + code: String + activationDate: DateTime + creditType: String + customCreditType: String + currencyCode: String + initialBalance: Float + currentBalance: Float + expirationDate: DateTime + customerId: Int + auditInfo: CuAuditInfo + creditTypeId: Int! +} + +type CreditAuditEntry { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CreditAuditEntry + activityType: String + details: String + auditInfo: CuAuditInfo + activityTypeId: Int! +} + +type CreditAuditEntryCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CreditAuditEntryCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [CreditAuditEntry] +} + +type CreditCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CreditCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [Credit] +} + +input CreditInput { + code: String + activationDate: DateTime + creditType: String + customCreditType: String + currencyCode: String + initialBalance: Float + currentBalance: Float + expirationDate: DateTime + customerId: Int + auditInfo: CuAuditInfoInput + creditTypeId: Int! +} + +type CreditTransaction { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CreditTransaction + id: Int + transactionType: String + comments: String + impactAmount: Float + auditInfo: CuAuditInfo + orderId: String + data: Object +} + +type CreditTransactionCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CreditTransactionCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [CreditTransaction] +} + +input CreditTransactionInput { + id: Int + transactionType: String + comments: String + impactAmount: Float + auditInfo: CuAuditInfoInput + orderId: String + data: Object +} + +type CuAddress { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CuAddress + address1: String + address2: String + address3: String + address4: String + cityOrTown: String + stateOrProvince: String + postalOrZipCode: String + countryCode: String + addressType: String + isValidated: Boolean +} + +input CuAddressInput { + address1: String + address2: String + address3: String + address4: String + cityOrTown: String + stateOrProvince: String + postalOrZipCode: String + countryCode: String + addressType: String + isValidated: Boolean = false +} + +type CuAttribute { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CuAttribute + id: Int + adminName: String + namespace: String + attributeCode: String! + inputType: String + valueType: String! + dataType: String + attributeMetadata: [CuAttributeMetadataItem] + attributeFQN: String + content: CuAttributeLocalizedContent + validation: CuAttributeValidation + vocabularyValues: [CuAttributeVocabularyValue] + auditInfo: CuAuditInfo + isActive: Boolean + isRequired: Boolean + isReadOnly: Boolean + isMultiValued: Boolean + isVisible: Boolean + order: Int + displayGroup: String! +} + +type CuAttributeCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CuAttributeCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [CuAttribute] +} + +input CuAttributeInput { + id: Int + adminName: String + namespace: String + attributeCode: String! + inputType: String + valueType: String! + dataType: String + attributeMetadata: [CuAttributeMetadataItemInput] + attributeFQN: String + content: CuAttributeLocalizedContentInput + validation: CuAttributeValidationInput + vocabularyValues: [CuAttributeVocabularyValueInput] + auditInfo: CuAuditInfoInput + isActive: Boolean = false + isRequired: Boolean = false + isReadOnly: Boolean = false + isMultiValued: Boolean = false + isVisible: Boolean = false + order: Int + displayGroup: String! +} + +type CuAttributeLocalizedContent { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CuAttributeLocalizedContent + localeCode: String + value: String +} + +input CuAttributeLocalizedContentInput { + localeCode: String + value: String +} + +type CuAttributeMetadataItem { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CuAttributeMetadataItem + key: String! + value: String! +} + +input CuAttributeMetadataItemInput { + key: String! + value: String! +} + +type CuAttributeValidation { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CuAttributeValidation + regularExpression: String + minStringLength: Int + maxStringLength: Int + minNumericValue: Float + maxNumericValue: Float + minDateTime: DateTime + maxDateTime: DateTime +} + +input CuAttributeValidationInput { + regularExpression: String + minStringLength: Int + maxStringLength: Int + minNumericValue: Float + maxNumericValue: Float + minDateTime: DateTime + maxDateTime: DateTime +} + +type CuAttributeValueLocalizedContent { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CuAttributeValueLocalizedContent + localeCode: String! + value: String! +} + +input CuAttributeValueLocalizedContentInput { + localeCode: String! + value: String! +} + +type CuAttributeVocabularyValue { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CuAttributeVocabularyValue + value: String! + sequence: Int + isHidden: Boolean + content: CuAttributeValueLocalizedContent +} + +input CuAttributeVocabularyValueInput { + value: String! + sequence: Int + isHidden: Boolean = false + content: CuAttributeValueLocalizedContentInput +} + +type CuAuditInfo { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CuAuditInfo + updateDate: DateTime + createDate: DateTime + updateBy: String + createBy: String +} + +input CuAuditInfoInput { + updateDate: DateTime + createDate: DateTime + updateBy: String + createBy: String +} + +type CuPhone { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CuPhone + home: String + mobile: String + work: String +} + +input CuPhoneInput { + home: String + mobile: String + work: String +} + +type CurrencyAmount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CurrencyAmount + currencyCode: String + amount: Float! +} + +input CurrencyAmountInput { + currencyCode: String + amount: Float! +} + +type CurrencyExchangeRate { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CurrencyExchangeRate + fromCurrencyCode: String + toCurrencyCode: String + rate: Float + multiplier: Float + decimalPlaces: Int + roundingStrategy: Int + referenceData: String +} + +type Customer { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Customer + customerContact: Contact + data: Object + isDestinationCommercial: Boolean +} + +type CustomerAccount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerAccount + emailAddress: String + userName: String + firstName: String + lastName: String + localeCode: String + userId: String + isAnonymous: Boolean + isLocked: Boolean + isActive: Boolean + acceptsMarketing: Boolean + hasExternalPassword: Boolean + id: Int! + customerSet: String + commerceSummary: CommerceSummary + contacts: [CustomerContact] + companyOrOrganization: String + notes: [CustomerNote] + attributes: [CustomerAttribute] + segments: [CustomerSegment] + taxId: String + externalId: String + auditInfo: CuAuditInfo + customerSinceDate: DateTime + accountType: String +} + +input CustomerAccountAndAuthInfoInput { + account: CustomerAccountInput + password: String + externalPassword: String + isImport: Boolean = false +} + +type CustomerAccountCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerAccountCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [CustomerAccount] +} + +input CustomerAccountInput { + emailAddress: String + userName: String + firstName: String + lastName: String + localeCode: String + userId: String + isAnonymous: Boolean = false + isLocked: Boolean = false + isActive: Boolean = false + acceptsMarketing: Boolean = false + hasExternalPassword: Boolean = false + id: Int! + customerSet: String + commerceSummary: CommerceSummaryInput + contacts: [CustomerContactInput] + companyOrOrganization: String + notes: [CustomerNoteInput] + attributes: [CustomerAttributeInput] + segments: [CustomerSegmentInput] + taxId: String + externalId: String + auditInfo: CuAuditInfoInput + customerSinceDate: DateTime + accountType: String +} + +type CustomerAttribute { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerAttribute + auditInfo: CuAuditInfo + fullyQualifiedName: String + attributeDefinitionId: Int + values: [Object!] +} + +type CustomerAttributeCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerAttributeCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [CustomerAttribute] +} + +input CustomerAttributeInput { + auditInfo: CuAuditInfoInput + fullyQualifiedName: String + attributeDefinitionId: Int + values: [Object!] +} + +type CustomerAuditEntry { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerAuditEntry + customerAccountId: Int! + customerAuditEntryId: Int! + entryDate: DateTime! + entryUser: String + application: String + site: String + description: String + fieldPath: String + oldValue: String + newValue: String +} + +type CustomerAuditEntryCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerAuditEntryCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [CustomerAuditEntry] +} + +type CustomerAuthTicket { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerAuthTicket + customerAccount: CustomerAccount + accessToken: String + accessTokenExpiration: DateTime! + refreshToken: String + refreshTokenExpiration: DateTime! + userId: String + jwtAccessToken: String +} + +type CustomerContact { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerContact + accountId: Int! + types: [ContactType] + auditInfo: CuAuditInfo + faxNumber: String + label: String + id: Int + email: String + firstName: String + middleNameOrInitial: String + lastNameOrSurname: String + companyOrOrganization: String + phoneNumbers: CuPhone + address: CuAddress +} + +type CustomerContactCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerContactCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [CustomerContact] +} + +input CustomerContactInput { + accountId: Int! + types: [ContactTypeInput] + auditInfo: CuAuditInfoInput + faxNumber: String + label: String + id: Int + email: String + firstName: String + middleNameOrInitial: String + lastNameOrSurname: String + companyOrOrganization: String + phoneNumbers: CuPhoneInput + address: CuAddressInput +} + +input CustomerInput { + customerContact: ContactInput + data: Object + isDestinationCommercial: Boolean = false +} + +input CustomerLoginInfoInput { + emailAddress: String + username: String + password: String + externalPassword: String + isImport: Boolean = false +} + +type CustomerNote { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerNote + id: Int! + content: String + auditInfo: CuAuditInfo +} + +type CustomerNoteCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerNoteCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [CustomerNote] +} + +input CustomerNoteInput { + id: Int! + content: String + auditInfo: CuAuditInfoInput +} + +type CustomerPurchaseOrderAccount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerPurchaseOrderAccount + id: Int! + accountId: Int! + isEnabled: Boolean + creditLimit: Float! + availableBalance: Float! + totalAvailableBalance: Float! + overdraftAllowance: Float + overdraftAllowanceType: String + customerPurchaseOrderPaymentTerms: [CustomerPurchaseOrderPaymentTerm] + auditInfo: CuAuditInfo +} + +type CustomerPurchaseOrderAccountCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerPurchaseOrderAccountCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [CustomerPurchaseOrderAccount] +} + +input CustomerPurchaseOrderAccountInput { + id: Int! + accountId: Int! + isEnabled: Boolean = false + creditLimit: Float! + availableBalance: Float! + totalAvailableBalance: Float! + overdraftAllowance: Float + overdraftAllowanceType: String + customerPurchaseOrderPaymentTerms: [CustomerPurchaseOrderPaymentTermInput] + auditInfo: CuAuditInfoInput +} + +type CustomerPurchaseOrderPaymentTerm { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerPurchaseOrderPaymentTerm + siteId: Int! + code: String + description: String + auditInfo: CuAuditInfo +} + +input CustomerPurchaseOrderPaymentTermInput { + siteId: Int! + code: String + description: String + auditInfo: CuAuditInfoInput +} + +type CustomerSegment { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerSegment + id: Int! + code: String + name: String + description: String + auditInfo: CuAuditInfo +} + +type CustomerSegmentCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerSegmentCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [CustomerSegment] +} + +input CustomerSegmentInput { + id: Int! + code: String + name: String + description: String + auditInfo: CuAuditInfoInput +} + +type CustomerSet { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerSet + code: String + name: String + description: String + auditInfo: CuAuditInfo + sites: [CustomerSetSite] + isDefault: Boolean + aggregateInfo: CustomerSetAggregateInfo +} + +type CustomerSetAggregateInfo { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerSetAggregateInfo + customerCount: Int! +} + +type CustomerSetCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerSetCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [CustomerSet] +} + +type CustomerSetSite { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: CustomerSetSite + siteId: Int! + customerSetCode: String + name: String +} + +input CustomerUserAuthInfoInput { + username: String + password: String +} + +""" +DateTime custom scalar type +""" +scalar DateTime + +type Destination { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Destination + id: String + destinationContact: Contact + isDestinationCommercial: Boolean + data: Object +} + +input DestinationInput { + id: String + destinationContact: ContactInput + isDestinationCommercial: Boolean = false + data: Object +} + +type DigitalPackage { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: DigitalPackage + id: String + code: String + status: String + items: [DigitalPackageItem] + fulfillmentDate: DateTime + fulfillmentLocationCode: String + auditInfo: CrAuditInfo + availableActions: [String!] + changeMessages: [ChangeMessage] +} + +input DigitalPackageInput { + id: String + code: String + status: String + items: [DigitalPackageItemInput] + fulfillmentDate: DateTime + fulfillmentLocationCode: String + auditInfo: CrAuditInfoInput + availableActions: [String!] + changeMessages: [ChangeMessageInput] +} + +type DigitalPackageItem { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: DigitalPackageItem + giftCardCode: String + productCode: String + quantity: Int! + fulfillmentItemType: String + lineId: Int + optionAttributeFQN: String +} + +input DigitalPackageItemInput { + giftCardCode: String + productCode: String + quantity: Int! + fulfillmentItemType: String + lineId: Int + optionAttributeFQN: String +} + +input DigitalWalletInput { + digitalWalletData: String + cartId: String +} + +input DiscountSelectionsInput { + discountIds: [Int!] +} + +type DiscountValidationSummary { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: DiscountValidationSummary + applicableDiscounts: [PrDiscount] +} + +type Document { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Document + id: String + name: String + path: String + publishSetCode: String + extension: String + documentTypeFQN: String + listFQN: String + contentLength: Int + contentMimeType: String + contentUpdateDate: DateTime + publishState: String + properties: Object + insertDate: DateTime + updateDate: DateTime + activeDateRange: ActiveDateRange +} + +type DocumentCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: DocumentCollection + subPaths: [String!] + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [Document] +} + +type DocumentDraftSummary { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: DocumentDraftSummary + id: String + name: String + documentTypeFQN: String + listFQN: String + activeUpdateDate: DateTime + draftUpdateDate: DateTime! + updatedBy: String + activeUpdatedBy: String + publishType: String + publishSetCode: String + masterCatalogId: Int + catalogId: Int + siteId: Int +} + +type DocumentDraftSummaryPagedCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: DocumentDraftSummaryPagedCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [DocumentDraftSummary] +} + +input DocumentInput { + id: String + name: String + path: String + publishSetCode: String + extension: String + documentTypeFQN: String + listFQN: String + contentLength: Int + contentMimeType: String + contentUpdateDate: DateTime + publishState: String + properties: Object + insertDate: DateTime + updateDate: DateTime + activeDateRange: ActiveDateRangeInput +} + +type DocumentInstallation { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: DocumentInstallation + name: String + documentTypeFQN: String + properties: Object + locale: String +} + +input DocumentInstallationInput { + name: String + documentTypeFQN: String + properties: Object + locale: String +} + +type DocumentList { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: DocumentList + name: String + namespace: String + listFQN: String + documentTypes: [String!] + supportsPublishing: Boolean + enablePublishing: Boolean + supportsActiveDateRanges: Boolean + enableActiveDateRanges: Boolean + views: [View] + usages: [String!] + security: String + scopeId: Int + scopeType: String + documentListType: String + metadata: Object +} + +type DocumentListCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: DocumentListCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [DocumentList] +} + +input DocumentListInput { + name: String + namespace: String + listFQN: String + documentTypes: [String!] + supportsPublishing: Boolean = false + enablePublishing: Boolean = false + supportsActiveDateRanges: Boolean = false + enableActiveDateRanges: Boolean = false + views: [ViewInput] + usages: [String!] + security: String + scopeId: Int + scopeType: String + documentListType: String + metadata: Object +} + +type DocumentListType { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: DocumentListType + name: String + namespace: String + documentListTypeFQN: String + scopeType: String + installationPackage: String + version: String + defaultDocuments: [DocumentInstallation] + documentTypeFQNs: [String!] + supportsPublishing: Boolean + enablePublishing: Boolean + supportsActiveDateRanges: Boolean + enableActiveDateRanges: Boolean + views: [View] + usages: [String!] + metadata: Object +} + +type DocumentListTypeCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: DocumentListTypeCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [DocumentListType] +} + +input DocumentListTypeInput { + name: String + namespace: String + documentListTypeFQN: String + scopeType: String + installationPackage: String + version: String + defaultDocuments: [DocumentInstallationInput] + documentTypeFQNs: [String!] + supportsPublishing: Boolean = false + enablePublishing: Boolean = false + supportsActiveDateRanges: Boolean = false + enableActiveDateRanges: Boolean = false + views: [ViewInput] + usages: [String!] + metadata: Object +} + +type DocumentType { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: DocumentType + name: String + namespace: String + documentTypeFQN: String + adminName: String + installationPackage: String + version: String + metadata: Object + properties: [Property] +} + +type DocumentTypeCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: DocumentTypeCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [DocumentType] +} + +input DocumentTypeInput { + name: String + namespace: String + documentTypeFQN: String + adminName: String + installationPackage: String + version: String + metadata: Object + properties: [PropertyInput] +} + +type EntityCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: EntityCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [Object!] +} + +type EntityContainer { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: EntityContainer + tenantId: Int! + siteId: Int + masterCatalogId: Int + catalogId: Int + localeCode: String + listFullName: String + userId: String + id: String + item: Object + createBy: String + createDate: DateTime! + updateBy: String + updateDate: DateTime! +} + +type EntityContainerCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: EntityContainerCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [EntityContainer] +} + +type EntityList { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: EntityList + tenantId: Int! + nameSpace: String + name: String + contextLevel: String + useSystemAssignedId: Boolean + idProperty: IndexedProperty + indexA: IndexedProperty + indexB: IndexedProperty + indexC: IndexedProperty + indexD: IndexedProperty + isVisibleInStorefront: Boolean + isLocaleSpecific: Boolean + isShopperSpecific: Boolean + isSandboxDataCloningSupported: Boolean + views: [ListView] + usages: [String!] + metadata: Object + createDate: DateTime! + updateDate: DateTime! +} + +type EntityListCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: EntityListCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [EntityList] +} + +input EntityListInput { + tenantId: Int! + nameSpace: String + name: String + contextLevel: String + useSystemAssignedId: Boolean = false + idProperty: IndexedPropertyInput + indexA: IndexedPropertyInput + indexB: IndexedPropertyInput + indexC: IndexedPropertyInput + indexD: IndexedPropertyInput + isVisibleInStorefront: Boolean = false + isLocaleSpecific: Boolean = false + isShopperSpecific: Boolean = false + isSandboxDataCloningSupported: Boolean = false + views: [ListViewInput] + usages: [String!] + metadata: Object + createDate: DateTime! + updateDate: DateTime! +} + +input ExclusionListEntryLocationCodeInput { + locationCode: String! + orderItemID: Int! +} + +type ExtendedProperty { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ExtendedProperty + key: String + value: String +} + +input ExtendedPropertyInput { + key: String + value: String +} + +type Facet { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Facet + label: String + facetType: String + field: String + values: [FacetValue] +} + +type FacetValue { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: FacetValue + label: String + isApplied: Boolean + count: Int! + value: String + filterValue: String + rangeQueryValueStart: String + rangeQueryValueEnd: String + parentFacetValue: String + isDisplayed: Boolean + childrenFacetValues: [FacetValue] +} + +input FulfillmentActionInput { + actionName: String + packageIds: [String!] + pickupIds: [String!] + digitalPackageIds: [String!] +} + +type FulfillmentField { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: FulfillmentField + name: String + userEnteredValue: Object + required: Boolean +} + +input FulfillmentFieldInput { + name: String + userEnteredValue: Object + required: Boolean = false +} + +type FulfillmentInfo { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: FulfillmentInfo + fulfillmentContact: Contact + isDestinationCommercial: Boolean + shippingMethodCode: String + shippingMethodName: String + data: Object + auditInfo: CrAuditInfo +} + +input FulfillmentInfoInput { + fulfillmentContact: ContactInput + isDestinationCommercial: Boolean = false + shippingMethodCode: String + shippingMethodName: String + data: Object + auditInfo: CrAuditInfoInput +} + +type FulfillmentShopperNotes { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: FulfillmentShopperNotes + comments: String + deliveryInstructions: String + giftMessage: String +} + +input FulfillmentShopperNotesInput { + comments: String + deliveryInstructions: String + giftMessage: String +} + +type FulfillmentTask { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: FulfillmentTask + links: Object + active: Boolean + attributes: Object + completed: Boolean + completedDate: DateTime + description: String + inputs: [TaskInput] + name: String + skippable: Boolean + subject: String + taskId: String +} + +input FulfillmentTaskInput { + links: Object + active: Boolean = false + attributes: Object + completed: Boolean = false + completedDate: DateTime + description: String + inputs: [TaskInputInput] + name: String + skippable: Boolean = false + subject: String + taskId: String +} + +type GatewayGiftCard { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: GatewayGiftCard + cardNumber: String + amount: Float! + currencyCode: String +} + +input GatewayGiftCardInput { + cardNumber: String + amount: Float! + currencyCode: String +} + +type GiftCard { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: GiftCard + activationDate: DateTime + cardNumber: String + code: String + creditType: String + creditValue: Float + currencyCode: String + currentBalance: Float + customerId: Int + expirationDate: DateTime + initialBalance: Float +} + +input GiftCardInput { + activationDate: DateTime + cardNumber: String + code: String + creditType: String + creditValue: Float + currencyCode: String + currentBalance: Float + customerId: Int + expirationDate: DateTime + initialBalance: Float +} + +type Hours { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Hours + label: String + openTime: String + closeTime: String + isClosed: Boolean +} + +input HoursInput { + label: String + openTime: String + closeTime: String + isClosed: Boolean = false +} + +type InStockNotificationSubscription { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: InStockNotificationSubscription + id: Int + email: String + customerId: Int + productCode: String + locationCode: String + userId: String + auditInfo: CuAuditInfo +} + +type InStockNotificationSubscriptionCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: InStockNotificationSubscriptionCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [InStockNotificationSubscription] +} + +input InStockNotificationSubscriptionInput { + id: Int + email: String + customerId: Int + productCode: String + locationCode: String + userId: String + auditInfo: CuAuditInfoInput +} + +type IndexedProperty { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: IndexedProperty + propertyName: String + dataType: String +} + +input IndexedPropertyInput { + propertyName: String + dataType: String +} + +type InvalidCoupon { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: InvalidCoupon + couponCode: String + reasonCode: Int! + reason: String + createDate: DateTime! + discountId: Int! +} + +input InvalidCouponInput { + couponCode: String + reasonCode: Int! + reason: String + createDate: DateTime! + discountId: Int! +} + +enum InventoryRequestTypeEnum { + ALL + PARTIAL + ANY + ALL_STORES +} + +input ItemsForDestinationInput { + destinationId: String + itemIds: [String!] +} + +type JsonNode { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: JsonNode + array: Boolean + bigDecimal: Boolean + bigInteger: Boolean + binary: Boolean + boolean: Boolean + containerNode: Boolean + double: Boolean + float: Boolean + floatingPointNumber: Boolean + int: Boolean + integralNumber: Boolean + long: Boolean + missingNode: Boolean + nodeType: NodeTypeEnum + null: Boolean + number: Boolean + object: Boolean + pojo: Boolean + short: Boolean + textual: Boolean + valueNode: Boolean +} + +input KeyValuePair2Input { + key: String + value: [String!] +} + +type ListView { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ListView + name: String + usages: [String!] + metaData: Object + security: String + filter: String + defaultSort: String + fields: [ListViewField] +} + +type ListViewCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ListViewCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [ListView] +} + +type ListViewField { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ListViewField + name: String + type: String + target: String +} + +input ListViewFieldInput { + name: String + type: String + target: String +} + +input ListViewInput { + name: String + usages: [String!] + metaData: Object + security: String + filter: String + defaultSort: String + fields: [ListViewFieldInput] +} + +type LoAddress { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LoAddress + address1: String + address2: String + address3: String + address4: String + cityOrTown: String + stateOrProvince: String + postalOrZipCode: String + countryCode: String + addressType: String + isValidated: Boolean +} + +input LoAddressInput { + address1: String + address2: String + address3: String + address4: String + cityOrTown: String + stateOrProvince: String + postalOrZipCode: String + countryCode: String + addressType: String + isValidated: Boolean = false +} + +type LoAttribute { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LoAttribute + id: Int + adminName: String + namespace: String + attributeCode: String! + inputType: String + valueType: String! + dataType: String + attributeMetadata: [LoAttributeMetadataItem] + attributeFQN: String + content: LoAttributeLocalizedContent + validation: LoAttributeValidation + vocabularyValues: [LoAttributeVocabularyValue] + auditInfo: LoAuditInfo + isActive: Boolean + isRequired: Boolean + isReadOnly: Boolean + isMultiValued: Boolean + isVisible: Boolean + order: Int + displayGroup: String! +} + +type LoAttributeCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LoAttributeCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [LoAttribute] +} + +input LoAttributeInput { + id: Int + adminName: String + namespace: String + attributeCode: String! + inputType: String + valueType: String! + dataType: String + attributeMetadata: [LoAttributeMetadataItemInput] + attributeFQN: String + content: LoAttributeLocalizedContentInput + validation: LoAttributeValidationInput + vocabularyValues: [LoAttributeVocabularyValueInput] + auditInfo: LoAuditInfoInput + isActive: Boolean = false + isRequired: Boolean = false + isReadOnly: Boolean = false + isMultiValued: Boolean = false + isVisible: Boolean = false + order: Int + displayGroup: String! +} + +type LoAttributeLocalizedContent { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LoAttributeLocalizedContent + localeCode: String + value: String +} + +input LoAttributeLocalizedContentInput { + localeCode: String + value: String +} + +type LoAttributeMetadataItem { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LoAttributeMetadataItem + key: String! + value: String! +} + +input LoAttributeMetadataItemInput { + key: String! + value: String! +} + +type LoAttributeValidation { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LoAttributeValidation + regularExpression: String + minStringLength: Int + maxStringLength: Int + minNumericValue: Float + maxNumericValue: Float + minDateTime: DateTime + maxDateTime: DateTime +} + +input LoAttributeValidationInput { + regularExpression: String + minStringLength: Int + maxStringLength: Int + minNumericValue: Float + maxNumericValue: Float + minDateTime: DateTime + maxDateTime: DateTime +} + +type LoAttributeValueLocalizedContent { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LoAttributeValueLocalizedContent + localeCode: String! + value: String! +} + +input LoAttributeValueLocalizedContentInput { + localeCode: String! + value: String! +} + +type LoAttributeVocabularyValue { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LoAttributeVocabularyValue + value: String! + sequence: Int + isHidden: Boolean + content: LoAttributeValueLocalizedContent +} + +input LoAttributeVocabularyValueInput { + value: String! + sequence: Int + isHidden: Boolean = false + content: LoAttributeValueLocalizedContentInput +} + +type LoAuditInfo { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LoAuditInfo + updateDate: DateTime + createDate: DateTime + updateBy: String + createBy: String +} + +input LoAuditInfoInput { + updateDate: DateTime + createDate: DateTime + updateBy: String + createBy: String +} + +type LoFulfillmentType { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LoFulfillmentType + code: String + name: String +} + +input LoFulfillmentTypeInput { + code: String + name: String +} + +type Location { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Location + code: String + locationTypes: [LocationType] + name: String + description: String + address: LoAddress + geo: Coordinates + phone: String + fax: String + supportsInventory: Boolean + fulfillmentTypes: [LoFulfillmentType] + regularHours: RegularHours + shippingOriginContact: ShippingOriginContact + note: String + tags: [String!] + attributes: [LocationAttribute] + auditInfo: LoAuditInfo + allowFulfillmentWithNoStock: Boolean + isDisabled: Boolean + express: Boolean + transferEnabled: Boolean + includeInInventoryAggregrate: Boolean + includeInLocationExport: Boolean + warehouseEnabled: Boolean + requiresManifest: Boolean +} + +type LocationAttribute { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LocationAttribute + attributeDefinition: LoAttribute + auditInfo: LoAuditInfo + fullyQualifiedName: String + attributeDefinitionId: Int + values: [Object!] +} + +input LocationAttributeInput { + attributeDefinition: LoAttributeInput + auditInfo: LoAuditInfoInput + fullyQualifiedName: String + attributeDefinitionId: Int + values: [Object!] +} + +type LocationCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LocationCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [Location] +} + +type LocationGroup { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LocationGroup + locationGroupId: Int! + locationGroupCode: String + siteIds: [Int!] + name: String + locationCodes: [String!] + auditInfo: LoAuditInfo +} + +type LocationGroupCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LocationGroupCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [LocationGroup] +} + +type LocationGroupConfiguration { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LocationGroupConfiguration + tenantId: Int! + siteId: Int! + locationGroupId: Int! + locationGroupCode: String + customerFailedToPickupAfterAction: String + customerFailedToPickupDeadline: Int + sendCustomerPickupReminder: Int + enableForSTH: Boolean + enableForISPU: Boolean + enableAdvancedOptionForPickWaveCreation: Boolean + maximumNumberOfOrdersInPickWave: Int + defaultNumberOfOrdersInPickWave: Int + pickWavePrintFormat: String + closePickWavePermissions: [String!] + wmsEnabled: Boolean + enableScanningOfUpcForShipToHome: Boolean + allowReturns: Boolean + returnRefundReduction: Boolean + defaultReturnRefundReductionAmount: Int + maximumReturnRefundReductionAmount: Int + defaultCarrier: String + carriers: [Carrier] + printReturnLabel: Boolean + defaultPrinterType: String + boxTypes: [BoxType] + attributes: [LocationAttribute] + bpmConfigurations: [BpmConfiguration] + auditInfo: LoAuditInfo + autoPackingListPopup: Boolean + blockPartialStock: Boolean + defaultMaxNumberOfShipmentsInPickWave: Int + displayProductImagesInPickWaveDetails: Boolean + enablePnpForSTH: Boolean + enablePnpForBOPIS: Boolean + blockPartialCancel: Boolean + packageSettings: PackageSettings +} + +input LocationGroupInput { + locationGroupId: Int! + locationGroupCode: String + siteIds: [Int!] + name: String + locationCodes: [String!] + auditInfo: LoAuditInfoInput +} + +input LocationInput { + code: String + locationTypes: [LocationTypeInput] + name: String + description: String + address: LoAddressInput + geo: CoordinatesInput + phone: String + fax: String + supportsInventory: Boolean = false + fulfillmentTypes: [LoFulfillmentTypeInput] + regularHours: RegularHoursInput + shippingOriginContact: ShippingOriginContactInput + note: String + tags: [String!] + attributes: [LocationAttributeInput] + auditInfo: LoAuditInfoInput + allowFulfillmentWithNoStock: Boolean = false + isDisabled: Boolean = false + express: Boolean = false + transferEnabled: Boolean = false + includeInInventoryAggregrate: Boolean = false + includeInLocationExport: Boolean = false + warehouseEnabled: Boolean = false + requiresManifest: Boolean = false +} + +type LocationInventory { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LocationInventory + productCode: String + locationCode: String + stockAvailable: Int + softStockAvailable: Int + sku: String + mfgPartNumber: String +} + +type LocationInventoryCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LocationInventoryCollection + totalCount: Int! + items: [LocationInventory] +} + +input LocationInventoryQueryInput { + locationCodes: [String!] + productCodes: [String!] +} + +type LocationType { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LocationType + code: String + name: String + auditInfo: LoAuditInfo +} + +input LocationTypeInput { + code: String + name: String + auditInfo: LoAuditInfoInput +} + +type LocationUsage { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LocationUsage + locationUsageTypeCode: String + locationTypeCodes: [String!] + locationCodes: [String!] + auditInfo: LoAuditInfo +} + +type LocationUsageCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LocationUsageCollection + totalCount: Int! + items: [LocationUsage] +} + +input LocationUsageInput { + locationUsageTypeCode: String + locationTypeCodes: [String!] + locationCodes: [String!] + auditInfo: LoAuditInfoInput +} + +type LoginState { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: LoginState + isPasswordChangeRequired: Boolean + lastPasswordChangeOn: DateTime + isLocked: Boolean + lastLockedOn: DateTime + failedLoginAttemptCount: Int! + remainingLoginAttempts: Int! + firstFailedLoginAttemptOn: DateTime + lastLoginOn: DateTime + createdOn: DateTime + updatedOn: DateTime +} + +input MZDBHttpContentInput { + headers: [MZDBStringStringIEnumerableKeyValuePairInput] +} + +input MZDBHttpMethodInput { + method: String +} + +input MZDBHttpRequestMessageInput { + version: String + content: MZDBHttpContentInput + method: MZDBHttpMethodInput + requestUri: DateTime + headers: [MZDBStringStringIEnumerableKeyValuePairInput] + properties: Object +} + +input MZDBStringStringIEnumerableKeyValuePairInput { + key: String + value: [String!] +} + +type Mutation { + createCustomerAccountAttributeDefinition( + attributeInput: CuAttributeInput + ): CuAttribute + updateCustomerAccountAttributeDefinition( + attributeFQN: String! + attributeInput: CuAttributeInput + ): CuAttribute + validateCustomerAddress( + addressValidationRequestInput: AddressValidationRequestInput + ): AddressValidationResponse + validateAddress(addressInput: CuAddressInput): [CuAddress] + createCustomerAuthTicket( + customerUserAuthInfoInput: CustomerUserAuthInfoInput + ): CustomerAuthTicket + refreshCustomerAuthTickets(refreshToken: String): CustomerAuthTicket + createCustomerB2bAccountAttribute( + accountId: Int! + customerAttributeInput: CustomerAttributeInput + ): CustomerAttribute + deleteB2bAccountAttribute(accountId: Int!, attributeFQN: String!): Boolean + updateCustomerB2bAccountAttribute( + accountId: Int! + attributeFQN: String! + customerAttributeInput: CustomerAttributeInput + ): CustomerAttribute + createCustomerB2bAccount(b2BAccountInput: B2BAccountInput): B2BAccount + updateCustomerB2bAccount( + accountId: Int! + b2BAccountInput: B2BAccountInput + ): B2BAccount + createCustomerB2bAccountUser( + accountId: Int! + b2BUserAndAuthInfoInput: B2BUserAndAuthInfoInput + ): B2BUser + updateCustomerB2bAccountUser( + accountId: Int! + userId: String! + b2BUserInput: B2BUserInput + ): B2BUser + removeCustomerB2bAccountUser(accountId: Int!, userId: String!): Boolean + addRoleToCustomerB2bAccount( + accountId: Int! + userId: String! + roleId: Int! + ): Boolean + deleteB2bAccountRole(accountId: Int!, userId: String!, roleId: Int!): Boolean + createCustomerCredit(userId: String, creditInput: CreditInput): Credit + updateCustomerCredit(code: String!, creditInput: CreditInput): Credit + deleteCustomerCredit(code: String!): Boolean + updateCustomerCreditAssociateToShopper(code: String!): Credit + resendCustomerCreditEmail(code: String!, userId: String): Boolean + createCustomerCreditTransaction( + code: String! + creditTransactionInput: CreditTransactionInput + ): CreditTransaction + createCustomerAccountAttribute( + accountId: Int! + userId: String + customerAttributeInput: CustomerAttributeInput + ): CustomerAttribute + deleteCustomerAccountAttribute( + accountId: Int! + attributeFQN: String! + userId: String + ): Boolean + updateCustomerAccountAttribute( + accountId: Int! + attributeFQN: String! + userId: String + customerAttributeInput: CustomerAttributeInput + ): CustomerAttribute + createCustomerAccountCard(accountId: Int!, cardInput: CardInput): Card + updateCustomerAccountCard( + accountId: Int! + cardId: String! + cardInput: CardInput + ): Card + deleteCustomerAccountCard(accountId: Int!, cardId: String!): Boolean + createCustomerAccountContact( + accountId: Int! + customerContactInput: CustomerContactInput + ): CustomerContact + updateCustomerAccountContacts( + accountId: Int! + customerContactInput: CustomerContactInput + ): CustomerContactCollection + updateCustomerAccountContact( + accountId: Int! + contactId: Int! + userId: String + customerContactInput: CustomerContactInput + ): CustomerContact + deleteCustomerAccountContact(accountId: Int!, contactId: Int!): Boolean + createCustomerAccount( + customerAccountInput: CustomerAccountInput + ): CustomerAccount + updateCustomerAccount( + accountId: Int! + customerAccountInput: CustomerAccountInput + ): CustomerAccount + deleteCustomerAccount(accountId: Int!): Boolean + createCustomerAccountTransaction( + accountId: Int! + transactionInput: TransactionInput + ): Transaction + deleteCustomerAccountTransaction( + accountId: Int! + transactionId: String! + ): Boolean + recomputeCustomerAccountLifetimeValue(accountId: Int!): Boolean + createCustomerAccountNote( + accountId: Int! + customerNoteInput: CustomerNoteInput + ): CustomerNote + updateCustomerAccountNote( + accountId: Int! + noteId: Int! + customerNoteInput: CustomerNoteInput + ): CustomerNote + deleteCustomerAccountNote(accountId: Int!, noteId: Int!): Boolean + createCustomerAccountPurchaseOrderAccount( + accountId: Int! + customerPurchaseOrderAccountInput: CustomerPurchaseOrderAccountInput + ): CustomerPurchaseOrderAccount + updateCustomerPurchaseOrderAccount( + accountId: Int! + customerPurchaseOrderAccountInput: CustomerPurchaseOrderAccountInput + ): CustomerPurchaseOrderAccount + createCustomerAccountPurchaseOrderAccountTransaction( + accountId: Int! + purchaseOrderTransactionInput: PurchaseOrderTransactionInput + ): PurchaseOrderTransaction + createPurchaseOrderAccount( + startIndex: Int + pageSize: Int + sortBy: String + accountType: String + ): CustomerPurchaseOrderAccountCollection + changeCustomerAccountPassword( + accountId: Int! + unlockAccount: Boolean + userId: String + passwordInfoInput: PasswordInfoInput + ): Boolean + updateCustomerAccountPasswords( + accountPasswordInfoCollectionInput: AccountPasswordInfoCollectionInput + ): ChangePasswordResultCollection + resetCustomerAccountPassword( + resetPasswordInfoInput: ResetPasswordInfoInput + ): Boolean + createCustomerAccountLogin( + accountId: Int! + customerLoginInfoInput: CustomerLoginInfoInput + ): CustomerAuthTicket + createCustomerAccountAndLogin( + customerAccountAndAuthInfoInput: CustomerAccountAndAuthInfoInput + ): CustomerAuthTicket + setCustomerAccountLoginLocked( + accountId: Int! + userId: String + graphQLBoolean: Boolean + ): Boolean + setCustomerAccountPasswordChangeRequired( + accountId: Int! + userId: String + graphQLBoolean: Boolean + ): Boolean + createCustomerAccounts( + customerAccountAndAuthInfoInput: CustomerAccountAndAuthInfoInput + ): CustomerAccountCollection + createCustomerSegment( + customerSegmentInput: CustomerSegmentInput + ): CustomerSegment + updateCustomerSegment( + id: Int! + customerSegmentInput: CustomerSegmentInput + ): CustomerSegment + deleteCustomerSegment(id: Int!): Boolean + createCustomerSegmentAccount(id: Int!, graphQLInt: Int): Boolean + deleteCustomerSegmentAccount(id: Int!, accountId: Int!): Boolean + createInStockNotification( + inStockNotificationSubscriptionInput: InStockNotificationSubscriptionInput + ): InStockNotificationSubscription + deleteInStockNotification(id: Int!): Boolean + createResolvedPriceList(object: Object): ResolvedPriceList + configureProduct( + productCode: String! + includeOptionDetails: Boolean + skipInventoryCheck: Boolean + quantity: Int + purchaseLocation: String + variationProductCodeFilter: String + productOptionSelectionsInput: ProductOptionSelectionsInput + ): ConfiguredProduct + validateProduct( + productCode: String! + skipInventoryCheck: Boolean + quantity: Int + skipDefaults: Boolean + purchaseLocation: String + productOptionSelectionsInput: ProductOptionSelectionsInput + ): ProductValidationSummary + validateProductDiscounts( + productCode: String! + variationProductCode: String + customerAccountId: Int + allowInactive: Boolean + skipInventoryCheck: Boolean + discountSelectionsInput: DiscountSelectionsInput + ): DiscountValidationSummary + manageLocationProductInventory( + locationInventoryQueryInput: LocationInventoryQueryInput + ): LocationInventoryCollection + createProductCost( + productCostQueryInput: ProductCostQueryInput + ): ProductCostCollection + createCartForUser(userId: String!): Cart + updateUserCart(userId: String!, cartInput: CartInput): Cart + updateCurrentCart(cartInput: CartInput): Cart + deleteCurrentCart: Boolean + updateCart(cartId: String!, cartInput: CartInput): Cart + deleteCart(cartId: String!): Boolean + deleteUserCart(userId: String!): Boolean + rejectCartDiscount(cartId: String!, discountId: Int!): Cart + updateCartCoupon(cartId: String!, couponCode: String!): Cart + deleteCartCoupons(cartId: String!): Cart + deleteCartCoupon(cartId: String!, couponCode: String!): Cart + addExtendedPropertyToCurrentCart( + extendedPropertyInput: ExtendedPropertyInput + ): [ExtendedProperty] + updateCurrentCartExtendedProperties( + upsert: Boolean + extendedPropertyInput: ExtendedPropertyInput + ): [ExtendedProperty] + deleteCurrentCartExtendedProperties(graphQLString: String): Boolean + updateCurrentCartExtendedProperty( + key: String! + upsert: Boolean + extendedPropertyInput: ExtendedPropertyInput + ): ExtendedProperty + deleteCurrentCartExtendedProperty(key: String!): Boolean + deleteCurrentCartItems: Cart + addItemToCurrentCart(cartItemInput: CartItemInput): CartItem + deleteCartItems(cartId: String!): Cart + addItemToCart(cartId: String!, cartItemInput: CartItemInput): CartItem + updateCurrentCartItem( + cartItemId: String! + cartItemInput: CartItemInput + ): CartItem + deleteCurrentCartItem(cartItemId: String!): Boolean + updateCartItem( + cartId: String! + cartItemId: String! + cartItemInput: CartItemInput + ): CartItem + deleteCartItem(cartId: String!, cartItemId: String!): Boolean + addItemsToCurrentCart( + throwErrorOnInvalidItems: Boolean + cartItemInput: CartItemInput + ): Boolean + addItemsToCart( + cartId: String! + throwErrorOnInvalidItems: Boolean + cartItemInput: CartItemInput + ): Boolean + updateCurrentCartItemQuantity(cartItemId: String!, quantity: Int!): CartItem + updateCartItemQuantity( + cartId: String! + cartItemId: String! + quantity: Int! + ): CartItem + deleteCurrentCartMessages: Boolean + deleteCurrentCartMessage(messageId: String!): Boolean + createCommerceChannel(channelInput: ChannelInput): Channel + updateChannel(code: String!, channelInput: ChannelInput): Channel + deleteCommerceChannel(code: String!): Boolean + createCommerceChannelGroup(channelGroupInput: ChannelGroupInput): ChannelGroup + updateChannelGroup( + code: String! + channelGroupInput: ChannelGroupInput + ): ChannelGroup + deleteCommerceChannelGroup(code: String!): Boolean + createCheckoutAttribute( + checkoutId: String! + orderAttributeInput: OrderAttributeInput + ): [OrderAttribute] + updateCheckoutAttributes( + checkoutId: String! + removeMissing: Boolean + orderAttributeInput: OrderAttributeInput + ): [OrderAttribute] + updateCheckout(checkoutId: String!, checkoutInput: CheckoutInput): Checkout + createCheckout(cartId: String): Checkout + createCheckoutShippingMethod( + checkoutId: String! + checkoutGroupShippingMethodInput: CheckoutGroupShippingMethodInput + ): Checkout + createCheckoutAction( + checkoutId: String! + checkoutActionInput: CheckoutActionInput + ): Checkout + updateCheckoutDigitalWalletType( + checkoutId: String! + digitalWalletType: String! + digitalWalletInput: DigitalWalletInput + ): Checkout + updateCheckoutPriceList(checkoutId: String!, graphQLString: String): Checkout + resendCheckoutEmail(checkoutId: String!): Boolean + updateCheckoutCoupon(checkoutId: String!, couponCode: String!): Checkout + deleteCheckoutCoupons(checkoutId: String!): Checkout + deleteCheckoutCoupon(checkoutId: String!, couponCode: String!): Checkout + updateCheckoutDestination( + checkoutId: String! + destinationId: String! + destinationInput: DestinationInput + ): Destination + deleteCheckoutDestination( + checkoutId: String! + destinationId: String! + ): Boolean + createCheckoutDestination( + checkoutId: String! + destinationInput: DestinationInput + ): Destination + createCheckoutItem( + checkoutId: String! + orderItemInput: CrOrderItemInput + ): Checkout + deleteCheckoutItem(checkoutId: String!, itemId: String!): Checkout + updateCheckoutItemDestination( + checkoutId: String! + itemId: String! + destinationId: String! + ): Checkout + createCheckoutItemDestination( + checkoutId: String! + itemsForDestinationInput: ItemsForDestinationInput + ): Checkout + createCheckoutPaymentAction( + checkoutId: String! + paymentActionInput: PaymentActionInput + ): Checkout + updateCheckoutPaymentAction( + checkoutId: String! + paymentId: String! + paymentActionInput: PaymentActionInput + ): Checkout + createOrderPaymentAction( + orderId: String! + paymentActionInput: PaymentActionInput + ): Order + createOrderPaymentPaymentAction( + orderId: String! + paymentId: String! + paymentActionInput: PaymentActionInput + ): Order + createOrderAutoCapture(orderId: String!, forceCapture: Boolean): Order + createOrderPickup(orderId: String!, pickupInput: PickupInput): Pickup + updateOrderPickup( + orderId: String! + pickupId: String! + pickupInput: PickupInput + ): Pickup + deleteOrderPickup(orderId: String!, pickupId: String!): Boolean + createOrderRefund(orderId: String!, refundInput: RefundInput): Refund + updateOrderRefund(orderId: String!, refundId: String!): Boolean + createOrderShipment(orderId: String!, graphQLString: String): [PackageObj] + deleteOrderShipment(orderId: String!, shipmentId: String!): Boolean + repriceOrderShipment( + shipmentNumber: Int! + orderId: String! + repriceShipmentObjectInput: RepriceShipmentObjectInput + ): Shipment + createOrderShipmentAdjustment( + orderId: String! + shipmentNumber: Int! + shipmentAdjustmentInput: ShipmentAdjustmentInput + ): Shipment + createOrderShipmentItemAdjustment( + shipmentNumber: Int! + itemId: Int! + orderId: String! + shipmentItemAdjustmentInput: ShipmentItemAdjustmentInput + ): Shipment + splitOrderShipment( + orderId: String! + shipmentNumber: String! + splitShipmentsObjectInput: SplitShipmentsObjectInput + ): [Shipment] + updateOrderValidationResults( + orderId: String! + orderValidationResultInput: OrderValidationResultInput + ): OrderValidationResult + updateOrderAdjustment( + orderId: String! + updateMode: String + version: String + adjustmentInput: AdjustmentInput + ): Order + deleteOrderAdjustment( + orderId: String! + updateMode: String + version: String + ): Order + updateOrderShippingAdjustment( + orderId: String! + updateMode: String + version: String + adjustmentInput: AdjustmentInput + ): Order + deleteOrderAdjustmentShipping( + orderId: String! + updateMode: String + version: String + ): Order + updateOrderHandlingAdjustment( + orderId: String! + updateMode: String + version: String + adjustmentInput: AdjustmentInput + ): Order + deleteOrderAdjustmentHandling( + orderId: String! + updateMode: String + version: String + ): Order + createOrderAttribute( + orderId: String! + orderAttributeInput: OrderAttributeInput + ): [OrderAttribute] + updateOrderAttributes( + orderId: String! + removeMissing: Boolean + orderAttributeInput: OrderAttributeInput + ): [OrderAttribute] + updateOrderBillingInfo( + orderId: String! + updateMode: String + version: String + billingInfoInput: BillingInfoInput + ): BillingInfo + cancelOrder(orderId: String!, canceledReasonInput: CanceledReasonInput): Order + createOrder(cartId: String, quoteId: String, orderInput: OrderInput): Order + updateUserOrder(orderId: String!): Order + updateOrderPriceList( + orderId: String! + updateMode: String + version: String + graphQLString: String + ): Order + resendOrderEmail( + orderId: String! + orderActionInput: OrderActionInput + ): Boolean + updateOrder( + orderId: String! + updateMode: String + version: String + orderInput: OrderInput + ): Order + updateOrderDigitalWalletTpe( + orderId: String! + digitalWalletType: String! + digitalWalletInput: DigitalWalletInput + ): Order + updateOrderDraft(orderId: String!, version: String): Boolean + createOrderAction(orderId: String!, orderActionInput: OrderActionInput): Order + updateOrderDiscount( + orderId: String! + discountId: Int! + updateMode: String + version: String + appliedDiscountInput: CrAppliedDiscountInput + ): Order + updateOrderPrice(refreshShipping: Boolean, orderInput: OrderInput): Order + updateOrderCoupon( + orderId: String! + couponCode: String! + updateMode: String + version: String + ): Order + deleteOrderCoupons( + orderId: String! + updateMode: String + version: String + ): Order + deleteOrderCoupon( + orderId: String! + couponCode: String! + updateMode: String + version: String + ): Order + createOrderDigitalPackage( + orderId: String! + digitalPackageInput: DigitalPackageInput + ): DigitalPackage + updateOrderDigitalPackage( + orderId: String! + digitalPackageId: String! + digitalPackageInput: DigitalPackageInput + ): DigitalPackage + deleteOrderDigitalPackage( + orderId: String! + digitalPackageId: String! + ): Boolean + createOrderExtendedProperties( + orderId: String! + updateMode: String + version: String + extendedPropertyInput: ExtendedPropertyInput + ): [ExtendedProperty] + updateOrderExtendedProperties( + orderId: String! + updateMode: String + version: String + upsert: Boolean + extendedPropertyInput: ExtendedPropertyInput + ): [ExtendedProperty] + deleteOrderExtendedProperties( + orderId: String! + updateMode: String + version: String + graphQLString: String + ): Boolean + updateOrderExtendedProperty( + orderId: String! + key: String! + updateMode: String + version: String + upsert: Boolean + extendedPropertyInput: ExtendedPropertyInput + ): ExtendedProperty + deleteOrderExtendedProperty( + orderId: String! + key: String! + updateMode: String + version: String + ): Boolean + createOrderFulfillmentAction( + orderId: String! + fulfillmentActionInput: FulfillmentActionInput + ): Order + resendOrderFulfillmentEmail( + orderId: String! + fulfillmentActionInput: FulfillmentActionInput + ): Order + updateOrderFulfillmentInfo( + orderId: String! + updateMode: String + version: String + fulfillmentInfoInput: FulfillmentInfoInput + ): FulfillmentInfo + createOrderItem( + orderId: String! + updateMode: String + version: String + skipInventoryCheck: Boolean + orderItemInput: CrOrderItemInput + ): Order + deleteOrderItem( + orderId: String! + orderItemId: String! + updateMode: String + version: String + ): Order + updateOrderItemPrice( + orderId: String! + orderItemId: String! + price: Float! + updateMode: String + version: String + ): Order + updateOrderItemQuantity( + orderId: String! + orderItemId: String! + quantity: Int! + updateMode: String + version: String + ): Order + updateOrderItemDutyAmount( + orderId: String! + orderItemId: String! + dutyAmount: Float! + updateMode: String + version: String + ): Order + updateOrderItemFulfillment( + orderId: String! + orderItemId: String! + updateMode: String + version: String + orderItemInput: CrOrderItemInput + ): Order + updateOrderItemDiscount( + orderId: String! + orderItemId: String! + discountId: Int! + updateMode: String + version: String + appliedDiscountInput: CrAppliedDiscountInput + ): Order + createOrderNote(orderId: String!, orderNoteInput: OrderNoteInput): OrderNote + updateOrderNotes( + orderId: String! + noteId: String! + orderNoteInput: OrderNoteInput + ): OrderNote + deleteOrderNote(orderId: String!, noteId: String!): Boolean + createOrderPackage( + orderId: String! + packageObjInput: PackageObjInput + ): PackageObj + updateOrderPackage( + orderId: String! + packageId: String! + packageObjInput: PackageObjInput + ): PackageObj + deleteOrderPackage(orderId: String!, packageId: String!): Boolean + validateOrder(orderInput: OrderInput): OrderValidationResult + updateQuote( + quoteId: String! + updateMode: String + quoteInput: QuoteInput + ): Quote + deleteQuote(quoteId: String!, draft: Boolean): Boolean + createQuote(quoteInput: QuoteInput): Quote + createQuoteItem( + quoteId: String! + updateMode: String + orderItemInput: CrOrderItemInput + ): Quote + deleteQuoteItem( + quoteId: String! + quoteItemId: String! + updateMode: String + ): Boolean + createReturn(returnObjInput: ReturnObjInput): ReturnObj + resendReturnEmail(returnActionInput: ReturnActionInput): Boolean + updateReturn(returnId: String!, returnObjInput: ReturnObjInput): ReturnObj + deleteReturn(returnId: String!): Boolean + createReturnAction(returnActionInput: ReturnActionInput): ReturnCollection + setReturnShip( + returnId: String! + returnItemSpecifierInput: ReturnItemSpecifierInput + ): Order + createReturnPaymentAction( + returnId: String! + paymentActionInput: PaymentActionInput + ): ReturnObj + createReturnPaymentPaymentAction( + returnId: String! + paymentId: String! + paymentActionInput: PaymentActionInput + ): ReturnObj + setReturnRestock( + returnId: String! + restockableReturnItemInput: RestockableReturnItemInput + ): ReturnObj + createReturnItem( + returnId: String! + returnItemInput: ReturnItemInput + ): ReturnObj + deleteReturnItem( + returnId: String + returnItemId: String + orderId: String! + orderItemId: String! + ): ReturnObj + createReturnNote(returnId: String!, orderNoteInput: OrderNoteInput): OrderNote + updateReturnNote( + returnId: String! + noteId: String! + orderNoteInput: OrderNoteInput + ): OrderNote + deleteReturnNote(returnId: String!, noteId: String!): Boolean + createReturnPackage( + returnId: String! + packageObjInput: PackageObjInput + ): PackageObj + updateReturnPackage( + returnId: String! + packageId: String! + packageObjInput: PackageObjInput + ): PackageObj + deleteReturnPackage(returnId: String!, packageId: String!): Boolean + createReturnShipment(returnId: String!, graphQLString: String): [PackageObj] + deleteReturnShipment(returnId: String!, shipmentId: String!): Boolean + createWishlist(wishlistInput: WishlistInput): Wishlist + updateWishlist(wishlistId: String!, wishlistInput: WishlistInput): Wishlist + deleteWishlist(wishlistId: String!): Boolean + deleteWishlistItems(wishlistId: String!): Wishlist + createWishlistItem( + wishlistId: String! + wishlistItemInput: WishlistItemInput + ): WishlistItem + updateWishlistItem( + wishlistId: String! + wishlistItemId: String! + wishlistItemInput: WishlistItemInput + ): WishlistItem + deleteWishlistItem(wishlistId: String!, wishlistItemId: String!): Boolean + updateWishlistItemQuantity( + wishlistId: String! + wishlistItemId: String! + quantity: Int! + ): WishlistItem + updateDocumentListDocumentContent( + documentListName: String! + documentId: String! + httpRequestMessageInput: CoHttpRequestMessageInput + ): Boolean + deleteDocumentListDocumentContent( + documentListName: String! + documentId: String! + ): Boolean + updateDocumentListDocumentTreeContent( + documentListName: String! + documentName: String! + httpRequestMessageInput: CoHttpRequestMessageInput + ): Boolean + deleteDocumentListDocumentTreeContent( + documentListName: String! + documentName: String! + httpRequestMessageInput: CoHttpRequestMessageInput + ): Boolean + createDocumentListDocument( + documentListName: String! + documentInput: DocumentInput + ): Document + updateDocumentListDocument( + documentListName: String! + documentId: String! + documentInput: DocumentInput + ): Document + patchDocumentListDocument( + documentListName: String! + documentId: String! + documentInput: DocumentInput + ): Document + deleteDocumentListDocument( + documentListName: String! + documentId: String! + ): Boolean + createDocumentList(documentListInput: DocumentListInput): DocumentList + updateDocumentList( + documentListName: String! + documentListInput: DocumentListInput + ): DocumentList + deleteDocumentList(documentListName: String!): Boolean + createDocumentListType( + documentListTypeInput: DocumentListTypeInput + ): DocumentListType + updateDocumentListType( + documentListTypeFQN: String! + documentListTypeInput: DocumentListTypeInput + ): DocumentListType + createDocumentDraft(documentLists: String, graphQLString: String): Boolean + toggleDocumentPublishing( + documentLists: String + graphQLString: String + ): Boolean + createDocumentType(documentTypeInput: DocumentTypeInput): DocumentType + updateDocumentType( + documentTypeName: String! + documentTypeInput: DocumentTypeInput + ): DocumentType + createPropertyType(propertyTypeInput: PropertyTypeInput): PropertyType + updatePropertyType( + propertyTypeName: String! + propertyTypeInput: PropertyTypeInput + ): PropertyType + deletePropertyType(propertyTypeName: String!): Boolean + adminCreateLocation(locationInput: LocationInput): Location + adminUpdateLocation( + locationCode: String! + locationInput: LocationInput + ): Location + deleteAdminLocation(locationCode: String!): Boolean + adminCreateLocationAttribute(attributeInput: LoAttributeInput): LoAttribute + adminUpdateLocationAttribute( + attributeFQN: String! + attributeInput: LoAttributeInput + ): LoAttribute + adminCreateLocationGroup( + locationGroupInput: LocationGroupInput + ): LocationGroup + updateLocationUsage( + code: String! + locationUsageInput: LocationUsageInput + ): LocationUsage + adminCreateLocationType(locationTypeInput: LocationTypeInput): LocationType + adminUpdateLocationType( + locationTypeCode: String! + locationTypeInput: LocationTypeInput + ): LocationType + deleteAdminLocationType(locationTypeCode: String!): Boolean + updateEntityListEntities( + entityListFullName: String! + id: String! + httpRequestMessageInput: MZDBHttpRequestMessageInput + ): Boolean + deleteEntityListEntity(entityListFullName: String!, id: String!): Boolean + createEntityListEntity( + entityListFullName: String! + httpRequestMessageInput: MZDBHttpRequestMessageInput + ): Boolean + updateEntityList( + entityListFullName: String! + entityListInput: EntityListInput + ): EntityList + deleteEntityList(entityListFullName: String!): Boolean + createEntityList(entityListInput: EntityListInput): EntityList + createEntityListView( + entityListFullName: String! + listViewInput: ListViewInput + ): ListView + updateEntityListView( + entityListFullName: String! + viewName: String! + listViewInput: ListViewInput + ): ListView + deleteEntityListView(entityListFullName: String!, viewName: String!): Boolean + createTargetRule(targetRuleInput: TargetRuleInput): TargetRule + updateTargetRule(code: String!, targetRuleInput: TargetRuleInput): TargetRule + deleteCommerceTargetRule(code: String!): Boolean + validateTargetRule(targetRuleInput: TargetRuleInput): Boolean + createOrderRoutingSuggestion( + returnSuggestionLog: Boolean + suggestionRequestInput: SuggestionRequestInput + ): SuggestionResponse +} + +enum NodeTypeEnum { + ARRAY + BINARY + BOOLEAN + MISSING + NULL + NUMBER + OBJECT + POJO + STRING +} + +""" +Object custom scalar type +""" +scalar Object + +type Order { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Order + orderNumber: Int + locationCode: String + version: String + parentOrderId: String + parentOrderNumber: Int + parentCheckoutId: String + parentCheckoutNumber: Int + partialOrderNumber: Int + partialOrderCount: Int + isPartialOrder: Boolean + parentReturnId: String + parentReturnNumber: Int + originalCartId: String + originalQuoteId: String + originalQuoteNumber: Int + priceListCode: String + availableActions: [String!] + shopperNotes: ShopperNotes + customerAccountId: Int + customerTaxId: String + isTaxExempt: Boolean + email: String + ipAddress: String + sourceDevice: String + acceptsMarketing: Boolean + status: String + type: String + paymentStatus: String + returnStatus: String + isEligibleForReturns: Boolean + totalCollected: Float! + attributes: [OrderAttribute] + adjustment: Adjustment + shippingAdjustment: Adjustment + handlingAdjustment: Adjustment + shippingDiscounts: [ShippingDiscount] + handlingDiscounts: [CrAppliedDiscount] + handlingAmount: Float + handlingSubTotal: Float + handlingTotal: Float + dutyAmount: Float + dutyTotal: Float + fulfillmentStatus: String + submittedDate: DateTime + cancelledDate: DateTime + closedDate: DateTime + acceptedDate: DateTime + notes: [OrderNote] + items: [CrOrderItem] + validationResults: [OrderValidationResult] + billingInfo: BillingInfo + payments: [Payment] + refunds: [Refund] + packages: [PackageObj] + pickups: [Pickup] + digitalPackages: [DigitalPackage] + shipments: [Shipment] + isDraft: Boolean + hasDraft: Boolean + isImport: Boolean + isHistoricalImport: Boolean + importDate: DateTime + isUnified: Boolean + externalId: String + couponCodes: [String!] + invalidCoupons: [InvalidCoupon] + amountAvailableForRefund: Float! + amountRemainingForPayment: Float! + amountRefunded: Float! + readyToCapture: Boolean + isOptInForSms: Boolean + userId: String + id: String + tenantId: Int + siteId: Int + channelCode: String + currencyCode: String + visitId: String + webSessionId: String + customerInteractionType: String + fulfillmentInfo: FulfillmentInfo + orderDiscounts: [CrAppliedDiscount] + suggestedDiscounts: [SuggestedDiscount] + rejectedDiscounts: [SuggestedDiscount] + data: Object + taxData: Object + subtotal: Float + discountedSubtotal: Float + discountTotal: Float + discountedTotal: Float + shippingTotal: Float + shippingSubTotal: Float + shippingTaxTotal: Float + handlingTaxTotal: Float + itemTaxTotal: Float + taxTotal: Float + feeTotal: Float + total: Float + lineItemSubtotalWithOrderAdjustments: Float + shippingAmountBeforeDiscountsAndAdjustments: Float + lastValidationDate: DateTime + expirationDate: DateTime + changeMessages: [ChangeMessage] + extendedProperties: [ExtendedProperty] + discountThresholdMessages: [ThresholdMessage] + auditInfo: CrAuditInfo +} + +input OrderActionInput { + actionName: String +} + +type OrderAttribute { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: OrderAttribute + auditInfo: CrAuditInfo + fullyQualifiedName: String + attributeDefinitionId: Int + values: [Object!] +} + +input OrderAttributeInput { + auditInfo: CrAuditInfoInput + fullyQualifiedName: String + attributeDefinitionId: Int + values: [Object!] +} + +type OrderCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: OrderCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [Order] +} + +input OrderInput { + orderNumber: Int + locationCode: String + version: String + parentOrderId: String + parentOrderNumber: Int + parentCheckoutId: String + parentCheckoutNumber: Int + partialOrderNumber: Int + partialOrderCount: Int + isPartialOrder: Boolean = false + parentReturnId: String + parentReturnNumber: Int + originalCartId: String + originalQuoteId: String + originalQuoteNumber: Int + priceListCode: String + availableActions: [String!] + shopperNotes: ShopperNotesInput + customerAccountId: Int + customerTaxId: String + isTaxExempt: Boolean = false + email: String + ipAddress: String + sourceDevice: String + acceptsMarketing: Boolean = false + status: String + type: String + paymentStatus: String + returnStatus: String + isEligibleForReturns: Boolean = false + totalCollected: Float! + attributes: [OrderAttributeInput] + adjustment: AdjustmentInput + shippingAdjustment: AdjustmentInput + handlingAdjustment: AdjustmentInput + shippingDiscounts: [ShippingDiscountInput] + handlingDiscounts: [CrAppliedDiscountInput] + handlingAmount: Float + handlingSubTotal: Float + handlingTotal: Float + dutyAmount: Float + dutyTotal: Float + fulfillmentStatus: String + submittedDate: DateTime + cancelledDate: DateTime + closedDate: DateTime + acceptedDate: DateTime + notes: [OrderNoteInput] + items: [CrOrderItemInput] + validationResults: [OrderValidationResultInput] + billingInfo: BillingInfoInput + payments: [PaymentInput] + refunds: [RefundInput] + packages: [PackageObjInput] + pickups: [PickupInput] + digitalPackages: [DigitalPackageInput] + shipments: [ShipmentInput] + isDraft: Boolean = false + hasDraft: Boolean = false + isImport: Boolean = false + isHistoricalImport: Boolean = false + importDate: DateTime + isUnified: Boolean = false + externalId: String + couponCodes: [String!] + invalidCoupons: [InvalidCouponInput] + amountAvailableForRefund: Float! + amountRemainingForPayment: Float! + amountRefunded: Float! + readyToCapture: Boolean = false + isOptInForSms: Boolean = false + userId: String + id: String + tenantId: Int + siteId: Int + channelCode: String + currencyCode: String + visitId: String + webSessionId: String + customerInteractionType: String + fulfillmentInfo: FulfillmentInfoInput + orderDiscounts: [CrAppliedDiscountInput] + suggestedDiscounts: [SuggestedDiscountInput] + rejectedDiscounts: [SuggestedDiscountInput] + data: Object + taxData: Object + subtotal: Float + discountedSubtotal: Float + discountTotal: Float + discountedTotal: Float + shippingTotal: Float + shippingSubTotal: Float + shippingTaxTotal: Float + handlingTaxTotal: Float + itemTaxTotal: Float + taxTotal: Float + feeTotal: Float + total: Float + lineItemSubtotalWithOrderAdjustments: Float + shippingAmountBeforeDiscountsAndAdjustments: Float + lastValidationDate: DateTime + expirationDate: DateTime + changeMessages: [ChangeMessageInput] + extendedProperties: [ExtendedPropertyInput] + discountThresholdMessages: [ThresholdMessageInput] + auditInfo: CrAuditInfoInput +} + +type OrderItemCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: OrderItemCollection + totalCount: Int! + items: [CrOrderItem] +} + +input OrderItemInput { + backorderable: Boolean = false + customItemData: Object! + itemDependency: Int! + orderItemID: Int! + partNumber: String! + quantity: Int! + sku: String! + upc: String! +} + +type OrderNote { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: OrderNote + id: String + text: String + auditInfo: CrAuditInfo +} + +input OrderNoteInput { + id: String + text: String + auditInfo: CrAuditInfoInput +} + +type OrderReturnableItem { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: OrderReturnableItem + productCode: String + productName: String + shipmentNumber: Int + shipmentItemId: Int + quantityOrdered: Int! + quantityFulfilled: Int! + quantityReturned: Int! + quantityReturnable: Int! + fulfillmentStatus: String + orderItemId: String + orderLineId: Int! + orderItemOptionAttributeFQN: String + unitQuantity: Int! + parentProductCode: String + parentProductName: String + fulfillmentFields: [FulfillmentField] + sku: String + mfgPartNumber: String +} + +type OrderReturnableItemCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: OrderReturnableItemCollection + totalCount: Int! + items: [OrderReturnableItem] +} + +enum OrderTypeEnum { + DIRECTSHIP + TRANSFER +} + +type OrderValidationMessage { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: OrderValidationMessage + orderItemId: String + messageType: String + message: String +} + +input OrderValidationMessageInput { + orderItemId: String + messageType: String + message: String +} + +type OrderValidationResult { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: OrderValidationResult + validationId: String + validatorName: String + validatorType: String + status: String + createdDate: DateTime + messages: [OrderValidationMessage] +} + +input OrderValidationResultInput { + validationId: String + validatorName: String + validatorType: String + status: String + createdDate: DateTime + messages: [OrderValidationMessageInput] +} + +type PackageItem { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PackageItem + productCode: String + quantity: Int! + fulfillmentItemType: String + lineId: Int + optionAttributeFQN: String +} + +input PackageItemInput { + productCode: String + quantity: Int! + fulfillmentItemType: String + lineId: Int + optionAttributeFQN: String +} + +type PackageObj { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PackageObj + shippingMethodCode: String + shippingMethodName: String + shipmentId: String + trackingNumber: String + trackingNumbers: [String!] + packagingType: String + hasLabel: Boolean + measurements: CrPackageMeasurements + carrier: String + signatureRequired: Boolean + trackings: [Tracking] + id: String + code: String + status: String + items: [PackageItem] + fulfillmentDate: DateTime + fulfillmentLocationCode: String + auditInfo: CrAuditInfo + availableActions: [String!] + changeMessages: [ChangeMessage] +} + +input PackageObjInput { + shippingMethodCode: String + shippingMethodName: String + shipmentId: String + trackingNumber: String + trackingNumbers: [String!] + packagingType: String + hasLabel: Boolean = false + measurements: CrPackageMeasurementsInput + carrier: String + signatureRequired: Boolean = false + trackings: [TrackingInput] + id: String + code: String + status: String + items: [PackageItemInput] + fulfillmentDate: DateTime + fulfillmentLocationCode: String + auditInfo: CrAuditInfoInput + availableActions: [String!] + changeMessages: [ChangeMessageInput] +} + +type PackageSettings { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PackageSettings + unitType: String +} + +input PasswordInfoInput { + oldPassword: String + newPassword: String + externalPassword: String +} + +type Payment { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Payment + id: String + groupId: PaymentActionTarget + paymentServiceTransactionId: String + availableActions: [String!] + orderId: String + paymentType: String + paymentWorkflow: String + externalTransactionId: String + billingInfo: BillingInfo + data: Object + status: String + subPayments: [SubPayment] + interactions: [PaymentInteraction] + isRecurring: Boolean + amountCollected: Float! + amountCredited: Float! + amountRequested: Float! + changeMessages: [ChangeMessage] + auditInfo: CrAuditInfo + gatewayGiftCard: GatewayGiftCard +} + +input PaymentActionInput { + actionName: String + currencyCode: String + checkNumber: String + returnUrl: String + cancelUrl: String + amount: Float + interactionDate: DateTime + newBillingInfo: BillingInfoInput + referenceSourcePaymentId: String + manualGatewayInteraction: PaymentGatewayInteractionInput + externalTransactionId: String + data: Object +} + +type PaymentActionTarget { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PaymentActionTarget + targetType: String + targetId: String + targetNumber: Int +} + +input PaymentActionTargetInput { + targetType: String + targetId: String + targetNumber: Int +} + +type PaymentCard { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PaymentCard + paymentServiceCardId: String + isUsedRecurring: Boolean + nameOnCard: String + isCardInfoSaved: Boolean + isTokenized: Boolean + paymentOrCardType: String + cardNumberPartOrMask: String + expireMonth: Int! + expireYear: Int! + bin: String +} + +input PaymentCardInput { + paymentServiceCardId: String + isUsedRecurring: Boolean = false + nameOnCard: String + isCardInfoSaved: Boolean = false + isTokenized: Boolean = false + paymentOrCardType: String + cardNumberPartOrMask: String + expireMonth: Int! + expireYear: Int! + bin: String +} + +type PaymentCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PaymentCollection + totalCount: Int! + items: [Payment] +} + +input PaymentGatewayInteractionInput { + gatewayInteractionId: Int + gatewayTransactionId: String + gatewayAuthCode: String + gatewayAVSCodes: String + gatewayCVV2Codes: String + gatewayResponseCode: String + gatewayResponseText: String +} + +type PaymentGatewayResponseData { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PaymentGatewayResponseData + key: String + value: String +} + +input PaymentGatewayResponseDataInput { + key: String + value: String +} + +input PaymentInput { + id: String + groupId: PaymentActionTargetInput + paymentServiceTransactionId: String + availableActions: [String!] + orderId: String + paymentType: String + paymentWorkflow: String + externalTransactionId: String + billingInfo: BillingInfoInput + data: Object + status: String + subPayments: [SubPaymentInput] + interactions: [PaymentInteractionInput] + isRecurring: Boolean = false + amountCollected: Float! + amountCredited: Float! + amountRequested: Float! + changeMessages: [ChangeMessageInput] + auditInfo: CrAuditInfoInput + gatewayGiftCard: GatewayGiftCardInput +} + +type PaymentInteraction { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PaymentInteraction + id: String + gatewayInteractionId: Int + paymentId: String + orderId: String + target: PaymentActionTarget + currencyCode: String + interactionType: String + checkNumber: String + status: String + paymentEntryStatus: String + isRecurring: Boolean + isManual: Boolean + gatewayTransactionId: String + gatewayAuthCode: String + gatewayAVSCodes: String + gatewayCVV2Codes: String + gatewayResponseCode: String + gatewayResponseText: String + gatewayResponseData: [PaymentGatewayResponseData] + paymentTransactionInteractionIdReference: Int + amount: Float + note: String + interactionDate: DateTime + auditInfo: CrAuditInfo + returnId: String + refundId: String + capturableShipmentsSummary: [CapturableShipmentSummary] +} + +input PaymentInteractionInput { + id: String + gatewayInteractionId: Int + paymentId: String + orderId: String + target: PaymentActionTargetInput + currencyCode: String + interactionType: String + checkNumber: String + status: String + paymentEntryStatus: String + isRecurring: Boolean = false + isManual: Boolean = false + gatewayTransactionId: String + gatewayAuthCode: String + gatewayAVSCodes: String + gatewayCVV2Codes: String + gatewayResponseCode: String + gatewayResponseText: String + gatewayResponseData: [PaymentGatewayResponseDataInput] + paymentTransactionInteractionIdReference: Int + amount: Float + note: String + interactionDate: DateTime + auditInfo: CrAuditInfoInput + returnId: String + refundId: String + capturableShipmentsSummary: [CapturableShipmentSummaryInput] +} + +type PaymentToken { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PaymentToken + paymentServiceTokenId: String + type: String +} + +input PaymentTokenInput { + paymentServiceTokenId: String + type: String +} + +type Pickup { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Pickup + id: String + code: String + status: String + items: [PickupItem] + fulfillmentDate: DateTime + fulfillmentLocationCode: String + auditInfo: CrAuditInfo + availableActions: [String!] + changeMessages: [ChangeMessage] +} + +input PickupInput { + id: String + code: String + status: String + items: [PickupItemInput] + fulfillmentDate: DateTime + fulfillmentLocationCode: String + auditInfo: CrAuditInfoInput + availableActions: [String!] + changeMessages: [ChangeMessageInput] +} + +type PickupItem { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PickupItem + productCode: String + quantity: Int! + fulfillmentItemType: String + lineId: Int + optionAttributeFQN: String +} + +input PickupItemInput { + productCode: String + quantity: Int! + fulfillmentItemType: String + lineId: Int + optionAttributeFQN: String +} + +type PrAppliedDiscount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PrAppliedDiscount + couponCode: String + discount: PrDiscount + discounts: [PrDiscount] + impact: Float! +} + +type PrAttributeValidation { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PrAttributeValidation + regularExpression: String + minStringLength: Int + maxStringLength: Int + minNumericValue: Float + maxNumericValue: Float + minDateValue: DateTime + maxDateValue: DateTime +} + +type PrBundledProduct { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PrBundledProduct + content: ProductContent + productCode: String + goodsType: String + quantity: Int! + measurements: PrPackageMeasurements + isPackagedStandAlone: Boolean + inventoryInfo: ProductInventoryInfo + optionAttributeFQN: String + optionValue: Object + creditValue: Float + productType: String +} + +type PrCategory { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PrCategory + categoryId: Int! + parentCategory: PrCategory + content: CategoryContent + childrenCategories: [PrCategory] + sequence: Int + isDisplayed: Boolean + categoryCode: String + count: Int + updateDate: DateTime! + shouldSlice: Boolean +} + +type PrDiscount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PrDiscount + discountId: Int! + expirationDate: DateTime + name: String + friendlyDescription: String + impact: Float! +} + +type PrMeasurement { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PrMeasurement + unit: String + value: Float +} + +type PrPackageMeasurements { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PrPackageMeasurements + packageHeight: PrMeasurement + packageWidth: PrMeasurement + packageLength: PrMeasurement + packageWeight: PrMeasurement +} + +type PriceList { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PriceList + priceListCode: String + priceListId: Int! + enabled: Boolean + name: String + resolvable: Boolean + isIndexed: Boolean + filteredInStoreFront: Boolean + isSiteDefault: Boolean + description: String + ancestors: [PriceListNode] + descendants: [PriceListNode] + validSites: [Int!] +} + +type PriceListNode { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PriceListNode + priceListCode: String + priceListId: Int! + parentPriceListId: Int + priceListLevel: Int! +} + +type PricingAppliedDiscount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PricingAppliedDiscount + impact: Float! + discount: PricingDiscount + couponCode: String + couponSetId: Int +} + +type PricingAppliedLineItemProductDiscount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PricingAppliedLineItemProductDiscount + appliesToSalePrice: Boolean + quantity: Int! + impactPerUnit: Float! + isForced: Boolean + normalizedImpact: Float! + impact: Float! + discount: PricingDiscount + couponCode: String + couponSetId: Int +} + +type PricingAppliedLineItemShippingDiscount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PricingAppliedLineItemShippingDiscount + shippingMethodCode: String + quantity: Int! + impactPerUnit: Float! + isForced: Boolean + normalizedImpact: Float! + impact: Float! + discount: PricingDiscount + couponCode: String + couponSetId: Int +} + +type PricingAppliedOrderShippingDiscount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PricingAppliedOrderShippingDiscount + shippingMethodCode: String + impact: Float! + discount: PricingDiscount + couponCode: String + couponSetId: Int +} + +type PricingDiscount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PricingDiscount + discountId: Int! + name: String + friendlyDescription: String + amount: Float! + scope: String + maxRedemptions: Int + maximumUsesPerUser: Int + requiresAuthenticatedUser: Boolean + doesNotApplyToProductsWithSalePrice: Boolean + maximumRedemptionsPerOrder: Int + maximumDiscountValuePerOrder: Float + maxDiscountValuePerRedemption: Float + doesNotApplyToMultiShipToOrders: Boolean + includedPriceLists: [String!] + redemptions: Int! + type: String + amountType: String + target: PricingDiscountTarget + condition: PricingDiscountCondition + expirationDate: DateTime + stackingLayer: Int! +} + +type PricingDiscountCondition { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PricingDiscountCondition + requiresCoupon: Boolean + couponCode: String + minimumQuantityProductsRequiredInCategories: Int + includedCategoryIds: [Int!] + excludedCategoryIds: [Int!] + minimumQuantityRequiredProducts: Int + includedProductCodes: [String!] + excludedProductCodes: [String!] + paymentWorkflows: [String!] + customerSegmentIds: [Int!] + minimumOrderAmount: Float + maximumOrderAmount: Float + minimumLifetimeValueAmount: Float + startDate: DateTime + expirationDate: DateTime + minimumCategorySubtotalBeforeDiscounts: Float +} + +type PricingDiscountTarget { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PricingDiscountTarget + type: String + includedCategoryIds: [Int!] + excludedCategoryIds: [Int!] + includedCategoriesOperator: String + excludedCategoriesOperator: String + includedProductCodes: [String!] + excludedProductCodes: [String!] + includeAllProducts: Boolean + shippingMethods: [String!] + shippingZones: [String!] +} + +type PricingProductAttribute { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PricingProductAttribute + inputType: String + valueType: String + dataType: String + name: String + description: String +} + +type PricingProductProperty { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PricingProductProperty + attributeFQN: String + values: [PricingProductPropertyValue] + attributeDetail: PricingProductAttribute + isHidden: Boolean + isMultiValue: Boolean +} + +type PricingProductPropertyValue { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PricingProductPropertyValue + value: Object + stringValue: String +} + +type PricingTaxAttribute { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PricingTaxAttribute + fullyQualifiedName: String + attributeDefinitionId: Int + values: [Object!] +} + +type PricingTaxContext { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PricingTaxContext + taxContextId: String + customerId: String + taxExemptId: String + originAddress: CrAddress + destinationAddress: CrAddress +} + +type PricingTaxableLineItem { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PricingTaxableLineItem + id: String + productCode: String + variantProductCode: String + productName: String + productProperties: [PricingProductProperty] + quantity: Int! + lineItemPrice: Float! + discountTotal: Float + discountedTotal: Float + shippingAmount: Float! + handlingAmount: Float + feeTotal: Float + isTaxable: Boolean + reason: String + data: Object + productDiscount: PricingAppliedLineItemProductDiscount + shippingDiscount: PricingAppliedLineItemShippingDiscount + productDiscounts: [PricingAppliedLineItemProductDiscount] + shippingDiscounts: [PricingAppliedLineItemShippingDiscount] + originAddress: CrAddress + destinationAddress: CrAddress +} + +type PricingTaxableOrder { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PricingTaxableOrder + orderDate: DateTime! + taxContext: PricingTaxContext + lineItems: [PricingTaxableLineItem] + shippingAmount: Float! + currencyCode: String + handlingFee: Float! + originalDocumentCode: String + orderId: String + orderNumber: Int + originalOrderDate: DateTime! + data: Object + attributes: [PricingTaxAttribute] + shippingDiscounts: [PricingAppliedOrderShippingDiscount] + shippingDiscount: PricingAppliedOrderShippingDiscount + orderDiscounts: [PricingAppliedDiscount] + orderDiscount: PricingAppliedDiscount + handlingDiscounts: [PricingAppliedDiscount] + handlingDiscount: PricingAppliedDiscount + shippingMethodCode: String + shippingMethodName: String + taxRequestType: String +} + +type Product { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Product + productCode: String + purchaseLocation: String + productSequence: Int + productUsage: String + fulfillmentTypesSupported: [String!] + goodsType: String + bundledProducts: [PrBundledProduct] + content: ProductContent + purchasableState: ProductPurchasableState + isActive: Boolean + publishState: String + price: ProductPrice + priceRange: ProductPriceRange + volumePriceBands: [ProductVolumePrice] + volumePriceRange: ProductPriceRange + availableShippingDiscounts: [PrDiscount] + productType: String + productTypeId: Int + isTaxable: Boolean + isRecurring: Boolean + pricingBehavior: ProductPricingBehaviorInfo + inventoryInfo: ProductInventoryInfo + createDate: DateTime! + updateDate: DateTime! + dateFirstAvailableInCatalog: DateTime + catalogStartDate: DateTime + catalogEndDate: DateTime + daysAvailableInCatalog: Int + upc: String + upCs: [String!] + mfgPartNumber: String + mfgPartNumbers: [String!] + variationProductCode: String + categories: [PrCategory] + measurements: PrPackageMeasurements + isPackagedStandAlone: Boolean + properties( + filterAttribute: String + filterOperator: String + filterValue: Object + ): [ProductProperty] + options: [ProductOption] + variations: [VariationSummary] + validPriceLists: [String!] + locationsInStock: [String!] + slicingAttributeFQN: String + productImageGroups: [ProductImageGroup] + sliceValue: String + productCollections: [ProductCollectionInfo] + productCollectionMembers: [ProductCollectionMember] + collectionMembersProductContent: [ProductContent] + score: Float! + personalizationScore: Float! +} + +type ProductCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductCollection + nextCursorMark: String + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [Product] +} + +type ProductCollectionInfo { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductCollectionInfo + productCode: String + isPrimary: Boolean +} + +type ProductCollectionMember { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductCollectionMember + memberKey: ProductCollectionMemberKey +} + +type ProductCollectionMemberKey { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductCollectionMemberKey + value: String +} + +type ProductContent { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductContent + productName: String + productFullDescription: String + productShortDescription: String + metaTagTitle: String + metaTagDescription: String + metaTagKeywords: String + seoFriendlyUrl: String + productImages: [ProductImage] +} + +type ProductCost { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductCost + productCode: String + cost: Float! +} + +type ProductCostCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductCostCollection + totalCount: Int! + items: [ProductCost] +} + +input ProductCostQueryInput { + productCodes: [String!] +} + +type ProductForIndexing { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductForIndexing + slices: [Product] + productCode: String + purchaseLocation: String + productSequence: Int + productUsage: String + fulfillmentTypesSupported: [String!] + goodsType: String + bundledProducts: [PrBundledProduct] + content: ProductContent + purchasableState: ProductPurchasableState + isActive: Boolean + publishState: String + price: ProductPrice + priceRange: ProductPriceRange + volumePriceBands: [ProductVolumePrice] + volumePriceRange: ProductPriceRange + availableShippingDiscounts: [PrDiscount] + productType: String + productTypeId: Int + isTaxable: Boolean + isRecurring: Boolean + pricingBehavior: ProductPricingBehaviorInfo + inventoryInfo: ProductInventoryInfo + createDate: DateTime! + updateDate: DateTime! + dateFirstAvailableInCatalog: DateTime + catalogStartDate: DateTime + catalogEndDate: DateTime + daysAvailableInCatalog: Int + upc: String + upCs: [String!] + mfgPartNumber: String + mfgPartNumbers: [String!] + variationProductCode: String + categories: [PrCategory] + measurements: PrPackageMeasurements + isPackagedStandAlone: Boolean + properties: [ProductProperty] + options: [ProductOption] + variations: [VariationSummary] + validPriceLists: [String!] + locationsInStock: [String!] + slicingAttributeFQN: String + productImageGroups: [ProductImageGroup] + sliceValue: String + productCollections: [ProductCollectionInfo] + productCollectionMembers: [ProductCollectionMember] + collectionMembersProductContent: [ProductContent] + score: Float! + personalizationScore: Float! +} + +type ProductImage { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductImage + imageLabel: String + altText: String + imageUrl: String + cmsId: String + videoUrl: String + mediaType: String + sequence: Int + productImageGroupId: String +} + +type ProductImageGroup { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductImageGroup + productImageGroupId: String! + productImageGroupTags: [ProductImageGroupTag] +} + +type ProductImageGroupTag { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductImageGroupTag + attributeFqn: String + value: String +} + +type ProductInventoryInfo { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductInventoryInfo + manageStock: Boolean + outOfStockBehavior: String + onlineStockAvailable: Int + onlineSoftStockAvailable: Int + onlineLocationCode: String + availableDate: DateTime +} + +type ProductOption { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductOption + attributeFQN: String + isRequired: Boolean + isMultiValue: Boolean + values: [ProductOptionValue] + attributeDetail: AttributeDetail + isProductImageGroupSelector: Boolean +} + +input ProductOptionSelectionInput { + attributeFQN: String + value: Object + attributeValueId: Int + shopperEnteredValue: Object +} + +input ProductOptionSelectionsInput { + variationProductCode: String + options: [ProductOptionSelectionInput] +} + +type ProductOptionValue { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductOptionValue + value: Object + attributeValueId: Int! + stringValue: String + isEnabled: Boolean + isSelected: Boolean + isDefault: Boolean + deltaWeight: Float + deltaPrice: Float + shopperEnteredValue: Object + bundledProduct: PrBundledProduct + displayInfo: AttributeVocabularyValueDisplayInfo +} + +type ProductPrice { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductPrice + msrp: Float + price: Float + priceType: String + salePrice: Float + salePriceType: String + catalogSalePrice: Float + catalogListPrice: Float + discount: PrAppliedDiscount + creditValue: Float + effectivePricelistCode: String + priceListEntryCode: String + priceListEntryMode: String +} + +type ProductPriceRange { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductPriceRange + lower: ProductPrice + upper: ProductPrice +} + +type ProductPricingBehaviorInfo { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductPricingBehaviorInfo + discountsRestricted: Boolean + discountsRestrictedStartDate: DateTime + discountsRestrictedEndDate: DateTime +} + +type ProductProperty { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductProperty + attributeFQN: String + isHidden: Boolean + isMultiValue: Boolean + attributeDetail: AttributeDetail + values: [ProductPropertyValue] + propertyType: String +} + +type ProductPropertyValue { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductPropertyValue + value: Object + stringValue: String + displayInfo: AttributeVocabularyValueDisplayInfo +} + +type ProductPurchasableState { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductPurchasableState + isPurchasable: Boolean + messages: [ValidationMessage] +} + +type ProductSearchRandomAccessCursor { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductSearchRandomAccessCursor + cursorMarks: [String!] +} + +type ProductSearchResult { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductSearchResult + facets: [Facet] + solrDebugInfo: SolrDebugInfo + searchRedirect: String + searchEngine: String + nextCursorMark: String + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [Product] +} + +type ProductStock { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductStock + manageStock: Boolean + isOnBackOrder: Boolean + availableDate: DateTime + stockAvailable: Int + aggregateInventory: Int +} + +input ProductStockInput { + manageStock: Boolean = false + isOnBackOrder: Boolean = false + availableDate: DateTime + stockAvailable: Int + aggregateInventory: Int +} + +type ProductValidationSummary { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductValidationSummary + productCode: String + purchaseLocation: String + productUsage: String + fulfillmentTypesSupported: [String!] + goodsType: String + bundledProducts: [BundledProductSummary] + upc: String + mfgPartNumber: String + variationProductCode: String + purchasableState: ProductPurchasableState + price: ProductPrice + measurements: PrPackageMeasurements + isPackagedStandAlone: Boolean + image: ProductImage + productShortDescription: String + productName: String + categories: [PrCategory] + properties: [ProductProperty] + pricingBehavior: ProductPricingBehaviorInfo + inventoryInfo: ProductInventoryInfo + isTaxable: Boolean + productType: String +} + +type ProductVolumePrice { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ProductVolumePrice + isCurrent: Boolean + minQty: Int! + maxQty: Int + priceRange: ProductPriceRange + price: ProductPrice +} + +type Property { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Property + name: String + isRequired: Boolean + isMultiValued: Boolean + propertyType: PropertyType +} + +input PropertyInput { + name: String + isRequired: Boolean = false + isMultiValued: Boolean = false + propertyType: PropertyTypeInput +} + +type PropertyType { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PropertyType + name: String + namespace: String + propertyTypeFQN: String + adminName: String + installationPackage: String + version: String + dataType: String + isQueryable: Boolean + isSortable: Boolean + isAggregatable: Boolean +} + +type PropertyTypeCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PropertyTypeCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [PropertyType] +} + +input PropertyTypeInput { + name: String + namespace: String + propertyTypeFQN: String + adminName: String + installationPackage: String + version: String + dataType: String + isQueryable: Boolean = false + isSortable: Boolean = false + isAggregatable: Boolean = false +} + +type PurchaseOrderCustomField { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PurchaseOrderCustomField + code: String + label: String + value: String +} + +input PurchaseOrderCustomFieldInput { + code: String + label: String + value: String +} + +type PurchaseOrderPayment { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PurchaseOrderPayment + purchaseOrderNumber: String + paymentTerm: PurchaseOrderPaymentTerm + customFields: [PurchaseOrderCustomField] +} + +input PurchaseOrderPaymentInput { + purchaseOrderNumber: String + paymentTerm: PurchaseOrderPaymentTermInput + customFields: [PurchaseOrderCustomFieldInput] +} + +type PurchaseOrderPaymentTerm { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PurchaseOrderPaymentTerm + code: String + description: String +} + +input PurchaseOrderPaymentTermInput { + code: String + description: String +} + +type PurchaseOrderTransaction { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PurchaseOrderTransaction + customerPurchaseOrderAccountId: Int! + externalId: String + siteId: Int! + tenantId: Int! + transactionDate: DateTime! + orderId: String + purchaseOrderNumber: String + transactionAmount: Float! + creditLimit: Float! + additionalTransactionDetail: String + availableBalance: Float! + transactionTypeId: Int! + transactionDescription: String + author: String + auditInfo: CuAuditInfo +} + +type PurchaseOrderTransactionCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: PurchaseOrderTransactionCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [PurchaseOrderTransaction] +} + +input PurchaseOrderTransactionInput { + customerPurchaseOrderAccountId: Int! + externalId: String + siteId: Int! + tenantId: Int! + transactionDate: DateTime! + orderId: String + purchaseOrderNumber: String + transactionAmount: Float! + creditLimit: Float! + additionalTransactionDetail: String + availableBalance: Float! + transactionTypeId: Int! + transactionDescription: String + author: String + auditInfo: CuAuditInfoInput +} + +type Query { + customerAccountAttributeDefinitions( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): CuAttributeCollection + customerAccountAttributeVocabularyValues( + attributeFQN: String! + ): [CuAttributeVocabularyValue] + customerAccountAttributeDefinition(attributeFQN: String!): CuAttribute + b2bAccountAttributes( + accountId: Int! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): CustomerAttributeCollection + b2bAccountAttributeVocabularyValues( + accountId: Int! + attributeFQN: String! + ): CustomerAttribute + b2bAccounts( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + fields: String + q: String + qLimit: Int + ): B2BAccountCollection + b2bAccount(accountId: Int!): B2BAccount + b2bAccountUsers( + accountId: Int! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + q: String + qLimit: Int + ): B2BUserCollection + b2bAccountUserRoles(accountId: Int!, userId: String!): UserRoleCollection + customerCreditAuditTrail( + code: String! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): CreditAuditEntryCollection + customerCredits( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): CreditCollection + customerCredit(code: String!): Credit + customerCreditTransactions( + code: String! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): CreditTransactionCollection + customerAccountAttributes( + accountId: Int! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + userId: String + ): CustomerAttributeCollection + customerAccountAttribute( + accountId: Int! + attributeFQN: String! + userId: String + ): CustomerAttribute + customerAccountCards(accountId: Int!): CardCollection + customerAccountCard(accountId: Int!, cardId: String!): Card + customerAccountContacts( + accountId: Int! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + userId: String + ): CustomerContactCollection + customerAccountContact( + accountId: Int! + contactId: Int! + userId: String + ): CustomerContact + customerAccounts( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + fields: String + q: String + qLimit: Int + isAnonymous: Boolean + ): CustomerAccountCollection + customerAccount(accountId: Int!, userId: String): CustomerAccount + getCurrentAccount: CustomerAccount + customerAccountTransactions(accountId: Int!): [Transaction] + customerAccountNotes( + accountId: Int! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): CustomerNoteCollection + customerAccountNote(accountId: Int!, noteId: Int!): CustomerNote + customerAccountSegments( + accountId: Int! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): CustomerSegmentCollection + customerAccountAuditLog( + accountId: Int! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): CustomerAuditEntryCollection + customerPurchaseOrderAccount(accountId: Int!): CustomerPurchaseOrderAccount + customerPurchaseOrderAccountTransaction( + accountId: Int! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): PurchaseOrderTransactionCollection + customerAccountLoginState(accountId: Int!, userId: String): LoginState + customerSegments( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): CustomerSegmentCollection + customerSegment(id: Int!): CustomerSegment + customerSets( + startIndex: Int + pageSize: Int + sortBy: String + ): CustomerSetCollection + customerSet(code: String!): CustomerSet + inStockNotifications( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): InStockNotificationSubscriptionCollection + inStockNotification(id: Int!): InStockNotificationSubscription + authTicket(accountId: Int): CustomerAuthTicket + exchangeRates: [CurrencyExchangeRate] + resolvedPriceList(customerAccountId: Int): ResolvedPriceList + categoriesTree: CategoryCollection + categories( + filter: String + startIndex: Int + pageSize: Int + sortBy: String + ): CategoryPagedCollection + category(categoryId: Int!, allowInactive: Boolean): PrCategory + products( + filter: String + startIndex: Int + pageSize: Int + sortBy: String + responseOptions: String + cursorMark: String + defaultSort: String + mid: String + includeAllImages: Boolean + ): ProductCollection + product( + productCode: String! + variationProductCode: String + allowInactive: Boolean + skipInventoryCheck: Boolean + supressOutOfStock404: Boolean + quantity: Int + acceptVariantProductCode: Boolean + purchaseLocation: String + variationProductCodeFilter: String + sliceValue: String + includeAllImages: Boolean + ): Product + productVersion( + productCode: String! + productVersion: Int + lastModifiedDate: DateTime + ): ProductForIndexing + productLocationInventory( + productCode: String! + locationCodes: String + ): LocationInventoryCollection + suggestionSearch( + query: String + groups: String + pageSize: Int + mid: String + filter: String + ): SearchSuggestionResult + productSearchRandomAccessCursor( + query: String + filter: String + pageSize: Int + ): ProductSearchRandomAccessCursor + productSearch( + query: String + filter: String + facetTemplate: String + facetTemplateSubset: String + facet: String + facetFieldRangeQuery: String + facetHierPrefix: String + facetHierValue: String + facetHierDepth: String + facetStartIndex: String + facetPageSize: String + facetSettings: String + facetValueFilter: String + sortBy: String + pageSize: Int + startIndex: Int + searchSettings: String + enableSearchTuningRules: Boolean + searchTuningRuleContext: String + searchTuningRuleCode: String + facetTemplateExclude: String + facetPrefix: String + responseOptions: String + cursorMark: String + facetValueSort: String + defaultSort: String + sortDefinitionName: String + defaultSortDefinitionName: String + shouldSlice: Boolean + mid: String + omitNamespace: Boolean + ): ProductSearchResult + priceList(priceListCode: String): PriceList + cartsSummary: CartSummary + userCartSummary(userId: String!): CartSummary + cartSummary(cartId: String!): CartSummary + userCart(userId: String!): Cart + currentCart: Cart + cart(cartId: String!): Cart + currentCartExtendedProperties: [ExtendedProperty] + currentCartItems: CartItemCollection + cartItems(cartId: String!): CartItemCollection + currentCartItem(cartItemId: String!): CartItem + cartItem(cartId: String!, cartItemId: String!): CartItem + currentCartMessages: CartChangeMessageCollection + channels( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): ChannelCollection + channel(code: String!): Channel + channelGroups( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): ChannelGroupCollection + channelGroup(code: String!): ChannelGroup + checkoutAttributes(checkoutId: String!): [OrderAttribute] + checkout(checkoutId: String!): Checkout + checkouts( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + q: String + qLimit: Int + ): CheckoutCollection + checkoutShippingMethods(checkoutId: String!): [CheckoutGroupRates] + checkoutActions(checkoutId: String!): [String] + checkoutDestination(checkoutId: String!, destinationId: String!): Destination + checkoutDestinations(checkoutId: String!): [Destination] + orderPackageActions(orderId: String!, packageId: String!): [String] + orderPaymentActions(orderId: String!, paymentId: String!): [String] + orderPayment(orderId: String!, paymentId: String!): Payment + orderPayments(orderId: String!): PaymentCollection + orderPickup(orderId: String!, pickupId: String!): Pickup + orderPickupActions(orderId: String!, pickupId: String!): [String] + orderReturnableItems(orderId: String!): OrderReturnableItemCollection + orderShipment(orderId: String!, shipmentId: String!): Shipment + orderShipmentMethods(orderId: String!, draft: Boolean): [ShippingRate] + orderValidationResults(orderId: String!): [OrderValidationResult] + orderAttributes(orderId: String!): [OrderAttribute] + orderBillingInfo(orderId: String!, draft: Boolean): BillingInfo + orderCancelReasons(category: String): CancelReasonCollection + orders( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + q: String + qLimit: Int + includeBin: Boolean + mode: String + ): OrderCollection + order( + orderId: String! + draft: Boolean + includeBin: Boolean + mode: String + ): Order + orderActions(orderId: String!): [String] + orderTaxableOrders(orderId: String!): [PricingTaxableOrder] + orderDigitalPackage( + orderId: String! + digitalPackageId: String! + ): DigitalPackage + orderDigitalPackageActions( + orderId: String! + digitalPackageId: String! + ): [String] + orderExtendedProperties(orderId: String!, draft: Boolean): [ExtendedProperty] + orderFulfillmentInfo(orderId: String!, draft: Boolean): FulfillmentInfo + orderItems(orderId: String!, draft: Boolean): OrderItemCollection + orderNotes(orderId: String!): [OrderNote] + orderNote(orderId: String!, noteId: String!): OrderNote + orderPackage(orderId: String!, packageId: String!): PackageObj + orderPackageLabel(orderId: String!, packageId: String!): Boolean + quote(quoteId: String!, draft: Boolean): Quote + quotes( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + q: String + qLimit: Int + ): QuoteCollection + customerAccountQuote( + customerAccountId: Int! + quoteName: String! + draft: Boolean + ): Quote + quoteItems( + quoteId: String! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): [CrOrderItem] + customerAccountQuoteItems( + customerAccountId: Int! + quoteName: String! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): [CrOrderItem] + quoteItem(quoteId: String!, quoteItemId: String!, draft: Boolean): CrOrderItem + returns( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + q: String + ): ReturnCollection + returnReasons: ReasonCollection + returnReason(returnId: String!): ReturnObj + returnActions(returnId: String!): [String] + returnPayments(returnId: String!): PaymentCollection + returnPayment(returnId: String!, paymentId: String!): Payment + returnPaymentActions(returnId: String!, paymentId: String!): [String] + returnShippingLabel(returnId: String!): CarrierServiceGenerateLabelResponse + returnItems(returnId: String!): ReturnItemCollection + returnItem(returnId: String!, returnItemId: String!): ReturnItem + returnNotes(returnId: String!): [OrderNote] + returnNote(returnId: String!, noteId: String!): OrderNote + returnPackage(returnId: String!, packageId: String!): PackageObj + returnPackageLabel( + returnId: String! + packageId: String! + returnAsBase64Png: Boolean + ): Boolean + returnShipment(returnId: String!, shipmentId: String!): Shipment + wishlists( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + q: String + qLimit: Int + ): WishlistCollection + wishlist(wishlistId: String!): Wishlist + customerWishlist(customerAccountId: Int!, wishlistName: String!): Wishlist + wishlistItems( + wishlistId: String! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): WishlistItemCollection + customerWishlistItems( + customerAccountId: Int! + wishlistName: String! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): WishlistItemCollection + wishlistItem(wishlistId: String!, wishlistItemId: String!): WishlistItem + orderItem( + orderId: String + lineId: Int + orderItemId: String + draft: Boolean + ): CrOrderItem + documentListDocumentContent( + documentListName: String! + documentId: String! + ): Boolean + documentListDocumentTransform( + documentListName: String! + documentId: String! + width: Int + height: Int + max: Int + maxWidth: Int + maxHeight: Int + crop: String + quality: Int + ): Boolean + documentListTreeDocumentContent( + documentListName: String! + documentName: String! + ): Boolean + documentListTreeDocumentTransform( + documentListName: String! + documentName: String! + width: Int + height: Int + max: Int + maxWidth: Int + maxHeight: Int + crop: String + quality: Int + ): Boolean + documentListDocuments( + documentListName: String! + filter: String + sortBy: String + pageSize: Int + startIndex: Int + includeInactive: Boolean + path: String + includeSubPaths: Boolean + queryScope: String + ): DocumentCollection + documentListDocument( + documentListName: String! + documentId: String! + includeInactive: Boolean + ): Document + documentListTreeDocument( + documentListName: String! + documentName: String! + includeInactive: Boolean + ): Document + documentLists(pageSize: Int, startIndex: Int): DocumentListCollection + documentList(documentListName: String!): DocumentList + documentListViewDocuments( + documentListName: String! + viewName: String! + filter: String + sortBy: String + pageSize: Int + startIndex: Int + includeInactive: Boolean + ): DocumentCollection + documentListTypes(pageSize: Int, startIndex: Int): DocumentListTypeCollection + documentListType(documentListTypeFQN: String!): DocumentListType + documentDrafts( + pageSize: Int + startIndex: Int + documentLists: String + ): DocumentDraftSummaryPagedCollection + documentTypes(pageSize: Int, startIndex: Int): DocumentTypeCollection + documentType(documentTypeName: String!): DocumentType + propertyTypes(pageSize: Int, startIndex: Int): PropertyTypeCollection + propertyType(propertyTypeName: String!): PropertyType + adminLocations( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): LocationCollection + adminLocation(locationCode: String!): Location + adminLocationAttributes( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): LoAttributeCollection + adminLocationAttributeVocabularyValues( + attributeFQN: String! + ): [LoAttributeVocabularyValue] + adminLocationAttribute(attributeFQN: String!): LoAttribute + adminLocationGroups( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): LocationGroupCollection + dslLocation(includeAttributeDefinition: Boolean): Location + spLocations( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + includeAttributeDefinition: Boolean + ): LocationCollection + spLocation( + locationCode: String! + includeAttributeDefinition: Boolean + ): Location + usageTypeLocations( + locationUsageType: String! + startIndex: Int + pageSize: Int + sortBy: String + filter: String + includeAttributeDefinition: Boolean + ): LocationCollection + location(locationCode: String!, includeAttributeDefinition: Boolean): Location + locationUsages: LocationUsageCollection + locationUsage(code: String!): LocationUsage + adminLocationTypes: [LocationType] + adminLocationType(locationTypeCode: String!): LocationType + locationGroupConfig( + locationGroupId: Int + locationGroupCode: String + locationCode: String + ): LocationGroupConfiguration + locationGroup(groupId: Int, locationGroupCode: String): LocationGroup + entityListEntity(entityListFullName: String!, id: String!): Boolean + entityListEntities( + entityListFullName: String! + pageSize: Int + startIndex: Int + filter: String + sortBy: String + ): EntityCollection + entityListEntityContainer( + entityListFullName: String! + id: String! + ): EntityContainer + entityListEntityContainers( + entityListFullName: String! + pageSize: Int + startIndex: Int + filter: String + sortBy: String + ): EntityContainerCollection + entityList(entityListFullName: String!): EntityList + entityLists( + pageSize: Int + startIndex: Int + filter: String + sortBy: String + ): EntityListCollection + entityListViews(entityListFullName: String!): ListViewCollection + entityListView(entityListFullName: String!, viewName: String!): ListView + entityListViewEntityContainers( + entityListFullName: String! + viewName: String! + pageSize: Int + startIndex: Int + filter: String + ): EntityContainerCollection + entityListViewEntities( + entityListFullName: String! + viewName: String! + pageSize: Int + startIndex: Int + filter: String + ): EntityCollection + entityListViewEntityContainer( + entityListFullName: String! + viewName: String! + entityId: String! + ): EntityContainer + entityListViewEntity( + entityListFullName: String! + viewName: String! + entityId: String! + ): Boolean + carrierLocaleServiceTypes( + carrierId: String! + localeCode: String! + ): [ServiceType] + localeServiceTypes(localeCode: String!): [ServiceType] + targetRules( + startIndex: Int + pageSize: Int + sortBy: String + filter: String + ): TargetRuleCollection + targetRule(code: String!): TargetRule + orderRoutingRoutingSuggestionLog( + externalResponseID: String + orderID: Int + responseID: Int + suggestionID: Int + ): [JsonNode] +} + +type Quote { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Quote + id: String + name: String + siteId: Int! + tenantId: Int! + number: Int + submittedDate: DateTime + items: [CrOrderItem] + auditHistory: [AuditRecord] + auditInfo: CrAuditInfo + comments: [QuoteComment] + expirationDate: DateTime + fulfillmentInfo: FulfillmentInfo + userId: String + customerAccountId: Int + email: String + customerTaxId: String + isTaxExempt: Boolean + currencyCode: String + priceListCode: String + data: Object + taxData: Object + channelCode: String + locationCode: String + ipAddress: String + sourceDevice: String + visitId: String + webSessionId: String + customerInteractionType: String + orderDiscounts: [CrAppliedDiscount] + subTotal: Float! + itemLevelProductDiscountTotal: Float! + orderLevelProductDiscountTotal: Float! + itemTaxTotal: Float! + adjustment: Adjustment + itemTotal: Float! + total: Float! + shippingDiscounts: [ShippingDiscount] + itemLevelShippingDiscountTotal: Float! + orderLevelShippingDiscountTotal: Float! + shippingAmount: Float! + shippingAdjustment: Adjustment + shippingSubTotal: Float! + shippingTax: Float + shippingTaxTotal: Float! + shippingTotal: Float! + handlingDiscounts: [CrAppliedDiscount] + itemLevelHandlingDiscountTotal: Float! + orderLevelHandlingDiscountTotal: Float! + handlingAmount: Float + handlingAdjustment: Adjustment + handlingSubTotal: Float! + handlingTax: Float + handlingTaxTotal: Float! + handlingTotal: Float! + dutyAmount: Float + dutyTotal: Float! + feeTotal: Float! + isDraft: Boolean + hasDraft: Boolean + status: String + couponCodes: [String!] + invalidCoupons: [InvalidCoupon] +} + +type QuoteCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: QuoteCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [Quote] +} + +type QuoteComment { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: QuoteComment + id: String + text: String + auditInfo: CrAuditInfo +} + +input QuoteCommentInput { + id: String + text: String + auditInfo: CrAuditInfoInput +} + +input QuoteInput { + id: String + name: String + siteId: Int! + tenantId: Int! + number: Int + submittedDate: DateTime + items: [CrOrderItemInput] + auditHistory: [AuditRecordInput] + auditInfo: CrAuditInfoInput + comments: [QuoteCommentInput] + expirationDate: DateTime + fulfillmentInfo: FulfillmentInfoInput + userId: String + customerAccountId: Int + email: String + customerTaxId: String + isTaxExempt: Boolean = false + currencyCode: String + priceListCode: String + data: Object + taxData: Object + channelCode: String + locationCode: String + ipAddress: String + sourceDevice: String + visitId: String + webSessionId: String + customerInteractionType: String + orderDiscounts: [CrAppliedDiscountInput] + subTotal: Float! + itemLevelProductDiscountTotal: Float! + orderLevelProductDiscountTotal: Float! + itemTaxTotal: Float! + adjustment: AdjustmentInput + itemTotal: Float! + total: Float! + shippingDiscounts: [ShippingDiscountInput] + itemLevelShippingDiscountTotal: Float! + orderLevelShippingDiscountTotal: Float! + shippingAmount: Float! + shippingAdjustment: AdjustmentInput + shippingSubTotal: Float! + shippingTax: Float + shippingTaxTotal: Float! + shippingTotal: Float! + handlingDiscounts: [CrAppliedDiscountInput] + itemLevelHandlingDiscountTotal: Float! + orderLevelHandlingDiscountTotal: Float! + handlingAmount: Float + handlingAdjustment: AdjustmentInput + handlingSubTotal: Float! + handlingTax: Float + handlingTaxTotal: Float! + handlingTotal: Float! + dutyAmount: Float + dutyTotal: Float! + feeTotal: Float! + isDraft: Boolean = false + hasDraft: Boolean = false + status: String + couponCodes: [String!] + invalidCoupons: [InvalidCouponInput] +} + +type ReasonCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ReasonCollection + totalCount: Int! + items: [String!] +} + +type Refund { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Refund + id: String + orderId: String + reason: String + reasonCode: String + payment: Payment + amount: Float! + refundMethod: String + auditInfo: CrAuditInfo +} + +input RefundInput { + id: String + orderId: String + reason: String + reasonCode: String + payment: PaymentInput + amount: Float! + refundMethod: String + auditInfo: CrAuditInfoInput +} + +type RegularHours { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: RegularHours + sunday: Hours + monday: Hours + tuesday: Hours + wednesday: Hours + thursday: Hours + friday: Hours + saturday: Hours + timeZone: String +} + +input RegularHoursInput { + sunday: HoursInput + monday: HoursInput + tuesday: HoursInput + wednesday: HoursInput + thursday: HoursInput + friday: HoursInput + saturday: HoursInput + timeZone: String +} + +input RepriceShipmentObjectInput { + originalShipment: ShipmentInput + newShipment: ShipmentInput +} + +input ResetPasswordInfoInput { + emailAddress: String + userName: String + customerSetCode: String +} + +type ResolvedPriceList { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ResolvedPriceList + priceListCode: String + priceListId: Int! + name: String + description: String +} + +input RestockableReturnItemInput { + returnItemId: String + quantity: Int! + locationCode: String +} + +input ReturnActionInput { + actionName: String + returnIds: [String!] +} + +type ReturnBundle { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ReturnBundle + productCode: String + quantity: Int! +} + +input ReturnBundleInput { + productCode: String + quantity: Int! +} + +type ReturnCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ReturnCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [ReturnObj] +} + +type ReturnItem { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ReturnItem + id: String + orderItemId: String + orderLineId: Int + orderItemOptionAttributeFQN: String + product: CrProduct + reasons: [ReturnReason] + excludeProductExtras: Boolean + returnType: String + returnNotRequired: Boolean + quantityReceived: Int! + receiveStatus: String + quantityShipped: Int! + replaceStatus: String + quantityRestockable: Int! + quantityRestocked: Int! + refundAmount: Float + refundStatus: String + quantityReplaced: Int + notes: [OrderNote] + productLossAmount: Float + productLossTaxAmount: Float + shippingLossAmount: Float + shippingLossTaxAmount: Float + bundledProducts: [ReturnBundle] + totalWithoutWeightedShippingAndHandling: Float + totalWithWeightedShippingAndHandling: Float + shipmentItemId: Int + shipmentNumber: Int +} + +type ReturnItemCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ReturnItemCollection + totalCount: Int! + items: [ReturnItem] +} + +input ReturnItemInput { + id: String + orderItemId: String + orderLineId: Int + orderItemOptionAttributeFQN: String + product: CrProductInput + reasons: [ReturnReasonInput] + excludeProductExtras: Boolean = false + returnType: String + returnNotRequired: Boolean = false + quantityReceived: Int! + receiveStatus: String + quantityShipped: Int! + replaceStatus: String + quantityRestockable: Int! + quantityRestocked: Int! + refundAmount: Float + refundStatus: String + quantityReplaced: Int + notes: [OrderNoteInput] + productLossAmount: Float + productLossTaxAmount: Float + shippingLossAmount: Float + shippingLossTaxAmount: Float + bundledProducts: [ReturnBundleInput] + totalWithoutWeightedShippingAndHandling: Float + totalWithWeightedShippingAndHandling: Float + shipmentItemId: Int + shipmentNumber: Int +} + +input ReturnItemSpecifierInput { + returnItemId: String + quantity: Int! +} + +type ReturnObj { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ReturnObj + id: String + customerAccountId: Int + visitId: String + webSessionId: String + customerInteractionType: String + availableActions: [String!] + returnNumber: Int + contact: Contact + locationCode: String + originalOrderId: String + originalOrderNumber: Int + returnOrderId: String + currencyCode: String + status: String + receiveStatus: String + refundStatus: String + replaceStatus: String + items: [ReturnItem] + notes: [OrderNote] + rmaDeadline: DateTime + returnType: String + refundAmount: Float + auditInfo: CrAuditInfo + payments: [Payment] + packages: [PackageObj] + productLossTotal: Float + shippingLossTotal: Float + lossTotal: Float + productLossTaxTotal: Float + shippingLossTaxTotal: Float + tenantId: Int + siteId: Int + userId: String + channelCode: String + changeMessages: [ChangeMessage] + actionRequired: Boolean + isUnified: Boolean +} + +input ReturnObjInput { + id: String + customerAccountId: Int + visitId: String + webSessionId: String + customerInteractionType: String + availableActions: [String!] + returnNumber: Int + contact: ContactInput + locationCode: String + originalOrderId: String + originalOrderNumber: Int + returnOrderId: String + currencyCode: String + status: String + receiveStatus: String + refundStatus: String + replaceStatus: String + items: [ReturnItemInput] + notes: [OrderNoteInput] + rmaDeadline: DateTime + returnType: String + refundAmount: Float + auditInfo: CrAuditInfoInput + payments: [PaymentInput] + packages: [PackageObjInput] + productLossTotal: Float + shippingLossTotal: Float + lossTotal: Float + productLossTaxTotal: Float + shippingLossTaxTotal: Float + tenantId: Int + siteId: Int + userId: String + channelCode: String + changeMessages: [ChangeMessageInput] + actionRequired: Boolean = false + isUnified: Boolean = false +} + +type ReturnReason { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ReturnReason + reason: String + quantity: Int! +} + +input ReturnReasonInput { + reason: String + quantity: Int! +} + +type SearchSuggestion { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: SearchSuggestion + suggestionType: String + suggestion: Object +} + +type SearchSuggestionGroup { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: SearchSuggestionGroup + name: String + suggestions: [SearchSuggestion] +} + +type SearchSuggestionResult { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: SearchSuggestionResult + query: String + suggestionGroups: [SearchSuggestionGroup] +} + +type ServiceType { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ServiceType + code: String + deliveryDuration: String + content: ServiceTypeLocalizedContent +} + +type ServiceTypeLocalizedContent { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ServiceTypeLocalizedContent + localeCode: String + name: String +} + +type Shipment { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Shipment + id: String + externalShipmentId: String + number: Int + orderId: String + orderNumber: Int! + email: String + currencyCode: String + customerAccountId: Int + customerTaxId: String + shipmentType: String + shippingMethodCode: String + shippingMethodName: String + fulfillmentLocationCode: String + origin: Contact + destination: Destination + shipmentStatus: String + shipmentStatusReason: ShipmentStatusReason + transferShipmentNumbers: [Int!] + isTransfer: Boolean + originalShipmentNumber: Int + parentShipmentNumber: Int + fulfillmentStatus: String + workflowProcessId: String + workflowProcessContainerId: String + workflowState: WorkflowState + backorderCreatedDate: Int + fulfillmentDate: DateTime + orderSubmitDate: DateTime + pickStatus: String + pickType: String + changeMessages: [ChangeMessage] + packages: [PackageObj] + items: [ShipmentItem] + canceledItems: [CanceledItem] + data: Object + taxData: Object + auditInfo: CrAuditInfo + shipmentAdjustment: Float! + lineItemSubtotal: Float! + lineItemTaxAdjustment: Float! + lineItemTaxTotal: Float! + lineItemTotal: Float! + shippingAdjustment: Float! + shippingSubtotal: Float! + shippingTaxAdjustment: Float! + shippingTaxTotal: Float! + shippingTotal: Float! + handlingAdjustment: Float! + handlingSubtotal: Float! + handlingTaxAdjustment: Float! + handlingTaxTotal: Float! + handlingTotal: Float! + dutyAdjustment: Float! + dutyTotal: Float! + total: Float! + cost: Float + externalOrderId: String + isExpress: Boolean + readyToCapture: Boolean + pickupInfo: Object + shopperNotes: FulfillmentShopperNotes + customer: Customer +} + +input ShipmentAdjustmentInput { + itemAdjustment: Float + itemTaxAdjustment: Float + shippingAdjustment: Float + shippingTaxAdjustment: Float + handlingAdjustment: Float + handlingTaxAdjustment: Float +} + +input ShipmentInput { + id: String + externalShipmentId: String + number: Int + orderId: String + orderNumber: Int! + email: String + currencyCode: String + customerAccountId: Int + customerTaxId: String + shipmentType: String + shippingMethodCode: String + shippingMethodName: String + fulfillmentLocationCode: String + origin: ContactInput + destination: DestinationInput + shipmentStatus: String + shipmentStatusReason: ShipmentStatusReasonInput + transferShipmentNumbers: [Int!] + isTransfer: Boolean = false + originalShipmentNumber: Int + parentShipmentNumber: Int + fulfillmentStatus: String + workflowProcessId: String + workflowProcessContainerId: String + workflowState: WorkflowStateInput + backorderCreatedDate: Int + fulfillmentDate: DateTime + orderSubmitDate: DateTime + pickStatus: String + pickType: String + changeMessages: [ChangeMessageInput] + packages: [PackageObjInput] + items: [ShipmentItemInput] + canceledItems: [CanceledItemInput] + data: Object + taxData: Object + auditInfo: CrAuditInfoInput + shipmentAdjustment: Float! + lineItemSubtotal: Float! + lineItemTaxAdjustment: Float! + lineItemTaxTotal: Float! + lineItemTotal: Float! + shippingAdjustment: Float! + shippingSubtotal: Float! + shippingTaxAdjustment: Float! + shippingTaxTotal: Float! + shippingTotal: Float! + handlingAdjustment: Float! + handlingSubtotal: Float! + handlingTaxAdjustment: Float! + handlingTaxTotal: Float! + handlingTotal: Float! + dutyAdjustment: Float! + dutyTotal: Float! + total: Float! + cost: Float + externalOrderId: String + isExpress: Boolean = false + readyToCapture: Boolean = false + pickupInfo: Object + shopperNotes: FulfillmentShopperNotesInput + customer: CustomerInput +} + +type ShipmentItem { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ShipmentItem + lineId: Int! + originalOrderItemId: String + parentId: String + productCode: String + variationProductCode: String + optionAttributeFQN: String + name: String + auditInfo: CrAuditInfo + fulfillmentLocationCode: String + imageUrl: String + isTaxable: Boolean + quantity: Int! + unitPrice: Float! + actualPrice: Float! + overridePrice: Float + itemDiscount: Float! + lineItemCost: Float! + itemTax: Float! + shipping: Float! + shippingDiscount: Float! + shippingTax: Float! + handling: Float! + handlingDiscount: Float! + handlingTax: Float! + duty: Float! + isPackagedStandAlone: Boolean + readyForPickupQuantity: Int + backorderReleaseDate: DateTime + measurements: CrPackageMeasurements + options: [CrProductOption] + data: Object + taxData: Object + weightedShipmentAdjustment: Float! + weightedLineItemTaxAdjustment: Float! + weightedShippingAdjustment: Float! + weightedShippingTaxAdjustment: Float! + weightedHandlingAdjustment: Float! + weightedHandlingTaxAdjustment: Float! + weightedDutyAdjustment: Float! + taxableShipping: Float! + taxableLineItemCost: Float! + taxableHandling: Float! + fulfillmentFields: [FulfillmentField] + isAssemblyRequired: Boolean + parentItemId: String + childItemIds: [String!] + giftCards: [GiftCard] +} + +input ShipmentItemAdjustmentInput { + overridePrice: Float +} + +input ShipmentItemInput { + lineId: Int! + originalOrderItemId: String + parentId: String + productCode: String + variationProductCode: String + optionAttributeFQN: String + name: String + auditInfo: CrAuditInfoInput + fulfillmentLocationCode: String + imageUrl: String + isTaxable: Boolean = false + quantity: Int! + unitPrice: Float! + actualPrice: Float! + overridePrice: Float + itemDiscount: Float! + lineItemCost: Float! + itemTax: Float! + shipping: Float! + shippingDiscount: Float! + shippingTax: Float! + handling: Float! + handlingDiscount: Float! + handlingTax: Float! + duty: Float! + isPackagedStandAlone: Boolean = false + readyForPickupQuantity: Int + backorderReleaseDate: DateTime + measurements: CrPackageMeasurementsInput + options: [CrProductOptionInput] + data: Object + taxData: Object + weightedShipmentAdjustment: Float! + weightedLineItemTaxAdjustment: Float! + weightedShippingAdjustment: Float! + weightedShippingTaxAdjustment: Float! + weightedHandlingAdjustment: Float! + weightedHandlingTaxAdjustment: Float! + weightedDutyAdjustment: Float! + taxableShipping: Float! + taxableLineItemCost: Float! + taxableHandling: Float! + fulfillmentFields: [FulfillmentFieldInput] + isAssemblyRequired: Boolean = false + parentItemId: String + childItemIds: [String!] + giftCards: [GiftCardInput] +} + +type ShipmentStatusReason { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ShipmentStatusReason + reasonCode: String + moreInfo: String +} + +input ShipmentStatusReasonInput { + reasonCode: String + moreInfo: String +} + +input ShippingAddressInput { + addressID: Int! + addressLine1: String! + city: String! + countryCode: String! + customerID: Int! + latitude: Float! + longitude: Float! + phone: String! + postalCode: String! + state: String! +} + +type ShippingDiscount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ShippingDiscount + methodCode: String + discount: CrAppliedDiscount +} + +input ShippingDiscountInput { + methodCode: String + discount: CrAppliedDiscountInput +} + +type ShippingMethodMappings { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ShippingMethodMappings + shippingMethods: [String!] + returnLabelShippingMethod: String + standardDefault: String + express1DayDefault: String + express2DayDefault: String + express3DayDefault: String + enableSmartPost: Boolean + internationalUsReturnLabelShippingMethod: String +} + +type ShippingOriginContact { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ShippingOriginContact + firstName: String + middleNameOrInitial: String + lastNameOrSurname: String + companyOrOrganization: String + phoneNumber: String + email: String +} + +input ShippingOriginContactInput { + firstName: String + middleNameOrInitial: String + lastNameOrSurname: String + companyOrOrganization: String + phoneNumber: String + email: String +} + +type ShippingRate { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ShippingRate + shippingMethodCode: String + shippingMethodName: String + shippingZoneCode: String + isValid: Boolean + messages: [String!] + data: Object + currencyCode: String + price: Float +} + +input ShippingRateInput { + shippingMethodCode: String + shippingMethodName: String + shippingZoneCode: String + isValid: Boolean = false + messages: [String!] + data: Object + currencyCode: String + price: Float +} + +type ShopperNotes { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ShopperNotes + giftMessage: String + comments: String + deliveryInstructions: String +} + +input ShopperNotesInput { + giftMessage: String + comments: String + deliveryInstructions: String +} + +type SolrDebugInfo { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: SolrDebugInfo + searchTuningRuleCode: String + boostedProductCodes: [String!] + blockedProductCodes: [String!] + boostQueries: [String!] + boostFunctions: [String!] +} + +input SplitShipmentsObjectInput { + originalShipment: ShipmentInput + newShipments: [ShipmentInput] +} + +type SubPayment { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: SubPayment + status: String + amountCollected: Float! + amountCredited: Float! + amountRequested: Float! + amountRefunded: Float! + target: PaymentActionTarget +} + +input SubPaymentInput { + status: String + amountCollected: Float! + amountCredited: Float! + amountRequested: Float! + amountRefunded: Float! + target: PaymentActionTargetInput +} + +type SuggestedDiscount { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: SuggestedDiscount + productCode: String + autoAdd: Boolean + discountId: Int! + hasMultipleProducts: Boolean + hasOptions: Boolean +} + +input SuggestedDiscountInput { + productCode: String + autoAdd: Boolean = false + discountId: Int! + hasMultipleProducts: Boolean = false + hasOptions: Boolean = false +} + +type SuggestionEvent { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: SuggestionEvent + causeID: Int! + errors: [String!]! + name: String! + type: TypeEnum +} + +type SuggestionLog { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: SuggestionLog + created: DateTime! + creatorUsername: String! + environmentID: Int! + events: [SuggestionEvent]! + externalResponseID: String! + orderID: Int! + pathString: String! + persisted: Boolean + siteID: Int! + suggestionID: Int! + tenantID: Int! + updated: DateTime! + updaterUsername: String! +} + +input SuggestionRequestInput { + bundlingStrategy: BundlingStrategyEnum + customData: Object! + environmentID: Int! + exclusionListLocationCode: [ExclusionListEntryLocationCodeInput]! + externalResponseID: String! + fraud: Int! + inventoryRequestType: InventoryRequestTypeEnum + isExpress: Boolean = false + items: [OrderItemInput]! + locationCodeWhiteList: [String!]! + numShipmentsNotInRequest: Int! + orderID: Int! + orderType: OrderTypeEnum + pickupLocationCode: String! + shippingAddress: ShippingAddressInput + total: Float! +} + +type SuggestionResponse { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: SuggestionResponse + assignmentSuggestions: Object! + availableLocations: [Int!]! + externalResponseID: String! + responseID: Int! + stateChangeSuggestions: Object! + suggestionLog: SuggestionLog +} + +type TargetRule { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: TargetRule + code: String + description: String + domain: String + expression: String +} + +type TargetRuleCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: TargetRuleCollection + totalCount: Int! + items: [TargetRule] +} + +input TargetRuleInput { + code: String + description: String + domain: String + expression: String +} + +type TaskInput { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: TaskInput + helpMessage: String + label: String + maxLength: Int + maximum: Float! + minLength: Int + minimum: Float! + name: String + options: [Object!] + pattern: String + required: Boolean + type: String +} + +input TaskInputInput { + helpMessage: String + label: String + maxLength: Int + maximum: Float! + minLength: Int + minimum: Float! + name: String + options: [Object!] + pattern: String + required: Boolean = false + type: String +} + +type ThresholdMessage { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ThresholdMessage + discountId: Int! + message: String + thresholdValue: Float! + showOnCheckout: Boolean + showInCart: Boolean + requiresCouponCode: Boolean +} + +input ThresholdMessageInput { + discountId: Int! + message: String + thresholdValue: Float! + showOnCheckout: Boolean = false + showInCart: Boolean = false + requiresCouponCode: Boolean = false +} + +type Tracking { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Tracking + attributes: Object + number: String + url: String +} + +input TrackingInput { + attributes: Object + number: String + url: String +} + +type Transaction { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Transaction + transactionId: String + visitId: String + transactionType: String + interactionType: String + amount: Float! + date: DateTime! + currencyCode: String +} + +input TransactionInput { + transactionId: String + visitId: String + transactionType: String + interactionType: String + amount: Float! + date: DateTime! + currencyCode: String +} + +enum TypeEnum { + NEW_REQUEST + ROUTE_SELECTED + MAKE_LOCATIONS_AVAILABLE + NO_ROUTE_FOUND + REMOVED_INACTIVE_LOCATIONS + REMOVED_ON_HOLD_LOCATIONS + REMOVED_OVERFULFILLED_LOCATIONS + GROUP + GROUP_FILTER + GROUP_SORT + FILTER + SORT + AFTER_ACTION + FOUND_FULL_ORDER_LOCATION + RESPONSE + AFTER_ACTION_SORT + DEFAULT_RESPONSE + MAX_SPLITS_EXCEEDED + AUTO_ASSIGN_LIMIT_EXCEEDED + INVENTORY_REQUEST + REMOVED_INTERNATIONAL_LOCATIONS +} + +type UserRole { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: UserRole + userId: String + assignedInScope: UserScope + roleId: Int! + roleName: String + roleTags: [String!] + auditInfo: CuAuditInfo +} + +type UserRoleCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: UserRoleCollection + totalCount: Int! + items: [UserRole] +} + +input UserRoleInput { + userId: String + assignedInScope: UserScopeInput + roleId: Int! + roleName: String + roleTags: [String!] + auditInfo: CuAuditInfoInput +} + +type UserScope { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: UserScope + type: String + id: Int + name: String +} + +input UserScopeInput { + type: String + id: Int + name: String +} + +type ValidationMessage { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ValidationMessage + severity: String + source: String + message: String + validationType: String + sourceId: String +} + +type VariationOption { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: VariationOption + valueSequence: Int! + attributeFQN: String + value: Object +} + +type VariationSummary { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: VariationSummary + productCode: String + options: [VariationOption] + inventoryInfo: ProductInventoryInfo +} + +type View { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: View + name: String + usages: [String!] + metadata: Object + isVisibleInStorefront: Boolean + filter: String + includeInactiveMode: String + isAdminDefault: Boolean + fields: [ViewField] +} + +type ViewField { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: ViewField + name: String + target: String +} + +input ViewFieldInput { + name: String + target: String +} + +input ViewInput { + name: String + usages: [String!] + metadata: Object + isVisibleInStorefront: Boolean = false + filter: String + includeInactiveMode: String + isAdminDefault: Boolean = false + fields: [ViewFieldInput] +} + +type Wishlist { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: Wishlist + customerAccountId: Int + typeTag: String + name: String + items: [WishlistItem] + privacyType: String + sortOrder: Int + version: String + isImport: Boolean + importDate: DateTime + externalId: String + userId: String + id: String + tenantId: Int + siteId: Int + channelCode: String + currencyCode: String + visitId: String + webSessionId: String + customerInteractionType: String + fulfillmentInfo: FulfillmentInfo + orderDiscounts: [CrAppliedDiscount] + suggestedDiscounts: [SuggestedDiscount] + rejectedDiscounts: [SuggestedDiscount] + data: Object + taxData: Object + subtotal: Float + discountedSubtotal: Float + discountTotal: Float + discountedTotal: Float + shippingTotal: Float + shippingSubTotal: Float + shippingTaxTotal: Float + handlingTaxTotal: Float + itemTaxTotal: Float + taxTotal: Float + feeTotal: Float + total: Float + lineItemSubtotalWithOrderAdjustments: Float + shippingAmountBeforeDiscountsAndAdjustments: Float + lastValidationDate: DateTime + expirationDate: DateTime + changeMessages: [ChangeMessage] + extendedProperties: [ExtendedProperty] + discountThresholdMessages: [ThresholdMessage] + auditInfo: CrAuditInfo +} + +type WishlistCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: WishlistCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [Wishlist] +} + +input WishlistInput { + customerAccountId: Int + typeTag: String + name: String + items: [WishlistItemInput] + privacyType: String + sortOrder: Int + version: String + isImport: Boolean = false + importDate: DateTime + externalId: String + userId: String + id: String + tenantId: Int + siteId: Int + channelCode: String + currencyCode: String + visitId: String + webSessionId: String + customerInteractionType: String + fulfillmentInfo: FulfillmentInfoInput + orderDiscounts: [CrAppliedDiscountInput] + suggestedDiscounts: [SuggestedDiscountInput] + rejectedDiscounts: [SuggestedDiscountInput] + data: Object + taxData: Object + subtotal: Float + discountedSubtotal: Float + discountTotal: Float + discountedTotal: Float + shippingTotal: Float + shippingSubTotal: Float + shippingTaxTotal: Float + handlingTaxTotal: Float + itemTaxTotal: Float + taxTotal: Float + feeTotal: Float + total: Float + lineItemSubtotalWithOrderAdjustments: Float + shippingAmountBeforeDiscountsAndAdjustments: Float + lastValidationDate: DateTime + expirationDate: DateTime + changeMessages: [ChangeMessageInput] + extendedProperties: [ExtendedPropertyInput] + discountThresholdMessages: [ThresholdMessageInput] + auditInfo: CrAuditInfoInput +} + +type WishlistItem { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: WishlistItem + id: String + comments: String + priorityType: String + purchasableStatusType: String + localeCode: String + purchaseLocation: String + lineId: Int + product: CrProduct + quantity: Int! + isRecurring: Boolean + isTaxable: Boolean + subtotal: Float + extendedTotal: Float + taxableTotal: Float + discountTotal: Float + discountedTotal: Float + itemTaxTotal: Float + shippingTaxTotal: Float + shippingTotal: Float + handlingAmount: Float + feeTotal: Float + total: Float + unitPrice: CommerceUnitPrice + productDiscount: AppliedLineItemProductDiscount + productDiscounts: [AppliedLineItemProductDiscount] + shippingDiscounts: [AppliedLineItemShippingDiscount] + data: Object + taxData: Object + auditInfo: CrAuditInfo + shippingAmountBeforeDiscountsAndAdjustments: Float + weightedOrderAdjustment: Float + weightedOrderDiscount: Float + adjustedLineItemSubtotal: Float + totalWithoutWeightedShippingAndHandling: Float + weightedOrderTax: Float + weightedOrderShipping: Float + weightedOrderShippingDiscount: Float + weightedOrderShippingManualAdjustment: Float + weightedOrderShippingTax: Float + weightedOrderHandlingFee: Float + weightedOrderHandlingFeeTax: Float + weightedOrderHandlingFeeDiscount: Float + weightedOrderDuty: Float + totalWithWeightedShippingAndHandling: Float + weightedOrderHandlingAdjustment: Float + autoAddDiscountId: Int + isAssemblyRequired: Boolean + childItemIds: [String!] + parentItemId: String +} + +type WishlistItemCollection { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: WishlistItemCollection + startIndex: Int! + pageSize: Int! + pageCount: Int! + totalCount: Int! + items: [WishlistItem] +} + +input WishlistItemInput { + id: String + comments: String + priorityType: String + purchasableStatusType: String + localeCode: String + purchaseLocation: String + lineId: Int + product: CrProductInput + quantity: Int! + isRecurring: Boolean = false + isTaxable: Boolean = false + subtotal: Float + extendedTotal: Float + taxableTotal: Float + discountTotal: Float + discountedTotal: Float + itemTaxTotal: Float + shippingTaxTotal: Float + shippingTotal: Float + handlingAmount: Float + feeTotal: Float + total: Float + unitPrice: CommerceUnitPriceInput + productDiscount: AppliedLineItemProductDiscountInput + productDiscounts: [AppliedLineItemProductDiscountInput] + shippingDiscounts: [AppliedLineItemShippingDiscountInput] + data: Object + taxData: Object + auditInfo: CrAuditInfoInput + shippingAmountBeforeDiscountsAndAdjustments: Float + weightedOrderAdjustment: Float + weightedOrderDiscount: Float + adjustedLineItemSubtotal: Float + totalWithoutWeightedShippingAndHandling: Float + weightedOrderTax: Float + weightedOrderShipping: Float + weightedOrderShippingDiscount: Float + weightedOrderShippingManualAdjustment: Float + weightedOrderShippingTax: Float + weightedOrderHandlingFee: Float + weightedOrderHandlingFeeTax: Float + weightedOrderHandlingFeeDiscount: Float + weightedOrderDuty: Float + totalWithWeightedShippingAndHandling: Float + weightedOrderHandlingAdjustment: Float + autoAddDiscountId: Int + isAssemblyRequired: Boolean = false + childItemIds: [String!] + parentItemId: String +} + +type WorkflowState { + _get( + path: String! + defaultValue: AnyScalar + allowUndefined: Boolean + ): AnyScalar + _root: WorkflowState + attributes: Object + auditInfo: CrAuditInfo + completedDate: DateTime + processInstanceId: String + shipmentState: String + taskList: [FulfillmentTask] +} + +input WorkflowStateInput { + attributes: Object + auditInfo: CrAuditInfoInput + completedDate: DateTime + processInstanceId: String + shipmentState: String + taskList: [FulfillmentTaskInput] +} diff --git a/framework/kibocommerce/types/customer.ts b/framework/kibocommerce/types/customer.ts new file mode 100644 index 000000000..0061f070c --- /dev/null +++ b/framework/kibocommerce/types/customer.ts @@ -0,0 +1,27 @@ +import * as Core from '@commerce/types/customer' +export type Maybe<T> = T | null +export * from '@commerce/types/customer' +export type Scalars = { + ID: string + String: string + Boolean: boolean + Int: number + Float: number + /** The `AnyScalar` type allows any scalar value by examining the input and passing the serialize, parseValue, and parseLiteral operations to their respective types. */ + AnyScalar: any + /** DateTime custom scalar type */ + DateTime: any + /** Object custom scalar type */ + Object: any +} + +export type Customer = { + id: Scalars['Int'], + firstName?: Maybe<Scalars['String']>, + lastName?: Maybe<Scalars['String']>, + email?: Maybe<Scalars['String']>, + userName?: Maybe<Scalars['String']>, + isAnonymous?: Maybe<Scalars['Boolean']> +} + +export type CustomerSchema = Core.CustomerSchema diff --git a/framework/kibocommerce/types/login.ts b/framework/kibocommerce/types/login.ts new file mode 100644 index 000000000..78b246191 --- /dev/null +++ b/framework/kibocommerce/types/login.ts @@ -0,0 +1,8 @@ +import * as Core from '@commerce/types/login' +import type { CustomerUserAuthInfoInput } from '../schema' + +export * from '@commerce/types/login' + +export type LoginOperation = Core.LoginOperation & { + variables: CustomerUserAuthInfoInput +} diff --git a/framework/kibocommerce/types/logout.ts b/framework/kibocommerce/types/logout.ts new file mode 100644 index 000000000..9f0a466af --- /dev/null +++ b/framework/kibocommerce/types/logout.ts @@ -0,0 +1 @@ +export * from '@commerce/types/logout' diff --git a/framework/kibocommerce/types/page.ts b/framework/kibocommerce/types/page.ts new file mode 100644 index 000000000..b6bf6d2d6 --- /dev/null +++ b/framework/kibocommerce/types/page.ts @@ -0,0 +1,35 @@ +import * as Core from '@commerce/types/page' +export type Maybe<T> = T | null +export type Scalars = { + ID: string + String: string + Boolean: boolean + Int: number + Float: number + /** The `AnyScalar` type allows any scalar value by examining the input and passing the serialize, parseValue, and parseLiteral operations to their respective types. */ + AnyScalar: any + /** DateTime custom scalar type */ + DateTime: any + /** Object custom scalar type */ + Object: any +} + +export * from '@commerce/types/page' + +export type Page = Core.Page + +export type PageTypes = { + page: Page +} + +export type GetPagesQueryParams = { + documentListName: Maybe<Scalars["String"]> +} + +export type GetPageQueryParams = { + id: Maybe<Scalars["String"]> + documentListName: Maybe<Scalars["String"]> +} + +export type GetAllPagesOperation = Core.GetAllPagesOperation<PageTypes> +export type GetPageOperation = Core.GetPageOperation<PageTypes> diff --git a/framework/kibocommerce/types/signup.ts b/framework/kibocommerce/types/signup.ts new file mode 100644 index 000000000..58543c6f6 --- /dev/null +++ b/framework/kibocommerce/types/signup.ts @@ -0,0 +1 @@ +export * from '@commerce/types/signup' diff --git a/framework/kibocommerce/wishlist/index.ts b/framework/kibocommerce/wishlist/index.ts new file mode 100644 index 000000000..241af3c7e --- /dev/null +++ b/framework/kibocommerce/wishlist/index.ts @@ -0,0 +1,3 @@ +export { default as useAddItem } from './use-add-item' +export { default as useWishlist } from './use-wishlist' +export { default as useRemoveItem } from './use-remove-item' diff --git a/framework/kibocommerce/wishlist/use-add-item.tsx b/framework/kibocommerce/wishlist/use-add-item.tsx new file mode 100644 index 000000000..f87e1189e --- /dev/null +++ b/framework/kibocommerce/wishlist/use-add-item.tsx @@ -0,0 +1,36 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import { CommerceError } from '@commerce/utils/errors' +import useAddItem, { UseAddItem } from '@commerce/wishlist/use-add-item' +import type { AddItemHook } from '@commerce/types/wishlist' +import useCustomer from '../customer/use-customer' +import useWishlist from './use-wishlist' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<AddItemHook> = { + fetchOptions: { + url: '/api/wishlist', + method: 'POST', + }, + useHook: ({ fetch }) => () => { + const { data: customer } = useCustomer() + const { revalidate } = useWishlist() + + return useCallback( + async function addItem(item) { + if (!customer) { + // A signed customer is required in order to have a wishlist + throw new CommerceError({ + message: 'Signed customer not found', + }) + } + // TODO: add validations before doing the fetch + const data = await fetch({ input: { item } }) + await revalidate() + return data + }, + [fetch, revalidate, customer] + ) + }, +} diff --git a/framework/kibocommerce/wishlist/use-remove-item.tsx b/framework/kibocommerce/wishlist/use-remove-item.tsx new file mode 100644 index 000000000..24487b7a5 --- /dev/null +++ b/framework/kibocommerce/wishlist/use-remove-item.tsx @@ -0,0 +1,38 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import { CommerceError } from '@commerce/utils/errors' +import useRemoveItem, { + UseRemoveItem, +} from '@commerce/wishlist/use-remove-item' +import type { RemoveItemHook } from '@commerce/types/wishlist' +import useCustomer from '../customer/use-customer' +import useWishlist from './use-wishlist' + +export default useRemoveItem as UseRemoveItem<typeof handler> + +export const handler: MutationHook<RemoveItemHook> = { + fetchOptions: { + url: '/api/wishlist', + method: 'DELETE', + }, + useHook: ({ fetch }) => ({ wishlist } = {}) => { + const { data: customer } = useCustomer() + const { revalidate } = useWishlist(wishlist) + + return useCallback( + async function removeItem(input) { + if (!customer) { + // A signed customer is required in order to have a wishlist + throw new CommerceError({ + message: 'Signed customer not found', + }) + } + + const data = await fetch({ input: { itemId: String(input.id) } }) + await revalidate() + return data + }, + [fetch, revalidate, customer] + ) + }, +} diff --git a/framework/kibocommerce/wishlist/use-wishlist.tsx b/framework/kibocommerce/wishlist/use-wishlist.tsx new file mode 100644 index 000000000..f29c182ff --- /dev/null +++ b/framework/kibocommerce/wishlist/use-wishlist.tsx @@ -0,0 +1,52 @@ +import { useMemo } from 'react' +import { SWRHook } from '@commerce/utils/types' +import useWishlist, { UseWishlist } from '@commerce/wishlist/use-wishlist' +import type { GetWishlistHook } from '@commerce/types/wishlist' +import useCustomer from '../customer/use-customer' + +export default useWishlist as UseWishlist<typeof handler> + +export const handler: SWRHook<any> = { + fetchOptions: { + url: '/api/wishlist', + method: 'GET', + }, + fetcher({ input: { customerId, includeProducts}, options, fetch }) { + if (!customerId) return null + // Use a dummy base as we only care about the relative path + const url = new URL(options.url!, 'http://a') + + if (includeProducts) url.searchParams.set('products', '1') + if(customerId) url.searchParams.set('customerId', customerId) + + return fetch({ + url: url.pathname + url.search, + method: options.method, + }) + }, + useHook: ({ useData }) => (input) => { + const { data: customer } = useCustomer() + const response = useData({ + input: [ + ['customerId', customer?.id], + ['includeProducts', input?.includeProducts], + ], + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) + return useMemo( + () => + Object.create(response, { + isEmpty: { + get() { + return (response.data?.items?.length || 0) <= 0 + }, + enumerable: true, + }, + }), + [response] + ) + }, +} diff --git a/framework/local/commerce.config.json b/framework/local/commerce.config.json index 261211527..0e77dd14f 100644 --- a/framework/local/commerce.config.json +++ b/framework/local/commerce.config.json @@ -4,6 +4,7 @@ "wishlist": false, "cart": false, "search": false, - "customerAuth": false + "customerAuth": false, + "customCheckout": false } } diff --git a/framework/ordercloud/.env.template b/framework/ordercloud/.env.template index 9b33282ba..52406251a 100644 --- a/framework/ordercloud/.env.template +++ b/framework/ordercloud/.env.template @@ -1,5 +1,6 @@ COMMERCE_PROVIDER=ordercloud -ORDERCLOUD_CLIENT_ID= -ORDERCLOUD_CLIENT_SECRET= +ORDERCLOUD_BUYER_CLIENT_ID= +ORDERCLOUD_MIDDLEWARE_CLIENT_ID= +ORDERCLOUD_MIDDLEWARE_CLIENT_SECRET= STRIPE_SECRET= diff --git a/framework/ordercloud/api/endpoints/catalog/products/get-products.ts b/framework/ordercloud/api/endpoints/catalog/products/get-products.ts new file mode 100644 index 000000000..ad8d391ac --- /dev/null +++ b/framework/ordercloud/api/endpoints/catalog/products/get-products.ts @@ -0,0 +1,37 @@ +import { normalize as normalizeProduct } from '../../../../utils/product' +import { ProductsEndpoint } from '.' + +// Get products for the product list page. Search and category filter implemented. Sort and brand filter not implemented. +const getProducts: ProductsEndpoint['handlers']['getProducts'] = async ({ + req, + res, + body: { search, categoryId, brandId, sort }, + config: { restBuyerFetch, cartCookie, tokenCookie }, +}) => { + //Use a dummy base as we only care about the relative path + const url = new URL('/me/products', 'http://a') + + if (search) { + url.searchParams.set('search', search) + } + if (categoryId) { + url.searchParams.set('categoryID', String(categoryId)) + } + + // Get token from cookies + const token = req.cookies[tokenCookie] + + var rawProducts = await restBuyerFetch( + 'GET', + url.pathname + url.search, + null, + { token } + ) + + const products = rawProducts.Items.map(normalizeProduct) + const found = rawProducts?.Items?.length > 0 + + res.status(200).json({ data: { products, found } }) +} + +export default getProducts diff --git a/framework/ordercloud/api/endpoints/catalog/products/index.ts b/framework/ordercloud/api/endpoints/catalog/products/index.ts new file mode 100644 index 000000000..98727a3d3 --- /dev/null +++ b/framework/ordercloud/api/endpoints/catalog/products/index.ts @@ -0,0 +1,19 @@ +import type { OrdercloudAPI } from '../../../../api' + +import { createEndpoint, GetAPISchema } from '@commerce/api' +import { ProductsSchema } from '@commerce/types/product' +import getProducts from './get-products' +import productsEndpoint from '@commerce/api/endpoints/catalog/products' + +export type ProductsAPI = GetAPISchema<OrdercloudAPI, ProductsSchema> + +export type ProductsEndpoint = ProductsAPI['endpoint'] + +export const handlers: ProductsEndpoint['handlers'] = { getProducts } + +const productsApi = createEndpoint<ProductsAPI>({ + handler: productsEndpoint, + handlers, +}) + +export default productsApi diff --git a/framework/ordercloud/api/endpoints/customer/address/index.ts b/framework/ordercloud/api/endpoints/customer/address/index.ts index 385bc57f1..0691fd1db 100644 --- a/framework/ordercloud/api/endpoints/customer/address/index.ts +++ b/framework/ordercloud/api/endpoints/customer/address/index.ts @@ -9,7 +9,10 @@ import addItem from './add-item' import updateItem from './update-item' import removeItem from './remove-item' -export type CustomerAddressAPI = GetAPISchema<OrdercloudAPI, CustomerAddressSchema> +export type CustomerAddressAPI = GetAPISchema< + OrdercloudAPI, + CustomerAddressSchema +> export type CustomerAddressEndpoint = CustomerAddressAPI['endpoint'] export const handlers: CustomerAddressEndpoint['handlers'] = { diff --git a/framework/ordercloud/api/operations/get-page.ts b/framework/ordercloud/api/operations/get-page.ts index 6b0a86a4d..529f130e2 100644 --- a/framework/ordercloud/api/operations/get-page.ts +++ b/framework/ordercloud/api/operations/get-page.ts @@ -1,4 +1,4 @@ -import { GetPageOperation } from "@commerce/types/page" +import { GetPageOperation } from '@commerce/types/page' export type Page = any export type GetPageResult = { page?: Page } diff --git a/framework/ordercloud/checkout/use-checkout.tsx b/framework/ordercloud/checkout/use-checkout.tsx index 6ce13dbb6..f9892bbc1 100644 --- a/framework/ordercloud/checkout/use-checkout.tsx +++ b/framework/ordercloud/checkout/use-checkout.tsx @@ -14,7 +14,7 @@ export const handler: SWRHook<GetCheckoutHook> = { }, useHook: ({ useData }) => function useHook(input) { - const submit = useSubmitCheckout(); + const submit = useSubmitCheckout() const response = useData({ swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, }) diff --git a/framework/ordercloud/checkout/use-submit-checkout.tsx b/framework/ordercloud/checkout/use-submit-checkout.tsx index 47644de8e..91d734208 100644 --- a/framework/ordercloud/checkout/use-submit-checkout.tsx +++ b/framework/ordercloud/checkout/use-submit-checkout.tsx @@ -2,7 +2,9 @@ import type { SubmitCheckoutHook } from '@commerce/types/checkout' import type { MutationHook } from '@commerce/utils/types' import { useCallback } from 'react' -import useSubmitCheckout, { UseSubmitCheckout } from '@commerce/checkout/use-submit-checkout' +import useSubmitCheckout, { + UseSubmitCheckout, +} from '@commerce/checkout/use-submit-checkout' export default useSubmitCheckout as UseSubmitCheckout<typeof handler> diff --git a/framework/ordercloud/commerce.config.json b/framework/ordercloud/commerce.config.json index d93afa783..e329bd4c1 100644 --- a/framework/ordercloud/commerce.config.json +++ b/framework/ordercloud/commerce.config.json @@ -3,7 +3,7 @@ "features": { "wishlist": false, "cart": true, - "search": false, + "search": true, "customerAuth": false, "customCheckout": true } diff --git a/framework/ordercloud/product/use-search.tsx b/framework/ordercloud/product/use-search.tsx index 30e699537..390e84ba1 100644 --- a/framework/ordercloud/product/use-search.tsx +++ b/framework/ordercloud/product/use-search.tsx @@ -1,17 +1,41 @@ import { SWRHook } from '@commerce/utils/types' import useSearch, { UseSearch } from '@commerce/product/use-search' +import { SearchProductsHook } from '@commerce/types/product' export default useSearch as UseSearch<typeof handler> -export const handler: SWRHook<any> = { +export const handler: SWRHook<SearchProductsHook> = { fetchOptions: { - query: '', + url: '/api/catalog/products', + method: 'GET', }, - async fetcher({ input, options, fetch }) {}, - useHook: () => () => { - return { - data: { - products: [], - }, - } + fetcher({ input: { search, categoryId, brandId, sort }, options, fetch }) { + // Use a dummy base as we only care about the relative path + const url = new URL(options.url!, 'http://a') + + if (search) url.searchParams.set('search', String(search)) + if (categoryId) url.searchParams.set('categoryId', String(categoryId)) + if (brandId) url.searchParams.set('brandId', String(brandId)) + if (sort) url.searchParams.set('sort', String(sort)) + + return fetch({ + url: url.pathname + url.search, + method: options.method, + }) }, + useHook: + ({ useData }) => + (input = {}) => { + return useData({ + input: [ + ['search', input.search], + ['categoryId', input.categoryId], + ['brandId', input.brandId], + ['sort', input.sort], + ], + swrOptions: { + revalidateOnFocus: false, + ...input.swrOptions, + }, + }) + }, } diff --git a/framework/ordercloud/provider.ts b/framework/ordercloud/provider.ts index 337eed657..7ae3f1d24 100644 --- a/framework/ordercloud/provider.ts +++ b/framework/ordercloud/provider.ts @@ -34,7 +34,7 @@ export const ordercloudProvider = { useCart, useAddItem: useAddCartItem, useUpdateItem: useUpdateCartItem, - useRemoveItem: useRemoveCartItem + useRemoveItem: useRemoveCartItem, }, checkout: { useCheckout, @@ -46,14 +46,14 @@ export const ordercloudProvider = { useCards, useAddItem: useAddCardItem, useUpdateItem: useUpdateCardItem, - useRemoveItem: useRemoveCardItem + useRemoveItem: useRemoveCardItem, }, address: { useAddresses, useAddItem: useAddAddressItem, useUpdateItem: useUpdateAddressItem, - useRemoveItem: useRemoveAddressItem - } + useRemoveItem: useRemoveAddressItem, + }, }, products: { useSearch }, auth: { useLogin, useLogout, useSignup }, diff --git a/framework/ordercloud/types/customer/address.ts b/framework/ordercloud/types/customer/address.ts index 3aaddc9a2..9c7f4bd33 100644 --- a/framework/ordercloud/types/customer/address.ts +++ b/framework/ordercloud/types/customer/address.ts @@ -1,31 +1,32 @@ import * as Core from '@commerce/types/customer/address' export type CustomerAddressTypes = Core.CustomerAddressTypes -export type CustomerAddressSchema = Core.CustomerAddressSchema<CustomerAddressTypes> +export type CustomerAddressSchema = + Core.CustomerAddressSchema<CustomerAddressTypes> export interface OrdercloudAddress { - ID: string; - "FromCompanyID": string; - "ToCompanyID": string; - "FromUserID": string; - "BillingAddressID": null, - "BillingAddress": null, - "ShippingAddressID": null, - "Comments": null, - "LineItemCount": number; - "Status": string; - "DateCreated": string; - "DateSubmitted": null, - "DateApproved": null, - "DateDeclined": null, - "DateCanceled": null, - "DateCompleted": null, - "LastUpdated": string; - "Subtotal": number - "ShippingCost": number - "TaxCost": number - "PromotionDiscount": number - "Total": number - "IsSubmitted": false, - "xp": null + ID: string + FromCompanyID: string + ToCompanyID: string + FromUserID: string + BillingAddressID: null + BillingAddress: null + ShippingAddressID: null + Comments: null + LineItemCount: number + Status: string + DateCreated: string + DateSubmitted: null + DateApproved: null + DateDeclined: null + DateCanceled: null + DateCompleted: null + LastUpdated: string + Subtotal: number + ShippingCost: number + TaxCost: number + PromotionDiscount: number + Total: number + IsSubmitted: false + xp: null } diff --git a/framework/ordercloud/types/customer/card.ts b/framework/ordercloud/types/customer/card.ts index eb1abffbb..6bf575332 100644 --- a/framework/ordercloud/types/customer/card.ts +++ b/framework/ordercloud/types/customer/card.ts @@ -4,13 +4,13 @@ export type CustomerCardTypes = Core.CustomerCardTypes export type CustomerCardSchema = Core.CustomerCardSchema<CustomerCardTypes> export interface OredercloudCreditCard { - "ID": string; - "Editable": boolean; - "Token": string; - "DateCreated": string; - "CardType": string; - "PartialAccountNumber": string; - "CardholderName": string; - "ExpirationDate": string; - "xp": null + ID: string + Editable: boolean + Token: string + DateCreated: string + CardType: string + PartialAccountNumber: string + CardholderName: string + ExpirationDate: string + xp: null } diff --git a/framework/saleor/README.md b/framework/saleor/README.md index 00af272b0..dba25a243 100644 --- a/framework/saleor/README.md +++ b/framework/saleor/README.md @@ -12,7 +12,7 @@ Copy the `.env.template` file in this directory to `.env.local` in the main dire cp framework/saleor/.env.template .env.local ``` -Then, set the environment following variables in your `.env.local`. Both, `NEXT_PUBLIC_SALEOR_API_URL` and `COMMERCE_IMAGE_HOST` must point to your own Saleor instance. +Then, set the environment following variables in your `.env.local`. Both, `NEXT_PUBLIC_SALEOR_API_URL` and `COMMERCE_IMAGE_HOST` must point to your own Saleor instance. ``` COMMERCE_PROVIDER=saleor diff --git a/framework/saleor/api/operations/get-all-pages.ts b/framework/saleor/api/operations/get-all-pages.ts index f3ed54e27..7ba07450d 100644 --- a/framework/saleor/api/operations/get-all-pages.ts +++ b/framework/saleor/api/operations/get-all-pages.ts @@ -6,14 +6,9 @@ import * as Query from '../../utils/queries' export type Page = any - export type GetAllPagesResult< - T extends { pages: any[] } = { pages: Page[] } - > = T - -export default function getAllPagesOperation({ - commerce, -}: OperationContext<Provider>) { +export type GetAllPagesResult<T extends { pages: any[] } = { pages: Page[] }> = T +export default function getAllPagesOperation({ commerce }: OperationContext<Provider>) { async function getAllPages({ query = Query.PageMany, config, @@ -27,7 +22,9 @@ export default function getAllPagesOperation({ } = {}): Promise<GetAllPagesResult> { const { fetch, locale, locales = ['en-US'] } = commerce.getConfig(config) - const { data } = await fetch(query, { variables }, + const { data } = await fetch( + query, + { variables }, { ...(locale && { headers: { @@ -42,7 +39,7 @@ export default function getAllPagesOperation({ url: `/${locale}/${slug}`, name, })) - + return { pages } } diff --git a/framework/saleor/api/operations/get-all-products.ts b/framework/saleor/api/operations/get-all-products.ts index a1a7ce0c9..4cb7555d6 100644 --- a/framework/saleor/api/operations/get-all-products.ts +++ b/framework/saleor/api/operations/get-all-products.ts @@ -12,9 +12,7 @@ type ReturnType = { products: Product[] } -export default function getAllProductsOperation({ - commerce, -}: OperationContext<Provider>) { +export default function getAllProductsOperation({ commerce }: OperationContext<Provider>) { async function getAllProducts({ query = Query.ProductMany, variables, @@ -22,7 +20,7 @@ export default function getAllProductsOperation({ featured, }: { query?: string - variables?: any + variables?: any config?: Partial<SaleorConfig> preview?: boolean featured?: boolean @@ -30,10 +28,9 @@ export default function getAllProductsOperation({ const { fetch, locale } = commerce.getConfig(config) if (featured) { - variables = { ...variables, categoryId: 'Q29sbGVjdGlvbjo0' }; + variables = { ...variables, categoryId: 'Q29sbGVjdGlvbjo0' } query = Query.CollectionOne - } - + } const { data }: GraphQLFetcherResult = await fetch( query, @@ -48,7 +45,8 @@ export default function getAllProductsOperation({ ) if (featured) { - const products = data.collection.products?.edges?.map(({ node: p }: ProductCountableEdge) => normalizeProduct(p)) ?? [] + const products = + data.collection.products?.edges?.map(({ node: p }: ProductCountableEdge) => normalizeProduct(p)) ?? [] return { products, @@ -60,7 +58,6 @@ export default function getAllProductsOperation({ products, } } - } return getAllProducts diff --git a/framework/saleor/api/operations/get-page.ts b/framework/saleor/api/operations/get-page.ts index af2d5b8e6..1e6c8cf2b 100644 --- a/framework/saleor/api/operations/get-page.ts +++ b/framework/saleor/api/operations/get-page.ts @@ -6,19 +6,16 @@ import * as Query from '../../utils/queries' export type Page = any - export type GetPageResult<T extends { page?: any } = { page?: Page }> = T - -export default function getPageOperation({ - commerce, -}: OperationContext<Provider>) { +export type GetPageResult<T extends { page?: any } = { page?: Page }> = T +export default function getPageOperation({ commerce }: OperationContext<Provider>) { async function getPage({ query = Query.PageOne, variables, config, }: { query?: string - variables: QueryPageArgs, + variables: QueryPageArgs config?: Partial<SaleorConfig> preview?: boolean }): Promise<GetPageResult> { @@ -26,7 +23,9 @@ export default function getPageOperation({ const { data: { page }, - } = await fetch(query, { variables }, + } = await fetch( + query, + { variables }, { ...(locale && { headers: { diff --git a/framework/saleor/api/operations/get-product.ts b/framework/saleor/api/operations/get-product.ts index 85fca934a..e5e8e596f 100644 --- a/framework/saleor/api/operations/get-product.ts +++ b/framework/saleor/api/operations/get-product.ts @@ -1,5 +1,5 @@ import type { OperationContext } from '@commerce/api/operations' -import { normalizeProduct, } from '../../utils' +import { normalizeProduct } from '../../utils' import type { Provider, SaleorConfig } from '..' import * as Query from '../../utils/queries' @@ -12,22 +12,22 @@ type ReturnType = { product: any } -export default function getProductOperation({ - commerce, -}: OperationContext<Provider>) { +export default function getProductOperation({ commerce }: OperationContext<Provider>) { async function getProduct({ query = Query.ProductOneBySlug, variables, config: cfg, }: { query?: string - variables: Variables + variables: Variables config?: Partial<SaleorConfig> preview?: boolean }): Promise<ReturnType> { const { fetch, locale } = commerce.getConfig(cfg) - const { data } = await fetch(query, { variables }, + const { data } = await fetch( + query, + { variables }, { ...(locale && { headers: { diff --git a/framework/saleor/api/operations/get-site-info.ts b/framework/saleor/api/operations/get-site-info.ts index eca0f2246..917b96ce4 100644 --- a/framework/saleor/api/operations/get-site-info.ts +++ b/framework/saleor/api/operations/get-site-info.ts @@ -18,7 +18,7 @@ export default function getSiteInfoOperation({ commerce }: OperationContext<Prov query?: string config?: Partial<SaleorConfig> preview?: boolean - variables?: any + variables?: any } = {}): Promise<GetSiteInfoResult> { const cfg = commerce.getConfig(config) diff --git a/framework/saleor/api/operations/login.ts b/framework/saleor/api/operations/login.ts index ca680b82c..9d3a7fe9f 100644 --- a/framework/saleor/api/operations/login.ts +++ b/framework/saleor/api/operations/login.ts @@ -1,28 +1,26 @@ import type { ServerResponse } from 'http' import type { OperationContext } from '@commerce/api/operations' import type { Provider, SaleorConfig } from '..' -import { - throwUserErrors, -} from '../../utils' +import { throwUserErrors } from '../../utils' import * as Mutation from '../../utils/mutations' -export default function loginOperation({ - commerce, -}: OperationContext<Provider>) { +export default function loginOperation({ commerce }: OperationContext<Provider>) { async function login({ query = Mutation.SessionCreate, variables, config, }: { query?: string - variables: any + variables: any res: ServerResponse config?: SaleorConfig }): Promise<any> { config = commerce.getConfig(config) - const { data: { customerAccessTokenCreate } } = await config.fetch(query, { variables }) + const { + data: { customerAccessTokenCreate }, + } = await config.fetch(query, { variables }) throwUserErrors(customerAccessTokenCreate?.customerUserErrors) diff --git a/framework/saleor/auth/use-signup.tsx b/framework/saleor/auth/use-signup.tsx index d9e91b468..06df516a5 100644 --- a/framework/saleor/auth/use-signup.tsx +++ b/framework/saleor/auth/use-signup.tsx @@ -29,7 +29,7 @@ export const handler: MutationHook<SignupHook> = { email, password, redirectUrl: 'https://localhost.com', - channel: 'default-channel' + channel: 'default-channel', }, }, }) diff --git a/framework/saleor/cart/use-remove-item.tsx b/framework/saleor/cart/use-remove-item.tsx index 81f9c122f..17be31e0c 100644 --- a/framework/saleor/cart/use-remove-item.tsx +++ b/framework/saleor/cart/use-remove-item.tsx @@ -21,9 +21,9 @@ export const handler = { }) return checkoutToCart(data.checkoutLineDelete) }, - useHook: ({ fetch }: MutationHookContext<RemoveItemHook>) => < - T extends LineItem | undefined = undefined - > () => { + useHook: + ({ fetch }: MutationHookContext<RemoveItemHook>) => + <T extends LineItem | undefined = undefined>() => { const { mutate } = useCart() return useCallback( @@ -34,6 +34,6 @@ export const handler = { return data }, [fetch, mutate] - ); + ) }, } diff --git a/framework/saleor/cart/use-update-item.tsx b/framework/saleor/cart/use-update-item.tsx index 361ae5cdf..bd596132d 100644 --- a/framework/saleor/cart/use-update-item.tsx +++ b/framework/saleor/cart/use-update-item.tsx @@ -23,11 +23,7 @@ export default useUpdateItem as UseUpdateItem<typeof handler> export const handler = { fetchOptions: { query: mutation.CheckoutLineUpdate }, - async fetcher({ - input: { itemId, item }, - options, - fetch - }: HookFetcherContext<UpdateItemHook>) { + async fetcher({ input: { itemId, item }, options, fetch }: HookFetcherContext<UpdateItemHook>) { if (Number.isInteger(item.quantity)) { // Also allow the update hook to remove an item if the quantity is lower than 1 if (item.quantity! < 1) { @@ -59,7 +55,8 @@ export const handler = { return checkoutToCart(checkoutLinesUpdate) }, - useHook: ({ fetch }: MutationHookContext<UpdateItemHook>) => + useHook: + ({ fetch }: MutationHookContext<UpdateItemHook>) => <T extends LineItem | undefined = undefined>( ctx: { item?: T diff --git a/framework/saleor/utils/checkout-to-cart.ts b/framework/saleor/utils/checkout-to-cart.ts index 638ca815e..0bfcf6ed9 100644 --- a/framework/saleor/utils/checkout-to-cart.ts +++ b/framework/saleor/utils/checkout-to-cart.ts @@ -1,7 +1,15 @@ import { Cart } from '../types' import { CommerceError } from '@commerce/utils/errors' -import { CheckoutLinesAdd, CheckoutLinesUpdate, CheckoutCreate, CheckoutError, Checkout, Maybe, CheckoutLineDelete } from '../schema' +import { + CheckoutLinesAdd, + CheckoutLinesUpdate, + CheckoutCreate, + CheckoutError, + Checkout, + Maybe, + CheckoutLineDelete, +} from '../schema' import { normalizeCart } from './normalize' import throwUserErrors from './throw-user-errors' @@ -11,7 +19,12 @@ export type CheckoutQuery = { errors?: Array<CheckoutError> } -export type CheckoutPayload = CheckoutLinesAdd | CheckoutLinesUpdate | CheckoutCreate | CheckoutQuery | CheckoutLineDelete +export type CheckoutPayload = + | CheckoutLinesAdd + | CheckoutLinesUpdate + | CheckoutCreate + | CheckoutQuery + | CheckoutLineDelete const checkoutToCart = (checkoutPayload?: Maybe<CheckoutPayload>): Cart => { if (!checkoutPayload) { diff --git a/framework/shopify/api/operations/get-all-pages.ts b/framework/shopify/api/operations/get-all-pages.ts index 58bc6a94b..38285ccca 100644 --- a/framework/shopify/api/operations/get-all-pages.ts +++ b/framework/shopify/api/operations/get-all-pages.ts @@ -38,9 +38,11 @@ export default function getAllPagesOperation({ preview?: boolean query?: string } = {}): Promise<T['data']> { - const { fetch, locale, locales = ['en-US', 'es'] } = commerce.getConfig( - config - ) + const { + fetch, + locale, + locales = ['en-US', 'es'], + } = commerce.getConfig(config) const { data } = await fetch<GetAllPagesQuery, GetAllPagesQueryVariables>( query, diff --git a/framework/shopify/auth/use-login.tsx b/framework/shopify/auth/use-login.tsx index e1de89c99..98b8cdd56 100644 --- a/framework/shopify/auth/use-login.tsx +++ b/framework/shopify/auth/use-login.tsx @@ -21,8 +21,7 @@ export const handler: MutationHook<LoginHook> = { async fetcher({ input: { email, password }, options, fetch }) { if (!(email && password)) { throw new CommerceError({ - message: - 'An email and password are required to login', + message: 'An email and password are required to login', }) } @@ -47,16 +46,18 @@ export const handler: MutationHook<LoginHook> = { return null }, - useHook: ({ fetch }) => () => { - const { revalidate } = useCustomer() + useHook: + ({ fetch }) => + () => { + const { revalidate } = useCustomer() - return useCallback( - async function login(input) { - const data = await fetch({ input }) - await revalidate() - return data - }, - [fetch, revalidate] - ) - }, + return useCallback( + async function login(input) { + const data = await fetch({ input }) + await revalidate() + return data + }, + [fetch, revalidate] + ) + }, } diff --git a/framework/shopify/auth/use-logout.tsx b/framework/shopify/auth/use-logout.tsx index 30074b8d5..fdba8df84 100644 --- a/framework/shopify/auth/use-logout.tsx +++ b/framework/shopify/auth/use-logout.tsx @@ -22,16 +22,18 @@ export const handler: MutationHook<LogoutHook> = { setCustomerToken(null) return null }, - useHook: ({ fetch }) => () => { - const { mutate } = useCustomer() + useHook: + ({ fetch }) => + () => { + const { mutate } = useCustomer() - return useCallback( - async function logout() { - const data = await fetch() - await mutate(null, false) - return data - }, - [fetch, mutate] - ) - }, + return useCallback( + async function logout() { + const data = await fetch() + await mutate(null, false) + return data + }, + [fetch, mutate] + ) + }, } diff --git a/framework/shopify/auth/use-signup.tsx b/framework/shopify/auth/use-signup.tsx index 29557e960..0a55c17d4 100644 --- a/framework/shopify/auth/use-signup.tsx +++ b/framework/shopify/auth/use-signup.tsx @@ -50,16 +50,18 @@ export const handler: MutationHook<SignupHook> = { return null }, - useHook: ({ fetch }) => () => { - const { revalidate } = useCustomer() + useHook: + ({ fetch }) => + () => { + const { revalidate } = useCustomer() - return useCallback( - async function signup(input) { - const data = await fetch({ input }) - await revalidate() - return data - }, - [fetch, revalidate] - ) - }, + return useCallback( + async function signup(input) { + const data = await fetch({ input }) + await revalidate() + return data + }, + [fetch, revalidate] + ) + }, } diff --git a/framework/shopify/cart/use-remove-item.tsx b/framework/shopify/cart/use-remove-item.tsx index bf9fb2d95..5e193358b 100644 --- a/framework/shopify/cart/use-remove-item.tsx +++ b/framework/shopify/cart/use-remove-item.tsx @@ -41,27 +41,25 @@ export const handler = { }) return checkoutToCart(data.checkoutLineItemsRemove) }, - useHook: ({ fetch }: MutationHookContext<RemoveItemHook>) => < - T extends LineItem | undefined = undefined - >( - ctx: { item?: T } = {} - ) => { - const { item } = ctx - const { mutate } = useCart() - const removeItem: RemoveItemFn<LineItem> = async (input) => { - const itemId = input?.id ?? item?.id + useHook: + ({ fetch }: MutationHookContext<RemoveItemHook>) => + <T extends LineItem | undefined = undefined>(ctx: { item?: T } = {}) => { + const { item } = ctx + const { mutate } = useCart() + const removeItem: RemoveItemFn<LineItem> = async (input) => { + const itemId = input?.id ?? item?.id - if (!itemId) { - throw new ValidationError({ - message: 'Invalid input used for this operation', - }) + if (!itemId) { + throw new ValidationError({ + message: 'Invalid input used for this operation', + }) + } + + const data = await fetch({ input: { itemId } }) + await mutate(data, false) + return data } - const data = await fetch({ input: { itemId } }) - await mutate(data, false) - return data - } - - return useCallback(removeItem as RemoveItemFn<T>, [fetch, mutate]) - }, + return useCallback(removeItem as RemoveItemFn<T>, [fetch, mutate]) + }, } diff --git a/framework/shopify/cart/use-update-item.tsx b/framework/shopify/cart/use-update-item.tsx index 3f1cf4315..83d0a220a 100644 --- a/framework/shopify/cart/use-update-item.tsx +++ b/framework/shopify/cart/use-update-item.tsx @@ -64,42 +64,42 @@ export const handler = { return checkoutToCart(checkoutLineItemsUpdate) }, - useHook: ({ fetch }: MutationHookContext<UpdateItemHook>) => < - T extends LineItem | undefined = undefined - >( - ctx: { - item?: T - wait?: number - } = {} - ) => { - const { item } = ctx - const { mutate } = useCart() as any + useHook: + ({ fetch }: MutationHookContext<UpdateItemHook>) => + <T extends LineItem | undefined = undefined>( + ctx: { + item?: T + wait?: number + } = {} + ) => { + const { item } = ctx + const { mutate } = useCart() as any - return useCallback( - debounce(async (input: UpdateItemActionInput<T>) => { - const itemId = input.id ?? item?.id - const productId = input.productId ?? item?.productId - const variantId = input.productId ?? item?.variantId - if (!itemId || !productId || !variantId) { - throw new ValidationError({ - message: 'Invalid input used for this operation', - }) - } + return useCallback( + debounce(async (input: UpdateItemActionInput<T>) => { + const itemId = input.id ?? item?.id + const productId = input.productId ?? item?.productId + const variantId = input.productId ?? item?.variantId + if (!itemId || !productId || !variantId) { + throw new ValidationError({ + message: 'Invalid input used for this operation', + }) + } - const data = await fetch({ - input: { - item: { - productId, - variantId, - quantity: input.quantity, + const data = await fetch({ + input: { + item: { + productId, + variantId, + quantity: input.quantity, + }, + itemId, }, - itemId, - }, - }) - await mutate(data, false) - return data - }, ctx.wait ?? 500), - [fetch, mutate] - ) - }, + }) + await mutate(data, false) + return data + }, ctx.wait ?? 500), + [fetch, mutate] + ) + }, } diff --git a/framework/shopify/customer/use-customer.tsx b/framework/shopify/customer/use-customer.tsx index be097fe80..5c470e7de 100644 --- a/framework/shopify/customer/use-customer.tsx +++ b/framework/shopify/customer/use-customer.tsx @@ -21,12 +21,14 @@ export const handler: SWRHook<CustomerHook> = { } return null }, - useHook: ({ useData }) => (input) => { - return useData({ - swrOptions: { - revalidateOnFocus: false, - ...input?.swrOptions, - }, - }) - }, + useHook: + ({ useData }) => + (input) => { + return useData({ + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) + }, } diff --git a/framework/shopify/product/use-search.tsx b/framework/shopify/product/use-search.tsx index 72dc8bb65..b975c03fe 100644 --- a/framework/shopify/product/use-search.tsx +++ b/framework/shopify/product/use-search.tsx @@ -71,19 +71,21 @@ export const handler: SWRHook<SearchProductsHook> = { found: !!products?.length, } }, - useHook: ({ useData }) => (input = {}) => { - return useData({ - input: [ - ['search', input.search], - ['categoryId', input.categoryId], - ['brandId', input.brandId], - ['sort', input.sort], - ['locale', input.locale], - ], - swrOptions: { - revalidateOnFocus: false, - ...input.swrOptions, - }, - }) - }, + useHook: + ({ useData }) => + (input = {}) => { + return useData({ + input: [ + ['search', input.search], + ['categoryId', input.categoryId], + ['brandId', input.brandId], + ['sort', input.sort], + ['locale', input.locale], + ], + swrOptions: { + revalidateOnFocus: false, + ...input.swrOptions, + }, + }) + }, } diff --git a/framework/spree/.env.template b/framework/spree/.env.template new file mode 100644 index 000000000..8f4dbf5dd --- /dev/null +++ b/framework/spree/.env.template @@ -0,0 +1,25 @@ +# Template to be used for creating .env* files (.env, .env.local etc.) in the project's root directory. + +COMMERCE_PROVIDER=spree + +{# - NEXT_PUBLIC_* are exposed to the web browser and the server #} +NEXT_PUBLIC_SPREE_API_HOST=http://localhost:4000 +NEXT_PUBLIC_SPREE_DEFAULT_LOCALE=en-us +NEXT_PUBLIC_SPREE_CART_COOKIE_NAME=spree_cart_token +{# -- cookie expire in days #} +NEXT_PUBLIC_SPREE_CART_COOKIE_EXPIRE=7 +NEXT_PUBLIC_SPREE_USER_COOKIE_NAME=spree_user_token +NEXT_PUBLIC_SPREE_USER_COOKIE_EXPIRE=7 +NEXT_PUBLIC_SPREE_IMAGE_HOST=http://localhost:4000 +NEXT_PUBLIC_SPREE_ALLOWED_IMAGE_DOMAIN=localhost +NEXT_PUBLIC_SPREE_CATEGORIES_TAXONOMY_PERMALINK=categories +NEXT_PUBLIC_SPREE_BRANDS_TAXONOMY_PERMALINK=brands +NEXT_PUBLIC_SPREE_ALL_PRODUCTS_TAXONOMY_ID=false +NEXT_PUBLIC_SPREE_SHOW_SINGLE_VARIANT_OPTIONS=false +NEXT_PUBLIC_SPREE_LAST_UPDATED_PRODUCTS_PRERENDER_COUNT=10 +NEXT_PUBLIC_SPREE_PRODUCT_PLACEHOLDER_IMAGE_URL=/product-img-placeholder.svg +NEXT_PUBLIC_SPREE_LINE_ITEM_PLACEHOLDER_IMAGE_URL=/product-img-placeholder.svg +NEXT_PUBLIC_SPREE_IMAGES_OPTION_FILTER=false +NEXT_PUBLIC_SPREE_IMAGES_SIZE=1000x1000 +NEXT_PUBLIC_SPREE_IMAGES_QUALITY=100 +NEXT_PUBLIC_SPREE_LOGIN_AFTER_SIGNUP=true diff --git a/framework/spree/README-assets/screenshots.png b/framework/spree/README-assets/screenshots.png new file mode 100644 index 000000000..93c133e06 Binary files /dev/null and b/framework/spree/README-assets/screenshots.png differ diff --git a/framework/spree/README.md b/framework/spree/README.md new file mode 100644 index 000000000..0b2068cb5 --- /dev/null +++ b/framework/spree/README.md @@ -0,0 +1,33 @@ +# [Spree Commerce][1] Provider + +![Screenshots of Spree Commerce and NextJS Commerce][5] + +An integration of [Spree Commerce](https://spreecommerce.org/) within NextJS Commerce. It supports browsing and searching Spree products and adding products to the cart. + +**Demo**: [https://spree.vercel.store/][6] + +## Installation + +1. Setup Spree - [follow the Getting Started guide](https://dev-docs.spreecommerce.org/getting-started/installation). + +1. Setup Nextjs Commerce - [instructions for setting up NextJS Commerce][2]. + +1. Copy the `.env.template` file in this directory (`/framework/spree`) to `.env.local` in the main directory + + ```bash + cp framework/spree/.env.template .env.local + ``` + +1. Set `NEXT_PUBLIC_SPREE_CATEGORIES_TAXONOMY_PERMALINK` and `NEXT_PUBLIC_SPREE_BRANDS_TAXONOMY_PERMALINK` environment variables: + + - They rely on [taxonomies'](https://dev-docs.spreecommerce.org/internals/products#taxons-and-taxonomies) permalinks in Spree. + - Go to the Spree admin panel and create `Categories` and `Brands` taxonomies if they don't exist and copy their permalinks into `.env.local` in NextJS Commerce. + +1. Finally, run `yarn dev` :tada: + +[1]: https://spreecommerce.org/ +[2]: https://github.com/vercel/commerce +[3]: https://github.com/spree/spree_starter +[4]: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS +[5]: ./README-assets/screenshots.png +[6]: https://spree.vercel.store/ diff --git a/framework/spree/api/endpoints/cart/index.ts b/framework/spree/api/endpoints/cart/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/spree/api/endpoints/cart/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/spree/api/endpoints/catalog/index.ts b/framework/spree/api/endpoints/catalog/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/spree/api/endpoints/catalog/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/spree/api/endpoints/catalog/products.ts b/framework/spree/api/endpoints/catalog/products.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/spree/api/endpoints/catalog/products.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/spree/api/endpoints/checkout/get-checkout.ts b/framework/spree/api/endpoints/checkout/get-checkout.ts new file mode 100644 index 000000000..985239678 --- /dev/null +++ b/framework/spree/api/endpoints/checkout/get-checkout.ts @@ -0,0 +1,44 @@ +import type { CheckoutEndpoint } from '.' + +const getCheckout: CheckoutEndpoint['handlers']['getCheckout'] = async ({ + req: _request, + res: response, + config: _config, +}) => { + try { + const html = ` + <!DOCTYPE html> + <html lang="en"> + <head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Checkout</title> + </head> + <body> + <div style='margin: 10rem auto; text-align: center; font-family: SansSerif, "Segoe UI", Helvetica; color: #888;'> + <svg xmlns="http://www.w3.org/2000/svg" style='height: 60px; width: 60px;' fill="none" viewBox="0 0 24 24" stroke="currentColor"> + <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" /> + </svg> + <h1>Checkout not yet implemented :(</h1> + <p> + See <a href='https://github.com/vercel/commerce/issues/64' target='_blank'>#64</a> + </p> + </div> + </body> + </html> + ` + + response.status(200) + response.setHeader('Content-Type', 'text/html') + response.write(html) + response.end() + } catch (error) { + console.error(error) + + const message = 'An unexpected error ocurred' + + response.status(500).json({ data: null, errors: [{ message }] }) + } +} + +export default getCheckout diff --git a/framework/spree/api/endpoints/checkout/index.ts b/framework/spree/api/endpoints/checkout/index.ts new file mode 100644 index 000000000..0a5ee9e72 --- /dev/null +++ b/framework/spree/api/endpoints/checkout/index.ts @@ -0,0 +1,22 @@ +import { createEndpoint } from '@commerce/api' +import type { GetAPISchema, CommerceAPI } from '@commerce/api' +import checkoutEndpoint from '@commerce/api/endpoints/checkout' +import type { CheckoutSchema } from '@commerce/types/checkout' +import getCheckout from './get-checkout' +import type { SpreeApiProvider } from '../..' + +export type CheckoutAPI = GetAPISchema< + CommerceAPI<SpreeApiProvider>, + CheckoutSchema +> + +export type CheckoutEndpoint = CheckoutAPI['endpoint'] + +export const handlers: CheckoutEndpoint['handlers'] = { getCheckout } + +const checkoutApi = createEndpoint<CheckoutAPI>({ + handler: checkoutEndpoint, + handlers, +}) + +export default checkoutApi diff --git a/framework/spree/api/endpoints/customer/address.ts b/framework/spree/api/endpoints/customer/address.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/spree/api/endpoints/customer/address.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/spree/api/endpoints/customer/card.ts b/framework/spree/api/endpoints/customer/card.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/spree/api/endpoints/customer/card.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/spree/api/endpoints/customer/index.ts b/framework/spree/api/endpoints/customer/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/spree/api/endpoints/customer/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/spree/api/endpoints/login/index.ts b/framework/spree/api/endpoints/login/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/spree/api/endpoints/login/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/spree/api/endpoints/logout/index.ts b/framework/spree/api/endpoints/logout/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/spree/api/endpoints/logout/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/spree/api/endpoints/signup/index.ts b/framework/spree/api/endpoints/signup/index.ts new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/spree/api/endpoints/signup/index.ts @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/spree/api/endpoints/wishlist/index.tsx b/framework/spree/api/endpoints/wishlist/index.tsx new file mode 100644 index 000000000..491bf0ac9 --- /dev/null +++ b/framework/spree/api/endpoints/wishlist/index.tsx @@ -0,0 +1 @@ +export default function noopApi(...args: any[]): void {} diff --git a/framework/spree/api/index.ts b/framework/spree/api/index.ts new file mode 100644 index 000000000..d9ef79e1a --- /dev/null +++ b/framework/spree/api/index.ts @@ -0,0 +1,45 @@ +import type { CommerceAPI, CommerceAPIConfig } from '@commerce/api' +import { getCommerceApi as commerceApi } from '@commerce/api' +import createApiFetch from './utils/create-api-fetch' + +import getAllPages from './operations/get-all-pages' +import getPage from './operations/get-page' +import getSiteInfo from './operations/get-site-info' +import getCustomerWishlist from './operations/get-customer-wishlist' +import getAllProductPaths from './operations/get-all-product-paths' +import getAllProducts from './operations/get-all-products' +import getProduct from './operations/get-product' + +export interface SpreeApiConfig extends CommerceAPIConfig {} + +const config: SpreeApiConfig = { + commerceUrl: '', + apiToken: '', + cartCookie: '', + customerCookie: '', + cartCookieMaxAge: 2592000, + fetch: createApiFetch(() => getCommerceApi().getConfig()), +} + +const operations = { + getAllPages, + getPage, + getSiteInfo, + getCustomerWishlist, + getAllProductPaths, + getAllProducts, + getProduct, +} + +export const provider = { config, operations } + +export type SpreeApiProvider = typeof provider + +export type SpreeApi<P extends SpreeApiProvider = SpreeApiProvider> = + CommerceAPI<P> + +export function getCommerceApi<P extends SpreeApiProvider>( + customProvider: P = provider as any +): SpreeApi<P> { + return commerceApi(customProvider) +} diff --git a/framework/spree/api/operations/get-all-pages.ts b/framework/spree/api/operations/get-all-pages.ts new file mode 100644 index 000000000..580a74999 --- /dev/null +++ b/framework/spree/api/operations/get-all-pages.ts @@ -0,0 +1,82 @@ +import type { + OperationContext, + OperationOptions, +} from '@commerce/api/operations' +import type { GetAllPagesOperation, Page } from '@commerce/types/page' +import { requireConfigValue } from '../../isomorphic-config' +import normalizePage from '../../utils/normalizations/normalize-page' +import type { IPages } from '@spree/storefront-api-v2-sdk/types/interfaces/Page' +import type { SpreeSdkVariables } from '../../types' +import type { SpreeApiConfig, SpreeApiProvider } from '../index' + +export default function getAllPagesOperation({ + commerce, +}: OperationContext<SpreeApiProvider>) { + async function getAllPages<T extends GetAllPagesOperation>(options?: { + config?: Partial<SpreeApiConfig> + preview?: boolean + }): Promise<T['data']> + + async function getAllPages<T extends GetAllPagesOperation>( + opts: { + config?: Partial<SpreeApiConfig> + preview?: boolean + } & OperationOptions + ): Promise<T['data']> + + async function getAllPages<T extends GetAllPagesOperation>({ + config: userConfig, + preview, + query, + url, + }: { + url?: string + config?: Partial<SpreeApiConfig> + preview?: boolean + query?: string + } = {}): Promise<T['data']> { + console.info( + 'getAllPages called. Configuration: ', + 'query: ', + query, + 'userConfig: ', + userConfig, + 'preview: ', + preview, + 'url: ', + url + ) + + const config = commerce.getConfig(userConfig) + const { fetch: apiFetch } = config + + const variables: SpreeSdkVariables = { + methodPath: 'pages.list', + arguments: [ + { + per_page: 500, + filter: { + locale_eq: + config.locale || (requireConfigValue('defaultLocale') as string), + }, + }, + ], + } + + const { data: spreeSuccessResponse } = await apiFetch< + IPages, + SpreeSdkVariables + >('__UNUSED__', { + variables, + }) + + const normalizedPages: Page[] = spreeSuccessResponse.data.map<Page>( + (spreePage) => + normalizePage(spreeSuccessResponse, spreePage, config.locales || []) + ) + + return { pages: normalizedPages } + } + + return getAllPages +} diff --git a/framework/spree/api/operations/get-all-product-paths.ts b/framework/spree/api/operations/get-all-product-paths.ts new file mode 100644 index 000000000..4795d1fdb --- /dev/null +++ b/framework/spree/api/operations/get-all-product-paths.ts @@ -0,0 +1,97 @@ +import type { + OperationContext, + OperationOptions, +} from '@commerce/api/operations' +import type { Product } from '@commerce/types/product' +import type { GetAllProductPathsOperation } from '@commerce/types/product' +import { requireConfigValue } from '../../isomorphic-config' +import type { IProductsSlugs, SpreeSdkVariables } from '../../types' +import getProductPath from '../../utils/get-product-path' +import type { SpreeApiConfig, SpreeApiProvider } from '..' + +const imagesSize = requireConfigValue('imagesSize') as string +const imagesQuality = requireConfigValue('imagesQuality') as number + +export default function getAllProductPathsOperation({ + commerce, +}: OperationContext<SpreeApiProvider>) { + async function getAllProductPaths< + T extends GetAllProductPathsOperation + >(opts?: { + variables?: T['variables'] + config?: Partial<SpreeApiConfig> + }): Promise<T['data']> + + async function getAllProductPaths<T extends GetAllProductPathsOperation>( + opts: { + variables?: T['variables'] + config?: Partial<SpreeApiConfig> + } & OperationOptions + ): Promise<T['data']> + + async function getAllProductPaths<T extends GetAllProductPathsOperation>({ + query, + variables: getAllProductPathsVariables = {}, + config: userConfig, + }: { + query?: string + variables?: T['variables'] + config?: Partial<SpreeApiConfig> + } = {}): Promise<T['data']> { + console.info( + 'getAllProductPaths called. Configuration: ', + 'query: ', + query, + 'getAllProductPathsVariables: ', + getAllProductPathsVariables, + 'config: ', + userConfig + ) + + const productsCount = requireConfigValue( + 'lastUpdatedProductsPrerenderCount' + ) + + if (productsCount === 0) { + return { + products: [], + } + } + + const variables: SpreeSdkVariables = { + methodPath: 'products.list', + arguments: [ + {}, + { + fields: { + product: 'slug', + }, + per_page: productsCount, + image_transformation: { + quality: imagesQuality, + size: imagesSize, + }, + }, + ], + } + + const config = commerce.getConfig(userConfig) + const { fetch: apiFetch } = config // TODO: Send config.locale to Spree. + + const { data: spreeSuccessResponse } = await apiFetch< + IProductsSlugs, + SpreeSdkVariables + >('__UNUSED__', { + variables, + }) + + const normalizedProductsPaths: Pick<Product, 'path'>[] = + spreeSuccessResponse.data.map((spreeProduct) => ({ + path: getProductPath(spreeProduct), + })) + + return { products: normalizedProductsPaths } + } + + return getAllProductPaths +} diff --git a/framework/spree/api/operations/get-all-products.ts b/framework/spree/api/operations/get-all-products.ts new file mode 100644 index 000000000..a292e6097 --- /dev/null +++ b/framework/spree/api/operations/get-all-products.ts @@ -0,0 +1,92 @@ +import type { Product } from '@commerce/types/product' +import type { GetAllProductsOperation } from '@commerce/types/product' +import type { + OperationContext, + OperationOptions, +} from '@commerce/api/operations' +import type { IProducts } from '@spree/storefront-api-v2-sdk/types/interfaces/Product' +import type { SpreeApiConfig, SpreeApiProvider } from '../index' +import type { SpreeSdkVariables } from '../../types' +import normalizeProduct from '../../utils/normalizations/normalize-product' +import { requireConfigValue } from '../../isomorphic-config' + +const imagesSize = requireConfigValue('imagesSize') as string +const imagesQuality = requireConfigValue('imagesQuality') as number + +export default function getAllProductsOperation({ + commerce, +}: OperationContext<SpreeApiProvider>) { + async function getAllProducts<T extends GetAllProductsOperation>(opts?: { + variables?: T['variables'] + config?: Partial<SpreeApiConfig> + preview?: boolean + }): Promise<T['data']> + + async function getAllProducts<T extends GetAllProductsOperation>( + opts: { + variables?: T['variables'] + config?: Partial<SpreeApiConfig> + preview?: boolean + } & OperationOptions + ): Promise<T['data']> + + async function getAllProducts<T extends GetAllProductsOperation>({ + variables: getAllProductsVariables = {}, + config: userConfig, + }: { + variables?: T['variables'] + config?: Partial<SpreeApiConfig> + } = {}): Promise<{ products: Product[] }> { + console.info( + 'getAllProducts called. Configuration: ', + 'getAllProductsVariables: ', + getAllProductsVariables, + 'config: ', + userConfig + ) + + const defaultProductsTaxonomyId = requireConfigValue( + 'allProductsTaxonomyId' + ) as string | false + + const first = getAllProductsVariables.first + const filter = !defaultProductsTaxonomyId + ? {} + : { filter: { taxons: defaultProductsTaxonomyId }, sort: '-updated_at' } + + const variables: SpreeSdkVariables = { + methodPath: 'products.list', + arguments: [ + {}, + { + include: + 'primary_variant,variants,images,option_types,variants.option_values', + per_page: first, + ...filter, + image_transformation: { + quality: imagesQuality, + size: imagesSize, + }, + }, + ], + } + + const config = commerce.getConfig(userConfig) + const { fetch: apiFetch } = config // TODO: Send config.locale to Spree. + + const { data: spreeSuccessResponse } = await apiFetch< + IProducts, + SpreeSdkVariables + >('__UNUSED__', { + variables, + }) + + const normalizedProducts: Product[] = spreeSuccessResponse.data.map( + (spreeProduct) => normalizeProduct(spreeSuccessResponse, spreeProduct) + ) + + return { products: normalizedProducts } + } + + return getAllProducts +} diff --git a/framework/spree/api/operations/get-customer-wishlist.ts b/framework/spree/api/operations/get-customer-wishlist.ts new file mode 100644 index 000000000..8c34b9e87 --- /dev/null +++ b/framework/spree/api/operations/get-customer-wishlist.ts @@ -0,0 +1,6 @@ +export default function getCustomerWishlistOperation() { + function getCustomerWishlist(): any { + return { wishlist: {} } + } + return getCustomerWishlist +} diff --git a/framework/spree/api/operations/get-page.ts b/framework/spree/api/operations/get-page.ts new file mode 100644 index 000000000..ecb02755d --- /dev/null +++ b/framework/spree/api/operations/get-page.ts @@ -0,0 +1,81 @@ +import type { + OperationContext, + OperationOptions, +} from '@commerce/api/operations' +import type { GetPageOperation } from '@commerce/types/page' +import type { SpreeSdkVariables } from '../../types' +import type { SpreeApiConfig, SpreeApiProvider } from '..' +import type { IPage } from '@spree/storefront-api-v2-sdk/types/interfaces/Page' +import normalizePage from '../../utils/normalizations/normalize-page' + +export type Page = any +export type GetPageResult = { page?: Page } + +export type PageVariables = { + id: number +} + +export default function getPageOperation({ + commerce, +}: OperationContext<SpreeApiProvider>) { + async function getPage<T extends GetPageOperation>(opts: { + variables: T['variables'] + config?: Partial<SpreeApiConfig> + preview?: boolean + }): Promise<T['data']> + + async function getPage<T extends GetPageOperation>( + opts: { + variables: T['variables'] + config?: Partial<SpreeApiConfig> + preview?: boolean + } & OperationOptions + ): Promise<T['data']> + + async function getPage<T extends GetPageOperation>({ + url, + config: userConfig, + preview, + variables: getPageVariables, + }: { + url?: string + variables: T['variables'] + config?: Partial<SpreeApiConfig> + preview?: boolean + }): Promise<T['data']> { + console.info( + 'getPage called. Configuration: ', + 'userConfig: ', + userConfig, + 'preview: ', + preview, + 'url: ', + url + ) + + const config = commerce.getConfig(userConfig) + const { fetch: apiFetch } = config + + const variables: SpreeSdkVariables = { + methodPath: 'pages.show', + arguments: [getPageVariables.id], + } + + const { data: spreeSuccessResponse } = await apiFetch< + IPage, + SpreeSdkVariables + >('__UNUSED__', { + variables, + }) + + const normalizedPage: Page = normalizePage( + spreeSuccessResponse, + spreeSuccessResponse.data, + config.locales || [] + ) + + return { page: normalizedPage } + } + + return getPage +} diff --git a/framework/spree/api/operations/get-product.ts b/framework/spree/api/operations/get-product.ts new file mode 100644 index 000000000..18e9643cd --- /dev/null +++ b/framework/spree/api/operations/get-product.ts @@ -0,0 +1,90 @@ +import type { SpreeApiConfig, SpreeApiProvider } from '../index' +import type { GetProductOperation } from '@commerce/types/product' +import type { + OperationContext, + OperationOptions, +} from '@commerce/api/operations' +import type { IProduct } from '@spree/storefront-api-v2-sdk/types/interfaces/Product' +import type { SpreeSdkVariables } from '../../types' +import MissingSlugVariableError from '../../errors/MissingSlugVariableError' +import normalizeProduct from '../../utils/normalizations/normalize-product' +import { requireConfigValue } from '../../isomorphic-config' + +const imagesSize = requireConfigValue('imagesSize') as string +const imagesQuality = requireConfigValue('imagesQuality') as number + +export default function getProductOperation({ + commerce, +}: OperationContext<SpreeApiProvider>) { + async function getProduct<T extends GetProductOperation>(opts: { + variables: T['variables'] + config?: Partial<SpreeApiConfig> + preview?: boolean + }): Promise<T['data']> + + async function getProduct<T extends GetProductOperation>( + opts: { + variables: T['variables'] + config?: Partial<SpreeApiConfig> + preview?: boolean + } & OperationOptions + ): Promise<T['data']> + + async function getProduct<T extends GetProductOperation>({ + query = '', + variables: getProductVariables, + config: userConfig, + }: { + query?: string + variables?: T['variables'] + config?: Partial<SpreeApiConfig> + preview?: boolean + }): Promise<T['data']> { + console.log( + 'getProduct called. Configuration: ', + 'getProductVariables: ', + getProductVariables, + 'config: ', + userConfig + ) + + if (!getProductVariables?.slug) { + throw new MissingSlugVariableError() + } + + const variables: SpreeSdkVariables = { + methodPath: 'products.show', + arguments: [ + getProductVariables.slug, + {}, + { + include: + 'primary_variant,variants,images,option_types,variants.option_values', + image_transformation: { + quality: imagesQuality, + size: imagesSize, + }, + }, + ], + } + + const config = commerce.getConfig(userConfig) + const { fetch: apiFetch } = config // TODO: Send config.locale to Spree. + + const { data: spreeSuccessResponse } = await apiFetch< + IProduct, + SpreeSdkVariables + >('__UNUSED__', { + variables, + }) + + return { + product: normalizeProduct( + spreeSuccessResponse, + spreeSuccessResponse.data + ), + } + } + + return getProduct +} diff --git a/framework/spree/api/operations/get-site-info.ts b/framework/spree/api/operations/get-site-info.ts new file mode 100644 index 000000000..4d9aaf0ad --- /dev/null +++ b/framework/spree/api/operations/get-site-info.ts @@ -0,0 +1,135 @@ +import type { + OperationContext, + OperationOptions, +} from '@commerce/api/operations' +import type { Category, GetSiteInfoOperation } from '@commerce/types/site' +import type { + ITaxons, + TaxonAttr, +} from '@spree/storefront-api-v2-sdk/types/interfaces/Taxon' +import { requireConfigValue } from '../../isomorphic-config' +import type { SpreeSdkVariables } from '../../types' +import type { SpreeApiConfig, SpreeApiProvider } from '..' + +const taxonsSort = (spreeTaxon1: TaxonAttr, spreeTaxon2: TaxonAttr): number => { + const { left: left1, right: right1 } = spreeTaxon1.attributes + const { left: left2, right: right2 } = spreeTaxon2.attributes + + if (right1 < left2) { + return -1 + } + + if (right2 < left1) { + return 1 + } + + return 0 +} + +export type GetSiteInfoResult< + T extends { categories: any[]; brands: any[] } = { + categories: Category[] + brands: any[] + } +> = T + +export default function getSiteInfoOperation({ + commerce, +}: OperationContext<SpreeApiProvider>) { + async function getSiteInfo<T extends GetSiteInfoOperation>(opts?: { + config?: Partial<SpreeApiConfig> + preview?: boolean + }): Promise<T['data']> + + async function getSiteInfo<T extends GetSiteInfoOperation>( + opts: { + config?: Partial<SpreeApiConfig> + preview?: boolean + } & OperationOptions + ): Promise<T['data']> + + async function getSiteInfo<T extends GetSiteInfoOperation>({ + query, + variables: getSiteInfoVariables = {}, + config: userConfig, + }: { + query?: string + variables?: any + config?: Partial<SpreeApiConfig> + preview?: boolean + } = {}): Promise<GetSiteInfoResult> { + console.info( + 'getSiteInfo called. Configuration: ', + 'query: ', + query, + 'getSiteInfoVariables ', + getSiteInfoVariables, + 'config: ', + userConfig + ) + + const createVariables = (parentPermalink: string): SpreeSdkVariables => ({ + methodPath: 'taxons.list', + arguments: [ + { + filter: { + parent_permalink: parentPermalink, + }, + }, + ], + }) + + const config = commerce.getConfig(userConfig) + const { fetch: apiFetch } = config // TODO: Send config.locale to Spree. + + const { data: spreeCategoriesSuccessResponse } = await apiFetch< + ITaxons, + SpreeSdkVariables + >('__UNUSED__', { + variables: createVariables( + requireConfigValue('categoriesTaxonomyPermalink') as string + ), + }) + + const { data: spreeBrandsSuccessResponse } = await apiFetch< + ITaxons, + SpreeSdkVariables + >('__UNUSED__', { + variables: createVariables( + requireConfigValue('brandsTaxonomyPermalink') as string + ), + }) + + const normalizedCategories: GetSiteInfoOperation['data']['categories'] = + spreeCategoriesSuccessResponse.data + .sort(taxonsSort) + .map((spreeTaxon: TaxonAttr) => { + return { + id: spreeTaxon.id, + name: spreeTaxon.attributes.name, + slug: spreeTaxon.id, + path: spreeTaxon.id, + } + }) + + const normalizedBrands: GetSiteInfoOperation['data']['brands'] = + spreeBrandsSuccessResponse.data + .sort(taxonsSort) + .map((spreeTaxon: TaxonAttr) => { + return { + node: { + entityId: spreeTaxon.id, + path: `brands/${spreeTaxon.id}`, + name: spreeTaxon.attributes.name, + }, + } + }) + + return { + categories: normalizedCategories, + brands: normalizedBrands, + } + } + + return getSiteInfo +} diff --git a/framework/spree/api/operations/index.ts b/framework/spree/api/operations/index.ts new file mode 100644 index 000000000..086fdf83a --- /dev/null +++ b/framework/spree/api/operations/index.ts @@ -0,0 +1,6 @@ +export { default as getPage } from './get-page' +export { default as getSiteInfo } from './get-site-info' +export { default as getAllPages } from './get-all-pages' +export { default as getProduct } from './get-product' +export { default as getAllProducts } from './get-all-products' +export { default as getAllProductPaths } from './get-all-product-paths' diff --git a/framework/spree/api/utils/create-api-fetch.ts b/framework/spree/api/utils/create-api-fetch.ts new file mode 100644 index 000000000..0c7d51b0b --- /dev/null +++ b/framework/spree/api/utils/create-api-fetch.ts @@ -0,0 +1,79 @@ +import { SpreeApiConfig } from '..' +import { errors, makeClient } from '@spree/storefront-api-v2-sdk' +import { requireConfigValue } from '../../isomorphic-config' +import convertSpreeErrorToGraphQlError from '../../utils/convert-spree-error-to-graph-ql-error' +import type { ResultResponse } from '@spree/storefront-api-v2-sdk/types/interfaces/ResultResponse' +import getSpreeSdkMethodFromEndpointPath from '../../utils/get-spree-sdk-method-from-endpoint-path' +import SpreeSdkMethodFromEndpointPathError from '../../errors/SpreeSdkMethodFromEndpointPathError' +import { GraphQLFetcher, GraphQLFetcherResult } from '@commerce/api' +import createCustomizedFetchFetcher, { + fetchResponseKey, +} from '../../utils/create-customized-fetch-fetcher' +import fetch, { Request } from 'node-fetch' +import type { SpreeSdkResponseWithRawResponse } from '../../types' + +export type CreateApiFetch = ( + getConfig: () => SpreeApiConfig +) => GraphQLFetcher<GraphQLFetcherResult<any>, any> + +// TODO: GraphQLFetcher<GraphQLFetcherResult<any>, any> should be GraphQLFetcher<GraphQLFetcherResult<any>, SpreeSdkVariables>. +// But CommerceAPIConfig['fetch'] cannot be extended from Variables = any to SpreeSdkVariables. + +const createApiFetch: CreateApiFetch = (_getConfig) => { + const client = makeClient({ + host: requireConfigValue('apiHost') as string, + createFetcher: (fetcherOptions) => { + return createCustomizedFetchFetcher({ + fetch, + requestConstructor: Request, + ...fetcherOptions, + }) + }, + }) + + return async (url, queryData = {}, fetchOptions = {}) => { + console.log( + 'apiFetch called. query = ', + 'url = ', + url, + 'queryData = ', + queryData, + 'fetchOptions = ', + fetchOptions + ) + + const { variables } = queryData + + if (!variables) { + throw new SpreeSdkMethodFromEndpointPathError( + `Required SpreeSdkVariables not provided.` + ) + } + + const storeResponse: ResultResponse<SpreeSdkResponseWithRawResponse> = + await getSpreeSdkMethodFromEndpointPath( + client, + variables.methodPath + )(...variables.arguments) + + if (storeResponse.isSuccess()) { + const data = storeResponse.success() + const rawFetchResponse = data[fetchResponseKey] + + return { + data, + res: rawFetchResponse, + } + } + + const storeResponseError = storeResponse.fail() + + if (storeResponseError instanceof errors.SpreeError) { + throw convertSpreeErrorToGraphQlError(storeResponseError) + } + + throw storeResponseError + } +} + +export default createApiFetch diff --git a/framework/spree/api/utils/fetch.ts b/framework/spree/api/utils/fetch.ts new file mode 100644 index 000000000..26f9ab674 --- /dev/null +++ b/framework/spree/api/utils/fetch.ts @@ -0,0 +1,3 @@ +import vercelFetch from '@vercel/fetch' + +export default vercelFetch() diff --git a/framework/spree/auth/index.ts b/framework/spree/auth/index.ts new file mode 100644 index 000000000..36e757a89 --- /dev/null +++ b/framework/spree/auth/index.ts @@ -0,0 +1,3 @@ +export { default as useLogin } from './use-login' +export { default as useLogout } from './use-logout' +export { default as useSignup } from './use-signup' diff --git a/framework/spree/auth/use-login.tsx b/framework/spree/auth/use-login.tsx new file mode 100644 index 000000000..308ac6597 --- /dev/null +++ b/framework/spree/auth/use-login.tsx @@ -0,0 +1,85 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import useLogin, { UseLogin } from '@commerce/auth/use-login' +import type { LoginHook } from '@commerce/types/login' +import type { AuthTokenAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/Authentication' +import { FetcherError, ValidationError } from '@commerce/utils/errors' +import useCustomer from '../customer/use-customer' +import useCart from '../cart/use-cart' +import useWishlist from '../wishlist/use-wishlist' +import login from '../utils/login' + +export default useLogin as UseLogin<typeof handler> + +export const handler: MutationHook<LoginHook> = { + // Provide fetchOptions for SWR cache key + fetchOptions: { + url: 'authentication', + query: 'getToken', + }, + async fetcher({ input, options, fetch }) { + console.info( + 'useLogin fetcher called. Configuration: ', + 'input: ', + input, + 'options: ', + options + ) + + const { email, password } = input + + if (!email || !password) { + throw new ValidationError({ + message: 'Email and password need to be provided.', + }) + } + + const getTokenParameters: AuthTokenAttr = { + username: email, + password, + } + + try { + await login(fetch, getTokenParameters, false) + + return null + } catch (getTokenError) { + if ( + getTokenError instanceof FetcherError && + getTokenError.status === 400 + ) { + // Change the error message to be more user friendly. + throw new FetcherError({ + status: getTokenError.status, + message: 'The email or password is invalid.', + code: getTokenError.code, + }) + } + + throw getTokenError + } + }, + useHook: ({ fetch }) => { + const useWrappedHook: ReturnType<MutationHook<LoginHook>['useHook']> = + () => { + const customer = useCustomer() + const cart = useCart() + const wishlist = useWishlist() + + return useCallback( + async function login(input) { + const data = await fetch({ input }) + + await customer.revalidate() + await cart.revalidate() + await wishlist.revalidate() + + return data + }, + [customer, cart, wishlist] + ) + } + + return useWrappedHook + }, +} diff --git a/framework/spree/auth/use-logout.tsx b/framework/spree/auth/use-logout.tsx new file mode 100644 index 000000000..0d8eb4bc9 --- /dev/null +++ b/framework/spree/auth/use-logout.tsx @@ -0,0 +1,80 @@ +import { MutationHook } from '@commerce/utils/types' +import useLogout, { UseLogout } from '@commerce/auth/use-logout' +import type { LogoutHook } from '@commerce/types/logout' +import { useCallback } from 'react' +import useCustomer from '../customer/use-customer' +import useCart from '../cart/use-cart' +import useWishlist from '../wishlist/use-wishlist' +import { + ensureUserTokenResponse, + removeUserTokenResponse, +} from '../utils/tokens/user-token-response' +import revokeUserTokens from '../utils/tokens/revoke-user-tokens' +import TokensNotRejectedError from '../errors/TokensNotRejectedError' + +export default useLogout as UseLogout<typeof handler> + +export const handler: MutationHook<LogoutHook> = { + // Provide fetchOptions for SWR cache key + fetchOptions: { + url: 'authentication', + query: 'revokeToken', + }, + async fetcher({ input, options, fetch }) { + console.info( + 'useLogout fetcher called. Configuration: ', + 'input: ', + input, + 'options: ', + options + ) + + const userToken = ensureUserTokenResponse() + + if (userToken) { + try { + // Revoke any tokens associated with the logged in user. + await revokeUserTokens(fetch, { + accessToken: userToken.access_token, + refreshToken: userToken.refresh_token, + }) + } catch (revokeUserTokenError) { + // Squash token revocation errors and rethrow anything else. + if (!(revokeUserTokenError instanceof TokensNotRejectedError)) { + throw revokeUserTokenError + } + } + + // Whether token revocation succeeded or not, remove them from local storage. + removeUserTokenResponse() + } + + return null + }, + useHook: ({ fetch }) => { + const useWrappedHook: ReturnType<MutationHook<LogoutHook>['useHook']> = + () => { + const customer = useCustomer({ + swrOptions: { isPaused: () => true }, + }) + const cart = useCart({ + swrOptions: { isPaused: () => true }, + }) + const wishlist = useWishlist({ + swrOptions: { isPaused: () => true }, + }) + + return useCallback(async () => { + const data = await fetch() + + await customer.mutate(null, false) + await cart.mutate(null, false) + await wishlist.mutate(null, false) + + return data + }, [customer, cart, wishlist]) + } + + return useWrappedHook + }, +} diff --git a/framework/spree/auth/use-signup.tsx b/framework/spree/auth/use-signup.tsx new file mode 100644 index 000000000..708668b9c --- /dev/null +++ b/framework/spree/auth/use-signup.tsx @@ -0,0 +1,95 @@ +import { useCallback } from 'react' +import type { GraphQLFetcherResult } from '@commerce/api' +import type { MutationHook } from '@commerce/utils/types' +import useSignup, { UseSignup } from '@commerce/auth/use-signup' +import type { SignupHook } from '@commerce/types/signup' +import { ValidationError } from '@commerce/utils/errors' +import type { IAccount } from '@spree/storefront-api-v2-sdk/types/interfaces/Account' +import type { AuthTokenAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/Authentication' +import useCustomer from '../customer/use-customer' +import useCart from '../cart/use-cart' +import useWishlist from '../wishlist/use-wishlist' +import login from '../utils/login' +import { requireConfigValue } from '../isomorphic-config' + +export default useSignup as UseSignup<typeof handler> + +export const handler: MutationHook<SignupHook> = { + // Provide fetchOptions for SWR cache key + fetchOptions: { + url: 'account', + query: 'create', + }, + async fetcher({ input, options, fetch }) { + console.info( + 'useSignup fetcher called. Configuration: ', + 'input: ', + input, + 'options: ', + options + ) + + const { email, password } = input + + if (!email || !password) { + throw new ValidationError({ + message: 'Email and password need to be provided.', + }) + } + + // TODO: Replace any with specific type from Spree SDK + // once it's added to the SDK. + const createAccountParameters: any = { + user: { + email, + password, + // The stock NJC interface doesn't have a + // password confirmation field, so just copy password. + passwordConfirmation: password, + }, + } + + // Create the user account. + await fetch<GraphQLFetcherResult<IAccount>>({ + variables: { + methodPath: 'account.create', + arguments: [createAccountParameters], + }, + }) + + const getTokenParameters: AuthTokenAttr = { + username: email, + password, + } + + // Login immediately after the account is created. + if (requireConfigValue('loginAfterSignup')) { + await login(fetch, getTokenParameters, true) + } + + return null + }, + useHook: ({ fetch }) => { + const useWrappedHook: ReturnType<MutationHook<SignupHook>['useHook']> = + () => { + const customer = useCustomer() + const cart = useCart() + const wishlist = useWishlist() + + return useCallback( + async (input) => { + const data = await fetch({ input }) + + await customer.revalidate() + await cart.revalidate() + await wishlist.revalidate() + + return data + }, + [customer, cart, wishlist] + ) + } + + return useWrappedHook + }, +} diff --git a/framework/spree/cart/index.ts b/framework/spree/cart/index.ts new file mode 100644 index 000000000..3b8ba990e --- /dev/null +++ b/framework/spree/cart/index.ts @@ -0,0 +1,4 @@ +export { default as useCart } from './use-cart' +export { default as useAddItem } from './use-add-item' +export { default as useRemoveItem } from './use-remove-item' +export { default as useUpdateItem } from './use-update-item' diff --git a/framework/spree/cart/use-add-item.tsx b/framework/spree/cart/use-add-item.tsx new file mode 100644 index 000000000..74bdd633f --- /dev/null +++ b/framework/spree/cart/use-add-item.tsx @@ -0,0 +1,117 @@ +import useAddItem from '@commerce/cart/use-add-item' +import type { UseAddItem } from '@commerce/cart/use-add-item' +import type { MutationHook } from '@commerce/utils/types' +import { useCallback } from 'react' +import useCart from './use-cart' +import type { AddItemHook } from '@commerce/types/cart' +import normalizeCart from '../utils/normalizations/normalize-cart' +import type { GraphQLFetcherResult } from '@commerce/api' +import type { IOrder } from '@spree/storefront-api-v2-sdk/types/interfaces/Order' +import type { IToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token' +import type { AddItem } from '@spree/storefront-api-v2-sdk/types/interfaces/endpoints/CartClass' +import { setCartToken } from '../utils/tokens/cart-token' +import ensureIToken from '../utils/tokens/ensure-itoken' +import createEmptyCart from '../utils/create-empty-cart' +import { FetcherError } from '@commerce/utils/errors' +import isLoggedIn from '../utils/tokens/is-logged-in' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<AddItemHook> = { + // Provide fetchOptions for SWR cache key + fetchOptions: { + url: 'cart', + query: 'addItem', + }, + async fetcher({ input, options, fetch }) { + console.info( + 'useAddItem fetcher called. Configuration: ', + 'input: ', + input, + 'options: ', + options + ) + + const { quantity, productId, variantId } = input + + const safeQuantity = quantity ?? 1 + + let token: IToken | undefined = ensureIToken() + + const addItemParameters: AddItem = { + variant_id: variantId, + quantity: safeQuantity, + include: [ + 'line_items', + 'line_items.variant', + 'line_items.variant.product', + 'line_items.variant.product.images', + 'line_items.variant.images', + 'line_items.variant.option_values', + 'line_items.variant.product.option_types', + ].join(','), + } + + if (!token) { + const { data: spreeCartCreateSuccessResponse } = await createEmptyCart( + fetch + ) + + setCartToken(spreeCartCreateSuccessResponse.data.attributes.token) + token = ensureIToken() + } + + try { + const { data: spreeSuccessResponse } = await fetch< + GraphQLFetcherResult<IOrder> + >({ + variables: { + methodPath: 'cart.addItem', + arguments: [token, addItemParameters], + }, + }) + + return normalizeCart(spreeSuccessResponse, spreeSuccessResponse.data) + } catch (addItemError) { + if (addItemError instanceof FetcherError && addItemError.status === 404) { + const { data: spreeRetroactiveCartCreateSuccessResponse } = + await createEmptyCart(fetch) + + if (!isLoggedIn()) { + setCartToken( + spreeRetroactiveCartCreateSuccessResponse.data.attributes.token + ) + } + + // Return an empty cart. The user has to add the item again. + // This is going to be a rare situation. + + return normalizeCart( + spreeRetroactiveCartCreateSuccessResponse, + spreeRetroactiveCartCreateSuccessResponse.data + ) + } + + throw addItemError + } + }, + useHook: ({ fetch }) => { + const useWrappedHook: ReturnType<MutationHook<AddItemHook>['useHook']> = + () => { + const { mutate } = useCart() + + return useCallback( + async (input) => { + const data = await fetch({ input }) + + await mutate(data, false) + + return data + }, + [mutate] + ) + } + + return useWrappedHook + }, +} diff --git a/framework/spree/cart/use-cart.tsx b/framework/spree/cart/use-cart.tsx new file mode 100644 index 000000000..e700c27fa --- /dev/null +++ b/framework/spree/cart/use-cart.tsx @@ -0,0 +1,123 @@ +import { useMemo } from 'react' +import type { SWRHook } from '@commerce/utils/types' +import useCart from '@commerce/cart/use-cart' +import type { UseCart } from '@commerce/cart/use-cart' +import type { GetCartHook } from '@commerce/types/cart' +import normalizeCart from '../utils/normalizations/normalize-cart' +import type { GraphQLFetcherResult } from '@commerce/api' +import type { IOrder } from '@spree/storefront-api-v2-sdk/types/interfaces/Order' +import type { IToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token' +import { FetcherError } from '@commerce/utils/errors' +import { setCartToken } from '../utils/tokens/cart-token' +import ensureIToken from '../utils/tokens/ensure-itoken' +import isLoggedIn from '../utils/tokens/is-logged-in' +import createEmptyCart from '../utils/create-empty-cart' +import { requireConfigValue } from '../isomorphic-config' + +const imagesSize = requireConfigValue('imagesSize') as string +const imagesQuality = requireConfigValue('imagesQuality') as number + +export default useCart as UseCart<typeof handler> + +// This handler avoids calling /api/cart. +// There doesn't seem to be a good reason to call it. +// So far, only @framework/bigcommerce uses it. +export const handler: SWRHook<GetCartHook> = { + // Provide fetchOptions for SWR cache key + fetchOptions: { + url: 'cart', + query: 'show', + }, + async fetcher({ input, options, fetch }) { + console.info( + 'useCart fetcher called. Configuration: ', + 'input: ', + input, + 'options: ', + options + ) + + let spreeCartResponse: IOrder | null + + const token: IToken | undefined = ensureIToken() + + if (!token) { + spreeCartResponse = null + } else { + try { + const { data: spreeCartShowSuccessResponse } = await fetch< + GraphQLFetcherResult<IOrder> + >({ + variables: { + methodPath: 'cart.show', + arguments: [ + token, + { + include: [ + 'line_items', + 'line_items.variant', + 'line_items.variant.product', + 'line_items.variant.product.images', + 'line_items.variant.images', + 'line_items.variant.option_values', + 'line_items.variant.product.option_types', + ].join(','), + image_transformation: { + quality: imagesQuality, + size: imagesSize, + }, + }, + ], + }, + }) + + spreeCartResponse = spreeCartShowSuccessResponse + } catch (fetchCartError) { + if ( + !(fetchCartError instanceof FetcherError) || + fetchCartError.status !== 404 + ) { + throw fetchCartError + } + + spreeCartResponse = null + } + } + + if (!spreeCartResponse || spreeCartResponse?.data.attributes.completed_at) { + const { data: spreeCartCreateSuccessResponse } = await createEmptyCart( + fetch + ) + + spreeCartResponse = spreeCartCreateSuccessResponse + + if (!isLoggedIn()) { + setCartToken(spreeCartResponse.data.attributes.token) + } + } + + return normalizeCart(spreeCartResponse, spreeCartResponse.data) + }, + useHook: ({ useData }) => { + const useWrappedHook: ReturnType<SWRHook<GetCartHook>['useHook']> = ( + input + ) => { + const response = useData({ + swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, + }) + + return useMemo<typeof response & { isEmpty: boolean }>(() => { + return Object.create(response, { + isEmpty: { + get() { + return (response.data?.lineItems.length ?? 0) === 0 + }, + enumerable: true, + }, + }) + }, [response]) + } + + return useWrappedHook + }, +} diff --git a/framework/spree/cart/use-remove-item.tsx b/framework/spree/cart/use-remove-item.tsx new file mode 100644 index 000000000..42e7536a9 --- /dev/null +++ b/framework/spree/cart/use-remove-item.tsx @@ -0,0 +1,118 @@ +import type { MutationHook } from '@commerce/utils/types' +import useRemoveItem from '@commerce/cart/use-remove-item' +import type { UseRemoveItem } from '@commerce/cart/use-remove-item' +import type { RemoveItemHook } from '@commerce/types/cart' +import useCart from './use-cart' +import { useCallback } from 'react' +import normalizeCart from '../utils/normalizations/normalize-cart' +import type { IOrder } from '@spree/storefront-api-v2-sdk/types/interfaces/Order' +import type { GraphQLFetcherResult } from '@commerce/api' +import type { IQuery } from '@spree/storefront-api-v2-sdk/types/interfaces/Query' +import type { IToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token' +import ensureIToken from '../utils/tokens/ensure-itoken' +import createEmptyCart from '../utils/create-empty-cart' +import { setCartToken } from '../utils/tokens/cart-token' +import { FetcherError } from '@commerce/utils/errors' +import isLoggedIn from '../utils/tokens/is-logged-in' + +export default useRemoveItem as UseRemoveItem<typeof handler> + +export const handler: MutationHook<RemoveItemHook> = { + // Provide fetchOptions for SWR cache key + fetchOptions: { + url: 'cart', + query: 'removeItem', + }, + async fetcher({ input, options, fetch }) { + console.info( + 'useRemoveItem fetcher called. Configuration: ', + 'input: ', + input, + 'options: ', + options + ) + + const { itemId: lineItemId } = input + + let token: IToken | undefined = ensureIToken() + + if (!token) { + const { data: spreeCartCreateSuccessResponse } = await createEmptyCart( + fetch + ) + + setCartToken(spreeCartCreateSuccessResponse.data.attributes.token) + token = ensureIToken() + } + + const removeItemParameters: IQuery = { + include: [ + 'line_items', + 'line_items.variant', + 'line_items.variant.product', + 'line_items.variant.product.images', + 'line_items.variant.images', + 'line_items.variant.option_values', + 'line_items.variant.product.option_types', + ].join(','), + } + + try { + const { data: spreeSuccessResponse } = await fetch< + GraphQLFetcherResult<IOrder> + >({ + variables: { + methodPath: 'cart.removeItem', + arguments: [token, lineItemId, removeItemParameters], + }, + }) + + return normalizeCart(spreeSuccessResponse, spreeSuccessResponse.data) + } catch (removeItemError) { + if ( + removeItemError instanceof FetcherError && + removeItemError.status === 404 + ) { + const { data: spreeRetroactiveCartCreateSuccessResponse } = + await createEmptyCart(fetch) + + if (!isLoggedIn()) { + setCartToken( + spreeRetroactiveCartCreateSuccessResponse.data.attributes.token + ) + } + + // Return an empty cart. This is going to be a rare situation. + + return normalizeCart( + spreeRetroactiveCartCreateSuccessResponse, + spreeRetroactiveCartCreateSuccessResponse.data + ) + } + + throw removeItemError + } + }, + useHook: ({ fetch }) => { + const useWrappedHook: ReturnType<MutationHook<RemoveItemHook>['useHook']> = + () => { + const { mutate } = useCart() + + return useCallback( + async (input) => { + const data = await fetch({ input: { itemId: input.id } }) + + // Upon calling cart.removeItem, Spree returns the old version of the cart, + // with the already removed line item. Invalidate the useCart mutation + // to fetch the cart again. + await mutate(data, true) + + return data + }, + [mutate] + ) + } + + return useWrappedHook + }, +} diff --git a/framework/spree/cart/use-update-item.tsx b/framework/spree/cart/use-update-item.tsx new file mode 100644 index 000000000..86b8599fa --- /dev/null +++ b/framework/spree/cart/use-update-item.tsx @@ -0,0 +1,145 @@ +import type { MutationHook } from '@commerce/utils/types' +import useUpdateItem, { UseUpdateItem } from '@commerce/cart/use-update-item' +import type { UpdateItemHook } from '@commerce/types/cart' +import useCart from './use-cart' +import { useMemo } from 'react' +import { FetcherError, ValidationError } from '@commerce/utils/errors' +import type { IToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token' +import type { SetQuantity } from '@spree/storefront-api-v2-sdk/types/interfaces/endpoints/CartClass' +import type { GraphQLFetcherResult } from '@commerce/api' +import type { IOrder } from '@spree/storefront-api-v2-sdk/types/interfaces/Order' +import normalizeCart from '../utils/normalizations/normalize-cart' +import debounce from 'lodash.debounce' +import ensureIToken from '../utils/tokens/ensure-itoken' +import createEmptyCart from '../utils/create-empty-cart' +import { setCartToken } from '../utils/tokens/cart-token' +import isLoggedIn from '../utils/tokens/is-logged-in' + +export default useUpdateItem as UseUpdateItem<any> + +export const handler: MutationHook<UpdateItemHook> = { + // Provide fetchOptions for SWR cache key + fetchOptions: { + url: 'cart', + query: 'setQuantity', + }, + async fetcher({ input, options, fetch }) { + console.info( + 'useRemoveItem fetcher called. Configuration: ', + 'input: ', + input, + 'options: ', + options + ) + + const { itemId, item } = input + + if (!item.quantity) { + throw new ValidationError({ + message: 'Line item quantity needs to be provided.', + }) + } + + let token: IToken | undefined = ensureIToken() + + if (!token) { + const { data: spreeCartCreateSuccessResponse } = await createEmptyCart( + fetch + ) + + setCartToken(spreeCartCreateSuccessResponse.data.attributes.token) + token = ensureIToken() + } + + try { + const setQuantityParameters: SetQuantity = { + line_item_id: itemId, + quantity: item.quantity, + include: [ + 'line_items', + 'line_items.variant', + 'line_items.variant.product', + 'line_items.variant.product.images', + 'line_items.variant.images', + 'line_items.variant.option_values', + 'line_items.variant.product.option_types', + ].join(','), + } + + const { data: spreeSuccessResponse } = await fetch< + GraphQLFetcherResult<IOrder> + >({ + variables: { + methodPath: 'cart.setQuantity', + arguments: [token, setQuantityParameters], + }, + }) + + return normalizeCart(spreeSuccessResponse, spreeSuccessResponse.data) + } catch (updateItemError) { + if ( + updateItemError instanceof FetcherError && + updateItemError.status === 404 + ) { + const { data: spreeRetroactiveCartCreateSuccessResponse } = + await createEmptyCart(fetch) + + if (!isLoggedIn()) { + setCartToken( + spreeRetroactiveCartCreateSuccessResponse.data.attributes.token + ) + } + + // Return an empty cart. The user has to update the item again. + // This is going to be a rare situation. + + return normalizeCart( + spreeRetroactiveCartCreateSuccessResponse, + spreeRetroactiveCartCreateSuccessResponse.data + ) + } + + throw updateItemError + } + }, + useHook: ({ fetch }) => { + const useWrappedHook: ReturnType<MutationHook<UpdateItemHook>['useHook']> = + (context) => { + const { mutate } = useCart() + + return useMemo( + () => + debounce(async (input: UpdateItemHook['actionInput']) => { + const itemId = context?.item?.id + const productId = input.productId ?? context?.item?.productId + const variantId = input.variantId ?? context?.item?.variantId + const quantity = input.quantity + + if (!itemId || !productId || !variantId) { + throw new ValidationError({ + message: 'Invalid input used for this operation', + }) + } + + const data = await fetch({ + input: { + item: { + productId, + variantId, + quantity, + }, + itemId, + }, + }) + + await mutate(data, false) + + return data + }, context?.wait ?? 500), + [mutate, context] + ) + } + + return useWrappedHook + }, +} diff --git a/framework/spree/checkout/use-checkout.tsx b/framework/spree/checkout/use-checkout.tsx new file mode 100644 index 000000000..dfd7fe02f --- /dev/null +++ b/framework/spree/checkout/use-checkout.tsx @@ -0,0 +1,17 @@ +import { SWRHook } from '@commerce/utils/types' +import useCheckout, { UseCheckout } from '@commerce/checkout/use-checkout' + +export default useCheckout as UseCheckout<typeof handler> + +export const handler: SWRHook<any> = { + // Provide fetchOptions for SWR cache key + fetchOptions: { + // TODO: Revise url and query + url: 'checkout', + query: 'show', + }, + async fetcher({ input, options, fetch }) {}, + useHook: + ({ useData }) => + async (input) => ({}), +} diff --git a/framework/spree/commerce.config.json b/framework/spree/commerce.config.json new file mode 100644 index 000000000..6f8399fb5 --- /dev/null +++ b/framework/spree/commerce.config.json @@ -0,0 +1,10 @@ +{ + "provider": "spree", + "features": { + "wishlist": true, + "cart": true, + "search": true, + "customerAuth": true, + "customCheckout": false + } +} diff --git a/framework/spree/customer/address/use-add-item.tsx b/framework/spree/customer/address/use-add-item.tsx new file mode 100644 index 000000000..c2f645a16 --- /dev/null +++ b/framework/spree/customer/address/use-add-item.tsx @@ -0,0 +1,18 @@ +import useAddItem from '@commerce/customer/address/use-add-item' +import type { UseAddItem } from '@commerce/customer/address/use-add-item' +import type { MutationHook } from '@commerce/utils/types' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<any> = { + // Provide fetchOptions for SWR cache key + fetchOptions: { + url: 'account', + query: 'createAddress', + }, + async fetcher({ input, options, fetch }) {}, + useHook: + ({ fetch }) => + () => + async () => ({}), +} diff --git a/framework/spree/customer/card/use-add-item.tsx b/framework/spree/customer/card/use-add-item.tsx new file mode 100644 index 000000000..a8bb3cd88 --- /dev/null +++ b/framework/spree/customer/card/use-add-item.tsx @@ -0,0 +1,19 @@ +import useAddItem from '@commerce/customer/address/use-add-item' +import type { UseAddItem } from '@commerce/customer/address/use-add-item' +import type { MutationHook } from '@commerce/utils/types' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<any> = { + // Provide fetchOptions for SWR cache key + fetchOptions: { + // TODO: Revise url and query + url: 'checkout', + query: 'addPayment', + }, + async fetcher({ input, options, fetch }) {}, + useHook: + ({ fetch }) => + () => + async () => ({}), +} diff --git a/framework/spree/customer/index.ts b/framework/spree/customer/index.ts new file mode 100644 index 000000000..6c903ecc5 --- /dev/null +++ b/framework/spree/customer/index.ts @@ -0,0 +1 @@ +export { default as useCustomer } from './use-customer' diff --git a/framework/spree/customer/use-customer.tsx b/framework/spree/customer/use-customer.tsx new file mode 100644 index 000000000..647645ac2 --- /dev/null +++ b/framework/spree/customer/use-customer.tsx @@ -0,0 +1,83 @@ +import type { SWRHook } from '@commerce/utils/types' +import useCustomer from '@commerce/customer/use-customer' +import type { UseCustomer } from '@commerce/customer/use-customer' +import type { CustomerHook } from '@commerce/types/customer' +import type { IToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token' +import type { GraphQLFetcherResult } from '@commerce/api' +import type { IAccount } from '@spree/storefront-api-v2-sdk/types/interfaces/Account' +import { FetcherError } from '@commerce/utils/errors' +import normalizeUser from '../utils/normalizations/normalize-user' +import isLoggedIn from '../utils/tokens/is-logged-in' +import ensureIToken from '../utils/tokens/ensure-itoken' + +export default useCustomer as UseCustomer<typeof handler> + +export const handler: SWRHook<CustomerHook> = { + // Provide fetchOptions for SWR cache key + fetchOptions: { + url: 'account', + query: 'get', + }, + async fetcher({ input, options, fetch }) { + console.info( + 'useCustomer fetcher called. Configuration: ', + 'input: ', + input, + 'options: ', + options + ) + + if (!isLoggedIn()) { + return null + } + + const token: IToken | undefined = ensureIToken() + + if (!token) { + return null + } + + try { + const { data: spreeAccountInfoSuccessResponse } = await fetch< + GraphQLFetcherResult<IAccount> + >({ + variables: { + methodPath: 'account.accountInfo', + arguments: [token], + }, + }) + + const spreeUser = spreeAccountInfoSuccessResponse.data + + const normalizedUser = normalizeUser( + spreeAccountInfoSuccessResponse, + spreeUser + ) + + return normalizedUser + } catch (fetchUserError) { + if ( + !(fetchUserError instanceof FetcherError) || + fetchUserError.status !== 404 + ) { + throw fetchUserError + } + + return null + } + }, + useHook: ({ useData }) => { + const useWrappedHook: ReturnType<SWRHook<CustomerHook>['useHook']> = ( + input + ) => { + return useData({ + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) + } + + return useWrappedHook + }, +} diff --git a/framework/spree/errors/AccessTokenError.ts b/framework/spree/errors/AccessTokenError.ts new file mode 100644 index 000000000..4c79c0be8 --- /dev/null +++ b/framework/spree/errors/AccessTokenError.ts @@ -0,0 +1 @@ +export default class AccessTokenError extends Error {} diff --git a/framework/spree/errors/MisconfigurationError.ts b/framework/spree/errors/MisconfigurationError.ts new file mode 100644 index 000000000..0717ae404 --- /dev/null +++ b/framework/spree/errors/MisconfigurationError.ts @@ -0,0 +1 @@ +export default class MisconfigurationError extends Error {} diff --git a/framework/spree/errors/MissingConfigurationValueError.ts b/framework/spree/errors/MissingConfigurationValueError.ts new file mode 100644 index 000000000..02b497bf1 --- /dev/null +++ b/framework/spree/errors/MissingConfigurationValueError.ts @@ -0,0 +1 @@ +export default class MissingConfigurationValueError extends Error {} diff --git a/framework/spree/errors/MissingLineItemVariantError.ts b/framework/spree/errors/MissingLineItemVariantError.ts new file mode 100644 index 000000000..d9bee0803 --- /dev/null +++ b/framework/spree/errors/MissingLineItemVariantError.ts @@ -0,0 +1 @@ +export default class MissingLineItemVariantError extends Error {} diff --git a/framework/spree/errors/MissingOptionValueError.ts b/framework/spree/errors/MissingOptionValueError.ts new file mode 100644 index 000000000..04457ac5e --- /dev/null +++ b/framework/spree/errors/MissingOptionValueError.ts @@ -0,0 +1 @@ +export default class MissingOptionValueError extends Error {} diff --git a/framework/spree/errors/MissingPrimaryVariantError.ts b/framework/spree/errors/MissingPrimaryVariantError.ts new file mode 100644 index 000000000..f9af41b03 --- /dev/null +++ b/framework/spree/errors/MissingPrimaryVariantError.ts @@ -0,0 +1 @@ +export default class MissingPrimaryVariantError extends Error {} diff --git a/framework/spree/errors/MissingProductError.ts b/framework/spree/errors/MissingProductError.ts new file mode 100644 index 000000000..3098be689 --- /dev/null +++ b/framework/spree/errors/MissingProductError.ts @@ -0,0 +1 @@ +export default class MissingProductError extends Error {} diff --git a/framework/spree/errors/MissingSlugVariableError.ts b/framework/spree/errors/MissingSlugVariableError.ts new file mode 100644 index 000000000..09b9d2e20 --- /dev/null +++ b/framework/spree/errors/MissingSlugVariableError.ts @@ -0,0 +1 @@ +export default class MissingSlugVariableError extends Error {} diff --git a/framework/spree/errors/MissingVariantError.ts b/framework/spree/errors/MissingVariantError.ts new file mode 100644 index 000000000..5ed9e0ed2 --- /dev/null +++ b/framework/spree/errors/MissingVariantError.ts @@ -0,0 +1 @@ +export default class MissingVariantError extends Error {} diff --git a/framework/spree/errors/RefreshTokenError.ts b/framework/spree/errors/RefreshTokenError.ts new file mode 100644 index 000000000..a79365bbb --- /dev/null +++ b/framework/spree/errors/RefreshTokenError.ts @@ -0,0 +1 @@ +export default class RefreshTokenError extends Error {} diff --git a/framework/spree/errors/SpreeResponseContentError.ts b/framework/spree/errors/SpreeResponseContentError.ts new file mode 100644 index 000000000..19c10cf2e --- /dev/null +++ b/framework/spree/errors/SpreeResponseContentError.ts @@ -0,0 +1 @@ +export default class SpreeResponseContentError extends Error {} diff --git a/framework/spree/errors/SpreeSdkMethodFromEndpointPathError.ts b/framework/spree/errors/SpreeSdkMethodFromEndpointPathError.ts new file mode 100644 index 000000000..bf15aada0 --- /dev/null +++ b/framework/spree/errors/SpreeSdkMethodFromEndpointPathError.ts @@ -0,0 +1 @@ +export default class SpreeSdkMethodFromEndpointPathError extends Error {} diff --git a/framework/spree/errors/TokensNotRejectedError.ts b/framework/spree/errors/TokensNotRejectedError.ts new file mode 100644 index 000000000..245f66414 --- /dev/null +++ b/framework/spree/errors/TokensNotRejectedError.ts @@ -0,0 +1 @@ +export default class TokensNotRejectedError extends Error {} diff --git a/framework/spree/errors/UserTokenResponseParseError.ts b/framework/spree/errors/UserTokenResponseParseError.ts new file mode 100644 index 000000000..9631971c1 --- /dev/null +++ b/framework/spree/errors/UserTokenResponseParseError.ts @@ -0,0 +1 @@ +export default class UserTokenResponseParseError extends Error {} diff --git a/framework/spree/fetcher.ts b/framework/spree/fetcher.ts new file mode 100644 index 000000000..c9505e4c9 --- /dev/null +++ b/framework/spree/fetcher.ts @@ -0,0 +1,116 @@ +import type { Fetcher } from '@commerce/utils/types' +import convertSpreeErrorToGraphQlError from './utils/convert-spree-error-to-graph-ql-error' +import { makeClient, errors } from '@spree/storefront-api-v2-sdk' +import type { ResultResponse } from '@spree/storefront-api-v2-sdk/types/interfaces/ResultResponse' +import type { GraphQLFetcherResult } from '@commerce/api' +import { requireConfigValue } from './isomorphic-config' +import getSpreeSdkMethodFromEndpointPath from './utils/get-spree-sdk-method-from-endpoint-path' +import SpreeSdkMethodFromEndpointPathError from './errors/SpreeSdkMethodFromEndpointPathError' +import type { + FetcherVariables, + SpreeSdkResponse, + SpreeSdkResponseWithRawResponse, +} from './types' +import createCustomizedFetchFetcher, { + fetchResponseKey, +} from './utils/create-customized-fetch-fetcher' +import ensureFreshUserAccessToken from './utils/tokens/ensure-fresh-user-access-token' +import RefreshTokenError from './errors/RefreshTokenError' + +const client = makeClient({ + host: requireConfigValue('apiHost') as string, + createFetcher: (fetcherOptions) => { + return createCustomizedFetchFetcher({ + fetch: globalThis.fetch, + requestConstructor: globalThis.Request, + ...fetcherOptions, + }) + }, +}) + +const normalizeSpreeSuccessResponse = ( + storeResponse: ResultResponse<SpreeSdkResponseWithRawResponse> +): GraphQLFetcherResult<SpreeSdkResponse> => { + const data = storeResponse.success() + const rawFetchResponse = data[fetchResponseKey] + + return { + data, + res: rawFetchResponse, + } +} + +const fetcher: Fetcher<GraphQLFetcherResult<SpreeSdkResponse>> = async ( + requestOptions +) => { + const { url, method, variables, query } = requestOptions + + console.log( + 'Fetcher called. Configuration: ', + 'url = ', + url, + 'requestOptions = ', + requestOptions + ) + + if (!variables) { + throw new SpreeSdkMethodFromEndpointPathError( + `Required FetcherVariables not provided.` + ) + } + + const { + methodPath, + arguments: args, + refreshExpiredAccessToken = true, + replayUnauthorizedRequest = true, + } = variables as FetcherVariables + + if (refreshExpiredAccessToken) { + await ensureFreshUserAccessToken(client) + } + + const spreeSdkMethod = getSpreeSdkMethodFromEndpointPath(client, methodPath) + + const storeResponse: ResultResponse<SpreeSdkResponseWithRawResponse> = + await spreeSdkMethod(...args) + + if (storeResponse.isSuccess()) { + return normalizeSpreeSuccessResponse(storeResponse) + } + + const storeResponseError = storeResponse.fail() + + if ( + storeResponseError instanceof errors.SpreeError && + storeResponseError.serverResponse.status === 401 && + replayUnauthorizedRequest + ) { + console.info( + 'Request ended with 401. Replaying request after refreshing the user token.' + ) + + await ensureFreshUserAccessToken(client) + + const replayedStoreResponse: ResultResponse<SpreeSdkResponseWithRawResponse> = + await spreeSdkMethod(...args) + + if (replayedStoreResponse.isSuccess()) { + return normalizeSpreeSuccessResponse(replayedStoreResponse) + } + + console.warn('Replaying the request failed', replayedStoreResponse.fail()) + + throw new RefreshTokenError( + 'Could not authorize request with current access token.' + ) + } + + if (storeResponseError instanceof errors.SpreeError) { + throw convertSpreeErrorToGraphQlError(storeResponseError) + } + + throw storeResponseError +} + +export default fetcher diff --git a/framework/spree/index.tsx b/framework/spree/index.tsx new file mode 100644 index 000000000..f7eff69e9 --- /dev/null +++ b/framework/spree/index.tsx @@ -0,0 +1,49 @@ +import type { ComponentType, FunctionComponent } from 'react' +import { + Provider, + CommerceProviderProps, + CoreCommerceProvider, + useCommerce as useCoreCommerce, +} from '@commerce' +import { spreeProvider } from './provider' +import type { SpreeProvider } from './provider' +import { SWRConfig } from 'swr' +import handleTokenErrors from './utils/handle-token-errors' +import useLogout from '@commerce/auth/use-logout' + +export { spreeProvider } +export type { SpreeProvider } + +export const WithTokenErrorsHandling: FunctionComponent = ({ children }) => { + const logout = useLogout() + + return ( + <SWRConfig + value={{ + onError: (error, _key) => { + handleTokenErrors(error, () => void logout()) + }, + }} + > + {children} + </SWRConfig> + ) +} + +export const getCommerceProvider = <P extends Provider>(provider: P) => { + return function CommerceProvider({ + children, + ...props + }: CommerceProviderProps) { + return ( + <CoreCommerceProvider provider={{ ...provider, ...props }}> + <WithTokenErrorsHandling>{children}</WithTokenErrorsHandling> + </CoreCommerceProvider> + ) + } +} + +export const CommerceProvider = + getCommerceProvider<SpreeProvider>(spreeProvider) + +export const useCommerce = () => useCoreCommerce<SpreeProvider>() diff --git a/framework/spree/isomorphic-config.ts b/framework/spree/isomorphic-config.ts new file mode 100644 index 000000000..b824fd80a --- /dev/null +++ b/framework/spree/isomorphic-config.ts @@ -0,0 +1,81 @@ +import forceIsomorphicConfigValues from './utils/force-isomorphic-config-values' +import requireConfig from './utils/require-config' +import validateAllProductsTaxonomyId from './utils/validations/validate-all-products-taxonomy-id' +import validateCookieExpire from './utils/validations/validate-cookie-expire' +import validateImagesOptionFilter from './utils/validations/validate-images-option-filter' +import validatePlaceholderImageUrl from './utils/validations/validate-placeholder-image-url' +import validateProductsPrerenderCount from './utils/validations/validate-products-prerender-count' +import validateImagesSize from './utils/validations/validate-images-size' +import validateImagesQuality from './utils/validations/validate-images-quality' + +const isomorphicConfig = { + apiHost: process.env.NEXT_PUBLIC_SPREE_API_HOST, + defaultLocale: process.env.NEXT_PUBLIC_SPREE_DEFAULT_LOCALE, + cartCookieName: process.env.NEXT_PUBLIC_SPREE_CART_COOKIE_NAME, + cartCookieExpire: validateCookieExpire( + process.env.NEXT_PUBLIC_SPREE_CART_COOKIE_EXPIRE + ), + userCookieName: process.env.NEXT_PUBLIC_SPREE_USER_COOKIE_NAME, + userCookieExpire: validateCookieExpire( + process.env.NEXT_PUBLIC_SPREE_CART_COOKIE_EXPIRE + ), + imageHost: process.env.NEXT_PUBLIC_SPREE_IMAGE_HOST, + categoriesTaxonomyPermalink: + process.env.NEXT_PUBLIC_SPREE_CATEGORIES_TAXONOMY_PERMALINK, + brandsTaxonomyPermalink: + process.env.NEXT_PUBLIC_SPREE_BRANDS_TAXONOMY_PERMALINK, + allProductsTaxonomyId: validateAllProductsTaxonomyId( + process.env.NEXT_PUBLIC_SPREE_ALL_PRODUCTS_TAXONOMY_ID + ), + showSingleVariantOptions: + process.env.NEXT_PUBLIC_SPREE_SHOW_SINGLE_VARIANT_OPTIONS === 'true', + lastUpdatedProductsPrerenderCount: validateProductsPrerenderCount( + process.env.NEXT_PUBLIC_SPREE_LAST_UPDATED_PRODUCTS_PRERENDER_COUNT + ), + productPlaceholderImageUrl: validatePlaceholderImageUrl( + process.env.NEXT_PUBLIC_SPREE_PRODUCT_PLACEHOLDER_IMAGE_URL + ), + lineItemPlaceholderImageUrl: validatePlaceholderImageUrl( + process.env.NEXT_PUBLIC_SPREE_LINE_ITEM_PLACEHOLDER_IMAGE_URL + ), + imagesOptionFilter: validateImagesOptionFilter( + process.env.NEXT_PUBLIC_SPREE_IMAGES_OPTION_FILTER + ), + imagesSize: validateImagesSize(process.env.NEXT_PUBLIC_SPREE_IMAGES_SIZE), + imagesQuality: validateImagesQuality( + process.env.NEXT_PUBLIC_SPREE_IMAGES_QUALITY + ), + loginAfterSignup: process.env.NEXT_PUBLIC_SPREE_LOGIN_AFTER_SIGNUP === 'true', +} + +export default forceIsomorphicConfigValues( + isomorphicConfig, + [], + [ + 'apiHost', + 'defaultLocale', + 'cartCookieName', + 'cartCookieExpire', + 'userCookieName', + 'userCookieExpire', + 'imageHost', + 'categoriesTaxonomyPermalink', + 'brandsTaxonomyPermalink', + 'allProductsTaxonomyId', + 'showSingleVariantOptions', + 'lastUpdatedProductsPrerenderCount', + 'productPlaceholderImageUrl', + 'lineItemPlaceholderImageUrl', + 'imagesOptionFilter', + 'imagesSize', + 'imagesQuality', + 'loginAfterSignup', + ] +) + +type IsomorphicConfig = typeof isomorphicConfig + +const requireConfigValue = (key: keyof IsomorphicConfig) => + requireConfig<IsomorphicConfig>(isomorphicConfig, key) + +export { requireConfigValue } diff --git a/framework/spree/next.config.js b/framework/spree/next.config.js new file mode 100644 index 000000000..0aaa87e0a --- /dev/null +++ b/framework/spree/next.config.js @@ -0,0 +1,16 @@ +const commerce = require('./commerce.config.json') + +module.exports = { + commerce, + images: { + domains: [process.env.NEXT_PUBLIC_SPREE_ALLOWED_IMAGE_DOMAIN], + }, + rewrites() { + return [ + { + source: '/checkout', + destination: '/api/checkout', + }, + ] + }, +} diff --git a/framework/spree/product/index.ts b/framework/spree/product/index.ts new file mode 100644 index 000000000..426a3edcd --- /dev/null +++ b/framework/spree/product/index.ts @@ -0,0 +1,2 @@ +export { default as usePrice } from './use-price' +export { default as useSearch } from './use-search' diff --git a/framework/spree/product/use-price.tsx b/framework/spree/product/use-price.tsx new file mode 100644 index 000000000..0174faf5e --- /dev/null +++ b/framework/spree/product/use-price.tsx @@ -0,0 +1,2 @@ +export * from '@commerce/product/use-price' +export { default } from '@commerce/product/use-price' diff --git a/framework/spree/product/use-search.tsx b/framework/spree/product/use-search.tsx new file mode 100644 index 000000000..5912a72ca --- /dev/null +++ b/framework/spree/product/use-search.tsx @@ -0,0 +1,101 @@ +import type { SWRHook } from '@commerce/utils/types' +import useSearch from '@commerce/product/use-search' +import type { Product, SearchProductsHook } from '@commerce/types/product' +import type { UseSearch } from '@commerce/product/use-search' +import normalizeProduct from '../utils/normalizations/normalize-product' +import type { GraphQLFetcherResult } from '@commerce/api' +import { IProducts } from '@spree/storefront-api-v2-sdk/types/interfaces/Product' +import { requireConfigValue } from '../isomorphic-config' + +const imagesSize = requireConfigValue('imagesSize') as string +const imagesQuality = requireConfigValue('imagesQuality') as number + +const nextToSpreeSortMap: { [key: string]: string } = { + 'trending-desc': 'available_on', + 'latest-desc': 'updated_at', + 'price-asc': 'price', + 'price-desc': '-price', +} + +export const handler: SWRHook<SearchProductsHook> = { + // Provide fetchOptions for SWR cache key + fetchOptions: { + url: 'products', + query: 'list', + }, + async fetcher({ input, options, fetch }) { + // This method is only needed if the options need to be modified before calling the generic fetcher (created in createFetcher). + + console.info( + 'useSearch fetcher called. Configuration: ', + 'input: ', + input, + 'options: ', + options + ) + + const taxons = [input.categoryId, input.brandId].filter(Boolean) + + const filter = { + filter: { + ...(taxons.length > 0 ? { taxons: taxons.join(',') } : {}), + ...(input.search ? { name: input.search } : {}), + }, + } + + const sort = input.sort ? { sort: nextToSpreeSortMap[input.sort] } : {} + + const { data: spreeSuccessResponse } = await fetch< + GraphQLFetcherResult<IProducts> + >({ + variables: { + methodPath: 'products.list', + arguments: [ + {}, + { + include: + 'primary_variant,variants,images,option_types,variants.option_values', + per_page: 50, + ...filter, + ...sort, + image_transformation: { + quality: imagesQuality, + size: imagesSize, + }, + }, + ], + }, + }) + + const normalizedProducts: Product[] = spreeSuccessResponse.data.map( + (spreeProduct) => normalizeProduct(spreeSuccessResponse, spreeProduct) + ) + + const found = spreeSuccessResponse.data.length > 0 + + return { products: normalizedProducts, found } + }, + useHook: ({ useData }) => { + const useWrappedHook: ReturnType<SWRHook<SearchProductsHook>['useHook']> = ( + input = {} + ) => { + return useData({ + input: [ + ['search', input.search], + ['categoryId', input.categoryId], + ['brandId', input.brandId], + ['sort', input.sort], + ], + swrOptions: { + revalidateOnFocus: false, + // revalidateOnFocus: false means do not fetch products again when website is refocused in the web browser. + ...input.swrOptions, + }, + }) + } + + return useWrappedHook + }, +} + +export default useSearch as UseSearch<typeof handler> diff --git a/framework/spree/provider.ts b/framework/spree/provider.ts new file mode 100644 index 000000000..de6ddb207 --- /dev/null +++ b/framework/spree/provider.ts @@ -0,0 +1,35 @@ +import fetcher from './fetcher' +import { handler as useCart } from './cart/use-cart' +import { handler as useAddItem } from './cart/use-add-item' +import { handler as useUpdateItem } from './cart/use-update-item' +import { handler as useRemoveItem } from './cart/use-remove-item' +import { handler as useCustomer } from './customer/use-customer' +import { handler as useSearch } from './product/use-search' +import { handler as useLogin } from './auth/use-login' +import { handler as useLogout } from './auth/use-logout' +import { handler as useSignup } from './auth/use-signup' +import { handler as useCheckout } from './checkout/use-checkout' +import { handler as useWishlist } from './wishlist/use-wishlist' +import { handler as useWishlistAddItem } from './wishlist/use-add-item' +import { handler as useWishlistRemoveItem } from './wishlist/use-remove-item' +import { requireConfigValue } from './isomorphic-config' + +const spreeProvider = { + locale: requireConfigValue('defaultLocale') as string, + cartCookie: requireConfigValue('cartCookieName') as string, + fetcher, + cart: { useCart, useAddItem, useUpdateItem, useRemoveItem }, + customer: { useCustomer }, + products: { useSearch }, + auth: { useLogin, useLogout, useSignup }, + checkout: { useCheckout }, + wishlist: { + useWishlist, + useAddItem: useWishlistAddItem, + useRemoveItem: useWishlistRemoveItem, + }, +} + +export { spreeProvider } + +export type SpreeProvider = typeof spreeProvider diff --git a/framework/spree/types/index.ts b/framework/spree/types/index.ts new file mode 100644 index 000000000..79b75c249 --- /dev/null +++ b/framework/spree/types/index.ts @@ -0,0 +1,164 @@ +import type { fetchResponseKey } from '../utils/create-customized-fetch-fetcher' +import type { + JsonApiDocument, + JsonApiListResponse, + JsonApiSingleResponse, +} from '@spree/storefront-api-v2-sdk/types/interfaces/JsonApi' +import type { ResultResponse } from '@spree/storefront-api-v2-sdk/types/interfaces/ResultResponse' +import type { Response } from '@vercel/fetch' +import type { ProductOption, Product } from '@commerce/types/product' +import type { + AddItemHook, + RemoveItemHook, + WishlistItemBody, + WishlistTypes, +} from '@commerce/types/wishlist' + +export type UnknownObjectValues = Record<string, unknown> + +export type NonUndefined<T> = T extends undefined ? never : T + +export type ValueOf<T> = T[keyof T] + +export type SpreeSdkResponse = JsonApiSingleResponse | JsonApiListResponse + +export type SpreeSdkResponseWithRawResponse = SpreeSdkResponse & { + [fetchResponseKey]: Response +} + +export type SpreeSdkResultResponseSuccessType = SpreeSdkResponseWithRawResponse + +export type SpreeSdkMethodReturnType< + ResultResponseSuccessType extends SpreeSdkResultResponseSuccessType = SpreeSdkResultResponseSuccessType +> = Promise<ResultResponse<ResultResponseSuccessType>> + +export type SpreeSdkMethod< + ResultResponseSuccessType extends SpreeSdkResultResponseSuccessType = SpreeSdkResultResponseSuccessType +> = (...args: any[]) => SpreeSdkMethodReturnType<ResultResponseSuccessType> + +export type SpreeSdkVariables = { + methodPath: string + arguments: any[] +} + +export type FetcherVariables = SpreeSdkVariables & { + refreshExpiredAccessToken: boolean + replayUnauthorizedRequest: boolean +} + +export interface ImageStyle { + url: string + width: string + height: string + size: string +} + +export interface SpreeProductImage extends JsonApiDocument { + attributes: { + position: number + alt: string + original_url: string + transformed_url: string | null + styles: ImageStyle[] + } +} + +export interface OptionTypeAttr extends JsonApiDocument { + attributes: { + name: string + presentation: string + position: number + created_at: string + updated_at: string + filterable: boolean + } +} + +export interface LineItemAttr extends JsonApiDocument { + attributes: { + name: string + quantity: number + slug: string + options_text: string + price: string + currency: string + display_price: string + total: string + display_total: string + adjustment_total: string + display_adjustment_total: string + additional_tax_total: string + display_additional_tax_total: string + discounted_amount: string + display_discounted_amount: string + pre_tax_amount: string + display_pre_tax_amount: string + promo_total: string + display_promo_total: string + included_tax_total: string + display_inluded_tax_total: string + } +} + +export interface VariantAttr extends JsonApiDocument { + attributes: { + sku: string + price: string + currency: string + display_price: string + weight: string + height: string + width: string + depth: string + is_master: boolean + options_text: string + purchasable: boolean + in_stock: boolean + backorderable: boolean + } +} + +export interface ProductSlugAttr extends JsonApiDocument { + attributes: { + slug: string + } +} +export interface IProductsSlugs extends JsonApiListResponse { + data: ProductSlugAttr[] +} + +export type ExpandedProductOption = ProductOption & { position: number } + +export type UserOAuthTokens = { + refreshToken: string + accessToken: string +} + +// TODO: ExplicitCommerceWishlist is a temporary type +// derived from tsx views. It will be removed once +// Wishlist in @commerce/types/wishlist is updated +// to a more specific type than `any`. +export type ExplicitCommerceWishlist = { + id: string + token: string + items: { + id: string + product_id: number + variant_id: number + product: Product + }[] +} + +export type ExplicitWishlistAddItemHook = AddItemHook< + WishlistTypes & { + wishlist: ExplicitCommerceWishlist + itemBody: WishlistItemBody & { + wishlistToken?: string + } + } +> + +export type ExplicitWishlistRemoveItemHook = RemoveItemHook & { + fetcherInput: { wishlistToken?: string } + body: { wishlistToken?: string } +} diff --git a/framework/spree/utils/convert-spree-error-to-graph-ql-error.ts b/framework/spree/utils/convert-spree-error-to-graph-ql-error.ts new file mode 100644 index 000000000..def4920ba --- /dev/null +++ b/framework/spree/utils/convert-spree-error-to-graph-ql-error.ts @@ -0,0 +1,52 @@ +import { FetcherError } from '@commerce/utils/errors' +import { errors } from '@spree/storefront-api-v2-sdk' + +const convertSpreeErrorToGraphQlError = ( + error: errors.SpreeError +): FetcherError => { + if (error instanceof errors.ExpandedSpreeError) { + // Assuming error.errors[key] is a list of strings. + + if ('base' in error.errors) { + const baseErrorMessage = error.errors.base as unknown as string + + return new FetcherError({ + status: error.serverResponse.status, + message: baseErrorMessage, + }) + } + + const fetcherErrors = Object.keys(error.errors).map((sdkErrorKey) => { + const errors = error.errors[sdkErrorKey] as string[] + + // Naively assume sdkErrorKey is a label. Capitalize it for a better + // out-of-the-box experience. + const capitalizedSdkErrorKey = sdkErrorKey.replace(/^\w/, (firstChar) => + firstChar.toUpperCase() + ) + + return { + message: `${capitalizedSdkErrorKey} ${errors.join(', ')}`, + } + }) + + return new FetcherError({ + status: error.serverResponse.status, + errors: fetcherErrors, + }) + } + + if (error instanceof errors.BasicSpreeError) { + return new FetcherError({ + status: error.serverResponse.status, + message: error.summary, + }) + } + + return new FetcherError({ + status: error.serverResponse.status, + message: error.message, + }) +} + +export default convertSpreeErrorToGraphQlError diff --git a/framework/spree/utils/create-customized-fetch-fetcher.ts b/framework/spree/utils/create-customized-fetch-fetcher.ts new file mode 100644 index 000000000..1c10b19e9 --- /dev/null +++ b/framework/spree/utils/create-customized-fetch-fetcher.ts @@ -0,0 +1,105 @@ +import { + errors, + request as spreeSdkRequestHelpers, +} from '@spree/storefront-api-v2-sdk' +import type { CreateCustomizedFetchFetcher } from '@spree/storefront-api-v2-sdk/types/interfaces/CreateCustomizedFetchFetcher' +import isJsonContentType from './is-json-content-type' + +export const fetchResponseKey = Symbol('fetch-response-key') + +const createCustomizedFetchFetcher: CreateCustomizedFetchFetcher = ( + fetcherOptions +) => { + const { FetchError } = errors + const sharedHeaders = { + 'Content-Type': 'application/json', + } + + const { host, fetch, requestConstructor } = fetcherOptions + + return { + fetch: async (fetchOptions) => { + // This fetcher always returns request equal null, + // because @vercel/fetch doesn't accept a Request object as argument + // and it's not used by NJC anyway. + try { + const { url, params, method, headers, responseParsing } = fetchOptions + const absoluteUrl = new URL(url, host) + let payload + + switch (method.toUpperCase()) { + case 'PUT': + case 'POST': + case 'DELETE': + case 'PATCH': + payload = { body: JSON.stringify(params) } + break + default: + payload = null + absoluteUrl.search = + spreeSdkRequestHelpers.objectToQuerystring(params) + } + + const request: Request = new requestConstructor( + absoluteUrl.toString(), + { + method: method.toUpperCase(), + headers: { ...sharedHeaders, ...headers }, + ...payload, + } + ) + + try { + const response: Response = await fetch(request) + const responseContentType = response.headers.get('content-type') + let data + + if (responseParsing === 'automatic') { + if (responseContentType && isJsonContentType(responseContentType)) { + data = await response.json() + } else { + data = await response.text() + } + } else if (responseParsing === 'text') { + data = await response.text() + } else if (responseParsing === 'json') { + data = await response.json() + } else if (responseParsing === 'stream') { + data = await response.body + } + + if (!response.ok) { + // Use the "traditional" approach and reject non 2xx responses. + throw new FetchError(response, request, data) + } + + data[fetchResponseKey] = response + + return { data } + } catch (error) { + if (error instanceof FetchError) { + throw error + } + + if (!(error instanceof Error)) { + throw error + } + + throw new FetchError(null, request, null, error.message) + } + } catch (error) { + if (error instanceof FetchError) { + throw error + } + + if (!(error instanceof Error)) { + throw error + } + + throw new FetchError(null, null, null, error.message) + } + }, + } +} + +export default createCustomizedFetchFetcher diff --git a/framework/spree/utils/create-empty-cart.ts b/framework/spree/utils/create-empty-cart.ts new file mode 100644 index 000000000..0bf0aa522 --- /dev/null +++ b/framework/spree/utils/create-empty-cart.ts @@ -0,0 +1,22 @@ +import type { GraphQLFetcherResult } from '@commerce/api' +import type { HookFetcherContext } from '@commerce/utils/types' +import type { IOrder } from '@spree/storefront-api-v2-sdk/types/interfaces/Order' +import type { IToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token' +import ensureIToken from './tokens/ensure-itoken' + +const createEmptyCart = ( + fetch: HookFetcherContext<{ + data: any + }>['fetch'] +): Promise<GraphQLFetcherResult<IOrder>> => { + const token: IToken | undefined = ensureIToken() + + return fetch<GraphQLFetcherResult<IOrder>>({ + variables: { + methodPath: 'cart.create', + arguments: [token], + }, + }) +} + +export default createEmptyCart diff --git a/framework/spree/utils/create-get-absolute-image-url.ts b/framework/spree/utils/create-get-absolute-image-url.ts new file mode 100644 index 000000000..6e9e3260a --- /dev/null +++ b/framework/spree/utils/create-get-absolute-image-url.ts @@ -0,0 +1,26 @@ +import { SpreeProductImage } from '../types' +import getImageUrl from './get-image-url' + +const createGetAbsoluteImageUrl = + (host: string, useOriginalImageSize: boolean = true) => + ( + image: SpreeProductImage, + minWidth: number, + minHeight: number + ): string | null => { + let url + + if (useOriginalImageSize) { + url = image.attributes.transformed_url || null + } else { + url = getImageUrl(image, minWidth, minHeight) + } + + if (url === null) { + return null + } + + return `${host}${url}` + } + +export default createGetAbsoluteImageUrl diff --git a/framework/spree/utils/expand-options.ts b/framework/spree/utils/expand-options.ts new file mode 100644 index 000000000..29b9d6760 --- /dev/null +++ b/framework/spree/utils/expand-options.ts @@ -0,0 +1,103 @@ +import type { ProductOptionValues } from '@commerce/types/product' +import type { + JsonApiDocument, + JsonApiResponse, +} from '@spree/storefront-api-v2-sdk/types/interfaces/JsonApi' +import { jsonApi } from '@spree/storefront-api-v2-sdk' +import type { RelationType } from '@spree/storefront-api-v2-sdk/types/interfaces/Relationships' +import SpreeResponseContentError from '../errors/SpreeResponseContentError' +import type { OptionTypeAttr, ExpandedProductOption } from '../types' +import sortOptionsByPosition from '../utils/sort-option-types' + +const isColorProductOption = (productOption: ExpandedProductOption) => { + return productOption.displayName === 'Color' +} + +const expandOptions = ( + spreeSuccessResponse: JsonApiResponse, + spreeOptionValue: JsonApiDocument, + accumulatedOptions: ExpandedProductOption[] +): ExpandedProductOption[] => { + const spreeOptionTypeIdentifier = spreeOptionValue.relationships.option_type + .data as RelationType + + const existingOptionIndex = accumulatedOptions.findIndex( + (option) => option.id == spreeOptionTypeIdentifier.id + ) + + let option: ExpandedProductOption + + if (existingOptionIndex === -1) { + const spreeOptionType = jsonApi.findDocument<OptionTypeAttr>( + spreeSuccessResponse, + spreeOptionTypeIdentifier + ) + + if (!spreeOptionType) { + throw new SpreeResponseContentError( + `Option type with id ${spreeOptionTypeIdentifier.id} not found.` + ) + } + + option = { + __typename: 'MultipleChoiceOption', + id: spreeOptionType.id, + displayName: spreeOptionType.attributes.presentation, + position: spreeOptionType.attributes.position, + values: [], + } + } else { + const existingOption = accumulatedOptions[existingOptionIndex] + + option = existingOption + } + + let optionValue: ProductOptionValues + + const label = isColorProductOption(option) + ? spreeOptionValue.attributes.name + : spreeOptionValue.attributes.presentation + + const productOptionValueExists = option.values.some( + (optionValue: ProductOptionValues) => optionValue.label === label + ) + + if (!productOptionValueExists) { + if (isColorProductOption(option)) { + optionValue = { + label, + hexColors: [spreeOptionValue.attributes.presentation], + } + } else { + optionValue = { + label, + } + } + + if (existingOptionIndex === -1) { + return [ + ...accumulatedOptions, + { + ...option, + values: [optionValue], + }, + ] + } + + const expandedOptionValues = [...option.values, optionValue] + const expandedOptions = [...accumulatedOptions] + + expandedOptions[existingOptionIndex] = { + ...option, + values: expandedOptionValues, + } + + const sortedOptions = sortOptionsByPosition(expandedOptions) + + return sortedOptions + } + + return accumulatedOptions +} + +export default expandOptions diff --git a/framework/spree/utils/force-isomorphic-config-values.ts b/framework/spree/utils/force-isomorphic-config-values.ts new file mode 100644 index 000000000..630b6859e --- /dev/null +++ b/framework/spree/utils/force-isomorphic-config-values.ts @@ -0,0 +1,43 @@ +import type { NonUndefined, UnknownObjectValues } from '../types' +import MisconfigurationError from '../errors/MisconfigurationError' +import isServer from './is-server' + +const generateMisconfigurationErrorMessage = ( + keys: Array<string | number | symbol> +) => `${keys.join(', ')} must have a value before running the Framework.` + +const forceIsomorphicConfigValues = < + X extends keyof T, + T extends UnknownObjectValues, + H extends Record<X, NonUndefined<T[X]>> +>( + config: T, + requiredServerKeys: string[], + requiredPublicKeys: X[] +) => { + if (isServer) { + const missingServerConfigValues = requiredServerKeys.filter( + (requiredServerKey) => typeof config[requiredServerKey] === 'undefined' + ) + + if (missingServerConfigValues.length > 0) { + throw new MisconfigurationError( + generateMisconfigurationErrorMessage(missingServerConfigValues) + ) + } + } + + const missingPublicConfigValues = requiredPublicKeys.filter( + (requiredPublicKey) => typeof config[requiredPublicKey] === 'undefined' + ) + + if (missingPublicConfigValues.length > 0) { + throw new MisconfigurationError( + generateMisconfigurationErrorMessage(missingPublicConfigValues) + ) + } + + return config as T & H +} + +export default forceIsomorphicConfigValues diff --git a/framework/spree/utils/get-image-url.ts b/framework/spree/utils/get-image-url.ts new file mode 100644 index 000000000..8594f5c34 --- /dev/null +++ b/framework/spree/utils/get-image-url.ts @@ -0,0 +1,44 @@ +// Based on https://github.com/spark-solutions/spree2vuestorefront/blob/d88d85ae1bcd2ec99b13b81cd2e3c25600a0216e/src/utils/index.ts + +import type { ImageStyle, SpreeProductImage } from '../types' + +const getImageUrl = ( + image: SpreeProductImage, + minWidth: number, + _: number +): string | null => { + // every image is still resized in vue-storefront-api, no matter what getImageUrl returns + if (image) { + const { + attributes: { styles }, + } = image + const bestStyleIndex = styles.reduce( + (bSIndex: number | null, style: ImageStyle, styleIndex: number) => { + // assuming all images are the same dimensions, just scaled + if (bSIndex === null) { + return 0 + } + const bestStyle = styles[bSIndex] + const widthDiff = +bestStyle.width - minWidth + const minWidthDiff = +style.width - minWidth + if (widthDiff < 0 && minWidthDiff > 0) { + return styleIndex + } + if (widthDiff > 0 && minWidthDiff < 0) { + return bSIndex + } + return Math.abs(widthDiff) < Math.abs(minWidthDiff) + ? bSIndex + : styleIndex + }, + null + ) + + if (bestStyleIndex !== null) { + return styles[bestStyleIndex].url + } + } + return null +} + +export default getImageUrl diff --git a/framework/spree/utils/get-media-gallery.ts b/framework/spree/utils/get-media-gallery.ts new file mode 100644 index 000000000..da939c82b --- /dev/null +++ b/framework/spree/utils/get-media-gallery.ts @@ -0,0 +1,25 @@ +// Based on https://github.com/spark-solutions/spree2vuestorefront/blob/d88d85ae1bcd2ec99b13b81cd2e3c25600a0216e/src/utils/index.ts + +import type { ProductImage } from '@commerce/types/product' +import type { SpreeProductImage } from '../types' + +const getMediaGallery = ( + images: SpreeProductImage[], + getImageUrl: ( + image: SpreeProductImage, + minWidth: number, + minHeight: number + ) => string | null +) => { + return images.reduce<ProductImage[]>((productImages, _, imageIndex) => { + const url = getImageUrl(images[imageIndex], 800, 800) + + if (url) { + return [...productImages, { url }] + } + + return productImages + }, []) +} + +export default getMediaGallery diff --git a/framework/spree/utils/get-product-path.ts b/framework/spree/utils/get-product-path.ts new file mode 100644 index 000000000..6749a4a3e --- /dev/null +++ b/framework/spree/utils/get-product-path.ts @@ -0,0 +1,7 @@ +import type { ProductSlugAttr } from '../types' + +const getProductPath = (partialSpreeProduct: ProductSlugAttr) => { + return `/${partialSpreeProduct.attributes.slug}` +} + +export default getProductPath diff --git a/framework/spree/utils/get-spree-sdk-method-from-endpoint-path.ts b/framework/spree/utils/get-spree-sdk-method-from-endpoint-path.ts new file mode 100644 index 000000000..9b87daadc --- /dev/null +++ b/framework/spree/utils/get-spree-sdk-method-from-endpoint-path.ts @@ -0,0 +1,61 @@ +import type { Client } from '@spree/storefront-api-v2-sdk' +import SpreeSdkMethodFromEndpointPathError from '../errors/SpreeSdkMethodFromEndpointPathError' +import type { + SpreeSdkMethod, + SpreeSdkResultResponseSuccessType, +} from '../types' + +const getSpreeSdkMethodFromEndpointPath = < + ExactSpreeSdkClientType extends Client, + ResultResponseSuccessType extends SpreeSdkResultResponseSuccessType = SpreeSdkResultResponseSuccessType +>( + client: ExactSpreeSdkClientType, + path: string +): SpreeSdkMethod<ResultResponseSuccessType> => { + const pathParts = path.split('.') + const reachedPath: string[] = [] + let node = <Record<string, unknown>>client + + console.log(`Looking for ${path} in Spree Sdk.`) + + while (reachedPath.length < pathParts.length - 1) { + const checkedPathPart = pathParts[reachedPath.length] + const checkedNode = node[checkedPathPart] + + console.log(`Checking part ${checkedPathPart}.`) + + if (typeof checkedNode !== 'object') { + throw new SpreeSdkMethodFromEndpointPathError( + `Couldn't reach ${path}. Farthest path reached was: ${reachedPath.join( + '.' + )}.` + ) + } + + if (checkedNode === null) { + throw new SpreeSdkMethodFromEndpointPathError( + `Path ${path} doesn't exist.` + ) + } + + node = <Record<string, unknown>>checkedNode + reachedPath.push(checkedPathPart) + } + + const foundEndpointMethod = node[pathParts[reachedPath.length]] + + if ( + reachedPath.length !== pathParts.length - 1 || + typeof foundEndpointMethod !== 'function' + ) { + throw new SpreeSdkMethodFromEndpointPathError( + `Couldn't reach ${path}. Farthest path reached was: ${reachedPath.join( + '.' + )}.` + ) + } + + return foundEndpointMethod.bind(node) +} + +export default getSpreeSdkMethodFromEndpointPath diff --git a/framework/spree/utils/handle-token-errors.ts b/framework/spree/utils/handle-token-errors.ts new file mode 100644 index 000000000..a5d49fde6 --- /dev/null +++ b/framework/spree/utils/handle-token-errors.ts @@ -0,0 +1,14 @@ +import AccessTokenError from '../errors/AccessTokenError' +import RefreshTokenError from '../errors/RefreshTokenError' + +const handleTokenErrors = (error: unknown, action: () => void): boolean => { + if (error instanceof AccessTokenError || error instanceof RefreshTokenError) { + action() + + return true + } + + return false +} + +export default handleTokenErrors diff --git a/framework/spree/utils/is-json-content-type.ts b/framework/spree/utils/is-json-content-type.ts new file mode 100644 index 000000000..fd82d65fd --- /dev/null +++ b/framework/spree/utils/is-json-content-type.ts @@ -0,0 +1,5 @@ +const isJsonContentType = (contentType: string): boolean => + contentType.includes('application/json') || + contentType.includes('application/vnd.api+json') + +export default isJsonContentType diff --git a/framework/spree/utils/is-server.ts b/framework/spree/utils/is-server.ts new file mode 100644 index 000000000..4544a4884 --- /dev/null +++ b/framework/spree/utils/is-server.ts @@ -0,0 +1 @@ +export default typeof window === 'undefined' diff --git a/framework/spree/utils/login.ts b/framework/spree/utils/login.ts new file mode 100644 index 000000000..3894b7952 --- /dev/null +++ b/framework/spree/utils/login.ts @@ -0,0 +1,58 @@ +import type { GraphQLFetcherResult } from '@commerce/api' +import type { HookFetcherContext } from '@commerce/utils/types' +import type { AuthTokenAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/Authentication' +import type { AssociateCart } from '@spree/storefront-api-v2-sdk/types/interfaces/endpoints/CartClass' +import type { IOrder } from '@spree/storefront-api-v2-sdk/types/interfaces/Order' +import type { + IOAuthToken, + IToken, +} from '@spree/storefront-api-v2-sdk/types/interfaces/Token' +import { getCartToken, removeCartToken } from './tokens/cart-token' +import { setUserTokenResponse } from './tokens/user-token-response' + +const login = async ( + fetch: HookFetcherContext<{ + data: any + }>['fetch'], + getTokenParameters: AuthTokenAttr, + associateGuestCart: boolean +): Promise<void> => { + const { data: spreeGetTokenSuccessResponse } = await fetch< + GraphQLFetcherResult<IOAuthToken> + >({ + variables: { + methodPath: 'authentication.getToken', + arguments: [getTokenParameters], + }, + }) + + setUserTokenResponse(spreeGetTokenSuccessResponse) + + if (associateGuestCart) { + const cartToken = getCartToken() + + if (cartToken) { + // If the user had a cart as guest still use its contents + // after logging in. + const accessToken = spreeGetTokenSuccessResponse.access_token + const token: IToken = { bearerToken: accessToken } + + const associateGuestCartParameters: AssociateCart = { + guest_order_token: cartToken, + } + + await fetch<GraphQLFetcherResult<IOrder>>({ + variables: { + methodPath: 'cart.associateGuestCart', + arguments: [token, associateGuestCartParameters], + }, + }) + + // We no longer need the guest cart token, so let's remove it. + } + } + + removeCartToken() +} + +export default login diff --git a/framework/spree/utils/normalizations/normalize-cart.ts b/framework/spree/utils/normalizations/normalize-cart.ts new file mode 100644 index 000000000..a1751eaec --- /dev/null +++ b/framework/spree/utils/normalizations/normalize-cart.ts @@ -0,0 +1,211 @@ +import type { + Cart, + LineItem, + ProductVariant, + SelectedOption, +} from '@commerce/types/cart' +import MissingLineItemVariantError from '../../errors/MissingLineItemVariantError' +import { requireConfigValue } from '../../isomorphic-config' +import type { OrderAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/Order' +import type { ProductAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/Product' +import type { Image } from '@commerce/types/common' +import { jsonApi } from '@spree/storefront-api-v2-sdk' +import createGetAbsoluteImageUrl from '../create-get-absolute-image-url' +import getMediaGallery from '../get-media-gallery' +import type { + LineItemAttr, + OptionTypeAttr, + SpreeProductImage, + SpreeSdkResponse, + VariantAttr, +} from '../../types' + +const placeholderImage = requireConfigValue('lineItemPlaceholderImageUrl') as + | string + | false + +const isColorProductOption = (productOptionType: OptionTypeAttr) => { + return productOptionType.attributes.presentation === 'Color' +} + +const normalizeVariant = ( + spreeSuccessResponse: SpreeSdkResponse, + spreeVariant: VariantAttr +): ProductVariant => { + const spreeProduct = jsonApi.findSingleRelationshipDocument<ProductAttr>( + spreeSuccessResponse, + spreeVariant, + 'product' + ) + + if (spreeProduct === null) { + throw new MissingLineItemVariantError( + `Couldn't find product for variant with id ${spreeVariant.id}.` + ) + } + + const spreeVariantImageRecords = + jsonApi.findRelationshipDocuments<SpreeProductImage>( + spreeSuccessResponse, + spreeVariant, + 'images' + ) + + let lineItemImage + + const variantImage = getMediaGallery( + spreeVariantImageRecords, + createGetAbsoluteImageUrl(requireConfigValue('imageHost') as string) + )[0] + + if (variantImage) { + lineItemImage = variantImage + } else { + const spreeProductImageRecords = + jsonApi.findRelationshipDocuments<SpreeProductImage>( + spreeSuccessResponse, + spreeProduct, + 'images' + ) + + const productImage = getMediaGallery( + spreeProductImageRecords, + createGetAbsoluteImageUrl(requireConfigValue('imageHost') as string) + )[0] + + lineItemImage = productImage + } + + const image: Image = + lineItemImage ?? + (placeholderImage === false ? undefined : { url: placeholderImage }) + + return { + id: spreeVariant.id, + sku: spreeVariant.attributes.sku, + name: spreeProduct.attributes.name, + requiresShipping: true, + price: parseFloat(spreeVariant.attributes.price), + listPrice: parseFloat(spreeVariant.attributes.price), + image, + isInStock: spreeVariant.attributes.in_stock, + availableForSale: spreeVariant.attributes.purchasable, + ...(spreeVariant.attributes.weight === '0.0' + ? {} + : { + weight: { + value: parseFloat(spreeVariant.attributes.weight), + unit: 'KILOGRAMS', + }, + }), + // TODO: Add height, width and depth when Measurement type allows distance measurements. + } +} + +const normalizeLineItem = ( + spreeSuccessResponse: SpreeSdkResponse, + spreeLineItem: LineItemAttr +): LineItem => { + const variant = jsonApi.findSingleRelationshipDocument<VariantAttr>( + spreeSuccessResponse, + spreeLineItem, + 'variant' + ) + + if (variant === null) { + throw new MissingLineItemVariantError( + `Couldn't find variant for line item with id ${spreeLineItem.id}.` + ) + } + + const product = jsonApi.findSingleRelationshipDocument<ProductAttr>( + spreeSuccessResponse, + variant, + 'product' + ) + + if (product === null) { + throw new MissingLineItemVariantError( + `Couldn't find product for variant with id ${variant.id}.` + ) + } + + // CartItem.tsx expects path without a '/' prefix unlike pages/product/[slug].tsx and others. + const path = `${product.attributes.slug}` + + const spreeOptionValues = jsonApi.findRelationshipDocuments( + spreeSuccessResponse, + variant, + 'option_values' + ) + + const options: SelectedOption[] = spreeOptionValues.map( + (spreeOptionValue) => { + const spreeOptionType = + jsonApi.findSingleRelationshipDocument<OptionTypeAttr>( + spreeSuccessResponse, + spreeOptionValue, + 'option_type' + ) + + if (spreeOptionType === null) { + throw new MissingLineItemVariantError( + `Couldn't find option type of option value with id ${spreeOptionValue.id}.` + ) + } + + const label = isColorProductOption(spreeOptionType) + ? spreeOptionValue.attributes.name + : spreeOptionValue.attributes.presentation + + return { + id: spreeOptionValue.id, + name: spreeOptionType.attributes.presentation, + value: label, + } + } + ) + + return { + id: spreeLineItem.id, + variantId: variant.id, + productId: product.id, + name: spreeLineItem.attributes.name, + quantity: spreeLineItem.attributes.quantity, + discounts: [], // TODO: Implement when the template starts displaying them. + path, + variant: normalizeVariant(spreeSuccessResponse, variant), + options, + } +} + +const normalizeCart = ( + spreeSuccessResponse: SpreeSdkResponse, + spreeCart: OrderAttr +): Cart => { + const lineItems = jsonApi + .findRelationshipDocuments<LineItemAttr>( + spreeSuccessResponse, + spreeCart, + 'line_items' + ) + .map((lineItem) => normalizeLineItem(spreeSuccessResponse, lineItem)) + + return { + id: spreeCart.id, + createdAt: spreeCart.attributes.created_at.toString(), + currency: { code: spreeCart.attributes.currency }, + taxesIncluded: true, + lineItems, + lineItemsSubtotalPrice: parseFloat(spreeCart.attributes.item_total), + subtotalPrice: parseFloat(spreeCart.attributes.item_total), + totalPrice: parseFloat(spreeCart.attributes.total), + customerId: spreeCart.attributes.token, + email: spreeCart.attributes.email, + discounts: [], // TODO: Implement when the template starts displaying them. + } +} + +export { normalizeLineItem } + +export default normalizeCart diff --git a/framework/spree/utils/normalizations/normalize-page.ts b/framework/spree/utils/normalizations/normalize-page.ts new file mode 100644 index 000000000..c49d862d1 --- /dev/null +++ b/framework/spree/utils/normalizations/normalize-page.ts @@ -0,0 +1,42 @@ +import { Page } from '@commerce/types/page' +import type { PageAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/Page' +import { SpreeSdkResponse } from '../../types' + +const normalizePage = ( + _spreeSuccessResponse: SpreeSdkResponse, + spreePage: PageAttr, + commerceLocales: string[] +): Page => { + // If the locale returned by Spree is not available, search + // for a similar one. + + const spreeLocale = spreePage.attributes.locale + let usedCommerceLocale: string + + if (commerceLocales.includes(spreeLocale)) { + usedCommerceLocale = spreeLocale + } else { + const genericSpreeLocale = spreeLocale.split('-')[0] + + const foundExactGenericLocale = commerceLocales.includes(genericSpreeLocale) + + if (foundExactGenericLocale) { + usedCommerceLocale = genericSpreeLocale + } else { + const foundSimilarLocale = commerceLocales.find((locale) => { + return locale.split('-')[0] === genericSpreeLocale + }) + + usedCommerceLocale = foundSimilarLocale || spreeLocale + } + } + + return { + id: spreePage.id, + name: spreePage.attributes.title, + url: `/${usedCommerceLocale}/${spreePage.attributes.slug}`, + body: spreePage.attributes.content, + } +} + +export default normalizePage diff --git a/framework/spree/utils/normalizations/normalize-product.ts b/framework/spree/utils/normalizations/normalize-product.ts new file mode 100644 index 000000000..e70bd34b4 --- /dev/null +++ b/framework/spree/utils/normalizations/normalize-product.ts @@ -0,0 +1,240 @@ +import type { + Product, + ProductImage, + ProductPrice, + ProductVariant, +} from '@commerce/types/product' +import type { ProductAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/Product' +import type { RelationType } from '@spree/storefront-api-v2-sdk/types/interfaces/Relationships' +import { jsonApi } from '@spree/storefront-api-v2-sdk' +import { JsonApiDocument } from '@spree/storefront-api-v2-sdk/types/interfaces/JsonApi' +import { requireConfigValue } from '../../isomorphic-config' +import createGetAbsoluteImageUrl from '../create-get-absolute-image-url' +import expandOptions from '../expand-options' +import getMediaGallery from '../get-media-gallery' +import getProductPath from '../get-product-path' +import MissingPrimaryVariantError from '../../errors/MissingPrimaryVariantError' +import MissingOptionValueError from '../../errors/MissingOptionValueError' +import type { + ExpandedProductOption, + SpreeSdkResponse, + VariantAttr, +} from '../../types' + +const placeholderImage = requireConfigValue('productPlaceholderImageUrl') as + | string + | false + +const imagesOptionFilter = requireConfigValue('imagesOptionFilter') as + | string + | false + +const normalizeProduct = ( + spreeSuccessResponse: SpreeSdkResponse, + spreeProduct: ProductAttr +): Product => { + const spreePrimaryVariant = + jsonApi.findSingleRelationshipDocument<VariantAttr>( + spreeSuccessResponse, + spreeProduct, + 'primary_variant' + ) + + if (spreePrimaryVariant === null) { + throw new MissingPrimaryVariantError( + `Couldn't find primary variant for product with id ${spreeProduct.id}.` + ) + } + + const sku = spreePrimaryVariant.attributes.sku + + const price: ProductPrice = { + value: parseFloat(spreeProduct.attributes.price), + currencyCode: spreeProduct.attributes.currency, + } + + const hasNonMasterVariants = + (spreeProduct.relationships.variants.data as RelationType[]).length > 1 + + const showOptions = + (requireConfigValue('showSingleVariantOptions') as boolean) || + hasNonMasterVariants + + let options: ExpandedProductOption[] = [] + + const spreeVariantRecords = jsonApi.findRelationshipDocuments( + spreeSuccessResponse, + spreeProduct, + 'variants' + ) + + // Use variants with option values if available. Fall back to + // Spree primary_variant if no explicit variants are present. + const spreeOptionsVariantsOrPrimary = + spreeVariantRecords.length === 0 + ? [spreePrimaryVariant] + : spreeVariantRecords + + const variants: ProductVariant[] = spreeOptionsVariantsOrPrimary.map( + (spreeVariantRecord) => { + let variantOptions: ExpandedProductOption[] = [] + + if (showOptions) { + const spreeOptionValues = jsonApi.findRelationshipDocuments( + spreeSuccessResponse, + spreeVariantRecord, + 'option_values' + ) + + // Only include options which are used by variants. + + spreeOptionValues.forEach((spreeOptionValue) => { + variantOptions = expandOptions( + spreeSuccessResponse, + spreeOptionValue, + variantOptions + ) + + options = expandOptions( + spreeSuccessResponse, + spreeOptionValue, + options + ) + }) + } + + return { + id: spreeVariantRecord.id, + options: variantOptions, + } + } + ) + + const spreePrimaryVariantImageRecords = jsonApi.findRelationshipDocuments( + spreeSuccessResponse, + spreePrimaryVariant, + 'images' + ) + + let spreeVariantImageRecords: JsonApiDocument[] + + if (imagesOptionFilter === false) { + spreeVariantImageRecords = spreeVariantRecords.reduce<JsonApiDocument[]>( + (accumulatedImageRecords, spreeVariantRecord) => { + return [ + ...accumulatedImageRecords, + ...jsonApi.findRelationshipDocuments( + spreeSuccessResponse, + spreeVariantRecord, + 'images' + ), + ] + }, + [] + ) + } else { + const spreeOptionTypes = jsonApi.findRelationshipDocuments( + spreeSuccessResponse, + spreeProduct, + 'option_types' + ) + + const imagesFilterOptionType = spreeOptionTypes.find( + (spreeOptionType) => + spreeOptionType.attributes.name === imagesOptionFilter + ) + + if (!imagesFilterOptionType) { + console.warn( + `Couldn't find option type having name ${imagesOptionFilter} for product with id ${spreeProduct.id}.` + + ' Showing no images for this product.' + ) + + spreeVariantImageRecords = [] + } else { + const imagesOptionTypeFilterId = imagesFilterOptionType.id + const includedOptionValuesImagesIds: string[] = [] + + spreeVariantImageRecords = spreeVariantRecords.reduce<JsonApiDocument[]>( + (accumulatedImageRecords, spreeVariantRecord) => { + const spreeVariantOptionValuesIdentifiers: RelationType[] = + spreeVariantRecord.relationships.option_values.data + + const spreeOptionValueOfFilterTypeIdentifier = + spreeVariantOptionValuesIdentifiers.find( + (spreeVariantOptionValuesIdentifier: RelationType) => + imagesFilterOptionType.relationships.option_values.data.some( + (filterOptionTypeValueIdentifier: RelationType) => + filterOptionTypeValueIdentifier.id === + spreeVariantOptionValuesIdentifier.id + ) + ) + + if (!spreeOptionValueOfFilterTypeIdentifier) { + throw new MissingOptionValueError( + `Couldn't find option value related to option type with id ${imagesOptionTypeFilterId}.` + ) + } + + const optionValueImagesAlreadyIncluded = + includedOptionValuesImagesIds.includes( + spreeOptionValueOfFilterTypeIdentifier.id + ) + + if (optionValueImagesAlreadyIncluded) { + return accumulatedImageRecords + } + + includedOptionValuesImagesIds.push( + spreeOptionValueOfFilterTypeIdentifier.id + ) + + return [ + ...accumulatedImageRecords, + ...jsonApi.findRelationshipDocuments( + spreeSuccessResponse, + spreeVariantRecord, + 'images' + ), + ] + }, + [] + ) + } + } + + const spreeImageRecords = [ + ...spreePrimaryVariantImageRecords, + ...spreeVariantImageRecords, + ] + + const productImages = getMediaGallery( + spreeImageRecords, + createGetAbsoluteImageUrl(requireConfigValue('imageHost') as string) + ) + + const images: ProductImage[] = + productImages.length === 0 + ? placeholderImage === false + ? [] + : [{ url: placeholderImage }] + : productImages + + const slug = spreeProduct.attributes.slug + const path = getProductPath(spreeProduct) + + return { + id: spreeProduct.id, + name: spreeProduct.attributes.name, + description: spreeProduct.attributes.description, + images, + variants, + options, + price, + slug, + path, + sku, + } +} + +export default normalizeProduct diff --git a/framework/spree/utils/normalizations/normalize-user.ts b/framework/spree/utils/normalizations/normalize-user.ts new file mode 100644 index 000000000..897b1c59b --- /dev/null +++ b/framework/spree/utils/normalizations/normalize-user.ts @@ -0,0 +1,16 @@ +import type { Customer } from '@commerce/types/customer' +import type { AccountAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/Account' +import type { SpreeSdkResponse } from '../../types' + +const normalizeUser = ( + _spreeSuccessResponse: SpreeSdkResponse, + spreeUser: AccountAttr +): Customer => { + const email = spreeUser.attributes.email + + return { + email, + } +} + +export default normalizeUser diff --git a/framework/spree/utils/normalizations/normalize-wishlist.ts b/framework/spree/utils/normalizations/normalize-wishlist.ts new file mode 100644 index 000000000..c9cfee2db --- /dev/null +++ b/framework/spree/utils/normalizations/normalize-wishlist.ts @@ -0,0 +1,68 @@ +import MissingProductError from '../../errors/MissingProductError' +import MissingVariantError from '../../errors/MissingVariantError' +import { jsonApi } from '@spree/storefront-api-v2-sdk' +import type { ProductAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/Product' +import type { WishedItemAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/WishedItem' +import type { WishlistAttr } from '@spree/storefront-api-v2-sdk/types/interfaces/Wishlist' +import type { + ExplicitCommerceWishlist, + SpreeSdkResponse, + VariantAttr, +} from '../../types' +import normalizeProduct from './normalize-product' + +const normalizeWishlist = ( + spreeSuccessResponse: SpreeSdkResponse, + spreeWishlist: WishlistAttr +): ExplicitCommerceWishlist => { + const spreeWishedItems = jsonApi.findRelationshipDocuments<WishedItemAttr>( + spreeSuccessResponse, + spreeWishlist, + 'wished_items' + ) + + const items: ExplicitCommerceWishlist['items'] = spreeWishedItems.map( + (spreeWishedItem) => { + const spreeWishedVariant = + jsonApi.findSingleRelationshipDocument<VariantAttr>( + spreeSuccessResponse, + spreeWishedItem, + 'variant' + ) + + if (spreeWishedVariant === null) { + throw new MissingVariantError( + `Couldn't find variant for wished item with id ${spreeWishedItem.id}.` + ) + } + + const spreeWishedProduct = + jsonApi.findSingleRelationshipDocument<ProductAttr>( + spreeSuccessResponse, + spreeWishedVariant, + 'product' + ) + + if (spreeWishedProduct === null) { + throw new MissingProductError( + `Couldn't find product for variant with id ${spreeWishedVariant.id}.` + ) + } + + return { + id: spreeWishedItem.id, + product_id: parseInt(spreeWishedProduct.id, 10), + variant_id: parseInt(spreeWishedVariant.id, 10), + product: normalizeProduct(spreeSuccessResponse, spreeWishedProduct), + } + } + ) + + return { + id: spreeWishlist.id, + token: spreeWishlist.attributes.token, + items, + } +} + +export default normalizeWishlist diff --git a/framework/spree/utils/require-config.ts b/framework/spree/utils/require-config.ts new file mode 100644 index 000000000..92b7916ca --- /dev/null +++ b/framework/spree/utils/require-config.ts @@ -0,0 +1,16 @@ +import MissingConfigurationValueError from '../errors/MissingConfigurationValueError' +import type { NonUndefined, ValueOf } from '../types' + +const requireConfig = <T>(isomorphicConfig: T, key: keyof T) => { + const valueUnderKey = isomorphicConfig[key] + + if (typeof valueUnderKey === 'undefined') { + throw new MissingConfigurationValueError( + `Value for configuration key ${key} was undefined.` + ) + } + + return valueUnderKey as NonUndefined<ValueOf<T>> +} + +export default requireConfig diff --git a/framework/spree/utils/sort-option-types.ts b/framework/spree/utils/sort-option-types.ts new file mode 100644 index 000000000..bac632e09 --- /dev/null +++ b/framework/spree/utils/sort-option-types.ts @@ -0,0 +1,11 @@ +import type { ExpandedProductOption } from '../types' + +const sortOptionsByPosition = ( + options: ExpandedProductOption[] +): ExpandedProductOption[] => { + return options.sort((firstOption, secondOption) => { + return firstOption.position - secondOption.position + }) +} + +export default sortOptionsByPosition diff --git a/framework/spree/utils/tokens/cart-token.ts b/framework/spree/utils/tokens/cart-token.ts new file mode 100644 index 000000000..8352f9ada --- /dev/null +++ b/framework/spree/utils/tokens/cart-token.ts @@ -0,0 +1,21 @@ +import { requireConfigValue } from '../../isomorphic-config' +import Cookies from 'js-cookie' + +export const getCartToken = () => + Cookies.get(requireConfigValue('cartCookieName') as string) + +export const setCartToken = (cartToken: string) => { + const cookieOptions = { + expires: requireConfigValue('cartCookieExpire') as number, + } + + Cookies.set( + requireConfigValue('cartCookieName') as string, + cartToken, + cookieOptions + ) +} + +export const removeCartToken = () => { + Cookies.remove(requireConfigValue('cartCookieName') as string) +} diff --git a/framework/spree/utils/tokens/ensure-fresh-user-access-token.ts b/framework/spree/utils/tokens/ensure-fresh-user-access-token.ts new file mode 100644 index 000000000..de22634fb --- /dev/null +++ b/framework/spree/utils/tokens/ensure-fresh-user-access-token.ts @@ -0,0 +1,51 @@ +import { SpreeSdkResponseWithRawResponse } from '../../types' +import type { Client } from '@spree/storefront-api-v2-sdk' +import type { IOAuthToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token' +import getSpreeSdkMethodFromEndpointPath from '../get-spree-sdk-method-from-endpoint-path' +import { + ensureUserTokenResponse, + removeUserTokenResponse, + setUserTokenResponse, +} from './user-token-response' +import AccessTokenError from '../../errors/AccessTokenError' + +/** + * If the user has a saved access token, make sure it's not expired + * If it is expired, attempt to refresh it. + */ +const ensureFreshUserAccessToken = async (client: Client): Promise<void> => { + const userTokenResponse = ensureUserTokenResponse() + + if (!userTokenResponse) { + // There's no user token or it has an invalid format. + return + } + + const isAccessTokenExpired = + (userTokenResponse.created_at + userTokenResponse.expires_in) * 1000 < + Date.now() + + if (!isAccessTokenExpired) { + return + } + + const spreeRefreshAccessTokenSdkMethod = getSpreeSdkMethodFromEndpointPath< + Client, + SpreeSdkResponseWithRawResponse & IOAuthToken + >(client, 'authentication.refreshToken') + + const spreeRefreshAccessTokenResponse = + await spreeRefreshAccessTokenSdkMethod({ + refresh_token: userTokenResponse.refresh_token, + }) + + if (spreeRefreshAccessTokenResponse.isFail()) { + removeUserTokenResponse() + + throw new AccessTokenError('Could not refresh access token.') + } + + setUserTokenResponse(spreeRefreshAccessTokenResponse.success()) +} + +export default ensureFreshUserAccessToken diff --git a/framework/spree/utils/tokens/ensure-itoken.ts b/framework/spree/utils/tokens/ensure-itoken.ts new file mode 100644 index 000000000..0d4e6f899 --- /dev/null +++ b/framework/spree/utils/tokens/ensure-itoken.ts @@ -0,0 +1,25 @@ +import type { IToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token' +import { getCartToken } from './cart-token' +import { ensureUserTokenResponse } from './user-token-response' + +const ensureIToken = (): IToken | undefined => { + const userTokenResponse = ensureUserTokenResponse() + + if (userTokenResponse) { + return { + bearerToken: userTokenResponse.access_token, + } + } + + const cartToken = getCartToken() + + if (cartToken) { + return { + orderToken: cartToken, + } + } + + return undefined +} + +export default ensureIToken diff --git a/framework/spree/utils/tokens/is-logged-in.ts b/framework/spree/utils/tokens/is-logged-in.ts new file mode 100644 index 000000000..218c25bdd --- /dev/null +++ b/framework/spree/utils/tokens/is-logged-in.ts @@ -0,0 +1,9 @@ +import { ensureUserTokenResponse } from './user-token-response' + +const isLoggedIn = (): boolean => { + const userTokenResponse = ensureUserTokenResponse() + + return !!userTokenResponse +} + +export default isLoggedIn diff --git a/framework/spree/utils/tokens/revoke-user-tokens.ts b/framework/spree/utils/tokens/revoke-user-tokens.ts new file mode 100644 index 000000000..9c603a884 --- /dev/null +++ b/framework/spree/utils/tokens/revoke-user-tokens.ts @@ -0,0 +1,49 @@ +import type { GraphQLFetcherResult } from '@commerce/api' +import type { HookFetcherContext } from '@commerce/utils/types' +import TokensNotRejectedError from '../../errors/TokensNotRejectedError' +import type { UserOAuthTokens } from '../../types' +import type { EmptyObjectResponse } from '@spree/storefront-api-v2-sdk/types/interfaces/EmptyObject' + +const revokeUserTokens = async ( + fetch: HookFetcherContext<{ + data: any + }>['fetch'], + userTokens: UserOAuthTokens +): Promise<void> => { + const spreeRevokeTokensResponses = await Promise.allSettled([ + fetch<GraphQLFetcherResult<EmptyObjectResponse>>({ + variables: { + methodPath: 'authentication.revokeToken', + arguments: [ + { + token: userTokens.refreshToken, + }, + ], + }, + }), + fetch<GraphQLFetcherResult<EmptyObjectResponse>>({ + variables: { + methodPath: 'authentication.revokeToken', + arguments: [ + { + token: userTokens.accessToken, + }, + ], + }, + }), + ]) + + const anyRejected = spreeRevokeTokensResponses.some( + (response) => response.status === 'rejected' + ) + + if (anyRejected) { + throw new TokensNotRejectedError( + 'Some tokens could not be rejected in Spree.' + ) + } + + return undefined +} + +export default revokeUserTokens diff --git a/framework/spree/utils/tokens/user-token-response.ts b/framework/spree/utils/tokens/user-token-response.ts new file mode 100644 index 000000000..0c524eccf --- /dev/null +++ b/framework/spree/utils/tokens/user-token-response.ts @@ -0,0 +1,58 @@ +import { requireConfigValue } from '../../isomorphic-config' +import Cookies from 'js-cookie' +import type { IOAuthToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token' +import UserTokenResponseParseError from '../../errors/UserTokenResponseParseError' + +export const getUserTokenResponse = (): IOAuthToken | undefined => { + const stringifiedToken = Cookies.get( + requireConfigValue('userCookieName') as string + ) + + if (!stringifiedToken) { + return undefined + } + + try { + const token: IOAuthToken = JSON.parse(stringifiedToken) + + return token + } catch (parseError) { + throw new UserTokenResponseParseError( + 'Could not parse stored user token response.' + ) + } +} + +/** + * Retrieves the saved user token response. If the response fails json parsing, + * removes the saved token and returns @type {undefined} instead. + */ +export const ensureUserTokenResponse = (): IOAuthToken | undefined => { + try { + return getUserTokenResponse() + } catch (error) { + if (error instanceof UserTokenResponseParseError) { + removeUserTokenResponse() + + return undefined + } + + throw error + } +} + +export const setUserTokenResponse = (token: IOAuthToken) => { + const cookieOptions = { + expires: requireConfigValue('userCookieExpire') as number, + } + + Cookies.set( + requireConfigValue('userCookieName') as string, + JSON.stringify(token), + cookieOptions + ) +} + +export const removeUserTokenResponse = () => { + Cookies.remove(requireConfigValue('userCookieName') as string) +} diff --git a/framework/spree/utils/validations/validate-all-products-taxonomy-id.ts b/framework/spree/utils/validations/validate-all-products-taxonomy-id.ts new file mode 100644 index 000000000..5eaaa0b4b --- /dev/null +++ b/framework/spree/utils/validations/validate-all-products-taxonomy-id.ts @@ -0,0 +1,13 @@ +const validateAllProductsTaxonomyId = (taxonomyId: unknown): string | false => { + if (!taxonomyId || taxonomyId === 'false') { + return false + } + + if (typeof taxonomyId === 'string') { + return taxonomyId + } + + throw new TypeError('taxonomyId must be a string or falsy.') +} + +export default validateAllProductsTaxonomyId diff --git a/framework/spree/utils/validations/validate-cookie-expire.ts b/framework/spree/utils/validations/validate-cookie-expire.ts new file mode 100644 index 000000000..1bd987273 --- /dev/null +++ b/framework/spree/utils/validations/validate-cookie-expire.ts @@ -0,0 +1,21 @@ +const validateCookieExpire = (expire: unknown): number => { + let expireInteger: number + + if (typeof expire === 'string') { + expireInteger = parseFloat(expire) + } else if (typeof expire === 'number') { + expireInteger = expire + } else { + throw new TypeError( + 'expire must be a string containing a number or an integer.' + ) + } + + if (expireInteger < 0) { + throw new RangeError('expire must be non-negative.') + } + + return expireInteger +} + +export default validateCookieExpire diff --git a/framework/spree/utils/validations/validate-images-option-filter.ts b/framework/spree/utils/validations/validate-images-option-filter.ts new file mode 100644 index 000000000..8b6ef9892 --- /dev/null +++ b/framework/spree/utils/validations/validate-images-option-filter.ts @@ -0,0 +1,15 @@ +const validateImagesOptionFilter = ( + optionTypeNameOrFalse: unknown +): string | false => { + if (!optionTypeNameOrFalse || optionTypeNameOrFalse === 'false') { + return false + } + + if (typeof optionTypeNameOrFalse === 'string') { + return optionTypeNameOrFalse + } + + throw new TypeError('optionTypeNameOrFalse must be a string or falsy.') +} + +export default validateImagesOptionFilter diff --git a/framework/spree/utils/validations/validate-images-quality.ts b/framework/spree/utils/validations/validate-images-quality.ts new file mode 100644 index 000000000..909caad57 --- /dev/null +++ b/framework/spree/utils/validations/validate-images-quality.ts @@ -0,0 +1,23 @@ +const validateImagesQuality = (quality: unknown): number => { + let quality_level: number + + if (typeof quality === 'string') { + quality_level = parseInt(quality) + } else if (typeof quality === 'number') { + quality_level = quality + } else { + throw new TypeError( + 'prerenderCount count must be a string containing a number or an integer.' + ) + } + + if (quality_level === NaN) { + throw new TypeError( + 'prerenderCount count must be a string containing a number or an integer.' + ) + } + + return quality_level +} + +export default validateImagesQuality diff --git a/framework/spree/utils/validations/validate-images-size.ts b/framework/spree/utils/validations/validate-images-size.ts new file mode 100644 index 000000000..e02036dad --- /dev/null +++ b/framework/spree/utils/validations/validate-images-size.ts @@ -0,0 +1,13 @@ +const validateImagesSize = (size: unknown): string => { + if (typeof size !== 'string') { + throw new TypeError('size must be a string.') + } + + if (!size.includes('x') || size.split('x').length != 2) { + throw new Error("size must have two numbers separated with an 'x'") + } + + return size +} + +export default validateImagesSize diff --git a/framework/spree/utils/validations/validate-placeholder-image-url.ts b/framework/spree/utils/validations/validate-placeholder-image-url.ts new file mode 100644 index 000000000..cce2e27da --- /dev/null +++ b/framework/spree/utils/validations/validate-placeholder-image-url.ts @@ -0,0 +1,15 @@ +const validatePlaceholderImageUrl = ( + placeholderUrlOrFalse: unknown +): string | false => { + if (!placeholderUrlOrFalse || placeholderUrlOrFalse === 'false') { + return false + } + + if (typeof placeholderUrlOrFalse === 'string') { + return placeholderUrlOrFalse + } + + throw new TypeError('placeholderUrlOrFalse must be a string or falsy.') +} + +export default validatePlaceholderImageUrl diff --git a/framework/spree/utils/validations/validate-products-prerender-count.ts b/framework/spree/utils/validations/validate-products-prerender-count.ts new file mode 100644 index 000000000..024db1ea6 --- /dev/null +++ b/framework/spree/utils/validations/validate-products-prerender-count.ts @@ -0,0 +1,21 @@ +const validateProductsPrerenderCount = (prerenderCount: unknown): number => { + let prerenderCountInteger: number + + if (typeof prerenderCount === 'string') { + prerenderCountInteger = parseInt(prerenderCount) + } else if (typeof prerenderCount === 'number') { + prerenderCountInteger = prerenderCount + } else { + throw new TypeError( + 'prerenderCount count must be a string containing a number or an integer.' + ) + } + + if (prerenderCountInteger < 0) { + throw new RangeError('prerenderCount must be non-negative.') + } + + return prerenderCountInteger +} + +export default validateProductsPrerenderCount diff --git a/framework/spree/wishlist/index.ts b/framework/spree/wishlist/index.ts new file mode 100644 index 000000000..241af3c7e --- /dev/null +++ b/framework/spree/wishlist/index.ts @@ -0,0 +1,3 @@ +export { default as useAddItem } from './use-add-item' +export { default as useWishlist } from './use-wishlist' +export { default as useRemoveItem } from './use-remove-item' diff --git a/framework/spree/wishlist/use-add-item.tsx b/framework/spree/wishlist/use-add-item.tsx new file mode 100644 index 000000000..dac003ddc --- /dev/null +++ b/framework/spree/wishlist/use-add-item.tsx @@ -0,0 +1,87 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import useAddItem from '@commerce/wishlist/use-add-item' +import type { UseAddItem } from '@commerce/wishlist/use-add-item' +import useWishlist from './use-wishlist' +import type { ExplicitWishlistAddItemHook } from '../types' +import type { + WishedItem, + WishlistsAddWishedItem, +} from '@spree/storefront-api-v2-sdk/types/interfaces/WishedItem' +import type { GraphQLFetcherResult } from '@commerce/api' +import ensureIToken from '../utils/tokens/ensure-itoken' +import type { IToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token' +import type { AddItemHook } from '@commerce/types/wishlist' +import isLoggedIn from '../utils/tokens/is-logged-in' + +export default useAddItem as UseAddItem<typeof handler> + +export const handler: MutationHook<ExplicitWishlistAddItemHook> = { + fetchOptions: { + url: 'wishlists', + query: 'addWishedItem', + }, + async fetcher({ input, options, fetch }) { + console.info( + 'useAddItem (wishlist) fetcher called. Configuration: ', + 'input: ', + input, + 'options: ', + options + ) + + const { + item: { productId, variantId, wishlistToken }, + } = input + + if (!isLoggedIn() || !wishlistToken) { + return null + } + + let token: IToken | undefined = ensureIToken() + + const addItemParameters: WishlistsAddWishedItem = { + variant_id: `${variantId}`, + quantity: 1, + } + + await fetch<GraphQLFetcherResult<WishedItem>>({ + variables: { + methodPath: 'wishlists.addWishedItem', + arguments: [token, wishlistToken, addItemParameters], + }, + }) + + return null + }, + useHook: ({ fetch }) => { + const useWrappedHook: ReturnType<MutationHook<AddItemHook>['useHook']> = + () => { + const wishlist = useWishlist() + + return useCallback( + async (item) => { + if (!wishlist.data) { + return null + } + + const data = await fetch({ + input: { + item: { + ...item, + wishlistToken: wishlist.data.token, + }, + }, + }) + + await wishlist.revalidate() + + return data + }, + [wishlist] + ) + } + + return useWrappedHook + }, +} diff --git a/framework/spree/wishlist/use-remove-item.tsx b/framework/spree/wishlist/use-remove-item.tsx new file mode 100644 index 000000000..3b92b029f --- /dev/null +++ b/framework/spree/wishlist/use-remove-item.tsx @@ -0,0 +1,75 @@ +import { useCallback } from 'react' +import type { MutationHook } from '@commerce/utils/types' +import useRemoveItem from '@commerce/wishlist/use-remove-item' +import type { UseRemoveItem } from '@commerce/wishlist/use-remove-item' +import useWishlist from './use-wishlist' +import type { ExplicitWishlistRemoveItemHook } from '../types' +import isLoggedIn from '../utils/tokens/is-logged-in' +import ensureIToken from '../utils/tokens/ensure-itoken' +import type { IToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token' +import type { GraphQLFetcherResult } from '@commerce/api' +import type { WishedItem } from '@spree/storefront-api-v2-sdk/types/interfaces/WishedItem' + +export default useRemoveItem as UseRemoveItem<typeof handler> + +export const handler: MutationHook<ExplicitWishlistRemoveItemHook> = { + fetchOptions: { + url: 'wishlists', + query: 'removeWishedItem', + }, + async fetcher({ input, options, fetch }) { + console.info( + 'useRemoveItem (wishlist) fetcher called. Configuration: ', + 'input: ', + input, + 'options: ', + options + ) + + const { itemId, wishlistToken } = input + + if (!isLoggedIn() || !wishlistToken) { + return null + } + + let token: IToken | undefined = ensureIToken() + + await fetch<GraphQLFetcherResult<WishedItem>>({ + variables: { + methodPath: 'wishlists.removeWishedItem', + arguments: [token, wishlistToken, itemId], + }, + }) + + return null + }, + useHook: ({ fetch }) => { + const useWrappedHook: ReturnType< + MutationHook<ExplicitWishlistRemoveItemHook>['useHook'] + > = () => { + const wishlist = useWishlist() + + return useCallback( + async (input) => { + if (!wishlist.data) { + return null + } + + const data = await fetch({ + input: { + itemId: `${input.id}`, + wishlistToken: wishlist.data.token, + }, + }) + + await wishlist.revalidate() + + return data + }, + [wishlist] + ) + } + + return useWrappedHook + }, +} diff --git a/framework/spree/wishlist/use-wishlist.tsx b/framework/spree/wishlist/use-wishlist.tsx new file mode 100644 index 000000000..0292d4096 --- /dev/null +++ b/framework/spree/wishlist/use-wishlist.tsx @@ -0,0 +1,93 @@ +import { useMemo } from 'react' +import type { SWRHook } from '@commerce/utils/types' +import useWishlist from '@commerce/wishlist/use-wishlist' +import type { UseWishlist } from '@commerce/wishlist/use-wishlist' +import type { GetWishlistHook } from '@commerce/types/wishlist' +import type { IToken } from '@spree/storefront-api-v2-sdk/types/interfaces/Token' +import type { GraphQLFetcherResult } from '@commerce/api' +import type { Wishlist } from '@spree/storefront-api-v2-sdk/types/interfaces/Wishlist' +import ensureIToken from '../utils/tokens/ensure-itoken' +import normalizeWishlist from '../utils/normalizations/normalize-wishlist' +import isLoggedIn from '../utils/tokens/is-logged-in' + +export default useWishlist as UseWishlist<typeof handler> + +export const handler: SWRHook<GetWishlistHook> = { + // Provide fetchOptions for SWR cache key + fetchOptions: { + url: 'wishlists', + query: 'default', + }, + async fetcher({ input, options, fetch }) { + console.info( + 'useWishlist fetcher called. Configuration: ', + 'input: ', + input, + 'options: ', + options + ) + + if (!isLoggedIn()) { + return null + } + + // TODO: Optimize with includeProducts. + + const token: IToken | undefined = ensureIToken() + + const { data: spreeWishlistsDefaultSuccessResponse } = await fetch< + GraphQLFetcherResult<Wishlist> + >({ + variables: { + methodPath: 'wishlists.default', + arguments: [ + token, + { + include: [ + 'wished_items', + 'wished_items.variant', + 'wished_items.variant.product', + 'wished_items.variant.product.primary_variant', + 'wished_items.variant.product.images', + 'wished_items.variant.product.option_types', + 'wished_items.variant.product.variants', + 'wished_items.variant.product.variants.option_values', + ].join(','), + }, + ], + }, + }) + + return normalizeWishlist( + spreeWishlistsDefaultSuccessResponse, + spreeWishlistsDefaultSuccessResponse.data + ) + }, + useHook: ({ useData }) => { + const useWrappedHook: ReturnType<SWRHook<GetWishlistHook>['useHook']> = ( + input + ) => { + const response = useData({ + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) + + return useMemo( + () => + Object.create(response, { + isEmpty: { + get() { + return (response.data?.items?.length || 0) <= 0 + }, + enumerable: true, + }, + }), + [response] + ) + } + + return useWrappedHook + }, +} diff --git a/framework/swell/api/operations/get-all-pages.ts b/framework/swell/api/operations/get-all-pages.ts index 6abaa155c..e157c0138 100644 --- a/framework/swell/api/operations/get-all-pages.ts +++ b/framework/swell/api/operations/get-all-pages.ts @@ -2,9 +2,8 @@ import { Provider, SwellConfig } from '..' import type { OperationContext } from '@commerce/api/operations' import type { Page } from '../../types/page' -export type GetAllPagesResult< - T extends { pages: any[] } = { pages: Page[] } -> = T +export type GetAllPagesResult<T extends { pages: any[] } = { pages: Page[] }> = + T export default function getAllPagesOperation({ commerce, diff --git a/framework/swell/auth/use-login.tsx b/framework/swell/auth/use-login.tsx index 587163d97..5a34975fa 100644 --- a/framework/swell/auth/use-login.tsx +++ b/framework/swell/auth/use-login.tsx @@ -59,16 +59,18 @@ export const handler: MutationHook<LoginHook> = { return null }, - useHook: ({ fetch }) => () => { - const { revalidate } = useCustomer() + useHook: + ({ fetch }) => + () => { + const { revalidate } = useCustomer() - return useCallback( - async function login(input) { - const data = await fetch({ input }) - await revalidate() - return data - }, - [fetch, revalidate] - ) - }, + return useCallback( + async function login(input) { + const data = await fetch({ input }) + await revalidate() + return data + }, + [fetch, revalidate] + ) + }, } diff --git a/framework/swell/auth/use-logout.tsx b/framework/swell/auth/use-logout.tsx index 7dc7411ec..0e08ce9c6 100644 --- a/framework/swell/auth/use-logout.tsx +++ b/framework/swell/auth/use-logout.tsx @@ -22,16 +22,18 @@ export const handler: MutationHook<LogoutHook> = { setCustomerToken(null) return null }, - useHook: ({ fetch }) => () => { - const { mutate } = useCustomer() + useHook: + ({ fetch }) => + () => { + const { mutate } = useCustomer() - return useCallback( - async function logout() { - const data = await fetch() - await mutate(null, false) - return data - }, - [fetch, mutate] - ) - }, + return useCallback( + async function logout() { + const data = await fetch() + await mutate(null, false) + return data + }, + [fetch, mutate] + ) + }, } diff --git a/framework/swell/auth/use-signup.tsx b/framework/swell/auth/use-signup.tsx index 674b9861f..246285ece 100644 --- a/framework/swell/auth/use-signup.tsx +++ b/framework/swell/auth/use-signup.tsx @@ -44,16 +44,18 @@ export const handler: MutationHook<SignupHook> = { } catch (error) {} return data }, - useHook: ({ fetch }) => () => { - const { revalidate } = useCustomer() + useHook: + ({ fetch }) => + () => { + const { revalidate } = useCustomer() - return useCallback( - async function signup(input) { - const data = await fetch({ input }) - await revalidate() - return data - }, - [fetch, revalidate] - ) - }, + return useCallback( + async function signup(input) { + const data = await fetch({ input }) + await revalidate() + return data + }, + [fetch, revalidate] + ) + }, } diff --git a/framework/swell/cart/use-add-item.tsx b/framework/swell/cart/use-add-item.tsx index e324a44d9..dac4fb9bb 100644 --- a/framework/swell/cart/use-add-item.tsx +++ b/framework/swell/cart/use-add-item.tsx @@ -44,16 +44,18 @@ export const handler: MutationHook<AddItemHook> = { return checkoutToCart(response) as any }, - useHook: ({ fetch }) => () => { - const { mutate } = useCart() + useHook: + ({ fetch }) => + () => { + const { mutate } = useCart() - return useCallback( - async function addItem(input) { - const data = await fetch({ input }) - await mutate(data, false) - return data - }, - [fetch, mutate] - ) - }, + return useCallback( + async function addItem(input) { + const data = await fetch({ input }) + await mutate(data, false) + return data + }, + [fetch, mutate] + ) + }, } diff --git a/framework/swell/cart/use-cart.tsx b/framework/swell/cart/use-cart.tsx index 885f889f5..7dc48b052 100644 --- a/framework/swell/cart/use-cart.tsx +++ b/framework/swell/cart/use-cart.tsx @@ -17,21 +17,23 @@ export const handler: SWRHook<GetCartHook> = { return cart ? normalizeCart(cart) : null }, - useHook: ({ useData }) => (input) => { - const response = useData({ - swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, - }) - return useMemo( - () => - Object.create(response, { - isEmpty: { - get() { - return (response.data?.lineItems.length ?? 0) <= 0 + useHook: + ({ useData }) => + (input) => { + const response = useData({ + swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, + }) + return useMemo( + () => + Object.create(response, { + isEmpty: { + get() { + return (response.data?.lineItems.length ?? 0) <= 0 + }, + enumerable: true, }, - enumerable: true, - }, - }), - [response] - ) - }, + }), + [response] + ) + }, } diff --git a/framework/swell/cart/use-remove-item.tsx b/framework/swell/cart/use-remove-item.tsx index 7ef3af7cd..fe1ee24ca 100644 --- a/framework/swell/cart/use-remove-item.tsx +++ b/framework/swell/cart/use-remove-item.tsx @@ -33,17 +33,19 @@ export const handler = { return checkoutToCart(response) }, - useHook: ({ fetch }: MutationHookContext<RemoveItemHook>) => () => { - const { mutate } = useCart() + useHook: + ({ fetch }: MutationHookContext<RemoveItemHook>) => + () => { + const { mutate } = useCart() - return useCallback( - async function removeItem(input) { - const data = await fetch({ input: { itemId: input.id } }) - await mutate(data, false) + return useCallback( + async function removeItem(input) { + const data = await fetch({ input: { itemId: input.id } }) + await mutate(data, false) - return data - }, - [fetch, mutate] - ) - }, + return data + }, + [fetch, mutate] + ) + }, } diff --git a/framework/swell/cart/use-update-item.tsx b/framework/swell/cart/use-update-item.tsx index 631a394f6..5d705c5e5 100644 --- a/framework/swell/cart/use-update-item.tsx +++ b/framework/swell/cart/use-update-item.tsx @@ -57,43 +57,43 @@ export const handler = { return checkoutToCart(response) }, - useHook: ({ fetch }: MutationHookContext<UpdateItemHook>) => < - T extends LineItem | undefined = undefined - >( - ctx: { - item?: T - wait?: number - } = {} - ) => { - const { item } = ctx - const { mutate, data: cartData } = useCart() as any + useHook: + ({ fetch }: MutationHookContext<UpdateItemHook>) => + <T extends LineItem | undefined = undefined>( + ctx: { + item?: T + wait?: number + } = {} + ) => { + const { item } = ctx + const { mutate, data: cartData } = useCart() as any - return useCallback( - debounce(async (input: UpdateItemActionInput) => { - const firstLineItem = cartData.lineItems[0] - const itemId = item?.id || firstLineItem.id - const productId = item?.productId || firstLineItem.productId - const variantId = item?.variant.id || firstLineItem.variant.id - if (!itemId || !productId) { - throw new ValidationError({ - message: 'Invalid input used for this operation', - }) - } + return useCallback( + debounce(async (input: UpdateItemActionInput) => { + const firstLineItem = cartData.lineItems[0] + const itemId = item?.id || firstLineItem.id + const productId = item?.productId || firstLineItem.productId + const variantId = item?.variant.id || firstLineItem.variant.id + if (!itemId || !productId) { + throw new ValidationError({ + message: 'Invalid input used for this operation', + }) + } - const data = await fetch({ - input: { - item: { - productId, - variantId, - quantity: input.quantity, + const data = await fetch({ + input: { + item: { + productId, + variantId, + quantity: input.quantity, + }, + itemId, }, - itemId, - }, - }) - await mutate(data, false) - return data - }, ctx.wait ?? 500), - [fetch, mutate] - ) - }, + }) + await mutate(data, false) + return data + }, ctx.wait ?? 500), + [fetch, mutate] + ) + }, } diff --git a/framework/swell/customer/use-customer.tsx b/framework/swell/customer/use-customer.tsx index 50e85d3f6..3371db89c 100644 --- a/framework/swell/customer/use-customer.tsx +++ b/framework/swell/customer/use-customer.tsx @@ -16,12 +16,14 @@ export const handler: SWRHook<CustomerHook> = { }) return data ? normalizeCustomer(data) : null }, - useHook: ({ useData }) => (input) => { - return useData({ - swrOptions: { - revalidateOnFocus: false, - ...input?.swrOptions, - }, - }) - }, + useHook: + ({ useData }) => + (input) => { + return useData({ + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) + }, } diff --git a/framework/swell/product/use-search.tsx b/framework/swell/product/use-search.tsx index bdcca3ff2..62f813368 100644 --- a/framework/swell/product/use-search.tsx +++ b/framework/swell/product/use-search.tsx @@ -42,18 +42,20 @@ export const handler: SWRHook<SearchProductsHook> = { found, } }, - useHook: ({ useData }) => (input = {}) => { - return useData({ - input: [ - ['search', input.search], - ['categoryId', input.categoryId], - ['brandId', input.brandId], - ['sort', input.sort], - ], - swrOptions: { - revalidateOnFocus: false, - ...input.swrOptions, - }, - }) - }, + useHook: + ({ useData }) => + (input = {}) => { + return useData({ + input: [ + ['search', input.search], + ['categoryId', input.categoryId], + ['brandId', input.brandId], + ['sort', input.sort], + ], + swrOptions: { + revalidateOnFocus: false, + ...input.swrOptions, + }, + }) + }, } diff --git a/framework/swell/schema.d.ts b/framework/swell/schema.d.ts index e77d3c8d9..0ec625048 100644 --- a/framework/swell/schema.d.ts +++ b/framework/swell/schema.d.ts @@ -332,7 +332,7 @@ export type Checkout = { terms_policy?: string refund_policy?: string privacy_policy?: string - theme?: stirng + theme?: string countries: any[] currencies: any[] payment_methods: any[] diff --git a/framework/vendure/api/operations/get-all-pages.ts b/framework/vendure/api/operations/get-all-pages.ts index 43170cda8..f76b7390f 100644 --- a/framework/vendure/api/operations/get-all-pages.ts +++ b/framework/vendure/api/operations/get-all-pages.ts @@ -4,9 +4,8 @@ import { Provider } from '../../../bigcommerce/api' export type Page = any -export type GetAllPagesResult< - T extends { pages: any[] } = { pages: Page[] } -> = T +export type GetAllPagesResult<T extends { pages: any[] } = { pages: Page[] }> = + T export default function getAllPagesOperation({ commerce, diff --git a/framework/vendure/auth/use-login.tsx b/framework/vendure/auth/use-login.tsx index f10e38d0f..a9b63e895 100644 --- a/framework/vendure/auth/use-login.tsx +++ b/framework/vendure/auth/use-login.tsx @@ -36,16 +36,18 @@ export const handler: MutationHook<LoginHook> = { return null }, - useHook: ({ fetch }) => () => { - const { revalidate } = useCustomer() + useHook: + ({ fetch }) => + () => { + const { revalidate } = useCustomer() - return useCallback( - async function login(input) { - const data = await fetch({ input }) - await revalidate() - return data - }, - [fetch, revalidate] - ) - }, + return useCallback( + async function login(input) { + const data = await fetch({ input }) + await revalidate() + return data + }, + [fetch, revalidate] + ) + }, } diff --git a/framework/vendure/auth/use-signup.tsx b/framework/vendure/auth/use-signup.tsx index 864b1a18a..4018baed6 100644 --- a/framework/vendure/auth/use-signup.tsx +++ b/framework/vendure/auth/use-signup.tsx @@ -54,16 +54,18 @@ export const handler: MutationHook<SignupHook> = { return null }, - useHook: ({ fetch }) => () => { - const { revalidate } = useCustomer() + useHook: + ({ fetch }) => + () => { + const { revalidate } = useCustomer() - return useCallback( - async function signup(input) { - const data = await fetch({ input }) - await revalidate() - return data - }, - [fetch, revalidate] - ) - }, + return useCallback( + async function signup(input) { + const data = await fetch({ input }) + await revalidate() + return data + }, + [fetch, revalidate] + ) + }, } diff --git a/framework/vendure/cart/use-add-item.tsx b/framework/vendure/cart/use-add-item.tsx index 88bff40e4..7c131eaea 100644 --- a/framework/vendure/cart/use-add-item.tsx +++ b/framework/vendure/cart/use-add-item.tsx @@ -37,16 +37,18 @@ export const handler: MutationHook<AddItemHook> = { } throw new CommerceError(addItemToOrder) }, - useHook: ({ fetch }) => () => { - const { mutate } = useCart() + useHook: + ({ fetch }) => + () => { + const { mutate } = useCart() - return useCallback( - async function addItem(input) { - const data = await fetch({ input }) - await mutate(data, false) - return data - }, - [fetch, mutate] - ) - }, + return useCallback( + async function addItem(input) { + const data = await fetch({ input }) + await mutate(data, false) + return data + }, + [fetch, mutate] + ) + }, } diff --git a/framework/vendure/cart/use-cart.tsx b/framework/vendure/cart/use-cart.tsx index 400df0c8c..de42036b8 100644 --- a/framework/vendure/cart/use-cart.tsx +++ b/framework/vendure/cart/use-cart.tsx @@ -23,22 +23,24 @@ export const handler: SWRHook<GetCartHook> = { const { activeOrder } = await fetch<ActiveOrderQuery>(options) return activeOrder ? normalizeCart(activeOrder) : null }, - useHook: ({ useData }) => (input) => { - const response = useData({ - swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, - }) + useHook: + ({ useData }) => + (input) => { + const response = useData({ + swrOptions: { revalidateOnFocus: false, ...input?.swrOptions }, + }) - return useMemo( - () => - Object.create(response, { - isEmpty: { - get() { - return (response.data?.lineItems.length ?? 0) <= 0 + return useMemo( + () => + Object.create(response, { + isEmpty: { + get() { + return (response.data?.lineItems.length ?? 0) <= 0 + }, + enumerable: true, }, - enumerable: true, - }, - }), - [response] - ) - }, + }), + [response] + ) + }, } diff --git a/framework/vendure/cart/use-remove-item.tsx b/framework/vendure/cart/use-remove-item.tsx index 39855e1ac..dde8e18b3 100644 --- a/framework/vendure/cart/use-remove-item.tsx +++ b/framework/vendure/cart/use-remove-item.tsx @@ -37,16 +37,18 @@ export const handler: MutationHook<RemoveItemHook> = { } throw new CommerceError(removeOrderLine) }, - useHook: ({ fetch }) => () => { - const { mutate } = useCart() + useHook: + ({ fetch }) => + () => { + const { mutate } = useCart() - return useCallback( - async function removeItem(input) { - const data = await fetch({ input: { itemId: input.id } }) - await mutate(data, false) - return data - }, - [fetch, mutate] - ) - }, + return useCallback( + async function removeItem(input) { + const data = await fetch({ input: { itemId: input.id } }) + await mutate(data, false) + return data + }, + [fetch, mutate] + ) + }, } diff --git a/framework/vendure/cart/use-update-item.tsx b/framework/vendure/cart/use-update-item.tsx index d04de944a..029966c5a 100644 --- a/framework/vendure/cart/use-update-item.tsx +++ b/framework/vendure/cart/use-update-item.tsx @@ -42,39 +42,41 @@ export const handler = { } throw new CommerceError(adjustOrderLine) }, - useHook: ({ fetch }: MutationHookContext<UpdateItemHook>) => ( - ctx: { - item?: LineItem - wait?: number - } = {} - ) => { - const { item } = ctx - const { mutate } = useCart() + useHook: + ({ fetch }: MutationHookContext<UpdateItemHook>) => + ( + ctx: { + item?: LineItem + wait?: number + } = {} + ) => { + const { item } = ctx + const { mutate } = useCart() - return useCallback( - async function addItem(input: UpdateItemActionInput) { - const itemId = item?.id - const productId = input.productId ?? item?.productId - const variantId = input.productId ?? item?.variantId - if (!itemId || !productId || !variantId) { - throw new ValidationError({ - message: 'Invalid input used for this operation', - }) - } - const data = await fetch({ - input: { - item: { - productId, - variantId, - quantity: input.quantity, + return useCallback( + async function addItem(input: UpdateItemActionInput) { + const itemId = item?.id + const productId = input.productId ?? item?.productId + const variantId = input.productId ?? item?.variantId + if (!itemId || !productId || !variantId) { + throw new ValidationError({ + message: 'Invalid input used for this operation', + }) + } + const data = await fetch({ + input: { + item: { + productId, + variantId, + quantity: input.quantity, + }, + itemId, }, - itemId, - }, - }) - await mutate(data, false) - return data - }, - [fetch, mutate] - ) - }, + }) + await mutate(data, false) + return data + }, + [fetch, mutate] + ) + }, } diff --git a/framework/vendure/customer/use-customer.tsx b/framework/vendure/customer/use-customer.tsx index 1d5a53d48..e9047485b 100644 --- a/framework/vendure/customer/use-customer.tsx +++ b/framework/vendure/customer/use-customer.tsx @@ -22,12 +22,14 @@ export const handler: SWRHook<CustomerHook> = { } as any) : null }, - useHook: ({ useData }) => (input) => { - return useData({ - swrOptions: { - revalidateOnFocus: false, - ...input?.swrOptions, - }, - }) - }, + useHook: + ({ useData }) => + (input) => { + return useData({ + swrOptions: { + revalidateOnFocus: false, + ...input?.swrOptions, + }, + }) + }, } diff --git a/framework/vendure/fetcher.ts b/framework/vendure/fetcher.ts index 26e1eec28..48b041801 100644 --- a/framework/vendure/fetcher.ts +++ b/framework/vendure/fetcher.ts @@ -48,6 +48,6 @@ export const fetcher: Fetcher = async ({ } return data } - + throw await getError(res) } diff --git a/framework/vendure/product/use-search.tsx b/framework/vendure/product/use-search.tsx index e34db2ac2..827b23623 100644 --- a/framework/vendure/product/use-search.tsx +++ b/framework/vendure/product/use-search.tsx @@ -45,18 +45,20 @@ export const handler: SWRHook<SearchProductsHook> = { products: search.items.map((item) => normalizeSearchResult(item)) ?? [], } }, - useHook: ({ useData }) => (input = {}) => { - return useData({ - input: [ - ['search', input.search], - ['categoryId', input.categoryId], - ['brandId', input.brandId], - ['sort', input.sort], - ], - swrOptions: { - revalidateOnFocus: false, - ...input.swrOptions, - }, - }) - }, + useHook: + ({ useData }) => + (input = {}) => { + return useData({ + input: [ + ['search', input.search], + ['categoryId', input.categoryId], + ['brandId', input.brandId], + ['sort', input.sort], + ], + swrOptions: { + revalidateOnFocus: false, + ...input.swrOptions, + }, + }) + }, } diff --git a/framework/vendure/utils/normalize.ts b/framework/vendure/utils/normalize.ts index 09c1c6e42..6071fae84 100644 --- a/framework/vendure/utils/normalize.ts +++ b/framework/vendure/utils/normalize.ts @@ -9,7 +9,13 @@ export function normalizeSearchResult(item: SearchResultFragment): Product { description: item.description, slug: item.slug, path: item.slug, - images: [{ url: item.productAsset?.preview + '?w=800&mode=crop' || '' }], + images: [ + { + url: item.productAsset?.preview + ? item.productAsset?.preview + '?w=800&mode=crop' + : '', + }, + ], variants: [], price: { value: (item.priceWithTax as any).min / 100, diff --git a/next-env.d.ts b/next-env.d.ts index 3db3c4df2..9bc3dd46b 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,5 +1,6 @@ /// <reference types="next" /> /// <reference types="next/types/global" /> +/// <reference types="next/image-types/global" /> // NOTE: This file should not be edited // see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/package-lock.json b/package-lock.json index b384eadb9..88455f5bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,10 @@ "license": "MIT", "dependencies": { "@moltin/sdk": "^8.8.1", + "@chec/commerce.js": "^2.8.0", "@react-spring/web": "^9.2.1", - "@vercel/fetch": "^6.1.0", + "@spree/storefront-api-v2-sdk": "^5.0.1", + "@vercel/fetch": "^6.1.1", "autoprefixer": "^10.2.6", "body-scroll-lock": "^3.1.5", "classnames": "^2.3.1", @@ -23,7 +25,7 @@ "lodash.debounce": "^4.0.8", "lodash.random": "^3.2.0", "lodash.throttle": "^4.1.1", - "next": "^11.1.2", + "next": "^12.0.3", "next-seo": "^4.26.0", "next-themes": "^0.0.14", "postcss": "^8.3.5", @@ -49,6 +51,7 @@ "@graphql-codegen/typescript-operations": "^1.18.1", "@next/bundle-analyzer": "^10.2.3", "@types/body-scroll-lock": "^2.6.1", + "@types/chec__commerce.js": "^2.8.4", "@types/cookie": "^0.4.0", "@types/js-cookie": "^2.2.6", "@types/lodash.debounce": "^4.0.6", @@ -1208,12 +1211,12 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz", - "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.8.tgz", + "integrity": "sha512-4dMD5QRBkumn45oweR0SxoNtt15oz3BUBAQ8cIx7HJqZTtE8zjpM0My8aHJHVnyf4XfRg6DNzaE1080WLBiC1w==", "dev": true, "dependencies": { - "core-js-pure": "^3.16.0", + "core-js-pure": "^3.15.0", "regenerator-runtime": "^0.13.4" }, "engines": { @@ -1284,6 +1287,15 @@ "to-fast-properties": "^2.0.0" } }, + "node_modules/@chec/commerce.js": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@chec/commerce.js/-/commerce.js-2.8.0.tgz", + "integrity": "sha512-OPBphT/hU33iDp52zzYOqz/oSXLhEuhGVUg2UNvYtmBW4eCNmtsM0dqW0+wu+6K0d6fZojurCBdVQMKb2R7l3g==", + "dependencies": { + "@babel/runtime": "^7.7.4", + "axios": "^0.21.1" + } + }, "node_modules/@csstools/convert-colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", @@ -2005,17 +2017,6 @@ "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==", "dev": true }, - "node_modules/@moltin/sdk": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@moltin/sdk/-/sdk-8.8.1.tgz", - "integrity": "sha512-B5ds4rNKsU4jcFYr+9ENntqVBqdlx2LMNrAW7aAcllN0ZljtsQpbDKupfdm6SUIiopJiQSV3UnlQaOK0UNfShg==", - "dependencies": { - "es6-promise": "^4.0.5", - "fetch-everywhere": "^1.0.5", - "inflected": "^2.0.1", - "node-localstorage": "^2.1.6" - } - }, "node_modules/@napi-rs/triples": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.0.3.tgz", @@ -2031,9 +2032,9 @@ } }, "node_modules/@next/env": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-11.1.2.tgz", - "integrity": "sha512-+fteyVdQ7C/OoulfcF6vd1Yk0FEli4453gr8kSFbU8sKseNSizYq6df5MKz/AjwLptsxrUeIkgBdAzbziyJ3mA==" + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.3.tgz", + "integrity": "sha512-QcdlpcwIH9dYcVlNAU+gXaqHA/omskbRlb+R3vN7LlB2EgLt+9WQwbokcHOsNyt4pI7kDM67W4tr9l7dWnlGdQ==" }, "node_modules/@next/eslint-plugin-next": { "version": "11.0.1", @@ -2042,14 +2043,14 @@ "dev": true }, "node_modules/@next/polyfill-module": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-11.1.2.tgz", - "integrity": "sha512-xZmixqADM3xxtqBV0TpAwSFzWJP0MOQzRfzItHXf1LdQHWb0yofHHC+7eOrPFic8+ZGz5y7BdPkkgR1S25OymA==" + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-12.0.3.tgz", + "integrity": "sha512-fgjVjdCk0Jq627d/N33oQIJjWrcKtzw6Dfa2PfypoIJ35/xFIKgs6mPyvq8cg3Ao5b7dEn9+Rw45PGjlY5e7JA==" }, "node_modules/@next/react-dev-overlay": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-11.1.2.tgz", - "integrity": "sha512-rDF/mGY2NC69mMg2vDqzVpCOlWqnwPUXB2zkARhvknUHyS6QJphPYv9ozoPJuoT/QBs49JJd9KWaAzVBvq920A==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-12.0.3.tgz", + "integrity": "sha512-gHfDEVHFeTUpQMcyytzvkuOu+5DQXjXbCbQHuavFftYrlHqXfzYFsa+wERff+g4/0IzEvcYVp3F4gdmynWfUog==", "dependencies": { "@babel/code-frame": "7.12.11", "anser": "1.4.9", @@ -2058,14 +2059,20 @@ "css.escape": "1.5.1", "data-uri-to-buffer": "3.0.1", "platform": "1.3.6", - "shell-quote": "1.7.2", + "shell-quote": "1.7.3", "source-map": "0.8.0-beta.0", "stacktrace-parser": "0.1.10", - "strip-ansi": "6.0.0" + "strip-ansi": "6.0.1" }, "peerDependencies": { "react": "^17.0.2", - "react-dom": "^17.0.2" + "react-dom": "^17.0.2", + "webpack": "^4 || ^5" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } } }, "node_modules/@next/react-dev-overlay/node_modules/@babel/code-frame": { @@ -2076,6 +2083,14 @@ "@babel/highlight": "^7.10.4" } }, + "node_modules/@next/react-dev-overlay/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/@next/react-dev-overlay/node_modules/chalk": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", @@ -2096,14 +2111,6 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, - "node_modules/@next/react-dev-overlay/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, "node_modules/@next/react-dev-overlay/node_modules/source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", @@ -2115,6 +2122,17 @@ "node": ">= 8" } }, + "node_modules/@next/react-dev-overlay/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@next/react-dev-overlay/node_modules/tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", @@ -2139,9 +2157,9 @@ } }, "node_modules/@next/react-refresh-utils": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-11.1.2.tgz", - "integrity": "sha512-hsoJmPfhVqjZ8w4IFzoo8SyECVnN+8WMnImTbTKrRUHOVJcYMmKLL7xf7T0ft00tWwAl/3f3Q3poWIN2Ueql/Q==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-12.0.3.tgz", + "integrity": "sha512-YPtlfvkYh/4MvNNm5w3uwo+1KPMg67snzr5CuexbRewsu2ITaF7f0bh0Jcayi20wztk8SgWjNz1bmF8j9qbWIw==", "peerDependencies": { "react-refresh": "0.8.3", "webpack": "^4 || ^5" @@ -2152,10 +2170,25 @@ } } }, + "node_modules/@next/swc-android-arm64": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.3.tgz", + "integrity": "sha512-40sOl9/50aamX0dEMrecqJQcUrRK47D7S9F66ulrZmz+5Ujp0lnP1rBOXngo0PZMecfU1tr7zbNubiAMDxfCxw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@next/swc-darwin-arm64": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-11.1.2.tgz", - "integrity": "sha512-hZuwOlGOwBZADA8EyDYyjx3+4JGIGjSHDHWrmpI7g5rFmQNltjlbaefAbiU5Kk7j3BUSDwt30quJRFv3nyJQ0w==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.3.tgz", + "integrity": "sha512-iKSe2hCMB51Ft41cNAxZk6St1rBlqSRtBSl4oO0zJlGu7bCxXCGCJ058/OLvYxcNWgz7ODOApObm3Yjv8XEvxg==", "cpu": [ "arm64" ], @@ -2168,9 +2201,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-11.1.2.tgz", - "integrity": "sha512-PGOp0E1GisU+EJJlsmJVGE+aPYD0Uh7zqgsrpD3F/Y3766Ptfbe1lEPPWnRDl+OzSSrSrX1lkyM/Jlmh5OwNvA==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.3.tgz", + "integrity": "sha512-/BcnfLyhIj4rgU3yVDfD8uXK2TcNYIdflYHKkjFxd3/J1GWOtBN31m0dB8fL0h5LdW11kzaXvVvab3f5ilkEww==", "cpu": [ "x64" ], @@ -2182,10 +2215,55 @@ "node": ">= 10" } }, + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.3.tgz", + "integrity": "sha512-2HNPhBJuN9L6JzqqqdYB4TKfFFmaKkpF0X3C1s83Xp61mR2sx8gOthHQtZqWDs4ZLnKZU0j2flGU1uuqpHPCpg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.3.tgz", + "integrity": "sha512-NXTON1XK7zi2i+A+bY1PVLi1g5b8cSwgzbnuVR0vAgOtU+3at7FqAKOWfuFIXY7eBEK65uu0Fu5gADhMj0uanQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.3.tgz", + "integrity": "sha512-8D0q22VavhcIl2ZQErEffgh5q6mChaG84uTluAoFfjwrgYtPDZX0M5StqkTZL6T5gA5RLHboNVoscIKGZWMojQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-11.1.2.tgz", - "integrity": "sha512-YcDHTJjn/8RqvyJVB6pvEKXihDcdrOwga3GfMv/QtVeLphTouY4BIcEUfrG5+26Nf37MP1ywN3RRl1TxpurAsQ==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.3.tgz", + "integrity": "sha512-4mkimH9nMzbuQfLmZ152NYSHdrII9AeqrkrHszexL1Lup2TLMPuxlXj55eVnyyeKFXRLlnqbCu7aOIND68RbOA==", "cpu": [ "x64" ], @@ -2197,14 +2275,29 @@ "node": ">= 10" } }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-11.1.2.tgz", - "integrity": "sha512-e/pIKVdB+tGQYa1cW3sAeHm8gzEri/HYLZHT4WZojrUxgWXqx8pk7S7Xs47uBcFTqBDRvK3EcQpPLf3XdVsDdg==", + "node_modules/@next/swc-linux-x64-musl": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.3.tgz", + "integrity": "sha512-MXvx+IDYoSsSM7KcwbQAVo9r+ZeklHeDQiUEmyRRzQE1Q4JvkWwMdPu/NfFdyxur+RfKjRoUoWFdPi5MBKTpkw==", "cpu": [ "x64" ], "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.3.tgz", + "integrity": "sha512-8GusumFZLp/mtVix+3JZVTGqzqntTsrTIFZ+GpcLMwyVjB3KkBwHiwJaa38WGleUinJSpJvgmhTWgppsiSKW3A==", + "cpu": [ + "arm64" + ], + "optional": true, "os": [ "win32" ], @@ -2212,12 +2305,34 @@ "node": ">= 10" } }, - "node_modules/@node-rs/helper": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@node-rs/helper/-/helper-1.2.1.tgz", - "integrity": "sha512-R5wEmm8nbuQU0YGGmYVjEc0OHtYsuXdpRG+Ut/3wZ9XAvQWyThN08bTh2cBJgoZxHQUPtvRfeQuxcAgLuiBISg==", - "dependencies": { - "@napi-rs/triples": "^1.0.3" + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.3.tgz", + "integrity": "sha512-mF7bkxSZ++QiB+E0HFqay/etvPF+ZFcCuG27lSwFIM00J+TE0IRqMyMx66vJ8g1h6khpwXPI0o2hrwIip/r8cQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.3.tgz", + "integrity": "sha512-eXFwyf46UFFggMQ3k2tJsOmB3SuKjWaSiZJH0tTDUsLw74lyqyzJqMCVA4yY0gWSlEnSjmX5nrCBknVZd3joaA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, "node_modules/@nodelib/fs.scandir": { @@ -2356,6 +2471,26 @@ "node": ">=6" } }, + "node_modules/@spree/storefront-api-v2-sdk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@spree/storefront-api-v2-sdk/-/storefront-api-v2-sdk-5.0.1.tgz", + "integrity": "sha512-4soQAydchJ9G1d3Xa96XRZ5Uq6IqE0amc8jEjL3H0QLv1NJEv1IK4OfbLK5VRMxv+7QcL/ewHEo2zHm6tqBizA==", + "engines": { + "node": ">=14.17.0" + }, + "peerDependencies": { + "axios": "^0.24.0", + "node-fetch": "^2.6.6" + }, + "peerDependenciesMeta": { + "axios": { + "optional": true + }, + "node-fetch": { + "optional": true + } + } + }, "node_modules/@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", @@ -2388,6 +2523,15 @@ "integrity": "sha512-PPFm/2A6LfKmSpvMg58gHtSqwwMChbcKKGhSCRIhY4MyFzhY8moAN6HrTCpOeZQUqkFdTFfMqr7njeqGLKt72Q==", "dev": true }, + "node_modules/@types/chec__commerce.js": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@types/chec__commerce.js/-/chec__commerce.js-2.8.4.tgz", + "integrity": "sha512-hyR2OXEB3gIRp/ESWOQaFStefBG+C5OdnkxGC1Gmp0ePVzl/wk5FyvaK5NsT1ddNC/y1YsmDAVPe+DArr6/9Jg==", + "dev": true, + "dependencies": { + "@types/chec__commerce.js": "*" + } + }, "node_modules/@types/cookie": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", @@ -2878,6 +3022,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, "engines": { "node": ">=8" } @@ -2917,47 +3062,6 @@ "node": ">= 8" } }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/are-we-there-yet/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/arg": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", @@ -3087,14 +3191,6 @@ "util": "^0.12.0" } }, - "node_modules/ast-types": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz", - "integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==", - "engines": { - "node": ">=4" - } - }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -3162,9 +3258,9 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz", + "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==", "engines": { "node": ">= 0.4" }, @@ -3173,14 +3269,22 @@ } }, "node_modules/axe-core": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.4.tgz", - "integrity": "sha512-4Hk6iSA/H90rtiPoCpSkeJxNWCPBf7szwVvaUqrPdxo0j2Y04suHK9jPKXaE3WI7OET6wBSwsWw7FDc1DBq7iQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.2.tgz", + "integrity": "sha512-5LMaDRWm8ZFPAEdzTYmgjjEdj1YnQcpfrVajO/sn/LhbpGp0Y0H64c2hLZI1gRMxfA+w1S71Uc/nHaOXgcCvGg==", "dev": true, "engines": { "node": ">=4" } }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, "node_modules/axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -3286,16 +3390,6 @@ "node": ">=8" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/bn.js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", @@ -3558,9 +3652,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001237", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz", - "integrity": "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==", + "version": "1.0.30001239", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz", + "integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/browserslist" @@ -3656,11 +3750,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -3745,17 +3834,18 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/color": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/color/-/color-4.0.1.tgz", - "integrity": "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.6.0" + "color-convert": "^1.9.1", + "color-string": "^1.5.4" } }, "node_modules/color-convert": { @@ -3775,14 +3865,27 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-string": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", - "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, "node_modules/colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", @@ -3827,16 +3930,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, "node_modules/constant-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", @@ -3875,9 +3968,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.0.tgz", - "integrity": "sha512-UEQk8AxyCYvNAs6baNoPqDADv7BX0AmBLGxVsrAifPPx/C8EAzV4Q+2ZUJqVzfI2TQQEZITnwUkWcHpgc/IubQ==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.15.2.tgz", + "integrity": "sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA==", "dev": true, "hasInstallScript": true, "funding": { @@ -3885,11 +3978,6 @@ "url": "https://opencollective.com/core-js" } }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, "node_modules/cosmiconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", @@ -4527,6 +4615,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, "engines": { "node": ">=4.0.0" } @@ -4575,11 +4664,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -4623,17 +4707,6 @@ "node": ">=8" } }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/detective": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", @@ -4760,9 +4833,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.3.752", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", - "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==" + "version": "1.3.755", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.755.tgz", + "integrity": "sha512-BJ1s/kuUuOeo1bF/EM2E4yqW9te0Hpof3wgwBx40AWJE18zsD1Tqo0kr7ijnOc+lRsrlrqKPauJAHqaxOItoUA==" }, "node_modules/elegant-spinner": { "version": "1.0.1", @@ -4837,6 +4910,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "dependencies": { "once": "^1.4.0" } @@ -4862,23 +4936,21 @@ } }, "node_modules/es-abstract": { - "version": "1.18.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", - "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", + "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-string": "^1.0.7", - "object-inspect": "^1.11.0", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -4913,11 +4985,6 @@ "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -5507,14 +5574,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -5613,32 +5672,6 @@ "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", "dev": true }, - "node_modules/fetch-everywhere": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fetch-everywhere/-/fetch-everywhere-1.0.5.tgz", - "integrity": "sha1-skl/R6V9kCazkHwJdWrPX0vTTos=", - "dependencies": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "node_modules/fetch-everywhere/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fetch-everywhere/node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -5807,6 +5840,25 @@ "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", @@ -5838,11 +5890,6 @@ "url": "https://www.patreon.com/infusion" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "node_modules/fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", @@ -5885,64 +5932,6 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -5999,26 +5988,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, "node_modules/glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -6293,25 +6262,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -6574,6 +6524,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -6593,11 +6544,6 @@ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, - "node_modules/inflected": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/inflected/-/inflected-2.1.0.tgz", - "integrity": "sha512-hAEKNxvHf2Iq3H60oMBHkB4wl5jn3TPF3+fXek/sRwAB5gP9xWs4r7aweSF95f99HFoz69pnZTcu8f0SIHV18w==" - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -6615,7 +6561,8 @@ "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "node_modules/inquirer": { "version": "7.3.3", @@ -6645,6 +6592,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -6668,12 +6616,11 @@ } }, "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6721,9 +6668,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "engines": { "node": ">= 0.4" }, @@ -6771,12 +6718,9 @@ } }, "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", + "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", "engines": { "node": ">= 0.4" }, @@ -6877,12 +6821,12 @@ "dev": true }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "dependencies": { "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6922,12 +6866,9 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", "engines": { "node": ">= 0.4" }, @@ -6950,15 +6891,15 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", - "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", + "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", "dependencies": { - "available-typed-arrays": "^1.0.5", + "available-typed-arrays": "^1.0.2", "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", + "es-abstract": "^1.18.0-next.2", "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0" + "has-symbols": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7009,11 +6950,6 @@ "node": ">=0.10.0" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -8359,11 +8295,6 @@ "node": ">=10" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "node_modules/modern-normalize": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", @@ -8397,19 +8328,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "node_modules/native-url": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.3.4.tgz", - "integrity": "sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA==", - "dependencies": { - "querystring": "^0.2.0" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -8417,19 +8335,19 @@ "dev": true }, "node_modules/next": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/next/-/next-11.1.2.tgz", - "integrity": "sha512-azEYL0L+wFjv8lstLru3bgvrzPvK0P7/bz6B/4EJ9sYkXeW8r5Bjh78D/Ol7VOg0EIPz0CXoe72hzAlSAXo9hw==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/next/-/next-12.0.3.tgz", + "integrity": "sha512-GGdhTBcerdMZbitrO67IVetmB+AHa2X69xrkXKClUT8SRu8pEVto/2QMSnfI+uYc5czCUWPsVtVY3aMoMRMaCA==", "dependencies": { - "@babel/runtime": "7.15.3", + "@babel/runtime": "7.15.4", "@hapi/accept": "5.0.2", - "@next/env": "11.1.2", - "@next/polyfill-module": "11.1.2", - "@next/react-dev-overlay": "11.1.2", - "@next/react-refresh-utils": "11.1.2", - "@node-rs/helper": "1.2.1", + "@napi-rs/triples": "1.0.3", + "@next/env": "12.0.3", + "@next/polyfill-module": "12.0.3", + "@next/react-dev-overlay": "12.0.3", + "@next/react-refresh-utils": "12.0.3", + "acorn": "8.5.0", "assert": "2.0.0", - "ast-types": "0.13.2", "browserify-zlib": "0.2.0", "browserslist": "4.16.6", "buffer": "5.6.0", @@ -8442,29 +8360,28 @@ "domain-browser": "4.19.0", "encoding": "0.1.13", "etag": "1.8.1", + "events": "3.3.0", "find-cache-dir": "3.3.1", "get-orientation": "1.1.2", "https-browserify": "1.0.0", "image-size": "1.0.0", "jest-worker": "27.0.0-next.5", - "native-url": "0.3.4", "node-fetch": "2.6.1", "node-html-parser": "1.4.9", - "node-libs-browser": "^2.2.1", "os-browserify": "0.3.0", "p-limit": "3.1.0", "path-browserify": "1.0.1", - "pnp-webpack-plugin": "1.6.4", "postcss": "8.2.15", "process": "0.11.10", "querystring-es3": "0.2.1", "raw-body": "2.4.1", "react-is": "17.0.2", "react-refresh": "0.8.3", + "regenerator-runtime": "0.13.4", "stream-browserify": "3.0.0", "stream-http": "3.1.1", "string_decoder": "1.3.0", - "styled-jsx": "4.0.1", + "styled-jsx": "5.0.0-beta.3", "timers-browserify": "2.0.12", "tty-browserify": "0.0.1", "use-subscription": "1.5.1", @@ -8476,19 +8393,26 @@ "next": "dist/bin/next" }, "engines": { - "node": ">=12.0.0" + "node": ">=12.22.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "11.1.2", - "@next/swc-darwin-x64": "11.1.2", - "@next/swc-linux-x64-gnu": "11.1.2", - "@next/swc-win32-x64-msvc": "11.1.2" + "@next/swc-android-arm64": "12.0.3", + "@next/swc-darwin-arm64": "12.0.3", + "@next/swc-darwin-x64": "12.0.3", + "@next/swc-linux-arm-gnueabihf": "12.0.3", + "@next/swc-linux-arm64-gnu": "12.0.3", + "@next/swc-linux-arm64-musl": "12.0.3", + "@next/swc-linux-x64-gnu": "12.0.3", + "@next/swc-linux-x64-musl": "12.0.3", + "@next/swc-win32-arm64-msvc": "12.0.3", + "@next/swc-win32-ia32-msvc": "12.0.3", + "@next/swc-win32-x64-msvc": "12.0.3" }, "peerDependencies": { "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0", + "react": "^17.0.2 || ^18.0.0", + "react-dom": "^17.0.2 || ^18.0.0", "sass": "^1.3.0" }, "peerDependenciesMeta": { @@ -8524,9 +8448,9 @@ } }, "node_modules/next/node_modules/@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -8534,6 +8458,17 @@ "node": ">=6.9.0" } }, + "node_modules/next/node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/next/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -8643,6 +8578,11 @@ "node": ">=8.10.0" } }, + "node_modules/next/node_modules/regenerator-runtime": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.4.tgz", + "integrity": "sha512-plpwicqEzfEyTQohIKktWigcLzmNStMGwbOUbykx51/29Z3JOGYldaaNGK7ngNXV+UcoqvIMmloZ48Sr74sd+g==" + }, "node_modules/next/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8672,27 +8612,6 @@ "tslib": "^2.0.3" } }, - "node_modules/node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-addon-api": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.2.0.tgz", - "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" - }, "node_modules/node-emoji": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", @@ -8702,9 +8621,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", - "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -8726,159 +8645,6 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "node_modules/node-libs-browser/node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "node_modules/node-libs-browser/node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dependencies": { - "inherits": "2.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/node-libs-browser/node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/node-libs-browser/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/node-libs-browser/node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "node_modules/node-libs-browser/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/node-libs-browser/node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/node-libs-browser/node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/node-libs-browser/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/node-libs-browser/node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "node_modules/node-libs-browser/node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/node-localstorage": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-2.2.1.tgz", - "integrity": "sha512-vv8fJuOUCCvSPjDjBLlMqYMHob4aGjkmrkaE42/mZr0VT+ZAU10jRF8oTnX9+pgU9/vYJ8P7YT3Vd6ajkmzSCw==", - "dependencies": { - "write-file-atomic": "^1.1.4" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/node-releases": { "version": "1.1.73", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", @@ -8942,17 +8708,6 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, "node_modules/nullthrows": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", @@ -8969,6 +8724,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8990,9 +8746,9 @@ } }, "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9497,17 +9253,6 @@ "semver-compare": "^1.0.0" } }, - "node_modules/pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "dependencies": { - "ts-pnp": "^1.1.6" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/postcss": { "version": "8.3.5", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", @@ -13292,32 +13037,6 @@ "node": ">=6.14.4" } }, - "node_modules/prebuild-install": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", - "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -13364,11 +13083,6 @@ "node": ">= 0.6.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -13426,15 +13140,19 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } }, "node_modules/purgecss": { "version": "4.0.3", @@ -13495,15 +13213,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", @@ -13585,6 +13294,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -13599,6 +13309,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -14200,6 +13911,7 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -14220,6 +13932,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -14230,7 +13943,8 @@ "node_modules/semver/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/sentence-case": { "version": "3.0.4", @@ -14246,7 +13960,8 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "node_modules/setimmediate": { "version": "1.0.5", @@ -14270,28 +13985,6 @@ "sha.js": "bin.js" } }, - "node_modules/sharp": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.29.1.tgz", - "integrity": "sha512-DpgdAny9TuS+oWCQ7MRS8XyY9x6q1+yW3a5wNx0J3HrGuB/Jot/8WcT+lElHY9iJu2pwtegSGxqMaqFiMhs4rQ==", - "hasInstallScript": true, - "dependencies": { - "color": "^4.0.1", - "detect-libc": "^1.0.3", - "node-addon-api": "^4.1.0", - "prebuild-install": "^6.1.4", - "semver": "^7.3.5", - "simple-get": "^3.1.0", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -14314,14 +14007,9 @@ } }, "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "node_modules/shopify-buy": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/shopify-buy/-/shopify-buy-2.12.0.tgz", - "integrity": "sha512-L0fo8fBDO31v9dAlVmLlIuJQnfwexGvceJ+A8hhIpovvfGh4GVGDId3k9PCWOqSzVHQBvYLdeGccxqjAOlbRlg==" + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" }, "node_modules/side-channel": { "version": "1.0.4", @@ -14339,7 +14027,8 @@ "node_modules/signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true }, "node_modules/signedsource": { "version": "1.0.0", @@ -14347,57 +14036,6 @@ "integrity": "sha1-HdrOSYF5j5O9gzlzgD2A1S6TrWo=", "dev": true }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/simple-get/node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -14448,14 +14086,6 @@ "node": ">=8" } }, - "node_modules/slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "engines": { - "node": "*" - } - }, "node_modules/snake-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", @@ -14725,6 +14355,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.0" }, @@ -14763,9 +14394,9 @@ } }, "node_modules/stripe": { - "version": "8.184.0", - "resolved": "https://registry.npmjs.org/stripe/-/stripe-8.184.0.tgz", - "integrity": "sha512-ZUdvyX+sizTxXLEbUjgTShrulSWSkMIt7hIKdAkhnajYrHdzVtdmhBJl8sQbR9chMVox3Ig5ohilyeIrvcCE2g==", + "version": "8.176.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-8.176.0.tgz", + "integrity": "sha512-0KCDo8TWFgeNWU7cPaqdjO2u2OSth0cmWYZmA7xsuxRCk7/lgWbJ/UbeSphx74cCIjFCmGuzDoNuNxqon9lEbg==", "dependencies": { "@types/node": ">=8.1.0", "qs": "^6.6.0" @@ -14775,9 +14406,9 @@ } }, "node_modules/styled-jsx": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-4.0.1.tgz", - "integrity": "sha512-Gcb49/dRB1k8B4hdK8vhW27Rlb2zujCk1fISrizCcToIs+55B4vmUM0N9Gi4nnVfFZWe55jRdWpAqH1ldAKWvQ==", + "version": "5.0.0-beta.3", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.0-beta.3.tgz", + "integrity": "sha512-HtDDGSFPvmjHIqWf9n8Oo54tAoY/DTplvlyOH2+YOtD80Sp31Ap8ffSmxhgk5EkUoJ7xepdXMGT650mSffWuRA==", "dependencies": { "@babel/plugin-syntax-jsx": "7.14.5", "@babel/types": "7.15.0", @@ -15079,28 +14710,6 @@ "postcss": "^8.0.9" } }, - "node_modules/tailwindcss/node_modules/color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, - "node_modules/tailwindcss/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/tailwindcss/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, "node_modules/tailwindcss/node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -15146,32 +14755,6 @@ "node": ">=8.17.0" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -15216,11 +14799,6 @@ "node": ">=0.6.0" } }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -15309,19 +14887,6 @@ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "devOptional": true }, - "node_modules/ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", - "engines": { - "node": ">=6" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/tsconfig-paths": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz", @@ -15365,17 +14930,6 @@ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -15528,24 +15082,6 @@ "punycode": "^2.1.0" } }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -15558,20 +15094,6 @@ "node": ">=4" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "node_modules/url/node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/use-subscription": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", @@ -15784,16 +15306,17 @@ "dev": true }, "node_modules/which-typed-array": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", - "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.7" + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" }, "engines": { "node": ">= 0.4" @@ -15802,53 +15325,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -15880,16 +15356,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "node_modules/write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - }, "node_modules/ws": { "version": "7.4.5", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", @@ -16824,12 +16290,12 @@ } }, "@babel/runtime-corejs3": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz", - "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==", + "version": "7.14.8", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.8.tgz", + "integrity": "sha512-4dMD5QRBkumn45oweR0SxoNtt15oz3BUBAQ8cIx7HJqZTtE8zjpM0My8aHJHVnyf4XfRg6DNzaE1080WLBiC1w==", "dev": true, "requires": { - "core-js-pure": "^3.16.0", + "core-js-pure": "^3.15.0", "regenerator-runtime": "^0.13.4" } }, @@ -16887,6 +16353,15 @@ "to-fast-properties": "^2.0.0" } }, + "@chec/commerce.js": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@chec/commerce.js/-/commerce.js-2.8.0.tgz", + "integrity": "sha512-OPBphT/hU33iDp52zzYOqz/oSXLhEuhGVUg2UNvYtmBW4eCNmtsM0dqW0+wu+6K0d6fZojurCBdVQMKb2R7l3g==", + "requires": { + "@babel/runtime": "^7.7.4", + "axios": "^0.21.1" + } + }, "@csstools/convert-colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", @@ -17519,17 +16994,6 @@ "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==", "dev": true }, - "@moltin/sdk": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/@moltin/sdk/-/sdk-8.8.1.tgz", - "integrity": "sha512-B5ds4rNKsU4jcFYr+9ENntqVBqdlx2LMNrAW7aAcllN0ZljtsQpbDKupfdm6SUIiopJiQSV3UnlQaOK0UNfShg==", - "requires": { - "es6-promise": "^4.0.5", - "fetch-everywhere": "^1.0.5", - "inflected": "^2.0.1", - "node-localstorage": "^2.1.6" - } - }, "@napi-rs/triples": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.0.3.tgz", @@ -17545,9 +17009,9 @@ } }, "@next/env": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-11.1.2.tgz", - "integrity": "sha512-+fteyVdQ7C/OoulfcF6vd1Yk0FEli4453gr8kSFbU8sKseNSizYq6df5MKz/AjwLptsxrUeIkgBdAzbziyJ3mA==" + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.0.3.tgz", + "integrity": "sha512-QcdlpcwIH9dYcVlNAU+gXaqHA/omskbRlb+R3vN7LlB2EgLt+9WQwbokcHOsNyt4pI7kDM67W4tr9l7dWnlGdQ==" }, "@next/eslint-plugin-next": { "version": "11.0.1", @@ -17556,14 +17020,14 @@ "dev": true }, "@next/polyfill-module": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-11.1.2.tgz", - "integrity": "sha512-xZmixqADM3xxtqBV0TpAwSFzWJP0MOQzRfzItHXf1LdQHWb0yofHHC+7eOrPFic8+ZGz5y7BdPkkgR1S25OymA==" + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-12.0.3.tgz", + "integrity": "sha512-fgjVjdCk0Jq627d/N33oQIJjWrcKtzw6Dfa2PfypoIJ35/xFIKgs6mPyvq8cg3Ao5b7dEn9+Rw45PGjlY5e7JA==" }, "@next/react-dev-overlay": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-11.1.2.tgz", - "integrity": "sha512-rDF/mGY2NC69mMg2vDqzVpCOlWqnwPUXB2zkARhvknUHyS6QJphPYv9ozoPJuoT/QBs49JJd9KWaAzVBvq920A==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-12.0.3.tgz", + "integrity": "sha512-gHfDEVHFeTUpQMcyytzvkuOu+5DQXjXbCbQHuavFftYrlHqXfzYFsa+wERff+g4/0IzEvcYVp3F4gdmynWfUog==", "requires": { "@babel/code-frame": "7.12.11", "anser": "1.4.9", @@ -17572,10 +17036,10 @@ "css.escape": "1.5.1", "data-uri-to-buffer": "3.0.1", "platform": "1.3.6", - "shell-quote": "1.7.2", + "shell-quote": "1.7.3", "source-map": "0.8.0-beta.0", "stacktrace-parser": "0.1.10", - "strip-ansi": "6.0.0" + "strip-ansi": "6.0.1" }, "dependencies": { "@babel/code-frame": { @@ -17586,6 +17050,11 @@ "@babel/highlight": "^7.10.4" } }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, "chalk": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", @@ -17600,11 +17069,6 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, "source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", @@ -17613,6 +17077,14 @@ "whatwg-url": "^7.0.0" } }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, "tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", @@ -17639,43 +17111,77 @@ } }, "@next/react-refresh-utils": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-11.1.2.tgz", - "integrity": "sha512-hsoJmPfhVqjZ8w4IFzoo8SyECVnN+8WMnImTbTKrRUHOVJcYMmKLL7xf7T0ft00tWwAl/3f3Q3poWIN2Ueql/Q==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-12.0.3.tgz", + "integrity": "sha512-YPtlfvkYh/4MvNNm5w3uwo+1KPMg67snzr5CuexbRewsu2ITaF7f0bh0Jcayi20wztk8SgWjNz1bmF8j9qbWIw==", "requires": {} }, + "@next/swc-android-arm64": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.0.3.tgz", + "integrity": "sha512-40sOl9/50aamX0dEMrecqJQcUrRK47D7S9F66ulrZmz+5Ujp0lnP1rBOXngo0PZMecfU1tr7zbNubiAMDxfCxw==", + "optional": true + }, "@next/swc-darwin-arm64": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-11.1.2.tgz", - "integrity": "sha512-hZuwOlGOwBZADA8EyDYyjx3+4JGIGjSHDHWrmpI7g5rFmQNltjlbaefAbiU5Kk7j3BUSDwt30quJRFv3nyJQ0w==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.0.3.tgz", + "integrity": "sha512-iKSe2hCMB51Ft41cNAxZk6St1rBlqSRtBSl4oO0zJlGu7bCxXCGCJ058/OLvYxcNWgz7ODOApObm3Yjv8XEvxg==", "optional": true }, "@next/swc-darwin-x64": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-11.1.2.tgz", - "integrity": "sha512-PGOp0E1GisU+EJJlsmJVGE+aPYD0Uh7zqgsrpD3F/Y3766Ptfbe1lEPPWnRDl+OzSSrSrX1lkyM/Jlmh5OwNvA==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.0.3.tgz", + "integrity": "sha512-/BcnfLyhIj4rgU3yVDfD8uXK2TcNYIdflYHKkjFxd3/J1GWOtBN31m0dB8fL0h5LdW11kzaXvVvab3f5ilkEww==", + "optional": true + }, + "@next/swc-linux-arm-gnueabihf": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.0.3.tgz", + "integrity": "sha512-2HNPhBJuN9L6JzqqqdYB4TKfFFmaKkpF0X3C1s83Xp61mR2sx8gOthHQtZqWDs4ZLnKZU0j2flGU1uuqpHPCpg==", + "optional": true + }, + "@next/swc-linux-arm64-gnu": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.0.3.tgz", + "integrity": "sha512-NXTON1XK7zi2i+A+bY1PVLi1g5b8cSwgzbnuVR0vAgOtU+3at7FqAKOWfuFIXY7eBEK65uu0Fu5gADhMj0uanQ==", + "optional": true + }, + "@next/swc-linux-arm64-musl": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.0.3.tgz", + "integrity": "sha512-8D0q22VavhcIl2ZQErEffgh5q6mChaG84uTluAoFfjwrgYtPDZX0M5StqkTZL6T5gA5RLHboNVoscIKGZWMojQ==", "optional": true }, "@next/swc-linux-x64-gnu": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-11.1.2.tgz", - "integrity": "sha512-YcDHTJjn/8RqvyJVB6pvEKXihDcdrOwga3GfMv/QtVeLphTouY4BIcEUfrG5+26Nf37MP1ywN3RRl1TxpurAsQ==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.0.3.tgz", + "integrity": "sha512-4mkimH9nMzbuQfLmZ152NYSHdrII9AeqrkrHszexL1Lup2TLMPuxlXj55eVnyyeKFXRLlnqbCu7aOIND68RbOA==", + "optional": true + }, + "@next/swc-linux-x64-musl": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.0.3.tgz", + "integrity": "sha512-MXvx+IDYoSsSM7KcwbQAVo9r+ZeklHeDQiUEmyRRzQE1Q4JvkWwMdPu/NfFdyxur+RfKjRoUoWFdPi5MBKTpkw==", + "optional": true + }, + "@next/swc-win32-arm64-msvc": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.0.3.tgz", + "integrity": "sha512-8GusumFZLp/mtVix+3JZVTGqzqntTsrTIFZ+GpcLMwyVjB3KkBwHiwJaa38WGleUinJSpJvgmhTWgppsiSKW3A==", + "optional": true + }, + "@next/swc-win32-ia32-msvc": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.0.3.tgz", + "integrity": "sha512-mF7bkxSZ++QiB+E0HFqay/etvPF+ZFcCuG27lSwFIM00J+TE0IRqMyMx66vJ8g1h6khpwXPI0o2hrwIip/r8cQ==", "optional": true }, "@next/swc-win32-x64-msvc": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-11.1.2.tgz", - "integrity": "sha512-e/pIKVdB+tGQYa1cW3sAeHm8gzEri/HYLZHT4WZojrUxgWXqx8pk7S7Xs47uBcFTqBDRvK3EcQpPLf3XdVsDdg==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.0.3.tgz", + "integrity": "sha512-eXFwyf46UFFggMQ3k2tJsOmB3SuKjWaSiZJH0tTDUsLw74lyqyzJqMCVA4yY0gWSlEnSjmX5nrCBknVZd3joaA==", "optional": true }, - "@node-rs/helper": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@node-rs/helper/-/helper-1.2.1.tgz", - "integrity": "sha512-R5wEmm8nbuQU0YGGmYVjEc0OHtYsuXdpRG+Ut/3wZ9XAvQWyThN08bTh2cBJgoZxHQUPtvRfeQuxcAgLuiBISg==", - "requires": { - "@napi-rs/triples": "^1.0.3" - } - }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -17775,6 +17281,12 @@ "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "dev": true }, + "@spree/storefront-api-v2-sdk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@spree/storefront-api-v2-sdk/-/storefront-api-v2-sdk-5.0.1.tgz", + "integrity": "sha512-4soQAydchJ9G1d3Xa96XRZ5Uq6IqE0amc8jEjL3H0QLv1NJEv1IK4OfbLK5VRMxv+7QcL/ewHEo2zHm6tqBizA==", + "requires": {} + }, "@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", @@ -17801,6 +17313,15 @@ "integrity": "sha512-PPFm/2A6LfKmSpvMg58gHtSqwwMChbcKKGhSCRIhY4MyFzhY8moAN6HrTCpOeZQUqkFdTFfMqr7njeqGLKt72Q==", "dev": true }, + "@types/chec__commerce.js": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/@types/chec__commerce.js/-/chec__commerce.js-2.8.4.tgz", + "integrity": "sha512-hyR2OXEB3gIRp/ESWOQaFStefBG+C5OdnkxGC1Gmp0ePVzl/wk5FyvaK5NsT1ddNC/y1YsmDAVPe+DArr6/9Jg==", + "dev": true, + "requires": { + "@types/chec__commerce.js": "*" + } + }, "@types/cookie": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", @@ -18202,7 +17723,8 @@ "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, "ansi-styles": { "version": "4.3.0", @@ -18227,49 +17749,6 @@ "picomatch": "^2.0.4" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "arg": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz", @@ -18377,11 +17856,6 @@ "util": "^0.12.0" } }, - "ast-types": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz", - "integrity": "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==" - }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -18427,16 +17901,24 @@ } }, "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz", + "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==" }, "axe-core": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.4.tgz", - "integrity": "sha512-4Hk6iSA/H90rtiPoCpSkeJxNWCPBf7szwVvaUqrPdxo0j2Y04suHK9jPKXaE3WI7OET6wBSwsWw7FDc1DBq7iQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.2.tgz", + "integrity": "sha512-5LMaDRWm8ZFPAEdzTYmgjjEdj1YnQcpfrVajO/sn/LhbpGp0Y0H64c2hLZI1gRMxfA+w1S71Uc/nHaOXgcCvGg==", "dev": true }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, "axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -18519,16 +18001,6 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "bn.js": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", @@ -18753,9 +18225,9 @@ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" }, "caniuse-lite": { - "version": "1.0.30001237", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz", - "integrity": "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==" + "version": "1.0.30001239", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz", + "integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==" }, "capital-case": { "version": "1.0.4", @@ -18836,11 +18308,6 @@ "readdirp": "~3.6.0" } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -18909,15 +18376,31 @@ "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, "color": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/color/-/color-4.0.1.tgz", - "integrity": "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", "requires": { - "color-convert": "^2.0.1", - "color-string": "^1.6.0" + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + } } }, "color-convert": { @@ -18934,9 +18417,9 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-string": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", - "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -18977,16 +18460,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, "constant-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", @@ -19024,16 +18497,11 @@ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "core-js-pure": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.0.tgz", - "integrity": "sha512-UEQk8AxyCYvNAs6baNoPqDADv7BX0AmBLGxVsrAifPPx/C8EAzV4Q+2ZUJqVzfI2TQQEZITnwUkWcHpgc/IubQ==", + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.15.2.tgz", + "integrity": "sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA==", "dev": true }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, "cosmiconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", @@ -19538,7 +19006,8 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true }, "deep-is": { "version": "0.1.3", @@ -19575,11 +19044,6 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -19611,11 +19075,6 @@ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" - }, "detective": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", @@ -19720,9 +19179,9 @@ } }, "electron-to-chromium": { - "version": "1.3.752", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz", - "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==" + "version": "1.3.755", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.755.tgz", + "integrity": "sha512-BJ1s/kuUuOeo1bF/EM2E4yqW9te0Hpof3wgwBx40AWJE18zsD1Tqo0kr7ijnOc+lRsrlrqKPauJAHqaxOItoUA==" }, "elegant-spinner": { "version": "1.0.1", @@ -19789,6 +19248,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "requires": { "once": "^1.4.0" } @@ -19811,23 +19271,21 @@ } }, "es-abstract": { - "version": "1.18.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", - "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", + "is-callable": "^1.2.3", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-string": "^1.0.7", - "object-inspect": "^1.11.0", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -19850,11 +19308,6 @@ "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -20311,11 +19764,6 @@ "strip-final-newline": "^2.0.0" } }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" - }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -20402,31 +19850,6 @@ "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", "dev": true }, - "fetch-everywhere": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fetch-everywhere/-/fetch-everywhere-1.0.5.tgz", - "integrity": "sha1-skl/R6V9kCazkHwJdWrPX0vTTos=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - }, - "dependencies": { - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - } - } - }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -20550,6 +19973,11 @@ "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", "dev": true }, + "follow-redirects": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", + "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==" + }, "foreach": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", @@ -20571,11 +19999,6 @@ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==" }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", @@ -20608,54 +20031,6 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -20697,20 +20072,6 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, "glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -20913,19 +20274,6 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -21118,7 +20466,8 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, "indent-string": { "version": "3.2.0", @@ -21132,11 +20481,6 @@ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, - "inflected": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/inflected/-/inflected-2.1.0.tgz", - "integrity": "sha512-hAEKNxvHf2Iq3H60oMBHkB4wl5jn3TPF3+fXek/sRwAB5gP9xWs4r7aweSF95f99HFoz69pnZTcu8f0SIHV18w==" - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -21154,7 +20498,8 @@ "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "inquirer": { "version": "7.3.3", @@ -21181,6 +20526,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, "requires": { "get-intrinsic": "^1.1.0", "has": "^1.0.3", @@ -21198,12 +20544,11 @@ } }, "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.0" } }, "is-arrayish": { @@ -21233,9 +20578,9 @@ } }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" }, "is-core-module": { "version": "2.5.0", @@ -21262,12 +20607,9 @@ "dev": true }, "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", + "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==" }, "is-glob": { "version": "4.0.1", @@ -21332,12 +20674,12 @@ "dev": true }, "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "requires": { "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "has-symbols": "^1.0.2" } }, "is-regexp": { @@ -21362,12 +20704,9 @@ "dev": true }, "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" }, "is-symbol": { "version": "1.0.4", @@ -21378,15 +20717,15 @@ } }, "is-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz", - "integrity": "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", + "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", "requires": { - "available-typed-arrays": "^1.0.5", + "available-typed-arrays": "^1.0.2", "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", + "es-abstract": "^1.18.0-next.2", "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0" + "has-symbols": "^1.0.1" } }, "is-unc-path": { @@ -21419,11 +20758,6 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -22499,11 +21833,6 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "modern-normalize": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", @@ -22525,19 +21854,6 @@ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "native-url": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.3.4.tgz", - "integrity": "sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA==", - "requires": { - "querystring": "^0.2.0" - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -22545,23 +21861,30 @@ "dev": true }, "next": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/next/-/next-11.1.2.tgz", - "integrity": "sha512-azEYL0L+wFjv8lstLru3bgvrzPvK0P7/bz6B/4EJ9sYkXeW8r5Bjh78D/Ol7VOg0EIPz0CXoe72hzAlSAXo9hw==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/next/-/next-12.0.3.tgz", + "integrity": "sha512-GGdhTBcerdMZbitrO67IVetmB+AHa2X69xrkXKClUT8SRu8pEVto/2QMSnfI+uYc5czCUWPsVtVY3aMoMRMaCA==", "requires": { - "@babel/runtime": "7.15.3", + "@babel/runtime": "7.15.4", "@hapi/accept": "5.0.2", - "@next/env": "11.1.2", - "@next/polyfill-module": "11.1.2", - "@next/react-dev-overlay": "11.1.2", - "@next/react-refresh-utils": "11.1.2", - "@next/swc-darwin-arm64": "11.1.2", - "@next/swc-darwin-x64": "11.1.2", - "@next/swc-linux-x64-gnu": "11.1.2", - "@next/swc-win32-x64-msvc": "11.1.2", - "@node-rs/helper": "1.2.1", + "@napi-rs/triples": "1.0.3", + "@next/env": "12.0.3", + "@next/polyfill-module": "12.0.3", + "@next/react-dev-overlay": "12.0.3", + "@next/react-refresh-utils": "12.0.3", + "@next/swc-android-arm64": "12.0.3", + "@next/swc-darwin-arm64": "12.0.3", + "@next/swc-darwin-x64": "12.0.3", + "@next/swc-linux-arm-gnueabihf": "12.0.3", + "@next/swc-linux-arm64-gnu": "12.0.3", + "@next/swc-linux-arm64-musl": "12.0.3", + "@next/swc-linux-x64-gnu": "12.0.3", + "@next/swc-linux-x64-musl": "12.0.3", + "@next/swc-win32-arm64-msvc": "12.0.3", + "@next/swc-win32-ia32-msvc": "12.0.3", + "@next/swc-win32-x64-msvc": "12.0.3", + "acorn": "8.5.0", "assert": "2.0.0", - "ast-types": "0.13.2", "browserify-zlib": "0.2.0", "browserslist": "4.16.6", "buffer": "5.6.0", @@ -22574,29 +21897,28 @@ "domain-browser": "4.19.0", "encoding": "0.1.13", "etag": "1.8.1", + "events": "3.3.0", "find-cache-dir": "3.3.1", "get-orientation": "1.1.2", "https-browserify": "1.0.0", "image-size": "1.0.0", "jest-worker": "27.0.0-next.5", - "native-url": "0.3.4", "node-fetch": "2.6.1", "node-html-parser": "1.4.9", - "node-libs-browser": "^2.2.1", "os-browserify": "0.3.0", "p-limit": "3.1.0", "path-browserify": "1.0.1", - "pnp-webpack-plugin": "1.6.4", "postcss": "8.2.15", "process": "0.11.10", "querystring-es3": "0.2.1", "raw-body": "2.4.1", "react-is": "17.0.2", "react-refresh": "0.8.3", + "regenerator-runtime": "0.13.4", "stream-browserify": "3.0.0", "stream-http": "3.1.1", "string_decoder": "1.3.0", - "styled-jsx": "4.0.1", + "styled-jsx": "5.0.0-beta.3", "timers-browserify": "2.0.12", "tty-browserify": "0.0.1", "use-subscription": "1.5.1", @@ -22606,13 +21928,18 @@ }, "dependencies": { "@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", "requires": { "regenerator-runtime": "^0.13.4" } }, + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==" + }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -22692,6 +22019,11 @@ "picomatch": "^2.2.1" } }, + "regenerator-runtime": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.4.tgz", + "integrity": "sha512-plpwicqEzfEyTQohIKktWigcLzmNStMGwbOUbykx51/29Z3JOGYldaaNGK7ngNXV+UcoqvIMmloZ48Sr74sd+g==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -22729,26 +22061,6 @@ "tslib": "^2.0.3" } }, - "node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "requires": { - "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "node-addon-api": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.2.0.tgz", - "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" - }, "node-emoji": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", @@ -22758,9 +22070,9 @@ } }, "node-fetch": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", - "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", "requires": { "whatwg-url": "^5.0.0" } @@ -22779,156 +22091,6 @@ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "requires": { - "inherits": "2.0.3" - } - } - } - }, - "node-localstorage": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-2.2.1.tgz", - "integrity": "sha512-vv8fJuOUCCvSPjDjBLlMqYMHob4aGjkmrkaE42/mZr0VT+ZAU10jRF8oTnX9+pgU9/vYJ8P7YT3Vd6ajkmzSCw==", - "requires": { - "write-file-atomic": "^1.1.4" - } - }, "node-releases": { "version": "1.1.73", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", @@ -22979,17 +22141,6 @@ "path-key": "^3.0.0" } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, "nullthrows": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", @@ -23005,7 +22156,8 @@ "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true }, "object-assign": { "version": "4.1.1", @@ -23018,9 +22170,9 @@ "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" }, "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" }, "object-is": { "version": "1.1.5", @@ -23403,14 +22555,6 @@ "semver-compare": "^1.0.0" } }, - "pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "requires": { - "ts-pnp": "^1.1.6" - } - }, "postcss": { "version": "8.3.5", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", @@ -26355,26 +25499,6 @@ "uniq": "^1.0.1" } }, - "prebuild-install": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", - "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - } - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -26403,11 +25527,6 @@ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -26466,15 +25585,16 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "purgecss": { "version": "4.0.3", @@ -26516,11 +25636,6 @@ "side-channel": "^1.0.4" } }, - "querystring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==" - }, "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", @@ -26576,6 +25691,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -26586,7 +25702,8 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true } } }, @@ -27041,6 +26158,7 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, "requires": { "lru-cache": "^6.0.0" }, @@ -27049,6 +26167,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -27056,7 +26175,8 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, @@ -27080,7 +26200,8 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, "setimmediate": { "version": "1.0.5", @@ -27101,21 +26222,6 @@ "safe-buffer": "^5.0.1" } }, - "sharp": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.29.1.tgz", - "integrity": "sha512-DpgdAny9TuS+oWCQ7MRS8XyY9x6q1+yW3a5wNx0J3HrGuB/Jot/8WcT+lElHY9iJu2pwtegSGxqMaqFiMhs4rQ==", - "requires": { - "color": "^4.0.1", - "detect-libc": "^1.0.3", - "node-addon-api": "^4.1.0", - "prebuild-install": "^6.1.4", - "semver": "^7.3.5", - "simple-get": "^3.1.0", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - } - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -27132,14 +26238,9 @@ "dev": true }, "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "shopify-buy": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/shopify-buy/-/shopify-buy-2.12.0.tgz", - "integrity": "sha512-L0fo8fBDO31v9dAlVmLlIuJQnfwexGvceJ+A8hhIpovvfGh4GVGDId3k9PCWOqSzVHQBvYLdeGccxqjAOlbRlg==" + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" }, "side-channel": { "version": "1.0.4", @@ -27154,7 +26255,8 @@ "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true }, "signedsource": { "version": "1.0.0", @@ -27162,36 +26264,6 @@ "integrity": "sha1-HdrOSYF5j5O9gzlzgD2A1S6TrWo=", "dev": true }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "requires": { - "mimic-response": "^2.0.0" - } - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" - } - } - }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -27235,11 +26307,6 @@ "is-fullwidth-code-point": "^3.0.0" } }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" - }, "snake-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", @@ -27481,6 +26548,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, "requires": { "ansi-regex": "^5.0.0" } @@ -27504,18 +26572,18 @@ "dev": true }, "stripe": { - "version": "8.184.0", - "resolved": "https://registry.npmjs.org/stripe/-/stripe-8.184.0.tgz", - "integrity": "sha512-ZUdvyX+sizTxXLEbUjgTShrulSWSkMIt7hIKdAkhnajYrHdzVtdmhBJl8sQbR9chMVox3Ig5ohilyeIrvcCE2g==", + "version": "8.176.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-8.176.0.tgz", + "integrity": "sha512-0KCDo8TWFgeNWU7cPaqdjO2u2OSth0cmWYZmA7xsuxRCk7/lgWbJ/UbeSphx74cCIjFCmGuzDoNuNxqon9lEbg==", "requires": { "@types/node": ">=8.1.0", "qs": "^6.6.0" } }, "styled-jsx": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-4.0.1.tgz", - "integrity": "sha512-Gcb49/dRB1k8B4hdK8vhW27Rlb2zujCk1fISrizCcToIs+55B4vmUM0N9Gi4nnVfFZWe55jRdWpAqH1ldAKWvQ==", + "version": "5.0.0-beta.3", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.0-beta.3.tgz", + "integrity": "sha512-HtDDGSFPvmjHIqWf9n8Oo54tAoY/DTplvlyOH2+YOtD80Sp31Ap8ffSmxhgk5EkUoJ7xepdXMGT650mSffWuRA==", "requires": { "@babel/plugin-syntax-jsx": "7.14.5", "@babel/types": "7.15.0", @@ -27750,28 +26818,6 @@ "tmp": "^0.2.1" }, "dependencies": { - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -27804,29 +26850,6 @@ } } }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -27865,11 +26888,6 @@ "os-tmpdir": "~1.0.2" } }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -27933,11 +26951,6 @@ } } }, - "ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" - }, "tsconfig-paths": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz", @@ -27977,14 +26990,6 @@ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -28090,35 +27095,6 @@ "dev": true, "requires": { "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - } } }, "url-parse-lax": { @@ -28305,53 +27281,17 @@ "dev": true }, "which-typed-array": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz", - "integrity": "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.7" - } - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" } }, "word-wrap": { @@ -28376,16 +27316,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - }, "ws": { "version": "7.4.5", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", diff --git a/package.json b/package.json index 6c794701f..7406494fd 100644 --- a/package.json +++ b/package.json @@ -5,14 +5,15 @@ "dev": "NODE_OPTIONS='--inspect' next dev", "build": "next build", "start": "next start", - "analyze": "BUNDLE_ANALYZE=both yarn build", + "analyze": "BUNDLE_ANALYZE=both next build", "lint": "next lint", "prettier-fix": "prettier --write .", "find:unused": "npx next-unused", "generate": "graphql-codegen", "generate:shopify": "DOTENV_CONFIG_PATH=./.env.local graphql-codegen -r dotenv/config --config framework/shopify/codegen.json", "generate:vendure": "graphql-codegen --config framework/vendure/codegen.json", - "generate:definitions": "node framework/bigcommerce/scripts/generate-definitions.js" + "generate:definitions": "node framework/bigcommerce/scripts/generate-definitions.js", + "generate:kibocommerce": "graphql-codegen --config framework/kibocommerce/codegen.json" }, "sideEffects": false, "license": "MIT", @@ -22,8 +23,10 @@ "dependencies": { "@moltin/request": "^2.0.2", "@moltin/sdk": "^8.8.1", + "@chec/commerce.js": "^2.8.0", "@react-spring/web": "^9.2.1", - "@vercel/fetch": "^6.1.0", + "@spree/storefront-api-v2-sdk": "^5.0.1", + "@vercel/fetch": "^6.1.1", "autoprefixer": "^10.2.6", "axios": "^0.24.0", "body-scroll-lock": "^3.1.5", @@ -32,11 +35,11 @@ "email-validator": "^2.0.4", "immutability-helper": "^3.1.1", "js-cookie": "^2.2.1", - "keen-slider": "^5.5.1", + "keen-slider": "^6.3.2", "lodash.debounce": "^4.0.8", "lodash.random": "^3.2.0", "lodash.throttle": "^4.1.1", - "next": "^11.1.2", + "next": "^12.0.3", "next-seo": "^4.26.0", "next-themes": "^0.0.14", "postcss": "^8.3.5", @@ -62,6 +65,7 @@ "@graphql-codegen/typescript-operations": "^1.18.1", "@next/bundle-analyzer": "^10.2.3", "@types/body-scroll-lock": "^2.6.1", + "@types/chec__commerce.js": "^2.8.4", "@types/cookie": "^0.4.0", "@types/js-cookie": "^2.2.6", "@types/lodash.debounce": "^4.0.6", diff --git a/pages/cart.tsx b/pages/cart.tsx index 3279301da..09a2227a2 100644 --- a/pages/cart.tsx +++ b/pages/cart.tsx @@ -6,6 +6,7 @@ import { Layout } from '@components/common' import { Button, Text } from '@components/ui' import { Bag, Cross, Check, MapPin, CreditCard } from '@components/icons' import { CartItem } from '@components/cart' +import { useUI } from '@components/ui/context' export async function getStaticProps({ preview, @@ -26,6 +27,7 @@ export default function Cart() { const error = null const success = null const { data, isLoading, isEmpty } = useCart() + const { openSidebar, setSidebarView } = useUI() const { price: subTotal } = usePrice( data && { @@ -40,6 +42,11 @@ export default function Cart() { } ) + const goToCheckout = () => { + openSidebar() + setSidebarView('CHECKOUT_VIEW') + } + return ( <div className="grid lg:grid-cols-12 w-full max-w-7xl mx-auto"> <div className="lg:col-span-8"> @@ -162,9 +169,17 @@ export default function Cart() { Continue Shopping </Button> ) : ( - <Button href="/checkout" Component="a" width="100%"> - Proceed to Checkout - </Button> + <> + {process.env.COMMERCE_CUSTOMCHECKOUT_ENABLED ? ( + <Button Component="a" width="100%" onClick={goToCheckout}> + Proceed to Checkout ({total}) + </Button> + ) : ( + <Button href="/checkout" Component="a" width="100%"> + Proceed to Checkout + </Button> + )} + </> )} </div> </div> diff --git a/pages/wishlist.tsx b/pages/wishlist.tsx index 93f1c96d3..389e7aaab 100644 --- a/pages/wishlist.tsx +++ b/pages/wishlist.tsx @@ -69,7 +69,7 @@ export default function Wishlist() { {data && // @ts-ignore Shopify - Fix this types data.items?.map((item) => ( - <WishlistCard key={item.id} product={item.product! as any} /> + <WishlistCard key={item.id} item={item!} /> ))} </div> )} diff --git a/tsconfig.json b/tsconfig.json index 55042fa2d..21d253260 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -30,10 +30,15 @@ "include": ["next-env.d.ts", "**/*.d.ts", "**/*.ts", "**/*.tsx", "**/*.js"], "exclude": [ "node_modules", + "./framework/local", "./framework/bigcommerce", "./framework/shopify", "./framework/swell", "./framework/vendure", - "./framework/saleor" + "./framework/saleor", + "./framework/spree", + "./framework/ordercloud", + "./framework/kibocommerce", + "./framework/commercejs" ] } diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 56fc39b49..000000000 --- a/yarn.lock +++ /dev/null @@ -1,7707 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ardatan/aggregate-error@0.0.6": - "integrity" "sha512-vyrkEHG1jrukmzTPtyWB4NLPauUw5bQeg4uhn8f+1SSynmrOcyvlb1GKQjjgoBzElLdfXCRYX8UnBlhklOHYRQ==" - "resolved" "https://registry.npmjs.org/@ardatan/aggregate-error/-/aggregate-error-0.0.6.tgz" - "version" "0.0.6" - dependencies: - "tslib" "~2.0.1" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.14.5": - "integrity" "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==" - "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/highlight" "^7.14.5" - -"@babel/code-frame@7.12.11": - "integrity" "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==" - "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" - "version" "7.12.11" - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7": - "integrity" "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==" - "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz" - "version" "7.14.7" - -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0": - "integrity" "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==" - "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz" - "version" "7.14.6" - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helpers" "^7.14.6" - "@babel/parser" "^7.14.6" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - "convert-source-map" "^1.7.0" - "debug" "^4.1.0" - "gensync" "^1.0.0-beta.2" - "json5" "^2.1.2" - "semver" "^6.3.0" - "source-map" "^0.5.0" - -"@babel/generator@^7.12.13", "@babel/generator@^7.14.5", "@babel/generator@^7.5.0": - "integrity" "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==" - "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/types" "^7.14.5" - "jsesc" "^2.5.1" - "source-map" "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.14.5": - "integrity" "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==" - "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-compilation-targets@^7.14.5": - "integrity" "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==" - "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/compat-data" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "browserslist" "^4.16.6" - "semver" "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.14.5": - "integrity" "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==" - "resolved" "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz" - "version" "7.14.6" - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-member-expression-to-functions" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - -"@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.14.5": - "integrity" "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-get-function-arity" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-get-function-arity@^7.14.5": - "integrity" "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==" - "resolved" "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-hoist-variables@^7.14.5": - "integrity" "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-member-expression-to-functions@^7.14.5": - "integrity" "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==" - "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz" - "version" "7.14.7" - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-module-imports@^7.14.5": - "integrity" "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-module-transforms@^7.14.5": - "integrity" "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-optimise-call-expression@^7.14.5": - "integrity" "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==" - "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0": - "integrity" "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz" - "version" "7.14.5" - -"@babel/helper-replace-supers@^7.14.5": - "integrity" "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==" - "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-member-expression-to-functions" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-simple-access@^7.14.5": - "integrity" "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==" - "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": - "integrity" "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-split-export-declaration@^7.12.13", "@babel/helper-split-export-declaration@^7.14.5": - "integrity" "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==" - "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9": - "integrity" "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz" - "version" "7.15.7" - -"@babel/helper-validator-option@^7.14.5": - "integrity" "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz" - "version" "7.14.5" - -"@babel/helpers@^7.14.6": - "integrity" "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==" - "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz" - "version" "7.14.6" - dependencies: - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": - "integrity" "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==" - "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - "chalk" "^2.0.0" - "js-tokens" "^4.0.0" - -"@babel/parser@^7.0.0", "@babel/parser@^7.12.13", "@babel/parser@7.12.16": - "integrity" "sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw==" - "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.12.16.tgz" - "version" "7.12.16" - -"@babel/parser@^7.14.5": - "integrity" "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" - "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz" - "version" "7.14.7" - -"@babel/parser@^7.14.6", "@babel/parser@^7.14.7": - "integrity" "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==" - "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz" - "version" "7.14.7" - -"@babel/plugin-proposal-class-properties@^7.0.0": - "integrity" "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-proposal-object-rest-spread@^7.0.0": - "integrity" "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz" - "version" "7.14.7" - dependencies: - "@babel/compat-data" "^7.14.7" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.14.5" - -"@babel/plugin-syntax-class-properties@^7.0.0": - "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" - "version" "7.12.13" - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.14.5": - "integrity" "sha512-9WK5ZwKCdWHxVuU13XNT6X73FGmutAXeor5lGFq6qhOFtMFUF4jkbijuyUdZZlpYq6E2hZeZf/u3959X9wsv0Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.14.5", "@babel/plugin-syntax-jsx@7.14.5": - "integrity" "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": - "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - "version" "7.8.3" - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-transform-arrow-functions@^7.0.0": - "integrity" "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-block-scoped-functions@^7.0.0": - "integrity" "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-block-scoping@^7.0.0": - "integrity" "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-classes@^7.0.0": - "integrity" "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "globals" "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.0.0": - "integrity" "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-destructuring@^7.0.0": - "integrity" "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz" - "version" "7.14.7" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-flow-strip-types@^7.0.0": - "integrity" "sha512-KhcolBKfXbvjwI3TV7r7TkYm8oNXHNBqGOy6JDVwtecFaRoKYsUUqJdS10q0YDKW1c6aZQgO+Ys3LfGkox8pXA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-flow" "^7.14.5" - -"@babel/plugin-transform-for-of@^7.0.0": - "integrity" "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-function-name@^7.0.0": - "integrity" "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-literals@^7.0.0": - "integrity" "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-member-expression-literals@^7.0.0": - "integrity" "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-modules-commonjs@^7.0.0": - "integrity" "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" - "babel-plugin-dynamic-import-node" "^2.3.3" - -"@babel/plugin-transform-object-super@^7.0.0": - "integrity" "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.14.5": - "integrity" "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.0.0": - "integrity" "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-react-display-name@^7.0.0": - "integrity" "sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-react-jsx@^7.0.0": - "integrity" "sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-jsx" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/plugin-transform-shorthand-properties@^7.0.0": - "integrity" "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-spread@^7.0.0": - "integrity" "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz" - "version" "7.14.6" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - -"@babel/plugin-transform-template-literals@^7.0.0": - "integrity" "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/runtime-corejs3@^7.10.2": - "integrity" "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==" - "resolved" "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz" - "version" "7.15.4" - dependencies: - "core-js-pure" "^3.16.0" - "regenerator-runtime" "^0.13.4" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.14.0": - "integrity" "sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==" - "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.8.tgz" - "version" "7.14.8" - dependencies: - "regenerator-runtime" "^0.13.4" - -"@babel/runtime@7.15.3": - "integrity" "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==" - "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz" - "version" "7.15.3" - dependencies: - "regenerator-runtime" "^0.13.4" - -"@babel/runtime@7.4.5": - "integrity" "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==" - "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz" - "version" "7.4.5" - dependencies: - "regenerator-runtime" "^0.13.2" - -"@babel/template@^7.14.5": - "integrity" "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==" - "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/traverse@^7.0.0", "@babel/traverse@7.12.13": - "integrity" "sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA==" - "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz" - "version" "7.12.13" - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - "debug" "^4.1.0" - "globals" "^11.1.0" - "lodash" "^4.17.19" - -"@babel/traverse@^7.14.5": - "integrity" "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==" - "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz" - "version" "7.14.7" - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/parser" "^7.14.7" - "@babel/types" "^7.14.5" - "debug" "^4.1.0" - "globals" "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.12.13", "@babel/types@7.12.13": - "integrity" "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==" - "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz" - "version" "7.12.13" - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - "lodash" "^4.17.19" - "to-fast-properties" "^2.0.0" - -"@babel/types@^7.14.5": - "integrity" "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==" - "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz" - "version" "7.14.5" - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - "to-fast-properties" "^2.0.0" - -"@babel/types@7.15.0": - "integrity" "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==" - "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz" - "version" "7.15.0" - dependencies: - "@babel/helper-validator-identifier" "^7.14.9" - "to-fast-properties" "^2.0.0" - -"@csstools/convert-colors@^1.4.0": - "integrity" "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" - "resolved" "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz" - "version" "1.4.0" - -"@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2": - "integrity" "sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==" - "resolved" "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "lodash.get" "^4" - "make-error" "^1" - "ts-node" "^9" - "tslib" "^2" - -"@eslint/eslintrc@^0.4.3": - "integrity" "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==" - "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" - "version" "0.4.3" - dependencies: - "ajv" "^6.12.4" - "debug" "^4.1.1" - "espree" "^7.3.0" - "globals" "^13.9.0" - "ignore" "^4.0.6" - "import-fresh" "^3.2.1" - "js-yaml" "^3.13.1" - "minimatch" "^3.0.4" - "strip-json-comments" "^3.1.1" - -"@fullhuman/postcss-purgecss@^4.0.3": - "integrity" "sha512-/EnQ9UDWGGqHkn1UKAwSgh+gJHPKmD+Z+5dQ4gWT4qq2NUyez3zqAfZNwFH3eSgmgO+wjTXfhlLchx2M9/K+7Q==" - "resolved" "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "purgecss" "^4.0.3" - -"@graphql-codegen/cli@^1.21.5": - "integrity" "sha512-w3SovNJ9qtMhFLAdPZeCdGvHXDgfdb53mueWDTyncOt04m+tohVnY4qExvyKLTN5zlGxrA/5ubp2x8Az0xQarA==" - "resolved" "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-1.21.5.tgz" - "version" "1.21.5" - dependencies: - "@graphql-codegen/core" "1.17.10" - "@graphql-codegen/plugin-helpers" "^1.18.7" - "@graphql-tools/apollo-engine-loader" "^6.2.5" - "@graphql-tools/code-file-loader" "^6.3.1" - "@graphql-tools/git-loader" "^6.2.6" - "@graphql-tools/github-loader" "^6.2.5" - "@graphql-tools/graphql-file-loader" "^6.2.7" - "@graphql-tools/json-file-loader" "^6.2.6" - "@graphql-tools/load" "^6.2.8" - "@graphql-tools/prisma-loader" "^6.3.0" - "@graphql-tools/url-loader" "^6.10.1" - "@graphql-tools/utils" "^7.9.1" - "ansi-escapes" "^4.3.1" - "chalk" "^4.1.0" - "change-case-all" "1.0.14" - "chokidar" "^3.5.1" - "common-tags" "^1.8.0" - "cosmiconfig" "^7.0.0" - "debounce" "^1.2.0" - "dependency-graph" "^0.11.0" - "detect-indent" "^6.0.0" - "glob" "^7.1.6" - "graphql-config" "^3.3.0" - "inquirer" "^7.3.3" - "is-glob" "^4.0.1" - "json-to-pretty-yaml" "^1.2.2" - "latest-version" "5.1.0" - "listr" "^0.14.3" - "listr-update-renderer" "^0.5.0" - "log-symbols" "^4.0.0" - "minimatch" "^3.0.4" - "mkdirp" "^1.0.4" - "string-env-interpolation" "^1.0.1" - "ts-log" "^2.2.3" - "tslib" "~2.2.0" - "valid-url" "^1.0.9" - "wrap-ansi" "^7.0.0" - "yaml" "^1.10.0" - "yargs" "^17.0.0" - -"@graphql-codegen/core@1.17.10": - "integrity" "sha512-RA3umgVDs/RI/+ztHh+H4GfJxrJUfWJQqoAkMfX4qPTVO5qsy3R4vPudE0oP8w+kFbL8dFsRfAAPUZxI4jV/hQ==" - "resolved" "https://registry.npmjs.org/@graphql-codegen/core/-/core-1.17.10.tgz" - "version" "1.17.10" - dependencies: - "@graphql-codegen/plugin-helpers" "^1.18.7" - "@graphql-tools/merge" "^6.2.14" - "@graphql-tools/utils" "^7.9.1" - "tslib" "~2.2.0" - -"@graphql-codegen/plugin-helpers@^1.18.7": - "integrity" "sha512-8ICOrXlsvyL1dpVz8C9b7H31d4DJpDd75WfjMn6Xjqz81Ah8xDn1Bi+7YXRCCILCBmvI94k6fi8qpsIVhFBBjQ==" - "resolved" "https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-1.18.7.tgz" - "version" "1.18.7" - dependencies: - "@graphql-tools/utils" "^7.9.1" - "common-tags" "1.8.0" - "import-from" "3.0.0" - "lodash" "~4.17.0" - "tslib" "~2.2.0" - -"@graphql-codegen/schema-ast@^1.18.3": - "integrity" "sha512-D0uheH039ztSG3mboW5enmyaFwTcevLSR8yNrdN+NEKoQJJoDWsb9P/G6NTdFu5Bb03IvNhIFTpG1ttWtRP/aQ==" - "resolved" "https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-1.18.3.tgz" - "version" "1.18.3" - dependencies: - "@graphql-codegen/plugin-helpers" "^1.18.7" - "@graphql-tools/utils" "^7.9.1" - "tslib" "~2.2.0" - -"@graphql-codegen/typescript-operations@^1.18.1": - "integrity" "sha512-AF9OCNBq0HuW3C5nsO11+53fgFGE40lNUtjSIJocvMcstEKvHx4GrzYO0XIpZsjRPrnyds00Y5xTSynLqB0XxA==" - "resolved" "https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-1.18.2.tgz" - "version" "1.18.2" - dependencies: - "@graphql-codegen/plugin-helpers" "^1.18.7" - "@graphql-codegen/typescript" "^1.22.3" - "@graphql-codegen/visitor-plugin-common" "1.21.2" - "auto-bind" "~4.0.0" - "tslib" "~2.3.0" - -"@graphql-codegen/typescript@^1.22.2", "@graphql-codegen/typescript@^1.22.3": - "integrity" "sha512-qLSnVN2g/UxxzhRWHZcHw/Xkvx5wZh0RDzmg9MjAlPnDwAI89jg/ljKDwtTOfN+F6M8W4gQ9mjkWd6NxBQRgXw==" - "resolved" "https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-1.22.3.tgz" - "version" "1.22.3" - dependencies: - "@graphql-codegen/plugin-helpers" "^1.18.7" - "@graphql-codegen/visitor-plugin-common" "1.21.2" - "auto-bind" "~4.0.0" - "tslib" "~2.3.0" - -"@graphql-codegen/visitor-plugin-common@1.21.2": - "integrity" "sha512-Bb5P2Hw7f+lNWfazjcGwVcX434stNd7/EhgA+S2Ro0Bn1xVCK/WL0IHT2TGb+pf6/lWg3Y+J9wo2aOKkqDHT6A==" - "resolved" "https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-1.21.2.tgz" - "version" "1.21.2" - dependencies: - "@graphql-codegen/plugin-helpers" "^1.18.7" - "@graphql-tools/optimize" "^1.0.1" - "@graphql-tools/relay-operation-optimizer" "^6.3.0" - "array.prototype.flatmap" "^1.2.4" - "auto-bind" "~4.0.0" - "change-case-all" "1.0.14" - "dependency-graph" "^0.11.0" - "graphql-tag" "^2.11.0" - "parse-filepath" "^1.0.2" - "tslib" "~2.3.0" - -"@graphql-tools/apollo-engine-loader@^6.2.5": - "integrity" "sha512-CE4uef6PyxtSG+7OnLklIr2BZZDgjO89ZXK47EKdY7jQy/BQD/9o+8SxPsgiBc+2NsDJH2I6P/nqoaJMOEat6g==" - "resolved" "https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-6.2.5.tgz" - "version" "6.2.5" - dependencies: - "@graphql-tools/utils" "^7.0.0" - "cross-fetch" "3.0.6" - "tslib" "~2.0.1" - -"@graphql-tools/batch-execute@^7.1.2": - "integrity" "sha512-IuR2SB2MnC2ztA/XeTMTfWcA0Wy7ZH5u+nDkDNLAdX+AaSyDnsQS35sCmHqG0VOGTl7rzoyBWLCKGwSJplgtwg==" - "resolved" "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-7.1.2.tgz" - "version" "7.1.2" - dependencies: - "@graphql-tools/utils" "^7.7.0" - "dataloader" "2.0.0" - "tslib" "~2.2.0" - "value-or-promise" "1.0.6" - -"@graphql-tools/code-file-loader@^6.3.1": - "integrity" "sha512-ZJimcm2ig+avgsEOWWVvAaxZrXXhiiSZyYYOJi0hk9wh5BxZcLUNKkTp6EFnZE/jmGUwuos3pIjUD3Hwi3Bwhg==" - "resolved" "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-6.3.1.tgz" - "version" "6.3.1" - dependencies: - "@graphql-tools/graphql-tag-pluck" "^6.5.1" - "@graphql-tools/utils" "^7.0.0" - "tslib" "~2.1.0" - -"@graphql-tools/delegate@^7.0.1", "@graphql-tools/delegate@^7.1.5": - "integrity" "sha512-bQu+hDd37e+FZ0CQGEEczmRSfQRnnXeUxI/0miDV+NV/zCbEdIJj5tYFNrKT03W6wgdqx8U06d8L23LxvGri/g==" - "resolved" "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-7.1.5.tgz" - "version" "7.1.5" - dependencies: - "@ardatan/aggregate-error" "0.0.6" - "@graphql-tools/batch-execute" "^7.1.2" - "@graphql-tools/schema" "^7.1.5" - "@graphql-tools/utils" "^7.7.1" - "dataloader" "2.0.0" - "tslib" "~2.2.0" - "value-or-promise" "1.0.6" - -"@graphql-tools/git-loader@^6.2.6": - "integrity" "sha512-ooQTt2CaG47vEYPP3CPD+nbA0F+FYQXfzrB1Y1ABN9K3d3O2RK3g8qwslzZaI8VJQthvKwt0A95ZeE4XxteYfw==" - "resolved" "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-6.2.6.tgz" - "version" "6.2.6" - dependencies: - "@graphql-tools/graphql-tag-pluck" "^6.2.6" - "@graphql-tools/utils" "^7.0.0" - "tslib" "~2.1.0" - -"@graphql-tools/github-loader@^6.2.5": - "integrity" "sha512-DLuQmYeNNdPo8oWus8EePxWCfCAyUXPZ/p1PWqjrX/NGPyH2ZObdqtDAfRHztljt0F/qkBHbGHCEk2TKbRZTRw==" - "resolved" "https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-6.2.5.tgz" - "version" "6.2.5" - dependencies: - "@graphql-tools/graphql-tag-pluck" "^6.2.6" - "@graphql-tools/utils" "^7.0.0" - "cross-fetch" "3.0.6" - "tslib" "~2.0.1" - -"@graphql-tools/graphql-file-loader@^6.0.0", "@graphql-tools/graphql-file-loader@^6.2.7": - "integrity" "sha512-5k2SNz0W87tDcymhEMZMkd6/vs6QawDyjQXWtqkuLTBF3vxjxPD1I4dwHoxgWPIjjANhXybvulD7E+St/7s9TQ==" - "resolved" "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-6.2.7.tgz" - "version" "6.2.7" - dependencies: - "@graphql-tools/import" "^6.2.6" - "@graphql-tools/utils" "^7.0.0" - "tslib" "~2.1.0" - -"@graphql-tools/graphql-tag-pluck@^6.2.6", "@graphql-tools/graphql-tag-pluck@^6.5.1": - "integrity" "sha512-7qkm82iFmcpb8M6/yRgzjShtW6Qu2OlCSZp8uatA3J0eMl87TxyJoUmL3M3UMMOSundAK8GmoyNVFUrueueV5Q==" - "resolved" "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-6.5.1.tgz" - "version" "6.5.1" - dependencies: - "@babel/parser" "7.12.16" - "@babel/traverse" "7.12.13" - "@babel/types" "7.12.13" - "@graphql-tools/utils" "^7.0.0" - "tslib" "~2.1.0" - -"@graphql-tools/import@^6.2.6": - "integrity" "sha512-1szR19JI6WPibjYurMLdadHKZoG9C//8I/FZ0Dt4vJSbrMdVNp8WFxg4QnZrDeMG4MzZc90etsyF5ofKjcC+jw==" - "resolved" "https://registry.npmjs.org/@graphql-tools/import/-/import-6.3.1.tgz" - "version" "6.3.1" - dependencies: - "resolve-from" "5.0.0" - "tslib" "~2.2.0" - -"@graphql-tools/json-file-loader@^6.0.0", "@graphql-tools/json-file-loader@^6.2.6": - "integrity" "sha512-CnfwBSY5926zyb6fkDBHnlTblHnHI4hoBALFYXnrg0Ev4yWU8B04DZl/pBRUc459VNgO2x8/mxGIZj2hPJG1EA==" - "resolved" "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-6.2.6.tgz" - "version" "6.2.6" - dependencies: - "@graphql-tools/utils" "^7.0.0" - "tslib" "~2.0.1" - -"@graphql-tools/load@^6.0.0", "@graphql-tools/load@^6.2.8": - "integrity" "sha512-JpbyXOXd8fJXdBh2ta0Q4w8ia6uK5FHzrTNmcvYBvflFuWly2LDTk2abbSl81zKkzswQMEd2UIYghXELRg8eTA==" - "resolved" "https://registry.npmjs.org/@graphql-tools/load/-/load-6.2.8.tgz" - "version" "6.2.8" - dependencies: - "@graphql-tools/merge" "^6.2.12" - "@graphql-tools/utils" "^7.5.0" - "globby" "11.0.3" - "import-from" "3.0.0" - "is-glob" "4.0.1" - "p-limit" "3.1.0" - "tslib" "~2.2.0" - "unixify" "1.0.0" - "valid-url" "1.0.9" - -"@graphql-tools/merge@^6.0.0", "@graphql-tools/merge@^6.2.12", "@graphql-tools/merge@^6.2.14": - "integrity" "sha512-RWT4Td0ROJai2eR66NHejgf8UwnXJqZxXgDWDI+7hua5vNA2OW8Mf9K1Wav1ZkjWnuRp4ztNtkZGie5ISw55ow==" - "resolved" "https://registry.npmjs.org/@graphql-tools/merge/-/merge-6.2.14.tgz" - "version" "6.2.14" - dependencies: - "@graphql-tools/schema" "^7.0.0" - "@graphql-tools/utils" "^7.7.0" - "tslib" "~2.2.0" - -"@graphql-tools/optimize@^1.0.1": - "integrity" "sha512-cRlUNsbErYoBtzzS6zXahXeTBZGPVlPHXCpnEZ0XiK/KY/sQL96cyzak0fM/Gk6qEI9/l32MYEICjasiBQrl5w==" - "resolved" "https://registry.npmjs.org/@graphql-tools/optimize/-/optimize-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "tslib" "~2.0.1" - -"@graphql-tools/prisma-loader@^6.3.0": - "integrity" "sha512-9V3W/kzsFBmUQqOsd96V4a4k7Didz66yh/IK89B1/rrvy9rYj+ULjEqR73x9BYZ+ww9FV8yP8LasWAJwWaqqJQ==" - "resolved" "https://registry.npmjs.org/@graphql-tools/prisma-loader/-/prisma-loader-6.3.0.tgz" - "version" "6.3.0" - dependencies: - "@graphql-tools/url-loader" "^6.8.2" - "@graphql-tools/utils" "^7.0.0" - "@types/http-proxy-agent" "^2.0.2" - "@types/js-yaml" "^4.0.0" - "@types/json-stable-stringify" "^1.0.32" - "@types/jsonwebtoken" "^8.5.0" - "chalk" "^4.1.0" - "debug" "^4.3.1" - "dotenv" "^8.2.0" - "graphql-request" "^3.3.0" - "http-proxy-agent" "^4.0.1" - "https-proxy-agent" "^5.0.0" - "isomorphic-fetch" "^3.0.0" - "js-yaml" "^4.0.0" - "json-stable-stringify" "^1.0.1" - "jsonwebtoken" "^8.5.1" - "lodash" "^4.17.20" - "replaceall" "^0.1.6" - "scuid" "^1.1.0" - "tslib" "~2.1.0" - "yaml-ast-parser" "^0.0.43" - -"@graphql-tools/relay-operation-optimizer@^6.3.0": - "integrity" "sha512-Or3UgRvkY9Fq1AAx7q38oPqFmTepLz7kp6wDHKyR0ceG7AvHv5En22R12mAeISInbhff4Rpwgf6cE8zHRu6bCw==" - "resolved" "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.3.0.tgz" - "version" "6.3.0" - dependencies: - "@graphql-tools/utils" "^7.1.0" - "relay-compiler" "10.1.0" - "tslib" "~2.0.1" - -"@graphql-tools/schema@^7.0.0", "@graphql-tools/schema@^7.1.5": - "integrity" "sha512-uyn3HSNSckf4mvQSq0Q07CPaVZMNFCYEVxroApOaw802m9DcZPgf9XVPy/gda5GWj9AhbijfRYVTZQgHnJ4CXA==" - "resolved" "https://registry.npmjs.org/@graphql-tools/schema/-/schema-7.1.5.tgz" - "version" "7.1.5" - dependencies: - "@graphql-tools/utils" "^7.1.2" - "tslib" "~2.2.0" - "value-or-promise" "1.0.6" - -"@graphql-tools/url-loader@^6.0.0", "@graphql-tools/url-loader@^6.10.1", "@graphql-tools/url-loader@^6.8.2": - "integrity" "sha512-DSDrbhQIv7fheQ60pfDpGD256ixUQIR6Hhf9Z5bRjVkXOCvO5XrkwoWLiU7iHL81GB1r0Ba31bf+sl+D4nyyfw==" - "resolved" "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-6.10.1.tgz" - "version" "6.10.1" - dependencies: - "@graphql-tools/delegate" "^7.0.1" - "@graphql-tools/utils" "^7.9.0" - "@graphql-tools/wrap" "^7.0.4" - "@microsoft/fetch-event-source" "2.0.1" - "@types/websocket" "1.0.2" - "abort-controller" "3.0.0" - "cross-fetch" "3.1.4" - "extract-files" "9.0.0" - "form-data" "4.0.0" - "graphql-ws" "^4.4.1" - "is-promise" "4.0.0" - "isomorphic-ws" "4.0.1" - "lodash" "4.17.21" - "meros" "1.1.4" - "subscriptions-transport-ws" "^0.9.18" - "sync-fetch" "0.3.0" - "tslib" "~2.2.0" - "valid-url" "1.0.9" - "ws" "7.4.5" - -"@graphql-tools/utils@^7.0.0", "@graphql-tools/utils@^7.1.0", "@graphql-tools/utils@^7.1.2", "@graphql-tools/utils@^7.5.0", "@graphql-tools/utils@^7.7.0", "@graphql-tools/utils@^7.7.1", "@graphql-tools/utils@^7.8.1", "@graphql-tools/utils@^7.9.0", "@graphql-tools/utils@^7.9.1": - "integrity" "sha512-d334r6bo9mxdSqZW6zWboEnnOOFRrAPVQJ7LkU8/6grglrbcu6WhwCLzHb90E94JI3TD3ricC3YGbUqIi9Xg0w==" - "resolved" "https://registry.npmjs.org/@graphql-tools/utils/-/utils-7.10.0.tgz" - "version" "7.10.0" - dependencies: - "@ardatan/aggregate-error" "0.0.6" - "camel-case" "4.1.2" - "tslib" "~2.2.0" - -"@graphql-tools/wrap@^7.0.4": - "integrity" "sha512-1NDUymworsOlb53Qfh7fonDi2STvqCtbeE68ntKY9K/Ju/be2ZNxrFSbrBHwnxWcN9PjISNnLcAyJ1L5tCUyhg==" - "resolved" "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-7.0.8.tgz" - "version" "7.0.8" - dependencies: - "@graphql-tools/delegate" "^7.1.5" - "@graphql-tools/schema" "^7.1.5" - "@graphql-tools/utils" "^7.8.1" - "tslib" "~2.2.0" - "value-or-promise" "1.0.6" - -"@hapi/accept@5.0.2": - "integrity" "sha512-CmzBx/bXUR8451fnZRuZAJRlzgm0Jgu5dltTX/bszmR2lheb9BpyN47Q1RbaGTsvFzn0PXAEs+lXDKfshccYZw==" - "resolved" "https://registry.npmjs.org/@hapi/accept/-/accept-5.0.2.tgz" - "version" "5.0.2" - dependencies: - "@hapi/boom" "9.x.x" - "@hapi/hoek" "9.x.x" - -"@hapi/boom@9.x.x": - "integrity" "sha512-uJEJtiNHzKw80JpngDGBCGAmWjBtzxDCz17A9NO2zCi8LLBlb5Frpq4pXwyN+2JQMod4pKz5BALwyneCgDg89Q==" - "resolved" "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.2.tgz" - "version" "9.1.2" - dependencies: - "@hapi/hoek" "9.x.x" - -"@hapi/hoek@9.x.x": - "integrity" "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" - "resolved" "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz" - "version" "9.2.0" - -"@humanwhocodes/config-array@^0.5.0": - "integrity" "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" - "version" "0.5.0" - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - "debug" "^4.1.1" - "minimatch" "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.0": - "integrity" "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" - "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz" - "version" "1.2.0" - -"@iarna/toml@^2.2.5": - "integrity" "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" - "resolved" "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz" - "version" "2.2.5" - -"@microsoft/fetch-event-source@2.0.1": - "integrity" "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==" - "resolved" "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz" - "version" "2.0.1" - -"@moltin/sdk@^8.8.1": - "integrity" "sha512-B5ds4rNKsU4jcFYr+9ENntqVBqdlx2LMNrAW7aAcllN0ZljtsQpbDKupfdm6SUIiopJiQSV3UnlQaOK0UNfShg==" - "resolved" "https://registry.npmjs.org/@moltin/sdk/-/sdk-8.8.1.tgz" - "version" "8.8.1" - dependencies: - "es6-promise" "^4.0.5" - "fetch-everywhere" "^1.0.5" - "inflected" "^2.0.1" - "node-localstorage" "^2.1.6" - -"@napi-rs/triples@^1.0.3": - "integrity" "sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA==" - "resolved" "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.0.3.tgz" - "version" "1.0.3" - -"@next/bundle-analyzer@^10.2.3": - "integrity" "sha512-vEfQhGWgJugZOlSUlj3DZWs/KsK0SO2SPKoHSZ7KkzpruKzc/e45G0oUh0rffzdhasMQZM1TuSBkxO+1UcnDNw==" - "resolved" "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-10.2.3.tgz" - "version" "10.2.3" - dependencies: - "webpack-bundle-analyzer" "4.3.0" - -"@next/env@11.1.2": - "integrity" "sha512-+fteyVdQ7C/OoulfcF6vd1Yk0FEli4453gr8kSFbU8sKseNSizYq6df5MKz/AjwLptsxrUeIkgBdAzbziyJ3mA==" - "resolved" "https://registry.npmjs.org/@next/env/-/env-11.1.2.tgz" - "version" "11.1.2" - -"@next/eslint-plugin-next@11.0.1": - "integrity" "sha512-UzdX3y6XSrj9YuASUb/p4sRvfjP2klj2YgIOfMwrWoLTTPJQMh00hREB9Ftr7m7RIxjVSAaaLXIRLdxvq948GA==" - "resolved" "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-11.0.1.tgz" - "version" "11.0.1" - -"@next/polyfill-module@11.1.2": - "integrity" "sha512-xZmixqADM3xxtqBV0TpAwSFzWJP0MOQzRfzItHXf1LdQHWb0yofHHC+7eOrPFic8+ZGz5y7BdPkkgR1S25OymA==" - "resolved" "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-11.1.2.tgz" - "version" "11.1.2" - -"@next/react-dev-overlay@11.1.2": - "integrity" "sha512-rDF/mGY2NC69mMg2vDqzVpCOlWqnwPUXB2zkARhvknUHyS6QJphPYv9ozoPJuoT/QBs49JJd9KWaAzVBvq920A==" - "resolved" "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-11.1.2.tgz" - "version" "11.1.2" - dependencies: - "@babel/code-frame" "7.12.11" - "anser" "1.4.9" - "chalk" "4.0.0" - "classnames" "2.2.6" - "css.escape" "1.5.1" - "data-uri-to-buffer" "3.0.1" - "platform" "1.3.6" - "shell-quote" "1.7.2" - "source-map" "0.8.0-beta.0" - "stacktrace-parser" "0.1.10" - "strip-ansi" "6.0.0" - -"@next/react-refresh-utils@11.1.2": - "integrity" "sha512-hsoJmPfhVqjZ8w4IFzoo8SyECVnN+8WMnImTbTKrRUHOVJcYMmKLL7xf7T0ft00tWwAl/3f3Q3poWIN2Ueql/Q==" - "resolved" "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-11.1.2.tgz" - "version" "11.1.2" - -"@next/swc-linux-x64-gnu@11.1.2": - "integrity" "sha512-YcDHTJjn/8RqvyJVB6pvEKXihDcdrOwga3GfMv/QtVeLphTouY4BIcEUfrG5+26Nf37MP1ywN3RRl1TxpurAsQ==" - "resolved" "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-11.1.2.tgz" - "version" "11.1.2" - -"@node-rs/helper@1.2.1": - "integrity" "sha512-R5wEmm8nbuQU0YGGmYVjEc0OHtYsuXdpRG+Ut/3wZ9XAvQWyThN08bTh2cBJgoZxHQUPtvRfeQuxcAgLuiBISg==" - "resolved" "https://registry.npmjs.org/@node-rs/helper/-/helper-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "@napi-rs/triples" "^1.0.3" - -"@nodelib/fs.scandir@2.1.5": - "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - "version" "2.1.5" - dependencies: - "@nodelib/fs.stat" "2.0.5" - "run-parallel" "^1.1.9" - -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": - "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - "version" "2.0.5" - -"@nodelib/fs.walk@^1.2.3": - "integrity" "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==" - "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz" - "version" "1.2.7" - dependencies: - "@nodelib/fs.scandir" "2.1.5" - "fastq" "^1.6.0" - -"@polka/url@^1.0.0-next.15": - "integrity" "sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA==" - "resolved" "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.15.tgz" - "version" "1.0.0-next.15" - -"@react-spring/animated@~9.2.0": - "integrity" "sha512-xxYOxxrk4r+yy218lVnkR027GXGvHcadDnnXRW0l6atcL+1AGYwimMwIuvzlvnsVnyoK0YUABEeGjk9ENOrVMQ==" - "resolved" "https://registry.npmjs.org/@react-spring/animated/-/animated-9.2.3.tgz" - "version" "9.2.3" - dependencies: - "@react-spring/shared" "~9.2.0" - "@react-spring/types" "~9.2.0" - -"@react-spring/core@~9.2.0": - "integrity" "sha512-8qJbj0xjjoYGVqdmNd2bVaFzKSAwrMVLweHkaYJiTY6p0g7LhSdt5KSl1MjYA4Rj6S4wO1KgefAPK6mH6MtGtA==" - "resolved" "https://registry.npmjs.org/@react-spring/core/-/core-9.2.3.tgz" - "version" "9.2.3" - dependencies: - "@react-spring/animated" "~9.2.0" - "@react-spring/shared" "~9.2.0" - "@react-spring/types" "~9.2.0" - -"@react-spring/rafz@~9.2.0": - "integrity" "sha512-ThBI3HWp1Y82uRSFVpoykwgM3M9s3SJD6ilKKp9C2OTPcGhWiRGt1IMjzKPwB+F1NX3psbPTt30Bev8WzA/DQQ==" - "resolved" "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.2.3.tgz" - "version" "9.2.3" - -"@react-spring/shared@~9.2.0": - "integrity" "sha512-MehdmKao1oUAwSEJo8BXOz1OGgsSav/dimD1Vz920hirShj9s/I4zKnWtkdK92xQ4n35D/xD3hATHkXbt/WSvg==" - "resolved" "https://registry.npmjs.org/@react-spring/shared/-/shared-9.2.3.tgz" - "version" "9.2.3" - dependencies: - "@react-spring/rafz" "~9.2.0" - "@react-spring/types" "~9.2.0" - -"@react-spring/types@~9.2.0": - "integrity" "sha512-G7AWUJavwsvvvprnYmqUXE5N1XKINktc8V72ipvkFTE3DD3GApYpX/ORNmieJljKJYvBSBzpRSIzk2qELUs30Q==" - "resolved" "https://registry.npmjs.org/@react-spring/types/-/types-9.2.3.tgz" - "version" "9.2.3" - -"@react-spring/web@^9.2.1": - "integrity" "sha512-dWRcgVDbO2UI9I03n/HVmCx9tY++Na+RwRzkzXv3E53BcFsjvnWGArnpj+xE/XgXiaII3ep2RmUj5jyYoukqGg==" - "resolved" "https://registry.npmjs.org/@react-spring/web/-/web-9.2.3.tgz" - "version" "9.2.3" - dependencies: - "@react-spring/animated" "~9.2.0" - "@react-spring/core" "~9.2.0" - "@react-spring/shared" "~9.2.0" - "@react-spring/types" "~9.2.0" - -"@rushstack/eslint-patch@^1.0.6": - "integrity" "sha512-Myxw//kzromB9yWgS8qYGuGVf91oBUUJpNvy5eM50sqvmKLbKjwLxohJnkWGTeeI9v9IBMtPLxz5Gc60FIfvCA==" - "resolved" "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.0.6.tgz" - "version" "1.0.6" - -"@samverschueren/stream-to-observable@^0.3.0": - "integrity" "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==" - "resolved" "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz" - "version" "0.3.1" - dependencies: - "any-observable" "^0.3.0" - -"@sindresorhus/is@^0.14.0": - "integrity" "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" - "version" "0.14.0" - -"@szmarczak/http-timer@^1.1.2": - "integrity" "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==" - "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "defer-to-connect" "^1.0.1" - -"@tootallnate/once@1": - "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" - "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" - "version" "1.1.2" - -"@types/async-retry@1.2.1": - "integrity" "sha512-yMQ6CVgICWtyFNBqJT3zqOc+TnqqEPLo4nKJNPFwcialiylil38Ie6q1ENeFTjvaLOkVim9K5LisHgAKJWidGQ==" - "resolved" "https://registry.npmjs.org/@types/async-retry/-/async-retry-1.2.1.tgz" - "version" "1.2.1" - -"@types/body-scroll-lock@^2.6.1": - "integrity" "sha512-PPFm/2A6LfKmSpvMg58gHtSqwwMChbcKKGhSCRIhY4MyFzhY8moAN6HrTCpOeZQUqkFdTFfMqr7njeqGLKt72Q==" - "resolved" "https://registry.npmjs.org/@types/body-scroll-lock/-/body-scroll-lock-2.6.1.tgz" - "version" "2.6.1" - -"@types/cookie@^0.4.0": - "integrity" "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==" - "resolved" "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz" - "version" "0.4.0" - -"@types/http-proxy-agent@^2.0.2": - "integrity" "sha512-2S6IuBRhqUnH1/AUx9k8KWtY3Esg4eqri946MnxTG5HwehF1S5mqLln8fcyMiuQkY72p2gH3W+rIPqp5li0LyQ==" - "resolved" "https://registry.npmjs.org/@types/http-proxy-agent/-/http-proxy-agent-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "@types/node" "*" - -"@types/js-cookie@^2.2.6": - "integrity" "sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw==" - "resolved" "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.6.tgz" - "version" "2.2.6" - -"@types/js-yaml@^4.0.0": - "integrity" "sha512-xdOvNmXmrZqqPy3kuCQ+fz6wA0xU5pji9cd1nDrflWaAWtYLLGk5ykW0H6yg5TVyehHP1pfmuuSaZkhP+kspVA==" - "resolved" "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.1.tgz" - "version" "4.0.1" - -"@types/json-stable-stringify@^1.0.32": - "integrity" "sha512-q9Q6+eUEGwQkv4Sbst3J4PNgDOvpuVuKj79Hl/qnmBMEIPzB5QoFRUtjcgcg2xNUZyYUGXBk5wYIBKHt0A+Mxw==" - "resolved" "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.32.tgz" - "version" "1.0.32" - -"@types/jsonwebtoken@^8.5.0": - "integrity" "sha512-X8BOCkp+WJVNYCYIBugREtVZa4Y09Or9HDx6xqRZem5F8jJV8FuJgNessXyMuv9+U8pjnvdezASwU28uw+1scw==" - "resolved" "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.2.tgz" - "version" "8.5.2" - dependencies: - "@types/node" "*" - -"@types/lodash.debounce@^4.0.6": - "integrity" "sha512-4WTmnnhCfDvvuLMaF3KV4Qfki93KebocUF45msxhYyjMttZDQYzHkO639ohhk8+oco2cluAFL3t5+Jn4mleylQ==" - "resolved" "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.6.tgz" - "version" "4.0.6" - dependencies: - "@types/lodash" "*" - -"@types/lodash.random@^3.2.6": - "integrity" "sha512-RRr0pKm+3USvG/HTkuRKA8v2EqXu19VXC09j4VL2UQec8Yx8Fn6wYTPGjYdmX4UFd23ykS7SLFkiULS/rv8kTA==" - "resolved" "https://registry.npmjs.org/@types/lodash.random/-/lodash.random-3.2.6.tgz" - "version" "3.2.6" - dependencies: - "@types/lodash" "*" - -"@types/lodash.throttle@^4.1.6": - "integrity" "sha512-/UIH96i/sIRYGC60NoY72jGkCJtFN5KVPhEMMMTjol65effe1gPn0tycJqV5tlSwMTzX8FqzB5yAj0rfGHTPNg==" - "resolved" "https://registry.npmjs.org/@types/lodash.throttle/-/lodash.throttle-4.1.6.tgz" - "version" "4.1.6" - dependencies: - "@types/lodash" "*" - -"@types/lodash@*": - "integrity" "sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q==" - "resolved" "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.170.tgz" - "version" "4.14.170" - -"@types/lru-cache@4.1.1": - "integrity" "sha512-8mNEUG6diOrI6pMqOHrHPDBB1JsrpedeMK9AWGzVCQ7StRRribiT9BRvUmF8aUws9iBbVlgVekOT5Sgzc1MTKw==" - "resolved" "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-4.1.1.tgz" - "version" "4.1.1" - -"@types/node-fetch@2.3.2": - "integrity" "sha512-yW0EOebSsQme9yKu09XbdDfle4/SmWZMK4dfteWcSLCYNQQcF+YOv0kIrvm+9pO11/ghA4E6A+RNQqvYj4Nr3A==" - "resolved" "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.3.2.tgz" - "version" "2.3.2" - dependencies: - "@types/node" "*" - -"@types/node-fetch@2": - "integrity" "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==" - "resolved" "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz" - "version" "2.5.12" - dependencies: - "@types/node" "*" - "form-data" "^3.0.0" - -"@types/node@*", "@types/node@^15.12.4", "@types/node@>=12", "@types/node@>=8.1.0": - "integrity" "sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-15.12.4.tgz" - "version" "15.12.4" - -"@types/node@10.12.18": - "integrity" "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" - "resolved" "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz" - "version" "10.12.18" - -"@types/parse-json@^4.0.0": - "integrity" "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - "resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" - "version" "4.0.0" - -"@types/prop-types@*": - "integrity" "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" - "resolved" "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz" - "version" "15.7.3" - -"@types/react@^17.0.8": - "integrity" "sha512-yFRQbD+whVonItSk7ZzP/L+gPTJVBkL/7shLEF+i9GC/1cV3JmUxEQz6+9ylhUpWSDuqo1N9qEvqS6vTj4USUA==" - "resolved" "https://registry.npmjs.org/@types/react/-/react-17.0.11.tgz" - "version" "17.0.11" - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - "csstype" "^3.0.2" - -"@types/scheduler@*": - "integrity" "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" - "resolved" "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz" - "version" "0.16.1" - -"@types/uuid@8.3.1": - "integrity" "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==" - "resolved" "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz" - "version" "8.3.1" - -"@types/websocket@1.0.2": - "integrity" "sha512-B5m9aq7cbbD/5/jThEr33nUY8WEfVi6A2YKCTOvw5Ldy7mtsOkqRvGjnzy6g7iMMDsgu7xREuCzqATLDLQVKcQ==" - "resolved" "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "@types/node" "*" - -"@typescript-eslint/parser@^4.20.0": - "integrity" "sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.5.tgz" - "version" "4.28.5" - dependencies: - "@typescript-eslint/scope-manager" "4.28.5" - "@typescript-eslint/types" "4.28.5" - "@typescript-eslint/typescript-estree" "4.28.5" - "debug" "^4.3.1" - -"@typescript-eslint/scope-manager@4.28.5": - "integrity" "sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.5.tgz" - "version" "4.28.5" - dependencies: - "@typescript-eslint/types" "4.28.5" - "@typescript-eslint/visitor-keys" "4.28.5" - -"@typescript-eslint/types@4.28.5": - "integrity" "sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.5.tgz" - "version" "4.28.5" - -"@typescript-eslint/typescript-estree@4.28.5": - "integrity" "sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.5.tgz" - "version" "4.28.5" - dependencies: - "@typescript-eslint/types" "4.28.5" - "@typescript-eslint/visitor-keys" "4.28.5" - "debug" "^4.3.1" - "globby" "^11.0.3" - "is-glob" "^4.0.1" - "semver" "^7.3.5" - "tsutils" "^3.21.0" - -"@typescript-eslint/visitor-keys@4.28.5": - "integrity" "sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg==" - "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.5.tgz" - "version" "4.28.5" - dependencies: - "@typescript-eslint/types" "4.28.5" - "eslint-visitor-keys" "^2.0.0" - -"@vercel/fetch-cached-dns@^2.0.2": - "integrity" "sha512-gDqKEV8CeY2YmCdZpP1rn3tFK1L07Vw2+HYkCK8zpRHOVGr/sP8yhBsW+C/yqGVj0i9z/rIvqIHe5emvRvxwgw==" - "resolved" "https://registry.npmjs.org/@vercel/fetch-cached-dns/-/fetch-cached-dns-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "@types/node-fetch" "2.3.2" - "@zeit/dns-cached-resolve" "2.1.2" - -"@vercel/fetch-retry@^5.0.2": - "integrity" "sha512-DIIoBY92r+sQ6iHSf5WjKiYvkdsDIMPWKYATlE0KcUAj2RV6SZK9UWpUzBRKsofXqedOqpVjrI0IE6AWL7JRtg==" - "resolved" "https://registry.npmjs.org/@vercel/fetch-retry/-/fetch-retry-5.0.3.tgz" - "version" "5.0.3" - dependencies: - "async-retry" "^1.3.1" - "debug" "^3.1.0" - -"@vercel/fetch@^6.1.0": - "integrity" "sha512-nddCkgpA0aVIqOlzh+qVlzDNcQq0cSnqefM+x6SciGI4GCvVZeaZ7WEowgX8I/HwBAq8Uj5Bdnd+r0+sYsJsig==" - "resolved" "https://registry.npmjs.org/@vercel/fetch/-/fetch-6.1.1.tgz" - "version" "6.1.1" - dependencies: - "@types/async-retry" "1.2.1" - "@vercel/fetch-cached-dns" "^2.0.2" - "@vercel/fetch-retry" "^5.0.2" - "agentkeepalive" "3.4.1" - "debug" "3.1.0" - -"@zeit/dns-cached-resolve@2.1.2": - "integrity" "sha512-A/5gbBskKPETTBqHwvlaW1Ri2orO62yqoFoXdxna1SQ7A/lXjpWgpJ1wdY3IQEcz5LydpS4sJ8SzI2gFyyLEhg==" - "resolved" "https://registry.npmjs.org/@zeit/dns-cached-resolve/-/dns-cached-resolve-2.1.2.tgz" - "version" "2.1.2" - dependencies: - "@types/async-retry" "1.2.1" - "@types/lru-cache" "4.1.1" - "@types/node" "10.12.18" - "async-retry" "1.2.3" - "lru-cache" "5.1.1" - -"abort-controller@3.0.0": - "integrity" "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==" - "resolved" "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "event-target-shim" "^5.0.0" - -"acorn-jsx@^5.3.1": - "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" - "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - "version" "5.3.2" - -"acorn-node@^1.6.1": - "integrity" "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==" - "resolved" "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz" - "version" "1.8.2" - dependencies: - "acorn" "^7.0.0" - "acorn-walk" "^7.0.0" - "xtend" "^4.0.2" - -"acorn-walk@^7.0.0": - "integrity" "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" - "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" - "version" "7.2.0" - -"acorn-walk@^8.0.0": - "integrity" "sha512-mjmzmv12YIG/G8JQdQuz2MUDShEJ6teYpT5bmWA4q7iwoGen8xtt3twF3OvzIUl+Q06aWIjvnwQUKvQ6TtMRjg==" - "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.1.0.tgz" - "version" "8.1.0" - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.0.0", "acorn@^7.4.0": - "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" - "version" "7.4.1" - -"acorn@^8.0.4": - "integrity" "sha512-ULr0LDaEqQrMFGyQ3bhJkLsbtrQ8QibAseGZeaSUiT/6zb9IvIkomWHJIvgvwad+hinRAgsI51JcWk2yvwyL+w==" - "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.4.0.tgz" - "version" "8.4.0" - -"agent-base@6": - "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" - "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "debug" "4" - -"agentkeepalive@3.4.1": - "integrity" "sha512-MPIwsZU9PP9kOrZpyu2042kYA8Fdt/AedQYkYXucHgF9QoD9dXVp0ypuGnHXSR0hTstBxdt85Xkh4JolYfK5wg==" - "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.4.1.tgz" - "version" "3.4.1" - dependencies: - "humanize-ms" "^1.2.1" - -"aggregate-error@^3.0.0": - "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" - "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "clean-stack" "^2.0.0" - "indent-string" "^4.0.0" - -"ajv@^6.10.0", "ajv@^6.12.4": - "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - "version" "6.12.6" - dependencies: - "fast-deep-equal" "^3.1.1" - "fast-json-stable-stringify" "^2.0.0" - "json-schema-traverse" "^0.4.1" - "uri-js" "^4.2.2" - -"ajv@^8.0.1": - "integrity" "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==" - "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" - "version" "8.6.2" - dependencies: - "fast-deep-equal" "^3.1.1" - "json-schema-traverse" "^1.0.0" - "require-from-string" "^2.0.2" - "uri-js" "^4.2.2" - -"anser@1.4.9": - "integrity" "sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA==" - "resolved" "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz" - "version" "1.4.9" - -"ansi-colors@^4.1.1": - "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - "version" "4.1.1" - -"ansi-escapes@^3.0.0": - "integrity" "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz" - "version" "3.2.0" - -"ansi-escapes@^4.2.1", "ansi-escapes@^4.3.0", "ansi-escapes@^4.3.1": - "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" - "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - "version" "4.3.2" - dependencies: - "type-fest" "^0.21.3" - -"ansi-regex@^2.0.0": - "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - "version" "2.1.1" - -"ansi-regex@^3.0.0": - "integrity" "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" - "version" "3.0.0" - -"ansi-regex@^5.0.0": - "integrity" "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" - "version" "5.0.0" - -"ansi-styles@^2.2.1": - "integrity" "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz" - "version" "2.2.1" - -"ansi-styles@^3.2.1": - "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - "version" "3.2.1" - dependencies: - "color-convert" "^1.9.0" - -"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": - "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "color-convert" "^2.0.1" - -"any-observable@^0.3.0": - "integrity" "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==" - "resolved" "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz" - "version" "0.3.0" - -"anymatch@~3.1.1", "anymatch@~3.1.2": - "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" - "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "normalize-path" "^3.0.0" - "picomatch" "^2.0.4" - -"aproba@^1.0.3": - "integrity" "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - "resolved" "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" - "version" "1.2.0" - -"are-we-there-yet@~1.1.2": - "integrity" "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==" - "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz" - "version" "1.1.7" - dependencies: - "delegates" "^1.0.0" - "readable-stream" "^2.0.6" - -"arg@^4.1.0": - "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - "version" "4.1.3" - -"arg@^5.0.0": - "integrity" "sha512-4P8Zm2H+BRS+c/xX1LrHw0qKpEhdlZjLCgWy+d78T9vqa2Z2SiD2wMrYuWIAFy5IZUD7nnNXroRttz+0RzlrzQ==" - "resolved" "https://registry.npmjs.org/arg/-/arg-5.0.0.tgz" - "version" "5.0.0" - -"argparse@^1.0.7": - "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "sprintf-js" "~1.0.2" - -"argparse@^2.0.1": - "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - "version" "2.0.1" - -"aria-query@^4.2.2": - "integrity" "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==" - "resolved" "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz" - "version" "4.2.2" - dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" - -"array-includes-with-glob@^3.0.6": - "integrity" "sha512-/PZEKASyXWmUTkNhuxnmqybv1CmIdY5rp3axLy3Dv6SYfaBb+EgS7Nl991mquHT1N2u0YAnE3IOafVNRM6Y9dw==" - "resolved" "https://registry.npmjs.org/array-includes-with-glob/-/array-includes-with-glob-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "@babel/runtime" "^7.14.0" - "matcher" "^4.0.0" - -"array-includes@^3.1.1", "array-includes@^3.1.2", "array-includes@^3.1.3": - "integrity" "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==" - "resolved" "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz" - "version" "3.1.3" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - "es-abstract" "^1.18.0-next.2" - "get-intrinsic" "^1.1.1" - "is-string" "^1.0.5" - -"array-union@^2.1.0": - "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - "version" "2.1.0" - -"array.prototype.flat@^1.2.4": - "integrity" "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==" - "resolved" "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz" - "version" "1.2.4" - dependencies: - "call-bind" "^1.0.0" - "define-properties" "^1.1.3" - "es-abstract" "^1.18.0-next.1" - -"array.prototype.flatmap@^1.2.4": - "integrity" "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==" - "resolved" "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz" - "version" "1.2.4" - dependencies: - "call-bind" "^1.0.0" - "define-properties" "^1.1.3" - "es-abstract" "^1.18.0-next.1" - "function-bind" "^1.1.1" - -"asap@~2.0.3": - "integrity" "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - "resolved" "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" - "version" "2.0.6" - -"asn1.js@^5.2.0": - "integrity" "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==" - "resolved" "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" - "version" "5.4.1" - dependencies: - "bn.js" "^4.0.0" - "inherits" "^2.0.1" - "minimalistic-assert" "^1.0.0" - "safer-buffer" "^2.1.0" - -"assert@^1.1.1": - "integrity" "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==" - "resolved" "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz" - "version" "1.5.0" - dependencies: - "object-assign" "^4.1.1" - "util" "0.10.3" - -"assert@2.0.0": - "integrity" "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==" - "resolved" "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "es6-object-assign" "^1.1.0" - "is-nan" "^1.2.1" - "object-is" "^1.0.1" - "util" "^0.12.0" - -"ast-types-flow@^0.0.7": - "integrity" "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" - "resolved" "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" - "version" "0.0.7" - -"ast-types@0.13.2": - "integrity" "sha512-uWMHxJxtfj/1oZClOxDEV1sQ1HCDkA4MG8Gr69KKeBjEVH0R84WlejZ0y2DcwyBlpAEMltmVYkVgqfLFb2oyiA==" - "resolved" "https://registry.npmjs.org/ast-types/-/ast-types-0.13.2.tgz" - "version" "0.13.2" - -"astral-regex@^2.0.0": - "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - "version" "2.0.0" - -"async-retry@^1.3.1": - "integrity" "sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==" - "resolved" "https://registry.npmjs.org/async-retry/-/async-retry-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "retry" "0.12.0" - -"async-retry@1.2.3": - "integrity" "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==" - "resolved" "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz" - "version" "1.2.3" - dependencies: - "retry" "0.12.0" - -"asynckit@^0.4.0": - "integrity" "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - "version" "0.4.0" - -"auto-bind@~4.0.0": - "integrity" "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==" - "resolved" "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz" - "version" "4.0.0" - -"autoprefixer@^10.0.2", "autoprefixer@^10.2.6": - "integrity" "sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg==" - "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.6.tgz" - "version" "10.2.6" - dependencies: - "browserslist" "^4.16.6" - "caniuse-lite" "^1.0.30001230" - "colorette" "^1.2.2" - "fraction.js" "^4.1.1" - "normalize-range" "^0.1.2" - "postcss-value-parser" "^4.1.0" - -"autoprefixer@^9.6.1": - "integrity" "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==" - "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz" - "version" "9.8.6" - dependencies: - "browserslist" "^4.12.0" - "caniuse-lite" "^1.0.30001109" - "colorette" "^1.2.1" - "normalize-range" "^0.1.2" - "num2fraction" "^1.2.2" - "postcss" "^7.0.32" - "postcss-value-parser" "^4.1.0" - -"available-typed-arrays@^1.0.5": - "integrity" "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - "resolved" "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" - "version" "1.0.5" - -"axe-core@^4.0.2": - "integrity" "sha512-4Hk6iSA/H90rtiPoCpSkeJxNWCPBf7szwVvaUqrPdxo0j2Y04suHK9jPKXaE3WI7OET6wBSwsWw7FDc1DBq7iQ==" - "resolved" "https://registry.npmjs.org/axe-core/-/axe-core-4.3.4.tgz" - "version" "4.3.4" - -"axobject-query@^2.2.0": - "integrity" "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" - "resolved" "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz" - "version" "2.2.0" - -"babel-plugin-dynamic-import-node@^2.3.3": - "integrity" "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" - "resolved" "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" - "version" "2.3.3" - dependencies: - "object.assign" "^4.1.0" - -"babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0": - "integrity" "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" - "resolved" "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz" - "version" "7.0.0-beta.0" - -"babel-preset-fbjs@^3.3.0": - "integrity" "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==" - "resolved" "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz" - "version" "3.4.0" - dependencies: - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-block-scoped-functions" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-member-expression-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-property-literals" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - "babel-plugin-syntax-trailing-function-commas" "^7.0.0-beta.0" - -"backo2@^1.0.2": - "integrity" "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - "resolved" "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz" - "version" "1.0.2" - -"balanced-match@^1.0.0": - "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - "version" "1.0.2" - -"base64-js@^1.0.2", "base64-js@^1.3.1": - "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - "version" "1.5.1" - -"big.js@^5.2.2": - "integrity" "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - "resolved" "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" - "version" "5.2.2" - -"binary-extensions@^2.0.0": - "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - "version" "2.2.0" - -"bl@^4.0.3": - "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" - "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "buffer" "^5.5.0" - "inherits" "^2.0.4" - "readable-stream" "^3.4.0" - -"bn.js@^4.0.0": - "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - "version" "4.12.0" - -"bn.js@^4.1.0": - "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - "version" "4.12.0" - -"bn.js@^4.11.9": - "integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - "version" "4.12.0" - -"bn.js@^5.0.0", "bn.js@^5.1.1": - "integrity" "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz" - "version" "5.2.0" - -"body-scroll-lock@^3.1.5": - "integrity" "sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg==" - "resolved" "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz" - "version" "3.1.5" - -"brace-expansion@^1.1.7": - "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" - "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - "version" "1.1.11" - dependencies: - "balanced-match" "^1.0.0" - "concat-map" "0.0.1" - -"braces@^3.0.1", "braces@~3.0.2": - "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" - "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "fill-range" "^7.0.1" - -"brorand@^1.0.1", "brorand@^1.1.0": - "integrity" "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - "resolved" "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" - "version" "1.1.0" - -"browserify-aes@^1.0.0", "browserify-aes@^1.0.4": - "integrity" "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==" - "resolved" "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "buffer-xor" "^1.0.3" - "cipher-base" "^1.0.0" - "create-hash" "^1.1.0" - "evp_bytestokey" "^1.0.3" - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" - -"browserify-cipher@^1.0.0": - "integrity" "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==" - "resolved" "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "browserify-aes" "^1.0.4" - "browserify-des" "^1.0.0" - "evp_bytestokey" "^1.0.0" - -"browserify-des@^1.0.0": - "integrity" "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==" - "resolved" "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "cipher-base" "^1.0.1" - "des.js" "^1.0.0" - "inherits" "^2.0.1" - "safe-buffer" "^5.1.2" - -"browserify-rsa@^4.0.0", "browserify-rsa@^4.0.1": - "integrity" "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==" - "resolved" "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "bn.js" "^5.0.0" - "randombytes" "^2.0.1" - -"browserify-sign@^4.0.0": - "integrity" "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==" - "resolved" "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "bn.js" "^5.1.1" - "browserify-rsa" "^4.0.1" - "create-hash" "^1.2.0" - "create-hmac" "^1.1.7" - "elliptic" "^6.5.3" - "inherits" "^2.0.4" - "parse-asn1" "^5.1.5" - "readable-stream" "^3.6.0" - "safe-buffer" "^5.2.0" - -"browserify-zlib@^0.2.0", "browserify-zlib@0.2.0": - "integrity" "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==" - "resolved" "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz" - "version" "0.2.0" - dependencies: - "pako" "~1.0.5" - -"browserslist@^4.12.0", "browserslist@^4.16.6", "browserslist@^4.6.4", "browserslist@4.16.6": - "integrity" "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==" - "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz" - "version" "4.16.6" - dependencies: - "caniuse-lite" "^1.0.30001219" - "colorette" "^1.2.2" - "electron-to-chromium" "^1.3.723" - "escalade" "^3.1.1" - "node-releases" "^1.1.71" - -"bser@2.1.1": - "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" - "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "node-int64" "^0.4.0" - -"buffer-equal-constant-time@1.0.1": - "integrity" "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - "resolved" "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" - "version" "1.0.1" - -"buffer-from@^1.0.0": - "integrity" "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" - "version" "1.1.1" - -"buffer-xor@^1.0.3": - "integrity" "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - "resolved" "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" - "version" "1.0.3" - -"buffer@^4.3.0": - "integrity" "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" - "version" "4.9.2" - dependencies: - "base64-js" "^1.0.2" - "ieee754" "^1.1.4" - "isarray" "^1.0.0" - -"buffer@^5.5.0", "buffer@5.6.0": - "integrity" "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz" - "version" "5.6.0" - dependencies: - "base64-js" "^1.0.2" - "ieee754" "^1.1.4" - -"buffer@^5.7.0": - "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" - "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - "version" "5.7.1" - dependencies: - "base64-js" "^1.3.1" - "ieee754" "^1.1.13" - -"builtin-status-codes@^3.0.0": - "integrity" "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - "resolved" "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz" - "version" "3.0.0" - -"bytes@^3.0.0", "bytes@3.1.0": - "integrity" "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz" - "version" "3.1.0" - -"cacheable-request@^6.0.0": - "integrity" "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==" - "resolved" "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "clone-response" "^1.0.2" - "get-stream" "^5.1.0" - "http-cache-semantics" "^4.0.0" - "keyv" "^3.0.0" - "lowercase-keys" "^2.0.0" - "normalize-url" "^4.1.0" - "responselike" "^1.0.2" - -"call-bind@^1.0.0", "call-bind@^1.0.2": - "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" - "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "function-bind" "^1.1.1" - "get-intrinsic" "^1.0.2" - -"callsites@^3.0.0": - "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - "version" "3.1.0" - -"camel-case@^4.1.2", "camel-case@4.1.2": - "integrity" "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==" - "resolved" "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "pascal-case" "^3.1.2" - "tslib" "^2.0.3" - -"camelcase-css@^2.0.1": - "integrity" "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" - "resolved" "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" - "version" "2.0.1" - -"camelcase@^5.0.0": - "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - "version" "5.3.1" - -"caniuse-lite@^1.0.30000981", "caniuse-lite@^1.0.30001109", "caniuse-lite@^1.0.30001202", "caniuse-lite@^1.0.30001219", "caniuse-lite@^1.0.30001228", "caniuse-lite@^1.0.30001230": - "integrity" "sha512-pDHgRndit6p1NR2GhzMbQ6CkRrp4VKuSsqbcLeOQppYPKOYkKT/6ZvZDvKJUqcmtyWIAHuZq3SVS2vc1egCZzw==" - "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz" - "version" "1.0.30001237" - -"capital-case@^1.0.4": - "integrity" "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==" - "resolved" "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "no-case" "^3.0.4" - "tslib" "^2.0.3" - "upper-case-first" "^2.0.2" - -"chalk@^1.0.0", "chalk@^1.1.3": - "integrity" "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "ansi-styles" "^2.2.1" - "escape-string-regexp" "^1.0.2" - "has-ansi" "^2.0.0" - "strip-ansi" "^3.0.0" - "supports-color" "^2.0.0" - -"chalk@^2.0.0": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^2.4.1": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^2.4.2": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@^4.0.0", "chalk@^4.1.0", "chalk@^4.1.1": - "integrity" "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz" - "version" "4.1.1" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"chalk@2.4.2": - "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - "version" "2.4.2" - dependencies: - "ansi-styles" "^3.2.1" - "escape-string-regexp" "^1.0.5" - "supports-color" "^5.3.0" - -"chalk@4.0.0": - "integrity" "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==" - "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-styles" "^4.1.0" - "supports-color" "^7.1.0" - -"change-case-all@1.0.14": - "integrity" "sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==" - "resolved" "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.14.tgz" - "version" "1.0.14" - dependencies: - "change-case" "^4.1.2" - "is-lower-case" "^2.0.2" - "is-upper-case" "^2.0.2" - "lower-case" "^2.0.2" - "lower-case-first" "^2.0.2" - "sponge-case" "^1.0.1" - "swap-case" "^2.0.2" - "title-case" "^3.0.3" - "upper-case" "^2.0.2" - "upper-case-first" "^2.0.2" - -"change-case@^4.1.2": - "integrity" "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==" - "resolved" "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "camel-case" "^4.1.2" - "capital-case" "^1.0.4" - "constant-case" "^3.0.4" - "dot-case" "^3.0.4" - "header-case" "^2.0.4" - "no-case" "^3.0.4" - "param-case" "^3.0.4" - "pascal-case" "^3.1.2" - "path-case" "^3.0.4" - "sentence-case" "^3.0.4" - "snake-case" "^3.0.4" - "tslib" "^2.0.3" - -"chardet@^0.7.0": - "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - "version" "0.7.0" - -"chokidar@^3.5.1": - "integrity" "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==" - "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz" - "version" "3.5.2" - dependencies: - "anymatch" "~3.1.2" - "braces" "~3.0.2" - "glob-parent" "~5.1.2" - "is-binary-path" "~2.1.0" - "is-glob" "~4.0.1" - "normalize-path" "~3.0.0" - "readdirp" "~3.6.0" - optionalDependencies: - "fsevents" "~2.3.2" - -"chokidar@3.5.1": - "integrity" "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==" - "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz" - "version" "3.5.1" - dependencies: - "anymatch" "~3.1.1" - "braces" "~3.0.2" - "glob-parent" "~5.1.0" - "is-binary-path" "~2.1.0" - "is-glob" "~4.0.1" - "normalize-path" "~3.0.0" - "readdirp" "~3.5.0" - optionalDependencies: - "fsevents" "~2.3.1" - -"chownr@^1.1.1": - "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - "resolved" "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" - "version" "1.1.4" - -"cipher-base@^1.0.0", "cipher-base@^1.0.1", "cipher-base@^1.0.3": - "integrity" "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==" - "resolved" "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" - -"classnames@^2.3.1": - "integrity" "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" - "resolved" "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz" - "version" "2.3.1" - -"classnames@2.2.6": - "integrity" "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - "resolved" "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz" - "version" "2.2.6" - -"clean-stack@^2.0.0": - "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - "version" "2.2.0" - -"cli-cursor@^2.0.0": - "integrity" "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=" - "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "restore-cursor" "^2.0.0" - -"cli-cursor@^2.1.0": - "integrity" "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=" - "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "restore-cursor" "^2.0.0" - -"cli-cursor@^3.1.0": - "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" - "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "restore-cursor" "^3.1.0" - -"cli-truncate@^0.2.1": - "integrity" "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=" - "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz" - "version" "0.2.1" - dependencies: - "slice-ansi" "0.0.4" - "string-width" "^1.0.1" - -"cli-truncate@^2.1.0": - "integrity" "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==" - "resolved" "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "slice-ansi" "^3.0.0" - "string-width" "^4.2.0" - -"cli-width@^3.0.0": - "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" - "version" "3.0.0" - -"cliui@^6.0.0": - "integrity" "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "string-width" "^4.2.0" - "strip-ansi" "^6.0.0" - "wrap-ansi" "^6.2.0" - -"cliui@^7.0.2": - "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" - "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - "version" "7.0.4" - dependencies: - "string-width" "^4.2.0" - "strip-ansi" "^6.0.0" - "wrap-ansi" "^7.0.0" - -"clone-response@^1.0.2": - "integrity" "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=" - "resolved" "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "mimic-response" "^1.0.0" - -"code-point-at@^1.0.0": - "integrity" "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" - "version" "1.1.0" - -"color-convert@^1.9.0": - "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - "version" "1.9.3" - dependencies: - "color-name" "1.1.3" - -"color-convert@^1.9.1": - "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - "version" "1.9.3" - dependencies: - "color-name" "1.1.3" - -"color-convert@^2.0.1": - "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" - "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "color-name" "~1.1.4" - -"color-name@^1.0.0", "color-name@~1.1.4": - "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - "version" "1.1.4" - -"color-name@1.1.3": - "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - "version" "1.1.3" - -"color-string@^1.5.4", "color-string@^1.6.0": - "integrity" "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==" - "resolved" "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz" - "version" "1.6.0" - dependencies: - "color-name" "^1.0.0" - "simple-swizzle" "^0.2.2" - -"color@^3.1.3": - "integrity" "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==" - "resolved" "https://registry.npmjs.org/color/-/color-3.1.3.tgz" - "version" "3.1.3" - dependencies: - "color-convert" "^1.9.1" - "color-string" "^1.5.4" - -"color@^4.0.1": - "integrity" "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==" - "resolved" "https://registry.npmjs.org/color/-/color-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "color-convert" "^2.0.1" - "color-string" "^1.6.0" - -"colorette@^1.2.1", "colorette@^1.2.2": - "integrity" "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - "resolved" "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz" - "version" "1.2.2" - -"combined-stream@^1.0.8": - "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" - "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - "version" "1.0.8" - dependencies: - "delayed-stream" "~1.0.0" - -"commander@^6.0.0": - "integrity" "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" - "resolved" "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" - "version" "6.2.1" - -"commander@^6.2.0": - "integrity" "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" - "resolved" "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" - "version" "6.2.1" - -"commander@^7.2.0": - "integrity" "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - "resolved" "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" - "version" "7.2.0" - -"common-tags@^1.8.0", "common-tags@1.8.0": - "integrity" "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" - "resolved" "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz" - "version" "1.8.0" - -"commondir@^1.0.1": - "integrity" "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - "resolved" "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" - "version" "1.0.1" - -"concat-map@0.0.1": - "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - "version" "0.0.1" - -"console-browserify@^1.1.0": - "integrity" "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - "resolved" "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz" - "version" "1.2.0" - -"console-control-strings@^1.0.0", "console-control-strings@~1.1.0": - "integrity" "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - "version" "1.1.0" - -"constant-case@^3.0.4": - "integrity" "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==" - "resolved" "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "no-case" "^3.0.4" - "tslib" "^2.0.3" - "upper-case" "^2.0.2" - -"constants-browserify@^1.0.0", "constants-browserify@1.0.0": - "integrity" "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - "resolved" "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz" - "version" "1.0.0" - -"convert-source-map@^1.7.0": - "integrity" "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" - "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" - "version" "1.8.0" - dependencies: - "safe-buffer" "~5.1.1" - -"convert-source-map@1.7.0": - "integrity" "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==" - "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" - "version" "1.7.0" - dependencies: - "safe-buffer" "~5.1.1" - -"cookie@^0.4.1": - "integrity" "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" - "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz" - "version" "0.4.1" - -"core-js-pure@^3.16.0": - "integrity" "sha512-UEQk8AxyCYvNAs6baNoPqDADv7BX0AmBLGxVsrAifPPx/C8EAzV4Q+2ZUJqVzfI2TQQEZITnwUkWcHpgc/IubQ==" - "resolved" "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.0.tgz" - "version" "3.19.0" - -"core-util-is@~1.0.0": - "integrity" "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - "version" "1.0.2" - -"cosmiconfig-toml-loader@1.0.0": - "integrity" "sha512-H/2gurFWVi7xXvCyvsWRLCMekl4tITJcX0QEsDMpzxtuxDyM59xLatYNg4s/k9AA/HdtCYfj2su8mgA0GSDLDA==" - "resolved" "https://registry.npmjs.org/cosmiconfig-toml-loader/-/cosmiconfig-toml-loader-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "@iarna/toml" "^2.2.5" - -"cosmiconfig@^7.0.0", "cosmiconfig@>=6", "cosmiconfig@7.0.0": - "integrity" "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==" - "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "@types/parse-json" "^4.0.0" - "import-fresh" "^3.2.1" - "parse-json" "^5.0.0" - "path-type" "^4.0.0" - "yaml" "^1.10.0" - -"create-ecdh@^4.0.0": - "integrity" "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==" - "resolved" "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" - "version" "4.0.4" - dependencies: - "bn.js" "^4.1.0" - "elliptic" "^6.5.3" - -"create-hash@^1.1.0", "create-hash@^1.1.2", "create-hash@^1.2.0": - "integrity" "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==" - "resolved" "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "cipher-base" "^1.0.1" - "inherits" "^2.0.1" - "md5.js" "^1.3.4" - "ripemd160" "^2.0.1" - "sha.js" "^2.4.0" - -"create-hmac@^1.1.0", "create-hmac@^1.1.4", "create-hmac@^1.1.7": - "integrity" "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==" - "resolved" "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" - "version" "1.1.7" - dependencies: - "cipher-base" "^1.0.3" - "create-hash" "^1.1.0" - "inherits" "^2.0.1" - "ripemd160" "^2.0.0" - "safe-buffer" "^5.0.1" - "sha.js" "^2.4.8" - -"create-require@^1.1.0": - "integrity" "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - "version" "1.1.1" - -"cross-fetch@^3.0.4", "cross-fetch@^3.0.6", "cross-fetch@3.0.6": - "integrity" "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==" - "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz" - "version" "3.0.6" - dependencies: - "node-fetch" "2.6.1" - -"cross-fetch@3.1.4": - "integrity" "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==" - "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz" - "version" "3.1.4" - dependencies: - "node-fetch" "2.6.1" - -"cross-spawn@^7.0.2", "cross-spawn@^7.0.3": - "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - "version" "7.0.3" - dependencies: - "path-key" "^3.1.0" - "shebang-command" "^2.0.0" - "which" "^2.0.1" - -"crypto-browserify@^3.11.0", "crypto-browserify@3.12.0": - "integrity" "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==" - "resolved" "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" - "version" "3.12.0" - dependencies: - "browserify-cipher" "^1.0.0" - "browserify-sign" "^4.0.0" - "create-ecdh" "^4.0.0" - "create-hash" "^1.1.0" - "create-hmac" "^1.1.0" - "diffie-hellman" "^5.0.0" - "inherits" "^2.0.1" - "pbkdf2" "^3.0.3" - "public-encrypt" "^4.0.0" - "randombytes" "^2.0.0" - "randomfill" "^1.0.3" - -"css-blank-pseudo@^0.1.4": - "integrity" "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==" - "resolved" "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz" - "version" "0.1.4" - dependencies: - "postcss" "^7.0.5" - -"css-has-pseudo@^0.10.0": - "integrity" "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==" - "resolved" "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz" - "version" "0.10.0" - dependencies: - "postcss" "^7.0.6" - "postcss-selector-parser" "^5.0.0-rc.4" - -"css-prefers-color-scheme@^3.1.1": - "integrity" "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==" - "resolved" "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "postcss" "^7.0.5" - -"css-unit-converter@^1.1.1": - "integrity" "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" - "resolved" "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz" - "version" "1.1.2" - -"css.escape@1.5.1": - "integrity" "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" - "resolved" "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz" - "version" "1.5.1" - -"cssdb@^4.4.0": - "integrity" "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" - "resolved" "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz" - "version" "4.4.0" - -"cssesc@^2.0.0": - "integrity" "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - "resolved" "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz" - "version" "2.0.0" - -"cssesc@^3.0.0": - "integrity" "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - "resolved" "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" - "version" "3.0.0" - -"cssnano-preset-simple@^3.0.0": - "integrity" "sha512-vxQPeoMRqUT3c/9f0vWeVa2nKQIHFpogtoBvFdW4GQ3IvEJ6uauCP6p3Y5zQDLFcI7/+40FTgX12o7XUL0Ko+w==" - "resolved" "https://registry.npmjs.org/cssnano-preset-simple/-/cssnano-preset-simple-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "caniuse-lite" "^1.0.30001202" - -"cssnano-simple@3.0.0": - "integrity" "sha512-oU3ueli5Dtwgh0DyeohcIEE00QVfbPR3HzyXdAl89SfnQG3y0/qcpfLVW+jPIh3/rgMZGwuW96rejZGaYE9eUg==" - "resolved" "https://registry.npmjs.org/cssnano-simple/-/cssnano-simple-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "cssnano-preset-simple" "^3.0.0" - -"csstype@^3.0.2": - "integrity" "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==" - "resolved" "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz" - "version" "3.0.8" - -"damerau-levenshtein@^1.0.6": - "integrity" "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==" - "resolved" "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz" - "version" "1.0.7" - -"data-uri-to-buffer@3.0.1": - "integrity" "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" - "resolved" "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz" - "version" "3.0.1" - -"dataloader@2.0.0": - "integrity" "sha512-YzhyDAwA4TaQIhM5go+vCLmU0UikghC/t9DTQYZR2M/UvZ1MdOhPezSDZcjj9uqQJOMqjLcpWtyW2iNINdlatQ==" - "resolved" "https://registry.npmjs.org/dataloader/-/dataloader-2.0.0.tgz" - "version" "2.0.0" - -"date-fns@^1.27.2": - "integrity" "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" - "resolved" "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz" - "version" "1.30.1" - -"debounce@^1.2.0": - "integrity" "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" - "resolved" "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz" - "version" "1.2.1" - -"debug@^2.6.9": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@^3.1.0": - "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - "version" "3.2.7" - dependencies: - "ms" "^2.1.1" - -"debug@^3.2.7": - "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - "version" "3.2.7" - dependencies: - "ms" "^2.1.1" - -"debug@^4.0.1", "debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1", "debug@4": - "integrity" "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" - "version" "4.3.1" - dependencies: - "ms" "2.1.2" - -"debug@2": - "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" - "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - "version" "2.6.9" - dependencies: - "ms" "2.0.0" - -"debug@3.1.0": - "integrity" "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==" - "resolved" "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "ms" "2.0.0" - -"decamelize@^1.2.0": - "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - "version" "1.2.0" - -"decompress-response@^3.3.0": - "integrity" "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=" - "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "mimic-response" "^1.0.0" - -"decompress-response@^4.2.0": - "integrity" "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==" - "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "mimic-response" "^2.0.0" - -"dedent@^0.7.0": - "integrity" "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" - "resolved" "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" - "version" "0.7.0" - -"deep-extend@^0.6.0": - "integrity" "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - "version" "0.6.0" - -"deep-is@^0.1.3": - "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - "version" "0.1.3" - -"deepmerge@^4.2.2", "deepmerge@4.2.2": - "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" - "version" "4.2.2" - -"defer-to-connect@^1.0.1": - "integrity" "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - "resolved" "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" - "version" "1.1.3" - -"define-properties@^1.1.3": - "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" - "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "object-keys" "^1.0.12" - -"defined@^1.0.0": - "integrity" "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - "resolved" "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz" - "version" "1.0.0" - -"delayed-stream@~1.0.0": - "integrity" "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - "version" "1.0.0" - -"delegates@^1.0.0": - "integrity" "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - "version" "1.0.0" - -"depd@~1.1.2": - "integrity" "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - "version" "1.1.2" - -"dependency-graph@^0.11.0": - "integrity" "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==" - "resolved" "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz" - "version" "0.11.0" - -"dequal@2.0.2": - "integrity" "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==" - "resolved" "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz" - "version" "2.0.2" - -"des.js@^1.0.0": - "integrity" "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==" - "resolved" "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "inherits" "^2.0.1" - "minimalistic-assert" "^1.0.0" - -"detect-indent@^6.0.0": - "integrity" "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==" - "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz" - "version" "6.1.0" - -"detect-libc@^1.0.3": - "integrity" "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" - "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" - "version" "1.0.3" - -"detective@^5.2.0": - "integrity" "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==" - "resolved" "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz" - "version" "5.2.0" - dependencies: - "acorn-node" "^1.6.1" - "defined" "^1.0.0" - "minimist" "^1.1.1" - -"didyoumean@^1.2.1": - "integrity" "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=" - "resolved" "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz" - "version" "1.2.1" - -"diff@^4.0.1": - "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - "version" "4.0.2" - -"diffie-hellman@^5.0.0": - "integrity" "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==" - "resolved" "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" - "version" "5.0.3" - dependencies: - "bn.js" "^4.1.0" - "miller-rabin" "^4.0.0" - "randombytes" "^2.0.0" - -"dir-glob@^3.0.1": - "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" - "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "path-type" "^4.0.0" - -"dlv@^1.1.3": - "integrity" "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - "resolved" "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz" - "version" "1.1.3" - -"doctrine@^2.1.0": - "integrity" "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==" - "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "esutils" "^2.0.2" - -"doctrine@^3.0.0": - "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" - "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "esutils" "^2.0.2" - -"domain-browser@^1.1.1": - "integrity" "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - "resolved" "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz" - "version" "1.2.0" - -"domain-browser@4.19.0": - "integrity" "sha512-fRA+BaAWOR/yr/t7T9E9GJztHPeFjj8U35ajyAjCDtAAnTn1Rc1f6W6VGPJrO1tkQv9zWu+JRof7z6oQtiYVFQ==" - "resolved" "https://registry.npmjs.org/domain-browser/-/domain-browser-4.19.0.tgz" - "version" "4.19.0" - -"dot-case@^3.0.4": - "integrity" "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==" - "resolved" "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "no-case" "^3.0.4" - "tslib" "^2.0.3" - -"dotenv@^8.2.0": - "integrity" "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" - "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz" - "version" "8.6.0" - -"duplexer@^0.1.2": - "integrity" "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - "resolved" "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" - "version" "0.1.2" - -"duplexer3@^0.1.4": - "integrity" "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" - "version" "0.1.4" - -"ecdsa-sig-formatter@1.0.11": - "integrity" "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==" - "resolved" "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" - "version" "1.0.11" - dependencies: - "safe-buffer" "^5.0.1" - -"electron-to-chromium@^1.3.723": - "integrity" "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==" - "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.752.tgz" - "version" "1.3.752" - -"elegant-spinner@^1.0.1": - "integrity" "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=" - "resolved" "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz" - "version" "1.0.1" - -"elliptic@^6.5.3": - "integrity" "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==" - "resolved" "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" - "version" "6.5.4" - dependencies: - "bn.js" "^4.11.9" - "brorand" "^1.1.0" - "hash.js" "^1.0.0" - "hmac-drbg" "^1.0.1" - "inherits" "^2.0.4" - "minimalistic-assert" "^1.0.1" - "minimalistic-crypto-utils" "^1.0.1" - -"email-validator@^2.0.4": - "integrity" "sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==" - "resolved" "https://registry.npmjs.org/email-validator/-/email-validator-2.0.4.tgz" - "version" "2.0.4" - -"emoji-regex@^8.0.0": - "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - "version" "8.0.0" - -"emoji-regex@^9.0.0": - "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - "version" "9.2.2" - -"emojis-list@^2.0.0": - "integrity" "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - "resolved" "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz" - "version" "2.1.0" - -"encoding@^0.1.11", "encoding@0.1.13": - "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" - "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - "version" "0.1.13" - dependencies: - "iconv-lite" "^0.6.2" - -"end-of-stream@^1.1.0", "end-of-stream@^1.4.1": - "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" - "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - "version" "1.4.4" - dependencies: - "once" "^1.4.0" - -"enquirer@^2.3.5", "enquirer@^2.3.6", "enquirer@>= 2.3.0 < 3": - "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" - "resolved" "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" - "version" "2.3.6" - dependencies: - "ansi-colors" "^4.1.1" - -"error-ex@^1.3.1": - "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" - "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "is-arrayish" "^0.2.1" - -"es-abstract@^1.18.0-next.1", "es-abstract@^1.18.0-next.2", "es-abstract@^1.18.2", "es-abstract@^1.18.5": - "integrity" "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==" - "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz" - "version" "1.18.6" - dependencies: - "call-bind" "^1.0.2" - "es-to-primitive" "^1.2.1" - "function-bind" "^1.1.1" - "get-intrinsic" "^1.1.1" - "get-symbol-description" "^1.0.0" - "has" "^1.0.3" - "has-symbols" "^1.0.2" - "internal-slot" "^1.0.3" - "is-callable" "^1.2.4" - "is-negative-zero" "^2.0.1" - "is-regex" "^1.1.4" - "is-string" "^1.0.7" - "object-inspect" "^1.11.0" - "object-keys" "^1.1.1" - "object.assign" "^4.1.2" - "string.prototype.trimend" "^1.0.4" - "string.prototype.trimstart" "^1.0.4" - "unbox-primitive" "^1.0.1" - -"es-to-primitive@^1.2.1": - "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" - "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "is-callable" "^1.1.4" - "is-date-object" "^1.0.1" - "is-symbol" "^1.0.2" - -"es6-object-assign@^1.1.0": - "integrity" "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=" - "resolved" "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz" - "version" "1.1.0" - -"es6-promise@^4.0.5": - "integrity" "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - "resolved" "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" - "version" "4.2.8" - -"escalade@^3.1.1": - "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - "version" "3.1.1" - -"escape-string-regexp@^1.0.2", "escape-string-regexp@^1.0.5": - "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - "version" "1.0.5" - -"escape-string-regexp@^4.0.0": - "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - "version" "4.0.0" - -"eslint-config-next@^11.0.1": - "integrity" "sha512-yy63K4Bmy8amE6VMb26CZK6G99cfVX3JaMTvuvmq/LL8/b8vKHcauUZREBTAQ+2DrIvlH4YrFXrkQ1vpYDL9Eg==" - "resolved" "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-11.0.1.tgz" - "version" "11.0.1" - dependencies: - "@next/eslint-plugin-next" "11.0.1" - "@rushstack/eslint-patch" "^1.0.6" - "@typescript-eslint/parser" "^4.20.0" - "eslint-import-resolver-node" "^0.3.4" - "eslint-import-resolver-typescript" "^2.4.0" - "eslint-plugin-import" "^2.22.1" - "eslint-plugin-jsx-a11y" "^6.4.1" - "eslint-plugin-react" "^7.23.1" - "eslint-plugin-react-hooks" "^4.2.0" - -"eslint-config-prettier@^8.3.0": - "integrity" "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==" - "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz" - "version" "8.3.0" - -"eslint-import-resolver-node@^0.3.4": - "integrity" "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==" - "resolved" "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz" - "version" "0.3.4" - dependencies: - "debug" "^2.6.9" - "resolve" "^1.13.1" - -"eslint-import-resolver-typescript@^2.4.0": - "integrity" "sha512-useJKURidCcldRLCNKWemr1fFQL1SzB3G4a0li6lFGvlc5xGe1hY343bvG07cbpCzPuM/lK19FIJB3XGFSkplA==" - "resolved" "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.4.0.tgz" - "version" "2.4.0" - dependencies: - "debug" "^4.1.1" - "glob" "^7.1.6" - "is-glob" "^4.0.1" - "resolve" "^1.17.0" - "tsconfig-paths" "^3.9.0" - -"eslint-module-utils@^2.6.1": - "integrity" "sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A==" - "resolved" "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz" - "version" "2.6.1" - dependencies: - "debug" "^3.2.7" - "pkg-dir" "^2.0.0" - -"eslint-plugin-import@*", "eslint-plugin-import@^2.22.1": - "integrity" "sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==" - "resolved" "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz" - "version" "2.23.4" - dependencies: - "array-includes" "^3.1.3" - "array.prototype.flat" "^1.2.4" - "debug" "^2.6.9" - "doctrine" "^2.1.0" - "eslint-import-resolver-node" "^0.3.4" - "eslint-module-utils" "^2.6.1" - "find-up" "^2.0.0" - "has" "^1.0.3" - "is-core-module" "^2.4.0" - "minimatch" "^3.0.4" - "object.values" "^1.1.3" - "pkg-up" "^2.0.0" - "read-pkg-up" "^3.0.0" - "resolve" "^1.20.0" - "tsconfig-paths" "^3.9.0" - -"eslint-plugin-jsx-a11y@^6.4.1": - "integrity" "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==" - "resolved" "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz" - "version" "6.4.1" - dependencies: - "@babel/runtime" "^7.11.2" - "aria-query" "^4.2.2" - "array-includes" "^3.1.1" - "ast-types-flow" "^0.0.7" - "axe-core" "^4.0.2" - "axobject-query" "^2.2.0" - "damerau-levenshtein" "^1.0.6" - "emoji-regex" "^9.0.0" - "has" "^1.0.3" - "jsx-ast-utils" "^3.1.0" - "language-tags" "^1.0.5" - -"eslint-plugin-react-hooks@^4.2.0": - "integrity" "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==" - "resolved" "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz" - "version" "4.2.0" - -"eslint-plugin-react@^7.23.1": - "integrity" "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==" - "resolved" "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz" - "version" "7.24.0" - dependencies: - "array-includes" "^3.1.3" - "array.prototype.flatmap" "^1.2.4" - "doctrine" "^2.1.0" - "has" "^1.0.3" - "jsx-ast-utils" "^2.4.1 || ^3.0.0" - "minimatch" "^3.0.4" - "object.entries" "^1.1.4" - "object.fromentries" "^2.0.4" - "object.values" "^1.1.4" - "prop-types" "^15.7.2" - "resolve" "^2.0.0-next.3" - "string.prototype.matchall" "^4.0.5" - -"eslint-scope@^5.1.1": - "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" - "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "esrecurse" "^4.3.0" - "estraverse" "^4.1.1" - -"eslint-utils@^2.1.0": - "integrity" "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==" - "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "eslint-visitor-keys" "^1.1.0" - -"eslint-visitor-keys@^1.1.0": - "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" - "version" "1.3.0" - -"eslint-visitor-keys@^1.3.0": - "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" - "version" "1.3.0" - -"eslint-visitor-keys@^2.0.0": - "integrity" "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - "version" "2.1.0" - -"eslint@*", "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0", "eslint@^3 || ^4 || ^5 || ^6 || ^7", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", "eslint@^5.0.0 || ^6.0.0 || ^7.0.0", "eslint@^7.23.0", "eslint@^7.31.0", "eslint@>=7.0.0": - "integrity" "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==" - "resolved" "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz" - "version" "7.31.0" - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - "ajv" "^6.10.0" - "chalk" "^4.0.0" - "cross-spawn" "^7.0.2" - "debug" "^4.0.1" - "doctrine" "^3.0.0" - "enquirer" "^2.3.5" - "escape-string-regexp" "^4.0.0" - "eslint-scope" "^5.1.1" - "eslint-utils" "^2.1.0" - "eslint-visitor-keys" "^2.0.0" - "espree" "^7.3.1" - "esquery" "^1.4.0" - "esutils" "^2.0.2" - "fast-deep-equal" "^3.1.3" - "file-entry-cache" "^6.0.1" - "functional-red-black-tree" "^1.0.1" - "glob-parent" "^5.1.2" - "globals" "^13.6.0" - "ignore" "^4.0.6" - "import-fresh" "^3.0.0" - "imurmurhash" "^0.1.4" - "is-glob" "^4.0.0" - "js-yaml" "^3.13.1" - "json-stable-stringify-without-jsonify" "^1.0.1" - "levn" "^0.4.1" - "lodash.merge" "^4.6.2" - "minimatch" "^3.0.4" - "natural-compare" "^1.4.0" - "optionator" "^0.9.1" - "progress" "^2.0.0" - "regexpp" "^3.1.0" - "semver" "^7.2.1" - "strip-ansi" "^6.0.0" - "strip-json-comments" "^3.1.0" - "table" "^6.0.9" - "text-table" "^0.2.0" - "v8-compile-cache" "^2.0.3" - -"espree@^7.3.0", "espree@^7.3.1": - "integrity" "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==" - "resolved" "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" - "version" "7.3.1" - dependencies: - "acorn" "^7.4.0" - "acorn-jsx" "^5.3.1" - "eslint-visitor-keys" "^1.3.0" - -"esprima@^4.0.0": - "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - "version" "4.0.1" - -"esquery@^1.4.0": - "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" - "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "estraverse" "^5.1.0" - -"esrecurse@^4.3.0": - "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" - "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "estraverse" "^5.2.0" - -"estraverse@^4.1.1": - "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - "version" "4.3.0" - -"estraverse@^5.1.0": - "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - "version" "5.2.0" - -"estraverse@^5.2.0": - "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - "version" "5.2.0" - -"esutils@^2.0.2": - "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - "version" "2.0.3" - -"etag@1.8.1": - "integrity" "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - "version" "1.8.1" - -"event-target-shim@^5.0.0": - "integrity" "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - "resolved" "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" - "version" "5.0.1" - -"eventemitter3@^3.1.0": - "integrity" "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" - "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz" - "version" "3.1.2" - -"events@^3.0.0": - "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" - "version" "3.3.0" - -"evp_bytestokey@^1.0.0", "evp_bytestokey@^1.0.3": - "integrity" "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==" - "resolved" "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "md5.js" "^1.3.4" - "safe-buffer" "^5.1.1" - -"execa@^5.0.0": - "integrity" "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==" - "resolved" "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "cross-spawn" "^7.0.3" - "get-stream" "^6.0.0" - "human-signals" "^2.1.0" - "is-stream" "^2.0.0" - "merge-stream" "^2.0.0" - "npm-run-path" "^4.0.1" - "onetime" "^5.1.2" - "signal-exit" "^3.0.3" - "strip-final-newline" "^2.0.0" - -"expand-template@^2.0.3": - "integrity" "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" - "resolved" "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" - "version" "2.0.3" - -"external-editor@^3.0.3": - "integrity" "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==" - "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "chardet" "^0.7.0" - "iconv-lite" "^0.4.24" - "tmp" "^0.0.33" - -"extract-files@^9.0.0", "extract-files@9.0.0": - "integrity" "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==" - "resolved" "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz" - "version" "9.0.0" - -"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": - "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - "version" "3.1.3" - -"fast-glob@^3.1.1", "fast-glob@^3.2.5": - "integrity" "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==" - "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz" - "version" "3.2.5" - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - "glob-parent" "^5.1.0" - "merge2" "^1.3.0" - "micromatch" "^4.0.2" - "picomatch" "^2.2.1" - -"fast-json-stable-stringify@^2.0.0": - "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - "version" "2.1.0" - -"fast-levenshtein@^2.0.6": - "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - "version" "2.0.6" - -"fastq@^1.6.0": - "integrity" "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==" - "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz" - "version" "1.11.0" - dependencies: - "reusify" "^1.0.4" - -"fb-watchman@^2.0.0": - "integrity" "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==" - "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "bser" "2.1.1" - -"fbjs-css-vars@^1.0.0": - "integrity" "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - "resolved" "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz" - "version" "1.0.2" - -"fbjs@^3.0.0": - "integrity" "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==" - "resolved" "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "cross-fetch" "^3.0.4" - "fbjs-css-vars" "^1.0.0" - "loose-envify" "^1.0.0" - "object-assign" "^4.1.0" - "promise" "^7.1.1" - "setimmediate" "^1.0.5" - "ua-parser-js" "^0.7.18" - -"fetch-everywhere@^1.0.5": - "integrity" "sha1-skl/R6V9kCazkHwJdWrPX0vTTos=" - "resolved" "https://registry.npmjs.org/fetch-everywhere/-/fetch-everywhere-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "node-fetch" "^1.0.1" - "whatwg-fetch" ">=0.10.0" - -"figures@^1.7.0": - "integrity" "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=" - "resolved" "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz" - "version" "1.7.0" - dependencies: - "escape-string-regexp" "^1.0.5" - "object-assign" "^4.1.0" - -"figures@^2.0.0": - "integrity" "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=" - "resolved" "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "escape-string-regexp" "^1.0.5" - -"figures@^3.0.0": - "integrity" "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" - "resolved" "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "escape-string-regexp" "^1.0.5" - -"file-entry-cache@^6.0.1": - "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" - "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - "version" "6.0.1" - dependencies: - "flat-cache" "^3.0.4" - -"fill-range@^7.0.1": - "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" - "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "to-regex-range" "^5.0.1" - -"find-cache-dir@3.3.1": - "integrity" "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==" - "resolved" "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz" - "version" "3.3.1" - dependencies: - "commondir" "^1.0.1" - "make-dir" "^3.0.2" - "pkg-dir" "^4.1.0" - -"find-up@^2.0.0", "find-up@^2.1.0": - "integrity" "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "locate-path" "^2.0.0" - -"find-up@^4.0.0": - "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "locate-path" "^5.0.0" - "path-exists" "^4.0.0" - -"find-up@^4.1.0": - "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" - "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "locate-path" "^5.0.0" - "path-exists" "^4.0.0" - -"flat-cache@^3.0.4": - "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" - "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "flatted" "^3.1.0" - "rimraf" "^3.0.2" - -"flatted@^3.1.0": - "integrity" "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==" - "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz" - "version" "3.2.2" - -"flatten@^1.0.2": - "integrity" "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" - "resolved" "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz" - "version" "1.0.3" - -"foreach@^2.0.5": - "integrity" "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - "resolved" "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz" - "version" "2.0.5" - -"form-data@^3.0.0": - "integrity" "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==" - "resolved" "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "asynckit" "^0.4.0" - "combined-stream" "^1.0.8" - "mime-types" "^2.1.12" - -"form-data@4.0.0": - "integrity" "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==" - "resolved" "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "asynckit" "^0.4.0" - "combined-stream" "^1.0.8" - "mime-types" "^2.1.12" - -"fraction.js@^4.1.1": - "integrity" "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==" - "resolved" "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz" - "version" "4.1.1" - -"fs-constants@^1.0.0": - "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - "version" "1.0.0" - -"fs-extra@^10.0.0": - "integrity" "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==" - "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz" - "version" "10.0.0" - dependencies: - "graceful-fs" "^4.2.0" - "jsonfile" "^6.0.1" - "universalify" "^2.0.0" - -"fs.realpath@^1.0.0": - "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - "version" "1.0.0" - -"function-bind@^1.1.1": - "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - "version" "1.1.1" - -"functional-red-black-tree@^1.0.1": - "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - "version" "1.0.1" - -"gauge@~2.7.3": - "integrity" "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=" - "resolved" "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz" - "version" "2.7.4" - dependencies: - "aproba" "^1.0.3" - "console-control-strings" "^1.0.0" - "has-unicode" "^2.0.0" - "object-assign" "^4.1.0" - "signal-exit" "^3.0.0" - "string-width" "^1.0.1" - "strip-ansi" "^3.0.1" - "wide-align" "^1.1.0" - -"gensync@^1.0.0-beta.2": - "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - "version" "1.0.0-beta.2" - -"get-caller-file@^2.0.1", "get-caller-file@^2.0.5": - "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - "version" "2.0.5" - -"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1": - "integrity" "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" - "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "function-bind" "^1.1.1" - "has" "^1.0.3" - "has-symbols" "^1.0.1" - -"get-orientation@1.1.2": - "integrity" "sha512-/pViTfifW+gBbh/RnlFYHINvELT9Znt+SYyDKAUL6uV6By019AK/s+i9XP4jSwq7lwP38Fd8HVeTxym3+hkwmQ==" - "resolved" "https://registry.npmjs.org/get-orientation/-/get-orientation-1.1.2.tgz" - "version" "1.1.2" - dependencies: - "stream-parser" "^0.3.1" - -"get-own-enumerable-property-symbols@^3.0.0": - "integrity" "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - "resolved" "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" - "version" "3.0.2" - -"get-stream@^4.1.0": - "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "pump" "^3.0.0" - -"get-stream@^5.1.0": - "integrity" "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - "version" "5.2.0" - dependencies: - "pump" "^3.0.0" - -"get-stream@^6.0.0": - "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - "version" "6.0.1" - -"get-symbol-description@^1.0.0": - "integrity" "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==" - "resolved" "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "call-bind" "^1.0.2" - "get-intrinsic" "^1.1.1" - -"github-from-package@0.0.0": - "integrity" "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - "resolved" "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" - "version" "0.0.0" - -"glob-parent@^5.1.0", "glob-parent@^5.1.2", "glob-parent@~5.1.0", "glob-parent@~5.1.2": - "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "is-glob" "^4.0.1" - -"glob-parent@^6.0.0": - "integrity" "sha512-Hdd4287VEJcZXUwv1l8a+vXC1GjOQqXe+VS30w/ypihpcnu9M1n3xeYeJu5CBpeEQj2nAab2xxz28GuA3vp4Ww==" - "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "is-glob" "^4.0.1" - -"glob-to-regexp@^0.4.1": - "integrity" "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - "resolved" "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" - "version" "0.4.1" - -"glob@^7.0.0", "glob@^7.1.1", "glob@^7.1.3", "glob@^7.1.6": - "integrity" "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==" - "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" - "version" "7.1.7" - dependencies: - "fs.realpath" "^1.0.0" - "inflight" "^1.0.4" - "inherits" "2" - "minimatch" "^3.0.4" - "once" "^1.3.0" - "path-is-absolute" "^1.0.0" - -"globals@^11.1.0": - "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - "version" "11.12.0" - -"globals@^13.6.0": - "integrity" "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==" - "resolved" "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz" - "version" "13.10.0" - dependencies: - "type-fest" "^0.20.2" - -"globals@^13.9.0": - "integrity" "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==" - "resolved" "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz" - "version" "13.10.0" - dependencies: - "type-fest" "^0.20.2" - -"globby@^11.0.3", "globby@11.0.3": - "integrity" "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==" - "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz" - "version" "11.0.3" - dependencies: - "array-union" "^2.1.0" - "dir-glob" "^3.0.1" - "fast-glob" "^3.1.1" - "ignore" "^5.1.4" - "merge2" "^1.3.0" - "slash" "^3.0.0" - -"got@^9.6.0": - "integrity" "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==" - "resolved" "https://registry.npmjs.org/got/-/got-9.6.0.tgz" - "version" "9.6.0" - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - "cacheable-request" "^6.0.0" - "decompress-response" "^3.3.0" - "duplexer3" "^0.1.4" - "get-stream" "^4.1.0" - "lowercase-keys" "^1.0.1" - "mimic-response" "^1.0.1" - "p-cancelable" "^1.0.0" - "to-readable-stream" "^1.0.0" - "url-parse-lax" "^3.0.0" - -"graceful-fs@^4.1.11", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0": - "integrity" "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" - "version" "4.2.6" - -"graphql-config@^3.3.0": - "integrity" "sha512-mSQIsPMssr7QrgqhnjI+CyVH6oQgCrgS6irHsTvwf7RFDRnR2k9kqpQOQgVoOytBSn0DOYryS0w0SAg9xor/Jw==" - "resolved" "https://registry.npmjs.org/graphql-config/-/graphql-config-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "@endemolshinegroup/cosmiconfig-typescript-loader" "3.0.2" - "@graphql-tools/graphql-file-loader" "^6.0.0" - "@graphql-tools/json-file-loader" "^6.0.0" - "@graphql-tools/load" "^6.0.0" - "@graphql-tools/merge" "^6.0.0" - "@graphql-tools/url-loader" "^6.0.0" - "@graphql-tools/utils" "^7.0.0" - "cosmiconfig" "7.0.0" - "cosmiconfig-toml-loader" "1.0.0" - "minimatch" "3.0.4" - "string-env-interpolation" "1.0.1" - -"graphql-request@^3.3.0": - "integrity" "sha512-acrTzidSlwAj8wBNO7Q/UQHS8T+z5qRGquCQRv9J1InwR01BBWV9ObnoE+JS5nCCEj8wSGS0yrDXVDoRiKZuOg==" - "resolved" "https://registry.npmjs.org/graphql-request/-/graphql-request-3.4.0.tgz" - "version" "3.4.0" - dependencies: - "cross-fetch" "^3.0.6" - "extract-files" "^9.0.0" - "form-data" "^3.0.0" - -"graphql-tag@^2.11.0": - "integrity" "sha512-VV1U4O+9x99EkNpNmCUV5RZwq6MnK4+pGbRYWG+lA/m3uo7TSqJF81OkcOP148gFP6fzdl7JWYBrwWVTS9jXww==" - "resolved" "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.4.tgz" - "version" "2.12.4" - dependencies: - "tslib" "^2.1.0" - -"graphql-ws@^4.4.1": - "integrity" "sha512-sHkK9+lUm20/BGawNEWNtVAeJzhZeBg21VmvmLoT5NdGVeZWv5PdIhkcayQIAgjSyyQ17WMKmbDijIPG2On+Ag==" - "resolved" "https://registry.npmjs.org/graphql-ws/-/graphql-ws-4.9.0.tgz" - "version" "4.9.0" - -"graphql@^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^14.0.0 || ^15.0.0", "graphql@^15.0.0", "graphql@^15.5.1", "graphql@>=0.10.0", "graphql@>=0.11 <=15", "graphql@14.x || 15.x": - "integrity" "sha512-FeTRX67T3LoE3LWAxxOlW2K3Bz+rMYAC18rRguK4wgXaTZMiJwSUwDmPFo3UadAKbzirKIg5Qy+sNJXbpPRnQw==" - "resolved" "https://registry.npmjs.org/graphql/-/graphql-15.5.1.tgz" - "version" "15.5.1" - -"gzip-size@^6.0.0": - "integrity" "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==" - "resolved" "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "duplexer" "^0.1.2" - -"has-ansi@^2.0.0": - "integrity" "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=" - "resolved" "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "ansi-regex" "^2.0.0" - -"has-bigints@^1.0.1": - "integrity" "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" - "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" - "version" "1.0.1" - -"has-flag@^3.0.0": - "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - "version" "3.0.0" - -"has-flag@^4.0.0": - "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - "version" "4.0.0" - -"has-symbols@^1.0.1", "has-symbols@^1.0.2": - "integrity" "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" - "version" "1.0.2" - -"has-tostringtag@^1.0.0": - "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==" - "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "has-symbols" "^1.0.2" - -"has-unicode@^2.0.0": - "integrity" "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - "version" "2.0.1" - -"has@^1.0.3": - "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" - "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "function-bind" "^1.1.1" - -"hash-base@^3.0.0": - "integrity" "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==" - "resolved" "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "inherits" "^2.0.4" - "readable-stream" "^3.6.0" - "safe-buffer" "^5.2.0" - -"hash.js@^1.0.0", "hash.js@^1.0.3": - "integrity" "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==" - "resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" - "version" "1.1.7" - dependencies: - "inherits" "^2.0.3" - "minimalistic-assert" "^1.0.1" - -"he@1.2.0": - "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" - "version" "1.2.0" - -"header-case@^2.0.4": - "integrity" "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==" - "resolved" "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "capital-case" "^1.0.4" - "tslib" "^2.0.3" - -"hmac-drbg@^1.0.1": - "integrity" "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=" - "resolved" "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "hash.js" "^1.0.3" - "minimalistic-assert" "^1.0.0" - "minimalistic-crypto-utils" "^1.0.1" - -"hosted-git-info@^2.1.4": - "integrity" "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" - "version" "2.8.9" - -"html-tags@^3.1.0": - "integrity" "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" - "resolved" "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz" - "version" "3.1.0" - -"http-cache-semantics@^4.0.0": - "integrity" "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - "version" "4.1.0" - -"http-errors@1.7.3": - "integrity" "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==" - "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz" - "version" "1.7.3" - dependencies: - "depd" "~1.1.2" - "inherits" "2.0.4" - "setprototypeof" "1.1.1" - "statuses" ">= 1.5.0 < 2" - "toidentifier" "1.0.0" - -"http-proxy-agent@^4.0.1": - "integrity" "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==" - "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "@tootallnate/once" "1" - "agent-base" "6" - "debug" "4" - -"https-browserify@^1.0.0", "https-browserify@1.0.0": - "integrity" "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - "resolved" "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz" - "version" "1.0.0" - -"https-proxy-agent@^5.0.0": - "integrity" "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==" - "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "agent-base" "6" - "debug" "4" - -"human-signals@^2.1.0": - "integrity" "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - "version" "2.1.0" - -"humanize-ms@^1.2.1": - "integrity" "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=" - "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" - "version" "1.2.1" - dependencies: - "ms" "^2.0.0" - -"husky@^6.0.0": - "integrity" "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==" - "resolved" "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz" - "version" "6.0.0" - -"iconv-lite@^0.4.24", "iconv-lite@0.4.24": - "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - "version" "0.4.24" - dependencies: - "safer-buffer" ">= 2.1.2 < 3" - -"iconv-lite@^0.6.2": - "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - "version" "0.6.3" - dependencies: - "safer-buffer" ">= 2.1.2 < 3.0.0" - -"ieee754@^1.1.13", "ieee754@^1.1.4": - "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - "version" "1.2.1" - -"ignore@^4.0.6": - "integrity" "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" - "version" "4.0.6" - -"ignore@^5.1.4": - "integrity" "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" - "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" - "version" "5.1.8" - -"image-size@1.0.0": - "integrity" "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==" - "resolved" "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "queue" "6.0.2" - -"immutability-helper@^3.1.1": - "integrity" "sha512-Q0QaXjPjwIju/28TsugCHNEASwoCcJSyJV3uO1sOIQGI0jKgm9f41Lvz0DZj3n46cNCyAZTsEYoY4C2bVRUzyQ==" - "resolved" "https://registry.npmjs.org/immutability-helper/-/immutability-helper-3.1.1.tgz" - "version" "3.1.1" - -"immutable@~3.7.6": - "integrity" "sha1-E7TTyxK++hVIKib+Gy665kAHHks=" - "resolved" "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz" - "version" "3.7.6" - -"import-cwd@^3.0.0": - "integrity" "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==" - "resolved" "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "import-from" "^3.0.0" - -"import-fresh@^3.0.0", "import-fresh@^3.2.1": - "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" - "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "parent-module" "^1.0.0" - "resolve-from" "^4.0.0" - -"import-from@^3.0.0", "import-from@3.0.0": - "integrity" "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==" - "resolved" "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "resolve-from" "^5.0.0" - -"imurmurhash@^0.1.4": - "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - "version" "0.1.4" - -"indent-string@^3.0.0": - "integrity" "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" - "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz" - "version" "3.2.0" - -"indent-string@^4.0.0": - "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - "version" "4.0.0" - -"indexes-of@^1.0.1": - "integrity" "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - "resolved" "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz" - "version" "1.0.1" - -"inflected@^2.0.1": - "integrity" "sha512-hAEKNxvHf2Iq3H60oMBHkB4wl5jn3TPF3+fXek/sRwAB5gP9xWs4r7aweSF95f99HFoz69pnZTcu8f0SIHV18w==" - "resolved" "https://registry.npmjs.org/inflected/-/inflected-2.1.0.tgz" - "version" "2.1.0" - -"inflight@^1.0.4": - "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" - "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - "version" "1.0.6" - dependencies: - "once" "^1.3.0" - "wrappy" "1" - -"inherits@^2.0.1", "inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.3", "inherits@~2.0.4", "inherits@2", "inherits@2.0.4": - "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - "version" "2.0.4" - -"inherits@~2.0.1", "inherits@2.0.3": - "integrity" "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - "version" "2.0.3" - -"inherits@2.0.1": - "integrity" "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - "version" "2.0.1" - -"ini@~1.3.0": - "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - "version" "1.3.8" - -"inquirer@^7.3.3": - "integrity" "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==" - "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz" - "version" "7.3.3" - dependencies: - "ansi-escapes" "^4.2.1" - "chalk" "^4.1.0" - "cli-cursor" "^3.1.0" - "cli-width" "^3.0.0" - "external-editor" "^3.0.3" - "figures" "^3.0.0" - "lodash" "^4.17.19" - "mute-stream" "0.0.8" - "run-async" "^2.4.0" - "rxjs" "^6.6.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - "through" "^2.3.6" - -"internal-slot@^1.0.3": - "integrity" "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==" - "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" - "version" "1.0.3" - dependencies: - "get-intrinsic" "^1.1.0" - "has" "^1.0.3" - "side-channel" "^1.0.4" - -"is-absolute@^1.0.0": - "integrity" "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==" - "resolved" "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-relative" "^1.0.0" - "is-windows" "^1.0.1" - -"is-arguments@^1.0.4": - "integrity" "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==" - "resolved" "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "call-bind" "^1.0.2" - "has-tostringtag" "^1.0.0" - -"is-arrayish@^0.2.1": - "integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - "version" "0.2.1" - -"is-arrayish@^0.3.1": - "integrity" "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" - "version" "0.3.2" - -"is-bigint@^1.0.1": - "integrity" "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==" - "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz" - "version" "1.0.2" - -"is-binary-path@~2.1.0": - "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" - "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "binary-extensions" "^2.0.0" - -"is-boolean-object@^1.1.0": - "integrity" "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==" - "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "call-bind" "^1.0.2" - -"is-callable@^1.1.4", "is-callable@^1.2.4": - "integrity" "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" - "version" "1.2.4" - -"is-core-module@^2.2.0", "is-core-module@^2.4.0": - "integrity" "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==" - "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "has" "^1.0.3" - -"is-date-object@^1.0.1": - "integrity" "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" - "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz" - "version" "1.0.4" - -"is-extglob@^2.1.1": - "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - "version" "2.1.1" - -"is-fullwidth-code-point@^1.0.0": - "integrity" "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "number-is-nan" "^1.0.0" - -"is-fullwidth-code-point@^2.0.0": - "integrity" "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" - "version" "2.0.0" - -"is-fullwidth-code-point@^3.0.0": - "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - "version" "3.0.0" - -"is-generator-function@^1.0.7": - "integrity" "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==" - "resolved" "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" - "version" "1.0.10" - dependencies: - "has-tostringtag" "^1.0.0" - -"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@~4.0.1", "is-glob@4.0.1": - "integrity" "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==" - "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "is-extglob" "^2.1.1" - -"is-lower-case@^2.0.2": - "integrity" "sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==" - "resolved" "https://registry.npmjs.org/is-lower-case/-/is-lower-case-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "tslib" "^2.0.3" - -"is-nan@^1.2.1": - "integrity" "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==" - "resolved" "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz" - "version" "1.3.2" - dependencies: - "call-bind" "^1.0.0" - "define-properties" "^1.1.3" - -"is-negative-zero@^2.0.1": - "integrity" "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" - "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz" - "version" "2.0.1" - -"is-number-object@^1.0.4": - "integrity" "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==" - "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz" - "version" "1.0.5" - -"is-number@^7.0.0": - "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - "version" "7.0.0" - -"is-obj@^1.0.1": - "integrity" "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" - "version" "1.0.1" - -"is-observable@^1.1.0": - "integrity" "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==" - "resolved" "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz" - "version" "1.1.0" - dependencies: - "symbol-observable" "^1.1.0" - -"is-promise@^2.1.0": - "integrity" "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - "resolved" "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz" - "version" "2.2.2" - -"is-promise@4.0.0": - "integrity" "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" - "resolved" "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz" - "version" "4.0.0" - -"is-regex@^1.1.4": - "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==" - "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" - "version" "1.1.4" - dependencies: - "call-bind" "^1.0.2" - "has-tostringtag" "^1.0.0" - -"is-regexp@^1.0.0": - "integrity" "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" - "resolved" "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" - "version" "1.0.0" - -"is-relative@^1.0.0": - "integrity" "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==" - "resolved" "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "is-unc-path" "^1.0.0" - -"is-stream@^1.0.1": - "integrity" "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" - "version" "1.1.0" - -"is-stream@^1.1.0": - "integrity" "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" - "version" "1.1.0" - -"is-stream@^2.0.0": - "integrity" "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" - "version" "2.0.0" - -"is-string@^1.0.5", "is-string@^1.0.7": - "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==" - "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" - "version" "1.0.7" - dependencies: - "has-tostringtag" "^1.0.0" - -"is-symbol@^1.0.2", "is-symbol@^1.0.3": - "integrity" "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==" - "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "has-symbols" "^1.0.2" - -"is-typed-array@^1.1.3", "is-typed-array@^1.1.7": - "integrity" "sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==" - "resolved" "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.8.tgz" - "version" "1.1.8" - dependencies: - "available-typed-arrays" "^1.0.5" - "call-bind" "^1.0.2" - "es-abstract" "^1.18.5" - "foreach" "^2.0.5" - "has-tostringtag" "^1.0.0" - -"is-unc-path@^1.0.0": - "integrity" "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==" - "resolved" "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "unc-path-regex" "^0.1.2" - -"is-unicode-supported@^0.1.0": - "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - "version" "0.1.0" - -"is-upper-case@^2.0.2": - "integrity" "sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==" - "resolved" "https://registry.npmjs.org/is-upper-case/-/is-upper-case-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "tslib" "^2.0.3" - -"is-windows@^1.0.1": - "integrity" "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - "resolved" "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" - "version" "1.0.2" - -"isarray@^1.0.0", "isarray@~1.0.0": - "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - "version" "1.0.0" - -"isexe@^2.0.0": - "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - "version" "2.0.0" - -"isomorphic-fetch@^3.0.0", "isomorphic-fetch@3.0.0": - "integrity" "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==" - "resolved" "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "node-fetch" "^2.6.1" - "whatwg-fetch" "^3.4.1" - -"isomorphic-ws@4.0.1": - "integrity" "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" - "resolved" "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz" - "version" "4.0.1" - -"iterall@^1.2.1": - "integrity" "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==" - "resolved" "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz" - "version" "1.3.0" - -"jest-worker@27.0.0-next.5": - "integrity" "sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g==" - "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.0-next.5.tgz" - "version" "27.0.0-next.5" - dependencies: - "@types/node" "*" - "merge-stream" "^2.0.0" - "supports-color" "^8.0.0" - -"js-cookie@^2.2.1": - "integrity" "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" - "resolved" "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz" - "version" "2.2.1" - -"js-tokens@^3.0.0 || ^4.0.0", "js-tokens@^4.0.0": - "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - "version" "4.0.0" - -"js-yaml@^3.13.1": - "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - "version" "3.14.1" - dependencies: - "argparse" "^1.0.7" - "esprima" "^4.0.0" - -"js-yaml@^4.0.0": - "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" - "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "argparse" "^2.0.1" - -"jsesc@^2.5.1": - "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - "version" "2.5.2" - -"json-buffer@3.0.0": - "integrity" "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" - "version" "3.0.0" - -"json-parse-better-errors@^1.0.1": - "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" - "version" "1.0.2" - -"json-parse-even-better-errors@^2.3.0": - "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - "version" "2.3.1" - -"json-schema-traverse@^0.4.1": - "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - "version" "0.4.1" - -"json-schema-traverse@^1.0.0": - "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - "version" "1.0.0" - -"json-stable-stringify-without-jsonify@^1.0.1": - "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - "version" "1.0.1" - -"json-stable-stringify@^1.0.1": - "integrity" "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=" - "resolved" "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "jsonify" "~0.0.0" - -"json-to-pretty-yaml@^1.2.2": - "integrity" "sha1-9M0L0KXo/h3yWq9boRiwmf2ZLVs=" - "resolved" "https://registry.npmjs.org/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz" - "version" "1.2.2" - dependencies: - "remedial" "^1.0.7" - "remove-trailing-spaces" "^1.0.6" - -"json5@^1.0.1": - "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==" - "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "minimist" "^1.2.0" - -"json5@^2.1.2", "json5@^2.2.0": - "integrity" "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==" - "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "minimist" "^1.2.5" - -"jsonfile@^6.0.1": - "integrity" "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==" - "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "universalify" "^2.0.0" - optionalDependencies: - "graceful-fs" "^4.1.6" - -"jsonify@~0.0.0": - "integrity" "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - "resolved" "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" - "version" "0.0.0" - -"jsonwebtoken@^8.5.1": - "integrity" "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==" - "resolved" "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz" - "version" "8.5.1" - dependencies: - "jws" "^3.2.2" - "lodash.includes" "^4.3.0" - "lodash.isboolean" "^3.0.3" - "lodash.isinteger" "^4.0.4" - "lodash.isnumber" "^3.0.3" - "lodash.isplainobject" "^4.0.6" - "lodash.isstring" "^4.0.1" - "lodash.once" "^4.0.0" - "ms" "^2.1.1" - "semver" "^5.6.0" - -"jsx-ast-utils@^2.4.1 || ^3.0.0", "jsx-ast-utils@^3.1.0": - "integrity" "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==" - "resolved" "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "array-includes" "^3.1.2" - "object.assign" "^4.1.2" - -"jwa@^1.4.1": - "integrity" "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==" - "resolved" "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" - "version" "1.4.1" - dependencies: - "buffer-equal-constant-time" "1.0.1" - "ecdsa-sig-formatter" "1.0.11" - "safe-buffer" "^5.0.1" - -"jws@^3.2.2": - "integrity" "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==" - "resolved" "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" - "version" "3.2.2" - dependencies: - "jwa" "^1.4.1" - "safe-buffer" "^5.0.1" - -"keen-slider@^5.5.1": - "integrity" "sha512-QXGZGt5Hbe0YufR/RYbOG03MmOk43RQEXqkkSvjr8ZS67sVR7LRp5RIvJALfjl+A7BnHNr1wd1QBOemwy65Lfw==" - "resolved" "https://registry.npmjs.org/keen-slider/-/keen-slider-5.5.1.tgz" - "version" "5.5.1" - -"keyv@^3.0.0": - "integrity" "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==" - "resolved" "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "json-buffer" "3.0.0" - -"language-subtag-registry@~0.3.2": - "integrity" "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==" - "resolved" "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz" - "version" "0.3.21" - -"language-tags@^1.0.5": - "integrity" "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=" - "resolved" "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz" - "version" "1.0.5" - dependencies: - "language-subtag-registry" "~0.3.2" - -"latest-version@5.1.0": - "integrity" "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==" - "resolved" "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "package-json" "^6.3.0" - -"levn@^0.4.1": - "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" - "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - "version" "0.4.1" - dependencies: - "prelude-ls" "^1.2.1" - "type-check" "~0.4.0" - -"lilconfig@^2.0.3": - "integrity" "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==" - "resolved" "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz" - "version" "2.0.3" - -"lines-and-columns@^1.1.6": - "integrity" "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" - "version" "1.1.6" - -"lint-staged@^11.0.0": - "integrity" "sha512-3rsRIoyaE8IphSUtO1RVTFl1e0SLBtxxUOPBtHxQgBHS5/i6nqvjcUfNioMa4BU9yGnPzbO+xkfLtXtxBpCzjw==" - "resolved" "https://registry.npmjs.org/lint-staged/-/lint-staged-11.0.0.tgz" - "version" "11.0.0" - dependencies: - "chalk" "^4.1.1" - "cli-truncate" "^2.1.0" - "commander" "^7.2.0" - "cosmiconfig" "^7.0.0" - "debug" "^4.3.1" - "dedent" "^0.7.0" - "enquirer" "^2.3.6" - "execa" "^5.0.0" - "listr2" "^3.8.2" - "log-symbols" "^4.1.0" - "micromatch" "^4.0.4" - "normalize-path" "^3.0.0" - "please-upgrade-node" "^3.2.0" - "string-argv" "0.3.1" - "stringify-object" "^3.3.0" - -"listr-silent-renderer@^1.1.1": - "integrity" "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=" - "resolved" "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz" - "version" "1.1.1" - -"listr-update-renderer@^0.5.0": - "integrity" "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==" - "resolved" "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz" - "version" "0.5.0" - dependencies: - "chalk" "^1.1.3" - "cli-truncate" "^0.2.1" - "elegant-spinner" "^1.0.1" - "figures" "^1.7.0" - "indent-string" "^3.0.0" - "log-symbols" "^1.0.2" - "log-update" "^2.3.0" - "strip-ansi" "^3.0.1" - -"listr-verbose-renderer@^0.5.0": - "integrity" "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==" - "resolved" "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz" - "version" "0.5.0" - dependencies: - "chalk" "^2.4.1" - "cli-cursor" "^2.1.0" - "date-fns" "^1.27.2" - "figures" "^2.0.0" - -"listr@^0.14.2", "listr@^0.14.3": - "integrity" "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==" - "resolved" "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz" - "version" "0.14.3" - dependencies: - "@samverschueren/stream-to-observable" "^0.3.0" - "is-observable" "^1.1.0" - "is-promise" "^2.1.0" - "is-stream" "^1.1.0" - "listr-silent-renderer" "^1.1.1" - "listr-update-renderer" "^0.5.0" - "listr-verbose-renderer" "^0.5.0" - "p-map" "^2.0.0" - "rxjs" "^6.3.3" - -"listr2@^3.8.2": - "integrity" "sha512-eP40ZHihu70sSmqFNbNy2NL1YwImmlMmPh9WO5sLmPDleurMHt3n+SwEWNu2kzKScexZnkyFtc1VI0z/TGlmpw==" - "resolved" "https://registry.npmjs.org/listr2/-/listr2-3.10.0.tgz" - "version" "3.10.0" - dependencies: - "cli-truncate" "^2.1.0" - "colorette" "^1.2.2" - "log-update" "^4.0.0" - "p-map" "^4.0.0" - "rxjs" "^6.6.7" - "through" "^2.3.8" - "wrap-ansi" "^7.0.0" - -"load-json-file@^4.0.0": - "integrity" "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=" - "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "graceful-fs" "^4.1.2" - "parse-json" "^4.0.0" - "pify" "^3.0.0" - "strip-bom" "^3.0.0" - -"loader-utils@1.2.3": - "integrity" "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==" - "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz" - "version" "1.2.3" - dependencies: - "big.js" "^5.2.2" - "emojis-list" "^2.0.0" - "json5" "^1.0.1" - -"locate-path@^2.0.0": - "integrity" "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "p-locate" "^2.0.0" - "path-exists" "^3.0.0" - -"locate-path@^5.0.0": - "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" - "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "p-locate" "^4.1.0" - -"lodash.camelcase@^4.3.0": - "integrity" "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - "resolved" "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" - "version" "4.3.0" - -"lodash.clonedeep@^4.5.0": - "integrity" "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - "resolved" "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" - "version" "4.5.0" - -"lodash.debounce@^4.0.8": - "integrity" "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" - "version" "4.0.8" - -"lodash.get@^4": - "integrity" "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" - "resolved" "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz" - "version" "4.4.2" - -"lodash.includes@^4.3.0": - "integrity" "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - "resolved" "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" - "version" "4.3.0" - -"lodash.isboolean@^3.0.3": - "integrity" "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - "resolved" "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" - "version" "3.0.3" - -"lodash.isdate@^4.0.1": - "integrity" "sha1-NaVDZzuddhEN5BFLMsxXcEin82Y=" - "resolved" "https://registry.npmjs.org/lodash.isdate/-/lodash.isdate-4.0.1.tgz" - "version" "4.0.1" - -"lodash.isinteger@^4.0.4": - "integrity" "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - "resolved" "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" - "version" "4.0.4" - -"lodash.isnumber@^3.0.3": - "integrity" "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - "resolved" "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" - "version" "3.0.3" - -"lodash.isplainobject@^4.0.6": - "integrity" "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - "resolved" "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - "version" "4.0.6" - -"lodash.isstring@^4.0.1": - "integrity" "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - "resolved" "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" - "version" "4.0.1" - -"lodash.merge@^4.6.2": - "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - "version" "4.6.2" - -"lodash.once@^4.0.0": - "integrity" "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - "resolved" "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" - "version" "4.1.1" - -"lodash.random@^3.2.0": - "integrity" "sha1-luJOdjMzGZEw0sni/Vf5FwPMJi0=" - "resolved" "https://registry.npmjs.org/lodash.random/-/lodash.random-3.2.0.tgz" - "version" "3.2.0" - -"lodash.snakecase@^4.1.1": - "integrity" "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=" - "resolved" "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" - "version" "4.1.1" - -"lodash.sortby@^4.7.0": - "integrity" "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - "resolved" "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" - "version" "4.7.0" - -"lodash.throttle@^4.1.1": - "integrity" "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - "resolved" "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz" - "version" "4.1.1" - -"lodash.toarray@^4.4.0": - "integrity" "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" - "resolved" "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz" - "version" "4.4.0" - -"lodash.topath@^4.5.2": - "integrity" "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=" - "resolved" "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz" - "version" "4.5.2" - -"lodash.truncate@^4.4.2": - "integrity" "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" - "resolved" "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" - "version" "4.4.2" - -"lodash.uniq@^4.5.0": - "integrity" "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - "resolved" "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" - "version" "4.5.0" - -"lodash@^4.17.19", "lodash@^4.17.20", "lodash@^4.17.21", "lodash@~4.17.0", "lodash@4.17.21": - "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - "version" "4.17.21" - -"log-symbols@^1.0.2": - "integrity" "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=" - "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "chalk" "^1.0.0" - -"log-symbols@^4.0.0", "log-symbols@^4.1.0": - "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" - "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "chalk" "^4.1.0" - "is-unicode-supported" "^0.1.0" - -"log-update@^2.3.0": - "integrity" "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=" - "resolved" "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "ansi-escapes" "^3.0.0" - "cli-cursor" "^2.0.0" - "wrap-ansi" "^3.0.1" - -"log-update@^4.0.0": - "integrity" "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==" - "resolved" "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-escapes" "^4.3.0" - "cli-cursor" "^3.1.0" - "slice-ansi" "^4.0.0" - "wrap-ansi" "^6.2.0" - -"loose-envify@^1.0.0", "loose-envify@^1.1.0", "loose-envify@^1.4.0": - "integrity" "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==" - "resolved" "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "js-tokens" "^3.0.0 || ^4.0.0" - -"lower-case-first@^2.0.2": - "integrity" "sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==" - "resolved" "https://registry.npmjs.org/lower-case-first/-/lower-case-first-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "tslib" "^2.0.3" - -"lower-case@^2.0.2": - "integrity" "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==" - "resolved" "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "tslib" "^2.0.3" - -"lowercase-keys@^1.0.0", "lowercase-keys@^1.0.1": - "integrity" "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" - "version" "1.0.1" - -"lowercase-keys@^2.0.0": - "integrity" "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" - "version" "2.0.0" - -"lru-cache@^6.0.0": - "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "yallist" "^4.0.0" - -"lru-cache@5.1.1": - "integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==" - "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - "version" "5.1.1" - dependencies: - "yallist" "^3.0.2" - -"make-dir@^3.0.2": - "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" - "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "semver" "^6.0.0" - -"make-error@^1", "make-error@^1.1.1": - "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - "version" "1.3.6" - -"map-cache@^0.2.0": - "integrity" "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - "resolved" "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" - "version" "0.2.2" - -"matcher@^4.0.0": - "integrity" "sha512-S6x5wmcDmsDRRU/c2dkccDwQPXoFczc5+HpQ2lON8pnvHlnvHAHj5WlLVvw6n6vNyHuVugYrFohYxbS+pvFpKQ==" - "resolved" "https://registry.npmjs.org/matcher/-/matcher-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "escape-string-regexp" "^4.0.0" - -"md5.js@^1.3.4": - "integrity" "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==" - "resolved" "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" - "version" "1.3.5" - dependencies: - "hash-base" "^3.0.0" - "inherits" "^2.0.1" - "safe-buffer" "^5.1.2" - -"merge-stream@^2.0.0": - "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - "version" "2.0.0" - -"merge2@^1.3.0": - "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - "version" "1.4.1" - -"meros@1.1.4": - "integrity" "sha512-E9ZXfK9iQfG9s73ars9qvvvbSIkJZF5yOo9j4tcwM5tN8mUKfj/EKN5PzOr3ZH0y5wL7dLAHw3RVEfpQV9Q7VQ==" - "resolved" "https://registry.npmjs.org/meros/-/meros-1.1.4.tgz" - "version" "1.1.4" - -"micromatch@^4.0.2", "micromatch@^4.0.4": - "integrity" "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==" - "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" - "version" "4.0.4" - dependencies: - "braces" "^3.0.1" - "picomatch" "^2.2.3" - -"miller-rabin@^4.0.0": - "integrity" "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==" - "resolved" "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "bn.js" "^4.0.0" - "brorand" "^1.0.1" - -"mime-db@1.48.0": - "integrity" "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" - "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz" - "version" "1.48.0" - -"mime-types@^2.1.12": - "integrity" "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==" - "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz" - "version" "2.1.31" - dependencies: - "mime-db" "1.48.0" - -"mime@^2.3.1": - "integrity" "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" - "resolved" "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz" - "version" "2.5.2" - -"mimic-fn@^1.0.0": - "integrity" "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" - "version" "1.2.0" - -"mimic-fn@^2.1.0": - "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - "version" "2.1.0" - -"mimic-response@^1.0.0", "mimic-response@^1.0.1": - "integrity" "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - "version" "1.0.1" - -"mimic-response@^2.0.0": - "integrity" "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" - "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" - "version" "2.1.0" - -"minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1": - "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - "resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" - "version" "1.0.1" - -"minimalistic-crypto-utils@^1.0.1": - "integrity" "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - "resolved" "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" - "version" "1.0.1" - -"minimatch@^3.0.4", "minimatch@3.0.4": - "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" - "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "brace-expansion" "^1.1.7" - -"minimist@^1.1.1", "minimist@^1.2.0", "minimist@^1.2.3", "minimist@^1.2.5": - "integrity" "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" - "version" "1.2.5" - -"mkdirp-classic@^0.5.2", "mkdirp-classic@^0.5.3": - "integrity" "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - "resolved" "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" - "version" "0.5.3" - -"mkdirp@^1.0.4": - "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - "version" "1.0.4" - -"modern-normalize@^1.1.0": - "integrity" "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==" - "resolved" "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz" - "version" "1.1.0" - -"ms@^2.0.0", "ms@^2.1.1", "ms@2.1.2": - "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - "version" "2.1.2" - -"ms@2.0.0": - "integrity" "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - "version" "2.0.0" - -"mute-stream@0.0.8": - "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" - "version" "0.0.8" - -"nanoid@^3.1.23": - "integrity" "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" - "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz" - "version" "3.1.23" - -"napi-build-utils@^1.0.1": - "integrity" "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - "resolved" "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" - "version" "1.0.2" - -"native-url@0.3.4": - "integrity" "sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA==" - "resolved" "https://registry.npmjs.org/native-url/-/native-url-0.3.4.tgz" - "version" "0.3.4" - dependencies: - "querystring" "^0.2.0" - -"natural-compare@^1.4.0": - "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - "version" "1.4.0" - -"next-seo@^4.26.0": - "integrity" "sha512-5TqywQ3XAwqdmEU1AyNZjR7WdDKFTkDD8aBtgQelPvzBUEy8i0mTjtiw+09jhiHFNik6FqS8uPKCaYcY6jRgSQ==" - "resolved" "https://registry.npmjs.org/next-seo/-/next-seo-4.26.0.tgz" - "version" "4.26.0" - -"next-themes@^0.0.14": - "integrity" "sha512-x09OaM+wg3SIlEjOv8B21aw/E36jxTtfW3Dm/DPwMsSMluGt7twe1LigA6nc+mXP1u0qu9MxBaIrPPH6UTiKnA==" - "resolved" "https://registry.npmjs.org/next-themes/-/next-themes-0.0.14.tgz" - "version" "0.0.14" - -"next@*", "next@^11.1.2", "next@^8.1.1-canary.54 || >=9.0.0", "next@>=10.2.0": - "integrity" "sha512-azEYL0L+wFjv8lstLru3bgvrzPvK0P7/bz6B/4EJ9sYkXeW8r5Bjh78D/Ol7VOg0EIPz0CXoe72hzAlSAXo9hw==" - "resolved" "https://registry.npmjs.org/next/-/next-11.1.2.tgz" - "version" "11.1.2" - dependencies: - "@babel/runtime" "7.15.3" - "@hapi/accept" "5.0.2" - "@next/env" "11.1.2" - "@next/polyfill-module" "11.1.2" - "@next/react-dev-overlay" "11.1.2" - "@next/react-refresh-utils" "11.1.2" - "@node-rs/helper" "1.2.1" - "assert" "2.0.0" - "ast-types" "0.13.2" - "browserify-zlib" "0.2.0" - "browserslist" "4.16.6" - "buffer" "5.6.0" - "caniuse-lite" "^1.0.30001228" - "chalk" "2.4.2" - "chokidar" "3.5.1" - "constants-browserify" "1.0.0" - "crypto-browserify" "3.12.0" - "cssnano-simple" "3.0.0" - "domain-browser" "4.19.0" - "encoding" "0.1.13" - "etag" "1.8.1" - "find-cache-dir" "3.3.1" - "get-orientation" "1.1.2" - "https-browserify" "1.0.0" - "image-size" "1.0.0" - "jest-worker" "27.0.0-next.5" - "native-url" "0.3.4" - "node-fetch" "2.6.1" - "node-html-parser" "1.4.9" - "node-libs-browser" "^2.2.1" - "os-browserify" "0.3.0" - "p-limit" "3.1.0" - "path-browserify" "1.0.1" - "pnp-webpack-plugin" "1.6.4" - "postcss" "8.2.15" - "process" "0.11.10" - "querystring-es3" "0.2.1" - "raw-body" "2.4.1" - "react-is" "17.0.2" - "react-refresh" "0.8.3" - "stream-browserify" "3.0.0" - "stream-http" "3.1.1" - "string_decoder" "1.3.0" - "styled-jsx" "4.0.1" - "timers-browserify" "2.0.12" - "tty-browserify" "0.0.1" - "use-subscription" "1.5.1" - "util" "0.12.4" - "vm-browserify" "1.1.2" - "watchpack" "2.1.1" - optionalDependencies: - "@next/swc-darwin-arm64" "11.1.2" - "@next/swc-darwin-x64" "11.1.2" - "@next/swc-linux-x64-gnu" "11.1.2" - "@next/swc-win32-x64-msvc" "11.1.2" - -"no-case@^3.0.4": - "integrity" "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==" - "resolved" "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "lower-case" "^2.0.2" - "tslib" "^2.0.3" - -"node-abi@^2.21.0": - "integrity" "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==" - "resolved" "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz" - "version" "2.30.1" - dependencies: - "semver" "^5.4.1" - -"node-addon-api@^4.1.0": - "integrity" "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" - "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.2.0.tgz" - "version" "4.2.0" - -"node-emoji@^1.8.1": - "integrity" "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==" - "resolved" "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz" - "version" "1.10.0" - dependencies: - "lodash.toarray" "^4.4.0" - -"node-fetch@*", "node-fetch@^2.6.1", "node-fetch@2": - "integrity" "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==" - "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz" - "version" "2.6.5" - dependencies: - "whatwg-url" "^5.0.0" - -"node-fetch@^1.0.1": - "integrity" "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==" - "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz" - "version" "1.7.3" - dependencies: - "encoding" "^0.1.11" - "is-stream" "^1.0.1" - -"node-fetch@2.6.1": - "integrity" "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" - "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz" - "version" "2.6.1" - -"node-html-parser@1.4.9": - "integrity" "sha512-UVcirFD1Bn0O+TSmloHeHqZZCxHjvtIeGdVdGMhyZ8/PWlEiZaZ5iJzR189yKZr8p0FXN58BUeC7RHRkf/KYGw==" - "resolved" "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.4.9.tgz" - "version" "1.4.9" - dependencies: - "he" "1.2.0" - -"node-int64@^0.4.0": - "integrity" "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" - "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - "version" "0.4.0" - -"node-libs-browser@^2.2.1": - "integrity" "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==" - "resolved" "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz" - "version" "2.2.1" - dependencies: - "assert" "^1.1.1" - "browserify-zlib" "^0.2.0" - "buffer" "^4.3.0" - "console-browserify" "^1.1.0" - "constants-browserify" "^1.0.0" - "crypto-browserify" "^3.11.0" - "domain-browser" "^1.1.1" - "events" "^3.0.0" - "https-browserify" "^1.0.0" - "os-browserify" "^0.3.0" - "path-browserify" "0.0.1" - "process" "^0.11.10" - "punycode" "^1.2.4" - "querystring-es3" "^0.2.0" - "readable-stream" "^2.3.3" - "stream-browserify" "^2.0.1" - "stream-http" "^2.7.2" - "string_decoder" "^1.0.0" - "timers-browserify" "^2.0.4" - "tty-browserify" "0.0.0" - "url" "^0.11.0" - "util" "^0.11.0" - "vm-browserify" "^1.0.1" - -"node-localstorage@^2.1.6": - "integrity" "sha512-vv8fJuOUCCvSPjDjBLlMqYMHob4aGjkmrkaE42/mZr0VT+ZAU10jRF8oTnX9+pgU9/vYJ8P7YT3Vd6ajkmzSCw==" - "resolved" "https://registry.npmjs.org/node-localstorage/-/node-localstorage-2.2.1.tgz" - "version" "2.2.1" - dependencies: - "write-file-atomic" "^1.1.4" - -"node-releases@^1.1.71": - "integrity" "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==" - "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz" - "version" "1.1.73" - -"normalize-package-data@^2.3.2": - "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" - "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - "version" "2.5.0" - dependencies: - "hosted-git-info" "^2.1.4" - "resolve" "^1.10.0" - "semver" "2 || 3 || 4 || 5" - "validate-npm-package-license" "^3.0.1" - -"normalize-path@^2.1.1": - "integrity" "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "remove-trailing-separator" "^1.0.1" - -"normalize-path@^3.0.0", "normalize-path@~3.0.0": - "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - "version" "3.0.0" - -"normalize-range@^0.1.2": - "integrity" "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" - "resolved" "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" - "version" "0.1.2" - -"normalize-url@^4.1.0": - "integrity" "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" - "version" "4.5.1" - -"npm-run-path@^4.0.1": - "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" - "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "path-key" "^3.0.0" - -"npmlog@^4.0.1": - "integrity" "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==" - "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "are-we-there-yet" "~1.1.2" - "console-control-strings" "~1.1.0" - "gauge" "~2.7.3" - "set-blocking" "~2.0.0" - -"nullthrows@^1.1.1": - "integrity" "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" - "resolved" "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz" - "version" "1.1.1" - -"num2fraction@^1.2.2": - "integrity" "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" - "resolved" "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz" - "version" "1.2.2" - -"number-is-nan@^1.0.0": - "integrity" "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - "resolved" "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" - "version" "1.0.1" - -"object-assign@^4.1.0", "object-assign@^4.1.1": - "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - "version" "4.1.1" - -"object-hash@^2.2.0": - "integrity" "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" - "resolved" "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz" - "version" "2.2.0" - -"object-inspect@^1.11.0", "object-inspect@^1.9.0": - "integrity" "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" - "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz" - "version" "1.11.0" - -"object-is@^1.0.1": - "integrity" "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==" - "resolved" "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" - "version" "1.1.5" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - -"object-keys-normalizer@1.0.1": - "integrity" "sha1-2xeNu6Xkx7GLQIN8jvgzZe6TSOc=" - "resolved" "https://registry.npmjs.org/object-keys-normalizer/-/object-keys-normalizer-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "lodash.camelcase" "^4.3.0" - "lodash.snakecase" "^4.1.1" - -"object-keys@^1.0.12", "object-keys@^1.1.1": - "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - "version" "1.1.1" - -"object-merge-advanced@12.0.3": - "integrity" "sha512-xQIf2Vup1rpKiHr2tQca5jyNYgT4O0kNxOfAp3ZNonm2hS+5yaJgI0Czdk/QMy52bcRwQKX3uc3H8XtAiiYfVA==" - "resolved" "https://registry.npmjs.org/object-merge-advanced/-/object-merge-advanced-12.0.3.tgz" - "version" "12.0.3" - dependencies: - "@babel/runtime" "^7.12.13" - "array-includes-with-glob" "^3.0.6" - "lodash.clonedeep" "^4.5.0" - "lodash.includes" "^4.3.0" - "lodash.isdate" "^4.0.1" - "lodash.isplainobject" "^4.0.6" - "lodash.uniq" "^4.5.0" - "util-nonempty" "^3.0.6" - -"object.assign@^4.1.0", "object.assign@^4.1.2": - "integrity" "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" - "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" - "version" "4.1.2" - dependencies: - "call-bind" "^1.0.0" - "define-properties" "^1.1.3" - "has-symbols" "^1.0.1" - "object-keys" "^1.1.1" - -"object.entries@^1.1.4": - "integrity" "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==" - "resolved" "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz" - "version" "1.1.4" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - "es-abstract" "^1.18.2" - -"object.fromentries@^2.0.4": - "integrity" "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==" - "resolved" "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - "es-abstract" "^1.18.0-next.2" - "has" "^1.0.3" - -"object.values@^1.1.3", "object.values@^1.1.4": - "integrity" "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==" - "resolved" "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz" - "version" "1.1.4" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - "es-abstract" "^1.18.2" - -"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": - "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" - "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - "version" "1.4.0" - dependencies: - "wrappy" "1" - -"onetime@^2.0.0": - "integrity" "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=" - "resolved" "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "mimic-fn" "^1.0.0" - -"onetime@^5.1.0", "onetime@^5.1.2": - "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" - "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "mimic-fn" "^2.1.0" - -"opener@^1.5.2": - "integrity" "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" - "resolved" "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" - "version" "1.5.2" - -"optionator@^0.9.1": - "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" - "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - "version" "0.9.1" - dependencies: - "deep-is" "^0.1.3" - "fast-levenshtein" "^2.0.6" - "levn" "^0.4.1" - "prelude-ls" "^1.2.1" - "type-check" "^0.4.0" - "word-wrap" "^1.2.3" - -"os-browserify@^0.3.0", "os-browserify@0.3.0": - "integrity" "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - "resolved" "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" - "version" "0.3.0" - -"os-tmpdir@~1.0.2": - "integrity" "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - "version" "1.0.2" - -"p-cancelable@^1.0.0": - "integrity" "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" - "version" "1.1.0" - -"p-limit@^1.1.0": - "integrity" "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "p-try" "^1.0.0" - -"p-limit@^2.2.0": - "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - "version" "2.3.0" - dependencies: - "p-try" "^2.0.0" - -"p-limit@3.1.0": - "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" - "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "yocto-queue" "^0.1.0" - -"p-locate@^2.0.0": - "integrity" "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "p-limit" "^1.1.0" - -"p-locate@^4.1.0": - "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" - "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - "version" "4.1.0" - dependencies: - "p-limit" "^2.2.0" - -"p-map@^2.0.0": - "integrity" "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - "resolved" "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz" - "version" "2.1.0" - -"p-map@^4.0.0": - "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" - "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "aggregate-error" "^3.0.0" - -"p-try@^1.0.0": - "integrity" "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - "resolved" "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" - "version" "1.0.0" - -"p-try@^2.0.0": - "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - "version" "2.2.0" - -"package-json@^6.3.0": - "integrity" "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==" - "resolved" "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz" - "version" "6.5.0" - dependencies: - "got" "^9.6.0" - "registry-auth-token" "^4.0.0" - "registry-url" "^5.0.0" - "semver" "^6.2.0" - -"pako@~1.0.5": - "integrity" "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - "resolved" "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" - "version" "1.0.11" - -"param-case@^3.0.4": - "integrity" "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==" - "resolved" "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "dot-case" "^3.0.4" - "tslib" "^2.0.3" - -"parent-module@^1.0.0": - "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" - "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "callsites" "^3.0.0" - -"parse-asn1@^5.0.0", "parse-asn1@^5.1.5": - "integrity" "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==" - "resolved" "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" - "version" "5.1.6" - dependencies: - "asn1.js" "^5.2.0" - "browserify-aes" "^1.0.0" - "evp_bytestokey" "^1.0.0" - "pbkdf2" "^3.0.3" - "safe-buffer" "^5.1.1" - -"parse-filepath@^1.0.2": - "integrity" "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=" - "resolved" "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "is-absolute" "^1.0.0" - "map-cache" "^0.2.0" - "path-root" "^0.1.1" - -"parse-json@^4.0.0": - "integrity" "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=" - "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "error-ex" "^1.3.1" - "json-parse-better-errors" "^1.0.1" - -"parse-json@^5.0.0": - "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==" - "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" - "version" "5.2.0" - dependencies: - "@babel/code-frame" "^7.0.0" - "error-ex" "^1.3.1" - "json-parse-even-better-errors" "^2.3.0" - "lines-and-columns" "^1.1.6" - -"pascal-case@^3.1.2": - "integrity" "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==" - "resolved" "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "no-case" "^3.0.4" - "tslib" "^2.0.3" - -"path-browserify@0.0.1": - "integrity" "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - "resolved" "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz" - "version" "0.0.1" - -"path-browserify@1.0.1": - "integrity" "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - "resolved" "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz" - "version" "1.0.1" - -"path-case@^3.0.4": - "integrity" "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==" - "resolved" "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "dot-case" "^3.0.4" - "tslib" "^2.0.3" - -"path-exists@^3.0.0": - "integrity" "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" - "version" "3.0.0" - -"path-exists@^4.0.0": - "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - "version" "4.0.0" - -"path-is-absolute@^1.0.0": - "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - "version" "1.0.1" - -"path-key@^3.0.0", "path-key@^3.1.0": - "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - "version" "3.1.1" - -"path-parse@^1.0.6": - "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - "version" "1.0.7" - -"path-root-regex@^0.1.0": - "integrity" "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" - "resolved" "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz" - "version" "0.1.2" - -"path-root@^0.1.1": - "integrity" "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=" - "resolved" "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz" - "version" "0.1.1" - dependencies: - "path-root-regex" "^0.1.0" - -"path-type@^3.0.0": - "integrity" "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "pify" "^3.0.0" - -"path-type@^4.0.0": - "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - "version" "4.0.0" - -"pbkdf2@^3.0.3": - "integrity" "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==" - "resolved" "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" - "version" "3.1.2" - dependencies: - "create-hash" "^1.1.2" - "create-hmac" "^1.1.4" - "ripemd160" "^2.0.1" - "safe-buffer" "^5.0.1" - "sha.js" "^2.4.8" - -"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3": - "integrity" "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" - "version" "2.3.0" - -"pify@^3.0.0": - "integrity" "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - "resolved" "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - "version" "3.0.0" - -"pkg-dir@^2.0.0": - "integrity" "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=" - "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "find-up" "^2.1.0" - -"pkg-dir@^4.1.0": - "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" - "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" - "version" "4.2.0" - dependencies: - "find-up" "^4.0.0" - -"pkg-up@^2.0.0": - "integrity" "sha1-yBmscoBZpGHKscOImivjxJoATX8=" - "resolved" "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "find-up" "^2.1.0" - -"platform@1.3.6": - "integrity" "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" - "resolved" "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz" - "version" "1.3.6" - -"please-upgrade-node@^3.2.0": - "integrity" "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==" - "resolved" "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz" - "version" "3.2.0" - dependencies: - "semver-compare" "^1.0.0" - -"pnp-webpack-plugin@1.6.4": - "integrity" "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==" - "resolved" "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz" - "version" "1.6.4" - dependencies: - "ts-pnp" "^1.1.6" - -"postcss-attribute-case-insensitive@^4.0.1": - "integrity" "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==" - "resolved" "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz" - "version" "4.0.2" - dependencies: - "postcss" "^7.0.2" - "postcss-selector-parser" "^6.0.2" - -"postcss-color-functional-notation@^2.0.1": - "integrity" "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==" - "resolved" "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "postcss" "^7.0.2" - "postcss-values-parser" "^2.0.0" - -"postcss-color-gray@^5.0.0": - "integrity" "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==" - "resolved" "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "@csstools/convert-colors" "^1.4.0" - "postcss" "^7.0.5" - "postcss-values-parser" "^2.0.0" - -"postcss-color-hex-alpha@^5.0.3": - "integrity" "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==" - "resolved" "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz" - "version" "5.0.3" - dependencies: - "postcss" "^7.0.14" - "postcss-values-parser" "^2.0.1" - -"postcss-color-mod-function@^3.0.3": - "integrity" "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==" - "resolved" "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz" - "version" "3.0.3" - dependencies: - "@csstools/convert-colors" "^1.4.0" - "postcss" "^7.0.2" - "postcss-values-parser" "^2.0.0" - -"postcss-color-rebeccapurple@^4.0.1": - "integrity" "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==" - "resolved" "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "postcss" "^7.0.2" - "postcss-values-parser" "^2.0.0" - -"postcss-custom-media@^7.0.8": - "integrity" "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==" - "resolved" "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz" - "version" "7.0.8" - dependencies: - "postcss" "^7.0.14" - -"postcss-custom-properties@^8.0.11": - "integrity" "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==" - "resolved" "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz" - "version" "8.0.11" - dependencies: - "postcss" "^7.0.17" - "postcss-values-parser" "^2.0.1" - -"postcss-custom-selectors@^5.1.2": - "integrity" "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==" - "resolved" "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz" - "version" "5.1.2" - dependencies: - "postcss" "^7.0.2" - "postcss-selector-parser" "^5.0.0-rc.3" - -"postcss-dir-pseudo-class@^5.0.0": - "integrity" "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==" - "resolved" "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "postcss" "^7.0.2" - "postcss-selector-parser" "^5.0.0-rc.3" - -"postcss-double-position-gradients@^1.0.0": - "integrity" "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==" - "resolved" "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "postcss" "^7.0.5" - "postcss-values-parser" "^2.0.0" - -"postcss-env-function@^2.0.2": - "integrity" "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==" - "resolved" "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "postcss" "^7.0.2" - "postcss-values-parser" "^2.0.0" - -"postcss-flexbugs-fixes@^5.0.2": - "integrity" "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==" - "resolved" "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz" - "version" "5.0.2" - -"postcss-focus-visible@^4.0.0": - "integrity" "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==" - "resolved" "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "postcss" "^7.0.2" - -"postcss-focus-within@^3.0.0": - "integrity" "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==" - "resolved" "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "postcss" "^7.0.2" - -"postcss-font-variant@^4.0.0": - "integrity" "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==" - "resolved" "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "postcss" "^7.0.2" - -"postcss-gap-properties@^2.0.0": - "integrity" "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==" - "resolved" "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "postcss" "^7.0.2" - -"postcss-image-set-function@^3.0.1": - "integrity" "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==" - "resolved" "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "postcss" "^7.0.2" - "postcss-values-parser" "^2.0.0" - -"postcss-initial@^3.0.0": - "integrity" "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==" - "resolved" "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "postcss" "^7.0.2" - -"postcss-js@^3.0.3": - "integrity" "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==" - "resolved" "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz" - "version" "3.0.3" - dependencies: - "camelcase-css" "^2.0.1" - "postcss" "^8.1.6" - -"postcss-lab-function@^2.0.1": - "integrity" "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==" - "resolved" "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "@csstools/convert-colors" "^1.4.0" - "postcss" "^7.0.2" - "postcss-values-parser" "^2.0.0" - -"postcss-load-config@^3.0.1": - "integrity" "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==" - "resolved" "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "import-cwd" "^3.0.0" - "lilconfig" "^2.0.3" - "yaml" "^1.10.2" - -"postcss-logical@^3.0.0": - "integrity" "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==" - "resolved" "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "postcss" "^7.0.2" - -"postcss-media-minmax@^4.0.0": - "integrity" "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==" - "resolved" "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "postcss" "^7.0.2" - -"postcss-nested@5.0.5": - "integrity" "sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==" - "resolved" "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.5.tgz" - "version" "5.0.5" - dependencies: - "postcss-selector-parser" "^6.0.4" - -"postcss-nesting@^7.0.0": - "integrity" "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==" - "resolved" "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz" - "version" "7.0.1" - dependencies: - "postcss" "^7.0.2" - -"postcss-nesting@^8.0.1": - "integrity" "sha512-cHPNhW5VvRQjszFDxmy16mis9qFQqQLBNw6KVmueLqqE3M182ZAk9+QoxGqbGVryzLVhannw2B5Yhosqq522fA==" - "resolved" "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-8.0.1.tgz" - "version" "8.0.1" - -"postcss-overflow-shorthand@^2.0.0": - "integrity" "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==" - "resolved" "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "postcss" "^7.0.2" - -"postcss-page-break@^2.0.0": - "integrity" "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==" - "resolved" "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "postcss" "^7.0.2" - -"postcss-place@^4.0.1": - "integrity" "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==" - "resolved" "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "postcss" "^7.0.2" - "postcss-values-parser" "^2.0.0" - -"postcss-preset-env@^6.7.0": - "integrity" "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==" - "resolved" "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz" - "version" "6.7.0" - dependencies: - "autoprefixer" "^9.6.1" - "browserslist" "^4.6.4" - "caniuse-lite" "^1.0.30000981" - "css-blank-pseudo" "^0.1.4" - "css-has-pseudo" "^0.10.0" - "css-prefers-color-scheme" "^3.1.1" - "cssdb" "^4.4.0" - "postcss" "^7.0.17" - "postcss-attribute-case-insensitive" "^4.0.1" - "postcss-color-functional-notation" "^2.0.1" - "postcss-color-gray" "^5.0.0" - "postcss-color-hex-alpha" "^5.0.3" - "postcss-color-mod-function" "^3.0.3" - "postcss-color-rebeccapurple" "^4.0.1" - "postcss-custom-media" "^7.0.8" - "postcss-custom-properties" "^8.0.11" - "postcss-custom-selectors" "^5.1.2" - "postcss-dir-pseudo-class" "^5.0.0" - "postcss-double-position-gradients" "^1.0.0" - "postcss-env-function" "^2.0.2" - "postcss-focus-visible" "^4.0.0" - "postcss-focus-within" "^3.0.0" - "postcss-font-variant" "^4.0.0" - "postcss-gap-properties" "^2.0.0" - "postcss-image-set-function" "^3.0.1" - "postcss-initial" "^3.0.0" - "postcss-lab-function" "^2.0.1" - "postcss-logical" "^3.0.0" - "postcss-media-minmax" "^4.0.0" - "postcss-nesting" "^7.0.0" - "postcss-overflow-shorthand" "^2.0.0" - "postcss-page-break" "^2.0.0" - "postcss-place" "^4.0.1" - "postcss-pseudo-class-any-link" "^6.0.0" - "postcss-replace-overflow-wrap" "^3.0.0" - "postcss-selector-matches" "^4.0.0" - "postcss-selector-not" "^4.0.0" - -"postcss-pseudo-class-any-link@^6.0.0": - "integrity" "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==" - "resolved" "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "postcss" "^7.0.2" - "postcss-selector-parser" "^5.0.0-rc.3" - -"postcss-replace-overflow-wrap@^3.0.0": - "integrity" "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==" - "resolved" "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "postcss" "^7.0.2" - -"postcss-selector-matches@^4.0.0": - "integrity" "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==" - "resolved" "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "balanced-match" "^1.0.0" - "postcss" "^7.0.2" - -"postcss-selector-not@^4.0.0": - "integrity" "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==" - "resolved" "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "balanced-match" "^1.0.0" - "postcss" "^7.0.2" - -"postcss-selector-parser@^5.0.0-rc.3", "postcss-selector-parser@^5.0.0-rc.4": - "integrity" "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==" - "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "cssesc" "^2.0.0" - "indexes-of" "^1.0.1" - "uniq" "^1.0.1" - -"postcss-selector-parser@^6.0.2": - "integrity" "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==" - "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz" - "version" "6.0.6" - dependencies: - "cssesc" "^3.0.0" - "util-deprecate" "^1.0.2" - -"postcss-selector-parser@^6.0.4": - "integrity" "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==" - "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz" - "version" "6.0.6" - dependencies: - "cssesc" "^3.0.0" - "util-deprecate" "^1.0.2" - -"postcss-selector-parser@^6.0.6": - "integrity" "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==" - "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz" - "version" "6.0.6" - dependencies: - "cssesc" "^3.0.0" - "util-deprecate" "^1.0.2" - -"postcss-value-parser@^3.3.0": - "integrity" "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz" - "version" "3.3.1" - -"postcss-value-parser@^4.1.0": - "integrity" "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz" - "version" "4.1.0" - -"postcss-values-parser@^2.0.0", "postcss-values-parser@^2.0.1": - "integrity" "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==" - "resolved" "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz" - "version" "2.0.1" - dependencies: - "flatten" "^1.0.2" - "indexes-of" "^1.0.1" - "uniq" "^1.0.1" - -"postcss@^7.0.14": - "integrity" "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz" - "version" "7.0.36" - dependencies: - "chalk" "^2.4.2" - "source-map" "^0.6.1" - "supports-color" "^6.1.0" - -"postcss@^7.0.17", "postcss@^7.0.2", "postcss@^7.0.32": - "integrity" "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz" - "version" "7.0.36" - dependencies: - "chalk" "^2.4.2" - "source-map" "^0.6.1" - "supports-color" "^6.1.0" - -"postcss@^7.0.5": - "integrity" "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz" - "version" "7.0.36" - dependencies: - "chalk" "^2.4.2" - "source-map" "^0.6.1" - "supports-color" "^6.1.0" - -"postcss@^7.0.6": - "integrity" "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz" - "version" "7.0.36" - dependencies: - "chalk" "^2.4.2" - "source-map" "^0.6.1" - "supports-color" "^6.1.0" - -"postcss@^8", "postcss@^8.0.0", "postcss@^8.0.9", "postcss@^8.1.0", "postcss@^8.1.13", "postcss@^8.1.4", "postcss@^8.1.6", "postcss@^8.2.1", "postcss@^8.2.15", "postcss@^8.3.5": - "integrity" "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz" - "version" "8.3.5" - dependencies: - "colorette" "^1.2.2" - "nanoid" "^3.1.23" - "source-map-js" "^0.6.2" - -"postcss@8.2.15": - "integrity" "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==" - "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz" - "version" "8.2.15" - dependencies: - "colorette" "^1.2.2" - "nanoid" "^3.1.23" - "source-map" "^0.6.1" - -"prebuild-install@^6.1.4": - "integrity" "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==" - "resolved" "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz" - "version" "6.1.4" - dependencies: - "detect-libc" "^1.0.3" - "expand-template" "^2.0.3" - "github-from-package" "0.0.0" - "minimist" "^1.2.3" - "mkdirp-classic" "^0.5.3" - "napi-build-utils" "^1.0.1" - "node-abi" "^2.21.0" - "npmlog" "^4.0.1" - "pump" "^3.0.0" - "rc" "^1.2.7" - "simple-get" "^3.0.3" - "tar-fs" "^2.0.0" - "tunnel-agent" "^0.6.0" - -"prelude-ls@^1.2.1": - "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - "version" "1.2.1" - -"prepend-http@^2.0.0": - "integrity" "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" - "version" "2.0.0" - -"prettier@^2.3.0": - "integrity" "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==" - "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz" - "version" "2.3.1" - -"pretty-hrtime@^1.0.3": - "integrity" "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" - "resolved" "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz" - "version" "1.0.3" - -"process-nextick-args@~2.0.0": - "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - "version" "2.0.1" - -"process@^0.11.10", "process@0.11.10": - "integrity" "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - "resolved" "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - "version" "0.11.10" - -"progress@^2.0.0": - "integrity" "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - "resolved" "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" - "version" "2.0.3" - -"promise@^7.1.1": - "integrity" "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==" - "resolved" "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz" - "version" "7.3.1" - dependencies: - "asap" "~2.0.3" - -"prop-types@^15.7.2": - "integrity" "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==" - "resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz" - "version" "15.7.2" - dependencies: - "loose-envify" "^1.4.0" - "object-assign" "^4.1.1" - "react-is" "^16.8.1" - -"public-encrypt@^4.0.0": - "integrity" "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==" - "resolved" "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "bn.js" "^4.1.0" - "browserify-rsa" "^4.0.0" - "create-hash" "^1.1.0" - "parse-asn1" "^5.0.0" - "randombytes" "^2.0.1" - "safe-buffer" "^5.1.2" - -"pump@^3.0.0": - "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" - "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "end-of-stream" "^1.1.0" - "once" "^1.3.1" - -"punycode@^1.2.4": - "integrity" "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" - "version" "1.4.1" - -"punycode@^2.1.0": - "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - "version" "2.1.1" - -"punycode@1.3.2": - "integrity" "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - "resolved" "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" - "version" "1.3.2" - -"purgecss@^4.0.3": - "integrity" "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==" - "resolved" "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz" - "version" "4.0.3" - dependencies: - "commander" "^6.0.0" - "glob" "^7.0.0" - "postcss" "^8.2.1" - "postcss-selector-parser" "^6.0.2" - -"qs@^6.6.0": - "integrity" "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==" - "resolved" "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz" - "version" "6.10.1" - dependencies: - "side-channel" "^1.0.4" - -"qs@6.7.0": - "integrity" "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - "resolved" "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz" - "version" "6.7.0" - -"querystring-es3@^0.2.0", "querystring-es3@0.2.1": - "integrity" "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - "resolved" "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz" - "version" "0.2.1" - -"querystring@^0.2.0": - "integrity" "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==" - "resolved" "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz" - "version" "0.2.1" - -"querystring@0.2.0": - "integrity" "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - "resolved" "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" - "version" "0.2.0" - -"queue-microtask@^1.2.2": - "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - "version" "1.2.3" - -"queue@6.0.2": - "integrity" "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==" - "resolved" "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz" - "version" "6.0.2" - dependencies: - "inherits" "~2.0.3" - -"quick-lru@^5.1.1": - "integrity" "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" - "resolved" "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" - "version" "5.1.1" - -"randombytes@^2.0.0", "randombytes@^2.0.1", "randombytes@^2.0.5": - "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" - "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - "version" "2.1.0" - dependencies: - "safe-buffer" "^5.1.0" - -"randomfill@^1.0.3": - "integrity" "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==" - "resolved" "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "randombytes" "^2.0.5" - "safe-buffer" "^5.1.0" - -"raw-body@2.4.1": - "integrity" "sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA==" - "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.4.1.tgz" - "version" "2.4.1" - dependencies: - "bytes" "3.1.0" - "http-errors" "1.7.3" - "iconv-lite" "0.4.24" - "unpipe" "1.0.0" - -"rc@^1.2.7", "rc@^1.2.8": - "integrity" "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==" - "resolved" "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" - "version" "1.2.8" - dependencies: - "deep-extend" "^0.6.0" - "ini" "~1.3.0" - "minimist" "^1.2.0" - "strip-json-comments" "~2.0.1" - -"react-dom@*", "react-dom@^16.8.0 || ^17.0.0", "react-dom@^16.8.0 || ^17.0.0", "react-dom@^17.0.2", "react-dom@>=16.0.0", "react-dom@>=16.13": - "integrity" "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==" - "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz" - "version" "17.0.2" - dependencies: - "loose-envify" "^1.1.0" - "object-assign" "^4.1.1" - "scheduler" "^0.20.2" - -"react-fast-marquee@^1.1.4": - "integrity" "sha512-rd9ZDhiUrrL2puZNlnb633df/1gjtknuIaf749LIgTLXa18fzPIdFBrz4VjERu1ECUdU9tniaF5FuosNt/GYKQ==" - "resolved" "https://registry.npmjs.org/react-fast-marquee/-/react-fast-marquee-1.2.1.tgz" - "version" "1.2.1" - -"react-is@^16.8.1": - "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - "version" "16.13.1" - -"react-is@17.0.2": - "integrity" "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - "resolved" "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" - "version" "17.0.2" - -"react-merge-refs@^1.1.0": - "integrity" "sha512-alTKsjEL0dKH/ru1Iyn7vliS2QRcBp9zZPGoWxUOvRGWPUYgjo+V01is7p04It6KhgrzhJGnIj9GgX8W4bZoCQ==" - "resolved" "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz" - "version" "1.1.0" - -"react-refresh@0.8.3": - "integrity" "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==" - "resolved" "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz" - "version" "0.8.3" - -"react-use-measure@^2.0.4": - "integrity" "sha512-7K2HIGaPMl3Q9ZQiEVjen3tRXl4UDda8LiTPy/QxP8dP2rl5gPBhf7mMH6MVjjRNv3loU7sNzey/ycPNnHVTxQ==" - "resolved" "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.0.4.tgz" - "version" "2.0.4" - dependencies: - "debounce" "^1.2.0" - -"react@*", "react@^16.11.0 || ^17.0.0", "react@^16.8.0 || ^17.0.0", "react@^16.8.0 || ^17.0.0", "react@^17.0.2", "react@>= 16.8.0 || 17.x.x || 18.x.x", "react@>=16.0.0", "react@>=16.13", "react@17.0.2": - "integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==" - "resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz" - "version" "17.0.2" - dependencies: - "loose-envify" "^1.1.0" - "object-assign" "^4.1.1" - -"read-pkg-up@^3.0.0": - "integrity" "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=" - "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "find-up" "^2.0.0" - "read-pkg" "^3.0.0" - -"read-pkg@^3.0.0": - "integrity" "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=" - "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "load-json-file" "^4.0.0" - "normalize-package-data" "^2.3.2" - "path-type" "^3.0.0" - -"readable-stream@^2.0.2", "readable-stream@^2.3.3", "readable-stream@^2.3.6": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readable-stream@^2.0.6": - "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - "version" "2.3.7" - dependencies: - "core-util-is" "~1.0.0" - "inherits" "~2.0.3" - "isarray" "~1.0.0" - "process-nextick-args" "~2.0.0" - "safe-buffer" "~5.1.1" - "string_decoder" "~1.1.1" - "util-deprecate" "~1.0.1" - -"readable-stream@^3.1.1", "readable-stream@^3.4.0", "readable-stream@^3.5.0", "readable-stream@^3.6.0": - "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" - "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "inherits" "^2.0.3" - "string_decoder" "^1.1.1" - "util-deprecate" "^1.0.1" - -"readdirp@~3.5.0": - "integrity" "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==" - "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz" - "version" "3.5.0" - dependencies: - "picomatch" "^2.2.1" - -"readdirp@~3.6.0": - "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" - "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - "version" "3.6.0" - dependencies: - "picomatch" "^2.2.1" - -"reduce-css-calc@^2.1.8": - "integrity" "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==" - "resolved" "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz" - "version" "2.1.8" - dependencies: - "css-unit-converter" "^1.1.1" - "postcss-value-parser" "^3.3.0" - -"regenerator-runtime@^0.13.2", "regenerator-runtime@^0.13.4": - "integrity" "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz" - "version" "0.13.7" - -"regexp.prototype.flags@^1.3.1": - "integrity" "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==" - "resolved" "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz" - "version" "1.3.1" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - -"regexpp@^3.1.0": - "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - "version" "3.2.0" - -"registry-auth-token@^4.0.0": - "integrity" "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==" - "resolved" "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz" - "version" "4.2.1" - dependencies: - "rc" "^1.2.8" - -"registry-url@^5.0.0": - "integrity" "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==" - "resolved" "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz" - "version" "5.1.0" - dependencies: - "rc" "^1.2.8" - -"relay-compiler@10.1.0": - "integrity" "sha512-HPqc3N3tNgEgUH5+lTr5lnLbgnsZMt+MRiyS0uAVNhuPY2It0X1ZJG+9qdA3L9IqKFUNwVn6zTO7RArjMZbARQ==" - "resolved" "https://registry.npmjs.org/relay-compiler/-/relay-compiler-10.1.0.tgz" - "version" "10.1.0" - dependencies: - "@babel/core" "^7.0.0" - "@babel/generator" "^7.5.0" - "@babel/parser" "^7.0.0" - "@babel/runtime" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - "babel-preset-fbjs" "^3.3.0" - "chalk" "^4.0.0" - "fb-watchman" "^2.0.0" - "fbjs" "^3.0.0" - "glob" "^7.1.1" - "immutable" "~3.7.6" - "nullthrows" "^1.1.1" - "relay-runtime" "10.1.0" - "signedsource" "^1.0.0" - "yargs" "^15.3.1" - -"relay-runtime@10.1.0": - "integrity" "sha512-bxznLnQ1ST6APN/cFi7l0FpjbZVchWQjjhj9mAuJBuUqNNCh9uV+UTRhpQF7Q8ycsPp19LHTpVyGhYb0ustuRQ==" - "resolved" "https://registry.npmjs.org/relay-runtime/-/relay-runtime-10.1.0.tgz" - "version" "10.1.0" - dependencies: - "@babel/runtime" "^7.0.0" - "fbjs" "^3.0.0" - -"remedial@^1.0.7": - "integrity" "sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==" - "resolved" "https://registry.npmjs.org/remedial/-/remedial-1.0.8.tgz" - "version" "1.0.8" - -"remove-trailing-separator@^1.0.1": - "integrity" "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - "resolved" "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" - "version" "1.1.0" - -"remove-trailing-spaces@^1.0.6": - "integrity" "sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==" - "resolved" "https://registry.npmjs.org/remove-trailing-spaces/-/remove-trailing-spaces-1.0.8.tgz" - "version" "1.0.8" - -"replaceall@^0.1.6": - "integrity" "sha1-gdgax663LX9cSUKt8ml6MiBojY4=" - "resolved" "https://registry.npmjs.org/replaceall/-/replaceall-0.1.6.tgz" - "version" "0.1.6" - -"require-directory@^2.1.1": - "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - "version" "2.1.1" - -"require-from-string@^2.0.2": - "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - "version" "2.0.2" - -"require-main-filename@^2.0.0": - "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" - "version" "2.0.0" - -"resolve-from@^4.0.0": - "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - "version" "4.0.0" - -"resolve-from@^5.0.0", "resolve-from@5.0.0": - "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - "version" "5.0.0" - -"resolve@^1.10.0", "resolve@^1.13.1", "resolve@^1.17.0", "resolve@^1.20.0": - "integrity" "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" - "version" "1.20.0" - dependencies: - "is-core-module" "^2.2.0" - "path-parse" "^1.0.6" - -"resolve@^2.0.0-next.3": - "integrity" "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==" - "resolved" "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz" - "version" "2.0.0-next.3" - dependencies: - "is-core-module" "^2.2.0" - "path-parse" "^1.0.6" - -"responselike@^1.0.2": - "integrity" "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=" - "resolved" "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "lowercase-keys" "^1.0.0" - -"restore-cursor@^2.0.0": - "integrity" "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=" - "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "onetime" "^2.0.0" - "signal-exit" "^3.0.2" - -"restore-cursor@^3.1.0": - "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" - "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "onetime" "^5.1.0" - "signal-exit" "^3.0.2" - -"retry@0.12.0": - "integrity" "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - "version" "0.12.0" - -"reusify@^1.0.4": - "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - "version" "1.0.4" - -"rimraf@^3.0.0", "rimraf@^3.0.2": - "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" - "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - "version" "3.0.2" - dependencies: - "glob" "^7.1.3" - -"ripemd160@^2.0.0", "ripemd160@^2.0.1": - "integrity" "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==" - "resolved" "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "hash-base" "^3.0.0" - "inherits" "^2.0.1" - -"run-async@^2.4.0": - "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" - "version" "2.4.1" - -"run-parallel@^1.1.9": - "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" - "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - "version" "1.2.0" - dependencies: - "queue-microtask" "^1.2.2" - -"rxjs@^6.3.3", "rxjs@^6.6.0", "rxjs@^6.6.7": - "integrity" "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==" - "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - "version" "6.6.7" - dependencies: - "tslib" "^1.9.0" - -"safe-buffer@^5.0.1", "safe-buffer@^5.1.0", "safe-buffer@^5.1.1", "safe-buffer@^5.1.2", "safe-buffer@^5.2.0", "safe-buffer@~5.2.0": - "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - "version" "5.2.1" - -"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": - "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - "version" "5.1.2" - -"safer-buffer@^2.1.0", "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - "version" "2.1.2" - -"scheduler@^0.20.2": - "integrity" "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==" - "resolved" "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz" - "version" "0.20.2" - dependencies: - "loose-envify" "^1.1.0" - "object-assign" "^4.1.1" - -"scuid@^1.1.0": - "integrity" "sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==" - "resolved" "https://registry.npmjs.org/scuid/-/scuid-1.1.0.tgz" - "version" "1.1.0" - -"semver-compare@^1.0.0": - "integrity" "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" - "resolved" "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" - "version" "1.0.0" - -"semver@^5.4.1": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@^5.6.0": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"semver@^6.0.0": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"semver@^6.2.0": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"semver@^6.3.0": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" - -"semver@^7.2.1", "semver@^7.3.5": - "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - "version" "7.3.5" - dependencies: - "lru-cache" "^6.0.0" - -"semver@2 || 3 || 4 || 5": - "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - "version" "5.7.1" - -"sentence-case@^3.0.4": - "integrity" "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==" - "resolved" "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "no-case" "^3.0.4" - "tslib" "^2.0.3" - "upper-case-first" "^2.0.2" - -"set-blocking@^2.0.0", "set-blocking@~2.0.0": - "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - "version" "2.0.0" - -"setimmediate@^1.0.4", "setimmediate@^1.0.5": - "integrity" "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - "version" "1.0.5" - -"setprototypeof@1.1.1": - "integrity" "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz" - "version" "1.1.1" - -"sha.js@^2.4.0", "sha.js@^2.4.8": - "integrity" "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==" - "resolved" "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" - "version" "2.4.11" - dependencies: - "inherits" "^2.0.1" - "safe-buffer" "^5.0.1" - -"sharp@^0.29.1": - "integrity" "sha512-DpgdAny9TuS+oWCQ7MRS8XyY9x6q1+yW3a5wNx0J3HrGuB/Jot/8WcT+lElHY9iJu2pwtegSGxqMaqFiMhs4rQ==" - "resolved" "https://registry.npmjs.org/sharp/-/sharp-0.29.1.tgz" - "version" "0.29.1" - dependencies: - "color" "^4.0.1" - "detect-libc" "^1.0.3" - "node-addon-api" "^4.1.0" - "prebuild-install" "^6.1.4" - "semver" "^7.3.5" - "simple-get" "^3.1.0" - "tar-fs" "^2.1.1" - "tunnel-agent" "^0.6.0" - -"shebang-command@^2.0.0": - "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - "version" "2.0.0" - dependencies: - "shebang-regex" "^3.0.0" - -"shebang-regex@^3.0.0": - "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - "version" "3.0.0" - -"shell-quote@1.7.2": - "integrity" "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - "resolved" "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz" - "version" "1.7.2" - -"shopify-buy@^2.11.0": - "integrity" "sha512-L0fo8fBDO31v9dAlVmLlIuJQnfwexGvceJ+A8hhIpovvfGh4GVGDId3k9PCWOqSzVHQBvYLdeGccxqjAOlbRlg==" - "resolved" "https://registry.npmjs.org/shopify-buy/-/shopify-buy-2.12.0.tgz" - "version" "2.12.0" - -"side-channel@^1.0.4": - "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" - "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "call-bind" "^1.0.0" - "get-intrinsic" "^1.0.2" - "object-inspect" "^1.9.0" - -"signal-exit@^3.0.0", "signal-exit@^3.0.2", "signal-exit@^3.0.3": - "integrity" "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" - "version" "3.0.3" - -"signedsource@^1.0.0": - "integrity" "sha1-HdrOSYF5j5O9gzlzgD2A1S6TrWo=" - "resolved" "https://registry.npmjs.org/signedsource/-/signedsource-1.0.0.tgz" - "version" "1.0.0" - -"simple-concat@^1.0.0": - "integrity" "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - "resolved" "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" - "version" "1.0.1" - -"simple-get@^3.0.3", "simple-get@^3.1.0": - "integrity" "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==" - "resolved" "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "decompress-response" "^4.2.0" - "once" "^1.3.1" - "simple-concat" "^1.0.0" - -"simple-swizzle@^0.2.2": - "integrity" "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=" - "resolved" "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" - "version" "0.2.2" - dependencies: - "is-arrayish" "^0.3.1" - -"sirv@^1.0.7": - "integrity" "sha512-+jQoCxndz7L2tqQL4ZyzfDhky0W/4ZJip3XoOuxyQWnAwMxindLl3Xv1qT4x1YX/re0leShvTm8Uk0kQspGhBg==" - "resolved" "https://registry.npmjs.org/sirv/-/sirv-1.0.12.tgz" - "version" "1.0.12" - dependencies: - "@polka/url" "^1.0.0-next.15" - "mime" "^2.3.1" - "totalist" "^1.0.0" - -"slash@^3.0.0": - "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - "version" "3.0.0" - -"slice-ansi@^3.0.0": - "integrity" "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "astral-regex" "^2.0.0" - "is-fullwidth-code-point" "^3.0.0" - -"slice-ansi@^4.0.0": - "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "astral-regex" "^2.0.0" - "is-fullwidth-code-point" "^3.0.0" - -"slice-ansi@0.0.4": - "integrity" "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" - "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz" - "version" "0.0.4" - -"slide@^1.1.5": - "integrity" "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" - "resolved" "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz" - "version" "1.1.6" - -"snake-case@^3.0.4": - "integrity" "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==" - "resolved" "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "dot-case" "^3.0.4" - "tslib" "^2.0.3" - -"source-map-js@^0.6.2": - "integrity" "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" - "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz" - "version" "0.6.2" - -"source-map-support@^0.5.17": - "integrity" "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==" - "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" - "version" "0.5.19" - dependencies: - "buffer-from" "^1.0.0" - "source-map" "^0.6.0" - -"source-map@^0.5.0": - "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" - "version" "0.5.7" - -"source-map@^0.6.0": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" - -"source-map@^0.6.1": - "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - "version" "0.6.1" - -"source-map@0.7.3": - "integrity" "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" - "version" "0.7.3" - -"source-map@0.8.0-beta.0": - "integrity" "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==" - "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz" - "version" "0.8.0-beta.0" - dependencies: - "whatwg-url" "^7.0.0" - -"spdx-correct@^3.0.0": - "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==" - "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "spdx-expression-parse" "^3.0.0" - "spdx-license-ids" "^3.0.0" - -"spdx-exceptions@^2.1.0": - "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - "version" "2.3.0" - -"spdx-expression-parse@^3.0.0": - "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==" - "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "spdx-exceptions" "^2.1.0" - "spdx-license-ids" "^3.0.0" - -"spdx-license-ids@^3.0.0": - "integrity" "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==" - "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz" - "version" "3.0.9" - -"sponge-case@^1.0.1": - "integrity" "sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==" - "resolved" "https://registry.npmjs.org/sponge-case/-/sponge-case-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "tslib" "^2.0.3" - -"sprintf-js@~1.0.2": - "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - "version" "1.0.3" - -"stacktrace-parser@0.1.10": - "integrity" "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==" - "resolved" "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" - "version" "0.1.10" - dependencies: - "type-fest" "^0.7.1" - -"statuses@>= 1.5.0 < 2": - "integrity" "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - "resolved" "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - "version" "1.5.0" - -"stream-browserify@^2.0.1": - "integrity" "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==" - "resolved" "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "inherits" "~2.0.1" - "readable-stream" "^2.0.2" - -"stream-browserify@3.0.0": - "integrity" "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==" - "resolved" "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "inherits" "~2.0.4" - "readable-stream" "^3.5.0" - -"stream-http@^2.7.2": - "integrity" "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==" - "resolved" "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz" - "version" "2.8.3" - dependencies: - "builtin-status-codes" "^3.0.0" - "inherits" "^2.0.1" - "readable-stream" "^2.3.6" - "to-arraybuffer" "^1.0.0" - "xtend" "^4.0.0" - -"stream-http@3.1.1": - "integrity" "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==" - "resolved" "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz" - "version" "3.1.1" - dependencies: - "builtin-status-codes" "^3.0.0" - "inherits" "^2.0.4" - "readable-stream" "^3.6.0" - "xtend" "^4.0.2" - -"stream-parser@^0.3.1": - "integrity" "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=" - "resolved" "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz" - "version" "0.3.1" - dependencies: - "debug" "2" - -"string_decoder@^1.0.0", "string_decoder@~1.1.1": - "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - "version" "1.1.1" - dependencies: - "safe-buffer" "~5.1.0" - -"string_decoder@^1.1.1", "string_decoder@1.3.0": - "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" - "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - "version" "1.3.0" - dependencies: - "safe-buffer" "~5.2.0" - -"string-argv@0.3.1": - "integrity" "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" - "resolved" "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" - "version" "0.3.1" - -"string-env-interpolation@^1.0.1", "string-env-interpolation@1.0.1": - "integrity" "sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==" - "resolved" "https://registry.npmjs.org/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz" - "version" "1.0.1" - -"string-hash@1.1.3": - "integrity" "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=" - "resolved" "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz" - "version" "1.1.3" - -"string-width@^1.0.1": - "integrity" "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "code-point-at" "^1.0.0" - "is-fullwidth-code-point" "^1.0.0" - "strip-ansi" "^3.0.0" - -"string-width@^1.0.2 || 2": - "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "is-fullwidth-code-point" "^2.0.0" - "strip-ansi" "^4.0.0" - -"string-width@^2.1.1": - "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "is-fullwidth-code-point" "^2.0.0" - "strip-ansi" "^4.0.0" - -"string-width@^4.1.0", "string-width@^4.2.0": - "integrity" "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" - "version" "4.2.2" - dependencies: - "emoji-regex" "^8.0.0" - "is-fullwidth-code-point" "^3.0.0" - "strip-ansi" "^6.0.0" - -"string.prototype.matchall@^4.0.5": - "integrity" "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==" - "resolved" "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz" - "version" "4.0.5" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - "es-abstract" "^1.18.2" - "get-intrinsic" "^1.1.1" - "has-symbols" "^1.0.2" - "internal-slot" "^1.0.3" - "regexp.prototype.flags" "^1.3.1" - "side-channel" "^1.0.4" - -"string.prototype.trimend@^1.0.4": - "integrity" "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==" - "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - -"string.prototype.trimstart@^1.0.4": - "integrity" "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==" - "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" - "version" "1.0.4" - dependencies: - "call-bind" "^1.0.2" - "define-properties" "^1.1.3" - -"stringify-object@^3.3.0": - "integrity" "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==" - "resolved" "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" - "version" "3.3.0" - dependencies: - "get-own-enumerable-property-symbols" "^3.0.0" - "is-obj" "^1.0.1" - "is-regexp" "^1.0.0" - -"strip-ansi@^3.0.0", "strip-ansi@^3.0.1": - "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "ansi-regex" "^2.0.0" - -"strip-ansi@^4.0.0": - "integrity" "sha1-qEeQIusaw2iocTibY1JixQXuNo8=" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" - "version" "4.0.0" - dependencies: - "ansi-regex" "^3.0.0" - -"strip-ansi@^6.0.0", "strip-ansi@6.0.0": - "integrity" "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==" - "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" - "version" "6.0.0" - dependencies: - "ansi-regex" "^5.0.0" - -"strip-bom@^3.0.0": - "integrity" "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - "version" "3.0.0" - -"strip-final-newline@^2.0.0": - "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - "version" "2.0.0" - -"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1": - "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - "version" "3.1.1" - -"strip-json-comments@~2.0.1": - "integrity" "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - "version" "2.0.1" - -"stripe@^8.176.0": - "integrity" "sha512-ZUdvyX+sizTxXLEbUjgTShrulSWSkMIt7hIKdAkhnajYrHdzVtdmhBJl8sQbR9chMVox3Ig5ohilyeIrvcCE2g==" - "resolved" "https://registry.npmjs.org/stripe/-/stripe-8.184.0.tgz" - "version" "8.184.0" - dependencies: - "@types/node" ">=8.1.0" - "qs" "^6.6.0" - -"styled-jsx@4.0.1": - "integrity" "sha512-Gcb49/dRB1k8B4hdK8vhW27Rlb2zujCk1fISrizCcToIs+55B4vmUM0N9Gi4nnVfFZWe55jRdWpAqH1ldAKWvQ==" - "resolved" "https://registry.npmjs.org/styled-jsx/-/styled-jsx-4.0.1.tgz" - "version" "4.0.1" - dependencies: - "@babel/plugin-syntax-jsx" "7.14.5" - "@babel/types" "7.15.0" - "convert-source-map" "1.7.0" - "loader-utils" "1.2.3" - "source-map" "0.7.3" - "string-hash" "1.1.3" - "stylis" "3.5.4" - "stylis-rule-sheet" "0.0.10" - -"stylis-rule-sheet@0.0.10": - "integrity" "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" - "resolved" "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz" - "version" "0.0.10" - -"stylis@^3.5.0", "stylis@3.5.4": - "integrity" "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - "resolved" "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz" - "version" "3.5.4" - -"subscriptions-transport-ws@^0.9.18": - "integrity" "sha512-dxdemxFFB0ppCLg10FTtRqH/31FNRL1y1BQv8209MK5I4CwALb7iihQg+7p65lFcIl8MHatINWBLOqpgU4Kyyw==" - "resolved" "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.19.tgz" - "version" "0.9.19" - dependencies: - "backo2" "^1.0.2" - "eventemitter3" "^3.1.0" - "iterall" "^1.2.1" - "symbol-observable" "^1.0.4" - "ws" "^5.2.0 || ^6.0.0 || ^7.0.0" - -"supports-color@^2.0.0": - "integrity" "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" - "version" "2.0.0" - -"supports-color@^5.3.0": - "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - "version" "5.5.0" - dependencies: - "has-flag" "^3.0.0" - -"supports-color@^6.1.0": - "integrity" "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "has-flag" "^3.0.0" - -"supports-color@^7.1.0": - "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - "version" "7.2.0" - dependencies: - "has-flag" "^4.0.0" - -"supports-color@^8.0.0": - "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" - "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - "version" "8.1.1" - dependencies: - "has-flag" "^4.0.0" - -"swap-case@^2.0.2": - "integrity" "sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==" - "resolved" "https://registry.npmjs.org/swap-case/-/swap-case-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "tslib" "^2.0.3" - -"swell-js@^4.0.0-next.0": - "integrity" "sha512-OQ1FLft3ruKpQw5P0TiCzs/X2Ma95+Qz+I2Xzs4KC6v+zVaFVUGNs80dQdtjfInisWoFC7iFZF2AITgellVGAg==" - "resolved" "https://registry.npmjs.org/swell-js/-/swell-js-4.0.0-next.0.tgz" - "version" "4.0.0-next.0" - dependencies: - "@babel/runtime" "7.4.5" - "deepmerge" "4.2.2" - "isomorphic-fetch" "3.0.0" - "lodash" "4.17.21" - "object-keys-normalizer" "1.0.1" - "object-merge-advanced" "12.0.3" - "qs" "6.7.0" - -"swr@^0.5.6": - "integrity" "sha512-Bmx3L4geMZjYT5S2Z6EE6/5Cx6v1Ka0LhqZKq8d6WL2eu9y6gHWz3dUzfIK/ymZVHVfwT/EweFXiYGgfifei3w==" - "resolved" "https://registry.npmjs.org/swr/-/swr-0.5.6.tgz" - "version" "0.5.6" - dependencies: - "dequal" "2.0.2" - -"symbol-observable@^1.0.4", "symbol-observable@^1.1.0": - "integrity" "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - "resolved" "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz" - "version" "1.2.0" - -"sync-fetch@0.3.0": - "integrity" "sha512-dJp4qg+x4JwSEW1HibAuMi0IIrBI3wuQr2GimmqB7OXR50wmwzfdusG+p39R9w3R6aFtZ2mzvxvWKQ3Bd/vx3g==" - "resolved" "https://registry.npmjs.org/sync-fetch/-/sync-fetch-0.3.0.tgz" - "version" "0.3.0" - dependencies: - "buffer" "^5.7.0" - "node-fetch" "^2.6.1" - -"tabbable@^5.2.0": - "integrity" "sha512-0uyt8wbP0P3T4rrsfYg/5Rg3cIJ8Shl1RJ54QMqYxm1TLdWqJD1u6+RQjr2Lor3wmfT7JRHkirIwy99ydBsyPg==" - "resolved" "https://registry.npmjs.org/tabbable/-/tabbable-5.2.0.tgz" - "version" "5.2.0" - -"table@^6.0.9": - "integrity" "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==" - "resolved" "https://registry.npmjs.org/table/-/table-6.7.1.tgz" - "version" "6.7.1" - dependencies: - "ajv" "^8.0.1" - "lodash.clonedeep" "^4.5.0" - "lodash.truncate" "^4.4.2" - "slice-ansi" "^4.0.0" - "string-width" "^4.2.0" - "strip-ansi" "^6.0.0" - -"tailwindcss@^2.2.2": - "integrity" "sha512-OzFWhlnfrO3JXZKHQiqZcb0Wwl3oJSmQ7PvT2jdIgCjV5iUoAyql9bb9ZLCSBI5TYXmawujXAoNxXVfP5Auy/Q==" - "resolved" "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.2.tgz" - "version" "2.2.2" - dependencies: - "@fullhuman/postcss-purgecss" "^4.0.3" - "arg" "^5.0.0" - "bytes" "^3.0.0" - "chalk" "^4.1.1" - "chokidar" "^3.5.1" - "color" "^3.1.3" - "cosmiconfig" "^7.0.0" - "detective" "^5.2.0" - "didyoumean" "^1.2.1" - "dlv" "^1.1.3" - "fast-glob" "^3.2.5" - "fs-extra" "^10.0.0" - "glob-parent" "^6.0.0" - "html-tags" "^3.1.0" - "is-glob" "^4.0.1" - "lodash" "^4.17.21" - "lodash.topath" "^4.5.2" - "modern-normalize" "^1.1.0" - "node-emoji" "^1.8.1" - "normalize-path" "^3.0.0" - "object-hash" "^2.2.0" - "postcss-js" "^3.0.3" - "postcss-load-config" "^3.0.1" - "postcss-nested" "5.0.5" - "postcss-selector-parser" "^6.0.6" - "postcss-value-parser" "^4.1.0" - "pretty-hrtime" "^1.0.3" - "quick-lru" "^5.1.1" - "reduce-css-calc" "^2.1.8" - "resolve" "^1.20.0" - "tmp" "^0.2.1" - -"tar-fs@^2.0.0", "tar-fs@^2.1.1": - "integrity" "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==" - "resolved" "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "chownr" "^1.1.1" - "mkdirp-classic" "^0.5.2" - "pump" "^3.0.0" - "tar-stream" "^2.1.4" - -"tar-stream@^2.1.4": - "integrity" "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==" - "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" - "version" "2.2.0" - dependencies: - "bl" "^4.0.3" - "end-of-stream" "^1.4.1" - "fs-constants" "^1.0.0" - "inherits" "^2.0.3" - "readable-stream" "^3.1.1" - -"text-table@^0.2.0": - "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - "version" "0.2.0" - -"through@^2.3.6", "through@^2.3.8": - "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - "version" "2.3.8" - -"timers-browserify@^2.0.4", "timers-browserify@2.0.12": - "integrity" "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==" - "resolved" "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz" - "version" "2.0.12" - dependencies: - "setimmediate" "^1.0.4" - -"title-case@^3.0.3": - "integrity" "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==" - "resolved" "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz" - "version" "3.0.3" - dependencies: - "tslib" "^2.0.3" - -"tmp@^0.0.33": - "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" - "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - "version" "0.0.33" - dependencies: - "os-tmpdir" "~1.0.2" - -"tmp@^0.2.1": - "integrity" "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==" - "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" - "version" "0.2.1" - dependencies: - "rimraf" "^3.0.0" - -"to-arraybuffer@^1.0.0": - "integrity" "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - "resolved" "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz" - "version" "1.0.1" - -"to-fast-properties@^2.0.0": - "integrity" "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - "version" "2.0.0" - -"to-readable-stream@^1.0.0": - "integrity" "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - "resolved" "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" - "version" "1.0.0" - -"to-regex-range@^5.0.1": - "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" - "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - "version" "5.0.1" - dependencies: - "is-number" "^7.0.0" - -"toidentifier@1.0.0": - "integrity" "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" - "version" "1.0.0" - -"totalist@^1.0.0": - "integrity" "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" - "resolved" "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz" - "version" "1.1.0" - -"tr46@^1.0.1": - "integrity" "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=" - "resolved" "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "punycode" "^2.1.0" - -"tr46@~0.0.3": - "integrity" "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - "version" "0.0.3" - -"ts-log@^2.2.3": - "integrity" "sha512-XvB+OdKSJ708Dmf9ore4Uf/q62AYDTzFcAdxc8KNML1mmAWywRFVt/dn1KYJH8Agt5UJNujfM3znU5PxgAzA2w==" - "resolved" "https://registry.npmjs.org/ts-log/-/ts-log-2.2.3.tgz" - "version" "2.2.3" - -"ts-node@^9", "ts-node@>=9.0.0": - "integrity" "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==" - "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz" - "version" "9.1.1" - dependencies: - "arg" "^4.1.0" - "create-require" "^1.1.0" - "diff" "^4.0.1" - "make-error" "^1.1.1" - "source-map-support" "^0.5.17" - "yn" "3.1.1" - -"ts-pnp@^1.1.6": - "integrity" "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" - "resolved" "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz" - "version" "1.2.0" - -"tsconfig-paths@^3.9.0": - "integrity" "sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q==" - "resolved" "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz" - "version" "3.10.1" - dependencies: - "json5" "^2.2.0" - "minimist" "^1.2.0" - "strip-bom" "^3.0.0" - -"tslib@^1.8.1": - "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - "version" "1.14.1" - -"tslib@^1.9.0": - "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - "version" "1.14.1" - -"tslib@^2", "tslib@^2.0.3", "tslib@^2.1.0", "tslib@~2.2.0": - "integrity" "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz" - "version" "2.2.0" - -"tslib@~2.0.1": - "integrity" "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz" - "version" "2.0.3" - -"tslib@~2.1.0": - "integrity" "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz" - "version" "2.1.0" - -"tslib@~2.3.0": - "integrity" "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" - "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz" - "version" "2.3.0" - -"tsutils@^3.21.0": - "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" - "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - "version" "3.21.0" - dependencies: - "tslib" "^1.8.1" - -"tty-browserify@0.0.0": - "integrity" "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - "resolved" "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" - "version" "0.0.0" - -"tty-browserify@0.0.1": - "integrity" "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==" - "resolved" "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz" - "version" "0.0.1" - -"tunnel-agent@^0.6.0": - "integrity" "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=" - "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - "version" "0.6.0" - dependencies: - "safe-buffer" "^5.0.1" - -"type-check@^0.4.0", "type-check@~0.4.0": - "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - "version" "0.4.0" - dependencies: - "prelude-ls" "^1.2.1" - -"type-fest@^0.20.2": - "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - "version" "0.20.2" - -"type-fest@^0.21.3": - "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - "version" "0.21.3" - -"type-fest@^0.7.1": - "integrity" "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" - "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz" - "version" "0.7.1" - -"typescript@>=2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=3.3.1", "typescript@4.3.4": - "integrity" "sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==" - "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.3.4.tgz" - "version" "4.3.4" - -"ua-parser-js@^0.7.18": - "integrity" "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" - "resolved" "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz" - "version" "0.7.28" - -"unbox-primitive@^1.0.1": - "integrity" "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==" - "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" - "version" "1.0.1" - dependencies: - "function-bind" "^1.1.1" - "has-bigints" "^1.0.1" - "has-symbols" "^1.0.2" - "which-boxed-primitive" "^1.0.2" - -"unc-path-regex@^0.1.2": - "integrity" "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" - "resolved" "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz" - "version" "0.1.2" - -"uniq@^1.0.1": - "integrity" "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - "resolved" "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" - "version" "1.0.1" - -"universalify@^2.0.0": - "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - "version" "2.0.0" - -"unixify@1.0.0": - "integrity" "sha1-OmQcjC/7zk2mg6XHDwOkYpQMIJA=" - "resolved" "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz" - "version" "1.0.0" - dependencies: - "normalize-path" "^2.1.1" - -"unpipe@1.0.0": - "integrity" "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - "version" "1.0.0" - -"upper-case-first@^2.0.2": - "integrity" "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==" - "resolved" "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "tslib" "^2.0.3" - -"upper-case@^2.0.2": - "integrity" "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==" - "resolved" "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "tslib" "^2.0.3" - -"uri-js@^4.2.2": - "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" - "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - "version" "4.4.1" - dependencies: - "punycode" "^2.1.0" - -"url-parse-lax@^3.0.0": - "integrity" "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=" - "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" - "version" "3.0.0" - dependencies: - "prepend-http" "^2.0.0" - -"url@^0.11.0": - "integrity" "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=" - "resolved" "https://registry.npmjs.org/url/-/url-0.11.0.tgz" - "version" "0.11.0" - dependencies: - "punycode" "1.3.2" - "querystring" "0.2.0" - -"use-subscription@1.5.1": - "integrity" "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==" - "resolved" "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz" - "version" "1.5.1" - dependencies: - "object-assign" "^4.1.1" - -"util-deprecate@^1.0.1", "util-deprecate@^1.0.2", "util-deprecate@~1.0.1": - "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - "version" "1.0.2" - -"util-nonempty@^3.0.6": - "integrity" "sha512-OSZlWoCL74Go83Qw/aeZgSmFZnp9d06bF77b1eAOKipkPWhvxjRYB2nmKiGspoVjkJJEJimzxAgBFUQiUV/oZQ==" - "resolved" "https://registry.npmjs.org/util-nonempty/-/util-nonempty-3.1.0.tgz" - "version" "3.1.0" - dependencies: - "@babel/runtime" "^7.14.0" - "lodash.isplainobject" "^4.0.6" - -"util@^0.11.0": - "integrity" "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==" - "resolved" "https://registry.npmjs.org/util/-/util-0.11.1.tgz" - "version" "0.11.1" - dependencies: - "inherits" "2.0.3" - -"util@^0.12.0", "util@0.12.4": - "integrity" "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==" - "resolved" "https://registry.npmjs.org/util/-/util-0.12.4.tgz" - "version" "0.12.4" - dependencies: - "inherits" "^2.0.3" - "is-arguments" "^1.0.4" - "is-generator-function" "^1.0.7" - "is-typed-array" "^1.1.3" - "safe-buffer" "^5.1.2" - "which-typed-array" "^1.1.2" - -"util@0.10.3": - "integrity" "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=" - "resolved" "https://registry.npmjs.org/util/-/util-0.10.3.tgz" - "version" "0.10.3" - dependencies: - "inherits" "2.0.1" - -"uuid@8.3.2": - "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - "version" "8.3.2" - -"uuidv4@^6.2.10": - "integrity" "sha512-OTS4waH9KplrXNADKo+Q1kT9AHWr8DaC0S5F54RQzEwcUaEzBEWQQlJyDUw/u1bkRhJyqkqhLD4M4lbFbV+89g==" - "resolved" "https://registry.npmjs.org/uuidv4/-/uuidv4-6.2.11.tgz" - "version" "6.2.11" - dependencies: - "@types/uuid" "8.3.1" - "uuid" "8.3.2" - -"v8-compile-cache@^2.0.3": - "integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - "version" "2.3.0" - -"valid-url@^1.0.9", "valid-url@1.0.9": - "integrity" "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" - "resolved" "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz" - "version" "1.0.9" - -"validate-npm-package-license@^3.0.1": - "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" - "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - "version" "3.0.4" - dependencies: - "spdx-correct" "^3.0.0" - "spdx-expression-parse" "^3.0.0" - -"value-or-promise@1.0.6": - "integrity" "sha512-9r0wQsWD8z/BxPOvnwbPf05ZvFngXyouE9EKB+5GbYix+BYnAwrIChCUyFIinfbf2FL/U71z+CPpbnmTdxrwBg==" - "resolved" "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.6.tgz" - "version" "1.0.6" - -"vm-browserify@^1.0.1", "vm-browserify@1.1.2": - "integrity" "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - "resolved" "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" - "version" "1.1.2" - -"watchpack@2.1.1": - "integrity" "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==" - "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz" - "version" "2.1.1" - dependencies: - "glob-to-regexp" "^0.4.1" - "graceful-fs" "^4.1.2" - -"webidl-conversions@^3.0.0": - "integrity" "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - "version" "3.0.1" - -"webidl-conversions@^4.0.2": - "integrity" "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz" - "version" "4.0.2" - -"webpack-bundle-analyzer@4.3.0": - "integrity" "sha512-J3TPm54bPARx6QG8z4cKBszahnUglcv70+N+8gUqv2I5KOFHJbzBiLx+pAp606so0X004fxM7hqRu10MLjJifA==" - "resolved" "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "acorn" "^8.0.4" - "acorn-walk" "^8.0.0" - "chalk" "^4.1.0" - "commander" "^6.2.0" - "gzip-size" "^6.0.0" - "lodash" "^4.17.20" - "opener" "^1.5.2" - "sirv" "^1.0.7" - "ws" "^7.3.1" - -"whatwg-fetch@^3.4.1", "whatwg-fetch@>=0.10.0": - "integrity" "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - "resolved" "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz" - "version" "3.6.2" - -"whatwg-url@^5.0.0": - "integrity" "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=" - "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "tr46" "~0.0.3" - "webidl-conversions" "^3.0.0" - -"whatwg-url@^7.0.0": - "integrity" "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==" - "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz" - "version" "7.1.0" - dependencies: - "lodash.sortby" "^4.7.0" - "tr46" "^1.0.1" - "webidl-conversions" "^4.0.2" - -"which-boxed-primitive@^1.0.2": - "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" - "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" - "version" "1.0.2" - dependencies: - "is-bigint" "^1.0.1" - "is-boolean-object" "^1.1.0" - "is-number-object" "^1.0.4" - "is-string" "^1.0.5" - "is-symbol" "^1.0.3" - -"which-module@^2.0.0": - "integrity" "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" - "version" "2.0.0" - -"which-typed-array@^1.1.2": - "integrity" "sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==" - "resolved" "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.7.tgz" - "version" "1.1.7" - dependencies: - "available-typed-arrays" "^1.0.5" - "call-bind" "^1.0.2" - "es-abstract" "^1.18.5" - "foreach" "^2.0.5" - "has-tostringtag" "^1.0.0" - "is-typed-array" "^1.1.7" - -"which@^2.0.1": - "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" - "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - "version" "2.0.2" - dependencies: - "isexe" "^2.0.0" - -"wide-align@^1.1.0": - "integrity" "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==" - "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" - "version" "1.1.3" - dependencies: - "string-width" "^1.0.2 || 2" - -"word-wrap@^1.2.3": - "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - "version" "1.2.3" - -"wrap-ansi@^3.0.1": - "integrity" "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz" - "version" "3.0.1" - dependencies: - "string-width" "^2.1.1" - "strip-ansi" "^4.0.0" - -"wrap-ansi@^6.2.0": - "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - "version" "6.2.0" - dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - -"wrap-ansi@^7.0.0": - "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" - "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - "version" "7.0.0" - dependencies: - "ansi-styles" "^4.0.0" - "string-width" "^4.1.0" - "strip-ansi" "^6.0.0" - -"wrappy@1": - "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - "version" "1.0.2" - -"write-file-atomic@^1.1.4": - "integrity" "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=" - "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz" - "version" "1.3.4" - dependencies: - "graceful-fs" "^4.1.11" - "imurmurhash" "^0.1.4" - "slide" "^1.1.5" - -"ws@*", "ws@^5.2.0 || ^6.0.0 || ^7.0.0", "ws@^7.3.1", "ws@7.4.5": - "integrity" "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==" - "resolved" "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz" - "version" "7.4.5" - -"xtend@^4.0.0", "xtend@^4.0.2": - "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - "version" "4.0.2" - -"y18n@^4.0.0": - "integrity" "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" - "version" "4.0.3" - -"y18n@^5.0.5": - "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - "version" "5.0.8" - -"yallist@^3.0.2": - "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - "version" "3.1.1" - -"yallist@^4.0.0": - "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - "version" "4.0.0" - -"yaml-ast-parser@^0.0.43": - "integrity" "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==" - "resolved" "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz" - "version" "0.0.43" - -"yaml@^1.10.0", "yaml@^1.10.2": - "integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" - "version" "1.10.2" - -"yargs-parser@^18.1.2": - "integrity" "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" - "version" "18.1.3" - dependencies: - "camelcase" "^5.0.0" - "decamelize" "^1.2.0" - -"yargs-parser@^20.2.2": - "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - "version" "20.2.9" - -"yargs@^15.3.1": - "integrity" "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" - "version" "15.4.1" - dependencies: - "cliui" "^6.0.0" - "decamelize" "^1.2.0" - "find-up" "^4.1.0" - "get-caller-file" "^2.0.1" - "require-directory" "^2.1.1" - "require-main-filename" "^2.0.0" - "set-blocking" "^2.0.0" - "string-width" "^4.2.0" - "which-module" "^2.0.0" - "y18n" "^4.0.0" - "yargs-parser" "^18.1.2" - -"yargs@^17.0.0": - "integrity" "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==" - "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz" - "version" "17.0.1" - dependencies: - "cliui" "^7.0.2" - "escalade" "^3.1.1" - "get-caller-file" "^2.0.5" - "require-directory" "^2.1.1" - "string-width" "^4.2.0" - "y18n" "^5.0.5" - "yargs-parser" "^20.2.2" - -"yn@3.1.1": - "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" - "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - "version" "3.1.1" - -"yocto-queue@^0.1.0": - "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - "version" "0.1.0"