Explorar o código

chore(core): Do not use admin-ui operations in core e2e tests

Relates to #92
Michael Bromley %!s(int64=6) %!d(string=hai) anos
pai
achega
f4725f3269
Modificáronse 32 ficheiros con 9217 adicións e 970 borrados
  1. 82 82
      admin-ui/src/app/common/generated-types.ts
  2. 1 1
      packages/common/src/generated-shop-types.ts
  3. 82 82
      packages/common/src/generated-types.ts
  4. 0 5
      packages/core/e2e/__snapshots__/collection.e2e-spec.ts.snap
  5. 0 2
      packages/core/e2e/__snapshots__/product.e2e-spec.ts.snap
  6. 34 14
      packages/core/e2e/administrator.e2e-spec.ts
  7. 9 19
      packages/core/e2e/auth.e2e-spec.ts
  8. 111 77
      packages/core/e2e/collection.e2e-spec.ts
  9. 22 16
      packages/core/e2e/country.e2e-spec.ts
  10. 16 19
      packages/core/e2e/customer.e2e-spec.ts
  11. 39 33
      packages/core/e2e/default-search-plugin.e2e-spec.ts
  12. 7 8
      packages/core/e2e/entity-id-strategy.e2e-spec.ts
  13. 35 14
      packages/core/e2e/facet.e2e-spec.ts
  14. 444 0
      packages/core/e2e/graphql/fragments.ts
  15. 4907 0
      packages/core/e2e/graphql/generated-e2e-admin-types.ts
  16. 2398 0
      packages/core/e2e/graphql/generated-e2e-shop-types.ts
  17. 230 0
      packages/core/e2e/graphql/shared-definitions.ts
  18. 300 0
      packages/core/e2e/graphql/shop-definitions.ts
  19. 21 8
      packages/core/e2e/order.e2e-spec.ts
  20. 67 32
      packages/core/e2e/product.e2e-spec.ts
  21. 63 16
      packages/core/e2e/promotion.e2e-spec.ts
  22. 34 3
      packages/core/e2e/role.e2e-spec.ts
  23. 13 65
      packages/core/e2e/shop-auth.e2e-spec.ts
  24. 147 118
      packages/core/e2e/shop-catalog.e2e-spec.ts
  25. 5 50
      packages/core/e2e/shop-customer.e2e-spec.ts
  26. 20 185
      packages/core/e2e/shop-order.e2e-spec.ts
  27. 34 70
      packages/core/e2e/stock-control.e2e-spec.ts
  28. 52 14
      packages/core/e2e/zone.e2e-spec.ts
  29. 6 8
      packages/core/mock-data/mock-data.service.ts
  30. 2 2
      packages/core/mock-data/simple-graphql-client.ts
  31. 0 0
      schema-admin.json
  32. 36 27
      scripts/codegen/generate-graphql-types.ts

+ 82 - 82
admin-ui/src/app/common/generated-types.ts

@@ -1,5 +1,5 @@
 // tslint:disable
-// Generated in 2019-05-07T14:21:21+02:00
+// Generated in 2019-05-07T17:59:46+02:00
 
 export type Maybe<T> = T | null;
 /** All built-in and custom scalars, mapped to their actual values */
@@ -1413,26 +1413,26 @@ export type Mutation = {
   updateAdministrator: Administrator,
   /** Assign a Role to an Administrator */
   assignRoleToAdministrator: Administrator,
+  login: LoginResult,
+  logout: Scalars['Boolean'],
+  /** Create a new Asset */
+  createAssets: Array<Asset>,
+  /** Create a new Collection */
+  createCollection: Collection,
+  /** Update an existing Collection */
+  updateCollection: Collection,
+  /** Move a Collection to a different parent or index */
+  moveCollection: Collection,
   /** Create a new Channel */
   createChannel: Channel,
   /** Update an existing Channel */
   updateChannel: Channel,
-  /** Create a new Asset */
-  createAssets: Array<Asset>,
-  login: LoginResult,
-  logout: Scalars['Boolean'],
   /** Create a new Country */
   createCountry: Country,
   /** Update an existing Country */
   updateCountry: Country,
   /** Delete a Country */
   deleteCountry: DeletionResponse,
-  /** Create a new Collection */
-  createCollection: Collection,
-  /** Update an existing Collection */
-  updateCollection: Collection,
-  /** Move a Collection to a different parent or index */
-  moveCollection: Collection,
   /** Create a new CustomerGroup */
   createCustomerGroup: CustomerGroup,
   /** Update an existing CustomerGroup */
@@ -1495,14 +1495,14 @@ export type Mutation = {
   createRole: Role,
   /** Update an existing Role */
   updateRole: Role,
-  /** Create a new TaxCategory */
-  createTaxCategory: TaxCategory,
-  /** Update an existing TaxCategory */
-  updateTaxCategory: TaxCategory,
   /** Create a new ShippingMethod */
   createShippingMethod: ShippingMethod,
   /** Update an existing ShippingMethod */
   updateShippingMethod: ShippingMethod,
+  /** Create a new TaxCategory */
+  createTaxCategory: TaxCategory,
+  /** Update an existing TaxCategory */
+  updateTaxCategory: TaxCategory,
   /** Create a new TaxRate */
   createTaxRate: TaxRate,
   /** Update an existing TaxRate */
@@ -1541,55 +1541,55 @@ export type MutationAssignRoleToAdministratorArgs = {
 };
 
 
-export type MutationCreateChannelArgs = {
-  input: CreateChannelInput
+export type MutationLoginArgs = {
+  username: Scalars['String'],
+  password: Scalars['String'],
+  rememberMe?: Maybe<Scalars['Boolean']>
 };
 
 
-export type MutationUpdateChannelArgs = {
-  input: UpdateChannelInput
+export type MutationCreateAssetsArgs = {
+  input: Array<CreateAssetInput>
 };
 
 
-export type MutationCreateAssetsArgs = {
-  input: Array<CreateAssetInput>
+export type MutationCreateCollectionArgs = {
+  input: CreateCollectionInput
 };
 
 
-export type MutationLoginArgs = {
-  username: Scalars['String'],
-  password: Scalars['String'],
-  rememberMe?: Maybe<Scalars['Boolean']>
+export type MutationUpdateCollectionArgs = {
+  input: UpdateCollectionInput
 };
 
 
-export type MutationCreateCountryArgs = {
-  input: CreateCountryInput
+export type MutationMoveCollectionArgs = {
+  input: MoveCollectionInput
 };
 
 
-export type MutationUpdateCountryArgs = {
-  input: UpdateCountryInput
+export type MutationCreateChannelArgs = {
+  input: CreateChannelInput
 };
 
 
-export type MutationDeleteCountryArgs = {
-  id: Scalars['ID']
+export type MutationUpdateChannelArgs = {
+  input: UpdateChannelInput
 };
 
 
-export type MutationCreateCollectionArgs = {
-  input: CreateCollectionInput
+export type MutationCreateCountryArgs = {
+  input: CreateCountryInput
 };
 
 
-export type MutationUpdateCollectionArgs = {
-  input: UpdateCollectionInput
+export type MutationUpdateCountryArgs = {
+  input: UpdateCountryInput
 };
 
 
-export type MutationMoveCollectionArgs = {
-  input: MoveCollectionInput
+export type MutationDeleteCountryArgs = {
+  id: Scalars['ID']
 };
 
 
@@ -1769,23 +1769,23 @@ export type MutationUpdateRoleArgs = {
 };
 
 
-export type MutationCreateTaxCategoryArgs = {
-  input: CreateTaxCategoryInput
+export type MutationCreateShippingMethodArgs = {
+  input: CreateShippingMethodInput
 };
 
 
-export type MutationUpdateTaxCategoryArgs = {
-  input: UpdateTaxCategoryInput
+export type MutationUpdateShippingMethodArgs = {
+  input: UpdateShippingMethodInput
 };
 
 
-export type MutationCreateShippingMethodArgs = {
-  input: CreateShippingMethodInput
+export type MutationCreateTaxCategoryArgs = {
+  input: CreateTaxCategoryInput
 };
 
 
-export type MutationUpdateShippingMethodArgs = {
-  input: UpdateShippingMethodInput
+export type MutationUpdateTaxCategoryArgs = {
+  input: UpdateTaxCategoryInput
 };
 
 
@@ -2293,17 +2293,17 @@ export type PromotionSortParameter = {
 export type Query = {
   administrators: AdministratorList,
   administrator?: Maybe<Administrator>,
-  channels: Array<Channel>,
-  channel?: Maybe<Channel>,
-  activeChannel: Channel,
+  me?: Maybe<CurrentUser>,
   assets: AssetList,
   asset?: Maybe<Asset>,
-  me?: Maybe<CurrentUser>,
-  countries: CountryList,
-  country?: Maybe<Country>,
   collections: CollectionList,
   collection?: Maybe<Collection>,
   collectionFilters: Array<ConfigurableOperation>,
+  channels: Array<Channel>,
+  channel?: Maybe<Channel>,
+  activeChannel: Channel,
+  countries: CountryList,
+  country?: Maybe<Country>,
   customerGroups: Array<CustomerGroup>,
   customerGroup?: Maybe<CustomerGroup>,
   customers: CustomerList,
@@ -2311,10 +2311,10 @@ export type Query = {
   facets: FacetList,
   facet?: Maybe<Facet>,
   globalSettings: GlobalSettings,
-  paymentMethods: PaymentMethodList,
-  paymentMethod?: Maybe<PaymentMethod>,
   order?: Maybe<Order>,
   orders: OrderList,
+  paymentMethods: PaymentMethodList,
+  paymentMethod?: Maybe<PaymentMethod>,
   productOptionGroups: Array<ProductOptionGroup>,
   productOptionGroup?: Maybe<ProductOptionGroup>,
   search: SearchResponse,
@@ -2325,12 +2325,12 @@ export type Query = {
   adjustmentOperations: AdjustmentOperations,
   roles: RoleList,
   role?: Maybe<Role>,
-  taxCategories: Array<TaxCategory>,
-  taxCategory?: Maybe<TaxCategory>,
   shippingMethods: ShippingMethodList,
   shippingMethod?: Maybe<ShippingMethod>,
   shippingEligibilityCheckers: Array<ConfigurableOperation>,
   shippingCalculators: Array<ConfigurableOperation>,
+  taxCategories: Array<TaxCategory>,
+  taxCategory?: Maybe<TaxCategory>,
   taxRates: TaxRateList,
   taxRate?: Maybe<TaxRate>,
   zones: Array<Zone>,
@@ -2352,11 +2352,6 @@ export type QueryAdministratorArgs = {
 };
 
 
-export type QueryChannelArgs = {
-  id: Scalars['ID']
-};
-
-
 export type QueryAssetsArgs = {
   options?: Maybe<AssetListOptions>
 };
@@ -2367,25 +2362,30 @@ export type QueryAssetArgs = {
 };
 
 
-export type QueryCountriesArgs = {
-  options?: Maybe<CountryListOptions>
+export type QueryCollectionsArgs = {
+  languageCode?: Maybe<LanguageCode>,
+  options?: Maybe<CollectionListOptions>
 };
 
 
-export type QueryCountryArgs = {
+export type QueryCollectionArgs = {
+  id: Scalars['ID'],
+  languageCode?: Maybe<LanguageCode>
+};
+
+
+export type QueryChannelArgs = {
   id: Scalars['ID']
 };
 
 
-export type QueryCollectionsArgs = {
-  languageCode?: Maybe<LanguageCode>,
-  options?: Maybe<CollectionListOptions>
+export type QueryCountriesArgs = {
+  options?: Maybe<CountryListOptions>
 };
 
 
-export type QueryCollectionArgs = {
-  id: Scalars['ID'],
-  languageCode?: Maybe<LanguageCode>
+export type QueryCountryArgs = {
+  id: Scalars['ID']
 };
 
 
@@ -2416,23 +2416,23 @@ export type QueryFacetArgs = {
 };
 
 
-export type QueryPaymentMethodsArgs = {
-  options?: Maybe<PaymentMethodListOptions>
+export type QueryOrderArgs = {
+  id: Scalars['ID']
 };
 
 
-export type QueryPaymentMethodArgs = {
-  id: Scalars['ID']
+export type QueryOrdersArgs = {
+  options?: Maybe<OrderListOptions>
 };
 
 
-export type QueryOrderArgs = {
-  id: Scalars['ID']
+export type QueryPaymentMethodsArgs = {
+  options?: Maybe<PaymentMethodListOptions>
 };
 
 
-export type QueryOrdersArgs = {
-  options?: Maybe<OrderListOptions>
+export type QueryPaymentMethodArgs = {
+  id: Scalars['ID']
 };
 
 
@@ -2485,11 +2485,6 @@ export type QueryRoleArgs = {
 };
 
 
-export type QueryTaxCategoryArgs = {
-  id: Scalars['ID']
-};
-
-
 export type QueryShippingMethodsArgs = {
   options?: Maybe<ShippingMethodListOptions>
 };
@@ -2500,6 +2495,11 @@ export type QueryShippingMethodArgs = {
 };
 
 
+export type QueryTaxCategoryArgs = {
+  id: Scalars['ID']
+};
+
+
 export type QueryTaxRatesArgs = {
   options?: Maybe<TaxRateListOptions>
 };

+ 1 - 1
packages/common/src/generated-shop-types.ts

@@ -1,5 +1,5 @@
 // tslint:disable
-// Generated in 2019-05-07T14:21:19+02:00
+// Generated in 2019-05-07T17:59:45+02:00
 
 export type Maybe<T> = T | null;
 /** All built-in and custom scalars, mapped to their actual values */

+ 82 - 82
packages/common/src/generated-types.ts

@@ -1,5 +1,5 @@
 // tslint:disable
-// Generated in 2019-05-07T14:21:18+02:00
+// Generated in 2019-05-07T17:59:45+02:00
 
 export type Maybe<T> = T | null;
 /** All built-in and custom scalars, mapped to their actual values */
@@ -1412,26 +1412,26 @@ export type Mutation = {
   updateAdministrator: Administrator,
   /** Assign a Role to an Administrator */
   assignRoleToAdministrator: Administrator,
+  login: LoginResult,
+  logout: Scalars['Boolean'],
+  /** Create a new Asset */
+  createAssets: Array<Asset>,
+  /** Create a new Collection */
+  createCollection: Collection,
+  /** Update an existing Collection */
+  updateCollection: Collection,
+  /** Move a Collection to a different parent or index */
+  moveCollection: Collection,
   /** Create a new Channel */
   createChannel: Channel,
   /** Update an existing Channel */
   updateChannel: Channel,
-  /** Create a new Asset */
-  createAssets: Array<Asset>,
-  login: LoginResult,
-  logout: Scalars['Boolean'],
   /** Create a new Country */
   createCountry: Country,
   /** Update an existing Country */
   updateCountry: Country,
   /** Delete a Country */
   deleteCountry: DeletionResponse,
-  /** Create a new Collection */
-  createCollection: Collection,
-  /** Update an existing Collection */
-  updateCollection: Collection,
-  /** Move a Collection to a different parent or index */
-  moveCollection: Collection,
   /** Create a new CustomerGroup */
   createCustomerGroup: CustomerGroup,
   /** Update an existing CustomerGroup */
@@ -1494,14 +1494,14 @@ export type Mutation = {
   createRole: Role,
   /** Update an existing Role */
   updateRole: Role,
-  /** Create a new TaxCategory */
-  createTaxCategory: TaxCategory,
-  /** Update an existing TaxCategory */
-  updateTaxCategory: TaxCategory,
   /** Create a new ShippingMethod */
   createShippingMethod: ShippingMethod,
   /** Update an existing ShippingMethod */
   updateShippingMethod: ShippingMethod,
+  /** Create a new TaxCategory */
+  createTaxCategory: TaxCategory,
+  /** Update an existing TaxCategory */
+  updateTaxCategory: TaxCategory,
   /** Create a new TaxRate */
   createTaxRate: TaxRate,
   /** Update an existing TaxRate */
@@ -1535,55 +1535,55 @@ export type MutationAssignRoleToAdministratorArgs = {
 };
 
 
-export type MutationCreateChannelArgs = {
-  input: CreateChannelInput
+export type MutationLoginArgs = {
+  username: Scalars['String'],
+  password: Scalars['String'],
+  rememberMe?: Maybe<Scalars['Boolean']>
 };
 
 
-export type MutationUpdateChannelArgs = {
-  input: UpdateChannelInput
+export type MutationCreateAssetsArgs = {
+  input: Array<CreateAssetInput>
 };
 
 
-export type MutationCreateAssetsArgs = {
-  input: Array<CreateAssetInput>
+export type MutationCreateCollectionArgs = {
+  input: CreateCollectionInput
 };
 
 
-export type MutationLoginArgs = {
-  username: Scalars['String'],
-  password: Scalars['String'],
-  rememberMe?: Maybe<Scalars['Boolean']>
+export type MutationUpdateCollectionArgs = {
+  input: UpdateCollectionInput
 };
 
 
-export type MutationCreateCountryArgs = {
-  input: CreateCountryInput
+export type MutationMoveCollectionArgs = {
+  input: MoveCollectionInput
 };
 
 
-export type MutationUpdateCountryArgs = {
-  input: UpdateCountryInput
+export type MutationCreateChannelArgs = {
+  input: CreateChannelInput
 };
 
 
-export type MutationDeleteCountryArgs = {
-  id: Scalars['ID']
+export type MutationUpdateChannelArgs = {
+  input: UpdateChannelInput
 };
 
 
-export type MutationCreateCollectionArgs = {
-  input: CreateCollectionInput
+export type MutationCreateCountryArgs = {
+  input: CreateCountryInput
 };
 
 
-export type MutationUpdateCollectionArgs = {
-  input: UpdateCollectionInput
+export type MutationUpdateCountryArgs = {
+  input: UpdateCountryInput
 };
 
 
-export type MutationMoveCollectionArgs = {
-  input: MoveCollectionInput
+export type MutationDeleteCountryArgs = {
+  id: Scalars['ID']
 };
 
 
@@ -1763,23 +1763,23 @@ export type MutationUpdateRoleArgs = {
 };
 
 
-export type MutationCreateTaxCategoryArgs = {
-  input: CreateTaxCategoryInput
+export type MutationCreateShippingMethodArgs = {
+  input: CreateShippingMethodInput
 };
 
 
-export type MutationUpdateTaxCategoryArgs = {
-  input: UpdateTaxCategoryInput
+export type MutationUpdateShippingMethodArgs = {
+  input: UpdateShippingMethodInput
 };
 
 
-export type MutationCreateShippingMethodArgs = {
-  input: CreateShippingMethodInput
+export type MutationCreateTaxCategoryArgs = {
+  input: CreateTaxCategoryInput
 };
 
 
-export type MutationUpdateShippingMethodArgs = {
-  input: UpdateShippingMethodInput
+export type MutationUpdateTaxCategoryArgs = {
+  input: UpdateTaxCategoryInput
 };
 
 
@@ -2272,17 +2272,17 @@ export type PromotionSortParameter = {
 export type Query = {
   administrators: AdministratorList,
   administrator?: Maybe<Administrator>,
-  channels: Array<Channel>,
-  channel?: Maybe<Channel>,
-  activeChannel: Channel,
+  me?: Maybe<CurrentUser>,
   assets: AssetList,
   asset?: Maybe<Asset>,
-  me?: Maybe<CurrentUser>,
-  countries: CountryList,
-  country?: Maybe<Country>,
   collections: CollectionList,
   collection?: Maybe<Collection>,
   collectionFilters: Array<ConfigurableOperation>,
+  channels: Array<Channel>,
+  channel?: Maybe<Channel>,
+  activeChannel: Channel,
+  countries: CountryList,
+  country?: Maybe<Country>,
   customerGroups: Array<CustomerGroup>,
   customerGroup?: Maybe<CustomerGroup>,
   customers: CustomerList,
@@ -2290,10 +2290,10 @@ export type Query = {
   facets: FacetList,
   facet?: Maybe<Facet>,
   globalSettings: GlobalSettings,
-  paymentMethods: PaymentMethodList,
-  paymentMethod?: Maybe<PaymentMethod>,
   order?: Maybe<Order>,
   orders: OrderList,
+  paymentMethods: PaymentMethodList,
+  paymentMethod?: Maybe<PaymentMethod>,
   productOptionGroups: Array<ProductOptionGroup>,
   productOptionGroup?: Maybe<ProductOptionGroup>,
   search: SearchResponse,
@@ -2304,12 +2304,12 @@ export type Query = {
   adjustmentOperations: AdjustmentOperations,
   roles: RoleList,
   role?: Maybe<Role>,
-  taxCategories: Array<TaxCategory>,
-  taxCategory?: Maybe<TaxCategory>,
   shippingMethods: ShippingMethodList,
   shippingMethod?: Maybe<ShippingMethod>,
   shippingEligibilityCheckers: Array<ConfigurableOperation>,
   shippingCalculators: Array<ConfigurableOperation>,
+  taxCategories: Array<TaxCategory>,
+  taxCategory?: Maybe<TaxCategory>,
   taxRates: TaxRateList,
   taxRate?: Maybe<TaxRate>,
   zones: Array<Zone>,
@@ -2328,11 +2328,6 @@ export type QueryAdministratorArgs = {
 };
 
 
-export type QueryChannelArgs = {
-  id: Scalars['ID']
-};
-
-
 export type QueryAssetsArgs = {
   options?: Maybe<AssetListOptions>
 };
@@ -2343,25 +2338,30 @@ export type QueryAssetArgs = {
 };
 
 
-export type QueryCountriesArgs = {
-  options?: Maybe<CountryListOptions>
+export type QueryCollectionsArgs = {
+  languageCode?: Maybe<LanguageCode>,
+  options?: Maybe<CollectionListOptions>
 };
 
 
-export type QueryCountryArgs = {
+export type QueryCollectionArgs = {
+  id: Scalars['ID'],
+  languageCode?: Maybe<LanguageCode>
+};
+
+
+export type QueryChannelArgs = {
   id: Scalars['ID']
 };
 
 
-export type QueryCollectionsArgs = {
-  languageCode?: Maybe<LanguageCode>,
-  options?: Maybe<CollectionListOptions>
+export type QueryCountriesArgs = {
+  options?: Maybe<CountryListOptions>
 };
 
 
-export type QueryCollectionArgs = {
-  id: Scalars['ID'],
-  languageCode?: Maybe<LanguageCode>
+export type QueryCountryArgs = {
+  id: Scalars['ID']
 };
 
 
@@ -2392,23 +2392,23 @@ export type QueryFacetArgs = {
 };
 
 
-export type QueryPaymentMethodsArgs = {
-  options?: Maybe<PaymentMethodListOptions>
+export type QueryOrderArgs = {
+  id: Scalars['ID']
 };
 
 
-export type QueryPaymentMethodArgs = {
-  id: Scalars['ID']
+export type QueryOrdersArgs = {
+  options?: Maybe<OrderListOptions>
 };
 
 
-export type QueryOrderArgs = {
-  id: Scalars['ID']
+export type QueryPaymentMethodsArgs = {
+  options?: Maybe<PaymentMethodListOptions>
 };
 
 
-export type QueryOrdersArgs = {
-  options?: Maybe<OrderListOptions>
+export type QueryPaymentMethodArgs = {
+  id: Scalars['ID']
 };
 
 
@@ -2461,11 +2461,6 @@ export type QueryRoleArgs = {
 };
 
 
-export type QueryTaxCategoryArgs = {
-  id: Scalars['ID']
-};
-
-
 export type QueryShippingMethodsArgs = {
   options?: Maybe<ShippingMethodListOptions>
 };
@@ -2476,6 +2471,11 @@ export type QueryShippingMethodArgs = {
 };
 
 
+export type QueryTaxCategoryArgs = {
+  id: Scalars['ID']
+};
+
+
 export type QueryTaxRatesArgs = {
   options?: Maybe<TaxRateListOptions>
 };

+ 0 - 5
packages/core/e2e/__snapshots__/collection.e2e-spec.ts.snap

@@ -4,7 +4,6 @@ exports[`Collection resolver createCollection creates a root collection 1`] = `
 Object {
   "assets": Array [
     Object {
-      "createdAt": "<date>",
       "fileSize": 4,
       "id": "T_1",
       "mimeType": "image/jpeg",
@@ -14,7 +13,6 @@ Object {
       "type": "IMAGE",
     },
     Object {
-      "createdAt": "<date>",
       "fileSize": 4,
       "id": "T_2",
       "mimeType": "image/jpeg",
@@ -27,7 +25,6 @@ Object {
   "children": null,
   "description": "",
   "featuredAsset": Object {
-    "createdAt": "<date>",
     "fileSize": 4,
     "id": "T_1",
     "mimeType": "image/jpeg",
@@ -72,7 +69,6 @@ exports[`Collection resolver updateCollection 1`] = `
 Object {
   "assets": Array [
     Object {
-      "createdAt": "<date>",
       "fileSize": 4,
       "id": "T_1",
       "mimeType": "image/jpeg",
@@ -85,7 +81,6 @@ Object {
   "children": null,
   "description": "Apple stuff ",
   "featuredAsset": Object {
-    "createdAt": "<date>",
     "fileSize": 4,
     "id": "T_1",
     "mimeType": "image/jpeg",

+ 0 - 2
packages/core/e2e/__snapshots__/product.e2e-spec.ts.snap

@@ -64,7 +64,6 @@ exports[`Product resolver product query returns expected properties 1`] = `
 Object {
   "assets": Array [
     Object {
-      "createdAt": "<date>",
       "fileSize": 4,
       "id": "T_2",
       "mimeType": "image/jpeg",
@@ -97,7 +96,6 @@ Object {
     },
   ],
   "featuredAsset": Object {
-    "createdAt": "<date>",
     "fileSize": 4,
     "id": "T_2",
     "mimeType": "image/jpeg",

+ 34 - 14
packages/core/e2e/administrator.e2e-spec.ts

@@ -1,20 +1,10 @@
-import {
-    Administrator,
-    CreateAdministrator,
-    GetAdministrator,
-    GetAdministrators,
-    UpdateAdministrator,
-} from '@vendure/common/lib/generated-types';
+import gql from 'graphql-tag';
 import path from 'path';
 
-import {
-    CREATE_ADMINISTRATOR,
-    GET_ADMINISTRATOR,
-    GET_ADMINISTRATORS,
-    UPDATE_ADMINISTRATOR,
-} from '../../../admin-ui/src/app/data/definitions/administrator-definitions';
-
 import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import { ADMINISTRATOR_FRAGMENT } from './graphql/fragments';
+import { Administrator, CreateAdministrator, GetAdministrator, GetAdministrators, UpdateAdministrator } from './graphql/generated-e2e-admin-types';
+import { CREATE_ADMINISTRATOR } from './graphql/shared-definitions';
 import { TestAdminClient } from './test-client';
 import { TestServer } from './test-server';
 import { assertThrowsWithMessage } from './utils/assert-throws-with-message';
@@ -125,3 +115,33 @@ describe('Administrator resolver', () => {
         ),
     );
 });
+
+export const GET_ADMINISTRATORS = gql`
+    query GetAdministrators($options: AdministratorListOptions) {
+        administrators(options: $options) {
+            items {
+                ...Administrator
+            }
+            totalItems
+        }
+    }
+    ${ADMINISTRATOR_FRAGMENT}
+`;
+
+export const GET_ADMINISTRATOR = gql`
+    query GetAdministrator($id: ID!) {
+        administrator(id: $id) {
+            ...Administrator
+        }
+    }
+    ${ADMINISTRATOR_FRAGMENT}
+`;
+
+export const UPDATE_ADMINISTRATOR = gql`
+    mutation UpdateAdministrator($input: UpdateAdministratorInput!) {
+        updateAdministrator(input: $input) {
+            ...Administrator
+        }
+    }
+    ${ADMINISTRATOR_FRAGMENT}
+`;

+ 9 - 19
packages/core/e2e/auth.e2e-spec.ts

@@ -1,3 +1,9 @@
+import { SUPER_ADMIN_USER_IDENTIFIER, SUPER_ADMIN_USER_PASSWORD } from '@vendure/common/lib/shared-constants';
+import { DocumentNode } from 'graphql';
+import gql from 'graphql-tag';
+import path from 'path';
+
+import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
 import {
     CreateAdministrator,
     CreateRole,
@@ -5,24 +11,8 @@ import {
     MutationLoginArgs,
     MutationUpdateProductArgs,
     Permission,
-} from '@vendure/common/lib/generated-types';
-import { SUPER_ADMIN_USER_IDENTIFIER, SUPER_ADMIN_USER_PASSWORD } from '@vendure/common/lib/shared-constants';
-import { DocumentNode } from 'graphql';
-import gql from 'graphql-tag';
-import path from 'path';
-
-import {
-    CREATE_ADMINISTRATOR,
-    CREATE_ROLE,
-} from '../../../admin-ui/src/app/data/definitions/administrator-definitions';
-import { ATTEMPT_LOGIN } from '../../../admin-ui/src/app/data/definitions/auth-definitions';
-import {
-    CREATE_PRODUCT,
-    GET_PRODUCT_LIST,
-    UPDATE_PRODUCT,
-} from '../../../admin-ui/src/app/data/definitions/product-definitions';
-
-import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+} from './graphql/generated-e2e-admin-types';
+import { ATTEMPT_LOGIN, CREATE_ADMINISTRATOR, CREATE_PRODUCT, CREATE_ROLE, GET_PRODUCT_LIST, UPDATE_PRODUCT } from './graphql/shared-definitions';
 import { TestAdminClient } from './test-client';
 import { TestServer } from './test-server';
 
@@ -115,7 +105,7 @@ describe('Authorization & permissions', () => {
 
             it('can read', async () => {
                 await assertRequestAllowed(gql`
-                    query {
+                    query GetCustomerCount {
                         customers {
                             totalItems
                         }

+ 111 - 77
packages/core/e2e/collection.e2e-spec.ts

@@ -1,4 +1,16 @@
 /* tslint:disable:no-non-null-assertion */
+import { ROOT_COLLECTION_NAME } from '@vendure/common/lib/shared-constants';
+import gql from 'graphql-tag';
+import path from 'path';
+
+import { StringOperator } from '../src/common/configurable-operation';
+import {
+    facetValueCollectionFilter,
+    variantNameCollectionFilter,
+} from '../src/config/collection/default-collection-filters';
+
+import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import { COLLECTION_FRAGMENT, FACET_VALUE_FRAGMENT } from './graphql/fragments';
 import {
     Collection,
     ConfigArgType,
@@ -7,6 +19,7 @@ import {
     FacetValue,
     GetAssetList,
     GetCollection,
+    GetCollectionProducts,
     LanguageCode,
     MoveCollection,
     ProductWithVariants,
@@ -14,23 +27,14 @@ import {
     UpdateCollection,
     UpdateProduct,
     UpdateProductVariants,
-} from '@vendure/common/lib/generated-types';
-import { ROOT_COLLECTION_NAME } from '@vendure/common/lib/shared-constants';
-import gql from 'graphql-tag';
-import path from 'path';
-
+} from './graphql/generated-e2e-admin-types';
 import {
     CREATE_COLLECTION,
-    GET_COLLECTION,
-    MOVE_COLLECTION,
+    GET_ASSET_LIST,
     UPDATE_COLLECTION,
-} from '../../../admin-ui/src/app/data/definitions/collection-definitions';
-import { FACET_VALUE_FRAGMENT } from '../../../admin-ui/src/app/data/definitions/facet-definitions';
-import { GET_ASSET_LIST, UPDATE_PRODUCT, UPDATE_PRODUCT_VARIANTS } from '../../../admin-ui/src/app/data/definitions/product-definitions';
-import { StringOperator } from '../src/common/configurable-operation';
-import { facetValueCollectionFilter, variantNameCollectionFilter } from '../src/config/collection/default-collection-filters';
-
-import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+    UPDATE_PRODUCT,
+    UPDATE_PRODUCT_VARIANTS,
+} from './graphql/shared-definitions';
 import { TestAdminClient } from './test-client';
 import { TestServer } from './test-server';
 import { assertThrowsWithMessage } from './utils/assert-throws-with-message';
@@ -97,10 +101,6 @@ describe('Collection resolver', () => {
             );
 
             electronicsCollection = result.createCollection;
-            // override the non-deterministic date fields
-            [electronicsCollection.featuredAsset, ...electronicsCollection.assets].forEach(asset => {
-                asset!.createdAt = '<date>';
-            });
             expect(electronicsCollection).toMatchSnapshot();
             expect(electronicsCollection.parent!.name).toBe(ROOT_COLLECTION_NAME);
         });
@@ -197,22 +197,18 @@ describe('Collection resolver', () => {
     });
 
     it('updateCollection', async () => {
-        const { updateCollection } = await client.query<UpdateCollection.Mutation, UpdateCollection.Variables>(
-            UPDATE_COLLECTION,
-            {
-                input: {
-                    id: pearCollection.id,
-                    assetIds: [assets[1].id],
-                    featuredAssetId: assets[1].id,
-                    translations: [{ languageCode: LanguageCode.en, description: 'Apple stuff ' }],
-                },
+        const { updateCollection } = await client.query<
+            UpdateCollection.Mutation,
+            UpdateCollection.Variables
+        >(UPDATE_COLLECTION, {
+            input: {
+                id: pearCollection.id,
+                assetIds: [assets[1].id],
+                featuredAssetId: assets[1].id,
+                translations: [{ languageCode: LanguageCode.en, description: 'Apple stuff ' }],
             },
-        );
-
-        // override the non-deterministic date fields
-        [updateCollection.featuredAsset, ...updateCollection.assets].forEach(asset => {
-            asset!.createdAt = '<date>';
         });
+
         expect(updateCollection).toMatchSnapshot();
     });
 
@@ -429,43 +425,47 @@ describe('Collection resolver', () => {
         });
 
         describe('variantName filter', () => {
-
-            async function createVariantNameFilteredCollection(operator: StringOperator, term: string): Promise<Collection.Fragment> {
-                const { createCollection } = await client.query<CreateCollection.Mutation, CreateCollection.Variables>(
-                    CREATE_COLLECTION,
-                    {
-                        input: {
-                            translations: [{ languageCode: LanguageCode.en, name: `${operator} ${term}`, description: '' }],
-                            filters: [
-                                {
-                                    code: variantNameCollectionFilter.code,
-                                    arguments: [
-                                        {
-                                            name: 'operator',
-                                            value: operator,
-                                            type: ConfigArgType.STRING_OPERATOR,
-                                        },
-                                        {
-                                            name: 'term',
-                                            value: term,
-                                            type: ConfigArgType.STRING,
-                                        },
-                                    ],
-                                },
-                            ],
-                        },
+            async function createVariantNameFilteredCollection(
+                operator: StringOperator,
+                term: string,
+            ): Promise<Collection.Fragment> {
+                const { createCollection } = await client.query<
+                    CreateCollection.Mutation,
+                    CreateCollection.Variables
+                >(CREATE_COLLECTION, {
+                    input: {
+                        translations: [
+                            { languageCode: LanguageCode.en, name: `${operator} ${term}`, description: '' },
+                        ],
+                        filters: [
+                            {
+                                code: variantNameCollectionFilter.code,
+                                arguments: [
+                                    {
+                                        name: 'operator',
+                                        value: operator,
+                                        type: ConfigArgType.STRING_OPERATOR,
+                                    },
+                                    {
+                                        name: 'term',
+                                        value: term,
+                                        type: ConfigArgType.STRING,
+                                    },
+                                ],
+                            },
+                        ],
                     },
-                );
+                });
                 return createCollection;
             }
 
             it('contains operator', async () => {
                 const collection = await createVariantNameFilteredCollection('contains', 'camera');
 
-                const result = await client.query(GET_COLLECTION_PRODUCT_VARIANTS, {
+                const result = await client.query<GetCollectionProducts.Query, GetCollectionProducts.Variables>(GET_COLLECTION_PRODUCT_VARIANTS, {
                     id: collection.id,
                 });
-                expect(result.collection.productVariants.items.map((i: any) => i.name)).toEqual([
+                expect(result.collection!.productVariants.items.map(i => i.name)).toEqual([
                     'Instant Camera',
                     'Camera Lens',
                     'SLR Camera',
@@ -475,21 +475,25 @@ describe('Collection resolver', () => {
             it('startsWith operator', async () => {
                 const collection = await createVariantNameFilteredCollection('startsWith', 'camera');
 
-                const result = await client.query(GET_COLLECTION_PRODUCT_VARIANTS, {
+                const result = await client.query<
+                    GetCollectionProducts.Query,
+                    GetCollectionProducts.Variables
+                >(GET_COLLECTION_PRODUCT_VARIANTS, {
                     id: collection.id,
                 });
-                expect(result.collection.productVariants.items.map((i: any) => i.name)).toEqual([
-                    'Camera Lens',
-                ]);
+                expect(result.collection!.productVariants.items.map(i => i.name)).toEqual(['Camera Lens']);
             });
 
             it('endsWith operator', async () => {
                 const collection = await createVariantNameFilteredCollection('endsWith', 'camera');
 
-                const result = await client.query(GET_COLLECTION_PRODUCT_VARIANTS, {
+                const result = await client.query<
+                    GetCollectionProducts.Query,
+                    GetCollectionProducts.Variables
+                >(GET_COLLECTION_PRODUCT_VARIANTS, {
                     id: collection.id,
                 });
-                expect(result.collection.productVariants.items.map((i: any) => i.name)).toEqual([
+                expect(result.collection!.productVariants.items.map(i => i.name)).toEqual([
                     'Instant Camera',
                     'SLR Camera',
                 ]);
@@ -498,10 +502,13 @@ describe('Collection resolver', () => {
             it('doesNotContain operator', async () => {
                 const collection = await createVariantNameFilteredCollection('doesNotContain', 'camera');
 
-                const result = await client.query(GET_COLLECTION_PRODUCT_VARIANTS, {
+                const result = await client.query<
+                    GetCollectionProducts.Query,
+                    GetCollectionProducts.Variables
+                >(GET_COLLECTION_PRODUCT_VARIANTS, {
                     id: collection.id,
                 });
-                expect(result.collection.productVariants.items.map((i: any) => i.name)).toEqual([
+                expect(result.collection!.productVariants.items.map(i => i.name)).toEqual([
                     'Laptop 13 inch 8GB',
                     'Laptop 15 inch 8GB',
                     'Laptop 13 inch 16GB',
@@ -529,7 +536,7 @@ describe('Collection resolver', () => {
 
             beforeAll(async () => {
                 const result = await client.query(gql`
-                    query {
+                    query GetProductsWithVariantIds {
                         products {
                             items {
                                 id
@@ -556,8 +563,11 @@ describe('Collection resolver', () => {
                     },
                 });
 
-                const result = await client.query(GET_COLLECTION_PRODUCT_VARIANTS, { id: pearCollection.id });
-                expect(result.collection.productVariants.items.map((i: any) => i.name)).toEqual([
+                const result = await client.query<
+                    GetCollectionProducts.Query,
+                    GetCollectionProducts.Variables
+                >(GET_COLLECTION_PRODUCT_VARIANTS, { id: pearCollection.id });
+                expect(result.collection!.productVariants.items.map(i => i.name)).toEqual([
                     'Laptop 13 inch 8GB',
                     'Laptop 15 inch 8GB',
                     'Laptop 13 inch 16GB',
@@ -581,8 +591,11 @@ describe('Collection resolver', () => {
                         ],
                     },
                 );
-                const result = await client.query(GET_COLLECTION_PRODUCT_VARIANTS, { id: pearCollection.id });
-                expect(result.collection.productVariants.items.map((i: any) => i.name)).toEqual([
+                const result = await client.query<
+                    GetCollectionProducts.Query,
+                    GetCollectionProducts.Variables
+                >(GET_COLLECTION_PRODUCT_VARIANTS, { id: pearCollection.id });
+                expect(result.collection!.productVariants.items.map(i => i.name)).toEqual([
                     'Laptop 13 inch 8GB',
                     'Laptop 15 inch 8GB',
                     'Laptop 13 inch 16GB',
@@ -607,8 +620,11 @@ describe('Collection resolver', () => {
                         ],
                     },
                 );
-                const result = await client.query(GET_COLLECTION_PRODUCT_VARIANTS, { id: pearCollection.id });
-                expect(result.collection.productVariants.items.map((i: any) => i.name)).toEqual([
+                const result = await client.query<
+                    GetCollectionProducts.Query,
+                    GetCollectionProducts.Variables
+                >(GET_COLLECTION_PRODUCT_VARIANTS, { id: pearCollection.id });
+                expect(result.collection!.productVariants.items.map(i => i.name)).toEqual([
                     'Laptop 13 inch 8GB',
                     'Laptop 15 inch 8GB',
                     'Laptop 13 inch 16GB',
@@ -644,8 +660,26 @@ describe('Collection resolver', () => {
     }
 });
 
+export const GET_COLLECTION = gql`
+    query GetCollection($id: ID!, $languageCode: LanguageCode) {
+        collection(id: $id, languageCode: $languageCode) {
+            ...Collection
+        }
+    }
+    ${COLLECTION_FRAGMENT}
+`;
+
+export const MOVE_COLLECTION = gql`
+    mutation MoveCollection($input: MoveCollectionInput!) {
+        moveCollection(input: $input) {
+            ...Collection
+        }
+    }
+    ${COLLECTION_FRAGMENT}
+`;
+
 const GET_FACET_VALUES = gql`
-    query {
+    query GetFacetValues {
         facets {
             items {
                 values {
@@ -690,7 +724,7 @@ const GET_COLLECTION_PRODUCT_VARIANTS = gql`
 `;
 
 const CREATE_COLLECTION_SELECT_VARIANTS = gql`
-    mutation($input: CreateCollectionInput!) {
+    mutation CreateCollectionSelectVariants($input: CreateCollectionInput!) {
         createCollection(input: $input) {
             productVariants {
                 items {

+ 22 - 16
packages/core/e2e/country.e2e-spec.ts

@@ -1,22 +1,10 @@
-import {
-    CreateCountry,
-    DeletionResult,
-    GetCountry,
-    GetCountryList,
-    LanguageCode,
-    UpdateCountry,
-} from '@vendure/common/lib/generated-types';
 import gql from 'graphql-tag';
 import path from 'path';
 
-import {
-    CREATE_COUNTRY,
-    GET_COUNTRY,
-    GET_COUNTRY_LIST,
-    UPDATE_COUNTRY,
-} from '../../../admin-ui/src/app/data/definitions/settings-definitions';
-
 import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import { COUNTRY_FRAGMENT } from './graphql/fragments';
+import { DeletionResult, GetCountryList, LanguageCode, GetCountry, UpdateCountry, CreateCountry } from './graphql/generated-e2e-admin-types';
+import { GET_COUNTRY_LIST, UPDATE_COUNTRY } from './graphql/shared-definitions';
 import { TestAdminClient } from './test-client';
 import { TestServer } from './test-server';
 
@@ -108,7 +96,7 @@ describe('Facet resolver', () => {
     });
 });
 
-const DELETE_COUNTRY = gql`
+export const DELETE_COUNTRY = gql`
     mutation DeleteCountry($id: ID!) {
         deleteCountry(id: $id) {
             result
@@ -116,3 +104,21 @@ const DELETE_COUNTRY = gql`
         }
     }
 `;
+
+export const GET_COUNTRY = gql`
+    query GetCountry($id: ID!) {
+        country(id: $id) {
+            ...Country
+        }
+    }
+    ${COUNTRY_FRAGMENT}
+`;
+
+export const CREATE_COUNTRY = gql`
+    mutation CreateCountry($input: CreateCountryInput!) {
+        createCountry(input: $input) {
+            ...Country
+        }
+    }
+    ${COUNTRY_FRAGMENT}
+`;

+ 16 - 19
packages/core/e2e/customer.e2e-spec.ts

@@ -1,19 +1,15 @@
-import { CreateCustomerAddress, DeletionResult, GetCustomer, GetCustomerList, UpdateCustomer } from '@vendure/common/lib/generated-types';
 import { omit } from '@vendure/common/lib/omit';
 import gql from 'graphql-tag';
 import path from 'path';
 
-import {
-    CREATE_CUSTOMER_ADDRESS,
-    GET_CUSTOMER,
-    GET_CUSTOMER_LIST,
-    UPDATE_CUSTOMER,
-} from '../../../admin-ui/src/app/data/definitions/customer-definitions';
-
 import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import { CreateAddress, DeletionResult, GetCustomer, GetCustomerList, UpdateCustomer } from './graphql/generated-e2e-admin-types';
+import { GET_CUSTOMER, GET_CUSTOMER_LIST } from './graphql/shared-definitions';
+import { ADD_ITEM_TO_ORDER } from './graphql/shop-definitions';
 import { TestAdminClient, TestShopClient } from './test-client';
 import { TestServer } from './test-server';
 import { assertThrowsWithMessage } from './utils/assert-throws-with-message';
+import { CUSTOMER_FRAGMENT } from './graphql/fragments';
 
 // tslint:disable:no-non-null-assertion
 
@@ -310,10 +306,10 @@ describe('Customer resolver', () => {
             'createCustomerAddress throws for deleted customer',
             assertThrowsWithMessage(
                 () =>
-                    adminClient.query<CreateCustomerAddress.Mutation, CreateCustomerAddress.Variables>(
-                        CREATE_CUSTOMER_ADDRESS,
+                    adminClient.query<CreateAddress.Mutation, CreateAddress.Variables>(
+                        CREATE_ADDRESS,
                         {
-                            customerId: thirdCustomer.id,
+                            id: thirdCustomer.id,
                             input: {
                                 streetLine1: 'test',
                                 countryCode: 'GB',
@@ -362,14 +358,6 @@ const UPDATE_ADDRESS = gql`
     }
 `;
 
-const ADD_ITEM_TO_ORDER = gql`
-    mutation AddItemToOrder($productVariantId: ID!, $quantity: Int!) {
-        addItemToOrder(productVariantId: $productVariantId, quantity: $quantity) {
-            id
-        }
-    }
-`;
-
 const GET_CUSTOMER_ORDERS = gql`
     query GetCustomerOrders($id: ID!) {
         customer(id: $id) {
@@ -383,6 +371,15 @@ const GET_CUSTOMER_ORDERS = gql`
     }
 `;
 
+export const UPDATE_CUSTOMER = gql`
+    mutation UpdateCustomer($input: UpdateCustomerInput!) {
+        updateCustomer(input: $input) {
+            ...Customer
+        }
+    }
+    ${CUSTOMER_FRAGMENT}
+`;
+
 const DELETE_CUSTOMER = gql`
     mutation DeleteCustomer($id: ID!) {
         deleteCustomer(id: $id) {

+ 39 - 33
packages/core/e2e/default-search-plugin.e2e-spec.ts

@@ -1,27 +1,33 @@
-import {
-    ConfigArgType,
-    CreateCollection,
-    LanguageCode,
-    SearchInput,
-    SearchProducts,
-    UpdateCollection,
-    UpdateProduct,
-    UpdateTaxRate,
-} from '@vendure/common/lib/generated-types';
 import { pick } from '@vendure/common/lib/pick';
 import gql from 'graphql-tag';
 import path from 'path';
 
-import { CREATE_COLLECTION, UPDATE_COLLECTION } from '../../../admin-ui/src/app/data/definitions/collection-definitions';
-import { CREATE_FACET } from '../../../admin-ui/src/app/data/definitions/facet-definitions';
-import { SEARCH_PRODUCTS, UPDATE_PRODUCT, UPDATE_PRODUCT_VARIANTS } from '../../../admin-ui/src/app/data/definitions/product-definitions';
-import { UPDATE_TAX_RATE } from '../../../admin-ui/src/app/data/definitions/settings-definitions';
-import { CreateFacet, UpdateProductVariants } from '../../common/src/generated-types';
 import { SimpleGraphQLClient } from '../mock-data/simple-graphql-client';
 import { facetValueCollectionFilter } from '../src/config/collection/default-collection-filters';
 import { DefaultSearchPlugin } from '../src/plugin/default-search-plugin/default-search-plugin';
 
 import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import {
+    ConfigArgType,
+    CreateCollection,
+    CreateFacet,
+    LanguageCode,
+    SearchInput,
+    UpdateCollection,
+    UpdateProduct,
+    UpdateProductVariants,
+    UpdateTaxRate,
+} from './graphql/generated-e2e-admin-types';
+import { SearchProductsShop } from './graphql/generated-e2e-shop-types';
+import {
+    CREATE_COLLECTION,
+    CREATE_FACET,
+    UPDATE_COLLECTION,
+    UPDATE_PRODUCT,
+    UPDATE_PRODUCT_VARIANTS,
+    UPDATE_TAX_RATE,
+} from './graphql/shared-definitions';
+import { SEARCH_PRODUCTS_SHOP } from './graphql/shop-definitions';
 import { TestAdminClient, TestShopClient } from './test-client';
 import { TestServer } from './test-server';
 
@@ -49,7 +55,7 @@ describe('Default search plugin', () => {
     });
 
     async function testGroupByProduct(client: SimpleGraphQLClient) {
-        const result = await client.query<SearchProducts.Query, SearchProducts.Variables>(SEARCH_PRODUCTS_SHOP, {
+        const result = await client.query<SearchProductsShop.Query, SearchProductsShop.Variables>(SEARCH_PRODUCTS_SHOP, {
             input: {
                 groupByProduct: true,
             },
@@ -58,7 +64,7 @@ describe('Default search plugin', () => {
     }
 
     async function testNoGrouping(client: SimpleGraphQLClient) {
-        const result = await client.query<SearchProducts.Query, SearchProducts.Variables>(SEARCH_PRODUCTS_SHOP, {
+        const result = await client.query<SearchProductsShop.Query, SearchProductsShop.Variables>(SEARCH_PRODUCTS_SHOP, {
             input: {
                 groupByProduct: false,
             },
@@ -67,7 +73,7 @@ describe('Default search plugin', () => {
     }
 
     async function testMatchSearchTerm(client: SimpleGraphQLClient) {
-        const result = await client.query<SearchProducts.Query, SearchProducts.Variables>(SEARCH_PRODUCTS_SHOP, {
+        const result = await client.query<SearchProductsShop.Query, SearchProductsShop.Variables>(SEARCH_PRODUCTS_SHOP, {
             input: {
                 term: 'camera',
                 groupByProduct: true,
@@ -81,7 +87,7 @@ describe('Default search plugin', () => {
     }
 
     async function testMatchFacetIds(client: SimpleGraphQLClient) {
-        const result = await client.query<SearchProducts.Query, SearchProducts.Variables>(SEARCH_PRODUCTS_SHOP, {
+        const result = await client.query<SearchProductsShop.Query, SearchProductsShop.Variables>(SEARCH_PRODUCTS_SHOP, {
             input: {
                 facetIds: ['T_1', 'T_2'],
                 groupByProduct: true,
@@ -98,7 +104,7 @@ describe('Default search plugin', () => {
     }
 
     async function testMatchCollectionId(client: SimpleGraphQLClient) {
-        const result = await client.query<SearchProducts.Query, SearchProducts.Variables>(SEARCH_PRODUCTS_SHOP, {
+        const result = await client.query<SearchProductsShop.Query, SearchProductsShop.Variables>(SEARCH_PRODUCTS_SHOP, {
             input: {
                 collectionId: 'T_2',
                 groupByProduct: true,
@@ -241,7 +247,7 @@ describe('Default search plugin', () => {
         });
 
         it('encodes the productId and productVariantId', async () => {
-            const result = await shopClient.query<SearchProducts.Query, SearchProducts.Variables>(SEARCH_PRODUCTS_SHOP, {
+            const result = await shopClient.query<SearchProductsShop.Query, SearchProductsShop.Variables>(SEARCH_PRODUCTS_SHOP, {
                 input: {
                     groupByProduct: false,
                     take: 1,
@@ -261,7 +267,7 @@ describe('Default search plugin', () => {
                     { id: 'T_3', enabled: false },
                 ],
             });
-            const result = await shopClient.query<SearchProducts.Query, SearchProducts.Variables>(SEARCH_PRODUCTS_SHOP, {
+            const result = await shopClient.query<SearchProductsShop.Query, SearchProductsShop.Variables>(SEARCH_PRODUCTS_SHOP, {
                 input: {
                     groupByProduct: false,
                     take: 3,
@@ -306,7 +312,7 @@ describe('Default search plugin', () => {
                 },
             });
 
-            const result = await adminClient.query<SearchProducts.Query, SearchProducts.Variables>(
+            const result = await adminClient.query<SearchProductsShop.Query, SearchProductsShop.Variables>(
                 SEARCH_PRODUCTS,
                 {
                     input: {
@@ -346,7 +352,7 @@ describe('Default search plugin', () => {
                 },
             );
 
-            const result = await adminClient.query<SearchProducts.Query, SearchProducts.Variables>(
+            const result = await adminClient.query<SearchProductsShop.Query, SearchProductsShop.Variables>(
                 SEARCH_PRODUCTS,
                 {
                     input: {
@@ -394,7 +400,7 @@ describe('Default search plugin', () => {
                 },
             });
 
-            const result = await adminClient.query<SearchProducts.Query, SearchProducts.Variables>(
+            const result = await adminClient.query<SearchProductsShop.Query, SearchProductsShop.Variables>(
                 SEARCH_PRODUCTS,
                 {
                     input: {
@@ -435,7 +441,7 @@ describe('Default search plugin', () => {
         });
 
         it('returns disabled field when not grouped', async () => {
-            const result = await adminClient.query<SearchProducts.Query, SearchProducts.Variables>(SEARCH_PRODUCTS, {
+            const result = await adminClient.query<SearchProductsShop.Query, SearchProductsShop.Variables>(SEARCH_PRODUCTS, {
                 input: {
                     groupByProduct: false,
                     take: 3,
@@ -455,7 +461,7 @@ describe('Default search plugin', () => {
                     { id: 'T_2', enabled: false },
                 ],
             });
-            const result = await adminClient.query<SearchProducts.Query, SearchProducts.Variables>(SEARCH_PRODUCTS, {
+            const result = await adminClient.query<SearchProductsShop.Query, SearchProductsShop.Variables>(SEARCH_PRODUCTS, {
                 input: {
                     groupByProduct: true,
                     take: 3,
@@ -474,7 +480,7 @@ describe('Default search plugin', () => {
                     { id: 'T_4', enabled: false },
                 ],
             });
-            const result = await adminClient.query<SearchProducts.Query, SearchProducts.Variables>(SEARCH_PRODUCTS, {
+            const result = await adminClient.query<SearchProductsShop.Query, SearchProductsShop.Variables>(SEARCH_PRODUCTS, {
                 input: {
                     groupByProduct: true,
                     take: 3,
@@ -494,7 +500,7 @@ describe('Default search plugin', () => {
                     enabled: false,
                 },
             });
-            const result = await adminClient.query<SearchProducts.Query, SearchProducts.Variables>(SEARCH_PRODUCTS, {
+            const result = await adminClient.query<SearchProductsShop.Query, SearchProductsShop.Variables>(SEARCH_PRODUCTS, {
                 input: {
                     groupByProduct: true,
                     take: 3,
@@ -509,11 +515,12 @@ describe('Default search plugin', () => {
     });
 });
 
-export const SEARCH_PRODUCTS_SHOP = gql`
-    query SearchProducts($input: SearchInput!) {
+export const SEARCH_PRODUCTS = gql`
+    query SearchProductsAdmin($input: SearchInput!) {
         search(input: $input) {
             totalItems
             items {
+                enabled
                 productId
                 productName
                 productPreview
@@ -521,14 +528,13 @@ export const SEARCH_PRODUCTS_SHOP = gql`
                 productVariantName
                 productVariantPreview
                 sku
-                collectionIds
             }
         }
     }
 `;
 
 export const SEARCH_GET_FACET_VALUES = gql`
-    query SearchProducts($input: SearchInput!) {
+    query SearchFacetValues($input: SearchInput!) {
         search(input: $input) {
             totalItems
             facetValues {

+ 7 - 8
packages/core/e2e/entity-id-strategy.e2e-spec.ts

@@ -1,10 +1,9 @@
-import { CreateFacet, LanguageCode } from '@vendure/common/lib/generated-types';
+/* tslint:disable:no-non-null-assertion */
 import gql from 'graphql-tag';
 import path from 'path';
 
-import { CREATE_FACET } from '../../../admin-ui/src/app/data/definitions/facet-definitions';
-
 import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import { EntityIdTest } from './graphql/generated-e2e-admin-types';
 import { TestShopClient } from './test-client';
 import { TestServer } from './test-server';
 
@@ -25,8 +24,8 @@ describe('EntityIdStrategy', () => {
     });
 
     it('Does not doubly-encode ids from resolved properties', async () => {
-        const result = await shopClient.query(gql`
-            query {
+        const result = await shopClient.query<EntityIdTest.Query>(gql`
+            query EntityIdTest {
                 product(id: "T_1", languageCode: en) {
                     id
                     variants {
@@ -40,8 +39,8 @@ describe('EntityIdStrategy', () => {
             }
         `);
 
-        expect(result.product.id).toBe('T_1');
-        expect(result.product.variants[0].id).toBe('T_1');
-        expect(result.product.variants[0].options[0].id).toBe('T_1');
+        expect(result.product!.id).toBe('T_1');
+        expect(result.product!.variants[0].id).toBe('T_1');
+        expect(result.product!.variants[0].options[0].id).toBe('T_1');
     });
 });

+ 35 - 14
packages/core/e2e/facet.e2e-spec.ts

@@ -1,3 +1,8 @@
+import gql from 'graphql-tag';
+import path from 'path';
+
+import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import { FACET_VALUE_FRAGMENT, FACET_WITH_VALUES_FRAGMENT } from './graphql/fragments';
 import {
     CreateFacet,
     CreateFacetValues,
@@ -12,26 +17,15 @@ import {
     UpdateFacetValues,
     UpdateProduct,
     UpdateProductVariants,
-} from '@vendure/common/lib/generated-types';
-import gql from 'graphql-tag';
-import path from 'path';
-
+} from './graphql/generated-e2e-admin-types';
 import {
     CREATE_FACET,
-    CREATE_FACET_VALUES,
     GET_FACET_LIST,
-    GET_FACET_WITH_VALUES,
-    UPDATE_FACET,
-    UPDATE_FACET_VALUES,
-} from '../../../admin-ui/src/app/data/definitions/facet-definitions';
-import {
-    GET_PRODUCT_LIST,
     GET_PRODUCT_WITH_VARIANTS,
+    UPDATE_FACET,
     UPDATE_PRODUCT,
     UPDATE_PRODUCT_VARIANTS,
-} from '../../../admin-ui/src/app/data/definitions/product-definitions';
-
-import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+} from './graphql/shared-definitions';
 import { TestAdminClient } from './test-client';
 import { TestServer } from './test-server';
 
@@ -306,6 +300,15 @@ describe('Facet resolver', () => {
     });
 });
 
+export const GET_FACET_WITH_VALUES = gql`
+    query GetFacetWithValues($id: ID!, $languageCode: LanguageCode) {
+        facet(id: $id, languageCode: $languageCode) {
+            ...FacetWithValues
+        }
+    }
+    ${FACET_WITH_VALUES_FRAGMENT}
+`;
+
 const DELETE_FACET_VALUES = gql`
     mutation DeleteFacetValue($ids: [ID!]!, $force: Boolean) {
         deleteFacetValues(ids: $ids, force: $force) {
@@ -339,3 +342,21 @@ const GET_PRODUCTS_LIST_WITH_VARIANTS = gql`
         }
     }
 `;
+
+export const CREATE_FACET_VALUES = gql`
+    mutation CreateFacetValues($input: [CreateFacetValueInput!]!) {
+        createFacetValues(input: $input) {
+            ...FacetValue
+        }
+    }
+    ${FACET_VALUE_FRAGMENT}
+`;
+
+export const UPDATE_FACET_VALUES = gql`
+    mutation UpdateFacetValues($input: [UpdateFacetValueInput!]!) {
+        updateFacetValues(input: $input) {
+            ...FacetValue
+        }
+    }
+    ${FACET_VALUE_FRAGMENT}
+`;

+ 444 - 0
packages/core/e2e/graphql/fragments.ts

@@ -0,0 +1,444 @@
+import gql from 'graphql-tag';
+
+export const ADMINISTRATOR_FRAGMENT = gql`
+    fragment Administrator on Administrator {
+        id
+        firstName
+        lastName
+        emailAddress
+        user {
+            id
+            identifier
+            lastLogin
+            roles {
+                id
+                code
+                description
+                permissions
+            }
+        }
+    }
+`;
+
+export const ASSET_FRAGMENT = gql`
+    fragment Asset on Asset {
+        id
+        name
+        fileSize
+        mimeType
+        type
+        preview
+        source
+    }
+`;
+
+export const PRODUCT_VARIANT_FRAGMENT = gql`
+    fragment ProductVariant on ProductVariant {
+        id
+        enabled
+        languageCode
+        name
+        price
+        currencyCode
+        priceIncludesTax
+        priceWithTax
+        stockOnHand
+        trackInventory
+        taxRateApplied {
+            id
+            name
+            value
+        }
+        taxCategory {
+            id
+            name
+        }
+        sku
+        options {
+            id
+            code
+            languageCode
+            name
+        }
+        facetValues {
+            id
+            code
+            name
+            facet {
+                id
+                name
+            }
+        }
+        featuredAsset {
+            ...Asset
+        }
+        assets {
+            ...Asset
+        }
+        translations {
+            id
+            languageCode
+            name
+        }
+    }
+    ${ASSET_FRAGMENT}
+`;
+
+export const PRODUCT_WITH_VARIANTS_FRAGMENT = gql`
+    fragment ProductWithVariants on Product {
+        id
+        enabled
+        languageCode
+        name
+        slug
+        description
+        featuredAsset {
+            ...Asset
+        }
+        assets {
+            ...Asset
+        }
+        translations {
+            languageCode
+            name
+            slug
+            description
+        }
+        optionGroups {
+            id
+            languageCode
+            code
+            name
+        }
+        variants {
+            ...ProductVariant
+        }
+        facetValues {
+            id
+            code
+            name
+            facet {
+                id
+                name
+            }
+        }
+    }
+    ${PRODUCT_VARIANT_FRAGMENT}
+    ${ASSET_FRAGMENT}
+`;
+
+export const ROLE_FRAGMENT = gql`
+    fragment Role on Role {
+        id
+        code
+        description
+        permissions
+        channels {
+            id
+            code
+            token
+        }
+    }
+`;
+
+export const CONFIGURABLE_FRAGMENT = gql`
+    fragment ConfigurableOperation on ConfigurableOperation {
+        args {
+            name
+            type
+            value
+        }
+        code
+        description
+    }
+`;
+
+export const COLLECTION_FRAGMENT = gql`
+    fragment Collection on Collection {
+        id
+        name
+        description
+        isPrivate
+        languageCode
+        featuredAsset {
+            ...Asset
+        }
+        assets {
+            ...Asset
+        }
+        filters {
+            ...ConfigurableOperation
+        }
+        translations {
+            id
+            languageCode
+            name
+            description
+        }
+        parent {
+            id
+            name
+        }
+        children {
+            id
+            name
+        }
+    }
+    ${ASSET_FRAGMENT}
+    ${CONFIGURABLE_FRAGMENT}
+`;
+
+export const FACET_VALUE_FRAGMENT = gql`
+    fragment FacetValue on FacetValue {
+        id
+        languageCode
+        code
+        name
+        translations {
+            id
+            languageCode
+            name
+        }
+        facet {
+            id
+            name
+        }
+    }
+`;
+
+export const FACET_WITH_VALUES_FRAGMENT = gql`
+    fragment FacetWithValues on Facet {
+        id
+        languageCode
+        isPrivate
+        code
+        name
+        translations {
+            id
+            languageCode
+            name
+        }
+        values {
+            ...FacetValue
+        }
+    }
+    ${FACET_VALUE_FRAGMENT}
+`;
+
+export const COUNTRY_FRAGMENT = gql`
+    fragment Country on Country {
+        id
+        code
+        name
+        enabled
+        translations {
+            id
+            languageCode
+            name
+        }
+    }
+`;
+
+
+export const ADDRESS_FRAGMENT = gql`
+    fragment Address on Address {
+        id
+        fullName
+        company
+        streetLine1
+        streetLine2
+        city
+        province
+        postalCode
+        country {
+            id
+            code
+            name
+        }
+        phoneNumber
+        defaultShippingAddress
+        defaultBillingAddress
+    }
+`;
+
+export const CUSTOMER_FRAGMENT = gql`
+    fragment Customer on Customer {
+        id
+        title
+        firstName
+        lastName
+        phoneNumber
+        emailAddress
+        user {
+            id
+            identifier
+            verified
+            lastLogin
+        }
+        addresses {
+            ...Address
+        }
+    }
+    ${ADDRESS_FRAGMENT}
+`;
+
+export const ADJUSTMENT_FRAGMENT = gql`
+    fragment Adjustment on Adjustment {
+        adjustmentSource
+        amount
+        description
+        type
+    }
+`;
+
+export const SHIPPING_ADDRESS_FRAGMENT = gql`
+    fragment ShippingAddress on OrderAddress {
+        fullName
+        company
+        streetLine1
+        streetLine2
+        city
+        province
+        postalCode
+        country
+        phoneNumber
+    }
+`;
+
+export const ORDER_FRAGMENT = gql`
+    fragment Order on Order {
+        id
+        createdAt
+        updatedAt
+        code
+        state
+        total
+        currencyCode
+        customer {
+            id
+            firstName
+            lastName
+        }
+    }
+`;
+
+export const ORDER_WITH_LINES_FRAGMENT = gql`
+    fragment OrderWithLines on Order {
+        id
+        createdAt
+        updatedAt
+        code
+        state
+        active
+        customer {
+            id
+            firstName
+            lastName
+        }
+        lines {
+            id
+            featuredAsset {
+                preview
+            }
+            productVariant {
+                id
+                name
+                sku
+            }
+            unitPrice
+            unitPriceWithTax
+            quantity
+            items {
+                id
+                unitPrice
+                unitPriceIncludesTax
+                unitPriceWithTax
+                taxRate
+            }
+            totalPrice
+        }
+        adjustments {
+            ...Adjustment
+        }
+        subTotal
+        subTotalBeforeTax
+        totalBeforeTax
+        currencyCode
+        shipping
+        shippingMethod {
+            id
+            code
+            description
+        }
+        shippingAddress {
+            ...ShippingAddress
+        }
+        payments {
+            id
+            transactionId
+            amount
+            method
+            state
+            metadata
+        }
+        total
+    }
+    ${ADJUSTMENT_FRAGMENT}
+    ${SHIPPING_ADDRESS_FRAGMENT}
+`;
+
+export const PROMOTION_FRAGMENT = gql`
+    fragment Promotion on Promotion {
+        id
+        createdAt
+        updatedAt
+        name
+        enabled
+        conditions {
+            ...ConfigurableOperation
+        }
+        actions {
+            ...ConfigurableOperation
+        }
+    }
+    ${CONFIGURABLE_FRAGMENT}
+`;
+
+export const ZONE_FRAGMENT = gql`
+    fragment Zone on Zone {
+        id
+        name
+        members {
+            ...Country
+        }
+    }
+    ${COUNTRY_FRAGMENT}
+`;
+
+export const TAX_RATE_FRAGMENT = gql`
+    fragment TaxRate on TaxRate {
+        id
+        name
+        enabled
+        value
+        category {
+            id
+            name
+        }
+        zone {
+            id
+            name
+        }
+        customerGroup {
+            id
+            name
+        }
+    }
+`;
+export const CURRENT_USER_FRAGMENT = gql`
+    fragment CurrentUser on CurrentUser {
+        id
+        identifier
+        channelTokens
+    }
+`;

+ 4907 - 0
packages/core/e2e/graphql/generated-e2e-admin-types.ts

@@ -0,0 +1,4907 @@
+// tslint:disable
+// Generated in 2019-05-07T17:59:48+02:00
+
+export type Maybe<T> = T | null;
+/** All built-in and custom scalars, mapped to their actual values */
+export type Scalars = {
+    ID: string;
+    String: string;
+    Boolean: boolean;
+    Int: number;
+    Float: number;
+    /** A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the
+     * `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO
+     * 8601 standard for representation of dates and times using the Gregorian calendar.
+     */
+    DateTime: any;
+    /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */
+    JSON: any;
+    /** The `Upload` scalar type represents a file upload. */
+    Upload: any;
+};
+
+export type Address = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    fullName?: Maybe<Scalars['String']>;
+    company?: Maybe<Scalars['String']>;
+    streetLine1: Scalars['String'];
+    streetLine2?: Maybe<Scalars['String']>;
+    city?: Maybe<Scalars['String']>;
+    province?: Maybe<Scalars['String']>;
+    postalCode?: Maybe<Scalars['String']>;
+    country: Country;
+    phoneNumber?: Maybe<Scalars['String']>;
+    defaultShippingAddress?: Maybe<Scalars['Boolean']>;
+    defaultBillingAddress?: Maybe<Scalars['Boolean']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type Adjustment = {
+    adjustmentSource: Scalars['String'];
+    type: AdjustmentType;
+    description: Scalars['String'];
+    amount: Scalars['Int'];
+};
+
+export type AdjustmentOperations = {
+    conditions: Array<ConfigurableOperation>;
+    actions: Array<ConfigurableOperation>;
+};
+
+export enum AdjustmentType {
+    TAX = 'TAX',
+    PROMOTION = 'PROMOTION',
+    SHIPPING = 'SHIPPING',
+    REFUND = 'REFUND',
+    TAX_REFUND = 'TAX_REFUND',
+    PROMOTION_REFUND = 'PROMOTION_REFUND',
+    SHIPPING_REFUND = 'SHIPPING_REFUND',
+}
+
+export type Administrator = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    firstName: Scalars['String'];
+    lastName: Scalars['String'];
+    emailAddress: Scalars['String'];
+    user: User;
+};
+
+export type AdministratorFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    firstName?: Maybe<StringOperators>;
+    lastName?: Maybe<StringOperators>;
+    emailAddress?: Maybe<StringOperators>;
+};
+
+export type AdministratorList = PaginatedList & {
+    items: Array<Administrator>;
+    totalItems: Scalars['Int'];
+};
+
+export type AdministratorListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<AdministratorSortParameter>;
+    filter?: Maybe<AdministratorFilterParameter>;
+};
+
+export type AdministratorSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    firstName?: Maybe<SortOrder>;
+    lastName?: Maybe<SortOrder>;
+    emailAddress?: Maybe<SortOrder>;
+};
+
+export type Asset = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    name: Scalars['String'];
+    type: AssetType;
+    fileSize: Scalars['Int'];
+    mimeType: Scalars['String'];
+    source: Scalars['String'];
+    preview: Scalars['String'];
+};
+
+export type AssetFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    name?: Maybe<StringOperators>;
+    type?: Maybe<StringOperators>;
+    fileSize?: Maybe<NumberOperators>;
+    mimeType?: Maybe<StringOperators>;
+    source?: Maybe<StringOperators>;
+    preview?: Maybe<StringOperators>;
+};
+
+export type AssetList = PaginatedList & {
+    items: Array<Asset>;
+    totalItems: Scalars['Int'];
+};
+
+export type AssetListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<AssetSortParameter>;
+    filter?: Maybe<AssetFilterParameter>;
+};
+
+export type AssetSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    name?: Maybe<SortOrder>;
+    fileSize?: Maybe<SortOrder>;
+    mimeType?: Maybe<SortOrder>;
+    source?: Maybe<SortOrder>;
+    preview?: Maybe<SortOrder>;
+};
+
+export enum AssetType {
+    IMAGE = 'IMAGE',
+    VIDEO = 'VIDEO',
+    BINARY = 'BINARY',
+}
+
+export type BooleanOperators = {
+    eq?: Maybe<Scalars['Boolean']>;
+};
+
+export type Cancellation = Node &
+    StockMovement & {
+        id: Scalars['ID'];
+        createdAt: Scalars['DateTime'];
+        updatedAt: Scalars['DateTime'];
+        productVariant: ProductVariant;
+        type: StockMovementType;
+        quantity: Scalars['Int'];
+        orderLine: OrderLine;
+    };
+
+export type Channel = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    code: Scalars['String'];
+    token: Scalars['String'];
+    defaultTaxZone?: Maybe<Zone>;
+    defaultShippingZone?: Maybe<Zone>;
+    defaultLanguageCode: LanguageCode;
+    currencyCode: CurrencyCode;
+    pricesIncludeTax: Scalars['Boolean'];
+};
+
+export type Collection = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode?: Maybe<LanguageCode>;
+    name: Scalars['String'];
+    breadcrumbs: Array<CollectionBreadcrumb>;
+    position: Scalars['Int'];
+    description: Scalars['String'];
+    featuredAsset?: Maybe<Asset>;
+    assets: Array<Asset>;
+    parent?: Maybe<Collection>;
+    children?: Maybe<Array<Collection>>;
+    filters: Array<ConfigurableOperation>;
+    translations: Array<CollectionTranslation>;
+    productVariants: ProductVariantList;
+    isPrivate: Scalars['Boolean'];
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type CollectionProductVariantsArgs = {
+    options?: Maybe<ProductVariantListOptions>;
+};
+
+export type CollectionBreadcrumb = {
+    id: Scalars['ID'];
+    name: Scalars['String'];
+};
+
+export type CollectionFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    languageCode?: Maybe<StringOperators>;
+    name?: Maybe<StringOperators>;
+    position?: Maybe<NumberOperators>;
+    description?: Maybe<StringOperators>;
+    isPrivate?: Maybe<BooleanOperators>;
+};
+
+export type CollectionList = PaginatedList & {
+    items: Array<Collection>;
+    totalItems: Scalars['Int'];
+};
+
+export type CollectionListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<CollectionSortParameter>;
+    filter?: Maybe<CollectionFilterParameter>;
+};
+
+export type CollectionSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    name?: Maybe<SortOrder>;
+    position?: Maybe<SortOrder>;
+    description?: Maybe<SortOrder>;
+};
+
+export type CollectionTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+    description: Scalars['String'];
+};
+
+export type CollectionTranslationInput = {
+    id?: Maybe<Scalars['ID']>;
+    languageCode: LanguageCode;
+    name?: Maybe<Scalars['String']>;
+    description?: Maybe<Scalars['String']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ConfigArg = {
+    name: Scalars['String'];
+    type: ConfigArgType;
+    value?: Maybe<Scalars['String']>;
+};
+
+export type ConfigArgInput = {
+    name: Scalars['String'];
+    type: ConfigArgType;
+    value?: Maybe<Scalars['String']>;
+};
+
+/** Certain entities allow arbitrary configuration arguments to be specified which can then
+ * be set in the admin-ui and used in the business logic of the app. These are the valid
+ * data types of such arguments. The data type influences:
+ *
+ * 1. How the argument form field is rendered in the admin-ui
+ * 2. The JavaScript type into which the value is coerced before being passed to the business logic.
+ */
+export enum ConfigArgType {
+    PERCENTAGE = 'PERCENTAGE',
+    MONEY = 'MONEY',
+    INT = 'INT',
+    STRING = 'STRING',
+    DATETIME = 'DATETIME',
+    BOOLEAN = 'BOOLEAN',
+    FACET_VALUE_IDS = 'FACET_VALUE_IDS',
+    STRING_OPERATOR = 'STRING_OPERATOR',
+}
+
+export type ConfigurableOperation = {
+    code: Scalars['String'];
+    args: Array<ConfigArg>;
+    description: Scalars['String'];
+};
+
+export type ConfigurableOperationInput = {
+    code: Scalars['String'];
+    arguments: Array<ConfigArgInput>;
+};
+
+export type Country = Node & {
+    id: Scalars['ID'];
+    languageCode: LanguageCode;
+    code: Scalars['String'];
+    name: Scalars['String'];
+    enabled: Scalars['Boolean'];
+    translations: Array<CountryTranslation>;
+};
+
+export type CountryFilterParameter = {
+    languageCode?: Maybe<StringOperators>;
+    code?: Maybe<StringOperators>;
+    name?: Maybe<StringOperators>;
+    enabled?: Maybe<BooleanOperators>;
+};
+
+export type CountryList = PaginatedList & {
+    items: Array<Country>;
+    totalItems: Scalars['Int'];
+};
+
+export type CountryListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<CountrySortParameter>;
+    filter?: Maybe<CountryFilterParameter>;
+};
+
+export type CountrySortParameter = {
+    id?: Maybe<SortOrder>;
+    code?: Maybe<SortOrder>;
+    name?: Maybe<SortOrder>;
+};
+
+export type CountryTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+};
+
+export type CountryTranslationInput = {
+    id?: Maybe<Scalars['ID']>;
+    languageCode: LanguageCode;
+    name?: Maybe<Scalars['String']>;
+};
+
+export type CreateAddressInput = {
+    fullName?: Maybe<Scalars['String']>;
+    company?: Maybe<Scalars['String']>;
+    streetLine1: Scalars['String'];
+    streetLine2?: Maybe<Scalars['String']>;
+    city?: Maybe<Scalars['String']>;
+    province?: Maybe<Scalars['String']>;
+    postalCode?: Maybe<Scalars['String']>;
+    countryCode: Scalars['String'];
+    phoneNumber?: Maybe<Scalars['String']>;
+    defaultShippingAddress?: Maybe<Scalars['Boolean']>;
+    defaultBillingAddress?: Maybe<Scalars['Boolean']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type CreateAdministratorInput = {
+    firstName: Scalars['String'];
+    lastName: Scalars['String'];
+    emailAddress: Scalars['String'];
+    password: Scalars['String'];
+    roleIds: Array<Scalars['ID']>;
+};
+
+export type CreateAssetInput = {
+    file: Scalars['Upload'];
+};
+
+export type CreateChannelInput = {
+    code: Scalars['String'];
+    token: Scalars['String'];
+    defaultLanguageCode: LanguageCode;
+    pricesIncludeTax: Scalars['Boolean'];
+    currencyCode: CurrencyCode;
+    defaultTaxZoneId?: Maybe<Scalars['ID']>;
+    defaultShippingZoneId?: Maybe<Scalars['ID']>;
+};
+
+export type CreateCollectionInput = {
+    isPrivate?: Maybe<Scalars['Boolean']>;
+    featuredAssetId?: Maybe<Scalars['ID']>;
+    assetIds?: Maybe<Array<Scalars['ID']>>;
+    parentId?: Maybe<Scalars['ID']>;
+    filters: Array<ConfigurableOperationInput>;
+    translations: Array<CollectionTranslationInput>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type CreateCountryInput = {
+    code: Scalars['String'];
+    translations: Array<CountryTranslationInput>;
+    enabled: Scalars['Boolean'];
+};
+
+export type CreateCustomerGroupInput = {
+    name: Scalars['String'];
+    customerIds?: Maybe<Array<Scalars['ID']>>;
+};
+
+export type CreateCustomerInput = {
+    title?: Maybe<Scalars['String']>;
+    firstName: Scalars['String'];
+    lastName: Scalars['String'];
+    phoneNumber?: Maybe<Scalars['String']>;
+    emailAddress: Scalars['String'];
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type CreateFacetInput = {
+    code: Scalars['String'];
+    isPrivate: Scalars['Boolean'];
+    translations: Array<FacetTranslationInput>;
+    values?: Maybe<Array<CreateFacetValueWithFacetInput>>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type CreateFacetValueInput = {
+    facetId: Scalars['ID'];
+    code: Scalars['String'];
+    translations: Array<FacetValueTranslationInput>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type CreateFacetValueWithFacetInput = {
+    code: Scalars['String'];
+    translations: Array<FacetValueTranslationInput>;
+};
+
+export type CreateProductInput = {
+    featuredAssetId?: Maybe<Scalars['ID']>;
+    assetIds?: Maybe<Array<Scalars['ID']>>;
+    facetValueIds?: Maybe<Array<Scalars['ID']>>;
+    translations: Array<ProductTranslationInput>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type CreateProductOptionGroupInput = {
+    code: Scalars['String'];
+    translations: Array<ProductOptionGroupTranslationInput>;
+    options: Array<CreateProductOptionInput>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type CreateProductOptionInput = {
+    code: Scalars['String'];
+    translations: Array<ProductOptionGroupTranslationInput>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type CreateProductVariantInput = {
+    translations: Array<ProductVariantTranslationInput>;
+    facetValueIds?: Maybe<Array<Scalars['ID']>>;
+    sku: Scalars['String'];
+    price?: Maybe<Scalars['Int']>;
+    taxCategoryId: Scalars['ID'];
+    optionIds?: Maybe<Array<Scalars['ID']>>;
+    featuredAssetId?: Maybe<Scalars['ID']>;
+    assetIds?: Maybe<Array<Scalars['ID']>>;
+    stockOnHand?: Maybe<Scalars['Int']>;
+    trackInventory?: Maybe<Scalars['Boolean']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type CreatePromotionInput = {
+    name: Scalars['String'];
+    enabled: Scalars['Boolean'];
+    conditions: Array<ConfigurableOperationInput>;
+    actions: Array<ConfigurableOperationInput>;
+};
+
+export type CreateRoleInput = {
+    code: Scalars['String'];
+    description: Scalars['String'];
+    permissions: Array<Permission>;
+};
+
+export type CreateShippingMethodInput = {
+    code: Scalars['String'];
+    description: Scalars['String'];
+    checker: ConfigurableOperationInput;
+    calculator: ConfigurableOperationInput;
+};
+
+export type CreateTaxCategoryInput = {
+    name: Scalars['String'];
+};
+
+export type CreateTaxRateInput = {
+    name: Scalars['String'];
+    enabled: Scalars['Boolean'];
+    value: Scalars['Int'];
+    categoryId: Scalars['ID'];
+    zoneId: Scalars['ID'];
+    customerGroupId?: Maybe<Scalars['ID']>;
+};
+
+export type CreateZoneInput = {
+    name: Scalars['String'];
+    memberIds?: Maybe<Array<Scalars['ID']>>;
+};
+
+/** ISO 4217 currency code */
+export enum CurrencyCode {
+    /** United Arab Emirates dirham */
+    AED = 'AED',
+    /** Afghan afghani */
+    AFN = 'AFN',
+    /** Albanian lek */
+    ALL = 'ALL',
+    /** Armenian dram */
+    AMD = 'AMD',
+    /** Netherlands Antillean guilder */
+    ANG = 'ANG',
+    /** Angolan kwanza */
+    AOA = 'AOA',
+    /** Argentine peso */
+    ARS = 'ARS',
+    /** Australian dollar */
+    AUD = 'AUD',
+    /** Aruban florin */
+    AWG = 'AWG',
+    /** Azerbaijani manat */
+    AZN = 'AZN',
+    /** Bosnia and Herzegovina convertible mark */
+    BAM = 'BAM',
+    /** Barbados dollar */
+    BBD = 'BBD',
+    /** Bangladeshi taka */
+    BDT = 'BDT',
+    /** Bulgarian lev */
+    BGN = 'BGN',
+    /** Bahraini dinar */
+    BHD = 'BHD',
+    /** Burundian franc */
+    BIF = 'BIF',
+    /** Bermudian dollar */
+    BMD = 'BMD',
+    /** Brunei dollar */
+    BND = 'BND',
+    /** Boliviano */
+    BOB = 'BOB',
+    /** Brazilian real */
+    BRL = 'BRL',
+    /** Bahamian dollar */
+    BSD = 'BSD',
+    /** Bhutanese ngultrum */
+    BTN = 'BTN',
+    /** Botswana pula */
+    BWP = 'BWP',
+    /** Belarusian ruble */
+    BYN = 'BYN',
+    /** Belize dollar */
+    BZD = 'BZD',
+    /** Canadian dollar */
+    CAD = 'CAD',
+    /** Congolese franc */
+    CHE = 'CHE',
+    /** Swiss franc */
+    CHW = 'CHW',
+    /** Chilean peso */
+    CLP = 'CLP',
+    /** Renminbi (Chinese) yuan */
+    CNY = 'CNY',
+    /** Colombian peso */
+    COP = 'COP',
+    /** Costa Rican colon */
+    CRC = 'CRC',
+    /** Cuban convertible peso */
+    CUC = 'CUC',
+    /** Cuban peso */
+    CUP = 'CUP',
+    /** Cape Verde escudo */
+    CVE = 'CVE',
+    /** Czech koruna */
+    CZK = 'CZK',
+    /** Djiboutian franc */
+    DJF = 'DJF',
+    /** Danish krone */
+    DKK = 'DKK',
+    /** Dominican peso */
+    DOP = 'DOP',
+    /** Algerian dinar */
+    DZD = 'DZD',
+    /** Egyptian pound */
+    EGP = 'EGP',
+    /** Eritrean nakfa */
+    ERN = 'ERN',
+    /** Ethiopian birr */
+    ETB = 'ETB',
+    /** Euro */
+    EUR = 'EUR',
+    /** Fiji dollar */
+    FJD = 'FJD',
+    /** Falkland Islands pound */
+    FKP = 'FKP',
+    /** Pound sterling */
+    GBP = 'GBP',
+    /** Georgian lari */
+    GEL = 'GEL',
+    /** Ghanaian cedi */
+    GHS = 'GHS',
+    /** Gibraltar pound */
+    GIP = 'GIP',
+    /** Gambian dalasi */
+    GMD = 'GMD',
+    /** Guinean franc */
+    GNF = 'GNF',
+    /** Guatemalan quetzal */
+    GTQ = 'GTQ',
+    /** Guyanese dollar */
+    GYD = 'GYD',
+    /** Hong Kong dollar */
+    HKD = 'HKD',
+    /** Honduran lempira */
+    HNL = 'HNL',
+    /** Croatian kuna */
+    HRK = 'HRK',
+    /** Haitian gourde */
+    HTG = 'HTG',
+    /** Hungarian forint */
+    HUF = 'HUF',
+    /** Indonesian rupiah */
+    IDR = 'IDR',
+    /** Israeli new shekel */
+    ILS = 'ILS',
+    /** Indian rupee */
+    INR = 'INR',
+    /** Iraqi dinar */
+    IQD = 'IQD',
+    /** Iranian rial */
+    IRR = 'IRR',
+    /** Icelandic króna */
+    ISK = 'ISK',
+    /** Jamaican dollar */
+    JMD = 'JMD',
+    /** Jordanian dinar */
+    JOD = 'JOD',
+    /** Japanese yen */
+    JPY = 'JPY',
+    /** Kenyan shilling */
+    KES = 'KES',
+    /** Kyrgyzstani som */
+    KGS = 'KGS',
+    /** Cambodian riel */
+    KHR = 'KHR',
+    /** Comoro franc */
+    KMF = 'KMF',
+    /** North Korean won */
+    KPW = 'KPW',
+    /** South Korean won */
+    KRW = 'KRW',
+    /** Kuwaiti dinar */
+    KWD = 'KWD',
+    /** Cayman Islands dollar */
+    KYD = 'KYD',
+    /** Kazakhstani tenge */
+    KZT = 'KZT',
+    /** Lao kip */
+    LAK = 'LAK',
+    /** Lebanese pound */
+    LBP = 'LBP',
+    /** Sri Lankan rupee */
+    LKR = 'LKR',
+    /** Liberian dollar */
+    LRD = 'LRD',
+    /** Lesotho loti */
+    LSL = 'LSL',
+    /** Libyan dinar */
+    LYD = 'LYD',
+    /** Moroccan dirham */
+    MAD = 'MAD',
+    /** Moldovan leu */
+    MDL = 'MDL',
+    /** Malagasy ariary */
+    MGA = 'MGA',
+    /** Macedonian denar */
+    MKD = 'MKD',
+    /** Myanmar kyat */
+    MMK = 'MMK',
+    /** Mongolian tögrög */
+    MNT = 'MNT',
+    /** Macanese pataca */
+    MOP = 'MOP',
+    /** Mauritanian ouguiya */
+    MRU = 'MRU',
+    /** Mauritian rupee */
+    MUR = 'MUR',
+    /** Maldivian rufiyaa */
+    MVR = 'MVR',
+    /** Malawian kwacha */
+    MWK = 'MWK',
+    /** Mexican peso */
+    MXN = 'MXN',
+    /** Malaysian ringgit */
+    MYR = 'MYR',
+    /** Mozambican metical */
+    MZN = 'MZN',
+    /** Namibian dollar */
+    NAD = 'NAD',
+    /** Nigerian naira */
+    NGN = 'NGN',
+    /** Nicaraguan córdoba */
+    NIO = 'NIO',
+    /** Norwegian krone */
+    NOK = 'NOK',
+    /** Nepalese rupee */
+    NPR = 'NPR',
+    /** New Zealand dollar */
+    NZD = 'NZD',
+    /** Omani rial */
+    OMR = 'OMR',
+    /** Panamanian balboa */
+    PAB = 'PAB',
+    /** Peruvian sol */
+    PEN = 'PEN',
+    /** Papua New Guinean kina */
+    PGK = 'PGK',
+    /** Philippine peso */
+    PHP = 'PHP',
+    /** Pakistani rupee */
+    PKR = 'PKR',
+    /** Polish złoty */
+    PLN = 'PLN',
+    /** Paraguayan guaraní */
+    PYG = 'PYG',
+    /** Qatari riyal */
+    QAR = 'QAR',
+    /** Romanian leu */
+    RON = 'RON',
+    /** Serbian dinar */
+    RSD = 'RSD',
+    /** Russian ruble */
+    RUB = 'RUB',
+    /** Rwandan franc */
+    RWF = 'RWF',
+    /** Saudi riyal */
+    SAR = 'SAR',
+    /** Solomon Islands dollar */
+    SBD = 'SBD',
+    /** Seychelles rupee */
+    SCR = 'SCR',
+    /** Sudanese pound */
+    SDG = 'SDG',
+    /** Swedish krona/kronor */
+    SEK = 'SEK',
+    /** Singapore dollar */
+    SGD = 'SGD',
+    /** Saint Helena pound */
+    SHP = 'SHP',
+    /** Sierra Leonean leone */
+    SLL = 'SLL',
+    /** Somali shilling */
+    SOS = 'SOS',
+    /** Surinamese dollar */
+    SRD = 'SRD',
+    /** South Sudanese pound */
+    SSP = 'SSP',
+    /** São Tomé and Príncipe dobra */
+    STN = 'STN',
+    /** Salvadoran colón */
+    SVC = 'SVC',
+    /** Syrian pound */
+    SYP = 'SYP',
+    /** Swazi lilangeni */
+    SZL = 'SZL',
+    /** Thai baht */
+    THB = 'THB',
+    /** Tajikistani somoni */
+    TJS = 'TJS',
+    /** Turkmenistan manat */
+    TMT = 'TMT',
+    /** Tunisian dinar */
+    TND = 'TND',
+    /** Tongan paʻanga */
+    TOP = 'TOP',
+    /** Turkish lira */
+    TRY = 'TRY',
+    /** Trinidad and Tobago dollar */
+    TTD = 'TTD',
+    /** New Taiwan dollar */
+    TWD = 'TWD',
+    /** Tanzanian shilling */
+    TZS = 'TZS',
+    /** Ukrainian hryvnia */
+    UAH = 'UAH',
+    /** Ugandan shilling */
+    UGX = 'UGX',
+    /** United States dollar */
+    USD = 'USD',
+    /** Uruguayan peso */
+    UYU = 'UYU',
+    /** Uzbekistan som */
+    UZS = 'UZS',
+    /** Venezuelan bolívar soberano */
+    VES = 'VES',
+    /** Vietnamese đồng */
+    VND = 'VND',
+    /** Vanuatu vatu */
+    VUV = 'VUV',
+    /** Samoan tala */
+    WST = 'WST',
+    /** CFA franc BEAC */
+    XAF = 'XAF',
+    /** East Caribbean dollar */
+    XCD = 'XCD',
+    /** CFA franc BCEAO */
+    XOF = 'XOF',
+    /** CFP franc (franc Pacifique) */
+    XPF = 'XPF',
+    /** Yemeni rial */
+    YER = 'YER',
+    /** South African rand */
+    ZAR = 'ZAR',
+    /** Zambian kwacha */
+    ZMW = 'ZMW',
+    /** Zimbabwean dollar */
+    ZWL = 'ZWL',
+}
+
+export type CurrentUser = {
+    id: Scalars['ID'];
+    identifier: Scalars['String'];
+    channelTokens: Array<Scalars['String']>;
+};
+
+export type Customer = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    title?: Maybe<Scalars['String']>;
+    firstName: Scalars['String'];
+    lastName: Scalars['String'];
+    phoneNumber?: Maybe<Scalars['String']>;
+    emailAddress: Scalars['String'];
+    addresses?: Maybe<Array<Address>>;
+    orders: OrderList;
+    user?: Maybe<User>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type CustomerOrdersArgs = {
+    options?: Maybe<OrderListOptions>;
+};
+
+export type CustomerFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    title?: Maybe<StringOperators>;
+    firstName?: Maybe<StringOperators>;
+    lastName?: Maybe<StringOperators>;
+    phoneNumber?: Maybe<StringOperators>;
+    emailAddress?: Maybe<StringOperators>;
+};
+
+export type CustomerGroup = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    name: Scalars['String'];
+};
+
+export type CustomerList = PaginatedList & {
+    items: Array<Customer>;
+    totalItems: Scalars['Int'];
+};
+
+export type CustomerListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<CustomerSortParameter>;
+    filter?: Maybe<CustomerFilterParameter>;
+};
+
+export type CustomerSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    title?: Maybe<SortOrder>;
+    firstName?: Maybe<SortOrder>;
+    lastName?: Maybe<SortOrder>;
+    phoneNumber?: Maybe<SortOrder>;
+    emailAddress?: Maybe<SortOrder>;
+};
+
+export type DateOperators = {
+    eq?: Maybe<Scalars['DateTime']>;
+    before?: Maybe<Scalars['DateTime']>;
+    after?: Maybe<Scalars['DateTime']>;
+    between?: Maybe<DateRange>;
+};
+
+export type DateRange = {
+    start: Scalars['DateTime'];
+    end: Scalars['DateTime'];
+};
+
+export type DeletionResponse = {
+    result: DeletionResult;
+    message?: Maybe<Scalars['String']>;
+};
+
+export enum DeletionResult {
+    /** The entity was successfully deleted */
+    DELETED = 'DELETED',
+    /** Deletion did not take place, reason given in message */
+    NOT_DELETED = 'NOT_DELETED',
+}
+
+export type Facet = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+    code: Scalars['String'];
+    values: Array<FacetValue>;
+    translations: Array<FacetTranslation>;
+    isPrivate: Scalars['Boolean'];
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type FacetFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    languageCode?: Maybe<StringOperators>;
+    name?: Maybe<StringOperators>;
+    code?: Maybe<StringOperators>;
+    isPrivate?: Maybe<BooleanOperators>;
+};
+
+export type FacetList = PaginatedList & {
+    items: Array<Facet>;
+    totalItems: Scalars['Int'];
+};
+
+export type FacetListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<FacetSortParameter>;
+    filter?: Maybe<FacetFilterParameter>;
+};
+
+export type FacetSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    name?: Maybe<SortOrder>;
+    code?: Maybe<SortOrder>;
+};
+
+export type FacetTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+};
+
+export type FacetTranslationInput = {
+    id?: Maybe<Scalars['ID']>;
+    languageCode: LanguageCode;
+    name?: Maybe<Scalars['String']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type FacetValue = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    facet: Facet;
+    name: Scalars['String'];
+    code: Scalars['String'];
+    translations: Array<FacetValueTranslation>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+/** Which FacetValues are present in the products returned
+ * by the search, and in what quantity.
+ */
+export type FacetValueResult = {
+    facetValue: FacetValue;
+    count: Scalars['Int'];
+};
+
+export type FacetValueTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+};
+
+export type FacetValueTranslationInput = {
+    id?: Maybe<Scalars['ID']>;
+    languageCode: LanguageCode;
+    name?: Maybe<Scalars['String']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type GlobalSettings = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    availableLanguages: Array<LanguageCode>;
+    trackInventory: Scalars['Boolean'];
+    serverConfig: ServerConfig;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ImportInfo = {
+    errors?: Maybe<Array<Scalars['String']>>;
+    processed: Scalars['Int'];
+    imported: Scalars['Int'];
+};
+
+/** ISO 639-1 language code */
+export enum LanguageCode {
+    /** Afar */
+    aa = 'aa',
+    /** Abkhazian */
+    ab = 'ab',
+    /** Afrikaans */
+    af = 'af',
+    /** Akan */
+    ak = 'ak',
+    /** Albanian */
+    sq = 'sq',
+    /** Amharic */
+    am = 'am',
+    /** Arabic */
+    ar = 'ar',
+    /** Aragonese */
+    an = 'an',
+    /** Armenian */
+    hy = 'hy',
+    /** Assamese */
+    as = 'as',
+    /** Avaric */
+    av = 'av',
+    /** Avestan */
+    ae = 'ae',
+    /** Aymara */
+    ay = 'ay',
+    /** Azerbaijani */
+    az = 'az',
+    /** Bashkir */
+    ba = 'ba',
+    /** Bambara */
+    bm = 'bm',
+    /** Basque */
+    eu = 'eu',
+    /** Belarusian */
+    be = 'be',
+    /** Bengali */
+    bn = 'bn',
+    /** Bihari languages */
+    bh = 'bh',
+    /** Bislama */
+    bi = 'bi',
+    /** Bosnian */
+    bs = 'bs',
+    /** Breton */
+    br = 'br',
+    /** Bulgarian */
+    bg = 'bg',
+    /** Burmese */
+    my = 'my',
+    /** Catalan; Valencian */
+    ca = 'ca',
+    /** Chamorro */
+    ch = 'ch',
+    /** Chechen */
+    ce = 'ce',
+    /** Chinese */
+    zh = 'zh',
+    /** Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic */
+    cu = 'cu',
+    /** Chuvash */
+    cv = 'cv',
+    /** Cornish */
+    kw = 'kw',
+    /** Corsican */
+    co = 'co',
+    /** Cree */
+    cr = 'cr',
+    /** Czech */
+    cs = 'cs',
+    /** Danish */
+    da = 'da',
+    /** Divehi; Dhivehi; Maldivian */
+    dv = 'dv',
+    /** Dutch; Flemish */
+    nl = 'nl',
+    /** Dzongkha */
+    dz = 'dz',
+    /** English */
+    en = 'en',
+    /** Esperanto */
+    eo = 'eo',
+    /** Estonian */
+    et = 'et',
+    /** Ewe */
+    ee = 'ee',
+    /** Faroese */
+    fo = 'fo',
+    /** Fijian */
+    fj = 'fj',
+    /** Finnish */
+    fi = 'fi',
+    /** French */
+    fr = 'fr',
+    /** Western Frisian */
+    fy = 'fy',
+    /** Fulah */
+    ff = 'ff',
+    /** Georgian */
+    ka = 'ka',
+    /** German */
+    de = 'de',
+    /** Gaelic; Scottish Gaelic */
+    gd = 'gd',
+    /** Irish */
+    ga = 'ga',
+    /** Galician */
+    gl = 'gl',
+    /** Manx */
+    gv = 'gv',
+    /** Greek, Modern (1453-) */
+    el = 'el',
+    /** Guarani */
+    gn = 'gn',
+    /** Gujarati */
+    gu = 'gu',
+    /** Haitian; Haitian Creole */
+    ht = 'ht',
+    /** Hausa */
+    ha = 'ha',
+    /** Hebrew */
+    he = 'he',
+    /** Herero */
+    hz = 'hz',
+    /** Hindi */
+    hi = 'hi',
+    /** Hiri Motu */
+    ho = 'ho',
+    /** Croatian */
+    hr = 'hr',
+    /** Hungarian */
+    hu = 'hu',
+    /** Igbo */
+    ig = 'ig',
+    /** Icelandic */
+    is = 'is',
+    /** Ido */
+    io = 'io',
+    /** Sichuan Yi; Nuosu */
+    ii = 'ii',
+    /** Inuktitut */
+    iu = 'iu',
+    /** Interlingue; Occidental */
+    ie = 'ie',
+    /** Interlingua (International Auxiliary Language Association) */
+    ia = 'ia',
+    /** Indonesian */
+    id = 'id',
+    /** Inupiaq */
+    ik = 'ik',
+    /** Italian */
+    it = 'it',
+    /** Javanese */
+    jv = 'jv',
+    /** Japanese */
+    ja = 'ja',
+    /** Kalaallisut; Greenlandic */
+    kl = 'kl',
+    /** Kannada */
+    kn = 'kn',
+    /** Kashmiri */
+    ks = 'ks',
+    /** Kanuri */
+    kr = 'kr',
+    /** Kazakh */
+    kk = 'kk',
+    /** Central Khmer */
+    km = 'km',
+    /** Kikuyu; Gikuyu */
+    ki = 'ki',
+    /** Kinyarwanda */
+    rw = 'rw',
+    /** Kirghiz; Kyrgyz */
+    ky = 'ky',
+    /** Komi */
+    kv = 'kv',
+    /** Kongo */
+    kg = 'kg',
+    /** Korean */
+    ko = 'ko',
+    /** Kuanyama; Kwanyama */
+    kj = 'kj',
+    /** Kurdish */
+    ku = 'ku',
+    /** Lao */
+    lo = 'lo',
+    /** Latin */
+    la = 'la',
+    /** Latvian */
+    lv = 'lv',
+    /** Limburgan; Limburger; Limburgish */
+    li = 'li',
+    /** Lingala */
+    ln = 'ln',
+    /** Lithuanian */
+    lt = 'lt',
+    /** Luxembourgish; Letzeburgesch */
+    lb = 'lb',
+    /** Luba-Katanga */
+    lu = 'lu',
+    /** Ganda */
+    lg = 'lg',
+    /** Macedonian */
+    mk = 'mk',
+    /** Marshallese */
+    mh = 'mh',
+    /** Malayalam */
+    ml = 'ml',
+    /** Maori */
+    mi = 'mi',
+    /** Marathi */
+    mr = 'mr',
+    /** Malay */
+    ms = 'ms',
+    /** Malagasy */
+    mg = 'mg',
+    /** Maltese */
+    mt = 'mt',
+    /** Mongolian */
+    mn = 'mn',
+    /** Nauru */
+    na = 'na',
+    /** Navajo; Navaho */
+    nv = 'nv',
+    /** Ndebele, South; South Ndebele */
+    nr = 'nr',
+    /** Ndebele, North; North Ndebele */
+    nd = 'nd',
+    /** Ndonga */
+    ng = 'ng',
+    /** Nepali */
+    ne = 'ne',
+    /** Norwegian Nynorsk; Nynorsk, Norwegian */
+    nn = 'nn',
+    /** Bokmål, Norwegian; Norwegian Bokmål */
+    nb = 'nb',
+    /** Norwegian */
+    no = 'no',
+    /** Chichewa; Chewa; Nyanja */
+    ny = 'ny',
+    /** Occitan (post 1500); Provençal */
+    oc = 'oc',
+    /** Ojibwa */
+    oj = 'oj',
+    /** Oriya */
+    or = 'or',
+    /** Oromo */
+    om = 'om',
+    /** Ossetian; Ossetic */
+    os = 'os',
+    /** Panjabi; Punjabi */
+    pa = 'pa',
+    /** Persian */
+    fa = 'fa',
+    /** Pali */
+    pi = 'pi',
+    /** Polish */
+    pl = 'pl',
+    /** Portuguese */
+    pt = 'pt',
+    /** Pushto; Pashto */
+    ps = 'ps',
+    /** Quechua */
+    qu = 'qu',
+    /** Romansh */
+    rm = 'rm',
+    /** Romanian; Moldavian; Moldovan */
+    ro = 'ro',
+    /** Rundi */
+    rn = 'rn',
+    /** Russian */
+    ru = 'ru',
+    /** Sango */
+    sg = 'sg',
+    /** Sanskrit */
+    sa = 'sa',
+    /** Sinhala; Sinhalese */
+    si = 'si',
+    /** Slovak */
+    sk = 'sk',
+    /** Slovenian */
+    sl = 'sl',
+    /** Northern Sami */
+    se = 'se',
+    /** Samoan */
+    sm = 'sm',
+    /** Shona */
+    sn = 'sn',
+    /** Sindhi */
+    sd = 'sd',
+    /** Somali */
+    so = 'so',
+    /** Sotho, Southern */
+    st = 'st',
+    /** Spanish; Castilian */
+    es = 'es',
+    /** Sardinian */
+    sc = 'sc',
+    /** Serbian */
+    sr = 'sr',
+    /** Swati */
+    ss = 'ss',
+    /** Sundanese */
+    su = 'su',
+    /** Swahili */
+    sw = 'sw',
+    /** Swedish */
+    sv = 'sv',
+    /** Tahitian */
+    ty = 'ty',
+    /** Tamil */
+    ta = 'ta',
+    /** Tatar */
+    tt = 'tt',
+    /** Telugu */
+    te = 'te',
+    /** Tajik */
+    tg = 'tg',
+    /** Tagalog */
+    tl = 'tl',
+    /** Thai */
+    th = 'th',
+    /** Tibetan */
+    bo = 'bo',
+    /** Tigrinya */
+    ti = 'ti',
+    /** Tonga (Tonga Islands) */
+    to = 'to',
+    /** Tswana */
+    tn = 'tn',
+    /** Tsonga */
+    ts = 'ts',
+    /** Turkmen */
+    tk = 'tk',
+    /** Turkish */
+    tr = 'tr',
+    /** Twi */
+    tw = 'tw',
+    /** Uighur; Uyghur */
+    ug = 'ug',
+    /** Ukrainian */
+    uk = 'uk',
+    /** Urdu */
+    ur = 'ur',
+    /** Uzbek */
+    uz = 'uz',
+    /** Venda */
+    ve = 've',
+    /** Vietnamese */
+    vi = 'vi',
+    /** Volapük */
+    vo = 'vo',
+    /** Welsh */
+    cy = 'cy',
+    /** Walloon */
+    wa = 'wa',
+    /** Wolof */
+    wo = 'wo',
+    /** Xhosa */
+    xh = 'xh',
+    /** Yiddish */
+    yi = 'yi',
+    /** Yoruba */
+    yo = 'yo',
+    /** Zhuang; Chuang */
+    za = 'za',
+    /** Zulu */
+    zu = 'zu',
+}
+
+export type LoginResult = {
+    user: CurrentUser;
+};
+
+export type MoveCollectionInput = {
+    collectionId: Scalars['ID'];
+    parentId: Scalars['ID'];
+    index: Scalars['Int'];
+};
+
+export type Mutation = {
+    /** Create a new Administrator */
+    createAdministrator: Administrator;
+    /** Update an existing Administrator */
+    updateAdministrator: Administrator;
+    /** Assign a Role to an Administrator */
+    assignRoleToAdministrator: Administrator;
+    login: LoginResult;
+    logout: Scalars['Boolean'];
+    /** Create a new Asset */
+    createAssets: Array<Asset>;
+    /** Create a new Collection */
+    createCollection: Collection;
+    /** Update an existing Collection */
+    updateCollection: Collection;
+    /** Move a Collection to a different parent or index */
+    moveCollection: Collection;
+    /** Create a new Channel */
+    createChannel: Channel;
+    /** Update an existing Channel */
+    updateChannel: Channel;
+    /** Create a new Country */
+    createCountry: Country;
+    /** Update an existing Country */
+    updateCountry: Country;
+    /** Delete a Country */
+    deleteCountry: DeletionResponse;
+    /** Create a new CustomerGroup */
+    createCustomerGroup: CustomerGroup;
+    /** Update an existing CustomerGroup */
+    updateCustomerGroup: CustomerGroup;
+    /** Add Customers to a CustomerGroup */
+    addCustomersToGroup: CustomerGroup;
+    /** Remove Customers from a CustomerGroup */
+    removeCustomersFromGroup: CustomerGroup;
+    /** Create a new Customer. If a password is provided, a new User will also be created an linked to the Customer. */
+    createCustomer: Customer;
+    /** Update an existing Customer */
+    updateCustomer: Customer;
+    /** Delete a Customer */
+    deleteCustomer: DeletionResponse;
+    /** Create a new Address and associate it with the Customer specified by customerId */
+    createCustomerAddress: Address;
+    /** Update an existing Address */
+    updateCustomerAddress: Address;
+    /** Update an existing Address */
+    deleteCustomerAddress: Scalars['Boolean'];
+    /** Create a new Facet */
+    createFacet: Facet;
+    /** Update an existing Facet */
+    updateFacet: Facet;
+    /** Delete an existing Facet */
+    deleteFacet: DeletionResponse;
+    /** Create one or more FacetValues */
+    createFacetValues: Array<FacetValue>;
+    /** Update one or more FacetValues */
+    updateFacetValues: Array<FacetValue>;
+    /** Delete one or more FacetValues */
+    deleteFacetValues: Array<DeletionResponse>;
+    updateGlobalSettings: GlobalSettings;
+    importProducts?: Maybe<ImportInfo>;
+    /** Update an existing PaymentMethod */
+    updatePaymentMethod: PaymentMethod;
+    /** Create a new ProductOptionGroup */
+    createProductOptionGroup: ProductOptionGroup;
+    /** Update an existing ProductOptionGroup */
+    updateProductOptionGroup: ProductOptionGroup;
+    reindex: SearchReindexResponse;
+    /** Create a new Product */
+    createProduct: Product;
+    /** Update an existing Product */
+    updateProduct: Product;
+    /** Delete a Product */
+    deleteProduct: DeletionResponse;
+    /** Add an OptionGroup to a Product */
+    addOptionGroupToProduct: Product;
+    /** Remove an OptionGroup from a Product */
+    removeOptionGroupFromProduct: Product;
+    /** Create a set of ProductVariants based on the OptionGroups assigned to the given Product */
+    generateVariantsForProduct: Product;
+    /** Update existing ProductVariants */
+    updateProductVariants: Array<Maybe<ProductVariant>>;
+    createPromotion: Promotion;
+    updatePromotion: Promotion;
+    deletePromotion: DeletionResponse;
+    /** Create a new Role */
+    createRole: Role;
+    /** Update an existing Role */
+    updateRole: Role;
+    /** Create a new ShippingMethod */
+    createShippingMethod: ShippingMethod;
+    /** Update an existing ShippingMethod */
+    updateShippingMethod: ShippingMethod;
+    /** Create a new TaxCategory */
+    createTaxCategory: TaxCategory;
+    /** Update an existing TaxCategory */
+    updateTaxCategory: TaxCategory;
+    /** Create a new TaxRate */
+    createTaxRate: TaxRate;
+    /** Update an existing TaxRate */
+    updateTaxRate: TaxRate;
+    /** Create a new Zone */
+    createZone: Zone;
+    /** Update an existing Zone */
+    updateZone: Zone;
+    /** Delete a Zone */
+    deleteZone: DeletionResponse;
+    /** Add members to a Zone */
+    addMembersToZone: Zone;
+    /** Remove members from a Zone */
+    removeMembersFromZone: Zone;
+};
+
+export type MutationCreateAdministratorArgs = {
+    input: CreateAdministratorInput;
+};
+
+export type MutationUpdateAdministratorArgs = {
+    input: UpdateAdministratorInput;
+};
+
+export type MutationAssignRoleToAdministratorArgs = {
+    administratorId: Scalars['ID'];
+    roleId: Scalars['ID'];
+};
+
+export type MutationLoginArgs = {
+    username: Scalars['String'];
+    password: Scalars['String'];
+    rememberMe?: Maybe<Scalars['Boolean']>;
+};
+
+export type MutationCreateAssetsArgs = {
+    input: Array<CreateAssetInput>;
+};
+
+export type MutationCreateCollectionArgs = {
+    input: CreateCollectionInput;
+};
+
+export type MutationUpdateCollectionArgs = {
+    input: UpdateCollectionInput;
+};
+
+export type MutationMoveCollectionArgs = {
+    input: MoveCollectionInput;
+};
+
+export type MutationCreateChannelArgs = {
+    input: CreateChannelInput;
+};
+
+export type MutationUpdateChannelArgs = {
+    input: UpdateChannelInput;
+};
+
+export type MutationCreateCountryArgs = {
+    input: CreateCountryInput;
+};
+
+export type MutationUpdateCountryArgs = {
+    input: UpdateCountryInput;
+};
+
+export type MutationDeleteCountryArgs = {
+    id: Scalars['ID'];
+};
+
+export type MutationCreateCustomerGroupArgs = {
+    input: CreateCustomerGroupInput;
+};
+
+export type MutationUpdateCustomerGroupArgs = {
+    input: UpdateCustomerGroupInput;
+};
+
+export type MutationAddCustomersToGroupArgs = {
+    customerGroupId: Scalars['ID'];
+    customerIds: Array<Scalars['ID']>;
+};
+
+export type MutationRemoveCustomersFromGroupArgs = {
+    customerGroupId: Scalars['ID'];
+    customerIds: Array<Scalars['ID']>;
+};
+
+export type MutationCreateCustomerArgs = {
+    input: CreateCustomerInput;
+    password?: Maybe<Scalars['String']>;
+};
+
+export type MutationUpdateCustomerArgs = {
+    input: UpdateCustomerInput;
+};
+
+export type MutationDeleteCustomerArgs = {
+    id: Scalars['ID'];
+};
+
+export type MutationCreateCustomerAddressArgs = {
+    customerId: Scalars['ID'];
+    input: CreateAddressInput;
+};
+
+export type MutationUpdateCustomerAddressArgs = {
+    input: UpdateAddressInput;
+};
+
+export type MutationDeleteCustomerAddressArgs = {
+    id: Scalars['ID'];
+};
+
+export type MutationCreateFacetArgs = {
+    input: CreateFacetInput;
+};
+
+export type MutationUpdateFacetArgs = {
+    input: UpdateFacetInput;
+};
+
+export type MutationDeleteFacetArgs = {
+    id: Scalars['ID'];
+    force?: Maybe<Scalars['Boolean']>;
+};
+
+export type MutationCreateFacetValuesArgs = {
+    input: Array<CreateFacetValueInput>;
+};
+
+export type MutationUpdateFacetValuesArgs = {
+    input: Array<UpdateFacetValueInput>;
+};
+
+export type MutationDeleteFacetValuesArgs = {
+    ids: Array<Scalars['ID']>;
+    force?: Maybe<Scalars['Boolean']>;
+};
+
+export type MutationUpdateGlobalSettingsArgs = {
+    input: UpdateGlobalSettingsInput;
+};
+
+export type MutationImportProductsArgs = {
+    csvFile: Scalars['Upload'];
+};
+
+export type MutationUpdatePaymentMethodArgs = {
+    input: UpdatePaymentMethodInput;
+};
+
+export type MutationCreateProductOptionGroupArgs = {
+    input: CreateProductOptionGroupInput;
+};
+
+export type MutationUpdateProductOptionGroupArgs = {
+    input: UpdateProductOptionGroupInput;
+};
+
+export type MutationCreateProductArgs = {
+    input: CreateProductInput;
+};
+
+export type MutationUpdateProductArgs = {
+    input: UpdateProductInput;
+};
+
+export type MutationDeleteProductArgs = {
+    id: Scalars['ID'];
+};
+
+export type MutationAddOptionGroupToProductArgs = {
+    productId: Scalars['ID'];
+    optionGroupId: Scalars['ID'];
+};
+
+export type MutationRemoveOptionGroupFromProductArgs = {
+    productId: Scalars['ID'];
+    optionGroupId: Scalars['ID'];
+};
+
+export type MutationGenerateVariantsForProductArgs = {
+    productId: Scalars['ID'];
+    defaultTaxCategoryId?: Maybe<Scalars['ID']>;
+    defaultPrice?: Maybe<Scalars['Int']>;
+    defaultSku?: Maybe<Scalars['String']>;
+};
+
+export type MutationUpdateProductVariantsArgs = {
+    input: Array<UpdateProductVariantInput>;
+};
+
+export type MutationCreatePromotionArgs = {
+    input: CreatePromotionInput;
+};
+
+export type MutationUpdatePromotionArgs = {
+    input: UpdatePromotionInput;
+};
+
+export type MutationDeletePromotionArgs = {
+    id: Scalars['ID'];
+};
+
+export type MutationCreateRoleArgs = {
+    input: CreateRoleInput;
+};
+
+export type MutationUpdateRoleArgs = {
+    input: UpdateRoleInput;
+};
+
+export type MutationCreateShippingMethodArgs = {
+    input: CreateShippingMethodInput;
+};
+
+export type MutationUpdateShippingMethodArgs = {
+    input: UpdateShippingMethodInput;
+};
+
+export type MutationCreateTaxCategoryArgs = {
+    input: CreateTaxCategoryInput;
+};
+
+export type MutationUpdateTaxCategoryArgs = {
+    input: UpdateTaxCategoryInput;
+};
+
+export type MutationCreateTaxRateArgs = {
+    input: CreateTaxRateInput;
+};
+
+export type MutationUpdateTaxRateArgs = {
+    input: UpdateTaxRateInput;
+};
+
+export type MutationCreateZoneArgs = {
+    input: CreateZoneInput;
+};
+
+export type MutationUpdateZoneArgs = {
+    input: UpdateZoneInput;
+};
+
+export type MutationDeleteZoneArgs = {
+    id: Scalars['ID'];
+};
+
+export type MutationAddMembersToZoneArgs = {
+    zoneId: Scalars['ID'];
+    memberIds: Array<Scalars['ID']>;
+};
+
+export type MutationRemoveMembersFromZoneArgs = {
+    zoneId: Scalars['ID'];
+    memberIds: Array<Scalars['ID']>;
+};
+
+export type Node = {
+    id: Scalars['ID'];
+};
+
+export type NumberOperators = {
+    eq?: Maybe<Scalars['Float']>;
+    lt?: Maybe<Scalars['Float']>;
+    lte?: Maybe<Scalars['Float']>;
+    gt?: Maybe<Scalars['Float']>;
+    gte?: Maybe<Scalars['Float']>;
+    between?: Maybe<NumberRange>;
+};
+
+export type NumberRange = {
+    start: Scalars['Float'];
+    end: Scalars['Float'];
+};
+
+export type Order = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    code: Scalars['String'];
+    state: Scalars['String'];
+    active: Scalars['Boolean'];
+    customer?: Maybe<Customer>;
+    shippingAddress?: Maybe<OrderAddress>;
+    billingAddress?: Maybe<OrderAddress>;
+    lines: Array<OrderLine>;
+    adjustments: Array<Adjustment>;
+    payments?: Maybe<Array<Payment>>;
+    subTotalBeforeTax: Scalars['Int'];
+    subTotal: Scalars['Int'];
+    currencyCode: CurrencyCode;
+    shipping: Scalars['Int'];
+    shippingMethod?: Maybe<ShippingMethod>;
+    totalBeforeTax: Scalars['Int'];
+    total: Scalars['Int'];
+};
+
+export type OrderAddress = {
+    fullName?: Maybe<Scalars['String']>;
+    company?: Maybe<Scalars['String']>;
+    streetLine1?: Maybe<Scalars['String']>;
+    streetLine2?: Maybe<Scalars['String']>;
+    city?: Maybe<Scalars['String']>;
+    province?: Maybe<Scalars['String']>;
+    postalCode?: Maybe<Scalars['String']>;
+    country?: Maybe<Scalars['String']>;
+    countryCode?: Maybe<Scalars['String']>;
+    phoneNumber?: Maybe<Scalars['String']>;
+};
+
+export type OrderFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    code?: Maybe<StringOperators>;
+    state?: Maybe<StringOperators>;
+    active?: Maybe<BooleanOperators>;
+    subTotalBeforeTax?: Maybe<NumberOperators>;
+    subTotal?: Maybe<NumberOperators>;
+    currencyCode?: Maybe<StringOperators>;
+    shipping?: Maybe<NumberOperators>;
+    totalBeforeTax?: Maybe<NumberOperators>;
+    total?: Maybe<NumberOperators>;
+};
+
+export type OrderItem = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    unitPrice: Scalars['Int'];
+    unitPriceWithTax: Scalars['Int'];
+    unitPriceIncludesTax: Scalars['Boolean'];
+    taxRate: Scalars['Float'];
+    adjustments: Array<Adjustment>;
+};
+
+export type OrderLine = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    productVariant: ProductVariant;
+    featuredAsset?: Maybe<Asset>;
+    unitPrice: Scalars['Int'];
+    unitPriceWithTax: Scalars['Int'];
+    quantity: Scalars['Int'];
+    items: Array<OrderItem>;
+    totalPrice: Scalars['Int'];
+    adjustments: Array<Adjustment>;
+    order: Order;
+};
+
+export type OrderList = PaginatedList & {
+    items: Array<Order>;
+    totalItems: Scalars['Int'];
+};
+
+export type OrderListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<OrderSortParameter>;
+    filter?: Maybe<OrderFilterParameter>;
+};
+
+export type OrderSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    code?: Maybe<SortOrder>;
+    state?: Maybe<SortOrder>;
+    subTotalBeforeTax?: Maybe<SortOrder>;
+    subTotal?: Maybe<SortOrder>;
+    shipping?: Maybe<SortOrder>;
+    totalBeforeTax?: Maybe<SortOrder>;
+    total?: Maybe<SortOrder>;
+};
+
+export type PaginatedList = {
+    items: Array<Node>;
+    totalItems: Scalars['Int'];
+};
+
+export type Payment = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    method: Scalars['String'];
+    amount: Scalars['Int'];
+    state: Scalars['String'];
+    transactionId?: Maybe<Scalars['String']>;
+    metadata?: Maybe<Scalars['JSON']>;
+};
+
+export type PaymentMethod = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    code: Scalars['String'];
+    enabled: Scalars['Boolean'];
+    configArgs: Array<ConfigArg>;
+};
+
+export type PaymentMethodFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    code?: Maybe<StringOperators>;
+    enabled?: Maybe<BooleanOperators>;
+};
+
+export type PaymentMethodList = PaginatedList & {
+    items: Array<PaymentMethod>;
+    totalItems: Scalars['Int'];
+};
+
+export type PaymentMethodListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<PaymentMethodSortParameter>;
+    filter?: Maybe<PaymentMethodFilterParameter>;
+};
+
+export type PaymentMethodSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    code?: Maybe<SortOrder>;
+};
+
+/**  Permissions for administrators and customers  */
+export enum Permission {
+    /**  The Authenticated role means simply that the user is logged in  */
+    Authenticated = 'Authenticated',
+    /**  SuperAdmin can perform the most sensitive tasks  */
+    SuperAdmin = 'SuperAdmin',
+    /**  Owner means the user owns this entity, e.g. a Customer's own Order */
+    Owner = 'Owner',
+    /**  Public means any unauthenticated user may perform the operation  */
+    Public = 'Public',
+    CreateCatalog = 'CreateCatalog',
+    ReadCatalog = 'ReadCatalog',
+    UpdateCatalog = 'UpdateCatalog',
+    DeleteCatalog = 'DeleteCatalog',
+    CreateCustomer = 'CreateCustomer',
+    ReadCustomer = 'ReadCustomer',
+    UpdateCustomer = 'UpdateCustomer',
+    DeleteCustomer = 'DeleteCustomer',
+    CreateAdministrator = 'CreateAdministrator',
+    ReadAdministrator = 'ReadAdministrator',
+    UpdateAdministrator = 'UpdateAdministrator',
+    DeleteAdministrator = 'DeleteAdministrator',
+    CreateOrder = 'CreateOrder',
+    ReadOrder = 'ReadOrder',
+    UpdateOrder = 'UpdateOrder',
+    DeleteOrder = 'DeleteOrder',
+    CreateSettings = 'CreateSettings',
+    ReadSettings = 'ReadSettings',
+    UpdateSettings = 'UpdateSettings',
+    DeleteSettings = 'DeleteSettings',
+}
+
+/** The price range where the result has more than one price */
+export type PriceRange = {
+    min: Scalars['Int'];
+    max: Scalars['Int'];
+};
+
+export type Product = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+    slug: Scalars['String'];
+    description: Scalars['String'];
+    featuredAsset?: Maybe<Asset>;
+    assets: Array<Asset>;
+    variants: Array<ProductVariant>;
+    optionGroups: Array<ProductOptionGroup>;
+    facetValues: Array<FacetValue>;
+    translations: Array<ProductTranslation>;
+    collections: Array<Collection>;
+    enabled: Scalars['Boolean'];
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ProductFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    languageCode?: Maybe<StringOperators>;
+    name?: Maybe<StringOperators>;
+    slug?: Maybe<StringOperators>;
+    description?: Maybe<StringOperators>;
+    enabled?: Maybe<BooleanOperators>;
+};
+
+export type ProductList = PaginatedList & {
+    items: Array<Product>;
+    totalItems: Scalars['Int'];
+};
+
+export type ProductListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<ProductSortParameter>;
+    filter?: Maybe<ProductFilterParameter>;
+};
+
+export type ProductOption = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode?: Maybe<LanguageCode>;
+    code?: Maybe<Scalars['String']>;
+    name?: Maybe<Scalars['String']>;
+    translations: Array<ProductOptionTranslation>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ProductOptionGroup = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    code: Scalars['String'];
+    name: Scalars['String'];
+    options: Array<ProductOption>;
+    translations: Array<ProductOptionGroupTranslation>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ProductOptionGroupTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+};
+
+export type ProductOptionGroupTranslationInput = {
+    id?: Maybe<Scalars['ID']>;
+    languageCode: LanguageCode;
+    name?: Maybe<Scalars['String']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ProductOptionTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+};
+
+export type ProductOptionTranslationInput = {
+    id?: Maybe<Scalars['ID']>;
+    languageCode: LanguageCode;
+    name?: Maybe<Scalars['String']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ProductSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    name?: Maybe<SortOrder>;
+    slug?: Maybe<SortOrder>;
+    description?: Maybe<SortOrder>;
+};
+
+export type ProductTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+    slug: Scalars['String'];
+    description: Scalars['String'];
+};
+
+export type ProductTranslationInput = {
+    id?: Maybe<Scalars['ID']>;
+    languageCode: LanguageCode;
+    name?: Maybe<Scalars['String']>;
+    slug?: Maybe<Scalars['String']>;
+    description?: Maybe<Scalars['String']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ProductVariant = Node & {
+    id: Scalars['ID'];
+    productId: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    sku: Scalars['String'];
+    name: Scalars['String'];
+    featuredAsset?: Maybe<Asset>;
+    assets: Array<Asset>;
+    price: Scalars['Int'];
+    currencyCode: CurrencyCode;
+    priceIncludesTax: Scalars['Boolean'];
+    priceWithTax: Scalars['Int'];
+    taxRateApplied: TaxRate;
+    taxCategory: TaxCategory;
+    options: Array<ProductOption>;
+    facetValues: Array<FacetValue>;
+    translations: Array<ProductVariantTranslation>;
+    enabled: Scalars['Boolean'];
+    stockOnHand: Scalars['Int'];
+    trackInventory: Scalars['Boolean'];
+    stockMovements: StockMovementList;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ProductVariantStockMovementsArgs = {
+    options?: Maybe<StockMovementListOptions>;
+};
+
+export type ProductVariantFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    languageCode?: Maybe<StringOperators>;
+    sku?: Maybe<StringOperators>;
+    name?: Maybe<StringOperators>;
+    price?: Maybe<NumberOperators>;
+    currencyCode?: Maybe<StringOperators>;
+    priceIncludesTax?: Maybe<BooleanOperators>;
+    priceWithTax?: Maybe<NumberOperators>;
+    enabled?: Maybe<BooleanOperators>;
+    stockOnHand?: Maybe<NumberOperators>;
+    trackInventory?: Maybe<BooleanOperators>;
+};
+
+export type ProductVariantList = PaginatedList & {
+    items: Array<ProductVariant>;
+    totalItems: Scalars['Int'];
+};
+
+export type ProductVariantListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<ProductVariantSortParameter>;
+    filter?: Maybe<ProductVariantFilterParameter>;
+};
+
+export type ProductVariantSortParameter = {
+    id?: Maybe<SortOrder>;
+    productId?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    sku?: Maybe<SortOrder>;
+    name?: Maybe<SortOrder>;
+    price?: Maybe<SortOrder>;
+    priceWithTax?: Maybe<SortOrder>;
+    stockOnHand?: Maybe<SortOrder>;
+};
+
+export type ProductVariantTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+};
+
+export type ProductVariantTranslationInput = {
+    id?: Maybe<Scalars['ID']>;
+    languageCode: LanguageCode;
+    name?: Maybe<Scalars['String']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type Promotion = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    name: Scalars['String'];
+    enabled: Scalars['Boolean'];
+    conditions: Array<ConfigurableOperation>;
+    actions: Array<ConfigurableOperation>;
+};
+
+export type PromotionFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    name?: Maybe<StringOperators>;
+    enabled?: Maybe<BooleanOperators>;
+};
+
+export type PromotionList = PaginatedList & {
+    items: Array<Promotion>;
+    totalItems: Scalars['Int'];
+};
+
+export type PromotionListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<PromotionSortParameter>;
+    filter?: Maybe<PromotionFilterParameter>;
+};
+
+export type PromotionSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    name?: Maybe<SortOrder>;
+};
+
+export type Query = {
+    administrators: AdministratorList;
+    administrator?: Maybe<Administrator>;
+    me?: Maybe<CurrentUser>;
+    assets: AssetList;
+    asset?: Maybe<Asset>;
+    collections: CollectionList;
+    collection?: Maybe<Collection>;
+    collectionFilters: Array<ConfigurableOperation>;
+    channels: Array<Channel>;
+    channel?: Maybe<Channel>;
+    activeChannel: Channel;
+    countries: CountryList;
+    country?: Maybe<Country>;
+    customerGroups: Array<CustomerGroup>;
+    customerGroup?: Maybe<CustomerGroup>;
+    customers: CustomerList;
+    customer?: Maybe<Customer>;
+    facets: FacetList;
+    facet?: Maybe<Facet>;
+    globalSettings: GlobalSettings;
+    order?: Maybe<Order>;
+    orders: OrderList;
+    paymentMethods: PaymentMethodList;
+    paymentMethod?: Maybe<PaymentMethod>;
+    productOptionGroups: Array<ProductOptionGroup>;
+    productOptionGroup?: Maybe<ProductOptionGroup>;
+    search: SearchResponse;
+    products: ProductList;
+    product?: Maybe<Product>;
+    promotion?: Maybe<Promotion>;
+    promotions: PromotionList;
+    adjustmentOperations: AdjustmentOperations;
+    roles: RoleList;
+    role?: Maybe<Role>;
+    shippingMethods: ShippingMethodList;
+    shippingMethod?: Maybe<ShippingMethod>;
+    shippingEligibilityCheckers: Array<ConfigurableOperation>;
+    shippingCalculators: Array<ConfigurableOperation>;
+    taxCategories: Array<TaxCategory>;
+    taxCategory?: Maybe<TaxCategory>;
+    taxRates: TaxRateList;
+    taxRate?: Maybe<TaxRate>;
+    zones: Array<Zone>;
+    zone?: Maybe<Zone>;
+    temp__?: Maybe<Scalars['Boolean']>;
+};
+
+export type QueryAdministratorsArgs = {
+    options?: Maybe<AdministratorListOptions>;
+};
+
+export type QueryAdministratorArgs = {
+    id: Scalars['ID'];
+};
+
+export type QueryAssetsArgs = {
+    options?: Maybe<AssetListOptions>;
+};
+
+export type QueryAssetArgs = {
+    id: Scalars['ID'];
+};
+
+export type QueryCollectionsArgs = {
+    languageCode?: Maybe<LanguageCode>;
+    options?: Maybe<CollectionListOptions>;
+};
+
+export type QueryCollectionArgs = {
+    id: Scalars['ID'];
+    languageCode?: Maybe<LanguageCode>;
+};
+
+export type QueryChannelArgs = {
+    id: Scalars['ID'];
+};
+
+export type QueryCountriesArgs = {
+    options?: Maybe<CountryListOptions>;
+};
+
+export type QueryCountryArgs = {
+    id: Scalars['ID'];
+};
+
+export type QueryCustomerGroupArgs = {
+    id: Scalars['ID'];
+};
+
+export type QueryCustomersArgs = {
+    options?: Maybe<CustomerListOptions>;
+};
+
+export type QueryCustomerArgs = {
+    id: Scalars['ID'];
+};
+
+export type QueryFacetsArgs = {
+    languageCode?: Maybe<LanguageCode>;
+    options?: Maybe<FacetListOptions>;
+};
+
+export type QueryFacetArgs = {
+    id: Scalars['ID'];
+    languageCode?: Maybe<LanguageCode>;
+};
+
+export type QueryOrderArgs = {
+    id: Scalars['ID'];
+};
+
+export type QueryOrdersArgs = {
+    options?: Maybe<OrderListOptions>;
+};
+
+export type QueryPaymentMethodsArgs = {
+    options?: Maybe<PaymentMethodListOptions>;
+};
+
+export type QueryPaymentMethodArgs = {
+    id: Scalars['ID'];
+};
+
+export type QueryProductOptionGroupsArgs = {
+    languageCode?: Maybe<LanguageCode>;
+    filterTerm?: Maybe<Scalars['String']>;
+};
+
+export type QueryProductOptionGroupArgs = {
+    id: Scalars['ID'];
+    languageCode?: Maybe<LanguageCode>;
+};
+
+export type QuerySearchArgs = {
+    input: SearchInput;
+};
+
+export type QueryProductsArgs = {
+    languageCode?: Maybe<LanguageCode>;
+    options?: Maybe<ProductListOptions>;
+};
+
+export type QueryProductArgs = {
+    id: Scalars['ID'];
+    languageCode?: Maybe<LanguageCode>;
+};
+
+export type QueryPromotionArgs = {
+    id: Scalars['ID'];
+};
+
+export type QueryPromotionsArgs = {
+    options?: Maybe<PromotionListOptions>;
+};
+
+export type QueryRolesArgs = {
+    options?: Maybe<RoleListOptions>;
+};
+
+export type QueryRoleArgs = {
+    id: Scalars['ID'];
+};
+
+export type QueryShippingMethodsArgs = {
+    options?: Maybe<ShippingMethodListOptions>;
+};
+
+export type QueryShippingMethodArgs = {
+    id: Scalars['ID'];
+};
+
+export type QueryTaxCategoryArgs = {
+    id: Scalars['ID'];
+};
+
+export type QueryTaxRatesArgs = {
+    options?: Maybe<TaxRateListOptions>;
+};
+
+export type QueryTaxRateArgs = {
+    id: Scalars['ID'];
+};
+
+export type QueryZoneArgs = {
+    id: Scalars['ID'];
+};
+
+export type Return = Node &
+    StockMovement & {
+        id: Scalars['ID'];
+        createdAt: Scalars['DateTime'];
+        updatedAt: Scalars['DateTime'];
+        productVariant: ProductVariant;
+        type: StockMovementType;
+        quantity: Scalars['Int'];
+        orderItem: OrderItem;
+    };
+
+export type Role = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    code: Scalars['String'];
+    description: Scalars['String'];
+    permissions: Array<Permission>;
+    channels: Array<Channel>;
+};
+
+export type RoleFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    code?: Maybe<StringOperators>;
+    description?: Maybe<StringOperators>;
+};
+
+export type RoleList = PaginatedList & {
+    items: Array<Role>;
+    totalItems: Scalars['Int'];
+};
+
+export type RoleListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<RoleSortParameter>;
+    filter?: Maybe<RoleFilterParameter>;
+};
+
+export type RoleSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    code?: Maybe<SortOrder>;
+    description?: Maybe<SortOrder>;
+};
+
+export type Sale = Node &
+    StockMovement & {
+        id: Scalars['ID'];
+        createdAt: Scalars['DateTime'];
+        updatedAt: Scalars['DateTime'];
+        productVariant: ProductVariant;
+        type: StockMovementType;
+        quantity: Scalars['Int'];
+        orderLine: OrderLine;
+    };
+
+export type SearchInput = {
+    term?: Maybe<Scalars['String']>;
+    facetIds?: Maybe<Array<Scalars['String']>>;
+    collectionId?: Maybe<Scalars['String']>;
+    groupByProduct?: Maybe<Scalars['Boolean']>;
+    take?: Maybe<Scalars['Int']>;
+    skip?: Maybe<Scalars['Int']>;
+    sort?: Maybe<SearchResultSortParameter>;
+};
+
+export type SearchReindexResponse = {
+    success: Scalars['Boolean'];
+    timeTaken: Scalars['Int'];
+    indexedItemCount: Scalars['Int'];
+};
+
+export type SearchResponse = {
+    items: Array<SearchResult>;
+    totalItems: Scalars['Int'];
+    facetValues: Array<FacetValueResult>;
+};
+
+export type SearchResult = {
+    sku: Scalars['String'];
+    slug: Scalars['String'];
+    productId: Scalars['ID'];
+    productName: Scalars['String'];
+    productPreview: Scalars['String'];
+    productVariantId: Scalars['ID'];
+    productVariantName: Scalars['String'];
+    productVariantPreview: Scalars['String'];
+    price: SearchResultPrice;
+    priceWithTax: SearchResultPrice;
+    currencyCode: CurrencyCode;
+    description: Scalars['String'];
+    facetIds: Array<Scalars['String']>;
+    facetValueIds: Array<Scalars['String']>;
+    /** An array of ids of the Collections in which this result appears */
+    collectionIds: Array<Scalars['String']>;
+    /** A relevence score for the result. Differs between database implementations */
+    score: Scalars['Float'];
+    enabled: Scalars['Boolean'];
+};
+
+/** The price of a search result product, either as a range or as a single price */
+export type SearchResultPrice = PriceRange | SinglePrice;
+
+export type SearchResultSortParameter = {
+    name?: Maybe<SortOrder>;
+    price?: Maybe<SortOrder>;
+};
+
+export type ServerConfig = {
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ShippingMethod = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    code: Scalars['String'];
+    description: Scalars['String'];
+    checker: ConfigurableOperation;
+    calculator: ConfigurableOperation;
+};
+
+export type ShippingMethodFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    code?: Maybe<StringOperators>;
+    description?: Maybe<StringOperators>;
+};
+
+export type ShippingMethodList = PaginatedList & {
+    items: Array<ShippingMethod>;
+    totalItems: Scalars['Int'];
+};
+
+export type ShippingMethodListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<ShippingMethodSortParameter>;
+    filter?: Maybe<ShippingMethodFilterParameter>;
+};
+
+export type ShippingMethodQuote = {
+    id: Scalars['ID'];
+    price: Scalars['Int'];
+    description: Scalars['String'];
+};
+
+export type ShippingMethodSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    code?: Maybe<SortOrder>;
+    description?: Maybe<SortOrder>;
+};
+
+/** The price value where the result has a single price */
+export type SinglePrice = {
+    value: Scalars['Int'];
+};
+
+export enum SortOrder {
+    ASC = 'ASC',
+    DESC = 'DESC',
+}
+
+export type StockAdjustment = Node &
+    StockMovement & {
+        id: Scalars['ID'];
+        createdAt: Scalars['DateTime'];
+        updatedAt: Scalars['DateTime'];
+        productVariant: ProductVariant;
+        type: StockMovementType;
+        quantity: Scalars['Int'];
+    };
+
+export type StockMovement = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    productVariant: ProductVariant;
+    type: StockMovementType;
+    quantity: Scalars['Int'];
+};
+
+export type StockMovementItem = StockAdjustment | Sale | Cancellation | Return;
+
+export type StockMovementList = {
+    items: Array<StockMovementItem>;
+    totalItems: Scalars['Int'];
+};
+
+export type StockMovementListOptions = {
+    type?: Maybe<StockMovementType>;
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+};
+
+export enum StockMovementType {
+    ADJUSTMENT = 'ADJUSTMENT',
+    SALE = 'SALE',
+    CANCELLATION = 'CANCELLATION',
+    RETURN = 'RETURN',
+}
+
+export type StringOperators = {
+    eq?: Maybe<Scalars['String']>;
+    contains?: Maybe<Scalars['String']>;
+};
+
+export type TaxCategory = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    name: Scalars['String'];
+};
+
+export type TaxRate = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    name: Scalars['String'];
+    enabled: Scalars['Boolean'];
+    value: Scalars['Int'];
+    category: TaxCategory;
+    zone: Zone;
+    customerGroup?: Maybe<CustomerGroup>;
+};
+
+export type TaxRateFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    name?: Maybe<StringOperators>;
+    enabled?: Maybe<BooleanOperators>;
+    value?: Maybe<NumberOperators>;
+};
+
+export type TaxRateList = PaginatedList & {
+    items: Array<TaxRate>;
+    totalItems: Scalars['Int'];
+};
+
+export type TaxRateListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<TaxRateSortParameter>;
+    filter?: Maybe<TaxRateFilterParameter>;
+};
+
+export type TaxRateSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    name?: Maybe<SortOrder>;
+    value?: Maybe<SortOrder>;
+};
+
+export type UpdateAddressInput = {
+    id: Scalars['ID'];
+    fullName?: Maybe<Scalars['String']>;
+    company?: Maybe<Scalars['String']>;
+    streetLine1?: Maybe<Scalars['String']>;
+    streetLine2?: Maybe<Scalars['String']>;
+    city?: Maybe<Scalars['String']>;
+    province?: Maybe<Scalars['String']>;
+    postalCode?: Maybe<Scalars['String']>;
+    countryCode?: Maybe<Scalars['String']>;
+    phoneNumber?: Maybe<Scalars['String']>;
+    defaultShippingAddress?: Maybe<Scalars['Boolean']>;
+    defaultBillingAddress?: Maybe<Scalars['Boolean']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type UpdateAdministratorInput = {
+    id: Scalars['ID'];
+    firstName?: Maybe<Scalars['String']>;
+    lastName?: Maybe<Scalars['String']>;
+    emailAddress?: Maybe<Scalars['String']>;
+    password?: Maybe<Scalars['String']>;
+    roleIds?: Maybe<Array<Scalars['ID']>>;
+};
+
+export type UpdateChannelInput = {
+    id: Scalars['ID'];
+    code?: Maybe<Scalars['String']>;
+    token?: Maybe<Scalars['String']>;
+    defaultLanguageCode?: Maybe<LanguageCode>;
+    pricesIncludeTax?: Maybe<Scalars['Boolean']>;
+    currencyCode?: Maybe<CurrencyCode>;
+    defaultTaxZoneId?: Maybe<Scalars['ID']>;
+    defaultShippingZoneId?: Maybe<Scalars['ID']>;
+};
+
+export type UpdateCollectionInput = {
+    id: Scalars['ID'];
+    isPrivate?: Maybe<Scalars['Boolean']>;
+    featuredAssetId?: Maybe<Scalars['ID']>;
+    parentId?: Maybe<Scalars['ID']>;
+    assetIds?: Maybe<Array<Scalars['ID']>>;
+    filters?: Maybe<Array<ConfigurableOperationInput>>;
+    translations?: Maybe<Array<CollectionTranslationInput>>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type UpdateCountryInput = {
+    id: Scalars['ID'];
+    code?: Maybe<Scalars['String']>;
+    translations?: Maybe<Array<CountryTranslationInput>>;
+    enabled?: Maybe<Scalars['Boolean']>;
+};
+
+export type UpdateCustomerGroupInput = {
+    id: Scalars['ID'];
+    name?: Maybe<Scalars['String']>;
+};
+
+export type UpdateCustomerInput = {
+    id: Scalars['ID'];
+    title?: Maybe<Scalars['String']>;
+    firstName?: Maybe<Scalars['String']>;
+    lastName?: Maybe<Scalars['String']>;
+    phoneNumber?: Maybe<Scalars['String']>;
+    emailAddress?: Maybe<Scalars['String']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type UpdateFacetInput = {
+    id: Scalars['ID'];
+    isPrivate?: Maybe<Scalars['Boolean']>;
+    code?: Maybe<Scalars['String']>;
+    translations?: Maybe<Array<FacetTranslationInput>>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type UpdateFacetValueInput = {
+    id: Scalars['ID'];
+    code?: Maybe<Scalars['String']>;
+    translations?: Maybe<Array<FacetValueTranslationInput>>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type UpdateGlobalSettingsInput = {
+    availableLanguages?: Maybe<Array<LanguageCode>>;
+    trackInventory?: Maybe<Scalars['Boolean']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type UpdatePaymentMethodInput = {
+    id: Scalars['ID'];
+    code?: Maybe<Scalars['String']>;
+    enabled?: Maybe<Scalars['Boolean']>;
+    configArgs?: Maybe<Array<ConfigArgInput>>;
+};
+
+export type UpdateProductInput = {
+    id: Scalars['ID'];
+    enabled?: Maybe<Scalars['Boolean']>;
+    featuredAssetId?: Maybe<Scalars['ID']>;
+    assetIds?: Maybe<Array<Scalars['ID']>>;
+    facetValueIds?: Maybe<Array<Scalars['ID']>>;
+    translations?: Maybe<Array<ProductTranslationInput>>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type UpdateProductOptionGroupInput = {
+    id: Scalars['ID'];
+    code?: Maybe<Scalars['String']>;
+    translations?: Maybe<Array<ProductOptionGroupTranslationInput>>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type UpdateProductVariantInput = {
+    id: Scalars['ID'];
+    enabled?: Maybe<Scalars['Boolean']>;
+    translations?: Maybe<Array<ProductVariantTranslationInput>>;
+    facetValueIds?: Maybe<Array<Scalars['ID']>>;
+    sku?: Maybe<Scalars['String']>;
+    taxCategoryId?: Maybe<Scalars['ID']>;
+    price?: Maybe<Scalars['Int']>;
+    featuredAssetId?: Maybe<Scalars['ID']>;
+    assetIds?: Maybe<Array<Scalars['ID']>>;
+    stockOnHand?: Maybe<Scalars['Int']>;
+    trackInventory?: Maybe<Scalars['Boolean']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type UpdatePromotionInput = {
+    id: Scalars['ID'];
+    name?: Maybe<Scalars['String']>;
+    enabled?: Maybe<Scalars['Boolean']>;
+    conditions?: Maybe<Array<ConfigurableOperationInput>>;
+    actions?: Maybe<Array<ConfigurableOperationInput>>;
+};
+
+export type UpdateRoleInput = {
+    id: Scalars['ID'];
+    code?: Maybe<Scalars['String']>;
+    description?: Maybe<Scalars['String']>;
+    permissions?: Maybe<Array<Permission>>;
+};
+
+export type UpdateShippingMethodInput = {
+    id: Scalars['ID'];
+    code?: Maybe<Scalars['String']>;
+    description?: Maybe<Scalars['String']>;
+    checker?: Maybe<ConfigurableOperationInput>;
+    calculator?: Maybe<ConfigurableOperationInput>;
+};
+
+export type UpdateTaxCategoryInput = {
+    id: Scalars['ID'];
+    name?: Maybe<Scalars['String']>;
+};
+
+export type UpdateTaxRateInput = {
+    id: Scalars['ID'];
+    name?: Maybe<Scalars['String']>;
+    value?: Maybe<Scalars['Int']>;
+    enabled?: Maybe<Scalars['Boolean']>;
+    categoryId?: Maybe<Scalars['ID']>;
+    zoneId?: Maybe<Scalars['ID']>;
+    customerGroupId?: Maybe<Scalars['ID']>;
+};
+
+export type UpdateZoneInput = {
+    id: Scalars['ID'];
+    name?: Maybe<Scalars['String']>;
+};
+
+export type User = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    identifier: Scalars['String'];
+    verified: Scalars['Boolean'];
+    roles: Array<Role>;
+    lastLogin?: Maybe<Scalars['String']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type Zone = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    name: Scalars['String'];
+    members: Array<Country>;
+};
+export type GetAdministratorsQueryVariables = {
+    options?: Maybe<AdministratorListOptions>;
+};
+
+export type GetAdministratorsQuery = { __typename?: 'Query' } & {
+    administrators: { __typename?: 'AdministratorList' } & Pick<AdministratorList, 'totalItems'> & {
+            items: Array<{ __typename?: 'Administrator' } & AdministratorFragment>;
+        };
+};
+
+export type GetAdministratorQueryVariables = {
+    id: Scalars['ID'];
+};
+
+export type GetAdministratorQuery = { __typename?: 'Query' } & {
+    administrator: Maybe<{ __typename?: 'Administrator' } & AdministratorFragment>;
+};
+
+export type UpdateAdministratorMutationVariables = {
+    input: UpdateAdministratorInput;
+};
+
+export type UpdateAdministratorMutation = { __typename?: 'Mutation' } & {
+    updateAdministrator: { __typename?: 'Administrator' } & AdministratorFragment;
+};
+
+export type CreateCustomerMutationVariables = {
+    input: CreateCustomerInput;
+};
+
+export type CreateCustomerMutation = { __typename?: 'Mutation' } & {
+    createCustomer: { __typename?: 'Customer' } & Pick<Customer, 'id'>;
+};
+
+export type GetCustomerCountQueryVariables = {};
+
+export type GetCustomerCountQuery = { __typename?: 'Query' } & {
+    customers: { __typename?: 'CustomerList' } & Pick<CustomerList, 'totalItems'>;
+};
+
+export type CurrentUserFragment = { __typename?: 'CurrentUser' } & Pick<
+    CurrentUser,
+    'id' | 'identifier' | 'channelTokens'
+>;
+
+export type GetProductsWithVariantIdsQueryVariables = {};
+
+export type GetProductsWithVariantIdsQuery = { __typename?: 'Query' } & {
+    products: { __typename?: 'ProductList' } & {
+        items: Array<
+            { __typename?: 'Product' } & Pick<Product, 'id' | 'name'> & {
+                    variants: Array<{ __typename?: 'ProductVariant' } & Pick<ProductVariant, 'id'>>;
+                }
+        >;
+    };
+};
+
+export type GetCollectionQueryVariables = {
+    id: Scalars['ID'];
+    languageCode?: Maybe<LanguageCode>;
+};
+
+export type GetCollectionQuery = { __typename?: 'Query' } & {
+    collection: Maybe<{ __typename?: 'Collection' } & CollectionFragment>;
+};
+
+export type MoveCollectionMutationVariables = {
+    input: MoveCollectionInput;
+};
+
+export type MoveCollectionMutation = { __typename?: 'Mutation' } & {
+    moveCollection: { __typename?: 'Collection' } & CollectionFragment;
+};
+
+export type GetFacetValuesQueryVariables = {};
+
+export type GetFacetValuesQuery = { __typename?: 'Query' } & {
+    facets: { __typename?: 'FacetList' } & {
+        items: Array<
+            { __typename?: 'Facet' } & { values: Array<{ __typename?: 'FacetValue' } & FacetValueFragment> }
+        >;
+    };
+};
+
+export type GetCollectionsQueryVariables = {};
+
+export type GetCollectionsQuery = { __typename?: 'Query' } & {
+    collections: { __typename?: 'CollectionList' } & {
+        items: Array<
+            { __typename?: 'Collection' } & Pick<Collection, 'id' | 'name' | 'position'> & {
+                    parent: Maybe<{ __typename?: 'Collection' } & Pick<Collection, 'id' | 'name'>>;
+                }
+        >;
+    };
+};
+
+export type GetCollectionProductsQueryVariables = {
+    id: Scalars['ID'];
+};
+
+export type GetCollectionProductsQuery = { __typename?: 'Query' } & {
+    collection: Maybe<
+        { __typename?: 'Collection' } & {
+            productVariants: { __typename?: 'ProductVariantList' } & {
+                items: Array<
+                    { __typename?: 'ProductVariant' } & Pick<ProductVariant, 'id' | 'name'> & {
+                            facetValues: Array<{ __typename?: 'FacetValue' } & Pick<FacetValue, 'code'>>;
+                        }
+                >;
+            };
+        }
+    >;
+};
+
+export type CreateCollectionSelectVariantsMutationVariables = {
+    input: CreateCollectionInput;
+};
+
+export type CreateCollectionSelectVariantsMutation = { __typename?: 'Mutation' } & {
+    createCollection: { __typename?: 'Collection' } & {
+        productVariants: { __typename?: 'ProductVariantList' } & Pick<ProductVariantList, 'totalItems'> & {
+                items: Array<{ __typename?: 'ProductVariant' } & Pick<ProductVariant, 'name'>>;
+            };
+    };
+};
+
+export type GetCollectionBreadcrumbsQueryVariables = {
+    id: Scalars['ID'];
+};
+
+export type GetCollectionBreadcrumbsQuery = { __typename?: 'Query' } & {
+    collection: Maybe<
+        { __typename?: 'Collection' } & {
+            breadcrumbs: Array<
+                { __typename?: 'CollectionBreadcrumb' } & Pick<CollectionBreadcrumb, 'id' | 'name'>
+            >;
+        }
+    >;
+};
+
+export type GetCollectionsForProductsQueryVariables = {
+    term: Scalars['String'];
+};
+
+export type GetCollectionsForProductsQuery = { __typename?: 'Query' } & {
+    products: { __typename?: 'ProductList' } & {
+        items: Array<
+            { __typename?: 'Product' } & Pick<Product, 'id' | 'name'> & {
+                    collections: Array<{ __typename?: 'Collection' } & Pick<Collection, 'id' | 'name'>>;
+                }
+        >;
+    };
+};
+
+export type DeleteCountryMutationVariables = {
+    id: Scalars['ID'];
+};
+
+export type DeleteCountryMutation = { __typename?: 'Mutation' } & {
+    deleteCountry: { __typename?: 'DeletionResponse' } & Pick<DeletionResponse, 'result' | 'message'>;
+};
+
+export type GetCountryQueryVariables = {
+    id: Scalars['ID'];
+};
+
+export type GetCountryQuery = { __typename?: 'Query' } & {
+    country: Maybe<{ __typename?: 'Country' } & CountryFragment>;
+};
+
+export type CreateCountryMutationVariables = {
+    input: CreateCountryInput;
+};
+
+export type CreateCountryMutation = { __typename?: 'Mutation' } & {
+    createCountry: { __typename?: 'Country' } & CountryFragment;
+};
+
+export type DeleteCustomerAddressMutationVariables = {
+    id: Scalars['ID'];
+};
+
+export type DeleteCustomerAddressMutation = { __typename?: 'Mutation' } & Pick<
+    Mutation,
+    'deleteCustomerAddress'
+>;
+
+export type CreateAddressMutationVariables = {
+    id: Scalars['ID'];
+    input: CreateAddressInput;
+};
+
+export type CreateAddressMutation = { __typename?: 'Mutation' } & {
+    createCustomerAddress: { __typename?: 'Address' } & Pick<
+        Address,
+        | 'id'
+        | 'fullName'
+        | 'company'
+        | 'streetLine1'
+        | 'streetLine2'
+        | 'city'
+        | 'province'
+        | 'postalCode'
+        | 'phoneNumber'
+        | 'defaultShippingAddress'
+        | 'defaultBillingAddress'
+    > & { country: { __typename?: 'Country' } & Pick<Country, 'code' | 'name'> };
+};
+
+export type UpdateAddressMutationVariables = {
+    input: UpdateAddressInput;
+};
+
+export type UpdateAddressMutation = { __typename?: 'Mutation' } & {
+    updateCustomerAddress: { __typename?: 'Address' } & Pick<
+        Address,
+        'id' | 'defaultShippingAddress' | 'defaultBillingAddress'
+    > & { country: { __typename?: 'Country' } & Pick<Country, 'code' | 'name'> };
+};
+
+export type GetCustomerOrdersQueryVariables = {
+    id: Scalars['ID'];
+};
+
+export type GetCustomerOrdersQuery = { __typename?: 'Query' } & {
+    customer: Maybe<
+        { __typename?: 'Customer' } & {
+            orders: { __typename?: 'OrderList' } & Pick<OrderList, 'totalItems'> & {
+                    items: Array<{ __typename?: 'Order' } & Pick<Order, 'id'>>;
+                };
+        }
+    >;
+};
+
+export type UpdateCustomerMutationVariables = {
+    input: UpdateCustomerInput;
+};
+
+export type UpdateCustomerMutation = { __typename?: 'Mutation' } & {
+    updateCustomer: { __typename?: 'Customer' } & CustomerFragment;
+};
+
+export type DeleteCustomerMutationVariables = {
+    id: Scalars['ID'];
+};
+
+export type DeleteCustomerMutation = { __typename?: 'Mutation' } & {
+    deleteCustomer: { __typename?: 'DeletionResponse' } & Pick<DeletionResponse, 'result'>;
+};
+
+export type SearchProductsAdminQueryVariables = {
+    input: SearchInput;
+};
+
+export type SearchProductsAdminQuery = { __typename?: 'Query' } & {
+    search: { __typename?: 'SearchResponse' } & Pick<SearchResponse, 'totalItems'> & {
+            items: Array<
+                { __typename?: 'SearchResult' } & Pick<
+                    SearchResult,
+                    | 'enabled'
+                    | 'productId'
+                    | 'productName'
+                    | 'productPreview'
+                    | 'productVariantId'
+                    | 'productVariantName'
+                    | 'productVariantPreview'
+                    | 'sku'
+                >
+            >;
+        };
+};
+
+export type SearchFacetValuesQueryVariables = {
+    input: SearchInput;
+};
+
+export type SearchFacetValuesQuery = { __typename?: 'Query' } & {
+    search: { __typename?: 'SearchResponse' } & Pick<SearchResponse, 'totalItems'> & {
+            facetValues: Array<
+                { __typename?: 'FacetValueResult' } & Pick<FacetValueResult, 'count'> & {
+                        facetValue: { __typename?: 'FacetValue' } & Pick<FacetValue, 'id' | 'name'>;
+                    }
+            >;
+        };
+};
+
+export type SearchGetPricesQueryVariables = {
+    input: SearchInput;
+};
+
+export type SearchGetPricesQuery = { __typename?: 'Query' } & {
+    search: { __typename?: 'SearchResponse' } & {
+        items: Array<
+            { __typename?: 'SearchResult' } & {
+                price:
+                    | ({ __typename?: 'PriceRange' } & Pick<PriceRange, 'min' | 'max'>)
+                    | ({ __typename?: 'SinglePrice' } & Pick<SinglePrice, 'value'>);
+                priceWithTax:
+                    | ({ __typename?: 'PriceRange' } & Pick<PriceRange, 'min' | 'max'>)
+                    | ({ __typename?: 'SinglePrice' } & Pick<SinglePrice, 'value'>);
+            }
+        >;
+    };
+};
+
+export type EntityIdTestQueryVariables = {};
+
+export type EntityIdTestQuery = { __typename?: 'Query' } & {
+    product: Maybe<
+        { __typename?: 'Product' } & Pick<Product, 'id'> & {
+                variants: Array<
+                    { __typename?: 'ProductVariant' } & Pick<ProductVariant, 'id'> & {
+                            options: Array<
+                                { __typename?: 'ProductOption' } & Pick<ProductOption, 'id' | 'name'>
+                            >;
+                        }
+                >;
+            }
+    >;
+};
+
+export type GetFacetWithValuesQueryVariables = {
+    id: Scalars['ID'];
+    languageCode?: Maybe<LanguageCode>;
+};
+
+export type GetFacetWithValuesQuery = { __typename?: 'Query' } & {
+    facet: Maybe<{ __typename?: 'Facet' } & FacetWithValuesFragment>;
+};
+
+export type DeleteFacetValueMutationVariables = {
+    ids: Array<Scalars['ID']>;
+    force?: Maybe<Scalars['Boolean']>;
+};
+
+export type DeleteFacetValueMutation = { __typename?: 'Mutation' } & {
+    deleteFacetValues: Array<
+        { __typename?: 'DeletionResponse' } & Pick<DeletionResponse, 'result' | 'message'>
+    >;
+};
+
+export type DeleteFacetMutationVariables = {
+    id: Scalars['ID'];
+    force?: Maybe<Scalars['Boolean']>;
+};
+
+export type DeleteFacetMutation = { __typename?: 'Mutation' } & {
+    deleteFacet: { __typename?: 'DeletionResponse' } & Pick<DeletionResponse, 'result' | 'message'>;
+};
+
+export type GetProductListWithVariantsQueryVariables = {};
+
+export type GetProductListWithVariantsQuery = { __typename?: 'Query' } & {
+    products: { __typename?: 'ProductList' } & Pick<ProductList, 'totalItems'> & {
+            items: Array<
+                { __typename?: 'Product' } & Pick<Product, 'id' | 'name'> & {
+                        variants: Array<
+                            { __typename?: 'ProductVariant' } & Pick<ProductVariant, 'id' | 'name'>
+                        >;
+                    }
+            >;
+        };
+};
+
+export type CreateFacetValuesMutationVariables = {
+    input: Array<CreateFacetValueInput>;
+};
+
+export type CreateFacetValuesMutation = { __typename?: 'Mutation' } & {
+    createFacetValues: Array<{ __typename?: 'FacetValue' } & FacetValueFragment>;
+};
+
+export type UpdateFacetValuesMutationVariables = {
+    input: Array<UpdateFacetValueInput>;
+};
+
+export type UpdateFacetValuesMutation = { __typename?: 'Mutation' } & {
+    updateFacetValues: Array<{ __typename?: 'FacetValue' } & FacetValueFragment>;
+};
+
+export type AdministratorFragment = { __typename?: 'Administrator' } & Pick<
+    Administrator,
+    'id' | 'firstName' | 'lastName' | 'emailAddress'
+> & {
+        user: { __typename?: 'User' } & Pick<User, 'id' | 'identifier' | 'lastLogin'> & {
+                roles: Array<
+                    { __typename?: 'Role' } & Pick<Role, 'id' | 'code' | 'description' | 'permissions'>
+                >;
+            };
+    };
+
+export type AssetFragment = { __typename?: 'Asset' } & Pick<
+    Asset,
+    'id' | 'name' | 'fileSize' | 'mimeType' | 'type' | 'preview' | 'source'
+>;
+
+export type ProductVariantFragment = { __typename?: 'ProductVariant' } & Pick<
+    ProductVariant,
+    | 'id'
+    | 'enabled'
+    | 'languageCode'
+    | 'name'
+    | 'price'
+    | 'currencyCode'
+    | 'priceIncludesTax'
+    | 'priceWithTax'
+    | 'stockOnHand'
+    | 'trackInventory'
+    | 'sku'
+> & {
+        taxRateApplied: { __typename?: 'TaxRate' } & Pick<TaxRate, 'id' | 'name' | 'value'>;
+        taxCategory: { __typename?: 'TaxCategory' } & Pick<TaxCategory, 'id' | 'name'>;
+        options: Array<
+            { __typename?: 'ProductOption' } & Pick<ProductOption, 'id' | 'code' | 'languageCode' | 'name'>
+        >;
+        facetValues: Array<
+            { __typename?: 'FacetValue' } & Pick<FacetValue, 'id' | 'code' | 'name'> & {
+                    facet: { __typename?: 'Facet' } & Pick<Facet, 'id' | 'name'>;
+                }
+        >;
+        featuredAsset: Maybe<{ __typename?: 'Asset' } & AssetFragment>;
+        assets: Array<{ __typename?: 'Asset' } & AssetFragment>;
+        translations: Array<
+            { __typename?: 'ProductVariantTranslation' } & Pick<
+                ProductVariantTranslation,
+                'id' | 'languageCode' | 'name'
+            >
+        >;
+    };
+
+export type ProductWithVariantsFragment = { __typename?: 'Product' } & Pick<
+    Product,
+    'id' | 'enabled' | 'languageCode' | 'name' | 'slug' | 'description'
+> & {
+        featuredAsset: Maybe<{ __typename?: 'Asset' } & AssetFragment>;
+        assets: Array<{ __typename?: 'Asset' } & AssetFragment>;
+        translations: Array<
+            { __typename?: 'ProductTranslation' } & Pick<
+                ProductTranslation,
+                'languageCode' | 'name' | 'slug' | 'description'
+            >
+        >;
+        optionGroups: Array<
+            { __typename?: 'ProductOptionGroup' } & Pick<
+                ProductOptionGroup,
+                'id' | 'languageCode' | 'code' | 'name'
+            >
+        >;
+        variants: Array<{ __typename?: 'ProductVariant' } & ProductVariantFragment>;
+        facetValues: Array<
+            { __typename?: 'FacetValue' } & Pick<FacetValue, 'id' | 'code' | 'name'> & {
+                    facet: { __typename?: 'Facet' } & Pick<Facet, 'id' | 'name'>;
+                }
+        >;
+    };
+
+export type RoleFragment = { __typename?: 'Role' } & Pick<
+    Role,
+    'id' | 'code' | 'description' | 'permissions'
+> & { channels: Array<{ __typename?: 'Channel' } & Pick<Channel, 'id' | 'code' | 'token'>> };
+
+export type ConfigurableOperationFragment = { __typename?: 'ConfigurableOperation' } & Pick<
+    ConfigurableOperation,
+    'code' | 'description'
+> & { args: Array<{ __typename?: 'ConfigArg' } & Pick<ConfigArg, 'name' | 'type' | 'value'>> };
+
+export type CollectionFragment = { __typename?: 'Collection' } & Pick<
+    Collection,
+    'id' | 'name' | 'description' | 'isPrivate' | 'languageCode'
+> & {
+        featuredAsset: Maybe<{ __typename?: 'Asset' } & AssetFragment>;
+        assets: Array<{ __typename?: 'Asset' } & AssetFragment>;
+        filters: Array<{ __typename?: 'ConfigurableOperation' } & ConfigurableOperationFragment>;
+        translations: Array<
+            { __typename?: 'CollectionTranslation' } & Pick<
+                CollectionTranslation,
+                'id' | 'languageCode' | 'name' | 'description'
+            >
+        >;
+        parent: Maybe<{ __typename?: 'Collection' } & Pick<Collection, 'id' | 'name'>>;
+        children: Maybe<Array<{ __typename?: 'Collection' } & Pick<Collection, 'id' | 'name'>>>;
+    };
+
+export type FacetValueFragment = { __typename?: 'FacetValue' } & Pick<
+    FacetValue,
+    'id' | 'languageCode' | 'code' | 'name'
+> & {
+        translations: Array<
+            { __typename?: 'FacetValueTranslation' } & Pick<
+                FacetValueTranslation,
+                'id' | 'languageCode' | 'name'
+            >
+        >;
+        facet: { __typename?: 'Facet' } & Pick<Facet, 'id' | 'name'>;
+    };
+
+export type FacetWithValuesFragment = { __typename?: 'Facet' } & Pick<
+    Facet,
+    'id' | 'languageCode' | 'isPrivate' | 'code' | 'name'
+> & {
+        translations: Array<
+            { __typename?: 'FacetTranslation' } & Pick<FacetTranslation, 'id' | 'languageCode' | 'name'>
+        >;
+        values: Array<{ __typename?: 'FacetValue' } & FacetValueFragment>;
+    };
+
+export type CountryFragment = { __typename?: 'Country' } & Pick<
+    Country,
+    'id' | 'code' | 'name' | 'enabled'
+> & {
+        translations: Array<
+            { __typename?: 'CountryTranslation' } & Pick<CountryTranslation, 'id' | 'languageCode' | 'name'>
+        >;
+    };
+
+export type AddressFragment = { __typename?: 'Address' } & Pick<
+    Address,
+    | 'id'
+    | 'fullName'
+    | 'company'
+    | 'streetLine1'
+    | 'streetLine2'
+    | 'city'
+    | 'province'
+    | 'postalCode'
+    | 'phoneNumber'
+    | 'defaultShippingAddress'
+    | 'defaultBillingAddress'
+> & { country: { __typename?: 'Country' } & Pick<Country, 'id' | 'code' | 'name'> };
+
+export type CustomerFragment = { __typename?: 'Customer' } & Pick<
+    Customer,
+    'id' | 'title' | 'firstName' | 'lastName' | 'phoneNumber' | 'emailAddress'
+> & {
+        user: Maybe<{ __typename?: 'User' } & Pick<User, 'id' | 'identifier' | 'verified' | 'lastLogin'>>;
+        addresses: Maybe<Array<{ __typename?: 'Address' } & AddressFragment>>;
+    };
+
+export type AdjustmentFragment = { __typename?: 'Adjustment' } & Pick<
+    Adjustment,
+    'adjustmentSource' | 'amount' | 'description' | 'type'
+>;
+
+export type ShippingAddressFragment = { __typename?: 'OrderAddress' } & Pick<
+    OrderAddress,
+    | 'fullName'
+    | 'company'
+    | 'streetLine1'
+    | 'streetLine2'
+    | 'city'
+    | 'province'
+    | 'postalCode'
+    | 'country'
+    | 'phoneNumber'
+>;
+
+export type OrderFragment = { __typename?: 'Order' } & Pick<
+    Order,
+    'id' | 'createdAt' | 'updatedAt' | 'code' | 'state' | 'total' | 'currencyCode'
+> & { customer: Maybe<{ __typename?: 'Customer' } & Pick<Customer, 'id' | 'firstName' | 'lastName'>> };
+
+export type OrderWithLinesFragment = { __typename?: 'Order' } & Pick<
+    Order,
+    | 'id'
+    | 'createdAt'
+    | 'updatedAt'
+    | 'code'
+    | 'state'
+    | 'active'
+    | 'subTotal'
+    | 'subTotalBeforeTax'
+    | 'totalBeforeTax'
+    | 'currencyCode'
+    | 'shipping'
+    | 'total'
+> & {
+        customer: Maybe<{ __typename?: 'Customer' } & Pick<Customer, 'id' | 'firstName' | 'lastName'>>;
+        lines: Array<
+            { __typename?: 'OrderLine' } & Pick<
+                OrderLine,
+                'id' | 'unitPrice' | 'unitPriceWithTax' | 'quantity' | 'totalPrice'
+            > & {
+                    featuredAsset: Maybe<{ __typename?: 'Asset' } & Pick<Asset, 'preview'>>;
+                    productVariant: { __typename?: 'ProductVariant' } & Pick<
+                        ProductVariant,
+                        'id' | 'name' | 'sku'
+                    >;
+                    items: Array<
+                        { __typename?: 'OrderItem' } & Pick<
+                            OrderItem,
+                            'id' | 'unitPrice' | 'unitPriceIncludesTax' | 'unitPriceWithTax' | 'taxRate'
+                        >
+                    >;
+                }
+        >;
+        adjustments: Array<{ __typename?: 'Adjustment' } & AdjustmentFragment>;
+        shippingMethod: Maybe<
+            { __typename?: 'ShippingMethod' } & Pick<ShippingMethod, 'id' | 'code' | 'description'>
+        >;
+        shippingAddress: Maybe<{ __typename?: 'OrderAddress' } & ShippingAddressFragment>;
+        payments: Maybe<
+            Array<
+                { __typename?: 'Payment' } & Pick<
+                    Payment,
+                    'id' | 'transactionId' | 'amount' | 'method' | 'state' | 'metadata'
+                >
+            >
+        >;
+    };
+
+export type PromotionFragment = { __typename?: 'Promotion' } & Pick<
+    Promotion,
+    'id' | 'createdAt' | 'updatedAt' | 'name' | 'enabled'
+> & {
+        conditions: Array<{ __typename?: 'ConfigurableOperation' } & ConfigurableOperationFragment>;
+        actions: Array<{ __typename?: 'ConfigurableOperation' } & ConfigurableOperationFragment>;
+    };
+
+export type ZoneFragment = { __typename?: 'Zone' } & Pick<Zone, 'id' | 'name'> & {
+        members: Array<{ __typename?: 'Country' } & CountryFragment>;
+    };
+
+export type TaxRateFragment = { __typename?: 'TaxRate' } & Pick<
+    TaxRate,
+    'id' | 'name' | 'enabled' | 'value'
+> & {
+        category: { __typename?: 'TaxCategory' } & Pick<TaxCategory, 'id' | 'name'>;
+        zone: { __typename?: 'Zone' } & Pick<Zone, 'id' | 'name'>;
+        customerGroup: Maybe<{ __typename?: 'CustomerGroup' } & Pick<CustomerGroup, 'id' | 'name'>>;
+    };
+
+export type CreateAdministratorMutationVariables = {
+    input: CreateAdministratorInput;
+};
+
+export type CreateAdministratorMutation = { __typename?: 'Mutation' } & {
+    createAdministrator: { __typename?: 'Administrator' } & AdministratorFragment;
+};
+
+export type UpdateProductMutationVariables = {
+    input: UpdateProductInput;
+};
+
+export type UpdateProductMutation = { __typename?: 'Mutation' } & {
+    updateProduct: { __typename?: 'Product' } & ProductWithVariantsFragment;
+};
+
+export type CreateProductMutationVariables = {
+    input: CreateProductInput;
+};
+
+export type CreateProductMutation = { __typename?: 'Mutation' } & {
+    createProduct: { __typename?: 'Product' } & ProductWithVariantsFragment;
+};
+
+export type GetProductWithVariantsQueryVariables = {
+    id: Scalars['ID'];
+    languageCode?: Maybe<LanguageCode>;
+};
+
+export type GetProductWithVariantsQuery = { __typename?: 'Query' } & {
+    product: Maybe<{ __typename?: 'Product' } & ProductWithVariantsFragment>;
+};
+
+export type GetProductListQueryVariables = {
+    options?: Maybe<ProductListOptions>;
+    languageCode?: Maybe<LanguageCode>;
+};
+
+export type GetProductListQuery = { __typename?: 'Query' } & {
+    products: { __typename?: 'ProductList' } & Pick<ProductList, 'totalItems'> & {
+            items: Array<
+                { __typename?: 'Product' } & Pick<
+                    Product,
+                    'id' | 'enabled' | 'languageCode' | 'name' | 'slug'
+                > & { featuredAsset: Maybe<{ __typename?: 'Asset' } & Pick<Asset, 'id' | 'preview'>> }
+            >;
+        };
+};
+
+export type UpdateProductVariantsMutationVariables = {
+    input: Array<UpdateProductVariantInput>;
+};
+
+export type UpdateProductVariantsMutation = { __typename?: 'Mutation' } & {
+    updateProductVariants: Array<Maybe<{ __typename?: 'ProductVariant' } & ProductVariantFragment>>;
+};
+
+export type UpdateTaxRateMutationVariables = {
+    input: UpdateTaxRateInput;
+};
+
+export type UpdateTaxRateMutation = { __typename?: 'Mutation' } & {
+    updateTaxRate: { __typename?: 'TaxRate' } & TaxRateFragment;
+};
+
+export type CreateFacetMutationVariables = {
+    input: CreateFacetInput;
+};
+
+export type CreateFacetMutation = { __typename?: 'Mutation' } & {
+    createFacet: { __typename?: 'Facet' } & FacetWithValuesFragment;
+};
+
+export type UpdateFacetMutationVariables = {
+    input: UpdateFacetInput;
+};
+
+export type UpdateFacetMutation = { __typename?: 'Mutation' } & {
+    updateFacet: { __typename?: 'Facet' } & FacetWithValuesFragment;
+};
+
+export type GetCustomerListQueryVariables = {
+    options?: Maybe<CustomerListOptions>;
+};
+
+export type GetCustomerListQuery = { __typename?: 'Query' } & {
+    customers: { __typename?: 'CustomerList' } & Pick<CustomerList, 'totalItems'> & {
+            items: Array<
+                { __typename?: 'Customer' } & Pick<
+                    Customer,
+                    'id' | 'title' | 'firstName' | 'lastName' | 'emailAddress'
+                > & { user: Maybe<{ __typename?: 'User' } & Pick<User, 'id' | 'verified'>> }
+            >;
+        };
+};
+
+export type GetAssetListQueryVariables = {
+    options?: Maybe<AssetListOptions>;
+};
+
+export type GetAssetListQuery = { __typename?: 'Query' } & {
+    assets: { __typename?: 'AssetList' } & Pick<AssetList, 'totalItems'> & {
+            items: Array<{ __typename?: 'Asset' } & AssetFragment>;
+        };
+};
+
+export type CreateRoleMutationVariables = {
+    input: CreateRoleInput;
+};
+
+export type CreateRoleMutation = { __typename?: 'Mutation' } & {
+    createRole: { __typename?: 'Role' } & RoleFragment;
+};
+
+export type CreateCollectionMutationVariables = {
+    input: CreateCollectionInput;
+};
+
+export type CreateCollectionMutation = { __typename?: 'Mutation' } & {
+    createCollection: { __typename?: 'Collection' } & CollectionFragment;
+};
+
+export type UpdateCollectionMutationVariables = {
+    input: UpdateCollectionInput;
+};
+
+export type UpdateCollectionMutation = { __typename?: 'Mutation' } & {
+    updateCollection: { __typename?: 'Collection' } & CollectionFragment;
+};
+
+export type GetCustomerQueryVariables = {
+    id: Scalars['ID'];
+    orderListOptions?: Maybe<OrderListOptions>;
+};
+
+export type GetCustomerQuery = { __typename?: 'Query' } & {
+    customer: Maybe<
+        { __typename?: 'Customer' } & {
+            orders: { __typename?: 'OrderList' } & Pick<OrderList, 'totalItems'> & {
+                    items: Array<
+                        { __typename?: 'Order' } & Pick<
+                            Order,
+                            'id' | 'code' | 'state' | 'total' | 'currencyCode' | 'updatedAt'
+                        >
+                    >;
+                };
+        } & CustomerFragment
+    >;
+};
+
+export type AttemptLoginMutationVariables = {
+    username: Scalars['String'];
+    password: Scalars['String'];
+    rememberMe: Scalars['Boolean'];
+};
+
+export type AttemptLoginMutation = { __typename?: 'Mutation' } & {
+    login: { __typename?: 'LoginResult' } & { user: { __typename?: 'CurrentUser' } & CurrentUserFragment };
+};
+
+export type GetCountryListQueryVariables = {
+    options?: Maybe<CountryListOptions>;
+};
+
+export type GetCountryListQuery = { __typename?: 'Query' } & {
+    countries: { __typename?: 'CountryList' } & Pick<CountryList, 'totalItems'> & {
+            items: Array<{ __typename?: 'Country' } & Pick<Country, 'id' | 'code' | 'name' | 'enabled'>>;
+        };
+};
+
+export type UpdateCountryMutationVariables = {
+    input: UpdateCountryInput;
+};
+
+export type UpdateCountryMutation = { __typename?: 'Mutation' } & {
+    updateCountry: { __typename?: 'Country' } & CountryFragment;
+};
+
+export type GetFacetListQueryVariables = {
+    options?: Maybe<FacetListOptions>;
+    languageCode?: Maybe<LanguageCode>;
+};
+
+export type GetFacetListQuery = { __typename?: 'Query' } & {
+    facets: { __typename?: 'FacetList' } & Pick<FacetList, 'totalItems'> & {
+            items: Array<{ __typename?: 'Facet' } & FacetWithValuesFragment>;
+        };
+};
+
+export type GetProductsQueryVariables = {
+    options?: Maybe<ProductListOptions>;
+};
+
+export type GetProductsQuery = { __typename?: 'Query' } & {
+    products: { __typename?: 'ProductList' } & Pick<ProductList, 'totalItems'> & {
+            items: Array<
+                { __typename?: 'Product' } & Pick<Product, 'id' | 'name' | 'slug' | 'description'> & {
+                        featuredAsset: Maybe<{ __typename?: 'Asset' } & Pick<Asset, 'id' | 'name'>>;
+                        assets: Array<{ __typename?: 'Asset' } & Pick<Asset, 'id' | 'name'>>;
+                        optionGroups: Array<
+                            { __typename?: 'ProductOptionGroup' } & Pick<
+                                ProductOptionGroup,
+                                'id' | 'code' | 'name'
+                            >
+                        >;
+                        facetValues: Array<
+                            { __typename?: 'FacetValue' } & Pick<FacetValue, 'id' | 'name'> & {
+                                    facet: { __typename?: 'Facet' } & Pick<Facet, 'id' | 'name'>;
+                                }
+                        >;
+                        variants: Array<
+                            { __typename?: 'ProductVariant' } & Pick<
+                                ProductVariant,
+                                'id' | 'name' | 'sku' | 'price' | 'stockOnHand' | 'trackInventory'
+                            > & {
+                                    taxCategory: { __typename?: 'TaxCategory' } & Pick<
+                                        TaxCategory,
+                                        'id' | 'name'
+                                    >;
+                                    options: Array<
+                                        { __typename?: 'ProductOption' } & Pick<ProductOption, 'id' | 'code'>
+                                    >;
+                                    assets: Array<{ __typename?: 'Asset' } & Pick<Asset, 'id' | 'name'>>;
+                                    featuredAsset: Maybe<
+                                        { __typename?: 'Asset' } & Pick<Asset, 'id' | 'name'>
+                                    >;
+                                    facetValues: Array<
+                                        { __typename?: 'FacetValue' } & Pick<
+                                            FacetValue,
+                                            'id' | 'code' | 'name'
+                                        > & { facet: { __typename?: 'Facet' } & Pick<Facet, 'id' | 'name'> }
+                                    >;
+                                    stockMovements: { __typename?: 'StockMovementList' } & {
+                                        items: Array<
+                                            {
+                                                __typename?:
+                                                    | 'StockAdjustment'
+                                                    | 'Sale'
+                                                    | 'Cancellation'
+                                                    | 'Return';
+                                            } & Pick<StockMovement, 'id' | 'type' | 'quantity'>
+                                        >;
+                                    };
+                                }
+                        >;
+                    }
+            >;
+        };
+};
+
+export type GetOrderListQueryVariables = {
+    options?: Maybe<OrderListOptions>;
+};
+
+export type GetOrderListQuery = { __typename?: 'Query' } & {
+    orders: { __typename?: 'OrderList' } & Pick<OrderList, 'totalItems'> & {
+            items: Array<{ __typename?: 'Order' } & OrderFragment>;
+        };
+};
+
+export type GetOrderQueryVariables = {
+    id: Scalars['ID'];
+};
+
+export type GetOrderQuery = { __typename?: 'Query' } & {
+    order: Maybe<{ __typename?: 'Order' } & OrderWithLinesFragment>;
+};
+
+export type DeleteProductMutationVariables = {
+    id: Scalars['ID'];
+};
+
+export type DeleteProductMutation = { __typename?: 'Mutation' } & {
+    deleteProduct: { __typename?: 'DeletionResponse' } & Pick<DeletionResponse, 'result'>;
+};
+
+export type AddOptionGroupToProductMutationVariables = {
+    productId: Scalars['ID'];
+    optionGroupId: Scalars['ID'];
+};
+
+export type AddOptionGroupToProductMutation = { __typename?: 'Mutation' } & {
+    addOptionGroupToProduct: { __typename?: 'Product' } & Pick<Product, 'id'> & {
+            optionGroups: Array<
+                { __typename?: 'ProductOptionGroup' } & Pick<ProductOptionGroup, 'id' | 'code'> & {
+                        options: Array<{ __typename?: 'ProductOption' } & Pick<ProductOption, 'id' | 'code'>>;
+                    }
+            >;
+        };
+};
+
+export type RemoveOptionGroupFromProductMutationVariables = {
+    productId: Scalars['ID'];
+    optionGroupId: Scalars['ID'];
+};
+
+export type RemoveOptionGroupFromProductMutation = { __typename?: 'Mutation' } & {
+    removeOptionGroupFromProduct: { __typename?: 'Product' } & Pick<Product, 'id'> & {
+            optionGroups: Array<
+                { __typename?: 'ProductOptionGroup' } & Pick<ProductOptionGroup, 'id' | 'code'> & {
+                        options: Array<{ __typename?: 'ProductOption' } & Pick<ProductOption, 'id' | 'code'>>;
+                    }
+            >;
+        };
+};
+
+export type GenerateProductVariantsMutationVariables = {
+    productId: Scalars['ID'];
+    defaultTaxCategoryId?: Maybe<Scalars['ID']>;
+    defaultPrice?: Maybe<Scalars['Int']>;
+    defaultSku?: Maybe<Scalars['String']>;
+};
+
+export type GenerateProductVariantsMutation = { __typename?: 'Mutation' } & {
+    generateVariantsForProduct: { __typename?: 'Product' } & ProductWithVariantsFragment;
+};
+
+export type DeletePromotionMutationVariables = {
+    id: Scalars['ID'];
+};
+
+export type DeletePromotionMutation = { __typename?: 'Mutation' } & {
+    deletePromotion: { __typename?: 'DeletionResponse' } & Pick<DeletionResponse, 'result'>;
+};
+
+export type GetPromotionListQueryVariables = {
+    options?: Maybe<PromotionListOptions>;
+};
+
+export type GetPromotionListQuery = { __typename?: 'Query' } & {
+    promotions: { __typename?: 'PromotionList' } & Pick<PromotionList, 'totalItems'> & {
+            items: Array<{ __typename?: 'Promotion' } & PromotionFragment>;
+        };
+};
+
+export type GetPromotionQueryVariables = {
+    id: Scalars['ID'];
+};
+
+export type GetPromotionQuery = { __typename?: 'Query' } & {
+    promotion: Maybe<{ __typename?: 'Promotion' } & PromotionFragment>;
+};
+
+export type CreatePromotionMutationVariables = {
+    input: CreatePromotionInput;
+};
+
+export type CreatePromotionMutation = { __typename?: 'Mutation' } & {
+    createPromotion: { __typename?: 'Promotion' } & PromotionFragment;
+};
+
+export type UpdatePromotionMutationVariables = {
+    input: UpdatePromotionInput;
+};
+
+export type UpdatePromotionMutation = { __typename?: 'Mutation' } & {
+    updatePromotion: { __typename?: 'Promotion' } & PromotionFragment;
+};
+
+export type GetAdjustmentOperationsQueryVariables = {};
+
+export type GetAdjustmentOperationsQuery = { __typename?: 'Query' } & {
+    adjustmentOperations: { __typename?: 'AdjustmentOperations' } & {
+        actions: Array<{ __typename?: 'ConfigurableOperation' } & ConfigurableOperationFragment>;
+        conditions: Array<{ __typename?: 'ConfigurableOperation' } & ConfigurableOperationFragment>;
+    };
+};
+
+export type GetRolesQueryVariables = {
+    options?: Maybe<RoleListOptions>;
+};
+
+export type GetRolesQuery = { __typename?: 'Query' } & {
+    roles: { __typename?: 'RoleList' } & Pick<RoleList, 'totalItems'> & {
+            items: Array<{ __typename?: 'Role' } & RoleFragment>;
+        };
+};
+
+export type GetRoleQueryVariables = {
+    id: Scalars['ID'];
+};
+
+export type GetRoleQuery = { __typename?: 'Query' } & { role: Maybe<{ __typename?: 'Role' } & RoleFragment> };
+
+export type UpdateRoleMutationVariables = {
+    input: UpdateRoleInput;
+};
+
+export type UpdateRoleMutation = { __typename?: 'Mutation' } & {
+    updateRole: { __typename?: 'Role' } & RoleFragment;
+};
+
+export type GetMeQueryVariables = {};
+
+export type GetMeQuery = { __typename?: 'Query' } & {
+    me: Maybe<{ __typename?: 'CurrentUser' } & Pick<CurrentUser, 'identifier'>>;
+};
+
+export type GetProductsTake3QueryVariables = {};
+
+export type GetProductsTake3Query = { __typename?: 'Query' } & {
+    products: { __typename?: 'ProductList' } & {
+        items: Array<{ __typename?: 'Product' } & Pick<Product, 'id'>>;
+    };
+};
+
+export type GetProduct1QueryVariables = {};
+
+export type GetProduct1Query = { __typename?: 'Query' } & {
+    product: Maybe<{ __typename?: 'Product' } & Pick<Product, 'id'>>;
+};
+
+export type GetProduct2VariantsQueryVariables = {};
+
+export type GetProduct2VariantsQuery = { __typename?: 'Query' } & {
+    product: Maybe<
+        { __typename?: 'Product' } & Pick<Product, 'id'> & {
+                variants: Array<{ __typename?: 'ProductVariant' } & Pick<ProductVariant, 'id' | 'name'>>;
+            }
+    >;
+};
+
+export type GetProductCollectionQueryVariables = {};
+
+export type GetProductCollectionQuery = { __typename?: 'Query' } & {
+    product: Maybe<
+        { __typename?: 'Product' } & {
+            collections: Array<{ __typename?: 'Collection' } & Pick<Collection, 'id' | 'name'>>;
+        }
+    >;
+};
+
+export type DisableProductMutationVariables = {
+    id: Scalars['ID'];
+};
+
+export type DisableProductMutation = { __typename?: 'Mutation' } & {
+    updateProduct: { __typename?: 'Product' } & Pick<Product, 'id'>;
+};
+
+export type GetCollectionVariantsQueryVariables = {
+    id: Scalars['ID'];
+};
+
+export type GetCollectionVariantsQuery = { __typename?: 'Query' } & {
+    collection: Maybe<
+        { __typename?: 'Collection' } & {
+            productVariants: { __typename?: 'ProductVariantList' } & {
+                items: Array<{ __typename?: 'ProductVariant' } & Pick<ProductVariant, 'id' | 'name'>>;
+            };
+        }
+    >;
+};
+
+export type GetCollectionListQueryVariables = {};
+
+export type GetCollectionListQuery = { __typename?: 'Query' } & {
+    collections: { __typename?: 'CollectionList' } & {
+        items: Array<{ __typename?: 'Collection' } & Pick<Collection, 'id' | 'name'>>;
+    };
+};
+
+export type GetProductFacetValuesQueryVariables = {
+    id: Scalars['ID'];
+};
+
+export type GetProductFacetValuesQuery = { __typename?: 'Query' } & {
+    product: Maybe<
+        { __typename?: 'Product' } & Pick<Product, 'id' | 'name'> & {
+                facetValues: Array<{ __typename?: 'FacetValue' } & Pick<FacetValue, 'name'>>;
+            }
+    >;
+};
+
+export type GetVariantFacetValuesQueryVariables = {
+    id: Scalars['ID'];
+};
+
+export type GetVariantFacetValuesQuery = { __typename?: 'Query' } & {
+    product: Maybe<
+        { __typename?: 'Product' } & Pick<Product, 'id' | 'name'> & {
+                variants: Array<
+                    { __typename?: 'ProductVariant' } & Pick<ProductVariant, 'id'> & {
+                            facetValues: Array<{ __typename?: 'FacetValue' } & Pick<FacetValue, 'name'>>;
+                        }
+                >;
+            }
+    >;
+};
+
+export type GetCustomerIdsQueryVariables = {};
+
+export type GetCustomerIdsQuery = { __typename?: 'Query' } & {
+    customers: { __typename?: 'CustomerList' } & {
+        items: Array<{ __typename?: 'Customer' } & Pick<Customer, 'id'>>;
+    };
+};
+
+export type VariantWithStockFragment = { __typename?: 'ProductVariant' } & Pick<
+    ProductVariant,
+    'id' | 'stockOnHand'
+> & {
+        stockMovements: { __typename?: 'StockMovementList' } & Pick<StockMovementList, 'totalItems'> & {
+                items: Array<
+                    { __typename?: 'StockAdjustment' | 'Sale' | 'Cancellation' | 'Return' } & Pick<
+                        StockMovement,
+                        'id' | 'type' | 'quantity'
+                    >
+                >;
+            };
+    };
+
+export type GetStockMovementQueryVariables = {
+    id: Scalars['ID'];
+};
+
+export type GetStockMovementQuery = { __typename?: 'Query' } & {
+    product: Maybe<
+        { __typename?: 'Product' } & Pick<Product, 'id'> & {
+                variants: Array<{ __typename?: 'ProductVariant' } & VariantWithStockFragment>;
+            }
+    >;
+};
+
+export type UpdateStockMutationVariables = {
+    input: Array<UpdateProductVariantInput>;
+};
+
+export type UpdateStockMutation = { __typename?: 'Mutation' } & {
+    updateProductVariants: Array<Maybe<{ __typename?: 'ProductVariant' } & VariantWithStockFragment>>;
+};
+
+export type DeleteZoneMutationVariables = {
+    id: Scalars['ID'];
+};
+
+export type DeleteZoneMutation = { __typename?: 'Mutation' } & {
+    deleteZone: { __typename?: 'DeletionResponse' } & Pick<DeletionResponse, 'result' | 'message'>;
+};
+
+export type GetZonesQueryVariables = {};
+
+export type GetZonesQuery = { __typename?: 'Query' } & {
+    zones: Array<{ __typename?: 'Zone' } & Pick<Zone, 'id' | 'name'>>;
+};
+
+export type GetZoneQueryVariables = {
+    id: Scalars['ID'];
+};
+
+export type GetZoneQuery = { __typename?: 'Query' } & { zone: Maybe<{ __typename?: 'Zone' } & ZoneFragment> };
+
+export type CreateZoneMutationVariables = {
+    input: CreateZoneInput;
+};
+
+export type CreateZoneMutation = { __typename?: 'Mutation' } & {
+    createZone: { __typename?: 'Zone' } & ZoneFragment;
+};
+
+export type UpdateZoneMutationVariables = {
+    input: UpdateZoneInput;
+};
+
+export type UpdateZoneMutation = { __typename?: 'Mutation' } & {
+    updateZone: { __typename?: 'Zone' } & ZoneFragment;
+};
+
+export type AddMembersToZoneMutationVariables = {
+    zoneId: Scalars['ID'];
+    memberIds: Array<Scalars['ID']>;
+};
+
+export type AddMembersToZoneMutation = { __typename?: 'Mutation' } & {
+    addMembersToZone: { __typename?: 'Zone' } & ZoneFragment;
+};
+
+export type RemoveMembersFromZoneMutationVariables = {
+    zoneId: Scalars['ID'];
+    memberIds: Array<Scalars['ID']>;
+};
+
+export type RemoveMembersFromZoneMutation = { __typename?: 'Mutation' } & {
+    removeMembersFromZone: { __typename?: 'Zone' } & ZoneFragment;
+};
+type DiscriminateUnion<T, U> = T extends U ? T : never;
+
+type RequireField<T, TNames extends string> = T & { [P in TNames]: (T & { [name: string]: never })[P] };
+
+export namespace GetAdministrators {
+    export type Variables = GetAdministratorsQueryVariables;
+    export type Query = GetAdministratorsQuery;
+    export type Administrators = GetAdministratorsQuery['administrators'];
+    export type Items = AdministratorFragment;
+}
+
+export namespace GetAdministrator {
+    export type Variables = GetAdministratorQueryVariables;
+    export type Query = GetAdministratorQuery;
+    export type Administrator = AdministratorFragment;
+}
+
+export namespace UpdateAdministrator {
+    export type Variables = UpdateAdministratorMutationVariables;
+    export type Mutation = UpdateAdministratorMutation;
+    export type UpdateAdministrator = AdministratorFragment;
+}
+
+export namespace CreateCustomer {
+    export type Variables = CreateCustomerMutationVariables;
+    export type Mutation = CreateCustomerMutation;
+    export type CreateCustomer = CreateCustomerMutation['createCustomer'];
+}
+
+export namespace GetCustomerCount {
+    export type Variables = GetCustomerCountQueryVariables;
+    export type Query = GetCustomerCountQuery;
+    export type Customers = GetCustomerCountQuery['customers'];
+}
+
+export namespace CurrentUser {
+    export type Fragment = CurrentUserFragment;
+}
+
+export namespace GetProductsWithVariantIds {
+    export type Variables = GetProductsWithVariantIdsQueryVariables;
+    export type Query = GetProductsWithVariantIdsQuery;
+    export type Products = GetProductsWithVariantIdsQuery['products'];
+    export type Items = NonNullable<GetProductsWithVariantIdsQuery['products']['items'][0]>;
+    export type Variants = NonNullable<
+        (NonNullable<GetProductsWithVariantIdsQuery['products']['items'][0]>)['variants'][0]
+    >;
+}
+
+export namespace GetCollection {
+    export type Variables = GetCollectionQueryVariables;
+    export type Query = GetCollectionQuery;
+    export type Collection = CollectionFragment;
+}
+
+export namespace MoveCollection {
+    export type Variables = MoveCollectionMutationVariables;
+    export type Mutation = MoveCollectionMutation;
+    export type MoveCollection = CollectionFragment;
+}
+
+export namespace GetFacetValues {
+    export type Variables = GetFacetValuesQueryVariables;
+    export type Query = GetFacetValuesQuery;
+    export type Facets = GetFacetValuesQuery['facets'];
+    export type Items = NonNullable<GetFacetValuesQuery['facets']['items'][0]>;
+    export type Values = FacetValueFragment;
+}
+
+export namespace GetCollections {
+    export type Variables = GetCollectionsQueryVariables;
+    export type Query = GetCollectionsQuery;
+    export type Collections = GetCollectionsQuery['collections'];
+    export type Items = NonNullable<GetCollectionsQuery['collections']['items'][0]>;
+    export type Parent = NonNullable<(NonNullable<GetCollectionsQuery['collections']['items'][0]>)['parent']>;
+}
+
+export namespace GetCollectionProducts {
+    export type Variables = GetCollectionProductsQueryVariables;
+    export type Query = GetCollectionProductsQuery;
+    export type Collection = NonNullable<GetCollectionProductsQuery['collection']>;
+    export type ProductVariants = (NonNullable<GetCollectionProductsQuery['collection']>)['productVariants'];
+    export type Items = NonNullable<
+        (NonNullable<GetCollectionProductsQuery['collection']>)['productVariants']['items'][0]
+    >;
+    export type FacetValues = NonNullable<
+        (NonNullable<
+            (NonNullable<GetCollectionProductsQuery['collection']>)['productVariants']['items'][0]
+        >)['facetValues'][0]
+    >;
+}
+
+export namespace CreateCollectionSelectVariants {
+    export type Variables = CreateCollectionSelectVariantsMutationVariables;
+    export type Mutation = CreateCollectionSelectVariantsMutation;
+    export type CreateCollection = CreateCollectionSelectVariantsMutation['createCollection'];
+    export type ProductVariants = CreateCollectionSelectVariantsMutation['createCollection']['productVariants'];
+    export type Items = NonNullable<
+        CreateCollectionSelectVariantsMutation['createCollection']['productVariants']['items'][0]
+    >;
+}
+
+export namespace GetCollectionBreadcrumbs {
+    export type Variables = GetCollectionBreadcrumbsQueryVariables;
+    export type Query = GetCollectionBreadcrumbsQuery;
+    export type Collection = NonNullable<GetCollectionBreadcrumbsQuery['collection']>;
+    export type Breadcrumbs = NonNullable<
+        (NonNullable<GetCollectionBreadcrumbsQuery['collection']>)['breadcrumbs'][0]
+    >;
+}
+
+export namespace GetCollectionsForProducts {
+    export type Variables = GetCollectionsForProductsQueryVariables;
+    export type Query = GetCollectionsForProductsQuery;
+    export type Products = GetCollectionsForProductsQuery['products'];
+    export type Items = NonNullable<GetCollectionsForProductsQuery['products']['items'][0]>;
+    export type Collections = NonNullable<
+        (NonNullable<GetCollectionsForProductsQuery['products']['items'][0]>)['collections'][0]
+    >;
+}
+
+export namespace DeleteCountry {
+    export type Variables = DeleteCountryMutationVariables;
+    export type Mutation = DeleteCountryMutation;
+    export type DeleteCountry = DeleteCountryMutation['deleteCountry'];
+}
+
+export namespace GetCountry {
+    export type Variables = GetCountryQueryVariables;
+    export type Query = GetCountryQuery;
+    export type Country = CountryFragment;
+}
+
+export namespace CreateCountry {
+    export type Variables = CreateCountryMutationVariables;
+    export type Mutation = CreateCountryMutation;
+    export type CreateCountry = CountryFragment;
+}
+
+export namespace DeleteCustomerAddress {
+    export type Variables = DeleteCustomerAddressMutationVariables;
+    export type Mutation = DeleteCustomerAddressMutation;
+}
+
+export namespace CreateAddress {
+    export type Variables = CreateAddressMutationVariables;
+    export type Mutation = CreateAddressMutation;
+    export type CreateCustomerAddress = CreateAddressMutation['createCustomerAddress'];
+    export type Country = CreateAddressMutation['createCustomerAddress']['country'];
+}
+
+export namespace UpdateAddress {
+    export type Variables = UpdateAddressMutationVariables;
+    export type Mutation = UpdateAddressMutation;
+    export type UpdateCustomerAddress = UpdateAddressMutation['updateCustomerAddress'];
+    export type Country = UpdateAddressMutation['updateCustomerAddress']['country'];
+}
+
+export namespace GetCustomerOrders {
+    export type Variables = GetCustomerOrdersQueryVariables;
+    export type Query = GetCustomerOrdersQuery;
+    export type Customer = NonNullable<GetCustomerOrdersQuery['customer']>;
+    export type Orders = (NonNullable<GetCustomerOrdersQuery['customer']>)['orders'];
+    export type Items = NonNullable<(NonNullable<GetCustomerOrdersQuery['customer']>)['orders']['items'][0]>;
+}
+
+export namespace UpdateCustomer {
+    export type Variables = UpdateCustomerMutationVariables;
+    export type Mutation = UpdateCustomerMutation;
+    export type UpdateCustomer = CustomerFragment;
+}
+
+export namespace DeleteCustomer {
+    export type Variables = DeleteCustomerMutationVariables;
+    export type Mutation = DeleteCustomerMutation;
+    export type DeleteCustomer = DeleteCustomerMutation['deleteCustomer'];
+}
+
+export namespace SearchProductsAdmin {
+    export type Variables = SearchProductsAdminQueryVariables;
+    export type Query = SearchProductsAdminQuery;
+    export type Search = SearchProductsAdminQuery['search'];
+    export type Items = NonNullable<SearchProductsAdminQuery['search']['items'][0]>;
+}
+
+export namespace SearchFacetValues {
+    export type Variables = SearchFacetValuesQueryVariables;
+    export type Query = SearchFacetValuesQuery;
+    export type Search = SearchFacetValuesQuery['search'];
+    export type FacetValues = NonNullable<SearchFacetValuesQuery['search']['facetValues'][0]>;
+    export type FacetValue = (NonNullable<SearchFacetValuesQuery['search']['facetValues'][0]>)['facetValue'];
+}
+
+export namespace SearchGetPrices {
+    export type Variables = SearchGetPricesQueryVariables;
+    export type Query = SearchGetPricesQuery;
+    export type Search = SearchGetPricesQuery['search'];
+    export type Items = NonNullable<SearchGetPricesQuery['search']['items'][0]>;
+    export type Price = (NonNullable<SearchGetPricesQuery['search']['items'][0]>)['price'];
+    export type PriceRangeInlineFragment = DiscriminateUnion<
+        RequireField<(NonNullable<SearchGetPricesQuery['search']['items'][0]>)['price'], '__typename'>,
+        { __typename: 'PriceRange' }
+    >;
+    export type SinglePriceInlineFragment = DiscriminateUnion<
+        RequireField<(NonNullable<SearchGetPricesQuery['search']['items'][0]>)['price'], '__typename'>,
+        { __typename: 'SinglePrice' }
+    >;
+    export type PriceWithTax = (NonNullable<SearchGetPricesQuery['search']['items'][0]>)['priceWithTax'];
+    export type _PriceRangeInlineFragment = DiscriminateUnion<
+        RequireField<(NonNullable<SearchGetPricesQuery['search']['items'][0]>)['priceWithTax'], '__typename'>,
+        { __typename: 'PriceRange' }
+    >;
+    export type _SinglePriceInlineFragment = DiscriminateUnion<
+        RequireField<(NonNullable<SearchGetPricesQuery['search']['items'][0]>)['priceWithTax'], '__typename'>,
+        { __typename: 'SinglePrice' }
+    >;
+}
+
+export namespace EntityIdTest {
+    export type Variables = EntityIdTestQueryVariables;
+    export type Query = EntityIdTestQuery;
+    export type Product = NonNullable<EntityIdTestQuery['product']>;
+    export type Variants = NonNullable<(NonNullable<EntityIdTestQuery['product']>)['variants'][0]>;
+    export type Options = NonNullable<
+        (NonNullable<(NonNullable<EntityIdTestQuery['product']>)['variants'][0]>)['options'][0]
+    >;
+}
+
+export namespace GetFacetWithValues {
+    export type Variables = GetFacetWithValuesQueryVariables;
+    export type Query = GetFacetWithValuesQuery;
+    export type Facet = FacetWithValuesFragment;
+}
+
+export namespace DeleteFacetValue {
+    export type Variables = DeleteFacetValueMutationVariables;
+    export type Mutation = DeleteFacetValueMutation;
+    export type DeleteFacetValues = NonNullable<DeleteFacetValueMutation['deleteFacetValues'][0]>;
+}
+
+export namespace DeleteFacet {
+    export type Variables = DeleteFacetMutationVariables;
+    export type Mutation = DeleteFacetMutation;
+    export type DeleteFacet = DeleteFacetMutation['deleteFacet'];
+}
+
+export namespace GetProductListWithVariants {
+    export type Variables = GetProductListWithVariantsQueryVariables;
+    export type Query = GetProductListWithVariantsQuery;
+    export type Products = GetProductListWithVariantsQuery['products'];
+    export type Items = NonNullable<GetProductListWithVariantsQuery['products']['items'][0]>;
+    export type Variants = NonNullable<
+        (NonNullable<GetProductListWithVariantsQuery['products']['items'][0]>)['variants'][0]
+    >;
+}
+
+export namespace CreateFacetValues {
+    export type Variables = CreateFacetValuesMutationVariables;
+    export type Mutation = CreateFacetValuesMutation;
+    export type CreateFacetValues = FacetValueFragment;
+}
+
+export namespace UpdateFacetValues {
+    export type Variables = UpdateFacetValuesMutationVariables;
+    export type Mutation = UpdateFacetValuesMutation;
+    export type UpdateFacetValues = FacetValueFragment;
+}
+
+export namespace Administrator {
+    export type Fragment = AdministratorFragment;
+    export type User = AdministratorFragment['user'];
+    export type Roles = NonNullable<AdministratorFragment['user']['roles'][0]>;
+}
+
+export namespace Asset {
+    export type Fragment = AssetFragment;
+}
+
+export namespace ProductVariant {
+    export type Fragment = ProductVariantFragment;
+    export type TaxRateApplied = ProductVariantFragment['taxRateApplied'];
+    export type TaxCategory = ProductVariantFragment['taxCategory'];
+    export type Options = NonNullable<ProductVariantFragment['options'][0]>;
+    export type FacetValues = NonNullable<ProductVariantFragment['facetValues'][0]>;
+    export type Facet = (NonNullable<ProductVariantFragment['facetValues'][0]>)['facet'];
+    export type FeaturedAsset = AssetFragment;
+    export type Assets = AssetFragment;
+    export type Translations = NonNullable<ProductVariantFragment['translations'][0]>;
+}
+
+export namespace ProductWithVariants {
+    export type Fragment = ProductWithVariantsFragment;
+    export type FeaturedAsset = AssetFragment;
+    export type Assets = AssetFragment;
+    export type Translations = NonNullable<ProductWithVariantsFragment['translations'][0]>;
+    export type OptionGroups = NonNullable<ProductWithVariantsFragment['optionGroups'][0]>;
+    export type Variants = ProductVariantFragment;
+    export type FacetValues = NonNullable<ProductWithVariantsFragment['facetValues'][0]>;
+    export type Facet = (NonNullable<ProductWithVariantsFragment['facetValues'][0]>)['facet'];
+}
+
+export namespace Role {
+    export type Fragment = RoleFragment;
+    export type Channels = NonNullable<RoleFragment['channels'][0]>;
+}
+
+export namespace ConfigurableOperation {
+    export type Fragment = ConfigurableOperationFragment;
+    export type Args = NonNullable<ConfigurableOperationFragment['args'][0]>;
+}
+
+export namespace Collection {
+    export type Fragment = CollectionFragment;
+    export type FeaturedAsset = AssetFragment;
+    export type Assets = AssetFragment;
+    export type Filters = ConfigurableOperationFragment;
+    export type Translations = NonNullable<CollectionFragment['translations'][0]>;
+    export type Parent = NonNullable<CollectionFragment['parent']>;
+    export type Children = NonNullable<(NonNullable<CollectionFragment['children']>)[0]>;
+}
+
+export namespace FacetValue {
+    export type Fragment = FacetValueFragment;
+    export type Translations = NonNullable<FacetValueFragment['translations'][0]>;
+    export type Facet = FacetValueFragment['facet'];
+}
+
+export namespace FacetWithValues {
+    export type Fragment = FacetWithValuesFragment;
+    export type Translations = NonNullable<FacetWithValuesFragment['translations'][0]>;
+    export type Values = FacetValueFragment;
+}
+
+export namespace Country {
+    export type Fragment = CountryFragment;
+    export type Translations = NonNullable<CountryFragment['translations'][0]>;
+}
+
+export namespace Address {
+    export type Fragment = AddressFragment;
+    export type Country = AddressFragment['country'];
+}
+
+export namespace Customer {
+    export type Fragment = CustomerFragment;
+    export type User = NonNullable<CustomerFragment['user']>;
+    export type Addresses = AddressFragment;
+}
+
+export namespace Adjustment {
+    export type Fragment = AdjustmentFragment;
+}
+
+export namespace ShippingAddress {
+    export type Fragment = ShippingAddressFragment;
+}
+
+export namespace Order {
+    export type Fragment = OrderFragment;
+    export type Customer = NonNullable<OrderFragment['customer']>;
+}
+
+export namespace OrderWithLines {
+    export type Fragment = OrderWithLinesFragment;
+    export type Customer = NonNullable<OrderWithLinesFragment['customer']>;
+    export type Lines = NonNullable<OrderWithLinesFragment['lines'][0]>;
+    export type FeaturedAsset = NonNullable<
+        (NonNullable<OrderWithLinesFragment['lines'][0]>)['featuredAsset']
+    >;
+    export type ProductVariant = (NonNullable<OrderWithLinesFragment['lines'][0]>)['productVariant'];
+    export type Items = NonNullable<(NonNullable<OrderWithLinesFragment['lines'][0]>)['items'][0]>;
+    export type Adjustments = AdjustmentFragment;
+    export type ShippingMethod = NonNullable<OrderWithLinesFragment['shippingMethod']>;
+    export type ShippingAddress = ShippingAddressFragment;
+    export type Payments = NonNullable<(NonNullable<OrderWithLinesFragment['payments']>)[0]>;
+}
+
+export namespace Promotion {
+    export type Fragment = PromotionFragment;
+    export type Conditions = ConfigurableOperationFragment;
+    export type Actions = ConfigurableOperationFragment;
+}
+
+export namespace Zone {
+    export type Fragment = ZoneFragment;
+    export type Members = CountryFragment;
+}
+
+export namespace TaxRate {
+    export type Fragment = TaxRateFragment;
+    export type Category = TaxRateFragment['category'];
+    export type Zone = TaxRateFragment['zone'];
+    export type CustomerGroup = NonNullable<TaxRateFragment['customerGroup']>;
+}
+
+export namespace CreateAdministrator {
+    export type Variables = CreateAdministratorMutationVariables;
+    export type Mutation = CreateAdministratorMutation;
+    export type CreateAdministrator = AdministratorFragment;
+}
+
+export namespace UpdateProduct {
+    export type Variables = UpdateProductMutationVariables;
+    export type Mutation = UpdateProductMutation;
+    export type UpdateProduct = ProductWithVariantsFragment;
+}
+
+export namespace CreateProduct {
+    export type Variables = CreateProductMutationVariables;
+    export type Mutation = CreateProductMutation;
+    export type CreateProduct = ProductWithVariantsFragment;
+}
+
+export namespace GetProductWithVariants {
+    export type Variables = GetProductWithVariantsQueryVariables;
+    export type Query = GetProductWithVariantsQuery;
+    export type Product = ProductWithVariantsFragment;
+}
+
+export namespace GetProductList {
+    export type Variables = GetProductListQueryVariables;
+    export type Query = GetProductListQuery;
+    export type Products = GetProductListQuery['products'];
+    export type Items = NonNullable<GetProductListQuery['products']['items'][0]>;
+    export type FeaturedAsset = NonNullable<
+        (NonNullable<GetProductListQuery['products']['items'][0]>)['featuredAsset']
+    >;
+}
+
+export namespace UpdateProductVariants {
+    export type Variables = UpdateProductVariantsMutationVariables;
+    export type Mutation = UpdateProductVariantsMutation;
+    export type UpdateProductVariants = ProductVariantFragment;
+}
+
+export namespace UpdateTaxRate {
+    export type Variables = UpdateTaxRateMutationVariables;
+    export type Mutation = UpdateTaxRateMutation;
+    export type UpdateTaxRate = TaxRateFragment;
+}
+
+export namespace CreateFacet {
+    export type Variables = CreateFacetMutationVariables;
+    export type Mutation = CreateFacetMutation;
+    export type CreateFacet = FacetWithValuesFragment;
+}
+
+export namespace UpdateFacet {
+    export type Variables = UpdateFacetMutationVariables;
+    export type Mutation = UpdateFacetMutation;
+    export type UpdateFacet = FacetWithValuesFragment;
+}
+
+export namespace GetCustomerList {
+    export type Variables = GetCustomerListQueryVariables;
+    export type Query = GetCustomerListQuery;
+    export type Customers = GetCustomerListQuery['customers'];
+    export type Items = NonNullable<GetCustomerListQuery['customers']['items'][0]>;
+    export type User = NonNullable<(NonNullable<GetCustomerListQuery['customers']['items'][0]>)['user']>;
+}
+
+export namespace GetAssetList {
+    export type Variables = GetAssetListQueryVariables;
+    export type Query = GetAssetListQuery;
+    export type Assets = GetAssetListQuery['assets'];
+    export type Items = AssetFragment;
+}
+
+export namespace CreateRole {
+    export type Variables = CreateRoleMutationVariables;
+    export type Mutation = CreateRoleMutation;
+    export type CreateRole = RoleFragment;
+}
+
+export namespace CreateCollection {
+    export type Variables = CreateCollectionMutationVariables;
+    export type Mutation = CreateCollectionMutation;
+    export type CreateCollection = CollectionFragment;
+}
+
+export namespace UpdateCollection {
+    export type Variables = UpdateCollectionMutationVariables;
+    export type Mutation = UpdateCollectionMutation;
+    export type UpdateCollection = CollectionFragment;
+}
+
+export namespace GetCustomer {
+    export type Variables = GetCustomerQueryVariables;
+    export type Query = GetCustomerQuery;
+    export type Customer = CustomerFragment;
+    export type Orders = (NonNullable<GetCustomerQuery['customer']>)['orders'];
+    export type Items = NonNullable<(NonNullable<GetCustomerQuery['customer']>)['orders']['items'][0]>;
+}
+
+export namespace AttemptLogin {
+    export type Variables = AttemptLoginMutationVariables;
+    export type Mutation = AttemptLoginMutation;
+    export type Login = AttemptLoginMutation['login'];
+    export type User = CurrentUserFragment;
+}
+
+export namespace GetCountryList {
+    export type Variables = GetCountryListQueryVariables;
+    export type Query = GetCountryListQuery;
+    export type Countries = GetCountryListQuery['countries'];
+    export type Items = NonNullable<GetCountryListQuery['countries']['items'][0]>;
+}
+
+export namespace UpdateCountry {
+    export type Variables = UpdateCountryMutationVariables;
+    export type Mutation = UpdateCountryMutation;
+    export type UpdateCountry = CountryFragment;
+}
+
+export namespace GetFacetList {
+    export type Variables = GetFacetListQueryVariables;
+    export type Query = GetFacetListQuery;
+    export type Facets = GetFacetListQuery['facets'];
+    export type Items = FacetWithValuesFragment;
+}
+
+export namespace GetProducts {
+    export type Variables = GetProductsQueryVariables;
+    export type Query = GetProductsQuery;
+    export type Products = GetProductsQuery['products'];
+    export type Items = NonNullable<GetProductsQuery['products']['items'][0]>;
+    export type FeaturedAsset = NonNullable<
+        (NonNullable<GetProductsQuery['products']['items'][0]>)['featuredAsset']
+    >;
+    export type Assets = NonNullable<(NonNullable<GetProductsQuery['products']['items'][0]>)['assets'][0]>;
+    export type OptionGroups = NonNullable<
+        (NonNullable<GetProductsQuery['products']['items'][0]>)['optionGroups'][0]
+    >;
+    export type FacetValues = NonNullable<
+        (NonNullable<GetProductsQuery['products']['items'][0]>)['facetValues'][0]
+    >;
+    export type Facet = (NonNullable<
+        (NonNullable<GetProductsQuery['products']['items'][0]>)['facetValues'][0]
+    >)['facet'];
+    export type Variants = NonNullable<
+        (NonNullable<GetProductsQuery['products']['items'][0]>)['variants'][0]
+    >;
+    export type TaxCategory = (NonNullable<
+        (NonNullable<GetProductsQuery['products']['items'][0]>)['variants'][0]
+    >)['taxCategory'];
+    export type Options = NonNullable<
+        (NonNullable<(NonNullable<GetProductsQuery['products']['items'][0]>)['variants'][0]>)['options'][0]
+    >;
+    export type _Assets = NonNullable<
+        (NonNullable<(NonNullable<GetProductsQuery['products']['items'][0]>)['variants'][0]>)['assets'][0]
+    >;
+    export type _FeaturedAsset = NonNullable<
+        (NonNullable<(NonNullable<GetProductsQuery['products']['items'][0]>)['variants'][0]>)['featuredAsset']
+    >;
+    export type _FacetValues = NonNullable<
+        (NonNullable<
+            (NonNullable<GetProductsQuery['products']['items'][0]>)['variants'][0]
+        >)['facetValues'][0]
+    >;
+    export type _Facet = (NonNullable<
+        (NonNullable<
+            (NonNullable<GetProductsQuery['products']['items'][0]>)['variants'][0]
+        >)['facetValues'][0]
+    >)['facet'];
+    export type StockMovements = (NonNullable<
+        (NonNullable<GetProductsQuery['products']['items'][0]>)['variants'][0]
+    >)['stockMovements'];
+    export type _Items = NonNullable<
+        (NonNullable<
+            (NonNullable<GetProductsQuery['products']['items'][0]>)['variants'][0]
+        >)['stockMovements']['items'][0]
+    >;
+    export type StockMovementInlineFragment = DiscriminateUnion<
+        RequireField<
+            NonNullable<
+                (NonNullable<
+                    (NonNullable<GetProductsQuery['products']['items'][0]>)['variants'][0]
+                >)['stockMovements']['items'][0]
+            >,
+            '__typename'
+        >,
+        { __typename: 'StockMovement' }
+    >;
+}
+
+export namespace GetOrderList {
+    export type Variables = GetOrderListQueryVariables;
+    export type Query = GetOrderListQuery;
+    export type Orders = GetOrderListQuery['orders'];
+    export type Items = OrderFragment;
+}
+
+export namespace GetOrder {
+    export type Variables = GetOrderQueryVariables;
+    export type Query = GetOrderQuery;
+    export type Order = OrderWithLinesFragment;
+}
+
+export namespace DeleteProduct {
+    export type Variables = DeleteProductMutationVariables;
+    export type Mutation = DeleteProductMutation;
+    export type DeleteProduct = DeleteProductMutation['deleteProduct'];
+}
+
+export namespace AddOptionGroupToProduct {
+    export type Variables = AddOptionGroupToProductMutationVariables;
+    export type Mutation = AddOptionGroupToProductMutation;
+    export type AddOptionGroupToProduct = AddOptionGroupToProductMutation['addOptionGroupToProduct'];
+    export type OptionGroups = NonNullable<
+        AddOptionGroupToProductMutation['addOptionGroupToProduct']['optionGroups'][0]
+    >;
+    export type Options = NonNullable<
+        (NonNullable<
+            AddOptionGroupToProductMutation['addOptionGroupToProduct']['optionGroups'][0]
+        >)['options'][0]
+    >;
+}
+
+export namespace RemoveOptionGroupFromProduct {
+    export type Variables = RemoveOptionGroupFromProductMutationVariables;
+    export type Mutation = RemoveOptionGroupFromProductMutation;
+    export type RemoveOptionGroupFromProduct = RemoveOptionGroupFromProductMutation['removeOptionGroupFromProduct'];
+    export type OptionGroups = NonNullable<
+        RemoveOptionGroupFromProductMutation['removeOptionGroupFromProduct']['optionGroups'][0]
+    >;
+    export type Options = NonNullable<
+        (NonNullable<
+            RemoveOptionGroupFromProductMutation['removeOptionGroupFromProduct']['optionGroups'][0]
+        >)['options'][0]
+    >;
+}
+
+export namespace GenerateProductVariants {
+    export type Variables = GenerateProductVariantsMutationVariables;
+    export type Mutation = GenerateProductVariantsMutation;
+    export type GenerateVariantsForProduct = ProductWithVariantsFragment;
+}
+
+export namespace DeletePromotion {
+    export type Variables = DeletePromotionMutationVariables;
+    export type Mutation = DeletePromotionMutation;
+    export type DeletePromotion = DeletePromotionMutation['deletePromotion'];
+}
+
+export namespace GetPromotionList {
+    export type Variables = GetPromotionListQueryVariables;
+    export type Query = GetPromotionListQuery;
+    export type Promotions = GetPromotionListQuery['promotions'];
+    export type Items = PromotionFragment;
+}
+
+export namespace GetPromotion {
+    export type Variables = GetPromotionQueryVariables;
+    export type Query = GetPromotionQuery;
+    export type Promotion = PromotionFragment;
+}
+
+export namespace CreatePromotion {
+    export type Variables = CreatePromotionMutationVariables;
+    export type Mutation = CreatePromotionMutation;
+    export type CreatePromotion = PromotionFragment;
+}
+
+export namespace UpdatePromotion {
+    export type Variables = UpdatePromotionMutationVariables;
+    export type Mutation = UpdatePromotionMutation;
+    export type UpdatePromotion = PromotionFragment;
+}
+
+export namespace GetAdjustmentOperations {
+    export type Variables = GetAdjustmentOperationsQueryVariables;
+    export type Query = GetAdjustmentOperationsQuery;
+    export type AdjustmentOperations = GetAdjustmentOperationsQuery['adjustmentOperations'];
+    export type Actions = ConfigurableOperationFragment;
+    export type Conditions = ConfigurableOperationFragment;
+}
+
+export namespace GetRoles {
+    export type Variables = GetRolesQueryVariables;
+    export type Query = GetRolesQuery;
+    export type Roles = GetRolesQuery['roles'];
+    export type Items = RoleFragment;
+}
+
+export namespace GetRole {
+    export type Variables = GetRoleQueryVariables;
+    export type Query = GetRoleQuery;
+    export type Role = RoleFragment;
+}
+
+export namespace UpdateRole {
+    export type Variables = UpdateRoleMutationVariables;
+    export type Mutation = UpdateRoleMutation;
+    export type UpdateRole = RoleFragment;
+}
+
+export namespace GetMe {
+    export type Variables = GetMeQueryVariables;
+    export type Query = GetMeQuery;
+    export type Me = NonNullable<GetMeQuery['me']>;
+}
+
+export namespace GetProductsTake3 {
+    export type Variables = GetProductsTake3QueryVariables;
+    export type Query = GetProductsTake3Query;
+    export type Products = GetProductsTake3Query['products'];
+    export type Items = NonNullable<GetProductsTake3Query['products']['items'][0]>;
+}
+
+export namespace GetProduct1 {
+    export type Variables = GetProduct1QueryVariables;
+    export type Query = GetProduct1Query;
+    export type Product = NonNullable<GetProduct1Query['product']>;
+}
+
+export namespace GetProduct2Variants {
+    export type Variables = GetProduct2VariantsQueryVariables;
+    export type Query = GetProduct2VariantsQuery;
+    export type Product = NonNullable<GetProduct2VariantsQuery['product']>;
+    export type Variants = NonNullable<(NonNullable<GetProduct2VariantsQuery['product']>)['variants'][0]>;
+}
+
+export namespace GetProductCollection {
+    export type Variables = GetProductCollectionQueryVariables;
+    export type Query = GetProductCollectionQuery;
+    export type Product = NonNullable<GetProductCollectionQuery['product']>;
+    export type Collections = NonNullable<
+        (NonNullable<GetProductCollectionQuery['product']>)['collections'][0]
+    >;
+}
+
+export namespace DisableProduct {
+    export type Variables = DisableProductMutationVariables;
+    export type Mutation = DisableProductMutation;
+    export type UpdateProduct = DisableProductMutation['updateProduct'];
+}
+
+export namespace GetCollectionVariants {
+    export type Variables = GetCollectionVariantsQueryVariables;
+    export type Query = GetCollectionVariantsQuery;
+    export type Collection = NonNullable<GetCollectionVariantsQuery['collection']>;
+    export type ProductVariants = (NonNullable<GetCollectionVariantsQuery['collection']>)['productVariants'];
+    export type Items = NonNullable<
+        (NonNullable<GetCollectionVariantsQuery['collection']>)['productVariants']['items'][0]
+    >;
+}
+
+export namespace GetCollectionList {
+    export type Variables = GetCollectionListQueryVariables;
+    export type Query = GetCollectionListQuery;
+    export type Collections = GetCollectionListQuery['collections'];
+    export type Items = NonNullable<GetCollectionListQuery['collections']['items'][0]>;
+}
+
+export namespace GetProductFacetValues {
+    export type Variables = GetProductFacetValuesQueryVariables;
+    export type Query = GetProductFacetValuesQuery;
+    export type Product = NonNullable<GetProductFacetValuesQuery['product']>;
+    export type FacetValues = NonNullable<
+        (NonNullable<GetProductFacetValuesQuery['product']>)['facetValues'][0]
+    >;
+}
+
+export namespace GetVariantFacetValues {
+    export type Variables = GetVariantFacetValuesQueryVariables;
+    export type Query = GetVariantFacetValuesQuery;
+    export type Product = NonNullable<GetVariantFacetValuesQuery['product']>;
+    export type Variants = NonNullable<(NonNullable<GetVariantFacetValuesQuery['product']>)['variants'][0]>;
+    export type FacetValues = NonNullable<
+        (NonNullable<(NonNullable<GetVariantFacetValuesQuery['product']>)['variants'][0]>)['facetValues'][0]
+    >;
+}
+
+export namespace GetCustomerIds {
+    export type Variables = GetCustomerIdsQueryVariables;
+    export type Query = GetCustomerIdsQuery;
+    export type Customers = GetCustomerIdsQuery['customers'];
+    export type Items = NonNullable<GetCustomerIdsQuery['customers']['items'][0]>;
+}
+
+export namespace VariantWithStock {
+    export type Fragment = VariantWithStockFragment;
+    export type StockMovements = VariantWithStockFragment['stockMovements'];
+    export type Items = NonNullable<VariantWithStockFragment['stockMovements']['items'][0]>;
+    export type StockMovementInlineFragment = DiscriminateUnion<
+        RequireField<NonNullable<VariantWithStockFragment['stockMovements']['items'][0]>, '__typename'>,
+        { __typename: 'StockMovement' }
+    >;
+}
+
+export namespace GetStockMovement {
+    export type Variables = GetStockMovementQueryVariables;
+    export type Query = GetStockMovementQuery;
+    export type Product = NonNullable<GetStockMovementQuery['product']>;
+    export type Variants = VariantWithStockFragment;
+}
+
+export namespace UpdateStock {
+    export type Variables = UpdateStockMutationVariables;
+    export type Mutation = UpdateStockMutation;
+    export type UpdateProductVariants = VariantWithStockFragment;
+}
+
+export namespace DeleteZone {
+    export type Variables = DeleteZoneMutationVariables;
+    export type Mutation = DeleteZoneMutation;
+    export type DeleteZone = DeleteZoneMutation['deleteZone'];
+}
+
+export namespace GetZones {
+    export type Variables = GetZonesQueryVariables;
+    export type Query = GetZonesQuery;
+    export type Zones = NonNullable<GetZonesQuery['zones'][0]>;
+}
+
+export namespace GetZone {
+    export type Variables = GetZoneQueryVariables;
+    export type Query = GetZoneQuery;
+    export type Zone = ZoneFragment;
+}
+
+export namespace CreateZone {
+    export type Variables = CreateZoneMutationVariables;
+    export type Mutation = CreateZoneMutation;
+    export type CreateZone = ZoneFragment;
+}
+
+export namespace UpdateZone {
+    export type Variables = UpdateZoneMutationVariables;
+    export type Mutation = UpdateZoneMutation;
+    export type UpdateZone = ZoneFragment;
+}
+
+export namespace AddMembersToZone {
+    export type Variables = AddMembersToZoneMutationVariables;
+    export type Mutation = AddMembersToZoneMutation;
+    export type AddMembersToZone = ZoneFragment;
+}
+
+export namespace RemoveMembersFromZone {
+    export type Variables = RemoveMembersFromZoneMutationVariables;
+    export type Mutation = RemoveMembersFromZoneMutation;
+    export type RemoveMembersFromZone = ZoneFragment;
+}

+ 2398 - 0
packages/core/e2e/graphql/generated-e2e-shop-types.ts

@@ -0,0 +1,2398 @@
+// tslint:disable
+// Generated in 2019-05-07T17:59:46+02:00
+
+export type Maybe<T> = T | null;
+/** All built-in and custom scalars, mapped to their actual values */
+export type Scalars = {
+    ID: string;
+    String: string;
+    Boolean: boolean;
+    Int: number;
+    Float: number;
+    /** A date-time string at UTC, such as 2007-12-03T10:15:30Z, compliant with the
+     * `date-time` format outlined in section 5.6 of the RFC 3339 profile of the ISO
+     * 8601 standard for representation of dates and times using the Gregorian calendar.
+     */
+    DateTime: any;
+    /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */
+    JSON: any;
+    /** The `Upload` scalar type represents a file upload. */
+    Upload: any;
+};
+
+export type Address = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    fullName?: Maybe<Scalars['String']>;
+    company?: Maybe<Scalars['String']>;
+    streetLine1: Scalars['String'];
+    streetLine2?: Maybe<Scalars['String']>;
+    city?: Maybe<Scalars['String']>;
+    province?: Maybe<Scalars['String']>;
+    postalCode?: Maybe<Scalars['String']>;
+    country: Country;
+    phoneNumber?: Maybe<Scalars['String']>;
+    defaultShippingAddress?: Maybe<Scalars['Boolean']>;
+    defaultBillingAddress?: Maybe<Scalars['Boolean']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type Adjustment = {
+    adjustmentSource: Scalars['String'];
+    type: AdjustmentType;
+    description: Scalars['String'];
+    amount: Scalars['Int'];
+};
+
+export type AdjustmentOperations = {
+    conditions: Array<ConfigurableOperation>;
+    actions: Array<ConfigurableOperation>;
+};
+
+export enum AdjustmentType {
+    TAX = 'TAX',
+    PROMOTION = 'PROMOTION',
+    SHIPPING = 'SHIPPING',
+    REFUND = 'REFUND',
+    TAX_REFUND = 'TAX_REFUND',
+    PROMOTION_REFUND = 'PROMOTION_REFUND',
+    SHIPPING_REFUND = 'SHIPPING_REFUND',
+}
+
+export type Administrator = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    firstName: Scalars['String'];
+    lastName: Scalars['String'];
+    emailAddress: Scalars['String'];
+    user: User;
+};
+
+export type AdministratorList = PaginatedList & {
+    items: Array<Administrator>;
+    totalItems: Scalars['Int'];
+};
+
+export type Asset = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    name: Scalars['String'];
+    type: AssetType;
+    fileSize: Scalars['Int'];
+    mimeType: Scalars['String'];
+    source: Scalars['String'];
+    preview: Scalars['String'];
+};
+
+export type AssetList = PaginatedList & {
+    items: Array<Asset>;
+    totalItems: Scalars['Int'];
+};
+
+export enum AssetType {
+    IMAGE = 'IMAGE',
+    VIDEO = 'VIDEO',
+    BINARY = 'BINARY',
+}
+
+export type BooleanOperators = {
+    eq?: Maybe<Scalars['Boolean']>;
+};
+
+export type Cancellation = Node &
+    StockMovement & {
+        id: Scalars['ID'];
+        createdAt: Scalars['DateTime'];
+        updatedAt: Scalars['DateTime'];
+        productVariant: ProductVariant;
+        type: StockMovementType;
+        quantity: Scalars['Int'];
+        orderLine: OrderLine;
+    };
+
+export type Channel = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    code: Scalars['String'];
+    token: Scalars['String'];
+    defaultTaxZone?: Maybe<Zone>;
+    defaultShippingZone?: Maybe<Zone>;
+    defaultLanguageCode: LanguageCode;
+    currencyCode: CurrencyCode;
+    pricesIncludeTax: Scalars['Boolean'];
+};
+
+export type Collection = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode?: Maybe<LanguageCode>;
+    name: Scalars['String'];
+    breadcrumbs: Array<CollectionBreadcrumb>;
+    position: Scalars['Int'];
+    description: Scalars['String'];
+    featuredAsset?: Maybe<Asset>;
+    assets: Array<Asset>;
+    parent?: Maybe<Collection>;
+    children?: Maybe<Array<Collection>>;
+    filters: Array<ConfigurableOperation>;
+    translations: Array<CollectionTranslation>;
+    productVariants: ProductVariantList;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type CollectionProductVariantsArgs = {
+    options?: Maybe<ProductVariantListOptions>;
+};
+
+export type CollectionBreadcrumb = {
+    id: Scalars['ID'];
+    name: Scalars['String'];
+};
+
+export type CollectionFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    languageCode?: Maybe<StringOperators>;
+    name?: Maybe<StringOperators>;
+    position?: Maybe<NumberOperators>;
+    description?: Maybe<StringOperators>;
+};
+
+export type CollectionList = PaginatedList & {
+    items: Array<Collection>;
+    totalItems: Scalars['Int'];
+};
+
+export type CollectionListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<CollectionSortParameter>;
+    filter?: Maybe<CollectionFilterParameter>;
+};
+
+export type CollectionSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    name?: Maybe<SortOrder>;
+    position?: Maybe<SortOrder>;
+    description?: Maybe<SortOrder>;
+};
+
+export type CollectionTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+    description: Scalars['String'];
+};
+
+export type ConfigArg = {
+    name: Scalars['String'];
+    type: ConfigArgType;
+    value?: Maybe<Scalars['String']>;
+};
+
+export type ConfigArgInput = {
+    name: Scalars['String'];
+    type: ConfigArgType;
+    value?: Maybe<Scalars['String']>;
+};
+
+/** Certain entities allow arbitrary configuration arguments to be specified which can then
+ * be set in the admin-ui and used in the business logic of the app. These are the valid
+ * data types of such arguments. The data type influences:
+ *
+ * 1. How the argument form field is rendered in the admin-ui
+ * 2. The JavaScript type into which the value is coerced before being passed to the business logic.
+ */
+export enum ConfigArgType {
+    PERCENTAGE = 'PERCENTAGE',
+    MONEY = 'MONEY',
+    INT = 'INT',
+    STRING = 'STRING',
+    DATETIME = 'DATETIME',
+    BOOLEAN = 'BOOLEAN',
+    FACET_VALUE_IDS = 'FACET_VALUE_IDS',
+    STRING_OPERATOR = 'STRING_OPERATOR',
+}
+
+export type ConfigurableOperation = {
+    code: Scalars['String'];
+    args: Array<ConfigArg>;
+    description: Scalars['String'];
+};
+
+export type ConfigurableOperationInput = {
+    code: Scalars['String'];
+    arguments: Array<ConfigArgInput>;
+};
+
+export type Country = Node & {
+    id: Scalars['ID'];
+    languageCode: LanguageCode;
+    code: Scalars['String'];
+    name: Scalars['String'];
+    enabled: Scalars['Boolean'];
+    translations: Array<CountryTranslation>;
+};
+
+export type CountryList = PaginatedList & {
+    items: Array<Country>;
+    totalItems: Scalars['Int'];
+};
+
+export type CountryTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+};
+
+export type CreateAddressInput = {
+    fullName?: Maybe<Scalars['String']>;
+    company?: Maybe<Scalars['String']>;
+    streetLine1: Scalars['String'];
+    streetLine2?: Maybe<Scalars['String']>;
+    city?: Maybe<Scalars['String']>;
+    province?: Maybe<Scalars['String']>;
+    postalCode?: Maybe<Scalars['String']>;
+    countryCode: Scalars['String'];
+    phoneNumber?: Maybe<Scalars['String']>;
+    defaultShippingAddress?: Maybe<Scalars['Boolean']>;
+    defaultBillingAddress?: Maybe<Scalars['Boolean']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type CreateCustomerInput = {
+    title?: Maybe<Scalars['String']>;
+    firstName: Scalars['String'];
+    lastName: Scalars['String'];
+    phoneNumber?: Maybe<Scalars['String']>;
+    emailAddress: Scalars['String'];
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+/** ISO 4217 currency code */
+export enum CurrencyCode {
+    /** United Arab Emirates dirham */
+    AED = 'AED',
+    /** Afghan afghani */
+    AFN = 'AFN',
+    /** Albanian lek */
+    ALL = 'ALL',
+    /** Armenian dram */
+    AMD = 'AMD',
+    /** Netherlands Antillean guilder */
+    ANG = 'ANG',
+    /** Angolan kwanza */
+    AOA = 'AOA',
+    /** Argentine peso */
+    ARS = 'ARS',
+    /** Australian dollar */
+    AUD = 'AUD',
+    /** Aruban florin */
+    AWG = 'AWG',
+    /** Azerbaijani manat */
+    AZN = 'AZN',
+    /** Bosnia and Herzegovina convertible mark */
+    BAM = 'BAM',
+    /** Barbados dollar */
+    BBD = 'BBD',
+    /** Bangladeshi taka */
+    BDT = 'BDT',
+    /** Bulgarian lev */
+    BGN = 'BGN',
+    /** Bahraini dinar */
+    BHD = 'BHD',
+    /** Burundian franc */
+    BIF = 'BIF',
+    /** Bermudian dollar */
+    BMD = 'BMD',
+    /** Brunei dollar */
+    BND = 'BND',
+    /** Boliviano */
+    BOB = 'BOB',
+    /** Brazilian real */
+    BRL = 'BRL',
+    /** Bahamian dollar */
+    BSD = 'BSD',
+    /** Bhutanese ngultrum */
+    BTN = 'BTN',
+    /** Botswana pula */
+    BWP = 'BWP',
+    /** Belarusian ruble */
+    BYN = 'BYN',
+    /** Belize dollar */
+    BZD = 'BZD',
+    /** Canadian dollar */
+    CAD = 'CAD',
+    /** Congolese franc */
+    CHE = 'CHE',
+    /** Swiss franc */
+    CHW = 'CHW',
+    /** Chilean peso */
+    CLP = 'CLP',
+    /** Renminbi (Chinese) yuan */
+    CNY = 'CNY',
+    /** Colombian peso */
+    COP = 'COP',
+    /** Costa Rican colon */
+    CRC = 'CRC',
+    /** Cuban convertible peso */
+    CUC = 'CUC',
+    /** Cuban peso */
+    CUP = 'CUP',
+    /** Cape Verde escudo */
+    CVE = 'CVE',
+    /** Czech koruna */
+    CZK = 'CZK',
+    /** Djiboutian franc */
+    DJF = 'DJF',
+    /** Danish krone */
+    DKK = 'DKK',
+    /** Dominican peso */
+    DOP = 'DOP',
+    /** Algerian dinar */
+    DZD = 'DZD',
+    /** Egyptian pound */
+    EGP = 'EGP',
+    /** Eritrean nakfa */
+    ERN = 'ERN',
+    /** Ethiopian birr */
+    ETB = 'ETB',
+    /** Euro */
+    EUR = 'EUR',
+    /** Fiji dollar */
+    FJD = 'FJD',
+    /** Falkland Islands pound */
+    FKP = 'FKP',
+    /** Pound sterling */
+    GBP = 'GBP',
+    /** Georgian lari */
+    GEL = 'GEL',
+    /** Ghanaian cedi */
+    GHS = 'GHS',
+    /** Gibraltar pound */
+    GIP = 'GIP',
+    /** Gambian dalasi */
+    GMD = 'GMD',
+    /** Guinean franc */
+    GNF = 'GNF',
+    /** Guatemalan quetzal */
+    GTQ = 'GTQ',
+    /** Guyanese dollar */
+    GYD = 'GYD',
+    /** Hong Kong dollar */
+    HKD = 'HKD',
+    /** Honduran lempira */
+    HNL = 'HNL',
+    /** Croatian kuna */
+    HRK = 'HRK',
+    /** Haitian gourde */
+    HTG = 'HTG',
+    /** Hungarian forint */
+    HUF = 'HUF',
+    /** Indonesian rupiah */
+    IDR = 'IDR',
+    /** Israeli new shekel */
+    ILS = 'ILS',
+    /** Indian rupee */
+    INR = 'INR',
+    /** Iraqi dinar */
+    IQD = 'IQD',
+    /** Iranian rial */
+    IRR = 'IRR',
+    /** Icelandic króna */
+    ISK = 'ISK',
+    /** Jamaican dollar */
+    JMD = 'JMD',
+    /** Jordanian dinar */
+    JOD = 'JOD',
+    /** Japanese yen */
+    JPY = 'JPY',
+    /** Kenyan shilling */
+    KES = 'KES',
+    /** Kyrgyzstani som */
+    KGS = 'KGS',
+    /** Cambodian riel */
+    KHR = 'KHR',
+    /** Comoro franc */
+    KMF = 'KMF',
+    /** North Korean won */
+    KPW = 'KPW',
+    /** South Korean won */
+    KRW = 'KRW',
+    /** Kuwaiti dinar */
+    KWD = 'KWD',
+    /** Cayman Islands dollar */
+    KYD = 'KYD',
+    /** Kazakhstani tenge */
+    KZT = 'KZT',
+    /** Lao kip */
+    LAK = 'LAK',
+    /** Lebanese pound */
+    LBP = 'LBP',
+    /** Sri Lankan rupee */
+    LKR = 'LKR',
+    /** Liberian dollar */
+    LRD = 'LRD',
+    /** Lesotho loti */
+    LSL = 'LSL',
+    /** Libyan dinar */
+    LYD = 'LYD',
+    /** Moroccan dirham */
+    MAD = 'MAD',
+    /** Moldovan leu */
+    MDL = 'MDL',
+    /** Malagasy ariary */
+    MGA = 'MGA',
+    /** Macedonian denar */
+    MKD = 'MKD',
+    /** Myanmar kyat */
+    MMK = 'MMK',
+    /** Mongolian tögrög */
+    MNT = 'MNT',
+    /** Macanese pataca */
+    MOP = 'MOP',
+    /** Mauritanian ouguiya */
+    MRU = 'MRU',
+    /** Mauritian rupee */
+    MUR = 'MUR',
+    /** Maldivian rufiyaa */
+    MVR = 'MVR',
+    /** Malawian kwacha */
+    MWK = 'MWK',
+    /** Mexican peso */
+    MXN = 'MXN',
+    /** Malaysian ringgit */
+    MYR = 'MYR',
+    /** Mozambican metical */
+    MZN = 'MZN',
+    /** Namibian dollar */
+    NAD = 'NAD',
+    /** Nigerian naira */
+    NGN = 'NGN',
+    /** Nicaraguan córdoba */
+    NIO = 'NIO',
+    /** Norwegian krone */
+    NOK = 'NOK',
+    /** Nepalese rupee */
+    NPR = 'NPR',
+    /** New Zealand dollar */
+    NZD = 'NZD',
+    /** Omani rial */
+    OMR = 'OMR',
+    /** Panamanian balboa */
+    PAB = 'PAB',
+    /** Peruvian sol */
+    PEN = 'PEN',
+    /** Papua New Guinean kina */
+    PGK = 'PGK',
+    /** Philippine peso */
+    PHP = 'PHP',
+    /** Pakistani rupee */
+    PKR = 'PKR',
+    /** Polish złoty */
+    PLN = 'PLN',
+    /** Paraguayan guaraní */
+    PYG = 'PYG',
+    /** Qatari riyal */
+    QAR = 'QAR',
+    /** Romanian leu */
+    RON = 'RON',
+    /** Serbian dinar */
+    RSD = 'RSD',
+    /** Russian ruble */
+    RUB = 'RUB',
+    /** Rwandan franc */
+    RWF = 'RWF',
+    /** Saudi riyal */
+    SAR = 'SAR',
+    /** Solomon Islands dollar */
+    SBD = 'SBD',
+    /** Seychelles rupee */
+    SCR = 'SCR',
+    /** Sudanese pound */
+    SDG = 'SDG',
+    /** Swedish krona/kronor */
+    SEK = 'SEK',
+    /** Singapore dollar */
+    SGD = 'SGD',
+    /** Saint Helena pound */
+    SHP = 'SHP',
+    /** Sierra Leonean leone */
+    SLL = 'SLL',
+    /** Somali shilling */
+    SOS = 'SOS',
+    /** Surinamese dollar */
+    SRD = 'SRD',
+    /** South Sudanese pound */
+    SSP = 'SSP',
+    /** São Tomé and Príncipe dobra */
+    STN = 'STN',
+    /** Salvadoran colón */
+    SVC = 'SVC',
+    /** Syrian pound */
+    SYP = 'SYP',
+    /** Swazi lilangeni */
+    SZL = 'SZL',
+    /** Thai baht */
+    THB = 'THB',
+    /** Tajikistani somoni */
+    TJS = 'TJS',
+    /** Turkmenistan manat */
+    TMT = 'TMT',
+    /** Tunisian dinar */
+    TND = 'TND',
+    /** Tongan paʻanga */
+    TOP = 'TOP',
+    /** Turkish lira */
+    TRY = 'TRY',
+    /** Trinidad and Tobago dollar */
+    TTD = 'TTD',
+    /** New Taiwan dollar */
+    TWD = 'TWD',
+    /** Tanzanian shilling */
+    TZS = 'TZS',
+    /** Ukrainian hryvnia */
+    UAH = 'UAH',
+    /** Ugandan shilling */
+    UGX = 'UGX',
+    /** United States dollar */
+    USD = 'USD',
+    /** Uruguayan peso */
+    UYU = 'UYU',
+    /** Uzbekistan som */
+    UZS = 'UZS',
+    /** Venezuelan bolívar soberano */
+    VES = 'VES',
+    /** Vietnamese đồng */
+    VND = 'VND',
+    /** Vanuatu vatu */
+    VUV = 'VUV',
+    /** Samoan tala */
+    WST = 'WST',
+    /** CFA franc BEAC */
+    XAF = 'XAF',
+    /** East Caribbean dollar */
+    XCD = 'XCD',
+    /** CFA franc BCEAO */
+    XOF = 'XOF',
+    /** CFP franc (franc Pacifique) */
+    XPF = 'XPF',
+    /** Yemeni rial */
+    YER = 'YER',
+    /** South African rand */
+    ZAR = 'ZAR',
+    /** Zambian kwacha */
+    ZMW = 'ZMW',
+    /** Zimbabwean dollar */
+    ZWL = 'ZWL',
+}
+
+export type CurrentUser = {
+    id: Scalars['ID'];
+    identifier: Scalars['String'];
+    channelTokens: Array<Scalars['String']>;
+};
+
+export type Customer = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    title?: Maybe<Scalars['String']>;
+    firstName: Scalars['String'];
+    lastName: Scalars['String'];
+    phoneNumber?: Maybe<Scalars['String']>;
+    emailAddress: Scalars['String'];
+    addresses?: Maybe<Array<Address>>;
+    orders: OrderList;
+    user?: Maybe<User>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type CustomerOrdersArgs = {
+    options?: Maybe<OrderListOptions>;
+};
+
+export type CustomerGroup = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    name: Scalars['String'];
+};
+
+export type CustomerList = PaginatedList & {
+    items: Array<Customer>;
+    totalItems: Scalars['Int'];
+};
+
+export type DateOperators = {
+    eq?: Maybe<Scalars['DateTime']>;
+    before?: Maybe<Scalars['DateTime']>;
+    after?: Maybe<Scalars['DateTime']>;
+    between?: Maybe<DateRange>;
+};
+
+export type DateRange = {
+    start: Scalars['DateTime'];
+    end: Scalars['DateTime'];
+};
+
+export type DeletionResponse = {
+    result: DeletionResult;
+    message?: Maybe<Scalars['String']>;
+};
+
+export enum DeletionResult {
+    /** The entity was successfully deleted */
+    DELETED = 'DELETED',
+    /** Deletion did not take place, reason given in message */
+    NOT_DELETED = 'NOT_DELETED',
+}
+
+export type Facet = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+    code: Scalars['String'];
+    values: Array<FacetValue>;
+    translations: Array<FacetTranslation>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type FacetList = PaginatedList & {
+    items: Array<Facet>;
+    totalItems: Scalars['Int'];
+};
+
+export type FacetTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+};
+
+export type FacetValue = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    facet: Facet;
+    name: Scalars['String'];
+    code: Scalars['String'];
+    translations: Array<FacetValueTranslation>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+/** Which FacetValues are present in the products returned
+ * by the search, and in what quantity.
+ */
+export type FacetValueResult = {
+    facetValue: FacetValue;
+    count: Scalars['Int'];
+};
+
+export type FacetValueTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+};
+
+export type GlobalSettings = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    availableLanguages: Array<LanguageCode>;
+    trackInventory: Scalars['Boolean'];
+    serverConfig: ServerConfig;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ImportInfo = {
+    errors?: Maybe<Array<Scalars['String']>>;
+    processed: Scalars['Int'];
+    imported: Scalars['Int'];
+};
+
+/** ISO 639-1 language code */
+export enum LanguageCode {
+    /** Afar */
+    aa = 'aa',
+    /** Abkhazian */
+    ab = 'ab',
+    /** Afrikaans */
+    af = 'af',
+    /** Akan */
+    ak = 'ak',
+    /** Albanian */
+    sq = 'sq',
+    /** Amharic */
+    am = 'am',
+    /** Arabic */
+    ar = 'ar',
+    /** Aragonese */
+    an = 'an',
+    /** Armenian */
+    hy = 'hy',
+    /** Assamese */
+    as = 'as',
+    /** Avaric */
+    av = 'av',
+    /** Avestan */
+    ae = 'ae',
+    /** Aymara */
+    ay = 'ay',
+    /** Azerbaijani */
+    az = 'az',
+    /** Bashkir */
+    ba = 'ba',
+    /** Bambara */
+    bm = 'bm',
+    /** Basque */
+    eu = 'eu',
+    /** Belarusian */
+    be = 'be',
+    /** Bengali */
+    bn = 'bn',
+    /** Bihari languages */
+    bh = 'bh',
+    /** Bislama */
+    bi = 'bi',
+    /** Bosnian */
+    bs = 'bs',
+    /** Breton */
+    br = 'br',
+    /** Bulgarian */
+    bg = 'bg',
+    /** Burmese */
+    my = 'my',
+    /** Catalan; Valencian */
+    ca = 'ca',
+    /** Chamorro */
+    ch = 'ch',
+    /** Chechen */
+    ce = 'ce',
+    /** Chinese */
+    zh = 'zh',
+    /** Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic */
+    cu = 'cu',
+    /** Chuvash */
+    cv = 'cv',
+    /** Cornish */
+    kw = 'kw',
+    /** Corsican */
+    co = 'co',
+    /** Cree */
+    cr = 'cr',
+    /** Czech */
+    cs = 'cs',
+    /** Danish */
+    da = 'da',
+    /** Divehi; Dhivehi; Maldivian */
+    dv = 'dv',
+    /** Dutch; Flemish */
+    nl = 'nl',
+    /** Dzongkha */
+    dz = 'dz',
+    /** English */
+    en = 'en',
+    /** Esperanto */
+    eo = 'eo',
+    /** Estonian */
+    et = 'et',
+    /** Ewe */
+    ee = 'ee',
+    /** Faroese */
+    fo = 'fo',
+    /** Fijian */
+    fj = 'fj',
+    /** Finnish */
+    fi = 'fi',
+    /** French */
+    fr = 'fr',
+    /** Western Frisian */
+    fy = 'fy',
+    /** Fulah */
+    ff = 'ff',
+    /** Georgian */
+    ka = 'ka',
+    /** German */
+    de = 'de',
+    /** Gaelic; Scottish Gaelic */
+    gd = 'gd',
+    /** Irish */
+    ga = 'ga',
+    /** Galician */
+    gl = 'gl',
+    /** Manx */
+    gv = 'gv',
+    /** Greek, Modern (1453-) */
+    el = 'el',
+    /** Guarani */
+    gn = 'gn',
+    /** Gujarati */
+    gu = 'gu',
+    /** Haitian; Haitian Creole */
+    ht = 'ht',
+    /** Hausa */
+    ha = 'ha',
+    /** Hebrew */
+    he = 'he',
+    /** Herero */
+    hz = 'hz',
+    /** Hindi */
+    hi = 'hi',
+    /** Hiri Motu */
+    ho = 'ho',
+    /** Croatian */
+    hr = 'hr',
+    /** Hungarian */
+    hu = 'hu',
+    /** Igbo */
+    ig = 'ig',
+    /** Icelandic */
+    is = 'is',
+    /** Ido */
+    io = 'io',
+    /** Sichuan Yi; Nuosu */
+    ii = 'ii',
+    /** Inuktitut */
+    iu = 'iu',
+    /** Interlingue; Occidental */
+    ie = 'ie',
+    /** Interlingua (International Auxiliary Language Association) */
+    ia = 'ia',
+    /** Indonesian */
+    id = 'id',
+    /** Inupiaq */
+    ik = 'ik',
+    /** Italian */
+    it = 'it',
+    /** Javanese */
+    jv = 'jv',
+    /** Japanese */
+    ja = 'ja',
+    /** Kalaallisut; Greenlandic */
+    kl = 'kl',
+    /** Kannada */
+    kn = 'kn',
+    /** Kashmiri */
+    ks = 'ks',
+    /** Kanuri */
+    kr = 'kr',
+    /** Kazakh */
+    kk = 'kk',
+    /** Central Khmer */
+    km = 'km',
+    /** Kikuyu; Gikuyu */
+    ki = 'ki',
+    /** Kinyarwanda */
+    rw = 'rw',
+    /** Kirghiz; Kyrgyz */
+    ky = 'ky',
+    /** Komi */
+    kv = 'kv',
+    /** Kongo */
+    kg = 'kg',
+    /** Korean */
+    ko = 'ko',
+    /** Kuanyama; Kwanyama */
+    kj = 'kj',
+    /** Kurdish */
+    ku = 'ku',
+    /** Lao */
+    lo = 'lo',
+    /** Latin */
+    la = 'la',
+    /** Latvian */
+    lv = 'lv',
+    /** Limburgan; Limburger; Limburgish */
+    li = 'li',
+    /** Lingala */
+    ln = 'ln',
+    /** Lithuanian */
+    lt = 'lt',
+    /** Luxembourgish; Letzeburgesch */
+    lb = 'lb',
+    /** Luba-Katanga */
+    lu = 'lu',
+    /** Ganda */
+    lg = 'lg',
+    /** Macedonian */
+    mk = 'mk',
+    /** Marshallese */
+    mh = 'mh',
+    /** Malayalam */
+    ml = 'ml',
+    /** Maori */
+    mi = 'mi',
+    /** Marathi */
+    mr = 'mr',
+    /** Malay */
+    ms = 'ms',
+    /** Malagasy */
+    mg = 'mg',
+    /** Maltese */
+    mt = 'mt',
+    /** Mongolian */
+    mn = 'mn',
+    /** Nauru */
+    na = 'na',
+    /** Navajo; Navaho */
+    nv = 'nv',
+    /** Ndebele, South; South Ndebele */
+    nr = 'nr',
+    /** Ndebele, North; North Ndebele */
+    nd = 'nd',
+    /** Ndonga */
+    ng = 'ng',
+    /** Nepali */
+    ne = 'ne',
+    /** Norwegian Nynorsk; Nynorsk, Norwegian */
+    nn = 'nn',
+    /** Bokmål, Norwegian; Norwegian Bokmål */
+    nb = 'nb',
+    /** Norwegian */
+    no = 'no',
+    /** Chichewa; Chewa; Nyanja */
+    ny = 'ny',
+    /** Occitan (post 1500); Provençal */
+    oc = 'oc',
+    /** Ojibwa */
+    oj = 'oj',
+    /** Oriya */
+    or = 'or',
+    /** Oromo */
+    om = 'om',
+    /** Ossetian; Ossetic */
+    os = 'os',
+    /** Panjabi; Punjabi */
+    pa = 'pa',
+    /** Persian */
+    fa = 'fa',
+    /** Pali */
+    pi = 'pi',
+    /** Polish */
+    pl = 'pl',
+    /** Portuguese */
+    pt = 'pt',
+    /** Pushto; Pashto */
+    ps = 'ps',
+    /** Quechua */
+    qu = 'qu',
+    /** Romansh */
+    rm = 'rm',
+    /** Romanian; Moldavian; Moldovan */
+    ro = 'ro',
+    /** Rundi */
+    rn = 'rn',
+    /** Russian */
+    ru = 'ru',
+    /** Sango */
+    sg = 'sg',
+    /** Sanskrit */
+    sa = 'sa',
+    /** Sinhala; Sinhalese */
+    si = 'si',
+    /** Slovak */
+    sk = 'sk',
+    /** Slovenian */
+    sl = 'sl',
+    /** Northern Sami */
+    se = 'se',
+    /** Samoan */
+    sm = 'sm',
+    /** Shona */
+    sn = 'sn',
+    /** Sindhi */
+    sd = 'sd',
+    /** Somali */
+    so = 'so',
+    /** Sotho, Southern */
+    st = 'st',
+    /** Spanish; Castilian */
+    es = 'es',
+    /** Sardinian */
+    sc = 'sc',
+    /** Serbian */
+    sr = 'sr',
+    /** Swati */
+    ss = 'ss',
+    /** Sundanese */
+    su = 'su',
+    /** Swahili */
+    sw = 'sw',
+    /** Swedish */
+    sv = 'sv',
+    /** Tahitian */
+    ty = 'ty',
+    /** Tamil */
+    ta = 'ta',
+    /** Tatar */
+    tt = 'tt',
+    /** Telugu */
+    te = 'te',
+    /** Tajik */
+    tg = 'tg',
+    /** Tagalog */
+    tl = 'tl',
+    /** Thai */
+    th = 'th',
+    /** Tibetan */
+    bo = 'bo',
+    /** Tigrinya */
+    ti = 'ti',
+    /** Tonga (Tonga Islands) */
+    to = 'to',
+    /** Tswana */
+    tn = 'tn',
+    /** Tsonga */
+    ts = 'ts',
+    /** Turkmen */
+    tk = 'tk',
+    /** Turkish */
+    tr = 'tr',
+    /** Twi */
+    tw = 'tw',
+    /** Uighur; Uyghur */
+    ug = 'ug',
+    /** Ukrainian */
+    uk = 'uk',
+    /** Urdu */
+    ur = 'ur',
+    /** Uzbek */
+    uz = 'uz',
+    /** Venda */
+    ve = 've',
+    /** Vietnamese */
+    vi = 'vi',
+    /** Volapük */
+    vo = 'vo',
+    /** Welsh */
+    cy = 'cy',
+    /** Walloon */
+    wa = 'wa',
+    /** Wolof */
+    wo = 'wo',
+    /** Xhosa */
+    xh = 'xh',
+    /** Yiddish */
+    yi = 'yi',
+    /** Yoruba */
+    yo = 'yo',
+    /** Zhuang; Chuang */
+    za = 'za',
+    /** Zulu */
+    zu = 'zu',
+}
+
+export type LoginResult = {
+    user: CurrentUser;
+};
+
+export type Mutation = {
+    addItemToOrder?: Maybe<Order>;
+    removeItemFromOrder?: Maybe<Order>;
+    adjustItemQuantity?: Maybe<Order>;
+    transitionOrderToState?: Maybe<Order>;
+    setOrderShippingAddress?: Maybe<Order>;
+    setOrderShippingMethod?: Maybe<Order>;
+    addPaymentToOrder?: Maybe<Order>;
+    setCustomerForOrder?: Maybe<Order>;
+    login: LoginResult;
+    logout: Scalars['Boolean'];
+    /** Regenerate and send a verification token for a new Customer registration. Only
+     * applicable if `authOptions.requireVerification` is set to true.
+     */
+    refreshCustomerVerification: Scalars['Boolean'];
+    /** Register a Customer account with the given credentials */
+    registerCustomerAccount: Scalars['Boolean'];
+    /** Update an existing Customer */
+    updateCustomer: Customer;
+    /** Create a new Customer Address */
+    createCustomerAddress: Address;
+    /** Update an existing Address */
+    updateCustomerAddress: Address;
+    /** Delete an existing Address */
+    deleteCustomerAddress: Scalars['Boolean'];
+    /** Verify a Customer email address with the token sent to that address. Only
+     * applicable if `authOptions.requireVerification` is set to true.
+     */
+    verifyCustomerAccount: LoginResult;
+    /** Update the password of the active Customer */
+    updateCustomerPassword?: Maybe<Scalars['Boolean']>;
+    /** Request to update the emailAddress of the active Customer. If `authOptions.requireVerification` is enabled
+     * (as is the default), then the `identifierChangeToken` will be assigned to the current User and
+     * a IdentifierChangeRequestEvent will be raised. This can then be used e.g. by the EmailPlugin to email
+     * that verification token to the Customer, which is then used to verify the change of email address.
+     */
+    requestUpdateCustomerEmailAddress?: Maybe<Scalars['Boolean']>;
+    /** Confirm the update of the emailAddress with the provided token, which has been generated by the
+     * `requestUpdateCustomerEmailAddress` mutation.
+     */
+    updateCustomerEmailAddress?: Maybe<Scalars['Boolean']>;
+    /** Requests a password reset email to be sent */
+    requestPasswordReset?: Maybe<Scalars['Boolean']>;
+    /** Resets a Customer's password based on the provided token */
+    resetPassword: LoginResult;
+};
+
+export type MutationAddItemToOrderArgs = {
+    productVariantId: Scalars['ID'];
+    quantity: Scalars['Int'];
+};
+
+export type MutationRemoveItemFromOrderArgs = {
+    orderItemId: Scalars['ID'];
+};
+
+export type MutationAdjustItemQuantityArgs = {
+    orderItemId: Scalars['ID'];
+    quantity: Scalars['Int'];
+};
+
+export type MutationTransitionOrderToStateArgs = {
+    state: Scalars['String'];
+};
+
+export type MutationSetOrderShippingAddressArgs = {
+    input: CreateAddressInput;
+};
+
+export type MutationSetOrderShippingMethodArgs = {
+    shippingMethodId: Scalars['ID'];
+};
+
+export type MutationAddPaymentToOrderArgs = {
+    input: PaymentInput;
+};
+
+export type MutationSetCustomerForOrderArgs = {
+    input: CreateCustomerInput;
+};
+
+export type MutationLoginArgs = {
+    username: Scalars['String'];
+    password: Scalars['String'];
+    rememberMe?: Maybe<Scalars['Boolean']>;
+};
+
+export type MutationRefreshCustomerVerificationArgs = {
+    emailAddress: Scalars['String'];
+};
+
+export type MutationRegisterCustomerAccountArgs = {
+    input: RegisterCustomerInput;
+};
+
+export type MutationUpdateCustomerArgs = {
+    input: UpdateCustomerInput;
+};
+
+export type MutationCreateCustomerAddressArgs = {
+    input: CreateAddressInput;
+};
+
+export type MutationUpdateCustomerAddressArgs = {
+    input: UpdateAddressInput;
+};
+
+export type MutationDeleteCustomerAddressArgs = {
+    id: Scalars['ID'];
+};
+
+export type MutationVerifyCustomerAccountArgs = {
+    token: Scalars['String'];
+    password: Scalars['String'];
+};
+
+export type MutationUpdateCustomerPasswordArgs = {
+    currentPassword: Scalars['String'];
+    newPassword: Scalars['String'];
+};
+
+export type MutationRequestUpdateCustomerEmailAddressArgs = {
+    password: Scalars['String'];
+    newEmailAddress: Scalars['String'];
+};
+
+export type MutationUpdateCustomerEmailAddressArgs = {
+    token: Scalars['String'];
+};
+
+export type MutationRequestPasswordResetArgs = {
+    emailAddress: Scalars['String'];
+};
+
+export type MutationResetPasswordArgs = {
+    token: Scalars['String'];
+    password: Scalars['String'];
+};
+
+export type Node = {
+    id: Scalars['ID'];
+};
+
+export type NumberOperators = {
+    eq?: Maybe<Scalars['Float']>;
+    lt?: Maybe<Scalars['Float']>;
+    lte?: Maybe<Scalars['Float']>;
+    gt?: Maybe<Scalars['Float']>;
+    gte?: Maybe<Scalars['Float']>;
+    between?: Maybe<NumberRange>;
+};
+
+export type NumberRange = {
+    start: Scalars['Float'];
+    end: Scalars['Float'];
+};
+
+export type Order = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    code: Scalars['String'];
+    state: Scalars['String'];
+    active: Scalars['Boolean'];
+    customer?: Maybe<Customer>;
+    shippingAddress?: Maybe<OrderAddress>;
+    billingAddress?: Maybe<OrderAddress>;
+    lines: Array<OrderLine>;
+    adjustments: Array<Adjustment>;
+    payments?: Maybe<Array<Payment>>;
+    subTotalBeforeTax: Scalars['Int'];
+    subTotal: Scalars['Int'];
+    currencyCode: CurrencyCode;
+    shipping: Scalars['Int'];
+    shippingMethod?: Maybe<ShippingMethod>;
+    totalBeforeTax: Scalars['Int'];
+    total: Scalars['Int'];
+};
+
+export type OrderAddress = {
+    fullName?: Maybe<Scalars['String']>;
+    company?: Maybe<Scalars['String']>;
+    streetLine1?: Maybe<Scalars['String']>;
+    streetLine2?: Maybe<Scalars['String']>;
+    city?: Maybe<Scalars['String']>;
+    province?: Maybe<Scalars['String']>;
+    postalCode?: Maybe<Scalars['String']>;
+    country?: Maybe<Scalars['String']>;
+    countryCode?: Maybe<Scalars['String']>;
+    phoneNumber?: Maybe<Scalars['String']>;
+};
+
+export type OrderFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    code?: Maybe<StringOperators>;
+    state?: Maybe<StringOperators>;
+    active?: Maybe<BooleanOperators>;
+    subTotalBeforeTax?: Maybe<NumberOperators>;
+    subTotal?: Maybe<NumberOperators>;
+    currencyCode?: Maybe<StringOperators>;
+    shipping?: Maybe<NumberOperators>;
+    totalBeforeTax?: Maybe<NumberOperators>;
+    total?: Maybe<NumberOperators>;
+};
+
+export type OrderItem = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    unitPrice: Scalars['Int'];
+    unitPriceWithTax: Scalars['Int'];
+    unitPriceIncludesTax: Scalars['Boolean'];
+    taxRate: Scalars['Float'];
+    adjustments: Array<Adjustment>;
+};
+
+export type OrderLine = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    productVariant: ProductVariant;
+    featuredAsset?: Maybe<Asset>;
+    unitPrice: Scalars['Int'];
+    unitPriceWithTax: Scalars['Int'];
+    quantity: Scalars['Int'];
+    items: Array<OrderItem>;
+    totalPrice: Scalars['Int'];
+    adjustments: Array<Adjustment>;
+    order: Order;
+};
+
+export type OrderList = PaginatedList & {
+    items: Array<Order>;
+    totalItems: Scalars['Int'];
+};
+
+export type OrderListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<OrderSortParameter>;
+    filter?: Maybe<OrderFilterParameter>;
+};
+
+export type OrderSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    code?: Maybe<SortOrder>;
+    state?: Maybe<SortOrder>;
+    subTotalBeforeTax?: Maybe<SortOrder>;
+    subTotal?: Maybe<SortOrder>;
+    shipping?: Maybe<SortOrder>;
+    totalBeforeTax?: Maybe<SortOrder>;
+    total?: Maybe<SortOrder>;
+};
+
+export type PaginatedList = {
+    items: Array<Node>;
+    totalItems: Scalars['Int'];
+};
+
+export type Payment = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    method: Scalars['String'];
+    amount: Scalars['Int'];
+    state: Scalars['String'];
+    transactionId?: Maybe<Scalars['String']>;
+    metadata?: Maybe<Scalars['JSON']>;
+};
+
+export type PaymentInput = {
+    method: Scalars['String'];
+    metadata: Scalars['JSON'];
+};
+
+export type PaymentMethod = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    code: Scalars['String'];
+    enabled: Scalars['Boolean'];
+    configArgs: Array<ConfigArg>;
+};
+
+/**  Permissions for administrators and customers  */
+export enum Permission {
+    /**  The Authenticated role means simply that the user is logged in  */
+    Authenticated = 'Authenticated',
+    /**  SuperAdmin can perform the most sensitive tasks  */
+    SuperAdmin = 'SuperAdmin',
+    /**  Owner means the user owns this entity, e.g. a Customer's own Order */
+    Owner = 'Owner',
+    /**  Public means any unauthenticated user may perform the operation  */
+    Public = 'Public',
+    CreateCatalog = 'CreateCatalog',
+    ReadCatalog = 'ReadCatalog',
+    UpdateCatalog = 'UpdateCatalog',
+    DeleteCatalog = 'DeleteCatalog',
+    CreateCustomer = 'CreateCustomer',
+    ReadCustomer = 'ReadCustomer',
+    UpdateCustomer = 'UpdateCustomer',
+    DeleteCustomer = 'DeleteCustomer',
+    CreateAdministrator = 'CreateAdministrator',
+    ReadAdministrator = 'ReadAdministrator',
+    UpdateAdministrator = 'UpdateAdministrator',
+    DeleteAdministrator = 'DeleteAdministrator',
+    CreateOrder = 'CreateOrder',
+    ReadOrder = 'ReadOrder',
+    UpdateOrder = 'UpdateOrder',
+    DeleteOrder = 'DeleteOrder',
+    CreateSettings = 'CreateSettings',
+    ReadSettings = 'ReadSettings',
+    UpdateSettings = 'UpdateSettings',
+    DeleteSettings = 'DeleteSettings',
+}
+
+/** The price range where the result has more than one price */
+export type PriceRange = {
+    min: Scalars['Int'];
+    max: Scalars['Int'];
+};
+
+export type Product = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+    slug: Scalars['String'];
+    description: Scalars['String'];
+    featuredAsset?: Maybe<Asset>;
+    assets: Array<Asset>;
+    variants: Array<ProductVariant>;
+    optionGroups: Array<ProductOptionGroup>;
+    facetValues: Array<FacetValue>;
+    translations: Array<ProductTranslation>;
+    collections: Array<Collection>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ProductFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    languageCode?: Maybe<StringOperators>;
+    name?: Maybe<StringOperators>;
+    slug?: Maybe<StringOperators>;
+    description?: Maybe<StringOperators>;
+};
+
+export type ProductList = PaginatedList & {
+    items: Array<Product>;
+    totalItems: Scalars['Int'];
+};
+
+export type ProductListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<ProductSortParameter>;
+    filter?: Maybe<ProductFilterParameter>;
+};
+
+export type ProductOption = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode?: Maybe<LanguageCode>;
+    code?: Maybe<Scalars['String']>;
+    name?: Maybe<Scalars['String']>;
+    translations: Array<ProductOptionTranslation>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ProductOptionGroup = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    code: Scalars['String'];
+    name: Scalars['String'];
+    options: Array<ProductOption>;
+    translations: Array<ProductOptionGroupTranslation>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ProductOptionGroupTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+};
+
+export type ProductOptionTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+};
+
+export type ProductSortParameter = {
+    id?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    name?: Maybe<SortOrder>;
+    slug?: Maybe<SortOrder>;
+    description?: Maybe<SortOrder>;
+};
+
+export type ProductTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+    slug: Scalars['String'];
+    description: Scalars['String'];
+};
+
+export type ProductVariant = Node & {
+    id: Scalars['ID'];
+    productId: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    sku: Scalars['String'];
+    name: Scalars['String'];
+    featuredAsset?: Maybe<Asset>;
+    assets: Array<Asset>;
+    price: Scalars['Int'];
+    currencyCode: CurrencyCode;
+    priceIncludesTax: Scalars['Boolean'];
+    priceWithTax: Scalars['Int'];
+    taxRateApplied: TaxRate;
+    taxCategory: TaxCategory;
+    options: Array<ProductOption>;
+    facetValues: Array<FacetValue>;
+    translations: Array<ProductVariantTranslation>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ProductVariantFilterParameter = {
+    createdAt?: Maybe<DateOperators>;
+    updatedAt?: Maybe<DateOperators>;
+    languageCode?: Maybe<StringOperators>;
+    sku?: Maybe<StringOperators>;
+    name?: Maybe<StringOperators>;
+    price?: Maybe<NumberOperators>;
+    currencyCode?: Maybe<StringOperators>;
+    priceIncludesTax?: Maybe<BooleanOperators>;
+    priceWithTax?: Maybe<NumberOperators>;
+};
+
+export type ProductVariantList = PaginatedList & {
+    items: Array<ProductVariant>;
+    totalItems: Scalars['Int'];
+};
+
+export type ProductVariantListOptions = {
+    skip?: Maybe<Scalars['Int']>;
+    take?: Maybe<Scalars['Int']>;
+    sort?: Maybe<ProductVariantSortParameter>;
+    filter?: Maybe<ProductVariantFilterParameter>;
+};
+
+export type ProductVariantSortParameter = {
+    id?: Maybe<SortOrder>;
+    productId?: Maybe<SortOrder>;
+    createdAt?: Maybe<SortOrder>;
+    updatedAt?: Maybe<SortOrder>;
+    sku?: Maybe<SortOrder>;
+    name?: Maybe<SortOrder>;
+    price?: Maybe<SortOrder>;
+    priceWithTax?: Maybe<SortOrder>;
+};
+
+export type ProductVariantTranslation = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    languageCode: LanguageCode;
+    name: Scalars['String'];
+};
+
+export type Promotion = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    name: Scalars['String'];
+    enabled: Scalars['Boolean'];
+    conditions: Array<ConfigurableOperation>;
+    actions: Array<ConfigurableOperation>;
+};
+
+export type PromotionList = PaginatedList & {
+    items: Array<Promotion>;
+    totalItems: Scalars['Int'];
+};
+
+export type Query = {
+    activeChannel: Channel;
+    activeCustomer?: Maybe<Customer>;
+    activeOrder?: Maybe<Order>;
+    availableCountries: Array<Country>;
+    collections: CollectionList;
+    collection?: Maybe<Collection>;
+    eligibleShippingMethods: Array<ShippingMethodQuote>;
+    me?: Maybe<CurrentUser>;
+    nextOrderStates: Array<Scalars['String']>;
+    order?: Maybe<Order>;
+    orderByCode?: Maybe<Order>;
+    product?: Maybe<Product>;
+    products: ProductList;
+    search: SearchResponse;
+    temp__?: Maybe<Scalars['Boolean']>;
+};
+
+export type QueryCollectionsArgs = {
+    languageCode?: Maybe<LanguageCode>;
+    options?: Maybe<CollectionListOptions>;
+};
+
+export type QueryCollectionArgs = {
+    id: Scalars['ID'];
+    languageCode?: Maybe<LanguageCode>;
+};
+
+export type QueryOrderArgs = {
+    id: Scalars['ID'];
+};
+
+export type QueryOrderByCodeArgs = {
+    code: Scalars['String'];
+};
+
+export type QueryProductArgs = {
+    id: Scalars['ID'];
+    languageCode?: Maybe<LanguageCode>;
+};
+
+export type QueryProductsArgs = {
+    languageCode?: Maybe<LanguageCode>;
+    options?: Maybe<ProductListOptions>;
+};
+
+export type QuerySearchArgs = {
+    input: SearchInput;
+};
+
+export type RegisterCustomerInput = {
+    emailAddress: Scalars['String'];
+    title?: Maybe<Scalars['String']>;
+    firstName?: Maybe<Scalars['String']>;
+    lastName?: Maybe<Scalars['String']>;
+    password?: Maybe<Scalars['String']>;
+};
+
+export type Return = Node &
+    StockMovement & {
+        id: Scalars['ID'];
+        createdAt: Scalars['DateTime'];
+        updatedAt: Scalars['DateTime'];
+        productVariant: ProductVariant;
+        type: StockMovementType;
+        quantity: Scalars['Int'];
+        orderItem: OrderItem;
+    };
+
+export type Role = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    code: Scalars['String'];
+    description: Scalars['String'];
+    permissions: Array<Permission>;
+    channels: Array<Channel>;
+};
+
+export type RoleList = PaginatedList & {
+    items: Array<Role>;
+    totalItems: Scalars['Int'];
+};
+
+export type Sale = Node &
+    StockMovement & {
+        id: Scalars['ID'];
+        createdAt: Scalars['DateTime'];
+        updatedAt: Scalars['DateTime'];
+        productVariant: ProductVariant;
+        type: StockMovementType;
+        quantity: Scalars['Int'];
+        orderLine: OrderLine;
+    };
+
+export type SearchInput = {
+    term?: Maybe<Scalars['String']>;
+    facetIds?: Maybe<Array<Scalars['String']>>;
+    collectionId?: Maybe<Scalars['String']>;
+    groupByProduct?: Maybe<Scalars['Boolean']>;
+    take?: Maybe<Scalars['Int']>;
+    skip?: Maybe<Scalars['Int']>;
+    sort?: Maybe<SearchResultSortParameter>;
+};
+
+export type SearchReindexResponse = {
+    success: Scalars['Boolean'];
+    timeTaken: Scalars['Int'];
+    indexedItemCount: Scalars['Int'];
+};
+
+export type SearchResponse = {
+    items: Array<SearchResult>;
+    totalItems: Scalars['Int'];
+    facetValues: Array<FacetValueResult>;
+};
+
+export type SearchResult = {
+    sku: Scalars['String'];
+    slug: Scalars['String'];
+    productId: Scalars['ID'];
+    productName: Scalars['String'];
+    productPreview: Scalars['String'];
+    productVariantId: Scalars['ID'];
+    productVariantName: Scalars['String'];
+    productVariantPreview: Scalars['String'];
+    price: SearchResultPrice;
+    priceWithTax: SearchResultPrice;
+    currencyCode: CurrencyCode;
+    description: Scalars['String'];
+    facetIds: Array<Scalars['String']>;
+    facetValueIds: Array<Scalars['String']>;
+    /** An array of ids of the Collections in which this result appears */
+    collectionIds: Array<Scalars['String']>;
+    /** A relevence score for the result. Differs between database implementations */
+    score: Scalars['Float'];
+};
+
+/** The price of a search result product, either as a range or as a single price */
+export type SearchResultPrice = PriceRange | SinglePrice;
+
+export type SearchResultSortParameter = {
+    name?: Maybe<SortOrder>;
+    price?: Maybe<SortOrder>;
+};
+
+export type ServerConfig = {
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type ShippingMethod = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    code: Scalars['String'];
+    description: Scalars['String'];
+    checker: ConfigurableOperation;
+    calculator: ConfigurableOperation;
+};
+
+export type ShippingMethodList = PaginatedList & {
+    items: Array<ShippingMethod>;
+    totalItems: Scalars['Int'];
+};
+
+export type ShippingMethodQuote = {
+    id: Scalars['ID'];
+    price: Scalars['Int'];
+    description: Scalars['String'];
+};
+
+/** The price value where the result has a single price */
+export type SinglePrice = {
+    value: Scalars['Int'];
+};
+
+export enum SortOrder {
+    ASC = 'ASC',
+    DESC = 'DESC',
+}
+
+export type StockAdjustment = Node &
+    StockMovement & {
+        id: Scalars['ID'];
+        createdAt: Scalars['DateTime'];
+        updatedAt: Scalars['DateTime'];
+        productVariant: ProductVariant;
+        type: StockMovementType;
+        quantity: Scalars['Int'];
+    };
+
+export type StockMovement = {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    productVariant: ProductVariant;
+    type: StockMovementType;
+    quantity: Scalars['Int'];
+};
+
+export type StockMovementItem = StockAdjustment | Sale | Cancellation | Return;
+
+export type StockMovementList = {
+    items: Array<StockMovementItem>;
+    totalItems: Scalars['Int'];
+};
+
+export enum StockMovementType {
+    ADJUSTMENT = 'ADJUSTMENT',
+    SALE = 'SALE',
+    CANCELLATION = 'CANCELLATION',
+    RETURN = 'RETURN',
+}
+
+export type StringOperators = {
+    eq?: Maybe<Scalars['String']>;
+    contains?: Maybe<Scalars['String']>;
+};
+
+export type TaxCategory = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    name: Scalars['String'];
+};
+
+export type TaxRate = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    name: Scalars['String'];
+    enabled: Scalars['Boolean'];
+    value: Scalars['Int'];
+    category: TaxCategory;
+    zone: Zone;
+    customerGroup?: Maybe<CustomerGroup>;
+};
+
+export type TaxRateList = PaginatedList & {
+    items: Array<TaxRate>;
+    totalItems: Scalars['Int'];
+};
+
+export type UpdateAddressInput = {
+    id: Scalars['ID'];
+    fullName?: Maybe<Scalars['String']>;
+    company?: Maybe<Scalars['String']>;
+    streetLine1?: Maybe<Scalars['String']>;
+    streetLine2?: Maybe<Scalars['String']>;
+    city?: Maybe<Scalars['String']>;
+    province?: Maybe<Scalars['String']>;
+    postalCode?: Maybe<Scalars['String']>;
+    countryCode?: Maybe<Scalars['String']>;
+    phoneNumber?: Maybe<Scalars['String']>;
+    defaultShippingAddress?: Maybe<Scalars['Boolean']>;
+    defaultBillingAddress?: Maybe<Scalars['Boolean']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type UpdateCustomerInput = {
+    title?: Maybe<Scalars['String']>;
+    firstName?: Maybe<Scalars['String']>;
+    lastName?: Maybe<Scalars['String']>;
+    phoneNumber?: Maybe<Scalars['String']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type User = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    identifier: Scalars['String'];
+    verified: Scalars['Boolean'];
+    roles: Array<Role>;
+    lastLogin?: Maybe<Scalars['String']>;
+    customFields?: Maybe<Scalars['JSON']>;
+};
+
+export type Zone = Node & {
+    id: Scalars['ID'];
+    createdAt: Scalars['DateTime'];
+    updatedAt: Scalars['DateTime'];
+    name: Scalars['String'];
+    members: Array<Country>;
+};
+export type TestOrderFragmentFragment = { __typename?: 'Order' } & Pick<
+    Order,
+    'id' | 'code' | 'state' | 'active' | 'shipping'
+> & {
+        lines: Array<
+            { __typename?: 'OrderLine' } & Pick<OrderLine, 'id' | 'quantity'> & {
+                    productVariant: { __typename?: 'ProductVariant' } & Pick<ProductVariant, 'id'>;
+                }
+        >;
+        shippingMethod: Maybe<
+            { __typename?: 'ShippingMethod' } & Pick<ShippingMethod, 'id' | 'code' | 'description'>
+        >;
+        customer: Maybe<{ __typename?: 'Customer' } & Pick<Customer, 'id'>>;
+    };
+
+export type AddItemToOrderMutationVariables = {
+    productVariantId: Scalars['ID'];
+    quantity: Scalars['Int'];
+};
+
+export type AddItemToOrderMutation = { __typename?: 'Mutation' } & {
+    addItemToOrder: Maybe<
+        { __typename?: 'Order' } & Pick<Order, 'id' | 'code' | 'state' | 'active'> & {
+                lines: Array<
+                    { __typename?: 'OrderLine' } & Pick<OrderLine, 'id' | 'quantity'> & {
+                            productVariant: { __typename?: 'ProductVariant' } & Pick<ProductVariant, 'id'>;
+                        }
+                >;
+            }
+    >;
+};
+
+export type SearchProductsShopQueryVariables = {
+    input: SearchInput;
+};
+
+export type SearchProductsShopQuery = { __typename?: 'Query' } & {
+    search: { __typename?: 'SearchResponse' } & Pick<SearchResponse, 'totalItems'> & {
+            items: Array<
+                { __typename?: 'SearchResult' } & Pick<
+                    SearchResult,
+                    | 'productId'
+                    | 'productName'
+                    | 'productPreview'
+                    | 'productVariantId'
+                    | 'productVariantName'
+                    | 'productVariantPreview'
+                    | 'sku'
+                    | 'collectionIds'
+                >
+            >;
+        };
+};
+
+export type RegisterMutationVariables = {
+    input: RegisterCustomerInput;
+};
+
+export type RegisterMutation = { __typename?: 'Mutation' } & Pick<Mutation, 'registerCustomerAccount'>;
+
+export type VerifyMutationVariables = {
+    password: Scalars['String'];
+    token: Scalars['String'];
+};
+
+export type VerifyMutation = { __typename?: 'Mutation' } & {
+    verifyCustomerAccount: { __typename?: 'LoginResult' } & {
+        user: { __typename?: 'CurrentUser' } & Pick<CurrentUser, 'id' | 'identifier'>;
+    };
+};
+
+export type RefreshTokenMutationVariables = {
+    emailAddress: Scalars['String'];
+};
+
+export type RefreshTokenMutation = { __typename?: 'Mutation' } & Pick<
+    Mutation,
+    'refreshCustomerVerification'
+>;
+
+export type RequestPasswordResetMutationVariables = {
+    identifier: Scalars['String'];
+};
+
+export type RequestPasswordResetMutation = { __typename?: 'Mutation' } & Pick<
+    Mutation,
+    'requestPasswordReset'
+>;
+
+export type ResetPasswordMutationVariables = {
+    token: Scalars['String'];
+    password: Scalars['String'];
+};
+
+export type ResetPasswordMutation = { __typename?: 'Mutation' } & {
+    resetPassword: { __typename?: 'LoginResult' } & {
+        user: { __typename?: 'CurrentUser' } & Pick<CurrentUser, 'id' | 'identifier'>;
+    };
+};
+
+export type RequestUpdateEmailAddressMutationVariables = {
+    password: Scalars['String'];
+    newEmailAddress: Scalars['String'];
+};
+
+export type RequestUpdateEmailAddressMutation = { __typename?: 'Mutation' } & Pick<
+    Mutation,
+    'requestUpdateCustomerEmailAddress'
+>;
+
+export type UpdateEmailAddressMutationVariables = {
+    token: Scalars['String'];
+};
+
+export type UpdateEmailAddressMutation = { __typename?: 'Mutation' } & Pick<
+    Mutation,
+    'updateCustomerEmailAddress'
+>;
+
+export type GetActiveCustomerQueryVariables = {};
+
+export type GetActiveCustomerQuery = { __typename?: 'Query' } & {
+    activeCustomer: Maybe<{ __typename?: 'Customer' } & Pick<Customer, 'id' | 'emailAddress'>>;
+};
+
+export type CreateAddressShopMutationVariables = {
+    input: CreateAddressInput;
+};
+
+export type CreateAddressShopMutation = { __typename?: 'Mutation' } & {
+    createCustomerAddress: { __typename?: 'Address' } & Pick<Address, 'id' | 'streetLine1'> & {
+            country: { __typename?: 'Country' } & Pick<Country, 'code'>;
+        };
+};
+
+export type UpdateAddressShopMutationVariables = {
+    input: UpdateAddressInput;
+};
+
+export type UpdateAddressShopMutation = { __typename?: 'Mutation' } & {
+    updateCustomerAddress: { __typename?: 'Address' } & Pick<Address, 'streetLine1'> & {
+            country: { __typename?: 'Country' } & Pick<Country, 'code'>;
+        };
+};
+
+export type DeleteAddressShopMutationVariables = {
+    id: Scalars['ID'];
+};
+
+export type DeleteAddressShopMutation = { __typename?: 'Mutation' } & Pick<Mutation, 'deleteCustomerAddress'>;
+
+export type UpdateCustomerMutationVariables = {
+    input: UpdateCustomerInput;
+};
+
+export type UpdateCustomerMutation = { __typename?: 'Mutation' } & {
+    updateCustomer: { __typename?: 'Customer' } & Pick<Customer, 'id' | 'firstName' | 'lastName'>;
+};
+
+export type UpdatePasswordMutationVariables = {
+    old: Scalars['String'];
+    new: Scalars['String'];
+};
+
+export type UpdatePasswordMutation = { __typename?: 'Mutation' } & Pick<Mutation, 'updateCustomerPassword'>;
+
+export type GetActiveOrderQueryVariables = {};
+
+export type GetActiveOrderQuery = { __typename?: 'Query' } & {
+    activeOrder: Maybe<{ __typename?: 'Order' } & TestOrderFragmentFragment>;
+};
+
+export type AdjustItemQuantityMutationVariables = {
+    orderItemId: Scalars['ID'];
+    quantity: Scalars['Int'];
+};
+
+export type AdjustItemQuantityMutation = { __typename?: 'Mutation' } & {
+    adjustItemQuantity: Maybe<{ __typename?: 'Order' } & TestOrderFragmentFragment>;
+};
+
+export type RemoveItemFromOrderMutationVariables = {
+    orderItemId: Scalars['ID'];
+};
+
+export type RemoveItemFromOrderMutation = { __typename?: 'Mutation' } & {
+    removeItemFromOrder: Maybe<{ __typename?: 'Order' } & TestOrderFragmentFragment>;
+};
+
+export type GetShippingMethodsQueryVariables = {};
+
+export type GetShippingMethodsQuery = { __typename?: 'Query' } & {
+    eligibleShippingMethods: Array<
+        { __typename?: 'ShippingMethodQuote' } & Pick<ShippingMethodQuote, 'id' | 'price' | 'description'>
+    >;
+};
+
+export type SetShippingMethodMutationVariables = {
+    id: Scalars['ID'];
+};
+
+export type SetShippingMethodMutation = { __typename?: 'Mutation' } & {
+    setOrderShippingMethod: Maybe<
+        { __typename?: 'Order' } & Pick<Order, 'shipping'> & {
+                shippingMethod: Maybe<
+                    { __typename?: 'ShippingMethod' } & Pick<ShippingMethod, 'id' | 'code' | 'description'>
+                >;
+            }
+    >;
+};
+
+export type SetCustomerForOrderMutationVariables = {
+    input: CreateCustomerInput;
+};
+
+export type SetCustomerForOrderMutation = { __typename?: 'Mutation' } & {
+    setCustomerForOrder: Maybe<
+        { __typename?: 'Order' } & Pick<Order, 'id'> & {
+                customer: Maybe<
+                    { __typename?: 'Customer' } & Pick<
+                        Customer,
+                        'id' | 'emailAddress' | 'firstName' | 'lastName'
+                    >
+                >;
+            }
+    >;
+};
+
+export type GetOrderByCodeQueryVariables = {
+    code: Scalars['String'];
+};
+
+export type GetOrderByCodeQuery = { __typename?: 'Query' } & {
+    orderByCode: Maybe<{ __typename?: 'Order' } & TestOrderFragmentFragment>;
+};
+
+export type GetAvailableCountriesQueryVariables = {};
+
+export type GetAvailableCountriesQuery = { __typename?: 'Query' } & {
+    availableCountries: Array<{ __typename?: 'Country' } & Pick<Country, 'id' | 'code'>>;
+};
+
+export type TransitionToStateMutationVariables = {
+    state: Scalars['String'];
+};
+
+export type TransitionToStateMutation = { __typename?: 'Mutation' } & {
+    transitionOrderToState: Maybe<{ __typename?: 'Order' } & Pick<Order, 'id' | 'state'>>;
+};
+
+export type SetShippingAddressMutationVariables = {
+    input: CreateAddressInput;
+};
+
+export type SetShippingAddressMutation = { __typename?: 'Mutation' } & {
+    setOrderShippingAddress: Maybe<
+        { __typename?: 'Order' } & {
+            shippingAddress: Maybe<
+                { __typename?: 'OrderAddress' } & Pick<
+                    OrderAddress,
+                    | 'fullName'
+                    | 'company'
+                    | 'streetLine1'
+                    | 'streetLine2'
+                    | 'city'
+                    | 'province'
+                    | 'postalCode'
+                    | 'country'
+                    | 'phoneNumber'
+                >
+            >;
+        }
+    >;
+};
+
+export type AddPaymentToOrderMutationVariables = {
+    input: PaymentInput;
+};
+
+export type AddPaymentToOrderMutation = { __typename?: 'Mutation' } & {
+    addPaymentToOrder: Maybe<
+        { __typename?: 'Order' } & {
+            payments: Maybe<
+                Array<
+                    { __typename?: 'Payment' } & Pick<
+                        Payment,
+                        'id' | 'transactionId' | 'method' | 'amount' | 'state' | 'metadata'
+                    >
+                >
+            >;
+        } & TestOrderFragmentFragment
+    >;
+};
+
+export type GetNextOrderStatesQueryVariables = {};
+
+export type GetNextOrderStatesQuery = { __typename?: 'Query' } & Pick<Query, 'nextOrderStates'>;
+
+export type GetCustomerAddressesQueryVariables = {};
+
+export type GetCustomerAddressesQuery = { __typename?: 'Query' } & {
+    activeOrder: Maybe<
+        { __typename?: 'Order' } & {
+            customer: Maybe<
+                { __typename?: 'Customer' } & {
+                    addresses: Maybe<Array<{ __typename?: 'Address' } & Pick<Address, 'id'>>>;
+                }
+            >;
+        }
+    >;
+};
+export namespace TestOrderFragment {
+    export type Fragment = TestOrderFragmentFragment;
+    export type Lines = NonNullable<TestOrderFragmentFragment['lines'][0]>;
+    export type ProductVariant = (NonNullable<TestOrderFragmentFragment['lines'][0]>)['productVariant'];
+    export type ShippingMethod = NonNullable<TestOrderFragmentFragment['shippingMethod']>;
+    export type Customer = NonNullable<TestOrderFragmentFragment['customer']>;
+}
+
+export namespace AddItemToOrder {
+    export type Variables = AddItemToOrderMutationVariables;
+    export type Mutation = AddItemToOrderMutation;
+    export type AddItemToOrder = NonNullable<AddItemToOrderMutation['addItemToOrder']>;
+    export type Lines = NonNullable<(NonNullable<AddItemToOrderMutation['addItemToOrder']>)['lines'][0]>;
+    export type ProductVariant = (NonNullable<
+        (NonNullable<AddItemToOrderMutation['addItemToOrder']>)['lines'][0]
+    >)['productVariant'];
+}
+
+export namespace SearchProductsShop {
+    export type Variables = SearchProductsShopQueryVariables;
+    export type Query = SearchProductsShopQuery;
+    export type Search = SearchProductsShopQuery['search'];
+    export type Items = NonNullable<SearchProductsShopQuery['search']['items'][0]>;
+}
+
+export namespace Register {
+    export type Variables = RegisterMutationVariables;
+    export type Mutation = RegisterMutation;
+}
+
+export namespace Verify {
+    export type Variables = VerifyMutationVariables;
+    export type Mutation = VerifyMutation;
+    export type VerifyCustomerAccount = VerifyMutation['verifyCustomerAccount'];
+    export type User = VerifyMutation['verifyCustomerAccount']['user'];
+}
+
+export namespace RefreshToken {
+    export type Variables = RefreshTokenMutationVariables;
+    export type Mutation = RefreshTokenMutation;
+}
+
+export namespace RequestPasswordReset {
+    export type Variables = RequestPasswordResetMutationVariables;
+    export type Mutation = RequestPasswordResetMutation;
+}
+
+export namespace ResetPassword {
+    export type Variables = ResetPasswordMutationVariables;
+    export type Mutation = ResetPasswordMutation;
+    export type ResetPassword = ResetPasswordMutation['resetPassword'];
+    export type User = ResetPasswordMutation['resetPassword']['user'];
+}
+
+export namespace RequestUpdateEmailAddress {
+    export type Variables = RequestUpdateEmailAddressMutationVariables;
+    export type Mutation = RequestUpdateEmailAddressMutation;
+}
+
+export namespace UpdateEmailAddress {
+    export type Variables = UpdateEmailAddressMutationVariables;
+    export type Mutation = UpdateEmailAddressMutation;
+}
+
+export namespace GetActiveCustomer {
+    export type Variables = GetActiveCustomerQueryVariables;
+    export type Query = GetActiveCustomerQuery;
+    export type ActiveCustomer = NonNullable<GetActiveCustomerQuery['activeCustomer']>;
+}
+
+export namespace CreateAddressShop {
+    export type Variables = CreateAddressShopMutationVariables;
+    export type Mutation = CreateAddressShopMutation;
+    export type CreateCustomerAddress = CreateAddressShopMutation['createCustomerAddress'];
+    export type Country = CreateAddressShopMutation['createCustomerAddress']['country'];
+}
+
+export namespace UpdateAddressShop {
+    export type Variables = UpdateAddressShopMutationVariables;
+    export type Mutation = UpdateAddressShopMutation;
+    export type UpdateCustomerAddress = UpdateAddressShopMutation['updateCustomerAddress'];
+    export type Country = UpdateAddressShopMutation['updateCustomerAddress']['country'];
+}
+
+export namespace DeleteAddressShop {
+    export type Variables = DeleteAddressShopMutationVariables;
+    export type Mutation = DeleteAddressShopMutation;
+}
+
+export namespace UpdateCustomer {
+    export type Variables = UpdateCustomerMutationVariables;
+    export type Mutation = UpdateCustomerMutation;
+    export type UpdateCustomer = UpdateCustomerMutation['updateCustomer'];
+}
+
+export namespace UpdatePassword {
+    export type Variables = UpdatePasswordMutationVariables;
+    export type Mutation = UpdatePasswordMutation;
+}
+
+export namespace GetActiveOrder {
+    export type Variables = GetActiveOrderQueryVariables;
+    export type Query = GetActiveOrderQuery;
+    export type ActiveOrder = TestOrderFragmentFragment;
+}
+
+export namespace AdjustItemQuantity {
+    export type Variables = AdjustItemQuantityMutationVariables;
+    export type Mutation = AdjustItemQuantityMutation;
+    export type AdjustItemQuantity = TestOrderFragmentFragment;
+}
+
+export namespace RemoveItemFromOrder {
+    export type Variables = RemoveItemFromOrderMutationVariables;
+    export type Mutation = RemoveItemFromOrderMutation;
+    export type RemoveItemFromOrder = TestOrderFragmentFragment;
+}
+
+export namespace GetShippingMethods {
+    export type Variables = GetShippingMethodsQueryVariables;
+    export type Query = GetShippingMethodsQuery;
+    export type EligibleShippingMethods = NonNullable<GetShippingMethodsQuery['eligibleShippingMethods'][0]>;
+}
+
+export namespace SetShippingMethod {
+    export type Variables = SetShippingMethodMutationVariables;
+    export type Mutation = SetShippingMethodMutation;
+    export type SetOrderShippingMethod = NonNullable<SetShippingMethodMutation['setOrderShippingMethod']>;
+    export type ShippingMethod = NonNullable<
+        (NonNullable<SetShippingMethodMutation['setOrderShippingMethod']>)['shippingMethod']
+    >;
+}
+
+export namespace SetCustomerForOrder {
+    export type Variables = SetCustomerForOrderMutationVariables;
+    export type Mutation = SetCustomerForOrderMutation;
+    export type SetCustomerForOrder = NonNullable<SetCustomerForOrderMutation['setCustomerForOrder']>;
+    export type Customer = NonNullable<
+        (NonNullable<SetCustomerForOrderMutation['setCustomerForOrder']>)['customer']
+    >;
+}
+
+export namespace GetOrderByCode {
+    export type Variables = GetOrderByCodeQueryVariables;
+    export type Query = GetOrderByCodeQuery;
+    export type OrderByCode = TestOrderFragmentFragment;
+}
+
+export namespace GetAvailableCountries {
+    export type Variables = GetAvailableCountriesQueryVariables;
+    export type Query = GetAvailableCountriesQuery;
+    export type AvailableCountries = NonNullable<GetAvailableCountriesQuery['availableCountries'][0]>;
+}
+
+export namespace TransitionToState {
+    export type Variables = TransitionToStateMutationVariables;
+    export type Mutation = TransitionToStateMutation;
+    export type TransitionOrderToState = NonNullable<TransitionToStateMutation['transitionOrderToState']>;
+}
+
+export namespace SetShippingAddress {
+    export type Variables = SetShippingAddressMutationVariables;
+    export type Mutation = SetShippingAddressMutation;
+    export type SetOrderShippingAddress = NonNullable<SetShippingAddressMutation['setOrderShippingAddress']>;
+    export type ShippingAddress = NonNullable<
+        (NonNullable<SetShippingAddressMutation['setOrderShippingAddress']>)['shippingAddress']
+    >;
+}
+
+export namespace AddPaymentToOrder {
+    export type Variables = AddPaymentToOrderMutationVariables;
+    export type Mutation = AddPaymentToOrderMutation;
+    export type AddPaymentToOrder = TestOrderFragmentFragment;
+    export type Payments = NonNullable<
+        (NonNullable<(NonNullable<AddPaymentToOrderMutation['addPaymentToOrder']>)['payments']>)[0]
+    >;
+}
+
+export namespace GetNextOrderStates {
+    export type Variables = GetNextOrderStatesQueryVariables;
+    export type Query = GetNextOrderStatesQuery;
+}
+
+export namespace GetCustomerAddresses {
+    export type Variables = GetCustomerAddressesQueryVariables;
+    export type Query = GetCustomerAddressesQuery;
+    export type ActiveOrder = NonNullable<GetCustomerAddressesQuery['activeOrder']>;
+    export type Customer = NonNullable<(NonNullable<GetCustomerAddressesQuery['activeOrder']>)['customer']>;
+    export type Addresses = NonNullable<
+        (NonNullable<
+            (NonNullable<(NonNullable<GetCustomerAddressesQuery['activeOrder']>)['customer']>)['addresses']
+        >)[0]
+    >;
+}

+ 230 - 0
packages/core/e2e/graphql/shared-definitions.ts

@@ -0,0 +1,230 @@
+import gql from 'graphql-tag';
+
+import {
+    ADMINISTRATOR_FRAGMENT,
+    ASSET_FRAGMENT,
+    COLLECTION_FRAGMENT,
+    COUNTRY_FRAGMENT,
+    CURRENT_USER_FRAGMENT,
+    CUSTOMER_FRAGMENT,
+    FACET_WITH_VALUES_FRAGMENT,
+    PRODUCT_VARIANT_FRAGMENT,
+    PRODUCT_WITH_VARIANTS_FRAGMENT,
+    ROLE_FRAGMENT,
+    TAX_RATE_FRAGMENT
+} from './fragments';
+
+export const CREATE_ADMINISTRATOR = gql`
+    mutation CreateAdministrator($input: CreateAdministratorInput!) {
+        createAdministrator(input: $input) {
+            ...Administrator
+        }
+    }
+    ${ADMINISTRATOR_FRAGMENT}
+`;
+
+export const UPDATE_PRODUCT = gql`
+    mutation UpdateProduct($input: UpdateProductInput!) {
+        updateProduct(input: $input) {
+            ...ProductWithVariants
+        }
+    }
+    ${PRODUCT_WITH_VARIANTS_FRAGMENT}
+`;
+
+export const CREATE_PRODUCT = gql`
+    mutation CreateProduct($input: CreateProductInput!) {
+        createProduct(input: $input) {
+            ...ProductWithVariants
+        }
+    }
+    ${PRODUCT_WITH_VARIANTS_FRAGMENT}
+`;
+
+export const GET_PRODUCT_WITH_VARIANTS = gql`
+    query GetProductWithVariants($id: ID!, $languageCode: LanguageCode) {
+        product(languageCode: $languageCode, id: $id) {
+            ...ProductWithVariants
+        }
+    }
+    ${PRODUCT_WITH_VARIANTS_FRAGMENT}
+`;
+
+export const GET_PRODUCT_LIST = gql`
+    query GetProductList($options: ProductListOptions, $languageCode: LanguageCode) {
+        products(languageCode: $languageCode, options: $options) {
+            items {
+                id
+                enabled
+                languageCode
+                name
+                slug
+                featuredAsset {
+                    id
+                    preview
+                }
+            }
+            totalItems
+        }
+    }
+`;
+
+export const UPDATE_PRODUCT_VARIANTS = gql`
+    mutation UpdateProductVariants($input: [UpdateProductVariantInput!]!) {
+        updateProductVariants(input: $input) {
+            ...ProductVariant
+        }
+    }
+    ${PRODUCT_VARIANT_FRAGMENT}
+`;
+
+export const UPDATE_TAX_RATE = gql`
+    mutation UpdateTaxRate($input: UpdateTaxRateInput!) {
+        updateTaxRate(input: $input) {
+            ...TaxRate
+        }
+    }
+    ${TAX_RATE_FRAGMENT}
+`;
+
+export const CREATE_FACET = gql`
+    mutation CreateFacet($input: CreateFacetInput!) {
+        createFacet(input: $input) {
+            ...FacetWithValues
+        }
+    }
+    ${FACET_WITH_VALUES_FRAGMENT}
+`;
+
+export const UPDATE_FACET = gql`
+    mutation UpdateFacet($input: UpdateFacetInput!) {
+        updateFacet(input: $input) {
+            ...FacetWithValues
+        }
+    }
+    ${FACET_WITH_VALUES_FRAGMENT}
+`;
+
+export const GET_CUSTOMER_LIST = gql`
+    query GetCustomerList($options: CustomerListOptions) {
+        customers(options: $options) {
+            items {
+                id
+                title
+                firstName
+                lastName
+                emailAddress
+                user {
+                    id
+                    verified
+                }
+            }
+            totalItems
+        }
+    }
+`;
+
+export const GET_ASSET_LIST = gql`
+    query GetAssetList($options: AssetListOptions) {
+        assets(options: $options) {
+            items {
+                ...Asset
+            }
+            totalItems
+        }
+    }
+    ${ASSET_FRAGMENT}
+`;
+
+export const CREATE_ROLE = gql`
+    mutation CreateRole($input: CreateRoleInput!) {
+        createRole(input: $input) {
+            ...Role
+        }
+    }
+    ${ROLE_FRAGMENT}
+`;
+
+export const CREATE_COLLECTION = gql`
+    mutation CreateCollection($input: CreateCollectionInput!) {
+        createCollection(input: $input) {
+            ...Collection
+        }
+    }
+    ${COLLECTION_FRAGMENT}
+`;
+
+export const UPDATE_COLLECTION = gql`
+    mutation UpdateCollection($input: UpdateCollectionInput!) {
+        updateCollection(input: $input) {
+            ...Collection
+        }
+    }
+    ${COLLECTION_FRAGMENT}
+`;
+
+export const GET_CUSTOMER = gql`
+    query GetCustomer($id: ID!, $orderListOptions: OrderListOptions) {
+        customer(id: $id) {
+            ...Customer
+            orders(options: $orderListOptions) {
+                items {
+                    id
+                    code
+                    state
+                    total
+                    currencyCode
+                    updatedAt
+                }
+                totalItems
+            }
+        }
+    }
+    ${CUSTOMER_FRAGMENT}
+`;
+
+export const ATTEMPT_LOGIN = gql`
+    mutation AttemptLogin($username: String!, $password: String!, $rememberMe: Boolean!) {
+        login(username: $username, password: $password, rememberMe: $rememberMe) {
+            user {
+                ...CurrentUser
+            }
+        }
+    }
+    ${CURRENT_USER_FRAGMENT}
+`;
+
+export const GET_COUNTRY_LIST = gql`
+    query GetCountryList($options: CountryListOptions) {
+        countries(options: $options) {
+            items {
+                id
+                code
+                name
+                enabled
+            }
+            totalItems
+        }
+    }
+`;
+
+export const UPDATE_COUNTRY = gql`
+    mutation UpdateCountry($input: UpdateCountryInput!) {
+        updateCountry(input: $input) {
+            ...Country
+        }
+    }
+    ${COUNTRY_FRAGMENT}
+`;
+
+export const GET_FACET_LIST = gql`
+    query GetFacetList($options: FacetListOptions, $languageCode: LanguageCode) {
+        facets(languageCode: $languageCode, options: $options) {
+            items {
+                ...FacetWithValues
+            }
+            totalItems
+        }
+    }
+    ${FACET_WITH_VALUES_FRAGMENT}
+`;

+ 300 - 0
packages/core/e2e/graphql/shop-definitions.ts

@@ -0,0 +1,300 @@
+import gql from 'graphql-tag';
+
+export const TEST_ORDER_FRAGMENT = gql`
+    fragment TestOrderFragment on Order {
+        id
+        code
+        state
+        active
+        lines {
+            id
+            quantity
+            productVariant {
+                id
+            }
+        }
+        shipping
+        shippingMethod {
+            id
+            code
+            description
+        }
+        customer {
+            id
+        }
+    }
+`;
+
+export const ADD_ITEM_TO_ORDER = gql`
+    mutation AddItemToOrder($productVariantId: ID!, $quantity: Int!) {
+        addItemToOrder(productVariantId: $productVariantId, quantity: $quantity) {
+            id
+            code
+            state
+            active
+            lines {
+                id
+                quantity
+                productVariant {
+                    id
+                }
+            }
+        }
+    }
+`;
+export const SEARCH_PRODUCTS_SHOP = gql`
+    query SearchProductsShop($input: SearchInput!) {
+        search(input: $input) {
+            totalItems
+            items {
+                productId
+                productName
+                productPreview
+                productVariantId
+                productVariantName
+                productVariantPreview
+                sku
+                collectionIds
+            }
+        }
+    }
+`;
+export const REGISTER_ACCOUNT = gql`
+    mutation Register($input: RegisterCustomerInput!) {
+        registerCustomerAccount(input: $input)
+    }
+`;
+export const VERIFY_EMAIL = gql`
+    mutation Verify($password: String!, $token: String!) {
+        verifyCustomerAccount(password: $password, token: $token) {
+            user {
+                id
+                identifier
+            }
+        }
+    }
+`;
+export const REFRESH_TOKEN = gql`
+    mutation RefreshToken($emailAddress: String!) {
+        refreshCustomerVerification(emailAddress: $emailAddress)
+    }
+`;
+export const REQUEST_PASSWORD_RESET = gql`
+    mutation RequestPasswordReset($identifier: String!) {
+        requestPasswordReset(emailAddress: $identifier)
+    }
+`;
+export const RESET_PASSWORD = gql`
+    mutation ResetPassword($token: String!, $password: String!) {
+        resetPassword(token: $token, password: $password) {
+            user {
+                id
+                identifier
+            }
+        }
+    }
+`;
+export const REQUEST_UPDATE_EMAIL_ADDRESS = gql`
+    mutation RequestUpdateEmailAddress($password: String! $newEmailAddress: String!) {
+        requestUpdateCustomerEmailAddress(password: $password, newEmailAddress: $newEmailAddress)
+    }
+`;
+export const UPDATE_EMAIL_ADDRESS = gql`
+    mutation UpdateEmailAddress($token: String!) {
+        updateCustomerEmailAddress(token: $token)
+    }
+`;
+export const GET_ACTIVE_CUSTOMER = gql`
+    query GetActiveCustomer{
+        activeCustomer {
+            id
+            emailAddress
+        }
+    }
+`;
+export const CREATE_ADDRESS = gql`
+    mutation CreateAddressShop($input: CreateAddressInput!) {
+        createCustomerAddress(input: $input) {
+            id
+            streetLine1
+            country {
+                code
+            }
+        }
+    }
+`;
+export const UPDATE_ADDRESS = gql`
+    mutation UpdateAddressShop($input: UpdateAddressInput!) {
+        updateCustomerAddress(input: $input) {
+            streetLine1
+            country {
+                code
+            }
+        }
+    }
+`;
+export const DELETE_ADDRESS = gql`
+    mutation DeleteAddressShop($id: ID!) {
+        deleteCustomerAddress(id: $id)
+    }
+`;
+
+export const UPDATE_CUSTOMER = gql`
+    mutation UpdateCustomer($input: UpdateCustomerInput!) {
+        updateCustomer(input: $input) {
+            id
+            firstName
+            lastName
+        }
+    }
+`;
+
+export const UPDATE_PASSWORD = gql`
+    mutation UpdatePassword($old: String!, $new: String!) {
+        updateCustomerPassword(currentPassword: $old, newPassword: $new)
+    }
+`;
+
+export const GET_ACTIVE_ORDER = gql`
+    query GetActiveOrder{
+        activeOrder {
+            ...TestOrderFragment
+        }
+    }
+    ${TEST_ORDER_FRAGMENT}
+`;
+
+export const ADJUST_ITEM_QUENTITY = gql`
+    mutation AdjustItemQuantity($orderItemId: ID!, $quantity: Int!) {
+        adjustItemQuantity(orderItemId: $orderItemId, quantity: $quantity) {
+            ...TestOrderFragment
+        }
+    }
+    ${TEST_ORDER_FRAGMENT}
+`;
+
+export const REMOVE_ITEM_FROM_ORDER = gql`
+    mutation RemoveItemFromOrder($orderItemId: ID!) {
+        removeItemFromOrder(orderItemId: $orderItemId) {
+            ...TestOrderFragment
+        }
+    }
+    ${TEST_ORDER_FRAGMENT}
+`;
+
+export const GET_ELIGIBLE_SHIPPING_METHODS = gql`
+    query GetShippingMethods{
+        eligibleShippingMethods {
+            id
+            price
+            description
+        }
+    }
+`;
+
+export const SET_SHIPPING_METHOD = gql`
+    mutation SetShippingMethod($id: ID!) {
+        setOrderShippingMethod(shippingMethodId: $id) {
+            shipping
+            shippingMethod {
+                id
+                code
+                description
+            }
+        }
+    }
+`;
+
+export const SET_CUSTOMER = gql`
+    mutation SetCustomerForOrder($input: CreateCustomerInput!) {
+        setCustomerForOrder(input: $input) {
+            id
+            customer {
+                id
+                emailAddress
+                firstName
+                lastName
+            }
+        }
+    }
+`;
+
+export const GET_ORDER_BY_CODE = gql`
+    query GetOrderByCode($code: String!) {
+        orderByCode(code: $code) {
+            ...TestOrderFragment
+        }
+    }
+    ${TEST_ORDER_FRAGMENT}
+`;
+
+export const GET_AVAILABLE_COUNTRIES = gql`
+    query GetAvailableCountries{
+        availableCountries {
+            id
+            code
+        }
+    }
+`;
+
+export const TRANSITION_TO_STATE = gql`
+    mutation TransitionToState($state: String!) {
+        transitionOrderToState(state: $state) {
+            id
+            state
+        }
+    }
+`;
+
+export const SET_SHIPPING_ADDRESS = gql`
+    mutation SetShippingAddress($input: CreateAddressInput!) {
+        setOrderShippingAddress(input: $input) {
+            shippingAddress {
+                fullName
+                company
+                streetLine1
+                streetLine2
+                city
+                province
+                postalCode
+                country
+                phoneNumber
+            }
+        }
+    }
+`;
+
+export const ADD_PAYMENT = gql`
+    mutation AddPaymentToOrder($input: PaymentInput!) {
+        addPaymentToOrder(input: $input) {
+            ...TestOrderFragment
+            payments {
+                id
+                transactionId
+                method
+                amount
+                state
+                metadata
+            }
+        }
+    }
+    ${TEST_ORDER_FRAGMENT}
+`;
+
+export const GET_NEXT_STATES = gql`
+    query GetNextOrderStates {
+        nextOrderStates
+    }
+`;
+
+export const GET_ACTIVE_ORDER_ADDRESSES = gql`
+    query GetCustomerAddresses{
+        activeOrder {
+            customer {
+                addresses {
+                    id
+                }
+            }
+        }
+    }
+`;

+ 21 - 8
packages/core/e2e/order.e2e-spec.ts

@@ -1,12 +1,12 @@
 /* tslint:disable:no-non-null-assertion */
-import { GetCustomerList, GetOrder, GetOrderList } from '@vendure/common/lib/generated-types';
 import gql from 'graphql-tag';
 import path from 'path';
 
-import { GET_CUSTOMER_LIST } from '../../../admin-ui/src/app/data/definitions/customer-definitions';
-import { GET_ORDER, GET_ORDERS_LIST } from '../../../admin-ui/src/app/data/definitions/order-definitions';
-
 import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import { ORDER_FRAGMENT, ORDER_WITH_LINES_FRAGMENT } from './graphql/fragments';
+import { GetCustomerList, GetOrder, GetOrderList } from './graphql/generated-e2e-admin-types';
+import { GET_CUSTOMER_LIST } from './graphql/shared-definitions';
+import { ADD_ITEM_TO_ORDER } from './graphql/shop-definitions';
 import { TestAdminClient, TestShopClient } from './test-client';
 import { TestServer } from './test-server';
 
@@ -61,10 +61,23 @@ describe('Orders resolver', () => {
     });
 });
 
-const ADD_ITEM_TO_ORDER = gql`
-    mutation AddItemToOrder($productVariantId: ID!, $quantity: Int!) {
-        addItemToOrder(productVariantId: $productVariantId, quantity: $quantity) {
-            id
+export const GET_ORDERS_LIST = gql`
+    query GetOrderList($options: OrderListOptions) {
+        orders(options: $options) {
+            items {
+                ...Order
+            }
+            totalItems
+        }
+    }
+    ${ORDER_FRAGMENT}
+`;
+
+export const GET_ORDER = gql`
+    query GetOrder($id: ID!) {
+        order(id: $id) {
+            ...OrderWithLines
         }
     }
+    ${ORDER_WITH_LINES_FRAGMENT}
 `;

+ 67 - 32
packages/core/e2e/product.e2e-spec.ts

@@ -1,35 +1,23 @@
-import {
-    AddOptionGroupToProduct,
-    CreateProduct,
-    DeletionResult,
-    GenerateProductVariants,
-    GetAssetList,
-    GetProductList,
-    GetProductWithVariants,
-    LanguageCode,
-    ProductWithVariants,
-    RemoveOptionGroupFromProduct,
-    SortOrder,
-    UpdateProduct,
-    UpdateProductVariants,
-} from '@vendure/common/lib/generated-types';
 import { omit } from '@vendure/common/lib/omit';
 import gql from 'graphql-tag';
 import path from 'path';
 
+import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import { PRODUCT_WITH_VARIANTS_FRAGMENT } from './graphql/fragments';
+import { DeletionResult, GetProductWithVariants, LanguageCode, SortOrder, GetProductList, ProductWithVariants, CreateProduct, GetAssetList,
+    UpdateProduct,
+    AddOptionGroupToProduct,
+    RemoveOptionGroupFromProduct,
+    GenerateProductVariants,
+    UpdateProductVariants} from './graphql/generated-e2e-admin-types';
 import {
-    ADD_OPTION_GROUP_TO_PRODUCT,
     CREATE_PRODUCT,
-    GENERATE_PRODUCT_VARIANTS,
     GET_ASSET_LIST,
     GET_PRODUCT_LIST,
     GET_PRODUCT_WITH_VARIANTS,
-    REMOVE_OPTION_GROUP_FROM_PRODUCT,
     UPDATE_PRODUCT,
     UPDATE_PRODUCT_VARIANTS,
-} from '../../../admin-ui/src/app/data/definitions/product-definitions';
-
-import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+} from './graphql/shared-definitions';
 import { TestAdminClient } from './test-client';
 import { TestServer } from './test-server';
 import { assertThrowsWithMessage } from './utils/assert-throws-with-message';
@@ -119,22 +107,18 @@ describe('Product resolver', () => {
 
     describe('product query', () => {
         it('returns expected properties', async () => {
-            const { product } = await client.query<GetProductWithVariants.Query, GetProductWithVariants.Variables>(
-                GET_PRODUCT_WITH_VARIANTS,
-                {
-                    languageCode: LanguageCode.en,
-                    id: 'T_2',
-                },
-            );
+            const { product } = await client.query<
+                GetProductWithVariants.Query,
+                GetProductWithVariants.Variables
+            >(GET_PRODUCT_WITH_VARIANTS, {
+                languageCode: LanguageCode.en,
+                id: 'T_2',
+            });
 
             if (!product) {
                 fail('Product not found');
                 return;
             }
-            // override the non-deterministic date fields
-            [product.featuredAsset, ...product.assets].forEach(asset => {
-                asset!.createdAt = '<date>';
-            });
             expect(omit(product, ['variants'])).toMatchSnapshot();
             expect(product.variants.length).toBe(2);
         });
@@ -691,3 +675,54 @@ const DELETE_PRODUCT = gql`
         }
     }
 `;
+
+export const ADD_OPTION_GROUP_TO_PRODUCT = gql`
+    mutation AddOptionGroupToProduct($productId: ID!, $optionGroupId: ID!) {
+        addOptionGroupToProduct(productId: $productId, optionGroupId: $optionGroupId) {
+            id
+            optionGroups {
+                id
+                code
+                options {
+                    id
+                    code
+                }
+            }
+        }
+    }
+`;
+
+export const REMOVE_OPTION_GROUP_FROM_PRODUCT = gql`
+    mutation RemoveOptionGroupFromProduct($productId: ID!, $optionGroupId: ID!) {
+        removeOptionGroupFromProduct(productId: $productId, optionGroupId: $optionGroupId) {
+            id
+            optionGroups {
+                id
+                code
+                options {
+                    id
+                    code
+                }
+            }
+        }
+    }
+`;
+
+export const GENERATE_PRODUCT_VARIANTS = gql`
+    mutation GenerateProductVariants(
+        $productId: ID!
+        $defaultTaxCategoryId: ID
+        $defaultPrice: Int
+        $defaultSku: String
+    ) {
+        generateVariantsForProduct(
+            productId: $productId
+            defaultTaxCategoryId: $defaultTaxCategoryId
+            defaultPrice: $defaultPrice
+            defaultSku: $defaultSku
+        ) {
+            ...ProductWithVariants
+        }
+    }
+    ${PRODUCT_WITH_VARIANTS_FRAGMENT}
+`;

+ 63 - 16
packages/core/e2e/promotion.e2e-spec.ts

@@ -1,3 +1,12 @@
+import { pick } from '@vendure/common/lib/pick';
+import gql from 'graphql-tag';
+import path from 'path';
+
+import { PromotionAction, PromotionOrderAction } from '../src/config/promotion/promotion-action';
+import { PromotionCondition } from '../src/config/promotion/promotion-condition';
+
+import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import { CONFIGURABLE_FRAGMENT, PROMOTION_FRAGMENT } from './graphql/fragments';
 import {
     ConfigArgType,
     CreatePromotion,
@@ -7,22 +16,7 @@ import {
     GetPromotionList,
     Promotion,
     UpdatePromotion,
-} from '@vendure/common/lib/generated-types';
-import { pick } from '@vendure/common/lib/pick';
-import gql from 'graphql-tag';
-import path from 'path';
-
-import {
-    CREATE_PROMOTION,
-    GET_ADJUSTMENT_OPERATIONS,
-    GET_PROMOTION,
-    GET_PROMOTION_LIST,
-    UPDATE_PROMOTION,
-} from '../../../admin-ui/src/app/data/definitions/promotion-definitions';
-import { PromotionAction, PromotionOrderAction } from '../src/config/promotion/promotion-action';
-import { PromotionCondition } from '../src/config/promotion/promotion-condition';
-
-import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+} from './graphql/generated-e2e-admin-types';
 import { TestAdminClient } from './test-client';
 import { TestServer } from './test-server';
 import { assertThrowsWithMessage } from './utils/assert-throws-with-message';
@@ -217,3 +211,56 @@ const DELETE_PROMOTION = gql`
         }
     }
 `;
+
+export const GET_PROMOTION_LIST = gql`
+    query GetPromotionList($options: PromotionListOptions) {
+        promotions(options: $options) {
+            items {
+                ...Promotion
+            }
+            totalItems
+        }
+    }
+    ${PROMOTION_FRAGMENT}
+`;
+
+export const GET_PROMOTION = gql`
+    query GetPromotion($id: ID!) {
+        promotion(id: $id) {
+            ...Promotion
+        }
+    }
+    ${PROMOTION_FRAGMENT}
+`;
+
+export const CREATE_PROMOTION = gql`
+    mutation CreatePromotion($input: CreatePromotionInput!) {
+        createPromotion(input: $input) {
+            ...Promotion
+        }
+    }
+    ${PROMOTION_FRAGMENT}
+`;
+
+export const UPDATE_PROMOTION = gql`
+    mutation UpdatePromotion($input: UpdatePromotionInput!) {
+        updatePromotion(input: $input) {
+            ...Promotion
+        }
+    }
+    ${PROMOTION_FRAGMENT}
+`;
+
+export const GET_ADJUSTMENT_OPERATIONS = gql`
+    query GetAdjustmentOperations {
+        adjustmentOperations {
+            actions {
+                ...ConfigurableOperation
+            }
+            conditions {
+                ...ConfigurableOperation
+            }
+        }
+    }
+    ${CONFIGURABLE_FRAGMENT}
+`;

+ 34 - 3
packages/core/e2e/role.e2e-spec.ts

@@ -1,11 +1,12 @@
-import { CreateRole, GetRole, GetRoles, Permission, Role, UpdateRole } from '@vendure/common/lib/generated-types';
 import { omit } from '@vendure/common/lib/omit';
 import { CUSTOMER_ROLE_CODE, SUPER_ADMIN_ROLE_CODE } from '@vendure/common/lib/shared-constants';
+import gql from 'graphql-tag';
 import path from 'path';
 
-import { CREATE_ROLE, GET_ROLE, GET_ROLES, UPDATE_ROLE } from '../../../admin-ui/src/app/data/definitions/administrator-definitions';
-
 import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import { ROLE_FRAGMENT } from './graphql/fragments';
+import { CreateRole, GetRole, GetRoles, Permission, Role, UpdateRole } from './graphql/generated-e2e-admin-types';
+import { CREATE_ROLE } from './graphql/shared-definitions';
 import { TestAdminClient } from './test-client';
 import { TestServer } from './test-server';
 import { assertThrowsWithMessage } from './utils/assert-throws-with-message';
@@ -122,3 +123,33 @@ describe('Role resolver', () => {
         }, `The role '${CUSTOMER_ROLE_CODE}' cannot be modified`),
     );
 });
+
+export const GET_ROLES = gql`
+    query GetRoles($options: RoleListOptions) {
+        roles(options: $options) {
+            items {
+                ...Role
+            }
+            totalItems
+        }
+    }
+    ${ROLE_FRAGMENT}
+`;
+
+export const GET_ROLE = gql`
+    query GetRole($id: ID!) {
+        role(id: $id) {
+            ...Role
+        }
+    }
+    ${ROLE_FRAGMENT}
+`;
+
+export const UPDATE_ROLE = gql`
+    mutation UpdateRole($input: UpdateRoleInput!) {
+        updateRole(input: $input) {
+            ...Role
+        }
+    }
+    ${ROLE_FRAGMENT}
+`;

+ 13 - 65
packages/core/e2e/shop-auth.e2e-spec.ts

@@ -1,13 +1,10 @@
 /* tslint:disable:no-non-null-assertion */
 import { RegisterCustomerInput } from '@vendure/common/lib/generated-shop-types';
-import { CreateAdministrator, CreateRole, GetCustomer, Permission } from '@vendure/common/lib/generated-types';
 import { pick } from '@vendure/common/lib/pick';
 import { DocumentNode } from 'graphql';
 import gql from 'graphql-tag';
 import path from 'path';
 
-import { CREATE_ADMINISTRATOR, CREATE_ROLE } from '../../../admin-ui/src/app/data/definitions/administrator-definitions';
-import { GET_CUSTOMER } from '../../../admin-ui/src/app/data/definitions/customer-definitions';
 import { InjectorFn, VendurePlugin } from '../src/config/vendure-plugin/vendure-plugin';
 import { EventBus } from '../src/event-bus/event-bus';
 import { AccountRegistrationEvent } from '../src/event-bus/events/account-registration-event';
@@ -16,6 +13,18 @@ import { IdentifierChangeRequestEvent } from '../src/event-bus/events/identifier
 import { PasswordResetEvent } from '../src/event-bus/events/password-reset-event';
 
 import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import { CreateAdministrator, CreateRole, GetCustomer, Permission } from './graphql/generated-e2e-admin-types';
+import { CREATE_ADMINISTRATOR, CREATE_ROLE, GET_CUSTOMER } from './graphql/shared-definitions';
+import {
+    GET_ACTIVE_CUSTOMER,
+    REFRESH_TOKEN,
+    REGISTER_ACCOUNT,
+    REQUEST_PASSWORD_RESET,
+    REQUEST_UPDATE_EMAIL_ADDRESS,
+    RESET_PASSWORD,
+    UPDATE_EMAIL_ADDRESS,
+    VERIFY_EMAIL,
+} from './graphql/shop-definitions';
 import { TestAdminClient, TestShopClient } from './test-client';
 import { TestServer } from './test-server';
 import { assertThrowsWithMessage } from './utils/assert-throws-with-message';
@@ -581,7 +590,7 @@ describe('Registration without email verification', () => {
 
         const result = await shopClient.query(
             gql`
-                query {
+                query GetMe{
                     me {
                         identifier
                     }
@@ -690,64 +699,3 @@ function getEmailUpdateTokenPromise(): Promise<{ identifierChangeToken: string |
         });
     });
 }
-
-const REGISTER_ACCOUNT = gql`
-    mutation Register($input: RegisterCustomerInput!) {
-        registerCustomerAccount(input: $input)
-    }
-`;
-
-const VERIFY_EMAIL = gql`
-    mutation Verify($password: String!, $token: String!) {
-        verifyCustomerAccount(password: $password, token: $token) {
-            user {
-                id
-                identifier
-            }
-        }
-    }
-`;
-
-const REFRESH_TOKEN = gql`
-    mutation RefreshToken($emailAddress: String!) {
-        refreshCustomerVerification(emailAddress: $emailAddress)
-    }
-`;
-
-const REQUEST_PASSWORD_RESET = gql`
-    mutation RequestPasswordReset($identifier: String!) {
-        requestPasswordReset(emailAddress: $identifier)
-    }
-`;
-
-const RESET_PASSWORD = gql`
-    mutation ResetPassword($token: String!, $password: String!) {
-        resetPassword(token: $token, password: $password) {
-            user {
-                id
-                identifier
-            }
-        }
-    }
-`;
-
-const REQUEST_UPDATE_EMAIL_ADDRESS = gql`
-    mutation RequestUpdateEmailAddress($password: String! $newEmailAddress: String!) {
-        requestUpdateCustomerEmailAddress(password: $password, newEmailAddress: $newEmailAddress)
-    }
-`;
-
-const UPDATE_EMAIL_ADDRESS = gql`
-    mutation UpdateEmailAddress($token: String!) {
-        updateCustomerEmailAddress(token: $token)
-    }
-`;
-
-const GET_ACTIVE_CUSTOMER = gql`
-    query {
-        activeCustomer {
-            id
-            emailAddress
-        }
-    }
-`;

+ 147 - 118
packages/core/e2e/shop-catalog.e2e-spec.ts

@@ -2,14 +2,31 @@
 import gql from 'graphql-tag';
 import path from 'path';
 
-import { CREATE_COLLECTION, UPDATE_COLLECTION } from '../../../admin-ui/src/app/data/definitions/collection-definitions';
-import { CREATE_FACET } from '../../../admin-ui/src/app/data/definitions/facet-definitions';
-import { GET_PRODUCT_WITH_VARIANTS, UPDATE_PRODUCT, UPDATE_PRODUCT_VARIANTS } from '../../../admin-ui/src/app/data/definitions/product-definitions';
-import { ConfigArgType, CreateCollection, FacetWithValues, UpdateCollection } from '../../common/lib/generated-types';
-import { CreateFacet, GetProductWithVariants, LanguageCode, UpdateProduct, UpdateProductVariants } from '../../common/src/generated-types';
 import { facetValueCollectionFilter } from '../src/config/collection/default-collection-filters';
 
 import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import {
+    ConfigArgType,
+    CreateCollection,
+    CreateFacet,
+    DisableProduct,
+    FacetWithValues,
+    GetFacetList,
+    GetProductWithVariants,
+    LanguageCode,
+    UpdateCollection,
+    UpdateProduct,
+    UpdateProductVariants,
+} from './graphql/generated-e2e-admin-types';
+import {
+    CREATE_COLLECTION,
+    CREATE_FACET,
+    GET_FACET_LIST,
+    GET_PRODUCT_WITH_VARIANTS,
+    UPDATE_COLLECTION,
+    UPDATE_PRODUCT,
+    UPDATE_PRODUCT_VARIANTS,
+} from './graphql/shared-definitions';
 import { TestAdminClient, TestShopClient } from './test-client';
 import { TestServer } from './test-server';
 
@@ -32,79 +49,96 @@ describe('Shop catalog', () => {
     });
 
     describe('products', () => {
-
         beforeAll(async () => {
             // disable the first product
-            await adminClient.query(DISABLE_PRODUCT, { id: 'T_1' });
+            await adminClient.query<DisableProduct.Mutation, DisableProduct.Variables>(DISABLE_PRODUCT, {
+                id: 'T_1',
+            });
 
-            const monitorProduct = await adminClient
-                .query<GetProductWithVariants.Query, GetProductWithVariants.Variables>(GET_PRODUCT_WITH_VARIANTS, {
-                    id: 'T_2',
-                });
+            const monitorProduct = await adminClient.query<
+                GetProductWithVariants.Query,
+                GetProductWithVariants.Variables
+            >(GET_PRODUCT_WITH_VARIANTS, {
+                id: 'T_2',
+            });
             if (monitorProduct.product) {
-                await adminClient.query<UpdateProductVariants.Mutation, UpdateProductVariants.Variables>(UPDATE_PRODUCT_VARIANTS, {
-                    input: [
-                        {
-                            id: monitorProduct.product.variants[0].id,
-                            enabled: false,
-                        },
-                    ],
-                });
+                await adminClient.query<UpdateProductVariants.Mutation, UpdateProductVariants.Variables>(
+                    UPDATE_PRODUCT_VARIANTS,
+                    {
+                        input: [
+                            {
+                                id: monitorProduct.product.variants[0].id,
+                                enabled: false,
+                            },
+                        ],
+                    },
+                );
             }
         });
 
         it('products list omits disabled products', async () => {
-            const result = await shopClient.query(gql`{
-                products(options: { take: 3 }) {
-                    items { id }
+            const result = await shopClient.query(gql`
+                query GetProductsTake3 {
+                    products(options: { take: 3 }) {
+                        items {
+                            id
+                        }
+                    }
                 }
-            }`);
+            `);
 
-            expect(result.products.items.map((item: any) => item.id)).toEqual([ 'T_2', 'T_3', 'T_4']);
+            expect(result.products.items.map((item: any) => item.id)).toEqual(['T_2', 'T_3', 'T_4']);
         });
 
         it('product returns null for disabled product', async () => {
-            const result = await shopClient.query(gql`{
-                product(id: "T_1") { id }
-            }`);
+            const result = await shopClient.query(gql`
+                query GetProduct1 {
+                    product(id: "T_1") {
+                        id
+                    }
+                }
+            `);
 
             expect(result.product).toBeNull();
         });
 
         it('omits disabled variants from product response', async () => {
-            const result = await shopClient.query(gql`{
-                product(id: "T_2") {
-                    id
-                    variants {
+            const result = await shopClient.query(gql`
+                query GetProduct2Variants {
+                    product(id: "T_2") {
                         id
-                        name
+                        variants {
+                            id
+                            name
+                        }
                     }
                 }
-            }`);
+            `);
 
-            expect(result.product.variants).toEqual([
-                { id: 'T_6', name: 'Curvy Monitor 27 inch'},
-            ]);
+            expect(result.product.variants).toEqual([{ id: 'T_6', name: 'Curvy Monitor 27 inch' }]);
         });
-
     });
 
     describe('facets', () => {
         let facetValue: FacetWithValues.Values;
 
         beforeAll(async () => {
-            const result = await adminClient.query<CreateFacet.Mutation, CreateFacet.Variables>(CREATE_FACET, {
-                input: {
-                    code: 'profit-margin',
-                    isPrivate: true,
-                    translations: [
-                        { languageCode: LanguageCode.en, name: 'Profit Margin' },
-                    ],
-                    values: [
-                        { code: 'massive', translations: [{ languageCode: LanguageCode.en, name: 'massive' }] },
-                    ],
+            const result = await adminClient.query<CreateFacet.Mutation, CreateFacet.Variables>(
+                CREATE_FACET,
+                {
+                    input: {
+                        code: 'profit-margin',
+                        isPrivate: true,
+                        translations: [{ languageCode: LanguageCode.en, name: 'Profit Margin' }],
+                        values: [
+                            {
+                                code: 'massive',
+                                translations: [{ languageCode: LanguageCode.en, name: 'massive' }],
+                            },
+                        ],
+                    },
                 },
-            });
+            );
             facetValue = result.createFacet.values[0];
 
             await adminClient.query<UpdateProduct.Mutation, UpdateProduct.Variables>(UPDATE_PRODUCT, {
@@ -114,12 +148,17 @@ describe('Shop catalog', () => {
                 },
             });
 
-            await adminClient.query<UpdateProductVariants.Mutation, UpdateProductVariants.Variables>(UPDATE_PRODUCT_VARIANTS, {
-                input: [{
-                    id: 'T_6',
-                    facetValueIds: [facetValue.id],
-                }],
-            });
+            await adminClient.query<UpdateProductVariants.Mutation, UpdateProductVariants.Variables>(
+                UPDATE_PRODUCT_VARIANTS,
+                {
+                    input: [
+                        {
+                            id: 'T_6',
+                            facetValueIds: [facetValue.id],
+                        },
+                    ],
+                },
+            );
         });
 
         it('omits private Product.facetValues', async () => {
@@ -140,44 +179,31 @@ describe('Shop catalog', () => {
     });
 
     describe('collections', () => {
-
         let collection: CreateCollection.CreateCollection;
 
         beforeAll(async () => {
-            const result = await adminClient.query(gql`{
-                facets {
-                    items {
-                        id
-                        name
-                        values {
-                            id
-                        }
-                    }
-                }
-            }`);
+            const result = await adminClient.query<GetFacetList.Query>(GET_FACET_LIST);
             const category = result.facets.items[0];
-            const { createCollection } = await adminClient.query<CreateCollection.Mutation, CreateCollection.Variables>(
-                CREATE_COLLECTION,
-                {
-                    input: {
-                        filters: [
-                            {
-                                code: facetValueCollectionFilter.code,
-                                arguments: [
-                                    {
-                                        name: 'facetValueIds',
-                                        value: `["${category.values[3].id}"]`,
-                                        type: ConfigArgType.FACET_VALUE_IDS,
-                                    },
-                                ],
-                            },
-                        ],
-                        translations: [
-                            { languageCode: LanguageCode.en, name: 'My Collection', description: '' },
-                        ],
-                    },
+            const { createCollection } = await adminClient.query<
+                CreateCollection.Mutation,
+                CreateCollection.Variables
+            >(CREATE_COLLECTION, {
+                input: {
+                    filters: [
+                        {
+                            code: facetValueCollectionFilter.code,
+                            arguments: [
+                                {
+                                    name: 'facetValueIds',
+                                    value: `["${category.values[3].id}"]`,
+                                    type: ConfigArgType.FACET_VALUE_IDS,
+                                },
+                            ],
+                        },
+                    ],
+                    translations: [{ languageCode: LanguageCode.en, name: 'My Collection', description: '' }],
                 },
-            );
+            });
             collection = createCollection;
         });
 
@@ -212,11 +238,12 @@ describe('Shop catalog', () => {
         });
 
         it('omits variants from disabled products', async () => {
-            await adminClient.query<UpdateProductVariants.Mutation, UpdateProductVariants.Variables>(UPDATE_PRODUCT_VARIANTS, {
-                input: [
-                    { id: 'T_22', enabled: false },
-                ],
-            });
+            await adminClient.query<UpdateProductVariants.Mutation, UpdateProductVariants.Variables>(
+                UPDATE_PRODUCT_VARIANTS,
+                {
+                    input: [{ id: 'T_22', enabled: false }],
+                },
+            );
 
             const result = await shopClient.query(GET_COLLECTION_VARIANTS, { id: collection.id });
             expect(result.collection.productVariants.items).toEqual([
@@ -238,17 +265,18 @@ describe('Shop catalog', () => {
         });
 
         it('omits private collections', async () => {
-            await adminClient.query<UpdateCollection.Mutation, UpdateCollection.Variables>(UPDATE_COLLECTION, {
-                input: {
-                    id: collection.id,
-                    isPrivate: true,
+            await adminClient.query<UpdateCollection.Mutation, UpdateCollection.Variables>(
+                UPDATE_COLLECTION,
+                {
+                    input: {
+                        id: collection.id,
+                        isPrivate: true,
+                    },
                 },
-            });
+            );
             const result = await shopClient.query(GET_COLLECTION_LIST);
 
-            expect(result.collections.items).toEqual([
-                { id: 'T_2', name: 'Plants' },
-            ]);
+            expect(result.collections.items).toEqual([{ id: 'T_2', name: 'Plants' }]);
         });
 
         it('returns null for private collection', async () => {
@@ -258,14 +286,16 @@ describe('Shop catalog', () => {
         });
 
         it('product.collections list omits private collections', async () => {
-            const result = await shopClient.query(gql`{
-                product(id: "T_12") {
-                    collections {
-                        id
-                        name
+            const result = await shopClient.query(gql`
+                query GetProductCollection {
+                    product(id: "T_12") {
+                        collections {
+                            id
+                            name
+                        }
                     }
                 }
-            }`);
+            `);
 
             expect(result.product.collections).toEqual([]);
         });
@@ -274,10 +304,7 @@ describe('Shop catalog', () => {
 
 const DISABLE_PRODUCT = gql`
     mutation DisableProduct($id: ID!) {
-        updateProduct(input: {
-            id: $id
-            enabled: false
-        }) {
+        updateProduct(input: { id: $id, enabled: false }) {
             id
         }
     }
@@ -296,17 +323,19 @@ const GET_COLLECTION_VARIANTS = gql`
     }
 `;
 
-const GET_COLLECTION_LIST = gql`{
-    collections {
-        items {
-            id
-            name
+const GET_COLLECTION_LIST = gql`
+    query GetCollectionList {
+        collections {
+            items {
+                id
+                name
+            }
         }
     }
-}`;
+`;
 
 const GET_PRODUCT_FACET_VALUES = gql`
-    query ($id: ID!){
+    query GetProductFacetValues($id: ID!) {
         product(id: $id) {
             id
             name
@@ -318,7 +347,7 @@ const GET_PRODUCT_FACET_VALUES = gql`
 `;
 
 const GET_PRODUCT_VARIANT_FACET_VALUES = gql`
-    query ($id: ID!){
+    query GetVariantFacetValues($id: ID!) {
         product(id: $id) {
             id
             name

+ 5 - 50
packages/core/e2e/shop-customer.e2e-spec.ts

@@ -1,13 +1,12 @@
 /* tslint:disable:no-non-null-assertion */
-import { CreateAddressInput, UpdateAddressInput, UpdateCustomerInput } from '@vendure/common/lib/generated-shop-types';
-import { AttemptLogin, GetCustomer } from '@vendure/common/lib/generated-types';
 import gql from 'graphql-tag';
 import path from 'path';
 
-import { ATTEMPT_LOGIN } from '../../../admin-ui/src/app/data/definitions/auth-definitions';
-import { CUSTOMER_FRAGMENT, GET_CUSTOMER } from '../../../admin-ui/src/app/data/definitions/customer-definitions';
-
 import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import { AttemptLogin, GetCustomer } from './graphql/generated-e2e-admin-types';
+import { CreateAddressInput, UpdateAddressInput, UpdateCustomerInput } from './graphql/generated-e2e-shop-types';
+import { ATTEMPT_LOGIN, GET_CUSTOMER } from './graphql/shared-definitions';
+import { CREATE_ADDRESS, DELETE_ADDRESS, UPDATE_ADDRESS, UPDATE_CUSTOMER, UPDATE_PASSWORD } from './graphql/shop-definitions';
 import { TestAdminClient, TestShopClient } from './test-client';
 import { TestServer } from './test-server';
 import { assertThrowsWithMessage } from './utils/assert-throws-with-message';
@@ -28,7 +27,7 @@ describe('Shop customers', () => {
 
         // Fetch the first Customer and store it as the `customer` variable.
         const { customers } = await adminClient.query(gql`
-            query {
+            query GetCustomerIds {
                 customers {
                     items {
                         id
@@ -176,47 +175,3 @@ describe('Shop customers', () => {
         });
     });
 });
-
-const CREATE_ADDRESS = gql`
-    mutation CreateAddress($input: CreateAddressInput!) {
-        createCustomerAddress(input: $input) {
-            id
-            streetLine1
-            country {
-                code
-            }
-        }
-    }
-`;
-
-const UPDATE_ADDRESS = gql`
-    mutation UpdateAddress($input: UpdateAddressInput!) {
-        updateCustomerAddress(input: $input) {
-            streetLine1
-            country {
-                code
-            }
-        }
-    }
-`;
-
-const DELETE_ADDRESS = gql`
-    mutation DeleteAddress($id: ID!) {
-        deleteCustomerAddress(id: $id)
-    }
-`;
-
-const UPDATE_CUSTOMER = gql`
-    mutation UpdateCustomer($input: UpdateCustomerInput!) {
-        updateCustomer(input: $input) {
-            ...Customer
-        }
-    }
-    ${CUSTOMER_FRAGMENT}
-`;
-
-const UPDATE_PASSWORD = gql`
-    mutation UpdatePassword($old: String!, $new: String!) {
-        updateCustomerPassword(currentPassword: $old, newPassword: $new)
-    }
-`;

+ 20 - 185
packages/core/e2e/shop-order.e2e-spec.ts

@@ -1,13 +1,28 @@
 /* tslint:disable:no-non-null-assertion */
-import { CreateAddressInput, GetCountryList, GetCustomer, GetCustomerList, UpdateCountry } from '@vendure/common/lib/generated-types';
 import gql from 'graphql-tag';
 import path from 'path';
 
-import { GET_CUSTOMER, GET_CUSTOMER_LIST } from '../../../admin-ui/src/app/data/definitions/customer-definitions';
-import { GET_COUNTRY_LIST, UPDATE_COUNTRY } from '../../../admin-ui/src/app/data/definitions/settings-definitions';
 import { PaymentMethodHandler } from '../src/config/payment-method/payment-method-handler';
 
 import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import { CreateAddressInput, GetCountryList, GetCustomer, GetCustomerList, UpdateCountry } from './graphql/generated-e2e-admin-types';
+import { GET_COUNTRY_LIST, GET_CUSTOMER, GET_CUSTOMER_LIST, UPDATE_COUNTRY } from './graphql/shared-definitions';
+import {
+    ADD_ITEM_TO_ORDER,
+    ADD_PAYMENT,
+    ADJUST_ITEM_QUENTITY,
+    GET_ACTIVE_ORDER,
+    GET_ACTIVE_ORDER_ADDRESSES,
+    GET_AVAILABLE_COUNTRIES,
+    GET_ELIGIBLE_SHIPPING_METHODS,
+    GET_NEXT_STATES,
+    GET_ORDER_BY_CODE,
+    REMOVE_ITEM_FROM_ORDER,
+    SET_CUSTOMER,
+    SET_SHIPPING_ADDRESS,
+    SET_SHIPPING_METHOD,
+    TRANSITION_TO_STATE,
+} from './graphql/shop-definitions';
 import { TestAdminClient, TestShopClient } from './test-client';
 import { TestServer } from './test-server';
 import { assertThrowsWithMessage } from './utils/assert-throws-with-message';
@@ -203,11 +218,7 @@ describe('Shop orders', () => {
         );
 
         it('nextOrderStates returns next valid states', async () => {
-            const result = await shopClient.query(gql`
-                query {
-                    nextOrderStates
-                }
-            `);
+            const result = await shopClient.query(GET_NEXT_STATES);
 
             expect(result.nextOrderStates).toEqual(['ArrangingPayment']);
         });
@@ -290,17 +301,7 @@ describe('Shop orders', () => {
         });
 
         it('customer default Addresses are not updated before payment', async () => {
-            const result = await shopClient.query(gql`
-                query {
-                    activeOrder {
-                        customer {
-                            addresses {
-                                id
-                            }
-                        }
-                    }
-                }
-            `);
+            const result = await shopClient.query(GET_ACTIVE_ORDER_ADDRESSES);
 
             expect(result.activeOrder.customer.addresses).toEqual([]);
         });
@@ -710,169 +711,3 @@ const testFailingPaymentMethod = new PaymentMethodHandler({
         };
     },
 });
-
-const TEST_ORDER_FRAGMENT = gql`
-    fragment TestOrderFragment on Order {
-        id
-        code
-        state
-        active
-        lines {
-            id
-            quantity
-            productVariant {
-                id
-            }
-        }
-        shipping
-        shippingMethod {
-            id
-            code
-            description
-        }
-        customer {
-            id
-        }
-    }
-`;
-
-const GET_ACTIVE_ORDER = gql`
-    query {
-        activeOrder {
-            ...TestOrderFragment
-        }
-    }
-    ${TEST_ORDER_FRAGMENT}
-`;
-
-const ADD_ITEM_TO_ORDER = gql`
-    mutation AddItemToOrder($productVariantId: ID!, $quantity: Int!) {
-        addItemToOrder(productVariantId: $productVariantId, quantity: $quantity) {
-            ...TestOrderFragment
-        }
-    }
-    ${TEST_ORDER_FRAGMENT}
-`;
-
-const ADJUST_ITEM_QUENTITY = gql`
-    mutation AdjustItemQuantity($orderItemId: ID!, $quantity: Int!) {
-        adjustItemQuantity(orderItemId: $orderItemId, quantity: $quantity) {
-            ...TestOrderFragment
-        }
-    }
-    ${TEST_ORDER_FRAGMENT}
-`;
-
-const REMOVE_ITEM_FROM_ORDER = gql`
-    mutation RemoveItemFromOrder($orderItemId: ID!) {
-        removeItemFromOrder(orderItemId: $orderItemId) {
-            ...TestOrderFragment
-        }
-    }
-    ${TEST_ORDER_FRAGMENT}
-`;
-
-const GET_NEXT_STATES = gql`
-    query {
-        nextOrderStates
-    }
-`;
-
-const TRANSITION_TO_STATE = gql`
-    mutation TransitionToState($state: String!) {
-        transitionOrderToState(state: $state) {
-            id
-            state
-        }
-    }
-`;
-
-const GET_ELIGIBLE_SHIPPING_METHODS = gql`
-    query {
-        eligibleShippingMethods {
-            id
-            price
-            description
-        }
-    }
-`;
-
-const SET_SHIPPING_ADDRESS = gql`
-    mutation SetShippingAddress($input: CreateAddressInput!) {
-        setOrderShippingAddress(input: $input) {
-            shippingAddress {
-                fullName
-                company
-                streetLine1
-                streetLine2
-                city
-                province
-                postalCode
-                country
-                phoneNumber
-            }
-        }
-    }
-`;
-
-const SET_SHIPPING_METHOD = gql`
-    mutation SetShippingMethod($id: ID!) {
-        setOrderShippingMethod(shippingMethodId: $id) {
-            shipping
-            shippingMethod {
-                id
-                code
-                description
-            }
-        }
-    }
-`;
-
-const ADD_PAYMENT = gql`
-    mutation AddPaymentToOrder($input: PaymentInput!) {
-        addPaymentToOrder(input: $input) {
-            ...TestOrderFragment
-            payments {
-                id
-                transactionId
-                method
-                amount
-                state
-                metadata
-            }
-        }
-    }
-    ${TEST_ORDER_FRAGMENT}
-`;
-
-const SET_CUSTOMER = gql`
-    mutation SetCustomerForOrder($input: CreateCustomerInput!) {
-        setCustomerForOrder(input: $input) {
-            id
-            customer {
-                id
-                emailAddress
-                firstName
-                lastName
-            }
-        }
-    }
-`;
-
-const GET_ORDER_BY_CODE = gql`
-    query GetOrderByCode($code: String!) {
-        orderByCode(code: $code) {
-            ...TestOrderFragment
-        }
-    }
-    ${TEST_ORDER_FRAGMENT}
-`;
-
-const GET_AVAILABLE_COUNTRIES = gql`
-    query {
-        availableCountries {
-            id
-            code
-        }
-    }
-`;

+ 34 - 70
packages/core/e2e/stock-control.e2e-spec.ts

@@ -1,12 +1,23 @@
 import gql from 'graphql-tag';
 import path from 'path';
 
-import { PaymentInput } from '../../common/src/generated-shop-types';
-import { CreateAddressInput, ProductVariant, StockMovementType, UpdateProductVariantInput } from '../../common/src/generated-types';
 import { PaymentMethodHandler } from '../src/config/payment-method/payment-method-handler';
 import { OrderState } from '../src/service/helpers/order-state-machine/order-state';
 
 import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import {
+    CreateAddressInput,
+    ProductVariant,
+    StockMovementType,
+    UpdateProductVariantInput,
+} from './graphql/generated-e2e-admin-types';
+import { AddItemToOrder, PaymentInput } from './graphql/generated-e2e-shop-types';
+import {
+    ADD_ITEM_TO_ORDER,
+    ADD_PAYMENT,
+    SET_SHIPPING_ADDRESS,
+    TRANSITION_TO_STATE,
+} from './graphql/shop-definitions';
 import { TestAdminClient, TestShopClient } from './test-client';
 import { TestServer } from './test-server';
 import { assertThrowsWithMessage } from './utils/assert-throws-with-message';
@@ -39,7 +50,6 @@ describe('Stock control', () => {
     });
 
     describe('stock adjustments', () => {
-
         let variants: ProductVariant[];
 
         it('stockMovements are initially empty', async () => {
@@ -78,7 +88,9 @@ describe('Stock control', () => {
 
             expect(result.updateProductVariants[0].stockOnHand).toBe(5);
             expect(result.updateProductVariants[0].stockMovements.totalItems).toEqual(1);
-            expect(result.updateProductVariants[0].stockMovements.items[0].type).toBe(StockMovementType.ADJUSTMENT);
+            expect(result.updateProductVariants[0].stockMovements.items[0].type).toBe(
+                StockMovementType.ADJUSTMENT,
+            );
             expect(result.updateProductVariants[0].stockMovements.items[0].quantity).toBe(5);
         });
 
@@ -94,12 +106,15 @@ describe('Stock control', () => {
 
             expect(result.updateProductVariants[0].stockOnHand).toBe(3);
             expect(result.updateProductVariants[0].stockMovements.totalItems).toEqual(2);
-            expect(result.updateProductVariants[0].stockMovements.items[1].type).toBe(StockMovementType.ADJUSTMENT);
+            expect(result.updateProductVariants[0].stockMovements.items[1].type).toBe(
+                StockMovementType.ADJUSTMENT,
+            );
             expect(result.updateProductVariants[0].stockMovements.items[1].quantity).toBe(-2);
         });
 
-        it('attempting to set a negative stockOnHand throws', assertThrowsWithMessage(
-            async () => {
+        it(
+            'attempting to set a negative stockOnHand throws',
+            assertThrowsWithMessage(async () => {
                 const result = await adminClient.query(UPDATE_STOCK_ON_HAND, {
                     input: [
                         {
@@ -108,13 +123,11 @@ describe('Stock control', () => {
                         },
                     ] as UpdateProductVariantInput[],
                 });
-            },
-            'stockOnHand cannot be a negative value'),
+            }, 'stockOnHand cannot be a negative value'),
         );
     });
 
     describe('sales', () => {
-
         beforeAll(async () => {
             const { product } = await adminClient.query(GET_STOCK_MOVEMENT, { id: 'T_2' });
             const [variant1, variant2]: ProductVariant[] = product.variants;
@@ -136,8 +149,14 @@ describe('Stock control', () => {
 
             // Add items to order and check out
             await shopClient.asUserWithCredentials('hayden.zieme12@hotmail.com', 'test');
-            await shopClient.query(ADD_ITEM_TO_ORDER, { productVariantId: variant1.id, quantity: 2 });
-            await shopClient.query(ADD_ITEM_TO_ORDER, { productVariantId: variant2.id, quantity: 3 });
+            await shopClient.query<AddItemToOrder.Mutation, AddItemToOrder.Variables>(ADD_ITEM_TO_ORDER, {
+                productVariantId: variant1.id,
+                quantity: 2,
+            });
+            await shopClient.query<AddItemToOrder.Mutation, AddItemToOrder.Variables>(ADD_ITEM_TO_ORDER, {
+                productVariantId: variant2.id,
+                quantity: 3,
+            });
             await shopClient.query(SET_SHIPPING_ADDRESS, {
                 input: {
                     streetLine1: '1 Test Street',
@@ -174,7 +193,6 @@ describe('Stock control', () => {
             expect(variant2.stockOnHand).toBe(2); // tracked inventory
         });
     });
-
 });
 
 const testPaymentMethod = new PaymentMethodHandler({
@@ -197,7 +215,7 @@ const VARIANT_WITH_STOCK_FRAGMENT = gql`
         stockOnHand
         stockMovements {
             items {
-                ...on StockMovement {
+                ... on StockMovement {
                     id
                     type
                     quantity
@@ -209,7 +227,7 @@ const VARIANT_WITH_STOCK_FRAGMENT = gql`
 `;
 
 const GET_STOCK_MOVEMENT = gql`
-    query ($id: ID!) {
+    query GetStockMovement($id: ID!) {
         product(id: $id) {
             id
             variants {
@@ -221,64 +239,10 @@ const GET_STOCK_MOVEMENT = gql`
 `;
 
 const UPDATE_STOCK_ON_HAND = gql`
-    mutation ($input: [UpdateProductVariantInput!]!) {
+    mutation UpdateStock($input: [UpdateProductVariantInput!]!) {
         updateProductVariants(input: $input) {
             ...VariantWithStock
         }
     }
     ${VARIANT_WITH_STOCK_FRAGMENT}
 `;
-
-const TEST_ORDER_FRAGMENT = gql`
-    fragment TestOrderFragment on Order {
-        id
-        code
-        state
-        active
-        lines {
-            id
-            quantity
-            productVariant {
-                id
-            }
-        }
-    }
-`;
-
-const ADD_ITEM_TO_ORDER = gql`
-    mutation AddItemToOrder($productVariantId: ID!, $quantity: Int!) {
-        addItemToOrder(productVariantId: $productVariantId, quantity: $quantity) {
-            ...TestOrderFragment
-        }
-    }
-    ${TEST_ORDER_FRAGMENT}
-`;
-
-const SET_SHIPPING_ADDRESS = gql`
-    mutation SetShippingAddress($input: CreateAddressInput!) {
-        setOrderShippingAddress(input: $input) {
-            shippingAddress {
-                streetLine1
-            }
-        }
-    }
-`;
-
-const TRANSITION_TO_STATE = gql`
-    mutation TransitionToState($state: String!) {
-        transitionOrderToState(state: $state) {
-            id
-            state
-        }
-    }
-`;
-
-const ADD_PAYMENT = gql`
-    mutation AddPaymentToOrder($input: PaymentInput!) {
-        addPaymentToOrder(input: $input) {
-            payments {
-                id
-            }
-        }
-    }
-`;

+ 52 - 14
packages/core/e2e/zone.e2e-spec.ts

@@ -1,3 +1,8 @@
+import gql from 'graphql-tag';
+import path from 'path';
+
+import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+import { ZONE_FRAGMENT } from './graphql/fragments';
 import {
     AddMembersToZone,
     CreateZone,
@@ -6,20 +11,8 @@ import {
     GetZone,
     RemoveMembersFromZone,
     UpdateZone,
-} from '@vendure/common/lib/generated-types';
-import gql from 'graphql-tag';
-import path from 'path';
-
-import {
-    ADD_MEMBERS_TO_ZONE,
-    CREATE_ZONE,
-    GET_COUNTRY_LIST,
-    GET_ZONE,
-    REMOVE_MEMBERS_FROM_ZONE,
-    UPDATE_ZONE,
-} from '../../../admin-ui/src/app/data/definitions/settings-definitions';
-
-import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
+} from './graphql/generated-e2e-admin-types';
+import { GET_COUNTRY_LIST } from './graphql/shared-definitions';
 import { TestAdminClient } from './test-client';
 import { TestServer } from './test-server';
 
@@ -161,3 +154,48 @@ const GET_ZONE_LIST = gql`
         }
     }
 `;
+
+export const GET_ZONE = gql`
+    query GetZone($id: ID!) {
+        zone(id: $id) {
+            ...Zone
+        }
+    }
+    ${ZONE_FRAGMENT}
+`;
+
+export const CREATE_ZONE = gql`
+    mutation CreateZone($input: CreateZoneInput!) {
+        createZone(input: $input) {
+            ...Zone
+        }
+    }
+    ${ZONE_FRAGMENT}
+`;
+
+export const UPDATE_ZONE = gql`
+    mutation UpdateZone($input: UpdateZoneInput!) {
+        updateZone(input: $input) {
+            ...Zone
+        }
+    }
+    ${ZONE_FRAGMENT}
+`;
+
+export const ADD_MEMBERS_TO_ZONE = gql`
+    mutation AddMembersToZone($zoneId: ID!, $memberIds: [ID!]!) {
+        addMembersToZone(zoneId: $zoneId, memberIds: $memberIds) {
+            ...Zone
+        }
+    }
+    ${ZONE_FRAGMENT}
+`;
+
+export const REMOVE_MEMBERS_FROM_ZONE = gql`
+    mutation RemoveMembersFromZone($zoneId: ID!, $memberIds: [ID!]!) {
+        removeMembersFromZone(zoneId: $zoneId, memberIds: $memberIds) {
+            ...Zone
+        }
+    }
+    ${ZONE_FRAGMENT}
+`;

+ 6 - 8
packages/core/mock-data/mock-data.service.ts

@@ -1,18 +1,16 @@
+import faker from 'faker/locale/en_GB';
+import gql from 'graphql-tag';
+
+import { CREATE_CHANNEL } from '../../../admin-ui/src/app/data/definitions/settings-definitions';
+import { CREATE_SHIPPING_METHOD } from '../../../admin-ui/src/app/data/definitions/shipping-definitions';
 import {
     Channel,
     CreateAddressInput,
-    CreateChannel,
     CreateCustomerInput,
-    CreateShippingMethod,
     CurrencyCode,
     LanguageCode,
     ProductVariant,
-} from '@vendure/common/lib/generated-types';
-import faker from 'faker/locale/en_GB';
-import gql from 'graphql-tag';
-
-import { CREATE_CHANNEL } from '../../../admin-ui/src/app/data/definitions/settings-definitions';
-import { CREATE_SHIPPING_METHOD } from '../../../admin-ui/src/app/data/definitions/shipping-definitions';
+} from '../e2e/graphql/generated-e2e-admin-types';
 import { defaultShippingCalculator } from '../src/config/shipping-method/default-shipping-calculator';
 import { defaultShippingEligibilityChecker } from '../src/config/shipping-method/default-shipping-eligibility-checker';
 import { Customer } from '../src/entity/customer/customer.entity';

+ 2 - 2
packages/core/mock-data/simple-graphql-client.ts

@@ -1,4 +1,3 @@
-import { CreateAssets, ImportInfo } from '@vendure/common/lib/generated-types';
 import { SUPER_ADMIN_USER_IDENTIFIER, SUPER_ADMIN_USER_PASSWORD } from '@vendure/common/lib/shared-constants';
 import { DocumentNode } from 'graphql';
 import { GraphQLClient } from 'graphql-request';
@@ -7,6 +6,7 @@ import { print } from 'graphql/language/printer';
 import { Curl } from 'node-libcurl';
 
 import { CREATE_ASSETS } from '../../../admin-ui/src/app/data/definitions/product-definitions';
+import { ImportInfo } from '../e2e/graphql/generated-e2e-admin-types';
 import { getConfig } from '../src/config/config-helpers';
 
 import { createUploadPostData } from './create-upload-post-data';
@@ -58,7 +58,7 @@ export class SimpleGraphQLClient {
         return result.status;
     }
 
-    uploadAssets(filePaths: string[]): Promise<CreateAssets.Mutation> {
+    uploadAssets(filePaths: string[]): Promise<any> {
         return this.fileUploadMutation({
             mutation: CREATE_ASSETS,
             filePaths,

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
schema-admin.json


+ 36 - 27
scripts/codegen/generate-graphql-types.ts

@@ -9,6 +9,11 @@ import { ADMIN_API_PATH, API_PORT, SHOP_API_PATH } from '../../packages/common/s
 import { downloadIntrospectionSchema } from './download-introspection-schema';
 
 const CLIENT_QUERY_FILES = path.join(__dirname, '../../admin-ui/src/app/data/definitions/**/*.ts');
+const E2E_ADMIN_QUERY_FILES = path.join(__dirname, '../../packages/core/e2e/**/!(plugin.e2e-spec|shop-definitions).ts');
+const E2E_SHOP_QUERY_FILES = [
+    // path.join(__dirname, '../../packages/core/e2e/graphql/fragments.ts'),
+    path.join(__dirname, '../../packages/core/e2e/graphql/shop-definitions.ts'),
+];
 const ADMIN_SCHEMA_OUTPUT_FILE = path.join(__dirname, '../../schema-admin.json');
 const SHOP_SCHEMA_OUTPUT_FILE = path.join(__dirname, '../../schema-shop.json');
 
@@ -28,49 +33,53 @@ Promise.all([
         const adminSchema = buildClientSchema(adminSchemaJson.data);
         const shopSchema = buildClientSchema(shopSchemaJson.data);
 
-        const namingConventionConfig = {
+        const config = {
             namingConvention: {
                 enumValues: 'keep',
             },
+            strict: true,
         };
+        const commonPlugins = [
+            { add: '// tslint:disable' },
+            'time',
+            'typescript',
+        ];
+        const clientPlugins = [
+            ...commonPlugins,
+            'typescript-operations',
+            'typescript-compatibility',
+        ];
+
         return generate({
             overwrite: true,
             generates: {
+                [path.join(__dirname, '../../packages/core/e2e/graphql/generated-e2e-admin-types.ts')]: {
+                    schema: [ADMIN_SCHEMA_OUTPUT_FILE],
+                    documents: E2E_ADMIN_QUERY_FILES,
+                    plugins: clientPlugins,
+                    config,
+                },
+                [path.join(__dirname, '../../packages/core/e2e/graphql/generated-e2e-shop-types.ts')]: {
+                    schema: [SHOP_SCHEMA_OUTPUT_FILE],
+                    documents: E2E_SHOP_QUERY_FILES,
+                    plugins: clientPlugins,
+                    config,
+                },
                 [path.join(__dirname, '../../admin-ui/src/app/common/generated-types.ts')]: {
                     schema: [ADMIN_SCHEMA_OUTPUT_FILE, path.join(__dirname, 'client-schema.ts')],
                     documents: CLIENT_QUERY_FILES,
-                    plugins: [
-                        { add: '// tslint:disable' },
-                        'time',
-                        'typescript',
-                        'typescript-operations',
-                        'typescript-compatibility',
-                    ],
-                    config: {
-                        ...namingConventionConfig,
-                        strict: true,
-                    },
+                    plugins: clientPlugins,
+                    config,
                 },
                 [path.join(__dirname, '../../packages/common/src/generated-types.ts')]: {
                     schema: [ADMIN_SCHEMA_OUTPUT_FILE],
-                    plugins: [
-                        { add: '// tslint:disable' },
-                        'time',
-                        'typescript',
-                    ],
-                    config: {
-                        ...namingConventionConfig,
-                        strict: true,
-                    },
+                    plugins: commonPlugins,
+                    config,
                 },
                 [path.join(__dirname, '../../packages/common/src/generated-shop-types.ts')]: {
                     schema: [SHOP_SCHEMA_OUTPUT_FILE],
-                    plugins: [
-                        { add: '// tslint:disable' },
-                        'time',
-                        'typescript',
-                    ],
-                    config: namingConventionConfig,
+                    plugins: commonPlugins,
+                    config,
                 },
             },
         });

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio