Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/graphql / src / generated / schema.graphql
Size: Mime:

  
  scalar JSON

  type Label {
    label: String
  }

  type Value {
    value: String
  }

  type LabelValue {
    label: String
    value: String
  }

  type LabelValueType {
    label: String
    value: String
    type: String
  }

  type TypeValue {
    type: String
    value: String
  }

  type Name {
    name: String
  }

  # used in loyalty -.-
  type NameValue {
    name: String
    value: String
  }

  type ImageName {
    image: String
    name: String
  }

  type PricedNormal {
    type: String
    label: String
    value: String
  }

  type PricedWithRange {
    type: String
    label: String
    value: String
    ismin: String
    ismax: String
  }

  # @note
  union Price = PricedNormal | PricedWithRange

  type Pricing {
    currencycode: String
    prices: [PricedWithRange]
    buymoresavemore: [MinMaxQuantity]
  }

  type MinMaxQuantity {
    minquantity: String
    maxquantity: String
  }

  # @note
  interface IBuyInfo {
    pricing: Pricing
    inventorystatus: String
    instock: String
    preorder: String
    preorderdate: String
    deliverydate: String
    availablequantity: String
    availability: [Availability]
    promomessages: [Label]
  }

  type Availability {
    instore: String
  }

  type ServerResponse {
    responseCode: String
    responseMessage: String
    type: String
    cookies: [String]
  }

  
  type ContactUsNotReal {
    description: String
    # number: Int
    telephone: String
    workinghour: LabelValue
  }
  type Cart {
    contactus: ContactUsNotReal
    giftproducts: [CartProduct]
    saveforlater: [CartProduct]
    promocodes: [CartProduct]
    products: [CartProduct]
    status: String

    shippingmethodtype: String
    shippingmethods: [ShippingMethod]

    buyinfo: CartBuyInfo
    cartinfo: CartInfo
    iteminfo: CartItemInfo
    math: Math
    paymentcardinfo: CartPaymentCardInfo
    state: CartState
    properties: CartStateProperties
    # @todo remove
    userinfo: [CartUserInfo]
    type: String
    cookies: [String]
  }

  # type Cart {
  #   children: CartProducts
  #   properties: CartProperties
  #   type: String
  #   cookies: [String]
  # }

  type CartProducts {
    products: [CartProduct]
  }

  type CartBundleProduct {
    products: [CartProduct]
  }
  # Should Just Be Sku but it differs slightly
  type CartProduct {
    itemId: String
    identifier: String
    image: String
    name: String
    type: String
    properties: CartProductProperties
    productOptions: [TypeValue]
    productId: String
    skuId: String
    title: String
    children: CartBundleProduct
  }
  type CartProductState {
    errormessage: String
  }
  type CartSkuColor {
    name: String
  }
  type CartSkuSize {
    name: String
  }
  type CartSkuInfo {
    color: ImageName
    size1: Name
    style: Name
  }

  type CartProductSkuInfo {
    color: CartSkuColor
    size1: CartSkuSize
  }
  type CartProductProperties {
    buyinfo: CartBuyInfo
    cartinfo: CartInfo
    iteminfo: CartProductItemInfo
    skuinfo: SkuInfo
    creditcardinfo: [CreditCardInfo]
    paymentcardinfo: PaymentCardInfo
    state: CartProductState
    math: Math
    type: String
  }

  type CartProductItemInfo {
    additionalinfo: [LabelValue]
    category: String
    categoryids: [Value]
    description: [Value]
    shortdescription: [LabelValue]
    flags: [LabelValue]
    specifications: [LabelValue]
    isgiftcard: String
    itemid: String
    prices: [LabelValueType]
    sku: String
  }

  type Math {
    cost: String
    currency: String
    discountcost: String
    discount: String
    estTotalShippingDiscount: String
    estTotalShippingPrice: String
    estTotalShippingTax: String
    estTotalTax: String
    estunittax: String
    esttax: String
    estfulfilcost: String
    estfulfilsale: String
    estfulfiltax: String
    fulfiltax: String
    fulfilcost: String
    fulfilsale: String
    giftdiscount: String
    giftcost: String
    giftsale: String
    estUnitTax: String
    grandTotal: String
    grandTotalAfterPayment: String
    grandTotalTax: String
    maxBagCount: String
    quantity: String
    sale: String
    tax: String
    totalBagCount: String
    totalBagCountWithErrors: String
    totalCost: String
    totalDiscount: String
    totalGiftWrapCost: String
    totalGiftWrapDiscount: String
    totalGiftWrapPrice: String
    totalGiftWrapTax: String
    totalSale: String
    unittax: String
    unitCost: String
    unitSale: String
  }

  # YOU HAD ONE WAY TO NAME THINGS
  type CartStateProperties {
    state: CartState
  }
  type CartProperties {
    buyinfo: CartBuyInfo
    cartinfo: CartInfo
    iteminfo: CartItemInfo
    math: Math
    # paymentcardinfo: CartPaymentCardInfo
    state: CartState
    userinfo: CartUserInfo
  }

  type CartBuyInfo implements IBuyInfo {
    pricing: Pricing
    inventorystatus: String
    instock: String
    preorder: String
    preorderdate: String
    deliverydate: String
    availablequantity: String
    availability: [Availability]
    promomessages: [Label]
  }

  type CartOrderPricing {
    currencycode: String
    prices: [Price]
    buymoresavemore: [MinMaxQuantity]
  }

  type CartInfo {
    quantity: String
    discounttotal: String
    discountonlytotal: String
    giftitem: String
    iseligible: String
    pretaxtotal: String
    shippingcharge: String
    shippingtax: String
    subtotal: String
    total: String
    totaltax: String
    discount: [LabelValue]
    shippingmethods: [ShippingMethod]
    valueaddedtaxes: [LabelValue]
    valuesapplied: [CartInfoValues]
  }

  type ShippingMethod {
    estdate: String
    esttime: String
    notes: String
    name: String
    selected: String
    code: String
    date: String
    identifier: String
    notification: String
    prices: [LabelValue]
    time: String
    type: String
  }

  type ShippingMethods {
    shippingmethods: [ShippingMethod]
    type: String
  }

  type CartInfoValues {
    shiptotal: String
  }

  type CartItemInfo {
    giftoption: GiftOption
  }

  type CartPaymentCardInfo {
    adjustedamount: String
    amount: String
    type: String
  }

  type GiftOption {
    giftwraptax: String
    giftwrapcost: String
  }

  type CartState {
    additionalinfo: [LabelValue]
    status: String
    count: String
  }

  type CartUserInfo {
    guid: String
    userid: String
    addressinfo: [AddressInfo]
  }

  type AddressInfo {
    addresstype: String
    city: String
    country: String
    county: String
    state: String
    zipcode: String
    firstname: String
    lastname: String
    addressline1: String
    addressline2: String
    phonenumber: String
    email: String
  }

  type PromoProperties {
    state: CartState
  }

  type PromoResponse {
    type: String
    properties: PromoProperties
  }

  type ChildrenProducts {
    products: [CartProduct]
  }

  type AddToBagResponse {
    type: String
    properties: PromoProperties
    children: ChildrenProducts
  }

  type UpdateBagResponse {
    type: String
    properties: CartProperties
    children: ChildrenProducts
  }

  type DeleteFromBagProperties {
    state: CartState
  }

  type DeleteFromBagResponse {
    type: String
    properties: DeleteFromBagProperties
  }

  input CategoryIdParam {
    categoryId: String
  }

  input CustomParams {
    mainProduct: String
    mandatoryProduct: String
    optionalProduct: String
    quantity: Int
  }

  input subProducts {
    skuId: String!
    itemid: String!
    customParams: CustomParams
  }

  input AddToBagInput {
    skuId: String!
    itemid: String!
    title: String
    quantity: Int
    itemType: String
    customParams: CategoryIdParam
    subProducts: [subProducts]
  }

  input UpdateBagInput {
    quantity: Int
    id: String
  }

  input DeleteFromBagInput {
    id: String!
  }

  type EstimateShippingMath {
    estTotalShippingPrice: String
  }

  input EstimateInfoInput {
    postalCode: String
    state: String
    country: String
    city: String
  }
  type EstimateShippingProperties {
    math: EstimateShippingMath
  }

  type EstimateShippingResponse {
    type: String
    properties: EstimateShippingProperties
  }

  
  type ShippingState {
    status: String
  }

  # @todo @michael extends CartInfo?
  type CheckoutCartInfo {
    totaltax: String
    total: String
    quantity: String
    subtotal: String
    estsubtotal: String
    discounttotal: String
    discount: [LabelValue]
    giftwrap: String
    shippingmethods: [ShippingMethods]
  }

  type ShippingProperties {
    cartinfo: CheckoutCartInfo
    state: ShippingState
  }

  type SetShippingResponse {
    responseCode: String
    properties: ShippingProperties
  }

  # @todo this is unused bloat? we have LabelValue type?
  type AdditionalInfo {
    label: String
    value: String
  }

  type ShippingMethodState {
    status: String
  }

  type ShippingMethodProperties {
    state: ShippingMethodState
    cartinfo: CheckoutCartInfo
  }

  type ShippingMethodResponse {
    type: String
    properties: ShippingMethodProperties
  }

  type PaymentProductsResponse {
    identifier: String
    name: String
    creditcardinfo: CreditCardInfo
    paymentcardinfo: PaymentCardInfo
    type: String
  }

  type RecalculateBuyInfo {
    pricing: Pricing
  }

  type PaymentCardInfo {
    amount: String
    type: String
  }

  type Card {
    isvalidated: String
    expirationyear: String
    cardid: String
    cardbrand: String
    cardtype: String
    cardnumber: String
    expirationmonth: String
  }

  type CreditCardData {
    cards: [Card]
  }

  type RecalculateProperties {
    buyinfo: RecalculateBuyInfo
    iteminfo: CartItemInfo
    cartinfo: CartInfo
    state: CartState
    userinfo: CartUserInfo
    creditcardinfo: CreditCardData
    paymentcardinfo: PaymentCardInfo
    math: Math
  }

  type AddPaymentInfo {
    products: [PaymentProductsResponse]
  }

  type AddPaymentState {
    status: String
  }

  type AddPaymentProperties {
    state: AddPaymentState
  }

  type AddPaymentResponse {
    type: String
    children: RecalculateProducts
    properties: AddPaymentProperties
    identifier: String
  }

  type DeletePaymentProperties {
    state: DeletePaymentState
  }

  type DeletePaymentResponse {
    type: String
    properties: DeletePaymentProperties
  }

  type GuestProfileState {
    status: String
  }

  type GuestProfileProperties {
    state: GuestProfileState
  }

  type GuestProfileResponse {
    type: String
  }

  type SubmitOrderOrderinfo {
    orderid: String
  }

  type SubmitOrderProperties {
    orderinfo: SubmitOrderOrderinfo
  }

  type SubmitOrderResponse {
    type: String
    responseMessage: String
    properties: SubmitOrderProperties
  }

  type RecalculateProduct {
    identifier: String
    image: String
    name: String
    type: String
    properties: RecalculateProperties
  }

  type RecalculateProducts {
    products: [RecalculateProduct]
  }

  type RecalculateOrderResponse {
    type: String
    responseMessage: String
    properties: RecalculateProperties
    children: RecalculateProducts
  }

  input PaymentCustomParams {
    addCardDetailToProfile: [String]
    setAsDefaultCardInProfile: [String]
    useDefaultCard: [String]
  }

  input ShippingCustomParams {
    addAddressToProfile: [String] = ["false"]
    useDefaultAddress: [String] = ["false"]
    setAsDefaultAddressInProfile: [String] = ["false"]
    overrideAddressValidation: [String] = ["true"]
  }

  input CreditCardInput {
    number: String!
    type: String! # convert to Enum
    cvv: String!
    expirationMonth: String!
    expirationYear: String!
    name: String!
    id: String
  }

  input PaymentAddress {
    addressLine1: String!
    addressLine2: String
    postalCode: String!
    city: String!
    state: String!
    country: String!
    phone: String!
    email: String!
    lastName: String!
    firstName: String!
    deliveryInstruction: String = ""
    customParams: ShippingCustomParams
  }

  input Payment {
    type: String = "creditcard"
    amount: String!
    creditCard: [CreditCardInput!]
    address: [PaymentAddress!]
    customParams: PaymentCustomParams
  }

  input PaymentDetail {
    itemType: String = "payment"
    title: String = "creditcard"
    payment: Payment!
  }

  input DeletePaymentId {
    id: String!
  }

  input DeletePaymentDetails {
    # from jai
    item: DeletePaymentId
    # merged from michael
    items: [DeletePaymentId]
  }

  input PaymentDetails {
    items: [PaymentDetail!] = []
    paymentMethods: [Payment] = []
    shippingAddresses: [PaymentAddress] = []
  }

  input GuestProfileAddressDetails {
    firstName: String!
    lastName: String!
    phone: String!
    email: String!
    type: String = "email"
    postalCode: String!
  }

  
  type Category {
    _identifier: ID!
    identifier: String
    image: String
    video: String
    name: String
    type: String
    description: String

    # children
    categories: [Category]

    categoryids: [LabelValue]
    sortingoptions: [LabelValue]
  }

  # CategoryListOfLists
  type CategoryList {
    # children: CategoryChildren
    categories: [Category]
    type: String
  }

  # CategoryLandingPage

  # type CategoryLandingPage {
  #   categoryBlocks: [CategoryBlock]
  # }

  type CategoryBlock {
    name: String!
    backgroundImage: String
    heroImage: String
    previewImage: String
  }

  type BrandLandingPage {
    banner: String
    backgroundImageUrl: String
    learnMore: String
    sliderLeft: String
    sliderRight: String
    sliderLeftMobile: String
    sliderRightMobile: String
    promoBanner1: String
    promoBanner2: String
    # presumably these are site-specific
    hempTankJade: String
    hempTankStone: String
    hempTankMidnight: String
  }

  
  type ListIds {
    id: String
  }

  type FavoritesItemInfo {
    itemid: String
    flags: [LabelValue]
    list: [ListIds]
    sku: String
  }

  type FavoritesState {
    starttime: String
  }

  type UserInfoData {
    userid: String
    username: String
    type: String
  }

  type FavoritesUserInfo {
    userinfo: [UserInfoData]
  }

  # fragment CartQuantity on CartInfo {
  #   quantity: String
  # }

  type FavoriteCartInfo {
    quantity: String
  }

  type FavoriteProductProperties {
    buyinfo: SkuBuyInfo
    cartinfo: FavoriteCartInfo
    iteminfo: FavoritesItemInfo
    reviewrating: ReviewRating
    state: FavoritesState
    userinfo: FavoritesUserInfo
  }

  type FavoriteProduct {
    identifier: ID!
    image: String
    name: String
    properties: FavoriteProductProperties
  }

  type FavoritesList {
    lists: [FavoriteProduct]
  }

  type FavoritesPropertiesItemInfo {
    flags: [LabelValue]
  }

  type FavoritesCount {
    count: String
  }

  type FavoritesProperties {
    iteminfo: FavoritesPropertiesItemInfo
    state: FavoritesCount
  }

  type Favorites {
    children: FavoritesList
    properties: FavoritesProperties
    type: String
    responseMessage: String
    responseCode: String
  }

  
  type ListItemInfo {
    additionalinfo: [LabelValue]
  }

  type ListProperties {
    iteminfo: ListItemInfo
  }

  type List {
    identifier: ID!
    properties: ListProperties
  }

  type ListResponseChildren {
    lists: [List]
  }

  type ListResponseItemInfo {
    flags: [LabelValue]
  }

  type ListResponseState {
    count: String
  }

  type ListResponseProperties {
    iteminfo: ListResponseItemInfo
    state: ListResponseState
  }

  type ListResponse {
    children: ListResponseChildren
    properties: ListResponseProperties
    type: String
    responseMessage: String
    responseCode: String
  }

  
  type OrderProductCartInfo {
    totaltax: String
    total: String
    discountonlytotal: String
    valueaddedtaxes: [LabelValue]
    shippingmethods: [ShippingMethod]
    surcharges: [TypeValue]
    orderitemid: String
    discounttotal: String
  }

  type OrderProductItemInfo {
    categoryids: [LabelValue]
    cartinfo: CartInfo
    flags: [LabelValue]
    isgiftwrap: String
    description: [Value]
    specifications: [LabelValue]
    psvid: String
    isgiftcard: String
    additionalinfo: [LabelValue]
  }

  type OrderProductState {
    timings: [LabelValue]
    locale: String
    additionalinfo: [LabelValue]
    status: String
  }

  type OrderInfo {
    orderid: String
  }

  type PackageUserInfo {
    userid: String
  }

  type OrderProductProperties {
    buyinfo: CartBuyInfo
    cartinfo: OrderProductCartInfo
    iteminfo: OrderProductItemInfo
    state: OrderProductState
    math: Math
    orderinfo: OrderInfo
    userinfo: PackageUserInfo
  }

  type CategoryIdProperties {
    label: String
    value: String
  }

  type ShippingAddress {
    address1: String
    address2: String
    zipcode: String
    city: String
    state: String
    country: String
    phonenumber: String
    email: String
    lastname: String
    firstname: String
  }

  type OrderProduct {
    identifier: String
    name: String
    image: String
    skuid: String
    price: String
    properties: OrderProductProperties
    quantity: String
    skuinfo: SkuInfo
    category: [LabelValue]
    shippingmethod: String
    shippingaddress: [ShippingAddress]
  }

  type PhoneDetail {
    phonenumber: String
  }

  # @todo this is duplication we should reuse card types same as in state tree models...
  type CardAddressInfo {
    country: String
    firstname: String
    phonedetails: [PhoneDetail]
    city: String
    county: String
    middlename: String
    lastname: String
    addressid: String
    zipcode: String
    addressline3: String
    addressline2: String
    addressline1: String
    state: String
    email: String
  }
  type CardInfo {
    identifier: String
    amount: String
    addressinfo: CardAddressInfo
    credits: String
    type: String
    additionalinfo: [LabelValue]
    points: String
  }

  type CreditCardInfo {
    cards: [CardInfo]
  }

  type CardDetail {
    cardBrand: String
    cardExpirationMonth: String
    cardExpirationYear: String
    cardNumber: String
    cardType: String
  }

  type PaymentCardDetail {
    carddetails: CardDetail
    name: LabelValue
  }

  type OrderPaymentCardDetail {
    amount: String
    additionalinfo: [LabelValue]
  }

  type OrderPaymentProperties {
    creditcardinfo: [CreditCardInfo]
    paymentcardinfo: OrderPaymentCardDetail
  }

  type OrderPayment {
    properties: OrderPaymentProperties
  }

  type OrderListState {
    statuscode: String
    offset: String
    count: String
    status: String
  }

  type OrderMath {
    subTotal: String
    giftSale: String
    tax: String
    shippingCharge: String
    shippingTax: String
    discount: String
    total: String
    grandTotal: String
    couponTotal: String
  }

  type ShippingDetail {
    price: String
    shippingaddress: [ShippingAddress]
    hasShipped: Boolean
  }

  type OrderPackage {
    math: OrderMath
    orderCreatedTime: String
    orderId: String
    orderTotalAmount: String
    orderTotalItems: String
    products: [OrderProduct]
    shipping: [ShippingDetail]
    properties: OrderProductProperties
    status: String
  }

  type OrderDetail {
    packages: [OrderPackage]
    paymentcardinfo: [PaymentCardDetail]
    payments: [OrderPayment]
    state: OrderListState
  }
  type OrderAgainState {
    status: String
  }
  type OrderAgainResponse {
    state: OrderAgainState
  }

  type OrderList {
    orders: [OrderDetail]
    state: OrderListState
  }

  # @alias orderLookupList
  type GuestOrderList {
    orders: [OrderDetail]
    state: OrderListState
  }

  type OrderState {
    statuscode: String
    status: String
  }

  type OrderProperties {
    state: OrderState
  }

  type CancelOrder {
    type: String
    properties: OrderProperties
  }

  type ReturnOrder {
    type: String
    properties: OrderProperties
  }

  
  
  type Sku {
    identifier: ID!
    image: String
    type: String!
    name: String
    properties: SkuProperties
    additional: [LabelValue]
    specifications: [Specifications]
    children: SkuChildren
  }

  type SkuProperties {
    buyinfo: SkuBuyInfo
    iteminfo: SkuItemInfo
    state: SkuState
    skuinfo: SkuInfo
  }

  type SkuBuyInfo implements IBuyInfo {
    pricing: Pricing
    inventorystatus: String
    instock: String
    preorder: String
    preorderdate: String
    deliverydate: String
    availablequantity: String
    availability: [Availability]
    promomessages: [Label]
  }

  type SkuItemInfo {
    flags: [LabelValue]
    additionalimages: [LabelValue]
    additionalinfo: [LabelValue]
    specifications: [LabelValue]
  }

  type SkuState {
    starttime: String
  }

  type SkuInfo {
    color: ImageName
    size1: Name
    style: Name
  }

  type SkuChildren {
    offers: [SkuOffers]
  }

  type SkuOffers {
    name: String
    properties: SkuOfferProperties
  }

  type SkuOfferProperties {
    iteminfo: OfferItemInfo
  }

  type OfferItemInfo {
    description: [LabelValue]
  }


  type ProductChildren {
    skus: [Sku]
    products: [Product]
    relatedproducts: [Product]
    recommentedproducts: [Product]
  }

  type Specifications {
    label: String
    value: String
  }

  type Product {
    identifier: ID!
    image: String
    type: String
    name: String
    children: ProductChildren
    properties: ProductProperties
    additional: [LabelValue]
    specifications: [LabelValue]
  }

  type ProductProperties {
    buyinfo: ProductBuyInfo
    iteminfo: ProductItemInfo
    reviewrating: ReviewRating
    skuprops: SkuProps
    state: State
  }

  type ProductBuyInfo implements IBuyInfo {
    pricing: Pricing
    inventorystatus: String
    instock: String
    preorder: String
    preorderdate: String
    deliverydate: String
    availablequantity: String
    availability: [Availability]
    promomessages: [Label]
  }

  type ProductItemInfo {
    categoryids: [LabelValue]
    flags: [LabelValue]
    videos: [LabelValue]
    additionalimages: [LabelValue]
    description: [LabelValue]
    ismasterproduct: Boolean
    iscollection: Boolean
    isgroupproduct: Boolean
    brand: String
  }

  type ReviewRating {
    reviewcount: String
    recommendedcount: String
    reviews: [CountValue]
    rating: String
    ratingrange: String
  }

  type CountValue {
    count: String
    value: String
  }

  type SkuProps {
    color: [ImageName]
    size1: [Name]
    style: [Name]
  }

  type State {
    starttime: String
    additionalinfo: [LabelValue]
  }

  
  type CreditCardAddressInfo {
    addressid: String
  }

  type CreditCardDetails {
    cardid: String!
    identifier: String!
    addressinfo: [CreditCardAddressInfo]
    cardnumber: String
    cardtype: String
    expirationmonth: String
    expirationyear: String
    isdefault: String
    isvalidated: String
    lastfourdigits: String
    nameoncard: String
    type: String
  }

  type UserCreditCardInfo {
    cards: [CreditCardDetails]
  }

  type PhoneDetails {
    phonenumber: String
  }

  type UserAddressInfo {
    addressid: ID!
    addresstype: String
    isdefaultaddress: String
    firstname: String
    lastname: String
    email: String
    addressline1: String
    addressline2: String
    city: String
    state: String
    county: String
    country: String
    zipcode: String
    additionaldetails: [LabelValue]
    phonedetails: [PhoneDetails]
  }

  type UserIdentityList {
    id: ID!
    partner: String
    name: String
    type: String
    userid: String
    tags: [LabelValue]
  }

  type UserProfileInfo {
    userid: ID
    email: String
    username: String
    firstname: String
    lastname: String
    userphoto: String
    phonenumber: String
    gender: String
    dob: String
    city: String
    state: String
    country: String
    usertimezone: String
    preferences: [LabelValue]
    additionalinfo: [LabelValue]
    list: [UserIdentityList]
    addressinfo: [UserAddressInfo]
  }

  type UserSegmentSecurity {
    usersegment: [String]
    securityanswer: String
    securityquestion: String
  }

  # union UserProfile = UserProfileInfo | UserSegmentSecurity

  type UserState {
    starttime: String
    status: String
  }

  type UserResponseProperties {
    creditcardinfo: UserCreditCardInfo
    state: UserState!
    userinfo: [UserProfileInfo]
  }

  type UserResponse {
    type: String
    properties: UserResponseProperties
    responseMessage: String
    responseCode: String
    cookies: [String]
  }

  type RegistrationState {
    statuscode: String
    starttime: String
    status: String
  }

  type UserInfoProperties {
    userid: String
    # adding username prop to Response
    username: String
  }

  type RegistrationProperties {
    state: RegistrationState
    userinfo: UserInfoProperties
  }

  type RegistrationResponse {
    responseCode: String
    responseMessage: String
    type: String
    properties: RegistrationProperties
    cookies: [String]
  }

  type TwitterAuthTokenResponse {
    type: String
    responseMessage: String
  }
  type UserIdParams {
    userid: String
  }

  type LogOutState {
    status: String
  }

  type ResetPasswordState {
    status: String
  }

  type ResetPasswordProperties {
    state: ResetPasswordState
    userinfo: UserIdParams
  }

  type ResetPasswordResponse {
    type: String
    properties: ResetPasswordProperties
  }

  type LogOutProperties {
    state: LogOutState
    userinfo: UserIdParams
  }

  type LogOut {
    responseCode: String
    responseMessage: String
    properties: LogOutProperties
    type: String
  }

  input UpdateSecurityCustomParams {
    locale: String
  }

  input SecurityVerificationDetails {
    challengeQuestion: String
    challengeAnswer: String
  }

  input SecurityQuestionParams {
    type: String
    verificationDetails: SecurityVerificationDetails
  }

  input UpdateSecurityVerificationDetails {
    userName: String!
  }

  input UpdateSecurityParams {
    verificationDetails: UpdateSecurityVerificationDetails
    addresses: [SecurityQuestionParams]
  }
  type StateProperties {
    statuscode: String!
    starttime: String!
    status: String!
  }

  type SecurityQuestionUserInfoProperties {
    country: String
    userphoto: String
    firstname: String
    preferences: [LabelValue]
    gender: String
    city: String
    phonenumber: String
    userid: ID
    additionalinfo: [LabelValue]
    lastname: String
    dob: String
    state: String
    usertimezone: String
    email: String
    username: String
    securityanswer: String
    securityquestion: String
  }

  type GetSecurityQuestionProperties {
    state: StateProperties
    userinfo: [SecurityQuestionUserInfoProperties]
  }

  type GetSecurityQuestionResponse {
    type: String
    properties: GetSecurityQuestionProperties
  }

  type SecurityQuestionsState {
    status: String
  }

  type UserIdProperty {
    userid: String!
  }

  type SecurityQuestionsProperties {
    state: SecurityQuestionsState
    userinfo: UserIdProperty
  }
  type ResetBySecurityQuestionsResponse {
    type: String
    properties: SecurityQuestionsProperties
  }
  type UpdatePasswordProperties {
    state: StateProperties
    userinfo: UserIdProperty
  }
  type UpdatePasswordResponse {
    type: String
    properties: UpdatePasswordProperties
  }

  type AddCardResponse {
    type: String
    properties: AddPaymentProperties
  }
  type DeletePaymentState {
    status: String
  }
  type DeleteCardResponse {
    type: String
    properties: DeletePaymentProperties
  }
  type ChangeDefaultState {
    status: String
  }
  type ChangeDefaultPaymentProperties {
    state: ChangeDefaultState
  }
  type ChangeDefaultCardResponse {
    type: String
    properties: ChangeDefaultPaymentProperties
  }
  input VerificationDetails {
    # oddly enough, actually the email
    userName: String!
    # user's password
    password: String!
    # new property
    username: String
  }

  input RegisterUserAddressesCustomParam {
    type: [String]
  }

  input RegisterUserAddresses {
    type: String
    value: String
    customParams: RegisterUserAddressesCustomParam
  }

  input RegisterUserCustomParams {
    resetMethod: [String]
    status: [String]
    contactPreferences: [String]
    additionalPreferences: [String]
    promotions: [String]
    preferences: [String]
  }

  input RegisterUserParams {
    verificationDetails: VerificationDetails
    email: String
    phone: String
    dob: String
    gender: String
    firstName: String
    lastName: String
    nickName: String
    city: String
    state: String
    country: String
    postalCode: String
    addresses: [RegisterUserAddresses]
    customParams: RegisterUserCustomParams
  }

  # input RegisterCustomParams {
  #   messageCampaignId: String
  #   validationMethod: String
  #   sendWelcomeEmail: String
  #   cv: String
  #   cid: String
  #   promocode: String
  #   promocampaign: String
  #   skipValidations: String
  #   skipPassword: String
  #   locale: String
  #   channel: String
  # }

  input RegisterUserInput {
    userName: String!
    password: String!
    telephone: String!
    firstName: String!
    lastName: String
  }

  # input UserProfileParams {
  #   enablePaymentRetrival: Boolean
  # }
  # {
  #   customParams: {
  #     enablePaymentRetrival: ['true']
  #   }
  # }
  input UserProfileParams {
    # enablePaymentRetrival: Boolean
    enablePaymentRetrival: [String]
  }

  # input UserLoginParams {
  #   type: String
  #   value: String
  #   partnerId: String
  #   authToken: String
  #   messageCampaignId: String
  #   promocode: String
  #   promocampaign: String
  #   locale: String
  #   channel: String
  # }

  input UserLoginInput {
    userName: String
    password: String
    authToken: String
    provider: String
    # userinfo: VerificationDetails
    # customparams: UserLoginParams
  }

  input AddAddressInput {
    address: AddressParams
    customParams: AddressInputParams
  }

  input AddressInputParams {
    locale: String
    messageCampaignId: String
  }

  input AddressCustomParams {
    validated: [String]
    override: [String]
    default: [String]
  }

  input UpdateSecurityInput {
    userName: String
    challengeQuestion: String
    challengeAnswer: String
  }

  input ResetBySecurityQuestions {
    emailId: String
    challengeQuestion1: String
    challengeAnswer1: String
    # new password
    password: String
  }

  input UpdatePasswordParams {
    oldPassword: String
    newPassword: String
  }

  input UpdateProfileInput {
    firstName: String
    lastName: String
    userId: String
  }

  input AddressesParams {
    type: String
    firstName: String
    lastName: String
    phone: String
    addressLine1: String
    addressLine2: String
    city: String
    country: String
    state: String
    postalCode: String
    customParams: AddressCustomParams
  }

  input AddressParams {
    addresses: [AddressesParams]
  }

  input removeAddressParams {
    addresses: [AddressToDelete]
  }

  input AddressToDelete {
    type: String
    id: String
  }

  input RemoveAddressInput {
    address: removeAddressParams
  }

  input UpdateShippingInput {
    address: UpdateShippingParams
    customParams: AddressInputParams
  }

  input UpdateShippingParams {
    addresses: [UpdateAddressesParams]
  }

  # @todo use extends
  input UpdateAddressesParams {
    id: String
    type: String
    firstName: String
    lastName: String
    phone: String
    addressLine1: String
    addressLine2: String
    city: String
    country: String
    state: String
    postalCode: String
    customParams: AddressCustomParams
  }

  type ShippingAddressResponse {
    responseCode: String
    responseMessage: String
    type: String
    properties: AddressStateProperties
  }

  type AddressStateProperties {
    state: RegistrationState
  }

  input ResetByEmailInput {
    email: String
    messageCampaignId: String
  }

  input Custom {
    locale: String
    channel: String
    linkBAddrToCard: String
    messageCampaignId: String
    userId: String
  }

  input PaymentData {
    cardid: String
    cardnumber: String
    cardtype: String
    expirationmonth: String
    expirationyear: String
    identifier: String
    isdefault: String
    isvalidated: String
    lastfourdigits: String
    nameoncard: String
    type: String
  }

  input PaymentParams {
    customparams: Custom
    payment: PaymentData
  }

  input AddCardInput {
    cardType: String
    cardNumber: String
    expirationmonth: String
    expirationyear: String
    expiryDate: String
    firstName: String
    lastName: String
    makeDefaultCard: String
    securityCode: String
  }

  input DeleteCardInput {
    creditId: String
    email: String
  }

  input ChangeDefaultCardInput {
    creditCardNumber: String
  }

  input ValidateByEmailInput {
    password: String
    resetParam: String
    messageCampaignId: String
  }

  type GetCardsResponse {
    type: String
    status: String
    cards: [CreditCardDetails]
  }

  type GetAddressesResponse {
    type: String
    status: String
    addressinfo: [UserAddressInfo]
  }

  
  type ProductList {
    identifier: ID
    image: String
    name: String
    products: [Product]
    link: String
    categoryIds: [LabelValue]
    productCount: Int
    searchterm: String
    # @todo deprecate productSort/productFilter as these have there own queries
    productSort: SortingType
    productFilter: FacetType
    additional: [LabelValue]
  }

  type Refine {
    productSort: SortingType
    productFilter: FacetType
  }

  type SortingType {
    options: [LabelValue]
    sortedBy: String
  }

  type Facets {
    name: String
    values: [FacetValue]!
  }

  type FacetValue {
    identifier: String
    # navtype: String
    name: String
    count: Int
  }

  type FacetType {
    facets: [Facets]!
    selectedFilters: [LabelValue]!
  }

  # params
  input FacetsInput {
    key: String
    value: [String]
  }

  type TabMetaState {
    sorting: SortingType
    productCount: Int
  }

  type TabMetaProperties {
    state: TabMetaState
  }

  type FeatureTabMeta {
    title: String
    image: String
    viewAll: String
    url: String
    qa: String
  }

  type FeatureTabValues {
    additional: [LabelValue]
    specifications: [LabelValue]
    identifier: String
    image: String
    type: String
    name: String
    properties: ProductProperties
    url: String
    children: ProductChildren
  }

  type FeatureTab {
    title: String
    image: String
    viewAll: String
    url: String
    qa: String
    meta: FeatureTabMeta
    values: [FeatureTabValues]
  }

  type TabbedFeaturedProductList {
    tabs: [FeatureTab]
  }

  input EndpointInput {
    categoryId: String!
    categoryName: String!
    categoryAttribute: String!
  }

  input TabbedFeaturedProductListInput {
    endpoints: [EndpointInput]
  }

  
  type Points {
    adjustedPoints: String
    balancedPoints: String
    date: String
    earnedPoints: String
    redeemedPoints: String
    startPoints: String
    transactionDate: String
  }

  type BuyInfoLoyalty {
    loyaltypoints: String
    points: [NameValue]
  }

  type LoyaltyBuyInfo {
    loyalty: BuyInfoLoyalty
  }

  type LoyaltyItemInfo {
    additionalinfo: [LabelValue]
    flags: [LabelValue]
    itemid: String
  }

  type LoyaltyState {
    additionalinfo: [LabelValue]
    count: String
    expirytime: String
    starttime: String
    status: String
  }

  type LoyaltyCartInfo {
    total: String
  }

  # this should be transformed top level...
  type LoyaltyStoreInfo {
    identifier: String
  }

  type TransactionDetails {
    transactiondetails: [NameValue]
  }

  # we should not need this, it's extra data and we already have user?
  type LoyaltyUserInfo {
    additionalinfo: [LabelValue]
    preferences: [LabelValue]
    startdate: String
    userid: String
  }

  type LoyaltyProperties {
    buyinfo: LoyaltyBuyInfo
    cartInfo: LoyaltyCartInfo
    iteminfo: LoyaltyItemInfo
    state: LoyaltyState
    storeinfo: [LoyaltyStoreInfo]
    transactioninfo: [TransactionDetails]
    userinfo: [LoyaltyUserInfo]
  }

  type LoyaltyPackage {
    # should be ID! ?
    identifier: String
    properties: LoyaltyProperties
  }

  type TransactionList {
    type: String
    count: Int
    transactionList: [Points]
    earnedloyaltypoints: [Points]
    loyaltypackages: [LoyaltyPackage]
  }

  type LoyaltyPoints {
    type: String
    status: String
    count: String
    points: [LabelValue]
    currentpoints: LabelValue
    earnedpoints: LabelValue
    testpoints: String
  }

  type Loyalty {
    transaction: TransactionList
    loyaltyPoints: LoyaltyPoints
  }

  
  type StoreTime {
    opentime: String
    closetime: String
    day: String
    openforbussiness: String
  }
  type StoreList {
    identifier: ID
    country: String
    distance: Float
    city: String
    address1: String
    latitude: Float
    additionalinfo: [LabelValue]
    zipcode: String
    altidentifier: String
    phone: String
    name: String
    state: String
    distanceunit: String
    email: String
    longitude: Float
    workinghours: [StoreTime]
  }

  type StoreLocator {
    type: String
    offset: String
    limit: String
    storeinfo: [StoreList]
  }

  
  type Suggestion {
    parent: String!
    child: String!
  }
  type SuggestionResponse {
    type: String
    suggestions: [Suggestion]
  }

  
  type Studio {
    identifier: ID!
  }
  type HomePageTitleText {
    title: String
    subtitle: String
    text: String
  }
  type HomePageBackground {
    mainBG: String
    bottomBG: String
  }
  type HomePageVideo {
    index: Int
    thumbnailImage: String
    autoplay: Boolean
    loop: Boolean
    controls: Boolean
    logo: String
    title: String
    slogan: String
    shareTitle: String
    videoLength: Float
  }
  type HomePage {
    titleText: HomePageTitleText
    background: HomePageBackground
    videos: [HomePageVideo]
  }

  
  type TokenResponse {
    responseCode: Int
    responseMessage: String
    key: String
    serviceTokens: ServiceTokens
  }

  type ServiceTokens {
    pim: String
  }

  type ServiceToken {
    responseCode: Int
    responseMessage: String
    serviceTokens: ServiceTokens
  }

  
  type ChildrenInfo {
    count: String
  }
  type Reviews {
    identifier: String
    reviewcreated: String
    negativereviewcount: String
    rating: String
    reviewupdated: String
    label: String
    positivereviewcount: String
    userid: String
    ratingrange: String
    isfeatured: String
    reviewcount: String
    isratingsonly: String
    location: String
    value: String
    username: String
  }
  type ProductReviewRating {
    reviewcount: String
    reviews: [Reviews]
  }
  type PrdocutReviewState {
    errormessage: String
    offset: String
    limit: String
    locale: String
    status: String
  }
  type ReviewProperties {
    childreninfo: ChildrenInfo
    reviewrating: ProductReviewRating
    state: PrdocutReviewState
  }
  type ReviewResponse {
    type: String
    properties: ReviewProperties
  }

  type Ratings {
    label: String
    value: String
  }

  type RatingResponse {
    identifier: String
    recommendedcount: String
    ratings: [Ratings]
    rating: String
    count: String
    ratingrange: String
  }

  
  type ResetPasswordBySMSArgs {
    email: String
  }
  type OrderLookupListArgs {
    lastname: String!
    orderNumber: String!
    zipcode: String!
  }
  type OrderListArgs {
    orderid: String!
    customerid: String!
    limit: Int
    offset: Int
    fromdate: String
    todate: String
    status: String
  }
  type ProductListArgs {
    categoryId: String!
    limit: Int
    offset: Int
    sort: String
    selectedFacets: [FacetsInput]
    user: String
  }
  type ProductFilterArgs {
    categoryId: String!
    limit: Int
    offset: Int
    selectedFacets: [FacetsInput]
  }

  type ProductSortArgs {
    categoryId: String!
    limit: Int
    offset: Int
    sort: String
  }
  type ProductRefineArgs {
    categoryId: String!
    limit: Int
    offset: Int
    sort: String
    selectedFacets: [FacetsInput]
  }
  type SearchRefineArgs {
    search: String!
    limit: Int
    offset: Int
    sort: String
    selectedFacets: [FacetsInput]
  }
  type SearchArgs {
    search: String!
    limit: Int
    offset: Int
    sort: String
    selectedFacets: [FacetsInput]
  }
  type OrderAgainArgs {
    orderid: String!
    lastname: String!
    zipcode: String!
  }
  type ReturnOrderArgs {
    IS_INVALID: Boolean!
  }


  type Query {
    profile(enablePaymentRetrival: String): UserResponse
    categoryList(user: String): CategoryList
    categoryLandingPage(categoryId: String!): CategoryBlock
    brandLandingPage: BrandLandingPage
    tabbedFeaturedProductList(
      input: TabbedFeaturedProductListInput
    ): TabbedFeaturedProductList
    homePage: HomePage
    orderLookupList(
      lastname: String!
      orderNumber: String!
      zipcode: String!
    ): GuestOrderList
    orderList(
      orderid: String!
      customerid: String!
      limit: Int
      offset: Int
      fromdate: String
      todate: String
      status: String
    ): OrderList
    orderDetail(orderid: String): OrderDetail
    productDetail(productId: String!): Product
    productList(
      categoryId: String!
      limit: Int = 100
      offset: Int = 0
      sort: String
      selectedFacets: [FacetsInput]
      user: String
    ): ProductList
    productFilter(
      categoryId: String!
      limit: Int = 100
      offset: Int = 0
      selectedFacets: [FacetsInput]
    ): FacetType
    productSort(
      categoryId: String!
      limit: Int = 100
      offset: Int = 0
      sort: String
    ): SortingType
    productRefine(
      categoryId: String!
      limit: Int = 100
      offset: Int = 0
      sort: String
      selectedFacets: [FacetsInput]
    ): Refine
    searchRefine(
      search: String!
      limit: Int
      offset: Int
      sort: String
      selectedFacets: [FacetsInput]
    ): Refine
    search(
      search: String!
      limit: Int
      offset: Int
      sort: String
      selectedFacets: [FacetsInput]
    ): ProductList
    getLists: ListResponse
    favorites(favoriteId: String!): Favorites
    logOut: LogOut
    listItems(listId: String!): Favorites
    cart: Cart
    loyalty: Loyalty
    suggestion(searchTerm: String!): SuggestionResponse
    storeLocator(latitude: Float!, longitude: Float!): StoreLocator
    getKeyToken(alias: String!, requestor: String!): TokenResponse
    getServiceToken: ServiceToken
    productReview(productId: String!): ReviewResponse
    productRating: RatingResponse
    getUserPayments: GetCardsResponse!
    getUserAddresses: GetAddressesResponse!
  }

  type Mutation {
    # temporarily using JSON until types get finalized
    addToBag(input: JSON!): JSON
    updateBag(input: JSON!): JSON
    deleteFromBag(input: JSON!): JSON
    updateShippingMethods(shippingMethod: String!): ShippingMethodResponse!
    setShipping(shippingAddress: PaymentAddress!): SetShippingResponse!
    registerGuest: RegistrationResponse
    registerUser(input: RegisterUserInput!): RegistrationResponse
    login(input: UserLoginInput!): RegistrationResponse
    socialLogin(input: UserLoginInput!): RegistrationResponse
    updateSecurity(input: UpdateSecurityInput!): RegistrationResponse
    createList: ServerResponse!
    createSaveForLater: ServerResponse!
    addItem(skuid: String!, identifier: String!): ServerResponse!
    deleteItem(skuid: String!): ServerResponse!
    cancelOrder(orderId: String!): CancelOrder!
    returnOrder(orderId: String!): ReturnOrder!
    addPromo(promoCode: String!): JSON!
    orderAgain(
      orderid: String!
      lastname: String!
      zipcode: String!
    ): OrderAgainResponse!
    deletePromo(identifier: String!): JSON!
    addPaymentMethod(paymentdetails: PaymentDetails!): AddPaymentResponse!
    deletePaymentMethod(
      paymentdetails: DeletePaymentDetails!
    ): DeletePaymentResponse!
    setGuestDetails(input: GuestProfileAddressDetails!): GuestProfileResponse!
    submitOrder(email: String!): SubmitOrderResponse!
    recalculateOrder(paymentdetails: PaymentDetails!): RecalculateOrderResponse!
    resetByEmail(input: ResetByEmailInput!): ResetPasswordResponse!
    validateByEmail(input: ValidateByEmailInput!): ResetPasswordResponse!
    getSecurityQuestions(emailId: String!): GetSecurityQuestionResponse!
    resetPasswordBySecurityQuestions(
      input: ResetBySecurityQuestions!
    ): ResetBySecurityQuestionsResponse!
    updateProfile(input: UpdateProfileInput!): RegistrationResponse!
    updatePassword(input: UpdatePasswordParams!): UpdatePasswordResponse!
    addAddressToProfile(input: AddAddressInput!): ShippingAddressResponse
    removeAddressFromProfile(
      input: RemoveAddressInput!
    ): ShippingAddressResponse
    updateShippingAddress(input: UpdateShippingInput!): ShippingAddressResponse
    defaultShippingAddress(input: UpdateShippingInput!): ShippingAddressResponse
    resetBySms(email: String!): ResetPasswordResponse!
    twitterAuthToken: TwitterAuthTokenResponse!
    addCard(serialized: AddCardInput!, email: String!): AddCardResponse!
    deleteCard(params: DeleteCardInput!): DeleteCardResponse!
    changeDefaultCard(
      defaultPaymentParams: String!
      messageCampaignId: String!
    ): ChangeDefaultCardResponse!
    estimateShipping(estimateinfo: JSON!): JSON!
  }

  schema {
    query: Query
    mutation: Mutation
  }