kobylynskyi / graphql-java-codegen

Make your GraphQL Java application schema-driven.
https://kobylynskyi.github.io/graphql-java-codegen/
MIT License
269 stars 114 forks source link

[Short Description] generate null interface #757

Closed kulame closed 3 years ago

kulame commented 3 years ago

Issue Description

my graphql is

union Entity = Address | User | Group | ServiceAccount | App | ProductVariant | Product | ProductType | Collection | Category | ProductImage

generate java code

@javax.annotation.processing.Generated(
    value = "com.kobylynskyi.graphql.codegen.GraphQLCodegen",
    date = "2021-08-03T00:19:03+0800"
)
public interface EntityTO {
}

it's a empty interface. and i try to start it by quarkus.

Caused by: graphql.schema.validation.InvalidSchemaException: invalid schema:ation.java:41)
"TranslatableItemTO" must define one or more fields.nContext.perform(AroundInvokeInvocationContext.java:41)
"_EntityTO" must define one or more fields.ntexts.performAroundInvoke(InvocationContexts.java:32)

it can't work

Steps to Reproduce

List in detail the exact steps to reproduce the unexpected behavior.

Expected Result

Explain in detail what behavior you expected to happen.

Actual Result

Explain in detail what behavior actually happened.

Your Environment and Setup


<configuration>
    <outputDir>${project.build.directory}/generated-sources/graphql</outputDir>
    <packageName>io.github.kobylynskyi.graphql.model</packageName>
</configuration>
kobylynskyi commented 3 years ago

@kulame please provide the complete schema so that I can reproduce the issue. Thanks

kulame commented 3 years ago

my schema file.

schema {
  query: Query
  mutation: Mutation
}

type AccountAddressCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  accountErrors: [AccountError!]!
  address: Address
}

type AccountAddressDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  accountErrors: [AccountError!]!
  address: Address
}

type AccountAddressUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  accountErrors: [AccountError!]!
  address: Address
}

type AccountDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  user: User
}

type AccountError {
  field: String
  message: String
  code: AccountErrorCode!
}

enum AccountErrorCode {
  ACTIVATE_OWN_ACCOUNT
  ACTIVATE_SUPERUSER_ACCOUNT
  DUPLICATED_INPUT_ITEM
  DEACTIVATE_OWN_ACCOUNT
  DEACTIVATE_SUPERUSER_ACCOUNT
  DELETE_NON_STAFF_USER
  DELETE_OWN_ACCOUNT
  DELETE_STAFF_ACCOUNT
  DELETE_SUPERUSER_ACCOUNT
  GRAPHQL_ERROR
  INVALID
  INVALID_PASSWORD
  LEFT_NOT_MANAGEABLE_PERMISSION
  INVALID_CREDENTIALS
  NOT_FOUND
  OUT_OF_SCOPE_SERVICE_ACCOUNT
  OUT_OF_SCOPE_USER
  OUT_OF_SCOPE_GROUP
  OUT_OF_SCOPE_PERMISSION
  PASSWORD_ENTIRELY_NUMERIC
  PASSWORD_TOO_COMMON
  PASSWORD_TOO_SHORT
  PASSWORD_TOO_SIMILAR
  REQUIRED
  UNIQUE
  JWT_SIGNATURE_EXPIRED
  JWT_INVALID_TOKEN
  JWT_DECODE_ERROR
  JWT_MISSING_TOKEN
  JWT_INVALID_CSRF_TOKEN
}

input AccountInput {
  firstName: String
  lastName: String
  defaultBillingAddress: AddressInput
  defaultShippingAddress: AddressInput
}

type AccountRegister {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  requiresConfirmation: Boolean
  accountErrors: [AccountError!]!
  user: User
}

input AccountRegisterInput {
  email: String!
  password: String!
  redirectUrl: String
}

type AccountRequestDeletion {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
}

type AccountSetDefaultAddress {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  accountErrors: [AccountError!]!
}

type AccountUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  user: User
}

type AccountUpdateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  user: User
}

type Address implements Node {
  id: ID!
  firstName: String!
  lastName: String!
  companyName: String!
  streetAddress1: String!
  streetAddress2: String!
  city: String!
  cityArea: String!
  postalCode: String!
  country: CountryDisplay!
  countryArea: String!
  phone: String
  isDefaultShippingAddress: Boolean
  isDefaultBillingAddress: Boolean
}

type AddressCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  accountErrors: [AccountError!]!
  address: Address
}

type AddressDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  accountErrors: [AccountError!]!
  address: Address
}

input AddressInput {
  firstName: String
  lastName: String
  companyName: String
  streetAddress1: String
  streetAddress2: String
  city: String
  cityArea: String
  postalCode: String
  country: CountryCode
  countryArea: String
  phone: String
}

type AddressSetDefault {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  accountErrors: [AccountError!]!
}

enum AddressTypeEnum {
  BILLING
  SHIPPING
}

type AddressUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  accountErrors: [AccountError!]!
  address: Address
}

type AddressValidationData {
  countryCode: String
  countryName: String
  addressFormat: String
  addressLatinFormat: String
  allowedFields: [String]
  requiredFields: [String]
  upperFields: [String]
  countryAreaType: String
  countryAreaChoices: [ChoiceValue]
  cityType: String
  cityChoices: [ChoiceValue]
  cityAreaType: String
  cityAreaChoices: [ChoiceValue]
  postalCodeType: String
  postalCodeMatchers: [String]
  postalCodeExamples: [String]
  postalCodePrefix: String
}

type Allocation implements Node {
  id: ID!
  quantity: Int!
  warehouse: Warehouse!
}

type App implements Node & ObjectWithMetadata {
  id: ID!
  name: String
  created: DateTime
  isActive: Boolean
  permissions: [Permission]
  tokens: [AppToken]
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
  type: AppTypeEnum
  webhooks: [Webhook]
  aboutApp: String
  dataPrivacy: String
  dataPrivacyUrl: String
  homepageUrl: String
  supportUrl: String
  configurationUrl: String
  appUrl: String
  version: String
  accessToken: String
}

type AppActivate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  appErrors: [AppError!]!
  app: App
}

type AppCountableConnection {
  pageInfo: PageInfo!
  edges: [AppCountableEdge!]!
  totalCount: Int
}

type AppCountableEdge {
  node: App!
  cursor: String!
}

type AppCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  authToken: String
  appErrors: [AppError!]!
  app: App
}

type AppDeactivate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  appErrors: [AppError!]!
  app: App
}

type AppDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  appErrors: [AppError!]!
  app: App
}

type AppDeleteFailedInstallation {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  appErrors: [AppError!]!
  appInstallation: AppInstallation
}

type AppError {
  field: String
  message: String
  code: AppErrorCode!
  permissions: [PermissionEnum!]
}

enum AppErrorCode {
  FORBIDDEN
  GRAPHQL_ERROR
  INVALID
  INVALID_STATUS
  INVALID_PERMISSION
  INVALID_URL_FORMAT
  INVALID_MANIFEST_FORMAT
  MANIFEST_URL_CANT_CONNECT
  NOT_FOUND
  REQUIRED
  UNIQUE
  OUT_OF_SCOPE_APP
  OUT_OF_SCOPE_PERMISSION
}

type AppFetchManifest {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  manifest: Manifest
  appErrors: [AppError!]!
}

input AppFilterInput {
  search: String
  isActive: Boolean
  type: AppTypeEnum
}

input AppInput {
  name: String
  isActive: Boolean
  permissions: [PermissionEnum]
}

type AppInstall {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  appErrors: [AppError!]!
  appInstallation: AppInstallation
}

input AppInstallInput {
  appName: String
  manifestUrl: String
  activateAfterInstallation: Boolean = true
  permissions: [PermissionEnum]
}

type AppInstallation implements Node & Job {
  appName: String!
  manifestUrl: String!
  id: ID!
  status: JobStatusEnum!
  createdAt: DateTime!
  updatedAt: DateTime!
  message: String
}

type AppRetryInstall {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  appErrors: [AppError!]!
  appInstallation: AppInstallation
}

enum AppSortField {
  NAME
  CREATION_DATE
}

input AppSortingInput {
  direction: OrderDirection!
  field: AppSortField!
}

type AppToken implements Node {
  name: String
  authToken: String
  id: ID!
}

type AppTokenCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  authToken: String
  appErrors: [AppError!]!
  appToken: AppToken
}

type AppTokenDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  appErrors: [AppError!]!
  appToken: AppToken
}

input AppTokenInput {
  name: String
  app: ID!
}

type AppTokenVerify {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  valid: Boolean!
  appErrors: [AppError!]!
}

enum AppTypeEnum {
  LOCAL
  THIRDPARTY
}

type AppUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  appErrors: [AppError!]!
  app: App
}

type AssignNavigation {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  menu: Menu
  menuErrors: [MenuError!]!
}

type Attribute implements Node & ObjectWithMetadata {
  id: ID!
  productTypes(before: String, after: String, first: Int, last: Int): ProductTypeCountableConnection!
  productVariantTypes(before: String, after: String, first: Int, last: Int): ProductTypeCountableConnection!
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
  inputType: AttributeInputTypeEnum
  name: String
  slug: String
  values: [AttributeValue]
  valueRequired: Boolean!
  visibleInStorefront: Boolean!
  filterableInStorefront: Boolean!
  filterableInDashboard: Boolean!
  availableInGrid: Boolean!
  translation(languageCode: LanguageCodeEnum!): AttributeTranslation
  storefrontSearchPosition: Int!
}

type AttributeAssign {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productType: ProductType
  productErrors: [ProductError!]!
}

input AttributeAssignInput {
  id: ID!
  type: AttributeTypeEnum!
}

type AttributeBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  productErrors: [ProductError!]!
}

type AttributeClearMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  attribute: Attribute
}

type AttributeClearPrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  attribute: Attribute
}

type AttributeCountableConnection {
  pageInfo: PageInfo!
  edges: [AttributeCountableEdge!]!
  totalCount: Int
}

type AttributeCountableEdge {
  node: Attribute!
  cursor: String!
}

type AttributeCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  attribute: Attribute
  productErrors: [ProductError!]!
}

input AttributeCreateInput {
  inputType: AttributeInputTypeEnum
  name: String!
  slug: String
  values: [AttributeValueCreateInput]
  valueRequired: Boolean
  isVariantOnly: Boolean
  visibleInStorefront: Boolean
  filterableInStorefront: Boolean
  filterableInDashboard: Boolean
  storefrontSearchPosition: Int
  availableInGrid: Boolean
}

type AttributeDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  attribute: Attribute
}

input AttributeFilterInput {
  valueRequired: Boolean
  isVariantOnly: Boolean
  visibleInStorefront: Boolean
  filterableInStorefront: Boolean
  filterableInDashboard: Boolean
  availableInGrid: Boolean
  search: String
  ids: [ID]
  inCollection: ID
  inCategory: ID
}

input AttributeInput {
  slug: String!
  value: String
  values: [String]
}

enum AttributeInputTypeEnum {
  DROPDOWN
  MULTISELECT
}

type AttributeReorderValues {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  attribute: Attribute
  productErrors: [ProductError!]!
}

enum AttributeSortField {
  NAME
  SLUG
  VALUE_REQUIRED
  IS_VARIANT_ONLY
  VISIBLE_IN_STOREFRONT
  FILTERABLE_IN_STOREFRONT
  FILTERABLE_IN_DASHBOARD
  STOREFRONT_SEARCH_POSITION
  AVAILABLE_IN_GRID
}

input AttributeSortingInput {
  direction: OrderDirection!
  field: AttributeSortField!
}

type AttributeTranslatableContent implements Node {
  id: ID!
  name: String!
  translation(languageCode: LanguageCodeEnum!): AttributeTranslation
  attribute: Attribute
}

type AttributeTranslate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  translationErrors: [TranslationError!]!
  attribute: Attribute
}

type AttributeTranslation implements Node {
  id: ID!
  name: String!
  language: LanguageDisplay!
}

enum AttributeTypeEnum {
  PRODUCT
  VARIANT
}

type AttributeUnassign {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productType: ProductType
  productErrors: [ProductError!]!
}

type AttributeUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  attribute: Attribute
  productErrors: [ProductError!]!
}

input AttributeUpdateInput {
  name: String
  slug: String
  removeValues: [ID]
  addValues: [AttributeValueCreateInput]
  valueRequired: Boolean
  isVariantOnly: Boolean
  visibleInStorefront: Boolean
  filterableInStorefront: Boolean
  filterableInDashboard: Boolean
  storefrontSearchPosition: Int
  availableInGrid: Boolean
}

type AttributeUpdateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  attribute: Attribute
}

type AttributeUpdatePrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  attribute: Attribute
}

type AttributeValue implements Node {
  id: ID!
  name: String
  slug: String
  type: AttributeValueType @deprecated(reason: "Use the `inputType` field to determine the type of attribute's value. This field will be removed after 2020-07-31.")
  translation(languageCode: LanguageCodeEnum!): AttributeValueTranslation
  inputType: AttributeInputTypeEnum
}

type AttributeValueBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  productErrors: [ProductError!]!
}

type AttributeValueCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  attribute: Attribute
  productErrors: [ProductError!]!
  attributeValue: AttributeValue
}

input AttributeValueCreateInput {
  name: String!
}

type AttributeValueDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  attribute: Attribute
  productErrors: [ProductError!]!
  attributeValue: AttributeValue
}

input AttributeValueInput {
  id: ID
  values: [String]!
}

type AttributeValueTranslatableContent implements Node {
  id: ID!
  name: String!
  translation(languageCode: LanguageCodeEnum!): AttributeValueTranslation
  attributeValue: AttributeValue
}

type AttributeValueTranslate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  translationErrors: [TranslationError!]!
  attributeValue: AttributeValue
}

type AttributeValueTranslation implements Node {
  id: ID!
  name: String!
  language: LanguageDisplay!
}

enum AttributeValueType {
  COLOR
  GRADIENT
  URL
  STRING
}

type AttributeValueUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  attribute: Attribute
  productErrors: [ProductError!]!
  attributeValue: AttributeValue
}

type AuthorizationKey {
  name: AuthorizationKeyType!
  key: String!
}

type AuthorizationKeyAdd {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  authorizationKey: AuthorizationKey
  shop: Shop
  shopErrors: [ShopError!]!
}

type AuthorizationKeyDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  authorizationKey: AuthorizationKey
  shop: Shop
  shopErrors: [ShopError!]!
}

input AuthorizationKeyInput {
  key: String!
  password: String!
}

enum AuthorizationKeyType {
  FACEBOOK
  GOOGLE_OAUTH2
}

type BulkProductError {
  field: String
  message: String
  code: ProductErrorCode!
  attributes: [ID!]
  index: Int
  warehouses: [ID!]
}

type BulkStockError {
  field: String
  message: String
  code: ProductErrorCode!
  attributes: [ID!]
  index: Int
}

input CatalogueInput {
  products: [ID]
  categories: [ID]
  collections: [ID]
}

type Category implements Node & ObjectWithMetadata {
  seoTitle: String
  seoDescription: String
  id: ID!
  name: String!
  description: String!
  descriptionJson: JSONString!
  slug: String!
  parent: Category
  level: Int!
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
  ancestors(before: String, after: String, first: Int, last: Int): CategoryCountableConnection
  products(before: String, after: String, first: Int, last: Int): ProductCountableConnection
  url: String @deprecated(reason: "This field will be removed after 2020-07-31.")
  children(before: String, after: String, first: Int, last: Int): CategoryCountableConnection
  backgroundImage(size: Int): Image
  translation(languageCode: LanguageCodeEnum!): CategoryTranslation
}

type CategoryBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  productErrors: [ProductError!]!
}

type CategoryClearMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  category: Category
}

type CategoryClearPrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  category: Category
}

type CategoryCountableConnection {
  pageInfo: PageInfo!
  edges: [CategoryCountableEdge!]!
  totalCount: Int
}

type CategoryCountableEdge {
  node: Category!
  cursor: String!
}

type CategoryCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  category: Category
}

type CategoryDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  category: Category
}

input CategoryFilterInput {
  search: String
  ids: [ID]
}

input CategoryInput {
  description: String
  descriptionJson: JSONString
  name: String
  slug: String
  seo: SeoInput
  backgroundImage: Upload
  backgroundImageAlt: String
}

enum CategorySortField {
  NAME
  PRODUCT_COUNT
  SUBCATEGORY_COUNT
}

input CategorySortingInput {
  direction: OrderDirection!
  field: CategorySortField!
}

type CategoryTranslatableContent implements Node {
  seoTitle: String
  seoDescription: String
  id: ID!
  name: String!
  description: String!
  descriptionJson: JSONString!
  translation(languageCode: LanguageCodeEnum!): CategoryTranslation
  category: Category
}

type CategoryTranslate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  translationErrors: [TranslationError!]!
  category: Category
}

type CategoryTranslation implements Node {
  seoTitle: String
  seoDescription: String
  id: ID!
  name: String!
  description: String!
  descriptionJson: JSONString!
  language: LanguageDisplay!
}

type CategoryUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  category: Category
}

type CategoryUpdateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  category: Category
}

type CategoryUpdatePrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  category: Category
}

type Checkout implements Node & ObjectWithMetadata {
  created: DateTime!
  lastChange: DateTime!
  user: User
  quantity: Int!
  billingAddress: Address
  shippingAddress: Address
  shippingMethod: ShippingMethod
  note: String!
  discount: Money
  discountName: String
  translatedDiscountName: String
  voucherCode: String
  giftCards: [GiftCard]
  id: ID!
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
  availableShippingMethods: [ShippingMethod]!
  availablePaymentGateways: [PaymentGateway!]!
  email: String!
  isShippingRequired: Boolean!
  lines: [CheckoutLine]
  shippingPrice: TaxedMoney
  subtotalPrice: TaxedMoney
  token: UUID!
  totalPrice: TaxedMoney
}

type CheckoutAddPromoCode {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkout: Checkout
  checkoutErrors: [CheckoutError!]!
}

type CheckoutBillingAddressUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkout: Checkout
  checkoutErrors: [CheckoutError!]!
}

type CheckoutClearMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkoutErrors: [CheckoutError!]!
  checkout: Checkout
}

type CheckoutClearPrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkoutErrors: [CheckoutError!]!
  checkout: Checkout
}

type CheckoutComplete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
  confirmationNeeded: Boolean!
  confirmationData: JSONString
  checkoutErrors: [CheckoutError!]!
}

type CheckoutCountableConnection {
  pageInfo: PageInfo!
  edges: [CheckoutCountableEdge!]!
  totalCount: Int
}

type CheckoutCountableEdge {
  node: Checkout!
  cursor: String!
}

type CheckoutCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  created: Boolean
  checkoutErrors: [CheckoutError!]!
  checkout: Checkout
}

input CheckoutCreateInput {
  lines: [CheckoutLineInput]!
  email: String
  shippingAddress: AddressInput
  billingAddress: AddressInput
}

type CheckoutCustomerAttach {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkout: Checkout
  checkoutErrors: [CheckoutError!]!
}

type CheckoutCustomerDetach {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkout: Checkout
  checkoutErrors: [CheckoutError!]!
}

type CheckoutEmailUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkout: Checkout
  checkoutErrors: [CheckoutError!]!
}

type CheckoutError {
  field: String
  message: String
  code: CheckoutErrorCode!
  variants: [ID!]
}

enum CheckoutErrorCode {
  BILLING_ADDRESS_NOT_SET
  CHECKOUT_NOT_FULLY_PAID
  GRAPHQL_ERROR
  PRODUCT_NOT_PUBLISHED
  PRODUCT_UNAVAILABLE_FOR_PURCHASE
  INSUFFICIENT_STOCK
  INVALID
  INVALID_SHIPPING_METHOD
  NOT_FOUND
  PAYMENT_ERROR
  QUANTITY_GREATER_THAN_LIMIT
  REQUIRED
  SHIPPING_ADDRESS_NOT_SET
  SHIPPING_METHOD_NOT_APPLICABLE
  SHIPPING_METHOD_NOT_SET
  SHIPPING_NOT_REQUIRED
  TAX_ERROR
  UNIQUE
  VOUCHER_NOT_APPLICABLE
  ZERO_QUANTITY
}

type CheckoutLine implements Node {
  id: ID!
  variant: ProductVariant!
  quantity: Int!
  totalPrice: TaxedMoney
  requiresShipping: Boolean
}

type CheckoutLineCountableConnection {
  pageInfo: PageInfo!
  edges: [CheckoutLineCountableEdge!]!
  totalCount: Int
}

type CheckoutLineCountableEdge {
  node: CheckoutLine!
  cursor: String!
}

type CheckoutLineDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkout: Checkout
  checkoutErrors: [CheckoutError!]!
}

input CheckoutLineInput {
  quantity: Int!
  variantId: ID!
}

type CheckoutLinesAdd {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkout: Checkout
  checkoutErrors: [CheckoutError!]!
}

type CheckoutLinesUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkout: Checkout
  checkoutErrors: [CheckoutError!]!
}

type CheckoutPaymentCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkout: Checkout
  payment: Payment
  paymentErrors: [PaymentError!]!
}

type CheckoutRemovePromoCode {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkout: Checkout
  checkoutErrors: [CheckoutError!]!
}

type CheckoutShippingAddressUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkout: Checkout
  checkoutErrors: [CheckoutError!]!
}

type CheckoutShippingMethodUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkout: Checkout
  checkoutErrors: [CheckoutError!]!
}

type CheckoutUpdateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkoutErrors: [CheckoutError!]!
  checkout: Checkout
}

type CheckoutUpdatePrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  checkoutErrors: [CheckoutError!]!
  checkout: Checkout
}

type ChoiceValue {
  raw: String
  verbose: String
}

type Collection implements Node & ObjectWithMetadata {
  seoTitle: String
  seoDescription: String
  id: ID!
  name: String!
  description: String!
  descriptionJson: JSONString!
  publicationDate: Date
  slug: String!
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
  products(filter: ProductFilterInput, sortBy: ProductOrder, before: String, after: String, first: Int, last: Int): ProductCountableConnection
  backgroundImage(size: Int): Image
  translation(languageCode: LanguageCodeEnum!): CollectionTranslation
  isPublished: Boolean!
}

type CollectionAddProducts {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  collection: Collection
  productErrors: [ProductError!]!
}

type CollectionBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  productErrors: [ProductError!]!
}

type CollectionBulkPublish {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  productErrors: [ProductError!]!
}

type CollectionClearMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  collection: Collection
}

type CollectionClearPrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  collection: Collection
}

type CollectionCountableConnection {
  pageInfo: PageInfo!
  edges: [CollectionCountableEdge!]!
  totalCount: Int
}

type CollectionCountableEdge {
  node: Collection!
  cursor: String!
}

type CollectionCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  collection: Collection
}

input CollectionCreateInput {
  isPublished: Boolean
  name: String
  slug: String
  description: String
  descriptionJson: JSONString
  backgroundImage: Upload
  backgroundImageAlt: String
  seo: SeoInput
  publicationDate: Date
  products: [ID]
}

type CollectionDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  collection: Collection
}

input CollectionFilterInput {
  published: CollectionPublished
  search: String
  ids: [ID]
}

input CollectionInput {
  isPublished: Boolean
  name: String
  slug: String
  description: String
  descriptionJson: JSONString
  backgroundImage: Upload
  backgroundImageAlt: String
  seo: SeoInput
  publicationDate: Date
}

enum CollectionPublished {
  PUBLISHED
  HIDDEN
}

type CollectionRemoveProducts {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  collection: Collection
  productErrors: [ProductError!]!
}

type CollectionReorderProducts {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  collection: Collection
  productErrors: [ProductError!]!
}

enum CollectionSortField {
  NAME
  AVAILABILITY
  PRODUCT_COUNT
  PUBLICATION_DATE
}

input CollectionSortingInput {
  direction: OrderDirection!
  field: CollectionSortField!
}

type CollectionTranslatableContent implements Node {
  seoTitle: String
  seoDescription: String
  id: ID!
  name: String!
  description: String!
  descriptionJson: JSONString!
  translation(languageCode: LanguageCodeEnum!): CollectionTranslation
  collection: Collection
}

type CollectionTranslate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  translationErrors: [TranslationError!]!
  collection: Collection
}

type CollectionTranslation implements Node {
  seoTitle: String
  seoDescription: String
  id: ID!
  name: String!
  description: String!
  descriptionJson: JSONString!
  language: LanguageDisplay!
}

type CollectionUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  collection: Collection
}

type CollectionUpdateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  collection: Collection
}

type CollectionUpdatePrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  collection: Collection
}

type ConfigurationItem {
  name: String!
  value: String
  type: ConfigurationTypeFieldEnum
  helpText: String
  label: String
}

input ConfigurationItemInput {
  name: String!
  value: String
}

enum ConfigurationTypeFieldEnum {
  STRING
  BOOLEAN
  SECRET
  PASSWORD
}

type ConfirmAccount {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  accountErrors: [AccountError!]!
}

type ConfirmEmailChange {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  accountErrors: [AccountError!]!
}

enum CountryCode {
  AF
  AX
  AL
  DZ
  AS
  AD
  AO
  AI
  AQ
  AG
  AR
  AM
  AW
  AU
  AT
  AZ
  BS
  BH
  BD
  BB
  BY
  BE
  BZ
  BJ
  BM
  BT
  BO
  BQ
  BA
  BW
  BV
  BR
  IO
  BN
  BG
  BF
  BI
  CV
  KH
  CM
  CA
  KY
  CF
  TD
  CL
  CN
  CX
  CC
  CO
  KM
  CG
  CD
  CK
  CR
  CI
  HR
  CU
  CW
  CY
  CZ
  DK
  DJ
  DM
  DO
  EC
  EG
  SV
  GQ
  ER
  EE
  SZ
  ET
  EU
  FK
  FO
  FJ
  FI
  FR
  GF
  PF
  TF
  GA
  GM
  GE
  DE
  GH
  GI
  GR
  GL
  GD
  GP
  GU
  GT
  GG
  GN
  GW
  GY
  HT
  HM
  VA
  HN
  HK
  HU
  IS
  IN
  ID
  IR
  IQ
  IE
  IM
  IL
  IT
  JM
  JP
  JE
  JO
  KZ
  KE
  KI
  KW
  KG
  LA
  LV
  LB
  LS
  LR
  LY
  LI
  LT
  LU
  MO
  MG
  MW
  MY
  MV
  ML
  MT
  MH
  MQ
  MR
  MU
  YT
  MX
  FM
  MD
  MC
  MN
  ME
  MS
  MA
  MZ
  MM
  NA
  NR
  NP
  NL
  NC
  NZ
  NI
  NE
  NG
  NU
  NF
  KP
  MK
  MP
  NO
  OM
  PK
  PW
  PS
  PA
  PG
  PY
  PE
  PH
  PN
  PL
  PT
  PR
  QA
  RE
  RO
  RU
  RW
  BL
  SH
  KN
  LC
  MF
  PM
  VC
  WS
  SM
  ST
  SA
  SN
  RS
  SC
  SL
  SG
  SX
  SK
  SI
  SB
  SO
  ZA
  GS
  KR
  SS
  ES
  LK
  SD
  SR
  SJ
  SE
  CH
  SY
  TW
  TJ
  TZ
  TH
  TL
  TG
  TK
  TO
  TT
  TN
  TR
  TM
  TC
  TV
  UG
  UA
  AE
  GB
  UM
  US
  UY
  UZ
  VU
  VE
  VN
  VG
  VI
  WF
  EH
  YE
  ZM
  ZW
}

type CountryDisplay {
  code: String!
  country: String!
  vat: VAT
}

type CreateToken {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  token: String
  refreshToken: String
  csrfToken: String
  user: User
  accountErrors: [AccountError!]!
}

type CreditCard {
  brand: String!
  firstDigits: String
  lastDigits: String!
  expMonth: Int
  expYear: Int
}

type CustomerBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  accountErrors: [AccountError!]!
}

type CustomerCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  user: User
}

type CustomerDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  user: User
}

type CustomerEvent implements Node {
  id: ID!
  date: DateTime
  type: CustomerEventsEnum
  user: User
  message: String
  count: Int
  order: Order
  orderLine: OrderLine
}

enum CustomerEventsEnum {
  ACCOUNT_CREATED
  PASSWORD_RESET_LINK_SENT
  PASSWORD_RESET
  EMAIL_CHANGED_REQUEST
  PASSWORD_CHANGED
  EMAIL_CHANGED
  PLACED_ORDER
  NOTE_ADDED_TO_ORDER
  DIGITAL_LINK_DOWNLOADED
  CUSTOMER_DELETED
  NAME_ASSIGNED
  EMAIL_ASSIGNED
  NOTE_ADDED
}

input CustomerFilterInput {
  dateJoined: DateRangeInput
  moneySpent: PriceRangeInput
  numberOfOrders: IntRangeInput
  placedOrders: DateRangeInput
  search: String
}

input CustomerInput {
  defaultBillingAddress: AddressInput
  defaultShippingAddress: AddressInput
  firstName: String
  lastName: String
  email: String
  isActive: Boolean
  note: String
}

type CustomerUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  user: User
}

scalar Date

input DateRangeInput {
  gte: Date
  lte: Date
}

scalar DateTime

input DateTimeRangeInput {
  gte: DateTime
  lte: DateTime
}

type DeactivateAllUserTokens {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
}

type DeleteMetadata {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  metadataErrors: [MetadataError!]!
  item: ObjectWithMetadata
}

type DeletePrivateMetadata {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  metadataErrors: [MetadataError!]!
  item: ObjectWithMetadata
}

type DigitalContent implements Node & ObjectWithMetadata {
  useDefaultSettings: Boolean!
  automaticFulfillment: Boolean!
  productVariant: ProductVariant!
  contentFile: String!
  maxDownloads: Int
  urlValidDays: Int
  urls: [DigitalContentUrl]
  id: ID!
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
}

type DigitalContentCountableConnection {
  pageInfo: PageInfo!
  edges: [DigitalContentCountableEdge!]!
  totalCount: Int
}

type DigitalContentCountableEdge {
  node: DigitalContent!
  cursor: String!
}

type DigitalContentCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  variant: ProductVariant
  content: DigitalContent
  productErrors: [ProductError!]!
}

type DigitalContentDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  variant: ProductVariant
  productErrors: [ProductError!]!
}

input DigitalContentInput {
  useDefaultSettings: Boolean!
  maxDownloads: Int
  urlValidDays: Int
  automaticFulfillment: Boolean
}

type DigitalContentUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  variant: ProductVariant
  content: DigitalContent
  productErrors: [ProductError!]!
}

input DigitalContentUploadInput {
  useDefaultSettings: Boolean!
  maxDownloads: Int
  urlValidDays: Int
  automaticFulfillment: Boolean
  contentFile: Upload!
}

type DigitalContentUrl implements Node {
  content: DigitalContent!
  created: DateTime!
  downloadNum: Int!
  id: ID!
  url: String
  token: UUID!
}

type DigitalContentUrlCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  digitalContentUrl: DigitalContentUrl
}

input DigitalContentUrlCreateInput {
  content: ID!
}

type DiscountError {
  field: String
  message: String
  code: DiscountErrorCode!
}

enum DiscountErrorCode {
  ALREADY_EXISTS
  GRAPHQL_ERROR
  INVALID
  NOT_FOUND
  REQUIRED
  UNIQUE
}

enum DiscountStatusEnum {
  ACTIVE
  EXPIRED
  SCHEDULED
}

enum DiscountValueTypeEnum {
  FIXED
  PERCENTAGE
}

type Domain {
  host: String!
  sslEnabled: Boolean!
  url: String!
}

type DraftOrderBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  orderErrors: [OrderError!]!
}

type DraftOrderComplete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
  orderErrors: [OrderError!]!
}

type DraftOrderCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  orderErrors: [OrderError!]!
  order: Order
}

input DraftOrderCreateInput {
  billingAddress: AddressInput
  user: ID
  userEmail: String
  discount: PositiveDecimal
  shippingAddress: AddressInput
  shippingMethod: ID
  voucher: ID
  customerNote: String
  lines: [OrderLineCreateInput]
}

type DraftOrderDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  orderErrors: [OrderError!]!
  order: Order
}

input DraftOrderInput {
  billingAddress: AddressInput
  user: ID
  userEmail: String
  discount: PositiveDecimal
  shippingAddress: AddressInput
  shippingMethod: ID
  voucher: ID
  customerNote: String
}

type DraftOrderLineDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
  orderLine: OrderLine
  orderErrors: [OrderError!]!
}

type DraftOrderLineUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
  orderErrors: [OrderError!]!
  orderLine: OrderLine
}

type DraftOrderLinesBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  orderErrors: [OrderError!]!
}

type DraftOrderLinesCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
  orderLines: [OrderLine!]
  orderErrors: [OrderError!]!
}

type DraftOrderUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  orderErrors: [OrderError!]!
  order: Order
}

type Error {
  field: String
  message: String
}

type ExportError {
  field: String
  message: String
  code: ExportErrorCode!
}

enum ExportErrorCode {
  INVALID
  NOT_FOUND
  REQUIRED
}

type ExportEvent implements Node {
  id: ID!
  date: DateTime!
  type: ExportEventsEnum!
  user: User
  app: App
  message: String!
}

enum ExportEventsEnum {
  EXPORT_PENDING
  EXPORT_SUCCESS
  EXPORT_FAILED
  EXPORT_DELETED
  EXPORTED_FILE_SENT
  EXPORT_FAILED_INFO_SENT
}

type ExportFile implements Node & Job {
  id: ID!
  user: User
  app: App
  status: JobStatusEnum!
  createdAt: DateTime!
  updatedAt: DateTime!
  message: String
  url: String
  events: [ExportEvent!]
}

type ExportFileCountableConnection {
  pageInfo: PageInfo!
  edges: [ExportFileCountableEdge!]!
  totalCount: Int
}

type ExportFileCountableEdge {
  node: ExportFile!
  cursor: String!
}

input ExportFileFilterInput {
  createdAt: DateTimeRangeInput
  updatedAt: DateTimeRangeInput
  status: JobStatusEnum
  user: String
  app: String
}

enum ExportFileSortField {
  STATUS
  CREATED_AT
  UPDATED_AT
}

input ExportFileSortingInput {
  direction: OrderDirection!
  field: ExportFileSortField!
}

input ExportInfoInput {
  attributes: [ID!]
  warehouses: [ID!]
  fields: [ProductFieldEnum!]
}

type ExportProducts {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  exportFile: ExportFile
  exportErrors: [ExportError!]!
}

input ExportProductsInput {
  scope: ExportScope!
  filter: ProductFilterInput
  ids: [ID!]
  exportInfo: ExportInfoInput
  fileType: FileTypesEnum!
}

enum ExportScope {
  ALL
  IDS
  FILTER
}

enum FileTypesEnum {
  CSV
  XLSX
}

type Fulfillment implements Node & ObjectWithMetadata {
  id: ID!
  fulfillmentOrder: Int!
  status: FulfillmentStatus!
  trackingNumber: String!
  created: DateTime!
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
  lines: [FulfillmentLine]
  statusDisplay: String
  warehouse: Warehouse
}

type FulfillmentCancel {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  fulfillment: Fulfillment
  order: Order
  orderErrors: [OrderError!]!
}

input FulfillmentCancelInput {
  warehouseId: ID!
}

type FulfillmentClearMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  fulfillment: Fulfillment
}

type FulfillmentClearPrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  fulfillment: Fulfillment
}

type FulfillmentLine implements Node {
  id: ID!
  quantity: Int!
  orderLine: OrderLine
}

enum FulfillmentStatus {
  FULFILLED
  CANCELED
}

type FulfillmentUpdateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  fulfillment: Fulfillment
}

type FulfillmentUpdatePrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  fulfillment: Fulfillment
}

type FulfillmentUpdateTracking {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  fulfillment: Fulfillment
  order: Order
  orderErrors: [OrderError!]!
}

input FulfillmentUpdateTrackingInput {
  trackingNumber: String
  notifyCustomer: Boolean = false
}

type GatewayConfigLine {
  field: String!
  value: String
}

scalar GenericScalar

type Geolocalization {
  country: CountryDisplay
}

type GiftCard implements Node {
  code: String
  user: User
  created: DateTime!
  startDate: Date!
  endDate: Date
  lastUsedOn: DateTime
  isActive: Boolean!
  initialBalance: Money
  currentBalance: Money
  id: ID!
  displayCode: String
}

type GiftCardActivate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  giftCard: GiftCard
  giftCardErrors: [GiftCardError!]!
}

type GiftCardCountableConnection {
  pageInfo: PageInfo!
  edges: [GiftCardCountableEdge!]!
  totalCount: Int
}

type GiftCardCountableEdge {
  node: GiftCard!
  cursor: String!
}

type GiftCardCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  giftCardErrors: [GiftCardError!]!
  giftCard: GiftCard
}

input GiftCardCreateInput {
  startDate: Date
  endDate: Date
  balance: PositiveDecimal
  userEmail: String
  code: String
}

type GiftCardDeactivate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  giftCard: GiftCard
  giftCardErrors: [GiftCardError!]!
}

type GiftCardError {
  field: String
  message: String
  code: GiftCardErrorCode!
}

enum GiftCardErrorCode {
  ALREADY_EXISTS
  GRAPHQL_ERROR
  INVALID
  NOT_FOUND
  REQUIRED
  UNIQUE
}

type GiftCardUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  giftCardErrors: [GiftCardError!]!
  giftCard: GiftCard
}

input GiftCardUpdateInput {
  startDate: Date
  endDate: Date
  balance: PositiveDecimal
  userEmail: String
}

type Group implements Node {
  id: ID!
  name: String!
  permissions: [Permission]
  users: [User]
  userCanManage: Boolean!
}

type GroupCountableConnection {
  pageInfo: PageInfo!
  edges: [GroupCountableEdge!]!
  totalCount: Int
}

type GroupCountableEdge {
  node: Group!
  cursor: String!
}

type HomepageCollectionUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shop: Shop
  shopErrors: [ShopError!]!
}

type Image {
  url: String!
  alt: String
}

input IntRangeInput {
  gte: Int
  lte: Int
}

type Invoice implements ObjectWithMetadata & Job & Node {
  id: ID!
  metadata: [MetadataItem]!
  status: JobStatusEnum!
  number: String
  externalUrl: String
  privateMetadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
  createdAt: DateTime!
  updatedAt: DateTime!
  message: String
  url: String
}

type InvoiceCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  invoiceErrors: [InvoiceError!]!
  invoice: Invoice
}

input InvoiceCreateInput {
  number: String!
  url: String!
}

type InvoiceDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  invoiceErrors: [InvoiceError!]!
  invoice: Invoice
}

type InvoiceError {
  field: String
  message: String
  code: InvoiceErrorCode!
}

enum InvoiceErrorCode {
  REQUIRED
  NOT_READY
  URL_NOT_SET
  EMAIL_NOT_SET
  NUMBER_NOT_SET
  NOT_FOUND
  INVALID_STATUS
}

type InvoiceRequest {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
  invoiceErrors: [InvoiceError!]!
  invoice: Invoice
}

type InvoiceRequestDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  invoiceErrors: [InvoiceError!]!
  invoice: Invoice
}

type InvoiceSendEmail {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  invoiceErrors: [InvoiceError!]!
  invoice: Invoice
}

type InvoiceUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  invoiceErrors: [InvoiceError!]!
  invoice: Invoice
}

scalar JSONString

interface Job {
  status: JobStatusEnum!
  createdAt: DateTime!
  updatedAt: DateTime!
  message: String
}

enum JobStatusEnum {
  PENDING
  SUCCESS
  FAILED
  DELETED
}

enum LanguageCodeEnum {
  AR
  AZ
  BG
  BN
  CA
  CS
  DA
  DE
  EL
  EN
  ES
  ES_CO
  ET
  FA
  FI
  FR
  HI
  HU
  HY
  ID
  IS
  IT
  JA
  KA
  KM
  KO
  LT
  MN
  MY
  NB
  NL
  PL
  PT
  PT_BR
  RO
  RU
  SK
  SL
  SQ
  SR
  SV
  SW
  TA
  TH
  TR
  UK
  VI
  ZH_HANS
  ZH_HANT
}

type LanguageDisplay {
  code: LanguageCodeEnum!
  language: String!
}

type Manifest {
  identifier: String!
  version: String!
  name: String!
  about: String
  permissions: [Permission]
  appUrl: String
  configurationUrl: String
  tokenTargetUrl: String
  dataPrivacy: String
  dataPrivacyUrl: String
  homepageUrl: String
  supportUrl: String
}

type Margin {
  start: Int
  stop: Int
}

type Menu implements Node {
  id: ID!
  name: String!
  slug: String!
  items: [MenuItem]
}

type MenuBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  menuErrors: [MenuError!]!
}

type MenuCountableConnection {
  pageInfo: PageInfo!
  edges: [MenuCountableEdge!]!
  totalCount: Int
}

type MenuCountableEdge {
  node: Menu!
  cursor: String!
}

type MenuCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  menuErrors: [MenuError!]!
  menu: Menu
}

input MenuCreateInput {
  name: String!
  slug: String
  items: [MenuItemInput]
}

type MenuDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  menuErrors: [MenuError!]!
  menu: Menu
}

type MenuError {
  field: String
  message: String
  code: MenuErrorCode!
}

enum MenuErrorCode {
  CANNOT_ASSIGN_NODE
  GRAPHQL_ERROR
  INVALID
  INVALID_MENU_ITEM
  NO_MENU_ITEM_PROVIDED
  NOT_FOUND
  REQUIRED
  TOO_MANY_MENU_ITEMS
  UNIQUE
}

input MenuFilterInput {
  search: String
  slug: [String]
}

input MenuInput {
  name: String
  slug: String
}

type MenuItem implements Node {
  id: ID!
  name: String!
  menu: Menu!
  parent: MenuItem
  category: Category
  collection: Collection
  page: Page
  level: Int!
  children: [MenuItem]
  url: String
  translation(languageCode: LanguageCodeEnum!): MenuItemTranslation
}

type MenuItemBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  menuErrors: [MenuError!]!
}

type MenuItemCountableConnection {
  pageInfo: PageInfo!
  edges: [MenuItemCountableEdge!]!
  totalCount: Int
}

type MenuItemCountableEdge {
  node: MenuItem!
  cursor: String!
}

type MenuItemCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  menuErrors: [MenuError!]!
  menuItem: MenuItem
}

input MenuItemCreateInput {
  name: String!
  url: String
  category: ID
  collection: ID
  page: ID
  menu: ID!
  parent: ID
}

type MenuItemDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  menuErrors: [MenuError!]!
  menuItem: MenuItem
}

input MenuItemFilterInput {
  search: String
}

input MenuItemInput {
  name: String
  url: String
  category: ID
  collection: ID
  page: ID
}

type MenuItemMove {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  menu: Menu
  menuErrors: [MenuError!]!
}

input MenuItemMoveInput {
  itemId: ID!
  parentId: ID
  sortOrder: Int
}

input MenuItemSortingInput {
  direction: OrderDirection!
  field: MenuItemsSortField!
}

type MenuItemTranslatableContent implements Node {
  id: ID!
  name: String!
  translation(languageCode: LanguageCodeEnum!): MenuItemTranslation
  menuItem: MenuItem
}

type MenuItemTranslate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  translationErrors: [TranslationError!]!
  menuItem: MenuItem
}

type MenuItemTranslation implements Node {
  id: ID!
  name: String!
  language: LanguageDisplay!
}

type MenuItemUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  menuErrors: [MenuError!]!
  menuItem: MenuItem
}

enum MenuItemsSortField {
  NAME
}

enum MenuSortField {
  NAME
  ITEMS_COUNT
}

input MenuSortingInput {
  direction: OrderDirection!
  field: MenuSortField!
}

type MenuUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  menuErrors: [MenuError!]!
  menu: Menu
}

type MetaClientStore {
  name: String!
  metadata: [MetaItem]!
}

input MetaInput {
  namespace: String!
  clientName: String!
  key: String!
  value: String!
}

type MetaItem {
  key: String!
  value: String!
}

input MetaPath {
  namespace: String!
  clientName: String!
  key: String!
}

type MetaStore {
  namespace: String!
  clients: [MetaClientStore]!
}

type MetadataError {
  field: String
  message: String
  code: MetadataErrorCode!
}

enum MetadataErrorCode {
  GRAPHQL_ERROR
  INVALID
  NOT_FOUND
  REQUIRED
}

input MetadataInput {
  key: String!
  value: String!
}

type MetadataItem {
  key: String!
  value: String!
}

type Money {
  currency: String!
  amount: Float!
  localized: String! @deprecated(reason: "Price formatting according to the current locale should be handled by the frontend client. This field will be removed after 2020-07-31.")
}

type MoneyRange {
  start: Money
  stop: Money
}

input MoveProductInput {
  productId: ID!
  sortOrder: Int
}

type Mutation {
  webhookCreate(input: WebhookCreateInput!): WebhookCreate
  webhookDelete(id: ID!): WebhookDelete
  webhookUpdate(id: ID!, input: WebhookUpdateInput!): WebhookUpdate
  createWarehouse(input: WarehouseCreateInput!): WarehouseCreate
  updateWarehouse(id: ID!, input: WarehouseUpdateInput!): WarehouseUpdate
  deleteWarehouse(id: ID!): WarehouseDelete
  assignWarehouseShippingZone(id: ID!, shippingZoneIds: [ID!]!): WarehouseShippingZoneAssign
  unassignWarehouseShippingZone(id: ID!, shippingZoneIds: [ID!]!): WarehouseShippingZoneUnassign
  authorizationKeyAdd(input: AuthorizationKeyInput!, keyType: AuthorizationKeyType!): AuthorizationKeyAdd
  authorizationKeyDelete(keyType: AuthorizationKeyType!): AuthorizationKeyDelete
  staffNotificationRecipientCreate(input: StaffNotificationRecipientInput!): StaffNotificationRecipientCreate
  staffNotificationRecipientUpdate(id: ID!, input: StaffNotificationRecipientInput!): StaffNotificationRecipientUpdate
  staffNotificationRecipientDelete(id: ID!): StaffNotificationRecipientDelete
  homepageCollectionUpdate(collection: ID): HomepageCollectionUpdate
  shopDomainUpdate(input: SiteDomainInput): ShopDomainUpdate
  shopSettingsUpdate(input: ShopSettingsInput!): ShopSettingsUpdate
  shopFetchTaxRates: ShopFetchTaxRates
  shopSettingsTranslate(input: ShopSettingsTranslationInput!, languageCode: LanguageCodeEnum!): ShopSettingsTranslate
  shopAddressUpdate(input: AddressInput): ShopAddressUpdate
  shippingPriceCreate(input: ShippingPriceInput!): ShippingPriceCreate
  shippingPriceDelete(id: ID!): ShippingPriceDelete
  shippingPriceBulkDelete(ids: [ID]!): ShippingPriceBulkDelete
  shippingPriceUpdate(id: ID!, input: ShippingPriceInput!): ShippingPriceUpdate
  shippingPriceTranslate(id: ID!, input: NameTranslationInput!, languageCode: LanguageCodeEnum!): ShippingPriceTranslate
  shippingZoneCreate(input: ShippingZoneCreateInput!): ShippingZoneCreate
  shippingZoneDelete(id: ID!): ShippingZoneDelete
  shippingZoneBulkDelete(ids: [ID]!): ShippingZoneBulkDelete
  shippingZoneUpdate(id: ID!, input: ShippingZoneUpdateInput!): ShippingZoneUpdate
  attributeCreate(input: AttributeCreateInput!): AttributeCreate
  attributeDelete(id: ID!): AttributeDelete
  attributeBulkDelete(ids: [ID]!): AttributeBulkDelete
  attributeAssign(operations: [AttributeAssignInput]!, productTypeId: ID!): AttributeAssign
  attributeUnassign(attributeIds: [ID]!, productTypeId: ID!): AttributeUnassign
  attributeUpdate(id: ID!, input: AttributeUpdateInput!): AttributeUpdate
  attributeTranslate(id: ID!, input: NameTranslationInput!, languageCode: LanguageCodeEnum!): AttributeTranslate
  attributeUpdateMetadata(id: ID!, input: MetaInput!): AttributeUpdateMeta @deprecated(reason: "Use the `updateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  attributeClearMetadata(id: ID!, input: MetaPath!): AttributeClearMeta @deprecated(reason: "Use the `deleteMetadata` mutation instead. This field will be removed after 2020-07-31.")
  attributeUpdatePrivateMetadata(id: ID!, input: MetaInput!): AttributeUpdatePrivateMeta @deprecated(reason: "Use the `updatePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  attributeClearPrivateMetadata(id: ID!, input: MetaPath!): AttributeClearPrivateMeta @deprecated(reason: "Use the `deletePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  attributeValueCreate(attribute: ID!, input: AttributeValueCreateInput!): AttributeValueCreate
  attributeValueDelete(id: ID!): AttributeValueDelete
  attributeValueBulkDelete(ids: [ID]!): AttributeValueBulkDelete
  attributeValueUpdate(id: ID!, input: AttributeValueCreateInput!): AttributeValueUpdate
  attributeValueTranslate(id: ID!, input: NameTranslationInput!, languageCode: LanguageCodeEnum!): AttributeValueTranslate
  attributeReorderValues(attributeId: ID!, moves: [ReorderInput]!): AttributeReorderValues
  categoryCreate(input: CategoryInput!, parent: ID): CategoryCreate
  categoryDelete(id: ID!): CategoryDelete
  categoryBulkDelete(ids: [ID]!): CategoryBulkDelete
  categoryUpdate(id: ID!, input: CategoryInput!): CategoryUpdate
  categoryTranslate(id: ID!, input: TranslationInput!, languageCode: LanguageCodeEnum!): CategoryTranslate
  categoryUpdateMetadata(id: ID!, input: MetaInput!): CategoryUpdateMeta @deprecated(reason: "Use the `updateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  categoryClearMetadata(id: ID!, input: MetaPath!): CategoryClearMeta @deprecated(reason: "Use the `deleteMetadata` mutation instead. This field will be removed after 2020-07-31.")
  categoryUpdatePrivateMetadata(id: ID!, input: MetaInput!): CategoryUpdatePrivateMeta @deprecated(reason: "Use the `updatePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  categoryClearPrivateMetadata(id: ID!, input: MetaPath!): CategoryClearPrivateMeta @deprecated(reason: "Use the `deletePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  collectionAddProducts(collectionId: ID!, products: [ID]!): CollectionAddProducts
  collectionCreate(input: CollectionCreateInput!): CollectionCreate
  collectionDelete(id: ID!): CollectionDelete
  collectionReorderProducts(collectionId: ID!, moves: [MoveProductInput]!): CollectionReorderProducts
  collectionBulkDelete(ids: [ID]!): CollectionBulkDelete
  collectionBulkPublish(ids: [ID]!, isPublished: Boolean!): CollectionBulkPublish
  collectionRemoveProducts(collectionId: ID!, products: [ID]!): CollectionRemoveProducts
  collectionUpdate(id: ID!, input: CollectionInput!): CollectionUpdate
  collectionTranslate(id: ID!, input: TranslationInput!, languageCode: LanguageCodeEnum!): CollectionTranslate
  collectionUpdateMetadata(id: ID!, input: MetaInput!): CollectionUpdateMeta @deprecated(reason: "Use the `updateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  collectionClearMetadata(id: ID!, input: MetaPath!): CollectionClearMeta @deprecated(reason: "Use the `deleteMetadata` mutation instead. This field will be removed after 2020-07-31.")
  collectionUpdatePrivateMetadata(id: ID!, input: MetaInput!): CollectionUpdatePrivateMeta @deprecated(reason: "Use the `updatePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  collectionClearPrivateMetadata(id: ID!, input: MetaPath!): CollectionClearPrivateMeta @deprecated(reason: "Use the `deletePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  productCreate(input: ProductCreateInput!): ProductCreate
  productDelete(id: ID!): ProductDelete
  productBulkDelete(ids: [ID]!): ProductBulkDelete
  productBulkPublish(ids: [ID]!, isPublished: Boolean!): ProductBulkPublish
  productUpdate(id: ID!, input: ProductInput!): ProductUpdate
  productTranslate(id: ID!, input: TranslationInput!, languageCode: LanguageCodeEnum!): ProductTranslate
  productUpdateMetadata(id: ID!, input: MetaInput!): ProductUpdateMeta @deprecated(reason: "Use the `updateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  productClearMetadata(id: ID!, input: MetaPath!): ProductClearMeta @deprecated(reason: "Use the `deleteMetadata` mutation instead. This field will be removed after 2020-07-31.")
  productUpdatePrivateMetadata(id: ID!, input: MetaInput!): ProductUpdatePrivateMeta @deprecated(reason: "Use the `updatePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  productClearPrivateMetadata(id: ID!, input: MetaPath!): ProductClearPrivateMeta @deprecated(reason: "Use the `deletePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  productSetAvailabilityForPurchase(isAvailable: Boolean!, productId: ID!, startDate: Date): ProductSetAvailabilityForPurchase
  productImageCreate(input: ProductImageCreateInput!): ProductImageCreate
  productVariantReorder(moves: [ReorderInput]!, productId: ID!): ProductVariantReorder
  productImageDelete(id: ID!): ProductImageDelete
  productImageBulkDelete(ids: [ID]!): ProductImageBulkDelete
  productImageReorder(imagesIds: [ID]!, productId: ID!): ProductImageReorder
  productImageUpdate(id: ID!, input: ProductImageUpdateInput!): ProductImageUpdate
  productTypeCreate(input: ProductTypeInput!): ProductTypeCreate
  productTypeDelete(id: ID!): ProductTypeDelete
  productTypeBulkDelete(ids: [ID]!): ProductTypeBulkDelete
  productTypeUpdate(id: ID!, input: ProductTypeInput!): ProductTypeUpdate
  productTypeReorderAttributes(moves: [ReorderInput]!, productTypeId: ID!, type: AttributeTypeEnum!): ProductTypeReorderAttributes
  productTypeUpdateMetadata(id: ID!, input: MetaInput!): ProductTypeUpdateMeta @deprecated(reason: "Use the `updateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  productTypeClearMetadata(id: ID!, input: MetaPath!): ProductTypeClearMeta @deprecated(reason: "Use the `deleteMetadata` mutation instead. This field will be removed after 2020-07-31.")
  productTypeUpdatePrivateMetadata(id: ID!, input: MetaInput!): ProductTypeUpdatePrivateMeta @deprecated(reason: "Use the `updatePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  productTypeClearPrivateMetadata(id: ID!, input: MetaPath!): ProductTypeClearPrivateMeta @deprecated(reason: "Use the `deletePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  digitalContentCreate(input: DigitalContentUploadInput!, variantId: ID!): DigitalContentCreate
  digitalContentDelete(variantId: ID!): DigitalContentDelete
  digitalContentUpdate(input: DigitalContentInput!, variantId: ID!): DigitalContentUpdate
  digitalContentUrlCreate(input: DigitalContentUrlCreateInput!): DigitalContentUrlCreate
  productVariantCreate(input: ProductVariantCreateInput!): ProductVariantCreate
  productVariantDelete(id: ID!): ProductVariantDelete
  productVariantBulkCreate(product: ID!, variants: [ProductVariantBulkCreateInput]!): ProductVariantBulkCreate
  productVariantBulkDelete(ids: [ID]!): ProductVariantBulkDelete
  productVariantStocksCreate(stocks: [StockInput!]!, variantId: ID!): ProductVariantStocksCreate
  productVariantStocksDelete(variantId: ID!, warehouseIds: [ID!]): ProductVariantStocksDelete
  productVariantStocksUpdate(stocks: [StockInput!]!, variantId: ID!): ProductVariantStocksUpdate
  productVariantUpdate(id: ID!, input: ProductVariantInput!): ProductVariantUpdate
  productVariantSetDefault(productId: ID!, variantId: ID!): ProductVariantSetDefault
  productVariantTranslate(id: ID!, input: NameTranslationInput!, languageCode: LanguageCodeEnum!): ProductVariantTranslate
  productVariantUpdateMetadata(id: ID!, input: MetaInput!): ProductVariantUpdateMeta @deprecated(reason: "Use the `updateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  productVariantClearMetadata(id: ID!, input: MetaPath!): ProductVariantClearMeta @deprecated(reason: "Use the `deleteMetadata` mutation instead. This field will be removed after 2020-07-31.")
  productVariantUpdatePrivateMetadata(id: ID!, input: MetaInput!): ProductVariantUpdatePrivateMeta @deprecated(reason: "Use the `updatePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  productVariantClearPrivateMetadata(id: ID!, input: MetaPath!): ProductVariantClearPrivateMeta @deprecated(reason: "Use the `deletePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  variantImageAssign(imageId: ID!, variantId: ID!): VariantImageAssign
  variantImageUnassign(imageId: ID!, variantId: ID!): VariantImageUnassign
  paymentCapture(amount: PositiveDecimal, paymentId: ID!): PaymentCapture
  paymentRefund(amount: PositiveDecimal, paymentId: ID!): PaymentRefund
  paymentVoid(paymentId: ID!): PaymentVoid
  pageCreate(input: PageInput!): PageCreate
  pageDelete(id: ID!): PageDelete
  pageBulkDelete(ids: [ID]!): PageBulkDelete
  pageBulkPublish(ids: [ID]!, isPublished: Boolean!): PageBulkPublish
  pageUpdate(id: ID!, input: PageInput!): PageUpdate
  pageTranslate(id: ID!, input: PageTranslationInput!, languageCode: LanguageCodeEnum!): PageTranslate
  draftOrderComplete(id: ID!): DraftOrderComplete
  draftOrderCreate(input: DraftOrderCreateInput!): DraftOrderCreate
  draftOrderDelete(id: ID!): DraftOrderDelete
  draftOrderBulkDelete(ids: [ID]!): DraftOrderBulkDelete
  draftOrderLinesBulkDelete(ids: [ID]!): DraftOrderLinesBulkDelete
  draftOrderLinesCreate(id: ID!, input: [OrderLineCreateInput]!): DraftOrderLinesCreate
  draftOrderLineDelete(id: ID!): DraftOrderLineDelete
  draftOrderLineUpdate(id: ID!, input: OrderLineInput!): DraftOrderLineUpdate
  draftOrderUpdate(id: ID!, input: DraftOrderInput!): DraftOrderUpdate
  orderAddNote(order: ID!, input: OrderAddNoteInput!): OrderAddNote
  orderCancel(id: ID!): OrderCancel
  orderCapture(amount: PositiveDecimal!, id: ID!): OrderCapture
  orderClearPrivateMeta(id: ID!, input: MetaPath!): OrderClearPrivateMeta @deprecated(reason: "Use the `deletePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  orderClearMeta(input: MetaPath!, token: UUID!): OrderClearMeta @deprecated(reason: "Use the `deleteMetadata` mutation instead. This field will be removed after 2020-07-31.")
  orderFulfill(input: OrderFulfillInput!, order: ID): OrderFulfill
  orderFulfillmentCancel(id: ID!, input: FulfillmentCancelInput!): FulfillmentCancel
  orderFulfillmentUpdateTracking(id: ID!, input: FulfillmentUpdateTrackingInput!): FulfillmentUpdateTracking
  orderFulfillmentClearMeta(id: ID!, input: MetaPath!): FulfillmentClearMeta @deprecated(reason: "Use the `deleteMetadata` mutation instead. This field will be removed after 2020-07-31.")
  orderFulfillmentClearPrivateMeta(id: ID!, input: MetaPath!): FulfillmentClearPrivateMeta @deprecated(reason: "Use the `deletePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  orderFulfillmentUpdateMeta(id: ID!, input: MetaInput!): FulfillmentUpdateMeta @deprecated(reason: "Use the `updateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  orderFulfillmentUpdatePrivateMeta(id: ID!, input: MetaInput!): FulfillmentUpdatePrivateMeta @deprecated(reason: "Use the `updatePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  orderMarkAsPaid(id: ID!): OrderMarkAsPaid
  orderRefund(amount: PositiveDecimal!, id: ID!): OrderRefund
  orderUpdate(id: ID!, input: OrderUpdateInput!): OrderUpdate
  orderUpdateMeta(input: MetaInput!, token: UUID!): OrderUpdateMeta @deprecated(reason: "Use the `updateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  orderUpdatePrivateMeta(id: ID!, input: MetaInput!): OrderUpdatePrivateMeta @deprecated(reason: "Use the `updatePrivateMetadata` mutation instead. This field will be removed after 2020-07-31.")
  orderUpdateShipping(order: ID!, input: OrderUpdateShippingInput): OrderUpdateShipping
  orderVoid(id: ID!): OrderVoid
  orderBulkCancel(ids: [ID]!): OrderBulkCancel
  deleteMetadata(id: ID!, keys: [String!]!): DeleteMetadata
  deletePrivateMetadata(id: ID!, keys: [String!]!): DeletePrivateMetadata
  updateMetadata(id: ID!, input: [MetadataInput!]!): UpdateMetadata
  updatePrivateMetadata(id: ID!, input: [MetadataInput!]!): UpdatePrivateMetadata
  assignNavigation(menu: ID, navigationType: NavigationType!): AssignNavigation
  menuCreate(input: MenuCreateInput!): MenuCreate
  menuDelete(id: ID!): MenuDelete
  menuBulkDelete(ids: [ID]!): MenuBulkDelete
  menuUpdate(id: ID!, input: MenuInput!): MenuUpdate
  menuItemCreate(input: MenuItemCreateInput!): MenuItemCreate
  menuItemDelete(id: ID!): MenuItemDelete
  menuItemBulkDelete(ids: [ID]!): MenuItemBulkDelete
  menuItemUpdate(id: ID!, input: MenuItemInput!): MenuItemUpdate
  menuItemTranslate(id: ID!, input: NameTranslationInput!, languageCode: LanguageCodeEnum!): MenuItemTranslate
  menuItemMove(menu: ID!, moves: [MenuItemMoveInput]!): MenuItemMove
  invoiceRequest(number: String, orderId: ID!): InvoiceRequest
  invoiceRequestDelete(id: ID!): InvoiceRequestDelete
  invoiceCreate(input: InvoiceCreateInput!, orderId: ID!): InvoiceCreate
  invoiceDelete(id: ID!): InvoiceDelete
  invoiceUpdate(id: ID!, input: UpdateInvoiceInput!): InvoiceUpdate
  invoiceSendEmail(id: ID!): InvoiceSendEmail
  giftCardActivate(id: ID!): GiftCardActivate
  giftCardCreate(input: GiftCardCreateInput!): GiftCardCreate
  giftCardDeactivate(id: ID!): GiftCardDeactivate
  giftCardUpdate(id: ID!, input: GiftCardUpdateInput!): GiftCardUpdate
  pluginUpdate(id: ID!, input: PluginUpdateInput!): PluginUpdate
  saleCreate(input: SaleInput!): SaleCreate
  saleDelete(id: ID!): SaleDelete
  saleBulkDelete(ids: [ID]!): SaleBulkDelete
  saleUpdate(id: ID!, input: SaleInput!): SaleUpdate
  saleCataloguesAdd(id: ID!, input: CatalogueInput!): SaleAddCatalogues
  saleCataloguesRemove(id: ID!, input: CatalogueInput!): SaleRemoveCatalogues
  saleTranslate(id: ID!, input: NameTranslationInput!, languageCode: LanguageCodeEnum!): SaleTranslate
  voucherCreate(input: VoucherInput!): VoucherCreate
  voucherDelete(id: ID!): VoucherDelete
  voucherBulkDelete(ids: [ID]!): VoucherBulkDelete
  voucherUpdate(id: ID!, input: VoucherInput!): VoucherUpdate
  voucherCataloguesAdd(id: ID!, input: CatalogueInput!): VoucherAddCatalogues
  voucherCataloguesRemove(id: ID!, input: CatalogueInput!): VoucherRemoveCatalogues
  voucherTranslate(id: ID!, input: NameTranslationInput!, languageCode: LanguageCodeEnum!): VoucherTranslate
  exportProducts(input: ExportProductsInput!): ExportProducts
  checkoutAddPromoCode(checkoutId: ID!, promoCode: String!): CheckoutAddPromoCode
  checkoutBillingAddressUpdate(billingAddress: AddressInput!, checkoutId: ID!): CheckoutBillingAddressUpdate
  checkoutComplete(checkoutId: ID!, paymentData: JSONString, redirectUrl: String, storeSource: Boolean = false): CheckoutComplete
  checkoutCreate(input: CheckoutCreateInput!): CheckoutCreate
  checkoutCustomerAttach(checkoutId: ID!, customerId: ID): CheckoutCustomerAttach
  checkoutCustomerDetach(checkoutId: ID!): CheckoutCustomerDetach
  checkoutEmailUpdate(checkoutId: ID, email: String!): CheckoutEmailUpdate
  checkoutLineDelete(checkoutId: ID!, lineId: ID): CheckoutLineDelete
  checkoutLinesAdd(checkoutId: ID!, lines: [CheckoutLineInput]!): CheckoutLinesAdd
  checkoutLinesUpdate(checkoutId: ID!, lines: [CheckoutLineInput]!): CheckoutLinesUpdate
  checkoutRemovePromoCode(checkoutId: ID!, promoCode: String!): CheckoutRemovePromoCode
  checkoutPaymentCreate(checkoutId: ID!, input: PaymentInput!): CheckoutPaymentCreate
  checkoutShippingAddressUpdate(checkoutId: ID!, shippingAddress: AddressInput!): CheckoutShippingAddressUpdate
  checkoutShippingMethodUpdate(checkoutId: ID, shippingMethodId: ID!): CheckoutShippingMethodUpdate
  checkoutUpdateMetadata(id: ID!, input: MetaInput!): CheckoutUpdateMeta @deprecated(reason: "Use the `updateMetadata` mutation. This field will be removed after 2020-07-31.")
  checkoutClearMetadata(id: ID!, input: MetaPath!): CheckoutClearMeta @deprecated(reason: "Use the `deleteMetadata` mutation. This field will be removed after 2020-07-31.")
  checkoutUpdatePrivateMetadata(id: ID!, input: MetaInput!): CheckoutUpdatePrivateMeta @deprecated(reason: "Use the `updatePrivateMetadata` mutation. This field will be removed after 2020-07-31.")
  checkoutClearPrivateMetadata(id: ID!, input: MetaPath!): CheckoutClearPrivateMeta @deprecated(reason: "Use the `deletePrivateMetadata` mutation. This field will be removed after 2020-07-31.")
  appCreate(input: AppInput!): AppCreate
  appUpdate(id: ID!, input: AppInput!): AppUpdate
  appDelete(id: ID!): AppDelete
  appTokenCreate(input: AppTokenInput!): AppTokenCreate
  appTokenDelete(id: ID!): AppTokenDelete
  appTokenVerify(token: String!): AppTokenVerify
  appInstall(input: AppInstallInput!): AppInstall
  appRetryInstall(activateAfterInstallation: Boolean = true, id: ID!): AppRetryInstall
  appDeleteFailedInstallation(id: ID!): AppDeleteFailedInstallation
  appFetchManifest(manifestUrl: String!): AppFetchManifest
  appActivate(id: ID!): AppActivate
  appDeactivate(id: ID!): AppDeactivate
  tokenCreate(email: String!, password: String!): CreateToken
  tokenRefresh(csrfToken: String, refreshToken: String): RefreshToken
  tokenVerify(token: String!): VerifyToken
  tokensDeactivateAll: DeactivateAllUserTokens
  requestPasswordReset(email: String!, redirectUrl: String!): RequestPasswordReset
  confirmAccount(email: String!, token: String!): ConfirmAccount
  setPassword(email: String!, password: String!, token: String!): SetPassword
  passwordChange(newPassword: String!, oldPassword: String!): PasswordChange
  requestEmailChange(newEmail: String!, password: String!, redirectUrl: String!): RequestEmailChange
  confirmEmailChange(token: String!): ConfirmEmailChange
  accountAddressCreate(input: AddressInput!, type: AddressTypeEnum): AccountAddressCreate
  accountAddressUpdate(id: ID!, input: AddressInput!): AccountAddressUpdate
  accountAddressDelete(id: ID!): AccountAddressDelete
  accountSetDefaultAddress(id: ID!, type: AddressTypeEnum!): AccountSetDefaultAddress
  accountRegister(input: AccountRegisterInput!): AccountRegister
  accountUpdate(input: AccountInput!): AccountUpdate
  accountRequestDeletion(redirectUrl: String!): AccountRequestDeletion
  accountDelete(token: String!): AccountDelete
  accountUpdateMeta(input: MetaInput!): AccountUpdateMeta @deprecated(reason: "Use the `updateMetadata` mutation. This field will be removed after 2020-07-31.")
  addressCreate(input: AddressInput!, userId: ID!): AddressCreate
  addressUpdate(id: ID!, input: AddressInput!): AddressUpdate
  addressDelete(id: ID!): AddressDelete
  addressSetDefault(addressId: ID!, type: AddressTypeEnum!, userId: ID!): AddressSetDefault
  customerCreate(input: UserCreateInput!): CustomerCreate
  customerUpdate(id: ID!, input: CustomerInput!): CustomerUpdate
  customerDelete(id: ID!): CustomerDelete
  customerBulkDelete(ids: [ID]!): CustomerBulkDelete
  staffCreate(input: StaffCreateInput!): StaffCreate
  staffUpdate(id: ID!, input: StaffUpdateInput!): StaffUpdate
  staffDelete(id: ID!): StaffDelete
  staffBulkDelete(ids: [ID]!): StaffBulkDelete
  userAvatarUpdate(image: Upload!): UserAvatarUpdate
  userAvatarDelete: UserAvatarDelete
  userBulkSetActive(ids: [ID]!, isActive: Boolean!): UserBulkSetActive
  userUpdateMetadata(id: ID!, input: MetaInput!): UserUpdateMeta @deprecated(reason: "Use the `updateMetadata` mutation. This field will be removed after 2020-07-31.")
  userClearMetadata(id: ID!, input: MetaPath!): UserClearMeta @deprecated(reason: "Use the `deleteMetadata` mutation. This field will be removed after 2020-07-31.")
  userUpdatePrivateMetadata(id: ID!, input: MetaInput!): UserUpdatePrivateMeta @deprecated(reason: "Use the `updatePrivateMetadata` mutation. This field will be removed after 2020-07-31.")
  userClearPrivateMetadata(id: ID!, input: MetaPath!): UserClearPrivateMeta @deprecated(reason: "Use the `deletePrivateMetadata` mutation. This field will be removed after 2020-07-31.")
  serviceAccountCreate(input: ServiceAccountInput!): ServiceAccountCreate @deprecated(reason: "Use the `appCreate` mutation instead. This field will be removed after 2020-07-31.")
  serviceAccountUpdate(id: ID!, input: ServiceAccountInput!): ServiceAccountUpdate @deprecated(reason: "Use the `appUpdate` mutation instead. This field will be removed after 2020-07-31.")
  serviceAccountDelete(id: ID!): ServiceAccountDelete @deprecated(reason: "Use the `appDelete` mutation instead. This field will be removed after 2020-07-31.")
  serviceAccountUpdatePrivateMetadata(id: ID!, input: MetaInput!): ServiceAccountUpdatePrivateMeta @deprecated(reason: "Use the `updatePrivateMetadata` mutation with App instead.This field will be removed after 2020-07-31.")
  serviceAccountClearPrivateMetadata(id: ID!, input: MetaPath!): ServiceAccountClearPrivateMeta @deprecated(reason: "Use the `deletePrivateMetadata` mutation with App instead.This field will be removed after 2020-07-31.")
  serviceAccountTokenCreate(input: ServiceAccountTokenInput!): ServiceAccountTokenCreate @deprecated(reason: "Use the `appTokenCreate` mutation instead. This field will be removed after 2020-07-31.")
  serviceAccountTokenDelete(id: ID!): ServiceAccountTokenDelete @deprecated(reason: "Use the `appTokenDelete` mutation instead. This field will be removed after 2020-07-31.")
  permissionGroupCreate(input: PermissionGroupCreateInput!): PermissionGroupCreate
  permissionGroupUpdate(id: ID!, input: PermissionGroupUpdateInput!): PermissionGroupUpdate
  permissionGroupDelete(id: ID!): PermissionGroupDelete
}

input NameTranslationInput {
  name: String
}

type Navigation {
  main: Menu
  secondary: Menu
}

enum NavigationType {
  MAIN
  SECONDARY
}

interface Node {
  id: ID!
}

interface ObjectWithMetadata {
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
}

type Order implements Node & ObjectWithMetadata {
  id: ID!
  created: DateTime!
  status: OrderStatus!
  user: User
  languageCode: String!
  trackingClientId: String!
  billingAddress: Address
  shippingAddress: Address
  shippingMethod: ShippingMethod
  shippingMethodName: String
  shippingPrice: TaxedMoney
  token: String!
  voucher: Voucher
  giftCards: [GiftCard]
  discount: Money
  discountName: String
  translatedDiscountName: String
  displayGrossPrices: Boolean!
  customerNote: String!
  weight: Weight
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
  fulfillments: [Fulfillment]!
  lines: [OrderLine]!
  actions: [OrderAction]!
  availableShippingMethods: [ShippingMethod]
  invoices: [Invoice]
  number: String
  isPaid: Boolean
  paymentStatus: PaymentChargeStatusEnum
  paymentStatusDisplay: String
  payments: [Payment]
  total: TaxedMoney
  subtotal: TaxedMoney
  statusDisplay: String
  canFinalize: Boolean!
  totalAuthorized: Money
  totalCaptured: Money
  events: [OrderEvent]
  totalBalance: Money!
  userEmail: String
  isShippingRequired: Boolean!
}

enum OrderAction {
  CAPTURE
  MARK_AS_PAID
  REFUND
  VOID
}

type OrderAddNote {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
  event: OrderEvent
  orderErrors: [OrderError!]!
}

input OrderAddNoteInput {
  message: String!
}

type OrderBulkCancel {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  orderErrors: [OrderError!]!
}

type OrderCancel {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
  orderErrors: [OrderError!]!
}

type OrderCapture {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
  orderErrors: [OrderError!]!
}

type OrderClearMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
}

type OrderClearPrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
}

type OrderCountableConnection {
  pageInfo: PageInfo!
  edges: [OrderCountableEdge!]!
  totalCount: Int
}

type OrderCountableEdge {
  node: Order!
  cursor: String!
}

enum OrderDirection {
  ASC
  DESC
}

input OrderDraftFilterInput {
  customer: String
  created: DateRangeInput
  search: String
}

type OrderError {
  field: String
  message: String
  code: OrderErrorCode!
  warehouse: ID
  orderLine: ID
}

enum OrderErrorCode {
  BILLING_ADDRESS_NOT_SET
  CANNOT_CANCEL_FULFILLMENT
  CANNOT_CANCEL_ORDER
  CANNOT_DELETE
  CANNOT_REFUND
  CAPTURE_INACTIVE_PAYMENT
  NOT_EDITABLE
  FULFILL_ORDER_LINE
  GRAPHQL_ERROR
  INVALID
  PRODUCT_NOT_PUBLISHED
  PRODUCT_UNAVAILABLE_FOR_PURCHASE
  NOT_FOUND
  ORDER_NO_SHIPPING_ADDRESS
  PAYMENT_ERROR
  PAYMENT_MISSING
  REQUIRED
  SHIPPING_METHOD_NOT_APPLICABLE
  SHIPPING_METHOD_REQUIRED
  TAX_ERROR
  UNIQUE
  VOID_INACTIVE_PAYMENT
  ZERO_QUANTITY
  INSUFFICIENT_STOCK
  DUPLICATED_INPUT_ITEM
}

type OrderEvent implements Node {
  id: ID!
  date: DateTime
  type: OrderEventsEnum
  user: User
  message: String
  email: String
  emailType: OrderEventsEmailsEnum
  amount: Float
  paymentId: String
  paymentGateway: String
  quantity: Int
  composedId: String
  orderNumber: String
  invoiceNumber: String
  oversoldItems: [String]
  lines: [OrderEventOrderLineObject]
  fulfilledItems: [FulfillmentLine]
  warehouse: Warehouse
}

type OrderEventCountableConnection {
  pageInfo: PageInfo!
  edges: [OrderEventCountableEdge!]!
  totalCount: Int
}

type OrderEventCountableEdge {
  node: OrderEvent!
  cursor: String!
}

type OrderEventOrderLineObject {
  quantity: Int
  orderLine: OrderLine
  itemName: String
}

enum OrderEventsEmailsEnum {
  PAYMENT_CONFIRMATION
  SHIPPING_CONFIRMATION
  TRACKING_UPDATED
  ORDER_CONFIRMATION
  ORDER_CANCEL
  ORDER_REFUND
  FULFILLMENT_CONFIRMATION
  DIGITAL_LINKS
}

enum OrderEventsEnum {
  DRAFT_CREATED
  DRAFT_ADDED_PRODUCTS
  DRAFT_REMOVED_PRODUCTS
  PLACED
  PLACED_FROM_DRAFT
  OVERSOLD_ITEMS
  CANCELED
  ORDER_MARKED_AS_PAID
  ORDER_FULLY_PAID
  UPDATED_ADDRESS
  EMAIL_SENT
  PAYMENT_AUTHORIZED
  PAYMENT_CAPTURED
  EXTERNAL_SERVICE_NOTIFICATION
  PAYMENT_REFUNDED
  PAYMENT_VOIDED
  PAYMENT_FAILED
  INVOICE_REQUESTED
  INVOICE_GENERATED
  INVOICE_UPDATED
  INVOICE_SENT
  FULFILLMENT_CANCELED
  FULFILLMENT_RESTOCKED_ITEMS
  FULFILLMENT_FULFILLED_ITEMS
  TRACKING_UPDATED
  NOTE_ADDED
  OTHER
}

input OrderFilterInput {
  paymentStatus: [PaymentChargeStatusEnum]
  status: [OrderStatusFilter]
  customer: String
  created: DateRangeInput
  search: String
}

type OrderFulfill {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  fulfillments: [Fulfillment]
  order: Order
  orderErrors: [OrderError!]!
}

input OrderFulfillInput {
  lines: [OrderFulfillLineInput!]!
  notifyCustomer: Boolean
}

input OrderFulfillLineInput {
  orderLineId: ID
  stocks: [OrderFulfillStockInput!]!
}

input OrderFulfillStockInput {
  quantity: Int!
  warehouse: ID!
}

type OrderLine implements Node {
  id: ID!
  productName: String!
  variantName: String!
  productSku: String!
  isShippingRequired: Boolean!
  quantity: Int!
  quantityFulfilled: Int!
  taxRate: Float!
  digitalContentUrl: DigitalContentUrl
  thumbnail(size: Int): Image
  unitPrice: TaxedMoney
  totalPrice: TaxedMoney
  variant: ProductVariant
  translatedProductName: String!
  translatedVariantName: String!
  allocations: [Allocation!]
}

input OrderLineCreateInput {
  quantity: Int!
  variantId: ID!
}

input OrderLineInput {
  quantity: Int!
}

type OrderMarkAsPaid {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
  orderErrors: [OrderError!]!
}

type OrderRefund {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
  orderErrors: [OrderError!]!
}

enum OrderSortField {
  NUMBER
  CREATION_DATE
  CUSTOMER
  PAYMENT
  FULFILLMENT_STATUS
  TOTAL
}

input OrderSortingInput {
  direction: OrderDirection!
  field: OrderSortField!
}

enum OrderStatus {
  DRAFT
  UNFULFILLED
  PARTIALLY_FULFILLED
  FULFILLED
  CANCELED
}

enum OrderStatusFilter {
  READY_TO_FULFILL
  READY_TO_CAPTURE
  UNFULFILLED
  PARTIALLY_FULFILLED
  FULFILLED
  CANCELED
}

type OrderUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  orderErrors: [OrderError!]!
  order: Order
}

input OrderUpdateInput {
  billingAddress: AddressInput
  userEmail: String
  shippingAddress: AddressInput
}

type OrderUpdateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
}

type OrderUpdatePrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
}

type OrderUpdateShipping {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
  orderErrors: [OrderError!]!
}

input OrderUpdateShippingInput {
  shippingMethod: ID
}

type OrderVoid {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  order: Order
  orderErrors: [OrderError!]!
}

type Page implements Node & ObjectWithMetadata {
  seoTitle: String
  seoDescription: String
  id: ID!
  title: String!
  content: String!
  contentJson: JSONString!
  publicationDate: Date
  slug: String!
  created: DateTime!
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
  translation(languageCode: LanguageCodeEnum!): PageTranslation
  isPublished: Boolean!
}

type PageBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  pageErrors: [PageError!]!
}

type PageBulkPublish {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  pageErrors: [PageError!]!
}

type PageCountableConnection {
  pageInfo: PageInfo!
  edges: [PageCountableEdge!]!
  totalCount: Int
}

type PageCountableEdge {
  node: Page!
  cursor: String!
}

type PageCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  pageErrors: [PageError!]!
  page: Page
}

type PageDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  pageErrors: [PageError!]!
  page: Page
}

type PageError {
  field: String
  message: String
  code: PageErrorCode!
}

enum PageErrorCode {
  GRAPHQL_ERROR
  INVALID
  NOT_FOUND
  REQUIRED
  UNIQUE
}

input PageFilterInput {
  search: String
}

type PageInfo {
  hasNextPage: Boolean!
  hasPreviousPage: Boolean!
  startCursor: String
  endCursor: String
}

input PageInput {
  slug: String
  title: String
  content: String
  contentJson: JSONString
  isPublished: Boolean
  publicationDate: String
  seo: SeoInput
}

enum PageSortField {
  TITLE
  SLUG
  VISIBILITY
  CREATION_DATE
  PUBLICATION_DATE
}

input PageSortingInput {
  direction: OrderDirection!
  field: PageSortField!
}

type PageTranslatableContent implements Node {
  seoTitle: String
  seoDescription: String
  id: ID!
  title: String!
  content: String!
  contentJson: JSONString!
  translation(languageCode: LanguageCodeEnum!): PageTranslation
  page: Page
}

type PageTranslate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  translationErrors: [TranslationError!]!
  page: PageTranslatableContent
}

type PageTranslation implements Node {
  seoTitle: String
  seoDescription: String
  id: ID!
  title: String!
  content: String!
  contentJson: JSONString!
  language: LanguageDisplay!
}

input PageTranslationInput {
  seoTitle: String
  seoDescription: String
  title: String
  content: String
  contentJson: JSONString
}

type PageUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  pageErrors: [PageError!]!
  page: Page
}

type PasswordChange {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  accountErrors: [AccountError!]!
}

type Payment implements Node {
  id: ID!
  gateway: String!
  isActive: Boolean!
  created: DateTime!
  modified: DateTime!
  token: String!
  checkout: Checkout
  order: Order
  customerIpAddress: String
  chargeStatus: PaymentChargeStatusEnum!
  actions: [OrderAction]!
  total: Money
  capturedAmount: Money
  transactions: [Transaction]
  availableCaptureAmount: Money
  availableRefundAmount: Money
  creditCard: CreditCard
}

type PaymentCapture {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  payment: Payment
  paymentErrors: [PaymentError!]!
}

enum PaymentChargeStatusEnum {
  NOT_CHARGED
  PENDING
  PARTIALLY_CHARGED
  FULLY_CHARGED
  PARTIALLY_REFUNDED
  FULLY_REFUNDED
  REFUSED
  CANCELLED
}

type PaymentCountableConnection {
  pageInfo: PageInfo!
  edges: [PaymentCountableEdge!]!
  totalCount: Int
}

type PaymentCountableEdge {
  node: Payment!
  cursor: String!
}

type PaymentError {
  field: String
  message: String
  code: PaymentErrorCode!
}

enum PaymentErrorCode {
  BILLING_ADDRESS_NOT_SET
  GRAPHQL_ERROR
  INVALID
  NOT_FOUND
  REQUIRED
  UNIQUE
  PARTIAL_PAYMENT_NOT_ALLOWED
  SHIPPING_ADDRESS_NOT_SET
  INVALID_SHIPPING_METHOD
  SHIPPING_METHOD_NOT_SET
  PAYMENT_ERROR
  NOT_SUPPORTED_GATEWAY
}

type PaymentGateway {
  name: String!
  id: ID!
  config: [GatewayConfigLine!]!
  currencies: [String]!
}

input PaymentInput {
  gateway: String!
  token: String
  amount: PositiveDecimal
  billingAddress: AddressInput
  returnUrl: String
}

type PaymentRefund {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  payment: Payment
  paymentErrors: [PaymentError!]!
}

type PaymentSource {
  gateway: String!
  creditCardInfo: CreditCard
}

type PaymentVoid {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  payment: Payment
  paymentErrors: [PaymentError!]!
}

type Permission {
  code: PermissionEnum!
  name: String!
}

enum PermissionEnum {
  MANAGE_USERS
  MANAGE_STAFF
  MANAGE_SERVICE_ACCOUNTS
  MANAGE_APPS
  MANAGE_DISCOUNTS
  MANAGE_PLUGINS
  MANAGE_GIFT_CARD
  MANAGE_MENUS
  MANAGE_ORDERS
  MANAGE_PAGES
  MANAGE_PRODUCTS
  MANAGE_PRODUCT_TYPES_AND_ATTRIBUTES
  MANAGE_SHIPPING
  MANAGE_SETTINGS
  MANAGE_TRANSLATIONS
  MANAGE_CHECKOUTS
}

type PermissionGroupCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  permissionGroupErrors: [PermissionGroupError!]!
  group: Group
}

input PermissionGroupCreateInput {
  addPermissions: [PermissionEnum!]
  addUsers: [ID!]
  name: String!
}

type PermissionGroupDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  permissionGroupErrors: [PermissionGroupError!]!
  group: Group
}

type PermissionGroupError {
  field: String
  message: String
  code: PermissionGroupErrorCode!
  permissions: [PermissionEnum!]
  users: [ID!]
}

enum PermissionGroupErrorCode {
  ASSIGN_NON_STAFF_MEMBER
  DUPLICATED_INPUT_ITEM
  CANNOT_REMOVE_FROM_LAST_GROUP
  LEFT_NOT_MANAGEABLE_PERMISSION
  OUT_OF_SCOPE_PERMISSION
  OUT_OF_SCOPE_USER
  REQUIRED
  UNIQUE
}

input PermissionGroupFilterInput {
  search: String
}

enum PermissionGroupSortField {
  NAME
}

input PermissionGroupSortingInput {
  direction: OrderDirection!
  field: PermissionGroupSortField!
}

type PermissionGroupUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  permissionGroupErrors: [PermissionGroupError!]!
  group: Group
}

input PermissionGroupUpdateInput {
  addPermissions: [PermissionEnum!]
  addUsers: [ID!]
  name: String
  removePermissions: [PermissionEnum!]
  removeUsers: [ID!]
}

type Plugin implements Node {
  id: ID!
  name: String!
  description: String!
  active: Boolean!
  configuration: [ConfigurationItem]
}

type PluginCountableConnection {
  pageInfo: PageInfo!
  edges: [PluginCountableEdge!]!
  totalCount: Int
}

type PluginCountableEdge {
  node: Plugin!
  cursor: String!
}

type PluginError {
  field: String
  message: String
  code: PluginErrorCode!
}

enum PluginErrorCode {
  GRAPHQL_ERROR
  INVALID
  PLUGIN_MISCONFIGURED
  NOT_FOUND
  REQUIRED
  UNIQUE
}

input PluginFilterInput {
  active: Boolean
  search: String
}

enum PluginSortField {
  NAME
  IS_ACTIVE
}

input PluginSortingInput {
  direction: OrderDirection!
  field: PluginSortField!
}

type PluginUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  plugin: Plugin
  pluginsErrors: [PluginError!]!
}

input PluginUpdateInput {
  active: Boolean
  configuration: [ConfigurationItemInput]
}

scalar PositiveDecimal

input PriceRangeInput {
  gte: Float
  lte: Float
}

type Product implements Node & ObjectWithMetadata {
  id: ID!
  seoTitle: String
  seoDescription: String
  name: String!
  description: String!
  descriptionJson: JSONString!
  publicationDate: Date
  productType: ProductType!
  slug: String!
  category: Category
  updatedAt: DateTime
  chargeTaxes: Boolean!
  weight: Weight
  availableForPurchase: Date
  visibleInListings: Boolean!
  defaultVariant: ProductVariant
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
  url: String! @deprecated(reason: "This field will be removed after 2020-07-31.")
  thumbnail(size: Int): Image
  pricing: ProductPricingInfo
  isAvailable: Boolean
  minimalVariantPrice: Money
  taxType: TaxType
  attributes: [SelectedAttribute!]!
  purchaseCost: MoneyRange
  margin: Margin
  imageById(id: ID): ProductImage
  variants: [ProductVariant]
  images: [ProductImage]
  collections: [Collection]
  translation(languageCode: LanguageCodeEnum!): ProductTranslation
  isAvailableForPurchase: Boolean
  isPublished: Boolean!
}

type ProductBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  productErrors: [ProductError!]!
}

type ProductBulkPublish {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  productErrors: [ProductError!]!
}

type ProductClearMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  product: Product
}

type ProductClearPrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  product: Product
}

type ProductCountableConnection {
  pageInfo: PageInfo!
  edges: [ProductCountableEdge!]!
  totalCount: Int
}

type ProductCountableEdge {
  node: Product!
  cursor: String!
}

type ProductCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  product: Product
}

input ProductCreateInput {
  attributes: [AttributeValueInput]
  publicationDate: Date
  category: ID
  chargeTaxes: Boolean
  collections: [ID]
  description: String
  descriptionJson: JSONString
  isPublished: Boolean
  name: String
  slug: String
  taxCode: String
  seo: SeoInput
  weight: WeightScalar
  sku: String
  trackInventory: Boolean
  basePrice: PositiveDecimal
  visibleInListings: Boolean
  productType: ID!
  stocks: [StockInput!]
}

type ProductDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  product: Product
}

type ProductError {
  field: String
  message: String
  code: ProductErrorCode!
  attributes: [ID!]
}

enum ProductErrorCode {
  ALREADY_EXISTS
  ATTRIBUTE_ALREADY_ASSIGNED
  ATTRIBUTE_CANNOT_BE_ASSIGNED
  ATTRIBUTE_VARIANTS_DISABLED
  DUPLICATED_INPUT_ITEM
  GRAPHQL_ERROR
  INVALID
  NOT_PRODUCTS_IMAGE
  NOT_PRODUCTS_VARIANT
  NOT_FOUND
  REQUIRED
  UNIQUE
  VARIANT_NO_DIGITAL_CONTENT
}

enum ProductFieldEnum {
  NAME
  DESCRIPTION
  PRODUCT_TYPE
  CATEGORY
  VISIBLE
  AVAILABLE_FOR_PURCHASE
  SEARCHABLE
  PRODUCT_WEIGHT
  COLLECTIONS
  CHARGE_TAXES
  PRODUCT_IMAGES
  VARIANT_SKU
  VARIANT_PRICE
  COST_PRICE
  VARIANT_WEIGHT
  VARIANT_IMAGES
}

input ProductFilterInput {
  isPublished: Boolean
  collections: [ID]
  categories: [ID]
  hasCategory: Boolean
  attributes: [AttributeInput]
  stockAvailability: StockAvailability
  productType: ID
  stocks: ProductStockFilterInput
  search: String
  price: PriceRangeInput
  minimalPrice: PriceRangeInput
  productTypes: [ID]
  ids: [ID]
}

type ProductImage implements Node {
  id: ID!
  sortOrder: Int
  alt: String!
  url(size: Int): String!
}

type ProductImageBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  productErrors: [ProductError!]!
}

type ProductImageCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  product: Product
  image: ProductImage
  productErrors: [ProductError!]!
}

input ProductImageCreateInput {
  alt: String
  image: Upload!
  product: ID!
}

type ProductImageDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  product: Product
  image: ProductImage
  productErrors: [ProductError!]!
}

type ProductImageReorder {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  product: Product
  images: [ProductImage]
  productErrors: [ProductError!]!
}

type ProductImageUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  product: Product
  image: ProductImage
  productErrors: [ProductError!]!
}

input ProductImageUpdateInput {
  alt: String
}

input ProductInput {
  attributes: [AttributeValueInput]
  publicationDate: Date
  category: ID
  chargeTaxes: Boolean
  collections: [ID]
  description: String
  descriptionJson: JSONString
  isPublished: Boolean
  name: String
  slug: String
  taxCode: String
  seo: SeoInput
  weight: WeightScalar
  sku: String
  trackInventory: Boolean
  basePrice: PositiveDecimal
  visibleInListings: Boolean
}

input ProductOrder {
  direction: OrderDirection!
  attributeId: ID
  field: ProductOrderField
}

enum ProductOrderField {
  NAME
  PRICE
  MINIMAL_PRICE
  DATE
  TYPE
  PUBLISHED
  PUBLICATION_DATE
}

type ProductPricingInfo {
  onSale: Boolean
  discount: TaxedMoney
  discountLocalCurrency: TaxedMoney
  priceRange: TaxedMoneyRange
  priceRangeUndiscounted: TaxedMoneyRange
  priceRangeLocalCurrency: TaxedMoneyRange
}

type ProductSetAvailabilityForPurchase {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  product: Product
  productErrors: [ProductError!]!
}

input ProductStockFilterInput {
  warehouseIds: [ID!]
  quantity: IntRangeInput
}

type ProductTranslatableContent implements Node {
  id: ID!
  seoTitle: String
  seoDescription: String
  name: String!
  description: String!
  descriptionJson: JSONString!
  translation(languageCode: LanguageCodeEnum!): ProductTranslation
  product: Product
}

type ProductTranslate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  translationErrors: [TranslationError!]!
  product: Product
}

type ProductTranslation implements Node {
  id: ID!
  seoTitle: String
  seoDescription: String
  name: String!
  description: String!
  descriptionJson: JSONString!
  language: LanguageDisplay!
}

type ProductType implements Node & ObjectWithMetadata {
  id: ID!
  name: String!
  slug: String!
  hasVariants: Boolean!
  isShippingRequired: Boolean!
  isDigital: Boolean!
  weight: Weight
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
  products(before: String, after: String, first: Int, last: Int): ProductCountableConnection
  taxRate: TaxRateType
  taxType: TaxType
  variantAttributes: [Attribute]
  productAttributes: [Attribute]
  availableAttributes(filter: AttributeFilterInput, before: String, after: String, first: Int, last: Int): AttributeCountableConnection
}

type ProductTypeBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  productErrors: [ProductError!]!
}

type ProductTypeClearMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  productType: ProductType
}

type ProductTypeClearPrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  productType: ProductType
}

enum ProductTypeConfigurable {
  CONFIGURABLE
  SIMPLE
}

type ProductTypeCountableConnection {
  pageInfo: PageInfo!
  edges: [ProductTypeCountableEdge!]!
  totalCount: Int
}

type ProductTypeCountableEdge {
  node: ProductType!
  cursor: String!
}

type ProductTypeCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  productType: ProductType
}

type ProductTypeDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  productType: ProductType
}

enum ProductTypeEnum {
  DIGITAL
  SHIPPABLE
}

input ProductTypeFilterInput {
  search: String
  configurable: ProductTypeConfigurable
  productType: ProductTypeEnum
  ids: [ID]
}

input ProductTypeInput {
  name: String
  slug: String
  hasVariants: Boolean
  productAttributes: [ID]
  variantAttributes: [ID]
  isShippingRequired: Boolean
  isDigital: Boolean
  weight: WeightScalar
  taxCode: String
}

type ProductTypeReorderAttributes {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productType: ProductType
  productErrors: [ProductError!]!
}

enum ProductTypeSortField {
  NAME
  DIGITAL
  SHIPPING_REQUIRED
}

input ProductTypeSortingInput {
  direction: OrderDirection!
  field: ProductTypeSortField!
}

type ProductTypeUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  productType: ProductType
}

type ProductTypeUpdateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  productType: ProductType
}

type ProductTypeUpdatePrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  productType: ProductType
}

type ProductUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  product: Product
}

type ProductUpdateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  product: Product
}

type ProductUpdatePrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  product: Product
}

type ProductVariant implements Node & ObjectWithMetadata {
  id: ID!
  name: String!
  sku: String!
  product: Product!
  trackInventory: Boolean!
  weight: Weight
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
  quantity: Int! @deprecated(reason: "Use the stock field instead. This field will be removed after 2020-07-31.")
  quantityAllocated: Int @deprecated(reason: "Use the stock field instead. This field will be removed after 2020-07-31.")
  stockQuantity: Int! @deprecated(reason: "Use the quantityAvailable field instead. This field will be removed after 2020-07-31.")
  price: Money
  pricing: VariantPricingInfo
  isAvailable: Boolean @deprecated(reason: "Use the stock field instead. This field will be removed after 2020-07-31.")
  attributes: [SelectedAttribute!]!
  costPrice: Money
  margin: Int
  quantityOrdered: Int
  revenue(period: ReportingPeriod): TaxedMoney
  images: [ProductImage]
  translation(languageCode: LanguageCodeEnum!): ProductVariantTranslation
  digitalContent: DigitalContent
  stocks(countryCode: CountryCode): [Stock]
  quantityAvailable(countryCode: CountryCode): Int!
}

type ProductVariantBulkCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  productVariants: [ProductVariant!]!
  bulkProductErrors: [BulkProductError!]!
}

input ProductVariantBulkCreateInput {
  attributes: [AttributeValueInput]!
  costPrice: PositiveDecimal
  price: PositiveDecimal
  sku: String!
  trackInventory: Boolean
  weight: WeightScalar
  stocks: [StockInput!]
}

type ProductVariantBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  productErrors: [ProductError!]!
}

type ProductVariantClearMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  productVariant: ProductVariant
}

type ProductVariantClearPrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  productVariant: ProductVariant
}

type ProductVariantCountableConnection {
  pageInfo: PageInfo!
  edges: [ProductVariantCountableEdge!]!
  totalCount: Int
}

type ProductVariantCountableEdge {
  node: ProductVariant!
  cursor: String!
}

type ProductVariantCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  productVariant: ProductVariant
}

input ProductVariantCreateInput {
  attributes: [AttributeValueInput]!
  costPrice: PositiveDecimal
  price: PositiveDecimal
  sku: String
  trackInventory: Boolean
  weight: WeightScalar
  product: ID!
  stocks: [StockInput!]
}

type ProductVariantDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  productVariant: ProductVariant
}

input ProductVariantFilterInput {
  search: String
  sku: [String]
}

input ProductVariantInput {
  attributes: [AttributeValueInput]
  costPrice: PositiveDecimal
  price: PositiveDecimal
  sku: String
  trackInventory: Boolean
  weight: WeightScalar
}

type ProductVariantReorder {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  product: Product
  productErrors: [ProductError!]!
}

type ProductVariantSetDefault {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  product: Product
  productErrors: [ProductError!]!
}

type ProductVariantStocksCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productVariant: ProductVariant
  bulkStockErrors: [BulkStockError!]!
}

type ProductVariantStocksDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productVariant: ProductVariant
  stockErrors: [StockError!]!
}

type ProductVariantStocksUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productVariant: ProductVariant
  bulkStockErrors: [BulkStockError!]!
}

type ProductVariantTranslatableContent implements Node {
  id: ID!
  name: String!
  translation(languageCode: LanguageCodeEnum!): ProductVariantTranslation
  productVariant: ProductVariant
}

type ProductVariantTranslate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  translationErrors: [TranslationError!]!
  productVariant: ProductVariant
}

type ProductVariantTranslation implements Node {
  id: ID!
  name: String!
  language: LanguageDisplay!
}

type ProductVariantUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  productVariant: ProductVariant
}

type ProductVariantUpdateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  productVariant: ProductVariant
}

type ProductVariantUpdatePrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productErrors: [ProductError!]!
  productVariant: ProductVariant
}

type Query {
  webhook(id: ID!): Webhook
  webhooks(sortBy: WebhookSortingInput, filter: WebhookFilterInput, before: String, after: String, first: Int, last: Int): WebhookCountableConnection @deprecated(reason: "Use webhooks field on app(s) query instead. This field will be removed after 2020-07-31.")
  webhookEvents: [WebhookEvent]
  webhookSamplePayload(eventType: WebhookSampleEventTypeEnum!): JSONString
  warehouse(id: ID!): Warehouse
  warehouses(filter: WarehouseFilterInput, sortBy: WarehouseSortingInput, before: String, after: String, first: Int, last: Int): WarehouseCountableConnection
  translations(kind: TranslatableKinds!, before: String, after: String, first: Int, last: Int): TranslatableItemConnection
  translation(id: ID!, kind: TranslatableKinds!): TranslatableItem
  stock(id: ID!): Stock
  stocks(filter: StockFilterInput, before: String, after: String, first: Int, last: Int): StockCountableConnection
  shop: Shop!
  shippingZone(id: ID!): ShippingZone
  shippingZones(before: String, after: String, first: Int, last: Int): ShippingZoneCountableConnection
  digitalContent(id: ID!): DigitalContent
  digitalContents(before: String, after: String, first: Int, last: Int): DigitalContentCountableConnection
  attributes(filter: AttributeFilterInput, sortBy: AttributeSortingInput, before: String, after: String, first: Int, last: Int): AttributeCountableConnection
  attribute(id: ID!): Attribute
  categories(filter: CategoryFilterInput, sortBy: CategorySortingInput, level: Int, before: String, after: String, first: Int, last: Int): CategoryCountableConnection
  category(id: ID, slug: String): Category
  collection(id: ID, slug: String): Collection
  collections(filter: CollectionFilterInput, sortBy: CollectionSortingInput, before: String, after: String, first: Int, last: Int): CollectionCountableConnection
  product(id: ID, slug: String): Product
  products(filter: ProductFilterInput, sortBy: ProductOrder, stockAvailability: StockAvailability, before: String, after: String, first: Int, last: Int): ProductCountableConnection
  productType(id: ID!): ProductType
  productTypes(filter: ProductTypeFilterInput, sortBy: ProductTypeSortingInput, before: String, after: String, first: Int, last: Int): ProductTypeCountableConnection
  productVariant(id: ID, sku: String): ProductVariant
  productVariants(ids: [ID], filter: ProductVariantFilterInput, before: String, after: String, first: Int, last: Int): ProductVariantCountableConnection
  reportProductSales(period: ReportingPeriod!, before: String, after: String, first: Int, last: Int): ProductVariantCountableConnection
  payment(id: ID!): Payment
  payments(before: String, after: String, first: Int, last: Int): PaymentCountableConnection
  page(id: ID, slug: String): Page
  pages(sortBy: PageSortingInput, filter: PageFilterInput, before: String, after: String, first: Int, last: Int): PageCountableConnection
  homepageEvents(before: String, after: String, first: Int, last: Int): OrderEventCountableConnection
  order(id: ID!): Order
  orders(sortBy: OrderSortingInput, filter: OrderFilterInput, created: ReportingPeriod, status: OrderStatusFilter, before: String, after: String, first: Int, last: Int): OrderCountableConnection
  draftOrders(sortBy: OrderSortingInput, filter: OrderDraftFilterInput, created: ReportingPeriod, before: String, after: String, first: Int, last: Int): OrderCountableConnection
  ordersTotal(period: ReportingPeriod): TaxedMoney
  orderByToken(token: UUID!): Order
  menu(id: ID, name: String, slug: String): Menu
  menus(sortBy: MenuSortingInput, filter: MenuFilterInput, before: String, after: String, first: Int, last: Int): MenuCountableConnection
  menuItem(id: ID!): MenuItem
  menuItems(sortBy: MenuItemSortingInput, filter: MenuItemFilterInput, before: String, after: String, first: Int, last: Int): MenuItemCountableConnection
  giftCard(id: ID!): GiftCard
  giftCards(before: String, after: String, first: Int, last: Int): GiftCardCountableConnection
  plugin(id: ID!): Plugin
  plugins(filter: PluginFilterInput, sortBy: PluginSortingInput, before: String, after: String, first: Int, last: Int): PluginCountableConnection
  sale(id: ID!): Sale
  sales(filter: SaleFilterInput, sortBy: SaleSortingInput, query: String, before: String, after: String, first: Int, last: Int): SaleCountableConnection
  voucher(id: ID!): Voucher
  vouchers(filter: VoucherFilterInput, sortBy: VoucherSortingInput, query: String, before: String, after: String, first: Int, last: Int): VoucherCountableConnection
  exportFile(id: ID!): ExportFile
  exportFiles(filter: ExportFileFilterInput, sortBy: ExportFileSortingInput, before: String, after: String, first: Int, last: Int): ExportFileCountableConnection
  taxTypes: [TaxType]
  checkout(token: UUID): Checkout
  checkouts(before: String, after: String, first: Int, last: Int): CheckoutCountableConnection
  checkoutLine(id: ID): CheckoutLine
  checkoutLines(before: String, after: String, first: Int, last: Int): CheckoutLineCountableConnection
  appsInstallations: [AppInstallation!]!
  apps(filter: AppFilterInput, sortBy: AppSortingInput, before: String, after: String, first: Int, last: Int): AppCountableConnection
  app(id: ID!): App
  addressValidationRules(countryCode: CountryCode!, countryArea: String, city: String, cityArea: String): AddressValidationData
  address(id: ID!): Address
  customers(filter: CustomerFilterInput, sortBy: UserSortingInput, before: String, after: String, first: Int, last: Int): UserCountableConnection
  permissionGroups(filter: PermissionGroupFilterInput, sortBy: PermissionGroupSortingInput, before: String, after: String, first: Int, last: Int): GroupCountableConnection
  permissionGroup(id: ID!): Group
  me: User
  staffUsers(filter: StaffUserInput, sortBy: UserSortingInput, before: String, after: String, first: Int, last: Int): UserCountableConnection
  serviceAccounts(filter: ServiceAccountFilterInput, sortBy: ServiceAccountSortingInput, before: String, after: String, first: Int, last: Int): ServiceAccountCountableConnection @deprecated(reason: "Use the `apps` query instead. This field will be removed after 2020-07-31.")
  serviceAccount(id: ID!): ServiceAccount @deprecated(reason: "Use the `app` query instead. This field will be removed after 2020-07-31.")
  user(id: ID!): User
  _entities(representations: [_Any]): [Entity]
  _service: _Service
}

type ReducedRate {
  rate: Float!
  rateType: TaxRateType!
}

type RefreshToken {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  token: String
  user: User
  accountErrors: [AccountError!]!
}

input ReorderInput {
  id: ID!
  sortOrder: Int
}

enum ReportingPeriod {
  TODAY
  THIS_MONTH
}

type RequestEmailChange {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  accountErrors: [AccountError!]!
}

type RequestPasswordReset {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
}

type Sale implements Node {
  id: ID!
  name: String!
  type: SaleType!
  value: Float!
  startDate: DateTime!
  endDate: DateTime
  categories(before: String, after: String, first: Int, last: Int): CategoryCountableConnection
  collections(before: String, after: String, first: Int, last: Int): CollectionCountableConnection
  products(before: String, after: String, first: Int, last: Int): ProductCountableConnection
  translation(languageCode: LanguageCodeEnum!): SaleTranslation
}

type SaleAddCatalogues {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  sale: Sale
  discountErrors: [DiscountError!]!
}

type SaleBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  discountErrors: [DiscountError!]!
}

type SaleCountableConnection {
  pageInfo: PageInfo!
  edges: [SaleCountableEdge!]!
  totalCount: Int
}

type SaleCountableEdge {
  node: Sale!
  cursor: String!
}

type SaleCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  discountErrors: [DiscountError!]!
  sale: Sale
}

type SaleDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  discountErrors: [DiscountError!]!
  sale: Sale
}

input SaleFilterInput {
  status: [DiscountStatusEnum]
  saleType: DiscountValueTypeEnum
  started: DateTimeRangeInput
  search: String
}

input SaleInput {
  name: String
  type: DiscountValueTypeEnum
  value: PositiveDecimal
  products: [ID]
  categories: [ID]
  collections: [ID]
  startDate: DateTime
  endDate: DateTime
}

type SaleRemoveCatalogues {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  sale: Sale
  discountErrors: [DiscountError!]!
}

enum SaleSortField {
  NAME
  START_DATE
  END_DATE
  VALUE
  TYPE
}

input SaleSortingInput {
  direction: OrderDirection!
  field: SaleSortField!
}

type SaleTranslatableContent implements Node {
  id: ID!
  name: String!
  translation(languageCode: LanguageCodeEnum!): SaleTranslation
  sale: Sale
}

type SaleTranslate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  translationErrors: [TranslationError!]!
  sale: Sale
}

type SaleTranslation implements Node {
  id: ID!
  name: String
  language: LanguageDisplay!
}

enum SaleType {
  FIXED
  PERCENTAGE
}

type SaleUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  discountErrors: [DiscountError!]!
  sale: Sale
}

type SelectedAttribute {
  attribute: Attribute!
  values: [AttributeValue]!
}

input SeoInput {
  title: String
  description: String
}

type ServiceAccount implements Node & ObjectWithMetadata {
  id: ID!
  name: String
  created: DateTime
  isActive: Boolean
  permissions: [Permission]
  tokens: [ServiceAccountToken]
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
}

type ServiceAccountClearPrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  serviceAccount: ServiceAccount
}

type ServiceAccountCountableConnection {
  pageInfo: PageInfo!
  edges: [ServiceAccountCountableEdge!]!
  totalCount: Int
}

type ServiceAccountCountableEdge {
  node: ServiceAccount!
  cursor: String!
}

type ServiceAccountCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  authToken: String
  accountErrors: [AccountError!]!
  serviceAccount: ServiceAccount
}

type ServiceAccountDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  serviceAccount: ServiceAccount
}

input ServiceAccountFilterInput {
  search: String
  isActive: Boolean
}

input ServiceAccountInput {
  name: String
  isActive: Boolean
  permissions: [PermissionEnum]
}

enum ServiceAccountSortField {
  NAME
  CREATION_DATE
}

input ServiceAccountSortingInput {
  direction: OrderDirection!
  field: ServiceAccountSortField!
}

type ServiceAccountToken implements Node {
  name: String
  authToken: String
  id: ID!
}

type ServiceAccountTokenCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  authToken: String
  accountErrors: [AccountError!]!
  serviceAccountToken: ServiceAccountToken
}

type ServiceAccountTokenDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  serviceAccountToken: ServiceAccountToken
}

input ServiceAccountTokenInput {
  name: String
  serviceAccount: ID!
}

type ServiceAccountUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  serviceAccount: ServiceAccount
}

type ServiceAccountUpdatePrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  serviceAccount: ServiceAccount
}

type SetPassword {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  token: String
  refreshToken: String
  csrfToken: String
  user: User
  accountErrors: [AccountError!]!
}

type ShippingError {
  field: String
  message: String
  code: ShippingErrorCode!
  warehouses: [ID!]
}

enum ShippingErrorCode {
  ALREADY_EXISTS
  GRAPHQL_ERROR
  INVALID
  MAX_LESS_THAN_MIN
  NOT_FOUND
  REQUIRED
  UNIQUE
  DUPLICATED_INPUT_ITEM
}

type ShippingMethod implements Node {
  id: ID!
  name: String!
  price: Money
  minimumOrderPrice: Money
  maximumOrderPrice: Money
  minimumOrderWeight: Weight
  maximumOrderWeight: Weight
  type: ShippingMethodTypeEnum
  translation(languageCode: LanguageCodeEnum!): ShippingMethodTranslation
}

type ShippingMethodTranslatableContent implements Node {
  id: ID!
  name: String!
  translation(languageCode: LanguageCodeEnum!): ShippingMethodTranslation
  shippingMethod: ShippingMethod
}

type ShippingMethodTranslation implements Node {
  id: ID!
  name: String
  language: LanguageDisplay!
}

enum ShippingMethodTypeEnum {
  PRICE
  WEIGHT
}

type ShippingPriceBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  shippingErrors: [ShippingError!]!
}

type ShippingPriceCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shippingZone: ShippingZone
  shippingErrors: [ShippingError!]!
  shippingMethod: ShippingMethod
}

type ShippingPriceDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shippingMethod: ShippingMethod
  shippingZone: ShippingZone
  shippingErrors: [ShippingError!]!
}

input ShippingPriceInput {
  name: String
  price: PositiveDecimal
  minimumOrderPrice: PositiveDecimal
  maximumOrderPrice: PositiveDecimal
  minimumOrderWeight: WeightScalar
  maximumOrderWeight: WeightScalar
  type: ShippingMethodTypeEnum
  shippingZone: ID
}

type ShippingPriceTranslate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  translationErrors: [TranslationError!]!
  shippingMethod: ShippingMethod
}

type ShippingPriceUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shippingZone: ShippingZone
  shippingErrors: [ShippingError!]!
  shippingMethod: ShippingMethod
}

type ShippingZone implements Node {
  id: ID!
  name: String!
  default: Boolean!
  priceRange: MoneyRange
  countries: [CountryDisplay]
  shippingMethods: [ShippingMethod]
  warehouses: [Warehouse]
}

type ShippingZoneBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  shippingErrors: [ShippingError!]!
}

type ShippingZoneCountableConnection {
  pageInfo: PageInfo!
  edges: [ShippingZoneCountableEdge!]!
  totalCount: Int
}

type ShippingZoneCountableEdge {
  node: ShippingZone!
  cursor: String!
}

type ShippingZoneCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shippingErrors: [ShippingError!]!
  shippingZone: ShippingZone
}

input ShippingZoneCreateInput {
  name: String
  countries: [String]
  default: Boolean
  addWarehouses: [ID]
}

type ShippingZoneDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shippingErrors: [ShippingError!]!
  shippingZone: ShippingZone
}

type ShippingZoneUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shippingErrors: [ShippingError!]!
  shippingZone: ShippingZone
}

input ShippingZoneUpdateInput {
  name: String
  countries: [String]
  default: Boolean
  addWarehouses: [ID]
  removeWarehouses: [ID]
}

type Shop {
  availablePaymentGateways(currency: String): [PaymentGateway!]!
  geolocalization: Geolocalization
  authorizationKeys: [AuthorizationKey]!
  countries(languageCode: LanguageCodeEnum): [CountryDisplay!]!
  currencies: [String]! @deprecated(reason: "This field will be removed in Saleor 3.0")
  defaultCurrency: String! @deprecated(reason: "This field will be removed in Saleor 3.0")
  defaultCountry: CountryDisplay
  defaultMailSenderName: String
  defaultMailSenderAddress: String
  description: String
  domain: Domain!
  homepageCollection: Collection @deprecated(reason: "Use the `collection` query with the `slug` parameter. This field will be removed in Saleor 3.0")
  languages: [LanguageDisplay]!
  name: String!
  navigation: Navigation @deprecated(reason: "Fetch menus using the `menu` query with `slug` parameter.")
  permissions: [Permission]!
  phonePrefixes: [String]!
  headerText: String
  includeTaxesInPrices: Boolean!
  displayGrossPrices: Boolean!
  chargeTaxesOnShipping: Boolean!
  trackInventoryByDefault: Boolean
  defaultWeightUnit: WeightUnitsEnum
  translation(languageCode: LanguageCodeEnum!): ShopTranslation
  automaticFulfillmentDigitalProducts: Boolean
  defaultDigitalMaxDownloads: Int
  defaultDigitalUrlValidDays: Int
  companyAddress: Address
  customerSetPasswordUrl: String
  staffNotificationRecipients: [StaffNotificationRecipient]
}

type ShopAddressUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shop: Shop
  shopErrors: [ShopError!]!
}

type ShopDomainUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shop: Shop
  shopErrors: [ShopError!]!
}

type ShopError {
  field: String
  message: String
  code: ShopErrorCode!
}

enum ShopErrorCode {
  ALREADY_EXISTS
  CANNOT_FETCH_TAX_RATES
  GRAPHQL_ERROR
  INVALID
  NOT_FOUND
  REQUIRED
  UNIQUE
}

type ShopFetchTaxRates {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shop: Shop
  shopErrors: [ShopError!]!
}

input ShopSettingsInput {
  headerText: String
  description: String
  includeTaxesInPrices: Boolean
  displayGrossPrices: Boolean
  chargeTaxesOnShipping: Boolean
  trackInventoryByDefault: Boolean
  defaultWeightUnit: WeightUnitsEnum
  automaticFulfillmentDigitalProducts: Boolean
  defaultDigitalMaxDownloads: Int
  defaultDigitalUrlValidDays: Int
  defaultMailSenderName: String
  defaultMailSenderAddress: String
  customerSetPasswordUrl: String
}

type ShopSettingsTranslate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shop: Shop
  translationErrors: [TranslationError!]!
}

input ShopSettingsTranslationInput {
  headerText: String
  description: String
}

type ShopSettingsUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shop: Shop
  shopErrors: [ShopError!]!
}

type ShopTranslation implements Node {
  id: ID!
  headerText: String!
  description: String!
  language: LanguageDisplay!
}

input SiteDomainInput {
  domain: String
  name: String
}

type StaffBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  staffErrors: [StaffError!]!
}

type StaffCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  staffErrors: [StaffError!]!
  user: User
}

input StaffCreateInput {
  firstName: String
  lastName: String
  email: String
  isActive: Boolean
  note: String
  addGroups: [ID!]
  redirectUrl: String
}

type StaffDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  staffErrors: [StaffError!]!
  user: User
}

type StaffError {
  field: String
  message: String
  code: AccountErrorCode!
  permissions: [PermissionEnum!]
  groups: [ID!]
  users: [ID!]
}

enum StaffMemberStatus {
  ACTIVE
  DEACTIVATED
}

type StaffNotificationRecipient implements Node {
  user: User
  active: Boolean
  id: ID!
  email: String
}

type StaffNotificationRecipientCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shopErrors: [ShopError!]!
  staffNotificationRecipient: StaffNotificationRecipient
}

type StaffNotificationRecipientDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shopErrors: [ShopError!]!
  staffNotificationRecipient: StaffNotificationRecipient
}

input StaffNotificationRecipientInput {
  user: ID
  email: String
  active: Boolean
}

type StaffNotificationRecipientUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  shopErrors: [ShopError!]!
  staffNotificationRecipient: StaffNotificationRecipient
}

type StaffUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  staffErrors: [StaffError!]!
  user: User
}

input StaffUpdateInput {
  firstName: String
  lastName: String
  email: String
  isActive: Boolean
  note: String
  addGroups: [ID!]
  removeGroups: [ID!]
}

input StaffUserInput {
  status: StaffMemberStatus
  search: String
}

type Stock implements Node {
  warehouse: Warehouse!
  productVariant: ProductVariant!
  quantity: Int!
  id: ID!
  quantityAllocated: Int!
}

enum StockAvailability {
  IN_STOCK
  OUT_OF_STOCK
}

type StockCountableConnection {
  pageInfo: PageInfo!
  edges: [StockCountableEdge!]!
  totalCount: Int
}

type StockCountableEdge {
  node: Stock!
  cursor: String!
}

type StockError {
  field: String
  message: String
  code: StockErrorCode!
}

enum StockErrorCode {
  ALREADY_EXISTS
  GRAPHQL_ERROR
  INVALID
  NOT_FOUND
  REQUIRED
  UNIQUE
}

input StockFilterInput {
  quantity: Float
  search: String
}

input StockInput {
  warehouse: ID!
  quantity: Int
}

enum TaxRateType {
  ACCOMMODATION
  ADMISSION_TO_CULTURAL_EVENTS
  ADMISSION_TO_ENTERTAINMENT_EVENTS
  ADMISSION_TO_SPORTING_EVENTS
  ADVERTISING
  AGRICULTURAL_SUPPLIES
  BABY_FOODSTUFFS
  BIKES
  BOOKS
  CHILDRENS_CLOTHING
  DOMESTIC_FUEL
  DOMESTIC_SERVICES
  E_BOOKS
  FOODSTUFFS
  HOTELS
  MEDICAL
  NEWSPAPERS
  PASSENGER_TRANSPORT
  PHARMACEUTICALS
  PROPERTY_RENOVATIONS
  RESTAURANTS
  SOCIAL_HOUSING
  STANDARD
  WATER
  WINE
}

type TaxType {
  description: String
  taxCode: String
}

type TaxedMoney {
  currency: String!
  gross: Money!
  net: Money!
  tax: Money!
}

type TaxedMoneyRange {
  start: TaxedMoney
  stop: TaxedMoney
}

type Transaction implements Node {
  id: ID!
  created: DateTime!
  payment: Payment!
  token: String!
  kind: TransactionKind!
  isSuccess: Boolean!
  error: TransactionError
  amount: Money
}

enum TransactionError {
  TRANSACTIONERROR_INCORRECT_NUMBER
  TRANSACTIONERROR_INVALID_NUMBER
  TRANSACTIONERROR_INCORRECT_CVV
  TRANSACTIONERROR_INVALID_CVV
  TRANSACTIONERROR_INCORRECT_ZIP
  TRANSACTIONERROR_INCORRECT_ADDRESS
  TRANSACTIONERROR_INVALID_EXPIRY_DATE
  TRANSACTIONERROR_EXPIRED
  TRANSACTIONERROR_PROCESSING_ERROR
  TRANSACTIONERROR_DECLINED
}

enum TransactionKind {
  AUTH
  PENDING
  ACTION_TO_CONFIRM
  REFUND
  REFUND_ONGOING
  CAPTURE
  VOID
  CONFIRM
  CANCEL
}

union TranslatableItem = ProductTranslatableContent | CollectionTranslatableContent | CategoryTranslatableContent | AttributeTranslatableContent | AttributeValueTranslatableContent | ProductVariantTranslatableContent | PageTranslatableContent | ShippingMethodTranslatableContent | SaleTranslatableContent | VoucherTranslatableContent | MenuItemTranslatableContent

type TranslatableItemConnection {
  pageInfo: PageInfo!
  edges: [TranslatableItemEdge!]!
  totalCount: Int
}

type TranslatableItemEdge {
  node: TranslatableItem!
  cursor: String!
}

enum TranslatableKinds {
  ATTRIBUTE
  ATTRIBUTE_VALUE
  CATEGORY
  COLLECTION
  MENU_ITEM
  PAGE
  PRODUCT
  SALE
  SHIPPING_METHOD
  VARIANT
  VOUCHER
}

type TranslationError {
  field: String
  message: String
  code: TranslationErrorCode!
}

enum TranslationErrorCode {
  GRAPHQL_ERROR
  NOT_FOUND
  REQUIRED
}

input TranslationInput {
  seoTitle: String
  seoDescription: String
  name: String
  description: String
  descriptionJson: JSONString
}

scalar UUID

input UpdateInvoiceInput {
  number: String
  url: String
}

type UpdateMetadata {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  metadataErrors: [MetadataError!]!
  item: ObjectWithMetadata
}

type UpdatePrivateMetadata {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  metadataErrors: [MetadataError!]!
  item: ObjectWithMetadata
}

scalar Upload

type User implements Node & ObjectWithMetadata {
  id: ID!
  lastLogin: DateTime
  email: String!
  firstName: String!
  lastName: String!
  isStaff: Boolean!
  isActive: Boolean!
  note: String
  dateJoined: DateTime!
  defaultShippingAddress: Address
  defaultBillingAddress: Address
  privateMetadata: [MetadataItem]!
  metadata: [MetadataItem]!
  privateMeta: [MetaStore]! @deprecated(reason: "Use the `privetaMetadata` field. This field will be removed after 2020-07-31.")
  meta: [MetaStore]! @deprecated(reason: "Use the `metadata` field. This field will be removed after 2020-07-31.")
  addresses: [Address]
  checkout: Checkout
  giftCards(before: String, after: String, first: Int, last: Int): GiftCardCountableConnection
  orders(before: String, after: String, first: Int, last: Int): OrderCountableConnection
  permissions: [Permission] @deprecated(reason: "Will be removed in Saleor 2.11.Use the `userPermissions` instead.")
  userPermissions: [UserPermission]
  permissionGroups: [Group]
  editableGroups: [Group]
  avatar(size: Int): Image
  events: [CustomerEvent]
  storedPaymentSources: [PaymentSource]
}

type UserAvatarDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  accountErrors: [AccountError!]!
}

type UserAvatarUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  accountErrors: [AccountError!]!
}

type UserBulkSetActive {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  accountErrors: [AccountError!]!
}

type UserClearMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  user: User
}

type UserClearPrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  user: User
}

type UserCountableConnection {
  pageInfo: PageInfo!
  edges: [UserCountableEdge!]!
  totalCount: Int
}

type UserCountableEdge {
  node: User!
  cursor: String!
}

input UserCreateInput {
  defaultBillingAddress: AddressInput
  defaultShippingAddress: AddressInput
  firstName: String
  lastName: String
  email: String
  isActive: Boolean
  note: String
  redirectUrl: String
}

type UserPermission {
  code: PermissionEnum!
  name: String!
  sourcePermissionGroups(userId: ID!): [Group!]
}

enum UserSortField {
  FIRST_NAME
  LAST_NAME
  EMAIL
  ORDER_COUNT
}

input UserSortingInput {
  direction: OrderDirection!
  field: UserSortField!
}

type UserUpdateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  user: User
}

type UserUpdatePrivateMeta {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  accountErrors: [AccountError!]!
  user: User
}

type VAT {
  countryCode: String!
  standardRate: Float
  reducedRates: [ReducedRate]!
}

type VariantImageAssign {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productVariant: ProductVariant
  image: ProductImage
  productErrors: [ProductError!]!
}

type VariantImageUnassign {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  productVariant: ProductVariant
  image: ProductImage
  productErrors: [ProductError!]!
}

type VariantPricingInfo {
  onSale: Boolean
  discount: TaxedMoney
  discountLocalCurrency: TaxedMoney
  price: TaxedMoney
  priceUndiscounted: TaxedMoney
  priceLocalCurrency: TaxedMoney
}

type VerifyToken {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  user: User
  isValid: Boolean!
  payload: GenericScalar
  accountErrors: [AccountError!]!
}

type Voucher implements Node {
  id: ID!
  name: String
  type: VoucherTypeEnum!
  code: String!
  usageLimit: Int
  used: Int!
  startDate: DateTime!
  endDate: DateTime
  applyOncePerOrder: Boolean!
  applyOncePerCustomer: Boolean!
  discountValueType: DiscountValueTypeEnum!
  discountValue: Float!
  minSpent: Money
  minCheckoutItemsQuantity: Int
  categories(before: String, after: String, first: Int, last: Int): CategoryCountableConnection
  collections(before: String, after: String, first: Int, last: Int): CollectionCountableConnection
  products(before: String, after: String, first: Int, last: Int): ProductCountableConnection
  countries: [CountryDisplay]
  translation(languageCode: LanguageCodeEnum!): VoucherTranslation
}

type VoucherAddCatalogues {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  voucher: Voucher
  discountErrors: [DiscountError!]!
}

type VoucherBulkDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  count: Int!
  discountErrors: [DiscountError!]!
}

type VoucherCountableConnection {
  pageInfo: PageInfo!
  edges: [VoucherCountableEdge!]!
  totalCount: Int
}

type VoucherCountableEdge {
  node: Voucher!
  cursor: String!
}

type VoucherCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  discountErrors: [DiscountError!]!
  voucher: Voucher
}

type VoucherDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  discountErrors: [DiscountError!]!
  voucher: Voucher
}

enum VoucherDiscountType {
  FIXED
  PERCENTAGE
  SHIPPING
}

input VoucherFilterInput {
  status: [DiscountStatusEnum]
  timesUsed: IntRangeInput
  discountType: [VoucherDiscountType]
  started: DateTimeRangeInput
  search: String
}

input VoucherInput {
  type: VoucherTypeEnum
  name: String
  code: String
  startDate: DateTime
  endDate: DateTime
  discountValueType: DiscountValueTypeEnum
  discountValue: PositiveDecimal
  products: [ID]
  collections: [ID]
  categories: [ID]
  minAmountSpent: PositiveDecimal
  minCheckoutItemsQuantity: Int
  countries: [String]
  applyOncePerOrder: Boolean
  applyOncePerCustomer: Boolean
  usageLimit: Int
}

type VoucherRemoveCatalogues {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  voucher: Voucher
  discountErrors: [DiscountError!]!
}

enum VoucherSortField {
  CODE
  START_DATE
  END_DATE
  VALUE
  TYPE
  USAGE_LIMIT
  MINIMUM_SPENT_AMOUNT
}

input VoucherSortingInput {
  direction: OrderDirection!
  field: VoucherSortField!
}

type VoucherTranslatableContent implements Node {
  id: ID!
  name: String
  translation(languageCode: LanguageCodeEnum!): VoucherTranslation
  voucher: Voucher
}

type VoucherTranslate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  translationErrors: [TranslationError!]!
  voucher: Voucher
}

type VoucherTranslation implements Node {
  id: ID!
  name: String
  language: LanguageDisplay!
}

enum VoucherTypeEnum {
  SHIPPING
  ENTIRE_ORDER
  SPECIFIC_PRODUCT
}

type VoucherUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  discountErrors: [DiscountError!]!
  voucher: Voucher
}

type Warehouse implements Node {
  id: ID!
  name: String!
  slug: String!
  companyName: String!
  shippingZones(before: String, after: String, first: Int, last: Int): ShippingZoneCountableConnection!
  address: Address!
  email: String!
}

input WarehouseAddressInput {
  streetAddress1: String!
  streetAddress2: String
  city: String!
  cityArea: String
  postalCode: String
  country: CountryCode!
  countryArea: String
  phone: String
}

type WarehouseCountableConnection {
  pageInfo: PageInfo!
  edges: [WarehouseCountableEdge!]!
  totalCount: Int
}

type WarehouseCountableEdge {
  node: Warehouse!
  cursor: String!
}

type WarehouseCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  warehouseErrors: [WarehouseError!]!
  warehouse: Warehouse
}

input WarehouseCreateInput {
  slug: String
  companyName: String
  email: String
  name: String!
  address: WarehouseAddressInput!
  shippingZones: [ID]
}

type WarehouseDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  warehouseErrors: [WarehouseError!]!
  warehouse: Warehouse
}

type WarehouseError {
  field: String
  message: String
  code: WarehouseErrorCode!
}

enum WarehouseErrorCode {
  ALREADY_EXISTS
  GRAPHQL_ERROR
  INVALID
  NOT_FOUND
  REQUIRED
  UNIQUE
}

input WarehouseFilterInput {
  search: String
  ids: [ID]
}

type WarehouseShippingZoneAssign {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  warehouseErrors: [WarehouseError!]!
  warehouse: Warehouse
}

type WarehouseShippingZoneUnassign {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  warehouseErrors: [WarehouseError!]!
  warehouse: Warehouse
}

enum WarehouseSortField {
  NAME
}

input WarehouseSortingInput {
  direction: OrderDirection!
  field: WarehouseSortField!
}

type WarehouseUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  warehouseErrors: [WarehouseError!]!
  warehouse: Warehouse
}

input WarehouseUpdateInput {
  slug: String
  companyName: String
  email: String
  name: String
  address: WarehouseAddressInput
}

type Webhook implements Node {
  name: String!
  targetUrl: String!
  isActive: Boolean!
  secretKey: String
  id: ID!
  events: [WebhookEvent!]!
  serviceAccount: ServiceAccount! @deprecated(reason: "Use the `app` field instead. This field will be removed after 2020-07-31.")
  app: App!
}

type WebhookCountableConnection {
  pageInfo: PageInfo!
  edges: [WebhookCountableEdge!]!
  totalCount: Int
}

type WebhookCountableEdge {
  node: Webhook!
  cursor: String!
}

type WebhookCreate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  webhookErrors: [WebhookError!]!
  webhook: Webhook
}

input WebhookCreateInput {
  name: String
  targetUrl: String
  events: [WebhookEventTypeEnum]
  serviceAccount: ID
  app: ID
  isActive: Boolean
  secretKey: String
}

type WebhookDelete {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  webhookErrors: [WebhookError!]!
  webhook: Webhook
}

type WebhookError {
  field: String
  message: String
  code: WebhookErrorCode!
}

enum WebhookErrorCode {
  GRAPHQL_ERROR
  INVALID
  NOT_FOUND
  REQUIRED
  UNIQUE
}

type WebhookEvent {
  eventType: WebhookEventTypeEnum!
  name: String!
}

enum WebhookEventTypeEnum {
  ANY_EVENTS
  ORDER_CREATED
  ORDER_FULLY_PAID
  ORDER_UPDATED
  ORDER_CANCELLED
  ORDER_FULFILLED
  INVOICE_REQUESTED
  INVOICE_DELETED
  INVOICE_SENT
  CUSTOMER_CREATED
  PRODUCT_CREATED
  PRODUCT_UPDATED
  CHECKOUT_QUANTITY_CHANGED
  CHECKOUT_CREATED
  CHECKOUT_UPDATED
  FULFILLMENT_CREATED
}

input WebhookFilterInput {
  search: String
  isActive: Boolean
}

enum WebhookSampleEventTypeEnum {
  ORDER_CREATED
  ORDER_FULLY_PAID
  ORDER_UPDATED
  ORDER_CANCELLED
  ORDER_FULFILLED
  INVOICE_REQUESTED
  INVOICE_DELETED
  INVOICE_SENT
  CUSTOMER_CREATED
  PRODUCT_CREATED
  PRODUCT_UPDATED
  CHECKOUT_QUANTITY_CHANGED
  CHECKOUT_CREATED
  CHECKOUT_UPDATED
  FULFILLMENT_CREATED
}

enum WebhookSortField {
  NAME
  SERVICE_ACCOUNT
  TARGET_URL
  APP
}

input WebhookSortingInput {
  direction: OrderDirection!
  field: WebhookSortField!
}

type WebhookUpdate {
  errors: [Error!]! @deprecated(reason: "Use typed errors with error codes. This field will be removed after 2020-07-31.")
  webhookErrors: [WebhookError!]!
  webhook: Webhook
}

input WebhookUpdateInput {
  name: String
  targetUrl: String
  events: [WebhookEventTypeEnum]
  serviceAccount: ID
  app: ID
  isActive: Boolean
  secretKey: String
}

type Weight {
  unit: WeightUnitsEnum!
  value: Float!
}

scalar WeightScalar

enum WeightUnitsEnum {
  KG
  LB
  OZ
  G
}

scalar _Any

union Entity = Address | User | Group | ServiceAccount | App | ProductVariant | Product | ProductType | Collection | Category | ProductImage

type _Service {
  sdl: String
}
kobylynskyi commented 3 years ago

@kulame it is expected that Entity.java will be generated as an empty interface because it is union. And all types (that are part of the union) are extending this interface:

public class Address implements java.io.Serializable, Entity, Node {
    private String id;
    private String firstName;
    ...