{"version":3,"sources":["hooks/UseCustomerApi/ApiHelper.tsx","graphql/mutations.ts","helpers/AmplifyAuthHelpers.tsx","theme/materialUi.ts","images/Logos/Logotype.svg","helpers/SortingHelper.ts","helpers/ShortQueryHelper.tsx","graphql/queries.ts","aws-exports.js","components/BreadCrumbNavigation/index.tsx","components/ErrorBoundary/index.tsx","components/Copyright/index.tsx","components/Footer/index.tsx","screens/Empty/index.tsx","components/PrivateRoute/index.tsx","App.tsx","components/Amplify/CustomSignIn/index.tsx","components/Amplify/CustomSignUp/index.tsx","components/AppWithAuth/index.tsx","serviceWorker.ts","index.tsx","screens/Plans/ListAll/index.tsx","screens/Plans/index.tsx","helpers/RouteHelper.ts","hooks/ReportContext/index.tsx","components/Amplify/FieldPassword/index.tsx","hooks/UseFileApi/ApiHelper.tsx","helpers/StyleHelper.ts","hooks/UseDashboardApi/index.tsx","components/LabelledSwitch/index.tsx","components/PlanCard/index.tsx","screens/Plans/Downgrade/Components/AlertsError.tsx","screens/Plans/Downgrade/Components/ApiKeyError.tsx","screens/Plans/Downgrade/Components/ConfirmStart.tsx","screens/Plans/Downgrade/Components/ScriptsWarning.tsx","screens/Plans/Downgrade/Components/SensorsError.tsx","screens/Plans/Downgrade/Components/StartManage.tsx","screens/Plans/Downgrade/Components/StorageError.tsx","screens/Plans/Downgrade/index.tsx","components/PlanList/index.tsx","hooks/UsePairingApi/index.tsx","hooks/LayoutContext/index.tsx","templates/TextOnly/index.tsx","images/Logos/Logotype-white.svg","helpers/DataHelper.ts","hooks/AuthContext/index.tsx","images/Icons/Dashboard/edit_notes.svg","images/Icons/Dashboard/cloud-upload-files-icon.svg","images/Icons/Dashboard/manage_sensors.svg","images/Icons/Dashboard/my_reports.svg","images/Icons/Dashboard/recordings.svg","images/Icons/Dashboard/sensor.svg","images/Icons/Nav/nav_menu_icon.svg","images/Icons/Nav/nav_sensors_icon.svg","hooks/UseApiKeyApi/index.tsx","API.ts","hooks/UseStripeSessionApi/ApiHelper.tsx","helpers/NavHelper.ts","hooks/UseDashboardApi/ApiHelper.tsx","hooks/UseStripeSessionApi/index.tsx","hooks/UseCustomerApi/index.tsx","hooks/UseStripeSessionApi/StripeSessionContext.tsx","hooks/UseApiKeyApi/ApiHelper.tsx","components/NavPrimary/NavPrimaryItem.tsx","components/NavPrimary/index.tsx","components/SuspendedOverlay/Components/PlanCard.tsx","components/SuspendedOverlay/index.tsx","components/Header/components/NotificationsMenu.tsx","components/Header/components/ProfileMenu.tsx","components/Header/index.tsx","hooks/UsePairingApi/ApiHelper.tsx"],"names":["customerApiName","customerApiPathRoot","ApiTypes","apiUrls","completeFree","createAlert","updateAlert","deleteAlert","createCustomScript","updateCustomScript","deleteCustomScript","createCustomer","updateCustomer","updateDashboard","createTag","deleteTag","signUpNavigate","onStateChange","signInNavigate","forgotPasswordNavigate","signInAction","async","username","password","setAlertUsername","setAlertPassword","setLoading","setPageError","props","signInError","length","Auth","signIn","Error","user","log","challengeName","challengeParam","trigger","_ref","verifiedContact","then","data","isEmpty","verified","Object","assign","checkContact","err","code","message","signUpAction","acceptTerms","setAlertAcceptTerms","signUpError","signUp","signupRequestBody","attributes","catch","changePasswordErrors","LimitExceededException","TooManyFailedAttemptsException","changePasswordAction","oldPassword","newPassword","newPassword2","setAlertOldPassword","setAlertNewPassword","setAlertNewPassword2","onSuccess","alertRef","errorState","current","querySelector","focus","currentAuthenticatedUser","changePassword","errorMessage","updateCustomReportSettingsAction","companyName","customerId","client","logoImage","setAlertLogoImage","urlPatternValidation","mutate","mutation","gql","variables","input","id","defaultTheme","createMuiTheme","palette","primary","main","dark","50","100","200","300","400","500","600","700","800","900","A100","A200","A400","A700","contrastDefaultColor","secondary","light","grey","error","background","paper","default","typography","htmlFontSize","fontFamily","body2","fontSize","caption","color","lineHeight","letterSpacing","MuiAlert","filledError","backgroundColor","MuiButton","root","pointerEvents","text","textTransform","fontWeight","contained","border","borderColor","containedPrimary","containedSecondary","outlined","outlinedPrimary","outlinedSecondary","outlinedSizeLarge","sizeSmall","sizeLarge","padding","textSizeLarge","MuiTableCell","wordBreak","spacing","borderBottom","head","stickyHeader","borderStyle","borderWidth","cursor","paddingTop","paddingBottom","borderLeft","paddingCheckbox","width","MuiTableSortLabel","icon","opacity","MuiTypography","body1","subtitle1","h1","h2","h3","MuiChip","height","borderRadius","margin","clickable","boxShadow","deletable","deleteIcon","maxWidth","MuiSvgIcon","colorSecondary","MuiDialog","paperWidthXs","MuiDialogContentText","marginBottom","MuiDialogTitle","overrides","MuiAlertTitle","MuiAutocomplete","listbox","MuiButtonBase","outline","WebkitTapHighlightColor","MuiDialogActions","MuiDivider","MuiLink","MuiListSubheader","MuiListItemIcon","MuiListItemText","inset","paddingLeft","MuiFormControlLabel","label","MuiMenuItem","minHeight","MuiTable","MuiTablePagination","toolbar","select","MuiTableRow","MuiTextField","options","createMyTheme","_extends","bind","n","e","arguments","t","r","hasOwnProperty","call","apply","_ref2","createElement","_ref3","stroke","strokeWidth","fill","fillRule","transform","d","SvgLogotype","svgRef","title","viewBox","ref","undefined","ForwardRef","forwardRef","desc","a","b","orderBy","stableSort","array","cmp","stabilizedThis","map","el","index","sort","order","getSorting","simpleStrSortAsc","arr","toLowerCase","listAlertsShort","listDeviceAssociationsShort","listUserTagsShort","getDashboardShort","getListOfDashboards","listCustomScriptsShort","listApiKeys","getCustomerByOwnerId","listDeviceAssociations","listTiers","awsmobile","BreadCrumbNavigation","classes","layoutContext","useContext","LayoutContext","prevPageTitle","urlTitle","url","React","Fragment","MaterialLink","component","RouterLink","to","ErrorBoundary","Component","constructor","super","this","state","componentDidCatch","info","render","children","hasError","className","Helmet","getPageTitle","Typography","variant","errorHeader","withStyles","theme","createStyles","alignItems","display","flexDirection","flexGrow","Copyright","year","textLink","href","target","rel","defaultProps","Date","getFullYear","Footer","version","leftDrawerOpen","Grid","container","direction","justify","classNames","footer","footerHasLeftDrawer","item","xs","sm","footerContent","footerContentLt","footerContentRt","process","breakpoints","up","paddingRight","justifyContent","drawerWidth","useStyles","makeStyles","Empty","setPageTitle","useEffect","data-testid","rest","authContext","AuthContext","isAuthorized","Route","NotFound","lazy","App","textAlign","hasDarkerBackground","hasRightDrawer","mainContentSignedIn","transition","transitions","create","easing","easeInOut","duration","leavingScreen","contentShift","enteringScreen","Site","SiteContent","flex","content","visibility","pageTitle","down","marginLeft","mainContent","mainContentPublic","screenContainer","overflow","marginTop","screenContainerPublic","suspenseLoader","zIndex","appBar","errorSnackbar","errorAlert","withRouter","authState","location","history","isPublicRoute","signedIn","subscriptionStatus","isSuspended","darkerBackground","globalSiteErrors","rightDrawerOpen","pushGlobalSiteAlerts","removeGlobalSiteError","GlobalSiteAlertTypes","accountSuspended","BillingSubscriptionStatus","past_due","accountPastDue","replace","historyReplace","search","locationSearch","pathname","locationPathname","queryParams","queryString","parse","querySessionId","toString","get","queryBillingUpdate","accountReactivated","billingUpdated","tierSelected","Div100vh","classnames","Header","Suspense","fallback","LinearProgress","role","Switch","Redirect","exact","path","PrivateScreenRoutes","PrivateRoute","key","PublicScreenRoutes","Snackbar","open","anchorOrigin","vertical","horizontal","autoHideDuration","globalSiteError","errorIndex","Alert","severity","onClose","minWidth","form","submit","logoWrapper","helperText","formHelperIcon","bottomButtons","pageError","validAuthStates","CustomSignIn","loading","useState","setUsername","setPassword","alertUsername","alertPassword","indexOf","handleSignIn","useCallback","event","preventDefault","handleSignUp","handleForgotPassword","Container","CssBaseline","Logotype","Paper","align","noValidate","TextField","fullWidth","name","inputProps","autoCapitalize","autoComplete","value","onChange","currentTarget","FormHelperText","ErrorOutlineIcon","FieldPassword","requirementTexts","Button","disabled","disableFocusRipple","type","size","onClick","CustomSignUp","setAcceptTerms","alertAcceptTerms","FormControlLabel","control","Checkbox","checked","Link","underline","useMemo","reduce","previousValue","currentValue","isRouteSelected","Authenticator","hide","Loading","Greetings","SignIn","SignUp","amplifyConfig","awsconfig","override","Boolean","window","hostname","match","console","API_HOST","Amplify","configure","API","endpoints","pairingApiName","endpoint","pairingApiPathRoot","custom_header","Authorization","currentSession","getIdToken","getJwtToken","fileApiName","fileApiPathRoot","stripeSessionApiName","stripeSessionApiPathRoot","apiKeyApiName","apiKeyApiPathRoot","dashboardApiName","dashboardApiPathRoot","shareDashboardApiName","addPluggable","AWSIoTProvider","aws_pubsub_region","aws_project_region","aws_pubsub_endpoint","AWSAppSyncClient","aws_appsync_graphqlEndpoint","region","aws_appsync_region","auth","AUTH_TYPE","AMAZON_COGNITO_USER_POOLS","jwtToken","disableOffline","ReactDOM","ApolloProvider","Rehydrated","ThemeProvider","materialUiTheme","BrowserRouter","AuthProvider","LayoutProvider","ReportProvider","AppWithAuth","document","getElementById","navigator","serviceWorker","ready","registration","unregister","logotype","flexShrink","logotypeWrapper","bodyText","PlansList","customerNeedsTier","setDarkerBackground","PlanList","Plans","StripeSessionProvider","routePlans","PlanListAll","DeviceCreateStep","DeviceCreateVariant","UserDashboard","UserCustomScripts","UserDefaultScripts","Dashboard","Account","DashboardShare","File","Device","routeUserDashboard","routeSingleDashboard","routeSingleDashboardUrl","dashboardId","routeUserCustomScripts","routeDefaultScripts","routeDashboard","routeAccount","routeAccountAlerts","routeAccountApiKeys","routeDevice","routeDeviceAdd","regex","step","stepMatch","values","join","variantMatch","exp","routeDeviceListAll","routeRecording","routeRecordingListAll","routeUploadRecording","routeAccountBilling","routeAccountSubscription","routeAccountChangePassword","routeAccountReportSettings","ReportContext","createContext","Provider","customerReports","refetchCustomerReports","pushGlobalSiteError","dataUpdateCount","setDataUpdateCount","createModalOpen","setCreateModalOpen","savingInProgress","setSavingInProgress","reportNotifications","setReportNotifications","reportListLastViewed","localStorage","getItem","reorderedReport","setReorderedReport","setItem","inFlightDashboards","setInFlightDashboards","Set","inFlightError","setInFlightError","refreshReportTimeout","newInFlightDashboards","inFlightChange","forEach","customerReport","has","includes","status","delete","oldReportNotifications","isNew","date","setTimeout","clearTimeout","requestPost","createDashboard","UseDashboardApi","defaultContext","createDashboardClick","reportName","selectedTags","fileLimit","customScriptId","confirmButtonRef","defaultScript","file_ids","setAttribute","requestBody","dashboard_id","tags","max_files","custom_script_id","default_script","prevCount","response","returnedData","currentDashboards","copy","add","refreshReportListLastViewed","newDate","format","removeReportNotification","oldNotifications","filter","oldNotification","helperTextPortal","inPortal","inputRef","inputId","showPassword","setShowPassword","passwordLabel","textFieldProps","htmlFor","InputProps","endAdornment","InputAdornment","position","IconButton","aria-label","handleClickShowPassword","onMouseDown","Visibility","VisibilityOff","download","upload","stylesLayout","grid","gridTop","alignContent","gridBottom","superIcon","useStylesLayout","apiType","isShared","apiName","init","body","post","requestDelete","del","selectedOption","offLabel","onLabel","setToggle","switchColor","toggle","card","cardInner","recommendedCard","recommendedText","common","white","planTitle","planButton","paymentGroup","paymentAmount","marginRight","planBenefits","capitalize","tierId","costMonthly","costYearly","yearlyToggled","capLinkedSensors","capStorageGb","capAlerts","hasApiAccess","reportTemplate","generateOnCtaClick","disableCta","recommended","stripeSessionContext","StripeSessionContext","customerData","switchBilling","customerTier","customerFrequency","cost","paymentPeriod","paymentPeriodName","titleText","ctaClasses","ctaVariant","ctaText","onCtaClick","currentTier","currentFrequency","newTierIsUpgrade","newTierIsDowngrade","startCase","origin","push","capAlertText","capStorage","elevation","pluralizeString","dialogText","checkboxLabelRoot","checkboxLabel","customerItem","flexWrap","listContainer","maxHeight","overflowY","withApollo","newTierId","customerAlerts","maxAlerts","leaveDowngrade","continueDowngrade","enabledItems","setEnabledItems","generateCheckToggleAction","itemId","newEnabledItems","remove","enabledItem","errorEnabledAtMax","applyAndContinue","Promise","all","enabled","findIndex","DialogTitle","DialogContent","DialogContentText","itemIsEnabled","alertName","tagName","DialogActions","disableSpacing","ApiKeyError","customerApiKeys","removeApiKeys","UseApiKeyApi","resolve","ConfirmStart","ScriptsWarning","SensorsError","customerSensors","maxSensors","unlinkRequest","UsePairingApi","sensorsToUnlink","enabledSensor","serial_number_id","thing_name","factory_reset","itemSerialNum","itemName","StartManage","StorageError","flowToMaxWidth","confirmStart","startManage","storageError","apiKeyError","sensorsError","alertsError","backdrop","modal","PlansDowngrade","maxStorage","downgradeOpen","setDowngradeOpen","successCallback","currentStepId","setCurrentStepId","customerScripts","refetchCustomerData","downgradeFlow","userAlertCount","userApiKeyCount","userSensorCount","customScriptsCount","userStorage","convertBytesToGb","scriptsError","flow","newStepId","planDowngradeMode","Backdrop","CircularProgress","Dialog","aria-labelledby","AlertsError","planContainer","yearlySwitch","couponForm","dataListTiers","dataLoading","initializing","chooseTier","pushStripeError","downgradeInfo","setDowngradeInfo","loaderOpen","setLoaderOpen","couponCode","setCouponCode","tiers","generateHandleError","generateOnPlanClick","newTierCost","selectedTierCost","switchPlan","getPlanSelectionErrorMessage","newTierData","find","tier","alertMaxCount","storageLimitGb","deviceMaxCount","setYearlyToggled","YearToggleComponent","LabelledSwitch","CouponComponent","TextOnly","recommendedTier","PlanCard","compose","graphql","ne","limit","fetchPolicy","useTheme","newIsMobile","useMediaQuery","setPrevPageTitle","isMobile","setIsMobile","setRightDrawerOpen","setLeftDrawerOpen","globalSiteAlerts","setGlobalSiteAlerts","setGlobalSiteErrors","newAlerts","currentAlerts","removeGlobalSiteAlert","alertId","splice","newError","currentErrors","errorId","newErrors","md","zeroMinWidth","SvgLogotypeWhite","getSerialNumber","serialId","formatSecondsToTimestring","timeInSeconds","pad","num","slice","timeString","Number","parseFloat","toFixed","time","hours","Math","floor","minutes","seconds","milliseconds","formatBytes","bytes","decimals","k","dm","sizes","i","pow","str","count","ending","parseJsonFromString","strBlock","parsedJson","JSON","URL","RegExp","test","getScriptLineErrors","scriptName","scriptError","scriptErrorArray","split","errorAnnotation","lineNum","annotation","row","parseInt","column","apolloContext","ApolloContext","setSignedIn","defaultSignedIn","userInfo","setUserInfo","setCustomerData","setCustomerAlerts","setCustomerApiKeys","setCustomerReports","customerIndexedReports","setCustomerIndexedReports","setCustomerSensors","setCustomerScripts","setIsAuthorized","defaultIsAuthorized","suspended","fetchUser","userData","authData","credData","identityId","authTime","formatUserInfo","currentCredentials","Hub","listen","payload","visitingReport","matchPath","refetchCustomerAlerts","query","owner","eq","alertData","refetchCustomerApiKeys","apiKeyData","nextToken","dashboards","listDashboards","reports","fixedReportsData","report","updatedAt","createdAt","topReports","needSortReports","sequence","sortedReports","indexedReports","idx","refetchCustomerScripts","scriptsData","refetchCustomerSensors","DeviceAssociationStatus","sensorData","itemData","stripePlanId","billingFrequency","getBillingFrequency","billingCost","billingField","SvgEditNotes","x","y","style","enableBackground","xmlSpace","_ref4","points","_ref5","SvgCloudUploadFilesIcon","clipRule","SvgManageSensors","SvgMyReports","SvgRecordings","SvgSensor","rx","SvgNavMenuIcon","xlinkHref","mask","fillOpacity","SvgNavSensorsIcon","TierName","StripePlanId","SortDirection","cancel","updateBilling","complete","updateSubscription","generateTierId","starter_monthly","starter_yearly_2021","professional_monthly","professional_yearly","enterprise_monthly","enterprise_yearly","currentLocation","strict","isExact","generate","revoke","view","UseStripeSessionApi","UseCustomerApi","stripeKey","stripe","Stripe","Consumer","currentStripeStatus","ownerId","initRequest","useStripeSessionApi","cancelRequest","updateBillingInfo","completeFreeCustomer","useCustomerApi","CustomerApiTypes","errorDetailMessage","fullErrorMessage","choosePaidTier","handleError","selectedPlanId","success_url","cancel_url","promo_code","plan_id","result","sessionId","redirectToCheckout","chooseFreeTier","completeSwitch","switchActivePlan","tierCost","frequencySelected","frequencyChange","active","backUrl","listItemRoot","listItemSelected","listIcon","left","top","selectedIcon","withTheme","external","closeDrawer","selected","RenderIcon","NavMenuItemIcon","ListItem","button","ListItemIcon","ListItemText","disableTypography","menuButtonContainer","menuButton","menuOpen","menuIcon","menuSubheader","authStatus","drawer","drawerPaper","mixins","toolbarSpacing","customIcons","navListContainer","breakpointIsMdPlus","subItems","ACCOUNT","SETTINGS","SUPPORT","aria-haspopup","aria-expanded","aria-controls","handleDrawerToggle","MenuIcon","Drawer","anchor","List","keys","ListSubheader","disableSticky","disableGutters","NavPrimaryItem","customerTierId","customerCost","header","cardHeader","SuspendedOverlay","menuPaper","menuStorageUsage","menuStoragePercentage","menuStoragePercentageBar","menuTierName","menuDivider","subheader","borderBottomWidth","borderBottomStyle","borderBottomColor","NotificationsMenu","anchorEl","setAnchorEl","reportContext","closeMenu","Badge","badgeContent","NotificationsIcon","Popover","transformOrigin","reportNotification","notificationIndex","TrendingUpIcon","KeyboardArrowRightIcon","ProfileMenu","userEmail","userTier","userAlerts","userSensors","tierMaxStorage","userStoragePercentageUsed","logoutAction","signOut","reload","menuSensorLink","Form","menuSensorCta","menuAlertCta","planCta","edge","AccountCircleIcon","ArrowDropDownIcon","Divider","bar","headerContent","snackbarAlert","action","appBarUnderline","appBarLoggedOut","gutters","menuSection","globalSiteAlertText","passwordChanged","updatedCustomReportSettings","suspendedAt","siteAlertContent","userChangingPlan","AppBar","Collapse","in","globalSiteAlert","alertIndex","ReportProblemIcon","Toolbar","NavPrimary","ApiInitErrorStatus","confirm","unlink","wait"],"mappings":"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","file":"static/js/main.1ef764dd.chunk.js","sourcesContent":["export const customerApiName = 'customer';\nexport const customerApiPathRoot = '/customer';\n\nexport interface PostParams {\n completeFree: {};\n}\n\nexport enum ApiTypes {\n COMPLETE_FREE = 'completeFree'\n}\n\nexport type ApiCallback = () => string;\n\nexport type ApiUrlsSignature = { [key in ApiTypes]: ApiCallback };\n\nexport const apiUrls: ApiUrlsSignature = {\n completeFree: () => `/complete-free`\n};\n","/* tslint:disable */\n/* eslint-disable */\n// this is an auto generated file. This will be overwritten\n\nexport const createAlert = /* GraphQL */ `\n mutation CreateAlert(\n $input: CreateAlertInput!\n $condition: ModelAlertConditionInput\n ) {\n createAlert(input: $input, condition: $condition) {\n id\n owner\n customerId\n name\n tagName\n enabled\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n }\n deviceAssociations {\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const updateAlert = /* GraphQL */ `\n mutation UpdateAlert(\n $input: UpdateAlertInput!\n $condition: ModelAlertConditionInput\n ) {\n updateAlert(input: $input, condition: $condition) {\n id\n owner\n customerId\n name\n tagName\n enabled\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n }\n deviceAssociations {\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const deleteAlert = /* GraphQL */ `\n mutation DeleteAlert(\n $input: DeleteAlertInput!\n $condition: ModelAlertConditionInput\n ) {\n deleteAlert(input: $input, condition: $condition) {\n id\n owner\n customerId\n name\n tagName\n enabled\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n }\n deviceAssociations {\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const createApiKey = /* GraphQL */ `\n mutation CreateApiKey(\n $input: CreateApiKeyInput!\n $condition: ModelApiKeyConditionInput\n ) {\n createApiKey(input: $input, condition: $condition) {\n id\n name\n owner\n revoked\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateApiKey = /* GraphQL */ `\n mutation UpdateApiKey(\n $input: UpdateApiKeyInput!\n $condition: ModelApiKeyConditionInput\n ) {\n updateApiKey(input: $input, condition: $condition) {\n id\n name\n owner\n revoked\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteApiKey = /* GraphQL */ `\n mutation DeleteApiKey(\n $input: DeleteApiKeyInput!\n $condition: ModelApiKeyConditionInput\n ) {\n deleteApiKey(input: $input, condition: $condition) {\n id\n name\n owner\n revoked\n createdAt\n updatedAt\n }\n }\n`;\nexport const createAttribute = /* GraphQL */ `\n mutation CreateAttribute(\n $input: CreateAttributeInput!\n $condition: ModelAttributeConditionInput\n ) {\n createAttribute(input: $input, condition: $condition) {\n id\n user_id\n attributeFileId\n name\n type\n value\n thing\n mutable\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateAttribute = /* GraphQL */ `\n mutation UpdateAttribute(\n $input: UpdateAttributeInput!\n $condition: ModelAttributeConditionInput\n ) {\n updateAttribute(input: $input, condition: $condition) {\n id\n user_id\n attributeFileId\n name\n type\n value\n thing\n mutable\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteAttribute = /* GraphQL */ `\n mutation DeleteAttribute(\n $input: DeleteAttributeInput!\n $condition: ModelAttributeConditionInput\n ) {\n deleteAttribute(input: $input, condition: $condition) {\n id\n user_id\n attributeFileId\n name\n type\n value\n thing\n mutable\n createdAt\n updatedAt\n }\n }\n`;\nexport const createBilling = /* GraphQL */ `\n mutation CreateBilling(\n $input: CreateBillingInput!\n $condition: ModelBillingConditionInput\n ) {\n createBilling(input: $input, condition: $condition) {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n }\n deviceAssociations {\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const updateBilling = /* GraphQL */ `\n mutation UpdateBilling(\n $input: UpdateBillingInput!\n $condition: ModelBillingConditionInput\n ) {\n updateBilling(input: $input, condition: $condition) {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n }\n deviceAssociations {\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const deleteBilling = /* GraphQL */ `\n mutation DeleteBilling(\n $input: DeleteBillingInput!\n $condition: ModelBillingConditionInput\n ) {\n deleteBilling(input: $input, condition: $condition) {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n }\n deviceAssociations {\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const createCustomScript = /* GraphQL */ `\n mutation CreateCustomScript(\n $input: CreateCustomScriptInput!\n $condition: ModelCustomScriptConditionInput\n ) {\n createCustomScript(input: $input, condition: $condition) {\n id\n owner\n error {\n code\n detail\n message\n status\n traces {\n filename\n lineno\n name\n offset\n text\n }\n transactionId\n type\n }\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateCustomScript = /* GraphQL */ `\n mutation UpdateCustomScript(\n $input: UpdateCustomScriptInput!\n $condition: ModelCustomScriptConditionInput\n ) {\n updateCustomScript(input: $input, condition: $condition) {\n id\n owner\n error {\n code\n detail\n message\n status\n traces {\n filename\n lineno\n name\n offset\n text\n }\n transactionId\n type\n }\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteCustomScript = /* GraphQL */ `\n mutation DeleteCustomScript(\n $input: DeleteCustomScriptInput!\n $condition: ModelCustomScriptConditionInput\n ) {\n deleteCustomScript(input: $input, condition: $condition) {\n id\n owner\n error {\n code\n detail\n message\n status\n traces {\n filename\n lineno\n name\n offset\n text\n }\n transactionId\n type\n }\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n }\n`;\nexport const createCustomer = /* GraphQL */ `\n mutation CreateCustomer(\n $input: CreateCustomerInput!\n $condition: ModelCustomerConditionInput\n ) {\n createCustomer(input: $input, condition: $condition) {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n items {\n id\n name\n owner\n revoked\n createdAt\n updatedAt\n }\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n }\n deviceAssociations {\n items {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n stripePlans {\n nextToken\n }\n }\n }\n }\n`;\nexport const updateCustomer = /* GraphQL */ `\n mutation UpdateCustomer(\n $input: UpdateCustomerInput!\n $condition: ModelCustomerConditionInput\n ) {\n updateCustomer(input: $input, condition: $condition) {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n items {\n id\n name\n owner\n revoked\n createdAt\n updatedAt\n }\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n }\n deviceAssociations {\n items {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n stripePlans {\n nextToken\n }\n }\n }\n }\n`;\nexport const deleteCustomer = /* GraphQL */ `\n mutation DeleteCustomer(\n $input: DeleteCustomerInput!\n $condition: ModelCustomerConditionInput\n ) {\n deleteCustomer(input: $input, condition: $condition) {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n items {\n id\n name\n owner\n revoked\n createdAt\n updatedAt\n }\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n }\n deviceAssociations {\n items {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n stripePlans {\n nextToken\n }\n }\n }\n }\n`;\nexport const createDashboard = /* GraphQL */ `\n mutation CreateDashboard(\n $input: CreateDashboardInput!\n $condition: ModelDashboardConditionInput\n ) {\n createDashboard(input: $input, condition: $condition) {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n customScript {\n id\n owner\n error {\n code\n detail\n message\n status\n transactionId\n type\n }\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n sequence\n modules {\n items {\n id\n owner\n dashboardId\n sequence\n title\n createdAt\n updatedAt\n }\n nextToken\n }\n shares {\n items {\n id\n dashboardId\n token\n expires\n createdAt\n updatedAt\n owner\n }\n nextToken\n }\n }\n }\n`;\nexport const updateDashboard = /* GraphQL */ `\n mutation UpdateDashboard(\n $input: UpdateDashboardInput!\n $condition: ModelDashboardConditionInput\n ) {\n updateDashboard(input: $input, condition: $condition) {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n customScript {\n id\n owner\n error {\n code\n detail\n message\n status\n transactionId\n type\n }\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n sequence\n modules {\n items {\n id\n owner\n dashboardId\n sequence\n title\n createdAt\n updatedAt\n }\n nextToken\n }\n shares {\n items {\n id\n dashboardId\n token\n expires\n createdAt\n updatedAt\n owner\n }\n nextToken\n }\n }\n }\n`;\nexport const deleteDashboard = /* GraphQL */ `\n mutation DeleteDashboard(\n $input: DeleteDashboardInput!\n $condition: ModelDashboardConditionInput\n ) {\n deleteDashboard(input: $input, condition: $condition) {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n customScript {\n id\n owner\n error {\n code\n detail\n message\n status\n transactionId\n type\n }\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n sequence\n modules {\n items {\n id\n owner\n dashboardId\n sequence\n title\n createdAt\n updatedAt\n }\n nextToken\n }\n shares {\n items {\n id\n dashboardId\n token\n expires\n createdAt\n updatedAt\n owner\n }\n nextToken\n }\n }\n }\n`;\nexport const createDashboardModule = /* GraphQL */ `\n mutation CreateDashboardModule(\n $input: CreateDashboardModuleInput!\n $condition: ModelDashboardModuleConditionInput\n ) {\n createDashboardModule(input: $input, condition: $condition) {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n customScript {\n id\n owner\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n sequence\n modules {\n nextToken\n }\n shares {\n nextToken\n }\n }\n data {\n items {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n }\n nextToken\n }\n frames {\n items {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n }\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n }\n`;\nexport const updateDashboardModule = /* GraphQL */ `\n mutation UpdateDashboardModule(\n $input: UpdateDashboardModuleInput!\n $condition: ModelDashboardModuleConditionInput\n ) {\n updateDashboardModule(input: $input, condition: $condition) {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n customScript {\n id\n owner\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n sequence\n modules {\n nextToken\n }\n shares {\n nextToken\n }\n }\n data {\n items {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n }\n nextToken\n }\n frames {\n items {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n }\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n }\n`;\nexport const deleteDashboardModule = /* GraphQL */ `\n mutation DeleteDashboardModule(\n $input: DeleteDashboardModuleInput!\n $condition: ModelDashboardModuleConditionInput\n ) {\n deleteDashboardModule(input: $input, condition: $condition) {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n customScript {\n id\n owner\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n sequence\n modules {\n nextToken\n }\n shares {\n nextToken\n }\n }\n data {\n items {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n }\n nextToken\n }\n frames {\n items {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n }\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n }\n`;\nexport const createDashboardModuleData = /* GraphQL */ `\n mutation CreateDashboardModuleData(\n $input: CreateDashboardModuleDataInput!\n $condition: ModelDashboardModuleDataConditionInput\n ) {\n createDashboardModuleData(input: $input, condition: $condition) {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n module {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n data {\n nextToken\n }\n frames {\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const updateDashboardModuleData = /* GraphQL */ `\n mutation UpdateDashboardModuleData(\n $input: UpdateDashboardModuleDataInput!\n $condition: ModelDashboardModuleDataConditionInput\n ) {\n updateDashboardModuleData(input: $input, condition: $condition) {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n module {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n data {\n nextToken\n }\n frames {\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const deleteDashboardModuleData = /* GraphQL */ `\n mutation DeleteDashboardModuleData(\n $input: DeleteDashboardModuleDataInput!\n $condition: ModelDashboardModuleDataConditionInput\n ) {\n deleteDashboardModuleData(input: $input, condition: $condition) {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n module {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n data {\n nextToken\n }\n frames {\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const createDashboardModuleFrame = /* GraphQL */ `\n mutation CreateDashboardModuleFrame(\n $input: CreateDashboardModuleFrameInput!\n $condition: ModelDashboardModuleFrameConditionInput\n ) {\n createDashboardModuleFrame(input: $input, condition: $condition) {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n module {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n data {\n nextToken\n }\n frames {\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const updateDashboardModuleFrame = /* GraphQL */ `\n mutation UpdateDashboardModuleFrame(\n $input: UpdateDashboardModuleFrameInput!\n $condition: ModelDashboardModuleFrameConditionInput\n ) {\n updateDashboardModuleFrame(input: $input, condition: $condition) {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n module {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n data {\n nextToken\n }\n frames {\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const deleteDashboardModuleFrame = /* GraphQL */ `\n mutation DeleteDashboardModuleFrame(\n $input: DeleteDashboardModuleFrameInput!\n $condition: ModelDashboardModuleFrameConditionInput\n ) {\n deleteDashboardModuleFrame(input: $input, condition: $condition) {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n module {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n data {\n nextToken\n }\n frames {\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const createDashboardModuleLayout = /* GraphQL */ `\n mutation CreateDashboardModuleLayout(\n $input: CreateDashboardModuleLayoutInput!\n $condition: ModelDashboardModuleLayoutConditionInput\n ) {\n createDashboardModuleLayout(input: $input, condition: $condition) {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateDashboardModuleLayout = /* GraphQL */ `\n mutation UpdateDashboardModuleLayout(\n $input: UpdateDashboardModuleLayoutInput!\n $condition: ModelDashboardModuleLayoutConditionInput\n ) {\n updateDashboardModuleLayout(input: $input, condition: $condition) {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteDashboardModuleLayout = /* GraphQL */ `\n mutation DeleteDashboardModuleLayout(\n $input: DeleteDashboardModuleLayoutInput!\n $condition: ModelDashboardModuleLayoutConditionInput\n ) {\n deleteDashboardModuleLayout(input: $input, condition: $condition) {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n`;\nexport const createDashboardShare = /* GraphQL */ `\n mutation CreateDashboardShare(\n $input: CreateDashboardShareInput!\n $condition: ModelDashboardShareConditionInput\n ) {\n createDashboardShare(input: $input, condition: $condition) {\n id\n dashboardId\n token\n expires\n createdAt\n updatedAt\n owner\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n customScript {\n id\n owner\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n sequence\n modules {\n nextToken\n }\n shares {\n nextToken\n }\n }\n }\n }\n`;\nexport const updateDashboardShare = /* GraphQL */ `\n mutation UpdateDashboardShare(\n $input: UpdateDashboardShareInput!\n $condition: ModelDashboardShareConditionInput\n ) {\n updateDashboardShare(input: $input, condition: $condition) {\n id\n dashboardId\n token\n expires\n createdAt\n updatedAt\n owner\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n customScript {\n id\n owner\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n sequence\n modules {\n nextToken\n }\n shares {\n nextToken\n }\n }\n }\n }\n`;\nexport const deleteDashboardShare = /* GraphQL */ `\n mutation DeleteDashboardShare(\n $input: DeleteDashboardShareInput!\n $condition: ModelDashboardShareConditionInput\n ) {\n deleteDashboardShare(input: $input, condition: $condition) {\n id\n dashboardId\n token\n expires\n createdAt\n updatedAt\n owner\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n customScript {\n id\n owner\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n sequence\n modules {\n nextToken\n }\n shares {\n nextToken\n }\n }\n }\n }\n`;\nexport const createDevice = /* GraphQL */ `\n mutation CreateDevice(\n $input: CreateDeviceInput!\n $condition: ModelDeviceConditionInput\n ) {\n createDevice(input: $input, condition: $condition) {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n associations {\n items {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\nexport const updateDevice = /* GraphQL */ `\n mutation UpdateDevice(\n $input: UpdateDeviceInput!\n $condition: ModelDeviceConditionInput\n ) {\n updateDevice(input: $input, condition: $condition) {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n associations {\n items {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\nexport const deleteDevice = /* GraphQL */ `\n mutation DeleteDevice(\n $input: DeleteDeviceInput!\n $condition: ModelDeviceConditionInput\n ) {\n deleteDevice(input: $input, condition: $condition) {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n associations {\n items {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\nexport const createDeviceAssociation = /* GraphQL */ `\n mutation CreateDeviceAssociation(\n $input: CreateDeviceAssociationInput!\n $condition: ModelDeviceAssociationConditionInput\n ) {\n createDeviceAssociation(input: $input, condition: $condition) {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n }\n deviceAssociations {\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n device {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n associations {\n nextToken\n }\n }\n files {\n items {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\nexport const updateDeviceAssociation = /* GraphQL */ `\n mutation UpdateDeviceAssociation(\n $input: UpdateDeviceAssociationInput!\n $condition: ModelDeviceAssociationConditionInput\n ) {\n updateDeviceAssociation(input: $input, condition: $condition) {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n }\n deviceAssociations {\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n device {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n associations {\n nextToken\n }\n }\n files {\n items {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\nexport const deleteDeviceAssociation = /* GraphQL */ `\n mutation DeleteDeviceAssociation(\n $input: DeleteDeviceAssociationInput!\n $condition: ModelDeviceAssociationConditionInput\n ) {\n deleteDeviceAssociation(input: $input, condition: $condition) {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n }\n deviceAssociations {\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n device {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n associations {\n nextToken\n }\n }\n files {\n items {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\nexport const createFile = /* GraphQL */ `\n mutation CreateFile(\n $input: CreateFileInput!\n $condition: ModelFileConditionInput\n ) {\n createFile(input: $input, condition: $condition) {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n attributes {\n items {\n id\n user_id\n attributeFileId\n name\n type\n value\n thing\n mutable\n createdAt\n updatedAt\n }\n nextToken\n }\n device {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n device {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n }\n files {\n nextToken\n }\n }\n tags {\n items {\n id\n user_id\n tagFileId\n value\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\nexport const updateFile = /* GraphQL */ `\n mutation UpdateFile(\n $input: UpdateFileInput!\n $condition: ModelFileConditionInput\n ) {\n updateFile(input: $input, condition: $condition) {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n attributes {\n items {\n id\n user_id\n attributeFileId\n name\n type\n value\n thing\n mutable\n createdAt\n updatedAt\n }\n nextToken\n }\n device {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n device {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n }\n files {\n nextToken\n }\n }\n tags {\n items {\n id\n user_id\n tagFileId\n value\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\nexport const deleteFile = /* GraphQL */ `\n mutation DeleteFile(\n $input: DeleteFileInput!\n $condition: ModelFileConditionInput\n ) {\n deleteFile(input: $input, condition: $condition) {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n attributes {\n items {\n id\n user_id\n attributeFileId\n name\n type\n value\n thing\n mutable\n createdAt\n updatedAt\n }\n nextToken\n }\n device {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n device {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n }\n files {\n nextToken\n }\n }\n tags {\n items {\n id\n user_id\n tagFileId\n value\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\nexport const createStripePlan = /* GraphQL */ `\n mutation CreateStripePlan(\n $input: CreateStripePlanInput!\n $condition: ModelStripePlanConditionInput\n ) {\n createStripePlan(input: $input, condition: $condition) {\n id\n tierId\n billingCycle\n cost\n createdAt\n updatedAt\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n stripePlans {\n nextToken\n }\n }\n }\n }\n`;\nexport const updateStripePlan = /* GraphQL */ `\n mutation UpdateStripePlan(\n $input: UpdateStripePlanInput!\n $condition: ModelStripePlanConditionInput\n ) {\n updateStripePlan(input: $input, condition: $condition) {\n id\n tierId\n billingCycle\n cost\n createdAt\n updatedAt\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n stripePlans {\n nextToken\n }\n }\n }\n }\n`;\nexport const deleteStripePlan = /* GraphQL */ `\n mutation DeleteStripePlan(\n $input: DeleteStripePlanInput!\n $condition: ModelStripePlanConditionInput\n ) {\n deleteStripePlan(input: $input, condition: $condition) {\n id\n tierId\n billingCycle\n cost\n createdAt\n updatedAt\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n stripePlans {\n nextToken\n }\n }\n }\n }\n`;\nexport const createTag = /* GraphQL */ `\n mutation CreateTag(\n $input: CreateTagInput!\n $condition: ModelTagConditionInput\n ) {\n createTag(input: $input, condition: $condition) {\n id\n user_id\n tagFileId\n value\n createdAt\n updatedAt\n }\n }\n`;\nexport const updateTag = /* GraphQL */ `\n mutation UpdateTag(\n $input: UpdateTagInput!\n $condition: ModelTagConditionInput\n ) {\n updateTag(input: $input, condition: $condition) {\n id\n user_id\n tagFileId\n value\n createdAt\n updatedAt\n }\n }\n`;\nexport const deleteTag = /* GraphQL */ `\n mutation DeleteTag(\n $input: DeleteTagInput!\n $condition: ModelTagConditionInput\n ) {\n deleteTag(input: $input, condition: $condition) {\n id\n user_id\n tagFileId\n value\n createdAt\n updatedAt\n }\n }\n`;\nexport const createTier = /* GraphQL */ `\n mutation CreateTier(\n $input: CreateTierInput!\n $condition: ModelTierConditionInput\n ) {\n createTier(input: $input, condition: $condition) {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n stripePlans {\n items {\n id\n tierId\n billingCycle\n cost\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\nexport const updateTier = /* GraphQL */ `\n mutation UpdateTier(\n $input: UpdateTierInput!\n $condition: ModelTierConditionInput\n ) {\n updateTier(input: $input, condition: $condition) {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n stripePlans {\n items {\n id\n tierId\n billingCycle\n cost\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\nexport const deleteTier = /* GraphQL */ `\n mutation DeleteTier(\n $input: DeleteTierInput!\n $condition: ModelTierConditionInput\n ) {\n deleteTier(input: $input, condition: $condition) {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n stripePlans {\n items {\n id\n tierId\n billingCycle\n cost\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\n","import Auth from '@aws-amplify/auth';\nimport ApolloClient from 'apollo-client';\nimport gql from 'graphql-tag';\nimport { isEmpty } from 'lodash';\nimport * as log from 'loglevel';\nimport { updateCustomer } from '../graphql/mutations';\nimport { urlPatternValidation } from './DataHelper';\n\nexport type OnStateChange = undefined | ((newState: string, user: any) => {});\n\ninterface CheckContactProps {\n onStateChange: OnStateChange;\n user: any;\n}\nexport const checkContact = ({ onStateChange, user }: CheckContactProps) => {\n if (!onStateChange) return;\n if (!Auth || typeof Auth.verifiedContact !== 'function') {\n throw new Error(\n 'No Auth module found, please ensure @aws-amplify/auth is imported'\n );\n }\n Auth.verifiedContact(user).then(data => {\n if (!isEmpty(data.verified)) {\n onStateChange('signedIn', user);\n } else {\n user = Object.assign(user, data);\n onStateChange('verifyContact', user);\n }\n });\n};\n\nexport const signUpNavigate = (onStateChange: OnStateChange) => {\n if (!onStateChange) return;\n onStateChange('signUp', {});\n};\n\nexport const signInNavigate = (onStateChange: OnStateChange) => {\n if (!onStateChange) return;\n onStateChange('signIn', {});\n};\n\nexport const forgotPasswordNavigate = (onStateChange: OnStateChange) => {\n if (!onStateChange) return;\n onStateChange('forgotPassword', {});\n};\n\nexport const changePasswordNavigate = (onStateChange: OnStateChange) => {\n if (!onStateChange) return;\n onStateChange('changePassword', {});\n};\n\ninterface SignInProps {\n username: string;\n password: string;\n onStateChange: OnStateChange;\n setAlertUsername: React.Dispatch;\n setAlertPassword: React.Dispatch;\n setLoading: React.Dispatch;\n setPageError: React.Dispatch;\n}\nexport const signInAction = async (props: SignInProps) => {\n const {\n username,\n password,\n onStateChange,\n setAlertUsername,\n setAlertPassword,\n setLoading,\n setPageError\n } = props;\n let signInError = false;\n if (username.length <= 0) {\n setAlertUsername('Please enter a valid email address');\n signInError = true;\n }\n if (password.length <= 0) {\n setAlertPassword('Password is a required field');\n signInError = true;\n }\n if (signInError || !onStateChange) return;\n if (!Auth || typeof Auth.signIn !== 'function') {\n throw new Error(\n 'No Auth module found, please ensure @aws-amplify/auth is imported'\n );\n }\n setLoading(true);\n try {\n const user = await Auth.signIn(username, password);\n log.debug(user);\n if (\n user.challengeName === 'SMS_MFA' ||\n user.challengeName === 'SOFTWARE_TOKEN_MFA'\n ) {\n log.debug('confirm user with ' + user.challengeName);\n onStateChange('confirmSignIn', user);\n } else if (user.challengeName === 'NEW_PASSWORD_REQUIRED') {\n log.debug('require new password', user.challengeParam);\n onStateChange('requireNewPassword', user);\n } else if (user.challengeName === 'MFA_SETUP') {\n log.debug('TOTP setup', user.challengeParam);\n onStateChange('TOTPSetup', user);\n } else if (\n user.challengeName === 'CUSTOM_CHALLENGE' &&\n user.challengeParam &&\n user.challengeParam.trigger === 'true'\n ) {\n log.debug('custom challenge', user.challengeParam);\n onStateChange('customConfirmSignIn', user);\n } else {\n checkContact({ onStateChange, user });\n }\n } catch (err) {\n if (\n err.code === 'InvalidParameterException' &&\n err.message === 'Username should be an email.'\n ) {\n setAlertUsername('Please enter a valid email address');\n } else if (err.code === 'UserNotConfirmedException') {\n log.debug('the user is not confirmed');\n setPageError('Your user is not confirmed');\n onStateChange('confirmSignUp', { username });\n } else if (err.code === 'PasswordResetRequiredException') {\n log.debug('the user requires a new password');\n setPageError('Your password will need to be changed');\n onStateChange('forgotPassword', { username });\n } else {\n log.error('Login error', err);\n setPageError(err.message);\n }\n } finally {\n setLoading(false);\n }\n};\n\ninterface SignUpProps {\n username: string;\n password: string;\n acceptTerms: boolean;\n onStateChange: OnStateChange;\n setAlertUsername: React.Dispatch;\n setAlertPassword: React.Dispatch;\n setAlertAcceptTerms: React.Dispatch;\n setLoading: React.Dispatch;\n setPageError: React.Dispatch;\n}\nexport const signUpAction = async (props: SignUpProps) => {\n const {\n username,\n password,\n acceptTerms,\n onStateChange,\n setAlertUsername,\n setAlertPassword,\n setAlertAcceptTerms,\n setLoading,\n setPageError\n } = props;\n let signUpError = false;\n if (username.length <= 0) {\n setAlertUsername('Please enter a valid email address');\n signUpError = true;\n }\n if (password.length < 8) {\n setAlertPassword('Password must be at least 8 characters');\n signUpError = true;\n }\n if (!acceptTerms) {\n setAlertAcceptTerms('Please accept the Privacy Policy and Terms of Use');\n signUpError = true;\n }\n if (!onStateChange) return;\n if (signUpError) {\n setPageError('One or more error has occurred.');\n return;\n }\n if (!Auth || typeof Auth.signUp !== 'function') {\n throw new Error(\n 'No Auth module found, please ensure @aws-amplify/auth is imported'\n );\n }\n try {\n setLoading(true);\n const signupRequestBody = {\n username,\n password,\n attributes: {}\n };\n\n Auth.signUp(signupRequestBody)\n .then(data => {\n onStateChange('confirmSignUp', username);\n })\n .catch(err => {\n if (\n err.code === 'InvalidParameterException' &&\n err.message === 'Username should be an email.'\n ) {\n setAlertUsername('Please enter a valid email address');\n } else {\n log.error('Sign up error', err);\n setPageError(err.message);\n }\n });\n } catch (err) {\n log.error('Sign up error', err);\n setPageError(err.message);\n } finally {\n setLoading(false);\n }\n};\n\ninterface ChangePasswordProps {\n oldPassword: string;\n newPassword: string;\n newPassword2: string;\n setAlertOldPassword: React.Dispatch;\n setAlertNewPassword: React.Dispatch;\n setAlertNewPassword2: React.Dispatch;\n setLoading: React.Dispatch;\n setPageError: React.Dispatch;\n onSuccess: () => void;\n alertRef?: any;\n}\n\ninterface UpdateCustomReportSettingsProps {\n client?: ApolloClient;\n customerId: string;\n companyName: string;\n logoImage: string;\n setAlertLogoImage: React.Dispatch;\n setLoading: React.Dispatch;\n setPageError: React.Dispatch;\n onSuccess: () => void;\n alertRef?: any;\n}\n\nconst changePasswordErrors: { [key: string]: string } = {\n LimitExceededException:\n 'Attempt limit exceeded, please try again after some time.',\n TooManyFailedAttemptsException:\n 'Too many failed attempts, please try again after some time.'\n};\n\nexport const changePasswordAction = async (props: ChangePasswordProps) => {\n const {\n oldPassword,\n newPassword,\n newPassword2,\n setAlertOldPassword,\n setAlertNewPassword,\n setAlertNewPassword2,\n setLoading,\n setPageError,\n onSuccess,\n alertRef\n } = props;\n let errorState = false;\n if (oldPassword.length < 8) {\n setAlertOldPassword('Required');\n errorState = true;\n }\n if (newPassword.length < 8) {\n setAlertNewPassword('Required and must be at least 8 characters');\n errorState = true;\n }\n if (newPassword2.length < 8) {\n setAlertNewPassword2('Required and must match new password');\n errorState = true;\n }\n if (!errorState && newPassword !== newPassword2) {\n setAlertNewPassword('New Passwords must match');\n setAlertNewPassword2('New Passwords must match');\n errorState = true;\n }\n if (!errorState && oldPassword === newPassword) {\n setAlertNewPassword(\n 'Your new password cannot be the same as your old password.'\n );\n errorState = true;\n }\n if (errorState) {\n setPageError('Sorry, at least one error has occurred.');\n alertRef.current.querySelector('input').focus();\n return;\n }\n if (!Auth || typeof Auth.signIn !== 'function') {\n throw new Error(\n 'No Auth module found, please ensure @aws-amplify/auth is imported'\n );\n }\n setLoading(true);\n try {\n Auth.currentAuthenticatedUser()\n .then(user => {\n return Auth.changePassword(user, oldPassword, newPassword);\n })\n .then(data => {\n onSuccess();\n })\n .catch(err => {\n log.error('Error while changing password', err);\n let errorMessage =\n changePasswordErrors[err.code] || 'Error while changing password';\n if (err.code === 'NotAuthorizedException') {\n setAlertOldPassword('Incorrect password');\n } else {\n setPageError(errorMessage);\n }\n });\n } finally {\n setLoading(false);\n }\n};\n\nexport const updateCustomReportSettingsAction = async (\n props: UpdateCustomReportSettingsProps\n) => {\n const {\n companyName,\n customerId,\n client,\n logoImage,\n setAlertLogoImage,\n setPageError,\n setLoading,\n onSuccess,\n alertRef\n } = props;\n let errorState = false;\n\n if (logoImage && !urlPatternValidation(logoImage)) {\n setAlertLogoImage('Please Enter a Valid Image URL');\n errorState = true;\n }\n\n if (errorState) {\n setPageError('Sorry, at least one error has occurred.');\n alertRef.current.querySelector('input').focus();\n return;\n }\n\n if (!client) {\n throw new Error('No Apollo Client module found');\n }\n\n setLoading(true);\n try {\n await client\n .mutate({\n mutation: gql(updateCustomer),\n variables: {\n input: {\n id: customerId,\n companyName,\n logoImage\n }\n }\n })\n .then(data => {\n onSuccess();\n })\n .catch(err => {\n log.error('Error while changing password', err);\n let errorMessage = 'Error while updating Custom Report Settings';\n setPageError(errorMessage);\n });\n } finally {\n setLoading(false);\n }\n};\n","import createMuiTheme, {\n ThemeOptions\n} from '@material-ui/core/styles/createMuiTheme';\nimport { Overrides } from '@material-ui/core/styles/overrides';\nimport {\n AlertClassKey,\n AlertTitleClassKey,\n AutocompleteClassKey\n} from '@material-ui/lab';\nimport { CSSProperties } from '@material-ui/styles';\nconst defaultTheme = createMuiTheme();\nfunction createMyTheme(options: ThemeOptions) {\n return createMuiTheme({ ...options });\n}\n\nexport const palette = {\n primary: {\n main: '#e77025',\n dark: '#dc5922',\n 50: '#fceee5',\n 100: '#f8d4be',\n 200: '#f3b892',\n 300: '#ee9b66',\n 400: '#eb8546',\n 500: '#e77025',\n 600: '#e46821',\n 700: '#e05d1b',\n 800: '#dd5316',\n 900: '#d7410d',\n A100: '#ffffff',\n A200: '#ffdacf',\n A400: '#ffb29c',\n A700: '#ff9e83',\n contrastDefaultColor: 'dark'\n },\n secondary: {\n main: '#81379e',\n light: '#f0e6f3',\n dark: '#6e388e',\n 50: '#f0e8f3',\n 100: '#dbc2e2',\n 200: '#bf9fcc',\n 300: '#a579b7',\n 400: '#925ca7',\n 500: '#7f3f98',\n 600: '#773990',\n 700: '#6c3185',\n 800: '#62297b',\n 900: '#4f1b6a',\n A100: '#dfa6ff',\n A200: '#cd73ff',\n A400: '#ba40ff',\n A700: '#b126ff',\n contrastDefaultColor: 'light'\n },\n grey: {\n 100: '#f3f3f3',\n 200: '#dad9d8',\n 300: 'rgba(0, 0, 0, 0.38)',\n 400: '#e4e4e5',\n 500: '#ebebeb',\n 600: '#d8d8d8',\n 700: '#262626',\n 800: '#4a4a4a',\n 900: '#404041',\n A100: '#979797',\n A200: '#F5F5F5'\n },\n error: {\n main: '#c92727'\n },\n background: {\n paper: '#fff',\n default: '#fcfcfc'\n }\n};\nexport const typography = {\n htmlFontSize: 10,\n fontFamily: '\"Open Sans\", sans-serif',\n body2: {\n fontSize: 12\n },\n caption: {\n color: palette.grey[900],\n fontSize: 11,\n lineHeight: 1.78,\n letterSpacing: 0.31\n }\n};\n\nconst MuiAlert = {\n filledError: {\n backgroundColor: palette.error.main\n }\n};\n\nconst MuiAlertTitle = {\n root: {\n fontSize: 16\n }\n};\n\nconst MuiAutocomplete = {\n root: {},\n paper: {\n boxShadow:\n '0 5px 5px -3px rgba(0, 0, 0, 0.2), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 8px 10px 1px rgba(0, 0, 0, 0.14)',\n borderRadius: 4\n },\n listbox: {\n fontSize: 12\n }\n};\n\nconst MuiButtonBase: Overrides['MuiButtonBase'] = {\n root: {\n letterSpacing: '1.25px',\n outline: '',\n WebkitTapHighlightColor: '',\n '-moz-appearance': '',\n '-webkit-appearance': '',\n '&::-moz-focus-inner': {\n borderStyle: ''\n }\n }\n};\n\nconst MuiButton: Overrides['MuiButton'] = {\n root: {\n fontSize: '1.2rem',\n lineHeight: 1.6,\n letterSpacing: 0.92,\n '&:disabled': {\n pointerEvents: 'none'\n }\n },\n text: {\n textTransform: 'uppercase',\n fontSize: 12,\n lineHeight: 2.33,\n letterSpacing: '0.39px',\n fontWeight: 'bold'\n },\n contained: {\n border: '1px solid transparent',\n '&:disabled': {\n border: '1px solid',\n borderColor: palette.grey[300],\n backgroundColor: palette.background.default,\n color: palette.grey[300]\n }\n },\n containedPrimary: {\n '&:hover': {\n backgroundColor: palette.primary.dark\n }\n },\n containedSecondary: {\n '&:hover': {\n backgroundColor: palette.secondary.dark\n }\n },\n outlined: {\n color: '#000000',\n borderColor: palette.grey[700],\n '&:hover': {\n color: '#FFFFFF',\n backgroundColor: palette.secondary.dark,\n borderColor: palette.secondary.dark,\n '@media (hover: none)': {\n backgroundColor: palette.secondary.dark\n }\n }\n },\n outlinedPrimary: {\n color: palette.primary[700],\n borderColor: palette.primary[700],\n '&:hover': {\n color: '#FFFFFF',\n backgroundColor: palette.primary.dark,\n borderColor: palette.primary.dark,\n '@media (hover: none)': {\n backgroundColor: palette.primary.dark\n }\n }\n },\n outlinedSecondary: {\n color: palette.secondary[700],\n borderColor: palette.secondary[700],\n '&:hover': {\n color: '#FFFFFF',\n backgroundColor: palette.secondary.dark,\n borderColor: palette.secondary.dark,\n '@media (hover: none)': {\n backgroundColor: palette.secondary.dark\n }\n }\n },\n outlinedSizeLarge: {\n color: '#000000',\n borderColor: palette.grey[700]\n },\n sizeSmall: {\n fontSize: '1rem'\n },\n sizeLarge: {\n padding: '9px 13px 11px',\n fontSize: 12,\n lineHeight: 1.33,\n letterSpacing: 1.11\n },\n textSizeLarge: {\n fontSize: 14,\n lineHeight: 16,\n textTransform: 'uppercase',\n color: '#000000'\n }\n};\n\nconst MuiDivider: Overrides['MuiDivider'] = {\n root: {\n backgroundColor: '#c2c2c2'\n }\n};\n\nconst MuiLink: Overrides['MuiLink'] = {\n root: {\n cursor: 'pointer'\n }\n};\n\nconst MuiTable: Overrides['MuiTable'] = {\n root: {\n fontFamily: '\"Roboto\", sans-serif'\n }\n};\n\nconst MuiTableRow: Overrides['MuiTableRow'] = {};\n\nconst MuiTableCell: Overrides['MuiTableCell'] = {\n root: {\n wordBreak: 'break-word',\n fontSize: '1.2rem',\n lineHeight: '1.4rem',\n padding: defaultTheme.spacing(0, 1.25, 0, 2),\n color: palette.grey[800],\n borderBottom: `1px solid ${palette.grey[500]}`\n },\n head: {\n fontSize: '1.1rem',\n fontWeight: 600,\n lineHeight: '1.4rem',\n color: palette.grey[800],\n textTransform: 'uppercase'\n },\n stickyHeader: {\n backgroundColor: palette.background.paper,\n borderColor: palette.grey[500],\n borderStyle: 'solid',\n borderWidth: '1px 0 0 1px',\n borderBottom: `1px solid ${palette.grey[800]}`,\n cursor: 'pointer',\n paddingTop: 0,\n paddingBottom: 0,\n '&:hover': {\n backgroundColor: palette.grey[500]\n },\n '&:first-child': {\n borderLeft: 0\n }\n },\n paddingCheckbox: {\n width: 44\n }\n};\n\nconst MuiTableSortLabel: Overrides['MuiTableSortLabel'] = {\n root: {\n letterSpacing: 0,\n width: '100%',\n '&:hover': {\n '& $icon': {\n color: palette.secondary.main\n }\n },\n '&$active': {\n '&& $icon': {\n color: palette.secondary.main\n }\n }\n },\n icon: {\n color: palette.grey[200],\n opacity: 1\n }\n};\n\nconst MuiFormControlLabel: Overrides['MuiFormControlLabel'] = {\n label: {\n fontSize: '1rem',\n textTransform: 'uppercase',\n color: '#000000'\n }\n};\n\nconst MuiTablePagination: Overrides['MuiTablePagination'] = {\n toolbar: {\n height: 40,\n minHeight: 0\n },\n caption: {\n fontSize: 11\n },\n select: {\n fontSize: 11\n }\n};\n\nconst MuiTypography: Overrides['MuiTypography'] = {\n body1: {\n fontSize: 12,\n lineHeight: '28px',\n letterSpacing: '0.15px'\n },\n caption: {\n color: palette.grey[900],\n fontSize: 11,\n lineHeight: 1.78,\n letterSpacing: 0.31\n },\n subtitle1: {\n color: palette.grey[900],\n fontSize: 11,\n textTransform: 'uppercase'\n },\n h1: {\n fontSize: 22,\n fontWeight: 400\n },\n h2: {\n fontSize: 20,\n fontWeight: 400,\n letterSpacing: '0.26px'\n },\n h3: {\n fontSize: 11,\n fontWeight: 700,\n lineHeight: '14px',\n textTransform: 'uppercase'\n }\n};\n\nconst MuiMenuItem: Overrides['MuiMenuItem'] = {\n root: {\n fontSize: 11,\n minHeight: 'auto',\n lineHeight: '2em',\n paddingTop: 5,\n paddingBottom: 5\n }\n};\n\nconst MuiChip: Overrides['MuiChip'] = {\n root: {\n height: 24,\n borderRadius: 2,\n backgroundColor: palette.secondary.light,\n color: palette.grey[900],\n margin: `${defaultTheme.spacing(0.5)}px 0 ${defaultTheme.spacing(\n 0.5\n )}px ${defaultTheme.spacing(1)}px`,\n fontSize: 9\n },\n clickable: {\n '&:active': {\n boxShadow: 'none',\n backgroundColor: palette.secondary.light\n },\n '&:hover': {\n backgroundColor: palette.secondary[100]\n }\n },\n outlined: {\n backgroundColor: palette.background.default,\n color: palette.grey[800]\n },\n deletable: {\n '&:focus': {\n backgroundColor: palette.secondary.light\n },\n '&:hover': {\n backgroundColor: palette.secondary[100]\n }\n },\n deleteIcon: {\n color: 'rgba(0,0,0, 0.54)',\n height: 18,\n maxWidth: 22,\n width: 'auto'\n }\n};\n\nconst MuiListSubheader: Overrides['MuiListSubheader'] = {\n root: {}\n};\n\nconst MuiListItemIcon: Overrides['MuiListItemIcon'] = {\n root: {\n // minWidth: 'none'\n }\n};\n\nconst MuiListItemText: Overrides['MuiListItemText'] = {\n root: {\n letterSpacing: 0,\n fontSize: 12\n },\n inset: {\n paddingLeft: 20\n }\n};\n\nconst MuiSvgIcon: Overrides['MuiSvgIcon'] = {\n colorSecondary: {\n color: palette.secondary[500]\n }\n};\n\nconst MuiTextField: Overrides['MuiTextField'] = {\n root: {\n borderColor: '#000',\n '&:focus': {\n borderColor: '#000'\n }\n }\n};\n\nconst MuiDialog = {\n paper: {\n padding: defaultTheme.spacing(1)\n },\n paperWidthXs: {\n maxWidth: 280,\n padding: 0\n }\n};\n\nconst MuiDialogContentText = {\n root: {\n fontSize: '15.5px',\n lineHeight: '24px',\n color: 'rgba(0,0,0,0.6)',\n marginBottom: defaultTheme.spacing(5)\n }\n};\n\nconst MuiDialogTitle = {\n root: {\n padding: defaultTheme.spacing(2, 3, 0)\n }\n};\n\nconst MuiDialogActions = {\n root: {\n padding: defaultTheme.spacing(1)\n },\n spacing: {\n padding: defaultTheme.spacing(3)\n }\n};\n\ninterface ThemeOverrides extends Overrides {\n MuiAutocomplete?:\n | Partial<\n Record CSSProperties)>\n >\n | undefined;\n MuiAlert?:\n | Partial CSSProperties)>>\n | undefined;\n MuiAlertTitle?:\n | Partial CSSProperties)>>\n | undefined;\n}\n\nconst overrides: ThemeOverrides = {\n MuiAlert,\n MuiAlertTitle,\n MuiAutocomplete,\n MuiButton,\n MuiButtonBase, // WCAG 2 compliance, enables visual focus state\n MuiChip,\n MuiDialog,\n MuiDialogActions,\n MuiDialogContentText,\n MuiDialogTitle,\n MuiDivider,\n MuiLink,\n MuiListSubheader,\n MuiListItemIcon,\n MuiListItemText,\n MuiFormControlLabel,\n MuiMenuItem,\n MuiSvgIcon,\n MuiTable,\n MuiTableCell,\n MuiTablePagination,\n MuiTableRow,\n MuiTableSortLabel,\n MuiTextField,\n MuiTypography\n};\n\nexport default createMyTheme({\n typography,\n palette,\n overrides\n});\n","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nvar _ref2 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"title\", null, \"endaq logo\");\nvar _ref3 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"g\", {\n id: \"Page-1\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"endaq-style-guide-2019-artwork\",\n transform: \"translate(-44.000000, -102.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Logotype\",\n transform: \"translate(44.000000, 102.408000)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M170.059,32.153 C163.474,32.153 160.58,24.326 157.781,16.756 C155.447,10.446 153.035,3.921 149.18,3.921 C145.327,3.921 142.914,10.446 140.581,16.756 C137.782,24.325 134.888,32.153 128.304,32.153 L128.304,28.231 C132.158,28.231 134.57,21.707 136.903,15.396 C139.702,7.827 142.596,0 149.18,0 C155.765,0 158.659,7.827 161.458,15.396 C163.792,21.707 166.205,28.231 170.059,28.231 L170.059,32.153\",\n id: \"Fill-9\",\n fill: \"#D8692C\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M5.854,13.251 L33.829,13.251 C33.792,10.45 33.043,8.46 31.599,7.337 C30.606,6.593 29.178,6.066 27.356,5.772 C25.506,5.476 22.78,5.325 19.255,5.325 C16.111,5.325 13.7,5.464 12.088,5.74 C10.501,6.012 9.234,6.506 8.325,7.209 C6.921,8.333 6.089,10.366 5.854,13.251 Z M22.471,32.338 C17.425,32.338 13.52,32.142 10.863,31.757 C8.183,31.368 6.118,30.685 4.725,29.727 C1.589,27.505 0,23.075 0,16.556 C0,12.078 0.681,8.623 2.022,6.286 C2.893,4.763 3.922,3.603 5.082,2.836 C6.236,2.074 7.559,1.523 9.013,1.197 C10.453,0.875 12.069,0.7 13.817,0.677 C15.553,0.656 17.425,0.646 19.383,0.646 C21.291,0.646 23.054,0.635 24.623,0.613 C26.236,0.591 27.772,0.69 29.192,0.905 C30.621,1.123 31.95,1.518 33.144,2.081 C34.344,2.649 35.481,3.532 36.525,4.706 C37.309,5.619 37.915,6.557 38.331,7.496 C38.743,8.43 39.051,9.419 39.246,10.437 C39.439,11.449 39.549,12.554 39.571,13.722 C39.592,14.879 39.625,16.165 39.668,17.579 L39.674,17.802 L5.653,17.802 C5.801,21.343 6.535,23.837 7.836,25.218 C8.581,26.004 9.46,26.581 10.452,26.931 C11.461,27.289 12.579,27.523 13.775,27.627 C14.983,27.733 16.292,27.767 17.673,27.723 C19.075,27.68 20.516,27.658 21.956,27.658 C25.398,27.658 27.948,27.498 29.535,27.181 C31.089,26.87 32.251,26.297 32.986,25.479 C33.597,24.868 33.965,23.81 34.089,22.327 L34.105,22.127 L39.543,22.127 L39.539,22.349 C39.495,24.698 39.006,26.566 38.086,27.902 C37.167,29.237 35.924,30.248 34.391,30.905 C32.875,31.555 31.066,31.96 29.015,32.112 C26.98,32.262 24.778,32.338 22.471,32.338 L22.471,32.338 Z\",\n id: \"Fill-10\",\n fill: \"#3A3B39\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M81.858,32.23 L76.601,32.23 L76.601,16.556 C76.601,13.839 76.494,11.873 76.283,10.71 C76.075,9.574 75.637,8.602 74.98,7.82 C74.16,6.921 72.921,6.272 71.303,5.898 C69.653,5.518 67.137,5.325 63.826,5.325 C60.133,5.325 57.219,5.593 55.165,6.122 C53.14,6.645 51.61,7.518 50.616,8.719 C50.074,9.385 49.673,10.017 49.426,10.596 C49.177,11.177 49.009,11.807 48.927,12.466 C48.843,13.139 48.811,13.885 48.832,14.685 C48.853,15.498 48.864,16.474 48.864,17.585 L48.864,32.23 L43.606,32.23 L43.606,1.031 L48.864,1.031 L48.864,5.598 L48.901,5.598 C49.591,4.3 50.46,3.296 51.485,2.612 C52.533,1.914 53.736,1.406 55.062,1.101 C56.383,0.799 57.849,0.646 59.42,0.646 L68.811,0.646 C70.208,0.646 71.549,0.744 72.799,0.937 C74.055,1.132 75.23,1.462 76.292,1.917 C77.364,2.376 78.373,3.097 79.29,4.057 C80.256,5.068 80.935,6.356 81.307,7.886 C81.673,9.401 81.858,11.626 81.858,14.498 L81.858,32.23\",\n id: \"Fill-11\",\n fill: \"#3A3B39\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M105.157,27.676 C106.732,27.676 108.247,27.715 109.659,27.792 C111.026,27.868 112.33,27.897 113.519,27.884 C114.677,27.869 115.749,27.749 116.705,27.526 L117.373,27.373 C118.973,26.973 120.084,25.957 120.763,24.268 C121.461,22.528 121.816,19.74 121.816,15.98 C121.816,11.341 121.243,8.454 120.012,6.894 C119.596,6.365 119.073,5.962 118.458,5.695 C117.818,5.42 117.056,5.229 116.195,5.127 C115.313,5.022 114.289,4.976 113.146,4.991 C111.98,5.008 110.664,5.014 109.193,5.014 L92.209,5.014 L92.209,27.823 L92.375,27.823 L97.069,27.861 C97.398,27.87 97.73,27.874 98.071,27.874 C98.911,27.874 99.819,27.846 100.77,27.792 C102.136,27.715 103.612,27.676 105.157,27.676 Z M113.551,32.329 C112.804,32.329 111.959,32.308 111.041,32.268 C109.68,32.206 107.883,32.175 105.547,32.175 C103.429,32.175 101.833,32.19 100.668,32.222 C99.483,32.251 98.47,32.26 97.624,32.245 L97.302,32.229 L87.298,32.23 L87.298,0.607 L109.284,0.607 C114.087,0.607 117.508,0.794 119.453,1.165 C121.911,1.707 123.782,3.03 125.024,5.099 C125.687,6.175 126.159,7.611 126.425,9.365 C126.702,11.187 126.819,13.22 126.819,16.165 C126.819,18.07 126.734,19.821 126.565,21.368 C126.396,22.926 126.137,24.299 125.795,25.449 C124.967,28.179 123.345,30.076 120.973,31.087 L120.737,31.163 C119.735,31.528 118.64,31.814 117.408,32.032 C116.537,32.187 115.593,32.282 114.602,32.313 C114.273,32.323 113.923,32.329 113.551,32.329 L113.551,32.329 Z\",\n id: \"Fill-12\",\n fill: \"#3A3B39\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M191.567,27.639 C193.139,27.639 194.653,27.677 196.068,27.754 C197.435,27.83 198.736,27.858 199.928,27.846 C201.086,27.831 202.158,27.71 203.113,27.488 C204.147,27.245 204.965,26.948 205.598,26.284 C206.137,25.718 206.699,23.801 206.878,23.077 C206.969,22.197 207.045,21.147 207.105,19.955 C207.166,18.729 207.196,17.884 207.196,16.35 C207.196,13.099 207.063,10.594 206.787,8.692 C206.533,7.232 205.915,6.317 204.897,5.906 C203.939,5.488 202.95,5.204 201.949,5.056 C200.925,4.906 199.828,4.823 198.688,4.809 C197.539,4.791 196.316,4.814 195.032,4.875 C193.769,4.937 192.354,4.968 190.831,4.968 C186.002,4.968 182.651,5.121 180.872,5.422 C179.701,5.622 178.84,5.995 178.314,6.533 C177.788,7.073 177.418,7.942 177.219,9.115 C176.943,10.852 176.809,13.13 176.809,16.075 C176.809,19.284 176.947,21.228 177.22,22.946 C177.545,25.008 178.018,25.846 178.357,26.185 C178.95,26.778 179.676,27.195 180.515,27.422 C181.388,27.659 182.388,27.794 183.485,27.823 C184.606,27.853 185.843,27.83 187.179,27.754 C188.548,27.677 190.024,27.639 191.567,27.639 Z M213.345,35.147 L213.217,35.147 L207.582,30.83 C207.407,30.921 207.231,30.997 207.043,31.062 C205.746,31.535 204.689,31.84 203.817,31.994 C202.949,32.149 202.004,32.244 201.011,32.275 C200.023,32.305 198.827,32.291 197.45,32.229 C196.095,32.168 194.299,32.138 191.957,32.138 C189.844,32.138 188.248,32.153 187.078,32.184 C185.893,32.213 184.88,32.222 184.033,32.207 C183.169,32.19 182.339,32.135 181.563,32.042 C180.749,31.947 179.712,31.775 178.482,31.533 C175.217,30.894 173.22,28.867 172.547,25.508 C172.301,24.34 172.128,22.893 172.035,21.21 C171.948,19.601 171.898,17.88 171.898,15.521 C171.898,11.526 172.113,8.826 172.596,6.767 C173.301,3.626 175.237,1.74 178.35,1.164 C180.842,0.703 184.849,0.468 190.26,0.468 L194.022,0.468 C195.311,0.468 196.68,0.484 198.093,0.515 C199.44,0.546 200.773,0.6 202.056,0.677 C203.347,0.755 204.497,0.888 205.474,1.072 C207.559,1.457 209.154,2.501 210.215,4.175 C210.854,5.196 211.319,6.687 211.6,8.609 C211.881,10.532 212.017,13.139 212.017,16.581 C212.017,18.69 211.956,20.014 211.833,21.608 C211.709,23.21 211.521,24.556 211.273,25.611 C211.273,25.624 211.137,26.674 210.637,27.733 L215.71,31.572 L215.748,31.664 C215.773,31.724 216.354,33.153 215.662,34.153 C214.993,35.12 213.512,35.147 213.345,35.147 L213.345,35.147 Z\",\n id: \"Fill-13\",\n fill: \"#3A3B39\"\n}))));\nconst SvgLogotype = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 216 36\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgLogotype, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/Logotype.96ad0fbf.svg\";\nexport { ForwardRef as ReactComponent };","export function desc(a: T, b: T, orderBy: keyof T) {\n if (b[orderBy] < a[orderBy]) {\n return -1;\n }\n if (b[orderBy] > a[orderBy]) {\n return 1;\n }\n return 0;\n}\n\nexport function stableSort(array: T[], cmp: (a: T, b: T) => number) {\n const stabilizedThis = array.map((el, index) => [el, index] as [T, number]);\n stabilizedThis.sort((a, b) => {\n const order = cmp(a[0], b[0]);\n if (order !== 0) return order;\n return a[1] - b[1];\n });\n return stabilizedThis.map(el => el[0]);\n}\n\nexport type Order = 'asc' | 'desc';\n\nexport function getSorting(\n order: Order,\n orderBy: K\n): (\n a: { [key in K]: number | string },\n b: { [key in K]: number | string }\n) => number {\n return order === 'desc'\n ? (a, b) => desc(a, b, orderBy)\n : (a, b) => -desc(a, b, orderBy);\n}\n\nexport const simpleStrSortAsc = (arr: string[]) =>\n arr.sort((a: string, b: string) =>\n a.toLowerCase() > b.toLowerCase()\n ? 1\n : a.toLowerCase() < b.toLowerCase()\n ? -1\n : 0\n );\n","export const listAlertsShort = `query ListAlerts(\n $filter: ModelAlertFilterInput\n $limit: Int\n $nextToken: String\n) {\n listAlerts(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n name\n tagName\n enabled\n createdAt\n }\n nextToken\n }\n}\n`;\n\nexport const listDeviceAssociationsShort = `query ListDeviceAssociations(\n $filter: ModelDeviceAssociationFilterInput\n $limit: Int\n $nextToken: String\n) {\n listDeviceAssociations(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n org_id\n serial_number_id\n status\n files {\n nextToken\n }\n device {\n thing_name\n name\n }\n }\n nextToken\n }\n}\n`;\n\nexport const listUserTagsShort = `query GetUniqueTagLists{\n getUniqueTagList {\n value\n }\n}`;\n\nexport const getDashboardShort = /* GraphQL */ `\n query GetDashboard($id: ID!) {\n getDashboard(id: $id) {\n id\n owner\n maxFiles\n status\n tags\n title\n createdAt\n updatedAt\n customScriptId\n defaultScript\n file_ids\n notes\n output_logs\n customScript {\n id\n title\n }\n shares {\n items {\n token\n id\n expires\n }\n }\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n modules {\n items {\n data {\n items {\n json\n createdAt\n updatedAt\n }\n }\n frames {\n items {\n moduleId\n json\n sequence\n createdAt\n updatedAt\n }\n nextToken\n }\n layout {\n json\n createdAt\n updatedAt\n }\n sequence\n title\n }\n nextToken\n }\n }\n }\n`;\n\nexport const getListOfDashboards = /* GraphQL */ `\n query getListOfDashboards(\n $filter: ModelDashboardFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listDashboards(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n sequence\n createdAt\n updatedAt\n customScript {\n id\n owner\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n modules {\n nextToken\n }\n shares {\n items {\n token\n id\n expires\n }\n nextToken\n }\n }\n nextToken\n }\n }\n`;\n\nexport const listCustomScriptsShort = /* GraphQL */ `\n query ListCustomScripts(\n $filter: ModelCustomScriptFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listCustomScripts(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n error {\n code\n message\n status\n }\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\n","/* tslint:disable */\n/* eslint-disable */\n// this is an auto generated file. This will be overwritten\n\nexport const getUniqueTagList = /* GraphQL */ `\n query GetUniqueTagList {\n getUniqueTagList {\n value\n }\n }\n`;\nexport const getFiles = /* GraphQL */ `\n query GetFiles(\n $sortingField: String\n $sortDirection: SortDirection\n $numberSort: Boolean\n $tags: [String]\n $limit: Int\n $nextCursor: String\n ) {\n getFiles(\n sortingField: $sortingField\n sortDirection: $sortDirection\n numberSort: $numberSort\n tags: $tags\n limit: $limit\n nextCursor: $nextCursor\n ) {\n nextCursor\n totalCount\n files {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n attributes {\n nextToken\n }\n device {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n tags {\n nextToken\n }\n }\n }\n }\n`;\nexport const getAlert = /* GraphQL */ `\n query GetAlert($id: ID!) {\n getAlert(id: $id) {\n id\n owner\n customerId\n name\n tagName\n enabled\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n }\n deviceAssociations {\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const listAlerts = /* GraphQL */ `\n query ListAlerts(\n $filter: ModelAlertFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listAlerts(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n customerId\n name\n tagName\n enabled\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n }\n nextToken\n }\n }\n`;\nexport const getApiKey = /* GraphQL */ `\n query GetApiKey($id: ID!) {\n getApiKey(id: $id) {\n id\n name\n owner\n revoked\n createdAt\n updatedAt\n }\n }\n`;\nexport const listApiKeys = /* GraphQL */ `\n query ListApiKeys(\n $filter: ModelApiKeyFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listApiKeys(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n name\n owner\n revoked\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getApiKeyByOwner = /* GraphQL */ `\n query GetApiKeyByOwner(\n $owner: String\n $sortDirection: ModelSortDirection\n $filter: ModelApiKeyFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getApiKeyByOwner(\n owner: $owner\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n name\n owner\n revoked\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getAttribute = /* GraphQL */ `\n query GetAttribute($id: ID!) {\n getAttribute(id: $id) {\n id\n user_id\n attributeFileId\n name\n type\n value\n thing\n mutable\n createdAt\n updatedAt\n }\n }\n`;\nexport const listAttributes = /* GraphQL */ `\n query ListAttributes(\n $filter: ModelAttributeFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listAttributes(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n user_id\n attributeFileId\n name\n type\n value\n thing\n mutable\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getAttributeByUser = /* GraphQL */ `\n query GetAttributeByUser(\n $user_id: String\n $sortDirection: ModelSortDirection\n $filter: ModelAttributeFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getAttributeByUser(\n user_id: $user_id\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n user_id\n attributeFileId\n name\n type\n value\n thing\n mutable\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const listBillings = /* GraphQL */ `\n query ListBillings(\n $filter: ModelBillingFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listBillings(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n }\n nextToken\n }\n }\n`;\nexport const getBilling = /* GraphQL */ `\n query GetBilling($id: ID!) {\n getBilling(id: $id) {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n }\n deviceAssociations {\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const getBillingByStripeSessionId = /* GraphQL */ `\n query GetBillingByStripeSessionId(\n $stripe_session_id: String\n $sortDirection: ModelSortDirection\n $filter: ModelBillingFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getBillingByStripeSessionId(\n stripe_session_id: $stripe_session_id\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n }\n nextToken\n }\n }\n`;\nexport const getBillingByStripeCustomerId = /* GraphQL */ `\n query GetBillingByStripeCustomerId(\n $stripe_customer_id: String\n $sortDirection: ModelSortDirection\n $filter: ModelBillingFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getBillingByStripeCustomerId(\n stripe_customer_id: $stripe_customer_id\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n }\n nextToken\n }\n }\n`;\nexport const getBillingByStripeSubscriptionId = /* GraphQL */ `\n query GetBillingByStripeSubscriptionId(\n $stripe_subscription_id: String\n $sortDirection: ModelSortDirection\n $filter: ModelBillingFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getBillingByStripeSubscriptionId(\n stripe_subscription_id: $stripe_subscription_id\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n }\n nextToken\n }\n }\n`;\nexport const getBillingByStripeOwner = /* GraphQL */ `\n query GetBillingByStripeOwner(\n $owner: String\n $sortDirection: ModelSortDirection\n $filter: ModelBillingFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getBillingByStripeOwner(\n owner: $owner\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n }\n nextToken\n }\n }\n`;\nexport const listCustomScripts = /* GraphQL */ `\n query ListCustomScripts(\n $filter: ModelCustomScriptFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listCustomScripts(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n error {\n code\n detail\n message\n status\n transactionId\n type\n }\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getCustomScript = /* GraphQL */ `\n query GetCustomScript($id: ID!) {\n getCustomScript(id: $id) {\n id\n owner\n error {\n code\n detail\n message\n status\n traces {\n filename\n lineno\n name\n offset\n text\n }\n transactionId\n type\n }\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n }\n`;\nexport const getCustomScriptByOwner = /* GraphQL */ `\n query GetCustomScriptByOwner(\n $owner: String\n $sortDirection: ModelSortDirection\n $filter: ModelCustomScriptFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getCustomScriptByOwner(\n owner: $owner\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n error {\n code\n detail\n message\n status\n transactionId\n type\n }\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getCustomScriptByType = /* GraphQL */ `\n query GetCustomScriptByType(\n $type: CustomScriptType\n $sortDirection: ModelSortDirection\n $filter: ModelCustomScriptFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getCustomScriptByType(\n type: $type\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n error {\n code\n detail\n message\n status\n transactionId\n type\n }\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const listCustomers = /* GraphQL */ `\n query ListCustomers(\n $filter: ModelCustomerFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listCustomers(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n }\n deviceAssociations {\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n nextToken\n }\n }\n`;\nexport const getCustomer = /* GraphQL */ `\n query GetCustomer($id: ID!) {\n getCustomer(id: $id) {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n items {\n id\n name\n owner\n revoked\n createdAt\n updatedAt\n }\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n }\n deviceAssociations {\n items {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n stripePlans {\n nextToken\n }\n }\n }\n }\n`;\nexport const getCustomerByOwnerId = /* GraphQL */ `\n query GetCustomerByOwnerId(\n $owner: String\n $sortDirection: ModelSortDirection\n $filter: ModelCustomerFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getCustomerByOwnerId(\n owner: $owner\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n }\n deviceAssociations {\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n nextToken\n }\n }\n`;\nexport const getDashboardByOwner = /* GraphQL */ `\n query GetDashboardByOwner(\n $owner: String\n $sortDirection: ModelSortDirection\n $filter: ModelDashboardFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getDashboardByOwner(\n owner: $owner\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n customScript {\n id\n owner\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n sequence\n modules {\n nextToken\n }\n shares {\n nextToken\n }\n }\n nextToken\n }\n }\n`;\nexport const getDashboard = /* GraphQL */ `\n query GetDashboard($id: ID!) {\n getDashboard(id: $id) {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n customScript {\n id\n owner\n error {\n code\n detail\n message\n status\n transactionId\n type\n }\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n sequence\n modules {\n items {\n id\n owner\n dashboardId\n sequence\n title\n createdAt\n updatedAt\n }\n nextToken\n }\n shares {\n items {\n id\n dashboardId\n token\n expires\n createdAt\n updatedAt\n owner\n }\n nextToken\n }\n }\n }\n`;\nexport const listDashboards = /* GraphQL */ `\n query ListDashboards(\n $filter: ModelDashboardFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listDashboards(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n customScript {\n id\n owner\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n sequence\n modules {\n nextToken\n }\n shares {\n nextToken\n }\n }\n nextToken\n }\n }\n`;\nexport const listDashboardModules = /* GraphQL */ `\n query ListDashboardModules(\n $filter: ModelDashboardModuleFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listDashboardModules(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n data {\n nextToken\n }\n frames {\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n nextToken\n }\n }\n`;\nexport const getDashboardModule = /* GraphQL */ `\n query GetDashboardModule($id: ID!) {\n getDashboardModule(id: $id) {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n customScript {\n id\n owner\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n sequence\n modules {\n nextToken\n }\n shares {\n nextToken\n }\n }\n data {\n items {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n }\n nextToken\n }\n frames {\n items {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n }\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n }\n`;\nexport const getDashboardModuleByDashboard = /* GraphQL */ `\n query GetDashboardModuleByDashboard(\n $dashboardId: ID\n $sortDirection: ModelSortDirection\n $filter: ModelDashboardModuleFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getDashboardModuleByDashboard(\n dashboardId: $dashboardId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n data {\n nextToken\n }\n frames {\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n nextToken\n }\n }\n`;\nexport const getDashboardModuleByDashboardSorted = /* GraphQL */ `\n query GetDashboardModuleByDashboardSorted(\n $dashboardId: ID\n $sequence: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelDashboardModuleFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getDashboardModuleByDashboardSorted(\n dashboardId: $dashboardId\n sequence: $sequence\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n data {\n nextToken\n }\n frames {\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n nextToken\n }\n }\n`;\nexport const getDashboardModuleData = /* GraphQL */ `\n query GetDashboardModuleData($id: ID!) {\n getDashboardModuleData(id: $id) {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n module {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n data {\n nextToken\n }\n frames {\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const listDashboardModuleDatas = /* GraphQL */ `\n query ListDashboardModuleDatas(\n $filter: ModelDashboardModuleDataFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listDashboardModuleDatas(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n module {\n id\n owner\n dashboardId\n sequence\n title\n createdAt\n updatedAt\n }\n }\n nextToken\n }\n }\n`;\nexport const getDashboardModuleDataByDashboardModule = /* GraphQL */ `\n query GetDashboardModuleDataByDashboardModule(\n $moduleId: ID\n $sequence: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelDashboardModuleDataFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getDashboardModuleDataByDashboardModule(\n moduleId: $moduleId\n sequence: $sequence\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n module {\n id\n owner\n dashboardId\n sequence\n title\n createdAt\n updatedAt\n }\n }\n nextToken\n }\n }\n`;\nexport const getDashboardModuleFrame = /* GraphQL */ `\n query GetDashboardModuleFrame($id: ID!) {\n getDashboardModuleFrame(id: $id) {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n module {\n id\n owner\n dashboardId\n error {\n code\n message\n status\n transactionId\n }\n sequence\n title\n createdAt\n updatedAt\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n data {\n nextToken\n }\n frames {\n nextToken\n }\n layout {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n }\n }\n`;\nexport const listDashboardModuleFrames = /* GraphQL */ `\n query ListDashboardModuleFrames(\n $filter: ModelDashboardModuleFrameFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listDashboardModuleFrames(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n module {\n id\n owner\n dashboardId\n sequence\n title\n createdAt\n updatedAt\n }\n }\n nextToken\n }\n }\n`;\nexport const getDashboardModuleFrameByDashboardModule = /* GraphQL */ `\n query GetDashboardModuleFrameByDashboardModule(\n $moduleId: ID\n $sequence: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelDashboardModuleFrameFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getDashboardModuleFrameByDashboardModule(\n moduleId: $moduleId\n sequence: $sequence\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n moduleId\n json\n sequence\n createdAt\n updatedAt\n module {\n id\n owner\n dashboardId\n sequence\n title\n createdAt\n updatedAt\n }\n }\n nextToken\n }\n }\n`;\nexport const listDashboardModuleLayouts = /* GraphQL */ `\n query ListDashboardModuleLayouts(\n $filter: ModelDashboardModuleLayoutFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listDashboardModuleLayouts(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n owner\n json\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getDashboardModuleLayout = /* GraphQL */ `\n query GetDashboardModuleLayout($id: ID!) {\n getDashboardModuleLayout(id: $id) {\n id\n owner\n json\n createdAt\n updatedAt\n }\n }\n`;\nexport const getDashboardShare = /* GraphQL */ `\n query GetDashboardShare($id: ID!) {\n getDashboardShare(id: $id) {\n id\n dashboardId\n token\n expires\n createdAt\n updatedAt\n owner\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n error {\n code\n message\n status\n transactionId\n scriptError\n }\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n customScript {\n id\n owner\n lines\n status\n title\n type\n createdAt\n updatedAt\n }\n notes\n sequence\n modules {\n nextToken\n }\n shares {\n nextToken\n }\n }\n }\n }\n`;\nexport const listDashboardShares = /* GraphQL */ `\n query ListDashboardShares(\n $filter: ModelDashboardShareFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listDashboardShares(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n dashboardId\n token\n expires\n createdAt\n updatedAt\n owner\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n }\n nextToken\n }\n }\n`;\nexport const getDashboardShareByOwner = /* GraphQL */ `\n query GetDashboardShareByOwner(\n $owner: String\n $sortDirection: ModelSortDirection\n $filter: ModelDashboardShareFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getDashboardShareByOwner(\n owner: $owner\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n dashboardId\n token\n expires\n createdAt\n updatedAt\n owner\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n }\n nextToken\n }\n }\n`;\nexport const getDashboardShareByToken = /* GraphQL */ `\n query GetDashboardShareByToken(\n $token: String\n $sortDirection: ModelSortDirection\n $filter: ModelDashboardShareFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getDashboardShareByToken(\n token: $token\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n dashboardId\n token\n expires\n createdAt\n updatedAt\n owner\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n }\n nextToken\n }\n }\n`;\nexport const getDashboardShareByDashboard = /* GraphQL */ `\n query GetDashboardShareByDashboard(\n $dashboardId: ID\n $sortDirection: ModelSortDirection\n $filter: ModelDashboardShareFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getDashboardShareByDashboard(\n dashboardId: $dashboardId\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n dashboardId\n token\n expires\n createdAt\n updatedAt\n owner\n dashboard {\n id\n owner\n customScriptId\n defaultScript\n output_logs\n lastTransactionId\n maxFiles\n status\n tags\n file_ids\n title\n createdAt\n updatedAt\n notes\n sequence\n }\n }\n nextToken\n }\n }\n`;\nexport const listDevices = /* GraphQL */ `\n query ListDevices(\n $serial_number_id: String\n $filter: ModelDeviceFilterInput\n $limit: Int\n $nextToken: String\n $sortDirection: ModelSortDirection\n ) {\n listDevices(\n serial_number_id: $serial_number_id\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n sortDirection: $sortDirection\n ) {\n items {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n associations {\n nextToken\n }\n }\n nextToken\n }\n }\n`;\nexport const getDevice = /* GraphQL */ `\n query GetDevice($serial_number_id: String!) {\n getDevice(serial_number_id: $serial_number_id) {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n associations {\n items {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\nexport const listDeviceAssociations = /* GraphQL */ `\n query ListDeviceAssociations(\n $filter: ModelDeviceAssociationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listDeviceAssociations(\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n device {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n }\n files {\n nextToken\n }\n }\n nextToken\n }\n }\n`;\nexport const getDeviceAssociation = /* GraphQL */ `\n query GetDeviceAssociation($id: ID!) {\n getDeviceAssociation(id: $id) {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n apiKeys {\n nextToken\n }\n billing {\n id\n stripe_session_id\n owner\n stripe_customer_id\n stripe_subscription_id\n subscription_status\n stripe_plan_id\n suspended_at\n next_billing_at\n createdAt\n updatedAt\n }\n deviceAssociations {\n nextToken\n }\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n device {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n associations {\n nextToken\n }\n }\n files {\n items {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\nexport const getDeviceAssociationBySerial = /* GraphQL */ `\n query GetDeviceAssociationBySerial(\n $serial_number_id: String\n $sortDirection: ModelSortDirection\n $filter: ModelDeviceAssociationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getDeviceAssociationBySerial(\n serial_number_id: $serial_number_id\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n device {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n }\n files {\n nextToken\n }\n }\n nextToken\n }\n }\n`;\nexport const getDeviceAssociationByUser = /* GraphQL */ `\n query GetDeviceAssociationByUser(\n $user_id: String\n $sortDirection: ModelSortDirection\n $filter: ModelDeviceAssociationFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getDeviceAssociationByUser(\n user_id: $user_id\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n device {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n }\n files {\n nextToken\n }\n }\n nextToken\n }\n }\n`;\nexport const getFile = /* GraphQL */ `\n query GetFile($id: ID!) {\n getFile(id: $id) {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n attributes {\n items {\n id\n user_id\n attributeFileId\n name\n type\n value\n thing\n mutable\n createdAt\n updatedAt\n }\n nextToken\n }\n device {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n customer {\n id\n owner\n storageConsumed\n storageSpaceRemaining\n tierId\n createdAt\n updatedAt\n companyName\n logoImage\n }\n device {\n serial_number_id\n name\n description\n part_number\n hardware_revision\n firmware_revision\n last_calibration_ts\n thing_name\n thing_arn\n cert_arn\n manufacture_date\n last_uploaded_ts\n createdAt\n updatedAt\n }\n files {\n nextToken\n }\n }\n tags {\n items {\n id\n user_id\n tagFileId\n value\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\nexport const listFiles = /* GraphQL */ `\n query ListFiles(\n $filter: ModelFileFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listFiles(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n attributes {\n nextToken\n }\n device {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n tags {\n nextToken\n }\n }\n nextToken\n }\n }\n`;\nexport const getFileByUser = /* GraphQL */ `\n query GetFileByUser(\n $user_id: String\n $sortDirection: ModelSortDirection\n $filter: ModelFileFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getFileByUser(\n user_id: $user_id\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n attributes {\n nextToken\n }\n device {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n tags {\n nextToken\n }\n }\n nextToken\n }\n }\n`;\nexport const getFileByS3Key = /* GraphQL */ `\n query GetFileByS3Key(\n $s3_object_key: String\n $sortDirection: ModelSortDirection\n $filter: ModelFileFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getFileByS3Key(\n s3_object_key: $s3_object_key\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n attributes {\n nextToken\n }\n device {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n tags {\n nextToken\n }\n }\n nextToken\n }\n }\n`;\nexport const getFileBySerialAndUser = /* GraphQL */ `\n query GetFileBySerialAndUser(\n $user_id: String\n $serial_number_id: ModelStringKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelFileFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getFileBySerialAndUser(\n user_id: $user_id\n serial_number_id: $serial_number_id\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n attributes {\n nextToken\n }\n device {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n tags {\n nextToken\n }\n }\n nextToken\n }\n }\n`;\nexport const getFileByUserSorted = /* GraphQL */ `\n query GetFileByUserSorted(\n $user_id: String\n $created_ts: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelFileFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getFileByUserSorted(\n user_id: $user_id\n created_ts: $created_ts\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n attributes {\n nextToken\n }\n device {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n tags {\n nextToken\n }\n }\n nextToken\n }\n }\n`;\nexport const getFileBySerialSorted = /* GraphQL */ `\n query GetFileBySerialSorted(\n $serial_number_id: String\n $created_ts: ModelIntKeyConditionInput\n $sortDirection: ModelSortDirection\n $filter: ModelFileFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getFileBySerialSorted(\n serial_number_id: $serial_number_id\n created_ts: $created_ts\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n attributes {\n nextToken\n }\n device {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n tags {\n nextToken\n }\n }\n nextToken\n }\n }\n`;\nexport const searchFiles = /* GraphQL */ `\n query SearchFiles(\n $filter: SearchableFileFilterInput\n $sort: SearchableFileSortInput\n $limit: Int\n $nextToken: String\n $from: Int\n ) {\n searchFiles(\n filter: $filter\n sort: $sort\n limit: $limit\n nextToken: $nextToken\n from: $from\n ) {\n items {\n id\n user_id\n serial_number_id\n sensor_name\n sensor_type\n file_name\n file_size\n s3_bucket_name\n s3_object_key\n device_meta\n recording_length\n recording_ts\n created_ts\n modified_ts\n archived_ts\n file_uploaded\n createdAt\n updatedAt\n attributes {\n nextToken\n }\n device {\n id\n org_id\n s3_bucket_name\n serial_number_id\n status\n user_id\n customerId\n createdAt\n updatedAt\n }\n tags {\n nextToken\n }\n }\n nextToken\n total\n }\n }\n`;\nexport const getStripePlan = /* GraphQL */ `\n query GetStripePlan($id: ID!) {\n getStripePlan(id: $id) {\n id\n tierId\n billingCycle\n cost\n createdAt\n updatedAt\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n stripePlans {\n nextToken\n }\n }\n }\n }\n`;\nexport const listStripePlans = /* GraphQL */ `\n query ListStripePlans(\n $filter: ModelStripePlanFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listStripePlans(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n tierId\n billingCycle\n cost\n createdAt\n updatedAt\n tier {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n }\n }\n nextToken\n }\n }\n`;\nexport const getTag = /* GraphQL */ `\n query GetTag($id: ID!) {\n getTag(id: $id) {\n id\n user_id\n tagFileId\n value\n createdAt\n updatedAt\n }\n }\n`;\nexport const listTags = /* GraphQL */ `\n query ListTags(\n $filter: ModelTagFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listTags(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n user_id\n tagFileId\n value\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const getTagByUser = /* GraphQL */ `\n query GetTagByUser(\n $user_id: String\n $sortDirection: ModelSortDirection\n $filter: ModelTagFilterInput\n $limit: Int\n $nextToken: String\n ) {\n getTagByUser(\n user_id: $user_id\n sortDirection: $sortDirection\n filter: $filter\n limit: $limit\n nextToken: $nextToken\n ) {\n items {\n id\n user_id\n tagFileId\n value\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n`;\nexport const listTiers = /* GraphQL */ `\n query ListTiers(\n $filter: ModelTierFilterInput\n $limit: Int\n $nextToken: String\n ) {\n listTiers(filter: $filter, limit: $limit, nextToken: $nextToken) {\n items {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n stripePlans {\n nextToken\n }\n }\n nextToken\n }\n }\n`;\nexport const getTier = /* GraphQL */ `\n query GetTier($id: ID!) {\n getTier(id: $id) {\n id\n costMonthly\n costYearly\n deviceMaxCount\n storageLimitGb\n alertMaxCount\n hasApiAccess\n billingCycles\n reportMaxCount\n reportTemplate\n createdAt\n updatedAt\n stripePlans {\n items {\n id\n tierId\n billingCycle\n cost\n createdAt\n updatedAt\n }\n nextToken\n }\n }\n }\n`;\n","/* eslint-disable */\n// WARNING: DO NOT EDIT. This file is automatically generated by AWS Amplify. It will be overwritten.\n\nconst awsmobile = {\n \"aws_project_region\": \"us-west-2\",\n \"aws_cognito_identity_pool_id\": \"us-west-2:0f0d132a-7e88-4d4a-847f-c6669a3df008\",\n \"aws_cognito_region\": \"us-west-2\",\n \"aws_user_pools_id\": \"us-west-2_JONz3OyEM\",\n \"aws_user_pools_web_client_id\": \"3bprknvpqkic38kh9bar7aur00\",\n \"oauth\": {},\n \"aws_appsync_graphqlEndpoint\": \"https://euceou6l7na6zofaunzwrrvrni.appsync-api.us-west-2.amazonaws.com/graphql\",\n \"aws_appsync_region\": \"us-west-2\",\n \"aws_appsync_authenticationType\": \"AMAZON_COGNITO_USER_POOLS\"\n};\n\n\nexport default awsmobile;\n","import React, { useContext } from 'react';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { Link as MaterialLink } from '@material-ui/core';\nimport { LayoutContext } from '../../hooks/LayoutContext';\n\ninterface MaterialClassesInterface {\n [key: string]: string;\n}\n\ninterface Props {\n classes: MaterialClassesInterface;\n}\n\nconst BreadCrumbNavigation = ({ classes }: Props) => {\n const layoutContext = useContext(LayoutContext);\n\n if (!layoutContext) {\n throw new Error(\n 'App component must be used within a Layout Context Provider'\n );\n }\n\n const { prevPageTitle } = layoutContext;\n\n if (prevPageTitle.length < 2) {\n return null;\n }\n\n const [urlTitle, url] = prevPageTitle;\n\n return (\n <>\n \n {urlTitle}\n {' '}\n /{' '}\n \n );\n};\n\nexport default BreadCrumbNavigation;\n","import {\n createStyles,\n Theme,\n Typography,\n withStyles,\n WithStyles\n} from '@material-ui/core';\nimport * as log from 'loglevel';\nimport React, { Component, ReactChild } from 'react';\nimport { Helmet } from 'react-helmet';\nimport { getPageTitle } from '../../helpers/DataHelper';\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorHeader: {\n color: theme.palette.error.main,\n marginBottom: theme.spacing(2)\n },\n errorMessage: {\n marginBottom: theme.spacing(2)\n },\n root: {\n alignItems: 'baseline',\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n padding: theme.spacing(3),\n paddingTop: theme.spacing(12)\n }\n });\n\ninterface Props extends WithStyles {\n children?: ReactChild;\n hasError?: string;\n}\ninterface State {\n error: boolean;\n}\n\nclass ErrorBoundary extends Component {\n public static getDerivedStateFromError(error: Error | null) {\n return { error: true };\n }\n constructor(props: Props) {\n super(props);\n this.state = { error: false };\n }\n\n public componentDidCatch(error: Error | null, info: object) {\n log.warn('ErrorBoundary.componentDidCatch', error, info);\n }\n\n public render() {\n const pageTitle = 'Error';\n const { error } = this.state;\n const { children, hasError, classes } = this.props;\n if (!error && !hasError) {\n return children;\n }\n return (\n
\n \n {getPageTitle(pageTitle)}\n \n \n Error\n \n \n The site has encountered an error{hasError && ':'}\n \n {hasError && (\n \n {hasError}\n \n )}\n
\n );\n }\n}\n\nexport default withStyles(styles)(ErrorBoundary);\n","import {\n createStyles,\n Theme,\n Typography,\n withStyles,\n WithStyles\n} from '@material-ui/core';\nimport React from 'react';\n\nconst styles = (theme: Theme) =>\n createStyles({\n textLink: {\n color: theme.palette.secondary.dark\n }\n });\n\ninterface Props extends WithStyles {\n year: number;\n}\n\nconst Copyright = ({ classes, year }: Props) => {\n return (\n \n {`© ${year} `}\n \n enDAQ\n \n {`. All rights reserved.`}\n \n );\n};\n\nCopyright.defaultProps = {\n year: new Date().getFullYear()\n};\n\nexport default withStyles(styles)(Copyright);\n","import {\n createStyles,\n Grid,\n Theme,\n Typography,\n withStyles,\n WithStyles\n} from '@material-ui/core';\nimport classNames from 'classnames';\nimport React, { useContext } from 'react';\nimport { LayoutContext } from '../../hooks/LayoutContext';\nimport Copyright from '../Copyright';\nimport { drawerWidth } from './../../helpers/NavHelper';\n\nconst styles = (theme: Theme) =>\n createStyles({\n footer: {\n height: 56,\n [theme.breakpoints.up('sm')]: {\n padding: `0 ${theme.spacing(3)}px`\n },\n [theme.breakpoints.up('md')]: {\n height: 64,\n paddingLeft: theme.spacing(3.5),\n paddingRight: theme.spacing(3.5)\n }\n },\n footerContent: {\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'row',\n\n justifyContent: 'center',\n [theme.breakpoints.up('sm')]: {\n justifyContent: 'space-between'\n }\n },\n footerHasLeftDrawer: {\n [theme.breakpoints.up('md')]: {\n paddingLeft: `calc(${theme.spacing(3.5)}px + ${drawerWidth}px)`\n }\n },\n [theme.breakpoints.up('sm')]: {\n footerContentLt: {\n justifyContent: 'flex-start'\n },\n footerContentRt: {\n justifyContent: 'flex-end'\n }\n }\n });\n\ninterface Props extends WithStyles {\n version: string | undefined;\n year: number;\n}\n\nconst Footer = ({ classes, version, year }: Props) => {\n const layoutContext = useContext(LayoutContext);\n if (!layoutContext) {\n throw new Error('Layout context is missing');\n }\n const { leftDrawerOpen } = layoutContext;\n return (\n <>\n \n \n \n \n \n \n {`Version ${version}`}\n \n \n \n \n );\n};\n\nFooter.defaultProps = {\n version: process.env.REACT_APP_VERSION,\n year: new Date().getFullYear()\n};\n\nexport default withStyles(styles)(Footer);\n","import { createStyles, makeStyles, Theme } from '@material-ui/core';\nimport React, { useContext, useEffect } from 'react';\nimport { LayoutContext } from '../../hooks/LayoutContext';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {}\n })\n);\n\nconst Empty = () => {\n const classes = useStyles();\n const pageTitle = 'Empty';\n const layoutContext = useContext(LayoutContext);\n if (!layoutContext) {\n throw new Error('Layout context is missing');\n }\n const { setPageTitle } = layoutContext;\n useEffect(() => {\n setPageTitle(pageTitle);\n }, [setPageTitle]);\n\n return
;\n};\nexport default Empty;\n","import React, { useContext } from 'react';\nimport { Route, RouteProps } from 'react-router-dom';\nimport { AuthContext } from '../../hooks/AuthContext';\nimport Empty from '../../screens/Empty';\n\nexport default ({ component, ...rest }: RouteProps) => {\n const authContext = useContext(AuthContext);\n if (!authContext) {\n throw new Error(\n 'PrivateRoute component must be used within a Auth Context Provider'\n );\n }\n const { isAuthorized } = authContext;\n return (\n } />\n );\n};\n","import {\n createStyles,\n LinearProgress,\n makeStyles,\n Snackbar,\n Theme,\n Typography\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport classnames from 'classnames';\nimport { get, toString } from 'lodash';\nimport queryString from 'query-string';\nimport React, { lazy, Suspense, useContext, useEffect } from 'react';\nimport Div100vh from 'react-div-100vh';\nimport Helmet from 'react-helmet';\nimport {\n Redirect,\n Route,\n RouteComponentProps,\n Switch,\n withRouter\n} from 'react-router-dom';\nimport { BillingSubscriptionStatus } from './API';\nimport BreadCrumbNavigation from './components/BreadCrumbNavigation';\nimport ErrorBoundary from './components/ErrorBoundary';\nimport Footer from './components/Footer';\nimport Header, { GlobalSiteAlertTypes } from './components/Header';\nimport PrivateRoute from './components/PrivateRoute';\nimport { getPageTitle } from './helpers/DataHelper';\nimport { drawerWidth } from './helpers/NavHelper';\nimport { PrivateScreenRoutes, PublicScreenRoutes } from './helpers/RouteHelper';\nimport { AuthContext } from './hooks/AuthContext';\nimport { LayoutContext } from './hooks/LayoutContext';\n\nconst NotFound = lazy(() => import('./screens/NotFound'));\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n App: {\n textAlign: 'left'\n },\n hasDarkerBackground: {\n background: theme.palette.grey[100]\n },\n hasRightDrawer: {},\n leftDrawerOpen: {\n [theme.breakpoints.up('md')]: {\n paddingLeft: drawerWidth - 24\n }\n },\n mainContentSignedIn: {\n transition: theme.transitions.create(['padding', 'margin'], {\n easing: theme.transitions.easing.easeInOut,\n duration: theme.transitions.duration.leavingScreen\n })\n },\n contentShift: {\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeInOut,\n duration: theme.transitions.duration.enteringScreen\n })\n },\n Site: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column'\n },\n SiteContent: {\n flex: '1 0 auto',\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n '&::after': {\n content: \"' '\",\n display: 'block',\n height: 0,\n visibility: 'hidden'\n }\n },\n pageTitle: {\n [theme.breakpoints.down('sm')]: {\n marginLeft: theme.spacing(5)\n },\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeInOut,\n duration: theme.transitions.duration.enteringScreen\n })\n },\n mainContent: {\n display: 'flex',\n flexDirection: 'column',\n flex: '1 1 0px',\n margin: theme.spacing(2, 0, 0, 2),\n [theme.breakpoints.up('md')]: {\n margin: theme.spacing(2, 0, 0, 7.25)\n }\n },\n mainContentPublic: {\n margin: 0,\n [theme.breakpoints.up('md')]: {\n margin: 0\n }\n },\n screenContainer: {\n overflow: 'auto',\n marginTop: theme.spacing(1.5),\n display: 'flex',\n flexDirection: 'column',\n flex: '1 1 0px'\n },\n screenContainerPublic: {\n marginTop: 0\n },\n suspenseLoader: {\n zIndex: theme.zIndex.appBar,\n marginTop: theme.spacing(-0.5)\n },\n errorSnackbar: {\n flexDirection: 'column',\n alignItems: 'flex-start'\n },\n errorAlert: {\n marginTop: theme.spacing(1)\n }\n })\n);\n\ninterface Props extends RouteComponentProps {\n authState?: string;\n isPublicRoute: boolean;\n}\n\nconst App = (props: Props) => {\n const { authState, location, history, isPublicRoute } = props;\n const classes = useStyles();\n const authContext = useContext(AuthContext);\n const layoutContext = useContext(LayoutContext);\n if (!authContext) {\n throw new Error(\n 'App component must be used within a Auth Context Provider'\n );\n }\n if (!layoutContext) {\n throw new Error(\n 'App component must be used within a Layout Context Provider'\n );\n }\n const {\n signedIn,\n isAuthorized,\n subscriptionStatus,\n isSuspended\n } = authContext;\n const {\n darkerBackground,\n globalSiteErrors,\n leftDrawerOpen,\n pageTitle,\n rightDrawerOpen,\n pushGlobalSiteAlerts,\n removeGlobalSiteError\n } = layoutContext;\n\n useEffect(() => {\n if (isSuspended) {\n pushGlobalSiteAlerts([GlobalSiteAlertTypes.accountSuspended]);\n } else if (subscriptionStatus === BillingSubscriptionStatus.past_due) {\n pushGlobalSiteAlerts([GlobalSiteAlertTypes.accountPastDue]);\n }\n }, [pushGlobalSiteAlerts, subscriptionStatus, isSuspended]);\n\n const { replace: historyReplace } = history;\n const { search: locationSearch, pathname: locationPathname } = location;\n const queryParams = queryString.parse(locationSearch);\n const querySessionId = toString(get(queryParams, 'session_id'));\n const queryBillingUpdate = toString(get(queryParams, 'billing_update'));\n useEffect(() => {\n if (querySessionId) {\n if (queryBillingUpdate === 'unsuspended') {\n pushGlobalSiteAlerts([GlobalSiteAlertTypes.accountReactivated]);\n } else if (queryBillingUpdate) {\n pushGlobalSiteAlerts([GlobalSiteAlertTypes.billingUpdated]);\n } else {\n pushGlobalSiteAlerts([GlobalSiteAlertTypes.tierSelected]);\n }\n historyReplace({\n pathname: locationPathname\n });\n }\n }, [\n historyReplace,\n locationPathname,\n pushGlobalSiteAlerts,\n querySessionId,\n queryBillingUpdate\n ]);\n\n if (authState !== 'signedIn' && !isPublicRoute) {\n return null;\n }\n if (!(signedIn && isAuthorized) && !isPublicRoute) {\n return ;\n }\n\n return (\n \n \n \n \n {getPageTitle(pageTitle)}\n \n
\n {!isPublicRoute &&
}\n }\n >\n \n {pageTitle && !isPublicRoute && (\n \n \n {pageTitle}\n \n )}\n\n \n \n \n {PrivateScreenRoutes.map((props, index) => (\n \n ))}\n {PublicScreenRoutes.map((props, index) => (\n \n ))}\n \n \n
\n
\n \n \n {globalSiteErrors.length > 0 && (\n \n <>\n {globalSiteErrors.map(\n (\n globalSiteError: string | React.ReactChild,\n errorIndex: number\n ) => (\n removeGlobalSiteError(errorIndex)}\n >\n {globalSiteError}\n \n )\n )}\n \n \n )}\n {!isPublicRoute &&
{
}
}\n \n \n \n );\n};\n\nexport default withRouter(App);\n","import { FormHelperText, Paper } from '@material-ui/core';\nimport Button from '@material-ui/core/Button';\nimport Container from '@material-ui/core/Container';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport Grid from '@material-ui/core/Grid';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography';\nimport { Alert } from '@material-ui/lab';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport {\n forgotPasswordNavigate,\n signInAction,\n signUpNavigate\n} from '../../../helpers/AmplifyAuthHelpers';\nimport { ErrorOutlineIcon } from '../../../images/Icons';\nimport { ReactComponent as Logotype } from '../../../images/Logos/Logotype.svg';\nimport Copyright from '../../Copyright';\nimport FieldPassword from '../FieldPassword';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n marginTop: theme.spacing(8),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center'\n },\n paper: {\n padding: theme.spacing(3, 3, 4),\n marginBottom: theme.spacing(3),\n minWidth: 400,\n borderColor: '#999'\n },\n form: {\n width: '100%',\n marginTop: theme.spacing(1)\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n padding: theme.spacing(3, 0),\n fontSize: 16\n },\n logoWrapper: {\n marginBottom: theme.spacing(3.5),\n width: 250\n },\n helperText: {\n margin: theme.spacing(-0.5, 0, 2),\n alignItems: 'center',\n display: 'flex'\n },\n formHelperIcon: {\n height: 16\n },\n bottomButtons: {\n flexDirection: 'column'\n },\n pageError: {\n margin: theme.spacing(2, 0)\n }\n}));\n\ninterface Props {\n authState?: string;\n onStateChange?: (newState: string, user: any) => {};\n override?: string;\n}\n\nconst validAuthStates = ['signIn', 'signedUp', 'signedOut'];\n\nconst CustomSignIn = (props: Props) => {\n const { authState, onStateChange } = props;\n const [loading, setLoading] = useState(false);\n const [username, setUsername] = useState('');\n const [password, setPassword] = useState('');\n const [alertUsername, setAlertUsername] = useState('');\n const [alertPassword, setAlertPassword] = useState('');\n const [pageError, setPageError] = useState('');\n\n useEffect(() => {\n setAlertUsername('');\n }, [username]);\n useEffect(() => {\n if (!authState || validAuthStates.indexOf(authState) < 0) return;\n setUsername('');\n setPassword('');\n setAlertUsername('');\n setAlertPassword('');\n setPageError('');\n }, [authState]);\n\n const handleSignIn = useCallback(\n (event: any) => {\n if (event) {\n event.preventDefault();\n }\n signInAction({\n username,\n password,\n setAlertUsername,\n setAlertPassword,\n setLoading,\n setPageError,\n onStateChange\n });\n },\n [\n username,\n password,\n setAlertUsername,\n setAlertPassword,\n setLoading,\n setPageError,\n onStateChange\n ]\n );\n const handleSignUp = useCallback(() => {\n signUpNavigate(onStateChange);\n }, [onStateChange]);\n const handleForgotPassword = useCallback(() => {\n forgotPasswordNavigate(onStateChange);\n }, [onStateChange]);\n\n const classes = useStyles();\n\n if (!authState || validAuthStates.indexOf(authState) < 0) return null;\n return (\n <>\n \n \n
\n
\n \n
\n \n \n Welcome back!\n \n {pageError && (\n setPageError('')}\n >\n {pageError}\n \n )}\n
\n {\n setUsername(event.currentTarget.value);\n }}\n error={!!alertUsername}\n />\n \n {alertUsername && (\n \n )}\n {alertUsername || 'Required'}\n \n \n \n Sign In\n \n \n \n \n Forgot password?{' '}\n \n \n Reset Password\n \n \n \n \n Don't have an account?{' '}\n \n Set Up A Free Account\n \n \n \n \n \n
\n \n
\n
\n \n );\n};\n\nexport default CustomSignIn;\n","import { FormHelperText, Paper } from '@material-ui/core';\nimport Button from '@material-ui/core/Button';\nimport Container from '@material-ui/core/Container';\nimport CssBaseline from '@material-ui/core/CssBaseline';\nimport Grid from '@material-ui/core/Grid';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Typography from '@material-ui/core/Typography';\nimport { Alert } from '@material-ui/lab';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport {\n OnStateChange,\n signInNavigate,\n signUpAction\n} from '../../../helpers/AmplifyAuthHelpers';\nimport { ErrorOutlineIcon } from '../../../images/Icons';\nimport { ReactComponent as Logotype } from '../../../images/Logos/Logotype.svg';\nimport Copyright from '../../Copyright';\nimport FieldPassword from '../FieldPassword';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport Link from '@material-ui/core/Link';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n marginTop: theme.spacing(8),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center'\n },\n paper: {\n padding: theme.spacing(3, 3, 4),\n marginBottom: theme.spacing(3),\n minWidth: 400,\n borderColor: '#999'\n },\n form: {\n width: '100%',\n marginTop: theme.spacing(1)\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n padding: theme.spacing(3, 0),\n fontSize: 16\n },\n logoWrapper: {\n marginBottom: theme.spacing(3.5),\n width: 250\n },\n helperText: {\n margin: theme.spacing(-0.5, 0, 2),\n alignItems: 'center',\n display: 'flex'\n },\n formHelperIcon: {\n height: 16\n },\n bottomButtons: {\n flexDirection: 'column'\n },\n pageError: {\n margin: theme.spacing(2, 0)\n }\n}));\n\ninterface Props {\n authState?: string;\n onStateChange?: OnStateChange;\n override?: string;\n}\n\nconst CustomSignUp = (props: Props) => {\n const { authState, onStateChange } = props;\n const [loading, setLoading] = useState(false);\n const [username, setUsername] = useState('');\n const [password, setPassword] = useState('');\n const [acceptTerms, setAcceptTerms] = useState(false);\n const [alertUsername, setAlertUsername] = useState('');\n const [alertPassword, setAlertPassword] = useState('');\n const [alertAcceptTerms, setAlertAcceptTerms] = useState('');\n const [pageError, setPageError] = useState('');\n\n useEffect(() => {\n setAlertUsername('');\n }, [username]);\n useEffect(() => {\n setAlertAcceptTerms('');\n }, [acceptTerms]);\n useEffect(() => {\n if (authState !== 'signUp') return;\n setUsername('');\n setPassword('');\n setAcceptTerms(false);\n setAlertUsername('');\n setAlertPassword('');\n setAlertAcceptTerms('');\n setPageError('');\n }, [authState]);\n\n const handleSignIn = useCallback(() => {\n signInNavigate(onStateChange);\n }, [onStateChange]);\n\n const handleSignUp = useCallback(\n (event: any) => {\n if (event) {\n event.preventDefault();\n }\n signUpAction({\n username,\n password,\n acceptTerms,\n setAlertUsername,\n setAlertPassword,\n setAlertAcceptTerms,\n setLoading,\n setPageError,\n onStateChange\n });\n },\n [\n username,\n password,\n acceptTerms,\n setAlertUsername,\n setAlertPassword,\n setAlertAcceptTerms,\n setLoading,\n setPageError,\n onStateChange\n ]\n );\n\n const classes = useStyles();\n\n if (authState !== 'signUp') return null;\n return (\n <>\n \n \n
\n
\n \n
\n \n \n Start using enDAQ Cloud\n \n {pageError && (\n setPageError('')}\n >\n {pageError}\n \n )}\n
\n {\n setUsername(event.currentTarget.value);\n }}\n error={!!alertUsername}\n />\n \n {alertUsername && (\n \n )}\n {alertUsername || 'Required'}\n \n \n {\n setAcceptTerms(!acceptTerms);\n }}\n value={acceptTerms}\n inputProps={{\n 'aria-label': 'I agree to Privacy Policy and Terms of Use'\n }}\n />\n }\n label={[\n 'I agree to ',\n \n Privacy Policy\n ,\n ' and ',\n \n Terms of Use\n \n ]}\n />\n {alertAcceptTerms && (\n \n \n {alertAcceptTerms}\n \n )}\n \n Set up a Free Account\n \n \n \n \n Already have an account?{' '}\n \n Sign In\n \n \n \n \n \n
\n \n
\n
\n \n );\n};\n\nexport default CustomSignUp;\n","import {\n Authenticator,\n Greetings,\n Loading,\n SignIn,\n SignUp\n} from 'aws-amplify-react';\nimport React, { useMemo } from 'react';\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\nimport App from '../../App';\nimport awsconfig from '../../aws-exports';\nimport { isRouteSelected } from '../../helpers/NavHelper';\nimport { PublicScreenRoutes } from '../../helpers/RouteHelper';\nimport CustomSignIn from '../Amplify/CustomSignIn';\nimport CustomSignUp from '../Amplify/CustomSignUp';\n\ninterface Props extends RouteComponentProps {}\n\nconst AppWithAuth = (props: Props) => {\n const { location } = props;\n const isPublicRoute = useMemo(\n () =>\n PublicScreenRoutes.reduce(\n (previousValue, currentValue) =>\n previousValue ||\n isRouteSelected(currentValue.path as string, location.pathname),\n false\n ),\n [location.pathname]\n );\n\n if (isPublicRoute) {\n return ;\n }\n\n return (\n \n \n \n \n \n );\n};\n\nexport default withRouter(AppWithAuth);\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","// Polyfill needs to be at the top - do not enable organizeImports for this reason\nimport 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\n\nimport { AWSIoTProvider } from '@aws-amplify/pubsub/lib/Providers';\nimport { CssBaseline } from '@material-ui/core';\nimport { ThemeProvider } from '@material-ui/styles';\nimport Amplify, { Auth } from 'aws-amplify';\nimport AWSAppSyncClient, { AUTH_TYPE } from 'aws-appsync';\nimport { Rehydrated } from 'aws-appsync-react';\nimport * as log from 'loglevel';\nimport React from 'react';\nimport { ApolloProvider } from 'react-apollo';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\nimport awsconfig from './aws-exports';\nimport AppWithAuth from './components/AppWithAuth';\nimport './fonts/index.css';\nimport { AuthProvider } from './hooks/AuthContext';\nimport { LayoutProvider } from './hooks/LayoutContext';\nimport { ReportProvider } from './hooks/ReportContext';\nimport {\n apiKeyApiName,\n apiKeyApiPathRoot\n} from './hooks/UseApiKeyApi/ApiHelper';\nimport {\n customerApiName,\n customerApiPathRoot\n} from './hooks/UseCustomerApi/ApiHelper';\nimport {\n dashboardApiName,\n dashboardApiPathRoot,\n shareDashboardApiName\n} from './hooks/UseDashboardApi/ApiHelper';\nimport { fileApiName, fileApiPathRoot } from './hooks/UseFileApi/ApiHelper';\nimport {\n pairingApiName,\n pairingApiPathRoot\n} from './hooks/UsePairingApi/ApiHelper';\nimport {\n stripeSessionApiName,\n stripeSessionApiPathRoot\n} from './hooks/UseStripeSessionApi/ApiHelper';\nimport './index.css';\nimport * as serviceWorker from './serviceWorker';\nimport materialUiTheme from './theme/materialUi';\n\n// if app is running in production, disable debug statements\nif (\n process.env.REACT_APP_USER_BRANCH &&\n process.env.REACT_APP_USER_BRANCH === 'master'\n) {\n // only show `info`, `warn`, and `error` messages\n log.setLevel('info');\n\n // disable console.log\n console.log = function() {};\n} else {\n log.setLevel('trace');\n}\n\nconst API_HOST = `${process.env.REACT_APP_API_HOST ||\n 'https://qvthkmtukh.execute-api.us-west-2.amazonaws.com/master'}`;\nAmplify.configure({\n ...awsconfig,\n API: {\n endpoints: [\n {\n name: pairingApiName,\n endpoint: `${API_HOST}${pairingApiPathRoot}`,\n custom_header: async () => {\n return {\n Authorization: `Bearer ${(await Auth.currentSession())\n .getIdToken()\n .getJwtToken()}`\n };\n }\n },\n {\n name: fileApiName,\n endpoint: `${API_HOST}${fileApiPathRoot}`,\n custom_header: async () => {\n return {\n Authorization: `Bearer ${(await Auth.currentSession())\n .getIdToken()\n .getJwtToken()}`\n };\n }\n },\n {\n name: stripeSessionApiName,\n endpoint: `${API_HOST}${stripeSessionApiPathRoot}`,\n custom_header: async () => {\n return {\n Authorization: `Bearer ${(await Auth.currentSession())\n .getIdToken()\n .getJwtToken()}`\n };\n }\n },\n {\n name: apiKeyApiName,\n endpoint: `${API_HOST}${apiKeyApiPathRoot}`,\n custom_header: async () => {\n return {\n Authorization: `Bearer ${(await Auth.currentSession())\n .getIdToken()\n .getJwtToken()}`\n };\n }\n },\n {\n name: dashboardApiName,\n endpoint: `${API_HOST}${dashboardApiPathRoot}`,\n custom_header: async () => {\n return {\n Authorization: `Bearer ${(await Auth.currentSession())\n .getIdToken()\n .getJwtToken()}`\n };\n }\n },\n {\n name: shareDashboardApiName,\n endpoint: `${API_HOST}${dashboardApiPathRoot}`\n },\n {\n name: customerApiName,\n endpoint: `${API_HOST}${customerApiPathRoot}`,\n custom_header: async () => {\n return {\n Authorization: `Bearer ${(await Auth.currentSession())\n .getIdToken()\n .getJwtToken()}`\n };\n }\n }\n ]\n }\n});\n\nAmplify.addPluggable(\n new AWSIoTProvider({\n aws_pubsub_region: awsconfig.aws_project_region,\n aws_pubsub_endpoint: `wss://${process.env.REACT_APP_MQTT_ID}.iot.${awsconfig.aws_project_region}.amazonaws.com/mqtt`\n })\n);\n\nconst client = new AWSAppSyncClient({\n url: awsconfig.aws_appsync_graphqlEndpoint,\n region: awsconfig.aws_appsync_region,\n auth: {\n type: AUTH_TYPE.AMAZON_COGNITO_USER_POOLS,\n jwtToken: async () =>\n (await Auth.currentSession()).getIdToken().getJwtToken()\n },\n disableOffline: true\n});\n\nReactDOM.render(\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","import { Typography } from '@material-ui/core';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport React, { useContext, useEffect } from 'react';\nimport Helmet from 'react-helmet';\nimport PlanList from '../../../components/PlanList';\nimport { getPageTitle } from '../../../helpers/DataHelper';\nimport { AuthContext } from '../../../hooks/AuthContext';\nimport { LayoutContext } from '../../../hooks/LayoutContext';\nimport { ReactComponent as Logotype } from '../../../images/Logos/Logotype.svg';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n logotype: {\n display: 'flex',\n flexShrink: 0,\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n margin: theme.spacing(4),\n [theme.breakpoints.up('md')]: {\n margin: theme.spacing(9, 4, 6)\n }\n },\n logotypeWrapper: {\n paddingTop: 3,\n width: 270,\n marginBottom: theme.spacing(2.75)\n },\n bodyText: {\n marginTop: theme.spacing(1)\n }\n })\n);\n\nconst PlansList = () => {\n const pageTitle = 'Select a Plan';\n const classes = useStyles();\n\n const authContext = useContext(AuthContext);\n if (!authContext) throw new Error('Auth context is missing');\n const { customerNeedsTier } = authContext;\n\n const layoutContext = useContext(LayoutContext);\n if (!layoutContext) throw new Error('Layout context is missing');\n const { setDarkerBackground, setPageTitle } = layoutContext;\n\n useEffect(() => {\n setDarkerBackground(true);\n return () => setDarkerBackground(false);\n });\n useEffect(() => {\n setPageTitle('');\n }, [setPageTitle]);\n\n return (\n <>\n \n {getPageTitle(pageTitle)}\n \n
\n {!customerNeedsTier ? (\n <>\n enDAQ Cloud Service Plans\n \n Choose a plan that gives you the features you need to manage your\n data.\n \n \n ) : (\n <>\n
\n \n
\n enDAQ data management tool\n \n )}\n
\n \n \n );\n};\n\nexport default PlansList;\n","import React from 'react';\nimport {\n Route,\n RouteComponentProps,\n Switch,\n withRouter\n} from 'react-router-dom';\nimport { routePlans } from '../../helpers/RouteHelper';\nimport { StripeSessionProvider } from '../../hooks/UseStripeSessionApi/StripeSessionContext';\nimport PlanListAll from './ListAll';\n\ninterface Props extends RouteComponentProps {\n ListAll?: React.ComponentType;\n}\n\nconst Plans: React.FC = () => {\n return (\n \n \n \n \n \n );\n};\nexport default withRouter(Plans);\n","import { lazy } from 'react';\nimport { RouteProps } from 'react-router-dom';\nimport Plans from '../screens/Plans';\n\nexport enum DeviceCreateStep {\n Form = 'form',\n FormError = 'form-error',\n Challenge = 'challenge',\n Accepted = 'accepted',\n Rejected = 'rejected',\n Expired = 'expired',\n Wait = 'wait'\n}\n\nexport enum DeviceCreateVariant {\n Default = 'default',\n Duplicate = 'duplicate',\n Conflict = 'conflict'\n}\n\nexport enum StripeSessionStep {}\n\nconst UserDashboard = lazy(() => import('../screens/Account/Dashboard'));\nconst UserCustomScripts = lazy(() =>\n import('../screens/Account/Dashboard/ManageCustomScripts')\n);\nconst UserDefaultScripts = lazy(() =>\n import('../screens/Account/Dashboard/ViewDefaultScripts')\n);\nconst Dashboard = lazy(() => import('../screens/Dashboard'));\nconst Account = lazy(() => import('../screens/Account'));\nconst DashboardShare = lazy(() => import('../screens/SharedDashboard'));\nconst File = lazy(() => import('../screens/File'));\nconst Device = lazy(() => import('../screens/Device'));\n\nexport const routeUserDashboard: () => string = () => '/user/dashboard';\nexport const routeSingleDashboard: () => string = () =>\n '/user/dashboard/:dashboardId';\nexport const routeSingleDashboardUrl: (\n dashboardId: string\n) => string = dashboardId => `/user/dashboard/${dashboardId}`;\nexport const routeViewSharedDashboard: () => string = () =>\n '/shared/dashboard/:shareToken';\nexport const routeViewSharedDashboardUrl: (\n shareToken: string\n) => string = shareToken => `/shared/dashboard/${shareToken}`;\nexport const routeUserCustomScripts: () => string = () =>\n '/user/manage-scripts';\nexport const routeDefaultScripts: () => string = () =>\n '/user/view-default-scripts';\nexport const routeDashboard: () => string = () => '/dashboard';\nexport const routeAccount: () => string = () => '/account';\nexport const routeAccountAlerts: () => string = () => '/account/alerts';\nexport const routeAccountApiKeys: () => string = () => '/account/api-keys';\nexport const routeDevice: () => string = () => '/sensors';\nexport const routeDeviceAdd: (\n regex: boolean,\n step?: DeviceCreateStep,\n variant?: DeviceCreateVariant\n) => string = (regex, step, variant) => {\n const stepMatch = `/:step(${Object.values(DeviceCreateStep).join('|')})?`;\n const variantMatch = `/:variant(${Object.values(DeviceCreateVariant).join(\n '|'\n )})?`;\n let exp = `/sensors/add${stepMatch}${variantMatch}`;\n let path =\n step || !regex\n ? exp.replace(\n stepMatch,\n typeof step === 'string' && step.length ? `/${step}` : ''\n )\n : exp;\n path =\n variant || !regex\n ? path.replace(\n variantMatch,\n typeof variant === 'string' && variant.length ? `/${variant}` : ''\n )\n : path;\n return path;\n};\nexport const routeDeviceListAll: () => string = () => '/sensors/list-all';\nexport const routeRecording: () => string = () => '/file';\nexport const routeRecordingListAll: () => string = () => '/file/list-all';\nexport const routeUploadRecording: () => string = (): string =>\n '/file/list-all?upload=True';\nexport const routePlans: () => string = () => '/plans';\nexport const routeAccountBilling: () => string = () => '/account/billing';\nexport const routeAccountSubscription: () => string = () =>\n '/account/subscription';\nexport const routeAccountChangePassword: () => string = () =>\n '/account/change-password';\nexport const routeAccountReportSettings: () => string = () =>\n '/account/custom-report-settings';\n\nexport const PrivateScreenRoutes: RouteProps[] = [\n {\n path: routeDashboard(),\n component: Dashboard,\n exact: true\n },\n {\n path: routeAccount(),\n component: Account,\n exact: true\n },\n {\n path: routeAccountAlerts(),\n component: Account,\n exact: true\n },\n {\n path: routeAccountApiKeys(),\n component: Account,\n exact: true\n },\n {\n path: routeAccountBilling(),\n component: Account,\n exact: true\n },\n {\n path: routeAccountSubscription(),\n component: Account,\n exact: true\n },\n {\n path: routeAccountChangePassword(),\n component: Account,\n exact: true\n },\n {\n path: routeAccountReportSettings(),\n component: Account,\n exact: true\n },\n {\n path: routeDevice(),\n component: Device,\n exact: true\n },\n {\n path: routeDeviceAdd(true),\n component: Device,\n exact: true\n },\n {\n path: routeDeviceListAll(),\n component: Device,\n exact: true\n },\n {\n path: routeRecording(),\n component: File,\n exact: true\n },\n {\n path: routeRecordingListAll(),\n component: File,\n exact: true\n },\n {\n path: routePlans(),\n component: Plans,\n exact: true\n },\n {\n path: routeUserDashboard(),\n component: UserDashboard,\n exact: true\n },\n {\n path: routeSingleDashboard(),\n component: UserDashboard,\n exact: true\n },\n {\n path: routeUserCustomScripts(),\n component: UserCustomScripts,\n exact: true\n },\n {\n path: routeDefaultScripts(),\n component: UserDefaultScripts,\n exact: true\n }\n];\n\nexport const PublicScreenRoutes: RouteProps[] = [\n {\n path: routeViewSharedDashboard(),\n component: DashboardShare,\n exact: false\n }\n];\n","import { format } from 'date-fns';\nimport { get } from 'lodash';\nimport React, {\n createContext,\n ReactChild,\n useContext,\n useEffect,\n useState\n} from 'react';\nimport { LayoutContext } from '../../hooks/LayoutContext';\nimport UseDashboardApi from '../../hooks/UseDashboardApi';\nimport { ApiTypes } from '../../hooks/UseDashboardApi/ApiHelper';\nimport { AuthContext } from '../AuthContext';\n\nexport interface ReportContextExports {\n dataUpdateCount: number;\n setDataUpdateCount: React.Dispatch;\n createModalOpen: boolean;\n setCreateModalOpen: React.Dispatch;\n savingInProgress: boolean;\n setSavingInProgress: React.Dispatch;\n inFlightDashboards: Set;\n createDashboardClick: (dashboardData: {\n dashboardId?: string | null;\n reportName?: string | null;\n selectedTags?: string[] | null;\n fileLimit?: number | null;\n customScriptId?: string | null;\n confirmButtonRef?: any;\n defaultScript?: string | null;\n file_ids?: string[] | null;\n }) => () => void;\n reportListLastViewed: string | null;\n refreshReportListLastViewed: () => void;\n reorderedReport: string | null;\n setReorderedReport: (ordered: string) => void;\n reportNotifications: {\n id: string;\n name: string;\n isNew: boolean;\n date: Date;\n }[];\n removeReportNotification: (dashboardId: string) => void;\n}\n\nexport const ReportContext = createContext(\n undefined\n);\nconst { Provider } = ReportContext;\n\nexport interface ReportProviderProps {\n children?: ReactChild;\n}\n\nexport const ReportProvider = (props: ReportProviderProps) => {\n const authContext = useContext(AuthContext);\n const layoutContext = useContext(LayoutContext);\n\n if (!authContext) throw new Error('Auth context is missing');\n if (!layoutContext) {\n throw new Error('Layout context is missing');\n }\n const { customerReports, refetchCustomerReports } = authContext;\n const { pushGlobalSiteError } = layoutContext;\n\n const [dataUpdateCount, setDataUpdateCount] = useState(0);\n const [createModalOpen, setCreateModalOpen] = useState(false);\n const [savingInProgress, setSavingInProgress] = useState(false);\n const [reportNotifications, setReportNotifications] = useState<\n { id: string; name: string; isNew: boolean; date: Date }[]\n >([]);\n const [reportListLastViewed] = useState(\n localStorage.getItem('reportListLastViewed') || null\n );\n\n const [reorderedReport] = useState(\n localStorage.getItem('reorderedReport') || null\n );\n\n const setReorderedReport = (order: string) => {\n localStorage.setItem('reorderedReport', order);\n };\n\n const refreshReportListLastViewed = () => {\n const newDate = format(new Date());\n localStorage.setItem('reportListLastViewed', newDate);\n };\n\n const [inFlightDashboards, setInFlightDashboards] = useState>(\n new Set()\n );\n\n const [inFlightError, setInFlightError] = useState(false);\n\n // Effect for resetting inFlight\n // count in case of an error.\n useEffect(() => {\n if (inFlightError) {\n setInFlightDashboards(new Set());\n }\n }, [inFlightError]);\n\n useEffect(() => {\n let refreshReportTimeout: ReturnType;\n let newInFlightDashboards = new Set(inFlightDashboards);\n if (customerReports) {\n let inFlightChange = false;\n customerReports.forEach(customerReport => {\n if (inFlightDashboards.has(customerReport.id)) {\n if (!['creating', 'updating'].includes(customerReport.status)) {\n newInFlightDashboards.delete(customerReport.id);\n inFlightChange = true;\n setReportNotifications(oldReportNotifications => [\n ...oldReportNotifications,\n {\n id: customerReport.id,\n name: customerReport.title || '',\n isNew: customerReport.status === 'created',\n date: new Date()\n }\n ]);\n }\n }\n });\n if (inFlightChange) {\n setInFlightDashboards(newInFlightDashboards);\n }\n }\n if (newInFlightDashboards.size > 0) {\n refreshReportTimeout = setTimeout(() => {\n refetchCustomerReports();\n }, 5000);\n }\n return () => {\n if (refreshReportTimeout) {\n clearTimeout(refreshReportTimeout);\n }\n };\n }, [customerReports, refetchCustomerReports]);\n\n const { requestPost: createDashboard } = UseDashboardApi(\n ApiTypes['CREATE'],\n false\n );\n\n const removeReportNotification = (dashboardId: string) => {\n setReportNotifications(oldNotifications =>\n oldNotifications.filter(\n oldNotification => oldNotification.id !== dashboardId\n )\n );\n };\n\n const createDashboardClick: ReportContextExports['createDashboardClick'] = ({\n dashboardId,\n reportName,\n selectedTags,\n fileLimit,\n customScriptId,\n confirmButtonRef,\n defaultScript,\n file_ids\n }) => async () => {\n if (confirmButtonRef) {\n confirmButtonRef.current.setAttribute('disabled', true);\n }\n setReorderedReport('false');\n setCreateModalOpen(false);\n setSavingInProgress(true);\n\n let requestBody: any = {};\n if (dashboardId) {\n requestBody = {\n ...requestBody,\n dashboard_id: dashboardId\n };\n }\n if (reportName) {\n requestBody = {\n ...requestBody,\n title: reportName\n };\n }\n if (selectedTags) {\n requestBody = {\n ...requestBody,\n tags: selectedTags\n };\n }\n if (fileLimit) {\n requestBody = {\n ...requestBody,\n max_files: fileLimit\n };\n }\n if (customScriptId) {\n requestBody = {\n ...requestBody,\n custom_script_id: customScriptId\n };\n }\n if (defaultScript) {\n requestBody = {\n ...requestBody,\n default_script: defaultScript\n };\n }\n\n if (file_ids) {\n requestBody = {\n ...requestBody,\n file_ids: file_ids\n };\n }\n\n setDataUpdateCount(prevCount => prevCount + 1);\n createDashboard(requestBody)\n .then(response => {\n const [returnedData] = response;\n setInFlightError(false);\n setSavingInProgress(false);\n if (!returnedData || !returnedData.id) {\n throw new Error('No dashboard ID returned');\n }\n setDataUpdateCount(prevCount => prevCount + 1);\n setInFlightDashboards(currentDashboards => {\n const copy = new Set(currentDashboards);\n copy.add(returnedData.id);\n return copy;\n });\n })\n .then(() => {\n refetchCustomerReports();\n })\n .catch(err => {\n const errorMessage = get(err, 'response.data.message');\n pushGlobalSiteError(\n 'There was an error processing your report. Try again later.'\n );\n console.error(`Error while generating report: ${errorMessage}`);\n setSavingInProgress(false);\n setInFlightError(true);\n setDataUpdateCount(prevCount => prevCount - 1);\n });\n };\n\n const defaultContext = {\n dataUpdateCount,\n setDataUpdateCount,\n createModalOpen,\n setCreateModalOpen,\n savingInProgress,\n setSavingInProgress,\n inFlightDashboards,\n createDashboardClick,\n reportListLastViewed,\n refreshReportListLastViewed,\n reorderedReport,\n setReorderedReport,\n reportNotifications,\n removeReportNotification\n };\n\n return (\n \n {props.children && props.children}\n \n );\n};\n","import {\n FormHelperText,\n IconButton,\n InputAdornment,\n Typography\n} from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport classnames from 'classnames';\nimport React, { useEffect, useState } from 'react';\nimport {\n ErrorOutlineIcon,\n Visibility,\n VisibilityOff\n} from '../../../images/Icons';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n marginBottom: 20\n },\n helperText: {\n margin: theme.spacing(-0.5, 0, 2),\n alignItems: 'center',\n display: 'flex'\n },\n helperTextPortal: {\n margin: theme.spacing(0.5, 0, 0, 0),\n maxWidth: 230,\n lineHeight: '1.25em',\n display: 'flex',\n alignItems: 'flex-start'\n },\n formHelperIcon: {\n height: 16\n }\n}));\n\ninterface Props {\n alertPassword: string;\n label?: string;\n password: string;\n requirementTexts?: string;\n setAlertPassword: React.Dispatch;\n setPassword: React.Dispatch;\n inPortal?: boolean;\n inputRef?: any;\n inputId?: string;\n}\n\nconst FieldPassword = (props: Props) => {\n const {\n alertPassword,\n label,\n password,\n requirementTexts,\n setAlertPassword,\n setPassword,\n inPortal,\n inputRef,\n inputId\n } = props;\n\n const [showPassword, setShowPassword] = useState(false);\n\n useEffect(() => {\n setAlertPassword('');\n }, [password, setAlertPassword]);\n\n const handleClickShowPassword = () => {\n setShowPassword(!showPassword);\n };\n const handleMouseDownPassword = (\n event: React.MouseEvent\n ) => {\n event.preventDefault();\n };\n\n const classes = useStyles();\n const passwordLabel = label || 'Password';\n\n let textFieldProps = {};\n if (inPortal) {\n textFieldProps = {\n ...textFieldProps\n };\n } else {\n textFieldProps = {\n ...textFieldProps,\n label: passwordLabel,\n margin: 'normal'\n };\n }\n\n return (\n
\n {inPortal && (\n \n \n \n )}\n {\n setPassword(event.currentTarget.value);\n }}\n error={!!alertPassword}\n InputProps={{\n endAdornment: (\n \n \n {showPassword ? : }\n \n \n )\n }}\n ref={inputRef}\n id={inputId || 'password'}\n {...textFieldProps}\n />\n \n {alertPassword && (\n \n )}\n {alertPassword || requirementTexts}\n \n
\n );\n};\n\nexport default FieldPassword;\n","export const fileApiName = 'file';\nexport const fileApiPathRoot = '/file';\n\nexport interface FileInputType {\n name: string;\n type: string;\n size: number;\n url: string;\n}\nexport interface PostParams {\n download:\n | {\n file_id: string;\n expiration?: string;\n }\n | { [key: string]: any }[];\n upload: {\n files: FileInputType[];\n };\n}\n\nexport interface PostResponses {\n download: {\n url: string;\n file_name: string;\n };\n upload: {\n files: {\n file: FileInputType;\n id: string;\n s3_object_key: string;\n expiration: number;\n signed_url: {\n url: string;\n fields: {\n key: string;\n AWSAccessKeyId: string;\n 'x-amz-security-token': string;\n policy: string;\n signature: string;\n };\n };\n }[];\n errors: {\n file: {\n name: string;\n size: number;\n type: string;\n };\n error: {\n status: number;\n message: string;\n };\n }[];\n };\n}\n\nexport enum ApiTypes {\n DOWNLOAD = 'download',\n UPLOAD = 'upload',\n DELETE = 'delete'\n}\nexport type ApiCallback = () => string;\nexport type ApiUrlsSignature = { [key in ApiTypes]: ApiCallback };\n\nexport const apiUrls: ApiUrlsSignature = {\n download: () => `/download`,\n upload: () => `/upload-url`,\n delete: () => `/remove`\n};\n","import { createStyles, makeStyles } from '@material-ui/core';\nimport theme from '../theme/materialUi';\nexport const stylesLayout = {\n root: {\n 'overflow-y': 'auto'\n },\n container: {\n display: 'flex',\n 'flex-direction': 'column',\n flex: '1 1 0px',\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2)\n },\n grid: {\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n flex: '1 1 0px',\n 'flex-wrap': 'nowrap',\n 'flex-direction': 'column'\n },\n gridTop: {\n flex: '1 0 auto',\n 'flex-direction': 'row',\n alignContent: 'center'\n },\n gridBottom: {\n flex: '0'\n },\n superIcon: {\n fontSize: '192px'\n }\n};\nexport const useStylesLayout = makeStyles(() => createStyles(stylesLayout));\n","import { API } from 'aws-amplify';\nimport { useMemo } from 'react';\nimport {\n ApiCallback,\n ApiTypes,\n apiUrls,\n dashboardApiName,\n shareDashboardApiName\n} from './ApiHelper';\n\nconst UseDashboardApi = (apiType: ApiTypes, isShared: boolean) => {\n const requestPost = useMemo(\n () => async (body?: unknown) => {\n const url: ApiCallback = apiUrls[apiType];\n const apiName = isShared ? shareDashboardApiName : dashboardApiName;\n const path = url();\n const init = {\n body: body || {}\n };\n const response = await API.post(apiName, path, init);\n return response;\n },\n [apiType, isShared]\n );\n\n const requestDelete = useMemo(\n () => async (body?: unknown) => {\n const url: ApiCallback = apiUrls[apiType];\n const apiName = dashboardApiName;\n const path = url();\n const init = {\n body: body || {}\n };\n const response = await API.del(apiName, path, init);\n return response;\n },\n [apiType]\n );\n\n return {\n requestPost,\n requestDelete\n };\n};\n\nexport default UseDashboardApi;\n","import {\n createStyles,\n Grid,\n Switch,\n Theme,\n Typography,\n withStyles,\n WithStyles\n} from '@material-ui/core';\nimport React from 'react';\n\nconst styles = (theme: Theme) =>\n createStyles({\n selectedOption: {\n fontWeight: 800\n },\n container: {\n width: '100%',\n margin: 0\n }\n });\n\ninterface Props extends WithStyles {\n offLabel?: string;\n onLabel?: string;\n setToggle: React.Dispatch;\n switchColor: 'primary' | 'secondary';\n toggle: boolean;\n}\n\nconst LabelledSwitch = ({\n classes,\n offLabel,\n onLabel,\n setToggle,\n switchColor,\n toggle\n}: Props) => {\n return (\n \n \n \n {offLabel}\n \n \n setToggle(!toggle)}\n value=\"checkedC\"\n color={switchColor}\n />\n \n \n {onLabel}\n \n \n \n );\n};\n\nexport default withStyles(styles)(LabelledSwitch);\n","import {\n Button,\n ButtonTypeMap,\n createStyles,\n Paper,\n Theme,\n Typography,\n withStyles,\n WithStyles\n} from '@material-ui/core';\nimport classnames from 'classnames';\nimport { get, startCase } from 'lodash';\nimport React, { useContext } from 'react';\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\nimport { pluralizeString } from '../../helpers/DataHelper';\nimport { routeAccountBilling, routeDashboard } from '../../helpers/RouteHelper';\nimport { AuthContext } from '../../hooks/AuthContext';\nimport { StripeSessionContext } from '../../hooks/UseStripeSessionApi/StripeSessionContext';\n\nconst styles = (theme: Theme) =>\n createStyles({\n card: {\n margin: theme.spacing(1),\n width: 255,\n borderRadius: 4\n },\n cardInner: {\n padding: `${theme.spacing(3)}px ${theme.spacing(2)}px`,\n textAlign: 'center'\n },\n recommendedCard: {\n border: `1px solid ${theme.palette.grey[900]}`\n },\n recommendedText: {\n background: theme.palette.grey[900],\n color: theme.palette.common.white,\n textAlign: 'center',\n padding: theme.spacing(1),\n textTransform: 'uppercase'\n },\n planTitle: {\n marginBottom: theme.spacing(1.5)\n },\n planButton: {\n minWidth: 190,\n padding: `${theme.spacing(1.5)}px ${theme.spacing(1)}px`,\n margin: `${theme.spacing(2)}px 0 0`,\n boxShadow: 'none'\n },\n paymentGroup: {\n display: 'flex',\n alignItems: 'baseline',\n justifyContent: 'center',\n marginBottom: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n borderBottom: `1px solid #979797`\n },\n paymentAmount: {\n marginRight: theme.spacing(1)\n },\n planBenefits: {\n lineHeight: 2.33,\n letterSpacing: '0.39px',\n textAlign: 'center'\n },\n capitalize: {\n textTransform: 'capitalize'\n }\n });\n\ninterface Props extends WithStyles, RouteComponentProps {\n tierId: string;\n costMonthly: number;\n costYearly: number;\n yearlyToggled: boolean;\n capLinkedSensors: number;\n capStorageGb: number;\n capAlerts: number;\n hasApiAccess: boolean;\n reportTemplate: string;\n generateOnCtaClick: (\n tierId: string,\n paymentPeriod: string,\n cost: number\n ) => () => void;\n disableCta: boolean;\n recommended?: boolean;\n}\n\nconst PlanCard = ({\n classes,\n tierId,\n costMonthly,\n costYearly,\n yearlyToggled,\n capLinkedSensors,\n capStorageGb,\n capAlerts,\n hasApiAccess,\n reportTemplate,\n generateOnCtaClick,\n disableCta,\n history,\n recommended\n}: Props) => {\n const authContext = useContext(AuthContext);\n const stripeSessionContext = useContext(StripeSessionContext);\n if (!authContext) {\n throw new Error(\n 'App component must be used within a Auth Context Provider'\n );\n }\n if (!stripeSessionContext) {\n throw new Error('Stripe session context is missing');\n }\n const { customerData, isSuspended } = authContext;\n const { switchBilling } = stripeSessionContext;\n\n const customerTier = get(customerData, 'tier');\n const customerFrequency = get(customerData, 'billingFrequency');\n\n const cost = yearlyToggled ? costYearly : costMonthly;\n const paymentPeriod = yearlyToggled ? 'year' : 'month';\n const paymentPeriodName = yearlyToggled ? 'Yearly' : 'Monthly';\n let titleText = tierId;\n const ctaClasses = classes.planButton;\n let ctaVariant: ButtonTypeMap['props']['variant'] = 'contained';\n let ctaText = 'Choose Plan';\n\n let onCtaClick = generateOnCtaClick(tierId, paymentPeriod, cost);\n if (customerTier) {\n const currentTier = tierId === get(customerData, 'tierId');\n const currentFrequency = yearlyToggled !== (customerFrequency === 'yearly');\n const newTierIsUpgrade = costMonthly > customerTier.costMonthly;\n const newTierIsDowngrade = costMonthly < customerTier.costMonthly;\n if (cost === 0) {\n ctaVariant = 'outlined';\n }\n if (currentTier) {\n if (cost > 0 && currentFrequency) {\n ctaText = `Switch to ${paymentPeriodName}`;\n titleText = `${startCase(tierId)} (Current Plan)`;\n } else if (isSuspended) {\n ctaText = 'Update Billing Info';\n onCtaClick = () => {\n switchBilling(`${window.location.origin}${routeAccountBilling()}`);\n };\n } else {\n ctaText = 'Stay with Current Plan';\n titleText = `${startCase(tierId)} (Current Plan)`;\n onCtaClick = () =>\n history.push({\n pathname: routeDashboard()\n });\n }\n } else if (newTierIsUpgrade) {\n ctaText = `Upgrade to ${startCase(tierId)}`;\n } else if (newTierIsDowngrade) {\n ctaText = `Downgrade to ${startCase(tierId)}`;\n }\n }\n const capAlertText = capAlerts >= 0 ? capAlerts : 'Unlimited';\n\n let capStorage = `${capStorageGb} GB`;\n if (capStorageGb > 1000) {\n capStorage = `${capStorageGb / 1000} TB`;\n }\n\n return (\n \n {recommended && (\n \n Recommended\n \n )}\n
\n \n {titleText}\n \n
\n \n ${cost}\n \n \n / {paymentPeriod}\n \n
\n \n {capLinkedSensors < 0 ? 'Unlimited' : capLinkedSensors} Linked{' '}\n {pluralizeString('Sensor', capLinkedSensors)}\n
\n {capStorage} Storage\n
\n {capAlertText} Custom {pluralizeString('Alert', capAlerts)}\n
\n {hasApiAccess ? 'API Access' : 'No API Access'}\n
\n {reportTemplate} Report\n Views\n
\n \n {ctaText}\n \n
\n \n );\n};\n\nexport default withRouter(withStyles(styles)(PlanCard));\n","import {\n Button,\n Checkbox,\n createStyles,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n FormControlLabel,\n Grid,\n makeStyles,\n Theme,\n Typography\n} from '@material-ui/core';\nimport gql from 'graphql-tag';\nimport { findIndex, get, map, remove, startCase } from 'lodash';\nimport React, { useCallback, useContext, useState } from 'react';\nimport { withApollo, WithApolloClient } from 'react-apollo';\nimport { updateAlert } from '../../../../graphql/mutations';\nimport { pluralizeString } from '../../../../helpers/DataHelper';\nimport { LayoutContext } from '../../../../hooks/LayoutContext';\n\ninterface Props extends WithApolloClient {\n newTierId: string;\n customerAlerts: any[] | null;\n maxAlerts: number;\n leaveDowngrade: () => void;\n continueDowngrade: () => void;\n setLoading: React.Dispatch;\n}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n dialogText: {\n margin: 0\n },\n checkboxLabelRoot: {\n margin: 0,\n display: 'flex',\n flex: '1 0 0'\n },\n checkboxLabel: {\n textTransform: 'none',\n display: 'flex',\n justifyContent: 'space-between',\n flex: '1 0 auto',\n textAlign: 'left',\n [theme.breakpoints.down('xs')]: {\n flexDirection: 'column'\n }\n },\n customerItem: {\n justifyContent: 'space-between',\n paddingRight: theme.spacing(3),\n flexWrap: 'nowrap',\n borderBottom: `1px solid ${theme.palette.grey[500]}`\n },\n listContainer: {\n maxHeight: 210,\n overflowY: 'scroll',\n padding: theme.spacing(1, 1.5)\n }\n })\n);\n\nconst AlertsError = (props: Props) => {\n const {\n newTierId,\n customerAlerts,\n maxAlerts,\n leaveDowngrade,\n continueDowngrade,\n client,\n setLoading\n } = props;\n\n const classes = useStyles();\n\n const layoutContext = useContext(LayoutContext);\n if (!layoutContext) {\n throw new Error(\n 'App component must be used within a Layout Context Provider'\n );\n }\n const { pushGlobalSiteError } = layoutContext;\n\n const [enabledItems, setEnabledItems] = useState([]);\n\n const generateCheckToggleAction = (itemId: string) => () => {\n let newEnabledItems: string[] = [...enabledItems];\n const isDisabled = remove(\n newEnabledItems,\n enabledItem => enabledItem === itemId\n );\n if (isDisabled.length <= 0) {\n newEnabledItems = [...newEnabledItems, itemId];\n }\n setEnabledItems(newEnabledItems);\n };\n const errorEnabledAtMax = enabledItems.length >= maxAlerts;\n\n const applyAndContinue = useCallback(async () => {\n if (!customerAlerts) return;\n setLoading(true);\n await Promise.all(\n map(customerAlerts, (customerItem: any) => {\n const itemId = get(customerItem, 'id');\n const enabled =\n findIndex(enabledItems, enabledItem => enabledItem === itemId) >= 0;\n return client.mutate({\n mutation: gql(updateAlert),\n variables: {\n input: {\n id: itemId,\n enabled\n }\n }\n });\n })\n )\n .then(() => {\n continueDowngrade();\n })\n .catch(err => {\n setLoading(false);\n pushGlobalSiteError(\n 'Error encountered while updating alerts. Please try again.'\n );\n });\n }, [\n customerAlerts,\n enabledItems,\n client,\n continueDowngrade,\n pushGlobalSiteError,\n setLoading\n ]);\n\n if (!customerAlerts) return null;\n\n return (\n <>\n Manage Custom Alerts\n \n \n You can only have {maxAlerts} custom{' '}\n {pluralizeString('alert', maxAlerts)} for the {startCase(newTierId)}{' '}\n Plan. Please select the custom {pluralizeString('alert', maxAlerts)}{' '}\n you want to keep on your account.\n \n \n \n {customerAlerts.map((customerItem: any) => {\n const itemId = get(customerItem, 'id');\n const itemIsEnabled =\n findIndex(enabledItems, enabledItem => enabledItem === itemId) >= 0;\n const alertName = get(customerItem, 'name') || 'No Alert Name';\n const tagName = get(customerItem, 'tagName');\n\n return (\n \n \n }\n label={\n <>\n \n {alertName}\n \n \n {tagName}\n \n \n }\n />\n \n );\n })}\n \n \n \n Cancel\n \n \n Apply\n \n \n \n );\n};\n\nexport default withApollo(AlertsError);\n","import {\n Button,\n createStyles,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n makeStyles,\n Theme\n} from '@material-ui/core';\nimport { startCase } from 'lodash';\nimport React, { useCallback, useContext } from 'react';\nimport { LayoutContext } from '../../../../hooks/LayoutContext';\nimport { ApiTypes } from '../../../../hooks/UseApiKeyApi/ApiHelper';\nimport UseApiKeyApi from '../../../../hooks/UseApiKeyApi';\n\ninterface Props {\n newTierId: string;\n customerApiKeys: any[] | null;\n leaveDowngrade: () => void;\n continueDowngrade: () => void;\n setLoading: React.Dispatch;\n}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n dialogText: {\n margin: 0\n },\n checkboxLabelRoot: {\n margin: 0,\n display: 'flex',\n flex: '1 0 0'\n },\n checkboxLabel: {\n textTransform: 'none',\n display: 'flex',\n justifyContent: 'space-between',\n flex: '1 0 auto',\n textAlign: 'left',\n [theme.breakpoints.down('xs')]: {\n flexDirection: 'column'\n }\n },\n customerItem: {\n justifyContent: 'space-between',\n paddingRight: theme.spacing(3),\n flexWrap: 'nowrap',\n borderBottom: `1px solid ${theme.palette.grey[500]}`\n },\n listContainer: {\n maxHeight: 210,\n overflowY: 'scroll',\n padding: theme.spacing(1, 1.5)\n }\n })\n);\n\nconst ApiKeyError = (props: Props) => {\n const {\n newTierId,\n customerApiKeys,\n leaveDowngrade,\n continueDowngrade,\n setLoading\n } = props;\n\n const classes = useStyles();\n\n const layoutContext = useContext(LayoutContext);\n if (!layoutContext) {\n throw new Error(\n 'App component must be used within a Layout Context Provider'\n );\n }\n const { pushGlobalSiteError } = layoutContext;\n\n const { requestDelete: removeApiKeys } = UseApiKeyApi(ApiTypes['REMOVE']);\n\n const applyAndContinue = useCallback(async () => {\n setLoading(true);\n await Promise.resolve(removeApiKeys())\n .then(() => {\n continueDowngrade();\n })\n .catch(err => {\n setLoading(false);\n pushGlobalSiteError(\n 'Error encountered while removing API keys. Please try again.'\n );\n });\n }, [removeApiKeys, continueDowngrade, pushGlobalSiteError, setLoading]);\n\n if (!customerApiKeys) return null;\n\n return (\n <>\n Manage API Keys\n \n \n You will need to remove your API keys for the {startCase(newTierId)}{' '}\n Plan. Please click \"Remove and Continue\" to clear your API keys from\n your account\n \n \n \n \n Cancel\n \n \n Remove and Continue\n \n \n \n );\n};\n\nexport default ApiKeyError;\n","import {\n Button,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle\n} from '@material-ui/core';\nimport React from 'react';\nimport { startCase } from 'lodash';\n\ninterface Props {\n newTierId: string;\n leaveDowngrade: () => void;\n continueDowngrade: () => void;\n}\n\nconst ConfirmStart = (props: Props) => {\n const { newTierId, leaveDowngrade, continueDowngrade } = props;\n\n return (\n <>\n \n Downgrade to {startCase(newTierId)} Plan\n \n \n \n Please confirm you want to downgrade to the {startCase(newTierId)}{' '}\n Plan. You will lose some of the features from your current plan.\n \n \n \n \n Cancel\n \n \n Confirm\n \n \n \n );\n};\n\nexport default ConfirmStart;\n","import {\n Button,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle\n} from '@material-ui/core';\nimport React from 'react';\n\ninterface Props {\n leaveDowngrade: () => void;\n continueDowngrade: () => void;\n}\n\nconst ScriptsWarning = (props: Props) => {\n const { leaveDowngrade, continueDowngrade } = props;\n\n return (\n <>\n Custom Report Scripts\n \n \n After downgrading, you will no longer be able to generate reports\n using your custom scripts. Please confirm to continue.\n \n \n \n \n Cancel\n \n \n Confirm\n \n \n \n );\n};\n\nexport default ScriptsWarning;\n","import {\n Button,\n Checkbox,\n createStyles,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n FormControlLabel,\n Grid,\n makeStyles,\n Theme,\n Typography\n} from '@material-ui/core';\nimport { findIndex, get, map, remove, startCase } from 'lodash';\nimport React, { useCallback, useContext, useState } from 'react';\nimport { pluralizeString } from '../../../../helpers/DataHelper';\nimport { LayoutContext } from '../../../../hooks/LayoutContext';\nimport UsePairingApi from '../../../../hooks/UsePairingApi';\nimport {\n ApiTypes,\n PostParams\n} from '../../../../hooks/UsePairingApi/ApiHelper';\n\ninterface Props {\n newTierId: string;\n customerSensors: any[] | null;\n maxSensors: number;\n leaveDowngrade: () => void;\n continueDowngrade: () => void;\n setLoading: React.Dispatch;\n}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n dialogText: {\n margin: 0\n },\n checkboxLabelRoot: {\n margin: 0,\n display: 'flex',\n flex: '1 0 0'\n },\n checkboxLabel: {\n textTransform: 'none',\n display: 'flex',\n justifyContent: 'space-between',\n flex: '1 0 auto',\n textAlign: 'left',\n [theme.breakpoints.down('xs')]: {\n flexDirection: 'column'\n }\n },\n customerItem: {\n justifyContent: 'space-between',\n paddingRight: theme.spacing(3),\n flexWrap: 'nowrap',\n borderBottom: `1px solid ${theme.palette.grey[500]}`\n },\n listContainer: {\n maxHeight: 210,\n overflowY: 'scroll',\n padding: theme.spacing(1, 1.5)\n }\n })\n);\n\nconst SensorsError = (props: Props) => {\n const {\n newTierId,\n customerSensors,\n maxSensors,\n leaveDowngrade,\n continueDowngrade,\n setLoading\n } = props;\n\n const classes = useStyles();\n\n const layoutContext = useContext(LayoutContext);\n if (!layoutContext) {\n throw new Error(\n 'App component must be used within a Layout Context Provider'\n );\n }\n const { pushGlobalSiteError } = layoutContext;\n\n const [enabledItems, setEnabledItems] = useState([]);\n\n const generateCheckToggleAction = (itemId: string) => () => {\n let newEnabledItems: string[] = [...enabledItems];\n const isDisabled = remove(\n newEnabledItems,\n enabledItem => enabledItem === itemId\n );\n if (isDisabled.length <= 0) {\n newEnabledItems = [...newEnabledItems, itemId];\n }\n setEnabledItems(newEnabledItems);\n };\n const errorEnabledAtMax = enabledItems.length >= maxSensors;\n const { requestPost: unlinkRequest } = UsePairingApi(ApiTypes['UNLINK']);\n\n const applyAndContinue = useCallback(async () => {\n if (!customerSensors) return;\n setLoading(true);\n const sensorsToUnlink = customerSensors.filter(\n customerItem =>\n findIndex(\n enabledItems,\n enabledSensor =>\n enabledSensor === get(customerItem, 'serial_number_id')\n ) < 0\n );\n await Promise.all(\n map(sensorsToUnlink, (customerItem: any) => {\n const body: PostParams['unlink'] = {\n serial_number_id: get(customerItem, 'serial_number_id'),\n thing_name: get(customerItem, 'device.thing_name'),\n factory_reset: true\n };\n return unlinkRequest(body);\n })\n )\n .then(() => {\n continueDowngrade();\n })\n .catch(err => {\n setLoading(false);\n pushGlobalSiteError(\n 'Error encountered while unlinking sensors. Please try again.'\n );\n });\n }, [\n customerSensors,\n enabledItems,\n continueDowngrade,\n pushGlobalSiteError,\n unlinkRequest,\n setLoading\n ]);\n\n if (!customerSensors) return null;\n\n return (\n <>\n Manage Sensors\n \n \n You can only link up to {maxSensors}{' '}\n {pluralizeString('sensor', maxSensors)} for the {startCase(newTierId)}{' '}\n Plan. Please select the {pluralizeString('sensor', maxSensors)} you\n want to keep linked to your account.\n \n \n \n {customerSensors.map((customerItem: any) => {\n const itemSerialNum = get(customerItem, 'serial_number_id');\n const itemName = get(customerItem, 'device.name');\n const itemIsEnabled =\n findIndex(\n enabledItems,\n enabledSensor => enabledSensor === itemSerialNum\n ) >= 0;\n\n return (\n \n \n }\n label={\n <>\n \n {itemSerialNum}\n \n \n {itemName}\n \n \n }\n />\n \n );\n })}\n \n \n \n Cancel\n \n \n Apply\n \n \n \n );\n};\n\nexport default SensorsError;\n","import {\n Button,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle\n} from '@material-ui/core';\nimport { startCase } from 'lodash';\nimport React from 'react';\n\ninterface Props {\n newTierId: string;\n leaveDowngrade: () => void;\n continueDowngrade: () => void;\n}\n\nconst StartManage = (props: Props) => {\n const { newTierId, leaveDowngrade, continueDowngrade } = props;\n\n return (\n <>\n Manage Downgrade\n \n \n Please confirm you want to downgrade to the {startCase(newTierId)}{' '}\n Plan. You will need to manage your account before you can downgrade\n your plan.\n \n \n \n \n Cancel\n \n \n Manage\n \n \n \n );\n};\n\nexport default StartManage;\n","import {\n Button,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle\n} from '@material-ui/core';\nimport React from 'react';\nimport { startCase } from 'lodash';\n\ninterface Props {\n newTierId?: string;\n leaveDowngrade: () => void;\n continueDowngrade: () => void;\n}\n\nconst StorageError = (props: Props) => {\n const { newTierId, leaveDowngrade, continueDowngrade } = props;\n\n return (\n <>\n Manage Recordings\n \n \n You will exceed the storage limit for {startCase(newTierId)} Plan.\n Once your account is downgraded, you will not be able to continue to\n upload additional recordings. Your sensors will stop uploading data\n automatically. Existing recordings will remain in My Recordings.\n \n \n \n \n Cancel\n \n \n OK\n \n \n \n );\n};\n\nexport default StorageError;\n","import { Backdrop, CircularProgress, Dialog } from '@material-ui/core';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport { get } from 'lodash';\nimport React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState\n} from 'react';\nimport { convertBytesToGb } from '../../../helpers/DataHelper';\nimport { AuthContext } from '../../../hooks/AuthContext';\nimport AlertsError from './Components/AlertsError';\nimport ApiKeyError from './Components/ApiKeyError';\nimport ConfirmStart from './Components/ConfirmStart';\nimport ScriptsWarning from './Components/ScriptsWarning';\nimport SensorsError from './Components/SensorsError';\nimport StartManage from './Components/StartManage';\nimport StorageError from './Components/StorageError';\n\ninterface Props {\n newTierId: string;\n maxAlerts: number;\n maxSensors: number;\n maxStorage: number;\n hasApiAccess: boolean;\n downgradeOpen: boolean;\n setDowngradeOpen: React.Dispatch;\n successCallback: () => void;\n}\n\nconst flowToMaxWidth: { [key: string]: any } = {\n confirmStart: 'xs',\n startManage: 'xs',\n storageError: 'sm',\n apiKeyError: 'sm',\n sensorsError: 'sm',\n alertsError: 'sm'\n};\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n backdrop: {\n zIndex: theme.zIndex.modal + 1,\n color: '#fff'\n }\n })\n);\n\nconst PlansDowngrade = (props: Props) => {\n const {\n newTierId,\n maxAlerts,\n maxSensors,\n maxStorage,\n hasApiAccess,\n downgradeOpen,\n setDowngradeOpen,\n successCallback\n } = props;\n const classes = useStyles();\n\n const [currentStepId, setCurrentStepId] = useState(0);\n const [loading, setLoading] = useState(false);\n\n const authContext = useContext(AuthContext);\n if (!authContext) {\n throw new Error(\n 'App component must be used within a Auth Context Provider'\n );\n }\n const {\n customerData,\n customerAlerts,\n customerApiKeys,\n customerSensors,\n customerScripts,\n refetchCustomerData\n } = authContext;\n\n const downgradeFlow = useMemo(() => {\n const userAlertCount = customerAlerts ? customerAlerts.length : 0;\n const userApiKeyCount = customerApiKeys ? customerApiKeys.length : 0;\n const userSensorCount = customerSensors ? customerSensors.length : 0;\n const customScriptsCount = customerScripts ? customerScripts.length : 0;\n const userStorage = convertBytesToGb(\n get(customerData, 'storageConsumed', 0)\n );\n\n const alertsError = userAlertCount > maxAlerts && maxAlerts >= 0;\n const apiKeyError = userApiKeyCount > 0 && !hasApiAccess;\n const sensorsError = userSensorCount > maxSensors && maxSensors >= 0;\n const storageError = userStorage > maxStorage;\n const scriptsError = newTierId === 'free' && customScriptsCount > 0;\n\n let flow: string[] = [];\n if (alertsError || sensorsError || storageError) {\n flow = [...flow, 'startManage'];\n } else {\n flow = [...flow, 'confirmStart'];\n }\n if (apiKeyError) flow = [...flow, 'apiKeyError'];\n if (storageError) flow = [...flow, 'storageError'];\n if (sensorsError) flow = [...flow, 'sensorsError'];\n if (alertsError) flow = [...flow, 'alertsError'];\n if (scriptsError) flow = [...flow, 'scriptsError'];\n return flow;\n }, [\n customerAlerts,\n customerApiKeys,\n customerSensors,\n customerData,\n maxAlerts,\n maxSensors,\n maxStorage,\n hasApiAccess\n ]);\n\n useEffect(() => {\n setCurrentStepId(0);\n }, [downgradeOpen, downgradeFlow]);\n\n const leaveDowngrade = useCallback(() => {\n setCurrentStepId(null);\n setDowngradeOpen(false);\n refetchCustomerData();\n }, [setCurrentStepId, setDowngradeOpen, refetchCustomerData]);\n\n const continueDowngrade = useCallback(() => {\n if (currentStepId === null) return;\n setLoading(false);\n const newStepId = currentStepId + 1;\n if (newStepId >= downgradeFlow.length) {\n successCallback();\n leaveDowngrade();\n } else {\n setCurrentStepId(newStepId);\n }\n }, [\n currentStepId,\n downgradeFlow,\n leaveDowngrade,\n successCallback,\n setLoading\n ]);\n\n if (currentStepId === null || !downgradeOpen) return null;\n\n const planDowngradeMode = downgradeFlow[currentStepId];\n\n return (\n <>\n \n \n \n \n {planDowngradeMode === 'confirmStart' && (\n \n )}\n {planDowngradeMode === 'scriptsError' && (\n \n )}\n {planDowngradeMode === 'startManage' && (\n \n )}\n {planDowngradeMode === 'storageError' && (\n \n )}\n {planDowngradeMode === 'sensorsError' && (\n \n )}\n {planDowngradeMode === 'alertsError' && (\n \n )}\n {planDowngradeMode === 'apiKeyError' && (\n \n )}\n \n \n );\n};\n\nexport default PlansDowngrade;\n","import {\n Backdrop,\n CircularProgress,\n Grid,\n TextField,\n Typography\n} from '@material-ui/core';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport gql from 'graphql-tag';\nimport { find, get, startCase } from 'lodash';\nimport React, { useCallback, useContext, useEffect, useState } from 'react';\nimport { ChildDataProps, compose, DataValue, graphql } from 'react-apollo';\nimport * as API from '../../API';\nimport LabelledSwitch from '../../components/LabelledSwitch';\nimport PlanCard from '../../components/PlanCard';\nimport { listTiers } from '../../graphql/queries';\nimport { getPlanSelectionErrorMessage } from '../../helpers/DataHelper';\nimport { AuthContext } from '../../hooks/AuthContext';\nimport { LayoutContext } from '../../hooks/LayoutContext';\nimport { StripeSessionContext } from '../../hooks/UseStripeSessionApi/StripeSessionContext';\nimport PlansDowngrade from '../../screens/Plans/Downgrade';\nimport TextOnly from '../../templates/TextOnly';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n planContainer: {\n marginBottom: theme.spacing(2.5),\n flexShrink: 0\n },\n yearlySwitch: {\n marginBottom: theme.spacing(2.5)\n },\n backdrop: {\n zIndex: theme.zIndex.modal + 1,\n color: '#fff'\n },\n couponForm: {\n display: 'flex',\n flex: '1 0 auto',\n justifyContent: 'center',\n margin: theme.spacing(-2.5, 0, 2.5)\n }\n })\n);\n\ntype TierValue = DataValue;\ntype TierChildProps = ChildDataProps<{}, API.ListTiersQuery, {}>;\n\ninterface ChildProps {\n dataListTiers: TierValue;\n}\n\nconst PlansList = ({\n dataListTiers: { loading: dataLoading, listTiers, error }\n}: ChildProps) => {\n const classes = useStyles();\n\n const authContext = useContext(AuthContext);\n if (!authContext) throw new Error('Auth context is missing');\n const { customerData } = authContext;\n\n const layoutContext = useContext(LayoutContext);\n if (!layoutContext) throw new Error('Layout context is missing');\n const { setLoading } = layoutContext;\n\n const stripeSessionContext = useContext(StripeSessionContext);\n if (!stripeSessionContext) throw new Error('Stripe context is missing');\n const { initializing, chooseTier, pushStripeError } = stripeSessionContext;\n\n const currentTier = get(customerData, 'tierId');\n const currentFrequency = get(customerData, 'billingFrequency');\n\n const [downgradeInfo, setDowngradeInfo] = useState void;\n }>(null);\n const [loaderOpen, setLoaderOpen] = useState(false);\n const [downgradeOpen, setDowngradeOpen] = useState(false);\n const [couponCode, setCouponCode] = useState('');\n\n const tiers: { [key: string]: any }[] = get(\n listTiers || {},\n 'items',\n []\n ).sort(\n (a: API.CreateTierInput, b: API.CreateTierInput) =>\n typeof a.costMonthly === 'number' &&\n typeof b.costMonthly === 'number' &&\n a.costMonthly - b.costMonthly\n );\n\n useEffect(() => {\n setLoading(initializing || dataLoading);\n }, [initializing, dataLoading, setLoading]);\n\n const generateHandleError = useCallback(\n (errorMessage: string) => (error?: Error) => {\n pushStripeError(errorMessage, error);\n setLoaderOpen(false);\n },\n [pushStripeError]\n );\n\n const generateOnPlanClick = useCallback(\n (tierId: string, paymentPeriod: string, newTierCost: number) => () => {\n const selectedTierCost = get(\n customerData,\n `tier.cost${startCase(paymentPeriod)}ly`\n );\n const switchPlan = () => {\n setLoaderOpen(true);\n chooseTier(\n newTierCost,\n tierId,\n paymentPeriod,\n couponCode,\n generateHandleError(\n getPlanSelectionErrorMessage({ currentTier, newTierCost })\n )\n );\n };\n if (currentTier && selectedTierCost > newTierCost) {\n const newTierData = find(tiers, tier => tier.id === tierId);\n if (!newTierData) {\n generateHandleError(\n 'Unexpected error encountered - Plan data not found.'\n );\n return;\n }\n const {\n alertMaxCount,\n storageLimitGb,\n deviceMaxCount,\n hasApiAccess\n } = newTierData;\n setDowngradeInfo({\n newTierId: tierId,\n maxAlerts: alertMaxCount,\n maxSensors: deviceMaxCount,\n maxStorage: storageLimitGb,\n hasApiAccess,\n successCallback: switchPlan\n });\n setDowngradeOpen(true);\n } else {\n switchPlan();\n }\n },\n [\n couponCode,\n chooseTier,\n currentTier,\n customerData,\n generateHandleError,\n tiers\n ]\n );\n\n const [yearlyToggled, setYearlyToggled] = useState(false);\n useEffect(() => {\n if (!currentFrequency) return;\n setYearlyToggled(currentFrequency === 'yearly');\n }, [currentFrequency]);\n const YearToggleComponent = (\n
\n \n
\n );\n const CouponComponent = (\n
\n {\n setCouponCode(event.currentTarget.value);\n }}\n />\n \n );\n if (initializing) return null;\n\n if (error) {\n return (\n \n \n Error Retrieving the Plans List\n \n \n );\n }\n\n let recommendedTier = 'starter';\n if (customerData && customerData.tierId !== 'free') {\n recommendedTier = customerData.tierId;\n }\n\n return (\n <>\n {YearToggleComponent}\n \n {tiers.map(tier => {\n if (!tier) return null;\n return (\n \n \n \n );\n })}\n \n \n \n \n {downgradeInfo && (\n \n )}\n {CouponComponent}\n \n );\n};\n\nexport default compose(\n graphql<{}, API.ListFilesQuery, {}, TierChildProps>(gql(listTiers), {\n name: 'dataListTiers',\n options: (props: any) => {\n return {\n variables: {\n filter: {\n id: {\n ne: API.TierName['none']\n }\n },\n limit: 100\n },\n fetchPolicy: 'network-only'\n };\n }\n })\n)((props: ChildProps) => );\n","import { API } from 'aws-amplify';\nimport { useMemo } from 'react';\nimport { ApiCallback, ApiTypes, apiUrls, pairingApiName } from './ApiHelper';\n\nconst UsePairingApi = (apiType: ApiTypes) => {\n const requestPost = useMemo(\n () => async (body?: Object) => {\n const url: ApiCallback = apiUrls[apiType];\n try {\n let apiName = pairingApiName;\n let path = url();\n let init = {\n body: body || {}\n };\n const response = await API.post(apiName, path, init);\n return response;\n } catch (e) {\n throw e;\n }\n },\n [apiType]\n );\n\n return {\n requestPost\n };\n};\n\nexport default UsePairingApi;\n","import { useTheme } from '@material-ui/core';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport React, {\n createContext,\n ReactChild,\n useEffect,\n useMemo,\n useState\n} from 'react';\nimport { GlobalSiteAlertTypes } from '../../components/Header';\n\nexport interface LayoutContextExports {\n darkerBackground: boolean;\n globalSiteAlerts: GlobalSiteAlertTypes[];\n globalSiteErrors: (string | React.ReactChild)[];\n leftDrawerOpen: boolean;\n loading: boolean;\n pageTitle: string;\n prevPageTitle: string[];\n rightDrawerOpen: boolean;\n setDarkerBackground: React.Dispatch;\n pushGlobalSiteAlerts: (newAlerts: GlobalSiteAlertTypes[]) => void;\n pushGlobalSiteError: (newError: string | React.ReactChild) => void;\n removeGlobalSiteAlert: (alertId: number) => void;\n removeGlobalSiteError: (errorId: number) => void;\n setLeftDrawerOpen: React.Dispatch;\n setLoading: React.Dispatch;\n setPageTitle: React.Dispatch;\n setPrevPageTitle: React.Dispatch;\n setRightDrawerOpen: React.Dispatch;\n}\n\nexport const LayoutContext = createContext(\n undefined\n);\nconst { Provider } = LayoutContext;\n\nexport interface LayoutProviderProps {\n children?: ReactChild;\n}\n\nexport const LayoutProvider = (props: LayoutProviderProps) => {\n const theme = useTheme();\n const newIsMobile = useMediaQuery(theme.breakpoints.down('md'));\n\n const [pageTitle, setPageTitle] = useState('');\n const [prevPageTitle, setPrevPageTitle] = useState([]);\n const [loading, setLoading] = useState(false);\n const [isMobile, setIsMobile] = useState(false);\n const [darkerBackground, setDarkerBackground] = useState(false);\n const [rightDrawerOpen, setRightDrawerOpen] = useState(false);\n const [leftDrawerOpen, setLeftDrawerOpen] = useState(!isMobile);\n const [globalSiteAlerts, setGlobalSiteAlerts] = useState<\n GlobalSiteAlertTypes[]\n >([]);\n const [globalSiteErrors, setGlobalSiteErrors] = useState<\n (string | React.ReactChild)[]\n >([]);\n const pushGlobalSiteAlerts = useMemo(\n () => (newAlerts: GlobalSiteAlertTypes[]) => {\n setGlobalSiteAlerts(currentAlerts => [...currentAlerts, ...newAlerts]);\n },\n []\n );\n const removeGlobalSiteAlert = useMemo(\n () => (alertId: number) => {\n setGlobalSiteAlerts(currentAlerts => {\n const newAlerts = [...currentAlerts];\n newAlerts.splice(alertId, 1);\n return newAlerts;\n });\n },\n []\n );\n const pushGlobalSiteError = useMemo(\n () => (newError: string | React.ReactChild) => {\n setGlobalSiteErrors(currentErrors => [...currentErrors, newError]);\n },\n []\n );\n const removeGlobalSiteError = useMemo(\n () => (errorId: number) => {\n setGlobalSiteErrors(currentErrors => {\n const newErrors = [...currentErrors];\n newErrors.splice(errorId, 1);\n return newErrors;\n });\n },\n []\n );\n\n if (isMobile !== newIsMobile) {\n setIsMobile(newIsMobile);\n }\n useEffect(() => {\n setLeftDrawerOpen(!isMobile);\n }, [isMobile]);\n\n const defaultContext = {\n darkerBackground,\n loading,\n leftDrawerOpen,\n globalSiteAlerts,\n globalSiteErrors,\n pageTitle,\n prevPageTitle,\n rightDrawerOpen,\n setDarkerBackground,\n pushGlobalSiteAlerts,\n pushGlobalSiteError,\n removeGlobalSiteAlert,\n removeGlobalSiteError,\n setLeftDrawerOpen,\n setLoading,\n setPageTitle,\n setPrevPageTitle,\n setRightDrawerOpen\n };\n return (\n \n {props.children && props.children}\n \n );\n};\n","import {\n Container,\n createStyles,\n Grid,\n makeStyles,\n Theme\n} from '@material-ui/core';\nimport React from 'react';\nimport { stylesLayout } from '../../helpers/StyleHelper';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...stylesLayout\n })\n);\n\ninterface Props {\n children?: React.ReactChild;\n}\n\nconst TextOnly: React.FC = ({ children }) => {\n const classes = useStyles();\n return (\n \n \n \n {children && children}\n \n \n \n );\n};\nexport default TextOnly;\n","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nvar _ref2 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"title\", null, \"endaq logo\");\nvar _ref3 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"g\", {\n id: \"logo-white\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(-20.000000, -23.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(20.000000, 23.000000)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M94,18 C90.3727697,18 88.7786612,13.6182627 87.2368818,9.38095979 C85.9512394,5.84791466 84.622632,2.19562716 82.4991738,2.19562716 C80.3768171,2.19562716 79.047659,5.84791466 77.7625674,9.38039996 C76.2207879,13.6177029 74.6266794,18 71,18 L71,15.8049327 C73.1229074,15.8049327 74.4515148,12.1520853 75.7366064,8.61960004 C77.2783858,4.38173732 78.8724943,0 82.4991738,0 C86.126404,0 87.7205125,4.38173732 89.2622919,8.61960004 C90.5473835,12.1520853 91.8770926,15.8049327 94,15.8049327 L94,18 Z\",\n id: \"Fill-1\",\n fill: \"#E77025\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.24615617,7.17182598 L18.7588345,7.17182598 C18.7383173,5.58215064 18.3229823,4.45371943 17.5222564,3.81660115 C16.9716187,3.39393587 16.1797651,3.09494982 15.1694309,2.92872039 C14.1435701,2.76022161 12.6319504,2.67455388 10.6772697,2.67455388 C8.93386097,2.67455388 7.59691486,2.75398091 6.70302969,2.9099983 C5.82245299,3.06431368 5.12043152,3.34514498 4.61637344,3.74398215 C3.8378283,4.38110043 3.37646822,5.53449442 3.24615617,7.17182598 M12.4606039,18 C9.66249937,18 7.49710138,17.8893695 6.02374351,17.6703778 C4.5376317,17.4502515 3.39254928,17.062761 2.62010385,16.5192532 C0.881131219,15.2586327 0,12.7453344 0,9.04687131 C0,6.50634091 0.377627665,4.54562785 1.12123809,3.21976373 C1.60422443,2.35627841 2.17482482,1.69760137 2.81806725,1.26245469 C3.45798256,0.830712028 4.19161163,0.517542581 4.99788274,0.333158396 C5.79639058,0.150476219 6.69249382,0.0511924271 7.66179362,0.0381437001 C8.62443918,0.0262296451 9.66249937,0.0205562855 10.7482482,0.0205562855 C11.8068256,0.0205562855 12.7838887,0.0143155901 13.6539295,0.00183419907 C14.5483692,-0.0112145279 15.4001109,0.0455190675 16.1875284,0.166928962 C16.9799365,0.2906082 17.7168927,0.515273237 18.3789888,0.834683379 C19.044412,1.15636287 19.6749004,1.65732051 20.2538186,2.32337292 C20.6885618,2.84191798 21.0246005,3.37351177 21.2552805,3.90624023 C21.4837425,4.43613201 21.6545345,4.99779461 21.7626657,5.57534261 C21.869688,6.1494866 21.9306851,6.77639282 21.9428845,7.43904122 C21.9545294,8.09544892 21.9728286,8.82447562 21.9961184,9.62668866 L22,9.75377191 L3.13469779,9.75377191 C3.21676665,11.7627085 3.62378384,13.1770771 4.34521349,13.9611353 C4.75833039,14.4070614 5.24575289,14.7344142 5.79583606,14.9329818 C6.35534607,15.1360881 6.97529868,15.2682774 7.63850381,15.3272803 C8.30836316,15.3879853 9.03422897,15.4067074 9.80002016,15.3823119 C10.5774563,15.3579165 11.3765186,15.3454351 12.175581,15.3454351 C14.083682,15.3454351 15.4977063,15.254094 16.3777285,15.0742485 C17.2394515,14.897807 17.8832485,14.5732908 18.2913747,14.10921 C18.630186,13.7625678 18.8342491,13.1623263 18.9030095,12.3203998 L18.9118818,12.2074999 L21.927358,12.2074999 L21.9251399,12.3334485 C21.900741,13.6655533 21.6295811,14.7259042 21.1194233,15.483865 C20.60982,16.2412585 19.9205525,16.8148352 19.0704744,17.1875749 C18.2298231,17.5557759 17.2266976,17.7861143 16.0893784,17.8723494 C14.9609316,17.9568825 13.73988,18 12.4606039,18\",\n id: \"Fill-4\",\n fill: \"#FFFFFF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M45,18 L42.1139548,18 L42.1139548,9.06724924 C42.1139548,7.51880699 42.0546638,6.39779635 41.9388267,5.7349924 C41.8251856,5.0881459 41.5841786,4.53419453 41.2240406,4.08852584 C40.773868,3.5756079 40.0931193,3.20630699 39.204852,2.99316109 C38.299017,2.77602584 36.9183049,2.66603343 35.1000471,2.66603343 C33.0726237,2.66603343 31.4734132,2.81933891 30.3457858,3.12082067 C29.2340793,3.41831307 28.3935742,3.91641337 27.8478772,4.60087386 C27.5508732,4.98043313 27.3307278,5.3406155 27.1945781,5.6700228 C27.0578793,6.00170973 26.9661978,6.36018237 26.9211806,6.73632219 C26.8745164,7.11987082 26.8569487,7.5450228 26.8690265,8.00094985 C26.8805553,8.46428571 26.8865942,9.01994681 26.8865942,9.6531155 L26.8865942,18 L24,18 L24,0.219414894 L26.8865942,0.219414894 L26.8865942,2.82218845 L26.9069068,2.82218845 C27.2851616,2.0818769 27.7622347,1.50968845 28.3249503,1.11987082 C28.9002928,0.722644377 29.5612778,0.43256079 30.2892398,0.259308511 C31.0139078,0.0866261398 31.8187284,0 32.6817421,0 L37.8367667,0 C38.603707,0 39.3404528,0.055281155 40.0266914,0.165843465 C40.716224,0.276975684 41.3612883,0.465045593 41.9443166,0.724354103 C42.5328349,0.985942249 43.0862177,1.3962766 43.5901914,1.94395897 C44.1199676,2.51956687 44.4927324,3.25360942 44.696957,4.12613982 C44.8978877,4.98955167 45,6.25759878 45,7.8943769 L45,18 Z\",\n id: \"Fill-6\",\n fill: \"#FFFFFF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M57.9414995,15.3602345 C58.8182485,15.3602345 59.6615976,15.382365 60.4476101,15.4260584 C61.2085727,15.468617 61.9344652,15.4856404 62.5963412,15.4782636 C63.2409605,15.4697519 63.8377065,15.4010908 64.3693226,15.2751174 L64.7417322,15.1877305 C65.6318413,14.961319 66.250854,14.3847924 66.6282736,13.4258062 C67.0173832,12.4390152 67.2149996,10.8569717 67.2149996,8.72336938 C67.2149996,6.09098074 66.89603,4.45219255 66.210774,3.56697456 C65.9786443,3.26736232 65.6880646,3.038681 65.3451583,2.88717254 C64.9894486,2.73112449 64.5652691,2.62274203 64.0859796,2.56486239 C63.5950001,2.50528041 63.0244174,2.47861038 62.3881481,2.48768954 C61.7396321,2.49733615 61.0070595,2.50074083 60.1882037,2.50074083 L50.7337871,2.50074083 L50.7337871,15.4430819 L50.825637,15.4430819 L53.4391842,15.4652123 C53.6223274,15.4697519 53.8071405,15.4725891 53.9969636,15.4725891 C54.4640065,15.4725891 54.9700159,15.4567006 55.4988487,15.4260584 C56.2598112,15.382365 57.0814504,15.3602345 57.9414995,15.3602345 M62.6141545,18 C62.1977683,18 61.7279421,17.9886511 61.216366,17.9653857 C60.4593001,17.930204 59.4589712,17.9131805 58.1585992,17.9131805 C56.9795805,17.9131805 56.0911414,17.9216923 55.4426254,17.9392831 C54.7829761,17.9563065 54.2190734,17.9608461 53.7475772,17.9523344 L53.5688874,17.9438227 L48,17.9443902 L48,0 L60.2388604,0 C62.9125275,0 64.8168822,0.10611267 65.899041,0.31606822 C67.2678829,0.624192176 68.3094051,1.37492513 69.0007844,2.54897387 C69.3692973,3.1595473 69.6320437,3.97440182 69.7806736,4.96913716 C69.9343134,6.00302639 70,7.15721446 70,8.82834715 C70,9.90933451 69.9526834,10.902935 69.8586068,11.7807761 C69.7645302,12.6648592 69.6197971,13.4439646 69.4299739,14.0965291 C68.9690544,15.6456606 68.0655854,16.7215409 66.7457301,17.2957977 L66.6143569,17.3383563 C66.0565775,17.5460421 65.4470282,17.708332 64.7612156,17.8314681 C64.2758027,17.9199899 63.7508666,17.9738974 63.1992105,17.9914883 C63.0160674,17.9971628 62.8212343,18 62.6141545,18\",\n id: \"Fill-8\",\n fill: \"#FFFFFF\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M106.149421,14.885954 C107.040559,14.885954 107.898817,14.9073214 108.700954,14.9489605 C109.475881,14.9905995 110.213393,15.0059402 110.889116,14.9993656 C111.546131,14.9911474 112.153261,14.9254015 112.694633,14.8032239 C113.280788,14.6700885 113.744497,14.5073676 114.103333,14.1435739 C114.408882,13.8340206 114.727469,12.7837308 114.829508,12.3865163 C114.880527,11.9043802 114.924177,11.3291041 114.957623,10.6760287 C114.992203,10.0048733 115.009209,9.54191297 115.009209,8.7009141 C115.009209,6.9197497 114.933814,5.54785317 114.777355,4.5057816 C114.633367,3.70587387 114.283034,3.20456184 113.706516,2.97883445 C113.163444,2.75036766 112.602231,2.59422129 112.034783,2.51313475 C111.454297,2.43150033 110.832428,2.38547824 110.186183,2.3778079 C109.534836,2.3684939 108.842108,2.38109519 108.113665,2.41451599 C107.397694,2.44793679 106.596124,2.46546902 105.732197,2.46546902 C102.994727,2.46546902 101.095108,2.54874708 100.086626,2.71365956 C99.4228079,2.82323596 98.9347231,3.02759595 98.6365435,3.32290435 C98.338364,3.61876063 98.1291848,4.09432221 98.0158085,4.7369878 C97.8593493,5.68865884 97.7833872,6.93728193 97.7833872,8.55079443 C97.7833872,10.3089478 97.8616168,11.3734825 98.0163754,12.3147438 C98.2006118,13.4450244 98.4687467,13.9036016 98.6614863,14.0893336 C98.99708,14.4147755 99.4086358,14.6426944 99.8842493,14.7670636 C100.379137,14.8974596 100.946018,14.9708757 101.567887,14.9867643 C102.203361,15.0032008 102.904593,14.9905995 103.661946,14.9489605 C104.438007,14.9073214 105.274724,14.885954 106.149421,14.885954 M118.494962,19 L118.422401,18.9994521 L115.228025,16.6342455 C115.128821,16.6846507 115.029617,16.7257418 114.922476,16.7613541 C114.187231,17.0205023 113.588038,17.1881542 113.093717,17.2719802 C112.601664,17.3569019 112.066528,17.4089507 111.503048,17.4264829 C110.943536,17.4429193 110.26498,17.4347011 109.484384,17.4012803 C108.71626,17.3673116 107.698141,17.3508752 106.370505,17.3508752 C105.172685,17.3508752 104.267942,17.3590934 103.604691,17.3760777 C102.932937,17.3925142 102.358686,17.3968973 101.878538,17.388679 C101.389319,17.379365 100.918241,17.3492315 100.478908,17.2988264 C100.016899,17.2462297 99.4290436,17.1525419 98.7323465,17.0199544 C96.8809121,16.66931 95.7488502,15.559301 95.3673391,13.7189654 C95.2278863,13.0790392 95.1303827,12.285706 95.0770959,11.3636206 C95.0277772,10.4820785 95,9.53972145 95,8.2472678 C95,6.05793131 95.1213126,4.57919779 95.3951163,3.45056086 C95.7947676,1.73021137 96.8922498,0.696905908 98.6569512,0.380777992 C100.069619,0.128204389 102.341113,0 105.408507,0 L107.541682,0 C108.271825,0 109.047885,0.00821823005 109.848889,0.0252025722 C110.612478,0.0421869143 111.368131,0.0717725425 112.095439,0.113959457 C112.827283,0.157242135 113.479197,0.230110441 114.03304,0.33092073 C115.214987,0.541307419 116.119163,1.11329623 116.720624,2.03045071 C117.082861,2.58983823 117.346461,3.40727818 117.505754,4.46030739 C117.665048,5.51388448 117.742144,6.94166498 117.742144,8.82747484 C117.742144,9.98295799 117.707564,10.7083538 117.637838,11.5816777 C117.567544,12.4593846 117.460971,13.1968338 117.320951,13.7748493 C117.320951,13.7819718 117.243288,14.3572479 116.959848,14.9380028 L119.835637,17.040774 L119.857178,17.0911791 C119.87135,17.124052 120.200708,17.9075233 119.808426,18.4548574 C119.429183,18.9846593 118.589631,19 118.494962,19\",\n id: \"Fill-10\",\n fill: \"#FFFFFF\"\n}))));\nconst SvgLogotypeWhite = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"120px\",\n height: \"19px\",\n viewBox: \"0 0 120 19\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgLogotypeWhite, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/Logotype-white.7c0c0a09.svg\";\nexport { ForwardRef as ReactComponent };","export const getPageTitle = (title: string) =>\n `${title && `${title} | `}enDAQ Portal`;\nexport const getSerialNumber = (serialId: string) =>\n serialId.length > 0 ? serialId : ' ';\n\nexport const formatSecondsToTimestring = (timeInSeconds: number) => {\n const pad: (num: number | string, size: number) => string = (num, size) =>\n ('000' + num).slice(size * -1);\n const timeString: string = Number.parseFloat(`${timeInSeconds}`).toFixed(3);\n const time: number = Number.parseFloat(timeString);\n const hours: number = Math.floor(time / 60 / 60);\n const minutes: number = Math.floor(time / 60) % 60;\n const seconds: number = Math.floor(time - minutes * 60);\n const milliseconds: string = timeString.slice(-3);\n return `${pad(hours, 2)} h ${pad(minutes, 2)} m ${pad(seconds, 2)} s ${pad(\n milliseconds,\n 3\n )} ms`;\n};\n\nexport const formatBytes = (bytes: number, decimals: number = 2) => {\n if (bytes === 0) return '0 Bytes';\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n};\n\nexport const pluralizeString = (\n str: string,\n count: number,\n ending: string = ''\n) => {\n if (count === 1) return `${str}${ending}`;\n return `${str}s${ending}`;\n};\n\nexport const pluralizeVerb = (\n str: string,\n count: number,\n ending: string = ''\n) => {\n if (count === 1) return `${str}s${ending}`;\n return `${str}${ending}`;\n};\n\nexport const getPlanSelectionErrorMessage = ({\n currentTier,\n newTierCost\n}: {\n currentTier?: string;\n newTierCost: number;\n}) => {\n if (newTierCost === 0) {\n if (currentTier) {\n return 'Could not downgrade to the free plan at this time, please try again';\n } else {\n return 'Could not select the free tier at this time, please try again';\n }\n } else {\n if (currentTier) {\n return 'Could not switch plans at this time, please try again';\n } else {\n return 'Could not activate the selected plan at this time, please try again';\n }\n }\n};\n\nexport const convertBytesToGb = (value: number) =>\n Math.floor(value / 100000000) / 10;\n\nexport const asyncTimer = async (milliseconds: number) => {\n return new Promise(resolve => setTimeout(resolve, milliseconds));\n};\n\nexport const parseJsonFromString = (strBlock: string) => {\n let parsedJson = JSON.parse(strBlock);\n\n if (typeof parsedJson === 'string') {\n parsedJson = JSON.parse(parsedJson);\n }\n return parsedJson;\n};\n\nexport const urlPatternValidation = (URL: string) => {\n const regex = new RegExp('(http)?s?:?(//[^\"\\']*.(?:png|jpg|jpeg|png|svg))');\n return regex.test(URL);\n};\n\nexport const getScriptLineErrors = (\n scriptName: string,\n scriptError: string\n) => {\n // This is for one error returns only, if in the future there are more than one error that is returned we will need to modify this function\n const scriptErrorArray = scriptError.replace(/(\\r\\n|\\n|\\r)/gm, '').split(',');\n let errorAnnotation = [];\n if (scriptErrorArray && scriptErrorArray.length > 1) {\n if (scriptErrorArray[0].includes(`File \"${scriptName}\"`)) {\n const error = scriptErrorArray[0].replace(`File \"${scriptName}\"`, '');\n const lineNum = scriptErrorArray[1].replace('line ', '');\n const annotation = {\n row: parseInt(lineNum) - 1,\n column: 0,\n text: error,\n type: 'error'\n };\n errorAnnotation.push(annotation);\n }\n }\n\n return errorAnnotation;\n};\n","import { ICredentials } from '@aws-amplify/core';\nimport { Auth, Hub } from 'aws-amplify';\nimport gql from 'graphql-tag';\nimport { get, orderBy } from 'lodash';\nimport * as log from 'loglevel';\nimport React, {\n createContext,\n ReactChild,\n useContext,\n useEffect,\n useMemo,\n useState\n} from 'react';\nimport { ApolloContext } from 'react-apollo';\nimport { matchPath, RouteComponentProps, withRouter } from 'react-router';\nimport { BillingSubscriptionStatus, DeviceAssociationStatus } from '../../API';\nimport { getCustomerByOwnerId, listApiKeys } from '../../graphql/queries';\nimport {\n routeDashboard,\n routePlans,\n routeSingleDashboard\n} from '../../helpers/RouteHelper';\nimport {\n getListOfDashboards,\n listAlertsShort,\n listCustomScriptsShort,\n listDeviceAssociationsShort\n} from '../../helpers/ShortQueryHelper';\nimport { getSorting, stableSort } from '../../helpers/SortingHelper';\nimport { DashboardShareData } from '../UseDashboardApi/ApiHelper';\nimport { getBillingFrequency } from '../UseStripeSessionApi/ApiHelper';\n\nexport interface AuthContextCustomerReport {\n id: string;\n owner: null | string;\n maxFiles: number;\n status: string;\n tags: string[];\n title: null | string;\n createdAt: string;\n updatedAt: string;\n customScript: null | {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: null | {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n type: string;\n };\n lines: string[];\n status?: null | string;\n title?: null | string;\n type: string;\n createdAt?: null | string;\n updatedAt?: null | string;\n };\n customScriptId: null | string;\n defaultScript: null | string;\n error: null | {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n };\n file_ids?: string[];\n notes?: string;\n shares?: {\n items?: Array | null;\n } | null;\n sequence: null | number;\n modules: {\n nextToken: null | string;\n __typename: 'ModelDashboardModuleConnection';\n };\n __typename: 'Dashboard';\n}\n\nexport interface AuthContextExports {\n signedIn: boolean;\n userInfo:\n | {\n email: string;\n sub: string;\n identityId: string;\n authTime: number | undefined;\n }\n | null\n | undefined;\n isAuthorized: boolean | undefined;\n isSuspended: boolean | undefined;\n subscriptionStatus: string | undefined;\n customerData: null | {\n id: string;\n owner: string;\n storageConsumed: number;\n storageSpaceRemaining: boolean;\n tierId: string;\n billing: {\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id: null | string;\n subscription_status: string;\n stripe_plan_id: string;\n };\n companyName: string;\n logoImage: string;\n };\n customerAlerts:\n | null\n | {\n id: string;\n name: null | string;\n tagName: string;\n enabled: boolean | undefined;\n }[];\n customerApiKeys:\n | null\n | {\n id: string;\n name: null | string;\n }[];\n customerReports: null | AuthContextCustomerReport[];\n customerIndexedReports: null | AuthContextCustomerReport[];\n customerScripts:\n | []\n | {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: null | {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n type: string;\n };\n lines: string[];\n status?: null | string;\n title?: null | string;\n type: string;\n createdAt?: null | string;\n updatedAt?: null | string;\n }[];\n customerSensors:\n | null\n | {\n __typename: 'DeviceAssociation';\n id: string;\n org_id: string | null;\n s3_bucket_name: string | null;\n serial_number_id: string;\n status: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n }[];\n customerNeedsTier: boolean;\n refetchCustomerData: () => void;\n refetchCustomerAlerts: () => void;\n refetchCustomerApiKeys: () => void;\n refetchCustomerReports: () => void;\n refetchCustomerSensors: () => void;\n}\n\nexport const AuthContext = createContext(\n undefined\n);\nconst { Provider } = AuthContext;\n\nfunction formatUserInfo(authData: any, credData: ICredentials) {\n log.debug('formatUserInfo', authData, credData);\n const { identityId } = credData;\n let data = {\n identityId,\n authTime: get(authData, 'signInUserSession.accessToken.payload.auth_time')\n };\n if (!get(authData, 'attributes.email') || !get(authData, 'attributes.sub')) {\n throw Error('Unexpected Cognito User');\n }\n return {\n ...data,\n ...get(authData || {}, 'attributes', {})\n };\n}\n\nexport interface AuthProviderProps extends RouteComponentProps {\n children?: ReactChild;\n defaultSignedIn?: boolean;\n defaultIsAuthorized?: boolean;\n defaultPersonInfo?: any;\n}\n\nexport const AuthProvider = withRouter((props: AuthProviderProps) => {\n const apolloContext = useContext(ApolloContext);\n if (!apolloContext) {\n throw new Error(\n 'AuthContext component must be used within an Apollo Context Provider'\n );\n }\n const { client } = apolloContext;\n const { history, location } = props;\n const [signedIn, setSignedIn] = useState(!!props.defaultSignedIn);\n const [userInfo, setUserInfo] = useState();\n const [customerData, setCustomerData] = useState(null);\n const [customerAlerts, setCustomerAlerts] = useState(null);\n const [customerApiKeys, setCustomerApiKeys] = useState<\n AuthContextExports['customerApiKeys'] | null\n >(null);\n const [customerReports, setCustomerReports] = useState<\n AuthContextExports['customerReports'] | null\n >(null);\n const [customerIndexedReports, setCustomerIndexedReports] = useState<\n AuthContextExports['customerIndexedReports'] | null\n >(null);\n const [customerSensors, setCustomerSensors] = useState(null);\n const [customerScripts, setCustomerScripts] = useState<\n AuthContextExports['customerScripts']\n >([]);\n const [isAuthorized, setIsAuthorized] = useState(\n props.defaultIsAuthorized\n );\n const subscriptionStatus = get(customerData, 'billing.subscription_status');\n const isSuspended = useMemo(() => {\n const tier = get(customerData, 'tierId');\n return (\n subscriptionStatus === BillingSubscriptionStatus.suspended &&\n tier !== 'free'\n );\n }, [customerData, subscriptionStatus]);\n\n const customerNeedsTier = useMemo(() => {\n if (customerData === null) return false;\n const tier = get(customerData, 'tierId');\n return !tier || tier === 'none';\n }, [customerData]);\n\n useEffect(() => {\n if (customerNeedsTier) {\n history.replace({\n pathname: routePlans()\n });\n }\n }, [customerNeedsTier, history]);\n\n useEffect(() => {\n const fetchUser = async (user?: AuthContextExports['userInfo']) => {\n try {\n const userData = user || (await Auth.currentAuthenticatedUser());\n const userCredentials = await Auth.currentCredentials();\n const data = formatUserInfo(userData, userCredentials);\n setUserInfo(data);\n } catch (e) {\n log.warn('fetchUser', 'caught error', e);\n }\n };\n\n Hub.listen('auth', ({ payload: { event } }) => {\n switch (event) {\n case 'signIn': {\n setSignedIn(true);\n fetchUser();\n const visitingReport = matchPath(\n location.pathname,\n routeSingleDashboard()\n );\n if (!customerNeedsTier && !visitingReport) {\n history.replace({\n pathname: routeDashboard()\n });\n }\n break;\n }\n case 'signOut': {\n setSignedIn(false);\n setIsAuthorized(false);\n history.push({ pathname: '/' });\n break;\n }\n case 'signIn_failure': {\n break;\n }\n }\n });\n\n Auth.currentAuthenticatedUser()\n .then((user: any) => {\n setSignedIn(true);\n fetchUser(user);\n })\n .catch((e: any) => log.warn('User is', e));\n }, [history]);\n\n useEffect(() => {\n if (userInfo) {\n setIsAuthorized(!!get(userInfo || {}, 'email'));\n }\n }, [userInfo]);\n\n const refetchCustomerAlerts = useMemo(\n () => () => {\n if (!client || !userInfo) return;\n try {\n client\n .query({\n query: gql(listAlertsShort),\n variables: {\n owner: get(userInfo, 'sub'),\n filter: {\n enabled: {\n eq: true\n }\n },\n limit: 1000\n },\n fetchPolicy: 'network-only'\n })\n .then(data => {\n const alertData = orderBy(\n get(data, 'data.listAlerts.items'),\n ['createdAt'],\n ['desc']\n );\n setCustomerAlerts(alertData);\n });\n } catch (e) {\n console.log('Error fetching customer alert data', e);\n }\n },\n [client, userInfo]\n );\n\n const refetchCustomerApiKeys = useMemo(\n () => () => {\n if (!client || !userInfo) return;\n try {\n client\n .query({\n query: gql(listApiKeys),\n variables: {\n limit: 1000\n },\n fetchPolicy: 'network-only'\n })\n .then(data => {\n const apiKeyData = get(data, 'data.listApiKeys.items');\n setCustomerApiKeys(apiKeyData);\n });\n } catch (e) {\n console.log('Error fetching customer api key data', e);\n }\n },\n [client, userInfo]\n );\n\n const refetchCustomerReports = useMemo(\n () => async () => {\n if (!client || !userInfo) return;\n\n try {\n let nextToken: string | null = null;\n let dashboards: any[] = [];\n\n // keep fetching data until next token is null\n while (true) {\n // get data in request\n const response: any = await client.query({\n query: gql(getListOfDashboards),\n variables: {\n limit: 1000,\n nextToken: nextToken\n },\n fetchPolicy: 'network-only'\n });\n const data = response.data.listDashboards;\n // get reports\n const reports = get(data, 'items');\n\n // update list of dashboards\n dashboards = [...dashboards, ...reports];\n\n // now get next token\n nextToken = data.nextToken;\n if (!nextToken) {\n break;\n }\n // keep going\n }\n\n const fixedReportsData = stableSort(\n dashboards.map((report: AuthContextCustomerReport) => ({\n ...report,\n updatedAt: report && (report.updatedAt || report.createdAt)\n })),\n getSorting('desc', 'updatedAt')\n ) as AuthContextExports['customerReports'];\n\n let topReports: AuthContextCustomerReport[] = [];\n let needSortReports: any[] = [];\n\n if (fixedReportsData) {\n topReports = fixedReportsData.filter((item: any) => !item.sequence);\n needSortReports = fixedReportsData.filter((item: any) => {\n if (item.sequence && item.sequence > 0) {\n return true;\n }\n return false;\n });\n needSortReports = stableSort(\n needSortReports,\n getSorting('asc', 'sequence')\n );\n }\n\n const sortedReports = [...topReports, ...needSortReports];\n const indexedReports = sortedReports.map(\n (report: AuthContextCustomerReport, idx) => ({\n ...report,\n sequence: idx + 1\n })\n );\n\n setCustomerReports(sortedReports);\n setCustomerIndexedReports(indexedReports);\n } catch (e) {\n console.log('Error fetching customer report data', e);\n }\n },\n [client, userInfo]\n );\n\n const refetchCustomerScripts = useMemo(\n () => () => {\n if (!client || !userInfo) return;\n try {\n client\n .query({\n query: gql(listCustomScriptsShort),\n fetchPolicy: 'network-only'\n })\n .then(data => {\n const scriptsData = get(data, 'data.listCustomScripts.items');\n setCustomerScripts(scriptsData);\n });\n } catch (e) {\n console.log('Error fetching customer report data', e);\n }\n },\n [client, userInfo]\n );\n\n const refetchCustomerSensors = useMemo(\n () => () => {\n if (!client || !userInfo) return;\n try {\n client\n .query({\n query: gql(listDeviceAssociationsShort),\n variables: {\n owner: get(userInfo, 'sub'),\n limit: 1000,\n filter: {\n status: {\n eq: DeviceAssociationStatus['PAIRED']\n }\n }\n },\n fetchPolicy: 'network-only'\n })\n .then(data => {\n const sensorData = get(data, 'data.listDeviceAssociations.items');\n setCustomerSensors(sensorData);\n });\n } catch (e) {\n console.log('Error fetching customer sensor data', e);\n }\n },\n [client, userInfo]\n );\n\n const refetchCustomerData = useMemo(\n () => () => {\n if (!client || !userInfo || !refetchCustomerAlerts) return;\n try {\n client\n .query({\n query: gql(getCustomerByOwnerId),\n variables: {\n owner: get(userInfo, 'sub'),\n limit: 10\n },\n fetchPolicy: 'network-only'\n })\n .then(data => {\n const itemData = get(data, 'data.getCustomerByOwnerId.items[0]');\n if (!itemData) {\n setCustomerData(itemData);\n return;\n }\n const tierId = get(itemData, 'tierId');\n const stripePlanId = get(itemData, 'billing.stripe_plan_id');\n const billingFrequency = getBillingFrequency(stripePlanId);\n let billingCost = 0;\n if (tierId !== 'free' && stripePlanId) {\n const billingField =\n billingFrequency === 'monthly' ? 'costMonthly' : 'costYearly';\n billingCost = get(itemData, `tier.${billingField}`);\n }\n setCustomerData({ ...itemData, billingFrequency, billingCost });\n\n //Let's refresh alerts as well (optional and can be removed but you'll need to call this manually)\n refetchCustomerAlerts();\n refetchCustomerApiKeys();\n refetchCustomerReports();\n refetchCustomerSensors();\n refetchCustomerScripts();\n });\n } catch (e) {\n console.log('Error fetching customer data', e);\n }\n },\n [\n client,\n userInfo,\n refetchCustomerAlerts,\n refetchCustomerApiKeys,\n refetchCustomerSensors,\n refetchCustomerReports,\n refetchCustomerScripts\n ]\n );\n\n useEffect(() => {\n if (!refetchCustomerData || !refetchCustomerAlerts) return;\n refetchCustomerData();\n }, [client, userInfo, refetchCustomerData, refetchCustomerAlerts]);\n\n const defaultContext = {\n signedIn,\n userInfo,\n isAuthorized,\n isSuspended,\n subscriptionStatus,\n customerData,\n customerAlerts,\n customerApiKeys,\n customerNeedsTier,\n customerReports,\n customerIndexedReports,\n customerSensors,\n customerScripts,\n refetchCustomerData,\n refetchCustomerAlerts,\n refetchCustomerApiKeys,\n refetchCustomerReports,\n refetchCustomerSensors\n };\n return (\n \n {props.children && props.children}\n \n );\n});\n","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nvar _ref2 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"style\", {\n type: \"text/css\"\n}, \"\\n\\t.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#404041;shape-rendering:crispedges;}\\n\");\nvar _ref3 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"path\", {\n className: \"st0\",\n d: \"M4,40c0,2.2091,1.79086,4,4,4h26.8284L44,34.8284V8c0-2.20914-1.7909-4-4-4H8C5.79086,4,4,5.79086,4,8V40z M8,8 h32v22h-6c-2.2091,0-4,1.7909-4,4v6H8V8z M34,34h5.1716L34,39.1716V34z M14,30v4h12v-4H14z M14,26v-4h20v4H14z M14,14v4h20v-4H14z\"\n});\nconst SvgEditNotes = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 48 48\",\n style: {\n enableBackground: \"new 0 0 48 48\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgEditNotes, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/edit_notes.bf9ebaf7.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nvar _ref2 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"style\", null, \".cls-1{fill:#fff;}.cls-2{fill:none;}.cls-3{fill:#212121;}\"));\nvar _ref3 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"path\", {\n className: \"cls-3\",\n d: \"M32.02,98.84c-2.76,0-24.62-2.3-24.62-27.16s24.16-25.78,24.16-25.78c0,0,5.52-10.13,11.97-14.73s14.5-5.06,17.72-5.06,12.66.23,22.32,8.05,10.36,19.79,10.36,19.79c0,0,21.4,0,22.09,23.24.69,23.24-19.36,21.6-19.36,21.6,0,0-61.88.03-64.64.03Z\"\n});\nvar _ref4 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"polygon\", {\n className: \"cls-1\",\n points: \"61.77 44.19 39.32 67.4 51.9 67.4 51.89 86.77 71.45 86.77 71.45 67.44 84.32 67.44 61.77 44.19\"\n});\nvar _ref5 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"rect\", {\n className: \"cls-2\",\n width: 124,\n height: 124\n});\nconst SvgCloudUploadFilesIcon = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n viewBox: \"0 0 124 124\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3, _ref4, _ref5);\n};\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgCloudUploadFilesIcon, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/cloud-upload-files-icon.84840abf.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nvar _ref2 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M20.6667 15.5C17.825 15.5 15.5 18.9941 15.5 23.2646V100.911C15.5 105.181 17.825 108.675 20.6667 108.675H51.6667C54.5083 108.675 56.8333 105.181 56.8333 100.911V23.2646C56.8333 18.9941 54.5083 15.5 51.6667 15.5H20.6667ZM39.6107 64.9994C39.6107 66.6074 38.2888 67.9111 36.6583 67.9111C35.0277 67.9111 33.7059 66.6074 33.7059 64.9994C33.7059 63.3913 35.0277 62.0876 36.6583 62.0876C38.2888 62.0876 39.6107 63.3913 39.6107 64.9994ZM25.3412 67.9111C26.9718 67.9111 28.2936 66.6075 28.2936 64.9994C28.2936 63.3913 26.9718 62.0877 25.3412 62.0877C23.7107 62.0877 22.3888 63.3913 22.3888 64.9994C22.3888 66.6075 23.7107 67.9111 25.3412 67.9111ZM36.1662 92.1754C41.6013 92.1754 46.0074 87.83 46.0074 82.4697C46.0074 77.1093 41.6013 72.7639 36.1662 72.7639C30.731 72.7639 26.3249 77.1093 26.3249 82.4697C26.3249 87.83 30.731 92.1754 36.1662 92.1754ZM47.9756 67.9111C49.6062 67.9111 50.928 66.6074 50.928 64.9994C50.928 63.3913 49.6062 62.0876 47.9756 62.0876C46.3451 62.0876 45.0232 63.3913 45.0232 64.9994C45.0232 66.6074 46.3451 67.9111 47.9756 67.9111ZM72.3333 15.5C69.4917 15.5 67.1667 18.9941 67.1667 23.2646V100.911C67.1667 105.181 69.4917 108.675 72.3333 108.675H103.333C106.175 108.675 108.5 105.181 108.5 100.911V23.2646C108.5 18.9941 106.175 15.5 103.333 15.5H72.3333ZM91.2773 64.9994C91.2773 66.6074 89.9555 67.9111 88.3249 67.9111C86.6944 67.9111 85.3726 66.6074 85.3726 64.9994C85.3726 63.3913 86.6944 62.0876 88.3249 62.0876C89.9555 62.0876 91.2773 63.3913 91.2773 64.9994ZM77.0079 67.9111C78.6384 67.9111 79.9603 66.6075 79.9603 64.9994C79.9603 63.3913 78.6384 62.0877 77.0079 62.0877C75.3773 62.0877 74.0555 63.3913 74.0555 64.9994C74.0555 66.6075 75.3773 67.9111 77.0079 67.9111ZM87.8328 92.1754C93.268 92.1754 97.6741 87.83 97.6741 82.4697C97.6741 77.1093 93.268 72.7639 87.8328 72.7639C82.3976 72.7639 77.9916 77.1093 77.9916 82.4697C77.9916 87.83 82.3976 92.1754 87.8328 92.1754ZM99.6423 67.9111C101.273 67.9111 102.595 66.6074 102.595 64.9994C102.595 63.3913 101.273 62.0876 99.6423 62.0876C98.0117 62.0876 96.6899 63.3913 96.6899 64.9994C96.6899 66.6074 98.0117 67.9111 99.6423 67.9111Z\",\n fill: \"#404041\"\n});\nconst SvgManageSensors = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 124 124\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgManageSensors, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/manage_sensors.c5b0dd6f.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nvar _ref2 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M98.1667 15.5H25.8333C20.15 15.5 15.5 20.15 15.5 25.8333V98.1667C15.5 103.85 20.15 108.5 25.8333 108.5H98.1667C103.85 108.5 108.5 103.85 108.5 98.1667V25.8333C108.5 20.15 103.85 15.5 98.1667 15.5ZM98.1667 98.1667H25.8333V25.8333H98.1667V98.1667ZM36.1667 51.6667H46.5V87.8333H36.1667V51.6667ZM56.8333 36.1667H67.1667V87.8333H56.8333V36.1667ZM77.5 67.1667H87.8333V87.8333H77.5V67.1667Z\",\n fill: \"#404041\"\n});\nconst SvgMyReports = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 124 124\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgMyReports, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/my_reports.907f9532.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nvar _ref2 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"path\", {\n d: \"M98.1667 25.8333V98.1667H25.8333V25.8333H98.1667ZM103.85 15.5H20.15C17.5667 15.5 15.5 17.5667 15.5 20.15V103.85C15.5 105.917 17.5667 108.5 20.15 108.5H103.85C105.917 108.5 108.5 105.917 108.5 103.85V20.15C108.5 17.5667 105.917 15.5 103.85 15.5ZM56.8333 36.1667H87.8333V46.5H56.8333V36.1667ZM56.8333 56.8333H87.8333V67.1667H56.8333V56.8333ZM56.8333 77.5H87.8333V87.8333H56.8333V77.5ZM36.1667 36.1667H46.5V46.5H36.1667V36.1667ZM36.1667 56.8333H46.5V67.1667H36.1667V56.8333ZM36.1667 77.5H46.5V87.8333H36.1667V77.5Z\",\n fill: \"#404041\"\n});\nconst SvgRecordings = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 124 124\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgRecordings, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/recordings.092da823.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nvar _ref2 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M96.7552 40.4923C95.0205 40.4923 93.6012 42.6551 93.6012 45.2985V93.3605C93.6012 96.0039 95.0205 98.1667 96.7552 98.1667H115.68C117.414 98.1667 118.834 96.0039 118.834 93.3605V45.2985C118.834 42.6551 117.414 40.4923 115.68 40.4923H96.7552ZM23.3105 30.2791H109.822V20.6667H23.3105C18.0236 20.6667 13.6981 24.9923 13.6981 30.2791V83.1473H4.08566V97.5659H84.2211V83.1473H23.3105V30.2791ZM106.518 72.9341C107.513 72.9341 108.32 72.1271 108.32 71.1317C108.32 70.1364 107.513 69.3294 106.518 69.3294C105.522 69.3294 104.715 70.1364 104.715 71.1317C104.715 72.1271 105.522 72.9341 106.518 72.9341ZM101.411 71.1318C101.411 72.1272 100.604 72.9341 99.6086 72.9341C98.6132 72.9341 97.8062 72.1272 97.8062 71.1318C97.8062 70.1364 98.6132 69.3295 99.6086 69.3295C100.604 69.3295 101.411 70.1364 101.411 71.1318ZM112.225 81.9457C112.225 85.2637 109.535 87.9535 106.217 87.9535C102.899 87.9535 100.21 85.2637 100.21 81.9457C100.21 78.6277 102.899 75.938 106.217 75.938C109.535 75.938 112.225 78.6277 112.225 81.9457ZM115.229 71.1317C115.229 72.1271 114.422 72.9341 113.427 72.9341C112.431 72.9341 111.624 72.1271 111.624 71.1317C111.624 70.1364 112.431 69.3294 113.427 69.3294C114.422 69.3294 115.229 70.1364 115.229 71.1317ZM42.0434 55.5117C42.0434 62.2025 47.4793 67.6364 54.1681 67.6364V61.574L62.2513 69.6572L54.1681 77.7403V71.678C45.2362 71.678 38.0018 64.4436 38.0018 55.5117C38.0018 52.339 38.9314 49.3887 40.5076 46.9031L43.4579 49.8535C42.5486 51.5307 42.0434 53.4707 42.0434 55.5117ZM54.1681 33.283V39.3453C63.1 39.3453 70.3344 46.5798 70.3344 55.5117C70.3344 58.6843 69.4049 61.6347 67.8287 64.1202L64.8783 61.1699C65.7877 59.4926 66.2929 57.5527 66.2929 55.5117C66.2929 48.8228 60.859 43.3869 54.1681 43.3869V49.4493L46.085 41.3661L54.1681 33.283Z\",\n fill: \"#404041\"\n});\nconst SvgSensor = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 124 124\",\n fill: \"none\",\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgSensor, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/sensor.527b5d6a.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nvar _ref2 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"g\", {\n id: \"Menu-icon\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Menu-/-Item-Name-/-Selected\",\n transform: \"translate(-19.000000, -14.000000)\",\n stroke: \"#FFFFFF\",\n strokeWidth: 2\n}, /*#__PURE__*/React.createElement(\"rect\", {\n id: \"Rectangle\",\n x: 20,\n y: 15,\n width: 13,\n height: 11,\n rx: 3\n})));\nconst SvgNavMenuIcon = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"100%\",\n height: \"100%\",\n viewBox: \"0 0 15 13\",\n style: {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\"\n },\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgNavMenuIcon, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/nav_menu_icon.b18b87c6.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport React from \"react\";\nvar _ref2 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"title\", null, \"Icon / Sensors Copy 2\");\nvar _ref3 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"desc\", null, \"Created with Sketch.\");\nvar _ref4 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.70522388,3.90798505e-14 C8.31063433,3.90798505e-14 8.80597015,0.744402985 8.80597015,1.65422885 L8.80597015,1.65422885 L8.80597015,18.1965175 C8.80597015,19.1063433 8.31063433,19.8507463 7.70522388,19.8507463 L7.70522388,19.8507463 L1.10074627,19.8507463 C0.495335821,19.8507463 -3.80140364e-13,19.1063433 -3.80140364e-13,18.1965175 L-3.80140364e-13,18.1965175 L-3.80140364e-13,1.65422885 C-3.80140364e-13,0.744402985 0.495335821,3.90798505e-14 1.10074627,3.90798505e-14 L1.10074627,3.90798505e-14 Z M4.40298507,12.1999378 C3.24503198,12.1999378 2.30632552,13.1257172 2.30632552,14.2677239 C2.30632552,15.4097306 3.24503198,16.33551 4.40298507,16.33551 C5.56093817,16.33551 6.49964463,15.4097306 6.49964463,14.2677239 C6.49964463,13.1257172 5.56093817,12.1999378 4.40298507,12.1999378 Z M2.09665951,9.92537313 C1.74927358,9.92537313 1.46766164,10.2031069 1.46766164,10.545709 C1.46766164,10.888311 1.74927358,11.1660448 2.09665951,11.1660448 C2.44404544,11.1660448 2.72565738,10.888311 2.72565738,10.545709 C2.72565738,10.2031069 2.44404544,9.92537313 2.09665951,9.92537313 Z M4.507818,9.92537313 C4.16043207,9.92537313 3.87882013,10.2031069 3.87882013,10.545709 C3.87882013,10.888311 4.16043207,11.1660448 4.507818,11.1660448 C4.85520393,11.1660448 5.13681587,10.888311 5.13681587,10.545709 C5.13681587,10.2031069 4.85520393,9.92537313 4.507818,9.92537313 Z M6.91897649,9.92537313 C6.57159056,9.92537313 6.28997863,10.2031069 6.28997863,10.545709 C6.28997863,10.888311 6.57159056,11.1660448 6.91897649,11.1660448 C7.26636242,11.1660448 7.54797436,10.888311 7.54797436,10.545709 C7.54797436,10.2031069 7.26636242,9.92537313 6.91897649,9.92537313 Z\",\n id: \"path-1\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7.70522388,4.97379915e-14 C8.31063433,4.97379915e-14 8.80597015,0.744402985 8.80597015,1.65422885 L8.80597015,1.65422885 L8.80597015,18.1965175 C8.80597015,19.1063433 8.31063433,19.8507463 7.70522388,19.8507463 L7.70522388,19.8507463 L1.10074627,19.8507463 C0.495335821,19.8507463 -7.60280727e-13,19.1063433 -7.60280727e-13,18.1965175 L-7.60280727e-13,18.1965175 L-7.60280727e-13,1.65422885 C-7.60280727e-13,0.744402985 0.495335821,4.97379915e-14 1.10074627,4.97379915e-14 L1.10074627,4.97379915e-14 Z M4.40298507,12.1999378 C3.24503198,12.1999378 2.30632552,13.1257172 2.30632552,14.2677239 C2.30632552,15.4097306 3.24503198,16.33551 4.40298507,16.33551 C5.56093817,16.33551 6.49964463,15.4097306 6.49964463,14.2677239 C6.49964463,13.1257172 5.56093817,12.1999378 4.40298507,12.1999378 Z M2.09665951,9.92537313 C1.74927358,9.92537313 1.46766164,10.2031069 1.46766164,10.545709 C1.46766164,10.888311 1.74927358,11.1660448 2.09665951,11.1660448 C2.44404544,11.1660448 2.72565738,10.888311 2.72565738,10.545709 C2.72565738,10.2031069 2.44404544,9.92537313 2.09665951,9.92537313 Z M4.507818,9.92537313 C4.16043207,9.92537313 3.87882013,10.2031069 3.87882013,10.545709 C3.87882013,10.888311 4.16043207,11.1660448 4.507818,11.1660448 C4.85520393,11.1660448 5.13681587,10.888311 5.13681587,10.545709 C5.13681587,10.2031069 4.85520393,9.92537313 4.507818,9.92537313 Z M6.91897649,9.92537313 C6.57159056,9.92537313 6.28997863,10.2031069 6.28997863,10.545709 C6.28997863,10.888311 6.57159056,11.1660448 6.91897649,11.1660448 C7.26636242,11.1660448 7.54797436,10.888311 7.54797436,10.545709 C7.54797436,10.2031069 7.26636242,9.92537313 6.91897649,9.92537313 Z\",\n id: \"path-3\"\n}));\nvar _ref5 =\n/*#__PURE__*/\n/*#__PURE__*/\nReact.createElement(\"g\", {\n id: \"2/18/20\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Subscription---Free\",\n transform: \"translate(-735.000000, -172.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group-8\",\n transform: \"translate(252.000000, 130.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group-4\",\n transform: \"translate(480.000000, 36.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Icon-/-Sensors\",\n transform: \"translate(0.000000, 4.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"manage-device\",\n transform: \"translate(3.000000, 2.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n id: \"device\",\n transform: \"translate(10.000000, 0.000000)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask-2\",\n fill: \"white\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#path-1\"\n})), /*#__PURE__*/React.createElement(\"use\", {\n id: \"Mask\",\n fill: \"#4A4A4A\",\n fillRule: \"nonzero\",\n xlinkHref: \"#path-1\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n id: \"\\\\u2731-/-Color-/-Icons-/-Selected-/-On-Primary-/-Active-\",\n mask: \"url(#mask-2)\",\n fill: \"#000000\",\n fillOpacity: 0.87\n}, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(-12.000000, -2.000000)\",\n id: \"Rectangle-3\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n x: 0,\n y: 0,\n width: 24,\n height: 24\n})))), /*#__PURE__*/React.createElement(\"g\", {\n id: \"device\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n id: \"mask-4\",\n fill: \"white\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n xlinkHref: \"#path-3\"\n})), /*#__PURE__*/React.createElement(\"use\", {\n id: \"Mask\",\n fill: \"#4A4A4A\",\n fillRule: \"nonzero\",\n xlinkHref: \"#path-3\"\n}), /*#__PURE__*/React.createElement(\"g\", {\n id: \"\\\\u2731-/-Color-/-Icons-/-Selected-/-On-Primary-/-Active-\",\n mask: \"url(#mask-4)\",\n fill: \"#000000\",\n fillOpacity: 0.87\n}, /*#__PURE__*/React.createElement(\"g\", {\n transform: \"translate(-2.000000, -2.000000)\",\n id: \"Rectangle-3\"\n}, /*#__PURE__*/React.createElement(\"rect\", {\n x: 0,\n y: 0,\n width: 24,\n height: 24\n}))))))))));\nconst SvgNavSensorsIcon = _ref => {\n let {\n svgRef,\n title,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"19px\",\n height: \"20px\",\n viewBox: \"0 0 19 20\",\n ref: svgRef\n }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3, _ref4, _ref5);\n};\nconst ForwardRef = React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SvgNavSensorsIcon, _extends({\n svgRef: ref\n}, props)));\nexport default __webpack_public_path__ + \"static/media/nav_sensors_icon.b1983b90.svg\";\nexport { ForwardRef as ReactComponent };","import { API } from 'aws-amplify';\nimport { useMemo } from 'react';\nimport { ApiCallback, ApiTypes, apiUrls, apiKeyApiName } from './ApiHelper';\n\nconst UseApiKeyApi = (apiType: ApiTypes) => {\n const requestPost = useMemo(\n () => async (body?: unknown) => {\n const url: ApiCallback = apiUrls[apiType];\n const apiName = apiKeyApiName;\n const path = url();\n const init = {\n body: body || {}\n };\n const response = await API.post(apiName, path, init);\n return response;\n },\n [apiType]\n );\n\n const requestDelete = useMemo(\n () => async (body?: unknown) => {\n const url: ApiCallback = apiUrls[apiType];\n const apiName = apiKeyApiName;\n const path = url();\n const init = {\n body: body || {}\n };\n const response = await API.del(apiName, path, init);\n return response;\n },\n [apiType]\n );\n\n return {\n requestPost,\n requestDelete\n };\n};\n\nexport default UseApiKeyApi;\n","/* tslint:disable */\n/* eslint-disable */\n// This file was automatically generated and should not be edited.\n\nexport type CreateAlertInput = {\n id?: string | null;\n owner: string;\n customerId: string;\n name?: string | null;\n tagName: string;\n enabled?: boolean | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type ModelAlertConditionInput = {\n customerId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n tagName?: ModelStringInput | null;\n enabled?: ModelBooleanInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelAlertConditionInput | null;\n};\n\nexport type ModelIDInput = {\n ne?: string | null;\n eq?: string | null;\n le?: string | null;\n lt?: string | null;\n ge?: string | null;\n gt?: string | null;\n contains?: string | null;\n notContains?: string | null;\n between?: Array | null;\n beginsWith?: string | null;\n attributeExists?: boolean | null;\n attributeType?: ModelAttributeTypes | null;\n size?: ModelSizeInput | null;\n};\n\nexport enum ModelAttributeTypes {\n binary = 'binary',\n binarySet = 'binarySet',\n bool = 'bool',\n list = 'list',\n map = 'map',\n number = 'number',\n numberSet = 'numberSet',\n string = 'string',\n stringSet = 'stringSet',\n _null = '_null'\n}\n\nexport type ModelSizeInput = {\n ne?: number | null;\n eq?: number | null;\n le?: number | null;\n lt?: number | null;\n ge?: number | null;\n gt?: number | null;\n between?: Array | null;\n};\n\nexport type ModelStringInput = {\n ne?: string | null;\n eq?: string | null;\n le?: string | null;\n lt?: string | null;\n ge?: string | null;\n gt?: string | null;\n contains?: string | null;\n notContains?: string | null;\n between?: Array | null;\n beginsWith?: string | null;\n attributeExists?: boolean | null;\n attributeType?: ModelAttributeTypes | null;\n size?: ModelSizeInput | null;\n};\n\nexport type ModelBooleanInput = {\n ne?: boolean | null;\n eq?: boolean | null;\n attributeExists?: boolean | null;\n attributeType?: ModelAttributeTypes | null;\n};\n\nexport type Alert = {\n __typename: 'Alert';\n id?: string;\n owner?: string;\n customerId?: string;\n name?: string | null;\n tagName?: string;\n enabled?: boolean | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: Customer;\n};\n\nexport type Customer = {\n __typename: 'Customer';\n id?: string;\n owner?: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId?: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: ModelApiKeyConnection;\n billing?: Billing;\n deviceAssociations?: ModelDeviceAssociationConnection;\n tier?: Tier;\n};\n\nexport enum TierName {\n none = 'none',\n free = 'free',\n starter = 'starter',\n professional = 'professional',\n enterprise = 'enterprise'\n}\n\nexport type ModelApiKeyConnection = {\n __typename: 'ModelApiKeyConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type ApiKey = {\n __typename: 'ApiKey';\n id?: string;\n name?: string | null;\n owner?: string;\n revoked?: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type Billing = {\n __typename: 'Billing';\n id?: string;\n stripe_session_id?: string;\n owner?: string;\n stripe_customer_id?: string;\n stripe_subscription_id?: string | null;\n subscription_status?: BillingSubscriptionStatus;\n stripe_plan_id?: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: Customer;\n};\n\nexport enum BillingSubscriptionStatus {\n incomplete = 'incomplete',\n incomplete_expired = 'incomplete_expired',\n active = 'active',\n past_due = 'past_due',\n canceled = 'canceled',\n unpaid = 'unpaid',\n suspended = 'suspended'\n}\n\nexport enum StripePlanId {\n starter_monthly = 'starter_monthly',\n starter_yearly = 'starter_yearly',\n starter_yearly_2021 = 'starter_yearly_2021',\n professional_monthly = 'professional_monthly',\n professional_yearly = 'professional_yearly',\n enterprise_monthly = 'enterprise_monthly',\n enterprise_yearly = 'enterprise_yearly'\n}\n\nexport type ModelDeviceAssociationConnection = {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type DeviceAssociation = {\n __typename: 'DeviceAssociation';\n id?: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id?: string;\n status?: DeviceAssociationStatus | null;\n user_id?: string;\n customerId?: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: Customer;\n device?: Device;\n files?: ModelFileConnection;\n};\n\nexport enum DeviceAssociationStatus {\n PAIRED = 'PAIRED',\n PENDING = 'PENDING',\n UNPAIRED = 'UNPAIRED'\n}\n\nexport type Device = {\n __typename: 'Device';\n serial_number_id?: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: ModelDeviceAssociationConnection;\n};\n\nexport type ModelFileConnection = {\n __typename: 'ModelFileConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type File = {\n __typename: 'File';\n id?: string;\n user_id?: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key?: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded?: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: ModelAttributeConnection;\n device?: DeviceAssociation;\n tags?: ModelTagConnection;\n};\n\nexport type ModelAttributeConnection = {\n __typename: 'ModelAttributeConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type Attribute = {\n __typename: 'Attribute';\n id?: string;\n user_id?: string;\n attributeFileId?: string;\n name?: string;\n type?: string;\n value?: string;\n thing?: string | null;\n mutable?: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type ModelTagConnection = {\n __typename: 'ModelTagConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type Tag = {\n __typename: 'Tag';\n id?: string;\n user_id?: string;\n tagFileId?: string;\n value?: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type Tier = {\n __typename: 'Tier';\n id?: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: ModelStripePlanConnection;\n};\n\nexport enum BillingCycle {\n monthly = 'monthly',\n yearly = 'yearly'\n}\n\nexport enum ReportTemplate {\n standard = 'standard',\n custom = 'custom'\n}\n\nexport type ModelStripePlanConnection = {\n __typename: 'ModelStripePlanConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type StripePlan = {\n __typename: 'StripePlan';\n id?: StripePlanId;\n tierId?: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n tier?: Tier;\n};\n\nexport type UpdateAlertInput = {\n id: string;\n owner?: string | null;\n customerId?: string | null;\n name?: string | null;\n tagName?: string | null;\n enabled?: boolean | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type DeleteAlertInput = {\n id?: string | null;\n};\n\nexport type CreateApiKeyInput = {\n id?: string | null;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type ModelApiKeyConditionInput = {\n name?: ModelStringInput | null;\n revoked?: ModelBooleanInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelApiKeyConditionInput | null;\n};\n\nexport type UpdateApiKeyInput = {\n id: string;\n name?: string | null;\n owner?: string | null;\n revoked?: boolean | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type DeleteApiKeyInput = {\n id?: string | null;\n};\n\nexport type CreateAttributeInput = {\n id?: string | null;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type ModelAttributeConditionInput = {\n attributeFileId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n type?: ModelStringInput | null;\n value?: ModelStringInput | null;\n thing?: ModelStringInput | null;\n mutable?: ModelBooleanInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelAttributeConditionInput | null;\n};\n\nexport type UpdateAttributeInput = {\n id: string;\n user_id?: string | null;\n attributeFileId?: string | null;\n name?: string | null;\n type?: string | null;\n value?: string | null;\n thing?: string | null;\n mutable?: boolean | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type DeleteAttributeInput = {\n id?: string | null;\n};\n\nexport type CreateBillingInput = {\n id?: string | null;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n billingCustomerId: string;\n};\n\nexport type ModelBillingConditionInput = {\n stripe_session_id?: ModelStringInput | null;\n stripe_customer_id?: ModelStringInput | null;\n stripe_subscription_id?: ModelStringInput | null;\n subscription_status?: ModelBillingSubscriptionStatusInput | null;\n stripe_plan_id?: ModelStripePlanIdInput | null;\n suspended_at?: ModelIntInput | null;\n next_billing_at?: ModelIntInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelBillingConditionInput | null;\n};\n\nexport type ModelBillingSubscriptionStatusInput = {\n eq?: BillingSubscriptionStatus | null;\n ne?: BillingSubscriptionStatus | null;\n};\n\nexport type ModelStripePlanIdInput = {\n eq?: StripePlanId | null;\n ne?: StripePlanId | null;\n};\n\nexport type ModelIntInput = {\n ne?: number | null;\n eq?: number | null;\n le?: number | null;\n lt?: number | null;\n ge?: number | null;\n gt?: number | null;\n between?: Array | null;\n attributeExists?: boolean | null;\n attributeType?: ModelAttributeTypes | null;\n};\n\nexport type UpdateBillingInput = {\n id: string;\n stripe_session_id?: string | null;\n owner?: string | null;\n stripe_customer_id?: string | null;\n stripe_subscription_id?: string | null;\n subscription_status?: BillingSubscriptionStatus | null;\n stripe_plan_id?: StripePlanId | null;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n billingCustomerId?: string | null;\n};\n\nexport type DeleteBillingInput = {\n id?: string | null;\n};\n\nexport type CreateCustomScriptInput = {\n id?: string | null;\n owner: string;\n error?: CustomScriptErrorInput | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type CustomScriptErrorInput = {\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n traces: Array;\n transactionId?: string | null;\n type: string;\n};\n\nexport type StackTraceInput = {\n filename: string;\n lineno: string;\n name?: string | null;\n offset?: number | null;\n text?: string | null;\n};\n\nexport enum CustomScriptStatus {\n error = 'error',\n running = 'running',\n success = 'success'\n}\n\nexport enum CustomScriptType {\n dashboard = 'dashboard',\n IDE_Summary = 'IDE_Summary',\n Large_Time_Series = 'Large_Time_Series',\n Shock_Focus = 'Shock_Focus',\n Vibration_Focus = 'Vibration_Focus'\n}\n\nexport type ModelCustomScriptConditionInput = {\n lines?: ModelStringInput | null;\n status?: ModelCustomScriptStatusInput | null;\n title?: ModelStringInput | null;\n type?: ModelCustomScriptTypeInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelCustomScriptConditionInput | null;\n};\n\nexport type ModelCustomScriptStatusInput = {\n eq?: CustomScriptStatus | null;\n ne?: CustomScriptStatus | null;\n};\n\nexport type ModelCustomScriptTypeInput = {\n eq?: CustomScriptType | null;\n ne?: CustomScriptType | null;\n};\n\nexport type CustomScript = {\n __typename: 'CustomScript';\n id?: string;\n owner?: string;\n error?: CustomScriptError;\n lines?: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type?: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type CustomScriptError = {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail?: string;\n message?: string;\n status?: string | null;\n traces?: Array;\n transactionId?: string | null;\n type?: string;\n};\n\nexport type Error = {\n __typename: 'Error';\n code?: number | null;\n message?: string;\n status?: string | null;\n};\n\nexport type DashboardError = {\n __typename: 'DashboardError';\n code?: number | null;\n message?: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n};\n\nexport type DashboardModuleError = {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message?: string;\n status?: string | null;\n transactionId?: string | null;\n};\n\nexport type GenericError = {\n __typename: 'GenericError';\n code?: number | null;\n message?: string;\n status?: string | null;\n};\n\nexport type ReportError = {\n __typename: 'ReportError';\n code?: number | null;\n message?: string;\n status?: string | null;\n transactionId?: string | null;\n};\n\nexport type StackTrace = {\n __typename: 'StackTrace';\n filename?: string;\n lineno?: string;\n name?: string | null;\n offset?: number | null;\n text?: string | null;\n};\n\nexport type UpdateCustomScriptInput = {\n id: string;\n owner?: string | null;\n error?: CustomScriptErrorInput | null;\n lines?: Array | null;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type?: CustomScriptType | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type DeleteCustomScriptInput = {\n id?: string | null;\n};\n\nexport type CreateCustomerInput = {\n id?: string | null;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n customerBillingId?: string | null;\n};\n\nexport type ModelCustomerConditionInput = {\n storageConsumed?: ModelFloatInput | null;\n storageSpaceRemaining?: ModelBooleanInput | null;\n tierId?: ModelTierNameInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n companyName?: ModelStringInput | null;\n logoImage?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelCustomerConditionInput | null;\n};\n\nexport type ModelFloatInput = {\n ne?: number | null;\n eq?: number | null;\n le?: number | null;\n lt?: number | null;\n ge?: number | null;\n gt?: number | null;\n between?: Array | null;\n attributeExists?: boolean | null;\n attributeType?: ModelAttributeTypes | null;\n};\n\nexport type ModelTierNameInput = {\n eq?: TierName | null;\n ne?: TierName | null;\n};\n\nexport type UpdateCustomerInput = {\n id: string;\n owner?: string | null;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId?: TierName | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n customerBillingId?: string | null;\n};\n\nexport type DeleteCustomerInput = {\n id?: string | null;\n};\n\nexport type CreateDashboardInput = {\n id?: string | null;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: DashboardErrorInput | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n};\n\nexport type DashboardErrorInput = {\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n};\n\nexport enum DashboardStatus {\n creating = 'creating',\n created = 'created',\n error = 'error',\n updating = 'updating',\n updated = 'updated'\n}\n\nexport type ModelDashboardConditionInput = {\n customScriptId?: ModelIDInput | null;\n defaultScript?: ModelStringInput | null;\n output_logs?: ModelStringInput | null;\n lastTransactionId?: ModelIDInput | null;\n maxFiles?: ModelIntInput | null;\n status?: ModelDashboardStatusInput | null;\n tags?: ModelStringInput | null;\n file_ids?: ModelStringInput | null;\n title?: ModelStringInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n notes?: ModelStringInput | null;\n sequence?: ModelIntInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDashboardConditionInput | null;\n};\n\nexport type ModelDashboardStatusInput = {\n eq?: DashboardStatus | null;\n ne?: DashboardStatus | null;\n};\n\nexport type Dashboard = {\n __typename: 'Dashboard';\n id?: string;\n owner?: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: DashboardError;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status?: DashboardStatus;\n tags?: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: CustomScript;\n notes?: string | null;\n sequence?: number | null;\n modules?: ModelDashboardModuleConnection;\n shares?: ModelDashboardShareConnection;\n};\n\nexport type ModelDashboardModuleConnection = {\n __typename: 'ModelDashboardModuleConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type DashboardModule = {\n __typename: 'DashboardModule';\n id?: string;\n owner?: string;\n dashboardId?: string;\n error?: DashboardModuleError;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard?: Dashboard;\n data?: ModelDashboardModuleDataConnection;\n frames?: ModelDashboardModuleFrameConnection;\n layout?: DashboardModuleLayout;\n};\n\nexport type ModelDashboardModuleDataConnection = {\n __typename: 'ModelDashboardModuleDataConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type DashboardModuleData = {\n __typename: 'DashboardModuleData';\n id?: string;\n owner?: string;\n moduleId?: string;\n json?: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n module?: DashboardModule;\n};\n\nexport type ModelDashboardModuleFrameConnection = {\n __typename: 'ModelDashboardModuleFrameConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type DashboardModuleFrame = {\n __typename: 'DashboardModuleFrame';\n id?: string;\n owner?: string;\n moduleId?: string;\n json?: string;\n sequence?: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n module?: DashboardModule;\n};\n\nexport type DashboardModuleLayout = {\n __typename: 'DashboardModuleLayout';\n id?: string;\n owner?: string;\n json?: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type ModelDashboardShareConnection = {\n __typename: 'ModelDashboardShareConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type DashboardShare = {\n __typename: 'DashboardShare';\n id?: string;\n dashboardId?: string;\n token?: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner?: string;\n dashboard?: Dashboard;\n};\n\nexport type UpdateDashboardInput = {\n id: string;\n owner?: string | null;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: DashboardErrorInput | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status?: DashboardStatus | null;\n tags?: Array | null;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n};\n\nexport type DeleteDashboardInput = {\n id?: string | null;\n};\n\nexport type CreateDashboardModuleInput = {\n id?: string | null;\n owner: string;\n dashboardId: string;\n error?: DashboardModuleErrorInput | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboardModuleLayoutId?: string | null;\n};\n\nexport type DashboardModuleErrorInput = {\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n};\n\nexport type ModelDashboardModuleConditionInput = {\n dashboardId?: ModelIDInput | null;\n sequence?: ModelIntInput | null;\n title?: ModelStringInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDashboardModuleConditionInput | null;\n};\n\nexport type UpdateDashboardModuleInput = {\n id: string;\n owner?: string | null;\n dashboardId?: string | null;\n error?: DashboardModuleErrorInput | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboardModuleLayoutId?: string | null;\n};\n\nexport type DeleteDashboardModuleInput = {\n id?: string | null;\n};\n\nexport type CreateDashboardModuleDataInput = {\n id?: string | null;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type ModelDashboardModuleDataConditionInput = {\n moduleId?: ModelIDInput | null;\n json?: ModelStringInput | null;\n sequence?: ModelIntInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDashboardModuleDataConditionInput | null;\n};\n\nexport type UpdateDashboardModuleDataInput = {\n id: string;\n owner?: string | null;\n moduleId?: string | null;\n json?: string | null;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type DeleteDashboardModuleDataInput = {\n id?: string | null;\n};\n\nexport type CreateDashboardModuleFrameInput = {\n id?: string | null;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type ModelDashboardModuleFrameConditionInput = {\n moduleId?: ModelIDInput | null;\n json?: ModelStringInput | null;\n sequence?: ModelIntInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDashboardModuleFrameConditionInput | null;\n};\n\nexport type UpdateDashboardModuleFrameInput = {\n id: string;\n owner?: string | null;\n moduleId?: string | null;\n json?: string | null;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type DeleteDashboardModuleFrameInput = {\n id?: string | null;\n};\n\nexport type CreateDashboardModuleLayoutInput = {\n id?: string | null;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type ModelDashboardModuleLayoutConditionInput = {\n json?: ModelStringInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDashboardModuleLayoutConditionInput | null;\n};\n\nexport type UpdateDashboardModuleLayoutInput = {\n id: string;\n owner?: string | null;\n json?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type DeleteDashboardModuleLayoutInput = {\n id?: string | null;\n};\n\nexport type CreateDashboardShareInput = {\n id?: string | null;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n};\n\nexport type ModelDashboardShareConditionInput = {\n dashboardId?: ModelIDInput | null;\n token?: ModelStringInput | null;\n expires?: ModelIntInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDashboardShareConditionInput | null;\n};\n\nexport type UpdateDashboardShareInput = {\n id: string;\n dashboardId?: string | null;\n token?: string | null;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner?: string | null;\n};\n\nexport type DeleteDashboardShareInput = {\n id?: string | null;\n};\n\nexport type CreateDeviceInput = {\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type ModelDeviceConditionInput = {\n name?: ModelStringInput | null;\n description?: ModelStringInput | null;\n part_number?: ModelStringInput | null;\n hardware_revision?: ModelStringInput | null;\n firmware_revision?: ModelStringInput | null;\n last_calibration_ts?: ModelFloatInput | null;\n thing_name?: ModelStringInput | null;\n thing_arn?: ModelStringInput | null;\n cert_arn?: ModelStringInput | null;\n manufacture_date?: ModelStringInput | null;\n last_uploaded_ts?: ModelFloatInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDeviceConditionInput | null;\n};\n\nexport type UpdateDeviceInput = {\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type DeleteDeviceInput = {\n serial_number_id: string;\n};\n\nexport type CreateDeviceAssociationInput = {\n id?: string | null;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n deviceAssociationDeviceId: string;\n};\n\nexport type ModelDeviceAssociationConditionInput = {\n org_id?: ModelStringInput | null;\n s3_bucket_name?: ModelStringInput | null;\n serial_number_id?: ModelStringInput | null;\n status?: ModelDeviceAssociationStatusInput | null;\n customerId?: ModelIDInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDeviceAssociationConditionInput | null;\n};\n\nexport type ModelDeviceAssociationStatusInput = {\n eq?: DeviceAssociationStatus | null;\n ne?: DeviceAssociationStatus | null;\n};\n\nexport type UpdateDeviceAssociationInput = {\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id?: string | null;\n status?: DeviceAssociationStatus | null;\n user_id?: string | null;\n customerId?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n deviceAssociationDeviceId?: string | null;\n};\n\nexport type DeleteDeviceAssociationInput = {\n id?: string | null;\n};\n\nexport type CreateFileInput = {\n id?: string | null;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n fileDeviceId?: string | null;\n};\n\nexport type ModelFileConditionInput = {\n serial_number_id?: ModelStringInput | null;\n sensor_name?: ModelStringInput | null;\n sensor_type?: ModelStringInput | null;\n file_name?: ModelStringInput | null;\n file_size?: ModelFloatInput | null;\n s3_bucket_name?: ModelStringInput | null;\n s3_object_key?: ModelStringInput | null;\n device_meta?: ModelStringInput | null;\n recording_length?: ModelFloatInput | null;\n recording_ts?: ModelIntInput | null;\n created_ts?: ModelIntInput | null;\n modified_ts?: ModelIntInput | null;\n archived_ts?: ModelIntInput | null;\n file_uploaded?: ModelBooleanInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelFileConditionInput | null;\n};\n\nexport type UpdateFileInput = {\n id: string;\n user_id?: string | null;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key?: string | null;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded?: boolean | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n fileDeviceId?: string | null;\n};\n\nexport type DeleteFileInput = {\n id?: string | null;\n};\n\nexport type CreateStripePlanInput = {\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type ModelStripePlanConditionInput = {\n tierId?: ModelTierNameInput | null;\n billingCycle?: ModelBillingCycleInput | null;\n cost?: ModelFloatInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelStripePlanConditionInput | null;\n};\n\nexport type ModelBillingCycleInput = {\n eq?: BillingCycle | null;\n ne?: BillingCycle | null;\n};\n\nexport type UpdateStripePlanInput = {\n id: StripePlanId;\n tierId?: TierName | null;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type DeleteStripePlanInput = {\n id?: string | null;\n};\n\nexport type CreateTagInput = {\n id?: string | null;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type ModelTagConditionInput = {\n tagFileId?: ModelIDInput | null;\n value?: ModelStringInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelTagConditionInput | null;\n};\n\nexport type UpdateTagInput = {\n id: string;\n user_id?: string | null;\n tagFileId?: string | null;\n value?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type DeleteTagInput = {\n id?: string | null;\n};\n\nexport type CreateTierInput = {\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type ModelTierConditionInput = {\n costMonthly?: ModelFloatInput | null;\n costYearly?: ModelFloatInput | null;\n deviceMaxCount?: ModelIntInput | null;\n storageLimitGb?: ModelIntInput | null;\n alertMaxCount?: ModelIntInput | null;\n hasApiAccess?: ModelBooleanInput | null;\n billingCycles?: ModelBillingCycleListInput | null;\n reportMaxCount?: ModelIntInput | null;\n reportTemplate?: ModelReportTemplateInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelTierConditionInput | null;\n};\n\nexport type ModelBillingCycleListInput = {\n eq?: Array | null;\n ne?: Array | null;\n contains?: BillingCycle | null;\n notContains?: BillingCycle | null;\n};\n\nexport type ModelReportTemplateInput = {\n eq?: ReportTemplate | null;\n ne?: ReportTemplate | null;\n};\n\nexport type UpdateTierInput = {\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n};\n\nexport type DeleteTierInput = {\n id?: string | null;\n};\n\nexport type TagType = {\n __typename: 'TagType';\n value?: string;\n};\n\nexport enum SortDirection {\n ASC = 'ASC',\n DESC = 'DESC'\n}\n\nexport type FileType = {\n __typename: 'FileType';\n nextCursor?: string | null;\n totalCount?: number | null;\n files?: Array;\n};\n\nexport type ModelAlertFilterInput = {\n id?: ModelIDInput | null;\n owner?: ModelStringInput | null;\n customerId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n tagName?: ModelStringInput | null;\n enabled?: ModelBooleanInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelAlertFilterInput | null;\n};\n\nexport type ModelAlertConnection = {\n __typename: 'ModelAlertConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type ModelApiKeyFilterInput = {\n id?: ModelIDInput | null;\n name?: ModelStringInput | null;\n owner?: ModelStringInput | null;\n revoked?: ModelBooleanInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelApiKeyFilterInput | null;\n};\n\nexport enum ModelSortDirection {\n ASC = 'ASC',\n DESC = 'DESC'\n}\n\nexport type ModelAttributeFilterInput = {\n id?: ModelIDInput | null;\n user_id?: ModelStringInput | null;\n attributeFileId?: ModelIDInput | null;\n name?: ModelStringInput | null;\n type?: ModelStringInput | null;\n value?: ModelStringInput | null;\n thing?: ModelStringInput | null;\n mutable?: ModelBooleanInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelAttributeFilterInput | null;\n};\n\nexport type ModelBillingFilterInput = {\n id?: ModelIDInput | null;\n stripe_session_id?: ModelStringInput | null;\n owner?: ModelStringInput | null;\n stripe_customer_id?: ModelStringInput | null;\n stripe_subscription_id?: ModelStringInput | null;\n subscription_status?: ModelBillingSubscriptionStatusInput | null;\n stripe_plan_id?: ModelStripePlanIdInput | null;\n suspended_at?: ModelIntInput | null;\n next_billing_at?: ModelIntInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelBillingFilterInput | null;\n};\n\nexport type ModelBillingConnection = {\n __typename: 'ModelBillingConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type ModelCustomScriptFilterInput = {\n id?: ModelIDInput | null;\n owner?: ModelStringInput | null;\n lines?: ModelStringInput | null;\n status?: ModelCustomScriptStatusInput | null;\n title?: ModelStringInput | null;\n type?: ModelCustomScriptTypeInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelCustomScriptFilterInput | null;\n};\n\nexport type ModelCustomScriptConnection = {\n __typename: 'ModelCustomScriptConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type ModelCustomerFilterInput = {\n id?: ModelIDInput | null;\n owner?: ModelStringInput | null;\n storageConsumed?: ModelFloatInput | null;\n storageSpaceRemaining?: ModelBooleanInput | null;\n tierId?: ModelTierNameInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n companyName?: ModelStringInput | null;\n logoImage?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelCustomerFilterInput | null;\n};\n\nexport type ModelCustomerConnection = {\n __typename: 'ModelCustomerConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type ModelDashboardFilterInput = {\n id?: ModelIDInput | null;\n owner?: ModelStringInput | null;\n customScriptId?: ModelIDInput | null;\n defaultScript?: ModelStringInput | null;\n output_logs?: ModelStringInput | null;\n lastTransactionId?: ModelIDInput | null;\n maxFiles?: ModelIntInput | null;\n status?: ModelDashboardStatusInput | null;\n tags?: ModelStringInput | null;\n file_ids?: ModelStringInput | null;\n title?: ModelStringInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n notes?: ModelStringInput | null;\n sequence?: ModelIntInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDashboardFilterInput | null;\n};\n\nexport type ModelDashboardConnection = {\n __typename: 'ModelDashboardConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type ModelDashboardModuleFilterInput = {\n id?: ModelIDInput | null;\n owner?: ModelStringInput | null;\n dashboardId?: ModelIDInput | null;\n sequence?: ModelIntInput | null;\n title?: ModelStringInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDashboardModuleFilterInput | null;\n};\n\nexport type ModelIntKeyConditionInput = {\n eq?: number | null;\n le?: number | null;\n lt?: number | null;\n ge?: number | null;\n gt?: number | null;\n between?: Array | null;\n};\n\nexport type ModelDashboardModuleDataFilterInput = {\n id?: ModelIDInput | null;\n owner?: ModelStringInput | null;\n moduleId?: ModelIDInput | null;\n json?: ModelStringInput | null;\n sequence?: ModelIntInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDashboardModuleDataFilterInput | null;\n};\n\nexport type ModelDashboardModuleFrameFilterInput = {\n id?: ModelIDInput | null;\n owner?: ModelStringInput | null;\n moduleId?: ModelIDInput | null;\n json?: ModelStringInput | null;\n sequence?: ModelIntInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDashboardModuleFrameFilterInput | null;\n};\n\nexport type ModelDashboardModuleLayoutFilterInput = {\n id?: ModelIDInput | null;\n owner?: ModelStringInput | null;\n json?: ModelStringInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDashboardModuleLayoutFilterInput | null;\n};\n\nexport type ModelDashboardModuleLayoutConnection = {\n __typename: 'ModelDashboardModuleLayoutConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type ModelDashboardShareFilterInput = {\n id?: ModelIDInput | null;\n dashboardId?: ModelIDInput | null;\n token?: ModelStringInput | null;\n expires?: ModelIntInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n owner?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDashboardShareFilterInput | null;\n};\n\nexport type ModelDeviceFilterInput = {\n serial_number_id?: ModelStringInput | null;\n name?: ModelStringInput | null;\n description?: ModelStringInput | null;\n part_number?: ModelStringInput | null;\n hardware_revision?: ModelStringInput | null;\n firmware_revision?: ModelStringInput | null;\n last_calibration_ts?: ModelFloatInput | null;\n thing_name?: ModelStringInput | null;\n thing_arn?: ModelStringInput | null;\n cert_arn?: ModelStringInput | null;\n manufacture_date?: ModelStringInput | null;\n last_uploaded_ts?: ModelFloatInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDeviceFilterInput | null;\n};\n\nexport type ModelDeviceConnection = {\n __typename: 'ModelDeviceConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type ModelDeviceAssociationFilterInput = {\n id?: ModelIDInput | null;\n org_id?: ModelStringInput | null;\n s3_bucket_name?: ModelStringInput | null;\n serial_number_id?: ModelStringInput | null;\n status?: ModelDeviceAssociationStatusInput | null;\n user_id?: ModelStringInput | null;\n customerId?: ModelIDInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelDeviceAssociationFilterInput | null;\n};\n\nexport type ModelFileFilterInput = {\n id?: ModelIDInput | null;\n user_id?: ModelStringInput | null;\n serial_number_id?: ModelStringInput | null;\n sensor_name?: ModelStringInput | null;\n sensor_type?: ModelStringInput | null;\n file_name?: ModelStringInput | null;\n file_size?: ModelFloatInput | null;\n s3_bucket_name?: ModelStringInput | null;\n s3_object_key?: ModelStringInput | null;\n device_meta?: ModelStringInput | null;\n recording_length?: ModelFloatInput | null;\n recording_ts?: ModelIntInput | null;\n created_ts?: ModelIntInput | null;\n modified_ts?: ModelIntInput | null;\n archived_ts?: ModelIntInput | null;\n file_uploaded?: ModelBooleanInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelFileFilterInput | null;\n};\n\nexport type ModelStringKeyConditionInput = {\n eq?: string | null;\n le?: string | null;\n lt?: string | null;\n ge?: string | null;\n gt?: string | null;\n between?: Array | null;\n beginsWith?: string | null;\n};\n\nexport type SearchableFileFilterInput = {\n id?: SearchableIDFilterInput | null;\n user_id?: SearchableStringFilterInput | null;\n serial_number_id?: SearchableStringFilterInput | null;\n sensor_name?: SearchableStringFilterInput | null;\n sensor_type?: SearchableStringFilterInput | null;\n file_name?: SearchableStringFilterInput | null;\n file_size?: SearchableFloatFilterInput | null;\n s3_bucket_name?: SearchableStringFilterInput | null;\n s3_object_key?: SearchableStringFilterInput | null;\n device_meta?: SearchableStringFilterInput | null;\n recording_length?: SearchableFloatFilterInput | null;\n recording_ts?: SearchableIntFilterInput | null;\n created_ts?: SearchableIntFilterInput | null;\n modified_ts?: SearchableIntFilterInput | null;\n archived_ts?: SearchableIntFilterInput | null;\n file_uploaded?: SearchableBooleanFilterInput | null;\n createdAt?: SearchableStringFilterInput | null;\n updatedAt?: SearchableStringFilterInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: SearchableFileFilterInput | null;\n};\n\nexport type SearchableIDFilterInput = {\n ne?: string | null;\n gt?: string | null;\n lt?: string | null;\n gte?: string | null;\n lte?: string | null;\n eq?: string | null;\n match?: string | null;\n matchPhrase?: string | null;\n matchPhrasePrefix?: string | null;\n multiMatch?: string | null;\n exists?: boolean | null;\n wildcard?: string | null;\n regexp?: string | null;\n range?: Array | null;\n};\n\nexport type SearchableStringFilterInput = {\n ne?: string | null;\n gt?: string | null;\n lt?: string | null;\n gte?: string | null;\n lte?: string | null;\n eq?: string | null;\n match?: string | null;\n matchPhrase?: string | null;\n matchPhrasePrefix?: string | null;\n multiMatch?: string | null;\n exists?: boolean | null;\n wildcard?: string | null;\n regexp?: string | null;\n range?: Array | null;\n};\n\nexport type SearchableFloatFilterInput = {\n ne?: number | null;\n gt?: number | null;\n lt?: number | null;\n gte?: number | null;\n lte?: number | null;\n eq?: number | null;\n range?: Array | null;\n};\n\nexport type SearchableIntFilterInput = {\n ne?: number | null;\n gt?: number | null;\n lt?: number | null;\n gte?: number | null;\n lte?: number | null;\n eq?: number | null;\n range?: Array | null;\n};\n\nexport type SearchableBooleanFilterInput = {\n eq?: boolean | null;\n ne?: boolean | null;\n};\n\nexport type SearchableFileSortInput = {\n field?: SearchableFileSortableFields | null;\n direction?: SearchableSortDirection | null;\n};\n\nexport enum SearchableFileSortableFields {\n id = 'id',\n user_id = 'user_id',\n serial_number_id = 'serial_number_id',\n sensor_name = 'sensor_name',\n sensor_type = 'sensor_type',\n file_name = 'file_name',\n file_size = 'file_size',\n s3_bucket_name = 's3_bucket_name',\n s3_object_key = 's3_object_key',\n device_meta = 'device_meta',\n recording_length = 'recording_length',\n recording_ts = 'recording_ts',\n created_ts = 'created_ts',\n modified_ts = 'modified_ts',\n archived_ts = 'archived_ts',\n file_uploaded = 'file_uploaded',\n createdAt = 'createdAt',\n updatedAt = 'updatedAt'\n}\n\nexport enum SearchableSortDirection {\n asc = 'asc',\n desc = 'desc'\n}\n\nexport type SearchableFileConnection = {\n __typename: 'SearchableFileConnection';\n items?: Array | null;\n nextToken?: string | null;\n total?: number | null;\n};\n\nexport type ModelStripePlanFilterInput = {\n id?: ModelStripePlanIdInput | null;\n tierId?: ModelTierNameInput | null;\n billingCycle?: ModelBillingCycleInput | null;\n cost?: ModelFloatInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelStripePlanFilterInput | null;\n};\n\nexport type ModelTagFilterInput = {\n id?: ModelIDInput | null;\n user_id?: ModelStringInput | null;\n tagFileId?: ModelIDInput | null;\n value?: ModelStringInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelTagFilterInput | null;\n};\n\nexport type ModelTierFilterInput = {\n id?: ModelTierNameInput | null;\n costMonthly?: ModelFloatInput | null;\n costYearly?: ModelFloatInput | null;\n deviceMaxCount?: ModelIntInput | null;\n storageLimitGb?: ModelIntInput | null;\n alertMaxCount?: ModelIntInput | null;\n hasApiAccess?: ModelBooleanInput | null;\n billingCycles?: ModelBillingCycleListInput | null;\n reportMaxCount?: ModelIntInput | null;\n reportTemplate?: ModelReportTemplateInput | null;\n createdAt?: ModelStringInput | null;\n updatedAt?: ModelStringInput | null;\n and?: Array | null;\n or?: Array | null;\n not?: ModelTierFilterInput | null;\n};\n\nexport type ModelTierConnection = {\n __typename: 'ModelTierConnection';\n items?: Array | null;\n nextToken?: string | null;\n};\n\nexport type CreateAlertMutationVariables = {\n input?: CreateAlertInput;\n condition?: ModelAlertConditionInput | null;\n};\n\nexport type CreateAlertMutation = {\n createAlert?: {\n __typename: 'Alert';\n id: string;\n owner: string;\n customerId: string;\n name?: string | null;\n tagName: string;\n enabled?: boolean | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type UpdateAlertMutationVariables = {\n input?: UpdateAlertInput;\n condition?: ModelAlertConditionInput | null;\n};\n\nexport type UpdateAlertMutation = {\n updateAlert?: {\n __typename: 'Alert';\n id: string;\n owner: string;\n customerId: string;\n name?: string | null;\n tagName: string;\n enabled?: boolean | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type DeleteAlertMutationVariables = {\n input?: DeleteAlertInput;\n condition?: ModelAlertConditionInput | null;\n};\n\nexport type DeleteAlertMutation = {\n deleteAlert?: {\n __typename: 'Alert';\n id: string;\n owner: string;\n customerId: string;\n name?: string | null;\n tagName: string;\n enabled?: boolean | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type CreateApiKeyMutationVariables = {\n input?: CreateApiKeyInput;\n condition?: ModelApiKeyConditionInput | null;\n};\n\nexport type CreateApiKeyMutation = {\n createApiKey?: {\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type UpdateApiKeyMutationVariables = {\n input?: UpdateApiKeyInput;\n condition?: ModelApiKeyConditionInput | null;\n};\n\nexport type UpdateApiKeyMutation = {\n updateApiKey?: {\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type DeleteApiKeyMutationVariables = {\n input?: DeleteApiKeyInput;\n condition?: ModelApiKeyConditionInput | null;\n};\n\nexport type DeleteApiKeyMutation = {\n deleteApiKey?: {\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type CreateAttributeMutationVariables = {\n input?: CreateAttributeInput;\n condition?: ModelAttributeConditionInput | null;\n};\n\nexport type CreateAttributeMutation = {\n createAttribute?: {\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type UpdateAttributeMutationVariables = {\n input?: UpdateAttributeInput;\n condition?: ModelAttributeConditionInput | null;\n};\n\nexport type UpdateAttributeMutation = {\n updateAttribute?: {\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type DeleteAttributeMutationVariables = {\n input?: DeleteAttributeInput;\n condition?: ModelAttributeConditionInput | null;\n};\n\nexport type DeleteAttributeMutation = {\n deleteAttribute?: {\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type CreateBillingMutationVariables = {\n input?: CreateBillingInput;\n condition?: ModelBillingConditionInput | null;\n};\n\nexport type CreateBillingMutation = {\n createBilling?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type UpdateBillingMutationVariables = {\n input?: UpdateBillingInput;\n condition?: ModelBillingConditionInput | null;\n};\n\nexport type UpdateBillingMutation = {\n updateBilling?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type DeleteBillingMutationVariables = {\n input?: DeleteBillingInput;\n condition?: ModelBillingConditionInput | null;\n};\n\nexport type DeleteBillingMutation = {\n deleteBilling?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type CreateCustomScriptMutationVariables = {\n input?: CreateCustomScriptInput;\n condition?: ModelCustomScriptConditionInput | null;\n};\n\nexport type CreateCustomScriptMutation = {\n createCustomScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n traces: Array<{\n __typename: 'StackTrace';\n filename: string;\n lineno: string;\n name?: string | null;\n offset?: number | null;\n text?: string | null;\n }>;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type UpdateCustomScriptMutationVariables = {\n input?: UpdateCustomScriptInput;\n condition?: ModelCustomScriptConditionInput | null;\n};\n\nexport type UpdateCustomScriptMutation = {\n updateCustomScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n traces: Array<{\n __typename: 'StackTrace';\n filename: string;\n lineno: string;\n name?: string | null;\n offset?: number | null;\n text?: string | null;\n }>;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type DeleteCustomScriptMutationVariables = {\n input?: DeleteCustomScriptInput;\n condition?: ModelCustomScriptConditionInput | null;\n};\n\nexport type DeleteCustomScriptMutation = {\n deleteCustomScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n traces: Array<{\n __typename: 'StackTrace';\n filename: string;\n lineno: string;\n name?: string | null;\n offset?: number | null;\n text?: string | null;\n }>;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type CreateCustomerMutationVariables = {\n input?: CreateCustomerInput;\n condition?: ModelCustomerConditionInput | null;\n};\n\nexport type CreateCustomerMutation = {\n createCustomer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n items?: Array<{\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n };\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type UpdateCustomerMutationVariables = {\n input?: UpdateCustomerInput;\n condition?: ModelCustomerConditionInput | null;\n};\n\nexport type UpdateCustomerMutation = {\n updateCustomer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n items?: Array<{\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n };\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type DeleteCustomerMutationVariables = {\n input?: DeleteCustomerInput;\n condition?: ModelCustomerConditionInput | null;\n};\n\nexport type DeleteCustomerMutation = {\n deleteCustomer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n items?: Array<{\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n };\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type CreateDashboardMutationVariables = {\n input?: CreateDashboardInput;\n condition?: ModelDashboardConditionInput | null;\n};\n\nexport type CreateDashboardMutation = {\n createDashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n items?: Array<{\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n items?: Array<{\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type UpdateDashboardMutationVariables = {\n input?: UpdateDashboardInput;\n condition?: ModelDashboardConditionInput | null;\n};\n\nexport type UpdateDashboardMutation = {\n updateDashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n items?: Array<{\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n items?: Array<{\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type DeleteDashboardMutationVariables = {\n input?: DeleteDashboardInput;\n condition?: ModelDashboardConditionInput | null;\n};\n\nexport type DeleteDashboardMutation = {\n deleteDashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n items?: Array<{\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n items?: Array<{\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type CreateDashboardModuleMutationVariables = {\n input?: CreateDashboardModuleInput;\n condition?: ModelDashboardModuleConditionInput | null;\n};\n\nexport type CreateDashboardModuleMutation = {\n createDashboardModule?: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n items?: Array<{\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n items?: Array<{\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n};\n\nexport type UpdateDashboardModuleMutationVariables = {\n input?: UpdateDashboardModuleInput;\n condition?: ModelDashboardModuleConditionInput | null;\n};\n\nexport type UpdateDashboardModuleMutation = {\n updateDashboardModule?: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n items?: Array<{\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n items?: Array<{\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n};\n\nexport type DeleteDashboardModuleMutationVariables = {\n input?: DeleteDashboardModuleInput;\n condition?: ModelDashboardModuleConditionInput | null;\n};\n\nexport type DeleteDashboardModuleMutation = {\n deleteDashboardModule?: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n items?: Array<{\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n items?: Array<{\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n};\n\nexport type CreateDashboardModuleDataMutationVariables = {\n input?: CreateDashboardModuleDataInput;\n condition?: ModelDashboardModuleDataConditionInput | null;\n};\n\nexport type CreateDashboardModuleDataMutation = {\n createDashboardModuleData?: {\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type UpdateDashboardModuleDataMutationVariables = {\n input?: UpdateDashboardModuleDataInput;\n condition?: ModelDashboardModuleDataConditionInput | null;\n};\n\nexport type UpdateDashboardModuleDataMutation = {\n updateDashboardModuleData?: {\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type DeleteDashboardModuleDataMutationVariables = {\n input?: DeleteDashboardModuleDataInput;\n condition?: ModelDashboardModuleDataConditionInput | null;\n};\n\nexport type DeleteDashboardModuleDataMutation = {\n deleteDashboardModuleData?: {\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type CreateDashboardModuleFrameMutationVariables = {\n input?: CreateDashboardModuleFrameInput;\n condition?: ModelDashboardModuleFrameConditionInput | null;\n};\n\nexport type CreateDashboardModuleFrameMutation = {\n createDashboardModuleFrame?: {\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type UpdateDashboardModuleFrameMutationVariables = {\n input?: UpdateDashboardModuleFrameInput;\n condition?: ModelDashboardModuleFrameConditionInput | null;\n};\n\nexport type UpdateDashboardModuleFrameMutation = {\n updateDashboardModuleFrame?: {\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type DeleteDashboardModuleFrameMutationVariables = {\n input?: DeleteDashboardModuleFrameInput;\n condition?: ModelDashboardModuleFrameConditionInput | null;\n};\n\nexport type DeleteDashboardModuleFrameMutation = {\n deleteDashboardModuleFrame?: {\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type CreateDashboardModuleLayoutMutationVariables = {\n input?: CreateDashboardModuleLayoutInput;\n condition?: ModelDashboardModuleLayoutConditionInput | null;\n};\n\nexport type CreateDashboardModuleLayoutMutation = {\n createDashboardModuleLayout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type UpdateDashboardModuleLayoutMutationVariables = {\n input?: UpdateDashboardModuleLayoutInput;\n condition?: ModelDashboardModuleLayoutConditionInput | null;\n};\n\nexport type UpdateDashboardModuleLayoutMutation = {\n updateDashboardModuleLayout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type DeleteDashboardModuleLayoutMutationVariables = {\n input?: DeleteDashboardModuleLayoutInput;\n condition?: ModelDashboardModuleLayoutConditionInput | null;\n};\n\nexport type DeleteDashboardModuleLayoutMutation = {\n deleteDashboardModuleLayout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type CreateDashboardShareMutationVariables = {\n input?: CreateDashboardShareInput;\n condition?: ModelDashboardShareConditionInput | null;\n};\n\nexport type CreateDashboardShareMutation = {\n createDashboardShare?: {\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n dashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type UpdateDashboardShareMutationVariables = {\n input?: UpdateDashboardShareInput;\n condition?: ModelDashboardShareConditionInput | null;\n};\n\nexport type UpdateDashboardShareMutation = {\n updateDashboardShare?: {\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n dashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type DeleteDashboardShareMutationVariables = {\n input?: DeleteDashboardShareInput;\n condition?: ModelDashboardShareConditionInput | null;\n};\n\nexport type DeleteDashboardShareMutation = {\n deleteDashboardShare?: {\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n dashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type CreateDeviceMutationVariables = {\n input?: CreateDeviceInput;\n condition?: ModelDeviceConditionInput | null;\n};\n\nexport type CreateDeviceMutation = {\n createDevice?: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type UpdateDeviceMutationVariables = {\n input?: UpdateDeviceInput;\n condition?: ModelDeviceConditionInput | null;\n};\n\nexport type UpdateDeviceMutation = {\n updateDevice?: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type DeleteDeviceMutationVariables = {\n input?: DeleteDeviceInput;\n condition?: ModelDeviceConditionInput | null;\n};\n\nexport type DeleteDeviceMutation = {\n deleteDevice?: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type CreateDeviceAssociationMutationVariables = {\n input?: CreateDeviceAssociationInput;\n condition?: ModelDeviceAssociationConditionInput | null;\n};\n\nexport type CreateDeviceAssociationMutation = {\n createDeviceAssociation?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n items?: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type UpdateDeviceAssociationMutationVariables = {\n input?: UpdateDeviceAssociationInput;\n condition?: ModelDeviceAssociationConditionInput | null;\n};\n\nexport type UpdateDeviceAssociationMutation = {\n updateDeviceAssociation?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n items?: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type DeleteDeviceAssociationMutationVariables = {\n input?: DeleteDeviceAssociationInput;\n condition?: ModelDeviceAssociationConditionInput | null;\n};\n\nexport type DeleteDeviceAssociationMutation = {\n deleteDeviceAssociation?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n items?: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type CreateFileMutationVariables = {\n input?: CreateFileInput;\n condition?: ModelFileConditionInput | null;\n};\n\nexport type CreateFileMutation = {\n createFile?: {\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n items?: Array<{\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n items?: Array<{\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type UpdateFileMutationVariables = {\n input?: UpdateFileInput;\n condition?: ModelFileConditionInput | null;\n};\n\nexport type UpdateFileMutation = {\n updateFile?: {\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n items?: Array<{\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n items?: Array<{\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type DeleteFileMutationVariables = {\n input?: DeleteFileInput;\n condition?: ModelFileConditionInput | null;\n};\n\nexport type DeleteFileMutation = {\n deleteFile?: {\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n items?: Array<{\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n items?: Array<{\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type CreateStripePlanMutationVariables = {\n input?: CreateStripePlanInput;\n condition?: ModelStripePlanConditionInput | null;\n};\n\nexport type CreateStripePlanMutation = {\n createStripePlan?: {\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n tier: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type UpdateStripePlanMutationVariables = {\n input?: UpdateStripePlanInput;\n condition?: ModelStripePlanConditionInput | null;\n};\n\nexport type UpdateStripePlanMutation = {\n updateStripePlan?: {\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n tier: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type DeleteStripePlanMutationVariables = {\n input?: DeleteStripePlanInput;\n condition?: ModelStripePlanConditionInput | null;\n};\n\nexport type DeleteStripePlanMutation = {\n deleteStripePlan?: {\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n tier: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type CreateTagMutationVariables = {\n input?: CreateTagInput;\n condition?: ModelTagConditionInput | null;\n};\n\nexport type CreateTagMutation = {\n createTag?: {\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type UpdateTagMutationVariables = {\n input?: UpdateTagInput;\n condition?: ModelTagConditionInput | null;\n};\n\nexport type UpdateTagMutation = {\n updateTag?: {\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type DeleteTagMutationVariables = {\n input?: DeleteTagInput;\n condition?: ModelTagConditionInput | null;\n};\n\nexport type DeleteTagMutation = {\n deleteTag?: {\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type CreateTierMutationVariables = {\n input?: CreateTierInput;\n condition?: ModelTierConditionInput | null;\n};\n\nexport type CreateTierMutation = {\n createTier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n items?: Array<{\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type UpdateTierMutationVariables = {\n input?: UpdateTierInput;\n condition?: ModelTierConditionInput | null;\n};\n\nexport type UpdateTierMutation = {\n updateTier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n items?: Array<{\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type DeleteTierMutationVariables = {\n input?: DeleteTierInput;\n condition?: ModelTierConditionInput | null;\n};\n\nexport type DeleteTierMutation = {\n deleteTier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n items?: Array<{\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type GetUniqueTagListQuery = {\n getUniqueTagList?: Array<{\n __typename: 'TagType';\n value: string;\n } | null> | null;\n};\n\nexport type GetFilesQueryVariables = {\n sortingField?: string | null;\n sortDirection?: SortDirection | null;\n numberSort?: boolean | null;\n tags?: Array | null;\n limit?: number | null;\n nextCursor?: string | null;\n};\n\nexport type GetFilesQuery = {\n getFiles?: {\n __typename: 'FileType';\n nextCursor?: string | null;\n totalCount?: number | null;\n files: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n nextToken?: string | null;\n } | null;\n } | null>;\n } | null;\n};\n\nexport type GetAlertQueryVariables = {\n id?: string;\n};\n\nexport type GetAlertQuery = {\n getAlert?: {\n __typename: 'Alert';\n id: string;\n owner: string;\n customerId: string;\n name?: string | null;\n tagName: string;\n enabled?: boolean | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type ListAlertsQueryVariables = {\n filter?: ModelAlertFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListAlertsQuery = {\n listAlerts?: {\n __typename: 'ModelAlertConnection';\n items?: Array<{\n __typename: 'Alert';\n id: string;\n owner: string;\n customerId: string;\n name?: string | null;\n tagName: string;\n enabled?: boolean | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetApiKeyQueryVariables = {\n id?: string;\n};\n\nexport type GetApiKeyQuery = {\n getApiKey?: {\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type ListApiKeysQueryVariables = {\n filter?: ModelApiKeyFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListApiKeysQuery = {\n listApiKeys?: {\n __typename: 'ModelApiKeyConnection';\n items?: Array<{\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetApiKeyByOwnerQueryVariables = {\n owner?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelApiKeyFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetApiKeyByOwnerQuery = {\n getApiKeyByOwner?: {\n __typename: 'ModelApiKeyConnection';\n items?: Array<{\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetAttributeQueryVariables = {\n id?: string;\n};\n\nexport type GetAttributeQuery = {\n getAttribute?: {\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type ListAttributesQueryVariables = {\n filter?: ModelAttributeFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListAttributesQuery = {\n listAttributes?: {\n __typename: 'ModelAttributeConnection';\n items?: Array<{\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetAttributeByUserQueryVariables = {\n user_id?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelAttributeFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetAttributeByUserQuery = {\n getAttributeByUser?: {\n __typename: 'ModelAttributeConnection';\n items?: Array<{\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type ListBillingsQueryVariables = {\n filter?: ModelBillingFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListBillingsQuery = {\n listBillings?: {\n __typename: 'ModelBillingConnection';\n items?: Array<{\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n };\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetBillingQueryVariables = {\n id?: string;\n};\n\nexport type GetBillingQuery = {\n getBilling?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type GetBillingByStripeSessionIdQueryVariables = {\n stripe_session_id?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelBillingFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetBillingByStripeSessionIdQuery = {\n getBillingByStripeSessionId?: {\n __typename: 'ModelBillingConnection';\n items?: Array<{\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n };\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetBillingByStripeCustomerIdQueryVariables = {\n stripe_customer_id?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelBillingFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetBillingByStripeCustomerIdQuery = {\n getBillingByStripeCustomerId?: {\n __typename: 'ModelBillingConnection';\n items?: Array<{\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n };\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetBillingByStripeSubscriptionIdQueryVariables = {\n stripe_subscription_id?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelBillingFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetBillingByStripeSubscriptionIdQuery = {\n getBillingByStripeSubscriptionId?: {\n __typename: 'ModelBillingConnection';\n items?: Array<{\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n };\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetBillingByStripeOwnerQueryVariables = {\n owner?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelBillingFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetBillingByStripeOwnerQuery = {\n getBillingByStripeOwner?: {\n __typename: 'ModelBillingConnection';\n items?: Array<{\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n };\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type ListCustomScriptsQueryVariables = {\n filter?: ModelCustomScriptFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListCustomScriptsQuery = {\n listCustomScripts?: {\n __typename: 'ModelCustomScriptConnection';\n items?: Array<{\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetCustomScriptQueryVariables = {\n id?: string;\n};\n\nexport type GetCustomScriptQuery = {\n getCustomScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n traces: Array<{\n __typename: 'StackTrace';\n filename: string;\n lineno: string;\n name?: string | null;\n offset?: number | null;\n text?: string | null;\n }>;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type GetCustomScriptByOwnerQueryVariables = {\n owner?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelCustomScriptFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetCustomScriptByOwnerQuery = {\n getCustomScriptByOwner?: {\n __typename: 'ModelCustomScriptConnection';\n items?: Array<{\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetCustomScriptByTypeQueryVariables = {\n type?: CustomScriptType | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelCustomScriptFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetCustomScriptByTypeQuery = {\n getCustomScriptByType?: {\n __typename: 'ModelCustomScriptConnection';\n items?: Array<{\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type ListCustomersQueryVariables = {\n filter?: ModelCustomerFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListCustomersQuery = {\n listCustomers?: {\n __typename: 'ModelCustomerConnection';\n items?: Array<{\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetCustomerQueryVariables = {\n id?: string;\n};\n\nexport type GetCustomerQuery = {\n getCustomer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n items?: Array<{\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n };\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type GetCustomerByOwnerIdQueryVariables = {\n owner?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelCustomerFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetCustomerByOwnerIdQuery = {\n getCustomerByOwnerId?: {\n __typename: 'ModelCustomerConnection';\n items?: Array<{\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDashboardByOwnerQueryVariables = {\n owner?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelDashboardFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetDashboardByOwnerQuery = {\n getDashboardByOwner?: {\n __typename: 'ModelDashboardConnection';\n items?: Array<{\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDashboardQueryVariables = {\n id?: string;\n};\n\nexport type GetDashboardQuery = {\n getDashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n items?: Array<{\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n items?: Array<{\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type ListDashboardsQueryVariables = {\n filter?: ModelDashboardFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListDashboardsQuery = {\n listDashboards?: {\n __typename: 'ModelDashboardConnection';\n items?: Array<{\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type ListDashboardModulesQueryVariables = {\n filter?: ModelDashboardModuleFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListDashboardModulesQuery = {\n listDashboardModules?: {\n __typename: 'ModelDashboardModuleConnection';\n items?: Array<{\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDashboardModuleQueryVariables = {\n id?: string;\n};\n\nexport type GetDashboardModuleQuery = {\n getDashboardModule?: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n items?: Array<{\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n items?: Array<{\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n};\n\nexport type GetDashboardModuleByDashboardQueryVariables = {\n dashboardId?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelDashboardModuleFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetDashboardModuleByDashboardQuery = {\n getDashboardModuleByDashboard?: {\n __typename: 'ModelDashboardModuleConnection';\n items?: Array<{\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDashboardModuleByDashboardSortedQueryVariables = {\n dashboardId?: string | null;\n sequence?: ModelIntKeyConditionInput | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelDashboardModuleFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetDashboardModuleByDashboardSortedQuery = {\n getDashboardModuleByDashboardSorted?: {\n __typename: 'ModelDashboardModuleConnection';\n items?: Array<{\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDashboardModuleDataQueryVariables = {\n id?: string;\n};\n\nexport type GetDashboardModuleDataQuery = {\n getDashboardModuleData?: {\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type ListDashboardModuleDatasQueryVariables = {\n filter?: ModelDashboardModuleDataFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListDashboardModuleDatasQuery = {\n listDashboardModuleDatas?: {\n __typename: 'ModelDashboardModuleDataConnection';\n items?: Array<{\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDashboardModuleDataByDashboardModuleQueryVariables = {\n moduleId?: string | null;\n sequence?: ModelIntKeyConditionInput | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelDashboardModuleDataFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetDashboardModuleDataByDashboardModuleQuery = {\n getDashboardModuleDataByDashboardModule?: {\n __typename: 'ModelDashboardModuleDataConnection';\n items?: Array<{\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDashboardModuleFrameQueryVariables = {\n id?: string;\n};\n\nexport type GetDashboardModuleFrameQuery = {\n getDashboardModuleFrame?: {\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type ListDashboardModuleFramesQueryVariables = {\n filter?: ModelDashboardModuleFrameFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListDashboardModuleFramesQuery = {\n listDashboardModuleFrames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n items?: Array<{\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDashboardModuleFrameByDashboardModuleQueryVariables = {\n moduleId?: string | null;\n sequence?: ModelIntKeyConditionInput | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelDashboardModuleFrameFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetDashboardModuleFrameByDashboardModuleQuery = {\n getDashboardModuleFrameByDashboardModule?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n items?: Array<{\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type ListDashboardModuleLayoutsQueryVariables = {\n filter?: ModelDashboardModuleLayoutFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListDashboardModuleLayoutsQuery = {\n listDashboardModuleLayouts?: {\n __typename: 'ModelDashboardModuleLayoutConnection';\n items?: Array<{\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDashboardModuleLayoutQueryVariables = {\n id?: string;\n};\n\nexport type GetDashboardModuleLayoutQuery = {\n getDashboardModuleLayout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type GetDashboardShareQueryVariables = {\n id?: string;\n};\n\nexport type GetDashboardShareQuery = {\n getDashboardShare?: {\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n dashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type ListDashboardSharesQueryVariables = {\n filter?: ModelDashboardShareFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListDashboardSharesQuery = {\n listDashboardShares?: {\n __typename: 'ModelDashboardShareConnection';\n items?: Array<{\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n dashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDashboardShareByOwnerQueryVariables = {\n owner?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelDashboardShareFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetDashboardShareByOwnerQuery = {\n getDashboardShareByOwner?: {\n __typename: 'ModelDashboardShareConnection';\n items?: Array<{\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n dashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDashboardShareByTokenQueryVariables = {\n token?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelDashboardShareFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetDashboardShareByTokenQuery = {\n getDashboardShareByToken?: {\n __typename: 'ModelDashboardShareConnection';\n items?: Array<{\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n dashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDashboardShareByDashboardQueryVariables = {\n dashboardId?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelDashboardShareFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetDashboardShareByDashboardQuery = {\n getDashboardShareByDashboard?: {\n __typename: 'ModelDashboardShareConnection';\n items?: Array<{\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n dashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type ListDevicesQueryVariables = {\n serial_number_id?: string | null;\n filter?: ModelDeviceFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n sortDirection?: ModelSortDirection | null;\n};\n\nexport type ListDevicesQuery = {\n listDevices?: {\n __typename: 'ModelDeviceConnection';\n items?: Array<{\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDeviceQueryVariables = {\n serial_number_id?: string;\n};\n\nexport type GetDeviceQuery = {\n getDevice?: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type ListDeviceAssociationsQueryVariables = {\n filter?: ModelDeviceAssociationFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListDeviceAssociationsQuery = {\n listDeviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n nextToken?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDeviceAssociationQueryVariables = {\n id?: string;\n};\n\nexport type GetDeviceAssociationQuery = {\n getDeviceAssociation?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n items?: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type GetDeviceAssociationBySerialQueryVariables = {\n serial_number_id?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelDeviceAssociationFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetDeviceAssociationBySerialQuery = {\n getDeviceAssociationBySerial?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n nextToken?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetDeviceAssociationByUserQueryVariables = {\n user_id?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelDeviceAssociationFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetDeviceAssociationByUserQuery = {\n getDeviceAssociationByUser?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n nextToken?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetFileQueryVariables = {\n id?: string;\n};\n\nexport type GetFileQuery = {\n getFile?: {\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n items?: Array<{\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n items?: Array<{\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type ListFilesQueryVariables = {\n filter?: ModelFileFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListFilesQuery = {\n listFiles?: {\n __typename: 'ModelFileConnection';\n items?: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n nextToken?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetFileByUserQueryVariables = {\n user_id?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelFileFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetFileByUserQuery = {\n getFileByUser?: {\n __typename: 'ModelFileConnection';\n items?: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n nextToken?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetFileByS3KeyQueryVariables = {\n s3_object_key?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelFileFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetFileByS3KeyQuery = {\n getFileByS3Key?: {\n __typename: 'ModelFileConnection';\n items?: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n nextToken?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetFileBySerialAndUserQueryVariables = {\n user_id?: string | null;\n serial_number_id?: ModelStringKeyConditionInput | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelFileFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetFileBySerialAndUserQuery = {\n getFileBySerialAndUser?: {\n __typename: 'ModelFileConnection';\n items?: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n nextToken?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetFileByUserSortedQueryVariables = {\n user_id?: string | null;\n created_ts?: ModelIntKeyConditionInput | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelFileFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetFileByUserSortedQuery = {\n getFileByUserSorted?: {\n __typename: 'ModelFileConnection';\n items?: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n nextToken?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetFileBySerialSortedQueryVariables = {\n serial_number_id?: string | null;\n created_ts?: ModelIntKeyConditionInput | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelFileFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetFileBySerialSortedQuery = {\n getFileBySerialSorted?: {\n __typename: 'ModelFileConnection';\n items?: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n nextToken?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type SearchFilesQueryVariables = {\n filter?: SearchableFileFilterInput | null;\n sort?: SearchableFileSortInput | null;\n limit?: number | null;\n nextToken?: string | null;\n from?: number | null;\n};\n\nexport type SearchFilesQuery = {\n searchFiles?: {\n __typename: 'SearchableFileConnection';\n items?: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n nextToken?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n total?: number | null;\n } | null;\n};\n\nexport type GetStripePlanQueryVariables = {\n id?: string;\n};\n\nexport type GetStripePlanQuery = {\n getStripePlan?: {\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n tier: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type ListStripePlansQueryVariables = {\n filter?: ModelStripePlanFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListStripePlansQuery = {\n listStripePlans?: {\n __typename: 'ModelStripePlanConnection';\n items?: Array<{\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n tier: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetTagQueryVariables = {\n id?: string;\n};\n\nexport type GetTagQuery = {\n getTag?: {\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type ListTagsQueryVariables = {\n filter?: ModelTagFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListTagsQuery = {\n listTags?: {\n __typename: 'ModelTagConnection';\n items?: Array<{\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetTagByUserQueryVariables = {\n user_id?: string | null;\n sortDirection?: ModelSortDirection | null;\n filter?: ModelTagFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type GetTagByUserQuery = {\n getTagByUser?: {\n __typename: 'ModelTagConnection';\n items?: Array<{\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type ListTiersQueryVariables = {\n filter?: ModelTierFilterInput | null;\n limit?: number | null;\n nextToken?: string | null;\n};\n\nexport type ListTiersQuery = {\n listTiers?: {\n __typename: 'ModelTierConnection';\n items?: Array<{\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n};\n\nexport type GetTierQueryVariables = {\n id?: string;\n};\n\nexport type GetTierQuery = {\n getTier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n items?: Array<{\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnCreateAlertSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnCreateAlertSubscription = {\n onCreateAlert?: {\n __typename: 'Alert';\n id: string;\n owner: string;\n customerId: string;\n name?: string | null;\n tagName: string;\n enabled?: boolean | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type OnUpdateAlertSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnUpdateAlertSubscription = {\n onUpdateAlert?: {\n __typename: 'Alert';\n id: string;\n owner: string;\n customerId: string;\n name?: string | null;\n tagName: string;\n enabled?: boolean | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type OnDeleteAlertSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnDeleteAlertSubscription = {\n onDeleteAlert?: {\n __typename: 'Alert';\n id: string;\n owner: string;\n customerId: string;\n name?: string | null;\n tagName: string;\n enabled?: boolean | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type OnCreateApiKeySubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnCreateApiKeySubscription = {\n onCreateApiKey?: {\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnUpdateApiKeySubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnUpdateApiKeySubscription = {\n onUpdateApiKey?: {\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnDeleteApiKeySubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnDeleteApiKeySubscription = {\n onDeleteApiKey?: {\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnCreateAttributeSubscriptionVariables = {\n user_id?: string | null;\n};\n\nexport type OnCreateAttributeSubscription = {\n onCreateAttribute?: {\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnUpdateAttributeSubscriptionVariables = {\n user_id?: string | null;\n};\n\nexport type OnUpdateAttributeSubscription = {\n onUpdateAttribute?: {\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnDeleteAttributeSubscriptionVariables = {\n user_id?: string | null;\n};\n\nexport type OnDeleteAttributeSubscription = {\n onDeleteAttribute?: {\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnCreateBillingSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnCreateBillingSubscription = {\n onCreateBilling?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type OnUpdateBillingSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnUpdateBillingSubscription = {\n onUpdateBilling?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type OnDeleteBillingSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnDeleteBillingSubscription = {\n onDeleteBilling?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type OnCreateCustomScriptSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnCreateCustomScriptSubscription = {\n onCreateCustomScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n traces: Array<{\n __typename: 'StackTrace';\n filename: string;\n lineno: string;\n name?: string | null;\n offset?: number | null;\n text?: string | null;\n }>;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnUpdateCustomScriptSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnUpdateCustomScriptSubscription = {\n onUpdateCustomScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n traces: Array<{\n __typename: 'StackTrace';\n filename: string;\n lineno: string;\n name?: string | null;\n offset?: number | null;\n text?: string | null;\n }>;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnDeleteCustomScriptSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnDeleteCustomScriptSubscription = {\n onDeleteCustomScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n traces: Array<{\n __typename: 'StackTrace';\n filename: string;\n lineno: string;\n name?: string | null;\n offset?: number | null;\n text?: string | null;\n }>;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnCreateCustomerSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnCreateCustomerSubscription = {\n onCreateCustomer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n items?: Array<{\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n };\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type OnUpdateCustomerSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnUpdateCustomerSubscription = {\n onUpdateCustomer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n items?: Array<{\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n };\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type OnDeleteCustomerSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnDeleteCustomerSubscription = {\n onDeleteCustomer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n items?: Array<{\n __typename: 'ApiKey';\n id: string;\n name?: string | null;\n owner: string;\n revoked: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n };\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type OnCreateDashboardSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnCreateDashboardSubscription = {\n onCreateDashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n items?: Array<{\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n items?: Array<{\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnUpdateDashboardSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnUpdateDashboardSubscription = {\n onUpdateDashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n items?: Array<{\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n items?: Array<{\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnDeleteDashboardSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnDeleteDashboardSubscription = {\n onDeleteDashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n error?: {\n __typename: 'CustomScriptError';\n code?: number | null;\n detail: string;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n type: string;\n } | null;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n items?: Array<{\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n items?: Array<{\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnCreateDashboardModuleSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnCreateDashboardModuleSubscription = {\n onCreateDashboardModule?: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n items?: Array<{\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n items?: Array<{\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnUpdateDashboardModuleSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnUpdateDashboardModuleSubscription = {\n onUpdateDashboardModule?: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n items?: Array<{\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n items?: Array<{\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnDeleteDashboardModuleSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnDeleteDashboardModuleSubscription = {\n onDeleteDashboardModule?: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n items?: Array<{\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n items?: Array<{\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnCreateDashboardModuleDataSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnCreateDashboardModuleDataSubscription = {\n onCreateDashboardModuleData?: {\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type OnUpdateDashboardModuleDataSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnUpdateDashboardModuleDataSubscription = {\n onUpdateDashboardModuleData?: {\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type OnDeleteDashboardModuleDataSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnDeleteDashboardModuleDataSubscription = {\n onDeleteDashboardModuleData?: {\n __typename: 'DashboardModuleData';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type OnCreateDashboardModuleFrameSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnCreateDashboardModuleFrameSubscription = {\n onCreateDashboardModuleFrame?: {\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type OnUpdateDashboardModuleFrameSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnUpdateDashboardModuleFrameSubscription = {\n onUpdateDashboardModuleFrame?: {\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type OnDeleteDashboardModuleFrameSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnDeleteDashboardModuleFrameSubscription = {\n onDeleteDashboardModuleFrame?: {\n __typename: 'DashboardModuleFrame';\n id: string;\n owner: string;\n moduleId: string;\n json: string;\n sequence: number;\n createdAt?: string | null;\n updatedAt?: string | null;\n module: {\n __typename: 'DashboardModule';\n id: string;\n owner: string;\n dashboardId: string;\n error?: {\n __typename: 'DashboardModuleError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n } | null;\n sequence?: number | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n dashboard: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n notes?: string | null;\n sequence?: number | null;\n };\n data?: {\n __typename: 'ModelDashboardModuleDataConnection';\n nextToken?: string | null;\n } | null;\n frames?: {\n __typename: 'ModelDashboardModuleFrameConnection';\n nextToken?: string | null;\n } | null;\n layout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type OnCreateDashboardModuleLayoutSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnCreateDashboardModuleLayoutSubscription = {\n onCreateDashboardModuleLayout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnUpdateDashboardModuleLayoutSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnUpdateDashboardModuleLayoutSubscription = {\n onUpdateDashboardModuleLayout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnDeleteDashboardModuleLayoutSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnDeleteDashboardModuleLayoutSubscription = {\n onDeleteDashboardModuleLayout?: {\n __typename: 'DashboardModuleLayout';\n id: string;\n owner: string;\n json: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnCreateDashboardShareSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnCreateDashboardShareSubscription = {\n onCreateDashboardShare?: {\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n dashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type OnUpdateDashboardShareSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnUpdateDashboardShareSubscription = {\n onUpdateDashboardShare?: {\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n dashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type OnDeleteDashboardShareSubscriptionVariables = {\n owner?: string | null;\n};\n\nexport type OnDeleteDashboardShareSubscription = {\n onDeleteDashboardShare?: {\n __typename: 'DashboardShare';\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n owner: string;\n dashboard?: {\n __typename: 'Dashboard';\n id: string;\n owner: string;\n customScriptId?: string | null;\n defaultScript?: string | null;\n error?: {\n __typename: 'DashboardError';\n code?: number | null;\n message: string;\n status?: string | null;\n transactionId?: string | null;\n scriptError?: boolean | null;\n } | null;\n output_logs?: string | null;\n lastTransactionId?: string | null;\n maxFiles?: number | null;\n status: DashboardStatus;\n tags: Array;\n file_ids?: Array | null;\n title?: string | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n customScript?: {\n __typename: 'CustomScript';\n id: string;\n owner: string;\n lines: Array;\n status?: CustomScriptStatus | null;\n title?: string | null;\n type: CustomScriptType;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n notes?: string | null;\n sequence?: number | null;\n modules?: {\n __typename: 'ModelDashboardModuleConnection';\n nextToken?: string | null;\n } | null;\n shares?: {\n __typename: 'ModelDashboardShareConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n } | null;\n};\n\nexport type OnCreateDeviceSubscription = {\n onCreateDevice?: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnUpdateDeviceSubscription = {\n onUpdateDevice?: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnDeleteDeviceSubscription = {\n onDeleteDevice?: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n items?: Array<{\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnCreateDeviceAssociationSubscriptionVariables = {\n user_id?: string | null;\n};\n\nexport type OnCreateDeviceAssociationSubscription = {\n onCreateDeviceAssociation?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n items?: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnUpdateDeviceAssociationSubscriptionVariables = {\n user_id?: string | null;\n};\n\nexport type OnUpdateDeviceAssociationSubscription = {\n onUpdateDeviceAssociation?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n items?: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnDeleteDeviceAssociationSubscriptionVariables = {\n user_id?: string | null;\n};\n\nexport type OnDeleteDeviceAssociationSubscription = {\n onDeleteDeviceAssociation?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n apiKeys?: {\n __typename: 'ModelApiKeyConnection';\n nextToken?: string | null;\n } | null;\n billing?: {\n __typename: 'Billing';\n id: string;\n stripe_session_id: string;\n owner: string;\n stripe_customer_id: string;\n stripe_subscription_id?: string | null;\n subscription_status: BillingSubscriptionStatus;\n stripe_plan_id: StripePlanId;\n suspended_at?: number | null;\n next_billing_at?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n deviceAssociations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n tier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n associations?: {\n __typename: 'ModelDeviceAssociationConnection';\n nextToken?: string | null;\n } | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n items?: Array<{\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnCreateFileSubscriptionVariables = {\n user_id?: string | null;\n};\n\nexport type OnCreateFileSubscription = {\n onCreateFile?: {\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n items?: Array<{\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n items?: Array<{\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnUpdateFileSubscriptionVariables = {\n user_id?: string | null;\n};\n\nexport type OnUpdateFileSubscription = {\n onUpdateFile?: {\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n items?: Array<{\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n items?: Array<{\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnDeleteFileSubscriptionVariables = {\n user_id?: string | null;\n};\n\nexport type OnDeleteFileSubscription = {\n onDeleteFile?: {\n __typename: 'File';\n id: string;\n user_id: string;\n serial_number_id?: string | null;\n sensor_name?: string | null;\n sensor_type?: string | null;\n file_name?: string | null;\n file_size?: number | null;\n s3_bucket_name?: string | null;\n s3_object_key: string;\n device_meta?: string | null;\n recording_length?: number | null;\n recording_ts?: number | null;\n created_ts?: number | null;\n modified_ts?: number | null;\n archived_ts?: number | null;\n file_uploaded: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n attributes?: {\n __typename: 'ModelAttributeConnection';\n items?: Array<{\n __typename: 'Attribute';\n id: string;\n user_id: string;\n attributeFileId: string;\n name: string;\n type: string;\n value: string;\n thing?: string | null;\n mutable: boolean;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n device?: {\n __typename: 'DeviceAssociation';\n id: string;\n org_id?: string | null;\n s3_bucket_name?: string | null;\n serial_number_id: string;\n status?: DeviceAssociationStatus | null;\n user_id: string;\n customerId: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n customer?: {\n __typename: 'Customer';\n id: string;\n owner: string;\n storageConsumed?: number | null;\n storageSpaceRemaining?: boolean | null;\n tierId: TierName;\n createdAt?: string | null;\n updatedAt?: string | null;\n companyName?: string | null;\n logoImage?: string | null;\n } | null;\n device: {\n __typename: 'Device';\n serial_number_id: string;\n name?: string | null;\n description?: string | null;\n part_number?: string | null;\n hardware_revision?: string | null;\n firmware_revision?: string | null;\n last_calibration_ts?: number | null;\n thing_name?: string | null;\n thing_arn?: string | null;\n cert_arn?: string | null;\n manufacture_date?: string | null;\n last_uploaded_ts?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n };\n files?: {\n __typename: 'ModelFileConnection';\n nextToken?: string | null;\n } | null;\n } | null;\n tags?: {\n __typename: 'ModelTagConnection';\n items?: Array<{\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnCreateStripePlanSubscription = {\n onCreateStripePlan?: {\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n tier: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type OnUpdateStripePlanSubscription = {\n onUpdateStripePlan?: {\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n tier: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type OnDeleteStripePlanSubscription = {\n onDeleteStripePlan?: {\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n tier: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n nextToken?: string | null;\n } | null;\n };\n } | null;\n};\n\nexport type OnCreateTagSubscriptionVariables = {\n user_id?: string | null;\n};\n\nexport type OnCreateTagSubscription = {\n onCreateTag?: {\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnUpdateTagSubscriptionVariables = {\n user_id?: string | null;\n};\n\nexport type OnUpdateTagSubscription = {\n onUpdateTag?: {\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnDeleteTagSubscriptionVariables = {\n user_id?: string | null;\n};\n\nexport type OnDeleteTagSubscription = {\n onDeleteTag?: {\n __typename: 'Tag';\n id: string;\n user_id: string;\n tagFileId: string;\n value: string;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null;\n};\n\nexport type OnCreateTierSubscription = {\n onCreateTier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n items?: Array<{\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnUpdateTierSubscription = {\n onUpdateTier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n items?: Array<{\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n\nexport type OnDeleteTierSubscription = {\n onDeleteTier?: {\n __typename: 'Tier';\n id: TierName;\n costMonthly?: number | null;\n costYearly?: number | null;\n deviceMaxCount?: number | null;\n storageLimitGb?: number | null;\n alertMaxCount?: number | null;\n hasApiAccess?: boolean | null;\n billingCycles?: Array | null;\n reportMaxCount?: number | null;\n reportTemplate?: ReportTemplate | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n stripePlans?: {\n __typename: 'ModelStripePlanConnection';\n items?: Array<{\n __typename: 'StripePlan';\n id: StripePlanId;\n tierId: TierName;\n billingCycle?: BillingCycle | null;\n cost?: number | null;\n createdAt?: string | null;\n updatedAt?: string | null;\n } | null> | null;\n nextToken?: string | null;\n } | null;\n } | null;\n};\n","import { StripePlanId } from '../../API';\n\nexport const stripeSessionApiName = 'stripe';\nexport const stripeSessionApiPathRoot = '/billing/stripe';\n\nexport enum ApiSessionErrorStatus {\n STRIPE_SESSION_UNAUTHORIZED = 'unauthorized',\n STRIPE_SESSION_MISSING_RESOURCE = 'MISSING_RESOURCE',\n STRIPE_SESSION_INVALID_URL = 'INVALID_URL',\n STRIPE_SESSION_RESOURCE_MISSING = 'RESOURCE_MISSING'\n}\n\nexport interface PostParams {\n cancel: {};\n create: {\n success_url: string;\n cancel_url: string;\n promo_code: string | null;\n plan_id: string;\n customer?: string;\n };\n updateBilling: {\n success_url: string;\n cancel_url: string;\n };\n complete: {\n id: string;\n };\n update: {\n plan_id: string;\n };\n}\n\nexport enum ApiTypes {\n CANCEL = 'cancel',\n CREATE = 'create',\n UPDATE_BILLING = 'updateBilling',\n COMPLETE = 'complete',\n UPDATE_SUB = 'updateSubscription'\n}\n\nexport type ApiCallback = () => string;\n\nexport type ApiUrlsSignature = { [key in ApiTypes]: ApiCallback };\n\nexport const apiUrls: ApiUrlsSignature = {\n cancel: () => `/subscription-cancel`,\n create: () => `/create-session`,\n updateBilling: () => `/update-billing`,\n complete: () => `/session-complete`,\n updateSubscription: () => `/subscription-update`\n};\n\nexport const generateTierId = (tierId: string, paymentPeriod: string) => {\n if (tierId === 'starter') {\n if (paymentPeriod === 'month') return StripePlanId.starter_monthly;\n if (paymentPeriod === 'year') return StripePlanId.starter_yearly_2021;\n }\n if (tierId === 'professional') {\n if (paymentPeriod === 'month') return StripePlanId.professional_monthly;\n if (paymentPeriod === 'year') return StripePlanId.professional_yearly;\n }\n if (tierId === 'enterprise') {\n if (paymentPeriod === 'month') return StripePlanId.enterprise_monthly;\n if (paymentPeriod === 'year') return StripePlanId.enterprise_yearly;\n }\n return '';\n};\n\nexport const getBillingFrequency = (stripePlanId: string) => {\n if (!stripePlanId || stripePlanId === 'free') {\n return 'none';\n }\n if (\n stripePlanId === StripePlanId.starter_monthly ||\n stripePlanId === StripePlanId.professional_monthly ||\n stripePlanId === StripePlanId.enterprise_monthly\n ) {\n return 'monthly';\n }\n return 'yearly';\n};\n","import { matchPath } from 'react-router';\nexport const drawerWidth = 220;\nexport const isRouteSelected = (\n path: string = '/',\n currentLocation: string\n) => {\n const match = matchPath(currentLocation, {\n path,\n exact: true,\n strict: false\n });\n return match && match.isExact ? true : false;\n};\n","export const dashboardApiName = 'dashboard';\nexport const shareDashboardApiName = 'shareDashboard';\nexport const dashboardApiPathRoot = '/dashboard';\n\nexport interface DashboardShareData {\n id: string;\n dashboardId: string;\n token: string;\n expires?: number | null;\n owner: string;\n}\n\nexport interface DashboardData {\n error: null | {\n code: null | number;\n message: string;\n status: string;\n scriptError: boolean | null;\n __typename: string;\n };\n modules: { items: any[] };\n status: string;\n title: string;\n tags: string[];\n maxFiles: number;\n createdAt: string;\n id: string;\n owner: string;\n updatedAt: string;\n customScriptId?: string;\n defaultScript?: string;\n customScript: {\n id: string;\n title: string;\n };\n file_ids?: string[];\n notes?: string;\n shares?: {\n items?: Array | null;\n } | null;\n sequence?: number;\n output_logs?: string;\n __typename: string;\n}\n\nexport interface PostParams {\n create: {};\n}\n\nexport enum ApiTypes {\n CREATE = 'create',\n GENERATE = 'generate',\n REVOKE = 'revoke',\n VIEW = 'view',\n DELETE = 'delete'\n}\n\nexport type ApiCallback = () => string;\n\nexport type ApiUrlsSignature = { [key in ApiTypes]: ApiCallback };\n\nexport const apiUrls: ApiUrlsSignature = {\n create: () => `/generate`,\n generate: () => '/share/create',\n revoke: () => '/share/revoke',\n view: () => '/share/view',\n delete: () => '/remove'\n};\n","import { API } from 'aws-amplify';\nimport { useMemo } from 'react';\nimport {\n ApiCallback,\n ApiTypes,\n apiUrls,\n stripeSessionApiName\n} from './ApiHelper';\n\nconst UseStripeSessionApi = (apiType: ApiTypes) => {\n const requestPost = useMemo(\n () => async (body?: Object) => {\n const url: ApiCallback = apiUrls[apiType];\n try {\n let apiName = stripeSessionApiName;\n let path = url();\n let init = {\n body: body || {}\n };\n const response = await API.post(apiName, path, init);\n return response;\n } catch (e) {\n throw e;\n }\n },\n [apiType]\n );\n\n return {\n requestPost\n };\n};\n\nexport default UseStripeSessionApi;\n","import { API } from 'aws-amplify';\nimport { useMemo } from 'react';\nimport { ApiCallback, ApiTypes, apiUrls, customerApiName } from './ApiHelper';\n\nconst UseCustomerApi = (apiType: ApiTypes) => {\n const requestPost = useMemo(\n () => async (body?: unknown) => {\n const url: ApiCallback = apiUrls[apiType];\n const apiName = customerApiName;\n const path = url();\n const init = {\n body: body || {}\n };\n const response = await API.post(apiName, path, init);\n return response;\n },\n [apiType]\n );\n\n return {\n requestPost\n };\n};\n\nexport default UseCustomerApi;\n","import gql from 'graphql-tag';\nimport { get } from 'lodash';\nimport * as log from 'loglevel';\nimport React, {\n createContext,\n ReactChild,\n useCallback,\n useContext,\n useMemo\n} from 'react';\nimport { ApolloContext } from 'react-apollo';\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\nimport useStripeSessionApi from '.';\nimport { BillingSubscriptionStatus } from '../../API';\nimport { GlobalSiteAlertTypes } from '../../components/Header';\nimport { createCustomer, updateCustomer } from '../../graphql/mutations';\nimport { routeDashboard } from '../../helpers/RouteHelper';\nimport { AuthContext } from '../AuthContext';\nimport { LayoutContext } from '../LayoutContext';\nimport { ApiTypes, generateTierId, PostParams } from './ApiHelper';\nimport useCustomerApi from '../UseCustomerApi';\nimport { ApiTypes as CustomerApiTypes } from '../UseCustomerApi/ApiHelper';\n\nconst stripeKey = process.env.REACT_APP_STRIPE_PUBLISH_KEY;\n// @ts-ignore\n\nconst stripe = stripeKey && new Stripe(stripeKey, {});\n\nexport interface StripeSessionContextExports {\n initializing: boolean;\n chooseTier: (\n tierCost: number,\n tierId: string,\n paymentPeriod: string,\n couponCode: string | null,\n handleError: (error?: Error) => void\n ) => void;\n switchActivePlan: (\n tierCost: number,\n tierId: string,\n paymentPeriod: string,\n couponCode: string | null,\n handleError: (error?: Error) => void\n ) => void;\n switchBilling: (backUrl: string, handleError?: () => void) => void;\n pushStripeError: (errorMessage: string, e?: Error) => void;\n}\n\nconst StripeSessionContext = createContext<\n StripeSessionContextExports | undefined\n>(undefined);\nconst { Provider, Consumer } = StripeSessionContext;\n\nexport { Consumer as StripeSessionConsumer, StripeSessionContext };\n\ninterface Props extends RouteComponentProps {\n children?: ReactChild;\n}\n\nexport const StripeSessionProvider = withRouter(\n ({ history, children }: Props) => {\n const authContext = useContext(AuthContext);\n const layoutContext = useContext(LayoutContext);\n const apolloContext = useContext(ApolloContext);\n if (!authContext) {\n throw new Error(\n 'StripeSessionProvider component must be used within an Auth Context Provider'\n );\n }\n if (!layoutContext) {\n throw new Error('Layout context is missing');\n }\n if (!apolloContext) {\n throw new Error(\n 'AuthContext component must be used within an Apollo Context Provider'\n );\n }\n const { userInfo, customerData, refetchCustomerData } = authContext;\n const { pushGlobalSiteError, pushGlobalSiteAlerts } = layoutContext;\n const { client } = apolloContext;\n const currentStripeStatus = get(\n customerData,\n 'billing.subscription_status'\n );\n const currentFrequency = get(customerData, 'billingFrequency');\n const ownerId = get(userInfo, 'sub');\n const { requestPost: initRequest } = useStripeSessionApi(\n ApiTypes['CREATE']\n );\n const { requestPost: cancelRequest } = useStripeSessionApi(\n ApiTypes['CANCEL']\n );\n const { requestPost: updateSubscription } = useStripeSessionApi(\n ApiTypes['UPDATE_SUB']\n );\n const { requestPost: updateBillingInfo } = useStripeSessionApi(\n ApiTypes['UPDATE_BILLING']\n );\n const { requestPost: completeFreeCustomer } = useCustomerApi(\n CustomerApiTypes['COMPLETE_FREE']\n );\n\n const pushStripeError = useCallback(\n (errorMessage: string, e?: Error) => {\n const errorDetailMessage = get(e, 'response.data.message');\n let fullErrorMessage: string | React.ReactChild = errorMessage;\n if (errorDetailMessage) {\n fullErrorMessage = (\n \n {fullErrorMessage}:\n
\n {errorDetailMessage}\n
\n );\n }\n pushGlobalSiteError(fullErrorMessage);\n },\n [pushGlobalSiteError]\n );\n\n const choosePaidTier = useMemo(\n () => async (\n tierId: string,\n paymentPeriod: string,\n couponCode: string | null,\n handleError: (error?: Error) => void\n ) => {\n const selectedPlanId = generateTierId(tierId, paymentPeriod);\n refetchCustomerData();\n const body: PostParams['create'] = {\n success_url: `${window.location.origin}/dashboard`,\n cancel_url: `${window.location.origin}/plans`,\n promo_code: couponCode,\n plan_id: selectedPlanId\n };\n initRequest(body)\n .then((result: any) => {\n const { sessionId } = result;\n if (!stripe) {\n pushGlobalSiteError(\n 'Stripe integration has not been set up on this portal.'\n );\n }\n return stripe.redirectToCheckout({\n sessionId\n });\n })\n .then((result: any) => {\n // If `redirectToCheckout` fails due to a browser or network\n // error, display the localized error message to your customer\n // using `result.error.message`.\n })\n .catch(handleError);\n },\n [initRequest, refetchCustomerData, pushGlobalSiteError]\n );\n\n const chooseFreeTier = useMemo(\n () => async (tierId: string, handleError: (e?: Error) => void) => {\n const completeSwitch = () => {\n refetchCustomerData();\n history.push({\n pathname: routeDashboard(),\n search: '?session_id=free'\n });\n };\n if (get(customerData, 'billing.stripe_subscription_id')) {\n const body: PostParams['cancel'] = {};\n await cancelRequest(body)\n .then(completeSwitch)\n .catch(handleError);\n } else {\n if (!client) {\n handleError();\n return;\n }\n if (!customerData) {\n await client\n .mutate({\n mutation: gql(createCustomer),\n variables: {\n input: {\n owner: ownerId,\n tierId\n }\n }\n })\n // post to the complete-free-customer API\n .then(completeFreeCustomer)\n .then(completeSwitch)\n .catch(handleError);\n } else {\n await client\n .mutate({\n mutation: gql(updateCustomer),\n variables: {\n input: {\n id: get(customerData, 'id'),\n tierId\n }\n }\n })\n .then(completeSwitch)\n .catch(handleError);\n }\n }\n },\n [\n cancelRequest,\n client,\n customerData,\n history,\n ownerId,\n refetchCustomerData,\n completeFreeCustomer\n ]\n );\n\n const switchActivePlan = useMemo(\n () => async (\n tierCost: number,\n tierId: string,\n paymentPeriod: string,\n couponCode: string | null,\n handleError: (error?: Error) => void\n ) => {\n const selectedPlanId = generateTierId(tierId, paymentPeriod);\n const body: PostParams['update'] = {\n plan_id: selectedPlanId\n };\n updateSubscription(body)\n .then((result: any) => {\n refetchCustomerData();\n pushGlobalSiteAlerts([GlobalSiteAlertTypes.frequencySelected]);\n history.push({\n pathname: routeDashboard()\n });\n })\n .catch(e => {\n log.error(\n 'Error switching user plan. Attempting to select the plan directly.',\n e\n );\n if (tierCost > 0) {\n choosePaidTier(tierId, paymentPeriod, couponCode, handleError);\n } else {\n chooseFreeTier(tierId, handleError);\n }\n });\n },\n [\n updateSubscription,\n refetchCustomerData,\n history,\n pushGlobalSiteAlerts,\n chooseFreeTier,\n choosePaidTier\n ]\n );\n\n const chooseTier = useMemo(\n () => async (\n tierCost: number,\n tierId: string,\n paymentPeriod: string,\n couponCode: string | null,\n handleError: () => void\n ) => {\n const currentFrequencySet =\n !!currentFrequency && currentFrequency !== 'none';\n const frequencyChange =\n tierCost !== 0 &&\n currentFrequencySet &&\n currentFrequency !== paymentPeriod;\n\n if (tierCost === 0) {\n chooseFreeTier(tierId, handleError);\n } else if (\n frequencyChange ||\n currentStripeStatus === BillingSubscriptionStatus.active\n ) {\n switchActivePlan(\n tierCost,\n tierId,\n paymentPeriod,\n couponCode,\n handleError\n );\n } else {\n choosePaidTier(tierId, paymentPeriod, couponCode, handleError);\n }\n },\n [\n chooseFreeTier,\n choosePaidTier,\n currentStripeStatus,\n switchActivePlan,\n currentFrequency\n ]\n );\n\n const switchBilling = useMemo(\n () => async (backUrl: string, handleError?: () => void) => {\n const body: PostParams['updateBilling'] = {\n success_url: backUrl,\n cancel_url: backUrl\n };\n updateBillingInfo(body)\n .then((result: any) => {\n const { sessionId } = result;\n if (!stripe) {\n pushGlobalSiteError(\n 'Stripe integration has not been set up on this portal.'\n );\n }\n return stripe.redirectToCheckout({\n sessionId\n });\n })\n .catch(e => {\n log.error('Error opening billing info', e);\n const errorDetailMessage = get(e, 'response.data.message');\n let fullErrorMessage: string | React.ReactChild =\n 'Billing info could not be opened at this time';\n if (errorDetailMessage) {\n fullErrorMessage = (\n \n {fullErrorMessage}:\n
\n {errorDetailMessage}\n
\n );\n }\n pushGlobalSiteError(fullErrorMessage);\n if (handleError) {\n handleError();\n }\n });\n },\n [updateBillingInfo, pushGlobalSiteError]\n );\n\n const defaultContext = {\n initializing: customerData === null,\n chooseTier,\n switchActivePlan,\n switchBilling,\n pushStripeError\n };\n return {children && children};\n }\n);\n","export const apiKeyApiName = 'apikey';\nexport const apiKeyApiPathRoot = '/apikey';\n\nexport interface PostParams {\n create: {};\n}\n\nexport interface DeleteParams {\n remove: {};\n}\n\nexport enum ApiTypes {\n CREATE = 'create',\n REMOVE = 'remove'\n}\n\nexport type ApiCallback = () => string;\n\nexport type ApiUrlsSignature = { [key in ApiTypes]: ApiCallback };\n\nexport const apiUrls: ApiUrlsSignature = {\n create: () => `/create`,\n remove: () => `/remove`\n};\n","import { createStyles, Theme, WithStyles } from '@material-ui/core';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { withStyles } from '@material-ui/core/styles';\nimport React, { ReactElement } from 'react';\nimport { RouteComponentProps, withRouter } from 'react-router';\nimport { isRouteSelected } from '../../helpers/NavHelper';\nimport { NavMenuItemIcon } from '../../images/Icons';\n\nconst styles = (theme: Theme) =>\n createStyles({\n listItemRoot: {\n '&:hover': {\n backgroundColor: `${theme.palette.grey[700]} !important`\n }\n },\n listItemSelected: {\n backgroundColor: `${theme.palette.grey[700]} !important`\n },\n listIcon: {\n width: 15,\n height: '100%',\n position: 'absolute',\n left: 12,\n top: 0\n },\n selectedIcon: {\n color: '#ffffff',\n width: 15\n }\n });\n\ninterface Props extends WithStyles, RouteComponentProps {\n label: string;\n icon?: () => ReactElement;\n pathname: string;\n path: string;\n external?: boolean;\n name: string;\n closeDrawer: null | (() => void);\n}\n\nconst NavPrimaryItem = ({\n label,\n icon,\n pathname,\n path,\n external,\n name,\n history,\n location,\n closeDrawer,\n classes\n}: Props) => {\n const selected = isRouteSelected(\n path,\n `${location.pathname}${location.search}`\n );\n let RenderIcon = null;\n if (icon) {\n RenderIcon = icon();\n }\n if (selected) {\n RenderIcon = ;\n }\n return (\n {\n closeDrawer && closeDrawer();\n }\n }\n : {\n onClick: () => {\n closeDrawer && closeDrawer();\n history.push(pathname);\n }\n })}\n >\n {RenderIcon && (\n {RenderIcon}\n )}\n \n \n );\n};\n\nexport default withStyles(styles, { withTheme: true })(\n withRouter(NavPrimaryItem)\n);\n","import {\n createStyles,\n Drawer,\n IconButton,\n List,\n ListSubheader,\n Theme,\n useMediaQuery,\n withStyles,\n WithStyles\n} from '@material-ui/core';\nimport classnames from 'classnames';\nimport React, { useContext } from 'react';\nimport { drawerWidth } from '../../helpers/NavHelper';\nimport {\n routeAccount,\n routeAccountAlerts,\n routeAccountApiKeys,\n routeAccountBilling,\n routeAccountSubscription,\n routeDashboard,\n routeDeviceListAll,\n routeRecordingListAll,\n routeUserDashboard,\n routeUploadRecording\n} from '../../helpers/RouteHelper';\nimport { AuthContext } from '../../hooks/AuthContext';\nimport { LayoutContext } from '../../hooks/LayoutContext';\nimport { MenuIcon } from '../../images/Icons';\nimport NavPrimaryItem from './NavPrimaryItem';\n\nconst styles = (theme: Theme) =>\n createStyles({\n menuButtonContainer: {\n height: 0,\n textAlign: 'left'\n },\n menuButton: {\n left: theme.spacing(1.5),\n top: theme.spacing(2),\n width: 28,\n zIndex: 31,\n padding: theme.spacing(0.5),\n background: theme.palette.primary.main,\n transform: 'rotate(45deg)',\n borderRadius: '4px',\n boxShadow:\n '2px 2px 4px -1px rgba(0, 0, 0, 0.2), 1px 1px 10px 0 rgba(0, 0, 0, 0.12), 4px 4px 5px 0 rgba(0, 0, 0, 0.14)',\n transition: theme.transitions.create('left', {\n easing: theme.transitions.easing.easeInOut,\n duration: theme.transitions.duration.enteringScreen\n }),\n '&:hover': {\n background: theme.palette.primary.main\n }\n },\n menuOpen: {\n left: 206\n },\n menuIcon: {\n transform: 'rotate(-45deg)',\n color: theme.palette.common.white\n },\n menuSubheader: {\n marginTop: theme.spacing(1),\n textAlign: 'left',\n color: '#ffffff',\n fontSize: 9,\n lineHeight: '28px',\n borderBottom: '1px solid rgba(255, 255, 255, 0.11)',\n margin: '0 20px'\n },\n authStatus: {\n padding: theme.spacing(2)\n },\n drawer: {\n width: drawerWidth,\n flexShrink: 0,\n 'z-index': '30 !important'\n },\n drawerPaper: {\n top: 'auto',\n width: drawerWidth,\n backgroundColor: theme.palette.grey[900],\n color: theme.palette.common.white,\n zIndex: 30\n },\n toolbar: theme.mixins.toolbar,\n toolbarSpacing: {\n minHeight: theme.spacing(8),\n [theme.breakpoints.up('sm')]: {\n minHeight: theme.spacing(9)\n },\n [theme.breakpoints.up('md')]: {\n minHeight: theme.spacing(0.5)\n }\n },\n customIcons: {},\n navListContainer: {\n overflow: 'auto',\n\n '@media print': {\n display: 'none'\n }\n }\n });\n\ninterface Props extends WithStyles {\n theme: Theme;\n}\n\nconst NavPrimary = ({ classes, theme }: Props) => {\n const breakpointIsMdPlus = useMediaQuery(theme.breakpoints.up('md'));\n const authContext = useContext(AuthContext);\n if (!authContext) {\n throw new Error(\n 'Navigation component must be used within a Auth Context Provider'\n );\n }\n const { isAuthorized, signedIn, customerNeedsTier } = authContext;\n const layoutContext = useContext(LayoutContext);\n if (!layoutContext) {\n throw new Error(\n 'Navigation component must be used within a Layout Context Provider'\n );\n }\n const { leftDrawerOpen, setLeftDrawerOpen } = layoutContext;\n const subItems: { [key: string]: any[] } = {\n 'MAIN MENU': [\n {\n label: 'Home',\n pathname: routeDashboard()\n },\n {\n label: 'My Reports',\n pathname: routeUserDashboard()\n },\n {\n label: 'Upload Files',\n pathname: routeUploadRecording()\n },\n {\n label: 'My Recordings',\n pathname: routeRecordingListAll()\n },\n {\n label: 'My Sensors',\n pathname: routeDeviceListAll()\n }\n ],\n ACCOUNT: [\n {\n label: 'My Profile',\n pathname: routeAccount()\n },\n {\n label: 'Subscription',\n pathname: routeAccountSubscription()\n },\n {\n label: 'Billing Information',\n pathname: routeAccountBilling()\n }\n ],\n SETTINGS: [\n {\n label: 'API Access',\n pathname: routeAccountApiKeys()\n },\n {\n label: 'Alerts',\n pathname: routeAccountAlerts()\n }\n ],\n SUPPORT: [\n {\n label: 'Contact Us',\n pathname: 'https://endaq.com/pages/contact',\n external: true\n },\n {\n label: 'Help Center',\n pathname: 'https://support.endaq.com/',\n external: true\n },\n {\n label: 'Privacy Policy',\n pathname: 'https://endaq.com/pages/privacy-policy',\n external: true\n },\n {\n label: 'Terms and Conditions',\n pathname: 'https://endaq.com/pages/terms-conditions',\n external: true\n },\n {\n label: 'enDAQ.com',\n pathname: 'https://endaq.com/',\n external: true\n }\n ]\n };\n\n const handleDrawerToggle = () => {\n setLeftDrawerOpen(!leftDrawerOpen);\n };\n const closeDrawer = () => {\n setLeftDrawerOpen(false);\n };\n\n if (customerNeedsTier || !signedIn) return null;\n return (\n
\n {isAuthorized && signedIn && (\n
\n \n \n \n
\n )}\n \n
\n
\n \n {Object.keys(subItems).map(key => (\n \n \n {key}\n \n {subItems[key].map(({ label, pathname, external }, n) => (\n \n ))}\n \n ))}\n \n
\n \n
\n );\n};\n\nexport default withStyles(styles, { withTheme: true })(NavPrimary);\n","import {\n Button,\n createStyles,\n Paper,\n Theme,\n Typography,\n withStyles,\n WithStyles\n} from '@material-ui/core';\nimport classnames from 'classnames';\nimport { get } from 'lodash';\nimport React, { useContext } from 'react';\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\nimport { pluralizeString } from '../../../helpers/DataHelper';\nimport { routeAccountBilling } from '../../../helpers/RouteHelper';\nimport { AuthContext } from '../../../hooks/AuthContext';\nimport { StripeSessionContext } from '../../../hooks/UseStripeSessionApi/StripeSessionContext';\n\nconst styles = (theme: Theme) =>\n createStyles({\n card: {\n margin: theme.spacing(1),\n width: 255,\n borderRadius: 4\n },\n cardInner: {\n padding: `${theme.spacing(3)}px ${theme.spacing(2)}px`,\n textAlign: 'center'\n },\n recommendedCard: {\n border: `1px solid ${theme.palette.grey[900]}`\n },\n recommendedText: {\n background: theme.palette.grey[900],\n color: theme.palette.common.white,\n textAlign: 'center',\n padding: theme.spacing(1),\n textTransform: 'uppercase'\n },\n planTitle: {\n marginBottom: theme.spacing(1.5)\n },\n planButton: {\n minWidth: 190,\n padding: `${theme.spacing(1.5)}px ${theme.spacing(1)}px`,\n margin: `${theme.spacing(2)}px 0 0`,\n boxShadow: 'none'\n },\n paymentGroup: {\n display: 'flex',\n alignItems: 'baseline',\n justifyContent: 'center',\n marginBottom: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n borderBottom: `1px solid #979797`\n },\n paymentAmount: {\n marginRight: theme.spacing(1)\n },\n planBenefits: {\n lineHeight: 2.33,\n letterSpacing: '0.39px',\n textAlign: 'center'\n },\n capitalize: {\n textTransform: 'capitalize'\n }\n });\n\ninterface Props extends WithStyles, RouteComponentProps {\n disableCta: boolean;\n setLoading: React.Dispatch;\n}\n\nconst PlanCard = ({ classes, disableCta, setLoading }: Props) => {\n const authContext = useContext(AuthContext);\n const stripeSessionContext = useContext(StripeSessionContext);\n if (!authContext) {\n throw new Error(\n 'App component must be used within a Auth Context Provider'\n );\n }\n if (!stripeSessionContext) {\n throw new Error('Stripe session context is missing');\n }\n const { switchBilling } = stripeSessionContext;\n const onCtaClick = () => {\n setLoading(true);\n switchBilling(`${window.location.origin}${routeAccountBilling()}`, () => {\n setLoading(false);\n });\n };\n\n const { customerData } = authContext;\n const customerTierId = get(customerData, 'tierId');\n const customerCost = get(customerData, 'billingCost');\n const customerFrequency = get(customerData, 'billingFrequency');\n const capLinkedSensors = get(customerData, 'tier.deviceMaxCount');\n const capStorageGb = get(customerData, 'tier.storageLimitGb');\n const capAlerts = get(customerData, 'tier.alertMaxCount');\n const hasApiAccess = get(customerData, 'tier.hasApiAccess');\n const reportTemplate = get(customerData, 'tier.reportTemplate', 'standard');\n\n const paymentPeriod = customerFrequency.replace('ly', '');\n\n const capAlertText = capAlerts >= 0 ? capAlerts : 'Unlimited';\n let capStorage = `${capStorageGb} GB`;\n if (capStorageGb > 1000) {\n capStorage = `${capStorageGb / 1000} TB`;\n }\n\n return (\n \n \n Plan You Were On\n \n
\n \n {customerTierId}\n \n
\n \n ${customerCost}\n \n \n / {paymentPeriod}\n \n
\n \n {capLinkedSensors < 0 ? 'Unlimited' : capLinkedSensors} Linked{' '}\n {pluralizeString('Sensor', capLinkedSensors)}\n
\n {capStorage} Storage\n
\n {capAlertText} Custom {pluralizeString('Alert', capAlerts)}\n
\n {hasApiAccess ? 'API Access' : 'No API Access'}\n
\n {reportTemplate} Report\n Views\n
\n \n Update Billing Info\n \n
\n \n );\n};\n\nexport default withRouter(withStyles(styles)(PlanCard));\n","import {\n Backdrop,\n Button,\n CircularProgress,\n Grid,\n Paper,\n Typography\n} from '@material-ui/core';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport React, { useContext, useState } from 'react';\nimport Helmet from 'react-helmet';\nimport { Link } from 'react-router-dom';\nimport { getPageTitle } from '../../helpers/DataHelper';\nimport { routePlans } from '../../helpers/RouteHelper';\nimport { StripeSessionContext } from '../../hooks/UseStripeSessionApi/StripeSessionContext';\nimport PlanCard from './Components/PlanCard';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n header: {\n display: 'flex',\n flexShrink: 0,\n flexDirection: 'column',\n alignItems: 'center'\n },\n paper: {\n padding: theme.spacing(3),\n [theme.breakpoints.up('md')]: {\n padding: theme.spacing(12.5)\n }\n },\n cardHeader: {\n marginBottom: theme.spacing(1),\n textAlign: 'center'\n },\n backdrop: {\n zIndex: theme.zIndex.modal + 1,\n color: '#fff'\n }\n })\n);\n\ninterface Props {}\n\nconst SuspendedOverlay = (props: Props) => {\n const pageTitle = 'Suspended Account';\n const stripeSessionContext = useContext(StripeSessionContext);\n if (!stripeSessionContext) {\n throw new Error('Stripe session context is missing');\n }\n const { initializing } = stripeSessionContext;\n const [loading, setLoading] = useState(false);\n\n const classes = useStyles();\n\n if (initializing) return null;\n\n return (\n <>\n \n {getPageTitle(pageTitle)}\n \n \n {loading && }\n {!loading && (\n \n \n \n \n Your enDAQ Cloud Service Account is Suspended\n \n \n Choose one of the following to reactivate your account.\n \n \n \n \n \n \n OR\n \n \n \n Change Plan\n \n \n \n \n )}\n \n \n );\n};\n\nexport default SuspendedOverlay;\n","import {\n Badge,\n createStyles,\n IconButton,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n ListSubheader,\n makeStyles,\n Popover,\n Theme\n} from '@material-ui/core';\nimport { format } from 'date-fns';\nimport React, { useContext, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { routeSingleDashboardUrl } from '../../../helpers/RouteHelper';\nimport { ReportContext } from '../../../hooks/ReportContext';\nimport {\n KeyboardArrowRightIcon,\n NotificationsIcon,\n TrendingUpIcon\n} from '../../../images/Icons';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n menuPaper: {\n width: 344\n },\n menuButton: {\n marginLeft: theme.spacing(-1)\n },\n menuStorageUsage: {\n color: theme.palette.primary.main,\n fontWeight: 'bold'\n },\n menuStoragePercentage: {\n borderRadius: 2,\n marginBottom: theme.spacing(0.75),\n background: theme.palette.grey[600]\n },\n menuStoragePercentageBar: {\n borderRadius: 2\n },\n menuTierName: {\n textTransform: 'uppercase'\n },\n menuDivider: {\n paddingLeft: '100%',\n margin: theme.spacing(1.5, 0)\n },\n subheader: {\n fontSize: 20,\n color: theme.palette.grey[800],\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: theme.palette.grey[200]\n }\n })\n);\n\nconst NotificationsMenu = () => {\n const [anchorEl, setAnchorEl] = useState(null);\n const menuOpen = Boolean(anchorEl);\n const classes = useStyles();\n const reportContext = useContext(ReportContext);\n if (!reportContext) {\n throw new Error(\n 'Header component must be used within a Report Context Provider'\n );\n }\n const { reportNotifications, removeReportNotification } = reportContext;\n\n const openMenu = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n const closeMenu = () => {\n setAnchorEl(null);\n };\n const generateNotificationsClick = (dashboardId: string) => () => {\n removeReportNotification(dashboardId);\n closeMenu();\n };\n\n return (\n <>\n \n \n \n \n \n \n \n Notifications\n \n }\n >\n {reportNotifications.length > 0 ? (\n reportNotifications.map((reportNotification, notificationIndex) => (\n \n \n \n \n \n {reportNotification.isNew ? 'A new' : 'The'} report{' '}\n {reportNotification.name} was generated\n {/* {reportNotification.isNew ? 'generated' : 'updated'} */}\n \n }\n secondary={`At ${format(reportNotification.date, 'h:mm a')}`}\n />\n \n \n ))\n ) : (\n \n No Notifications\n \n )}\n \n \n \n );\n};\nexport default NotificationsMenu;\n","import {\n Button,\n createStyles,\n Divider,\n Grid,\n IconButton,\n LinearProgress,\n makeStyles,\n Popover,\n Theme,\n Typography\n} from '@material-ui/core';\nimport { Auth } from 'aws-amplify';\nimport { get } from 'lodash';\nimport React, { useCallback, useContext, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport {\n DeviceCreateStep,\n routeAccount,\n routeAccountAlerts,\n routeDeviceAdd,\n routeDeviceListAll,\n routePlans\n} from '../../../helpers/RouteHelper';\nimport { AuthContext } from '../../../hooks/AuthContext';\nimport { LayoutContext } from '../../../hooks/LayoutContext';\nimport { convertBytesToGb } from '../../../helpers/DataHelper';\nimport { AccountCircleIcon, ArrowDropDownIcon } from '../../../images/Icons';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n menuPaper: {\n width: 344,\n padding: theme.spacing(4)\n },\n menuButton: {\n marginLeft: theme.spacing(-1)\n },\n menuStorageUsage: {\n color: theme.palette.primary.main,\n fontWeight: 'bold'\n },\n menuStoragePercentage: {\n borderRadius: 2,\n marginBottom: theme.spacing(0.75),\n background: theme.palette.grey[600]\n },\n menuStoragePercentageBar: {\n borderRadius: 2\n },\n menuTierName: {\n textTransform: 'uppercase'\n },\n menuDivider: {\n paddingLeft: '100%',\n margin: theme.spacing(1.5, 0)\n }\n })\n);\n\nconst ProfileMenu = () => {\n const [anchorEl, setAnchorEl] = useState(null);\n const menuOpen = Boolean(anchorEl);\n const layoutContext = useContext(LayoutContext);\n const classes = useStyles();\n if (!layoutContext) {\n throw new Error('Layout context is missing');\n }\n const authContext = useContext(AuthContext);\n if (!authContext) {\n throw new Error(\n 'Header component must be used within a Auth Context Provider'\n );\n }\n const {\n customerData,\n signedIn,\n userInfo,\n customerAlerts,\n customerSensors\n } = authContext;\n const userEmail = get(userInfo, 'email');\n const userTier = get(customerData, 'tierId', 'free');\n const billingCost = get(customerData, 'billingCost');\n const userAlerts = customerAlerts || [];\n const userSensors = customerSensors || [];\n const userStorage = convertBytesToGb(get(customerData, 'storageConsumed', 0));\n const tierMaxStorage = get(customerData, 'tier.storageLimitGb');\n const userStoragePercentageUsed = Math.floor(\n (userStorage / tierMaxStorage) * 100\n );\n const logoutAction = useCallback(() => {\n closeMenu();\n Auth.signOut();\n window.location.reload();\n }, []);\n if (!signedIn) {\n return null;\n }\n\n // Managing state of Profile Menu\n const openMenu = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n const closeMenu = () => {\n setAnchorEl(null);\n };\n const menuSensorLink =\n userSensors.length <= 0\n ? routeDeviceAdd(false, DeviceCreateStep.Form)\n : routeDeviceListAll();\n const menuSensorCta =\n userSensors.length <= 0 ? 'Link a Sensor' : `${userSensors.length} Linked`;\n const menuAlertCta =\n userAlerts.length <= 0 ? 'Set Up' : `${userAlerts.length} Active`;\n const planCta = billingCost === 0 ? 'Upgrade' : 'Change Plan';\n\n return (\n <>\n \n \n \n \n \n \n \n \n Hello,\n \n \n \n \n {userEmail}\n \n \n \n \n \n \n Storage\n \n \n \n \n \n {userStorage} GB / {tierMaxStorage} GB\n \n \n \n \n \n \n \n \n Sensors\n \n \n \n \n {menuSensorCta}\n \n \n \n Alerts\n \n \n \n {menuAlertCta}\n \n \n \n \n \n You have a {userTier} account\n \n \n \n \n \n \n My Profile\n \n \n \n \n {planCta}\n \n \n \n \n Log Out\n \n \n \n \n \n \n );\n};\nexport default ProfileMenu;\n","import {\n AppBar,\n Button,\n Collapse,\n createStyles,\n LinearProgress,\n makeStyles,\n Theme,\n Toolbar\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport classnames from 'classnames';\nimport { format } from 'date-fns';\nimport { get, startCase } from 'lodash';\nimport React, { useContext } from 'react';\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\nimport { drawerWidth } from '../../helpers/NavHelper';\nimport {\n routeAccountBilling,\n routeDashboard,\n routePlans\n} from '../../helpers/RouteHelper';\nimport { AuthContext } from '../../hooks/AuthContext';\nimport { LayoutContext } from '../../hooks/LayoutContext';\nimport { StripeSessionProvider } from '../../hooks/UseStripeSessionApi/StripeSessionContext';\nimport { ReportProblemIcon } from '../../images/Icons';\nimport { ReactComponent as Logotype } from '../../images/Logos/Logotype-white.svg';\nimport NavPrimary from '../NavPrimary';\nimport SuspendedOverlay from '../SuspendedOverlay';\nimport NotificationsMenu from './components/NotificationsMenu';\nimport ProfileMenu from './components/ProfileMenu';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n headerContent: {\n display: 'flex'\n },\n snackbarAlert: {\n borderRadius: 0,\n fontSize: '1.4rem',\n fontWeight: 'bold',\n color: theme.palette.grey[700],\n padding: '11px 40px',\n borderBottom: `1px solid ${theme.palette.grey['A100']}`\n },\n action: {\n '& svg': {\n fontSize: '2.4rem'\n }\n },\n appBar: {\n backgroundColor: theme.palette.grey[900]\n },\n appBarUnderline: {\n height: 4,\n background: theme.palette.primary.main\n },\n appBarLoggedOut: {\n backgroundColor: theme.palette.grey[900],\n marginLeft: drawerWidth\n },\n gutters: {\n paddingLeft: 20,\n paddingRight: 20,\n display: 'flex',\n justifyContent: 'space-between'\n },\n hasRightDrawer: {\n [theme.breakpoints.up('md')]: {\n paddingRight: drawerWidth\n }\n },\n logotype: {\n display: 'flex'\n },\n logotypeWrapper: {\n textAlign: 'left',\n height: 19\n },\n menuSection: {\n display: 'flex',\n color: theme.palette.common.white\n }\n })\n);\n\nexport enum GlobalSiteAlertTypes {\n tierSelected = 'tierSelected',\n frequencySelected = 'frequencySelected',\n passwordChanged = 'passwordChanged',\n updatedCustomReportSettings = 'updatedCustomReportSettings',\n billingUpdated = 'billingUpdated',\n accountReactivated = 'accountReactivated',\n accountPastDue = 'accountPastDue',\n accountSuspended = 'accountSuspended'\n}\nexport const globalSiteAlertText = {\n [GlobalSiteAlertTypes.tierSelected]: ({ tierId }: { tierId: string }) =>\n `You are now on the ${startCase(tierId)} plan.`,\n [GlobalSiteAlertTypes.frequencySelected]: () =>\n `Your billing frequency has been updated`,\n [GlobalSiteAlertTypes.passwordChanged]: () =>\n 'You have successfully changed your password',\n [GlobalSiteAlertTypes.updatedCustomReportSettings]: () =>\n 'You have successfully updated your Custom Report Settings',\n [GlobalSiteAlertTypes.billingUpdated]: () =>\n 'Your billing information is updated.',\n [GlobalSiteAlertTypes.accountReactivated]: () =>\n 'Your account has been re-activated.',\n [GlobalSiteAlertTypes.accountPastDue]: ({\n suspendedAt\n }: {\n suspendedAt: number;\n }) =>\n `Your account is past due. Please update your billing information ${\n suspendedAt > 0 ? `before ${format(suspendedAt, 'MM/DD/YYYY')}` : ''\n } to avoid service interruption.`,\n [GlobalSiteAlertTypes.accountSuspended]: () =>\n 'Your account has been suspended. Please update your billing information to restart service.'\n};\n\ninterface Props extends RouteComponentProps {}\n\nconst Header = (props: Props) => {\n const { history, location } = props;\n const layoutContext = useContext(LayoutContext);\n const classes = useStyles();\n if (!layoutContext) {\n throw new Error('Layout context is missing');\n }\n const authContext = useContext(AuthContext);\n if (!authContext) {\n throw new Error(\n 'Header component must be used within a Auth Context Provider'\n );\n }\n const { customerData, isAuthorized, isSuspended, signedIn } = authContext;\n\n if (!signedIn) {\n return null;\n }\n const {\n rightDrawerOpen,\n loading,\n globalSiteAlerts,\n removeGlobalSiteAlert\n } = layoutContext;\n\n const siteAlertContent = {\n tierId: get(customerData, 'tierId', ''),\n suspendedAt: get(customerData, 'billing.suspended_at', 0) * 1000\n };\n const userChangingPlan =\n location.pathname === routePlans() ||\n location.pathname === routeAccountBilling();\n\n return (\n <>\n \n 0}>\n {globalSiteAlerts.map((globalSiteAlert, alertIndex) => (\n }\n onClose={() => removeGlobalSiteAlert(alertIndex)}\n >\n {globalSiteAlertText[globalSiteAlert](siteAlertContent)}\n \n ))}\n \n \n {\n history.push({\n pathname: routeDashboard()\n });\n }}\n >\n
\n \n
\n \n {isAuthorized && signedIn && (\n
\n \n \n
\n )}\n
\n
\n {loading ? : null}\n
\n \n {isAuthorized && }\n \n <>{isSuspended && !userChangingPlan && }\n \n \n );\n};\nexport default withRouter(Header);\n","export const pairingApiName = 'pairing';\nexport const pairingApiPathRoot = '/pairing';\n\nexport enum ApiInitErrorStatus {\n PAIRING_INIT_DUPLICATE = 'PAIRING_INIT_DUPLICATE',\n PAIRING_INIT_CONFLICT = 'PAIRING_INIT_CONFLICT'\n}\n\nexport interface PostParams {\n init: {\n serial_number_id: string;\n user_id: string;\n identity_id: string;\n };\n confirm: {\n user_id: string;\n association_id: string;\n };\n unlink: {\n serial_number_id: string;\n thing_name: string;\n factory_reset: boolean;\n };\n wait: {\n user_id: string;\n association_id: string;\n };\n}\n\nexport enum ApiTypes {\n INIT = 'init',\n CONFIRM = 'confirm',\n UNLINK = 'unlink',\n WAIT = 'wait'\n}\n\nexport type ApiCallback = () => string;\n\nexport type ApiUrlsSignature = { [key in ApiTypes]: ApiCallback };\n\nexport const apiUrls: ApiUrlsSignature = {\n init: () => `/init`,\n confirm: () => `/confirm`,\n unlink: () => `/remove`,\n wait: () => '/confirm-device-response'\n};\n"],"sourceRoot":""}