{"version":3,"sources":["webpack:///./packages/core-integrations/routes.js","webpack:///./packages/core-integrations/components/ApplicationsAccordion/ApplicationsAccordionSkeleton.tsx","webpack:///./packages/core-integrations/components/Application/Application.tsx","webpack:///./packages/core-integrations/api/service/canCreateAPITokens.ts","webpack:///./packages/core-integrations/api/service/createAPIToken.ts","webpack:///./packages/core-integrations/api/service/editAPIToken.ts","webpack:///./packages/core-integrations/api/service/getUserIntegrations.ts","webpack:///./packages/core-integrations/properties/messages.ts","webpack:///./packages/core-integrations/components/ApplicationsAccordion/ApplicationsAccordion.tsx","webpack:///./packages/core-integrations/components/ApplicationsAccordion/ApplicationsAccordionContainer.tsx","webpack:///./packages/core-integrations/components/Integrations/Integrations.tsx","webpack:///./packages/core-integrations/components/AccessGrant/AccessGrant.tsx","webpack:///./packages/core-integrations/properties/config.ts","webpack:///./packages/core-integrations/components/AccessGrant/AccessGrantContainer.tsx","webpack:///./packages/core-integrations/components/Integrations/IntegrationsGrant.tsx","webpack:///./packages/core-integrations/views/userIntegrationsView.js","webpack:///./packages/core-integrations/views/accessGrantView.js","webpack:///./packages/core-integrations/controller.js","webpack:///./packages/core-integrations/index.js"],"names":["ApplicationsAccordionSkeleton","classes","className","column","row","Skeleton","animation","width","style","margin","variant","height","withStyles","spacing","createStyles","root","backgroundColor","display","flexDirection","justifyContent","padding","React","memo","StyledAccordion","theme","border","palette","custom","borderBottom","Accordion","StyledAccordionDetails","AccordionDetails","StyledAccordionSummary","content","alignItems","AccordionSummary","StyledButton","flexShrink","alignSelf","marginRight","Button","StyledList","marginTop","List","Application","data","onRemove","onRevoke","onEdit","expanded","setExpanded","useState","editButtonClick","useCallback","e","stopPropagation","appId","name","removeButtonClick","revokeButtonClick","type","actionSummaries","map","action","idx","ListItem","key","ListItemText","primary","panelId","onChange","panel","_","isExpanded","clsx","accordion","disabled","enabled","id","Typography","subtitle","onClick","color","i18n","t","Divider","warning","Alert","severity","Severity","WARNING","defaultValue","permissions","label","disablePadding","creationDate","modDate","text","flexGrow","secondary","paddingBottom","canCreateAPITokens","async","NetxQueryDam","post","then","response","result","createAPIToken","requestParams","editAPIToken","getUserIntegrations","integrationsErrors","messages","error","err","code","message","ApplicationsAccordion","loading","apps","updateApp","isNew","setIsNew","canCreateTokens","setCanCreateTokens","addingToken","setAddingToken","tokenAdded","setTokenAdded","tokenName","setTokenName","tokenId","setTokenId","tokenString","setTokenString","act","useComponentIsMounted","form","useForm","undefined","onSubmit","values","changes","apiTokenName","rtn","token","snackbar","catch","clearEdit","inputForm","getInputFormObject","useSnackbar","useEffect","booleanResponse","addAPITokenClick","editAPITokenClick","obj","onDialogClose","onNameChange","applications","AddActionButton","addButton","size","ComponentProps","title","article","length","FormDialog","dialog","open","secondaryTitle","onClose","confirmLabel","cancelLabel","dialogContent","onCopy","value","mixins","settingsContainer","overflowY","empty","minWidth","background","light","ApplicationsAccordionContainer","setData","setLoading","effectCount","setEffectCount","query","useRpc","confirmation","useConfirmation","finally","removeApp","app","revokeApp","description","withErrorBoundary","scrollable","overflowX","AccessGrant","onCancel","DialogActions","config","servletUrl","AccessGrantContainer","authParams","setDisplayName","useNetxAuthServer","scope","toLowerCase","getDetailsReturn","reportAndRedirect","authorizeResponse","deny","damUrl","Netx","URL","redirectUri","redirect_uri","state","errorString","Object","every","x","window","location","replace","$","ajax","method","url","netx_url","protocol","host","auth_code","errorHandler","done","msg","urlParams","URLSearchParams","search","get","handleSubmit","appName","response_type","client_id","setTimeout","handleCancel","setName","Dialog","ThemedIntegrations","withTheme","Integrations","UserIntegrationsView","Base","constructor","opts","isRouted","removeOnHide","super","render","__name__","ThemedIntegrationsGrant","IntegrationsGrant","AccessGrantView","this","dispatcher","once","NS","user","router","on","viewOptions","appViews","add","viewClass","showActions","trigger","fsViews","hash","includes","navigate","initialize","Promise","resolve","reject","routes","namespace","controller"],"mappings":"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","file":"34.bundle.min.js?2.22.11.78cb48d1.1676942939545","sourcesContent":["export default {\n\t'user/integrations': 'user:integrations',\n\t'access/grant': 'integrations:grant',\n};\n","import React from 'react';\n\nimport {Skeleton} from '@mui/material';\nimport {withStyles, createStyles, WithStyles} from '@mui/styles';\nimport type {Theme} from '@netx/core-components/Theme';\n\nconst styles = ({spacing}: Theme) =>\n\tcreateStyles({\n\t\troot: {\n\t\t\tbackgroundColor: '#ff0000',\n\t\t},\n\t\trow: {\n\t\t\tdisplay: 'flex',\n\t\t\tflexDirection: 'row',\n\t\t\tjustifyContent: 'space-between',\n\t\t\tpadding: spacing(2, 2),\n\t\t},\n\t\tcolumn: {\n\t\t\tdisplay: 'flex',\n\t\t\tflexDirection: 'column',\n\t\t},\n\t});\n\nconst ApplicationsAccordionSkeleton = ({\n\tclasses,\n}: WithStyles) => {\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\n\t);\n};\n\nexport default withStyles(styles)(React.memo(ApplicationsAccordionSkeleton));\n","import React, {useCallback, useState} from 'react';\nimport clsx from 'clsx';\n\nimport {i18n} from '@netx/core/i18n';\n\nimport {\n\tButton,\n\tDivider,\n\tList,\n\tListItem,\n\tListItemText,\n\tTypography,\n} from '@mui/material';\n\nimport Accordion from '@netx/core-components/Accordion';\nimport AccordionDetails from '@netx/core-components/AccordionDetails';\nimport AccordionSummary from '@netx/core-components/AccordionSummary';\nimport Alert from '@netx/core-components/Alert';\nimport {withStyles, createStyles, WithStyles} from '@mui/styles';\nimport {Severity, Theme} from '@netx/core-components/Theme';\n\nimport {IntegrationSchema} from '@netx/core-integrations/api/schema/integration';\n\nconst StyledAccordion = withStyles((theme: Theme) => ({\n\troot: {\n\t\tborder: `1px solid ${theme.palette.custom.border}`,\n\t\tborderBottom: 0,\n\t},\n}))(Accordion);\n\nconst StyledAccordionDetails = withStyles((theme: Theme) => ({\n\troot: {\n\t\tflexDirection: 'column',\n\t},\n}))(AccordionDetails);\n\nconst StyledAccordionSummary = withStyles((theme: Theme) => ({\n\tcontent: {\n\t\talignItems: 'center',\n\t},\n}))(AccordionSummary);\n\nconst StyledButton = withStyles((theme: Theme) => ({\n\troot: {\n\t\tflexShrink: 0,\n\t\talignSelf: 'flex-start',\n\t\tmargin: '0px 0px 0px 20px',\n\t\t'&:last-child': {\n\t\t\tmarginRight: theme.spacing(2),\n\t\t},\n\t},\n}))(Button);\n\nconst StyledList = withStyles((theme: Theme) => ({\n\troot: {\n\t\twidth: '100%',\n\t\tmarginTop: '-4px',\n\t\t'& .MuiListItem-root': {\n\t\t\tpadding: '0px 0px 4px 0px',\n\t\t},\n\t},\n}))(List);\n\nconst styles = (theme: Theme) =>\n\tcreateStyles({\n\t\taccordion: {\n\t\t\t'&.disabled h6': {\n\t\t\t\tcolor: theme.palette.text.disabled, //theme.palette.grey[500], //'rgba(0, 0, 0, 0.45)',\n\t\t\t},\n\t\t},\n\t\tsubtitle: {\n\t\t\talignSelf: 'center',\n\t\t\tflexGrow: 1,\n\t\t},\n\t\tlabel: {\n\t\t\tcolor: theme.palette.text.secondary,\n\t\t},\n\t\trow: {\n\t\t\tdisplay: 'flex',\n\t\t\tflexDirection: 'row',\n\t\t\tpadding: '10px 0px 7px 0px',\n\t\t\t'& div:first-child': {\n\t\t\t\twidth: '40%',\n\t\t\t\tflexShrink: 0,\n\t\t\t},\n\t\t},\n\t\tpermissions: {\n\t\t\tpaddingBottom: 0,\n\t\t},\n\t\twarning: {\n\t\t\talignItems: 'center',\n\t\t\tjustifyContent: 'center',\n\t\t\talignSelf: 'center',\n\t\t\tmargin: '20px 20px 28px 20px',\n\t\t},\n\t});\n\nexport interface ApplicationProps {\n\tdata: IntegrationSchema;\n\tonRemove: (app: Pick) => void;\n\tonRevoke: (app: Pick) => void;\n\tonEdit: (app: Pick) => void;\n}\nconst Application: React.FC & ApplicationProps> = ({\n\tclasses,\n\tdata,\n\tonRemove,\n\tonRevoke,\n\tonEdit,\n}) => {\n\tconst [expanded, setExpanded] = useState(false);\n\n\tconst handleChange = (panel: string) => (_, isExpanded: boolean) => {\n\t\tsetExpanded(isExpanded ? panel : false);\n\t};\n\n\tconst editButtonClick = useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\t// don't close the accordion\n\t\t\te.stopPropagation();\n\t\t\tonEdit({appId: data.appId, name: data.name});\n\t\t},\n\t\t[data],\n\t);\n\tconst removeButtonClick = useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\t// don't close the accordion\n\t\t\te.stopPropagation();\n\t\t\tonRemove({appId: data.appId, name: data.name});\n\t\t},\n\t\t[data],\n\t);\n\tconst revokeButtonClick = useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\t// don't close the accordion\n\t\t\te.stopPropagation();\n\t\t\tonRevoke({\n\t\t\t\tappId: data.appId,\n\t\t\t\tname: data.name,\n\t\t\t\ttype: data.type,\n\t\t\t});\n\t\t},\n\t\t[data],\n\t);\n\n\tconst actionSummaries = data.actionSummaries.map(\n\t\t(action: string, idx: Number) => (\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t),\n\t);\n\tconst panelId = `panel${data.appId}`;\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{data.name}\n\t\t\t\t\n\n\t\t\t\t{expanded === panelId && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{data.enabled && data.type === 'API' && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{i18n.t('i18n.edit')}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{data.enabled && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{i18n.t('i18n.revokeAccess')}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!data.enabled && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{i18n.t('i18n.remove')}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t{!data.enabled && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{i18n.t('i18n.tokenIsDisabled', {\n\t\t\t\t\t\t\t\t\tdefaultValue:\n\t\t\t\t\t\t\t\t\t\t'This token has been disabled by your administrator',\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{i18n.t('i18n.permissions')}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{actionSummaries}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{i18n.t('i18n.accessGranted')}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{data.creationDate}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{i18n.t('i18n.lastAccess')}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{data.modDate}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\n\t);\n};\n\nexport default withStyles(styles)(React.memo(Application));\n","import NetxQueryDam, {SuccessResponse} from '@netx/core/lib/netx-query-dam';\n\nexport interface CanCreateAPITokensParams {}\nexport type CanCreateAPITokensResponse = SuccessResponse;\n\nexport interface CanCreateAPITokensErrorResult {\n\tresult: string;\n\tcode: number;\n\tmessage: string;\n}\n\nexport const canCreateAPITokensEndpoint = 'canCreateAPITokens';\n\nexport const canCreateAPITokens = async () => {\n\tconst client = NetxQueryDam();\n\tconst requestParams = [];\n\n\treturn client\n\t\t.post(canCreateAPITokensEndpoint, requestParams)\n\t\t.then((response) => response.data.result);\n};\nexport default canCreateAPITokens;\n","import NetxQueryDam, {\n\tSuccessResponse,\n\tErrorResponse,\n} from '@netx/core/lib/netx-query-dam';\n\nexport interface CreateAPITokenParams {\n\tname: string;\n}\n\nexport type CreateAPITokenResponse = SuccessResponse;\n\nexport type CreateAPITokenResult = {\n\tappId: number;\n\tname: string;\n\ttoken: string;\n};\n\nexport const createAPITokenEndpoint = 'createAPIToken';\n\nexport const createAPIToken = async ({name}: CreateAPITokenParams) => {\n\tconst client = NetxQueryDam();\n\tconst requestParams = [name];\n\n\treturn client\n\t\t.post(createAPITokenEndpoint, requestParams)\n\t\t.then((response) => response.data.result);\n};\n\nexport default createAPIToken;\n","import NetxQueryDam, {SuccessResponse} from '@netx/core/lib/netx-query-dam';\n\nexport interface EditAPITokenParams {\n\tappId: number;\n\tname: string;\n}\n\nexport type EditAPITokenResult = {\n\tappId: number;\n\tname: string;\n\tcreationDate: string;\n\tmodData: string;\n};\nexport type EditAPITokenResponse = SuccessResponse;\n\nexport const editAPITokenEndpoint = 'editAPIToken';\n\nexport const editAPIToken = async (appId: number, name: string) => {\n\tconst client = NetxQueryDam();\n\tconst requestParams = [appId, name];\n\n\treturn client\n\t\t.post(editAPITokenEndpoint, requestParams)\n\t\t.then((response) => response.data.result);\n};\nexport default editAPIToken;\n","import NetxQueryDam, {SuccessResponse} from '@netx/core/lib/netx-query-dam';\n\nimport {IntegrationSchema} from '@netx/core-integrations/api';\n\nexport interface GetUserIntegrationsParams {}\n\nexport type GetUserIntegrationsResponse = SuccessResponse;\n\nexport const getUserIntegrationsEndpoint = 'getUserIntegrations';\n\nexport const getUserIntegrations = async () => {\n\tconst client = NetxQueryDam();\n\n\treturn client\n\t\t.post(getUserIntegrationsEndpoint)\n\t\t.then((response) => response.data.result);\n};\nexport default getUserIntegrations;\n","import {i18n} from '@netx/core/i18n';\n\nconst integrationsErrors = {\n\t3009: i18n.t('i18n.createAPITokenPermissionsError'),\n\t3010: i18n.t('i18n.editAPITokenPermissionsError'),\n};\n\nexport const messages = {\n\terror: (err) => {\n\t\treturn (\n\t\t\tintegrationsErrors[err.code] || err.message || i18n.t('i18n.errorAlert')\n\t\t);\n\t},\n};\n\nexport default messages;\n","import React, {useCallback, useState, useEffect} from 'react';\nimport {i18n} from '@netx/core/i18n';\nimport clsx from 'clsx';\n\nimport ApplicationsAccordionSkeleton from './ApplicationsAccordionSkeleton';\nimport {Application} from '../Application';\nimport {IntegrationSchema} from '@netx/core-integrations/api/schema/integration';\nimport {\n\tcanCreateAPITokens,\n\tcreateAPIToken,\n\tCreateAPITokenResult,\n\teditAPIToken,\n\tEditAPITokenResult,\n} from '@netx/core-integrations/api';\nimport {withStyles, WithStyles, createStyles} from '@mui/styles';\nimport type {Theme} from '@netx/core-components/Theme';\nimport {Typography} from '@mui/material';\nimport {\n\tFormChanges,\n\tFormValues,\n\tTextField,\n\tuseForm,\n\tgetInputFormObject,\n} from '@netx/core-components/Form';\nimport AddActionButton from '@netx/core-components/AddActionButton';\nimport Button from '@netx/core-components/Button';\nimport FormDialog from '@netx/core-components/FormDialog';\nimport {useSnackbar} from '@netx/core-components/Snackbar';\nimport useComponentIsMounted from '@netx/core-components/hooks/useComponentIsMounted';\nimport {messages} from '../../properties/messages';\n\nimport {CopyToClipboard} from 'react-copy-to-clipboard';\n\nconst styles = (theme: Theme) =>\n\tcreateStyles({\n\t\troot: {\n\t\t\t...theme.mixins.settingsContainer,\n\t\t\tmargin: theme.spacing(2, 'auto'),\n\t\t},\n\t\ttitle: {\n\t\t\tmargin: theme.spacing(0, 2),\n\t\t},\n\t\tarticle: {\n\t\t\tpadding: theme.spacing(2),\n\t\t\toverflowY: 'auto',\n\t\t},\n\t\tempty: {\n\t\t\tpadding: theme.spacing(0, 2),\n\t\t},\n\t\taddButton: {\n\t\t\tmargin: '0px 0px 0px 15px',\n\t\t},\n\t\trow: {\n\t\t\tdisplay: 'flex',\n\t\t\tflexDirection: 'row',\n\t\t\talignItems: 'center',\n\t\t},\n\t\tdialog: {\n\t\t\t'& .MuiPaper-root': {\n\t\t\t\tminWidth: 350,\n\t\t\t},\n\t\t},\n\t\ttokenAdded: {\n\t\t\t'& .Mui-disabled': {\n\t\t\t\tdisplay: 'none',\n\t\t\t},\n\t\t},\n\t\tdialogContent: {\n\t\t\tflexDirection: 'row',\n\t\t\t// justifyContent: 'space-between',\n\t\t\tdisplay: 'flex',\n\n\t\t\talignItems: 'center',\n\n\t\t\tmarginTop: '5px',\n\t\t\t'& div': {\n\t\t\t\tbackground: theme.palette.custom.background.light,\n\t\t\t\tflexGrow: 1,\n\t\t\t\tpadding: '10px 15px',\n\t\t\t\tmarginRight: 10,\n\t\t\t},\n\t\t\t'& button': {},\n\t\t},\n\t\tcolumn: {\n\t\t\tflexDirection: 'column',\n\t\t},\n\t});\n\nexport interface ApplicationsAccordionProps {\n\tloading?: boolean;\n\tapps: IntegrationSchema[];\n\tonRemove: (app: Pick) => void;\n\tonRevoke: (app: Pick) => void;\n\tupdateApp: () => void;\n}\n\nconst ApplicationsAccordion: React.FC<\n\tWithStyles & ApplicationsAccordionProps\n> = ({classes, loading, apps, onRemove, onRevoke, updateApp}) => {\n\tconst [isNew, setIsNew] = useState(false);\n\tconst [canCreateTokens, setCanCreateTokens] = useState(false);\n\tconst [addingToken, setAddingToken] = useState(false);\n\tconst [tokenAdded, setTokenAdded] = useState(false);\n\tconst [tokenName, setTokenName] = useState('');\n\tconst [tokenId, setTokenId] = useState(0);\n\tconst [tokenString, setTokenString] = useState('');\n\n\tconst {act} = useComponentIsMounted();\n\tconst form = useForm(undefined, {\n\t\tonSubmit: useCallback(\n\t\t\tasync (values: FormValues, changes: FormChanges): Promise => {\n\t\t\t\tif (isNew) {\n\t\t\t\t\tcreateAPIToken({name: values.apiTokenName})\n\t\t\t\t\t\t.then((rtn: CreateAPITokenResult) => {\n\t\t\t\t\t\t\tsetTokenString(rtn.token);\n\t\t\t\t\t\t\tupdateApp();\n\t\t\t\t\t\t\tsetTokenAdded(true);\n\t\t\t\t\t\t\tsnackbar({\n\t\t\t\t\t\t\t\tmessage: i18n.t('i18n.apiTokenCreated'),\n\t\t\t\t\t\t\t\tseverity: 'info',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\t\tsnackbar({\n\t\t\t\t\t\t\t\tmessage: messages.error(err),\n\t\t\t\t\t\t\t\tseverity: 'error',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// service call and snackbar\n\t\t\t\t\teditAPIToken(tokenId, values.apiTokenName)\n\t\t\t\t\t\t.then((rtn: EditAPITokenResult) => {\n\t\t\t\t\t\t\tsetAddingToken(false);\n\t\t\t\t\t\t\tclearEdit();\n\n\t\t\t\t\t\t\tsnackbar({\n\t\t\t\t\t\t\t\tmessage: i18n.t('i18n.apiTokenUpdated'),\n\t\t\t\t\t\t\t\tseverity: 'info',\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tupdateApp();\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\t\tsnackbar({\n\t\t\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t\t\t\tseverity: 'error',\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\t[isNew, tokenId],\n\t\t),\n\t});\n\tconst inputForm = getInputFormObject(form);\n\tconst snackbar = useSnackbar();\n\n\tuseEffect(() => {\n\t\tcanCreateAPITokens()\n\t\t\t.then((booleanResponse) =>\n\t\t\t\tact(() => {\n\t\t\t\t\tsetCanCreateTokens(booleanResponse || false);\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.catch((err) =>\n\t\t\t\tact(() => {\n\t\t\t\t\tsnackbar({\n\t\t\t\t\t\tmessage: messages.error(err),\n\t\t\t\t\t\tseverity: 'error',\n\t\t\t\t\t});\n\t\t\t\t\tsetCanCreateTokens(false);\n\t\t\t\t}),\n\t\t\t);\n\t}, []);\n\n\tconst addAPITokenClick = useCallback((e) => {\n\t\tsetIsNew(true);\n\t\tsetTokenName('');\n\t\tsetAddingToken(true);\n\t\tclearEdit();\n\t}, []);\n\n\tconst editAPITokenClick = useCallback(\n\t\t(obj: Pick) => {\n\t\t\tsetIsNew(false);\n\t\t\tsetTokenName(obj.name);\n\t\t\tsetTokenId(obj.appId);\n\t\t\tsetAddingToken(true);\n\t\t\tclearEdit();\n\t\t},\n\t\t[],\n\t);\n\n\tconst onDialogClose = useCallback(() => {\n\t\tsetAddingToken(false);\n\t\tclearEdit();\n\t}, []);\n\tconst clearEdit = () => {\n\t\tsetTokenString('');\n\t\tsetTokenAdded(false);\n\t};\n\tconst onNameChange = useCallback((name) => {\n\t\tsetTokenName(name);\n\t}, []);\n\n\tconst applications = apps.map((data: IntegrationSchema, idx) => {\n\t\treturn (\n\t\t\t\n\t\t);\n\t});\n\n\treturn (\n\t\t
\n\t\t\t
\n\t\t\t\t{canCreateTokens && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t\t{i18n.t('i18n.integrations')}\n\t\t\t\t\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t{loading && }\n\n\t\t\t\t{!loading && applications.length > 0 && (\n\t\t\t\t\t
{applications}
\n\t\t\t\t)}\n\n\t\t\t\t{!loading && apps.length === 0 && (\n\t\t\t\t\t{i18n.t('i18n.noIntegrationsAvailable')}\n\t\t\t\t)}\n\t\t\t
\n\n\t\t\t{\n\t\t\t\t// api token name selection, and token creation\n\t\t\t\taddingToken && (\n\t\t\t\t\t\n\t\t\t\t\t\tclassName={clsx(classes.dialog, {\n\t\t\t\t\t\t\t[classes.tokenAdded]: tokenAdded,\n\t\t\t\t\t\t})}\n\t\t\t\t\t\tform={form}\n\t\t\t\t\t\topen={addingToken}\n\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\tisNew ? i18n.t('i18n.addAPIToken') : i18n.t('i18n.editAPIToken')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsecondaryTitle={\n\t\t\t\t\t\t\tisNew && !tokenAdded\n\t\t\t\t\t\t\t\t? i18n.t('i18n.chooseIntegrationName')\n\t\t\t\t\t\t\t\t: tokenAdded\n\t\t\t\t\t\t\t\t? tokenName\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClose={onDialogClose}\n\t\t\t\t\t\tconfirmLabel={\n\t\t\t\t\t\t\ttokenAdded ? i18n.t('i18n.close') : i18n.t('i18n.submit')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcancelLabel={\n\t\t\t\t\t\t\ttokenAdded\n\t\t\t\t\t\t\t\t? i18n.t('i18n.savedTokenConfirm')\n\t\t\t\t\t\t\t\t: i18n.t('i18n.cancel')\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{tokenAdded && (\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{i18n.t('i18n.integrationCreatedMessage')}\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
{tokenString}
\n\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\tsnackbar({\n\t\t\t\t\t\t\t\t\t\t\t\t\tmessage: i18n.t('i18n.apiTokenCopied'),\n\t\t\t\t\t\t\t\t\t\t\t\t\tseverity: 'info',\n\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{i18n.t('i18n.copy')}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!tokenAdded && (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)\n\t\t\t}\n\t\t
\n\t);\n};\n\nexport default withStyles(styles)(React.memo(ApplicationsAccordion));\n","import React, {useCallback, useEffect, useState} from 'react';\n\nimport {i18n} from '@netx/core/i18n';\nimport {\n\tuseConfirmation,\n\tuseSnackbar,\n\tuseComponentIsMounted,\n} from '@netx/core-components';\nimport {ApplicationsAccordion} from './';\nimport {ApplicationsAccordionProps} from './ApplicationsAccordion';\nimport messages from '../../properties/messages';\n\nimport {\n\tgetUserIntegrations,\n\tIntegrationSchema,\n} from '@netx/core-integrations/api';\n\nimport {useRpc} from '@netx/core-components/hooks';\nimport {WithStyles, withStyles, createStyles} from '@mui/styles';\nimport type {Theme} from '@netx/core-components/Theme';\n\nconst styles = (theme: Theme) =>\n\tcreateStyles({\n\t\troot: {\n\t\t\tflexGrow: 1,\n\t\t},\n\t});\n\nconst ApplicationsAccordionContainer: React.FC> = ({\n\tclasses,\n}) => {\n\tconst [data, setData] = useState([]);\n\tconst [loading, setLoading] = useState(true);\n\tconst [effectCount, setEffectCount] = useState(0);\n\n\tconst snackbar = useSnackbar();\n\tconst query = useRpc();\n\tconst confirmation = useConfirmation();\n\tconst {act} = useComponentIsMounted();\n\n\tuseEffect(() => {\n\t\tgetUserIntegrations()\n\t\t\t.then((response) =>\n\t\t\t\tact(() => {\n\t\t\t\t\tsetData(response || []);\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.catch((err) =>\n\t\t\t\tact(() => {\n\t\t\t\t\tsnackbar({\n\t\t\t\t\t\tmessage: messages.error(err),\n\t\t\t\t\t\tseverity: 'error',\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.finally(() =>\n\t\t\t\tact(() => {\n\t\t\t\t\tsetLoading(false);\n\t\t\t\t}),\n\t\t\t);\n\t}, [effectCount]);\n\n\tconst removeApp = useCallback((app) => {\n\t\tquery('revokeIntegrationAccess', [app.appId])\n\t\t\t.then((data) => {\n\t\t\t\tsnackbar({\n\t\t\t\t\tmessage: i18n.t('i18n.apiTokenRemoved'),\n\t\t\t\t\tseverity: 'info',\n\t\t\t\t});\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tsnackbar({\n\t\t\t\t\tmessage: messages.error(err),\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t});\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tsetLoading(false);\n\t\t\t\tupdateApp();\n\t\t\t});\n\t}, []);\n\n\tconst revokeApp = useCallback(\n\t\t(app) => {\n\t\t\tconfirmation({\n\t\t\t\ttitle: i18n.t('i18n.revokeAccessTitle'),\n\t\t\t\tdescription: i18n.t(\n\t\t\t\t\tapp.type === 'API'\n\t\t\t\t\t\t? 'i18n.revokeAPITokenDescription'\n\t\t\t\t\t\t: 'i18n.revokeAccessDescription',\n\t\t\t\t\t{\n\t\t\t\t\t\tname: app.name,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\tconfirmLabel: i18n.t('i18n.revoke'),\n\t\t\t}).then(() => {\n\t\t\t\tsetLoading(true);\n\t\t\t\tquery('revokeIntegrationAccess', [app.appId])\n\t\t\t\t\t.then((data) => {\n\t\t\t\t\t\tsnackbar({\n\t\t\t\t\t\t\tmessage: i18n.t('i18n.revokeAccessSuccess'),\n\t\t\t\t\t\t\tseverity: 'info',\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\tsnackbar({\n\t\t\t\t\t\t\tmessage: messages.error(err),\n\t\t\t\t\t\t\tseverity: 'error',\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tsetLoading(false);\n\t\t\t\t\t\tupdateApp();\n\t\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\t[],\n\t);\n\n\tconst updateApp = useCallback(() => {\n\t\tsetEffectCount((effectCount) => effectCount + 1);\n\t}, []);\n\n\treturn (\n\t\t<>\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n};\n\nexport default withStyles(styles)(React.memo(ApplicationsAccordionContainer));\n","import React from 'react';\n\nimport {\n\tConfirmationServiceProvider,\n\tSnackbarServiceProvider,\n\twithErrorBoundary,\n} from '@netx/core-components';\n\nimport ApplicationsAccordionContainer from '../ApplicationsAccordion/ApplicationsAccordionContainer';\n\nconst Integrations: React.FC = () => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default withErrorBoundary(Integrations);\n","import React from 'react';\n\nimport {Button, SubmitButton} from '@netx/core-components';\nimport {DialogActions, List, ListItem, ListItemText} from '@mui/material';\nimport {withStyles} from '@mui/styles';\nimport type {Theme} from '@netx/core-components/Theme';\n\nimport {i18n} from '@netx/core/i18n';\n\nimport {AuthDetailsSchema} from '@netx/core-integrations/api/schema/integration';\n\nconst StyledList = withStyles(({mixins, spacing}: Theme) => ({\n\troot: {\n\t\twidth: '100%',\n\t\tpadding: spacing(1),\n\t\t...mixins.scrollable,\n\t\toverflowX: 'hidden',\n\t\t'& .MuiListItem-root': {\n\t\t\tpadding: spacing(1, 2),\n\t\t},\n\t},\n}))(List);\n\nexport interface AccessGrantProps {\n\tdata: AuthDetailsSchema;\n\tonCancel: () => void;\n\tonSubmit: () => void;\n}\nconst AccessGrant: React.FC = ({\n\tdata,\n\tonCancel,\n\tonSubmit,\n}) => {\n\tconst actionSummaries = data.actionSummaries\n\t\t? data.actionSummaries.map((action: string, idx) => (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t ))\n\t\t: [];\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{actionSummaries}\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\t onSubmit()}\n\t\t\t\t/>\n\t\t\t\n\t\t\n\t);\n};\n\nexport default React.memo(AccessGrant);\n","export const config = {\n\tservletUrl: 'https://hootsuite-integration.netx.net/cacheAuthCode',\n};\nexport default config;\n","import React from 'react';\nimport {useCallback, useEffect, useState} from 'react';\nimport {\n\tAuthDetailsSchema,\n\tAuthParams,\n} from '@netx/core-integrations/api/schema/integration';\nimport {i18n} from '@netx/core/i18n';\nimport Netx from '@netx/core/bootstrap';\nimport {AccessGrant} from './';\nimport {useSnackbar} from '@netx/core-components';\nimport {messages} from '../../properties/messages';\nimport {config} from '../../properties/config';\n\nimport {useRpc} from '@netx/core-components/hooks';\n\nexport interface AccessGrantContainerProps {\n\tauthParams: AuthParams;\n\tsetDisplayName: (appName: string) => void;\n}\nconst AccessGrantContainer = ({\n\tauthParams,\n\tsetDisplayName,\n}: AccessGrantContainerProps) => {\n\tconst [data, setData] = useState({} as AuthDetailsSchema);\n\tconst useNetxAuthServer = authParams.scope === 'hootsuite';\n\tconst snackbar = useSnackbar();\n\tconst query = useRpc();\n\n\tuseEffect(() => {\n\t\tquery('getIntegrationDetails', [\n\t\t\tauthParams.scope.toLowerCase(),\n\t\t])\n\t\t\t.then((getDetailsReturn) => {\n\t\t\t\tsetData(getDetailsReturn);\n\t\t\t\tsetDisplayName(getDetailsReturn.name);\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tsnackbar({\n\t\t\t\t\tmessage: messages.error(err),\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t});\n\t\t\t})\n\t\t\t.finally(() => {});\n\t}, []);\n\n\t// todo: move to api\n\tconst authorizeIntegrationQuery = (appName) => {\n\t\tquery('authorizeIntegration', [\n\t\t\tappName,\n\t\t\tauthParams.response_type,\n\t\t\tauthParams.redirect_uri,\n\t\t\tauthParams.client_id,\n\t\t\tauthParams.state,\n\t\t])\n\t\t\t.then((authorizeResponse) => {\n\t\t\t\tsnackbar({\n\t\t\t\t\tmessage: i18n.t('i18n.authorizeIntegrationSuccess'),\n\t\t\t\t\tseverity: 'info',\n\t\t\t\t});\n\n\t\t\t\t// mocking if not exists\n\t\t\t\tif (authorizeResponse === 'true') {\n\t\t\t\t\tauthorizeResponse = 'this-is-the-code';\n\t\t\t\t}\n\n\t\t\t\t// give the snackbar a chance to show itself\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\treportAndRedirect(authorizeResponse);\n\t\t\t\t}, 1000);\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tsnackbar({\n\t\t\t\t\tmessage: messages.error(err),\n\t\t\t\t\tseverity: 'error',\n\t\t\t\t});\n\t\t\t\terrorHandler('invalid_request');\n\t\t\t});\n\t};\n\n\tconst reportAndRedirect = (authorizeResponse: string) => {\n\t\tconst deny = authorizeResponse === 'deny';\n\n\t\tconst servletUrl = config.servletUrl;\n\t\tconst damUrl = Netx.URL;\n\t\tlet redirectUri = `${authParams.redirect_uri}?code=${authorizeResponse}&state=${authParams.state}`;\n\n\t\tlet errorString = '';\n\t\tif (deny) {\n\t\t\terrorString = 'access_denied';\n\t\t}\n\n\t\tif (!Object.values(authParams).every((x) => !!x)) {\n\t\t\terrorString = 'invalid_request';\n\t\t}\n\n\t\tif (errorString.length) {\n\t\t\tredirectUri += '&error=' + errorString;\n\t\t\twindow.location.replace(redirectUri);\n\t\t} else {\n\t\t\tif (useNetxAuthServer) {\n\t\t\t\t$.ajax({\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\turl: servletUrl,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tnetx_url: damUrl.protocol + damUrl.host,\n\t\t\t\t\t\tauth_code: authorizeResponse,\n\t\t\t\t\t},\n\t\t\t\t\terror: (err) => {\n\t\t\t\t\t\terrorHandler('invalid_request');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t},\n\t\t\t\t}).done((msg) => {\n\t\t\t\t\twindow.location.replace(redirectUri);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\twindow.location.replace(redirectUri);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst errorHandler = (error) => {\n\t\tconst urlParams = new URLSearchParams(window.location.search);\n\t\tconst redirectUri = `${urlParams.get(\n\t\t\t'redirect_uri',\n\t\t)}?error=${error}&code=${error}&state=${urlParams.get('state')}`;\n\n\t\twindow.location.replace(redirectUri);\n\t};\n\n\tconst handleSubmit = useCallback(() => {\n\t\tauthorizeIntegrationQuery(data.name);\n\t}, [data]);\n\tconst handleCancel = useCallback(() => {\n\t\treportAndRedirect('deny');\n\t}, []);\n\n\treturn (\n\t\t\n\t);\n};\n\nexport default React.memo(AccessGrantContainer);\n","import React from 'react';\nimport {useState} from 'react';\n\nimport {i18n} from '@netx/core/i18n';\n\nimport Dialog from '@netx/core-components/Dialog';\nimport {\n\tSnackbarServiceProvider,\n\twithErrorBoundary,\n} from '@netx/core-components';\n\nimport AccessGrantContainer from '../AccessGrant/AccessGrantContainer';\nimport {AuthParams} from '../../api/schema/integration';\n\nexport interface IntegrationsGrantProps {\n\tauthParams: AuthParams;\n}\nconst IntegrationsGrant: React.FC = ({authParams}) => {\n\tconst [name, setName] = useState(authParams.scope || 'An application');\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default withErrorBoundary(IntegrationsGrant);\n","import Base from '@netx/core/lib/netx-react-view';\n\nimport {withTheme} from '@netx/core-components';\nimport {Integrations} from '../components';\nconst ThemedIntegrations = withTheme(Integrations);\n\nexport default class UserIntegrationsView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.className = 'integrations-view';\n\t\topts.isRouted = true;\n\t\topts.removeOnHide = true;\n\t\tsuper(opts);\n\t}\n\n\trender() {\n\t\treturn super.render(ThemedIntegrations);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'UserIntegrationsView';\n\t}\n}\n","import Base from '@netx/core/lib/netx-react-view';\n\nimport '../css/integrations.less';\n\nimport {withTheme} from '@netx/core-components';\nimport IntegrationsGrant from '../components/Integrations/IntegrationsGrant';\nconst ThemedIntegrationsGrant = withTheme(IntegrationsGrant);\n\nexport default class AccessGrantView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.className = 'access-grant-view';\n\t\topts.isRouted = true;\n\n\t\tsuper(opts);\n\n\t\tthis.authParams = opts.authParams;\n\t}\n\n\trender() {\n\t\treturn super.render(ThemedIntegrationsGrant, {\n\t\t\tauthParams: this.authParams,\n\t\t});\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AccessGrantView';\n\t}\n}\n","import routes from './routes';\nimport UserIntegrationsView from './views/userIntegrationsView';\nimport AccessGrantView from './views/accessGrantView';\n\n/**\n * @event module:user#user:integrations:init\n * @fires module:user#user:integrations:extend\n * @fires module:user#user:integrations:initialized\n */\ndispatcher.once('user:integrations:init', () => {\n\tconst NS = Netx.user;\n\tconst {router} = Netx;\n\n\t//=================================\n\t//\tUser Integrations\n\t//=================================\n\t/**\n\t * @event module:user#user:integrations:show\n\t * @param {object} viewOptions View options\n\t */\n\tdispatcher.on('user:integrations:show', (viewOptions) => {\n\t\tNetx.app.appViews.add({\n\t\t\tviewClass: UserIntegrationsView,\n\t\t\tshowActions: ['user:integrations:show'],\n\t\t\tviewOptions: viewOptions,\n\t\t});\n\t});\n\t/**\n\t * @route\n\t * @fires user:integrations\n\t */\n\trouter.on('route:user:integrations', () => {\n\t\tdispatcher.trigger('user:integrations');\n\t});\n\t/**\n\t * @event module:user#user:integrations\n\t * @fires module:user#user:integrations:show\n\t */\n\tdispatcher.on('user:integrations', function () {\n\t\tdispatcher.trigger('user:integrations:show');\n\t});\n\t//=================================\n\t//\tEND User Integrations\n\t//=================================\n\n\t//=================================\n\t//\tAccess Grant\n\t//=================================\n\t/**\n\t * @event module:user#access:grant:show\n\t * @param {object} viewOptions View options\n\t */\n\tdispatcher.on('access:grant:show', (viewOptions) => {\n\t\tNetx.app.fsViews.add({\n\t\t\tviewClass: AccessGrantView,\n\t\t\tshowActions: ['user:integrations:show'],\n\t\t\tviewOptions: viewOptions,\n\t\t});\n\t});\n\n\t/**\n\t * @route\n\t * @fires module:user#access:grant\n\t */\n\trouter.on('route:access:grant', (authParams) => {\n\t\tdispatcher.trigger('access:grant', authParams);\n\t});\n\n\t/**\n\t * @event module:user#access:grant\n\t * @fires module:user#access:grant:show\n\t */\n\tdispatcher.on('access:grant', function (authParams) {\n\t\tdispatcher.trigger('access:grant:show', {\n\t\t\tauthParams: authParams,\n\t\t});\n\t});\n\n\t/**\n\t * @event module:user#integrations:routed\n\t * @fires module:user#access:grant\n\t * @fires module:user#user:integrations\n\t */\n\tdispatcher.on('integrations:routed', () => {\n\t\tconst hash = window.location.hash;\n\t\tif (hash.includes('#access/')) {\n\t\t\t// access grant is not for everyone\n\t\t\tconst urlParams = new URLSearchParams(window.location.search);\n\t\t\tconst authParams = {\n\t\t\t\tclient_id: urlParams.get('client_id'),\n\t\t\t\tredirect_uri: urlParams.get('redirect_uri'),\n\t\t\t\tresponse_type: urlParams.get('response_type'),\n\t\t\t\tscope: urlParams.get('scope'),\n\t\t\t\tstate: urlParams.get('state'),\n\t\t\t};\n\t\t\tif (!Object.values(authParams).every((x) => !!x)) {\n\t\t\t\tNetx.router.navigate('dashboard', {trigger: true});\n\t\t\t} else {\n\t\t\t\t// const appName = hash.split('#access/')[1];\n\t\t\t\tdispatcher.trigger('access:grant', authParams);\n\t\t\t}\n\t\t} else if (hash.includes('#user/integrations')) {\n\t\t\tdispatcher.trigger('user:integrations');\n\t\t}\n\t});\n\n\t// Finished\n\tdispatcher.trigger('user:integrations:extend', NS);\n\tdispatcher.trigger('user:integrations:initialized', NS);\n});\n\nexport default {\n\tinitialize(opts) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tdispatcher.once('user:integrations:initialized', () => {\n\t\t\t\tresolve(routes);\n\t\t\t\tdispatcher.trigger('integrations:routed');\n\t\t\t});\n\t\t\tdispatcher.trigger('user:integrations:init');\n\t\t});\n\t},\n};\n","// import System from '@netx/core-system';\nimport controller from './controller';\n\n/**\n * @property {object} exports - Our module exports\n * @property {string} exports.namespace - Module namespace\n * @property {function} exports.initialize - Module initializer\n */\nexport default {\n\tnamespace: 'integrations',\n\tinitialize() {\n\t\treturn controller.initialize();\n\t},\n};\n"],"sourceRoot":""}