diff --git a/apps/link/metamigo-add/_components/Admin.tsx b/apps/link/metamigo-add/_components/Admin.tsx deleted file mode 100644 index d4d1364..0000000 --- a/apps/link/metamigo-add/_components/Admin.tsx +++ /dev/null @@ -1,16 +0,0 @@ -"use client"; - -import { FC } from "react"; -import { ApolloProvider } from "@apollo/client"; -import { apolloClient } from "../_lib/apollo-client"; -import dynamic from "next/dynamic"; - -const MetamigoAdmin = dynamic(() => import("./MetamigoAdmin"), { - ssr: false, -}); - -export const Admin: FC = () => ( - - - -); diff --git a/apps/link/metamigo-add/_components/AdminLogin.tsx b/apps/link/metamigo-add/_components/AdminLogin.tsx deleted file mode 100644 index a058bf6..0000000 --- a/apps/link/metamigo-add/_components/AdminLogin.tsx +++ /dev/null @@ -1,88 +0,0 @@ -"use client"; - -import { FC, useEffect } from "react"; -import { CircularProgress, Typography, Grid } from "@mui/material"; -import { signIn, signOut, getSession } from "next-auth/react"; -import { useLogin, useTranslate } from "react-admin"; - -export const authProvider = { - login(o: any) { - if (o.ok) return Promise.resolve(); - return Promise.reject(); - }, - async logout() { - const session = await getSession(); - if (session) { - await signOut(); - } - }, - checkError(e: any) { - if (e.graphQLErrors && e.graphQLErrors.length > 0) { - const permDenied = e.graphQLErrors.some((e: any) => - e.message.match(/.*permission denied.*/), - ); - if (permDenied) - // eslint-disable-next-line prefer-promise-reject-errors - return Promise.reject({ message: "auth.permissionDenied" }); - } - - if (e.networkError && e.networkError.statusCode === 401) { - return Promise.reject(); - } - - return Promise.resolve(); - }, - async checkAuth() { - const session = await getSession(); - if (!session) { - throw new Error("Invalid session"); - } - }, - async getIdentity() { - const session = await getSession(); - if (!session) throw new Error("Invalid session"); - - return { - id: session.user?.email, - fullName: session.user?.name, - avatar: session.user?.image, - }; - }, - getPermissions: () => Promise.resolve(), -}; - -export const AdminLogin: FC = () => { - const reactAdminLogin = useLogin(); - const translate = useTranslate(); - - useEffect(() => { - (async () => { - const session = await getSession(); - if (session) { - reactAdminLogin({ ok: true }); - } else { - signIn(); - } - })(); - }); - - return ( - - - - {translate("auth.loggingIn")} - - - - - - - ); -}; diff --git a/apps/link/metamigo-add/_components/DigitInput/DigitInput.module.css b/apps/link/metamigo-add/_components/DigitInput/DigitInput.module.css deleted file mode 100644 index 270fc93..0000000 --- a/apps/link/metamigo-add/_components/DigitInput/DigitInput.module.css +++ /dev/null @@ -1,27 +0,0 @@ -.input { - width: 40px; - height: 60px; - margin: 5px; - font-size: 1.4rem; - padding: 0 9px 0 12px; - border: none; - outline: none; - background: white; - font-weight: 400; - color: rgba(59, 59, 59, 0.788); - -webkit-box-shadow: 2px 2px 2px 1px #d6d6d6, -1px -1px 1px #e6e6e6; - box-shadow: 2px 2px 2px 1px #d6d6d6, -1px -1px 1px #e6e6e6; - border-radius: 5px; -} - -.group { - margin-top: 1.6rem; -} - -.hyphen { - background: black; - height: 0.1em; - width: 1em; - margin: 0 0.5em; - display: inline-block; -} diff --git a/apps/link/metamigo-add/_components/DigitInput/index.tsx b/apps/link/metamigo-add/_components/DigitInput/index.tsx deleted file mode 100644 index 1fe03d8..0000000 --- a/apps/link/metamigo-add/_components/DigitInput/index.tsx +++ /dev/null @@ -1,62 +0,0 @@ -"use client"; - -/* eslint-disable react/display-name */ -import { forwardRef } from "react"; -import useDigitInput, { InputAttributes } from "react-digit-input"; -import styles from "./DigitInput.module.css"; - -const DigitInputElement = forwardRef< - HTMLInputElement, - Omit & { - autoFocus?: boolean; - } ->(({ ...props }, ref): any => ( - <> - - -)); - -const DigitSeparator = forwardRef< - HTMLInputElement, - Omit & { - autoFocus?: boolean; - } ->( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - ({ ...props }, ref): any => ( - <> - - - ) -); - -export const SixDigitInput = ({ value, onChange }: any) => { - const digits = useDigitInput({ - acceptedCharacters: /^\d$/, - length: 6, - value, - onChange, - }); - return ( -
-
- - - - - - - -
- -
- ); -}; diff --git a/apps/link/metamigo-add/_components/MetamigoAdmin.tsx b/apps/link/metamigo-add/_components/MetamigoAdmin.tsx deleted file mode 100644 index edeb205..0000000 --- a/apps/link/metamigo-add/_components/MetamigoAdmin.tsx +++ /dev/null @@ -1,66 +0,0 @@ -// @ts-nocheck - -"use client"; - -import { FC, useEffect, useState } from "react"; -import { Admin, Resource } from "react-admin"; -import { useApolloClient } from "@apollo/client"; -import polyglotI18nProvider from "ra-i18n-polyglot"; -import { ThemeProvider, createTheme } from "@mui/material/styles"; -import { metamigoDataProvider } from "../_lib/dataprovider"; -import { theme } from "./layout/themes"; -import { Layout } from "./layout"; -import englishMessages from "../_i18n/en"; -import whatsappBots from "./whatsapp/bots"; -import whatsappMessages from "./whatsapp/messages"; -import whatsappAttachments from "./whatsapp/attachments"; -import voiceLines from "./voice/voicelines"; -import signalBots from "./signal/bots"; -import voiceProviders from "./voice/providers"; -import webhooks from "./webhooks"; -import { AdminLogin, authProvider } from "./AdminLogin"; - -const i18nProvider = polyglotI18nProvider( - (_locale: any) => englishMessages, - "en", -); - -const MetamigoAdmin: FC = () => { - // eslint-disable-next-line unicorn/no-null - const [dataProvider, setDataProvider] = useState(null); - const client = useApolloClient(); - const muiTheme = createTheme(theme); - - useEffect(() => { - (async () => { - const dataProvider = await metamigoDataProvider(client); - // @ts-ignore - setDataProvider(() => dataProvider); - })(); - }, [client]); - return ( - dataProvider && ( - - - - - - - - - - - ) - ); -}; - -export default MetamigoAdmin; diff --git a/apps/link/metamigo-add/_components/MultiProvider.tsx b/apps/link/metamigo-add/_components/MultiProvider.tsx deleted file mode 100644 index 00aab73..0000000 --- a/apps/link/metamigo-add/_components/MultiProvider.tsx +++ /dev/null @@ -1,8 +0,0 @@ -"use client"; - -import { FC, PropsWithChildren } from "react"; -import { SessionProvider } from "next-auth/react"; - -export const MultiProvider: FC = ({ children }) => ( - {children} -); diff --git a/apps/link/metamigo-add/_components/accounts/AccountEdit.tsx b/apps/link/metamigo-add/_components/accounts/AccountEdit.tsx deleted file mode 100644 index b48be22..0000000 --- a/apps/link/metamigo-add/_components/accounts/AccountEdit.tsx +++ /dev/null @@ -1,63 +0,0 @@ -"use client"; - -import { FC } from "react"; -// import { makeStyles } from "@mui/styles"; -import { - SimpleForm, - TextInput, - Edit, - ReferenceInput, - SelectInput, - DateInput, - Toolbar, - DeleteButton, - EditProps, -} from "react-admin"; -import { useSession } from "next-auth/react"; - -/* -const useStyles = makeStyles((_theme: any) => ({ - defaultToolbar: { - flex: 1, - display: "flex", - justifyContent: "space-between", - }, -})); -*/ -type AccountEditToolbarProps = { - record?: any; -}; - -const AccountEditToolbar: FC = (props) => { - const { data: session } = useSession(); - const classes: any = {}; // useStyles(props); - return ( - - - - ); -}; - -const AccountTitle = ({ record }: { record?: any }) => { - let title = ""; - if (record) title = record.name ?? record.email; - return Account {title}; -}; - -export const AccountEdit: FC = (props) => ( - } {...props}> - }> - - - - - - - - - - - -); - -export default AccountEdit; diff --git a/apps/link/metamigo-add/_components/accounts/AccountList.tsx b/apps/link/metamigo-add/_components/accounts/AccountList.tsx deleted file mode 100644 index d270052..0000000 --- a/apps/link/metamigo-add/_components/accounts/AccountList.tsx +++ /dev/null @@ -1,46 +0,0 @@ -"use client"; - -import { FC } from "react"; -import { - List, - Datagrid, - DateField, - TextField, - ReferenceField, - DeleteButton, - ListProps, -} from "react-admin"; -import { useSession } from "next-auth/react"; - -type DeleteNotSelfButtonProps = { - record?: any; -}; - -const DeleteNotSelfButton: FC = (props) => { - const { data: session } = useSession(); - return ( - // @ts-ignore - - ); -}; - -export const AccountList: FC = (props) => ( - - - - - - - - - - - - - -); - -export default AccountList; diff --git a/apps/link/metamigo-add/_components/accounts/index.ts b/apps/link/metamigo-add/_components/accounts/index.ts deleted file mode 100644 index 08615d1..0000000 --- a/apps/link/metamigo-add/_components/accounts/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -"use client"; - -/* eslint-disable import/no-named-as-default */ -/* eslint-disable import/no-anonymous-default-export */ -import AccountIcon from "@mui/icons-material/AccountTree"; -import AccountList from "./AccountList"; -import AccountEdit from "./AccountEdit"; - -export default { - list: AccountList, - edit: AccountEdit, - icon: AccountIcon, -}; diff --git a/apps/link/metamigo-add/_components/layout/AppBar.tsx b/apps/link/metamigo-add/_components/layout/AppBar.tsx deleted file mode 100644 index 4146b1f..0000000 --- a/apps/link/metamigo-add/_components/layout/AppBar.tsx +++ /dev/null @@ -1,58 +0,0 @@ -"use client"; - -import { forwardRef } from "react"; -import { AppBar, UserMenu, MenuItemLink, useTranslate } from "react-admin"; -import Typography from "@mui/material/Typography"; -import SettingsIcon from "@mui/icons-material/Settings"; -import { colors } from "app/_styles/theme"; -// import { makeStyles } from "@mui/styles"; -/* -const useStyles = makeStyles({ - title: { - flex: 1, - textOverflow: "ellipsis", - whiteSpace: "nowrap", - overflow: "hidden", - }, - spacer: { - flex: 1, - }, -}); -*/ -// eslint-disable-next-line react/display-name -const ConfigurationMenu = forwardRef((props, ref) => { - const translate = useTranslate(); - return ( - } - onClick={props.onClick} - sidebarIsOpen - /> - ); -}); - -const CustomAppBar = (props: any) => { - const classes: any = {}; // useStyles(); - const { darkLavender } = colors; - return ( - } - position="sticky" - sx={{ mt: -1, backgroundColor: darkLavender }} - > - - - ); -}; - -export default CustomAppBar; diff --git a/apps/link/metamigo-add/_components/layout/Layout.tsx b/apps/link/metamigo-add/_components/layout/Layout.tsx deleted file mode 100644 index a39d793..0000000 --- a/apps/link/metamigo-add/_components/layout/Layout.tsx +++ /dev/null @@ -1,19 +0,0 @@ -"use client"; - -import { Layout as RaLayout, LayoutProps, Sidebar } from "react-admin"; -import AppBar from "./AppBar"; -import { Menu } from "./Menu"; -import { theme } from "./themes"; - -const CustomSidebar = (props: any) => ; - -export const Layout = (props: LayoutProps) => ( - -); diff --git a/apps/link/metamigo-add/_components/layout/Logo.tsx b/apps/link/metamigo-add/_components/layout/Logo.tsx deleted file mode 100644 index 4e78d49..0000000 --- a/apps/link/metamigo-add/_components/layout/Logo.tsx +++ /dev/null @@ -1,106 +0,0 @@ -"use client"; - -import { SVGProps } from "react"; - -const Logo = (props: SVGProps) => ( - - - - - - - - - - - - - - - - - - - - - - -); - -export default Logo; diff --git a/apps/link/metamigo-add/_components/layout/Menu.tsx b/apps/link/metamigo-add/_components/layout/Menu.tsx deleted file mode 100644 index 9940a64..0000000 --- a/apps/link/metamigo-add/_components/layout/Menu.tsx +++ /dev/null @@ -1,100 +0,0 @@ -"use client"; - -/* eslint-disable camelcase */ -import { FC, useState } from "react"; -import VoiceIcon from "@mui/icons-material/PhoneInTalk"; -import { Box } from "@mui/material"; -// import { useTheme } from "@mui/styles"; -import useMediaQuery from "@mui/material/useMediaQuery"; -import { useTranslate, MenuItemLink } from "react-admin"; -import webhooks from "../webhooks"; -import voiceLines from "../voice/voicelines"; -import voiceProviders from "../voice/providers"; -import whatsappBots from "../whatsapp/bots"; -import signalBots from "../signal/bots"; -import { SubMenu } from "./SubMenu"; - -type MenuName = "menuVoice" | "menuSecurity"; - -export const Menu: FC = ({ onMenuClick, logout, dense = false }: any) => { - const [state, setState] = useState({ - menuVoice: false, - menuSecurity: false, - }); - const translate = useTranslate(); - const theme: any = {}; // useTheme(); - // @ts-ignore - const isXSmall = false; // useMediaQuery(theme?.breakpoints?.down("xs")); - const open = true; // useSelector((state: any) => state.admin.ui.sidebarOpen); - - const handleToggle = (menu: MenuName) => { - setState((state: any) => ({ ...state, [menu]: !state[menu] })); - }; - - return ( - - } - onClick={onMenuClick} - sidebarIsOpen={open} - dense={dense} - /> - } - onClick={onMenuClick} - sidebarIsOpen={open} - dense={dense} - /> - handleToggle("menuVoice")} - isOpen={state.menuVoice} - sidebarIsOpen={open} - name="pos.menu.voice" - icon={} - dense={dense} - > - } - onClick={onMenuClick} - sidebarIsOpen={open} - dense={dense} - /> - } - onClick={onMenuClick} - sidebarIsOpen={open} - dense={dense} - /> - - } - onClick={onMenuClick} - sidebarIsOpen={open} - dense={dense} - /> - {isXSmall && logout} - - ); -}; - -export default Menu; diff --git a/apps/link/metamigo-add/_components/layout/SubMenu.tsx b/apps/link/metamigo-add/_components/layout/SubMenu.tsx deleted file mode 100644 index c7c9882..0000000 --- a/apps/link/metamigo-add/_components/layout/SubMenu.tsx +++ /dev/null @@ -1,87 +0,0 @@ -"use client"; - -import { FC, PropsWithChildren, Fragment, ReactElement } from "react"; -import ExpandMore from "@mui/icons-material/ExpandMore"; -import List from "@mui/material/List"; -import MenuItem from "@mui/material/MenuItem"; -import ListItemIcon from "@mui/material/ListItemIcon"; -import Typography from "@mui/material/Typography"; -import Collapse from "@mui/material/Collapse"; -import Tooltip from "@mui/material/Tooltip"; -// import { makeStyles } from "@mui/styles"; -import { useTranslate } from "react-admin"; - -/* -const useStyles = makeStyles((theme: any) => ({ - icon: { minWidth: theme.spacing(5) }, - sidebarIsOpen: { - "& a": { - paddingLeft: theme.spacing(4), - transition: "padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms", - }, - }, - sidebarIsClosed: { - "& a": { - paddingLeft: theme.spacing(2), - transition: "padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms", - }, - }, -})); -*/ -type SubMenuProps = PropsWithChildren<{ - dense: boolean; - handleToggle: () => void; - icon: ReactElement; - isOpen: boolean; - name: string; - sidebarIsOpen: boolean; -}>; - -export const SubMenu: FC = ({ - handleToggle, - sidebarIsOpen, - isOpen, - name, - icon, - children, - dense, -}: any) => { - const translate = useTranslate(); - const classes: any = {}; // = useStyles(); - - const header = ( - // @ts-ignore - - - {isOpen ? : icon} - - - {translate(name)} - - - ); - - return ( - - {sidebarIsOpen || isOpen ? ( - header - ) : ( - - {header} - - )} - - - {children} - - - - ); -}; diff --git a/apps/link/metamigo-add/_components/layout/index.ts b/apps/link/metamigo-add/_components/layout/index.ts deleted file mode 100644 index bdb5be0..0000000 --- a/apps/link/metamigo-add/_components/layout/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -"use client"; - -export { default as AppBar } from "./AppBar"; -export { Layout } from "./Layout"; -export { default as Menu } from "./Menu"; diff --git a/apps/link/metamigo-add/_components/layout/themes.ts b/apps/link/metamigo-add/_components/layout/themes.ts deleted file mode 100644 index 88ed491..0000000 --- a/apps/link/metamigo-add/_components/layout/themes.ts +++ /dev/null @@ -1,103 +0,0 @@ -export const theme = { - spacing: () => 8, - palette: { - primary: { - main: "#337799", - }, - secondary: { - light: "#5f5fc4", - main: "#283593", - dark: "#001064", - contrastText: "#fff", - }, - background: { - default: "#fff", - }, - getContrastText(color: string) { - return color === "#ffffff" ? "#000" : "#fff"; - }, - }, - shape: { - borderRadius: 5, - }, - breakpoints: { - up: (key: any) => `@media (min-width:${key})`, - down: (key: any) => `@media (max-width:${key})`, - }, - transitions: { - create(props: any) { - return `all ${props.duration}ms ${props.easing}`; - }, - easing: { - easeInOut: "cubic-bezier(0.4, 0, 0.2, 1)", - easeOut: "cubic-bezier(0.0, 0, 0.2, 1)", - easeIn: "cubic-bezier(0.4, 0, 1, 1)", - sharp: "cubic-bezier(0.4, 0, 0.6, 1)", - }, - duration: { - shortest: 150, - shorter: 200, - short: 250, - standard: 300, - complex: 375, - enteringScreen: 225, - leavingScreen: 195, - }, - }, - typography: { - fontFamily: "Poppins, sans-serif", - fontWeight: 900, - h6: { fontSize: 16, fontWeight: 600, color: "red" }, - }, - /* - overrides: { - RaMenuItemLink: { - root: { - borderLeft: "3px solid #fff", - }, - active: { - borderLeft: "3px solid #ef7706", - }, - }, - MuiPaper: { - elevation1: { - boxShadow: "none", - }, - root: { - border: "1px solid #e0e0e3", - backgroundClip: "padding-box", - }, - }, - MuiButton: { - contained: { - backgroundColor: "#fff", - color: "#4f3cc9", - boxShadow: "none", - }, - }, - MuiAppBar: { - colorSecondary: { - color: "#fff", - backgroundColor: "#337799", - border: 0, - }, - }, - MuiLinearProgress: { - colorPrimary: { - backgroundColor: "#f5f5f5", - }, - barColorPrimary: { - backgroundColor: "#d7d7d7", - }, - }, - MuiFilledInput: { - root: { - backgroundColor: "rgba(0, 0, 0, 0.04)", - "&$disabled": { - backgroundColor: "rgba(0, 0, 0, 0.04)", - }, - }, - }, - }, - */ -}; diff --git a/apps/link/metamigo-add/_components/signal/bots/Digits.module.css b/apps/link/metamigo-add/_components/signal/bots/Digits.module.css deleted file mode 100644 index 270fc93..0000000 --- a/apps/link/metamigo-add/_components/signal/bots/Digits.module.css +++ /dev/null @@ -1,27 +0,0 @@ -.input { - width: 40px; - height: 60px; - margin: 5px; - font-size: 1.4rem; - padding: 0 9px 0 12px; - border: none; - outline: none; - background: white; - font-weight: 400; - color: rgba(59, 59, 59, 0.788); - -webkit-box-shadow: 2px 2px 2px 1px #d6d6d6, -1px -1px 1px #e6e6e6; - box-shadow: 2px 2px 2px 1px #d6d6d6, -1px -1px 1px #e6e6e6; - border-radius: 5px; -} - -.group { - margin-top: 1.6rem; -} - -.hyphen { - background: black; - height: 0.1em; - width: 1em; - margin: 0 0.5em; - display: inline-block; -} diff --git a/apps/link/metamigo-add/_components/signal/bots/SignalBotCreate.tsx b/apps/link/metamigo-add/_components/signal/bots/SignalBotCreate.tsx deleted file mode 100644 index 5289bd0..0000000 --- a/apps/link/metamigo-add/_components/signal/bots/SignalBotCreate.tsx +++ /dev/null @@ -1,37 +0,0 @@ -"use client"; - -import { FC } from "react"; -import { - SimpleForm, - Create, - TextInput, - required, - CreateProps, -} from "react-admin"; -import { useSession } from "next-auth/react"; -import { validateE164Number } from "../../../_lib/phone-numbers"; - -const SignalBotCreate: FC = (props) => { - const { data: session } = useSession(); - - return ( - - - - - - - - ); -}; - -export default SignalBotCreate; diff --git a/apps/link/metamigo-add/_components/signal/bots/SignalBotEdit.tsx b/apps/link/metamigo-add/_components/signal/bots/SignalBotEdit.tsx deleted file mode 100644 index 944107e..0000000 --- a/apps/link/metamigo-add/_components/signal/bots/SignalBotEdit.tsx +++ /dev/null @@ -1,15 +0,0 @@ -"use client"; - -import { FC } from "react"; -import { SimpleForm, Edit, TextInput, required, EditProps } from "react-admin"; - -const SignalBotEdit: FC = (props) => ( - - - - - - -); - -export default SignalBotEdit; diff --git a/apps/link/metamigo-add/_components/signal/bots/SignalBotList.tsx b/apps/link/metamigo-add/_components/signal/bots/SignalBotList.tsx deleted file mode 100644 index a34514b..0000000 --- a/apps/link/metamigo-add/_components/signal/bots/SignalBotList.tsx +++ /dev/null @@ -1,26 +0,0 @@ -"use client"; - -import { FC } from "react"; -import { - List, - Datagrid, - DateField, - TextField, - BooleanField, - ListProps, -} from "react-admin"; - -const SignalBotList: FC = (props) => ( - - - - - - - - - - -); - -export default SignalBotList; diff --git a/apps/link/metamigo-add/_components/signal/bots/SignalBotShow.tsx b/apps/link/metamigo-add/_components/signal/bots/SignalBotShow.tsx deleted file mode 100644 index 94ba023..0000000 --- a/apps/link/metamigo-add/_components/signal/bots/SignalBotShow.tsx +++ /dev/null @@ -1,475 +0,0 @@ -"use client"; - -import { FC, useEffect, useState } from "react"; -import { - Show, - SimpleShowLayout, - BooleanField, - TextField, - ShowProps, - EditButton, - TopToolbar, - useTranslate, - useRefresh, -} from "react-admin"; -import { - TextField as MuiTextField, - Button, - Card, - Grid, - Dialog, - DialogActions, - DialogContent, - DialogContentText, - DialogTitle, - Typography, - Box, - CircularProgress, -} from "@mui/material"; -import { SixDigitInput } from "../../DigitInput"; -import { - sanitizeE164Number, - isValidE164Number, -} from "../../../_lib/phone-numbers"; - -const Sidebar = ({ record }: any) => { - const [phoneNumber, setPhoneNumber] = useState(""); - const [errorNumber, setErrorNumber] = useState(false); - const handlePhoneNumberChange = (event: any) => { - setPhoneNumber(event.target.value); - }; - - const [message, setMessage] = useState(""); - const handleMessageChange = (event: any) => { - setMessage(event.target.value); - }; - - const sendMessage = async (phoneNumber: string, message: string) => { - await fetch(`/api/v1/signal/bots/${record.token}/send`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ phoneNumber, message }), - }); - }; - - const resetSession = async (phoneNumber: string) => { - await fetch(`/api/v1/signal/bots/${record.token}/resetSession`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ phoneNumber }), - }); - }; - - const handleBlurNumber = () => { - setErrorNumber(!isValidE164Number(sanitizeE164Number(phoneNumber))); - }; - - const handleSend = () => { - const sanitized = sanitizeE164Number(phoneNumber); - if (isValidE164Number(sanitized)) { - setErrorNumber(false); - sendMessage(sanitized, message); - } else setErrorNumber(false); - }; - - const handleResetSession = () => { - const sanitized = sanitizeE164Number(phoneNumber); - if (isValidE164Number(sanitized)) { - setErrorNumber(false); - resetSession(sanitized); - } else setErrorNumber(false); - }; - - return ( - - - - Send message - - - - - - - - - - - - - - ); -}; - -const MODE = { - SMS: "SMS", - VOICE: "VOICE", -}; - -const handleRequestCode = async ({ - verifyMode, - id, - onSuccess, - onError, - captchaCode = undefined, -}: any) => { - if (verifyMode === MODE.SMS) console.log("REQUESTING sms"); - else if (verifyMode === MODE.VOICE) console.log("REQUESTING voice"); - let response: Response; - let url = `/api/v1/signal/bots/${id}/requestCode?mode=${verifyMode.toLowerCase()}`; - if (captchaCode) { - url += `&captcha=${captchaCode}`; - } - - try { - response = await fetch(url, { - method: "GET", - headers: { - "Content-Type": "application/json", - }, - }); - - if (response && response.ok) { - onSuccess(); - } else { - onError(response.status || 400); - } - } catch (error: any) { - console.error("Failed to request verification code:", error); - } -}; - -const VerificationCodeRequest = ({ - verifyMode, - data, - onSuccess, - onError, -}: any) => { - useEffect(() => { - (async () => { - await handleRequestCode({ - verifyMode, - id: data.id, - onSuccess, - onError, - }); - })(); - }, [data.id, onError, onSuccess, verifyMode]); - - return ( - <> - - Requesting code for {data.phoneNumber} - - - - - - - - - - ); -}; - -const VerificationCaptcha = ({ - verifyMode, - data, - onSuccess, - onError, - handleClose, -}: any) => { - const [code, setCode] = useState(undefined); - const [isSubmitting, setSubmitting] = useState(false); - - const handleSubmitVerification = async () => { - setSubmitting(true); - await handleRequestCode({ - verifyMode, - id: data.id, - onSuccess, - onError, - captchaCode: code, - }); - setSubmitting(false); - }; - - const handleCaptchaChange = (value: any) => { - if (value) - setCode( - value - .replace(/signalcaptcha:\/\//, "") - .replace("“", "") - .replace("”", "") - .trim(), - ); - else setCode(value); - }; - - return ( - <> - - Captcha for {data.phoneNumber} - - - handleCaptchaChange(ev.target.value)} - /> - - - {isSubmitting && } - {!isSubmitting && ( - - )} - {!isSubmitting && ( - - )} - - - ); -}; - -const VerificationCodeInput = ({ - data, - verifyMode, - handleClose, - handleRestartVerification, - confirmVerification, -}: any) => { - const [code, setValue] = useState(""); - const [isSubmitting, setSubmitting] = useState(false); - const [isValid, setValid] = useState(false); - const [submissionError, setSubmissionError] = useState(undefined); - const translate = useTranslate(); - - const validator = (v: any) => v.trim().length === 6; - - const handleValueChange = (newValue: any) => { - setValue(newValue); - setValid(validator(newValue)); - }; - - const handleSubmitVerification = async () => { - setSubmitting(true); - // await sleep(2000) - const response = await fetch( - `/api/v1/signal/bots/${data.id}/register?code=${code}`, - { - method: "GET", - headers: { - "Content-Type": "application/json", - }, - }, - ); - setSubmitting(false); - const responseBody = await response.json(); - console.log(responseBody); - if (response.status === 200) { - confirmVerification(); - } else if (responseBody.message) - setSubmissionError(`Error: ${responseBody.message}`); - else { - setSubmissionError( - "There was an error, sorry about that. Please try again later or contact support.", - ); - } - }; - - const title = - verifyMode === MODE.SMS - ? translate("resources.signalBots.verifyDialog.sms", { - phoneNumber: data.phoneNumber, - }) - : translate("resources.signalBots.verifyDialog.voice", { - phoneNumber: data.phoneNumber, - }); - return ( - <> - - Verify {data.phoneNumber} - - - {title} - - {submissionError && ( - - {submissionError} - - )} - - - {isSubmitting && } - {!isSubmitting && ( - - )} - {!isSubmitting && ( - - )} - {!isSubmitting && ( - - )} - - - ); -}; - -const VerificationCodeDialog = (props: any) => { - const [stage, setStage] = useState("request"); - const onRequestSuccess = () => setStage("verify"); - const onRestartVerification = () => setStage("request"); - const handleClose = () => { - setStage("request"); - props.handleClose(); - }; - - const onError = (code: number) => { - if (code === 402 || code === 500) { - setStage("captcha"); - } else { - setStage("request"); - } - }; - - return ( - - {props.open && stage === "request" && ( - - )} - {props.open && stage === "verify" && ( - - )} - {props.open && stage === "captcha" && ( - - )} - - ); -}; - -const SignalBotShowActions = ({ data }: any) => { - const [open, setOpen] = useState(false); - const [verifyMode, setVerifyMode] = useState(""); - const refresh = useRefresh(); - - const handleOpenSMS = () => { - setVerifyMode(MODE.SMS); - setOpen(true); - }; - - const handleOpenVoice = () => { - setVerifyMode(MODE.VOICE); - setOpen(true); - }; - - const handleClose = () => setOpen(false); - const confirmVerification = () => { - setOpen(false); - refresh(); - }; - - return ( - - - {data && !data.isVerified && ( - - )} - {data && !data.isVerified && ( - - )} - {data && !data.isVerified && ( - - )} - - ); -}; - -const SignalBotShow: FC = (props) => ( - } - {...props} - title="Signal Bot" - aside={} - > - - - - - - - -); - -export default SignalBotShow; diff --git a/apps/link/metamigo-add/_components/signal/bots/index.ts b/apps/link/metamigo-add/_components/signal/bots/index.ts deleted file mode 100644 index 85dd098..0000000 --- a/apps/link/metamigo-add/_components/signal/bots/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -"use client"; - -import SignalBotIcon from "@mui/icons-material/ChatOutlined"; -import SignalBotList from "./SignalBotList"; -import SignalBotEdit from "./SignalBotEdit"; -import SignalBotCreate from "./SignalBotCreate"; -import SignalBotShow from "./SignalBotShow"; - -// eslint-disable-next-line import/no-anonymous-default-export -export default { - list: SignalBotList, - create: SignalBotCreate, - edit: SignalBotEdit, - show: SignalBotShow, - icon: SignalBotIcon, -}; diff --git a/apps/link/metamigo-add/_components/signal/bots/shared.tsx b/apps/link/metamigo-add/_components/signal/bots/shared.tsx deleted file mode 100644 index dd34357..0000000 --- a/apps/link/metamigo-add/_components/signal/bots/shared.tsx +++ /dev/null @@ -1,34 +0,0 @@ -"use client"; - -import { FC } from "react"; -/* eslint-disable react/display-name */ -import { - SelectInput, - required, - ReferenceInput, - ReferenceField, - TextField, -} from "react-admin"; - -export const SignalBotSelectInput = - (source: string): FC => - () => - ( - - - - ); - -export const SignalBotField = - (source: string): FC => - () => - ( - - - - ); diff --git a/apps/link/metamigo-add/_components/users/UserCreate.tsx b/apps/link/metamigo-add/_components/users/UserCreate.tsx deleted file mode 100644 index 00a210b..0000000 --- a/apps/link/metamigo-add/_components/users/UserCreate.tsx +++ /dev/null @@ -1,29 +0,0 @@ -"use client"; - -import { FC } from "react"; -import { - SimpleForm, - TextInput, - BooleanInput, - Create, - CreateProps, -} from "react-admin"; -import { useSession } from "next-auth/react"; -import { UserRoleInput } from "./shared"; - -const UserCreate: FC = () => { - const { data: session } = useSession(); - return ( - - - - - - - - - - ); -}; - -export default UserCreate; diff --git a/apps/link/metamigo-add/_components/users/UserEdit.tsx b/apps/link/metamigo-add/_components/users/UserEdit.tsx deleted file mode 100644 index 2972565..0000000 --- a/apps/link/metamigo-add/_components/users/UserEdit.tsx +++ /dev/null @@ -1,73 +0,0 @@ -"use client"; - -// import { makeStyles } from "@mui/styles"; -import { - SimpleForm, - TextInput, - BooleanInput, - DateInput, - Edit, - Toolbar, - SaveButton, - DeleteButton, - useRedirect, - useRecordContext, -} from "react-admin"; -import { useSession } from "next-auth/react"; -import { UserRoleInput } from "./shared"; - -/* -const useStyles = makeStyles((_theme: any) => ({ - defaultToolbar: { - flex: 1, - display: "flex", - justifyContent: "space-between", - }, -})); -*/ - -const UserEditToolbar = (props: any) => { - const classes: any = {}; // = useStyles(); - const redirect = useRedirect(); - const record = useRecordContext(); - const { session } = props; - - const shouldDisableDelete = - !session || !session.user || session.user.id === record.id; - - return ( - - redirect("/users") }} - /> - - - ); -}; - -const UserTitle = ({ record }: { record?: any }) => { - let title = ""; - if (record) title = record.name ?? record.email; - return User {title}; -}; - -const UserEdit = () => { - const { data: session } = useSession(); - - return ( - }> - }> - - - - - - - - - - ); -}; - -export default UserEdit; diff --git a/apps/link/metamigo-add/_components/users/UserList.tsx b/apps/link/metamigo-add/_components/users/UserList.tsx deleted file mode 100644 index 69834d5..0000000 --- a/apps/link/metamigo-add/_components/users/UserList.tsx +++ /dev/null @@ -1,30 +0,0 @@ -"use client"; - -import { FC } from "react"; -import { - List, - Datagrid, - ImageField, - DateField, - TextField, - EmailField, - BooleanField, -} from "react-admin"; - -const UserList: FC = () => ( - - - - - - - - - - - - - -); - -export default UserList; diff --git a/apps/link/metamigo-add/_components/users/index.ts b/apps/link/metamigo-add/_components/users/index.ts deleted file mode 100644 index 37b7add..0000000 --- a/apps/link/metamigo-add/_components/users/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -"use client"; - -import UserIcon from "@mui/icons-material/People"; -import UserList from "./UserList"; -import UserEdit from "./UserEdit"; -import UserCreate from "./UserCreate"; - -// eslint-disable-next-line import/no-anonymous-default-export -export default { - list: UserList, - create: UserCreate, - edit: UserEdit, - icon: UserIcon, -}; diff --git a/apps/link/metamigo-add/_components/users/shared.tsx b/apps/link/metamigo-add/_components/users/shared.tsx deleted file mode 100644 index 1d841f4..0000000 --- a/apps/link/metamigo-add/_components/users/shared.tsx +++ /dev/null @@ -1,19 +0,0 @@ -"use client"; - -import { SelectInput, useRecordContext } from "react-admin"; - -export const UserRoleInput = (props: any) => { - const record = useRecordContext(); - return ( - - ); -}; diff --git a/apps/link/metamigo-add/_components/voice/providers/ProviderCreate.tsx b/apps/link/metamigo-add/_components/voice/providers/ProviderCreate.tsx deleted file mode 100644 index 599ad26..0000000 --- a/apps/link/metamigo-add/_components/voice/providers/ProviderCreate.tsx +++ /dev/null @@ -1,33 +0,0 @@ -"use client"; - -import { - SimpleForm, - TextInput, - Create, - PasswordInput, - CreateProps, -} from "react-admin"; -import { ProviderKindInput } from "./shared"; - -// import TextField from "@mui/material/TextField"; - -/* const TwilioCredentialsInput = () => ( - - - - -); */ - -const ProviderCreate = (props: CreateProps) => ( - - - - - - - - - -); - -export default ProviderCreate; diff --git a/apps/link/metamigo-add/_components/voice/providers/ProviderEdit.tsx b/apps/link/metamigo-add/_components/voice/providers/ProviderEdit.tsx deleted file mode 100644 index 9cf238e..0000000 --- a/apps/link/metamigo-add/_components/voice/providers/ProviderEdit.tsx +++ /dev/null @@ -1,31 +0,0 @@ -"use client"; - -import { - SimpleForm, - TextInput, - PasswordInput, - Edit, - EditProps, -} from "react-admin"; -import { ProviderKindInput } from "./shared"; - -const ProviderTitle = ({ record }: { record?: any }) => { - let title = ""; - if (record) title = record.name ?? record.email; - return Provider {title}; -}; - -const ProviderEdit = (props: EditProps) => ( - } {...props}> - - - - - - - - - -); - -export default ProviderEdit; diff --git a/apps/link/metamigo-add/_components/voice/providers/ProviderList.tsx b/apps/link/metamigo-add/_components/voice/providers/ProviderList.tsx deleted file mode 100644 index 2839787..0000000 --- a/apps/link/metamigo-add/_components/voice/providers/ProviderList.tsx +++ /dev/null @@ -1,16 +0,0 @@ -"use client"; - -import { List, Datagrid, DateField, TextField, ListProps } from "react-admin"; - -const ProviderList = (props: ListProps) => ( - - - - - - - - -); - -export default ProviderList; diff --git a/apps/link/metamigo-add/_components/voice/providers/index.ts b/apps/link/metamigo-add/_components/voice/providers/index.ts deleted file mode 100644 index 3d9916f..0000000 --- a/apps/link/metamigo-add/_components/voice/providers/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -"use client"; - -/* eslint-disable import/no-anonymous-default-export */ -import ProviderIcon from "@mui/icons-material/Business"; -import ProviderList from "./ProviderList"; -import ProviderEdit from "./ProviderEdit"; -import ProviderCreate from "./ProviderCreate"; - -export default { - list: ProviderList, - create: ProviderCreate, - edit: ProviderEdit, - icon: ProviderIcon, -}; diff --git a/apps/link/metamigo-add/_components/voice/providers/shared.tsx b/apps/link/metamigo-add/_components/voice/providers/shared.tsx deleted file mode 100644 index 4b11221..0000000 --- a/apps/link/metamigo-add/_components/voice/providers/shared.tsx +++ /dev/null @@ -1,11 +0,0 @@ -"use client"; - -import { SelectInput } from "react-admin"; - -export const ProviderKindInput = (props: any) => ( - -); diff --git a/apps/link/metamigo-add/_components/voice/voicelines/MicInput.module.css b/apps/link/metamigo-add/_components/voice/voicelines/MicInput.module.css deleted file mode 100644 index 45a3927..0000000 --- a/apps/link/metamigo-add/_components/voice/voicelines/MicInput.module.css +++ /dev/null @@ -1,43 +0,0 @@ -.voiceWaveWrapper { - width: 100%; - max-height: 50px; - display: flex; - justify-content: center; -} -.hidden { - display: none; -} - -.visible { - display: block; -} -.buttonWrapper { - display: flex; - align-items: center; - justify-content: center; -} - -.playerWrapper { - display: flex; - justify-content: center; - margin-top: 20px; -} - -.recordTime { - align-self: center; - width: 66px; - height: 18px; - margin-top: 10px; - font-family: "sans"; - font-style: normal; - font-weight: normal; - font-size: 15px; - line-height: 18px; - color: #000; -} -.content { - width: 100%; - display: flex; - flex-direction: column; - justify-content: space-between; -} diff --git a/apps/link/metamigo-add/_components/voice/voicelines/MicInput.tsx b/apps/link/metamigo-add/_components/voice/voicelines/MicInput.tsx deleted file mode 100644 index a99ba12..0000000 --- a/apps/link/metamigo-add/_components/voice/voicelines/MicInput.tsx +++ /dev/null @@ -1,152 +0,0 @@ -"use client"; - -import { useInput } from "react-admin"; -import React, { useState } from "react"; -import dynamic from "next/dynamic"; -import MicIcon from "@mui/icons-material/Mic"; -import StopIcon from "@mui/icons-material/Stop"; -import Button from "@mui/material/Button"; -// import { useTheme } from "@mui/styles"; // makeStyles, -// import AudioPlayer from "material-ui-audio-player"; -import { useStopwatch } from "react-timer-hook"; -import style from "./MicInput.module.css"; -// import type { ReactMicProps } from "react-mic"; - -const ReactMic = dynamic( - () => { - throw new Error( - "MIC INPUT FEATURE IS DISABLED", - ); /* return import("react-mic").then((mod) => mod.ReactMic); */ - }, - { ssr: false }, -); - -const blobToDataUri = (blob: Blob) => { - const reader = new FileReader(); - reader.readAsDataURL(blob); - return new Promise((resolve) => { - reader.onloadend = () => { - resolve(reader.result); - }; - }); -}; - -const dataUriToObj = (dataUri: string) => { - const [prefix, base64] = dataUri.split(","); - const mime = prefix.slice(5, prefix.indexOf(";")); - - const result: any = {}; - result[mime] = base64; - return result; -}; - -const blobToResult = async (blob: Blob) => { - const result = dataUriToObj((await blobToDataUri(blob)) as string); - return result; -}; - -/* const resultToDataUri = (result: Record): string => { - if (!result || !result["audio/webm"]) return ""; - const base64 = result["audio/webm"]; - const r = `data:audio/webm;base64,${base64}`; - return r; -}; */ - -const MicInput = (props: any) => { - const { seconds, minutes, hours, start, reset, pause } = useStopwatch(); - const theme: any = {}; // useTheme(); - const { - field: { onChange }, // value - } = useInput(props); - - const [record, setRecorder] = useState({ record: false }); - // const decodedValue = resultToDataUri(value); - const startRecording = () => { - setRecorder({ record: true }); - reset(); - start(); - }; - - const stopRecording = () => { - setRecorder({ record: false }); - pause(); - }; - - async function onData(recordedBlob: any) { - console.log({ recordedBlob }); - } - - async function onStop(recordedBlob: any) { - const result = await blobToResult(recordedBlob.blob); - onChange(result); - } - - const isRecording = record.record; - // const canPlay = !isRecording && decodedValue; - const duration = `${hours.toString().padStart(2, "0")}:${minutes - .toString() - .padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`; - - /* - const useStyles = makeStyles(() => ({ - volumeIcon: { - display: "none", - }, - mainSlider: { - display: "none", - }, - })); -*/ - return ( -
-
-
- -
-
{isRecording ?

Recording... {duration}

: ""}
- -
- {isRecording ? ( - - ) : ( - - )} -
-
- {/* canPlay && ( - - ) */} -
-
-
- ); -}; - -export default MicInput; diff --git a/apps/link/metamigo-add/_components/voice/voicelines/VoiceLineCreate.tsx b/apps/link/metamigo-add/_components/voice/voicelines/VoiceLineCreate.tsx deleted file mode 100644 index 9c4b8dd..0000000 --- a/apps/link/metamigo-add/_components/voice/voicelines/VoiceLineCreate.tsx +++ /dev/null @@ -1,54 +0,0 @@ -"use client"; - -import { - SimpleForm, - Create, - FormDataConsumer, - SelectInput, - BooleanInput, - ReferenceInput, - required, - CreateProps, -} from "react-admin"; -import TwilioLanguages from "./twilio-languages"; -import { - PromptInput, - VoiceInput, - AvailableNumbersInput, - populateNumber, -} from "./shared"; -import MicInput from "./MicInput"; - -const VoiceLineCreate = (props: CreateProps) => ( - - - - `${p.kind}: ${p.name}`} /> - - - {AvailableNumbersInput} - - - - {VoiceInput} - - - - {PromptInput} - - - - - -); - -export default VoiceLineCreate; diff --git a/apps/link/metamigo-add/_components/voice/voicelines/VoiceLineEdit.tsx b/apps/link/metamigo-add/_components/voice/voicelines/VoiceLineEdit.tsx deleted file mode 100644 index 0223c8b..0000000 --- a/apps/link/metamigo-add/_components/voice/voicelines/VoiceLineEdit.tsx +++ /dev/null @@ -1,51 +0,0 @@ -"use client"; - -import { - SimpleForm, - TextInput, - Edit, - FormDataConsumer, - SelectInput, - BooleanInput, - ReferenceInput, - required, - EditProps, -} from "react-admin"; -import TwilioLanguages from "./twilio-languages"; -import { VoiceInput, PromptInput } from "./shared"; -import MicInput from "./MicInput"; - -const VoiceLineTitle = ({ record }: { record?: any }) => { - let title = ""; - if (record) title = record.name ?? record.email; - return VoiceLine {title}; -}; - -const VoiceLineEdit = (props: EditProps) => ( - } {...props}> - - - `${p.kind}: ${p.name}`} /> - - - - - - {VoiceInput} - - - {PromptInput} - - - - - -); - -export default VoiceLineEdit; diff --git a/apps/link/metamigo-add/_components/voice/voicelines/VoiceLineList.tsx b/apps/link/metamigo-add/_components/voice/voicelines/VoiceLineList.tsx deleted file mode 100644 index 66cbc53..0000000 --- a/apps/link/metamigo-add/_components/voice/voicelines/VoiceLineList.tsx +++ /dev/null @@ -1,32 +0,0 @@ -"use client"; - -import { - List, - ListProps, - Datagrid, - DateField, - FunctionField, - TextField, - ReferenceField, -} from "react-admin"; - -const VoiceLineList = (props: ListProps) => ( - - - - `${p.kind}: ${p.name}`} /> - - - - - - - - -); - -export default VoiceLineList; diff --git a/apps/link/metamigo-add/_components/voice/voicelines/index.ts b/apps/link/metamigo-add/_components/voice/voicelines/index.ts deleted file mode 100644 index e778f97..0000000 --- a/apps/link/metamigo-add/_components/voice/voicelines/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -"use client"; - -import VoiceLineIcon from "@mui/icons-material/PhoneCallback"; -import VoiceLineList from "./VoiceLineList"; -import VoiceLineEdit from "./VoiceLineEdit"; -import VoiceLineCreate from "./VoiceLineCreate"; - -// eslint-disable-next-line import/no-anonymous-default-export -export default { - list: VoiceLineList, - create: VoiceLineCreate, - edit: VoiceLineEdit, - icon: VoiceLineIcon, -}; diff --git a/apps/link/metamigo-add/_components/voice/voicelines/recorder.module.css b/apps/link/metamigo-add/_components/voice/voicelines/recorder.module.css deleted file mode 100644 index 2a6be74..0000000 --- a/apps/link/metamigo-add/_components/voice/voicelines/recorder.module.css +++ /dev/null @@ -1,149 +0,0 @@ -/* add css module styles here (optional) */ -@import url("https://fonts.googleapis.com/css?family=Lato:400,700&display=swap"); -.recorder_library_box, -.recorder_library_box * { - box-sizing: border-box; - padding: 0; - margin: 0; - font-family: "Lato", sans-serif; -} -.recorder_library_box .recorder_box { - width: 100%; - margin: 0 auto; - padding: 30px 0; -} -.recorder_library_box .recorder_box_inner { - min-height: 400px; - background: #212121; - border-radius: 0 0 3px 3px; - display: flex; - flex-direction: column; -} -.recorder_library_box .mic_icon { - width: 60px; - display: flex; - height: 60px; - position: fixed; - justify-content: center; - align-items: center; - background: rgb(245, 0, 87); - border-radius: 50%; - bottom: 65px; - right: 20%; - color: #fff; - font-size: 25px; -} -.recorder_library_box .reco_header { - display: flex; - justify-content: space-between; - background: #bd9f61; - align-items: center; - padding: 20px 20px; - color: #fff; - border-radius: 3px 3px 0 0; -} -.recorder_library_box .reco_header .h2 { - font-weight: 400; -} -.recorder_library_box .reco_header .close_icons { - font-size: 20px; - width: 40px; - height: 40px; - border-radius: 50%; - justify-content: center; - align-items: center; - display: flex; - cursor: pointer; - transition: 0.5s ease all; -} -.recorder_library_box .reco_header .close_icons:hover { - background: rgba(123, 118, 106, 0.21); -} - -.recorder_library_box .record_section { - position: relative; - flex: 1; -} -.recorder_library_box .record_section .mic_icon { - position: absolute; - left: 50%; - transform: translateX(-50%); - bottom: 20px; -} -.recorder_library_box .record_section .duration_section { - position: absolute; - left: 50%; - transform: translate(-50%); - bottom: 100px; -} - -.recorder_library_box .btn_wrapper { - margin: 20px 30px; -} -.recorder_library_box .btn_wrapper .btn { - border: 0; - outline: 0; - padding: 10px 20px; - border-radius: 20px; - background: #185fec; - color: #fff; - cursor: pointer; - border: 1px solid #185fec; - transition: 0.3s ease all; -} -.recorder_library_box .btn_wrapper .btn:hover { - background: #fff; - color: #185fec; -} -.recorder_library_box .btn_wrapper .clear_btn { - background: #fff; - color: #185fec; - margin-left: 15px; -} -.recorder_library_box .btn_wrapper .clear_btn:hover { - background: #185fec; - color: #fff; -} -.recorder_library_box .duration { - text-align: center; -} -.recorder_library_box .recorder_page_box { - min-height: calc(100vh - 128px); - background: #fff; -} - -.recorder_library_box .duration * { - color: #fff; - font-size: 60px; -} -.recorder_library_box .duration_section .help { - color: #fff; -} - -.recorder_library_box .record_controller { - position: absolute; - left: 50%; - transform: translate(-50%); - bottom: 0px; - padding: 20px 0; - display: flex; -} - -.recorder_library_box .record_controller .icons { - width: 50px; - display: flex; - height: 50px; - justify-content: center; - align-items: center; - border-radius: 50%; - color: #fff; - margin-right: 15px; - font-size: 20px; -} - -.recorder_library_box .record_controller .stop { - background: #940505; -} -.recorder_library_box .record_controller .pause { - background: #9c6702; -} diff --git a/apps/link/metamigo-add/_components/voice/voicelines/shared.tsx b/apps/link/metamigo-add/_components/voice/voicelines/shared.tsx deleted file mode 100644 index 8a981bc..0000000 --- a/apps/link/metamigo-add/_components/voice/voicelines/shared.tsx +++ /dev/null @@ -1,303 +0,0 @@ -"use client"; - -/* eslint-disable react/display-name */ -import React, { useState, useEffect } from "react"; -import PlayIcon from "@mui/icons-material/PlayCircleFilled"; -import { - TextInput, - SelectInput, - required, - useTranslate, - useNotify, - ReferenceInput, - ReferenceField, - TextField, -} from "react-admin"; -import { IconButton, CircularProgress } from "@mui/material"; -import absoluteUrl from "../../../_lib/absolute-url"; -import TwilioLanguages from "./twilio-languages"; - -type TTSProvider = (voice: any, language: any, prompt: any) => Promise; - -const tts = async (providerId: any): Promise => { - const r = await fetch( - `/api/v1/voice/twilio/text-to-speech-token/${providerId}`, - ); - const { token } = await r.json(); - const twilioClient = await import("twilio-client"); - return (voice, language, prompt): Promise => - new Promise((resolve) => { - if (!voice || !language || !prompt) resolve(); - const { Device } = twilioClient; - const device = new Device(); - const silence = `${absoluteUrl().origin}/static/silence.mp3`; - device.setup(token, { - codecPrefences: ["opus", "pcmu"], - enableRingingState: false, - fakeLocalDTMF: true, - disableAudioContextSounds: true, - sounds: { - disconnect: silence, - incoming: silence, - outgoing: silence, - }, - }); - device.on("ready", (device: any) => { - device.connect({ language, voice, prompt }); - }); - device.on("disconnect", () => resolve()); - device.on("error", () => resolve()); - }); -}; - -export const TextToSpeechButton = ({ form }: any) => { - const { providerId, language, voice, promptText: prompt } = form.formData; - const [loading, setLoading] = useState(false); - const [ttsProvider, setTTSProvider] = useState< - undefined | { provider: TTSProvider } - >(undefined); - const [playText, setPlayText] = useState< - undefined | { func: () => Promise } - >(undefined); - useEffect(() => { - (async () => { - if (providerId) { - setLoading(true); - setTTSProvider({ provider: await tts(providerId) }); - setLoading(false); - } - })(); - }, [providerId]); - - useEffect(() => { - (async () => { - setPlayText({ - async func() { - setLoading(true); - if (ttsProvider) await ttsProvider.provider(voice, language, prompt); - setLoading(false); - }, - }); - })(); - }, [prompt, language, voice, ttsProvider, ttsProvider?.provider]); - - const disabled = !(providerId && prompt?.length >= 2 && voice && language); - /* TODO add this back to IconButtonwhen we know how to extend MUI theme and appease typescript - variant="contained" - */ - return ( - - {!loading && } - {loading && } - - ); -}; - -export const PromptInput = (form: any, ...rest: any[]) => ( - }} - {...rest} - /> -); - -const validateVoice = (_args: any, values: any) => { - if (!values.language) return "validation.language"; - if (!values.voice) return "validation.voice"; - const availableVoices = TwilioLanguages.voices[values.language]; - const found = - availableVoices.filter((v: any) => v.id === values.voice).length === 1; - if (!found) return "validation.voice"; - - return undefined; -}; - -export const VoiceInput = (form: any, ...rest: any[]) => { - const voice = TwilioLanguages.voices[form.formData.language] || []; - return ( - // @ts-expect-error - - ); -}; - -let noAvailableNumbers = false; -let availableNumbers: any[] = []; - -const getAvailableNumbers = async (providerId: string) => { - try { - const r = await fetch(`/api/v1/voice/providers/${providerId}/freeNumbers`); - availableNumbers = await r.json(); - noAvailableNumbers = availableNumbers.length === 0; - return availableNumbers; - } catch (error) { - console.error( - `Could not fetch available numbers for provider ${providerId} - ${error}`, - ); - return []; - } -}; - -const sidToNumber = (sid: any) => - availableNumbers.filter(({ id }) => id === sid).map(({ name }) => name)[0]; - -export const populateNumber = (data: any) => ({ - ...data, - number: sidToNumber(data.providerLineSid), -}); - -const hasNumbers = ( - _args: any, - _value: any, - _values: any, - _translate: any, - ..._props: any[] -) => { - if (noAvailableNumbers) return "validation.noAvailableNumbers"; - - return undefined; -}; - -export const AvailableNumbersInput = (form: any, ...rest: any[]) => { - const { - // @ts-expect-error: non-existent property - meta: { touched, error } = {}, - // @ts-expect-error: non-existent property - input: { ...inputProps }, - ...props - } = rest; - const translate = useTranslate(); - const notify = useNotify(); - const [loading, setLoading] = useState(false); - const [choices, setChoices] = useState({}); - // @ts-expect-error: Invalid return type - useEffect(async () => { - if (form && form.formData && form.formData.providerId) { - setLoading(true); - const choices = await getAvailableNumbers(form.formData.providerId); - setChoices({ - choices, - helperText: noAvailableNumbers - ? translate("validation.noAvailableNumbers") - : "", - }); - if (noAvailableNumbers) - notify("validation.noAvailableNumbers", { type: "error" }); - setLoading(false); - } - }, [form, notify, translate]); - - return ( - <> - - {loading && } - - ); -}; - -/* -const voiceLineName = voiceLine => { - return voiceLine.number -} -const getVoiceLineChoices = async ():Promise => { - try { - const r = await fetch(`/api/v1/voice/voice-line`); - const lines = await r.json(); - if(lines.data?.length > 0) { - return lines.data.map(voiceLine => ({"id": voiceLine.id, "name": voiceLineName(voiceLine)})) - } - return []; - } catch (error) { - console.error( - `Could not fetch voice lines error: ${error}` - ); - return []; - } -} - -export const AsyncSelectInput = (choiceLoader: () => Promise, label, source, translationEmpty,) => (form, ...rest) => { - const { - meta: { touched, error } = {}, - input: { ...inputProps }, - ...props - } = rest; - - const translate = useTranslate(); - const notify = useNotify(); - const [loading, setLoading] = useState(false); - const [choices, setChoices] = useState({choices: []}); - useEffect(() => { - (async () => { - setLoading(true); - //const items = await choiceLoader() - const items = [{"id": "testing", "name": "OMG"}] - setChoices({ - choices: items, - helperText: items.length === 0 - ? translate(translationEmpty) - : "", - }); - if (items.length === 0) notify(translationEmpty, "error"); - setLoading(false); - })()}, [form && form.formData ? form.formData.providerId : undefined]); - - const isNotEmpty = () => { - if (choices.choices.length === 0) return translationEmpty; - return undefined; - }; - return ( - <> - {choices.choices.length > 0 && - } - {loading && } - - ) -} -export const VoiceLineSelectInput = AsyncSelectInput(getVoiceLineChoices, "Voice Line", "backendId", "validation.noVoiceLines" ) -*/ - -export const VoiceLineSelectInput = (source: string) => () => ( - - - -); - -export const VoiceLineField = (source: string) => () => ( - - - -); diff --git a/apps/link/metamigo-add/_components/voice/voicelines/twilio-languages.ts b/apps/link/metamigo-add/_components/voice/voicelines/twilio-languages.ts deleted file mode 100644 index 490b9d2..0000000 --- a/apps/link/metamigo-add/_components/voice/voicelines/twilio-languages.ts +++ /dev/null @@ -1,65 +0,0 @@ -const languages = { - languages: [ - { id: "arb", name: "Arabic" }, - { id: "cy-GB", name: "Welsh" }, - { id: "da-DK", name: "Danish" }, - { id: "de-DE", name: "German" }, - { id: "en-US", name: "English (US)" }, - { id: "en-AU", name: "English (Australian)" }, - { id: "en-GB", name: "English (British)" }, - { id: "en-GB-WLS", name: "English (Welsh)" }, - { id: "en-IN", name: "English (Indian)" }, - { id: "es-ES", name: "Spanish (Castilian)" }, - { id: "es-MX", name: "Spanish (Mexico)" }, - { id: "es-US", name: "Spanish (Latin American)" }, - { id: "fr-CA", name: "French (Canadian)" }, - { id: "fr-FR", name: "French" }, - { id: "hi-IN", name: "Hindi" }, - { id: "is-IS", name: "Icelandic" }, - { id: "it-IT", name: "Italian" }, - { id: "ja-JP", name: "Japanese" }, - { id: "ko-KR", name: "Korean" }, - { id: "nb-NO", name: "Norwegian" }, - { id: "nl-NL", name: "Dutch" }, - { id: "pl-PL", name: "Polish" }, - { id: "pt-BR", name: "Portuguese (Brazilian)" }, - { id: "pt-PT", name: "Portuguese (European)" }, - { id: "ro-RO", name: "Romanian" }, - { id: "ru-RU", name: "Russian" }, - { id: "sv-SE", name: "Swedish" }, - { id: "tr-TR", name: "Turkish" }, - { id: "zh-CN", name: "Chinese (Mandarin)" }, - ], - voices: { - arb: [{ id: "Polly.Zeina", name: "Zeina" }], - "cy-GB": [{ id: "Polly.Gwyneth", name: "Gwyneth" }], - "da-DK": [{ id: "Polly.Naja", name: "Naja" }], - "de-DE": [{ id: "Polly.Marlene", name: "Marlene" }], - "en-US": [{ id: "Polly.Salli", name: "Salli" }], - "en-AU": [{ id: "Polly.Nicole", name: "Nicole" }], - "en-GB": [{ id: "Polly.Amy", name: "Amy" }], - "en-GB-WLS": [{ id: "Polly.Geraint", name: "Geraint" }], - "en-IN": [{ id: "Polly.Aditi", name: "Aditi" }], - "es-ES": [{ id: "Polly.Conchita", name: "Conchita" }], - "es-MX": [{ id: "Polly.Mia", name: "Mia" }], - "es-US": [{ id: "Polly.Penelope", name: "Penelope" }], - "fr-CA": [{ id: "Polly.Chantal", name: "Chantal" }], - "fr-FR": [{ id: "Polly.Celine", name: "Celine" }], - "hi-IN": [{ id: "Polly.Aditi", name: "Aditi" }], - "is-IS": [{ id: "Polly.Dora", name: "Dora" }], - "it-IT": [{ id: "Polly.Carla", name: "Carla" }], - "ja-JP": [{ id: "Polly.Mizuki", name: "Mizuki" }], - "ko-KR": [{ id: "Polly.Seoyeon", name: "Seoyeon" }], - "nb-NO": [{ id: "Polly.Liv", name: "Liv" }], - "nl-NL": [{ id: "Polly.Lotte", name: "Lotte" }], - "pl-PL": [{ id: "Polly.Ewa", name: "Ewa" }], - "pt-BR": [{ id: "Polly.Vitoria", name: "Vitoria" }], - "pt-PT": [{ id: "Polly.Ines", name: "Ines" }], - "ro-RO": [{ id: "Polly.Carmen", name: "Carmen" }], - "ru-RU": [{ id: "Polly.Tatyana", name: "Tatyana" }], - "sv-SE": [{ id: "Polly.Astrid", name: "Astrid" }], - "tr-TR": [{ id: "Polly.Filiz", name: "Filiz" }], - "zh-CN": [{ id: "Polly.Zhiyu", name: "Zhiyu" }], - }, -}; -export default languages; diff --git a/apps/link/metamigo-add/_components/webhooks/WebhookCreate.tsx b/apps/link/metamigo-add/_components/webhooks/WebhookCreate.tsx deleted file mode 100644 index d525f5a..0000000 --- a/apps/link/metamigo-add/_components/webhooks/WebhookCreate.tsx +++ /dev/null @@ -1,53 +0,0 @@ -"use client"; - -import { - SimpleForm, - FormDataConsumer, - TextInput, - Create, - ArrayInput, - SimpleFormIterator, - regex, - required, - CreateProps, -} from "react-admin"; -import { BackendTypeInput, BackendIdInput, HttpMethodInput } from "./shared"; -/* - - - - - -*/ -const WebhookCreate = (props: CreateProps) => ( - - - - - - {BackendIdInput} - - - - - - - - - - - -); - -export default WebhookCreate; diff --git a/apps/link/metamigo-add/_components/webhooks/WebhookEdit.tsx b/apps/link/metamigo-add/_components/webhooks/WebhookEdit.tsx deleted file mode 100644 index 44818b7..0000000 --- a/apps/link/metamigo-add/_components/webhooks/WebhookEdit.tsx +++ /dev/null @@ -1,48 +0,0 @@ -"use client"; - -import { - SimpleForm, - TextInput, - Edit, - ArrayInput, - SimpleFormIterator, - regex, - required, - EditProps, - FormDataConsumer, -} from "react-admin"; -import { BackendTypeInput, BackendIdInput, HttpMethodInput } from "./shared"; - -const WebhookTitle = ({ record }: any) => { - let title = ""; - if (record) title = record.name ?? record.email; - return Webhook {title}; -}; - -const WebhookEdit = (props: EditProps) => ( - } {...props}> - - - - - {BackendIdInput} - - - - - - - - - - - -); - -export default WebhookEdit; diff --git a/apps/link/metamigo-add/_components/webhooks/WebhookList.tsx b/apps/link/metamigo-add/_components/webhooks/WebhookList.tsx deleted file mode 100644 index 22d244e..0000000 --- a/apps/link/metamigo-add/_components/webhooks/WebhookList.tsx +++ /dev/null @@ -1,18 +0,0 @@ -"use client"; - -import { List, Datagrid, DateField, TextField, ListProps } from "react-admin"; -import { BackendIdField } from "./shared"; - -const WebhookList = (props: ListProps) => ( - - - - - - - - - -); - -export default WebhookList; diff --git a/apps/link/metamigo-add/_components/webhooks/index.ts b/apps/link/metamigo-add/_components/webhooks/index.ts deleted file mode 100644 index 302d3ee..0000000 --- a/apps/link/metamigo-add/_components/webhooks/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -"use client"; - -import WebhookIcon from "@mui/icons-material/Send"; -import WebhookList from "./WebhookList"; -import WebhookEdit from "./WebhookEdit"; -import WebhookCreate from "./WebhookCreate"; - -// eslint-disable-next-line import/no-anonymous-default-export -export default { - list: WebhookList, - create: WebhookCreate, - edit: WebhookEdit, - icon: WebhookIcon, -}; diff --git a/apps/link/metamigo-add/_components/webhooks/shared.tsx b/apps/link/metamigo-add/_components/webhooks/shared.tsx deleted file mode 100644 index 3660e63..0000000 --- a/apps/link/metamigo-add/_components/webhooks/shared.tsx +++ /dev/null @@ -1,70 +0,0 @@ -"use client"; - -import { SelectInput, required } from "react-admin"; - -import { - VoiceLineField, - VoiceLineSelectInput, -} from "../voice/voicelines/shared"; -import { - WhatsAppBotField, - WhatsAppBotSelectInput, -} from "../whatsapp/bots/shared"; -import { SignalBotField, SignalBotSelectInput } from "../signal/bots/shared"; - -const httpChoices = [ - { id: "post", name: "POST" }, - { id: "put", name: "PUT" }, -]; -export const HttpMethodInput = (props: any) => ( - -); - -const backendChoices = [ - { id: "signal", name: "Signal" }, - { id: "whatsapp", name: "WhatsApp" }, - { id: "voice", name: "Voice" }, -]; - -const backendInputComponents = { - whatsapp: WhatsAppBotSelectInput("backendId"), - signal: SignalBotSelectInput("backendId"), - voice: VoiceLineSelectInput("backendId"), -}; - -const backendFieldComponents = { - whatsapp: WhatsAppBotField("backendId"), - signal: SignalBotField("backendId"), - voice: VoiceLineField("backendId"), -}; - -export const BackendTypeInput = (props: any) => ( - -); - -export const BackendIdInput = (form: any, ...rest: any[]) => { - const Component = form.formData.backendType - ? backendInputComponents[form.formData.backendType] - : false; - return <>{Component && }; -}; - -export const BackendIdField = (form: any, ...rest: any[]) => { - console.log(form); - - const Component = form.record.backendType - ? backendFieldComponents[form.record.backendType] - : false; - return <>{Component && }; -}; diff --git a/apps/link/metamigo-add/_components/whatsapp/attachments/WhatsappAttachmentList.tsx b/apps/link/metamigo-add/_components/whatsapp/attachments/WhatsappAttachmentList.tsx deleted file mode 100644 index 0c61ffc..0000000 --- a/apps/link/metamigo-add/_components/whatsapp/attachments/WhatsappAttachmentList.tsx +++ /dev/null @@ -1,13 +0,0 @@ -"use client"; - -import { List, Datagrid, TextField } from "react-admin"; - -const WhatsappAttachmentList = (props: any) => ( - - - - - -); - -export default WhatsappAttachmentList; diff --git a/apps/link/metamigo-add/_components/whatsapp/attachments/WhatsappAttachmentShow.tsx b/apps/link/metamigo-add/_components/whatsapp/attachments/WhatsappAttachmentShow.tsx deleted file mode 100644 index 7eeda88..0000000 --- a/apps/link/metamigo-add/_components/whatsapp/attachments/WhatsappAttachmentShow.tsx +++ /dev/null @@ -1,13 +0,0 @@ -"use client"; - -import { Show, ShowProps, SimpleShowLayout, TextField } from "react-admin"; - -const WhatsappAttachmentShow = (props: ShowProps) => ( - - - - - -); - -export default WhatsappAttachmentShow; diff --git a/apps/link/metamigo-add/_components/whatsapp/attachments/index.ts b/apps/link/metamigo-add/_components/whatsapp/attachments/index.ts deleted file mode 100644 index 5ee1843..0000000 --- a/apps/link/metamigo-add/_components/whatsapp/attachments/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -"use client"; - -import WhatsappAttachmentIcon from "@mui/icons-material/AttachFile"; -import WhatsappAttachmentList from "./WhatsappAttachmentList"; -import WhatsappAttachmentShow from "./WhatsappAttachmentShow"; - -// eslint-disable-next-line import/no-anonymous-default-export -export default { - list: WhatsappAttachmentList, - show: WhatsappAttachmentShow, - icon: WhatsappAttachmentIcon, -}; diff --git a/apps/link/metamigo-add/_components/whatsapp/bots/WhatsappBotCreate.tsx b/apps/link/metamigo-add/_components/whatsapp/bots/WhatsappBotCreate.tsx deleted file mode 100644 index a2deffc..0000000 --- a/apps/link/metamigo-add/_components/whatsapp/bots/WhatsappBotCreate.tsx +++ /dev/null @@ -1,47 +0,0 @@ -"use client"; - -// import dynamic from "next/dynamic"; -import { FC } from "react"; -import { - SimpleForm, - Create, - TextInput, - required, - CreateProps, -} from "react-admin"; -import { useSession } from "next-auth/react"; -import { validateE164Number } from "../../../_lib/phone-numbers"; - -const WhatsappBotCreate: FC = (props) => { - // const MuiPhoneNumber = dynamic(() => import("material-ui-phone-number"), { - // ssr: false, - // }); - - const { data: session } = useSession(); - - return ( - - - - - {/* setFieldValue("phoneNumber", e)} - /> */} - - - - ); -}; - -export default WhatsappBotCreate; diff --git a/apps/link/metamigo-add/_components/whatsapp/bots/WhatsappBotEdit.tsx b/apps/link/metamigo-add/_components/whatsapp/bots/WhatsappBotEdit.tsx deleted file mode 100644 index e2f07cc..0000000 --- a/apps/link/metamigo-add/_components/whatsapp/bots/WhatsappBotEdit.tsx +++ /dev/null @@ -1,14 +0,0 @@ -"use client"; - -import { SimpleForm, Edit, TextInput, required, EditProps } from "react-admin"; - -const WhatsappBotEdit = (props: EditProps) => ( - - - - - - -); - -export default WhatsappBotEdit; diff --git a/apps/link/metamigo-add/_components/whatsapp/bots/WhatsappBotList.tsx b/apps/link/metamigo-add/_components/whatsapp/bots/WhatsappBotList.tsx deleted file mode 100644 index a7a40e9..0000000 --- a/apps/link/metamigo-add/_components/whatsapp/bots/WhatsappBotList.tsx +++ /dev/null @@ -1,24 +0,0 @@ -"use client"; - -import { - List, - Datagrid, - DateField, - TextField, - BooleanField, -} from "react-admin"; - -const WhatsappBotList = (props: any) => ( - - - - - - - - - - -); - -export default WhatsappBotList; diff --git a/apps/link/metamigo-add/_components/whatsapp/bots/WhatsappBotShow.tsx b/apps/link/metamigo-add/_components/whatsapp/bots/WhatsappBotShow.tsx deleted file mode 100644 index c26f54a..0000000 --- a/apps/link/metamigo-add/_components/whatsapp/bots/WhatsappBotShow.tsx +++ /dev/null @@ -1,177 +0,0 @@ -"use client"; - -import React, { useEffect, useState } from "react"; -import { - Card, - Typography, - Grid, - Button, - TextField as MaterialTextField, - IconButton, -} from "@mui/material"; -import { - Show, - SimpleShowLayout, - TextField, - ShowProps, - useGetOne, - useRefresh, - BooleanField, -} from "react-admin"; -import QRCode from "react-qr-code"; -import useSWR from "swr"; -import RefreshIcon from "@mui/icons-material/Refresh"; - -const Sidebar = ({ record }: any) => { - const [receivedMessages, setReceivedMessages] = useState([]); - const [phoneNumber, setPhoneNumber] = useState(""); - const handlePhoneNumberChange = (event: any) => { - setPhoneNumber(event.target.value); - }; - - const [message, setMessage] = useState(""); - const handleMessageChange = (event: any) => { - setMessage(event.target.value); - }; - - const sendMessage = async (phoneNumber: string, message: string) => { - await fetch(`/api/v1/whatsapp/bots/${record.token}/send`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ phoneNumber, message }), - }); - }; - - const receiveMessages = async () => { - const result = await fetch(`/api/v1/whatsapp/bots/${record.token}/receive`); - const msgs = await result.json(); - console.log(msgs); - setReceivedMessages(msgs); - }; - - return ( - - - - Send message - - - - - - - - - - - - - Receive messages - - - - - - - - {receivedMessages.map((receivedMessage: any, index: number) => ( - - - {receivedMessage.key.remoteJid.replace("@s.whatsapp.net", "")} - - - {receivedMessage.message.conversation} - - - ))} - - - ); -}; - -const WhatsappBotShow = (props: ShowProps) => { - const refresh = useRefresh(); - const { data } = useGetOne("whatsappBots", {id: props.id}); - - const { data: registerData, error: registerError } = useSWR( - data && !data?.isVerified - ? `/api/v1/whatsapp/bots/${props.id}/register` - : undefined, - { refreshInterval: 59000 } - ); - - const unverifyBot = async () => { - await fetch(`/api/v1/whatsapp/bots/${props.id}/unverify`, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify({ verified: false }), - }); - }; - - console.log({ registerData, registerError }); - - useEffect(() => { - if (data && !data?.isVerified) { - const interval = setInterval(() => { - refresh(); - }, 10000); - return () => clearInterval(interval); - } - - return undefined; - }, [refresh, data]); - - return ( - }> - - - - - - - {!data?.isVerified && data?.qrCode && data?.qrCode !== "" && ( - - )} - - - ); -}; - -export default WhatsappBotShow; diff --git a/apps/link/metamigo-add/_components/whatsapp/bots/index.ts b/apps/link/metamigo-add/_components/whatsapp/bots/index.ts deleted file mode 100644 index ef7e1c3..0000000 --- a/apps/link/metamigo-add/_components/whatsapp/bots/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -"use client"; - -import WhatsappBotIcon from "@mui/icons-material/WhatsApp"; -import WhatsappBotList from "./WhatsappBotList"; -import WhatsappBotEdit from "./WhatsappBotEdit"; -import WhatsappBotCreate from "./WhatsappBotCreate"; -import WhatsappBotShow from "./WhatsappBotShow"; - -// eslint-disable-next-line import/no-anonymous-default-export -export default { - list: WhatsappBotList, - create: WhatsappBotCreate, - edit: WhatsappBotEdit, - show: WhatsappBotShow, - icon: WhatsappBotIcon, -}; diff --git a/apps/link/metamigo-add/_components/whatsapp/bots/shared.tsx b/apps/link/metamigo-add/_components/whatsapp/bots/shared.tsx deleted file mode 100644 index 84bade0..0000000 --- a/apps/link/metamigo-add/_components/whatsapp/bots/shared.tsx +++ /dev/null @@ -1,33 +0,0 @@ -"use client"; - -/* eslint-disable react/display-name */ -import { - SelectInput, - required, - ReferenceInput, - ReferenceField, - TextField, -} from "react-admin"; - -export const WhatsAppBotSelectInput = (source: string) => () => - ( - - - - ); - -export const WhatsAppBotField = (source: string) => () => - ( - - - - ); diff --git a/apps/link/metamigo-add/_components/whatsapp/messages/WhatsappMessageList.tsx b/apps/link/metamigo-add/_components/whatsapp/messages/WhatsappMessageList.tsx deleted file mode 100644 index 09c45dc..0000000 --- a/apps/link/metamigo-add/_components/whatsapp/messages/WhatsappMessageList.tsx +++ /dev/null @@ -1,25 +0,0 @@ -"use client"; - -import { - List, - ListProps, - Datagrid, - DateField, - TextField, - BooleanField, -} from "react-admin"; - -const WhatsappMessageList = (props: ListProps) => ( - - - - - - - - - - -); - -export default WhatsappMessageList; diff --git a/apps/link/metamigo-add/_components/whatsapp/messages/WhatsappMessageShow.tsx b/apps/link/metamigo-add/_components/whatsapp/messages/WhatsappMessageShow.tsx deleted file mode 100644 index c768e6e..0000000 --- a/apps/link/metamigo-add/_components/whatsapp/messages/WhatsappMessageShow.tsx +++ /dev/null @@ -1,31 +0,0 @@ -"use client"; - -import { - Show, - ShowProps, - SimpleShowLayout, - TextField, - ReferenceManyField, - Datagrid, -} from "react-admin"; - -const WhatsappMessageShow = (props: ShowProps) => ( - - - - - - - - - - - - -); - -export default WhatsappMessageShow; diff --git a/apps/link/metamigo-add/_components/whatsapp/messages/index.ts b/apps/link/metamigo-add/_components/whatsapp/messages/index.ts deleted file mode 100644 index 20b93c7..0000000 --- a/apps/link/metamigo-add/_components/whatsapp/messages/index.ts +++ /dev/null @@ -1,12 +0,0 @@ -"use client"; - -import WhatsappMessageIcon from "@mui/icons-material/Message"; -import WhatsappMessageList from "./WhatsappMessageList"; -import WhatsappMessageShow from "./WhatsappMessageShow"; - -// eslint-disable-next-line import/no-anonymous-default-export -export default { - list: WhatsappMessageList, - show: WhatsappMessageShow, - icon: WhatsappMessageIcon, -}; diff --git a/apps/link/metamigo-add/_i18n/en.ts b/apps/link/metamigo-add/_i18n/en.ts deleted file mode 100644 index a31aa9b..0000000 --- a/apps/link/metamigo-add/_i18n/en.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { TranslationMessages } from "react-admin"; -import englishMessages from "ra-language-english"; - -const customEnglishMessages: TranslationMessages = { - ...englishMessages, - - auth: { - loggingIn: "Logging in...", - permissionDenied: "Permission denied", - }, - pos: { - configuration: "Configuration", - menu: { - security: "Security", - accounts: "Accounts", - voicelines: "Voice Lines", - providers: "Voice Provider", - webhooks: "Webhooks", - voice: "Voice", - whatsapp: "WhatsApp", - signal: "Signal", - }, - }, - resources: { - signalBots: { - name: "Signal Bot |||| Signal Bots", - verifyDialog: { - sms: "Please enter the verification code sent via SMS to %{phoneNumber}", - voice: - "Please answer the call from Signal to %{phoneNumber} and enter the verification code", - }, - }, - whatsappBots: { - name: "WhatsApp Bot |||| WhatsApp Bots", - }, - users: { - name: "User |||| Users", - }, - accounts: { - name: "OAuth Account |||| OAuth Accounts", - }, - voicelines: { - name: "Voice Line |||| Voice Lines", - fields: { - providerLineSid: "Provider Line SID", - }, - }, - providers: { - name: "Voice Provider |||| Voice Providers", - fields: { - credentials: { - accountSid: "Twilio Account SID", - apiKeySid: "Twilio API Key SID", - apiKeySecret: "Twilio API Key Secret", - }, - }, - }, - webhooks: { - name: "Webhook |||| Webhooks", - fields: { - endpointUrl: "Endpoint URL", - httpMethod: "HTTP Method", - headers: "HTTP Headers", - header: "Header Name", - value: "Header Value", - }, - }, - }, - validation: { - url: "a valid url starting with https:// is required", - voice: "a voice is required", - language: "a language is required", - headerName: "a valid http header name has only letters, numbers and dashes", - noAvailableNumbers: - "There are no available numbers to assign. Please visit the provider and purchase more numbers.", - noVoiceLines: - "There are no configured voice lines. Visit the Voice Lines admin page to create some.", - }, -}; - -export default customEnglishMessages; diff --git a/apps/link/metamigo-add/_lib/absolute-url.ts b/apps/link/metamigo-add/_lib/absolute-url.ts deleted file mode 100644 index 6c5a4c7..0000000 --- a/apps/link/metamigo-add/_lib/absolute-url.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { IncomingMessage } from "node:http"; - -function absoluteUrl( - req?: IncomingMessage, - localhostAddress = "localhost:3000" -) { - let host = - (req?.headers ? req.headers.host : window.location.host) || - localhostAddress; - let protocol = /^localhost(:\d+)?$/.test(host) ? "http:" : "https:"; - - if ( - req && - req.headers["x-forwarded-host"] && - typeof req.headers["x-forwarded-host"] === "string" - ) { - host = req.headers["x-forwarded-host"]; - } - - if ( - req && - req.headers["x-forwarded-proto"] && - typeof req.headers["x-forwarded-proto"] === "string" - ) { - protocol = `${req.headers["x-forwarded-proto"]}:`; - } - - return { - protocol, - host, - origin: protocol + "//" + host, - }; -} - -export default absoluteUrl; diff --git a/apps/link/metamigo-add/_lib/apollo-client.ts b/apps/link/metamigo-add/_lib/apollo-client.ts deleted file mode 100644 index bb0f6d8..0000000 --- a/apps/link/metamigo-add/_lib/apollo-client.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { - ApolloClient, - InMemoryCache, - ApolloLink, - HttpLink, -} from "@apollo/client"; -import { onError } from "@apollo/client/link/error"; - -const errorLink = onError( - ({ operation, graphQLErrors, networkError, forward }) => { - console.log("ERROR LINK", operation); - if (graphQLErrors) - graphQLErrors.map(({ message, locations, path, ...rest }) => - console.log( - `[GraphQL error]: Message: ${message}`, - locations, - path, - rest - ) - ); - if (networkError) console.log(`[Network error]: ${networkError}`); - forward(operation); - } -); - -export const apolloClient = new ApolloClient({ - link: ApolloLink.from([errorLink, new HttpLink({ uri: "/proxy/metamigo/graphql" })]), - cache: new InMemoryCache(), - /* - defaultOptions: { - watchQuery: { - fetchPolicy: "no-cache", - errorPolicy: "ignore", - }, - query: { - fetchPolicy: "no-cache", - errorPolicy: "all", - }, - }, */ -}); diff --git a/apps/link/metamigo-add/_lib/cloudflare.ts b/apps/link/metamigo-add/_lib/cloudflare.ts deleted file mode 100644 index db75cbf..0000000 --- a/apps/link/metamigo-add/_lib/cloudflare.ts +++ /dev/null @@ -1,213 +0,0 @@ -import { promisify } from "node:util"; -import jwt from "jsonwebtoken"; -import jwksClient from "jwks-rsa"; -import * as Boom from "@hapi/boom"; -import * as Wreck from "@hapi/wreck"; -import Credentials from "next-auth/providers/credentials"; -import type { Adapter } from "next-auth/adapters"; -import type { IncomingMessage } from "node:http"; - -const CF_JWT_HEADER_NAME = "cf-access-jwt-assertion"; -const CF_JWT_ALGOS = ["RS256"]; - -export type VerifyFn = (token: string) => Promise; - -/** - * Returns a function that will accept a jwt and verify it against the cloudflare access details - * - * @param audience the cloudflare access audience id - * @param domain the cloudflare access domain - */ -export const cfVerifier = (audience: string, domain: string): VerifyFn => { - if (!audience || !domain) - throw Boom.badImplementation( - "Cloudflare configuration is missing. See project documentation." - ); - const issuer = `https://${domain}`; - const client = jwksClient({ - jwksUri: `${issuer}/cdn-cgi/access/certs`, - }); - - return async (token) => { - const getKey = (header: any, callback: any) => { - client.getSigningKey(header.kid, (err: any, key: any) => { - if (err) - throw Boom.serverUnavailable( - "failed to fetch cloudflare access jwks" - ); - callback(undefined, key.getPublicKey()); - }); - }; - - const opts = { - algorithms: CF_JWT_ALGOS, - audience, - issuer, - }; - // @ts-expect-error: Too many args - return promisify(jwt.verify)(token, getKey, opts); - }; -}; - -/** - * Verifies the Cloudflare Access JWT and returns the decoded token's contents. - * Throws if the token is missing or invalid. - * - * @param verifier the verification function - * @param req the incoming http request to verify - * @return the original token and the decoded contents. - */ -export const verifyRequest = async ( - verifier: VerifyFn, - req: IncomingMessage -): Promise<{ token: string; decoded: any }> => { - const token = req.headers[CF_JWT_HEADER_NAME] as string; - if (token) { - try { - const decoded = await verifier(token); - return { token, decoded }; - } catch (error) { - console.error(error); - throw Boom.unauthorized("invalid cloudflare access token"); - } - } - - throw Boom.unauthorized("cloudflare access token missing"); -}; - -/** - * Fetches user identity information from cloudflare. - * - * @param domain the cloudflare access domain - * @param token the encoded jwt token for the user - * @see https://developers.cloudflare.com/access/setting-up-access/json-web-token#groups-within-a-jwt - */ -export const getIdentity = async ( - domain: string, - token: string -): Promise => { - const { payload } = await Wreck.get( - `https://${domain}/cdn-cgi/access/get-identity`, - { - headers: { - Cookie: `CF_Authorization=${token}`, - }, - json: true, - } - ); - return payload; -}; - -const cloudflareAccountProvider = "cloudflare-access"; - -const cloudflareAuthorizeCallback = - ( - req: IncomingMessage, - domain: string, - verifier: VerifyFn, - adapter: Adapter - ): (() => Promise) => - async () => { - /* - - lots of little variables in here. - - token: the encoded jwt from cloudflare access - decoded: the decoded jwt containing the content cloudflare gives us - identity: we call the cloudflare access identity endpoint to retrieve more user identity information - this data is identity provider specific, so the format is unknown - it would be possible to support specific identity providers and have roles/groups - profile: this is the accumulated user information we have that we will fetch/build the user record with - */ - - const { token, decoded } = await verifyRequest(verifier, req); - - const profile = { - email: undefined, - name: undefined, - avatar: undefined, - }; - if (decoded.email) profile.email = decoded.email; - if (decoded.name) profile.name = decoded.name; - const identity = await getIdentity(domain, token); - - if (identity.email) profile.email = identity.email; - if (identity.name) profile.name = identity.name; - - if (!profile.email) - throw new Error("cloudflare access authorization: email not found"); - - const providerId = `cfaccess|${identity.idp.type}|${identity.idp.id}`; - const providerAccountId = identity.user_uuid; - - if (!providerAccountId) - throw new Error( - "cloudflare access authorization: missing provider account id" - ); - - const { - getUserByProviderAccountId, - getUserByEmail, - createUser, - linkAccount, - } = - // @ts-expect-error: non-existent property - await adapter.getAdapter({} as any); - - const userByProviderAccountId = await getUserByProviderAccountId( - providerId, - providerAccountId - ); - if (userByProviderAccountId) { - return userByProviderAccountId; - } - - const userByEmail = await getUserByEmail(profile.email); - if (userByEmail) { - // we will not explicitly link accounts - throw new Error( - "cloudflare access authorization: user exists for email address, but is not linked." - ); - } - - const user = await createUser(profile); - - // between the previous line and the next line exists a transactional bug - // https://github.com/nextauthjs/next-auth/issues/876 - // hopefully we don't experience it - - await linkAccount( - user.id, - providerId, - cloudflareAccountProvider, - providerAccountId, - // the following are unused but are specified for completness - undefined, - undefined, - undefined - ); - - return user; - }; - -/** - * @param audience the cloudflare access audience id - * @param domain the cloudflare access domain (including the .cloudflareaccess.com bit) - * @param adapter the next-auth adapter used to talk to the backend - * @param req the incoming request object used to parse the jwt from - */ -export const CloudflareAccessProvider = ( - audience: string, - domain: string, - adapter: Adapter, - req: IncomingMessage -) => { - const verifier = cfVerifier(audience, domain); - - return Credentials({ - id: cloudflareAccountProvider, - name: "Cloudflare Access", - credentials: {}, - authorize: cloudflareAuthorizeCallback(req, domain, verifier, adapter), - }); -}; diff --git a/apps/link/metamigo-add/_lib/dataprovider.ts b/apps/link/metamigo-add/_lib/dataprovider.ts deleted file mode 100644 index d77089d..0000000 --- a/apps/link/metamigo-add/_lib/dataprovider.ts +++ /dev/null @@ -1,12 +0,0 @@ -import pgDataProvider from "ra-postgraphile"; -import schema from "./graphql-schema.json"; - -export const metamigoDataProvider = async (client: any) => { - const graphqlDataProvider: any = await pgDataProvider( - client, - // @ts-expect-error: Missing property - {}, - { introspection: { schema: schema.data.__schema } } - ); - return graphqlDataProvider; -}; diff --git a/apps/link/metamigo-add/_lib/graphql-schema.json b/apps/link/metamigo-add/_lib/graphql-schema.json deleted file mode 100644 index dd410a1..0000000 --- a/apps/link/metamigo-add/_lib/graphql-schema.json +++ /dev/null @@ -1 +0,0 @@ -{"data":{"__schema":{"queryType":{"name":"Query"},"mutationType":{"name":"Mutation"},"subscriptionType":null,"types":[{"kind":"OBJECT","name":"Query","description":"The root query type which gives access points into the data universe.","fields":[{"name":"query","description":"Exposes the root query type nested one level down. This is helpful for Relay 1\nwhich can only query top level fields if they are in a particular form.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"Query","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"nodeId","description":"The root query type must be a `Node` to work well with Relay 1 mutations. This just resolves to `query`.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"node","description":"Fetches an object given its globally unique `ID`.","args":[{"name":"nodeId","description":"The globally unique `ID`.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null}],"type":{"kind":"INTERFACE","name":"Node","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"accounts","description":"Reads and enables pagination through a set of `Account`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `Account`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"AccountsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"AccountCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"AccountFilter","ofType":null},"defaultValue":null}],"type":{"kind":"OBJECT","name":"AccountsConnection","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"settings","description":"Reads and enables pagination through a set of `Setting`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `Setting`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"SettingsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"SettingCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"SettingFilter","ofType":null},"defaultValue":null}],"type":{"kind":"OBJECT","name":"SettingsConnection","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"signalBots","description":"Reads and enables pagination through a set of `SignalBot`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `SignalBot`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"SignalBotsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"SignalBotCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"SignalBotFilter","ofType":null},"defaultValue":null}],"type":{"kind":"OBJECT","name":"SignalBotsConnection","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"users","description":"Reads and enables pagination through a set of `User`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `User`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"UsersOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"UserCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"UserFilter","ofType":null},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UsersConnection","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceLines","description":"Reads and enables pagination through a set of `VoiceLine`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `VoiceLine`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"VoiceLinesOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"VoiceLineCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"VoiceLineFilter","ofType":null},"defaultValue":null}],"type":{"kind":"OBJECT","name":"VoiceLinesConnection","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceProviders","description":"Reads and enables pagination through a set of `VoiceProvider`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `VoiceProvider`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"VoiceProvidersOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"VoiceProviderCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"VoiceProviderFilter","ofType":null},"defaultValue":null}],"type":{"kind":"OBJECT","name":"VoiceProvidersConnection","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"webhooks","description":"Reads and enables pagination through a set of `Webhook`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `Webhook`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WebhooksOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"WebhookCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"WebhookFilter","ofType":null},"defaultValue":null}],"type":{"kind":"OBJECT","name":"WebhooksConnection","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappAttachments","description":"Reads and enables pagination through a set of `WhatsappAttachment`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `WhatsappAttachment`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WhatsappAttachmentsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentFilter","ofType":null},"defaultValue":null}],"type":{"kind":"OBJECT","name":"WhatsappAttachmentsConnection","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBots","description":"Reads and enables pagination through a set of `WhatsappBot`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `WhatsappBot`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WhatsappBotsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"WhatsappBotCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"WhatsappBotFilter","ofType":null},"defaultValue":null}],"type":{"kind":"OBJECT","name":"WhatsappBotsConnection","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappMessages","description":"Reads and enables pagination through a set of `WhatsappMessage`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `WhatsappMessage`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WhatsappMessagesOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"WhatsappMessageCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"WhatsappMessageFilter","ofType":null},"defaultValue":null}],"type":{"kind":"OBJECT","name":"WhatsappMessagesConnection","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"account","description":null,"args":[{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"Account","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"setting","description":null,"args":[{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"Setting","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"signalBot","description":null,"args":[{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"SignalBot","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"user","description":null,"args":[{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"User","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"userByEmail","description":null,"args":[{"name":"email","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"User","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceLine","description":null,"args":[{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"VoiceLine","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceProvider","description":null,"args":[{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"VoiceProvider","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"webhook","description":null,"args":[{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"Webhook","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappAttachment","description":null,"args":[{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"WhatsappAttachment","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBot","description":null,"args":[{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"WhatsappBot","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappMessage","description":null,"args":[{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"WhatsappMessage","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"currentSessionId","description":"Handy method to get the current session ID.","args":[],"type":{"kind":"SCALAR","name":"UUID","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"currentUser","description":"The currently logged in user (or null if not logged in).","args":[],"type":{"kind":"OBJECT","name":"User","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"currentUserId","description":"Handy method to get the current user ID for use in RLS policies, etc; in GraphQL, use `currentUser{id}` instead.","args":[],"type":{"kind":"SCALAR","name":"UUID","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"accountByNodeId","description":"Reads a single `Account` using its globally unique `ID`.","args":[{"name":"nodeId","description":"The globally unique `ID` to be used in selecting a single `Account`.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"Account","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"settingByNodeId","description":"Reads a single `Setting` using its globally unique `ID`.","args":[{"name":"nodeId","description":"The globally unique `ID` to be used in selecting a single `Setting`.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"Setting","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"signalBotByNodeId","description":"Reads a single `SignalBot` using its globally unique `ID`.","args":[{"name":"nodeId","description":"The globally unique `ID` to be used in selecting a single `SignalBot`.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"SignalBot","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"userByNodeId","description":"Reads a single `User` using its globally unique `ID`.","args":[{"name":"nodeId","description":"The globally unique `ID` to be used in selecting a single `User`.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"User","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceLineByNodeId","description":"Reads a single `VoiceLine` using its globally unique `ID`.","args":[{"name":"nodeId","description":"The globally unique `ID` to be used in selecting a single `VoiceLine`.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"VoiceLine","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceProviderByNodeId","description":"Reads a single `VoiceProvider` using its globally unique `ID`.","args":[{"name":"nodeId","description":"The globally unique `ID` to be used in selecting a single `VoiceProvider`.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"VoiceProvider","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"webhookByNodeId","description":"Reads a single `Webhook` using its globally unique `ID`.","args":[{"name":"nodeId","description":"The globally unique `ID` to be used in selecting a single `Webhook`.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"Webhook","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappAttachmentByNodeId","description":"Reads a single `WhatsappAttachment` using its globally unique `ID`.","args":[{"name":"nodeId","description":"The globally unique `ID` to be used in selecting a single `WhatsappAttachment`.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"WhatsappAttachment","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBotByNodeId","description":"Reads a single `WhatsappBot` using its globally unique `ID`.","args":[{"name":"nodeId","description":"The globally unique `ID` to be used in selecting a single `WhatsappBot`.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"WhatsappBot","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappMessageByNodeId","description":"Reads a single `WhatsappMessage` using its globally unique `ID`.","args":[{"name":"nodeId","description":"The globally unique `ID` to be used in selecting a single `WhatsappMessage`.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"WhatsappMessage","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[{"kind":"INTERFACE","name":"Node","ofType":null}],"enumValues":null,"possibleTypes":null},{"kind":"INTERFACE","name":"Node","description":"An object with a globally unique `ID`.","fields":[{"name":"nodeId","description":"A globally unique identifier. Can be used in various places throughout the system to identify this single value.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":null,"enumValues":null,"possibleTypes":[{"kind":"OBJECT","name":"Query","ofType":null},{"kind":"OBJECT","name":"Account","ofType":null},{"kind":"OBJECT","name":"User","ofType":null},{"kind":"OBJECT","name":"Setting","ofType":null},{"kind":"OBJECT","name":"SignalBot","ofType":null},{"kind":"OBJECT","name":"VoiceLine","ofType":null},{"kind":"OBJECT","name":"VoiceProvider","ofType":null},{"kind":"OBJECT","name":"Webhook","ofType":null},{"kind":"OBJECT","name":"WhatsappAttachment","ofType":null},{"kind":"OBJECT","name":"WhatsappBot","ofType":null},{"kind":"OBJECT","name":"WhatsappMessage","ofType":null}]},{"kind":"SCALAR","name":"ID","description":"The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.","fields":null,"inputFields":null,"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"SCALAR","name":"Int","description":"The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.","fields":null,"inputFields":null,"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"SCALAR","name":"Cursor","description":"A location in a connection that can be used for resuming pagination.","fields":null,"inputFields":null,"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"ENUM","name":"AccountsOrderBy","description":"Methods to use when ordering `Account`.","fields":null,"inputFields":null,"interfaces":null,"enumValues":[{"name":"NATURAL","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"COMPOUND_ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"COMPOUND_ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"USER_ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"USER_ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PROVIDER_ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PROVIDER_ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PROVIDER_ACCOUNT_ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PROVIDER_ACCOUNT_ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_DESC","description":null,"isDeprecated":false,"deprecationReason":null}],"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"AccountCondition","description":"A condition to be used against `Account` object types. All fields are tested for equality and combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Checks for equality with the object’s `id` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"compoundId","description":"Checks for equality with the object’s `compoundId` field.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"userId","description":"Checks for equality with the object’s `userId` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"providerId","description":"Checks for equality with the object’s `providerId` field.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"providerAccountId","description":"Checks for equality with the object’s `providerAccountId` field.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"SCALAR","name":"UUID","description":"A universally unique identifier as defined by [RFC 4122](https://tools.ietf.org/html/rfc4122).","fields":null,"inputFields":null,"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"SCALAR","name":"String","description":"The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.","fields":null,"inputFields":null,"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"AccountFilter","description":"A filter to be used against `Account` object types. All fields are combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Filter by the object’s `id` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"compoundId","description":"Filter by the object’s `compoundId` field.","type":{"kind":"INPUT_OBJECT","name":"StringFilter","ofType":null},"defaultValue":null},{"name":"userId","description":"Filter by the object’s `userId` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"providerId","description":"Filter by the object’s `providerId` field.","type":{"kind":"INPUT_OBJECT","name":"StringFilter","ofType":null},"defaultValue":null},{"name":"providerAccountId","description":"Filter by the object’s `providerAccountId` field.","type":{"kind":"INPUT_OBJECT","name":"StringFilter","ofType":null},"defaultValue":null},{"name":"and","description":"Checks for all expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"AccountFilter","ofType":null}}},"defaultValue":null},{"name":"or","description":"Checks for any expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"AccountFilter","ofType":null}}},"defaultValue":null},{"name":"not","description":"Negates the expression.","type":{"kind":"INPUT_OBJECT","name":"AccountFilter","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UUIDFilter","description":"A filter to be used against UUID fields. All fields are combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"isNull","description":"Is null (if `true` is specified) or is not null (if `false` is specified).","type":{"kind":"SCALAR","name":"Boolean","ofType":null},"defaultValue":null},{"name":"equalTo","description":"Equal to the specified value.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"notEqualTo","description":"Not equal to the specified value.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"distinctFrom","description":"Not equal to the specified value, treating null like an ordinary value.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"notDistinctFrom","description":"Equal to the specified value, treating null like an ordinary value.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"in","description":"Included in the specified list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}}},"defaultValue":null},{"name":"notIn","description":"Not included in the specified list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}}},"defaultValue":null},{"name":"lessThan","description":"Less than the specified value.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"lessThanOrEqualTo","description":"Less than or equal to the specified value.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"greaterThan","description":"Greater than the specified value.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"greaterThanOrEqualTo","description":"Greater than or equal to the specified value.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"SCALAR","name":"Boolean","description":"The `Boolean` scalar type represents `true` or `false`.","fields":null,"inputFields":null,"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"StringFilter","description":"A filter to be used against String fields. All fields are combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"isNull","description":"Is null (if `true` is specified) or is not null (if `false` is specified).","type":{"kind":"SCALAR","name":"Boolean","ofType":null},"defaultValue":null},{"name":"equalTo","description":"Equal to the specified value.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"notEqualTo","description":"Not equal to the specified value.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"distinctFrom","description":"Not equal to the specified value, treating null like an ordinary value.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"notDistinctFrom","description":"Equal to the specified value, treating null like an ordinary value.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"in","description":"Included in the specified list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}}},"defaultValue":null},{"name":"notIn","description":"Not included in the specified list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}}},"defaultValue":null},{"name":"lessThan","description":"Less than the specified value.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"lessThanOrEqualTo","description":"Less than or equal to the specified value.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"greaterThan","description":"Greater than the specified value.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"greaterThanOrEqualTo","description":"Greater than or equal to the specified value.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"includes","description":"Contains the specified string (case-sensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"notIncludes","description":"Does not contain the specified string (case-sensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"includesInsensitive","description":"Contains the specified string (case-insensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"notIncludesInsensitive","description":"Does not contain the specified string (case-insensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"startsWith","description":"Starts with the specified string (case-sensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"notStartsWith","description":"Does not start with the specified string (case-sensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"startsWithInsensitive","description":"Starts with the specified string (case-insensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"notStartsWithInsensitive","description":"Does not start with the specified string (case-insensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"endsWith","description":"Ends with the specified string (case-sensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"notEndsWith","description":"Does not end with the specified string (case-sensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"endsWithInsensitive","description":"Ends with the specified string (case-insensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"notEndsWithInsensitive","description":"Does not end with the specified string (case-insensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"like","description":"Matches the specified pattern (case-sensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"notLike","description":"Does not match the specified pattern (case-sensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"likeInsensitive","description":"Matches the specified pattern (case-insensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"notLikeInsensitive","description":"Does not match the specified pattern (case-insensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"equalToInsensitive","description":"Equal to the specified value (case-insensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"notEqualToInsensitive","description":"Not equal to the specified value (case-insensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"distinctFromInsensitive","description":"Not equal to the specified value, treating null like an ordinary value (case-insensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"notDistinctFromInsensitive","description":"Equal to the specified value, treating null like an ordinary value (case-insensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"inInsensitive","description":"Included in the specified list (case-insensitive).","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}}},"defaultValue":null},{"name":"notInInsensitive","description":"Not included in the specified list (case-insensitive).","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}}},"defaultValue":null},{"name":"lessThanInsensitive","description":"Less than the specified value (case-insensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"lessThanOrEqualToInsensitive","description":"Less than or equal to the specified value (case-insensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"greaterThanInsensitive","description":"Greater than the specified value (case-insensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"greaterThanOrEqualToInsensitive","description":"Greater than or equal to the specified value (case-insensitive).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"AccountsConnection","description":"A connection to a list of `Account` values.","fields":[{"name":"nodes","description":"A list of `Account` objects.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"OBJECT","name":"Account","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"edges","description":"A list of edges which contains the `Account` and cursor to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"AccountsEdge","ofType":null}}}},"isDeprecated":false,"deprecationReason":null},{"name":"pageInfo","description":"Information to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"PageInfo","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"totalCount","description":"The count of *all* `Account` you could get from the connection.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Int","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"Account","description":null,"fields":[{"name":"nodeId","description":"A globally unique identifier. Can be used in various places throughout the system to identify this single value.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"id","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"compoundId","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"userId","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"providerType","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"providerId","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"providerAccountId","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"refreshToken","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"accessToken","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"accessTokenExpires","description":null,"args":[],"type":{"kind":"SCALAR","name":"Datetime","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createdAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"updatedAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"user","description":"Reads a single `User` that is related to this `Account`.","args":[],"type":{"kind":"OBJECT","name":"User","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[{"kind":"INTERFACE","name":"Node","ofType":null}],"enumValues":null,"possibleTypes":null},{"kind":"SCALAR","name":"Datetime","description":"A point in time as described by the [ISO\n8601](https://en.wikipedia.org/wiki/ISO_8601) standard. May or may not include a timezone.","fields":null,"inputFields":null,"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"User","description":"A user who can log in to the application.","fields":[{"name":"nodeId","description":"A globally unique identifier. Can be used in various places throughout the system to identify this single value.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"id","description":"Unique identifier for the user.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"email","description":"The email address of the user.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"emailVerified","description":"The time at which the email address was verified","args":[],"type":{"kind":"SCALAR","name":"Datetime","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"name","description":"Public-facing name (or pseudonym) of the user.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"avatar","description":"Optional avatar URL.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"userRole","description":"The role that defines the user's privileges.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"RoleType","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"isActive","description":"If false, the user is not allowed to login or access the application","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Boolean","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"createdAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"updatedAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"createdBy","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"accounts","description":"Reads and enables pagination through a set of `Account`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `Account`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"AccountsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"AccountCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"AccountFilter","ofType":null},"defaultValue":null}],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"AccountsConnection","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[{"kind":"INTERFACE","name":"Node","ofType":null}],"enumValues":null,"possibleTypes":null},{"kind":"ENUM","name":"RoleType","description":null,"fields":null,"inputFields":null,"interfaces":null,"enumValues":[{"name":"NONE","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ADMIN","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"USER","description":null,"isDeprecated":false,"deprecationReason":null}],"possibleTypes":null},{"kind":"OBJECT","name":"AccountsEdge","description":"A `Account` edge in the connection.","fields":[{"name":"cursor","description":"A cursor for use in pagination.","args":[],"type":{"kind":"SCALAR","name":"Cursor","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"node","description":"The `Account` at the end of the edge.","args":[],"type":{"kind":"OBJECT","name":"Account","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"PageInfo","description":"Information about pagination in a connection.","fields":[{"name":"hasNextPage","description":"When paginating forwards, are there more items?","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Boolean","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"hasPreviousPage","description":"When paginating backwards, are there more items?","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Boolean","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"startCursor","description":"When paginating backwards, the cursor to continue.","args":[],"type":{"kind":"SCALAR","name":"Cursor","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"endCursor","description":"When paginating forwards, the cursor to continue.","args":[],"type":{"kind":"SCALAR","name":"Cursor","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"ENUM","name":"SettingsOrderBy","description":"Methods to use when ordering `Setting`.","fields":null,"inputFields":null,"interfaces":null,"enumValues":[{"name":"NATURAL","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"NAME_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"NAME_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_DESC","description":null,"isDeprecated":false,"deprecationReason":null}],"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"SettingCondition","description":"A condition to be used against `Setting` object types. All fields are tested for equality and combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Checks for equality with the object’s `id` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"name","description":"Checks for equality with the object’s `name` field.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"SettingFilter","description":"A filter to be used against `Setting` object types. All fields are combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Filter by the object’s `id` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"name","description":"Filter by the object’s `name` field.","type":{"kind":"INPUT_OBJECT","name":"StringFilter","ofType":null},"defaultValue":null},{"name":"and","description":"Checks for all expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"SettingFilter","ofType":null}}},"defaultValue":null},{"name":"or","description":"Checks for any expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"SettingFilter","ofType":null}}},"defaultValue":null},{"name":"not","description":"Negates the expression.","type":{"kind":"INPUT_OBJECT","name":"SettingFilter","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"SettingsConnection","description":"A connection to a list of `Setting` values.","fields":[{"name":"nodes","description":"A list of `Setting` objects.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"OBJECT","name":"Setting","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"edges","description":"A list of edges which contains the `Setting` and cursor to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"SettingsEdge","ofType":null}}}},"isDeprecated":false,"deprecationReason":null},{"name":"pageInfo","description":"Information to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"PageInfo","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"totalCount","description":"The count of *all* `Setting` you could get from the connection.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Int","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"Setting","description":null,"fields":[{"name":"nodeId","description":"A globally unique identifier. Can be used in various places throughout the system to identify this single value.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"id","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"name","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"value","description":null,"args":[],"type":{"kind":"SCALAR","name":"JSON","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createdAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"updatedAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[{"kind":"INTERFACE","name":"Node","ofType":null}],"enumValues":null,"possibleTypes":null},{"kind":"SCALAR","name":"JSON","description":"The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).","fields":null,"inputFields":null,"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"SettingsEdge","description":"A `Setting` edge in the connection.","fields":[{"name":"cursor","description":"A cursor for use in pagination.","args":[],"type":{"kind":"SCALAR","name":"Cursor","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"node","description":"The `Setting` at the end of the edge.","args":[],"type":{"kind":"OBJECT","name":"Setting","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"ENUM","name":"SignalBotsOrderBy","description":"Methods to use when ordering `SignalBot`.","fields":null,"inputFields":null,"interfaces":null,"enumValues":[{"name":"NATURAL","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"TOKEN_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"TOKEN_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_DESC","description":null,"isDeprecated":false,"deprecationReason":null}],"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"SignalBotCondition","description":"A condition to be used against `SignalBot` object types. All fields are tested\nfor equality and combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Checks for equality with the object’s `id` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"token","description":"Checks for equality with the object’s `token` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"SignalBotFilter","description":"A filter to be used against `SignalBot` object types. All fields are combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Filter by the object’s `id` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"token","description":"Filter by the object’s `token` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"and","description":"Checks for all expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"SignalBotFilter","ofType":null}}},"defaultValue":null},{"name":"or","description":"Checks for any expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"SignalBotFilter","ofType":null}}},"defaultValue":null},{"name":"not","description":"Negates the expression.","type":{"kind":"INPUT_OBJECT","name":"SignalBotFilter","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"SignalBotsConnection","description":"A connection to a list of `SignalBot` values.","fields":[{"name":"nodes","description":"A list of `SignalBot` objects.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"OBJECT","name":"SignalBot","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"edges","description":"A list of edges which contains the `SignalBot` and cursor to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"SignalBotsEdge","ofType":null}}}},"isDeprecated":false,"deprecationReason":null},{"name":"pageInfo","description":"Information to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"PageInfo","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"totalCount","description":"The count of *all* `SignalBot` you could get from the connection.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Int","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"SignalBot","description":null,"fields":[{"name":"nodeId","description":"A globally unique identifier. Can be used in various places throughout the system to identify this single value.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"id","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"phoneNumber","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"token","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"userId","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"description","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"authInfo","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"isVerified","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Boolean","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"createdAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"updatedAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[{"kind":"INTERFACE","name":"Node","ofType":null}],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"SignalBotsEdge","description":"A `SignalBot` edge in the connection.","fields":[{"name":"cursor","description":"A cursor for use in pagination.","args":[],"type":{"kind":"SCALAR","name":"Cursor","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"node","description":"The `SignalBot` at the end of the edge.","args":[],"type":{"kind":"OBJECT","name":"SignalBot","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"ENUM","name":"UsersOrderBy","description":"Methods to use when ordering `User`.","fields":null,"inputFields":null,"interfaces":null,"enumValues":[{"name":"NATURAL","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"EMAIL_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"EMAIL_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_DESC","description":null,"isDeprecated":false,"deprecationReason":null}],"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UserCondition","description":"A condition to be used against `User` object types. All fields are tested for equality and combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Checks for equality with the object’s `id` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"email","description":"Checks for equality with the object’s `email` field.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UserFilter","description":"A filter to be used against `User` object types. All fields are combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Filter by the object’s `id` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"email","description":"Filter by the object’s `email` field.","type":{"kind":"INPUT_OBJECT","name":"StringFilter","ofType":null},"defaultValue":null},{"name":"and","description":"Checks for all expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UserFilter","ofType":null}}},"defaultValue":null},{"name":"or","description":"Checks for any expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UserFilter","ofType":null}}},"defaultValue":null},{"name":"not","description":"Negates the expression.","type":{"kind":"INPUT_OBJECT","name":"UserFilter","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"UsersConnection","description":"A connection to a list of `User` values.","fields":[{"name":"nodes","description":"A list of `User` objects.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"OBJECT","name":"User","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"edges","description":"A list of edges which contains the `User` and cursor to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"UsersEdge","ofType":null}}}},"isDeprecated":false,"deprecationReason":null},{"name":"pageInfo","description":"Information to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"PageInfo","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"totalCount","description":"The count of *all* `User` you could get from the connection.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Int","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"UsersEdge","description":"A `User` edge in the connection.","fields":[{"name":"cursor","description":"A cursor for use in pagination.","args":[],"type":{"kind":"SCALAR","name":"Cursor","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"node","description":"The `User` at the end of the edge.","args":[],"type":{"kind":"OBJECT","name":"User","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"ENUM","name":"VoiceLinesOrderBy","description":"Methods to use when ordering `VoiceLine`.","fields":null,"inputFields":null,"interfaces":null,"enumValues":[{"name":"NATURAL","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PROVIDER_ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PROVIDER_ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PROVIDER_LINE_SID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PROVIDER_LINE_SID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"NUMBER_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"NUMBER_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_DESC","description":null,"isDeprecated":false,"deprecationReason":null}],"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"VoiceLineCondition","description":"A condition to be used against `VoiceLine` object types. All fields are tested\nfor equality and combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Checks for equality with the object’s `id` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"providerId","description":"Checks for equality with the object’s `providerId` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"providerLineSid","description":"Checks for equality with the object’s `providerLineSid` field.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"number","description":"Checks for equality with the object’s `number` field.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"VoiceLineFilter","description":"A filter to be used against `VoiceLine` object types. All fields are combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Filter by the object’s `id` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"providerId","description":"Filter by the object’s `providerId` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"providerLineSid","description":"Filter by the object’s `providerLineSid` field.","type":{"kind":"INPUT_OBJECT","name":"StringFilter","ofType":null},"defaultValue":null},{"name":"number","description":"Filter by the object’s `number` field.","type":{"kind":"INPUT_OBJECT","name":"StringFilter","ofType":null},"defaultValue":null},{"name":"and","description":"Checks for all expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"VoiceLineFilter","ofType":null}}},"defaultValue":null},{"name":"or","description":"Checks for any expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"VoiceLineFilter","ofType":null}}},"defaultValue":null},{"name":"not","description":"Negates the expression.","type":{"kind":"INPUT_OBJECT","name":"VoiceLineFilter","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"VoiceLinesConnection","description":"A connection to a list of `VoiceLine` values.","fields":[{"name":"nodes","description":"A list of `VoiceLine` objects.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"OBJECT","name":"VoiceLine","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"edges","description":"A list of edges which contains the `VoiceLine` and cursor to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"VoiceLinesEdge","ofType":null}}}},"isDeprecated":false,"deprecationReason":null},{"name":"pageInfo","description":"Information to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"PageInfo","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"totalCount","description":"The count of *all* `VoiceLine` you could get from the connection.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Int","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"VoiceLine","description":null,"fields":[{"name":"nodeId","description":"A globally unique identifier. Can be used in various places throughout the system to identify this single value.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"id","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"providerId","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"providerLineSid","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"number","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"language","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"voice","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"promptText","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"promptAudio","description":null,"args":[],"type":{"kind":"SCALAR","name":"JSON","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"audioPromptEnabled","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Boolean","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"audioConvertedAt","description":null,"args":[],"type":{"kind":"SCALAR","name":"Datetime","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createdAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"updatedAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"provider","description":"Reads a single `VoiceProvider` that is related to this `VoiceLine`.","args":[],"type":{"kind":"OBJECT","name":"VoiceProvider","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[{"kind":"INTERFACE","name":"Node","ofType":null}],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"VoiceProvider","description":null,"fields":[{"name":"nodeId","description":"A globally unique identifier. Can be used in various places throughout the system to identify this single value.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"id","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"kind","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"name","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"credentials","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"JSON","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"createdAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"updatedAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"voiceLinesByProviderId","description":"Reads and enables pagination through a set of `VoiceLine`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `VoiceLine`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"VoiceLinesOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"VoiceLineCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"VoiceLineFilter","ofType":null},"defaultValue":null}],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"VoiceLinesConnection","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[{"kind":"INTERFACE","name":"Node","ofType":null}],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"VoiceLinesEdge","description":"A `VoiceLine` edge in the connection.","fields":[{"name":"cursor","description":"A cursor for use in pagination.","args":[],"type":{"kind":"SCALAR","name":"Cursor","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"node","description":"The `VoiceLine` at the end of the edge.","args":[],"type":{"kind":"OBJECT","name":"VoiceLine","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"ENUM","name":"VoiceProvidersOrderBy","description":"Methods to use when ordering `VoiceProvider`.","fields":null,"inputFields":null,"interfaces":null,"enumValues":[{"name":"NATURAL","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"NAME_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"NAME_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_DESC","description":null,"isDeprecated":false,"deprecationReason":null}],"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"VoiceProviderCondition","description":"A condition to be used against `VoiceProvider` object types. All fields are\ntested for equality and combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Checks for equality with the object’s `id` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"name","description":"Checks for equality with the object’s `name` field.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"VoiceProviderFilter","description":"A filter to be used against `VoiceProvider` object types. All fields are combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Filter by the object’s `id` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"name","description":"Filter by the object’s `name` field.","type":{"kind":"INPUT_OBJECT","name":"StringFilter","ofType":null},"defaultValue":null},{"name":"and","description":"Checks for all expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"VoiceProviderFilter","ofType":null}}},"defaultValue":null},{"name":"or","description":"Checks for any expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"VoiceProviderFilter","ofType":null}}},"defaultValue":null},{"name":"not","description":"Negates the expression.","type":{"kind":"INPUT_OBJECT","name":"VoiceProviderFilter","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"VoiceProvidersConnection","description":"A connection to a list of `VoiceProvider` values.","fields":[{"name":"nodes","description":"A list of `VoiceProvider` objects.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"OBJECT","name":"VoiceProvider","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"edges","description":"A list of edges which contains the `VoiceProvider` and cursor to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"VoiceProvidersEdge","ofType":null}}}},"isDeprecated":false,"deprecationReason":null},{"name":"pageInfo","description":"Information to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"PageInfo","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"totalCount","description":"The count of *all* `VoiceProvider` you could get from the connection.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Int","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"VoiceProvidersEdge","description":"A `VoiceProvider` edge in the connection.","fields":[{"name":"cursor","description":"A cursor for use in pagination.","args":[],"type":{"kind":"SCALAR","name":"Cursor","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"node","description":"The `VoiceProvider` at the end of the edge.","args":[],"type":{"kind":"OBJECT","name":"VoiceProvider","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"ENUM","name":"WebhooksOrderBy","description":"Methods to use when ordering `Webhook`.","fields":null,"inputFields":null,"interfaces":null,"enumValues":[{"name":"NATURAL","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"BACKEND_TYPE_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"BACKEND_TYPE_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_DESC","description":null,"isDeprecated":false,"deprecationReason":null}],"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WebhookCondition","description":"A condition to be used against `Webhook` object types. All fields are tested for equality and combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Checks for equality with the object’s `id` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"backendType","description":"Checks for equality with the object’s `backendType` field.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WebhookFilter","description":"A filter to be used against `Webhook` object types. All fields are combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Filter by the object’s `id` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"backendType","description":"Filter by the object’s `backendType` field.","type":{"kind":"INPUT_OBJECT","name":"StringFilter","ofType":null},"defaultValue":null},{"name":"and","description":"Checks for all expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WebhookFilter","ofType":null}}},"defaultValue":null},{"name":"or","description":"Checks for any expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WebhookFilter","ofType":null}}},"defaultValue":null},{"name":"not","description":"Negates the expression.","type":{"kind":"INPUT_OBJECT","name":"WebhookFilter","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"WebhooksConnection","description":"A connection to a list of `Webhook` values.","fields":[{"name":"nodes","description":"A list of `Webhook` objects.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"OBJECT","name":"Webhook","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"edges","description":"A list of edges which contains the `Webhook` and cursor to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"WebhooksEdge","ofType":null}}}},"isDeprecated":false,"deprecationReason":null},{"name":"pageInfo","description":"Information to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"PageInfo","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"totalCount","description":"The count of *all* `Webhook` you could get from the connection.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Int","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"Webhook","description":null,"fields":[{"name":"nodeId","description":"A globally unique identifier. Can be used in various places throughout the system to identify this single value.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"id","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"backendType","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"backendId","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"name","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"endpointUrl","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"httpMethod","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"headers","description":null,"args":[],"type":{"kind":"SCALAR","name":"JSON","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createdAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"updatedAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[{"kind":"INTERFACE","name":"Node","ofType":null}],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"WebhooksEdge","description":"A `Webhook` edge in the connection.","fields":[{"name":"cursor","description":"A cursor for use in pagination.","args":[],"type":{"kind":"SCALAR","name":"Cursor","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"node","description":"The `Webhook` at the end of the edge.","args":[],"type":{"kind":"OBJECT","name":"Webhook","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"ENUM","name":"WhatsappAttachmentsOrderBy","description":"Methods to use when ordering `WhatsappAttachment`.","fields":null,"inputFields":null,"interfaces":null,"enumValues":[{"name":"NATURAL","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"WHATSAPP_BOT_ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"WHATSAPP_BOT_ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"WHATSAPP_MESSAGE_ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"WHATSAPP_MESSAGE_ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_DESC","description":null,"isDeprecated":false,"deprecationReason":null}],"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentCondition","description":"A condition to be used against `WhatsappAttachment` object types. All fields are\ntested for equality and combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Checks for equality with the object’s `id` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"whatsappBotId","description":"Checks for equality with the object’s `whatsappBotId` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"whatsappMessageId","description":"Checks for equality with the object’s `whatsappMessageId` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentFilter","description":"A filter to be used against `WhatsappAttachment` object types. All fields are combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Filter by the object’s `id` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"whatsappBotId","description":"Filter by the object’s `whatsappBotId` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"whatsappMessageId","description":"Filter by the object’s `whatsappMessageId` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"and","description":"Checks for all expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentFilter","ofType":null}}},"defaultValue":null},{"name":"or","description":"Checks for any expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentFilter","ofType":null}}},"defaultValue":null},{"name":"not","description":"Negates the expression.","type":{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentFilter","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"WhatsappAttachmentsConnection","description":"A connection to a list of `WhatsappAttachment` values.","fields":[{"name":"nodes","description":"A list of `WhatsappAttachment` objects.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"OBJECT","name":"WhatsappAttachment","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"edges","description":"A list of edges which contains the `WhatsappAttachment` and cursor to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"WhatsappAttachmentsEdge","ofType":null}}}},"isDeprecated":false,"deprecationReason":null},{"name":"pageInfo","description":"Information to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"PageInfo","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"totalCount","description":"The count of *all* `WhatsappAttachment` you could get from the connection.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Int","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"WhatsappAttachment","description":null,"fields":[{"name":"nodeId","description":"A globally unique identifier. Can be used in various places throughout the system to identify this single value.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"id","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBotId","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappMessageId","description":null,"args":[],"type":{"kind":"SCALAR","name":"UUID","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"attachment","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createdAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"updatedAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBot","description":"Reads a single `WhatsappBot` that is related to this `WhatsappAttachment`.","args":[],"type":{"kind":"OBJECT","name":"WhatsappBot","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappMessage","description":"Reads a single `WhatsappMessage` that is related to this `WhatsappAttachment`.","args":[],"type":{"kind":"OBJECT","name":"WhatsappMessage","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[{"kind":"INTERFACE","name":"Node","ofType":null}],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"WhatsappBot","description":null,"fields":[{"name":"nodeId","description":"A globally unique identifier. Can be used in various places throughout the system to identify this single value.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"id","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"phoneNumber","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"token","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"userId","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"description","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"authInfo","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"qrCode","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"isVerified","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Boolean","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"createdAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"updatedAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappMessages","description":"Reads and enables pagination through a set of `WhatsappMessage`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `WhatsappMessage`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WhatsappMessagesOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"WhatsappMessageCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"WhatsappMessageFilter","ofType":null},"defaultValue":null}],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"WhatsappMessagesConnection","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappAttachments","description":"Reads and enables pagination through a set of `WhatsappAttachment`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `WhatsappAttachment`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WhatsappAttachmentsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentFilter","ofType":null},"defaultValue":null}],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"WhatsappAttachmentsConnection","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[{"kind":"INTERFACE","name":"Node","ofType":null}],"enumValues":null,"possibleTypes":null},{"kind":"ENUM","name":"WhatsappMessagesOrderBy","description":"Methods to use when ordering `WhatsappMessage`.","fields":null,"inputFields":null,"interfaces":null,"enumValues":[{"name":"NATURAL","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"WHATSAPP_BOT_ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"WHATSAPP_BOT_ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_DESC","description":null,"isDeprecated":false,"deprecationReason":null}],"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WhatsappMessageCondition","description":"A condition to be used against `WhatsappMessage` object types. All fields are\ntested for equality and combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Checks for equality with the object’s `id` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"whatsappBotId","description":"Checks for equality with the object’s `whatsappBotId` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WhatsappMessageFilter","description":"A filter to be used against `WhatsappMessage` object types. All fields are combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Filter by the object’s `id` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"whatsappBotId","description":"Filter by the object’s `whatsappBotId` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"and","description":"Checks for all expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappMessageFilter","ofType":null}}},"defaultValue":null},{"name":"or","description":"Checks for any expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappMessageFilter","ofType":null}}},"defaultValue":null},{"name":"not","description":"Negates the expression.","type":{"kind":"INPUT_OBJECT","name":"WhatsappMessageFilter","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"WhatsappMessagesConnection","description":"A connection to a list of `WhatsappMessage` values.","fields":[{"name":"nodes","description":"A list of `WhatsappMessage` objects.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"OBJECT","name":"WhatsappMessage","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"edges","description":"A list of edges which contains the `WhatsappMessage` and cursor to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"WhatsappMessagesEdge","ofType":null}}}},"isDeprecated":false,"deprecationReason":null},{"name":"pageInfo","description":"Information to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"PageInfo","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"totalCount","description":"The count of *all* `WhatsappMessage` you could get from the connection.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Int","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"WhatsappMessage","description":null,"fields":[{"name":"nodeId","description":"A globally unique identifier. Can be used in various places throughout the system to identify this single value.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"id","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBotId","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"waMessageId","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"waMessage","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"waTimestamp","description":null,"args":[],"type":{"kind":"SCALAR","name":"Datetime","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createdAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"updatedAt","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Datetime","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBot","description":"Reads a single `WhatsappBot` that is related to this `WhatsappMessage`.","args":[],"type":{"kind":"OBJECT","name":"WhatsappBot","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappAttachments","description":"Reads and enables pagination through a set of `WhatsappAttachment`.","args":[{"name":"first","description":"Only read the first `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"last","description":"Only read the last `n` values of the set.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"offset","description":"Skip the first `n` values from our `after` cursor, an alternative to cursor\nbased pagination. May not be used with `last`.","type":{"kind":"SCALAR","name":"Int","ofType":null},"defaultValue":null},{"name":"before","description":"Read all values in the set before (above) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"after","description":"Read all values in the set after (below) this cursor.","type":{"kind":"SCALAR","name":"Cursor","ofType":null},"defaultValue":null},{"name":"orderBy","description":"The method to use when ordering `WhatsappAttachment`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WhatsappAttachmentsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"},{"name":"condition","description":"A condition to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentCondition","ofType":null},"defaultValue":null},{"name":"filter","description":"A filter to be used in determining which values should be returned by the collection.","type":{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentFilter","ofType":null},"defaultValue":null}],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"WhatsappAttachmentsConnection","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[{"kind":"INTERFACE","name":"Node","ofType":null}],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"WhatsappMessagesEdge","description":"A `WhatsappMessage` edge in the connection.","fields":[{"name":"cursor","description":"A cursor for use in pagination.","args":[],"type":{"kind":"SCALAR","name":"Cursor","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"node","description":"The `WhatsappMessage` at the end of the edge.","args":[],"type":{"kind":"OBJECT","name":"WhatsappMessage","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"WhatsappAttachmentsEdge","description":"A `WhatsappAttachment` edge in the connection.","fields":[{"name":"cursor","description":"A cursor for use in pagination.","args":[],"type":{"kind":"SCALAR","name":"Cursor","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"node","description":"The `WhatsappAttachment` at the end of the edge.","args":[],"type":{"kind":"OBJECT","name":"WhatsappAttachment","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"ENUM","name":"WhatsappBotsOrderBy","description":"Methods to use when ordering `WhatsappBot`.","fields":null,"inputFields":null,"interfaces":null,"enumValues":[{"name":"NATURAL","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"ID_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"TOKEN_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"TOKEN_DESC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_ASC","description":null,"isDeprecated":false,"deprecationReason":null},{"name":"PRIMARY_KEY_DESC","description":null,"isDeprecated":false,"deprecationReason":null}],"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WhatsappBotCondition","description":"A condition to be used against `WhatsappBot` object types. All fields are tested\nfor equality and combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Checks for equality with the object’s `id` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"token","description":"Checks for equality with the object’s `token` field.","type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WhatsappBotFilter","description":"A filter to be used against `WhatsappBot` object types. All fields are combined with a logical ‘and.’","fields":null,"inputFields":[{"name":"id","description":"Filter by the object’s `id` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"token","description":"Filter by the object’s `token` field.","type":{"kind":"INPUT_OBJECT","name":"UUIDFilter","ofType":null},"defaultValue":null},{"name":"and","description":"Checks for all expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappBotFilter","ofType":null}}},"defaultValue":null},{"name":"or","description":"Checks for any expressions in this list.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappBotFilter","ofType":null}}},"defaultValue":null},{"name":"not","description":"Negates the expression.","type":{"kind":"INPUT_OBJECT","name":"WhatsappBotFilter","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"WhatsappBotsConnection","description":"A connection to a list of `WhatsappBot` values.","fields":[{"name":"nodes","description":"A list of `WhatsappBot` objects.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"OBJECT","name":"WhatsappBot","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"edges","description":"A list of edges which contains the `WhatsappBot` and cursor to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"WhatsappBotsEdge","ofType":null}}}},"isDeprecated":false,"deprecationReason":null},{"name":"pageInfo","description":"Information to aid in pagination.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"PageInfo","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"totalCount","description":"The count of *all* `WhatsappBot` you could get from the connection.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Int","ofType":null}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"WhatsappBotsEdge","description":"A `WhatsappBot` edge in the connection.","fields":[{"name":"cursor","description":"A cursor for use in pagination.","args":[],"type":{"kind":"SCALAR","name":"Cursor","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"node","description":"The `WhatsappBot` at the end of the edge.","args":[],"type":{"kind":"OBJECT","name":"WhatsappBot","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"Mutation","description":"The root mutation type which contains root level fields which mutate data.","fields":[{"name":"createAccount","description":"Creates a single `Account`.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"CreateAccountInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"CreateAccountPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createSetting","description":"Creates a single `Setting`.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"CreateSettingInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"CreateSettingPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createSignalBot","description":"Creates a single `SignalBot`.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"CreateSignalBotInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"CreateSignalBotPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createUser","description":"Creates a single `User`.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"CreateUserInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"CreateUserPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createVoiceLine","description":"Creates a single `VoiceLine`.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"CreateVoiceLineInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"CreateVoiceLinePayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createVoiceProvider","description":"Creates a single `VoiceProvider`.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"CreateVoiceProviderInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"CreateVoiceProviderPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createWebhook","description":"Creates a single `Webhook`.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"CreateWebhookInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"CreateWebhookPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createWhatsappAttachment","description":"Creates a single `WhatsappAttachment`.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"CreateWhatsappAttachmentInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"CreateWhatsappAttachmentPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createWhatsappBot","description":"Creates a single `WhatsappBot`.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"CreateWhatsappBotInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"CreateWhatsappBotPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createWhatsappMessage","description":"Creates a single `WhatsappMessage`.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"CreateWhatsappMessageInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"CreateWhatsappMessagePayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateAccountByNodeId","description":"Updates a single `Account` using its globally unique id and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateAccountByNodeIdInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateAccountPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateAccount","description":"Updates a single `Account` using a unique key and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateAccountInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateAccountPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateSettingByNodeId","description":"Updates a single `Setting` using its globally unique id and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateSettingByNodeIdInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateSettingPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateSetting","description":"Updates a single `Setting` using a unique key and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateSettingInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateSettingPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateSignalBotByNodeId","description":"Updates a single `SignalBot` using its globally unique id and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateSignalBotByNodeIdInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateSignalBotPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateSignalBot","description":"Updates a single `SignalBot` using a unique key and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateSignalBotInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateSignalBotPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateUserByNodeId","description":"Updates a single `User` using its globally unique id and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateUserByNodeIdInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateUserPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateUser","description":"Updates a single `User` using a unique key and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateUserInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateUserPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateUserByEmail","description":"Updates a single `User` using a unique key and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateUserByEmailInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateUserPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateVoiceLineByNodeId","description":"Updates a single `VoiceLine` using its globally unique id and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateVoiceLineByNodeIdInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateVoiceLinePayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateVoiceLine","description":"Updates a single `VoiceLine` using a unique key and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateVoiceLineInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateVoiceLinePayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateVoiceProviderByNodeId","description":"Updates a single `VoiceProvider` using its globally unique id and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateVoiceProviderByNodeIdInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateVoiceProviderPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateVoiceProvider","description":"Updates a single `VoiceProvider` using a unique key and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateVoiceProviderInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateVoiceProviderPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateWebhookByNodeId","description":"Updates a single `Webhook` using its globally unique id and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateWebhookByNodeIdInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateWebhookPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateWebhook","description":"Updates a single `Webhook` using a unique key and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateWebhookInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateWebhookPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateWhatsappAttachmentByNodeId","description":"Updates a single `WhatsappAttachment` using its globally unique id and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateWhatsappAttachmentByNodeIdInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateWhatsappAttachmentPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateWhatsappAttachment","description":"Updates a single `WhatsappAttachment` using a unique key and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateWhatsappAttachmentInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateWhatsappAttachmentPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateWhatsappBotByNodeId","description":"Updates a single `WhatsappBot` using its globally unique id and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateWhatsappBotByNodeIdInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateWhatsappBotPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateWhatsappBot","description":"Updates a single `WhatsappBot` using a unique key and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateWhatsappBotInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateWhatsappBotPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateWhatsappMessageByNodeId","description":"Updates a single `WhatsappMessage` using its globally unique id and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateWhatsappMessageByNodeIdInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateWhatsappMessagePayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"updateWhatsappMessage","description":"Updates a single `WhatsappMessage` using a unique key and a patch.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UpdateWhatsappMessageInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"UpdateWhatsappMessagePayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"deleteVoiceLineByNodeId","description":"Deletes a single `VoiceLine` using its globally unique id.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"DeleteVoiceLineByNodeIdInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"DeleteVoiceLinePayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"deleteVoiceLine","description":"Deletes a single `VoiceLine` using a unique key.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"DeleteVoiceLineInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"DeleteVoiceLinePayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"deleteVoiceProviderByNodeId","description":"Deletes a single `VoiceProvider` using its globally unique id.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"DeleteVoiceProviderByNodeIdInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"DeleteVoiceProviderPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"deleteVoiceProvider","description":"Deletes a single `VoiceProvider` using a unique key.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"DeleteVoiceProviderInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"DeleteVoiceProviderPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"deleteWebhookByNodeId","description":"Deletes a single `Webhook` using its globally unique id.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"DeleteWebhookByNodeIdInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"DeleteWebhookPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"deleteWebhook","description":"Deletes a single `Webhook` using a unique key.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"DeleteWebhookInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"DeleteWebhookPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"createFirstUser","description":"Creates the first user with an admin role. Only possible when there are no other users in the database.","args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"CreateFirstUserInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"CreateFirstUserPayload","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"logout","description":null,"args":[{"name":"input","description":"The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"LogoutInput","ofType":null}},"defaultValue":null}],"type":{"kind":"OBJECT","name":"LogoutPayload","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"CreateAccountInput","description":"All input for the create `Account` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"account","description":"The `Account` to be created by this mutation.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"AccountInput","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"AccountInput","description":"An input for mutations affecting `Account`","fields":null,"inputFields":[{"name":"compoundId","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"userId","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null},{"name":"providerType","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"providerId","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"providerAccountId","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"refreshToken","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"accessToken","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"accessTokenExpires","description":null,"type":{"kind":"SCALAR","name":"Datetime","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"CreateAccountPayload","description":"The output of our create `Account` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"account","description":"The `Account` that was created by this mutation.","args":[],"type":{"kind":"OBJECT","name":"Account","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"user","description":"Reads a single `User` that is related to this `Account`.","args":[],"type":{"kind":"OBJECT","name":"User","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"accountEdge","description":"An edge for our `Account`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `Account`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"AccountsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"AccountsEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"CreateSettingInput","description":"All input for the create `Setting` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"setting","description":"The `Setting` to be created by this mutation.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"SettingInput","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"SettingInput","description":"An input for mutations affecting `Setting`","fields":null,"inputFields":[{"name":"name","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"value","description":null,"type":{"kind":"SCALAR","name":"JSON","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"CreateSettingPayload","description":"The output of our create `Setting` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"setting","description":"The `Setting` that was created by this mutation.","args":[],"type":{"kind":"OBJECT","name":"Setting","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"settingEdge","description":"An edge for our `Setting`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `Setting`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"SettingsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"SettingsEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"CreateSignalBotInput","description":"All input for the create `SignalBot` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"signalBot","description":"The `SignalBot` to be created by this mutation.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"SignalBotInput","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"SignalBotInput","description":"An input for mutations affecting `SignalBot`","fields":null,"inputFields":[{"name":"phoneNumber","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"token","description":null,"type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"userId","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null},{"name":"description","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"authInfo","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"isVerified","description":null,"type":{"kind":"SCALAR","name":"Boolean","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"CreateSignalBotPayload","description":"The output of our create `SignalBot` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"signalBot","description":"The `SignalBot` that was created by this mutation.","args":[],"type":{"kind":"OBJECT","name":"SignalBot","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"signalBotEdge","description":"An edge for our `SignalBot`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `SignalBot`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"SignalBotsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"SignalBotsEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"CreateUserInput","description":"All input for the create `User` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"user","description":"The `User` to be created by this mutation.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UserInput","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UserInput","description":"An input for mutations affecting `User`","fields":null,"inputFields":[{"name":"email","description":"The email address of the user.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"name","description":"Public-facing name (or pseudonym) of the user.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"avatar","description":"Optional avatar URL.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"userRole","description":"The role that defines the user's privileges.","type":{"kind":"ENUM","name":"RoleType","ofType":null},"defaultValue":null},{"name":"isActive","description":"If false, the user is not allowed to login or access the application","type":{"kind":"SCALAR","name":"Boolean","ofType":null},"defaultValue":null},{"name":"createdBy","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"CreateUserPayload","description":"The output of our create `User` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"user","description":"The `User` that was created by this mutation.","args":[],"type":{"kind":"OBJECT","name":"User","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"userEdge","description":"An edge for our `User`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `User`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"UsersOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"UsersEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"CreateVoiceLineInput","description":"All input for the create `VoiceLine` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"voiceLine","description":"The `VoiceLine` to be created by this mutation.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"VoiceLineInput","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"VoiceLineInput","description":"An input for mutations affecting `VoiceLine`","fields":null,"inputFields":[{"name":"providerId","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null},{"name":"providerLineSid","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"number","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"language","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"voice","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"promptText","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"promptAudio","description":null,"type":{"kind":"SCALAR","name":"JSON","ofType":null},"defaultValue":null},{"name":"audioPromptEnabled","description":null,"type":{"kind":"SCALAR","name":"Boolean","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"CreateVoiceLinePayload","description":"The output of our create `VoiceLine` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceLine","description":"The `VoiceLine` that was created by this mutation.","args":[],"type":{"kind":"OBJECT","name":"VoiceLine","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"provider","description":"Reads a single `VoiceProvider` that is related to this `VoiceLine`.","args":[],"type":{"kind":"OBJECT","name":"VoiceProvider","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceLineEdge","description":"An edge for our `VoiceLine`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `VoiceLine`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"VoiceLinesOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"VoiceLinesEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"CreateVoiceProviderInput","description":"All input for the create `VoiceProvider` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"voiceProvider","description":"The `VoiceProvider` to be created by this mutation.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"VoiceProviderInput","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"VoiceProviderInput","description":"An input for mutations affecting `VoiceProvider`","fields":null,"inputFields":[{"name":"kind","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"name","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"credentials","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"JSON","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"CreateVoiceProviderPayload","description":"The output of our create `VoiceProvider` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceProvider","description":"The `VoiceProvider` that was created by this mutation.","args":[],"type":{"kind":"OBJECT","name":"VoiceProvider","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceProviderEdge","description":"An edge for our `VoiceProvider`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `VoiceProvider`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"VoiceProvidersOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"VoiceProvidersEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"CreateWebhookInput","description":"All input for the create `Webhook` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"webhook","description":"The `Webhook` to be created by this mutation.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WebhookInput","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WebhookInput","description":"An input for mutations affecting `Webhook`","fields":null,"inputFields":[{"name":"backendType","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"backendId","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null},{"name":"name","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"endpointUrl","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"httpMethod","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"headers","description":null,"type":{"kind":"SCALAR","name":"JSON","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"CreateWebhookPayload","description":"The output of our create `Webhook` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"webhook","description":"The `Webhook` that was created by this mutation.","args":[],"type":{"kind":"OBJECT","name":"Webhook","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"webhookEdge","description":"An edge for our `Webhook`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `Webhook`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WebhooksOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"WebhooksEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"CreateWhatsappAttachmentInput","description":"All input for the create `WhatsappAttachment` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"whatsappAttachment","description":"The `WhatsappAttachment` to be created by this mutation.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentInput","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentInput","description":"An input for mutations affecting `WhatsappAttachment`","fields":null,"inputFields":[{"name":"whatsappBotId","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null},{"name":"whatsappMessageId","description":null,"type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"attachment","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"CreateWhatsappAttachmentPayload","description":"The output of our create `WhatsappAttachment` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappAttachment","description":"The `WhatsappAttachment` that was created by this mutation.","args":[],"type":{"kind":"OBJECT","name":"WhatsappAttachment","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBot","description":"Reads a single `WhatsappBot` that is related to this `WhatsappAttachment`.","args":[],"type":{"kind":"OBJECT","name":"WhatsappBot","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappMessage","description":"Reads a single `WhatsappMessage` that is related to this `WhatsappAttachment`.","args":[],"type":{"kind":"OBJECT","name":"WhatsappMessage","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappAttachmentEdge","description":"An edge for our `WhatsappAttachment`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `WhatsappAttachment`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WhatsappAttachmentsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"WhatsappAttachmentsEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"CreateWhatsappBotInput","description":"All input for the create `WhatsappBot` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"whatsappBot","description":"The `WhatsappBot` to be created by this mutation.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappBotInput","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WhatsappBotInput","description":"An input for mutations affecting `WhatsappBot`","fields":null,"inputFields":[{"name":"phoneNumber","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null},{"name":"token","description":null,"type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"userId","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null},{"name":"description","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"authInfo","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"qrCode","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"isVerified","description":null,"type":{"kind":"SCALAR","name":"Boolean","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"CreateWhatsappBotPayload","description":"The output of our create `WhatsappBot` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBot","description":"The `WhatsappBot` that was created by this mutation.","args":[],"type":{"kind":"OBJECT","name":"WhatsappBot","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBotEdge","description":"An edge for our `WhatsappBot`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `WhatsappBot`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WhatsappBotsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"WhatsappBotsEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"CreateWhatsappMessageInput","description":"All input for the create `WhatsappMessage` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"whatsappMessage","description":"The `WhatsappMessage` to be created by this mutation.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappMessageInput","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WhatsappMessageInput","description":"An input for mutations affecting `WhatsappMessage`","fields":null,"inputFields":[{"name":"whatsappBotId","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null},{"name":"waMessageId","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"waMessage","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"waTimestamp","description":null,"type":{"kind":"SCALAR","name":"Datetime","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"CreateWhatsappMessagePayload","description":"The output of our create `WhatsappMessage` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappMessage","description":"The `WhatsappMessage` that was created by this mutation.","args":[],"type":{"kind":"OBJECT","name":"WhatsappMessage","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBot","description":"Reads a single `WhatsappBot` that is related to this `WhatsappMessage`.","args":[],"type":{"kind":"OBJECT","name":"WhatsappBot","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappMessageEdge","description":"An edge for our `WhatsappMessage`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `WhatsappMessage`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WhatsappMessagesOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"WhatsappMessagesEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateAccountByNodeIdInput","description":"All input for the `updateAccountByNodeId` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"nodeId","description":"The globally unique `ID` which will identify a single `Account` to be updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `Account` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"AccountPatch","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"AccountPatch","description":"Represents an update to a `Account`. Fields that are set will be updated.","fields":null,"inputFields":[{"name":"compoundId","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"providerType","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"providerId","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"providerAccountId","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"refreshToken","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"accessToken","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"accessTokenExpires","description":null,"type":{"kind":"SCALAR","name":"Datetime","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"UpdateAccountPayload","description":"The output of our update `Account` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"account","description":"The `Account` that was updated by this mutation.","args":[],"type":{"kind":"OBJECT","name":"Account","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"user","description":"Reads a single `User` that is related to this `Account`.","args":[],"type":{"kind":"OBJECT","name":"User","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"accountEdge","description":"An edge for our `Account`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `Account`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"AccountsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"AccountsEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateAccountInput","description":"All input for the `updateAccount` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `Account` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"AccountPatch","ofType":null}},"defaultValue":null},{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateSettingByNodeIdInput","description":"All input for the `updateSettingByNodeId` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"nodeId","description":"The globally unique `ID` which will identify a single `Setting` to be updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `Setting` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"SettingPatch","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"SettingPatch","description":"Represents an update to a `Setting`. Fields that are set will be updated.","fields":null,"inputFields":[{"name":"name","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"value","description":null,"type":{"kind":"SCALAR","name":"JSON","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"UpdateSettingPayload","description":"The output of our update `Setting` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"setting","description":"The `Setting` that was updated by this mutation.","args":[],"type":{"kind":"OBJECT","name":"Setting","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"settingEdge","description":"An edge for our `Setting`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `Setting`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"SettingsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"SettingsEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateSettingInput","description":"All input for the `updateSetting` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `Setting` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"SettingPatch","ofType":null}},"defaultValue":null},{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateSignalBotByNodeIdInput","description":"All input for the `updateSignalBotByNodeId` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"nodeId","description":"The globally unique `ID` which will identify a single `SignalBot` to be updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `SignalBot` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"SignalBotPatch","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"SignalBotPatch","description":"Represents an update to a `SignalBot`. Fields that are set will be updated.","fields":null,"inputFields":[{"name":"phoneNumber","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"token","description":null,"type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"userId","description":null,"type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"description","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"authInfo","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"isVerified","description":null,"type":{"kind":"SCALAR","name":"Boolean","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"UpdateSignalBotPayload","description":"The output of our update `SignalBot` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"signalBot","description":"The `SignalBot` that was updated by this mutation.","args":[],"type":{"kind":"OBJECT","name":"SignalBot","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"signalBotEdge","description":"An edge for our `SignalBot`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `SignalBot`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"SignalBotsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"SignalBotsEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateSignalBotInput","description":"All input for the `updateSignalBot` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `SignalBot` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"SignalBotPatch","ofType":null}},"defaultValue":null},{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateUserByNodeIdInput","description":"All input for the `updateUserByNodeId` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"nodeId","description":"The globally unique `ID` which will identify a single `User` to be updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `User` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UserPatch","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UserPatch","description":"Represents an update to a `User`. Fields that are set will be updated.","fields":null,"inputFields":[{"name":"email","description":"The email address of the user.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"name","description":"Public-facing name (or pseudonym) of the user.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"avatar","description":"Optional avatar URL.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"userRole","description":"The role that defines the user's privileges.","type":{"kind":"ENUM","name":"RoleType","ofType":null},"defaultValue":null},{"name":"isActive","description":"If false, the user is not allowed to login or access the application","type":{"kind":"SCALAR","name":"Boolean","ofType":null},"defaultValue":null},{"name":"createdBy","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"UpdateUserPayload","description":"The output of our update `User` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"user","description":"The `User` that was updated by this mutation.","args":[],"type":{"kind":"OBJECT","name":"User","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"userEdge","description":"An edge for our `User`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `User`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"UsersOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"UsersEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateUserInput","description":"All input for the `updateUser` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `User` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UserPatch","ofType":null}},"defaultValue":null},{"name":"id","description":"Unique identifier for the user.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateUserByEmailInput","description":"All input for the `updateUserByEmail` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `User` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"UserPatch","ofType":null}},"defaultValue":null},{"name":"email","description":"The email address of the user.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateVoiceLineByNodeIdInput","description":"All input for the `updateVoiceLineByNodeId` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"nodeId","description":"The globally unique `ID` which will identify a single `VoiceLine` to be updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `VoiceLine` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"VoiceLinePatch","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"VoiceLinePatch","description":"Represents an update to a `VoiceLine`. Fields that are set will be updated.","fields":null,"inputFields":[{"name":"language","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"voice","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"promptText","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"promptAudio","description":null,"type":{"kind":"SCALAR","name":"JSON","ofType":null},"defaultValue":null},{"name":"audioPromptEnabled","description":null,"type":{"kind":"SCALAR","name":"Boolean","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"UpdateVoiceLinePayload","description":"The output of our update `VoiceLine` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceLine","description":"The `VoiceLine` that was updated by this mutation.","args":[],"type":{"kind":"OBJECT","name":"VoiceLine","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"provider","description":"Reads a single `VoiceProvider` that is related to this `VoiceLine`.","args":[],"type":{"kind":"OBJECT","name":"VoiceProvider","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceLineEdge","description":"An edge for our `VoiceLine`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `VoiceLine`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"VoiceLinesOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"VoiceLinesEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateVoiceLineInput","description":"All input for the `updateVoiceLine` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `VoiceLine` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"VoiceLinePatch","ofType":null}},"defaultValue":null},{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateVoiceProviderByNodeIdInput","description":"All input for the `updateVoiceProviderByNodeId` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"nodeId","description":"The globally unique `ID` which will identify a single `VoiceProvider` to be updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `VoiceProvider` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"VoiceProviderPatch","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"VoiceProviderPatch","description":"Represents an update to a `VoiceProvider`. Fields that are set will be updated.","fields":null,"inputFields":[{"name":"name","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"credentials","description":null,"type":{"kind":"SCALAR","name":"JSON","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"UpdateVoiceProviderPayload","description":"The output of our update `VoiceProvider` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceProvider","description":"The `VoiceProvider` that was updated by this mutation.","args":[],"type":{"kind":"OBJECT","name":"VoiceProvider","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceProviderEdge","description":"An edge for our `VoiceProvider`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `VoiceProvider`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"VoiceProvidersOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"VoiceProvidersEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateVoiceProviderInput","description":"All input for the `updateVoiceProvider` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `VoiceProvider` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"VoiceProviderPatch","ofType":null}},"defaultValue":null},{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateWebhookByNodeIdInput","description":"All input for the `updateWebhookByNodeId` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"nodeId","description":"The globally unique `ID` which will identify a single `Webhook` to be updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `Webhook` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WebhookPatch","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WebhookPatch","description":"Represents an update to a `Webhook`. Fields that are set will be updated.","fields":null,"inputFields":[{"name":"name","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"endpointUrl","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"httpMethod","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"headers","description":null,"type":{"kind":"SCALAR","name":"JSON","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"UpdateWebhookPayload","description":"The output of our update `Webhook` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"webhook","description":"The `Webhook` that was updated by this mutation.","args":[],"type":{"kind":"OBJECT","name":"Webhook","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"webhookEdge","description":"An edge for our `Webhook`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `Webhook`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WebhooksOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"WebhooksEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateWebhookInput","description":"All input for the `updateWebhook` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `Webhook` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WebhookPatch","ofType":null}},"defaultValue":null},{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateWhatsappAttachmentByNodeIdInput","description":"All input for the `updateWhatsappAttachmentByNodeId` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"nodeId","description":"The globally unique `ID` which will identify a single `WhatsappAttachment` to be updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `WhatsappAttachment` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentPatch","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentPatch","description":"Represents an update to a `WhatsappAttachment`. Fields that are set will be updated.","fields":null,"inputFields":[{"name":"whatsappBotId","description":null,"type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"whatsappMessageId","description":null,"type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"attachment","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"UpdateWhatsappAttachmentPayload","description":"The output of our update `WhatsappAttachment` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappAttachment","description":"The `WhatsappAttachment` that was updated by this mutation.","args":[],"type":{"kind":"OBJECT","name":"WhatsappAttachment","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBot","description":"Reads a single `WhatsappBot` that is related to this `WhatsappAttachment`.","args":[],"type":{"kind":"OBJECT","name":"WhatsappBot","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappMessage","description":"Reads a single `WhatsappMessage` that is related to this `WhatsappAttachment`.","args":[],"type":{"kind":"OBJECT","name":"WhatsappMessage","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappAttachmentEdge","description":"An edge for our `WhatsappAttachment`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `WhatsappAttachment`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WhatsappAttachmentsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"WhatsappAttachmentsEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateWhatsappAttachmentInput","description":"All input for the `updateWhatsappAttachment` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `WhatsappAttachment` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappAttachmentPatch","ofType":null}},"defaultValue":null},{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateWhatsappBotByNodeIdInput","description":"All input for the `updateWhatsappBotByNodeId` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"nodeId","description":"The globally unique `ID` which will identify a single `WhatsappBot` to be updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `WhatsappBot` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappBotPatch","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WhatsappBotPatch","description":"Represents an update to a `WhatsappBot`. Fields that are set will be updated.","fields":null,"inputFields":[{"name":"phoneNumber","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"token","description":null,"type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"userId","description":null,"type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"description","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"authInfo","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"qrCode","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"isVerified","description":null,"type":{"kind":"SCALAR","name":"Boolean","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"UpdateWhatsappBotPayload","description":"The output of our update `WhatsappBot` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBot","description":"The `WhatsappBot` that was updated by this mutation.","args":[],"type":{"kind":"OBJECT","name":"WhatsappBot","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBotEdge","description":"An edge for our `WhatsappBot`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `WhatsappBot`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WhatsappBotsOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"WhatsappBotsEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateWhatsappBotInput","description":"All input for the `updateWhatsappBot` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `WhatsappBot` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappBotPatch","ofType":null}},"defaultValue":null},{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateWhatsappMessageByNodeIdInput","description":"All input for the `updateWhatsappMessageByNodeId` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"nodeId","description":"The globally unique `ID` which will identify a single `WhatsappMessage` to be updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `WhatsappMessage` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappMessagePatch","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"WhatsappMessagePatch","description":"Represents an update to a `WhatsappMessage`. Fields that are set will be updated.","fields":null,"inputFields":[{"name":"whatsappBotId","description":null,"type":{"kind":"SCALAR","name":"UUID","ofType":null},"defaultValue":null},{"name":"waMessageId","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"waMessage","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"waTimestamp","description":null,"type":{"kind":"SCALAR","name":"Datetime","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"UpdateWhatsappMessagePayload","description":"The output of our update `WhatsappMessage` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappMessage","description":"The `WhatsappMessage` that was updated by this mutation.","args":[],"type":{"kind":"OBJECT","name":"WhatsappMessage","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappBot","description":"Reads a single `WhatsappBot` that is related to this `WhatsappMessage`.","args":[],"type":{"kind":"OBJECT","name":"WhatsappBot","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"whatsappMessageEdge","description":"An edge for our `WhatsappMessage`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `WhatsappMessage`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WhatsappMessagesOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"WhatsappMessagesEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"UpdateWhatsappMessageInput","description":"All input for the `updateWhatsappMessage` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"patch","description":"An object where the defined keys will be set on the `WhatsappMessage` being updated.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"INPUT_OBJECT","name":"WhatsappMessagePatch","ofType":null}},"defaultValue":null},{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"DeleteVoiceLineByNodeIdInput","description":"All input for the `deleteVoiceLineByNodeId` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"nodeId","description":"The globally unique `ID` which will identify a single `VoiceLine` to be deleted.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"DeleteVoiceLinePayload","description":"The output of our delete `VoiceLine` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceLine","description":"The `VoiceLine` that was deleted by this mutation.","args":[],"type":{"kind":"OBJECT","name":"VoiceLine","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"deletedVoiceLineNodeId","description":null,"args":[],"type":{"kind":"SCALAR","name":"ID","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"provider","description":"Reads a single `VoiceProvider` that is related to this `VoiceLine`.","args":[],"type":{"kind":"OBJECT","name":"VoiceProvider","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceLineEdge","description":"An edge for our `VoiceLine`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `VoiceLine`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"VoiceLinesOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"VoiceLinesEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"DeleteVoiceLineInput","description":"All input for the `deleteVoiceLine` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"DeleteVoiceProviderByNodeIdInput","description":"All input for the `deleteVoiceProviderByNodeId` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"nodeId","description":"The globally unique `ID` which will identify a single `VoiceProvider` to be deleted.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"DeleteVoiceProviderPayload","description":"The output of our delete `VoiceProvider` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceProvider","description":"The `VoiceProvider` that was deleted by this mutation.","args":[],"type":{"kind":"OBJECT","name":"VoiceProvider","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"deletedVoiceProviderNodeId","description":null,"args":[],"type":{"kind":"SCALAR","name":"ID","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"voiceProviderEdge","description":"An edge for our `VoiceProvider`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `VoiceProvider`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"VoiceProvidersOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"VoiceProvidersEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"DeleteVoiceProviderInput","description":"All input for the `deleteVoiceProvider` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"DeleteWebhookByNodeIdInput","description":"All input for the `deleteWebhookByNodeId` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"nodeId","description":"The globally unique `ID` which will identify a single `Webhook` to be deleted.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"ID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"DeleteWebhookPayload","description":"The output of our delete `Webhook` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"webhook","description":"The `Webhook` that was deleted by this mutation.","args":[],"type":{"kind":"OBJECT","name":"Webhook","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"deletedWebhookNodeId","description":null,"args":[],"type":{"kind":"SCALAR","name":"ID","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"webhookEdge","description":"An edge for our `Webhook`. May be used by Relay 1.","args":[{"name":"orderBy","description":"The method to use when ordering `Webhook`.","type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"WebhooksOrderBy","ofType":null}}},"defaultValue":"[PRIMARY_KEY_ASC]"}],"type":{"kind":"OBJECT","name":"WebhooksEdge","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"DeleteWebhookInput","description":"All input for the `deleteWebhook` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"id","description":null,"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"UUID","ofType":null}},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"CreateFirstUserInput","description":"All input for the `createFirstUser` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"userEmail","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null},{"name":"userName","description":null,"type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"CreateFirstUserPayload","description":"The output of our `createFirstUser` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"users","description":null,"args":[],"type":{"kind":"LIST","name":null,"ofType":{"kind":"OBJECT","name":"User","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"INPUT_OBJECT","name":"LogoutInput","description":"All input for the `logout` mutation.","fields":null,"inputFields":[{"name":"clientMutationId","description":"An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":null}],"interfaces":null,"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"LogoutPayload","description":"The output of our `logout` mutation.","fields":[{"name":"clientMutationId","description":"The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"query","description":"Our root query field type. Allows us to run any query from our mutation payload.","args":[],"type":{"kind":"OBJECT","name":"Query","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"__Schema","description":"A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.","fields":[{"name":"types","description":"A list of all types supported by this server.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"__Type","ofType":null}}}},"isDeprecated":false,"deprecationReason":null},{"name":"queryType","description":"The type that query operations will be rooted at.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"__Type","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"mutationType","description":"If this server supports mutation, the type that mutation operations will be rooted at.","args":[],"type":{"kind":"OBJECT","name":"__Type","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"subscriptionType","description":"If this server support subscription, the type that subscription operations will be rooted at.","args":[],"type":{"kind":"OBJECT","name":"__Type","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"directives","description":"A list of all directives supported by this server.","args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"__Directive","ofType":null}}}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"__Type","description":"The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\n\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name and description, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.","fields":[{"name":"kind","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"__TypeKind","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"name","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"description","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"fields","description":null,"args":[{"name":"includeDeprecated","description":null,"type":{"kind":"SCALAR","name":"Boolean","ofType":null},"defaultValue":"false"}],"type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"__Field","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"interfaces","description":null,"args":[],"type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"__Type","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"possibleTypes","description":null,"args":[],"type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"__Type","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"enumValues","description":null,"args":[{"name":"includeDeprecated","description":null,"type":{"kind":"SCALAR","name":"Boolean","ofType":null},"defaultValue":"false"}],"type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"__EnumValue","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"inputFields","description":null,"args":[],"type":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"__InputValue","ofType":null}}},"isDeprecated":false,"deprecationReason":null},{"name":"ofType","description":null,"args":[],"type":{"kind":"OBJECT","name":"__Type","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"ENUM","name":"__TypeKind","description":"An enum describing what kind of type a given `__Type` is.","fields":null,"inputFields":null,"interfaces":null,"enumValues":[{"name":"SCALAR","description":"Indicates this type is a scalar.","isDeprecated":false,"deprecationReason":null},{"name":"OBJECT","description":"Indicates this type is an object. `fields` and `interfaces` are valid fields.","isDeprecated":false,"deprecationReason":null},{"name":"INTERFACE","description":"Indicates this type is an interface. `fields` and `possibleTypes` are valid fields.","isDeprecated":false,"deprecationReason":null},{"name":"UNION","description":"Indicates this type is a union. `possibleTypes` is a valid field.","isDeprecated":false,"deprecationReason":null},{"name":"ENUM","description":"Indicates this type is an enum. `enumValues` is a valid field.","isDeprecated":false,"deprecationReason":null},{"name":"INPUT_OBJECT","description":"Indicates this type is an input object. `inputFields` is a valid field.","isDeprecated":false,"deprecationReason":null},{"name":"LIST","description":"Indicates this type is a list. `ofType` is a valid field.","isDeprecated":false,"deprecationReason":null},{"name":"NON_NULL","description":"Indicates this type is a non-null. `ofType` is a valid field.","isDeprecated":false,"deprecationReason":null}],"possibleTypes":null},{"kind":"OBJECT","name":"__Field","description":"Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.","fields":[{"name":"name","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"description","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"args","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"__InputValue","ofType":null}}}},"isDeprecated":false,"deprecationReason":null},{"name":"type","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"__Type","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"isDeprecated","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Boolean","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"deprecationReason","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"__InputValue","description":"Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.","fields":[{"name":"name","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"description","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"type","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"__Type","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"defaultValue","description":"A GraphQL-formatted string representing the default value for this input value.","args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"__EnumValue","description":"One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.","fields":[{"name":"name","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"description","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"isDeprecated","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Boolean","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"deprecationReason","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"OBJECT","name":"__Directive","description":"A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\n\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.","fields":[{"name":"name","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"String","ofType":null}},"isDeprecated":false,"deprecationReason":null},{"name":"description","description":null,"args":[],"type":{"kind":"SCALAR","name":"String","ofType":null},"isDeprecated":false,"deprecationReason":null},{"name":"locations","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"ENUM","name":"__DirectiveLocation","ofType":null}}}},"isDeprecated":false,"deprecationReason":null},{"name":"args","description":null,"args":[],"type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"LIST","name":null,"ofType":{"kind":"NON_NULL","name":null,"ofType":{"kind":"OBJECT","name":"__InputValue","ofType":null}}}},"isDeprecated":false,"deprecationReason":null}],"inputFields":null,"interfaces":[],"enumValues":null,"possibleTypes":null},{"kind":"ENUM","name":"__DirectiveLocation","description":"A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.","fields":null,"inputFields":null,"interfaces":null,"enumValues":[{"name":"QUERY","description":"Location adjacent to a query operation.","isDeprecated":false,"deprecationReason":null},{"name":"MUTATION","description":"Location adjacent to a mutation operation.","isDeprecated":false,"deprecationReason":null},{"name":"SUBSCRIPTION","description":"Location adjacent to a subscription operation.","isDeprecated":false,"deprecationReason":null},{"name":"FIELD","description":"Location adjacent to a field.","isDeprecated":false,"deprecationReason":null},{"name":"FRAGMENT_DEFINITION","description":"Location adjacent to a fragment definition.","isDeprecated":false,"deprecationReason":null},{"name":"FRAGMENT_SPREAD","description":"Location adjacent to a fragment spread.","isDeprecated":false,"deprecationReason":null},{"name":"INLINE_FRAGMENT","description":"Location adjacent to an inline fragment.","isDeprecated":false,"deprecationReason":null},{"name":"VARIABLE_DEFINITION","description":"Location adjacent to a variable definition.","isDeprecated":false,"deprecationReason":null},{"name":"SCHEMA","description":"Location adjacent to a schema definition.","isDeprecated":false,"deprecationReason":null},{"name":"SCALAR","description":"Location adjacent to a scalar definition.","isDeprecated":false,"deprecationReason":null},{"name":"OBJECT","description":"Location adjacent to an object type definition.","isDeprecated":false,"deprecationReason":null},{"name":"FIELD_DEFINITION","description":"Location adjacent to a field definition.","isDeprecated":false,"deprecationReason":null},{"name":"ARGUMENT_DEFINITION","description":"Location adjacent to an argument definition.","isDeprecated":false,"deprecationReason":null},{"name":"INTERFACE","description":"Location adjacent to an interface definition.","isDeprecated":false,"deprecationReason":null},{"name":"UNION","description":"Location adjacent to a union definition.","isDeprecated":false,"deprecationReason":null},{"name":"ENUM","description":"Location adjacent to an enum definition.","isDeprecated":false,"deprecationReason":null},{"name":"ENUM_VALUE","description":"Location adjacent to an enum value definition.","isDeprecated":false,"deprecationReason":null},{"name":"INPUT_OBJECT","description":"Location adjacent to an input object type definition.","isDeprecated":false,"deprecationReason":null},{"name":"INPUT_FIELD_DEFINITION","description":"Location adjacent to an input object field definition.","isDeprecated":false,"deprecationReason":null}],"possibleTypes":null}],"directives":[{"name":"include","description":"Directs the executor to include this field or fragment only when the `if` argument is true.","locations":["FIELD","FRAGMENT_SPREAD","INLINE_FRAGMENT"],"args":[{"name":"if","description":"Included when true.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Boolean","ofType":null}},"defaultValue":null}]},{"name":"skip","description":"Directs the executor to skip this field or fragment when the `if` argument is true.","locations":["FIELD","FRAGMENT_SPREAD","INLINE_FRAGMENT"],"args":[{"name":"if","description":"Skipped when true.","type":{"kind":"NON_NULL","name":null,"ofType":{"kind":"SCALAR","name":"Boolean","ofType":null}},"defaultValue":null}]},{"name":"deprecated","description":"Marks an element of a GraphQL schema as no longer supported.","locations":["FIELD_DEFINITION","ENUM_VALUE"],"args":[{"name":"reason","description":"Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax (as specified by [CommonMark](https://commonmark.org/).","type":{"kind":"SCALAR","name":"String","ofType":null},"defaultValue":"\"No longer supported\""}]}]}}} diff --git a/apps/link/metamigo-add/_lib/nextauth-adapter.ts b/apps/link/metamigo-add/_lib/nextauth-adapter.ts deleted file mode 100644 index b2af2cc..0000000 --- a/apps/link/metamigo-add/_lib/nextauth-adapter.ts +++ /dev/null @@ -1,230 +0,0 @@ -/* eslint-disable unicorn/no-null */ -import type { - Adapter, - AdapterAccount, - AdapterSession, - AdapterUser, -} from "next-auth/adapters"; -import * as Wreck from "@hapi/wreck"; -import * as Boom from "@hapi/boom"; - -import type { IAppConfig } from "@digiresilience/metamigo-config"; - -export interface Profile { - name: string; - email: string; - emailVerified: string; - userRole: string; - avatar?: string; - image?: string; - createdBy: string; -} - -export type User = Profile & { id: string; createdAt: Date; updatedAt: Date }; - -export interface Session { - userId: string; - expires: Date; - sessionToken: string; - accessToken: string; - createdAt: Date; - updatedAt: Date; -} - -// from https://github.com/nextauthjs/next-auth/blob/main/src/lib/errors.js -class UnknownError extends Error { - constructor(message: any) { - super(message); - this.name = "UnknownError"; - this.message = message; - } - - toJSON() { - return { - error: { - name: this.name, - message: this.message, - // stack: this.stack - }, - }; - } -} - -class CreateUserError extends UnknownError { - constructor(message: any) { - super(message); - this.name = "CreateUserError"; - this.message = message; - } -} - -const basicHeader = (secret: any) => - "Basic " + Buffer.from(secret + ":", "utf8").toString("base64"); - -export const MetamigoAdapter = (config: IAppConfig): Adapter => { - if (!config) throw new Error("MetamigoAdapter: config is not defined."); - const wreck = Wreck.defaults({ - headers: { - authorization: basicHeader(config.nextAuth.secret), - }, - baseUrl: `${config.frontend.apiUrl}/api/nextauth/`, - maxBytes: 1024 * 1024, - json: "force", - }); - - function getAdapter(): Adapter { - async function createUser(profile: Profile) { - try { - if (!profile.createdBy) profile = { ...profile, createdBy: "nextauth" }; - profile.avatar = profile.image; - delete profile.image; - const { payload } = await wreck.post("createUser", { - payload: profile, - }); - return payload; - } catch { - throw new CreateUserError("CREATE_USER_ERROR"); - } - } - - async function getUser(id: string) { - try { - const { payload } = await wreck.get(`getUser/${id}`); - - return payload; - } catch (error) { - if (Boom.isBoom(error, 404)) return null; - throw new Error("GET_USER_BY_ID_ERROR"); - } - } - - async function getUserByEmail(email: string) { - try { - const { payload } = await wreck.get(`getUserByEmail/${email}`); - return payload; - } catch (error) { - if (Boom.isBoom(error, 404)) return null; - throw new Error("GET_USER_BY_EMAIL_ERROR"); - } - } - - async function getUserByAccount({ - providerAccountId, - provider, - }: { - providerAccountId: string; - provider: string; - }) { - try { - const { payload } = await wreck.get( - `getUserByAccount/${provider}/${providerAccountId}` - ); - - return payload; - } catch (error) { - if (Boom.isBoom(error, 404)) return null; - console.log(error); - throw new Error("GET_USER_BY_ACCOUNT"); - } - } - - async function updateUser(user: User) { - try { - const { payload } = await wreck.put("updateUser", { - payload: user, - }); - - return payload; - } catch { - throw new Error("UPDATE_USER"); - } - } - - async function linkAccount(account: AdapterAccount) { - try { - await wreck.put("linkAccount", { payload: account } as any); - } catch (error) { - console.log(error); - throw new Error("LINK_ACCOUNT_ERROR"); - } - } - - async function createSession(user: User) { - try { - const { payload }: { payload: AdapterSession } = await wreck.post( - "createSession", - { - payload: user, - } - ); - payload.expires = new Date(payload.expires); - return payload; - } catch (error) { - console.log(error); - throw new Error("CREATE_SESSION_ERROR"); - } - } - - async function getSessionAndUser(sessionToken: string) { - try { - const { payload }: { payload: any } = await wreck.get( - `getSessionAndUser/${sessionToken}` - ); - const { - session, - user, - }: { session: AdapterSession; user: AdapterUser } = payload; - session.expires = new Date(session.expires); - return { session, user }; - } catch (error) { - console.log(error); - if (Boom.isBoom(error, 404)) return null; - throw new Error("GET_SESSION_AND_USER_ERROR"); - } - } - - async function updateSession(session: Session, force: boolean) { - try { - const payload = { - ...session, - expires: new Date(session.expires).getTime(), - }; - const { payload: result } = await wreck.put( - `updateSession?force=${Boolean(force)}`, - { - payload, - } - ); - return result; - } catch { - throw new Error("UPDATE_SESSION_ERROR"); - } - } - - async function deleteSession(sessionToken: string) { - try { - await wreck.delete(`deleteSession/${sessionToken}`); - } catch { - throw new Error("DELETE_SESSION_ERROR"); - } - } - - return { - createUser, - getUser, - getUserByEmail, - getUserByAccount, - updateUser, - // deleteUser, - linkAccount, - // unlinkAccount, - createSession, - getSessionAndUser, - updateSession, - deleteSession, - // @ts-expect-error: Type error - } as AdapterInstance; - } - - return getAdapter(); -}; diff --git a/apps/link/metamigo-add/_lib/phone-numbers.ts b/apps/link/metamigo-add/_lib/phone-numbers.ts deleted file mode 100644 index 8a669fc..0000000 --- a/apps/link/metamigo-add/_lib/phone-numbers.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { regex } from "react-admin"; - -export const E164Regex = /^\+[1-9]\d{1,14}$/; -/** - * Returns true if the number is a valid E164 number - */ -export const isValidE164Number = (phoneNumber: string) => - E164Regex.test(phoneNumber); - -/** - * Given a phone number approximation, will clean out whitespace and punctuation. - */ -export const sanitizeE164Number = (phoneNumber: string) => { - if (!phoneNumber) return ""; - if (!phoneNumber.trim()) return ""; - const sanitized = phoneNumber - .replaceAll(/\s/g, "") - .replaceAll(".", "") - .replaceAll("-", "") - .replaceAll("(", "") - .replaceAll(")", ""); - - if (sanitized[0] !== "+") return `+${sanitized}`; - return sanitized; -}; - -export const validateE164Number = regex( - E164Regex, - "Must start with a + and have no punctunation and no spaces." -); diff --git a/apps/link/metamigo-add/api/auth/[...nextauth]/route.ts b/apps/link/metamigo-add/api/auth/[...nextauth]/route.ts deleted file mode 100644 index 676b1cd..0000000 --- a/apps/link/metamigo-add/api/auth/[...nextauth]/route.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { NextRequest } from "next/server"; -import NextAuth from "next-auth"; -import Google from "next-auth/providers/google"; -import GitHub from "next-auth/providers/github"; -import GitLab from "next-auth/providers/gitlab"; -import Cognito from "next-auth/providers/cognito"; -import { loadConfig, IAppConfig } from "@digiresilience/metamigo-config"; -/* -import { MetamigoAdapter } from "app/_lib/nextauth-adapter"; -import { CloudflareAccessProvider } from "app/_lib/cloudflare"; - -const nextAuthOptions = (config: IAppConfig, req: NextRequest) => { - const { nextAuth, cfaccess } = config; - const adapter = MetamigoAdapter(config); - const providers = []; - - const { audience, domain } = cfaccess; - const cloudflareAccessEnabled = audience && domain; - if (cloudflareAccessEnabled) - providers.push(CloudflareAccessProvider(audience, domain, adapter, req as any)); - else { - if (nextAuth.google?.id) - providers.push( - Google({ - clientId: nextAuth.google.id, - clientSecret: nextAuth.google.secret, - }) - ); - - if (nextAuth.github?.id) - providers.push( - GitHub({ - clientId: nextAuth.github.id, - clientSecret: nextAuth.github.secret, - }) - ); - - if (nextAuth.gitlab?.id) - providers.push( - GitLab({ - clientId: nextAuth.gitlab.id, - clientSecret: nextAuth.gitlab.secret, - }) - ); - - if (nextAuth.cognito?.id) - providers.push( - Cognito({ - clientId: nextAuth.cognito.id, - clientSecret: nextAuth.cognito.secret, - // domain: nextAuth.cognito.domain, - }) - ); - } - - if (providers.length === 0) - throw new Error( - "No next-auth providers configured. See Metamigo configuration docs." - ); - - return { - secret: nextAuth.secret, - session: { - strategy: "database", - maxAge: 8 * 60 * 60, // 8 hours - }, - jwt: { - secret: nextAuth.secret, - }, - providers, - adapter, - callbacks: { - async session({ session, user }: any) { - session.user.id = user.id; - session.user.userRole = user.userRole; - return session; - }, - }, - }; -}; -*/ -const handler = async (req: NextRequest, context: any) => { - const config = await loadConfig(); - const authOptions = {}; // nextAuthOptions(config, req); - // @ts-expect-error: non-existent property - return NextAuth(req, context, authOptions); -}; - -export { handler as GET, handler as POST }; diff --git a/apps/link/metamigo-add/api/graphql/[[...path]]/route.ts b/apps/link/metamigo-add/api/graphql/[[...path]]/route.ts deleted file mode 100644 index 1225892..0000000 --- a/apps/link/metamigo-add/api/graphql/[[...path]]/route.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { createProxyMiddleware } from "http-proxy-middleware"; - -export const POST = createProxyMiddleware({ - target: - process.env.NODE_ENV === "production" - ? "http://metamigo-api:3001" - : "http://127.0.0.1:3001", - changeOrigin: true, - pathRewrite: { "^/graphql": "/graphql" }, - xfwd: true, - onProxyReq(proxyReq, req, _res) { - const auth = proxyReq.getHeader("authorization"); - if (auth) { - // pass along user provided authorization header - return; - } - - // Else extract the session token from the cookie and pass - // as bearer token to the proxy target - let token = req.cookies["__Secure-next-auth.session-token"]; - if (!token) token = req.cookies["next-auth.session-token"]; - - if (token) { - proxyReq.setHeader("authorization", `Bearer ${token}`); - proxyReq.removeHeader("cookie"); - } else { - console.error("no token found. proxied request to backend will fail."); - } - }, -}); diff --git a/apps/link/metamigo-add/api/proxy/[[...path]]/route.js b/apps/link/metamigo-add/api/proxy/[[...path]]/route.js deleted file mode 100644 index e9820d0..0000000 --- a/apps/link/metamigo-add/api/proxy/[[...path]]/route.js +++ /dev/null @@ -1,33 +0,0 @@ -import { createProxyMiddleware } from "http-proxy-middleware"; - -const handler = createProxyMiddleware({ - target: - process.env.NODE_ENV === "production" - ? "http://metamigo-api:3001" - : "http://localhost:3001", - changeOrigin: true, - pathRewrite: { "^/api/v1": "/api" }, - xfwd: true, - onProxyReq(proxyReq, req) { - const auth = proxyReq.getHeader("authorization"); - if (auth) { - // pass along user provided authorization header - return; - } - - // Else extract the session token from the cookie and pass - // as bearer token to the proxy target - // const token = req.cookies["next-auth.session-token"]; - let token = req.cookies["__Secure-next-auth.session-token"]; - if (!token) token = req.cookies["next-auth.session-token"]; - - if (token) { - proxyReq.setHeader("authorization", `Bearer ${token}`); - proxyReq.removeHeader("cookie"); - } else { - console.error("no token found. proxied request to backend will fail."); - } - }, -}); - -export { handler as GET, handler as POST, handler as PUT, handler as DELETE};