├── assets ├── icon.png ├── splash.png ├── screenshots.png ├── screenshot-home.png ├── screenshot-orders.png ├── screenshot-checkout.png └── appsync-refarch-offline.png ├── src ├── models │ ├── schema.d.ts │ ├── index.js │ ├── index.d.ts │ └── schema.js ├── redux │ ├── store.js │ ├── actions.js │ ├── reducers.js │ └── __tests__ │ │ └── reducers.test.js ├── components │ ├── OrderList │ │ ├── styles.js │ │ └── index.js │ ├── Settings │ │ ├── styles.js │ │ └── index.js │ ├── Catalog │ │ ├── styles.js │ │ └── index.js │ ├── Receipt │ │ ├── styles.js │ │ └── index.js │ ├── Checkout │ │ ├── styles.js │ │ └── index.js │ └── Orders │ │ └── index.js ├── scripts │ └── loadProducts.js └── graphql │ ├── subscriptions.js │ ├── mutations.js │ ├── queries.js │ └── schema.json ├── babel.config.js ├── amplify ├── backend │ ├── api │ │ └── posapi │ │ │ ├── parameters.json │ │ │ ├── transform.conf.json │ │ │ ├── schema.graphql │ │ │ └── stacks │ │ │ └── CustomResources.json │ └── backend-config.json ├── .config │ └── project-config.json └── scripts │ ├── amplify-modelgen.js │ └── amplify-push.js ├── .expo-shared └── assets.json ├── CODE_OF_CONDUCT.md ├── .graphqlconfig.yml ├── app.json ├── .gitignore ├── LICENSE ├── package.json ├── App.js ├── CONTRIBUTING.md └── README.md /assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-appsync-refarch-offline/HEAD/assets/icon.png -------------------------------------------------------------------------------- /assets/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-appsync-refarch-offline/HEAD/assets/splash.png -------------------------------------------------------------------------------- /src/models/schema.d.ts: -------------------------------------------------------------------------------- 1 | import { Schema } from '@aws-amplify/datastore'; 2 | 3 | export declare const schema: Schema; -------------------------------------------------------------------------------- /assets/screenshots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-appsync-refarch-offline/HEAD/assets/screenshots.png -------------------------------------------------------------------------------- /assets/screenshot-home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-appsync-refarch-offline/HEAD/assets/screenshot-home.png -------------------------------------------------------------------------------- /assets/screenshot-orders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-appsync-refarch-offline/HEAD/assets/screenshot-orders.png -------------------------------------------------------------------------------- /assets/screenshot-checkout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-appsync-refarch-offline/HEAD/assets/screenshot-checkout.png -------------------------------------------------------------------------------- /src/redux/store.js: -------------------------------------------------------------------------------- 1 | import { createStore } from 'redux'; 2 | import reducers from './reducers'; 3 | 4 | export default createStore(reducers); -------------------------------------------------------------------------------- /assets/appsync-refarch-offline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/amazon-archives/aws-appsync-refarch-offline/HEAD/assets/appsync-refarch-offline.png -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | api.cache(true); 3 | return { 4 | presets: ['babel-preset-expo'], 5 | }; 6 | }; 7 | -------------------------------------------------------------------------------- /amplify/backend/api/posapi/parameters.json: -------------------------------------------------------------------------------- 1 | { 2 | "AppSyncApiName": "posapi", 3 | "DynamoDBBillingMode": "PAY_PER_REQUEST", 4 | "DynamoDBEnableServerSideEncryption": "false" 5 | } -------------------------------------------------------------------------------- /.expo-shared/assets.json: -------------------------------------------------------------------------------- 1 | { 2 | "12bb71342c6255bbf50437ec8f4441c083f47cdb74bd89160c15e4f43e52a1cb": true, 3 | "40b842e832070c58deac6aa9e08fa459302ee3f9da492c7e77d93d2fbf4a56fd": true 4 | } 5 | -------------------------------------------------------------------------------- /src/redux/actions.js: -------------------------------------------------------------------------------- 1 | export const addLineItem = (product) => ({ 2 | type: "ADD_LINE_ITEM", 3 | product, 4 | }); 5 | 6 | export const startNewOrder = () => ({ 7 | type: "START_NEW_ORDER", 8 | }); -------------------------------------------------------------------------------- /src/components/OrderList/styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | 3 | export default StyleSheet.create({ 4 | orderTitle: { 5 | fontSize: 20, 6 | }, 7 | orderListItem: { 8 | padding: 15, 9 | } 10 | }); -------------------------------------------------------------------------------- /src/models/index.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | import { initSchema } from '@aws-amplify/datastore'; 3 | import { schema } from './schema'; 4 | 5 | 6 | 7 | const { Order, LineItem, Product } = initSchema(schema); 8 | 9 | export { 10 | Order, 11 | LineItem, 12 | Product 13 | }; -------------------------------------------------------------------------------- /amplify/backend/api/posapi/transform.conf.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version": 5, 3 | "ElasticsearchWarning": true, 4 | "ResolverConfig": { 5 | "project": { 6 | "ConflictHandler": "AUTOMERGE", 7 | "ConflictDetection": "VERSION" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /src/components/Settings/styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | 3 | export default StyleSheet.create({ 4 | settingsBtn: { 5 | margin: 5, 6 | marginTop: 10, 7 | marginBottom: 10, 8 | height: 60, 9 | backgroundColor: 'tomato', 10 | } 11 | }); -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Code of Conduct 2 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 3 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 4 | opensource-codeofconduct@amazon.com with any additional questions or comments. 5 | -------------------------------------------------------------------------------- /.graphqlconfig.yml: -------------------------------------------------------------------------------- 1 | projects: 2 | posapi: 3 | schemaPath: src/graphql/schema.json 4 | includes: 5 | - src/graphql/**/*.js 6 | excludes: 7 | - ./amplify/** 8 | extensions: 9 | amplify: 10 | codeGenTarget: javascript 11 | generatedFileName: '' 12 | docsFilePath: src/graphql 13 | extensions: 14 | amplify: 15 | version: 3 16 | -------------------------------------------------------------------------------- /amplify/backend/backend-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "api": { 3 | "posapi": { 4 | "service": "AppSync", 5 | "providerPlugin": "awscloudformation", 6 | "output": { 7 | "authConfig": { 8 | "additionalAuthenticationProviders": [], 9 | "defaultAuthentication": { 10 | "authenticationType": "API_KEY", 11 | "apiKeyConfig": { 12 | "description": "default", 13 | "apiKeyExpirationDays": "365" 14 | } 15 | } 16 | } 17 | } 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /amplify/.config/project-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "projectName": "PosApp", 3 | "version": "3.0", 4 | "frontend": "javascript", 5 | "providers": [ 6 | "awscloudformation" 7 | ], 8 | "javascript": { 9 | "framework": "react-native", 10 | "config": { 11 | "SourceDir": "/", 12 | "DistributionDir": "/", 13 | "BuildCommand": "npm run-script build", 14 | "StartCommand": "npm run-script start" 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /src/components/Catalog/styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | 3 | export default StyleSheet.create({ 4 | checkoutBtn: { 5 | margin: 5, 6 | marginTop: 10, 7 | marginBottom: 10, 8 | height: 60, 9 | backgroundColor: 'tomato', 10 | }, 11 | subtotalTxt: { 12 | fontSize: 20, 13 | width: '70%', 14 | }, 15 | quantityText: { 16 | width: '30%', 17 | textAlign: 'center', 18 | paddingLeft: 10, 19 | fontSize: 20, 20 | } 21 | }); -------------------------------------------------------------------------------- /src/components/Receipt/styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | 3 | export default StyleSheet.create({ 4 | totalTxt: { 5 | alignSelf: 'center', 6 | fontWeight: 'bold', 7 | fontSize: 30, 8 | marginTop: 15, 9 | marginBottom: 5, 10 | }, 11 | totalQty: { 12 | alignSelf: 'center', 13 | fontSize: 30, 14 | marginBottom: 15, 15 | }, 16 | subtotalsTxt: { 17 | fontWeight: 'bold', 18 | alignSelf: 'flex-end', 19 | }, 20 | }); -------------------------------------------------------------------------------- /amplify/backend/api/posapi/schema.graphql: -------------------------------------------------------------------------------- 1 | type Order @model { 2 | id: ID! 3 | total: Float 4 | subtotal: Float 5 | tax: Float 6 | createdAt: String! 7 | lineItems: [LineItem] @connection(name: "OrderLineItems") 8 | } 9 | 10 | type LineItem @model { 11 | id: ID! 12 | qty: Int 13 | order: Order @connection(name: "OrderLineItems") 14 | product: Product @connection 15 | description: String 16 | price: Float 17 | total: Float 18 | } 19 | 20 | type Product @model { 21 | id: ID 22 | sku: String 23 | name: String 24 | price: Float 25 | image: String 26 | } -------------------------------------------------------------------------------- /amplify/scripts/amplify-modelgen.js: -------------------------------------------------------------------------------- 1 | const { spawn } = require('child_process'); 2 | 3 | /* Run codegen on base schema */ 4 | 5 | console.log('Running codegen...'); 6 | 7 | run(); 8 | 9 | async function run() { 10 | const amplify = /^win/.test(process.platform) ? 'amplify.cmd' : 'amplify'; 11 | const modelGen = spawn(amplify, ['codegen', 'model'], { cwd: process.cwd(), env: process.env, stdio: 'inherit' }); 12 | 13 | modelGen.on('exit', code => { 14 | if (code === 0) { 15 | process.exit(0); 16 | } else { 17 | process.exit(1); 18 | } 19 | }); 20 | } 21 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "expo": { 3 | "name": "PointOfSale", 4 | "slug": "PointOfSale", 5 | "platforms": [ 6 | "ios", 7 | "android", 8 | "web" 9 | ], 10 | "version": "1.0.0", 11 | "orientation": "portrait", 12 | "icon": "./assets/icon.png", 13 | "splash": { 14 | "image": "./assets/splash.png", 15 | "resizeMode": "contain", 16 | "backgroundColor": "#ffffff" 17 | }, 18 | "updates": { 19 | "fallbackToCacheTimeout": 0 20 | }, 21 | "assetBundlePatterns": [ 22 | "**/*" 23 | ], 24 | "ios": { 25 | "supportsTablet": true 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/**/* 2 | .expo/* 3 | npm-debug.* 4 | *.jks 5 | *.p8 6 | *.p12 7 | *.key 8 | *.mobileprovision 9 | *.orig.* 10 | web-build/ 11 | web-report/ 12 | 13 | # macOS 14 | .DS_Store 15 | 16 | # Amplify 17 | amplify/\#current-cloud-backend 18 | amplify/.config/local-* 19 | amplify/mock-data 20 | amplify/backend/amplify-meta.json 21 | amplify/backend/awscloudformation 22 | build/ 23 | dist/ 24 | node_modules/ 25 | aws-exports.js 26 | awsconfiguration.json 27 | amplifyconfiguration.json 28 | amplify-build-config.json 29 | amplify-gradle-config.json 30 | amplifyxc.config 31 | 32 | # For public GitHub repos, ignore this file 33 | amplify/team-provider-info.json -------------------------------------------------------------------------------- /src/components/Checkout/styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | 3 | export default StyleSheet.create({ 4 | totalTxt: { 5 | alignSelf: 'center', 6 | fontWeight: 'bold', 7 | fontSize: 30, 8 | marginTop: 15, 9 | marginBottom: 5, 10 | }, 11 | totalQty: { 12 | alignSelf: 'center', 13 | fontSize: 30, 14 | marginBottom: 15, 15 | }, 16 | subtotalsTxt: { 17 | fontWeight: 'bold', 18 | alignSelf: 'flex-end', 19 | }, 20 | checkoutBtn: { 21 | margin: 5, 22 | marginTop: 10, 23 | marginBottom: 10, 24 | height: 60, 25 | backgroundColor: 'tomato', 26 | }, 27 | checkoutTxt: { 28 | fontSize: 20, 29 | } 30 | }); -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 7 | the Software, and to permit persons to whom the Software is furnished to do so. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 10 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 11 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 12 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 13 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 14 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 15 | 16 | -------------------------------------------------------------------------------- /src/models/index.d.ts: -------------------------------------------------------------------------------- 1 | import { ModelInit, MutableModel, PersistentModelConstructor } from "@aws-amplify/datastore"; 2 | 3 | 4 | 5 | 6 | 7 | export declare class Order { 8 | readonly id: string; 9 | readonly total?: number; 10 | readonly subtotal?: number; 11 | readonly tax?: number; 12 | readonly createdAt: string; 13 | readonly lineItems?: LineItem[]; 14 | constructor(init: ModelInit); 15 | static copyOf(source: Order, mutator: (draft: MutableModel) => MutableModel | void): Order; 16 | } 17 | 18 | export declare class LineItem { 19 | readonly id: string; 20 | readonly qty?: number; 21 | readonly order?: Order; 22 | readonly product?: Product; 23 | readonly description?: string; 24 | readonly price?: number; 25 | readonly total?: number; 26 | constructor(init: ModelInit); 27 | static copyOf(source: LineItem, mutator: (draft: MutableModel) => MutableModel | void): LineItem; 28 | } 29 | 30 | export declare class Product { 31 | readonly id: string; 32 | readonly sku?: string; 33 | readonly name?: string; 34 | readonly price?: number; 35 | readonly image?: string; 36 | constructor(init: ModelInit); 37 | static copyOf(source: Product, mutator: (draft: MutableModel) => MutableModel | void): Product; 38 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "node_modules/expo/AppEntry.js", 3 | "scripts": { 4 | "start": "expo start", 5 | "android": "expo start --android", 6 | "ios": "expo start --ios", 7 | "web": "expo start --web", 8 | "eject": "expo eject" 9 | }, 10 | "dependencies": { 11 | "@aws-amplify/datastore": "^2.0.8", 12 | "@react-native-community/masked-view": "0.1.6", 13 | "@react-native-community/netinfo": "5.5.1", 14 | "@react-navigation/bottom-tabs": "^5.2.7", 15 | "@react-navigation/native": "^5.1.6", 16 | "@react-navigation/stack": "^5.2.11", 17 | "aws-amplify": "^3.0.8", 18 | "expo": "~37.0.3", 19 | "expo-font": "~8.1.0", 20 | "lodash": "^4.17.15", 21 | "moment": "^2.24.0", 22 | "native-base": "2.13.8", 23 | "react": "~16.9.0", 24 | "react-dom": "~16.9.0", 25 | "react-native": "https://github.com/expo/react-native/archive/sdk-37.0.1.tar.gz", 26 | "react-native-gesture-handler": "^1.6.1", 27 | "react-native-reanimated": "~1.7.0", 28 | "react-native-safe-area-context": "^0.7.3", 29 | "react-native-screens": "~2.2.0", 30 | "react-native-web": "~0.11.7", 31 | "react-redux": "^7.2.0", 32 | "redux": "^4.0.5" 33 | }, 34 | "devDependencies": { 35 | "@babel/core": "^7.8.6", 36 | "babel-preset-expo": "~8.1.0" 37 | }, 38 | "private": true 39 | } 40 | -------------------------------------------------------------------------------- /amplify/backend/api/posapi/stacks/CustomResources.json: -------------------------------------------------------------------------------- 1 | { 2 | "AWSTemplateFormatVersion": "2010-09-09", 3 | "Description": "An auto-generated nested stack.", 4 | "Metadata": {}, 5 | "Parameters": { 6 | "AppSyncApiId": { 7 | "Type": "String", 8 | "Description": "The id of the AppSync API associated with this project." 9 | }, 10 | "AppSyncApiName": { 11 | "Type": "String", 12 | "Description": "The name of the AppSync API", 13 | "Default": "AppSyncSimpleTransform" 14 | }, 15 | "env": { 16 | "Type": "String", 17 | "Description": "The environment name. e.g. Dev, Test, or Production", 18 | "Default": "NONE" 19 | }, 20 | "S3DeploymentBucket": { 21 | "Type": "String", 22 | "Description": "The S3 bucket containing all deployment assets for the project." 23 | }, 24 | "S3DeploymentRootKey": { 25 | "Type": "String", 26 | "Description": "An S3 key relative to the S3DeploymentBucket that points to the root\nof the deployment directory." 27 | } 28 | }, 29 | "Resources": { 30 | "EmptyResource": { 31 | "Type": "Custom::EmptyResource", 32 | "Condition": "AlwaysFalse" 33 | } 34 | }, 35 | "Conditions": { 36 | "HasEnvironmentParameter": { 37 | "Fn::Not": [ 38 | { 39 | "Fn::Equals": [ 40 | { 41 | "Ref": "env" 42 | }, 43 | "NONE" 44 | ] 45 | } 46 | ] 47 | }, 48 | "AlwaysFalse": { 49 | "Fn::Equals": [ 50 | "true", 51 | "false" 52 | ] 53 | } 54 | }, 55 | "Outputs": { 56 | "EmptyOutput": { 57 | "Description": "An empty output. You may delete this if you have at least one resource above.", 58 | "Value": "" 59 | } 60 | } 61 | } -------------------------------------------------------------------------------- /src/components/Settings/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { 3 | Container, 4 | Content, 5 | Text, 6 | Toast, 7 | Button, 8 | } from 'native-base'; 9 | import { DataStore } from "@aws-amplify/datastore"; 10 | import styles from './styles'; 11 | import loadProducts from '../../scripts/loadProducts'; 12 | 13 | const Settings = (props) => { 14 | 15 | async function createProducts() { 16 | try { 17 | await loadProducts(); 18 | Toast.show({ 19 | text: 'Products loaded, pull to refresh', 20 | buttonText: "Ok", 21 | duration: 3000 22 | }); 23 | props.navigation.navigate('Checkout'); 24 | } catch(error) { 25 | Toast.show({ 26 | text: error, 27 | buttonText: "Ok", 28 | duration: 3000 29 | }); 30 | } 31 | } 32 | 33 | async function clearDataStore() { 34 | await DataStore.clear(); 35 | Toast.show({ 36 | text: 'Storage cleared, pull to refresh', 37 | buttonText: "Ok", 38 | duration: 3000 39 | }); 40 | props.navigation.navigate('Checkout'); 41 | } 42 | 43 | return ( 44 | 45 | 46 | 49 | 52 | 53 | 54 | ); 55 | }; 56 | 57 | export default Settings; -------------------------------------------------------------------------------- /src/components/Orders/index.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react'; 2 | import { RefreshControl } from 'react-native'; 3 | import { Container, Content } from 'native-base'; 4 | import { DataStore } from '@aws-amplify/datastore'; 5 | import OrderList from '../OrderList'; 6 | import { Order, LineItem } from '../../models'; 7 | 8 | const Orders = (props) => { 9 | 10 | const [loading, setLoading] = useState(false); 11 | const [orders, setOrders] = useState([]); 12 | 13 | useEffect(() => { 14 | refetch(); 15 | const subscription = DataStore.observe(Order).subscribe(msg => refetch()); 16 | return () => subscription.unsubscribe(); 17 | }, []); 18 | 19 | async function refetch() { 20 | const data = await DataStore.query(Order); 21 | const sortedOrders = data.sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt)); 22 | setOrders(sortedOrders); 23 | } 24 | 25 | async function openReceipt(orderId) { 26 | const order = await DataStore.query(Order, orderId); 27 | const allItems = await DataStore.query(LineItem); 28 | const lineItems = allItems.filter(li => li.order && li.order.id === order.id); 29 | return props.navigation.push('Receipt', { 30 | order: { 31 | ...order, 32 | lineItems, 33 | } 34 | }); 35 | } 36 | 37 | return ( 38 | 39 | 44 | }> 45 | 46 | 47 | 48 | ) 49 | }; 50 | 51 | export default Orders; -------------------------------------------------------------------------------- /src/components/OrderList/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import _ from 'lodash'; 3 | import moment from 'moment'; 4 | import { 5 | Text, 6 | List, 7 | ListItem, 8 | Right, 9 | Body, 10 | Icon, 11 | } from 'native-base'; 12 | import styles from './styles'; 13 | 14 | const OrderList = ({ orders, onSelectOrder }) => { 15 | 16 | function onPress(orderId) { 17 | if (onSelectOrder) { 18 | onSelectOrder(orderId); 19 | } 20 | } 21 | 22 | const ordersByDay = _.groupBy(orders, order => moment(order.createdAt).format('YYYY-MM-DD')); 23 | const days = _.keys(ordersByDay); 24 | const ordersByDayList = days.map(day => { 25 | const sorted = ordersByDay[day].sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt)); 26 | const orderList = sorted.map(order => ( 27 | onPress(order.id)}> 28 | 29 | 30 | {moment(order.createdAt).format('hh:mm A')} 31 | 32 | {order.id} 33 | 34 | 35 | 36 | ${order.total.toFixed(2)} 37 | 38 | 39 | 40 | 41 | )); 42 | 43 | const sectionTitle = ( 44 | 45 | {moment(day).format('MMM Do, YYYY')} 46 | 47 | ); 48 | 49 | return [sectionTitle, ...orderList]; 50 | }); 51 | 52 | return ( 53 | 54 | {ordersByDayList} 55 | 56 | ); 57 | }; 58 | 59 | export default OrderList; -------------------------------------------------------------------------------- /src/redux/reducers.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux'; 2 | import _ from 'lodash'; 3 | 4 | const orderInitialState = { 5 | totalQty: 0, 6 | subtotal: 0, 7 | tax: 0, 8 | total: 0, 9 | lineItems: [], 10 | }; 11 | 12 | export const lineItemsReducer = (state = [], action) => { 13 | switch(action.type) { 14 | case "ADD_LINE_ITEM": 15 | const product = action.product; 16 | const lineItem = _.find(state.lineItems, (lineItem) => lineItem.product.id === product.id); 17 | const otherLines = _.filter(state.lineItems, (lineItem) => lineItem.product.id !== product.id); 18 | if (!lineItem) { 19 | return [ 20 | ...otherLines, 21 | { 22 | qty: 1, 23 | price: product.price, 24 | description: product.name, 25 | total: product.price, 26 | sku: product.sku, 27 | product, 28 | } 29 | ]; 30 | } 31 | 32 | const newQty = lineItem.qty + 1; 33 | return [ 34 | ...otherLines, 35 | { 36 | ...lineItem, 37 | qty: newQty, 38 | total: newQty * product.price, 39 | } 40 | ]; 41 | default: 42 | return state; 43 | } 44 | }; 45 | 46 | export const orderReducer = (state = orderInitialState, action) => { 47 | switch(action.type) { 48 | case "ADD_LINE_ITEM": 49 | const product = action.product; 50 | const totalQty = state.totalQty + 1; 51 | const subtotal = state.subtotal + product.price; 52 | const tax = subtotal * 0.08; 53 | const total = subtotal + tax; 54 | return { 55 | ...state, 56 | tax, 57 | total, 58 | subtotal, 59 | totalQty, 60 | lineItems: lineItemsReducer(state, action) 61 | }; 62 | case "START_NEW_ORDER": 63 | return orderInitialState; 64 | default: 65 | return state; 66 | } 67 | }; 68 | 69 | export default combineReducers({ 70 | order: orderReducer, 71 | }); -------------------------------------------------------------------------------- /src/components/Catalog/index.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react'; 2 | import { RefreshControl } from 'react-native'; 3 | import { useSelector, useDispatch } from 'react-redux'; 4 | import { 5 | Text, 6 | Container, 7 | Content, 8 | Button, 9 | List, 10 | ListItem, 11 | Thumbnail, 12 | Left, 13 | Right, 14 | Body 15 | } from 'native-base'; 16 | import { DataStore } from "@aws-amplify/datastore"; 17 | import { Product } from '../../models'; 18 | import { addLineItem } from '../../redux/actions'; 19 | import styles from './styles'; 20 | 21 | function Catalog(props) { 22 | 23 | const [loading, setLoading] = useState(false); 24 | const [products, setProducts] = useState([]); 25 | const order = useSelector(state => state.order); 26 | const dispatch = useDispatch(); 27 | 28 | useEffect(() => { 29 | fetchProducts(); 30 | }, []); 31 | 32 | async function fetchProducts() { 33 | const data = await DataStore.query(Product); 34 | setProducts(data); 35 | }; 36 | 37 | function checkoutBtnHandler() { 38 | return props.navigation.push('Checkout'); 39 | } 40 | 41 | function addProductHandler(product) { 42 | dispatch(addLineItem(product)); 43 | } 44 | 45 | const productList = products.map(product => ( 46 | 47 | 48 | 49 | 50 | 51 | {product.name} 52 | ${product.price} 53 | 54 | 55 | 58 | 59 | 60 | )); 61 | 62 | return ( 63 | 64 | 69 | }> 70 | 74 | 75 | {productList} 76 | 77 | 78 | 79 | ); 80 | }; 81 | 82 | export default Catalog; -------------------------------------------------------------------------------- /src/scripts/loadProducts.js: -------------------------------------------------------------------------------- 1 | import _ from 'lodash'; 2 | import moment from 'moment'; 3 | import { DataStore } from '@aws-amplify/datastore'; 4 | import { Product } from '../models'; 5 | 6 | const adjectives = [ 7 | 'Hot', 8 | 'Cold', 9 | 'Large', 10 | 'Small', 11 | 'Glazed', 12 | 'Sparkling', 13 | 'Fluffy', 14 | 'Iced', 15 | 'Dirty', 16 | 'Dry', 17 | 'Energy', 18 | 'Nitro', 19 | 'Green', 20 | 'Black', 21 | 'Caramel', 22 | 'Vegan', 23 | 'Organic', 24 | 'Non-Dairy', 25 | 'Gluten Free', 26 | ]; 27 | 28 | const names = [ 29 | 'Donut', 30 | 'Coffee', 31 | 'Tea', 32 | 'Muffin', 33 | 'Latte', 34 | 'Capuccino', 35 | 'Espresso', 36 | 'Cortado', 37 | 'Macchiato', 38 | 'Americano', 39 | 'Affogato', 40 | 'Milkshake', 41 | 'Cider', 42 | 'Juice', 43 | 'Sandwich', 44 | 'Panini', 45 | 'Soda', 46 | 'Chocolate', 47 | 'Mocha', 48 | 'Banana Bread', 49 | 'Smoothie', 50 | 'Frappe', 51 | 'Pancakes', 52 | 'Bagel', 53 | 'Breakfast', 54 | 'Ginger Tea', 55 | 'Milk', 56 | 'Freeze', 57 | 'Cookie', 58 | 'Granola Bar', 59 | 'Cupcake', 60 | 'Coffe Beans', 61 | 'Cake', 62 | ]; 63 | 64 | const images = [ 65 | "https://aws-appsync-refarch-offline-assets.s3-us-west-2.amazonaws.com/Cookie%402x.png", 66 | "https://aws-appsync-refarch-offline-assets.s3-us-west-2.amazonaws.com/Capuccino%402x.png", 67 | "https://aws-appsync-refarch-offline-assets.s3-us-west-2.amazonaws.com/ChocolateShake%402x.png", 68 | "https://aws-appsync-refarch-offline-assets.s3-us-west-2.amazonaws.com/Cupcake%402x.png", 69 | "https://aws-appsync-refarch-offline-assets.s3-us-west-2.amazonaws.com/Donut%402x.png", 70 | "https://aws-appsync-refarch-offline-assets.s3-us-west-2.amazonaws.com/DripCoffee%402x.png", 71 | "https://aws-appsync-refarch-offline-assets.s3-us-west-2.amazonaws.com/FoamedMilk%402x.png", 72 | "https://aws-appsync-refarch-offline-assets.s3-us-west-2.amazonaws.com/FrenchPress%402x.png", 73 | "https://aws-appsync-refarch-offline-assets.s3-us-west-2.amazonaws.com/Beans%402x.png", 74 | "https://aws-appsync-refarch-offline-assets.s3-us-west-2.amazonaws.com/Tea%402x.png", 75 | ]; 76 | 77 | /** 78 | * Generates and saves 5 random products 79 | */ 80 | const load = async () => { 81 | const promises = []; 82 | for(let i=0; i<5; i++) { 83 | promises.push( 84 | DataStore.save( 85 | new Product({ 86 | name: _.sample(adjectives).concat(' ').concat(_.sample(names)), 87 | price: parseFloat(_.random(2.5, 9.9).toFixed(2)), 88 | sku: moment().format('x'), 89 | image: _.sample(images), 90 | } 91 | )) 92 | ); 93 | } 94 | await Promise.all(promises); 95 | }; 96 | 97 | export default load; -------------------------------------------------------------------------------- /App.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Amplify from 'aws-amplify'; 3 | import { Provider } from 'react-redux'; 4 | import { Root } from 'native-base'; 5 | import { Ionicons } from '@expo/vector-icons'; 6 | import { NavigationContainer } from '@react-navigation/native'; 7 | import { createStackNavigator } from '@react-navigation/stack'; 8 | import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; 9 | 10 | import Catalog from './src/components/Catalog'; 11 | import Checkout from './src/components/Checkout'; 12 | import Orders from './src/components/Orders'; 13 | import Receipt from './src/components/Receipt'; 14 | import Settings from './src/components/Settings'; 15 | 16 | import store from './src/redux/store'; 17 | 18 | import awsConfig from "./aws-exports"; 19 | Amplify.configure(awsConfig); 20 | 21 | const CheckoutStack = createStackNavigator(); 22 | const CheckoutScreen = () => { 23 | return ( 24 | 25 | 26 | 27 | 28 | ) 29 | }; 30 | 31 | const OrdersStack = createStackNavigator(); 32 | const OrdersScreen = () => { 33 | return ( 34 | 35 | 36 | 37 | 38 | ) 39 | }; 40 | 41 | const SettingsStack = createStackNavigator(); 42 | const SettingsScreen = () => { 43 | return ( 44 | 45 | 46 | 47 | ); 48 | }; 49 | 50 | const Tab = createBottomTabNavigator(); 51 | const App = () => ( 52 | 53 | 54 | 55 | ({ 57 | tabBarIcon: ({ color, size }) => { 58 | if (route.name === 'Checkout') { 59 | return ; 60 | } else if (route.name === 'Orders') { 61 | return ; 62 | } else if (route.name === 'Settings') { 63 | return ; 64 | } 65 | }, 66 | })} 67 | tabBarOptions={{ 68 | activeTintColor: 'tomato', 69 | inactiveTintColor: 'gray', 70 | }} 71 | > 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | ); 80 | 81 | export default App; 82 | -------------------------------------------------------------------------------- /src/redux/__tests__/reducers.test.js: -------------------------------------------------------------------------------- 1 | import { orderReducer } from '../reducers'; 2 | import { addLineItem, startNewOrder } from '../actions'; 3 | 4 | describe('order reducer', () => { 5 | const product = { 6 | id: 1, 7 | sku: 'abcd', 8 | name: 'Chocolate Cookie', 9 | price: 5 10 | }; 11 | 12 | it('should have an initial state', () => { 13 | const newState = orderReducer(undefined, {}); 14 | expect(newState).toEqual({ 15 | subtotal: 0, 16 | totalQty: 0, 17 | tax: 0, 18 | total: 0, 19 | lineItems: [], 20 | }); 21 | }); 22 | 23 | it('should increment totalQty on addLineItem', () => { 24 | const newState = orderReducer(undefined, addLineItem(product)); 25 | expect(newState.totalQty).toEqual(1); 26 | }); 27 | 28 | it('should add price to subtotal on addLineItem', () => { 29 | const newState = orderReducer(undefined, addLineItem(product)); 30 | expect(newState.subtotal).toEqual(5); 31 | }); 32 | 33 | it('should add a new lineItem for a new product on addLineItem', () => { 34 | const newState = orderReducer(undefined, addLineItem(product)); 35 | expect(newState.lineItems.length).toEqual(1); 36 | expect(newState.lineItems[0]).toEqual({ 37 | qty: 1, 38 | price: 5, 39 | description: 'Chocolate Cookie', 40 | total: 5, 41 | sku: 'abcd', 42 | }); 43 | }); 44 | 45 | it('should increment qty when adding the same product on addLineItem', () => { 46 | const stateOne = orderReducer(undefined, addLineItem(product)); 47 | const stateTwo = orderReducer(stateOne, addLineItem(product)); 48 | expect(stateTwo.lineItems.length).toEqual(1); 49 | expect(stateTwo.lineItems[0].qty).toEqual(2); 50 | }); 51 | 52 | it('should update total when adding the same product on addLineItem', () => { 53 | const stateOne = orderReducer(undefined, addLineItem(product)); 54 | const stateTwo = orderReducer(stateOne, addLineItem(product)); 55 | expect(stateTwo.lineItems.length).toEqual(1); 56 | expect(stateTwo.lineItems[0].total).toEqual(10); 57 | }); 58 | 59 | it('should add 2 lineItems when adding 2 different products on addLineItem', () => { 60 | const productTwo = { 61 | id: 2, 62 | sku: 'xyz', 63 | name: 'Drip Coffee', 64 | price: 3 65 | }; 66 | const stateOne = orderReducer(undefined, addLineItem(product)); 67 | const stateTwo = orderReducer(stateOne, addLineItem(productTwo)); 68 | expect(stateTwo.lineItems.length).toEqual(2); 69 | }); 70 | 71 | it('should reset order to initialState on startNewOrder', () => { 72 | const state = orderReducer(undefined, addLineItem(product)); 73 | const newState = orderReducer(state, startNewOrder()); 74 | expect(newState).toEqual({ 75 | subtotal: 0, 76 | totalQty: 0, 77 | tax: 0, 78 | total: 0, 79 | lineItems: [], 80 | }); 81 | }) 82 | }); -------------------------------------------------------------------------------- /src/components/Receipt/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import _ from 'lodash'; 3 | import moment from 'moment'; 4 | import { 5 | Container, 6 | Content, 7 | Text, 8 | List, 9 | ListItem, 10 | Left, 11 | Right, 12 | Body, 13 | Button, 14 | } from 'native-base'; 15 | import styles from './styles'; 16 | 17 | const Receipt = ({ route }) => { 18 | 19 | const { order } = route.params; 20 | const lineItemList = order.lineItems.map(lineItem => ( 21 | 22 | 23 | {lineItem.qty} 24 | 25 | 26 | {lineItem.description} 27 | 28 | 29 | ${lineItem.total.toFixed(2)} 30 | 31 | 32 | )); 33 | 34 | return ( 35 | 36 | 37 | 38 | 39 |   40 | 41 | 42 | 43 | Order Number 44 | {order.id} 45 | 46 | 47 | 48 | 49 | Date 50 | {moment(order.createdAt).format('YYYY-MM-DD hh:mm A')} 51 | 52 | 53 | 54 |   55 | 56 | {lineItemList} 57 | 58 |   59 | 60 | 61 | 62 | Subtotal 63 | 64 | 65 | ${order.subtotal.toFixed(2)} 66 | 67 | 68 | 69 | 70 | Tax 71 | 72 | 73 | ${order.tax.toFixed(2)} 74 | 75 | 76 | 77 | 78 | Total 79 | 80 | 81 | ${order.total.toFixed(2)} 82 | 83 | 84 | 85 |   86 | 87 | 88 | 89 | 90 | ); 91 | }; 92 | 93 | export default Receipt; -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guidelines 2 | 3 | Thank you for your interest in contributing to our project. Whether it's a bug report, new feature, correction, or additional 4 | documentation, we greatly value feedback and contributions from our community. 5 | 6 | Please read through this document before submitting any issues or pull requests to ensure we have all the necessary 7 | information to effectively respond to your bug report or contribution. 8 | 9 | 10 | ## Reporting Bugs/Feature Requests 11 | 12 | We welcome you to use the GitHub issue tracker to report bugs or suggest features. 13 | 14 | When filing an issue, please check existing open, or recently closed, issues to make sure somebody else hasn't already 15 | reported the issue. Please try to include as much information as you can. Details like these are incredibly useful: 16 | 17 | * A reproducible test case or series of steps 18 | * The version of our code being used 19 | * Any modifications you've made relevant to the bug 20 | * Anything unusual about your environment or deployment 21 | 22 | 23 | ## Contributing via Pull Requests 24 | Contributions via pull requests are much appreciated. Before sending us a pull request, please ensure that: 25 | 26 | 1. You are working against the latest source on the *master* branch. 27 | 2. You check existing open, and recently merged, pull requests to make sure someone else hasn't addressed the problem already. 28 | 3. You open an issue to discuss any significant work - we would hate for your time to be wasted. 29 | 30 | To send us a pull request, please: 31 | 32 | 1. Fork the repository. 33 | 2. Modify the source; please focus on the specific change you are contributing. If you also reformat all the code, it will be hard for us to focus on your change. 34 | 3. Ensure local tests pass. 35 | 4. Commit to your fork using clear commit messages. 36 | 5. Send us a pull request, answering any default questions in the pull request interface. 37 | 6. Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation. 38 | 39 | GitHub provides additional document on [forking a repository](https://help.github.com/articles/fork-a-repo/) and 40 | [creating a pull request](https://help.github.com/articles/creating-a-pull-request/). 41 | 42 | 43 | ## Finding contributions to work on 44 | Looking at the existing issues is a great way to find something to contribute on. As our projects, by default, use the default GitHub issue labels (enhancement/bug/duplicate/help wanted/invalid/question/wontfix), looking at any 'help wanted' issues is a great place to start. 45 | 46 | 47 | ## Code of Conduct 48 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 49 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 50 | opensource-codeofconduct@amazon.com with any additional questions or comments. 51 | 52 | 53 | ## Security issue notifications 54 | If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue. 55 | 56 | 57 | ## Licensing 58 | 59 | See the [LICENSE](LICENSE) file for our project's licensing. We will ask you to confirm the licensing of your contribution. 60 | 61 | We may ask you to sign a [Contributor License Agreement (CLA)](http://en.wikipedia.org/wiki/Contributor_License_Agreement) for larger changes. 62 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AppSync Offline Reference Architecture 2 | 3 | This repository contains the code for a mobile app written in React Native that uses Amplify DataStore and AWS AppSync to provide offline and delta sync capabilities. Use this repository as an example to build your own application. 4 | 5 | Read the Blog Post about this project for more information: [AWS AppSync offline reference architecture – powered by the Amplify DataStore](https://aws.amazon.com/blogs/mobile/aws-appsync-offline-reference-architecture). 6 | 7 | ## Point of Sale 8 | 9 | The theme of this mobile application is a Point of Sale (POS) for a Coffee Shop. What better use case for offline capabilities than a POS app that handles sales and transactions. These type of applications are critical for a business and is important that they handle internet outages and data synchronization gracefully while continue to process transactions. 10 | 11 | ![Screenshots](./assets/screenshots.png) 12 | 13 | ## Architecture Overview 14 | 15 | The code in this repository contains both the backend definition and the frontend mobile app. The backend is powered by a GraphQL API running on AWS AppSync with a set of managed resolvers that manipulate and query the data on DynamoDB tables. The frontend is a React Native application that uses Ampify DataStore to interact with the backend and handle the data synchronization with delta sync, local storage and conflict resolution. 16 | 17 | ![Architecture](./assets/appsync-refarch-offline.png) 18 | 19 | Amplify DataStore communicates with AWS AppSync using GraphQL queries, mutations and subscriptions, however this communication is abstracted away from the developer as you only need to interact with the DataStore API using standard JavaScript function invocations. 20 | 21 | ### GraphQL Schema 22 | 23 | The GraphQL schema definition is an important part of this project because is what Amplify uses to create the backend with the DynamoDB tables and AppSync resolvers. And also what you use to interact with Amplify DataStore on the device. 24 | 25 | ```graphql 26 | type Order @model { 27 | id: ID! 28 | total: Float 29 | subtotal: Float 30 | tax: Float 31 | createdAt: String! 32 | lineItems: [LineItem] @connection(name: "OrderLineItems") 33 | } 34 | 35 | type LineItem @model { 36 | id: ID! 37 | qty: Int 38 | order: Order @connection(name: "OrderLineItems") 39 | product: Product @connection 40 | description: String 41 | price: Float 42 | total: Float 43 | } 44 | 45 | type Product @model { 46 | id: ID 47 | sku: String 48 | name: String 49 | price: Float 50 | image: String 51 | } 52 | ``` 53 | 54 | 55 | ## How to run it 56 | 57 | If you want to run this project yourself, you need the following pre-reqs in your computer: 58 | 59 | * [Node.js](https://nodejs.org/en/) 60 | * [Git](https://git-scm.com/) 61 | * [Expo CLI](https://docs.expo.io/get-started/installation) 62 | * [iOS](https://docs.expo.io/workflow/ios-simulator) or [Android](https://docs.expo.io/workflow/android-studio-emulator) simulator 63 | * [Amplify CLI](https://github.com/aws-amplify/amplify-cli#install-the-cli) 64 | 65 | If you have them, then go ahead and clone the repository: 66 | 67 | ``` 68 | git clone https://github.com/aws-samples/aws-appsync-refarch-offline 69 | cd aws-appsync-refarch-offline 70 | ``` 71 | 72 | Install the dependencies using yarn: 73 | 74 | ``` 75 | yarn install 76 | ``` 77 | 78 | Or using npm: 79 | 80 | ``` 81 | npm install 82 | ``` 83 | 84 | And now follow the next instructions to run both the Backend and Frontend. 85 | 86 | ### Backend 87 | 88 | Provisioning the backend is very simple with the Amplify CLI. Just run the following commands and make sure you have access to an AWS account: 89 | 90 | ``` 91 | amplify init 92 | ``` 93 | 94 | And then deploy to an AWS account: 95 | 96 | ``` 97 | amplify push 98 | ``` 99 | 100 | Wait for deployment to finish and then you can launch the frontend: 101 | 102 | ### Frontend 103 | 104 | Make sure you have the iOS or Android simulator running and then start the application with the following command: 105 | ``` 106 | yarn start 107 | ``` 108 | 109 | or using npm: 110 | ``` 111 | npm start 112 | ``` 113 | -------------------------------------------------------------------------------- /src/components/Checkout/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { useSelector, useDispatch } from 'react-redux'; 3 | import { 4 | Text, 5 | Container, 6 | Content, 7 | Button, 8 | List, 9 | ListItem, 10 | Left, 11 | Right, 12 | Body, 13 | } from 'native-base'; 14 | import { startNewOrder } from '../../redux/actions'; 15 | import { DataStore } from "@aws-amplify/datastore"; 16 | import { Order, LineItem, Product } from '../../models'; 17 | import styles from './styles'; 18 | 19 | const Checkout = (props) => { 20 | 21 | const order = useSelector(state => state.order); 22 | const dispatch = useDispatch(); 23 | 24 | async function submitOrder() { 25 | const now = new Date().toISOString(); 26 | const newOrder = await DataStore.save( 27 | new Order({ 28 | total: order.total, 29 | subtotal: order.subtotal, 30 | tax: order.tax, 31 | createdAt: now, 32 | }) 33 | ); 34 | 35 | const promises = order.lineItems.map(lineItem => { 36 | return DataStore.save( 37 | new LineItem({ 38 | qty: lineItem.qty, 39 | description: lineItem.description, 40 | price: lineItem.price, 41 | total: lineItem.total, 42 | order: newOrder, // associate to order 43 | product: lineItem.product, // associate to product 44 | }) 45 | ); 46 | }); 47 | 48 | await Promise.all(promises); 49 | } 50 | 51 | async function checkoutBtnHandler() { 52 | await submitOrder(); 53 | dispatch(startNewOrder()); 54 | props.navigation.goBack(); 55 | } 56 | 57 | const lineItemList = order.lineItems.map(lineItem => ( 58 | 59 | 60 | {lineItem.qty} 61 | 62 | 63 | {lineItem.description} 64 | 65 | 66 | ${lineItem.total.toFixed(2)} 67 | 68 | 69 | )); 70 | 71 | return ( 72 | 73 | 74 | TOTAL 75 | ${order.total.toFixed(2)} 76 | 77 | 78 |   79 | 80 | {lineItemList} 81 | 82 |   83 | 84 | 85 | 86 | Subtotal 87 | 88 | 89 | ${order.subtotal.toFixed(2)} 90 | 91 | 92 | 93 | 94 | Tax 95 | 96 | 97 | ${order.tax.toFixed(2)} 98 | 99 | 100 | 101 | 102 | Total 103 | 104 | 105 | ${order.total.toFixed(2)} 106 | 107 | 108 | 109 | 112 | 113 | 114 | ); 115 | }; 116 | 117 | export default Checkout; -------------------------------------------------------------------------------- /amplify/scripts/amplify-push.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | const os = require('os'); 4 | const ini = require('ini'); 5 | const { spawn } = require('child_process'); 6 | const inquirer = require('inquirer'); 7 | 8 | const amplify = /^win/.test(process.platform) ? 'amplify.cmd' : 'amplify'; 9 | const dotAWSDirPath = path.normalize(path.join(os.homedir(), '.aws')); 10 | const configFilePath = path.join(dotAWSDirPath, 'config'); 11 | 12 | run(); 13 | 14 | function getNamedProfiles() { 15 | let namedProfiles; 16 | if (fs.existsSync(configFilePath)) { 17 | const config = ini.parse(fs.readFileSync(configFilePath, 'utf-8')); 18 | namedProfiles = {}; 19 | Object.keys(config).forEach(key => { 20 | const profileName = key.replace('profile', '').trim(); 21 | if (!namedProfiles[profileName]) { 22 | namedProfiles[profileName] = config[key]; 23 | } 24 | }); 25 | } 26 | return namedProfiles; 27 | } 28 | 29 | async function askForProfile(namedProfiles) { 30 | const profileQuestion = { 31 | type: 'list', 32 | name: 'profile', 33 | message: 'Choose the profile you would like to use', 34 | choices: Object.keys(namedProfiles), 35 | }; 36 | const profileAnswer = await inquirer.prompt(profileQuestion); 37 | return profileAnswer; 38 | } 39 | 40 | async function getValidProfile(profileToUse) { 41 | const namedProfiles = getNamedProfiles(); 42 | if (namedProfiles && Object.keys(namedProfiles).length) { 43 | if (namedProfiles[profileToUse]) { 44 | return profileToUse; 45 | } 46 | const profileAnswer = await askForProfile(namedProfiles); 47 | return profileAnswer; 48 | } 49 | console.log(`Profiles not found. Please create one`); 50 | return undefined; 51 | } 52 | 53 | async function configureProfile() { 54 | const amplifyConfigure = spawn(amplify, ['configure'], { cwd: process.cwd(), env: process.env, stdio: 'inherit' }); 55 | 56 | return new Promise((resolve, reject) => { 57 | amplifyConfigure.on('exit', code => { 58 | if (code === 0) { 59 | resolve(); 60 | } else { 61 | reject(); 62 | } 63 | }); 64 | }); 65 | } 66 | 67 | async function run() { 68 | /* Run amplify init + push or amplify push */ 69 | 70 | let buildConfig; 71 | const buildConfigFilepath = `./amplify-build-config.json`; 72 | if (fs.existsSync(buildConfigFilepath)) { 73 | buildConfig = JSON.parse(fs.readFileSync(buildConfigFilepath)); 74 | } 75 | 76 | let profileToUse = buildConfig.profile || 'default'; 77 | 78 | // If accessKeyId and secretKey not provided in buildConfig, profile needs to exists 79 | if (!buildConfig.accessKeyId) { 80 | /* Check if profile exists - if not run `amplify configure` */ 81 | let foundProfile; 82 | while (!foundProfile) { 83 | foundProfile = await getValidProfile(profileToUse); 84 | if (!foundProfile) { 85 | console.log('Attempting to configure the profile'); 86 | await configureProfile(); 87 | } 88 | } 89 | profileToUse = foundProfile; 90 | } 91 | 92 | const PROJECT_CONFIG = `{\ 93 | "envName":"${buildConfig.envName || 'amplify'}"\ 94 | }`; 95 | 96 | let PROVIDER_CONFIG; 97 | 98 | if (buildConfig.profile) { 99 | PROVIDER_CONFIG = `{\ 100 | "awscloudformation": {\ 101 | "configLevel":"project",\ 102 | "useProfile":true,\ 103 | "profileName":"${profileToUse}"\ 104 | } \ 105 | }`; 106 | } else if (buildConfig.accessKeyId && buildConfig.secretAccessKey && buildConfig.region) { 107 | PROVIDER_CONFIG = `{\ 108 | "awscloudformation": {\ 109 | "configLevel":"project",\ 110 | "accessKeyId":"${buildConfig.accessKeyId}",\ 111 | "secretAccessKey":"${buildConfig.secretAccessKey}",\ 112 | "region":"${buildConfig.region}"\ 113 | } \ 114 | }`; 115 | } else { 116 | console.log('AWS Credentials not configured'); 117 | } 118 | 119 | let cloudPush; 120 | 121 | if (!fs.existsSync(`./amplify/.config/local-env-info.json`)) { 122 | // init and then push 123 | 124 | cloudPush = spawn(amplify, ['init', '--amplify', PROJECT_CONFIG, '--providers', PROVIDER_CONFIG, '--yes'], { 125 | cwd: process.cwd(), 126 | env: process.env, 127 | stdio: 'inherit', 128 | }); 129 | } else { 130 | // just push 131 | 132 | cloudPush = spawn(amplify, ['push', '--yes'], { cwd: process.cwd(), env: process.env, stdio: 'inherit' }); 133 | } 134 | 135 | cloudPush.on('exit', code => { 136 | if (code === 0) { 137 | process.exit(0); 138 | } else { 139 | process.exit(1); 140 | } 141 | }); 142 | } 143 | -------------------------------------------------------------------------------- /src/graphql/subscriptions.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | // this is an auto generated file. This will be overwritten 3 | 4 | export const onCreateOrder = /* GraphQL */ ` 5 | subscription OnCreateOrder { 6 | onCreateOrder { 7 | id 8 | total 9 | subtotal 10 | tax 11 | createdAt 12 | lineItems { 13 | items { 14 | id 15 | qty 16 | description 17 | price 18 | total 19 | _version 20 | _deleted 21 | _lastChangedAt 22 | } 23 | nextToken 24 | startedAt 25 | } 26 | _version 27 | _deleted 28 | _lastChangedAt 29 | } 30 | } 31 | `; 32 | export const onUpdateOrder = /* GraphQL */ ` 33 | subscription OnUpdateOrder { 34 | onUpdateOrder { 35 | id 36 | total 37 | subtotal 38 | tax 39 | createdAt 40 | lineItems { 41 | items { 42 | id 43 | qty 44 | description 45 | price 46 | total 47 | _version 48 | _deleted 49 | _lastChangedAt 50 | } 51 | nextToken 52 | startedAt 53 | } 54 | _version 55 | _deleted 56 | _lastChangedAt 57 | } 58 | } 59 | `; 60 | export const onDeleteOrder = /* GraphQL */ ` 61 | subscription OnDeleteOrder { 62 | onDeleteOrder { 63 | id 64 | total 65 | subtotal 66 | tax 67 | createdAt 68 | lineItems { 69 | items { 70 | id 71 | qty 72 | description 73 | price 74 | total 75 | _version 76 | _deleted 77 | _lastChangedAt 78 | } 79 | nextToken 80 | startedAt 81 | } 82 | _version 83 | _deleted 84 | _lastChangedAt 85 | } 86 | } 87 | `; 88 | export const onCreateLineItem = /* GraphQL */ ` 89 | subscription OnCreateLineItem { 90 | onCreateLineItem { 91 | id 92 | qty 93 | order { 94 | id 95 | total 96 | subtotal 97 | tax 98 | createdAt 99 | lineItems { 100 | nextToken 101 | startedAt 102 | } 103 | _version 104 | _deleted 105 | _lastChangedAt 106 | } 107 | product { 108 | id 109 | sku 110 | name 111 | price 112 | image 113 | _version 114 | _deleted 115 | _lastChangedAt 116 | } 117 | description 118 | price 119 | total 120 | _version 121 | _deleted 122 | _lastChangedAt 123 | } 124 | } 125 | `; 126 | export const onUpdateLineItem = /* GraphQL */ ` 127 | subscription OnUpdateLineItem { 128 | onUpdateLineItem { 129 | id 130 | qty 131 | order { 132 | id 133 | total 134 | subtotal 135 | tax 136 | createdAt 137 | lineItems { 138 | nextToken 139 | startedAt 140 | } 141 | _version 142 | _deleted 143 | _lastChangedAt 144 | } 145 | product { 146 | id 147 | sku 148 | name 149 | price 150 | image 151 | _version 152 | _deleted 153 | _lastChangedAt 154 | } 155 | description 156 | price 157 | total 158 | _version 159 | _deleted 160 | _lastChangedAt 161 | } 162 | } 163 | `; 164 | export const onDeleteLineItem = /* GraphQL */ ` 165 | subscription OnDeleteLineItem { 166 | onDeleteLineItem { 167 | id 168 | qty 169 | order { 170 | id 171 | total 172 | subtotal 173 | tax 174 | createdAt 175 | lineItems { 176 | nextToken 177 | startedAt 178 | } 179 | _version 180 | _deleted 181 | _lastChangedAt 182 | } 183 | product { 184 | id 185 | sku 186 | name 187 | price 188 | image 189 | _version 190 | _deleted 191 | _lastChangedAt 192 | } 193 | description 194 | price 195 | total 196 | _version 197 | _deleted 198 | _lastChangedAt 199 | } 200 | } 201 | `; 202 | export const onCreateProduct = /* GraphQL */ ` 203 | subscription OnCreateProduct { 204 | onCreateProduct { 205 | id 206 | sku 207 | name 208 | price 209 | image 210 | _version 211 | _deleted 212 | _lastChangedAt 213 | } 214 | } 215 | `; 216 | export const onUpdateProduct = /* GraphQL */ ` 217 | subscription OnUpdateProduct { 218 | onUpdateProduct { 219 | id 220 | sku 221 | name 222 | price 223 | image 224 | _version 225 | _deleted 226 | _lastChangedAt 227 | } 228 | } 229 | `; 230 | export const onDeleteProduct = /* GraphQL */ ` 231 | subscription OnDeleteProduct { 232 | onDeleteProduct { 233 | id 234 | sku 235 | name 236 | price 237 | image 238 | _version 239 | _deleted 240 | _lastChangedAt 241 | } 242 | } 243 | `; 244 | -------------------------------------------------------------------------------- /src/graphql/mutations.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | // this is an auto generated file. This will be overwritten 3 | 4 | export const createOrder = /* GraphQL */ ` 5 | mutation CreateOrder( 6 | $input: CreateOrderInput! 7 | $condition: ModelOrderConditionInput 8 | ) { 9 | createOrder(input: $input, condition: $condition) { 10 | id 11 | total 12 | subtotal 13 | tax 14 | createdAt 15 | lineItems { 16 | items { 17 | id 18 | qty 19 | description 20 | price 21 | total 22 | _version 23 | _deleted 24 | _lastChangedAt 25 | } 26 | nextToken 27 | startedAt 28 | } 29 | _version 30 | _deleted 31 | _lastChangedAt 32 | } 33 | } 34 | `; 35 | export const updateOrder = /* GraphQL */ ` 36 | mutation UpdateOrder( 37 | $input: UpdateOrderInput! 38 | $condition: ModelOrderConditionInput 39 | ) { 40 | updateOrder(input: $input, condition: $condition) { 41 | id 42 | total 43 | subtotal 44 | tax 45 | createdAt 46 | lineItems { 47 | items { 48 | id 49 | qty 50 | description 51 | price 52 | total 53 | _version 54 | _deleted 55 | _lastChangedAt 56 | } 57 | nextToken 58 | startedAt 59 | } 60 | _version 61 | _deleted 62 | _lastChangedAt 63 | } 64 | } 65 | `; 66 | export const deleteOrder = /* GraphQL */ ` 67 | mutation DeleteOrder( 68 | $input: DeleteOrderInput! 69 | $condition: ModelOrderConditionInput 70 | ) { 71 | deleteOrder(input: $input, condition: $condition) { 72 | id 73 | total 74 | subtotal 75 | tax 76 | createdAt 77 | lineItems { 78 | items { 79 | id 80 | qty 81 | description 82 | price 83 | total 84 | _version 85 | _deleted 86 | _lastChangedAt 87 | } 88 | nextToken 89 | startedAt 90 | } 91 | _version 92 | _deleted 93 | _lastChangedAt 94 | } 95 | } 96 | `; 97 | export const createLineItem = /* GraphQL */ ` 98 | mutation CreateLineItem( 99 | $input: CreateLineItemInput! 100 | $condition: ModelLineItemConditionInput 101 | ) { 102 | createLineItem(input: $input, condition: $condition) { 103 | id 104 | qty 105 | order { 106 | id 107 | total 108 | subtotal 109 | tax 110 | createdAt 111 | lineItems { 112 | nextToken 113 | startedAt 114 | } 115 | _version 116 | _deleted 117 | _lastChangedAt 118 | } 119 | product { 120 | id 121 | sku 122 | name 123 | price 124 | image 125 | _version 126 | _deleted 127 | _lastChangedAt 128 | } 129 | description 130 | price 131 | total 132 | _version 133 | _deleted 134 | _lastChangedAt 135 | } 136 | } 137 | `; 138 | export const updateLineItem = /* GraphQL */ ` 139 | mutation UpdateLineItem( 140 | $input: UpdateLineItemInput! 141 | $condition: ModelLineItemConditionInput 142 | ) { 143 | updateLineItem(input: $input, condition: $condition) { 144 | id 145 | qty 146 | order { 147 | id 148 | total 149 | subtotal 150 | tax 151 | createdAt 152 | lineItems { 153 | nextToken 154 | startedAt 155 | } 156 | _version 157 | _deleted 158 | _lastChangedAt 159 | } 160 | product { 161 | id 162 | sku 163 | name 164 | price 165 | image 166 | _version 167 | _deleted 168 | _lastChangedAt 169 | } 170 | description 171 | price 172 | total 173 | _version 174 | _deleted 175 | _lastChangedAt 176 | } 177 | } 178 | `; 179 | export const deleteLineItem = /* GraphQL */ ` 180 | mutation DeleteLineItem( 181 | $input: DeleteLineItemInput! 182 | $condition: ModelLineItemConditionInput 183 | ) { 184 | deleteLineItem(input: $input, condition: $condition) { 185 | id 186 | qty 187 | order { 188 | id 189 | total 190 | subtotal 191 | tax 192 | createdAt 193 | lineItems { 194 | nextToken 195 | startedAt 196 | } 197 | _version 198 | _deleted 199 | _lastChangedAt 200 | } 201 | product { 202 | id 203 | sku 204 | name 205 | price 206 | image 207 | _version 208 | _deleted 209 | _lastChangedAt 210 | } 211 | description 212 | price 213 | total 214 | _version 215 | _deleted 216 | _lastChangedAt 217 | } 218 | } 219 | `; 220 | export const createProduct = /* GraphQL */ ` 221 | mutation CreateProduct( 222 | $input: CreateProductInput! 223 | $condition: ModelProductConditionInput 224 | ) { 225 | createProduct(input: $input, condition: $condition) { 226 | id 227 | sku 228 | name 229 | price 230 | image 231 | _version 232 | _deleted 233 | _lastChangedAt 234 | } 235 | } 236 | `; 237 | export const updateProduct = /* GraphQL */ ` 238 | mutation UpdateProduct( 239 | $input: UpdateProductInput! 240 | $condition: ModelProductConditionInput 241 | ) { 242 | updateProduct(input: $input, condition: $condition) { 243 | id 244 | sku 245 | name 246 | price 247 | image 248 | _version 249 | _deleted 250 | _lastChangedAt 251 | } 252 | } 253 | `; 254 | export const deleteProduct = /* GraphQL */ ` 255 | mutation DeleteProduct( 256 | $input: DeleteProductInput! 257 | $condition: ModelProductConditionInput 258 | ) { 259 | deleteProduct(input: $input, condition: $condition) { 260 | id 261 | sku 262 | name 263 | price 264 | image 265 | _version 266 | _deleted 267 | _lastChangedAt 268 | } 269 | } 270 | `; 271 | -------------------------------------------------------------------------------- /src/graphql/queries.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | // this is an auto generated file. This will be overwritten 3 | 4 | export const syncOrders = /* GraphQL */ ` 5 | query SyncOrders( 6 | $filter: ModelOrderFilterInput 7 | $limit: Int 8 | $nextToken: String 9 | $lastSync: AWSTimestamp 10 | ) { 11 | syncOrders( 12 | filter: $filter 13 | limit: $limit 14 | nextToken: $nextToken 15 | lastSync: $lastSync 16 | ) { 17 | items { 18 | id 19 | total 20 | subtotal 21 | tax 22 | createdAt 23 | lineItems { 24 | nextToken 25 | startedAt 26 | } 27 | _version 28 | _deleted 29 | _lastChangedAt 30 | } 31 | nextToken 32 | startedAt 33 | } 34 | } 35 | `; 36 | export const getOrder = /* GraphQL */ ` 37 | query GetOrder($id: ID!) { 38 | getOrder(id: $id) { 39 | id 40 | total 41 | subtotal 42 | tax 43 | createdAt 44 | lineItems { 45 | items { 46 | id 47 | qty 48 | description 49 | price 50 | total 51 | _version 52 | _deleted 53 | _lastChangedAt 54 | } 55 | nextToken 56 | startedAt 57 | } 58 | _version 59 | _deleted 60 | _lastChangedAt 61 | } 62 | } 63 | `; 64 | export const listOrders = /* GraphQL */ ` 65 | query ListOrders( 66 | $filter: ModelOrderFilterInput 67 | $limit: Int 68 | $nextToken: String 69 | ) { 70 | listOrders(filter: $filter, limit: $limit, nextToken: $nextToken) { 71 | items { 72 | id 73 | total 74 | subtotal 75 | tax 76 | createdAt 77 | lineItems { 78 | nextToken 79 | startedAt 80 | } 81 | _version 82 | _deleted 83 | _lastChangedAt 84 | } 85 | nextToken 86 | startedAt 87 | } 88 | } 89 | `; 90 | export const syncLineItems = /* GraphQL */ ` 91 | query SyncLineItems( 92 | $filter: ModelLineItemFilterInput 93 | $limit: Int 94 | $nextToken: String 95 | $lastSync: AWSTimestamp 96 | ) { 97 | syncLineItems( 98 | filter: $filter 99 | limit: $limit 100 | nextToken: $nextToken 101 | lastSync: $lastSync 102 | ) { 103 | items { 104 | id 105 | qty 106 | order { 107 | id 108 | total 109 | subtotal 110 | tax 111 | createdAt 112 | _version 113 | _deleted 114 | _lastChangedAt 115 | } 116 | product { 117 | id 118 | sku 119 | name 120 | price 121 | image 122 | _version 123 | _deleted 124 | _lastChangedAt 125 | } 126 | description 127 | price 128 | total 129 | _version 130 | _deleted 131 | _lastChangedAt 132 | } 133 | nextToken 134 | startedAt 135 | } 136 | } 137 | `; 138 | export const getLineItem = /* GraphQL */ ` 139 | query GetLineItem($id: ID!) { 140 | getLineItem(id: $id) { 141 | id 142 | qty 143 | order { 144 | id 145 | total 146 | subtotal 147 | tax 148 | createdAt 149 | lineItems { 150 | nextToken 151 | startedAt 152 | } 153 | _version 154 | _deleted 155 | _lastChangedAt 156 | } 157 | product { 158 | id 159 | sku 160 | name 161 | price 162 | image 163 | _version 164 | _deleted 165 | _lastChangedAt 166 | } 167 | description 168 | price 169 | total 170 | _version 171 | _deleted 172 | _lastChangedAt 173 | } 174 | } 175 | `; 176 | export const listLineItems = /* GraphQL */ ` 177 | query ListLineItems( 178 | $filter: ModelLineItemFilterInput 179 | $limit: Int 180 | $nextToken: String 181 | ) { 182 | listLineItems(filter: $filter, limit: $limit, nextToken: $nextToken) { 183 | items { 184 | id 185 | qty 186 | order { 187 | id 188 | total 189 | subtotal 190 | tax 191 | createdAt 192 | _version 193 | _deleted 194 | _lastChangedAt 195 | } 196 | product { 197 | id 198 | sku 199 | name 200 | price 201 | image 202 | _version 203 | _deleted 204 | _lastChangedAt 205 | } 206 | description 207 | price 208 | total 209 | _version 210 | _deleted 211 | _lastChangedAt 212 | } 213 | nextToken 214 | startedAt 215 | } 216 | } 217 | `; 218 | export const syncProducts = /* GraphQL */ ` 219 | query SyncProducts( 220 | $filter: ModelProductFilterInput 221 | $limit: Int 222 | $nextToken: String 223 | $lastSync: AWSTimestamp 224 | ) { 225 | syncProducts( 226 | filter: $filter 227 | limit: $limit 228 | nextToken: $nextToken 229 | lastSync: $lastSync 230 | ) { 231 | items { 232 | id 233 | sku 234 | name 235 | price 236 | image 237 | _version 238 | _deleted 239 | _lastChangedAt 240 | } 241 | nextToken 242 | startedAt 243 | } 244 | } 245 | `; 246 | export const getProduct = /* GraphQL */ ` 247 | query GetProduct($id: ID!) { 248 | getProduct(id: $id) { 249 | id 250 | sku 251 | name 252 | price 253 | image 254 | _version 255 | _deleted 256 | _lastChangedAt 257 | } 258 | } 259 | `; 260 | export const listProducts = /* GraphQL */ ` 261 | query ListProducts( 262 | $filter: ModelProductFilterInput 263 | $limit: Int 264 | $nextToken: String 265 | ) { 266 | listProducts(filter: $filter, limit: $limit, nextToken: $nextToken) { 267 | items { 268 | id 269 | sku 270 | name 271 | price 272 | image 273 | _version 274 | _deleted 275 | _lastChangedAt 276 | } 277 | nextToken 278 | startedAt 279 | } 280 | } 281 | `; 282 | -------------------------------------------------------------------------------- /src/models/schema.js: -------------------------------------------------------------------------------- 1 | export const schema = { 2 | "models": { 3 | "Order": { 4 | "name": "Order", 5 | "fields": { 6 | "id": { 7 | "name": "id", 8 | "isArray": false, 9 | "type": "ID", 10 | "isRequired": true, 11 | "attributes": [] 12 | }, 13 | "total": { 14 | "name": "total", 15 | "isArray": false, 16 | "type": "Float", 17 | "isRequired": false, 18 | "attributes": [] 19 | }, 20 | "subtotal": { 21 | "name": "subtotal", 22 | "isArray": false, 23 | "type": "Float", 24 | "isRequired": false, 25 | "attributes": [] 26 | }, 27 | "tax": { 28 | "name": "tax", 29 | "isArray": false, 30 | "type": "Float", 31 | "isRequired": false, 32 | "attributes": [] 33 | }, 34 | "createdAt": { 35 | "name": "createdAt", 36 | "isArray": false, 37 | "type": "String", 38 | "isRequired": true, 39 | "attributes": [] 40 | }, 41 | "lineItems": { 42 | "name": "lineItems", 43 | "isArray": true, 44 | "type": { 45 | "model": "LineItem" 46 | }, 47 | "isRequired": false, 48 | "attributes": [], 49 | "association": { 50 | "connectionType": "HAS_MANY", 51 | "associatedWith": "order" 52 | } 53 | } 54 | }, 55 | "syncable": true, 56 | "pluralName": "Orders", 57 | "attributes": [ 58 | { 59 | "type": "model", 60 | "properties": {} 61 | } 62 | ] 63 | }, 64 | "LineItem": { 65 | "name": "LineItem", 66 | "fields": { 67 | "id": { 68 | "name": "id", 69 | "isArray": false, 70 | "type": "ID", 71 | "isRequired": true, 72 | "attributes": [] 73 | }, 74 | "qty": { 75 | "name": "qty", 76 | "isArray": false, 77 | "type": "Int", 78 | "isRequired": false, 79 | "attributes": [] 80 | }, 81 | "order": { 82 | "name": "order", 83 | "isArray": false, 84 | "type": { 85 | "model": "Order" 86 | }, 87 | "isRequired": false, 88 | "attributes": [], 89 | "association": { 90 | "connectionType": "BELONGS_TO", 91 | "targetName": "lineItemOrderId" 92 | } 93 | }, 94 | "product": { 95 | "name": "product", 96 | "isArray": false, 97 | "type": { 98 | "model": "Product" 99 | }, 100 | "isRequired": false, 101 | "attributes": [], 102 | "association": { 103 | "connectionType": "BELONGS_TO", 104 | "targetName": "lineItemProductId" 105 | } 106 | }, 107 | "description": { 108 | "name": "description", 109 | "isArray": false, 110 | "type": "String", 111 | "isRequired": false, 112 | "attributes": [] 113 | }, 114 | "price": { 115 | "name": "price", 116 | "isArray": false, 117 | "type": "Float", 118 | "isRequired": false, 119 | "attributes": [] 120 | }, 121 | "total": { 122 | "name": "total", 123 | "isArray": false, 124 | "type": "Float", 125 | "isRequired": false, 126 | "attributes": [] 127 | } 128 | }, 129 | "syncable": true, 130 | "pluralName": "LineItems", 131 | "attributes": [ 132 | { 133 | "type": "model", 134 | "properties": {} 135 | } 136 | ] 137 | }, 138 | "Product": { 139 | "name": "Product", 140 | "fields": { 141 | "id": { 142 | "name": "id", 143 | "isArray": false, 144 | "type": "ID", 145 | "isRequired": true, 146 | "attributes": [] 147 | }, 148 | "sku": { 149 | "name": "sku", 150 | "isArray": false, 151 | "type": "String", 152 | "isRequired": false, 153 | "attributes": [] 154 | }, 155 | "name": { 156 | "name": "name", 157 | "isArray": false, 158 | "type": "String", 159 | "isRequired": false, 160 | "attributes": [] 161 | }, 162 | "price": { 163 | "name": "price", 164 | "isArray": false, 165 | "type": "Float", 166 | "isRequired": false, 167 | "attributes": [] 168 | }, 169 | "image": { 170 | "name": "image", 171 | "isArray": false, 172 | "type": "String", 173 | "isRequired": false, 174 | "attributes": [] 175 | } 176 | }, 177 | "syncable": true, 178 | "pluralName": "Products", 179 | "attributes": [ 180 | { 181 | "type": "model", 182 | "properties": {} 183 | } 184 | ] 185 | } 186 | }, 187 | "enums": {}, 188 | "nonModels": {}, 189 | "version": "fe64c53ee8db723eaebfc3d0a94e6551" 190 | }; -------------------------------------------------------------------------------- /src/graphql/schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "data" : { 3 | "__schema" : { 4 | "queryType" : { 5 | "name" : "Query" 6 | }, 7 | "mutationType" : { 8 | "name" : "Mutation" 9 | }, 10 | "subscriptionType" : { 11 | "name" : "Subscription" 12 | }, 13 | "types" : [ { 14 | "kind" : "OBJECT", 15 | "name" : "Query", 16 | "description" : null, 17 | "fields" : [ { 18 | "name" : "syncOrders", 19 | "description" : null, 20 | "args" : [ { 21 | "name" : "filter", 22 | "description" : null, 23 | "type" : { 24 | "kind" : "INPUT_OBJECT", 25 | "name" : "ModelOrderFilterInput", 26 | "ofType" : null 27 | }, 28 | "defaultValue" : null 29 | }, { 30 | "name" : "limit", 31 | "description" : null, 32 | "type" : { 33 | "kind" : "SCALAR", 34 | "name" : "Int", 35 | "ofType" : null 36 | }, 37 | "defaultValue" : null 38 | }, { 39 | "name" : "nextToken", 40 | "description" : null, 41 | "type" : { 42 | "kind" : "SCALAR", 43 | "name" : "String", 44 | "ofType" : null 45 | }, 46 | "defaultValue" : null 47 | }, { 48 | "name" : "lastSync", 49 | "description" : null, 50 | "type" : { 51 | "kind" : "SCALAR", 52 | "name" : "AWSTimestamp", 53 | "ofType" : null 54 | }, 55 | "defaultValue" : null 56 | } ], 57 | "type" : { 58 | "kind" : "OBJECT", 59 | "name" : "ModelOrderConnection", 60 | "ofType" : null 61 | }, 62 | "isDeprecated" : false, 63 | "deprecationReason" : null 64 | }, { 65 | "name" : "getOrder", 66 | "description" : null, 67 | "args" : [ { 68 | "name" : "id", 69 | "description" : null, 70 | "type" : { 71 | "kind" : "NON_NULL", 72 | "name" : null, 73 | "ofType" : { 74 | "kind" : "SCALAR", 75 | "name" : "ID", 76 | "ofType" : null 77 | } 78 | }, 79 | "defaultValue" : null 80 | } ], 81 | "type" : { 82 | "kind" : "OBJECT", 83 | "name" : "Order", 84 | "ofType" : null 85 | }, 86 | "isDeprecated" : false, 87 | "deprecationReason" : null 88 | }, { 89 | "name" : "listOrders", 90 | "description" : null, 91 | "args" : [ { 92 | "name" : "filter", 93 | "description" : null, 94 | "type" : { 95 | "kind" : "INPUT_OBJECT", 96 | "name" : "ModelOrderFilterInput", 97 | "ofType" : null 98 | }, 99 | "defaultValue" : null 100 | }, { 101 | "name" : "limit", 102 | "description" : null, 103 | "type" : { 104 | "kind" : "SCALAR", 105 | "name" : "Int", 106 | "ofType" : null 107 | }, 108 | "defaultValue" : null 109 | }, { 110 | "name" : "nextToken", 111 | "description" : null, 112 | "type" : { 113 | "kind" : "SCALAR", 114 | "name" : "String", 115 | "ofType" : null 116 | }, 117 | "defaultValue" : null 118 | } ], 119 | "type" : { 120 | "kind" : "OBJECT", 121 | "name" : "ModelOrderConnection", 122 | "ofType" : null 123 | }, 124 | "isDeprecated" : false, 125 | "deprecationReason" : null 126 | }, { 127 | "name" : "syncLineItems", 128 | "description" : null, 129 | "args" : [ { 130 | "name" : "filter", 131 | "description" : null, 132 | "type" : { 133 | "kind" : "INPUT_OBJECT", 134 | "name" : "ModelLineItemFilterInput", 135 | "ofType" : null 136 | }, 137 | "defaultValue" : null 138 | }, { 139 | "name" : "limit", 140 | "description" : null, 141 | "type" : { 142 | "kind" : "SCALAR", 143 | "name" : "Int", 144 | "ofType" : null 145 | }, 146 | "defaultValue" : null 147 | }, { 148 | "name" : "nextToken", 149 | "description" : null, 150 | "type" : { 151 | "kind" : "SCALAR", 152 | "name" : "String", 153 | "ofType" : null 154 | }, 155 | "defaultValue" : null 156 | }, { 157 | "name" : "lastSync", 158 | "description" : null, 159 | "type" : { 160 | "kind" : "SCALAR", 161 | "name" : "AWSTimestamp", 162 | "ofType" : null 163 | }, 164 | "defaultValue" : null 165 | } ], 166 | "type" : { 167 | "kind" : "OBJECT", 168 | "name" : "ModelLineItemConnection", 169 | "ofType" : null 170 | }, 171 | "isDeprecated" : false, 172 | "deprecationReason" : null 173 | }, { 174 | "name" : "getLineItem", 175 | "description" : null, 176 | "args" : [ { 177 | "name" : "id", 178 | "description" : null, 179 | "type" : { 180 | "kind" : "NON_NULL", 181 | "name" : null, 182 | "ofType" : { 183 | "kind" : "SCALAR", 184 | "name" : "ID", 185 | "ofType" : null 186 | } 187 | }, 188 | "defaultValue" : null 189 | } ], 190 | "type" : { 191 | "kind" : "OBJECT", 192 | "name" : "LineItem", 193 | "ofType" : null 194 | }, 195 | "isDeprecated" : false, 196 | "deprecationReason" : null 197 | }, { 198 | "name" : "listLineItems", 199 | "description" : null, 200 | "args" : [ { 201 | "name" : "filter", 202 | "description" : null, 203 | "type" : { 204 | "kind" : "INPUT_OBJECT", 205 | "name" : "ModelLineItemFilterInput", 206 | "ofType" : null 207 | }, 208 | "defaultValue" : null 209 | }, { 210 | "name" : "limit", 211 | "description" : null, 212 | "type" : { 213 | "kind" : "SCALAR", 214 | "name" : "Int", 215 | "ofType" : null 216 | }, 217 | "defaultValue" : null 218 | }, { 219 | "name" : "nextToken", 220 | "description" : null, 221 | "type" : { 222 | "kind" : "SCALAR", 223 | "name" : "String", 224 | "ofType" : null 225 | }, 226 | "defaultValue" : null 227 | } ], 228 | "type" : { 229 | "kind" : "OBJECT", 230 | "name" : "ModelLineItemConnection", 231 | "ofType" : null 232 | }, 233 | "isDeprecated" : false, 234 | "deprecationReason" : null 235 | }, { 236 | "name" : "syncProducts", 237 | "description" : null, 238 | "args" : [ { 239 | "name" : "filter", 240 | "description" : null, 241 | "type" : { 242 | "kind" : "INPUT_OBJECT", 243 | "name" : "ModelProductFilterInput", 244 | "ofType" : null 245 | }, 246 | "defaultValue" : null 247 | }, { 248 | "name" : "limit", 249 | "description" : null, 250 | "type" : { 251 | "kind" : "SCALAR", 252 | "name" : "Int", 253 | "ofType" : null 254 | }, 255 | "defaultValue" : null 256 | }, { 257 | "name" : "nextToken", 258 | "description" : null, 259 | "type" : { 260 | "kind" : "SCALAR", 261 | "name" : "String", 262 | "ofType" : null 263 | }, 264 | "defaultValue" : null 265 | }, { 266 | "name" : "lastSync", 267 | "description" : null, 268 | "type" : { 269 | "kind" : "SCALAR", 270 | "name" : "AWSTimestamp", 271 | "ofType" : null 272 | }, 273 | "defaultValue" : null 274 | } ], 275 | "type" : { 276 | "kind" : "OBJECT", 277 | "name" : "ModelProductConnection", 278 | "ofType" : null 279 | }, 280 | "isDeprecated" : false, 281 | "deprecationReason" : null 282 | }, { 283 | "name" : "getProduct", 284 | "description" : null, 285 | "args" : [ { 286 | "name" : "id", 287 | "description" : null, 288 | "type" : { 289 | "kind" : "NON_NULL", 290 | "name" : null, 291 | "ofType" : { 292 | "kind" : "SCALAR", 293 | "name" : "ID", 294 | "ofType" : null 295 | } 296 | }, 297 | "defaultValue" : null 298 | } ], 299 | "type" : { 300 | "kind" : "OBJECT", 301 | "name" : "Product", 302 | "ofType" : null 303 | }, 304 | "isDeprecated" : false, 305 | "deprecationReason" : null 306 | }, { 307 | "name" : "listProducts", 308 | "description" : null, 309 | "args" : [ { 310 | "name" : "filter", 311 | "description" : null, 312 | "type" : { 313 | "kind" : "INPUT_OBJECT", 314 | "name" : "ModelProductFilterInput", 315 | "ofType" : null 316 | }, 317 | "defaultValue" : null 318 | }, { 319 | "name" : "limit", 320 | "description" : null, 321 | "type" : { 322 | "kind" : "SCALAR", 323 | "name" : "Int", 324 | "ofType" : null 325 | }, 326 | "defaultValue" : null 327 | }, { 328 | "name" : "nextToken", 329 | "description" : null, 330 | "type" : { 331 | "kind" : "SCALAR", 332 | "name" : "String", 333 | "ofType" : null 334 | }, 335 | "defaultValue" : null 336 | } ], 337 | "type" : { 338 | "kind" : "OBJECT", 339 | "name" : "ModelProductConnection", 340 | "ofType" : null 341 | }, 342 | "isDeprecated" : false, 343 | "deprecationReason" : null 344 | } ], 345 | "inputFields" : null, 346 | "interfaces" : [ ], 347 | "enumValues" : null, 348 | "possibleTypes" : null 349 | }, { 350 | "kind" : "OBJECT", 351 | "name" : "ModelOrderConnection", 352 | "description" : null, 353 | "fields" : [ { 354 | "name" : "items", 355 | "description" : null, 356 | "args" : [ ], 357 | "type" : { 358 | "kind" : "LIST", 359 | "name" : null, 360 | "ofType" : { 361 | "kind" : "OBJECT", 362 | "name" : "Order", 363 | "ofType" : null 364 | } 365 | }, 366 | "isDeprecated" : false, 367 | "deprecationReason" : null 368 | }, { 369 | "name" : "nextToken", 370 | "description" : null, 371 | "args" : [ ], 372 | "type" : { 373 | "kind" : "SCALAR", 374 | "name" : "String", 375 | "ofType" : null 376 | }, 377 | "isDeprecated" : false, 378 | "deprecationReason" : null 379 | }, { 380 | "name" : "startedAt", 381 | "description" : null, 382 | "args" : [ ], 383 | "type" : { 384 | "kind" : "SCALAR", 385 | "name" : "AWSTimestamp", 386 | "ofType" : null 387 | }, 388 | "isDeprecated" : false, 389 | "deprecationReason" : null 390 | } ], 391 | "inputFields" : null, 392 | "interfaces" : [ ], 393 | "enumValues" : null, 394 | "possibleTypes" : null 395 | }, { 396 | "kind" : "OBJECT", 397 | "name" : "Order", 398 | "description" : null, 399 | "fields" : [ { 400 | "name" : "id", 401 | "description" : null, 402 | "args" : [ ], 403 | "type" : { 404 | "kind" : "NON_NULL", 405 | "name" : null, 406 | "ofType" : { 407 | "kind" : "SCALAR", 408 | "name" : "ID", 409 | "ofType" : null 410 | } 411 | }, 412 | "isDeprecated" : false, 413 | "deprecationReason" : null 414 | }, { 415 | "name" : "total", 416 | "description" : null, 417 | "args" : [ ], 418 | "type" : { 419 | "kind" : "SCALAR", 420 | "name" : "Float", 421 | "ofType" : null 422 | }, 423 | "isDeprecated" : false, 424 | "deprecationReason" : null 425 | }, { 426 | "name" : "subtotal", 427 | "description" : null, 428 | "args" : [ ], 429 | "type" : { 430 | "kind" : "SCALAR", 431 | "name" : "Float", 432 | "ofType" : null 433 | }, 434 | "isDeprecated" : false, 435 | "deprecationReason" : null 436 | }, { 437 | "name" : "tax", 438 | "description" : null, 439 | "args" : [ ], 440 | "type" : { 441 | "kind" : "SCALAR", 442 | "name" : "Float", 443 | "ofType" : null 444 | }, 445 | "isDeprecated" : false, 446 | "deprecationReason" : null 447 | }, { 448 | "name" : "createdAt", 449 | "description" : null, 450 | "args" : [ ], 451 | "type" : { 452 | "kind" : "NON_NULL", 453 | "name" : null, 454 | "ofType" : { 455 | "kind" : "SCALAR", 456 | "name" : "String", 457 | "ofType" : null 458 | } 459 | }, 460 | "isDeprecated" : false, 461 | "deprecationReason" : null 462 | }, { 463 | "name" : "lineItems", 464 | "description" : null, 465 | "args" : [ { 466 | "name" : "filter", 467 | "description" : null, 468 | "type" : { 469 | "kind" : "INPUT_OBJECT", 470 | "name" : "ModelLineItemFilterInput", 471 | "ofType" : null 472 | }, 473 | "defaultValue" : null 474 | }, { 475 | "name" : "sortDirection", 476 | "description" : null, 477 | "type" : { 478 | "kind" : "ENUM", 479 | "name" : "ModelSortDirection", 480 | "ofType" : null 481 | }, 482 | "defaultValue" : null 483 | }, { 484 | "name" : "limit", 485 | "description" : null, 486 | "type" : { 487 | "kind" : "SCALAR", 488 | "name" : "Int", 489 | "ofType" : null 490 | }, 491 | "defaultValue" : null 492 | }, { 493 | "name" : "nextToken", 494 | "description" : null, 495 | "type" : { 496 | "kind" : "SCALAR", 497 | "name" : "String", 498 | "ofType" : null 499 | }, 500 | "defaultValue" : null 501 | } ], 502 | "type" : { 503 | "kind" : "OBJECT", 504 | "name" : "ModelLineItemConnection", 505 | "ofType" : null 506 | }, 507 | "isDeprecated" : false, 508 | "deprecationReason" : null 509 | }, { 510 | "name" : "_version", 511 | "description" : null, 512 | "args" : [ ], 513 | "type" : { 514 | "kind" : "NON_NULL", 515 | "name" : null, 516 | "ofType" : { 517 | "kind" : "SCALAR", 518 | "name" : "Int", 519 | "ofType" : null 520 | } 521 | }, 522 | "isDeprecated" : false, 523 | "deprecationReason" : null 524 | }, { 525 | "name" : "_deleted", 526 | "description" : null, 527 | "args" : [ ], 528 | "type" : { 529 | "kind" : "SCALAR", 530 | "name" : "Boolean", 531 | "ofType" : null 532 | }, 533 | "isDeprecated" : false, 534 | "deprecationReason" : null 535 | }, { 536 | "name" : "_lastChangedAt", 537 | "description" : null, 538 | "args" : [ ], 539 | "type" : { 540 | "kind" : "NON_NULL", 541 | "name" : null, 542 | "ofType" : { 543 | "kind" : "SCALAR", 544 | "name" : "AWSTimestamp", 545 | "ofType" : null 546 | } 547 | }, 548 | "isDeprecated" : false, 549 | "deprecationReason" : null 550 | } ], 551 | "inputFields" : null, 552 | "interfaces" : [ ], 553 | "enumValues" : null, 554 | "possibleTypes" : null 555 | }, { 556 | "kind" : "SCALAR", 557 | "name" : "ID", 558 | "description" : "Built-in ID", 559 | "fields" : null, 560 | "inputFields" : null, 561 | "interfaces" : null, 562 | "enumValues" : null, 563 | "possibleTypes" : null 564 | }, { 565 | "kind" : "SCALAR", 566 | "name" : "Float", 567 | "description" : "Built-in Float", 568 | "fields" : null, 569 | "inputFields" : null, 570 | "interfaces" : null, 571 | "enumValues" : null, 572 | "possibleTypes" : null 573 | }, { 574 | "kind" : "SCALAR", 575 | "name" : "String", 576 | "description" : "Built-in String", 577 | "fields" : null, 578 | "inputFields" : null, 579 | "interfaces" : null, 580 | "enumValues" : null, 581 | "possibleTypes" : null 582 | }, { 583 | "kind" : "OBJECT", 584 | "name" : "ModelLineItemConnection", 585 | "description" : null, 586 | "fields" : [ { 587 | "name" : "items", 588 | "description" : null, 589 | "args" : [ ], 590 | "type" : { 591 | "kind" : "LIST", 592 | "name" : null, 593 | "ofType" : { 594 | "kind" : "OBJECT", 595 | "name" : "LineItem", 596 | "ofType" : null 597 | } 598 | }, 599 | "isDeprecated" : false, 600 | "deprecationReason" : null 601 | }, { 602 | "name" : "nextToken", 603 | "description" : null, 604 | "args" : [ ], 605 | "type" : { 606 | "kind" : "SCALAR", 607 | "name" : "String", 608 | "ofType" : null 609 | }, 610 | "isDeprecated" : false, 611 | "deprecationReason" : null 612 | }, { 613 | "name" : "startedAt", 614 | "description" : null, 615 | "args" : [ ], 616 | "type" : { 617 | "kind" : "SCALAR", 618 | "name" : "AWSTimestamp", 619 | "ofType" : null 620 | }, 621 | "isDeprecated" : false, 622 | "deprecationReason" : null 623 | } ], 624 | "inputFields" : null, 625 | "interfaces" : [ ], 626 | "enumValues" : null, 627 | "possibleTypes" : null 628 | }, { 629 | "kind" : "OBJECT", 630 | "name" : "LineItem", 631 | "description" : null, 632 | "fields" : [ { 633 | "name" : "id", 634 | "description" : null, 635 | "args" : [ ], 636 | "type" : { 637 | "kind" : "NON_NULL", 638 | "name" : null, 639 | "ofType" : { 640 | "kind" : "SCALAR", 641 | "name" : "ID", 642 | "ofType" : null 643 | } 644 | }, 645 | "isDeprecated" : false, 646 | "deprecationReason" : null 647 | }, { 648 | "name" : "qty", 649 | "description" : null, 650 | "args" : [ ], 651 | "type" : { 652 | "kind" : "SCALAR", 653 | "name" : "Int", 654 | "ofType" : null 655 | }, 656 | "isDeprecated" : false, 657 | "deprecationReason" : null 658 | }, { 659 | "name" : "order", 660 | "description" : null, 661 | "args" : [ ], 662 | "type" : { 663 | "kind" : "OBJECT", 664 | "name" : "Order", 665 | "ofType" : null 666 | }, 667 | "isDeprecated" : false, 668 | "deprecationReason" : null 669 | }, { 670 | "name" : "product", 671 | "description" : null, 672 | "args" : [ ], 673 | "type" : { 674 | "kind" : "OBJECT", 675 | "name" : "Product", 676 | "ofType" : null 677 | }, 678 | "isDeprecated" : false, 679 | "deprecationReason" : null 680 | }, { 681 | "name" : "description", 682 | "description" : null, 683 | "args" : [ ], 684 | "type" : { 685 | "kind" : "SCALAR", 686 | "name" : "String", 687 | "ofType" : null 688 | }, 689 | "isDeprecated" : false, 690 | "deprecationReason" : null 691 | }, { 692 | "name" : "price", 693 | "description" : null, 694 | "args" : [ ], 695 | "type" : { 696 | "kind" : "SCALAR", 697 | "name" : "Float", 698 | "ofType" : null 699 | }, 700 | "isDeprecated" : false, 701 | "deprecationReason" : null 702 | }, { 703 | "name" : "total", 704 | "description" : null, 705 | "args" : [ ], 706 | "type" : { 707 | "kind" : "SCALAR", 708 | "name" : "Float", 709 | "ofType" : null 710 | }, 711 | "isDeprecated" : false, 712 | "deprecationReason" : null 713 | }, { 714 | "name" : "_version", 715 | "description" : null, 716 | "args" : [ ], 717 | "type" : { 718 | "kind" : "NON_NULL", 719 | "name" : null, 720 | "ofType" : { 721 | "kind" : "SCALAR", 722 | "name" : "Int", 723 | "ofType" : null 724 | } 725 | }, 726 | "isDeprecated" : false, 727 | "deprecationReason" : null 728 | }, { 729 | "name" : "_deleted", 730 | "description" : null, 731 | "args" : [ ], 732 | "type" : { 733 | "kind" : "SCALAR", 734 | "name" : "Boolean", 735 | "ofType" : null 736 | }, 737 | "isDeprecated" : false, 738 | "deprecationReason" : null 739 | }, { 740 | "name" : "_lastChangedAt", 741 | "description" : null, 742 | "args" : [ ], 743 | "type" : { 744 | "kind" : "NON_NULL", 745 | "name" : null, 746 | "ofType" : { 747 | "kind" : "SCALAR", 748 | "name" : "AWSTimestamp", 749 | "ofType" : null 750 | } 751 | }, 752 | "isDeprecated" : false, 753 | "deprecationReason" : null 754 | } ], 755 | "inputFields" : null, 756 | "interfaces" : [ ], 757 | "enumValues" : null, 758 | "possibleTypes" : null 759 | }, { 760 | "kind" : "SCALAR", 761 | "name" : "Int", 762 | "description" : "Built-in Int", 763 | "fields" : null, 764 | "inputFields" : null, 765 | "interfaces" : null, 766 | "enumValues" : null, 767 | "possibleTypes" : null 768 | }, { 769 | "kind" : "OBJECT", 770 | "name" : "Product", 771 | "description" : null, 772 | "fields" : [ { 773 | "name" : "id", 774 | "description" : null, 775 | "args" : [ ], 776 | "type" : { 777 | "kind" : "SCALAR", 778 | "name" : "ID", 779 | "ofType" : null 780 | }, 781 | "isDeprecated" : false, 782 | "deprecationReason" : null 783 | }, { 784 | "name" : "sku", 785 | "description" : null, 786 | "args" : [ ], 787 | "type" : { 788 | "kind" : "SCALAR", 789 | "name" : "String", 790 | "ofType" : null 791 | }, 792 | "isDeprecated" : false, 793 | "deprecationReason" : null 794 | }, { 795 | "name" : "name", 796 | "description" : null, 797 | "args" : [ ], 798 | "type" : { 799 | "kind" : "SCALAR", 800 | "name" : "String", 801 | "ofType" : null 802 | }, 803 | "isDeprecated" : false, 804 | "deprecationReason" : null 805 | }, { 806 | "name" : "price", 807 | "description" : null, 808 | "args" : [ ], 809 | "type" : { 810 | "kind" : "SCALAR", 811 | "name" : "Float", 812 | "ofType" : null 813 | }, 814 | "isDeprecated" : false, 815 | "deprecationReason" : null 816 | }, { 817 | "name" : "image", 818 | "description" : null, 819 | "args" : [ ], 820 | "type" : { 821 | "kind" : "SCALAR", 822 | "name" : "String", 823 | "ofType" : null 824 | }, 825 | "isDeprecated" : false, 826 | "deprecationReason" : null 827 | }, { 828 | "name" : "_version", 829 | "description" : null, 830 | "args" : [ ], 831 | "type" : { 832 | "kind" : "NON_NULL", 833 | "name" : null, 834 | "ofType" : { 835 | "kind" : "SCALAR", 836 | "name" : "Int", 837 | "ofType" : null 838 | } 839 | }, 840 | "isDeprecated" : false, 841 | "deprecationReason" : null 842 | }, { 843 | "name" : "_deleted", 844 | "description" : null, 845 | "args" : [ ], 846 | "type" : { 847 | "kind" : "SCALAR", 848 | "name" : "Boolean", 849 | "ofType" : null 850 | }, 851 | "isDeprecated" : false, 852 | "deprecationReason" : null 853 | }, { 854 | "name" : "_lastChangedAt", 855 | "description" : null, 856 | "args" : [ ], 857 | "type" : { 858 | "kind" : "NON_NULL", 859 | "name" : null, 860 | "ofType" : { 861 | "kind" : "SCALAR", 862 | "name" : "AWSTimestamp", 863 | "ofType" : null 864 | } 865 | }, 866 | "isDeprecated" : false, 867 | "deprecationReason" : null 868 | } ], 869 | "inputFields" : null, 870 | "interfaces" : [ ], 871 | "enumValues" : null, 872 | "possibleTypes" : null 873 | }, { 874 | "kind" : "SCALAR", 875 | "name" : "Boolean", 876 | "description" : "Built-in Boolean", 877 | "fields" : null, 878 | "inputFields" : null, 879 | "interfaces" : null, 880 | "enumValues" : null, 881 | "possibleTypes" : null 882 | }, { 883 | "kind" : "SCALAR", 884 | "name" : "AWSTimestamp", 885 | "description" : "The `AWSTimestamp` scalar type provided by AWS AppSync, represents the number of seconds that have elapsed since `1970-01-01T00:00Z`. Negative values are also accepted and these represent the number of seconds till `1970-01-01T00:00Z`. Timestamps are serialized and deserialized as integers. The minimum supported timestamp value is **`-31557014167219200`** which corresponds to `-1000000000-01-01T00:00Z`. The maximum supported timestamp value is **`31556889864403199`** which corresponds to `1000000000-12-31T23:59:59.999999999Z`.", 886 | "fields" : null, 887 | "inputFields" : null, 888 | "interfaces" : null, 889 | "enumValues" : null, 890 | "possibleTypes" : null 891 | }, { 892 | "kind" : "INPUT_OBJECT", 893 | "name" : "ModelLineItemFilterInput", 894 | "description" : null, 895 | "fields" : null, 896 | "inputFields" : [ { 897 | "name" : "id", 898 | "description" : null, 899 | "type" : { 900 | "kind" : "INPUT_OBJECT", 901 | "name" : "ModelIDInput", 902 | "ofType" : null 903 | }, 904 | "defaultValue" : null 905 | }, { 906 | "name" : "qty", 907 | "description" : null, 908 | "type" : { 909 | "kind" : "INPUT_OBJECT", 910 | "name" : "ModelIntInput", 911 | "ofType" : null 912 | }, 913 | "defaultValue" : null 914 | }, { 915 | "name" : "description", 916 | "description" : null, 917 | "type" : { 918 | "kind" : "INPUT_OBJECT", 919 | "name" : "ModelStringInput", 920 | "ofType" : null 921 | }, 922 | "defaultValue" : null 923 | }, { 924 | "name" : "price", 925 | "description" : null, 926 | "type" : { 927 | "kind" : "INPUT_OBJECT", 928 | "name" : "ModelFloatInput", 929 | "ofType" : null 930 | }, 931 | "defaultValue" : null 932 | }, { 933 | "name" : "total", 934 | "description" : null, 935 | "type" : { 936 | "kind" : "INPUT_OBJECT", 937 | "name" : "ModelFloatInput", 938 | "ofType" : null 939 | }, 940 | "defaultValue" : null 941 | }, { 942 | "name" : "and", 943 | "description" : null, 944 | "type" : { 945 | "kind" : "LIST", 946 | "name" : null, 947 | "ofType" : { 948 | "kind" : "INPUT_OBJECT", 949 | "name" : "ModelLineItemFilterInput", 950 | "ofType" : null 951 | } 952 | }, 953 | "defaultValue" : null 954 | }, { 955 | "name" : "or", 956 | "description" : null, 957 | "type" : { 958 | "kind" : "LIST", 959 | "name" : null, 960 | "ofType" : { 961 | "kind" : "INPUT_OBJECT", 962 | "name" : "ModelLineItemFilterInput", 963 | "ofType" : null 964 | } 965 | }, 966 | "defaultValue" : null 967 | }, { 968 | "name" : "not", 969 | "description" : null, 970 | "type" : { 971 | "kind" : "INPUT_OBJECT", 972 | "name" : "ModelLineItemFilterInput", 973 | "ofType" : null 974 | }, 975 | "defaultValue" : null 976 | } ], 977 | "interfaces" : null, 978 | "enumValues" : null, 979 | "possibleTypes" : null 980 | }, { 981 | "kind" : "INPUT_OBJECT", 982 | "name" : "ModelIDInput", 983 | "description" : null, 984 | "fields" : null, 985 | "inputFields" : [ { 986 | "name" : "ne", 987 | "description" : null, 988 | "type" : { 989 | "kind" : "SCALAR", 990 | "name" : "ID", 991 | "ofType" : null 992 | }, 993 | "defaultValue" : null 994 | }, { 995 | "name" : "eq", 996 | "description" : null, 997 | "type" : { 998 | "kind" : "SCALAR", 999 | "name" : "ID", 1000 | "ofType" : null 1001 | }, 1002 | "defaultValue" : null 1003 | }, { 1004 | "name" : "le", 1005 | "description" : null, 1006 | "type" : { 1007 | "kind" : "SCALAR", 1008 | "name" : "ID", 1009 | "ofType" : null 1010 | }, 1011 | "defaultValue" : null 1012 | }, { 1013 | "name" : "lt", 1014 | "description" : null, 1015 | "type" : { 1016 | "kind" : "SCALAR", 1017 | "name" : "ID", 1018 | "ofType" : null 1019 | }, 1020 | "defaultValue" : null 1021 | }, { 1022 | "name" : "ge", 1023 | "description" : null, 1024 | "type" : { 1025 | "kind" : "SCALAR", 1026 | "name" : "ID", 1027 | "ofType" : null 1028 | }, 1029 | "defaultValue" : null 1030 | }, { 1031 | "name" : "gt", 1032 | "description" : null, 1033 | "type" : { 1034 | "kind" : "SCALAR", 1035 | "name" : "ID", 1036 | "ofType" : null 1037 | }, 1038 | "defaultValue" : null 1039 | }, { 1040 | "name" : "contains", 1041 | "description" : null, 1042 | "type" : { 1043 | "kind" : "SCALAR", 1044 | "name" : "ID", 1045 | "ofType" : null 1046 | }, 1047 | "defaultValue" : null 1048 | }, { 1049 | "name" : "notContains", 1050 | "description" : null, 1051 | "type" : { 1052 | "kind" : "SCALAR", 1053 | "name" : "ID", 1054 | "ofType" : null 1055 | }, 1056 | "defaultValue" : null 1057 | }, { 1058 | "name" : "between", 1059 | "description" : null, 1060 | "type" : { 1061 | "kind" : "LIST", 1062 | "name" : null, 1063 | "ofType" : { 1064 | "kind" : "SCALAR", 1065 | "name" : "ID", 1066 | "ofType" : null 1067 | } 1068 | }, 1069 | "defaultValue" : null 1070 | }, { 1071 | "name" : "beginsWith", 1072 | "description" : null, 1073 | "type" : { 1074 | "kind" : "SCALAR", 1075 | "name" : "ID", 1076 | "ofType" : null 1077 | }, 1078 | "defaultValue" : null 1079 | }, { 1080 | "name" : "attributeExists", 1081 | "description" : null, 1082 | "type" : { 1083 | "kind" : "SCALAR", 1084 | "name" : "Boolean", 1085 | "ofType" : null 1086 | }, 1087 | "defaultValue" : null 1088 | }, { 1089 | "name" : "attributeType", 1090 | "description" : null, 1091 | "type" : { 1092 | "kind" : "ENUM", 1093 | "name" : "ModelAttributeTypes", 1094 | "ofType" : null 1095 | }, 1096 | "defaultValue" : null 1097 | }, { 1098 | "name" : "size", 1099 | "description" : null, 1100 | "type" : { 1101 | "kind" : "INPUT_OBJECT", 1102 | "name" : "ModelSizeInput", 1103 | "ofType" : null 1104 | }, 1105 | "defaultValue" : null 1106 | } ], 1107 | "interfaces" : null, 1108 | "enumValues" : null, 1109 | "possibleTypes" : null 1110 | }, { 1111 | "kind" : "ENUM", 1112 | "name" : "ModelAttributeTypes", 1113 | "description" : null, 1114 | "fields" : null, 1115 | "inputFields" : null, 1116 | "interfaces" : null, 1117 | "enumValues" : [ { 1118 | "name" : "binary", 1119 | "description" : null, 1120 | "isDeprecated" : false, 1121 | "deprecationReason" : null 1122 | }, { 1123 | "name" : "binarySet", 1124 | "description" : null, 1125 | "isDeprecated" : false, 1126 | "deprecationReason" : null 1127 | }, { 1128 | "name" : "bool", 1129 | "description" : null, 1130 | "isDeprecated" : false, 1131 | "deprecationReason" : null 1132 | }, { 1133 | "name" : "list", 1134 | "description" : null, 1135 | "isDeprecated" : false, 1136 | "deprecationReason" : null 1137 | }, { 1138 | "name" : "map", 1139 | "description" : null, 1140 | "isDeprecated" : false, 1141 | "deprecationReason" : null 1142 | }, { 1143 | "name" : "number", 1144 | "description" : null, 1145 | "isDeprecated" : false, 1146 | "deprecationReason" : null 1147 | }, { 1148 | "name" : "numberSet", 1149 | "description" : null, 1150 | "isDeprecated" : false, 1151 | "deprecationReason" : null 1152 | }, { 1153 | "name" : "string", 1154 | "description" : null, 1155 | "isDeprecated" : false, 1156 | "deprecationReason" : null 1157 | }, { 1158 | "name" : "stringSet", 1159 | "description" : null, 1160 | "isDeprecated" : false, 1161 | "deprecationReason" : null 1162 | }, { 1163 | "name" : "_null", 1164 | "description" : null, 1165 | "isDeprecated" : false, 1166 | "deprecationReason" : null 1167 | } ], 1168 | "possibleTypes" : null 1169 | }, { 1170 | "kind" : "INPUT_OBJECT", 1171 | "name" : "ModelSizeInput", 1172 | "description" : null, 1173 | "fields" : null, 1174 | "inputFields" : [ { 1175 | "name" : "ne", 1176 | "description" : null, 1177 | "type" : { 1178 | "kind" : "SCALAR", 1179 | "name" : "Int", 1180 | "ofType" : null 1181 | }, 1182 | "defaultValue" : null 1183 | }, { 1184 | "name" : "eq", 1185 | "description" : null, 1186 | "type" : { 1187 | "kind" : "SCALAR", 1188 | "name" : "Int", 1189 | "ofType" : null 1190 | }, 1191 | "defaultValue" : null 1192 | }, { 1193 | "name" : "le", 1194 | "description" : null, 1195 | "type" : { 1196 | "kind" : "SCALAR", 1197 | "name" : "Int", 1198 | "ofType" : null 1199 | }, 1200 | "defaultValue" : null 1201 | }, { 1202 | "name" : "lt", 1203 | "description" : null, 1204 | "type" : { 1205 | "kind" : "SCALAR", 1206 | "name" : "Int", 1207 | "ofType" : null 1208 | }, 1209 | "defaultValue" : null 1210 | }, { 1211 | "name" : "ge", 1212 | "description" : null, 1213 | "type" : { 1214 | "kind" : "SCALAR", 1215 | "name" : "Int", 1216 | "ofType" : null 1217 | }, 1218 | "defaultValue" : null 1219 | }, { 1220 | "name" : "gt", 1221 | "description" : null, 1222 | "type" : { 1223 | "kind" : "SCALAR", 1224 | "name" : "Int", 1225 | "ofType" : null 1226 | }, 1227 | "defaultValue" : null 1228 | }, { 1229 | "name" : "between", 1230 | "description" : null, 1231 | "type" : { 1232 | "kind" : "LIST", 1233 | "name" : null, 1234 | "ofType" : { 1235 | "kind" : "SCALAR", 1236 | "name" : "Int", 1237 | "ofType" : null 1238 | } 1239 | }, 1240 | "defaultValue" : null 1241 | } ], 1242 | "interfaces" : null, 1243 | "enumValues" : null, 1244 | "possibleTypes" : null 1245 | }, { 1246 | "kind" : "INPUT_OBJECT", 1247 | "name" : "ModelIntInput", 1248 | "description" : null, 1249 | "fields" : null, 1250 | "inputFields" : [ { 1251 | "name" : "ne", 1252 | "description" : null, 1253 | "type" : { 1254 | "kind" : "SCALAR", 1255 | "name" : "Int", 1256 | "ofType" : null 1257 | }, 1258 | "defaultValue" : null 1259 | }, { 1260 | "name" : "eq", 1261 | "description" : null, 1262 | "type" : { 1263 | "kind" : "SCALAR", 1264 | "name" : "Int", 1265 | "ofType" : null 1266 | }, 1267 | "defaultValue" : null 1268 | }, { 1269 | "name" : "le", 1270 | "description" : null, 1271 | "type" : { 1272 | "kind" : "SCALAR", 1273 | "name" : "Int", 1274 | "ofType" : null 1275 | }, 1276 | "defaultValue" : null 1277 | }, { 1278 | "name" : "lt", 1279 | "description" : null, 1280 | "type" : { 1281 | "kind" : "SCALAR", 1282 | "name" : "Int", 1283 | "ofType" : null 1284 | }, 1285 | "defaultValue" : null 1286 | }, { 1287 | "name" : "ge", 1288 | "description" : null, 1289 | "type" : { 1290 | "kind" : "SCALAR", 1291 | "name" : "Int", 1292 | "ofType" : null 1293 | }, 1294 | "defaultValue" : null 1295 | }, { 1296 | "name" : "gt", 1297 | "description" : null, 1298 | "type" : { 1299 | "kind" : "SCALAR", 1300 | "name" : "Int", 1301 | "ofType" : null 1302 | }, 1303 | "defaultValue" : null 1304 | }, { 1305 | "name" : "between", 1306 | "description" : null, 1307 | "type" : { 1308 | "kind" : "LIST", 1309 | "name" : null, 1310 | "ofType" : { 1311 | "kind" : "SCALAR", 1312 | "name" : "Int", 1313 | "ofType" : null 1314 | } 1315 | }, 1316 | "defaultValue" : null 1317 | }, { 1318 | "name" : "attributeExists", 1319 | "description" : null, 1320 | "type" : { 1321 | "kind" : "SCALAR", 1322 | "name" : "Boolean", 1323 | "ofType" : null 1324 | }, 1325 | "defaultValue" : null 1326 | }, { 1327 | "name" : "attributeType", 1328 | "description" : null, 1329 | "type" : { 1330 | "kind" : "ENUM", 1331 | "name" : "ModelAttributeTypes", 1332 | "ofType" : null 1333 | }, 1334 | "defaultValue" : null 1335 | } ], 1336 | "interfaces" : null, 1337 | "enumValues" : null, 1338 | "possibleTypes" : null 1339 | }, { 1340 | "kind" : "INPUT_OBJECT", 1341 | "name" : "ModelStringInput", 1342 | "description" : null, 1343 | "fields" : null, 1344 | "inputFields" : [ { 1345 | "name" : "ne", 1346 | "description" : null, 1347 | "type" : { 1348 | "kind" : "SCALAR", 1349 | "name" : "String", 1350 | "ofType" : null 1351 | }, 1352 | "defaultValue" : null 1353 | }, { 1354 | "name" : "eq", 1355 | "description" : null, 1356 | "type" : { 1357 | "kind" : "SCALAR", 1358 | "name" : "String", 1359 | "ofType" : null 1360 | }, 1361 | "defaultValue" : null 1362 | }, { 1363 | "name" : "le", 1364 | "description" : null, 1365 | "type" : { 1366 | "kind" : "SCALAR", 1367 | "name" : "String", 1368 | "ofType" : null 1369 | }, 1370 | "defaultValue" : null 1371 | }, { 1372 | "name" : "lt", 1373 | "description" : null, 1374 | "type" : { 1375 | "kind" : "SCALAR", 1376 | "name" : "String", 1377 | "ofType" : null 1378 | }, 1379 | "defaultValue" : null 1380 | }, { 1381 | "name" : "ge", 1382 | "description" : null, 1383 | "type" : { 1384 | "kind" : "SCALAR", 1385 | "name" : "String", 1386 | "ofType" : null 1387 | }, 1388 | "defaultValue" : null 1389 | }, { 1390 | "name" : "gt", 1391 | "description" : null, 1392 | "type" : { 1393 | "kind" : "SCALAR", 1394 | "name" : "String", 1395 | "ofType" : null 1396 | }, 1397 | "defaultValue" : null 1398 | }, { 1399 | "name" : "contains", 1400 | "description" : null, 1401 | "type" : { 1402 | "kind" : "SCALAR", 1403 | "name" : "String", 1404 | "ofType" : null 1405 | }, 1406 | "defaultValue" : null 1407 | }, { 1408 | "name" : "notContains", 1409 | "description" : null, 1410 | "type" : { 1411 | "kind" : "SCALAR", 1412 | "name" : "String", 1413 | "ofType" : null 1414 | }, 1415 | "defaultValue" : null 1416 | }, { 1417 | "name" : "between", 1418 | "description" : null, 1419 | "type" : { 1420 | "kind" : "LIST", 1421 | "name" : null, 1422 | "ofType" : { 1423 | "kind" : "SCALAR", 1424 | "name" : "String", 1425 | "ofType" : null 1426 | } 1427 | }, 1428 | "defaultValue" : null 1429 | }, { 1430 | "name" : "beginsWith", 1431 | "description" : null, 1432 | "type" : { 1433 | "kind" : "SCALAR", 1434 | "name" : "String", 1435 | "ofType" : null 1436 | }, 1437 | "defaultValue" : null 1438 | }, { 1439 | "name" : "attributeExists", 1440 | "description" : null, 1441 | "type" : { 1442 | "kind" : "SCALAR", 1443 | "name" : "Boolean", 1444 | "ofType" : null 1445 | }, 1446 | "defaultValue" : null 1447 | }, { 1448 | "name" : "attributeType", 1449 | "description" : null, 1450 | "type" : { 1451 | "kind" : "ENUM", 1452 | "name" : "ModelAttributeTypes", 1453 | "ofType" : null 1454 | }, 1455 | "defaultValue" : null 1456 | }, { 1457 | "name" : "size", 1458 | "description" : null, 1459 | "type" : { 1460 | "kind" : "INPUT_OBJECT", 1461 | "name" : "ModelSizeInput", 1462 | "ofType" : null 1463 | }, 1464 | "defaultValue" : null 1465 | } ], 1466 | "interfaces" : null, 1467 | "enumValues" : null, 1468 | "possibleTypes" : null 1469 | }, { 1470 | "kind" : "INPUT_OBJECT", 1471 | "name" : "ModelFloatInput", 1472 | "description" : null, 1473 | "fields" : null, 1474 | "inputFields" : [ { 1475 | "name" : "ne", 1476 | "description" : null, 1477 | "type" : { 1478 | "kind" : "SCALAR", 1479 | "name" : "Float", 1480 | "ofType" : null 1481 | }, 1482 | "defaultValue" : null 1483 | }, { 1484 | "name" : "eq", 1485 | "description" : null, 1486 | "type" : { 1487 | "kind" : "SCALAR", 1488 | "name" : "Float", 1489 | "ofType" : null 1490 | }, 1491 | "defaultValue" : null 1492 | }, { 1493 | "name" : "le", 1494 | "description" : null, 1495 | "type" : { 1496 | "kind" : "SCALAR", 1497 | "name" : "Float", 1498 | "ofType" : null 1499 | }, 1500 | "defaultValue" : null 1501 | }, { 1502 | "name" : "lt", 1503 | "description" : null, 1504 | "type" : { 1505 | "kind" : "SCALAR", 1506 | "name" : "Float", 1507 | "ofType" : null 1508 | }, 1509 | "defaultValue" : null 1510 | }, { 1511 | "name" : "ge", 1512 | "description" : null, 1513 | "type" : { 1514 | "kind" : "SCALAR", 1515 | "name" : "Float", 1516 | "ofType" : null 1517 | }, 1518 | "defaultValue" : null 1519 | }, { 1520 | "name" : "gt", 1521 | "description" : null, 1522 | "type" : { 1523 | "kind" : "SCALAR", 1524 | "name" : "Float", 1525 | "ofType" : null 1526 | }, 1527 | "defaultValue" : null 1528 | }, { 1529 | "name" : "between", 1530 | "description" : null, 1531 | "type" : { 1532 | "kind" : "LIST", 1533 | "name" : null, 1534 | "ofType" : { 1535 | "kind" : "SCALAR", 1536 | "name" : "Float", 1537 | "ofType" : null 1538 | } 1539 | }, 1540 | "defaultValue" : null 1541 | }, { 1542 | "name" : "attributeExists", 1543 | "description" : null, 1544 | "type" : { 1545 | "kind" : "SCALAR", 1546 | "name" : "Boolean", 1547 | "ofType" : null 1548 | }, 1549 | "defaultValue" : null 1550 | }, { 1551 | "name" : "attributeType", 1552 | "description" : null, 1553 | "type" : { 1554 | "kind" : "ENUM", 1555 | "name" : "ModelAttributeTypes", 1556 | "ofType" : null 1557 | }, 1558 | "defaultValue" : null 1559 | } ], 1560 | "interfaces" : null, 1561 | "enumValues" : null, 1562 | "possibleTypes" : null 1563 | }, { 1564 | "kind" : "ENUM", 1565 | "name" : "ModelSortDirection", 1566 | "description" : null, 1567 | "fields" : null, 1568 | "inputFields" : null, 1569 | "interfaces" : null, 1570 | "enumValues" : [ { 1571 | "name" : "ASC", 1572 | "description" : null, 1573 | "isDeprecated" : false, 1574 | "deprecationReason" : null 1575 | }, { 1576 | "name" : "DESC", 1577 | "description" : null, 1578 | "isDeprecated" : false, 1579 | "deprecationReason" : null 1580 | } ], 1581 | "possibleTypes" : null 1582 | }, { 1583 | "kind" : "INPUT_OBJECT", 1584 | "name" : "ModelOrderFilterInput", 1585 | "description" : null, 1586 | "fields" : null, 1587 | "inputFields" : [ { 1588 | "name" : "id", 1589 | "description" : null, 1590 | "type" : { 1591 | "kind" : "INPUT_OBJECT", 1592 | "name" : "ModelIDInput", 1593 | "ofType" : null 1594 | }, 1595 | "defaultValue" : null 1596 | }, { 1597 | "name" : "total", 1598 | "description" : null, 1599 | "type" : { 1600 | "kind" : "INPUT_OBJECT", 1601 | "name" : "ModelFloatInput", 1602 | "ofType" : null 1603 | }, 1604 | "defaultValue" : null 1605 | }, { 1606 | "name" : "subtotal", 1607 | "description" : null, 1608 | "type" : { 1609 | "kind" : "INPUT_OBJECT", 1610 | "name" : "ModelFloatInput", 1611 | "ofType" : null 1612 | }, 1613 | "defaultValue" : null 1614 | }, { 1615 | "name" : "tax", 1616 | "description" : null, 1617 | "type" : { 1618 | "kind" : "INPUT_OBJECT", 1619 | "name" : "ModelFloatInput", 1620 | "ofType" : null 1621 | }, 1622 | "defaultValue" : null 1623 | }, { 1624 | "name" : "createdAt", 1625 | "description" : null, 1626 | "type" : { 1627 | "kind" : "INPUT_OBJECT", 1628 | "name" : "ModelStringInput", 1629 | "ofType" : null 1630 | }, 1631 | "defaultValue" : null 1632 | }, { 1633 | "name" : "and", 1634 | "description" : null, 1635 | "type" : { 1636 | "kind" : "LIST", 1637 | "name" : null, 1638 | "ofType" : { 1639 | "kind" : "INPUT_OBJECT", 1640 | "name" : "ModelOrderFilterInput", 1641 | "ofType" : null 1642 | } 1643 | }, 1644 | "defaultValue" : null 1645 | }, { 1646 | "name" : "or", 1647 | "description" : null, 1648 | "type" : { 1649 | "kind" : "LIST", 1650 | "name" : null, 1651 | "ofType" : { 1652 | "kind" : "INPUT_OBJECT", 1653 | "name" : "ModelOrderFilterInput", 1654 | "ofType" : null 1655 | } 1656 | }, 1657 | "defaultValue" : null 1658 | }, { 1659 | "name" : "not", 1660 | "description" : null, 1661 | "type" : { 1662 | "kind" : "INPUT_OBJECT", 1663 | "name" : "ModelOrderFilterInput", 1664 | "ofType" : null 1665 | }, 1666 | "defaultValue" : null 1667 | } ], 1668 | "interfaces" : null, 1669 | "enumValues" : null, 1670 | "possibleTypes" : null 1671 | }, { 1672 | "kind" : "OBJECT", 1673 | "name" : "ModelProductConnection", 1674 | "description" : null, 1675 | "fields" : [ { 1676 | "name" : "items", 1677 | "description" : null, 1678 | "args" : [ ], 1679 | "type" : { 1680 | "kind" : "LIST", 1681 | "name" : null, 1682 | "ofType" : { 1683 | "kind" : "OBJECT", 1684 | "name" : "Product", 1685 | "ofType" : null 1686 | } 1687 | }, 1688 | "isDeprecated" : false, 1689 | "deprecationReason" : null 1690 | }, { 1691 | "name" : "nextToken", 1692 | "description" : null, 1693 | "args" : [ ], 1694 | "type" : { 1695 | "kind" : "SCALAR", 1696 | "name" : "String", 1697 | "ofType" : null 1698 | }, 1699 | "isDeprecated" : false, 1700 | "deprecationReason" : null 1701 | }, { 1702 | "name" : "startedAt", 1703 | "description" : null, 1704 | "args" : [ ], 1705 | "type" : { 1706 | "kind" : "SCALAR", 1707 | "name" : "AWSTimestamp", 1708 | "ofType" : null 1709 | }, 1710 | "isDeprecated" : false, 1711 | "deprecationReason" : null 1712 | } ], 1713 | "inputFields" : null, 1714 | "interfaces" : [ ], 1715 | "enumValues" : null, 1716 | "possibleTypes" : null 1717 | }, { 1718 | "kind" : "INPUT_OBJECT", 1719 | "name" : "ModelProductFilterInput", 1720 | "description" : null, 1721 | "fields" : null, 1722 | "inputFields" : [ { 1723 | "name" : "id", 1724 | "description" : null, 1725 | "type" : { 1726 | "kind" : "INPUT_OBJECT", 1727 | "name" : "ModelIDInput", 1728 | "ofType" : null 1729 | }, 1730 | "defaultValue" : null 1731 | }, { 1732 | "name" : "sku", 1733 | "description" : null, 1734 | "type" : { 1735 | "kind" : "INPUT_OBJECT", 1736 | "name" : "ModelStringInput", 1737 | "ofType" : null 1738 | }, 1739 | "defaultValue" : null 1740 | }, { 1741 | "name" : "name", 1742 | "description" : null, 1743 | "type" : { 1744 | "kind" : "INPUT_OBJECT", 1745 | "name" : "ModelStringInput", 1746 | "ofType" : null 1747 | }, 1748 | "defaultValue" : null 1749 | }, { 1750 | "name" : "price", 1751 | "description" : null, 1752 | "type" : { 1753 | "kind" : "INPUT_OBJECT", 1754 | "name" : "ModelFloatInput", 1755 | "ofType" : null 1756 | }, 1757 | "defaultValue" : null 1758 | }, { 1759 | "name" : "image", 1760 | "description" : null, 1761 | "type" : { 1762 | "kind" : "INPUT_OBJECT", 1763 | "name" : "ModelStringInput", 1764 | "ofType" : null 1765 | }, 1766 | "defaultValue" : null 1767 | }, { 1768 | "name" : "and", 1769 | "description" : null, 1770 | "type" : { 1771 | "kind" : "LIST", 1772 | "name" : null, 1773 | "ofType" : { 1774 | "kind" : "INPUT_OBJECT", 1775 | "name" : "ModelProductFilterInput", 1776 | "ofType" : null 1777 | } 1778 | }, 1779 | "defaultValue" : null 1780 | }, { 1781 | "name" : "or", 1782 | "description" : null, 1783 | "type" : { 1784 | "kind" : "LIST", 1785 | "name" : null, 1786 | "ofType" : { 1787 | "kind" : "INPUT_OBJECT", 1788 | "name" : "ModelProductFilterInput", 1789 | "ofType" : null 1790 | } 1791 | }, 1792 | "defaultValue" : null 1793 | }, { 1794 | "name" : "not", 1795 | "description" : null, 1796 | "type" : { 1797 | "kind" : "INPUT_OBJECT", 1798 | "name" : "ModelProductFilterInput", 1799 | "ofType" : null 1800 | }, 1801 | "defaultValue" : null 1802 | } ], 1803 | "interfaces" : null, 1804 | "enumValues" : null, 1805 | "possibleTypes" : null 1806 | }, { 1807 | "kind" : "OBJECT", 1808 | "name" : "Mutation", 1809 | "description" : null, 1810 | "fields" : [ { 1811 | "name" : "createOrder", 1812 | "description" : null, 1813 | "args" : [ { 1814 | "name" : "input", 1815 | "description" : null, 1816 | "type" : { 1817 | "kind" : "NON_NULL", 1818 | "name" : null, 1819 | "ofType" : { 1820 | "kind" : "INPUT_OBJECT", 1821 | "name" : "CreateOrderInput", 1822 | "ofType" : null 1823 | } 1824 | }, 1825 | "defaultValue" : null 1826 | }, { 1827 | "name" : "condition", 1828 | "description" : null, 1829 | "type" : { 1830 | "kind" : "INPUT_OBJECT", 1831 | "name" : "ModelOrderConditionInput", 1832 | "ofType" : null 1833 | }, 1834 | "defaultValue" : null 1835 | } ], 1836 | "type" : { 1837 | "kind" : "OBJECT", 1838 | "name" : "Order", 1839 | "ofType" : null 1840 | }, 1841 | "isDeprecated" : false, 1842 | "deprecationReason" : null 1843 | }, { 1844 | "name" : "updateOrder", 1845 | "description" : null, 1846 | "args" : [ { 1847 | "name" : "input", 1848 | "description" : null, 1849 | "type" : { 1850 | "kind" : "NON_NULL", 1851 | "name" : null, 1852 | "ofType" : { 1853 | "kind" : "INPUT_OBJECT", 1854 | "name" : "UpdateOrderInput", 1855 | "ofType" : null 1856 | } 1857 | }, 1858 | "defaultValue" : null 1859 | }, { 1860 | "name" : "condition", 1861 | "description" : null, 1862 | "type" : { 1863 | "kind" : "INPUT_OBJECT", 1864 | "name" : "ModelOrderConditionInput", 1865 | "ofType" : null 1866 | }, 1867 | "defaultValue" : null 1868 | } ], 1869 | "type" : { 1870 | "kind" : "OBJECT", 1871 | "name" : "Order", 1872 | "ofType" : null 1873 | }, 1874 | "isDeprecated" : false, 1875 | "deprecationReason" : null 1876 | }, { 1877 | "name" : "deleteOrder", 1878 | "description" : null, 1879 | "args" : [ { 1880 | "name" : "input", 1881 | "description" : null, 1882 | "type" : { 1883 | "kind" : "NON_NULL", 1884 | "name" : null, 1885 | "ofType" : { 1886 | "kind" : "INPUT_OBJECT", 1887 | "name" : "DeleteOrderInput", 1888 | "ofType" : null 1889 | } 1890 | }, 1891 | "defaultValue" : null 1892 | }, { 1893 | "name" : "condition", 1894 | "description" : null, 1895 | "type" : { 1896 | "kind" : "INPUT_OBJECT", 1897 | "name" : "ModelOrderConditionInput", 1898 | "ofType" : null 1899 | }, 1900 | "defaultValue" : null 1901 | } ], 1902 | "type" : { 1903 | "kind" : "OBJECT", 1904 | "name" : "Order", 1905 | "ofType" : null 1906 | }, 1907 | "isDeprecated" : false, 1908 | "deprecationReason" : null 1909 | }, { 1910 | "name" : "createLineItem", 1911 | "description" : null, 1912 | "args" : [ { 1913 | "name" : "input", 1914 | "description" : null, 1915 | "type" : { 1916 | "kind" : "NON_NULL", 1917 | "name" : null, 1918 | "ofType" : { 1919 | "kind" : "INPUT_OBJECT", 1920 | "name" : "CreateLineItemInput", 1921 | "ofType" : null 1922 | } 1923 | }, 1924 | "defaultValue" : null 1925 | }, { 1926 | "name" : "condition", 1927 | "description" : null, 1928 | "type" : { 1929 | "kind" : "INPUT_OBJECT", 1930 | "name" : "ModelLineItemConditionInput", 1931 | "ofType" : null 1932 | }, 1933 | "defaultValue" : null 1934 | } ], 1935 | "type" : { 1936 | "kind" : "OBJECT", 1937 | "name" : "LineItem", 1938 | "ofType" : null 1939 | }, 1940 | "isDeprecated" : false, 1941 | "deprecationReason" : null 1942 | }, { 1943 | "name" : "updateLineItem", 1944 | "description" : null, 1945 | "args" : [ { 1946 | "name" : "input", 1947 | "description" : null, 1948 | "type" : { 1949 | "kind" : "NON_NULL", 1950 | "name" : null, 1951 | "ofType" : { 1952 | "kind" : "INPUT_OBJECT", 1953 | "name" : "UpdateLineItemInput", 1954 | "ofType" : null 1955 | } 1956 | }, 1957 | "defaultValue" : null 1958 | }, { 1959 | "name" : "condition", 1960 | "description" : null, 1961 | "type" : { 1962 | "kind" : "INPUT_OBJECT", 1963 | "name" : "ModelLineItemConditionInput", 1964 | "ofType" : null 1965 | }, 1966 | "defaultValue" : null 1967 | } ], 1968 | "type" : { 1969 | "kind" : "OBJECT", 1970 | "name" : "LineItem", 1971 | "ofType" : null 1972 | }, 1973 | "isDeprecated" : false, 1974 | "deprecationReason" : null 1975 | }, { 1976 | "name" : "deleteLineItem", 1977 | "description" : null, 1978 | "args" : [ { 1979 | "name" : "input", 1980 | "description" : null, 1981 | "type" : { 1982 | "kind" : "NON_NULL", 1983 | "name" : null, 1984 | "ofType" : { 1985 | "kind" : "INPUT_OBJECT", 1986 | "name" : "DeleteLineItemInput", 1987 | "ofType" : null 1988 | } 1989 | }, 1990 | "defaultValue" : null 1991 | }, { 1992 | "name" : "condition", 1993 | "description" : null, 1994 | "type" : { 1995 | "kind" : "INPUT_OBJECT", 1996 | "name" : "ModelLineItemConditionInput", 1997 | "ofType" : null 1998 | }, 1999 | "defaultValue" : null 2000 | } ], 2001 | "type" : { 2002 | "kind" : "OBJECT", 2003 | "name" : "LineItem", 2004 | "ofType" : null 2005 | }, 2006 | "isDeprecated" : false, 2007 | "deprecationReason" : null 2008 | }, { 2009 | "name" : "createProduct", 2010 | "description" : null, 2011 | "args" : [ { 2012 | "name" : "input", 2013 | "description" : null, 2014 | "type" : { 2015 | "kind" : "NON_NULL", 2016 | "name" : null, 2017 | "ofType" : { 2018 | "kind" : "INPUT_OBJECT", 2019 | "name" : "CreateProductInput", 2020 | "ofType" : null 2021 | } 2022 | }, 2023 | "defaultValue" : null 2024 | }, { 2025 | "name" : "condition", 2026 | "description" : null, 2027 | "type" : { 2028 | "kind" : "INPUT_OBJECT", 2029 | "name" : "ModelProductConditionInput", 2030 | "ofType" : null 2031 | }, 2032 | "defaultValue" : null 2033 | } ], 2034 | "type" : { 2035 | "kind" : "OBJECT", 2036 | "name" : "Product", 2037 | "ofType" : null 2038 | }, 2039 | "isDeprecated" : false, 2040 | "deprecationReason" : null 2041 | }, { 2042 | "name" : "updateProduct", 2043 | "description" : null, 2044 | "args" : [ { 2045 | "name" : "input", 2046 | "description" : null, 2047 | "type" : { 2048 | "kind" : "NON_NULL", 2049 | "name" : null, 2050 | "ofType" : { 2051 | "kind" : "INPUT_OBJECT", 2052 | "name" : "UpdateProductInput", 2053 | "ofType" : null 2054 | } 2055 | }, 2056 | "defaultValue" : null 2057 | }, { 2058 | "name" : "condition", 2059 | "description" : null, 2060 | "type" : { 2061 | "kind" : "INPUT_OBJECT", 2062 | "name" : "ModelProductConditionInput", 2063 | "ofType" : null 2064 | }, 2065 | "defaultValue" : null 2066 | } ], 2067 | "type" : { 2068 | "kind" : "OBJECT", 2069 | "name" : "Product", 2070 | "ofType" : null 2071 | }, 2072 | "isDeprecated" : false, 2073 | "deprecationReason" : null 2074 | }, { 2075 | "name" : "deleteProduct", 2076 | "description" : null, 2077 | "args" : [ { 2078 | "name" : "input", 2079 | "description" : null, 2080 | "type" : { 2081 | "kind" : "NON_NULL", 2082 | "name" : null, 2083 | "ofType" : { 2084 | "kind" : "INPUT_OBJECT", 2085 | "name" : "DeleteProductInput", 2086 | "ofType" : null 2087 | } 2088 | }, 2089 | "defaultValue" : null 2090 | }, { 2091 | "name" : "condition", 2092 | "description" : null, 2093 | "type" : { 2094 | "kind" : "INPUT_OBJECT", 2095 | "name" : "ModelProductConditionInput", 2096 | "ofType" : null 2097 | }, 2098 | "defaultValue" : null 2099 | } ], 2100 | "type" : { 2101 | "kind" : "OBJECT", 2102 | "name" : "Product", 2103 | "ofType" : null 2104 | }, 2105 | "isDeprecated" : false, 2106 | "deprecationReason" : null 2107 | } ], 2108 | "inputFields" : null, 2109 | "interfaces" : [ ], 2110 | "enumValues" : null, 2111 | "possibleTypes" : null 2112 | }, { 2113 | "kind" : "INPUT_OBJECT", 2114 | "name" : "CreateOrderInput", 2115 | "description" : null, 2116 | "fields" : null, 2117 | "inputFields" : [ { 2118 | "name" : "id", 2119 | "description" : null, 2120 | "type" : { 2121 | "kind" : "SCALAR", 2122 | "name" : "ID", 2123 | "ofType" : null 2124 | }, 2125 | "defaultValue" : null 2126 | }, { 2127 | "name" : "total", 2128 | "description" : null, 2129 | "type" : { 2130 | "kind" : "SCALAR", 2131 | "name" : "Float", 2132 | "ofType" : null 2133 | }, 2134 | "defaultValue" : null 2135 | }, { 2136 | "name" : "subtotal", 2137 | "description" : null, 2138 | "type" : { 2139 | "kind" : "SCALAR", 2140 | "name" : "Float", 2141 | "ofType" : null 2142 | }, 2143 | "defaultValue" : null 2144 | }, { 2145 | "name" : "tax", 2146 | "description" : null, 2147 | "type" : { 2148 | "kind" : "SCALAR", 2149 | "name" : "Float", 2150 | "ofType" : null 2151 | }, 2152 | "defaultValue" : null 2153 | }, { 2154 | "name" : "createdAt", 2155 | "description" : null, 2156 | "type" : { 2157 | "kind" : "NON_NULL", 2158 | "name" : null, 2159 | "ofType" : { 2160 | "kind" : "SCALAR", 2161 | "name" : "String", 2162 | "ofType" : null 2163 | } 2164 | }, 2165 | "defaultValue" : null 2166 | }, { 2167 | "name" : "_version", 2168 | "description" : null, 2169 | "type" : { 2170 | "kind" : "SCALAR", 2171 | "name" : "Int", 2172 | "ofType" : null 2173 | }, 2174 | "defaultValue" : null 2175 | } ], 2176 | "interfaces" : null, 2177 | "enumValues" : null, 2178 | "possibleTypes" : null 2179 | }, { 2180 | "kind" : "INPUT_OBJECT", 2181 | "name" : "ModelOrderConditionInput", 2182 | "description" : null, 2183 | "fields" : null, 2184 | "inputFields" : [ { 2185 | "name" : "total", 2186 | "description" : null, 2187 | "type" : { 2188 | "kind" : "INPUT_OBJECT", 2189 | "name" : "ModelFloatInput", 2190 | "ofType" : null 2191 | }, 2192 | "defaultValue" : null 2193 | }, { 2194 | "name" : "subtotal", 2195 | "description" : null, 2196 | "type" : { 2197 | "kind" : "INPUT_OBJECT", 2198 | "name" : "ModelFloatInput", 2199 | "ofType" : null 2200 | }, 2201 | "defaultValue" : null 2202 | }, { 2203 | "name" : "tax", 2204 | "description" : null, 2205 | "type" : { 2206 | "kind" : "INPUT_OBJECT", 2207 | "name" : "ModelFloatInput", 2208 | "ofType" : null 2209 | }, 2210 | "defaultValue" : null 2211 | }, { 2212 | "name" : "createdAt", 2213 | "description" : null, 2214 | "type" : { 2215 | "kind" : "INPUT_OBJECT", 2216 | "name" : "ModelStringInput", 2217 | "ofType" : null 2218 | }, 2219 | "defaultValue" : null 2220 | }, { 2221 | "name" : "and", 2222 | "description" : null, 2223 | "type" : { 2224 | "kind" : "LIST", 2225 | "name" : null, 2226 | "ofType" : { 2227 | "kind" : "INPUT_OBJECT", 2228 | "name" : "ModelOrderConditionInput", 2229 | "ofType" : null 2230 | } 2231 | }, 2232 | "defaultValue" : null 2233 | }, { 2234 | "name" : "or", 2235 | "description" : null, 2236 | "type" : { 2237 | "kind" : "LIST", 2238 | "name" : null, 2239 | "ofType" : { 2240 | "kind" : "INPUT_OBJECT", 2241 | "name" : "ModelOrderConditionInput", 2242 | "ofType" : null 2243 | } 2244 | }, 2245 | "defaultValue" : null 2246 | }, { 2247 | "name" : "not", 2248 | "description" : null, 2249 | "type" : { 2250 | "kind" : "INPUT_OBJECT", 2251 | "name" : "ModelOrderConditionInput", 2252 | "ofType" : null 2253 | }, 2254 | "defaultValue" : null 2255 | } ], 2256 | "interfaces" : null, 2257 | "enumValues" : null, 2258 | "possibleTypes" : null 2259 | }, { 2260 | "kind" : "INPUT_OBJECT", 2261 | "name" : "UpdateOrderInput", 2262 | "description" : null, 2263 | "fields" : null, 2264 | "inputFields" : [ { 2265 | "name" : "id", 2266 | "description" : null, 2267 | "type" : { 2268 | "kind" : "NON_NULL", 2269 | "name" : null, 2270 | "ofType" : { 2271 | "kind" : "SCALAR", 2272 | "name" : "ID", 2273 | "ofType" : null 2274 | } 2275 | }, 2276 | "defaultValue" : null 2277 | }, { 2278 | "name" : "total", 2279 | "description" : null, 2280 | "type" : { 2281 | "kind" : "SCALAR", 2282 | "name" : "Float", 2283 | "ofType" : null 2284 | }, 2285 | "defaultValue" : null 2286 | }, { 2287 | "name" : "subtotal", 2288 | "description" : null, 2289 | "type" : { 2290 | "kind" : "SCALAR", 2291 | "name" : "Float", 2292 | "ofType" : null 2293 | }, 2294 | "defaultValue" : null 2295 | }, { 2296 | "name" : "tax", 2297 | "description" : null, 2298 | "type" : { 2299 | "kind" : "SCALAR", 2300 | "name" : "Float", 2301 | "ofType" : null 2302 | }, 2303 | "defaultValue" : null 2304 | }, { 2305 | "name" : "createdAt", 2306 | "description" : null, 2307 | "type" : { 2308 | "kind" : "SCALAR", 2309 | "name" : "String", 2310 | "ofType" : null 2311 | }, 2312 | "defaultValue" : null 2313 | }, { 2314 | "name" : "_version", 2315 | "description" : null, 2316 | "type" : { 2317 | "kind" : "SCALAR", 2318 | "name" : "Int", 2319 | "ofType" : null 2320 | }, 2321 | "defaultValue" : null 2322 | } ], 2323 | "interfaces" : null, 2324 | "enumValues" : null, 2325 | "possibleTypes" : null 2326 | }, { 2327 | "kind" : "INPUT_OBJECT", 2328 | "name" : "DeleteOrderInput", 2329 | "description" : null, 2330 | "fields" : null, 2331 | "inputFields" : [ { 2332 | "name" : "id", 2333 | "description" : null, 2334 | "type" : { 2335 | "kind" : "SCALAR", 2336 | "name" : "ID", 2337 | "ofType" : null 2338 | }, 2339 | "defaultValue" : null 2340 | }, { 2341 | "name" : "_version", 2342 | "description" : null, 2343 | "type" : { 2344 | "kind" : "SCALAR", 2345 | "name" : "Int", 2346 | "ofType" : null 2347 | }, 2348 | "defaultValue" : null 2349 | } ], 2350 | "interfaces" : null, 2351 | "enumValues" : null, 2352 | "possibleTypes" : null 2353 | }, { 2354 | "kind" : "INPUT_OBJECT", 2355 | "name" : "CreateLineItemInput", 2356 | "description" : null, 2357 | "fields" : null, 2358 | "inputFields" : [ { 2359 | "name" : "id", 2360 | "description" : null, 2361 | "type" : { 2362 | "kind" : "SCALAR", 2363 | "name" : "ID", 2364 | "ofType" : null 2365 | }, 2366 | "defaultValue" : null 2367 | }, { 2368 | "name" : "qty", 2369 | "description" : null, 2370 | "type" : { 2371 | "kind" : "SCALAR", 2372 | "name" : "Int", 2373 | "ofType" : null 2374 | }, 2375 | "defaultValue" : null 2376 | }, { 2377 | "name" : "order", 2378 | "description" : null, 2379 | "type" : { 2380 | "kind" : "INPUT_OBJECT", 2381 | "name" : "OrderInput", 2382 | "ofType" : null 2383 | }, 2384 | "defaultValue" : null 2385 | }, { 2386 | "name" : "description", 2387 | "description" : null, 2388 | "type" : { 2389 | "kind" : "SCALAR", 2390 | "name" : "String", 2391 | "ofType" : null 2392 | }, 2393 | "defaultValue" : null 2394 | }, { 2395 | "name" : "price", 2396 | "description" : null, 2397 | "type" : { 2398 | "kind" : "SCALAR", 2399 | "name" : "Float", 2400 | "ofType" : null 2401 | }, 2402 | "defaultValue" : null 2403 | }, { 2404 | "name" : "total", 2405 | "description" : null, 2406 | "type" : { 2407 | "kind" : "SCALAR", 2408 | "name" : "Float", 2409 | "ofType" : null 2410 | }, 2411 | "defaultValue" : null 2412 | }, { 2413 | "name" : "_version", 2414 | "description" : null, 2415 | "type" : { 2416 | "kind" : "SCALAR", 2417 | "name" : "Int", 2418 | "ofType" : null 2419 | }, 2420 | "defaultValue" : null 2421 | }, { 2422 | "name" : "lineItemOrderId", 2423 | "description" : null, 2424 | "type" : { 2425 | "kind" : "SCALAR", 2426 | "name" : "ID", 2427 | "ofType" : null 2428 | }, 2429 | "defaultValue" : null 2430 | }, { 2431 | "name" : "lineItemProductId", 2432 | "description" : null, 2433 | "type" : { 2434 | "kind" : "SCALAR", 2435 | "name" : "ID", 2436 | "ofType" : null 2437 | }, 2438 | "defaultValue" : null 2439 | } ], 2440 | "interfaces" : null, 2441 | "enumValues" : null, 2442 | "possibleTypes" : null 2443 | }, { 2444 | "kind" : "INPUT_OBJECT", 2445 | "name" : "OrderInput", 2446 | "description" : null, 2447 | "fields" : null, 2448 | "inputFields" : [ { 2449 | "name" : "id", 2450 | "description" : null, 2451 | "type" : { 2452 | "kind" : "NON_NULL", 2453 | "name" : null, 2454 | "ofType" : { 2455 | "kind" : "SCALAR", 2456 | "name" : "ID", 2457 | "ofType" : null 2458 | } 2459 | }, 2460 | "defaultValue" : null 2461 | }, { 2462 | "name" : "total", 2463 | "description" : null, 2464 | "type" : { 2465 | "kind" : "SCALAR", 2466 | "name" : "Float", 2467 | "ofType" : null 2468 | }, 2469 | "defaultValue" : null 2470 | }, { 2471 | "name" : "subtotal", 2472 | "description" : null, 2473 | "type" : { 2474 | "kind" : "SCALAR", 2475 | "name" : "Float", 2476 | "ofType" : null 2477 | }, 2478 | "defaultValue" : null 2479 | }, { 2480 | "name" : "tax", 2481 | "description" : null, 2482 | "type" : { 2483 | "kind" : "SCALAR", 2484 | "name" : "Float", 2485 | "ofType" : null 2486 | }, 2487 | "defaultValue" : null 2488 | }, { 2489 | "name" : "createdAt", 2490 | "description" : null, 2491 | "type" : { 2492 | "kind" : "NON_NULL", 2493 | "name" : null, 2494 | "ofType" : { 2495 | "kind" : "SCALAR", 2496 | "name" : "String", 2497 | "ofType" : null 2498 | } 2499 | }, 2500 | "defaultValue" : null 2501 | }, { 2502 | "name" : "_version", 2503 | "description" : null, 2504 | "type" : { 2505 | "kind" : "NON_NULL", 2506 | "name" : null, 2507 | "ofType" : { 2508 | "kind" : "SCALAR", 2509 | "name" : "Int", 2510 | "ofType" : null 2511 | } 2512 | }, 2513 | "defaultValue" : null 2514 | }, { 2515 | "name" : "_deleted", 2516 | "description" : null, 2517 | "type" : { 2518 | "kind" : "SCALAR", 2519 | "name" : "Boolean", 2520 | "ofType" : null 2521 | }, 2522 | "defaultValue" : null 2523 | }, { 2524 | "name" : "_lastChangedAt", 2525 | "description" : null, 2526 | "type" : { 2527 | "kind" : "NON_NULL", 2528 | "name" : null, 2529 | "ofType" : { 2530 | "kind" : "SCALAR", 2531 | "name" : "AWSTimestamp", 2532 | "ofType" : null 2533 | } 2534 | }, 2535 | "defaultValue" : null 2536 | } ], 2537 | "interfaces" : null, 2538 | "enumValues" : null, 2539 | "possibleTypes" : null 2540 | }, { 2541 | "kind" : "INPUT_OBJECT", 2542 | "name" : "ModelLineItemConditionInput", 2543 | "description" : null, 2544 | "fields" : null, 2545 | "inputFields" : [ { 2546 | "name" : "qty", 2547 | "description" : null, 2548 | "type" : { 2549 | "kind" : "INPUT_OBJECT", 2550 | "name" : "ModelIntInput", 2551 | "ofType" : null 2552 | }, 2553 | "defaultValue" : null 2554 | }, { 2555 | "name" : "description", 2556 | "description" : null, 2557 | "type" : { 2558 | "kind" : "INPUT_OBJECT", 2559 | "name" : "ModelStringInput", 2560 | "ofType" : null 2561 | }, 2562 | "defaultValue" : null 2563 | }, { 2564 | "name" : "price", 2565 | "description" : null, 2566 | "type" : { 2567 | "kind" : "INPUT_OBJECT", 2568 | "name" : "ModelFloatInput", 2569 | "ofType" : null 2570 | }, 2571 | "defaultValue" : null 2572 | }, { 2573 | "name" : "total", 2574 | "description" : null, 2575 | "type" : { 2576 | "kind" : "INPUT_OBJECT", 2577 | "name" : "ModelFloatInput", 2578 | "ofType" : null 2579 | }, 2580 | "defaultValue" : null 2581 | }, { 2582 | "name" : "and", 2583 | "description" : null, 2584 | "type" : { 2585 | "kind" : "LIST", 2586 | "name" : null, 2587 | "ofType" : { 2588 | "kind" : "INPUT_OBJECT", 2589 | "name" : "ModelLineItemConditionInput", 2590 | "ofType" : null 2591 | } 2592 | }, 2593 | "defaultValue" : null 2594 | }, { 2595 | "name" : "or", 2596 | "description" : null, 2597 | "type" : { 2598 | "kind" : "LIST", 2599 | "name" : null, 2600 | "ofType" : { 2601 | "kind" : "INPUT_OBJECT", 2602 | "name" : "ModelLineItemConditionInput", 2603 | "ofType" : null 2604 | } 2605 | }, 2606 | "defaultValue" : null 2607 | }, { 2608 | "name" : "not", 2609 | "description" : null, 2610 | "type" : { 2611 | "kind" : "INPUT_OBJECT", 2612 | "name" : "ModelLineItemConditionInput", 2613 | "ofType" : null 2614 | }, 2615 | "defaultValue" : null 2616 | } ], 2617 | "interfaces" : null, 2618 | "enumValues" : null, 2619 | "possibleTypes" : null 2620 | }, { 2621 | "kind" : "INPUT_OBJECT", 2622 | "name" : "UpdateLineItemInput", 2623 | "description" : null, 2624 | "fields" : null, 2625 | "inputFields" : [ { 2626 | "name" : "id", 2627 | "description" : null, 2628 | "type" : { 2629 | "kind" : "NON_NULL", 2630 | "name" : null, 2631 | "ofType" : { 2632 | "kind" : "SCALAR", 2633 | "name" : "ID", 2634 | "ofType" : null 2635 | } 2636 | }, 2637 | "defaultValue" : null 2638 | }, { 2639 | "name" : "qty", 2640 | "description" : null, 2641 | "type" : { 2642 | "kind" : "SCALAR", 2643 | "name" : "Int", 2644 | "ofType" : null 2645 | }, 2646 | "defaultValue" : null 2647 | }, { 2648 | "name" : "order", 2649 | "description" : null, 2650 | "type" : { 2651 | "kind" : "INPUT_OBJECT", 2652 | "name" : "OrderInput", 2653 | "ofType" : null 2654 | }, 2655 | "defaultValue" : null 2656 | }, { 2657 | "name" : "description", 2658 | "description" : null, 2659 | "type" : { 2660 | "kind" : "SCALAR", 2661 | "name" : "String", 2662 | "ofType" : null 2663 | }, 2664 | "defaultValue" : null 2665 | }, { 2666 | "name" : "price", 2667 | "description" : null, 2668 | "type" : { 2669 | "kind" : "SCALAR", 2670 | "name" : "Float", 2671 | "ofType" : null 2672 | }, 2673 | "defaultValue" : null 2674 | }, { 2675 | "name" : "total", 2676 | "description" : null, 2677 | "type" : { 2678 | "kind" : "SCALAR", 2679 | "name" : "Float", 2680 | "ofType" : null 2681 | }, 2682 | "defaultValue" : null 2683 | }, { 2684 | "name" : "_version", 2685 | "description" : null, 2686 | "type" : { 2687 | "kind" : "SCALAR", 2688 | "name" : "Int", 2689 | "ofType" : null 2690 | }, 2691 | "defaultValue" : null 2692 | }, { 2693 | "name" : "lineItemOrderId", 2694 | "description" : null, 2695 | "type" : { 2696 | "kind" : "SCALAR", 2697 | "name" : "ID", 2698 | "ofType" : null 2699 | }, 2700 | "defaultValue" : null 2701 | }, { 2702 | "name" : "lineItemProductId", 2703 | "description" : null, 2704 | "type" : { 2705 | "kind" : "SCALAR", 2706 | "name" : "ID", 2707 | "ofType" : null 2708 | }, 2709 | "defaultValue" : null 2710 | } ], 2711 | "interfaces" : null, 2712 | "enumValues" : null, 2713 | "possibleTypes" : null 2714 | }, { 2715 | "kind" : "INPUT_OBJECT", 2716 | "name" : "DeleteLineItemInput", 2717 | "description" : null, 2718 | "fields" : null, 2719 | "inputFields" : [ { 2720 | "name" : "id", 2721 | "description" : null, 2722 | "type" : { 2723 | "kind" : "SCALAR", 2724 | "name" : "ID", 2725 | "ofType" : null 2726 | }, 2727 | "defaultValue" : null 2728 | }, { 2729 | "name" : "_version", 2730 | "description" : null, 2731 | "type" : { 2732 | "kind" : "SCALAR", 2733 | "name" : "Int", 2734 | "ofType" : null 2735 | }, 2736 | "defaultValue" : null 2737 | } ], 2738 | "interfaces" : null, 2739 | "enumValues" : null, 2740 | "possibleTypes" : null 2741 | }, { 2742 | "kind" : "INPUT_OBJECT", 2743 | "name" : "CreateProductInput", 2744 | "description" : null, 2745 | "fields" : null, 2746 | "inputFields" : [ { 2747 | "name" : "id", 2748 | "description" : null, 2749 | "type" : { 2750 | "kind" : "SCALAR", 2751 | "name" : "ID", 2752 | "ofType" : null 2753 | }, 2754 | "defaultValue" : null 2755 | }, { 2756 | "name" : "sku", 2757 | "description" : null, 2758 | "type" : { 2759 | "kind" : "SCALAR", 2760 | "name" : "String", 2761 | "ofType" : null 2762 | }, 2763 | "defaultValue" : null 2764 | }, { 2765 | "name" : "name", 2766 | "description" : null, 2767 | "type" : { 2768 | "kind" : "SCALAR", 2769 | "name" : "String", 2770 | "ofType" : null 2771 | }, 2772 | "defaultValue" : null 2773 | }, { 2774 | "name" : "price", 2775 | "description" : null, 2776 | "type" : { 2777 | "kind" : "SCALAR", 2778 | "name" : "Float", 2779 | "ofType" : null 2780 | }, 2781 | "defaultValue" : null 2782 | }, { 2783 | "name" : "image", 2784 | "description" : null, 2785 | "type" : { 2786 | "kind" : "SCALAR", 2787 | "name" : "String", 2788 | "ofType" : null 2789 | }, 2790 | "defaultValue" : null 2791 | }, { 2792 | "name" : "_version", 2793 | "description" : null, 2794 | "type" : { 2795 | "kind" : "SCALAR", 2796 | "name" : "Int", 2797 | "ofType" : null 2798 | }, 2799 | "defaultValue" : null 2800 | } ], 2801 | "interfaces" : null, 2802 | "enumValues" : null, 2803 | "possibleTypes" : null 2804 | }, { 2805 | "kind" : "INPUT_OBJECT", 2806 | "name" : "ModelProductConditionInput", 2807 | "description" : null, 2808 | "fields" : null, 2809 | "inputFields" : [ { 2810 | "name" : "sku", 2811 | "description" : null, 2812 | "type" : { 2813 | "kind" : "INPUT_OBJECT", 2814 | "name" : "ModelStringInput", 2815 | "ofType" : null 2816 | }, 2817 | "defaultValue" : null 2818 | }, { 2819 | "name" : "name", 2820 | "description" : null, 2821 | "type" : { 2822 | "kind" : "INPUT_OBJECT", 2823 | "name" : "ModelStringInput", 2824 | "ofType" : null 2825 | }, 2826 | "defaultValue" : null 2827 | }, { 2828 | "name" : "price", 2829 | "description" : null, 2830 | "type" : { 2831 | "kind" : "INPUT_OBJECT", 2832 | "name" : "ModelFloatInput", 2833 | "ofType" : null 2834 | }, 2835 | "defaultValue" : null 2836 | }, { 2837 | "name" : "image", 2838 | "description" : null, 2839 | "type" : { 2840 | "kind" : "INPUT_OBJECT", 2841 | "name" : "ModelStringInput", 2842 | "ofType" : null 2843 | }, 2844 | "defaultValue" : null 2845 | }, { 2846 | "name" : "and", 2847 | "description" : null, 2848 | "type" : { 2849 | "kind" : "LIST", 2850 | "name" : null, 2851 | "ofType" : { 2852 | "kind" : "INPUT_OBJECT", 2853 | "name" : "ModelProductConditionInput", 2854 | "ofType" : null 2855 | } 2856 | }, 2857 | "defaultValue" : null 2858 | }, { 2859 | "name" : "or", 2860 | "description" : null, 2861 | "type" : { 2862 | "kind" : "LIST", 2863 | "name" : null, 2864 | "ofType" : { 2865 | "kind" : "INPUT_OBJECT", 2866 | "name" : "ModelProductConditionInput", 2867 | "ofType" : null 2868 | } 2869 | }, 2870 | "defaultValue" : null 2871 | }, { 2872 | "name" : "not", 2873 | "description" : null, 2874 | "type" : { 2875 | "kind" : "INPUT_OBJECT", 2876 | "name" : "ModelProductConditionInput", 2877 | "ofType" : null 2878 | }, 2879 | "defaultValue" : null 2880 | } ], 2881 | "interfaces" : null, 2882 | "enumValues" : null, 2883 | "possibleTypes" : null 2884 | }, { 2885 | "kind" : "INPUT_OBJECT", 2886 | "name" : "UpdateProductInput", 2887 | "description" : null, 2888 | "fields" : null, 2889 | "inputFields" : [ { 2890 | "name" : "id", 2891 | "description" : null, 2892 | "type" : { 2893 | "kind" : "NON_NULL", 2894 | "name" : null, 2895 | "ofType" : { 2896 | "kind" : "SCALAR", 2897 | "name" : "ID", 2898 | "ofType" : null 2899 | } 2900 | }, 2901 | "defaultValue" : null 2902 | }, { 2903 | "name" : "sku", 2904 | "description" : null, 2905 | "type" : { 2906 | "kind" : "SCALAR", 2907 | "name" : "String", 2908 | "ofType" : null 2909 | }, 2910 | "defaultValue" : null 2911 | }, { 2912 | "name" : "name", 2913 | "description" : null, 2914 | "type" : { 2915 | "kind" : "SCALAR", 2916 | "name" : "String", 2917 | "ofType" : null 2918 | }, 2919 | "defaultValue" : null 2920 | }, { 2921 | "name" : "price", 2922 | "description" : null, 2923 | "type" : { 2924 | "kind" : "SCALAR", 2925 | "name" : "Float", 2926 | "ofType" : null 2927 | }, 2928 | "defaultValue" : null 2929 | }, { 2930 | "name" : "image", 2931 | "description" : null, 2932 | "type" : { 2933 | "kind" : "SCALAR", 2934 | "name" : "String", 2935 | "ofType" : null 2936 | }, 2937 | "defaultValue" : null 2938 | }, { 2939 | "name" : "_version", 2940 | "description" : null, 2941 | "type" : { 2942 | "kind" : "SCALAR", 2943 | "name" : "Int", 2944 | "ofType" : null 2945 | }, 2946 | "defaultValue" : null 2947 | } ], 2948 | "interfaces" : null, 2949 | "enumValues" : null, 2950 | "possibleTypes" : null 2951 | }, { 2952 | "kind" : "INPUT_OBJECT", 2953 | "name" : "DeleteProductInput", 2954 | "description" : null, 2955 | "fields" : null, 2956 | "inputFields" : [ { 2957 | "name" : "id", 2958 | "description" : null, 2959 | "type" : { 2960 | "kind" : "SCALAR", 2961 | "name" : "ID", 2962 | "ofType" : null 2963 | }, 2964 | "defaultValue" : null 2965 | }, { 2966 | "name" : "_version", 2967 | "description" : null, 2968 | "type" : { 2969 | "kind" : "SCALAR", 2970 | "name" : "Int", 2971 | "ofType" : null 2972 | }, 2973 | "defaultValue" : null 2974 | } ], 2975 | "interfaces" : null, 2976 | "enumValues" : null, 2977 | "possibleTypes" : null 2978 | }, { 2979 | "kind" : "OBJECT", 2980 | "name" : "Subscription", 2981 | "description" : null, 2982 | "fields" : [ { 2983 | "name" : "onCreateOrder", 2984 | "description" : null, 2985 | "args" : [ ], 2986 | "type" : { 2987 | "kind" : "OBJECT", 2988 | "name" : "Order", 2989 | "ofType" : null 2990 | }, 2991 | "isDeprecated" : false, 2992 | "deprecationReason" : null 2993 | }, { 2994 | "name" : "onUpdateOrder", 2995 | "description" : null, 2996 | "args" : [ ], 2997 | "type" : { 2998 | "kind" : "OBJECT", 2999 | "name" : "Order", 3000 | "ofType" : null 3001 | }, 3002 | "isDeprecated" : false, 3003 | "deprecationReason" : null 3004 | }, { 3005 | "name" : "onDeleteOrder", 3006 | "description" : null, 3007 | "args" : [ ], 3008 | "type" : { 3009 | "kind" : "OBJECT", 3010 | "name" : "Order", 3011 | "ofType" : null 3012 | }, 3013 | "isDeprecated" : false, 3014 | "deprecationReason" : null 3015 | }, { 3016 | "name" : "onCreateLineItem", 3017 | "description" : null, 3018 | "args" : [ ], 3019 | "type" : { 3020 | "kind" : "OBJECT", 3021 | "name" : "LineItem", 3022 | "ofType" : null 3023 | }, 3024 | "isDeprecated" : false, 3025 | "deprecationReason" : null 3026 | }, { 3027 | "name" : "onUpdateLineItem", 3028 | "description" : null, 3029 | "args" : [ ], 3030 | "type" : { 3031 | "kind" : "OBJECT", 3032 | "name" : "LineItem", 3033 | "ofType" : null 3034 | }, 3035 | "isDeprecated" : false, 3036 | "deprecationReason" : null 3037 | }, { 3038 | "name" : "onDeleteLineItem", 3039 | "description" : null, 3040 | "args" : [ ], 3041 | "type" : { 3042 | "kind" : "OBJECT", 3043 | "name" : "LineItem", 3044 | "ofType" : null 3045 | }, 3046 | "isDeprecated" : false, 3047 | "deprecationReason" : null 3048 | }, { 3049 | "name" : "onCreateProduct", 3050 | "description" : null, 3051 | "args" : [ ], 3052 | "type" : { 3053 | "kind" : "OBJECT", 3054 | "name" : "Product", 3055 | "ofType" : null 3056 | }, 3057 | "isDeprecated" : false, 3058 | "deprecationReason" : null 3059 | }, { 3060 | "name" : "onUpdateProduct", 3061 | "description" : null, 3062 | "args" : [ ], 3063 | "type" : { 3064 | "kind" : "OBJECT", 3065 | "name" : "Product", 3066 | "ofType" : null 3067 | }, 3068 | "isDeprecated" : false, 3069 | "deprecationReason" : null 3070 | }, { 3071 | "name" : "onDeleteProduct", 3072 | "description" : null, 3073 | "args" : [ ], 3074 | "type" : { 3075 | "kind" : "OBJECT", 3076 | "name" : "Product", 3077 | "ofType" : null 3078 | }, 3079 | "isDeprecated" : false, 3080 | "deprecationReason" : null 3081 | } ], 3082 | "inputFields" : null, 3083 | "interfaces" : [ ], 3084 | "enumValues" : null, 3085 | "possibleTypes" : null 3086 | }, { 3087 | "kind" : "INPUT_OBJECT", 3088 | "name" : "ModelBooleanInput", 3089 | "description" : null, 3090 | "fields" : null, 3091 | "inputFields" : [ { 3092 | "name" : "ne", 3093 | "description" : null, 3094 | "type" : { 3095 | "kind" : "SCALAR", 3096 | "name" : "Boolean", 3097 | "ofType" : null 3098 | }, 3099 | "defaultValue" : null 3100 | }, { 3101 | "name" : "eq", 3102 | "description" : null, 3103 | "type" : { 3104 | "kind" : "SCALAR", 3105 | "name" : "Boolean", 3106 | "ofType" : null 3107 | }, 3108 | "defaultValue" : null 3109 | }, { 3110 | "name" : "attributeExists", 3111 | "description" : null, 3112 | "type" : { 3113 | "kind" : "SCALAR", 3114 | "name" : "Boolean", 3115 | "ofType" : null 3116 | }, 3117 | "defaultValue" : null 3118 | }, { 3119 | "name" : "attributeType", 3120 | "description" : null, 3121 | "type" : { 3122 | "kind" : "ENUM", 3123 | "name" : "ModelAttributeTypes", 3124 | "ofType" : null 3125 | }, 3126 | "defaultValue" : null 3127 | } ], 3128 | "interfaces" : null, 3129 | "enumValues" : null, 3130 | "possibleTypes" : null 3131 | }, { 3132 | "kind" : "OBJECT", 3133 | "name" : "__Schema", 3134 | "description" : "A GraphQL Introspection defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, the entry points for query, mutation, and subscription operations.", 3135 | "fields" : [ { 3136 | "name" : "types", 3137 | "description" : "A list of all types supported by this server.", 3138 | "args" : [ ], 3139 | "type" : { 3140 | "kind" : "NON_NULL", 3141 | "name" : null, 3142 | "ofType" : { 3143 | "kind" : "LIST", 3144 | "name" : null, 3145 | "ofType" : { 3146 | "kind" : "NON_NULL", 3147 | "name" : null, 3148 | "ofType" : { 3149 | "kind" : "OBJECT", 3150 | "name" : "__Type", 3151 | "ofType" : null 3152 | } 3153 | } 3154 | } 3155 | }, 3156 | "isDeprecated" : false, 3157 | "deprecationReason" : null 3158 | }, { 3159 | "name" : "queryType", 3160 | "description" : "The type that query operations will be rooted at.", 3161 | "args" : [ ], 3162 | "type" : { 3163 | "kind" : "NON_NULL", 3164 | "name" : null, 3165 | "ofType" : { 3166 | "kind" : "OBJECT", 3167 | "name" : "__Type", 3168 | "ofType" : null 3169 | } 3170 | }, 3171 | "isDeprecated" : false, 3172 | "deprecationReason" : null 3173 | }, { 3174 | "name" : "mutationType", 3175 | "description" : "If this server supports mutation, the type that mutation operations will be rooted at.", 3176 | "args" : [ ], 3177 | "type" : { 3178 | "kind" : "OBJECT", 3179 | "name" : "__Type", 3180 | "ofType" : null 3181 | }, 3182 | "isDeprecated" : false, 3183 | "deprecationReason" : null 3184 | }, { 3185 | "name" : "directives", 3186 | "description" : "'A list of all directives supported by this server.", 3187 | "args" : [ ], 3188 | "type" : { 3189 | "kind" : "NON_NULL", 3190 | "name" : null, 3191 | "ofType" : { 3192 | "kind" : "LIST", 3193 | "name" : null, 3194 | "ofType" : { 3195 | "kind" : "NON_NULL", 3196 | "name" : null, 3197 | "ofType" : { 3198 | "kind" : "OBJECT", 3199 | "name" : "__Directive", 3200 | "ofType" : null 3201 | } 3202 | } 3203 | } 3204 | }, 3205 | "isDeprecated" : false, 3206 | "deprecationReason" : null 3207 | }, { 3208 | "name" : "subscriptionType", 3209 | "description" : "'If this server support subscription, the type that subscription operations will be rooted at.", 3210 | "args" : [ ], 3211 | "type" : { 3212 | "kind" : "OBJECT", 3213 | "name" : "__Type", 3214 | "ofType" : null 3215 | }, 3216 | "isDeprecated" : false, 3217 | "deprecationReason" : null 3218 | } ], 3219 | "inputFields" : null, 3220 | "interfaces" : [ ], 3221 | "enumValues" : null, 3222 | "possibleTypes" : null 3223 | }, { 3224 | "kind" : "OBJECT", 3225 | "name" : "__Type", 3226 | "description" : null, 3227 | "fields" : [ { 3228 | "name" : "kind", 3229 | "description" : null, 3230 | "args" : [ ], 3231 | "type" : { 3232 | "kind" : "NON_NULL", 3233 | "name" : null, 3234 | "ofType" : { 3235 | "kind" : "ENUM", 3236 | "name" : "__TypeKind", 3237 | "ofType" : null 3238 | } 3239 | }, 3240 | "isDeprecated" : false, 3241 | "deprecationReason" : null 3242 | }, { 3243 | "name" : "name", 3244 | "description" : null, 3245 | "args" : [ ], 3246 | "type" : { 3247 | "kind" : "SCALAR", 3248 | "name" : "String", 3249 | "ofType" : null 3250 | }, 3251 | "isDeprecated" : false, 3252 | "deprecationReason" : null 3253 | }, { 3254 | "name" : "description", 3255 | "description" : null, 3256 | "args" : [ ], 3257 | "type" : { 3258 | "kind" : "SCALAR", 3259 | "name" : "String", 3260 | "ofType" : null 3261 | }, 3262 | "isDeprecated" : false, 3263 | "deprecationReason" : null 3264 | }, { 3265 | "name" : "fields", 3266 | "description" : null, 3267 | "args" : [ { 3268 | "name" : "includeDeprecated", 3269 | "description" : null, 3270 | "type" : { 3271 | "kind" : "SCALAR", 3272 | "name" : "Boolean", 3273 | "ofType" : null 3274 | }, 3275 | "defaultValue" : "false" 3276 | } ], 3277 | "type" : { 3278 | "kind" : "LIST", 3279 | "name" : null, 3280 | "ofType" : { 3281 | "kind" : "NON_NULL", 3282 | "name" : null, 3283 | "ofType" : { 3284 | "kind" : "OBJECT", 3285 | "name" : "__Field", 3286 | "ofType" : null 3287 | } 3288 | } 3289 | }, 3290 | "isDeprecated" : false, 3291 | "deprecationReason" : null 3292 | }, { 3293 | "name" : "interfaces", 3294 | "description" : null, 3295 | "args" : [ ], 3296 | "type" : { 3297 | "kind" : "LIST", 3298 | "name" : null, 3299 | "ofType" : { 3300 | "kind" : "NON_NULL", 3301 | "name" : null, 3302 | "ofType" : { 3303 | "kind" : "OBJECT", 3304 | "name" : "__Type", 3305 | "ofType" : null 3306 | } 3307 | } 3308 | }, 3309 | "isDeprecated" : false, 3310 | "deprecationReason" : null 3311 | }, { 3312 | "name" : "possibleTypes", 3313 | "description" : null, 3314 | "args" : [ ], 3315 | "type" : { 3316 | "kind" : "LIST", 3317 | "name" : null, 3318 | "ofType" : { 3319 | "kind" : "NON_NULL", 3320 | "name" : null, 3321 | "ofType" : { 3322 | "kind" : "OBJECT", 3323 | "name" : "__Type", 3324 | "ofType" : null 3325 | } 3326 | } 3327 | }, 3328 | "isDeprecated" : false, 3329 | "deprecationReason" : null 3330 | }, { 3331 | "name" : "enumValues", 3332 | "description" : null, 3333 | "args" : [ { 3334 | "name" : "includeDeprecated", 3335 | "description" : null, 3336 | "type" : { 3337 | "kind" : "SCALAR", 3338 | "name" : "Boolean", 3339 | "ofType" : null 3340 | }, 3341 | "defaultValue" : "false" 3342 | } ], 3343 | "type" : { 3344 | "kind" : "LIST", 3345 | "name" : null, 3346 | "ofType" : { 3347 | "kind" : "NON_NULL", 3348 | "name" : null, 3349 | "ofType" : { 3350 | "kind" : "OBJECT", 3351 | "name" : "__EnumValue", 3352 | "ofType" : null 3353 | } 3354 | } 3355 | }, 3356 | "isDeprecated" : false, 3357 | "deprecationReason" : null 3358 | }, { 3359 | "name" : "inputFields", 3360 | "description" : null, 3361 | "args" : [ ], 3362 | "type" : { 3363 | "kind" : "LIST", 3364 | "name" : null, 3365 | "ofType" : { 3366 | "kind" : "NON_NULL", 3367 | "name" : null, 3368 | "ofType" : { 3369 | "kind" : "OBJECT", 3370 | "name" : "__InputValue", 3371 | "ofType" : null 3372 | } 3373 | } 3374 | }, 3375 | "isDeprecated" : false, 3376 | "deprecationReason" : null 3377 | }, { 3378 | "name" : "ofType", 3379 | "description" : null, 3380 | "args" : [ ], 3381 | "type" : { 3382 | "kind" : "OBJECT", 3383 | "name" : "__Type", 3384 | "ofType" : null 3385 | }, 3386 | "isDeprecated" : false, 3387 | "deprecationReason" : null 3388 | } ], 3389 | "inputFields" : null, 3390 | "interfaces" : [ ], 3391 | "enumValues" : null, 3392 | "possibleTypes" : null 3393 | }, { 3394 | "kind" : "ENUM", 3395 | "name" : "__TypeKind", 3396 | "description" : "An enum describing what kind of type a given __Type is", 3397 | "fields" : null, 3398 | "inputFields" : null, 3399 | "interfaces" : null, 3400 | "enumValues" : [ { 3401 | "name" : "SCALAR", 3402 | "description" : "Indicates this type is a scalar.", 3403 | "isDeprecated" : false, 3404 | "deprecationReason" : null 3405 | }, { 3406 | "name" : "OBJECT", 3407 | "description" : "Indicates this type is an object. `fields` and `interfaces` are valid fields.", 3408 | "isDeprecated" : false, 3409 | "deprecationReason" : null 3410 | }, { 3411 | "name" : "INTERFACE", 3412 | "description" : "Indicates this type is an interface. `fields` and `possibleTypes` are valid fields.", 3413 | "isDeprecated" : false, 3414 | "deprecationReason" : null 3415 | }, { 3416 | "name" : "UNION", 3417 | "description" : "Indicates this type is a union. `possibleTypes` is a valid field.", 3418 | "isDeprecated" : false, 3419 | "deprecationReason" : null 3420 | }, { 3421 | "name" : "ENUM", 3422 | "description" : "Indicates this type is an enum. `enumValues` is a valid field.", 3423 | "isDeprecated" : false, 3424 | "deprecationReason" : null 3425 | }, { 3426 | "name" : "INPUT_OBJECT", 3427 | "description" : "Indicates this type is an input object. `inputFields` is a valid field.", 3428 | "isDeprecated" : false, 3429 | "deprecationReason" : null 3430 | }, { 3431 | "name" : "LIST", 3432 | "description" : "Indicates this type is a list. `ofType` is a valid field.", 3433 | "isDeprecated" : false, 3434 | "deprecationReason" : null 3435 | }, { 3436 | "name" : "NON_NULL", 3437 | "description" : "Indicates this type is a non-null. `ofType` is a valid field.", 3438 | "isDeprecated" : false, 3439 | "deprecationReason" : null 3440 | } ], 3441 | "possibleTypes" : null 3442 | }, { 3443 | "kind" : "OBJECT", 3444 | "name" : "__Field", 3445 | "description" : null, 3446 | "fields" : [ { 3447 | "name" : "name", 3448 | "description" : null, 3449 | "args" : [ ], 3450 | "type" : { 3451 | "kind" : "NON_NULL", 3452 | "name" : null, 3453 | "ofType" : { 3454 | "kind" : "SCALAR", 3455 | "name" : "String", 3456 | "ofType" : null 3457 | } 3458 | }, 3459 | "isDeprecated" : false, 3460 | "deprecationReason" : null 3461 | }, { 3462 | "name" : "description", 3463 | "description" : null, 3464 | "args" : [ ], 3465 | "type" : { 3466 | "kind" : "SCALAR", 3467 | "name" : "String", 3468 | "ofType" : null 3469 | }, 3470 | "isDeprecated" : false, 3471 | "deprecationReason" : null 3472 | }, { 3473 | "name" : "args", 3474 | "description" : null, 3475 | "args" : [ ], 3476 | "type" : { 3477 | "kind" : "NON_NULL", 3478 | "name" : null, 3479 | "ofType" : { 3480 | "kind" : "LIST", 3481 | "name" : null, 3482 | "ofType" : { 3483 | "kind" : "NON_NULL", 3484 | "name" : null, 3485 | "ofType" : { 3486 | "kind" : "OBJECT", 3487 | "name" : "__InputValue", 3488 | "ofType" : null 3489 | } 3490 | } 3491 | } 3492 | }, 3493 | "isDeprecated" : false, 3494 | "deprecationReason" : null 3495 | }, { 3496 | "name" : "type", 3497 | "description" : null, 3498 | "args" : [ ], 3499 | "type" : { 3500 | "kind" : "NON_NULL", 3501 | "name" : null, 3502 | "ofType" : { 3503 | "kind" : "OBJECT", 3504 | "name" : "__Type", 3505 | "ofType" : null 3506 | } 3507 | }, 3508 | "isDeprecated" : false, 3509 | "deprecationReason" : null 3510 | }, { 3511 | "name" : "isDeprecated", 3512 | "description" : null, 3513 | "args" : [ ], 3514 | "type" : { 3515 | "kind" : "NON_NULL", 3516 | "name" : null, 3517 | "ofType" : { 3518 | "kind" : "SCALAR", 3519 | "name" : "Boolean", 3520 | "ofType" : null 3521 | } 3522 | }, 3523 | "isDeprecated" : false, 3524 | "deprecationReason" : null 3525 | }, { 3526 | "name" : "deprecationReason", 3527 | "description" : null, 3528 | "args" : [ ], 3529 | "type" : { 3530 | "kind" : "SCALAR", 3531 | "name" : "String", 3532 | "ofType" : null 3533 | }, 3534 | "isDeprecated" : false, 3535 | "deprecationReason" : null 3536 | } ], 3537 | "inputFields" : null, 3538 | "interfaces" : [ ], 3539 | "enumValues" : null, 3540 | "possibleTypes" : null 3541 | }, { 3542 | "kind" : "OBJECT", 3543 | "name" : "__InputValue", 3544 | "description" : null, 3545 | "fields" : [ { 3546 | "name" : "name", 3547 | "description" : null, 3548 | "args" : [ ], 3549 | "type" : { 3550 | "kind" : "NON_NULL", 3551 | "name" : null, 3552 | "ofType" : { 3553 | "kind" : "SCALAR", 3554 | "name" : "String", 3555 | "ofType" : null 3556 | } 3557 | }, 3558 | "isDeprecated" : false, 3559 | "deprecationReason" : null 3560 | }, { 3561 | "name" : "description", 3562 | "description" : null, 3563 | "args" : [ ], 3564 | "type" : { 3565 | "kind" : "SCALAR", 3566 | "name" : "String", 3567 | "ofType" : null 3568 | }, 3569 | "isDeprecated" : false, 3570 | "deprecationReason" : null 3571 | }, { 3572 | "name" : "type", 3573 | "description" : null, 3574 | "args" : [ ], 3575 | "type" : { 3576 | "kind" : "NON_NULL", 3577 | "name" : null, 3578 | "ofType" : { 3579 | "kind" : "OBJECT", 3580 | "name" : "__Type", 3581 | "ofType" : null 3582 | } 3583 | }, 3584 | "isDeprecated" : false, 3585 | "deprecationReason" : null 3586 | }, { 3587 | "name" : "defaultValue", 3588 | "description" : null, 3589 | "args" : [ ], 3590 | "type" : { 3591 | "kind" : "SCALAR", 3592 | "name" : "String", 3593 | "ofType" : null 3594 | }, 3595 | "isDeprecated" : false, 3596 | "deprecationReason" : null 3597 | } ], 3598 | "inputFields" : null, 3599 | "interfaces" : [ ], 3600 | "enumValues" : null, 3601 | "possibleTypes" : null 3602 | }, { 3603 | "kind" : "OBJECT", 3604 | "name" : "__EnumValue", 3605 | "description" : null, 3606 | "fields" : [ { 3607 | "name" : "name", 3608 | "description" : null, 3609 | "args" : [ ], 3610 | "type" : { 3611 | "kind" : "NON_NULL", 3612 | "name" : null, 3613 | "ofType" : { 3614 | "kind" : "SCALAR", 3615 | "name" : "String", 3616 | "ofType" : null 3617 | } 3618 | }, 3619 | "isDeprecated" : false, 3620 | "deprecationReason" : null 3621 | }, { 3622 | "name" : "description", 3623 | "description" : null, 3624 | "args" : [ ], 3625 | "type" : { 3626 | "kind" : "SCALAR", 3627 | "name" : "String", 3628 | "ofType" : null 3629 | }, 3630 | "isDeprecated" : false, 3631 | "deprecationReason" : null 3632 | }, { 3633 | "name" : "isDeprecated", 3634 | "description" : null, 3635 | "args" : [ ], 3636 | "type" : { 3637 | "kind" : "NON_NULL", 3638 | "name" : null, 3639 | "ofType" : { 3640 | "kind" : "SCALAR", 3641 | "name" : "Boolean", 3642 | "ofType" : null 3643 | } 3644 | }, 3645 | "isDeprecated" : false, 3646 | "deprecationReason" : null 3647 | }, { 3648 | "name" : "deprecationReason", 3649 | "description" : null, 3650 | "args" : [ ], 3651 | "type" : { 3652 | "kind" : "SCALAR", 3653 | "name" : "String", 3654 | "ofType" : null 3655 | }, 3656 | "isDeprecated" : false, 3657 | "deprecationReason" : null 3658 | } ], 3659 | "inputFields" : null, 3660 | "interfaces" : [ ], 3661 | "enumValues" : null, 3662 | "possibleTypes" : null 3663 | }, { 3664 | "kind" : "OBJECT", 3665 | "name" : "__Directive", 3666 | "description" : null, 3667 | "fields" : [ { 3668 | "name" : "name", 3669 | "description" : null, 3670 | "args" : [ ], 3671 | "type" : { 3672 | "kind" : "SCALAR", 3673 | "name" : "String", 3674 | "ofType" : null 3675 | }, 3676 | "isDeprecated" : false, 3677 | "deprecationReason" : null 3678 | }, { 3679 | "name" : "description", 3680 | "description" : null, 3681 | "args" : [ ], 3682 | "type" : { 3683 | "kind" : "SCALAR", 3684 | "name" : "String", 3685 | "ofType" : null 3686 | }, 3687 | "isDeprecated" : false, 3688 | "deprecationReason" : null 3689 | }, { 3690 | "name" : "locations", 3691 | "description" : null, 3692 | "args" : [ ], 3693 | "type" : { 3694 | "kind" : "LIST", 3695 | "name" : null, 3696 | "ofType" : { 3697 | "kind" : "NON_NULL", 3698 | "name" : null, 3699 | "ofType" : { 3700 | "kind" : "ENUM", 3701 | "name" : "__DirectiveLocation", 3702 | "ofType" : null 3703 | } 3704 | } 3705 | }, 3706 | "isDeprecated" : false, 3707 | "deprecationReason" : null 3708 | }, { 3709 | "name" : "args", 3710 | "description" : null, 3711 | "args" : [ ], 3712 | "type" : { 3713 | "kind" : "NON_NULL", 3714 | "name" : null, 3715 | "ofType" : { 3716 | "kind" : "LIST", 3717 | "name" : null, 3718 | "ofType" : { 3719 | "kind" : "NON_NULL", 3720 | "name" : null, 3721 | "ofType" : { 3722 | "kind" : "OBJECT", 3723 | "name" : "__InputValue", 3724 | "ofType" : null 3725 | } 3726 | } 3727 | } 3728 | }, 3729 | "isDeprecated" : false, 3730 | "deprecationReason" : null 3731 | }, { 3732 | "name" : "onOperation", 3733 | "description" : null, 3734 | "args" : [ ], 3735 | "type" : { 3736 | "kind" : "SCALAR", 3737 | "name" : "Boolean", 3738 | "ofType" : null 3739 | }, 3740 | "isDeprecated" : true, 3741 | "deprecationReason" : "Use `locations`." 3742 | }, { 3743 | "name" : "onFragment", 3744 | "description" : null, 3745 | "args" : [ ], 3746 | "type" : { 3747 | "kind" : "SCALAR", 3748 | "name" : "Boolean", 3749 | "ofType" : null 3750 | }, 3751 | "isDeprecated" : true, 3752 | "deprecationReason" : "Use `locations`." 3753 | }, { 3754 | "name" : "onField", 3755 | "description" : null, 3756 | "args" : [ ], 3757 | "type" : { 3758 | "kind" : "SCALAR", 3759 | "name" : "Boolean", 3760 | "ofType" : null 3761 | }, 3762 | "isDeprecated" : true, 3763 | "deprecationReason" : "Use `locations`." 3764 | } ], 3765 | "inputFields" : null, 3766 | "interfaces" : [ ], 3767 | "enumValues" : null, 3768 | "possibleTypes" : null 3769 | }, { 3770 | "kind" : "ENUM", 3771 | "name" : "__DirectiveLocation", 3772 | "description" : "An enum describing valid locations where a directive can be placed", 3773 | "fields" : null, 3774 | "inputFields" : null, 3775 | "interfaces" : null, 3776 | "enumValues" : [ { 3777 | "name" : "QUERY", 3778 | "description" : "Indicates the directive is valid on queries.", 3779 | "isDeprecated" : false, 3780 | "deprecationReason" : null 3781 | }, { 3782 | "name" : "MUTATION", 3783 | "description" : "Indicates the directive is valid on mutations.", 3784 | "isDeprecated" : false, 3785 | "deprecationReason" : null 3786 | }, { 3787 | "name" : "FIELD", 3788 | "description" : "Indicates the directive is valid on fields.", 3789 | "isDeprecated" : false, 3790 | "deprecationReason" : null 3791 | }, { 3792 | "name" : "FRAGMENT_DEFINITION", 3793 | "description" : "Indicates the directive is valid on fragment definitions.", 3794 | "isDeprecated" : false, 3795 | "deprecationReason" : null 3796 | }, { 3797 | "name" : "FRAGMENT_SPREAD", 3798 | "description" : "Indicates the directive is valid on fragment spreads.", 3799 | "isDeprecated" : false, 3800 | "deprecationReason" : null 3801 | }, { 3802 | "name" : "INLINE_FRAGMENT", 3803 | "description" : "Indicates the directive is valid on inline fragments.", 3804 | "isDeprecated" : false, 3805 | "deprecationReason" : null 3806 | }, { 3807 | "name" : "SCHEMA", 3808 | "description" : "Indicates the directive is valid on a schema SDL definition.", 3809 | "isDeprecated" : false, 3810 | "deprecationReason" : null 3811 | }, { 3812 | "name" : "SCALAR", 3813 | "description" : "Indicates the directive is valid on a scalar SDL definition.", 3814 | "isDeprecated" : false, 3815 | "deprecationReason" : null 3816 | }, { 3817 | "name" : "OBJECT", 3818 | "description" : "Indicates the directive is valid on an object SDL definition.", 3819 | "isDeprecated" : false, 3820 | "deprecationReason" : null 3821 | }, { 3822 | "name" : "FIELD_DEFINITION", 3823 | "description" : "Indicates the directive is valid on a field SDL definition.", 3824 | "isDeprecated" : false, 3825 | "deprecationReason" : null 3826 | }, { 3827 | "name" : "ARGUMENT_DEFINITION", 3828 | "description" : "Indicates the directive is valid on a field argument SDL definition.", 3829 | "isDeprecated" : false, 3830 | "deprecationReason" : null 3831 | }, { 3832 | "name" : "INTERFACE", 3833 | "description" : "Indicates the directive is valid on an interface SDL definition.", 3834 | "isDeprecated" : false, 3835 | "deprecationReason" : null 3836 | }, { 3837 | "name" : "UNION", 3838 | "description" : "Indicates the directive is valid on an union SDL definition.", 3839 | "isDeprecated" : false, 3840 | "deprecationReason" : null 3841 | }, { 3842 | "name" : "ENUM", 3843 | "description" : "Indicates the directive is valid on an enum SDL definition.", 3844 | "isDeprecated" : false, 3845 | "deprecationReason" : null 3846 | }, { 3847 | "name" : "ENUM_VALUE", 3848 | "description" : "Indicates the directive is valid on an enum value SDL definition.", 3849 | "isDeprecated" : false, 3850 | "deprecationReason" : null 3851 | }, { 3852 | "name" : "INPUT_OBJECT", 3853 | "description" : "Indicates the directive is valid on an input object SDL definition.", 3854 | "isDeprecated" : false, 3855 | "deprecationReason" : null 3856 | }, { 3857 | "name" : "INPUT_FIELD_DEFINITION", 3858 | "description" : "Indicates the directive is valid on an input object field SDL definition.", 3859 | "isDeprecated" : false, 3860 | "deprecationReason" : null 3861 | } ], 3862 | "possibleTypes" : null 3863 | } ], 3864 | "directives" : [ { 3865 | "name" : "include", 3866 | "description" : "Directs the executor to include this field or fragment only when the `if` argument is true", 3867 | "locations" : [ "FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT" ], 3868 | "args" : [ { 3869 | "name" : "if", 3870 | "description" : "Included when true.", 3871 | "type" : { 3872 | "kind" : "NON_NULL", 3873 | "name" : null, 3874 | "ofType" : { 3875 | "kind" : "SCALAR", 3876 | "name" : "Boolean", 3877 | "ofType" : null 3878 | } 3879 | }, 3880 | "defaultValue" : null 3881 | } ], 3882 | "onOperation" : false, 3883 | "onFragment" : true, 3884 | "onField" : true 3885 | }, { 3886 | "name" : "skip", 3887 | "description" : "Directs the executor to skip this field or fragment when the `if`'argument is true.", 3888 | "locations" : [ "FIELD", "FRAGMENT_SPREAD", "INLINE_FRAGMENT" ], 3889 | "args" : [ { 3890 | "name" : "if", 3891 | "description" : "Skipped when true.", 3892 | "type" : { 3893 | "kind" : "NON_NULL", 3894 | "name" : null, 3895 | "ofType" : { 3896 | "kind" : "SCALAR", 3897 | "name" : "Boolean", 3898 | "ofType" : null 3899 | } 3900 | }, 3901 | "defaultValue" : null 3902 | } ], 3903 | "onOperation" : false, 3904 | "onFragment" : true, 3905 | "onField" : true 3906 | }, { 3907 | "name" : "defer", 3908 | "description" : "This directive allows results to be deferred during execution", 3909 | "locations" : [ "FIELD" ], 3910 | "args" : [ ], 3911 | "onOperation" : false, 3912 | "onFragment" : false, 3913 | "onField" : true 3914 | }, { 3915 | "name" : "aws_subscribe", 3916 | "description" : "Tells the service which mutation triggers this subscription.", 3917 | "locations" : [ "FIELD_DEFINITION" ], 3918 | "args" : [ { 3919 | "name" : "mutations", 3920 | "description" : "List of mutations which will trigger this subscription when they are called.", 3921 | "type" : { 3922 | "kind" : "LIST", 3923 | "name" : null, 3924 | "ofType" : { 3925 | "kind" : "SCALAR", 3926 | "name" : "String", 3927 | "ofType" : null 3928 | } 3929 | }, 3930 | "defaultValue" : null 3931 | } ], 3932 | "onOperation" : false, 3933 | "onFragment" : false, 3934 | "onField" : false 3935 | }, { 3936 | "name" : "aws_oidc", 3937 | "description" : "Tells the service this field/object has access authorized by an OIDC token.", 3938 | "locations" : [ "OBJECT", "FIELD_DEFINITION" ], 3939 | "args" : [ ], 3940 | "onOperation" : false, 3941 | "onFragment" : false, 3942 | "onField" : false 3943 | }, { 3944 | "name" : "aws_cognito_user_pools", 3945 | "description" : "Tells the service this field/object has access authorized by a Cognito User Pools token.", 3946 | "locations" : [ "OBJECT", "FIELD_DEFINITION" ], 3947 | "args" : [ { 3948 | "name" : "cognito_groups", 3949 | "description" : "List of cognito user pool groups which have access on this field", 3950 | "type" : { 3951 | "kind" : "LIST", 3952 | "name" : null, 3953 | "ofType" : { 3954 | "kind" : "SCALAR", 3955 | "name" : "String", 3956 | "ofType" : null 3957 | } 3958 | }, 3959 | "defaultValue" : null 3960 | } ], 3961 | "onOperation" : false, 3962 | "onFragment" : false, 3963 | "onField" : false 3964 | }, { 3965 | "name" : "aws_auth", 3966 | "description" : "Directs the schema to enforce authorization on a field", 3967 | "locations" : [ "FIELD_DEFINITION" ], 3968 | "args" : [ { 3969 | "name" : "cognito_groups", 3970 | "description" : "List of cognito user pool groups which have access on this field", 3971 | "type" : { 3972 | "kind" : "LIST", 3973 | "name" : null, 3974 | "ofType" : { 3975 | "kind" : "SCALAR", 3976 | "name" : "String", 3977 | "ofType" : null 3978 | } 3979 | }, 3980 | "defaultValue" : null 3981 | } ], 3982 | "onOperation" : false, 3983 | "onFragment" : false, 3984 | "onField" : false 3985 | }, { 3986 | "name" : "aws_iam", 3987 | "description" : "Tells the service this field/object has access authorized by sigv4 signing.", 3988 | "locations" : [ "OBJECT", "FIELD_DEFINITION" ], 3989 | "args" : [ ], 3990 | "onOperation" : false, 3991 | "onFragment" : false, 3992 | "onField" : false 3993 | }, { 3994 | "name" : "aws_publish", 3995 | "description" : "Tells the service which subscriptions will be published to when this mutation is called. This directive is deprecated use @aws_susbscribe directive instead.", 3996 | "locations" : [ "FIELD_DEFINITION" ], 3997 | "args" : [ { 3998 | "name" : "subscriptions", 3999 | "description" : "List of subscriptions which will be published to when this mutation is called.", 4000 | "type" : { 4001 | "kind" : "LIST", 4002 | "name" : null, 4003 | "ofType" : { 4004 | "kind" : "SCALAR", 4005 | "name" : "String", 4006 | "ofType" : null 4007 | } 4008 | }, 4009 | "defaultValue" : null 4010 | } ], 4011 | "onOperation" : false, 4012 | "onFragment" : false, 4013 | "onField" : false 4014 | }, { 4015 | "name" : "deprecated", 4016 | "description" : null, 4017 | "locations" : [ "FIELD_DEFINITION", "ENUM_VALUE" ], 4018 | "args" : [ { 4019 | "name" : "reason", 4020 | "description" : null, 4021 | "type" : { 4022 | "kind" : "SCALAR", 4023 | "name" : "String", 4024 | "ofType" : null 4025 | }, 4026 | "defaultValue" : "\"No longer supported\"" 4027 | } ], 4028 | "onOperation" : false, 4029 | "onFragment" : false, 4030 | "onField" : false 4031 | }, { 4032 | "name" : "aws_api_key", 4033 | "description" : "Tells the service this field/object has access authorized by an API key.", 4034 | "locations" : [ "OBJECT", "FIELD_DEFINITION" ], 4035 | "args" : [ ], 4036 | "onOperation" : false, 4037 | "onFragment" : false, 4038 | "onField" : false 4039 | } ] 4040 | } 4041 | } 4042 | } --------------------------------------------------------------------------------