From d87faa4a0105df632f12e4aefcbec39deb23d1a1 Mon Sep 17 00:00:00 2001 From: Aitor Algorta Date: Thu, 21 Jul 2022 16:38:33 +0200 Subject: [PATCH 01/92] Bump version to 0.48.0-alpha --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 421ab545d9..4a05dc752a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.47.0 +0.48.0-alpha From 96719af6b0b954e6ad234c1588ab8fadc423d5f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Jul 2022 20:46:14 +0200 Subject: [PATCH 02/92] Bump terser from 5.13.1 to 5.14.2 (#3466) Bumps [terser](https://github.com/terser/terser) from 5.13.1 to 5.14.2. - [Release notes](https://github.com/terser/terser/releases) - [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md) - [Commits](https://github.com/terser/terser/commits) --- updated-dependencies: - dependency-name: terser dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 67 +++++++++++++++++-------------------------------------- 1 file changed, 21 insertions(+), 46 deletions(-) diff --git a/yarn.lock b/yarn.lock index b19bbcd1c9..27a1a0c68d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1369,7 +1369,7 @@ "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/gen-mapping@^0.3.2": +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== @@ -1379,9 +1379,9 @@ "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.0.3": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" - integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== "@jridgewell/set-array@^1.0.0": version "1.1.1" @@ -1393,10 +1393,18 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.13" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" - integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -1406,7 +1414,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": version "0.3.14" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== @@ -1414,7 +1422,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.7", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.7": version "0.3.13" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== @@ -5824,11 +5832,6 @@ lodash.once@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" @@ -7631,13 +7634,6 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -source-map@~0.8.0-beta.0: - version "0.8.0-beta.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" - integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== - dependencies: - whatwg-url "^7.0.0" - space-separated-tokens@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz#43193cec4fb858a2ce934b7f98b7f2c18107098b" @@ -7910,13 +7906,13 @@ terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3: terser "^5.7.2" terser@^5.10.0, terser@^5.7.2: - version "5.13.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.13.1.tgz#66332cdc5a01b04a224c9fad449fc1a18eaa1799" - integrity sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA== + version "5.14.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" + integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== dependencies: + "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" commander "^2.20.0" - source-map "~0.8.0-beta.0" source-map-support "~0.5.20" test-exclude@^6.0.0: @@ -8009,13 +8005,6 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - tr46@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" @@ -8433,11 +8422,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - webidl-conversions@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" @@ -8620,15 +8604,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" From b9c1c6be20a3044cf14552e80eabffbb7e4c072a Mon Sep 17 00:00:00 2001 From: Audrey Kadjar Date: Mon, 25 Jul 2022 17:11:08 +0200 Subject: [PATCH 03/92] [#3465] status view enable button error when component is not configured (#3481) * fix * status fix wip * wip * bug fixes * fix and lint --- .../src/actions/catalog/index.ts | 4 +- .../src/components/SourceInfo/index.tsx | 8 +-- .../pages/Connectors/ConnectNewForm/index.tsx | 33 +++++++++- .../Connectors/ConnectorConfig/index.tsx | 66 ++++++++++++++----- .../Dialogflow/ConnectNewDialogflow.tsx | 31 ++++----- .../Salesforce/ConnectNewSalesforce.tsx | 31 ++++----- .../Providers/Zendesk/ConnectNewZendesk.tsx | 31 ++++----- .../pages/Connectors/RestartPopUp/index.tsx | 11 +++- .../src/pages/Connectors/index.tsx | 3 +- .../Status/ComponentListItem/ItemInfo.tsx | 52 +++++++++------ frontend/inbox/handles/index.ts | 6 +- 11 files changed, 176 insertions(+), 100 deletions(-) diff --git a/frontend/control-center/src/actions/catalog/index.ts b/frontend/control-center/src/actions/catalog/index.ts index 4c919a148a..5bb0837d8f 100644 --- a/frontend/control-center/src/actions/catalog/index.ts +++ b/frontend/control-center/src/actions/catalog/index.ts @@ -32,16 +32,16 @@ export const listComponents = () => (dispatch: Dispatch) => { export const installComponent = (installComponentRequestPayload: InstallUninstallComponentRequestPayload) => (dispatch: Dispatch) => { - dispatch(installComponentAction(installComponentRequestPayload)); return HttpClientInstance.installComponent(installComponentRequestPayload).then(() => { + dispatch(installComponentAction(installComponentRequestPayload)); return Promise.resolve(true); }); }; export const uninstallComponent = (uninstallComponentRequestPayload: InstallUninstallComponentRequestPayload) => (dispatch: Dispatch) => { - dispatch(uninstallComponentAction(uninstallComponentRequestPayload)); return HttpClientInstance.uninstallComponent(uninstallComponentRequestPayload).then(() => { + dispatch(uninstallComponentAction(uninstallComponentRequestPayload)); return Promise.resolve(true); }); }; diff --git a/frontend/control-center/src/components/SourceInfo/index.tsx b/frontend/control-center/src/components/SourceInfo/index.tsx index 5a159bf914..ef9c3cb7ef 100644 --- a/frontend/control-center/src/components/SourceInfo/index.tsx +++ b/frontend/control-center/src/components/SourceInfo/index.tsx @@ -17,9 +17,6 @@ import { cyChannelsTwilioSmsAddButton, cyChannelsTwilioWhatsappAddButton, cyChannelsInstagramAddButton, - cyChannelsDialogflowAddButton, - cyChannelsZendeskAddButton, - cyChannelsSalesforceAddButton, } from 'handles'; import { CONNECTORS_CONNECTED_ROUTE, @@ -46,7 +43,7 @@ export type SourceInfo = { componentName: string; repository: string; itemInfoString: string; - dataCyAddChannelButton: string; + dataCyAddChannelButton?: string; docs: string; }; @@ -164,7 +161,6 @@ export const getSourcesInfo = (): SourceInfo[] => { componentName: 'dialogflow-connector', repository: 'airy-enterprise', itemInfoString: 'connectors', - dataCyAddChannelButton: cyChannelsDialogflowAddButton, docs: 'https://dialogflow.cloud.google.com/cx/projects', }, { @@ -179,7 +175,6 @@ export const getSourcesInfo = (): SourceInfo[] => { componentName: 'zendesk-connector', repository: 'airy-enterprise', itemInfoString: 'connectors', - dataCyAddChannelButton: cyChannelsZendeskAddButton, docs: 'https://airy.co/docs/enterprise/apps/dialogflow/deployment', }, { @@ -194,7 +189,6 @@ export const getSourcesInfo = (): SourceInfo[] => { componentName: 'salesforce-contacts-ingestion', repository: 'airy-enterprise', itemInfoString: 'connectors', - dataCyAddChannelButton: cyChannelsSalesforceAddButton, docs: 'https://airy.co/docs/enterprise/apps/salesforce-contacts-ingestion/deployment', }, ]; diff --git a/frontend/control-center/src/pages/Connectors/ConnectNewForm/index.tsx b/frontend/control-center/src/pages/Connectors/ConnectNewForm/index.tsx index 2ffdd7243a..5ebaa5a2fb 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectNewForm/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ConnectNewForm/index.tsx @@ -1,5 +1,8 @@ import React, {SetStateAction} from 'react'; import RestartPopUp from '../RestartPopUp'; +import {Button} from 'components'; +import {cyConnectorAddButton} from 'handles'; +import {useTranslation} from 'react-i18next'; import styles from './index.module.scss'; interface ConnectNewFormProps { @@ -7,6 +10,10 @@ interface ConnectNewFormProps { componentName: string; isUpdateModalVisible: boolean; setIsUpdateModalVisible: React.Dispatch>; + enableSubmitConfigData: () => void; + disabled: boolean; + isConfigured: boolean; + updateConfig: (e: React.FormEvent) => void; } export const ConnectNewForm = ({ @@ -14,14 +21,36 @@ export const ConnectNewForm = ({ componentName, isUpdateModalVisible, setIsUpdateModalVisible, + enableSubmitConfigData, + disabled, + isConfigured, + updateConfig, }: ConnectNewFormProps) => { + const {t} = useTranslation(); + return (
-
{children}
+
+ {children} + +
{isUpdateModalVisible && ( - setIsUpdateModalVisible(false)} /> + setIsUpdateModalVisible(false)} + enableSubmitConfigData={enableSubmitConfigData} + /> )}
); diff --git a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx index 996b959860..a9b5e4f19b 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx @@ -1,5 +1,5 @@ import React, {useState, useEffect} from 'react'; -import {connect, ConnectedProps} from 'react-redux'; +import {connect, ConnectedProps, useSelector} from 'react-redux'; import {Link, useParams} from 'react-router-dom'; import {getSourcesInfo, SourceInfo} from '../../../components/SourceInfo'; import {Button, SettingsModal} from 'components'; @@ -53,12 +53,25 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { const {connector, enableDisableComponent, updateConnectorConfiguration, getConnectorsConfiguration, config} = props; const {channelId} = useParams(); + const connectorConfiguration = useSelector((state: StateModel) => state.data.connector); const [connectorInfo, setConnectorInfo] = useState(null); const [currentPage] = useState(Pages.createUpdate); const [configurationModal, setConfigurationModal] = useState(false); const [isEnabled, setIsEnabled] = useState(null); + const [isConfigured, setIsConfigured] = useState(false); const {t} = useTranslation(); + useEffect(() => { + if (connectorInfo && connectorConfiguration && connectorConfiguration[connectorInfo.componentName]) { + if ( + Object.entries(connectorConfiguration[connectorInfo.componentName]) && + Object.entries(connectorConfiguration[connectorInfo.componentName]).length > 0 + ) { + setIsConfigured(true); + } + } + }, [connectorInfo, connectorConfiguration]); + useEffect(() => { getConnectorsConfiguration(); const sourceInfoArr = getSourcesInfo(); @@ -84,10 +97,10 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { name: connectorInfo && connectorInfo?.configKey, enabled: true, data: { - project_id: projectId, - dialogflow_credentials: appCredentials, - suggestion_confidence_level: suggestionConfidenceLevel, - reply_confidence_level: replyConfidenceLevel, + projectId: projectId, + dialogflowCredentials: appCredentials, + suggestionConfidenceLevel: suggestionConfidenceLevel, + replyConfidenceLevel: replyConfidenceLevel, }, }, ], @@ -140,15 +153,33 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { const PageContent = () => { if (connector === Source.dialogflow) { - return ; + return ( + + ); } if (connector === Source.zendesk) { - return ; + return ( + + ); } if (connector === Source.salesforce) { - return ; + return ( + + ); } }; @@ -214,14 +245,17 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { text={t('infoButtonText')} /> - + + {isConfigured && ( + + )} diff --git a/frontend/control-center/src/pages/Connectors/Providers/Dialogflow/ConnectNewDialogflow.tsx b/frontend/control-center/src/pages/Connectors/Providers/Dialogflow/ConnectNewDialogflow.tsx index e803cd8cfb..8b895cb561 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Dialogflow/ConnectNewDialogflow.tsx +++ b/frontend/control-center/src/pages/Connectors/Providers/Dialogflow/ConnectNewDialogflow.tsx @@ -1,9 +1,8 @@ import React, {useState} from 'react'; import {useSelector} from 'react-redux'; import {StateModel} from '../../../../reducers'; -import {Button, Input} from 'components'; +import {Input} from 'components'; import {ConnectNewForm} from '../../ConnectNewForm'; -import {cyChannelsDialogflowAddButton} from 'handles'; import styles from './index.module.scss'; import {useTranslation} from 'react-i18next'; @@ -15,9 +14,10 @@ type ConnectNewDialogflowProps = { replyConfidenceLevel: string ) => void; isEnabled: boolean; + isConfigured: boolean; }; -export const ConnectNewDialogflow = ({createNewConnection, isEnabled}: ConnectNewDialogflowProps) => { +export const ConnectNewDialogflow = ({createNewConnection, isEnabled, isConfigured}: ConnectNewDialogflowProps) => { const componentInfo = useSelector((state: StateModel) => state.data.connector['dialogflow-connector']); const [projectID, setProjectID] = useState(componentInfo?.projectId || ''); const [appCredentials, setAppCredentials] = useState(componentInfo?.dialogflowCredentials || ''); @@ -29,10 +29,17 @@ export const ConnectNewDialogflow = ({createNewConnection, isEnabled}: ConnectNe const {t} = useTranslation(); - const submitConfigData = (event: React.FormEvent) => { + const updateConfig = (event: React.FormEvent) => { event.preventDefault(); + if (isEnabled) { + setIsUpdateModalVisible(true); + } else { + enableSubmitConfigData(); + } + }; + + const enableSubmitConfigData = () => { createNewConnection(projectID, appCredentials, suggestionConfidenceLevel, replyConfidenceLevel); - if (isEnabled) setIsUpdateModalVisible(true); }; return ( @@ -40,6 +47,10 @@ export const ConnectNewDialogflow = ({createNewConnection, isEnabled}: ConnectNe componentName="enterprise-dialogflow-connector" isUpdateModalVisible={isUpdateModalVisible} setIsUpdateModalVisible={setIsUpdateModalVisible} + enableSubmitConfigData={enableSubmitConfigData} + disabled={!projectID || !appCredentials || !suggestionConfidenceLevel || !replyConfidenceLevel} + isConfigured={isConfigured} + updateConfig={updateConfig} >
- ); }; diff --git a/frontend/control-center/src/pages/Connectors/Providers/Salesforce/ConnectNewSalesforce.tsx b/frontend/control-center/src/pages/Connectors/Providers/Salesforce/ConnectNewSalesforce.tsx index b800cfd948..6ba4acd5f5 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Salesforce/ConnectNewSalesforce.tsx +++ b/frontend/control-center/src/pages/Connectors/Providers/Salesforce/ConnectNewSalesforce.tsx @@ -1,18 +1,18 @@ import React, {useState} from 'react'; import {useSelector} from 'react-redux'; import {StateModel} from '../../../../reducers'; -import {Button, Input} from 'components'; +import {Input} from 'components'; import {ConnectNewForm} from '../../ConnectNewForm'; -import {cyChannelsSalesforceAddButton} from 'handles'; import {useTranslation} from 'react-i18next'; import styles from './index.module.scss'; type ConnectNewSalesforceProps = { createNewConnection: (url: string, username: string, password: string, securityToken: string) => void; isEnabled: boolean; + isConfigured: boolean; }; -export const ConnectNewSalesforce = ({createNewConnection, isEnabled}: ConnectNewSalesforceProps) => { +export const ConnectNewSalesforce = ({createNewConnection, isEnabled, isConfigured}: ConnectNewSalesforceProps) => { const componentInfo = useSelector((state: StateModel) => state.data.connector['salesforce-contacts-ingestion']); const [url, setUrl] = useState(componentInfo?.url || ''); const [username, setUsername] = useState(componentInfo?.username || ''); @@ -22,10 +22,17 @@ export const ConnectNewSalesforce = ({createNewConnection, isEnabled}: ConnectNe const {t} = useTranslation(); const isUrlValid = url && (url.startsWith('https') || url.startsWith('http')); - const submitConfigData = (event: React.FormEvent) => { + const updateConfig = (event: React.FormEvent) => { event.preventDefault(); + if (isEnabled) { + setIsUpdateModalVisible(true); + } else { + enableSubmitConfigData(); + } + }; + + const enableSubmitConfigData = () => { createNewConnection(url, username, password, securityToken); - if (isEnabled) setIsUpdateModalVisible(true); }; return ( @@ -33,6 +40,10 @@ export const ConnectNewSalesforce = ({createNewConnection, isEnabled}: ConnectNe componentName="enterprise-salesforce-contacts-ingestion" isUpdateModalVisible={isUpdateModalVisible} setIsUpdateModalVisible={setIsUpdateModalVisible} + enableSubmitConfigData={enableSubmitConfigData} + disabled={!isUrlValid || !username || !password || !securityToken} + isConfigured={isConfigured} + updateConfig={updateConfig} >
- ); }; diff --git a/frontend/control-center/src/pages/Connectors/Providers/Zendesk/ConnectNewZendesk.tsx b/frontend/control-center/src/pages/Connectors/Providers/Zendesk/ConnectNewZendesk.tsx index 8323fea90f..a1ccad43eb 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Zendesk/ConnectNewZendesk.tsx +++ b/frontend/control-center/src/pages/Connectors/Providers/Zendesk/ConnectNewZendesk.tsx @@ -1,18 +1,18 @@ import React, {useState} from 'react'; import {useSelector} from 'react-redux'; import {StateModel} from '../../../../reducers'; -import {Button, Input} from 'components'; +import {Input} from 'components'; import {ConnectNewForm} from '../../ConnectNewForm'; -import {cyChannelsZendeskAddButton} from 'handles'; import styles from './index.module.scss'; import {useTranslation} from 'react-i18next'; type ConnectNewDialogflowProps = { createNewConnection: (domain: string, token: string, username: string) => void; isEnabled: boolean; + isConfigured: boolean; }; -export const ConnectNewZendesk = ({createNewConnection, isEnabled}: ConnectNewDialogflowProps) => { +export const ConnectNewZendesk = ({createNewConnection, isEnabled, isConfigured}: ConnectNewDialogflowProps) => { const componentInfo = useSelector((state: StateModel) => state.data.connector['zendesk-connector']); const [domain, setDomain] = useState(componentInfo?.domain || ''); const [username, setUsername] = useState(componentInfo?.username || ''); @@ -20,10 +20,17 @@ export const ConnectNewZendesk = ({createNewConnection, isEnabled}: ConnectNewDi const [isUpdateModalVisible, setIsUpdateModalVisible] = useState(false); const {t} = useTranslation(); - const submitConfigData = (event: React.FormEvent) => { + const updateConfig = (event: React.FormEvent) => { event.preventDefault(); + if (isEnabled) { + setIsUpdateModalVisible(true); + } else { + enableSubmitConfigData(); + } + }; + + const enableSubmitConfigData = () => { createNewConnection(domain, token, username); - if (isEnabled) setIsUpdateModalVisible(true); }; return ( @@ -31,6 +38,10 @@ export const ConnectNewZendesk = ({createNewConnection, isEnabled}: ConnectNewDi componentName="enterprise-zendesk-connector" isUpdateModalVisible={isUpdateModalVisible} setIsUpdateModalVisible={setIsUpdateModalVisible} + enableSubmitConfigData={enableSubmitConfigData} + disabled={!domain || !username || !token} + isConfigured={isConfigured} + updateConfig={updateConfig} >
- ); }; diff --git a/frontend/control-center/src/pages/Connectors/RestartPopUp/index.tsx b/frontend/control-center/src/pages/Connectors/RestartPopUp/index.tsx index 874e1ee3ad..905f367adf 100644 --- a/frontend/control-center/src/pages/Connectors/RestartPopUp/index.tsx +++ b/frontend/control-center/src/pages/Connectors/RestartPopUp/index.tsx @@ -14,15 +14,20 @@ const connector = connect(null, mapDispatchToProps); type RestartPopUpProps = { closeRestartPopUp: () => void; componentName: string; + enableSubmitConfigData: () => void; } & ConnectedProps; const RestartPopUp = (props: RestartPopUpProps) => { - const {closeRestartPopUp, componentName, enableDisableComponent} = props; + const {closeRestartPopUp, componentName, enableDisableComponent, enableSubmitConfigData} = props; const {t} = useTranslation(); - const restartComponent = async () => { + const restartComponent = async e => { + e.preventDefault(); + + enableSubmitConfigData(); await enableDisableComponent({components: [{name: componentName, enabled: false}]}); await enableDisableComponent({components: [{name: componentName, enabled: true}]}); + closeRestartPopUp(); }; @@ -34,7 +39,7 @@ const RestartPopUp = (props: RestartPopUpProps) => { headerClassName={styles.headerModal} >

{t('restartComponentUpdate')}

- diff --git a/frontend/control-center/src/pages/Connectors/index.tsx b/frontend/control-center/src/pages/Connectors/index.tsx index 25b947a9d2..f2874e1f6e 100644 --- a/frontend/control-center/src/pages/Connectors/index.tsx +++ b/frontend/control-center/src/pages/Connectors/index.tsx @@ -59,8 +59,7 @@ const Connectors = (props: ConnectedProps) => { }; const isComponentInstalled = (repository: string, componentName: string) => { - const prefix = repository === 'enterprise' ? 'airy-enterprise' : 'airy-core'; - const componentNameCatalog = prefix + '/' + componentName; + const componentNameCatalog = repository + '/' + componentName; return catalogList[componentNameCatalog] && catalogList[componentNameCatalog].installed === true; }; diff --git a/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx b/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx index cbe095fda3..c0d738b156 100644 --- a/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx +++ b/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx @@ -5,6 +5,7 @@ import {ReactComponent as CheckmarkIcon} from 'assets/images/icons/checkmarkFill import {ReactComponent as UncheckedIcon} from 'assets/images/icons/uncheckIcon.svg'; import {ReactComponent as ArrowRight} from 'assets/images/icons/arrowRight.svg'; import {getChannelAvatar} from '../../../components/ChannelAvatar'; +import {getSourcesInfo} from '../../../components/SourceInfo'; import {getComponentName} from '../../../services'; import {getSourceForComponent} from 'model'; import {SettingsModal, Button, Toggle, Tooltip} from 'components'; @@ -38,25 +39,35 @@ const formatName = (name: string) => { }; const isConfigurableConnector = (name: string) => { - return ( - (name.includes('sources') || name.includes('enterprise')) && - !name.includes('salesforce') && - !name.includes('mobile') && - !name.includes('zendesk') - ); + let isConfigurable = false; + + getSourcesInfo().forEach(elem => { + if (elem.configKey === name) isConfigurable = true; + }); + + return isConfigurable; }; const ItemInfo = (props: ComponentInfoProps) => { - const connectors = useSelector((state: StateModel) => state.data.connector); const {healthy, itemName, isComponent, isExpanded, enabled, setIsPopUpOpen, enableDisableComponent} = props; + const connectors = useSelector((state: StateModel) => state.data.connector); const [channelSource] = useState(itemName && getSourceForComponent(itemName)); const [componentName] = useState(itemName && getComponentName(itemName)); const [componentEnabled, setComponentEnabled] = useState(enabled); const [enablePopupVisible, setEnablePopupVisible] = useState(false); const isVisible = isExpanded || isComponent; const {t} = useTranslation(); - const connectorInstalltionConfig = - connectors[formatName(itemName)] && Object.keys(connectors[formatName(itemName)]).length > 0; + + const isComponentConfigured = + connectors[formatName(itemName)] && + isConfigurableConnector(itemName) && + Object.keys(connectors[formatName(itemName)]).length > 0; + + //status + const needsConfig = isComponent && enabled && healthy && isConfigurableConnector(itemName) && !isComponentConfigured; + const isRunning = healthy && enabled; + const isNotHealthy = !healthy && enabled; + const isDisabled = !enabled; const triggerEnableDisableAction = (enabled: boolean) => { enableDisableComponent({components: [{name: itemName, enabled: enabled}]}); @@ -71,7 +82,6 @@ const ItemInfo = (props: ComponentInfoProps) => { setIsPopUpOpen(false); return; } - setEnablePopupVisible(true); setIsPopUpOpen(true); }; @@ -102,21 +112,21 @@ const ItemInfo = (props: ComponentInfoProps) => {
- {isComponent && isConfigurableConnector(itemName) && enabled && !connectorInstalltionConfig ? ( + {needsConfig ? ( } hoverElementHeight={20} hoverElementWidth={20} tooltipContent={t('needsConfiguration')} /> - ) : healthy && enabled ? ( + ) : isRunning ? ( } hoverElementHeight={20} hoverElementWidth={20} tooltipContent={t('healthy')} /> - ) : !healthy && enabled ? ( + ) : isNotHealthy ? ( } hoverElementHeight={20} @@ -124,16 +134,18 @@ const ItemInfo = (props: ComponentInfoProps) => { tooltipContent={t('notHealthy')} /> ) : ( - } - hoverElementHeight={20} - hoverElementWidth={20} - tooltipContent={t('disabled')} - /> + isDisabled && ( + } + hoverElementHeight={20} + hoverElementWidth={20} + tooltipContent={t('disabled')} + /> + ) )}
- {isComponent && ( + {!needsConfig && (
diff --git a/frontend/inbox/handles/index.ts b/frontend/inbox/handles/index.ts index 194fe2bfb1..c84d2575e3 100644 --- a/frontend/inbox/handles/index.ts +++ b/frontend/inbox/handles/index.ts @@ -19,14 +19,14 @@ export const cyTagsTableRowDisplayDeleteModal = 'tagsTableRowDisplayDeleteModal' export const cyTagsTableRowDisplayDeleteModalInput = 'tagsTableRowDisplayDeleteModalInput'; export const cyTagsTableRowDisplayDeleteModalButton = 'tagsTableRowDisplayDeleteModalButton'; +export const cyConnectorAddButton = 'connectorAddButton'; + export const cyChannelsChatPluginAddButton = 'channelsChatPluginAddButton'; export const cyChannelsFacebookAddButton = 'channelsFacebookAddButton'; export const cyChannelsTwilioSmsAddButton = 'channelsTwilioSmsAddButton'; export const cyChannelsTwilioWhatsappAddButton = 'channelsTwilioWhatsappAddButton'; export const cyChannelsGoogleAddButton = 'channelsGoogleAddButton'; -export const cyChannelsDialogflowAddButton = 'channelsDialogflowAddButton'; -export const cyChannelsZendeskAddButton = 'channelsZendeskAddButton'; -export const cyChannelsSalesforceAddButton = 'channelsSalesforceAddButton'; + export const cyChannelsChatPluginList = 'channelsChatPluginList'; export const cyChannelsFacebookList = 'channelsFacebookList'; export const cyChannelsTwilioSmsList = 'channelsTwilioSmsList'; From 539ebd8dd0a82356ed818ec74d089cb816dac231 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Jul 2022 09:51:11 +0200 Subject: [PATCH 04/92] Bump sass from 1.53.0 to 1.54.0 (#3478) Bumps [sass](https://github.com/sass/dart-sass) from 1.53.0 to 1.54.0. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.53.0...1.54.0) --- updated-dependencies: - dependency-name: sass dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index cd2bbc0fd3..7df5e72afb 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "react-hot-loader": "^4.13.0", "react-test-renderer": "^18.2.0", "sass-loader": "^13.0.2", - "sass": "^1.53.0", + "sass": "^1.54.0", "style-loader": "^3.3.1", "terser-webpack-plugin": "^5.3.3", "typescript": "^4.7.4", diff --git a/yarn.lock b/yarn.lock index 27a1a0c68d..abc29f8c5a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7346,10 +7346,10 @@ sass-loader@^13.0.2: klona "^2.0.4" neo-async "^2.6.2" -sass@^1.53.0: - version "1.53.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.53.0.tgz#eab73a7baac045cc57ddc1d1ff501ad2659952eb" - integrity sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ== +sass@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.0.tgz#24873673265e2a4fe3d3a997f714971db2fba1f4" + integrity sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From 75df755908bf43994966ddbdd74b3469470233d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Jul 2022 09:53:27 +0200 Subject: [PATCH 05/92] Bump core-js from 3.23.4 to 3.24.0 (#3480) Bumps [core-js](https://github.com/zloirock/core-js) from 3.23.4 to 3.24.0. - [Release notes](https://github.com/zloirock/core-js/releases) - [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md) - [Commits](https://github.com/zloirock/core-js/compare/v3.23.4...v3.24.0) --- updated-dependencies: - dependency-name: core-js dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 7df5e72afb..09c4221325 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "@types/jest": "^28.1.5", "audio-recorder-polyfill": "^0.4.1", "camelcase-keys": "^7.0.2", - "core-js": "3.23.4", + "core-js": "3.24.0", "emoji-mart": "3.0.1", "form-data": "^4.0.0", "i18next": "^21.8.13", diff --git a/yarn.lock b/yarn.lock index abc29f8c5a..cac793faea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3220,10 +3220,10 @@ core-js-pure@^3.8.1: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.22.7.tgz#f58489d9b309fa7b26486a0f70d4ec19a418084e" integrity sha512-wTriFxiZI+C8msGeh7fJcbC/a0V8fdInN1oS2eK79DMBGs8iIJiXhtFJCiT3rBa8w6zroHWW3p8ArlujZ/Mz+w== -core-js@3.23.4: - version "3.23.4" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.23.4.tgz#92d640faa7f48b90bbd5da239986602cfc402aa6" - integrity sha512-vjsKqRc1RyAJC3Ye2kYqgfdThb3zYnx9CrqoCcjMOENMtQPC7ZViBvlDxwYU/2z2NI/IPuiXw5mT4hWhddqjzQ== +core-js@3.24.0: + version "3.24.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.24.0.tgz#4928d4e99c593a234eb1a1f9abd3122b04d3ac57" + integrity sha512-IeOyT8A6iK37Ep4kZDD423mpi6JfPRoPUdQwEWYiGolvn4o6j2diaRzNfDfpTdu3a5qMbrGUzKUpYpRY8jXCkQ== core-util-is@1.0.2: version "1.0.2" From 247c0eefd87cd3472edafbd9243c0da71bc4a800 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Jul 2022 14:51:51 +0200 Subject: [PATCH 06/92] Bump webpack from 5.73.0 to 5.74.0 (#3479) Bumps [webpack](https://github.com/webpack/webpack) from 5.73.0 to 5.74.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.73.0...v5.74.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 38 +++++++++++++++++++------------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 09c4221325..51688fd819 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "terser-webpack-plugin": "^5.3.3", "typescript": "^4.7.4", "url-loader": "^4.1.1", - "webpack": "^5.73.0", + "webpack": "^5.74.0", "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^4.10.0", "webpack-dev-server": "^4.9.3" diff --git a/yarn.lock b/yarn.lock index cac793faea..8886d4c791 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2388,10 +2388,10 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4, acorn@^8.4.1, acorn@^8.5.0: - version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== +acorn@^8.0.4, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.7.1: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== agent-base@6: version "6.0.2" @@ -3710,10 +3710,10 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.9.3: - version "5.9.3" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz#44a342c012cbc473254af5cc6ae20ebd0aae5d88" - integrity sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow== +enhanced-resolve@^5.10.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz#0dc579c3bb2a1032e357ac45b8f3a6f3ad4fb1e6" + integrity sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -8402,10 +8402,10 @@ warning@^4.0.3: dependencies: loose-envify "^1.0.0" -watchpack@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25" - integrity sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA== +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -8519,21 +8519,21 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5.73.0: - version "5.73.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.73.0.tgz#bbd17738f8a53ee5760ea2f59dce7f3431d35d38" - integrity sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA== +webpack@^5.74.0: + version "5.74.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980" + integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^0.0.51" "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/wasm-edit" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.4.1" + acorn "^8.7.1" acorn-import-assertions "^1.7.6" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.9.3" + enhanced-resolve "^5.10.0" es-module-lexer "^0.9.0" eslint-scope "5.1.1" events "^3.2.0" @@ -8546,7 +8546,7 @@ webpack@^5.73.0: schema-utils "^3.1.0" tapable "^2.1.1" terser-webpack-plugin "^5.1.3" - watchpack "^2.3.1" + watchpack "^2.4.0" webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: From 48b06c93c71691f62db33a1f3a59c64716305dbb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Jul 2022 15:07:26 +0200 Subject: [PATCH 07/92] Bump @types/node from 18.0.3 to 18.6.1 (#3487) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 18.0.3 to 18.6.1. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 51688fd819..69079c183b 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@testing-library/react": "13.3.0", "@types/dom-mediacapture-record": "^1.0.11", "@types/lodash-es": "^4.17.6", - "@types/node": "18.0.3", + "@types/node": "18.6.1", "@types/react": "18.0.15", "@types/react-dom": "18.0.6", "@types/react-redux": "7.1.24", diff --git a/yarn.lock b/yarn.lock index 8886d4c791..0f8de64a7c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1926,10 +1926,10 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== -"@types/node@*", "@types/node@18.0.3": - version "18.0.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.3.tgz#463fc47f13ec0688a33aec75d078a0541a447199" - integrity sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ== +"@types/node@*", "@types/node@18.6.1": + version "18.6.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.1.tgz#828e4785ccca13f44e2fb6852ae0ef11e3e20ba5" + integrity sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg== "@types/node@^14.14.31": version "14.18.18" From 645ea852666d3994c8629096cf4e109c9f4400ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Jul 2022 15:46:46 +0200 Subject: [PATCH 08/92] Bump @svgr/plugin-svgo from 6.2.0 to 6.3.1 (#3492) Bumps [@svgr/plugin-svgo](https://github.com/gregberge/svgr) from 6.2.0 to 6.3.1. - [Release notes](https://github.com/gregberge/svgr/releases) - [Changelog](https://github.com/gregberge/svgr/blob/main/CHANGELOG.md) - [Commits](https://github.com/gregberge/svgr/compare/v6.2.0...v6.3.1) --- updated-dependencies: - dependency-name: "@svgr/plugin-svgo" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 69079c183b..9df932de1b 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@babel/preset-typescript": "^7.18.6", "@bazel/typescript": "5.5.2", "@hot-loader/react-dom": "^17.0.2", - "@svgr/plugin-svgo": "^6.2.0", + "@svgr/plugin-svgo": "^6.3.1", "@svgr/webpack": "^6.2.1", "@testing-library/dom": "^8.16.0", "@testing-library/react": "13.3.0", diff --git a/yarn.lock b/yarn.lock index 0f8de64a7c..d9689b5b0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1596,14 +1596,14 @@ "@svgr/hast-util-to-babel-ast" "^6.2.1" svg-parser "^2.0.2" -"@svgr/plugin-svgo@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.2.0.tgz#4cbe6a33ccccdcae4e3b63ded64cc1cbe1faf48c" - integrity sha512-oDdMQONKOJEbuKwuy4Np6VdV6qoaLLvoY86hjvQEgU82Vx1MSWRyYms6Sl0f+NtqxLI/rDVufATbP/ev996k3Q== +"@svgr/plugin-svgo@^6.2.0", "@svgr/plugin-svgo@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.3.1.tgz#3c1ff2efaed10e5c5d35a6cae7bacaedc18b5d4a" + integrity sha512-yJIjTDKPYqzFVjmsbH5EdIwEsmKxjxdXSGJVLeUgwZOZPAkNQmD1v7LDbOdOKbR44FG8465Du+zWPdbYGnbMbw== dependencies: cosmiconfig "^7.0.1" deepmerge "^4.2.2" - svgo "^2.5.0" + svgo "^2.8.0" "@svgr/webpack@^6.2.1": version "6.2.1" @@ -7852,7 +7852,7 @@ svg-parser@^2.0.2: resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== -svgo@^2.5.0: +svgo@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== From 8a05dbcb31183c01f848d3b07d187e68da985e6a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Jul 2022 15:47:08 +0200 Subject: [PATCH 09/92] Bump @babel/plugin-transform-spread from 7.18.6 to 7.18.9 (#3486) Bumps [@babel/plugin-transform-spread](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-spread) from 7.18.6 to 7.18.9. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.9/packages/babel-plugin-transform-spread) --- updated-dependencies: - dependency-name: "@babel/plugin-transform-spread" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 38 +++++++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 9df932de1b..cf219aebf6 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@babel/core": "7.18.6", "@babel/plugin-proposal-class-properties": "^7.16.7", "@babel/plugin-proposal-object-rest-spread": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", "@babel/preset-env": "^7.18.6", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", diff --git a/yarn.lock b/yarn.lock index d9689b5b0a..886e0019a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -188,10 +188,10 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz#9448974dd4fb1d80fefe72e8a0af37809cd30d6d" - integrity sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== "@babel/helper-remap-async-to-generator@^7.18.6": version "7.18.6" @@ -221,12 +221,12 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-skip-transparent-expression-wrappers@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz#7dff00a5320ca4cf63270e5a0eca4b268b7380d9" - integrity sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw== +"@babel/helper-skip-transparent-expression-wrappers@^7.18.6", "@babel/helper-skip-transparent-expression-wrappers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" + integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.18.9" "@babel/helper-split-export-declaration@^7.18.6": version "7.18.6" @@ -825,13 +825,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz#82b080241965f1689f0a60ecc6f1f6575dbdb9d6" - integrity sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw== +"@babel/plugin-transform-spread@^7.18.6", "@babel/plugin-transform-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz#6ea7a6297740f381c540ac56caf75b05b74fb664" + integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-transform-sticky-regex@^7.18.6": version "7.18.6" @@ -1031,6 +1031,14 @@ "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" +"@babel/types@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" + integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + "@bazel/typescript@5.5.2": version "5.5.2" resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-5.5.2.tgz#dc7464577a99e4586e9a26c4be6f6c7e898d738f" From ca6e2127c3c62032898bf1f8ef4bfe9f86efb875 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Jul 2022 16:36:53 +0200 Subject: [PATCH 10/92] Bump @babel/plugin-proposal-object-rest-spread from 7.18.6 to 7.18.9 (#3493) Bumps [@babel/plugin-proposal-object-rest-spread](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-proposal-object-rest-spread) from 7.18.6 to 7.18.9. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.9/packages/babel-plugin-proposal-object-rest-spread) --- updated-dependencies: - dependency-name: "@babel/plugin-proposal-object-rest-spread" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 42 +++++++++++++++++++++--------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index cf219aebf6..f1ebd52f61 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "devDependencies": { "@babel/core": "7.18.6", "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", "@babel/plugin-transform-spread": "^7.18.9", "@babel/preset-env": "^7.18.6", "@babel/preset-react": "^7.18.6", diff --git a/yarn.lock b/yarn.lock index 886e0019a0..e67704f630 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,10 +24,10 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.6.tgz#8b37d24e88e8e21c499d4328db80577d8882fa53" - integrity sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.6", "@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== "@babel/core@7.18.6", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.15.5": version "7.18.6" @@ -74,12 +74,12 @@ "@babel/helper-explode-assignable-expression" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz#18d35bfb9f83b1293c22c55b3d576c1315b6ed96" - integrity sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.6", "@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== dependencies: - "@babel/compat-data" "^7.18.6" + "@babel/compat-data" "^7.18.8" "@babel/helper-validator-option" "^7.18.6" browserslist "^4.20.2" semver "^6.3.0" @@ -383,16 +383,16 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz#ec93bba06bfb3e15ebd7da73e953d84b094d5daf" - integrity sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw== +"@babel/plugin-proposal-object-rest-spread@^7.18.6", "@babel/plugin-proposal-object-rest-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" + integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== dependencies: - "@babel/compat-data" "^7.18.6" - "@babel/helper-compilation-targets" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.8" "@babel/plugin-proposal-optional-catch-binding@^7.18.6": version "7.18.6" @@ -749,10 +749,10 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz#cbe03d5a4c6385dd756034ac1baa63c04beab8dc" - integrity sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A== +"@babel/plugin-transform-parameters@^7.18.6", "@babel/plugin-transform-parameters@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" + integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== dependencies: "@babel/helper-plugin-utils" "^7.18.6" From e1db53b1af54744366ba39b9ec52618550088ca8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Jul 2022 10:06:01 +0200 Subject: [PATCH 11/92] Bump @babel/preset-env from 7.18.6 to 7.18.9 (#3495) Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.18.6 to 7.18.9. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.9/packages/babel-preset-env) --- updated-dependencies: - dependency-name: "@babel/preset-env" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 303 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 186 insertions(+), 119 deletions(-) diff --git a/package.json b/package.json index f1ebd52f61..b7a116adc5 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "@babel/plugin-proposal-class-properties": "^7.16.7", "@babel/plugin-proposal-object-rest-spread": "^7.18.9", "@babel/plugin-transform-spread": "^7.18.9", - "@babel/preset-env": "^7.18.6", + "@babel/preset-env": "^7.18.9", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", "@bazel/typescript": "5.5.2", diff --git a/yarn.lock b/yarn.lock index e67704f630..7135895101 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,7 +24,7 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.6", "@babel/compat-data@^7.18.8": +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.8": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== @@ -59,6 +59,15 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" +"@babel/generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" + integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== + dependencies: + "@babel/types" "^7.18.9" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" @@ -124,6 +133,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" integrity sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q== +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + "@babel/helper-explode-assignable-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" @@ -139,6 +153,14 @@ "@babel/template" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" + "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" @@ -153,6 +175,13 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== + dependencies: + "@babel/types" "^7.18.9" + "@babel/helper-module-imports@^7.12.13": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" @@ -181,6 +210,20 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + "@babel/helper-optimise-call-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" @@ -214,6 +257,17 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-replace-supers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" + integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + "@babel/helper-simple-access@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" @@ -221,7 +275,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-skip-transparent-expression-wrappers@^7.18.6", "@babel/helper-skip-transparent-expression-wrappers@^7.18.9": +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz#778d87b3a758d90b471e7b9918f34a9a02eb5818" integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== @@ -292,6 +346,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.6.tgz#845338edecad65ebffef058d3be851f1d28a63bc" integrity sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw== +"@babel/parser@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" + integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" @@ -299,14 +358,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz#b4e4dbc2cd1acd0133479918f7c6412961c9adb8" - integrity sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz#a11af19aa373d68d561f08e0a57242350ed0ec50" + integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" "@babel/plugin-proposal-async-generator-functions@^7.18.6": version "7.18.6" @@ -343,12 +402,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz#1016f0aa5ab383bbf8b3a85a2dcaedf6c8ee7491" - integrity sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw== +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-proposal-json-strings@^7.18.6": @@ -359,12 +418,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz#3b9cac6f1ffc2aa459d111df80c12020dfc6b665" - integrity sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q== +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz#8148cbb350483bf6220af06fa6db3690e14b2e23" + integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": @@ -383,7 +442,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.18.6", "@babel/plugin-proposal-object-rest-spread@^7.18.9": +"@babel/plugin-proposal-object-rest-spread@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz#f9434f6beb2c8cae9dfcf97d2a5941bbbf9ad4e7" integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== @@ -402,13 +461,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz#46d4f2ffc20e87fad1d98bc4fa5d466366f6aa0b" - integrity sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA== +"@babel/plugin-proposal-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz#e8e8fe0723f2563960e4bf5e9690933691915993" + integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-proposal-private-methods@^7.18.6": @@ -600,40 +659,40 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz#b5f78318914615397d86a731ef2cc668796a726c" - integrity sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ== +"@babel/plugin-transform-block-scoping@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz#f9b7e018ac3f373c81452d6ada8bd5a18928926d" + integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-classes@^7.18.6": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.8.tgz#7e85777e622e979c85c701a095280360b818ce49" - integrity sha512-RySDoXdF6hgHSHuAW4aLGyVQdmvEX/iJtjVre52k0pxRq4hzqze+rAVP++NmNv596brBpYmaiKgTZby7ziBnVg== +"@babel/plugin-transform-classes@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz#90818efc5b9746879b869d5ce83eb2aa48bbc3da" + integrity sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-function-name" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-replace-supers" "^7.18.9" "@babel/helper-split-export-declaration" "^7.18.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz#5d15eb90e22e69604f3348344c91165c5395d032" - integrity sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A== +"@babel/plugin-transform-computed-properties@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz#2357a8224d402dad623caf6259b611e56aec746e" + integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-destructuring@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz#a98b0e42c7ffbf5eefcbcf33280430f230895c6f" - integrity sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ== +"@babel/plugin-transform-destructuring@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz#68906549c021cb231bee1db21d3b5b095f8ee292" + integrity sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.18.6" @@ -643,12 +702,12 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-duplicate-keys@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz#e6c94e8cd3c9dd8a88144f7b78ae22975a7ff473" - integrity sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg== +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-exponentiation-operator@^7.18.6": version "7.18.6" @@ -658,28 +717,28 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-for-of@^7.18.6": +"@babel/plugin-transform-for-of@^7.18.8": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-function-name@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz#6a7e4ae2893d336fd1b8f64c9f92276391d0f1b4" - integrity sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA== +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== dependencies: - "@babel/helper-compilation-targets" "^7.18.6" - "@babel/helper-function-name" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz#9d6af353b5209df72960baf4492722d56f39a205" - integrity sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q== +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-member-expression-literals@^7.18.6": version "7.18.6" @@ -707,14 +766,14 @@ "@babel/helper-simple-access" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz#026511b7657d63bf5d4cf2fd4aeb963139914a54" - integrity sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g== +"@babel/plugin-transform-modules-systemjs@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz#545df284a7ac6a05125e3e405e536c5853099a06" + integrity sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A== dependencies: "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/helper-validator-identifier" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" @@ -749,7 +808,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" -"@babel/plugin-transform-parameters@^7.18.6", "@babel/plugin-transform-parameters@^7.18.8": +"@babel/plugin-transform-parameters@^7.18.8": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== @@ -825,7 +884,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-spread@^7.18.6", "@babel/plugin-transform-spread@^7.18.9": +"@babel/plugin-transform-spread@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz#6ea7a6297740f381c540ac56caf75b05b74fb664" integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA== @@ -840,19 +899,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-template-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz#b763f4dc9d11a7cce58cf9a490d82e80547db9c2" - integrity sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw== +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" -"@babel/plugin-transform-typeof-symbol@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz#486bb39d5a18047358e0d04dc0d2f322f0b92e92" - integrity sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g== +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-typescript@^7.18.6": version "7.18.6" @@ -878,29 +937,29 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@^7.15.6", "@babel/preset-env@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.6.tgz#953422e98a5f66bc56cd0b9074eaea127ec86ace" - integrity sha512-WrthhuIIYKrEFAwttYzgRNQ5hULGmwTj+D6l7Zdfsv5M7IWV/OZbUfbeL++Qrzx1nVJwWROIFhCHRYQV4xbPNw== +"@babel/preset-env@^7.15.6", "@babel/preset-env@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.9.tgz#9b3425140d724fbe590322017466580844c7eaff" + integrity sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg== dependencies: - "@babel/compat-data" "^7.18.6" - "@babel/helper-compilation-targets" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/helper-validator-option" "^7.18.6" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" "@babel/plugin-proposal-async-generator-functions" "^7.18.6" "@babel/plugin-proposal-class-properties" "^7.18.6" "@babel/plugin-proposal-class-static-block" "^7.18.6" "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.18.9" "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" "@babel/plugin-proposal-private-methods" "^7.18.6" "@babel/plugin-proposal-private-property-in-object" "^7.18.6" "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" @@ -922,37 +981,37 @@ "@babel/plugin-transform-arrow-functions" "^7.18.6" "@babel/plugin-transform-async-to-generator" "^7.18.6" "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.18.6" - "@babel/plugin-transform-classes" "^7.18.6" - "@babel/plugin-transform-computed-properties" "^7.18.6" - "@babel/plugin-transform-destructuring" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.18.9" + "@babel/plugin-transform-classes" "^7.18.9" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.18.9" "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.18.6" - "@babel/plugin-transform-function-name" "^7.18.6" - "@babel/plugin-transform-literals" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" "@babel/plugin-transform-member-expression-literals" "^7.18.6" "@babel/plugin-transform-modules-amd" "^7.18.6" "@babel/plugin-transform-modules-commonjs" "^7.18.6" - "@babel/plugin-transform-modules-systemjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.18.9" "@babel/plugin-transform-modules-umd" "^7.18.6" "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" "@babel/plugin-transform-new-target" "^7.18.6" "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.8" "@babel/plugin-transform-property-literals" "^7.18.6" "@babel/plugin-transform-regenerator" "^7.18.6" "@babel/plugin-transform-reserved-words" "^7.18.6" "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.18.6" + "@babel/plugin-transform-spread" "^7.18.9" "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.6" - "@babel/plugin-transform-typeof-symbol" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" "@babel/plugin-transform-unicode-escapes" "^7.18.6" "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.6" + "@babel/types" "^7.18.9" babel-plugin-polyfill-corejs2 "^0.3.1" babel-plugin-polyfill-corejs3 "^0.5.2" babel-plugin-polyfill-regenerator "^0.3.1" @@ -1023,15 +1082,23 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.15.6", "@babel/types@^7.16.7", "@babel/types@^7.18.6", "@babel/types@^7.18.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.18.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.7.tgz#a4a2c910c15040ea52cdd1ddb1614a65c8041726" - integrity sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ== +"@babel/traverse@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" + integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - to-fast-properties "^2.0.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.9" + "@babel/types" "^7.18.9" + debug "^4.1.0" + globals "^11.1.0" -"@babel/types@^7.18.9": +"@babel/types@^7.0.0", "@babel/types@^7.15.6", "@babel/types@^7.16.7", "@babel/types@^7.18.6", "@babel/types@^7.18.7", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== From 7bba24b71e70d9f2bea3a66855897c0d83a9d6c5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Jul 2022 10:07:36 +0200 Subject: [PATCH 12/92] Bump babel-jest from 28.1.2 to 28.1.3 (#3494) Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 28.1.2 to 28.1.3. - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v28.1.3/packages/babel-jest) --- updated-dependencies: - dependency-name: babel-jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 72 ++++++++++++++++++++++++++++++++++++---------------- 2 files changed, 51 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index b7a116adc5..0b811464b0 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "@types/resize-observer-browser": "^0.1.7", "@typescript-eslint/eslint-plugin": "^4.33.0", "@typescript-eslint/parser": "^4.32.0", - "babel-jest": "^28.1.2", + "babel-jest": "^28.1.3", "copy-webpack-plugin": "^11.0.0", "babel-loader": "^8.2.5", "css-loader": "^6.7.1", diff --git a/yarn.lock b/yarn.lock index 7135895101..0b2658e771 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1403,22 +1403,22 @@ jest-haste-map "^28.1.1" slash "^3.0.0" -"@jest/transform@^28.1.2": - version "28.1.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.2.tgz#b367962c53fd53821269bde050ce373e111327c1" - integrity sha512-3o+lKF6iweLeJFHBlMJysdaPbpoMmtbHEFsjzSv37HIq/wWt5ijTeO2Yf7MO5yyczCopD507cNwNLeX8Y/CuIg== +"@jest/transform@^28.1.2", "@jest/transform@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" + integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.9" - jest-haste-map "^28.1.1" + jest-haste-map "^28.1.3" jest-regex-util "^28.0.2" - jest-util "^28.1.1" + jest-util "^28.1.3" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" @@ -2686,15 +2686,15 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -babel-jest@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.2.tgz#2b37fb81439f14d34d8b2cc4a4bd7efabf9acbfe" - integrity sha512-pfmoo6sh4L/+5/G2OOfQrGJgvH7fTa1oChnuYH2G/6gA+JwDvO8PELwvwnofKBMNrQsam0Wy/Rw+QSrBNewq2Q== +babel-jest@^28.1.2, babel-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" + integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== dependencies: - "@jest/transform" "^28.1.2" + "@jest/transform" "^28.1.3" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^28.1.1" + babel-preset-jest "^28.1.3" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -2727,10 +2727,10 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.1.tgz#5e055cdcc47894f28341f87f5e35aad2df680b11" - integrity sha512-NovGCy5Hn25uMJSAU8FaHqzs13cFoOI4lhIujiepssjCKRsAo3TA734RDWSGxuFTsUJXerYOqQQodlxgmtqbzw== +babel-plugin-jest-hoist@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz#1952c4d0ea50f2d6d794353762278d1d8cca3fbe" + integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -2779,12 +2779,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.1.tgz#5b6e5e69f963eb2d70f739c607b8f723c0ee75e4" - integrity sha512-FCq9Oud0ReTeWtcneYf/48981aTfXYuB9gbU4rBNNJVBSQ6ssv7E6v/qvbBxtOWwZFXjLZwpg+W3q7J6vhH25g== +babel-preset-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz#5dfc20b99abed5db994406c2b9ab94c73aaa419d" + integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== dependencies: - babel-plugin-jest-hoist "^28.1.1" + babel-plugin-jest-hoist "^28.1.3" babel-preset-current-node-syntax "^1.0.0" bail@^2.0.0: @@ -5394,6 +5394,25 @@ jest-haste-map@^28.1.1: optionalDependencies: fsevents "^2.3.2" +jest-haste-map@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" + integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== + dependencies: + "@jest/types" "^28.1.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + jest-worker "^28.1.3" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + jest-leak-detector@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.1.tgz#537f37afd610a4b3f4cab15e06baf60484548efb" @@ -5623,6 +5642,15 @@ jest-worker@^28.1.1: merge-stream "^2.0.0" supports-color "^8.0.0" +jest-worker@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest@^28.1.2: version "28.1.2" resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.2.tgz#451ff24081ce31ca00b07b60c61add13aa96f8eb" From e6ee36c257281932e6bc05af4c3929b2bce9eddb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Jul 2022 10:52:18 +0200 Subject: [PATCH 13/92] Bump i18next from 21.8.13 to 21.8.14 (#3498) Bumps [i18next](https://github.com/i18next/i18next) from 21.8.13 to 21.8.14. - [Release notes](https://github.com/i18next/i18next/releases) - [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next/compare/v21.8.13...v21.8.14) --- updated-dependencies: - dependency-name: i18next dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0b811464b0..380d68b203 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "core-js": "3.24.0", "emoji-mart": "3.0.1", "form-data": "^4.0.0", - "i18next": "^21.8.13", + "i18next": "^21.8.14", "isomorphic-fetch": "^3.0.0", "linkify-react": "^3.0.4", "linkifyjs": "^3.0.5", diff --git a/yarn.lock b/yarn.lock index 0b2658e771..1c22203d43 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4836,10 +4836,10 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -i18next@^21.8.13: - version "21.8.13" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.8.13.tgz#e5583bfe333bc41716b5a14693615d94a3dfd2cf" - integrity sha512-DpzwrJq7Y8tjUHxx6ByOkUIjrGYdQI5Mfv4XEI7q2RWdknQ7TaO9bKi8hS/LqYD6pBV5YGxJLReyLkOCxIpouA== +i18next@^21.8.14: + version "21.8.14" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.8.14.tgz#03a3a669ef4520aadd9d152c80596f600e287c6a" + integrity sha512-4Yi+DtexvMm/Yw3Q9fllzY12SgLk+Mcmar+rCAccsOPul/2UmnBzoHbTGn/L48IPkFcmrNaH7xTLboBWIbH6pw== dependencies: "@babel/runtime" "^7.17.2" From e91c5322d79a72606dd14dbee9f08ce4b795d537 Mon Sep 17 00:00:00 2001 From: Christoph Proeschel Date: Thu, 28 Jul 2022 15:42:32 +0200 Subject: [PATCH 14/92] [#3096] Use jaas for creating topics (#3455) * [#3096] Use jaas for creating topics * Test and confirm locally --- .../templates/provisioning/job-kafka.yaml | 2 +- .../provisioning/kafka-create-topics.yaml | 62 +++++++++++++------ .../co/airy/tools/topics/Application.java | 36 ++++++++--- 3 files changed, 72 insertions(+), 28 deletions(-) diff --git a/infrastructure/helm-chart/templates/provisioning/job-kafka.yaml b/infrastructure/helm-chart/templates/provisioning/job-kafka.yaml index df740ca7e4..023587bb7f 100644 --- a/infrastructure/helm-chart/templates/provisioning/job-kafka.yaml +++ b/infrastructure/helm-chart/templates/provisioning/job-kafka.yaml @@ -10,7 +10,7 @@ spec: containers: - name: create-topics image: "{{ .Values.provisioning.kafka.image }}:{{ .Values.provisioning.kafka.imageTag }}" - command: ["/bin/sh", "/opt/provisioning/create-topics.sh"] + command: ["/bin/bash", "/opt/provisioning/create-topics.sh"] envFrom: - configMapRef: name: kafka-config diff --git a/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml b/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml index 2dea497541..868daef4d9 100644 --- a/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml +++ b/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml @@ -17,47 +17,69 @@ data: set -euo pipefail IFS=$'\n\t' - ZOOKEEPER=${ZOOKEEPER:-zookeeper:2181} + + if [ -z "${ZOOKEEPER+x}" ]; then + if [ -z "${KAFKA_BROKERS+x}" ]; then + echo "Neither ZOOKEEPER nor KAFKA_BROKERS is set. Exiting." + exit 1 + fi + CONNECTION_OPTS=(--bootstrap-server $KAFKA_BROKERS) + echo "ZOOKEEPER is not set, using --bootstrap-server option instead" + else + CONNECTION_OPTS=(--zookeeper $ZOOKEEPER) + fi + + PARTITIONS=${PARTITIONS:-10} REPLICAS=${KAFKA_MINIMUM_REPLICAS:-1} AIRY_CORE_NAMESPACE=${AIRY_CORE_NAMESPACE:-} - echo "Creating Kafka topics" - - if [ -n "${AIRY_CORE_NAMESPACE}" ] - then + if [ -n "${AIRY_CORE_NAMESPACE}" ]; then AIRY_CORE_NAMESPACE="${AIRY_CORE_NAMESPACE}." echo "Using ${AIRY_CORE_NAMESPACE} to namespace topics" fi + if [ -n "${AUTH_JAAS}" ]; then + cat < /opt/kafka/jaas.config + security.protocol=SASL_SSL + sasl.jaas.config=$AUTH_JAAS + sasl.mechanism=PLAIN + EOF + CONNECTION_OPTS+=(--command-config /opt/kafka/jaas.config) + echo "Using jaas authentication for connecting to Kafka" + fi + + echo "Creating Kafka topics" + + - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.channels" + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.channels" - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.contacts" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.contacts" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.messages" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.messages" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.metadata" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.metadata" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.read-receipt" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.read-receipt" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.sources" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.sources" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.tags" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.tags" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.templates" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.templates" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.users" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.users" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.webhooks-v0.29.0" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.webhooks-v0.29.0" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}ops.application.logs" + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}ops.application.logs" - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.facebook.events" + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.facebook.events" - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.google.events" + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.google.events" - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.twilio.events" + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.twilio.events" - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.viber.events" + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.viber.events" diff --git a/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java b/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java index 22c58053d2..5019a164a9 100644 --- a/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java +++ b/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java @@ -12,7 +12,7 @@ public class Application { public static void main(String[] args) { - String createTopicTemplate = " kafka-topics.sh --create --if-not-exists --zookeeper \"${ZOOKEEPER}\" --replication-factor \"${REPLICAS}\" --partitions \"${PARTITIONS}\" --topic \"${AIRY_CORE_NAMESPACE}%s\" %s"; + String createTopicTemplate = " kafka-topics.sh --create --if-not-exists \"${CONNECTION_OPTS[@]}\" --replication-factor \"${REPLICAS}\" --partitions \"${PARTITIONS}\" --topic \"${AIRY_CORE_NAMESPACE}%s\" %s"; String headerTemplate = "apiVersion: v1" + "\n" + "kind: ConfigMap" + @@ -42,18 +42,40 @@ public static void main(String[] args) { " set -euo pipefail\n" + " IFS=$'\\n\\t'\n" + "\n" + - " ZOOKEEPER=${ZOOKEEPER:-zookeeper:2181}\n" + + "\n" + + " if [ -z \"${ZOOKEEPER+x}\" ]; then\n" + + " if [ -z \"${KAFKA_BROKERS+x}\" ]; then\n" + + " echo \"Neither ZOOKEEPER nor KAFKA_BROKERS is set. Exiting.\"\n" + + " exit 1\n" + + " fi\n" + + " CONNECTION_OPTS=(--bootstrap-server $KAFKA_BROKERS)\n" + + " echo \"ZOOKEEPER is not set, using --bootstrap-server option instead\"\n" + + " else\n" + + " CONNECTION_OPTS=(--zookeeper $ZOOKEEPER)\n" + + " fi\n" + + "\n" + + "\n" + " PARTITIONS=${PARTITIONS:-10}\n" + " REPLICAS=${KAFKA_MINIMUM_REPLICAS:-1}\n" + " AIRY_CORE_NAMESPACE=${AIRY_CORE_NAMESPACE:-}\n" + "\n" + - " echo \"Creating Kafka topics\"\n" + - "\n" + - " if [ -n \"${AIRY_CORE_NAMESPACE}\" ]\n" + - " then\n" + + " if [ -n \"${AIRY_CORE_NAMESPACE}\" ]; then\n" + " AIRY_CORE_NAMESPACE=\"${AIRY_CORE_NAMESPACE}.\"\n" + " echo \"Using ${AIRY_CORE_NAMESPACE} to namespace topics\"\n" + - " fi"; + " fi\n" + + "\n" + + " if [ -n \"${AUTH_JAAS}\" ]; then\n" + + " cat < /opt/kafka/jaas.config\n" + + " security.protocol=SASL_SSL\n" + + " sasl.jaas.config=$AUTH_JAAS\n" + + " sasl.mechanism=PLAIN\n" + + " EOF\n" + + " CONNECTION_OPTS+=(--command-config /opt/kafka/jaas.config)\n" + + " echo \"Using jaas authentication for connecting to Kafka\"\n" + + " fi\n" + + "\n" + + " echo \"Creating Kafka topics\"\n" + ; TopicsFinder finder = new TopicsFinder(); From b8f294409819d25ffec67d975f7da824ab4e67f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Jul 2022 16:26:57 +0200 Subject: [PATCH 15/92] Bump preact from 10.9.0 to 10.10.0 (#3499) Bumps [preact](https://github.com/preactjs/preact) from 10.9.0 to 10.10.0. - [Release notes](https://github.com/preactjs/preact/releases) - [Commits](https://github.com/preactjs/preact/compare/10.9.0...10.10.0) --- updated-dependencies: - dependency-name: preact dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 380d68b203..1fe037e3b0 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "linkify-react": "^3.0.4", "linkifyjs": "^3.0.5", "lodash-es": "^4.17.21", - "preact": "^10.9.0", + "preact": "^10.10.0", "react": "18.2.0", "react-autosize-textarea": "^7.1.0", "react-color": "^2.19.3", diff --git a/yarn.lock b/yarn.lock index 1c22203d43..e25bc74e34 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6816,10 +6816,10 @@ postcss@^8.4.7: picocolors "^1.0.0" source-map-js "^1.0.2" -preact@^10.9.0: - version "10.9.0" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.9.0.tgz#69b282b26926b66481c9ae3450cf68610fee29ff" - integrity sha512-jO6/OvCRL+OT8gst/+Q2ir7dMybZAX8ioP02Zmzh3BkQMHLyqZSujvxbUriXvHi8qmhcHKC2Gwbog6Kt+YTh+Q== +preact@^10.10.0: + version "10.10.0" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.10.0.tgz#7434750a24b59dae1957d95dc0aa47a4a8e9a180" + integrity sha512-fszkg1iJJjq68I4lI8ZsmBiaoQiQHbxf1lNq+72EmC/mZOsFF5zn3k1yv9QGoFgIXzgsdSKtYymLJsrJPoamjQ== prelude-ls@^1.2.1: version "1.2.1" From 20d89210dcd4f575bafae0b9a82fa18943836f0d Mon Sep 17 00:00:00 2001 From: Ljupco Vangelski Date: Thu, 28 Jul 2022 16:52:53 +0200 Subject: [PATCH 16/92] [#3504] Set minimum Kafka replicas to 1 (#3506) --- .../helm-chart/templates/provisioning/kafka-create-topics.yaml | 1 + .../topics/src/main/java/co/airy/tools/topics/Application.java | 1 + .../java/co/airy/spring/kafka/streams/KafkaStreamsConfig.java | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml b/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml index 868daef4d9..e7b46119d8 100644 --- a/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml +++ b/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml @@ -33,6 +33,7 @@ data: PARTITIONS=${PARTITIONS:-10} REPLICAS=${KAFKA_MINIMUM_REPLICAS:-1} AIRY_CORE_NAMESPACE=${AIRY_CORE_NAMESPACE:-} + AUTH_JAAS=${AUTH_JAAS:-} if [ -n "${AIRY_CORE_NAMESPACE}" ]; then AIRY_CORE_NAMESPACE="${AIRY_CORE_NAMESPACE}." diff --git a/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java b/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java index 5019a164a9..6bdcd8bffe 100644 --- a/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java +++ b/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java @@ -58,6 +58,7 @@ public static void main(String[] args) { " PARTITIONS=${PARTITIONS:-10}\n" + " REPLICAS=${KAFKA_MINIMUM_REPLICAS:-1}\n" + " AIRY_CORE_NAMESPACE=${AIRY_CORE_NAMESPACE:-}\n" + + " AUTH_JAAS=${AUTH_JAAS:-}\n" + "\n" + " if [ -n \"${AIRY_CORE_NAMESPACE}\" ]; then\n" + " AIRY_CORE_NAMESPACE=\"${AIRY_CORE_NAMESPACE}.\"\n" + diff --git a/lib/java/spring/kafka/streams/src/main/java/co/airy/spring/kafka/streams/KafkaStreamsConfig.java b/lib/java/spring/kafka/streams/src/main/java/co/airy/spring/kafka/streams/KafkaStreamsConfig.java index bd9e930573..f9995abfbd 100644 --- a/lib/java/spring/kafka/streams/src/main/java/co/airy/spring/kafka/streams/KafkaStreamsConfig.java +++ b/lib/java/spring/kafka/streams/src/main/java/co/airy/spring/kafka/streams/KafkaStreamsConfig.java @@ -36,7 +36,7 @@ public class KafkaStreamsConfig { @Value("${kafka.session.timeout.ms:30000}") private int sessionTimeoutMs; - @Value("${kafka.replication.factor:3}") + @Value("${kafka.replication.factor:1}") private int replicationFactor; @Value("${kafka.heartbeat.interval.ms:10000}") From e41a553749ff80765f7b03aedb1012719cc3f375 Mon Sep 17 00:00:00 2001 From: Thorsten Date: Fri, 29 Jul 2022 13:46:00 +0200 Subject: [PATCH 17/92] [#3329] New design channel connectors (#3502) --- frontend/control-center/src/App.tsx | 21 +++-- .../src/components/SourceInfo/index.tsx | 4 +- .../Connectors/ChannelCard/index.module.scss | 1 + .../pages/Connectors/ChannelCard/index.tsx | 7 +- .../Connectors/ConfigStatusButton/index.tsx | 22 ++++-- .../ChannelsListItem/index.module.scss | 28 +++++++ .../ChannelsListItem/index.tsx | 13 ++- .../ConnectedChannelsList/index.module.scss | 4 - .../ConnectedChannelsList/index.tsx | 36 +-------- .../ConnectorConfig/index.module.scss | 23 ++---- .../Connectors/ConnectorConfig/index.tsx | 79 +++++++++++++++---- .../src/pages/Connectors/InfoCard/index.tsx | 7 +- .../ChatPlugin/ChatPluginConnect.module.scss | 29 ++++++- .../Airy/ChatPlugin/ChatPluginConnect.tsx | 51 +++++++----- .../Airy/ChatPlugin/ConnectorChatplugin.tsx | 9 +++ .../sections/ConnectNewChatPlugin.tsx | 3 +- .../ColorSection/SampleInput/index.tsx | 1 + .../CustomiseSection.module.scss | 2 +- .../Facebook/Messenger/ConnectorFacebook.tsx | 9 +++ .../Messenger/FacebookConnect.module.scss | 4 - .../Facebook/Messenger/FacebookConnect.tsx | 12 +-- .../Providers/Google/ConnectorGoogle.tsx | 9 +++ .../Google/GoogleConnect.module.scss | 4 - .../Instagram/ConnectorInstagram.tsx | 9 +++ .../Instagram/InstagramConnect.module.scss | 4 - .../Twilio/SMS/ConnectorTwilioSms.tsx | 9 +++ .../Twilio/TwilioConnect.module.scss | 4 - .../Providers/Twilio/TwilioConnect.tsx | 13 +-- .../WhatsApp/ConnectorTwilioWhatsapp.tsx | 9 +++ .../src/pages/Connectors/index.tsx | 27 ++++--- .../Status/ComponentListItem/ItemInfo.tsx | 10 ++- .../src/services/getComponentStatus.ts | 7 ++ .../assets/images/icons/zendeskLogo.svg | 2 +- lib/typescript/model/Config.ts | 2 +- lib/typescript/translations/translations.ts | 8 ++ 35 files changed, 316 insertions(+), 166 deletions(-) create mode 100644 frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ConnectorChatplugin.tsx create mode 100644 frontend/control-center/src/pages/Connectors/Providers/Facebook/Messenger/ConnectorFacebook.tsx create mode 100644 frontend/control-center/src/pages/Connectors/Providers/Google/ConnectorGoogle.tsx create mode 100644 frontend/control-center/src/pages/Connectors/Providers/Instagram/ConnectorInstagram.tsx create mode 100644 frontend/control-center/src/pages/Connectors/Providers/Twilio/SMS/ConnectorTwilioSms.tsx create mode 100644 frontend/control-center/src/pages/Connectors/Providers/Twilio/WhatsApp/ConnectorTwilioWhatsapp.tsx create mode 100644 frontend/control-center/src/services/getComponentStatus.ts diff --git a/frontend/control-center/src/App.tsx b/frontend/control-center/src/App.tsx index c9daa017d5..427d98e87c 100644 --- a/frontend/control-center/src/App.tsx +++ b/frontend/control-center/src/App.tsx @@ -26,6 +26,13 @@ import Status from './pages/Status'; import Inbox from './pages/Inbox'; import ChannelsList from './pages/Inbox/ChannelsList'; import InboxOutlet from './pages/Inbox/InboxOutlet'; +import ConnectorChatplugin from './pages/Connectors/Providers/Airy/ChatPlugin/ConnectorChatplugin'; +import ConnectorConfig from './pages/Connectors/ConnectorConfig'; +import ConnectorFacebook from './pages/Connectors/Providers/Facebook/Messenger/ConnectorFacebook'; +import ConnectorTwilioSms from './pages/Connectors/Providers/Twilio/SMS/ConnectorTwilioSms'; +import ConnectorTwilioWhatsapp from './pages/Connectors/Providers/Twilio/WhatsApp/ConnectorTwilioWhatsapp'; +import ConnectorGoogle from './pages/Connectors/Providers/Google/ConnectorGoogle'; +import ConnectorInstagram from './pages/Connectors/Providers/Instagram/ConnectorInstagram'; const mapDispatchToProps = { getClientConfig, @@ -50,13 +57,13 @@ const App = (props: ConnectedProps) => { } /> }> - } /> - } /> - } /> - } /> - } /> - } /> - } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> } /> } /> } /> diff --git a/frontend/control-center/src/components/SourceInfo/index.tsx b/frontend/control-center/src/components/SourceInfo/index.tsx index ef9c3cb7ef..2e831e9611 100644 --- a/frontend/control-center/src/components/SourceInfo/index.tsx +++ b/frontend/control-center/src/components/SourceInfo/index.tsx @@ -63,7 +63,7 @@ export const getSourcesInfo = (): SourceInfo[] => { type: Source.chatPlugin, channel: true, title: 'Airy Live Chat', - description: , + description: , image: , newChannelRoute: CONNECTORS_CHAT_PLUGIN_ROUTE + '/new', channelsListRoute: CONNECTORS_CONNECTED_ROUTE + '/chatplugin', @@ -175,7 +175,7 @@ export const getSourcesInfo = (): SourceInfo[] => { componentName: 'zendesk-connector', repository: 'airy-enterprise', itemInfoString: 'connectors', - docs: 'https://airy.co/docs/enterprise/apps/dialogflow/deployment', + docs: 'https://airy.co/docs/enterprise/apps/zendesk/installation', }, { type: Source.salesforce, diff --git a/frontend/control-center/src/pages/Connectors/ChannelCard/index.module.scss b/frontend/control-center/src/pages/Connectors/ChannelCard/index.module.scss index 7f7af8cac2..0cee812f3c 100644 --- a/frontend/control-center/src/pages/Connectors/ChannelCard/index.module.scss +++ b/frontend/control-center/src/pages/Connectors/ChannelCard/index.module.scss @@ -56,6 +56,7 @@ color: var(--color-airy-blue); margin-right: 4px; text-decoration: underline; + margin-left: 5px; } .arrowIcon { width: 8px; diff --git a/frontend/control-center/src/pages/Connectors/ChannelCard/index.tsx b/frontend/control-center/src/pages/Connectors/ChannelCard/index.tsx index 99963df70f..fce98c91a3 100644 --- a/frontend/control-center/src/pages/Connectors/ChannelCard/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ChannelCard/index.tsx @@ -4,15 +4,19 @@ import {SourceInfo} from '../../../components/SourceInfo'; import {Link} from 'react-router-dom'; import {ReactComponent as ArrowRightIcon} from 'assets/images/icons/arrowRight.svg'; import {useTranslation} from 'react-i18next'; +import {ConfigStatusButton} from '../ConfigStatusButton'; +import {ComponentStatus} from '..'; type ChannelCardProps = { sourceInfo: SourceInfo; channelsToShow?: number; + componentStatus?: ComponentStatus; }; export const ChannelCard = (props: ChannelCardProps) => { - const {sourceInfo, channelsToShow} = props; + const {sourceInfo, channelsToShow, componentStatus} = props; const {t} = useTranslation(); + return (
@@ -21,6 +25,7 @@ export const ChannelCard = (props: ChannelCardProps) => { {sourceInfo.title}
+ {componentStatus && } {channelsToShow} {channelsToShow === 1 ? t('channel') : t('channels')} diff --git a/frontend/control-center/src/pages/Connectors/ConfigStatusButton/index.tsx b/frontend/control-center/src/pages/Connectors/ConfigStatusButton/index.tsx index 503c2d138f..11a5acdfbf 100644 --- a/frontend/control-center/src/pages/Connectors/ConfigStatusButton/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ConfigStatusButton/index.tsx @@ -2,28 +2,38 @@ import React from 'react'; import {Button} from 'components'; import {useTranslation} from 'react-i18next'; import styles from './index.module.scss'; +import {ComponentStatus} from '..'; interface ConfigStatusButtonProps { - enabled: 'Enabled' | 'Not Configured' | 'Disabled'; + componentStatus: ComponentStatus; customStyle?: string; } export const ConfigStatusButton = (props: ConfigStatusButtonProps) => { - const {enabled, customStyle} = props; + const {componentStatus, customStyle} = props; const {t} = useTranslation(); return ( ); }; diff --git a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.module.scss b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.module.scss index cbaecdc694..a8017d6a5e 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.module.scss +++ b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.module.scss @@ -234,3 +234,31 @@ header { margin: 0 8px; } } + +.deleteModalContainer { + background: var(--color-background-white); + display: flex; + justify-content: center; + align-items: center; + width: 650px; + height: 320px; + border-radius: 20px; +} + +.deleteModalContent { + @include font-base; + p { + color: var(--color-text-contrast); + } + a { + color: var(--color-airy-blue); + } +} + +.deleteModalHeader { + @include font-l; +} + +.disconnectButton { + border-radius: 10px; +} diff --git a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.tsx b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.tsx index cd913336cd..62fbd068bc 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.tsx @@ -81,11 +81,13 @@ const ChannelListItem = (props: ChannelListItemProps) => { {deletePopupVisible && ( -
+

{t('confirmDisconnectChannelText')}

{t('confirmDisconnectChannelProblem')} @@ -96,7 +98,12 @@ const ChannelListItem = (props: ChannelListItemProps) => { -

diff --git a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.module.scss b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.module.scss index c7d3f068c1..4723d543e2 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.module.scss +++ b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.module.scss @@ -7,11 +7,7 @@ color: var(--color-text-contrast); display: block; border-radius: 10px; - padding-left: 96px; - padding-top: 88px; width: 100%; - padding: 32px; - margin: 88px 1.5em 0 191px; min-height: calc(100vh - 170px); } diff --git a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.tsx b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.tsx index b0bc3687ad..946e257324 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.tsx @@ -9,15 +9,13 @@ import {allChannels} from '../../../selectors/channels'; import {Channel, Source} from 'model'; -import {SearchField, LinkButton} from 'components'; -import {ReactComponent as ArrowLeftIcon} from 'assets/images/icons/leftArrowCircle.svg'; +import {SearchField} from 'components'; import {ReactComponent as SearchIcon} from 'assets/images/icons/search.svg'; import {ReactComponent as PlusIcon} from 'assets/images/icons/plus.svg'; import {ReactComponent as CloseIcon} from 'assets/images/icons/close.svg'; import styles from './index.module.scss'; import { - cyChannelsFormBackButton, cyConnectorsAddNewButton, cyChannelsChatPluginList, cyChannelsFacebookList, @@ -33,9 +31,7 @@ import { CONNECTORS_TWILIO_WHATSAPP_ROUTE, CONNECTORS_GOOGLE_ROUTE, CONNECTORS_INSTAGRAM_ROUTE, - CONNECTORS_ROUTE, } from '../../../routes/routes'; -import {getChannelAvatar} from '../../../components/ChannelAvatar'; import ChannelsListItem from './ChannelsListItem'; import {Pagination} from 'components'; import {useAnimation} from 'render/services/useAnimation'; @@ -56,15 +52,12 @@ const ConnectedChannelsList = (props: ConnectedProps) => { return Object.values(allChannels(state)).filter((channel: Channel) => channel.source === source); }); - const [name, setName] = useState(''); - const [description, setDescription] = useState(''); const [path, setPath] = useState(''); const [searchText, setSearchText] = useState(''); const [showingSearchField, setShowingSearchField] = useState(false); const [animationAction, setAnimationAction] = useState(false); const [dataCyChannelList, setDataCyChannelList] = useState(''); const listPageSize = 8; - const connectorsRoute = location.pathname.includes('connectors'); const filteredChannels = channels.filter((channel: Channel) => channel.metadata?.name?.toLowerCase().includes(searchText.toLowerCase()) @@ -91,43 +84,31 @@ const ConnectedChannelsList = (props: ConnectedProps) => { let ROUTE; switch (source) { case Source.facebook: - setName(t('facebookTitle')); - setDescription(t('facebookDescription')); ROUTE = CONNECTORS_FACEBOOK_ROUTE; setPath(ROUTE + '/new'); setDataCyChannelList(cyChannelsFacebookList); break; case Source.google: - setName(t('googleTitle')); - setDescription(t('googleDescription')); ROUTE = CONNECTORS_GOOGLE_ROUTE; setPath(ROUTE + '/new'); setDataCyChannelList(cyChannelsGoogleList); break; case Source.twilioSMS: - setName(t('twilioSmsTitle')); - setDescription(t('twilioSmsDescription')); ROUTE = CONNECTORS_TWILIO_SMS_ROUTE; setPath(ROUTE + '/new'); setDataCyChannelList(cyChannelsTwilioSmsList); break; case Source.twilioWhatsApp: - setName(t('twilioWhatsappTitle')); - setDescription(t('twilioWhatsappDescription')); ROUTE = CONNECTORS_TWILIO_WHATSAPP_ROUTE; setPath(ROUTE + '/new'); setDataCyChannelList(cyChannelsTwilioWhatsappList); break; case Source.chatPlugin: - setName(t('chatpluginTitle')); - setDescription(t('chatpluginDescription')); ROUTE = CONNECTORS_CHAT_PLUGIN_ROUTE; setPath(ROUTE + '/new'); setDataCyChannelList(cyChannelsChatPluginList); break; case Source.instagram: - setName(t('instagramTitle')); - setDescription(t('instagramDescription')); ROUTE = CONNECTORS_INSTAGRAM_ROUTE; setPath(ROUTE + '/new'); setDataCyChannelList(cyChannelsInstagramList); @@ -142,21 +123,6 @@ const ConnectedChannelsList = (props: ConnectedProps) => { return (
- navigate(CONNECTORS_ROUTE)} type="button"> -
- - {connectorsRoute ? t('Connectors') : ''} -
-
-
-
-
{getChannelAvatar(source)}
-
-

{name}

-

{description}

-
-
-
diff --git a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss index 5c01b4bd03..f88aeecddc 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss +++ b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss @@ -7,9 +7,8 @@ display: block; border-radius: 10px; width: 100%; - margin: 18.5% 1.5em 0 191px; - height: calc(100vh - 88px); - overflow-y: scroll; + margin: 248px 16px 0 191px; + overflow-y: hidden; } .container { @@ -37,9 +36,8 @@ display: flex; flex-direction: column; position: absolute; - padding-left: 10px; - margin: 108px 1.5em 0 191px; - width: 85%; + padding: 88px 16px 0 201px; + width: 100%; h1 { @include font-xl; font-weight: bold; @@ -69,7 +67,7 @@ .componentTitle { display: flex; - width: min-content; + // width: min-content; align-items: center; } @@ -78,6 +76,7 @@ } .connectorIcon { + display: flex; width: 75px; margin-right: 15px; @@ -86,10 +85,6 @@ } } -.connectorIconOffsetTop { - margin-top: 12px; -} - .textInfo { display: flex; justify-content: space-between; @@ -165,7 +160,7 @@ } .backIcon { - width: 24px; + width: 20px; background: transparent; path { fill: var(--color-text-gray); @@ -179,7 +174,6 @@ .headlineText { color: var(--color-text-contrast); - flex-grow: 1; margin-right: 8px; } @@ -277,8 +271,7 @@ } .pageContentContainer { - padding-top: 28px; - padding-left: 32px; + padding: 32px; } .enableModalContainerWrapper { diff --git a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx index a9b5e4f19b..25b348a879 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx @@ -23,6 +23,15 @@ import {ConnectNewSalesforce} from '../Providers/Salesforce/ConnectNewSalesforce import {ConfigStatusButton} from '../ConfigStatusButton'; import {UpdateComponentConfigurationRequestPayload} from 'httpclient/src'; import styles from './index.module.scss'; +import ConnectedChannelsList from '../ConnectedChannelsList'; +import ChatPluginConnect from '../Providers/Airy/ChatPlugin/ChatPluginConnect'; +import {CONNECTORS_CONNECTED_ROUTE} from '../../../routes/routes'; +import FacebookConnect from '../Providers/Facebook/Messenger/FacebookConnect'; +import InstagramConnect from '../Providers/Instagram/InstagramConnect'; +import GoogleConnect from '../Providers/Google/GoogleConnect'; +import TwilioSmsConnect from '../Providers/Twilio/SMS/TwilioSmsConnect'; +import TwilioWhatsappConnect from '../Providers/Twilio/WhatsApp/TwilioWhatsappConnect'; +import {getComponentStatus} from '../../../services/getComponentStatus'; export enum Pages { createUpdate = 'create-update', @@ -46,19 +55,22 @@ const mapStateToProps = (state: StateModel) => ({ const connector = connect(mapStateToProps, mapDispatchToProps); type ConnectorConfigProps = { - connector: Source; + connector?: Source; } & ConnectedProps; const ConnectorConfig = (props: ConnectorConfigProps) => { const {connector, enableDisableComponent, updateConnectorConfiguration, getConnectorsConfiguration, config} = props; - const {channelId} = useParams(); + const {channelId, source} = useParams(); const connectorConfiguration = useSelector((state: StateModel) => state.data.connector); const [connectorInfo, setConnectorInfo] = useState(null); const [currentPage] = useState(Pages.createUpdate); const [configurationModal, setConfigurationModal] = useState(false); const [isEnabled, setIsEnabled] = useState(null); const [isConfigured, setIsConfigured] = useState(false); + const [lineTitle, setLineTitle] = useState(''); + const [backTitle, setBackTitle] = useState('Connectors'); + const [backRoute, setBackRoute] = useState(''); const {t} = useTranslation(); useEffect(() => { @@ -74,10 +86,24 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { useEffect(() => { getConnectorsConfiguration(); + (source === Source.chatPlugin || connector === Source.chatPlugin) && setIsConfigured(true); const sourceInfoArr = getSourcesInfo(); const connectorSourceInfo = sourceInfoArr.filter(item => item.type === connector); - setConnectorInfo({...connectorSourceInfo[0]}); - }, []); + + channelId === 'new' + ? connector === Source.chatPlugin + ? setLineTitle(t('Create')) + : setLineTitle(t('addChannel')) + : setLineTitle(t('Configuration')); + + source + ? (setConnectorInfo(sourceInfoArr.filter(item => item.type === source)[0]), setLineTitle(t('channelsCapital'))) + : setConnectorInfo(connectorSourceInfo[0]); + + channelId + ? (setBackRoute(`${CONNECTORS_CONNECTED_ROUTE}/${connectorSourceInfo[0].type}`), setBackTitle(t('back'))) + : (setBackRoute('/connectors'), setBackTitle(t('Connectors'))); + }, [source]); useEffect(() => { if (config && connectorInfo) { @@ -181,6 +207,27 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { /> ); } + + if (connector === Source.chatPlugin) { + return ; + } + if (connector === Source.facebook) { + return ; + } + if (connector === Source.instagram) { + return ; + } + if (connector === Source.google) { + return ; + } + if (connector === Source.twilioSMS) { + return ; + } + if (connector === Source.twilioWhatsApp) { + return ; + } + + return ; }; const enableDisableComponentToggle = () => { @@ -205,11 +252,11 @@ const ConnectorConfig = (props: ConnectorConfigProps) => {
- +
- {t('Connectors')} + {backTitle}
@@ -230,7 +277,7 @@ const ConnectorConfig = (props: ConnectorConfigProps) => {

{connectorInfo && connectorInfo?.title}

@@ -264,15 +311,17 @@ const ConnectorConfig = (props: ConnectorConfigProps) => {
-
-
- - {channelId === 'new' ? t('Enable') : t('Configuration')} - + {connector !== Source.chatPlugin && ( +
+
+ + {lineTitle} + +
+
-
-
-
+ )} +
diff --git a/frontend/control-center/src/pages/Connectors/InfoCard/index.tsx b/frontend/control-center/src/pages/Connectors/InfoCard/index.tsx index 688becd0e8..a1c455e27a 100644 --- a/frontend/control-center/src/pages/Connectors/InfoCard/index.tsx +++ b/frontend/control-center/src/pages/Connectors/InfoCard/index.tsx @@ -9,6 +9,7 @@ import {useTranslation} from 'react-i18next'; import {connect, ConnectedProps} from 'react-redux'; import {ConfigStatusButton} from '../ConfigStatusButton'; import styles from './index.module.scss'; +import {ComponentStatus} from '..'; export enum InfoCardStyle { normal = 'normal', @@ -19,7 +20,7 @@ type InfoCardProps = { sourceInfo: SourceInfo; addChannelAction: () => void; installed: boolean; - enabled?: 'Enabled' | 'Not Configured' | 'Disabled'; + componentStatus?: ComponentStatus; style: InfoCardStyle; updateItemList?: (installed: boolean, componentName: string) => void; setIsInstalledToggled?: React.Dispatch>; @@ -38,7 +39,7 @@ const InfoCard = (props: InfoCardProps) => { addChannelAction, installed, style, - enabled, + componentStatus, installComponent, uninstallComponent, updateItemList, @@ -136,7 +137,7 @@ const InfoCard = (props: InfoCardProps) => { )} - {enabled && } + {componentStatus && } {isModalVisible && ( ) => { const {channelId} = useParams(); const currentChannel = props.channels.find((channel: Channel) => channel.id === channelId); const [chatpluginConfig, setChatpluginConfig] = useState(DefaultConfig); - const [currentPage, setCurrentPage] = useState(Pages.createUpdate); + const [currentPage, setCurrentPage] = useState(channelId !== 'new' ? Pages.customization : Pages.createUpdate); + const [showCreatedModal, setShowCreatedModal] = useState(false); + const [currentChannelId, setCurrentChannelId] = useState(''); const displayName = currentChannel?.metadata?.name || ''; const imageUrl = currentChannel?.metadata?.imageUrl || ''; const navigate = useNavigate(); @@ -64,7 +65,8 @@ const ChatPluginConnect = (props: ConnectedProps) => { }), }) .then((id: string) => { - navigate(`${CHAT_PLUGIN_ROUTE}/${id}`); + setCurrentChannelId(id); + setShowCreatedModal(true); }); }; @@ -89,6 +91,16 @@ const ChatPluginConnect = (props: ConnectedProps) => { setCurrentPage(Pages.install); }; + const handleCustomize = () => { + navigate(`${CHAT_PLUGIN_ROUTE}/${currentChannelId}`); + setShowCreatedModal(false); + }; + + const handleClose = () => { + setShowCreatedModal(false); + navigate(`${CONNECTORS_CONNECTED_ROUTE}/${Source.chatPlugin}`); + }; + const PageContent = () => { switch (currentPage) { case Pages.createUpdate: @@ -151,17 +163,6 @@ const ChatPluginConnect = (props: ConnectedProps) => { return (
-
-
- navigate(`${CONNECTORS_CONNECTED_ROUTE}/chatplugin`)} type="button"> - - -

{t('chatpluginTitle')}

-
-
- -
-
@@ -200,6 +201,20 @@ const ChatPluginConnect = (props: ConnectedProps) => {
+ {showCreatedModal && ( + + + + )}
); }; diff --git a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ConnectorChatplugin.tsx b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ConnectorChatplugin.tsx new file mode 100644 index 0000000000..eff8c449c6 --- /dev/null +++ b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ConnectorChatplugin.tsx @@ -0,0 +1,9 @@ +import {Source} from 'model'; +import React from 'react'; +import ConnectorConfig from '../../../ConnectorConfig'; + +const ConnectorChatplugin = () => { + return ; +}; + +export default ConnectorChatplugin; diff --git a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/ConnectNewChatPlugin.tsx b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/ConnectNewChatPlugin.tsx index 8bbdf9108a..ee9a1539c7 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/ConnectNewChatPlugin.tsx +++ b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/ConnectNewChatPlugin.tsx @@ -11,7 +11,8 @@ interface ConnectNewChatPluginProps { createNewConnection: (displayName: string, imageUrl?: string) => void; } -export const ConnectNewChatPlugin = ({createNewConnection}: ConnectNewChatPluginProps) => { +export const ConnectNewChatPlugin = (props: ConnectNewChatPluginProps) => { + const {createNewConnection} = props; const [displayName, setDisplayName] = useState(''); const [imageUrl, setImageUrl] = useState(''); const {t} = useTranslation(); diff --git a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/CustomiseSection/ColorSection/SampleInput/index.tsx b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/CustomiseSection/ColorSection/SampleInput/index.tsx index 1ee644f0ce..cb73b98bc8 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/CustomiseSection/ColorSection/SampleInput/index.tsx +++ b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/CustomiseSection/ColorSection/SampleInput/index.tsx @@ -16,6 +16,7 @@ export const SampleInput = (props: SampleInputProps) => { type="text" name={name} value={value} + hideLabel={true} onChange={(e: React.ChangeEvent) => { setValue(e.target.value); }} diff --git a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/CustomiseSection/CustomiseSection.module.scss b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/CustomiseSection/CustomiseSection.module.scss index 9c54876eb7..5a04943f1a 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/CustomiseSection/CustomiseSection.module.scss +++ b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/CustomiseSection/CustomiseSection.module.scss @@ -80,7 +80,7 @@ background-color: var(--color-background-gray); border-radius: 10px; padding: 0 24px 0 24px; - margin: 32px 0 0 24px; + margin: 32px 8px 0 24px; min-width: 350px; min-height: 700px; position: fixed; diff --git a/frontend/control-center/src/pages/Connectors/Providers/Facebook/Messenger/ConnectorFacebook.tsx b/frontend/control-center/src/pages/Connectors/Providers/Facebook/Messenger/ConnectorFacebook.tsx new file mode 100644 index 0000000000..a09914b6eb --- /dev/null +++ b/frontend/control-center/src/pages/Connectors/Providers/Facebook/Messenger/ConnectorFacebook.tsx @@ -0,0 +1,9 @@ +import {Source} from 'model'; +import React from 'react'; +import ConnectorConfig from '../../../ConnectorConfig'; + +const ConnectorFacebook = () => { + return ; +}; + +export default ConnectorFacebook; diff --git a/frontend/control-center/src/pages/Connectors/Providers/Facebook/Messenger/FacebookConnect.module.scss b/frontend/control-center/src/pages/Connectors/Providers/Facebook/Messenger/FacebookConnect.module.scss index 80e91d3b42..6c877ccdc1 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Facebook/Messenger/FacebookConnect.module.scss +++ b/frontend/control-center/src/pages/Connectors/Providers/Facebook/Messenger/FacebookConnect.module.scss @@ -5,11 +5,7 @@ background: var(--color-background-white); display: block; border-radius: 10px; - padding-left: 96px; - padding-top: 88px; width: 100%; - padding: 32px; - margin: 88px 1.5em 0 191px; min-height: calc(100vh - 170px); } diff --git a/frontend/control-center/src/pages/Connectors/Providers/Facebook/Messenger/FacebookConnect.tsx b/frontend/control-center/src/pages/Connectors/Providers/Facebook/Messenger/FacebookConnect.tsx index a63c1d820f..85cc77e151 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Facebook/Messenger/FacebookConnect.tsx +++ b/frontend/control-center/src/pages/Connectors/Providers/Facebook/Messenger/FacebookConnect.tsx @@ -4,9 +4,8 @@ import {connect, ConnectedProps} from 'react-redux'; import {connectFacebookChannel} from '../../../../../actions/channel'; -import {Button, Input, LinkButton, InfoButton} from 'components'; +import {Button, Input} from 'components'; import {ConnectChannelFacebookRequestPayload} from 'httpclient/src'; -import {ReactComponent as ArrowLeftIcon} from 'assets/images/icons/arrowLeft.svg'; import styles from './FacebookConnect.module.scss'; @@ -69,15 +68,6 @@ const FacebookConnect = (props: ConnectedProps) => { return (
-

Facebook Messenger

-
- - - navigate(-1)} type="button"> - - {t('back')} - -
{ + return ; +}; + +export default ConnectorGoogle; diff --git a/frontend/control-center/src/pages/Connectors/Providers/Google/GoogleConnect.module.scss b/frontend/control-center/src/pages/Connectors/Providers/Google/GoogleConnect.module.scss index f542613968..1ce9f4705f 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Google/GoogleConnect.module.scss +++ b/frontend/control-center/src/pages/Connectors/Providers/Google/GoogleConnect.module.scss @@ -5,11 +5,7 @@ background: var(--color-background-white); display: block; border-radius: 10px; - padding-left: 96px; - padding-top: 88px; width: 100%; - padding: 32px; - margin: 88px 1.5em 0 191px; min-height: calc(100vh - 170px); } diff --git a/frontend/control-center/src/pages/Connectors/Providers/Instagram/ConnectorInstagram.tsx b/frontend/control-center/src/pages/Connectors/Providers/Instagram/ConnectorInstagram.tsx new file mode 100644 index 0000000000..29fdc9be63 --- /dev/null +++ b/frontend/control-center/src/pages/Connectors/Providers/Instagram/ConnectorInstagram.tsx @@ -0,0 +1,9 @@ +import {Source} from 'model'; +import React from 'react'; +import ConnectorConfig from '../../ConnectorConfig'; + +const ConnectorInstagram = () => { + return ; +}; + +export default ConnectorInstagram; diff --git a/frontend/control-center/src/pages/Connectors/Providers/Instagram/InstagramConnect.module.scss b/frontend/control-center/src/pages/Connectors/Providers/Instagram/InstagramConnect.module.scss index f542613968..1ce9f4705f 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Instagram/InstagramConnect.module.scss +++ b/frontend/control-center/src/pages/Connectors/Providers/Instagram/InstagramConnect.module.scss @@ -5,11 +5,7 @@ background: var(--color-background-white); display: block; border-radius: 10px; - padding-left: 96px; - padding-top: 88px; width: 100%; - padding: 32px; - margin: 88px 1.5em 0 191px; min-height: calc(100vh - 170px); } diff --git a/frontend/control-center/src/pages/Connectors/Providers/Twilio/SMS/ConnectorTwilioSms.tsx b/frontend/control-center/src/pages/Connectors/Providers/Twilio/SMS/ConnectorTwilioSms.tsx new file mode 100644 index 0000000000..7e177cbe43 --- /dev/null +++ b/frontend/control-center/src/pages/Connectors/Providers/Twilio/SMS/ConnectorTwilioSms.tsx @@ -0,0 +1,9 @@ +import {Source} from 'model'; +import React from 'react'; +import ConnectorConfig from '../../../ConnectorConfig'; + +const ConnectorTwilioSms = () => { + return ; +}; + +export default ConnectorTwilioSms; diff --git a/frontend/control-center/src/pages/Connectors/Providers/Twilio/TwilioConnect.module.scss b/frontend/control-center/src/pages/Connectors/Providers/Twilio/TwilioConnect.module.scss index 6c8af63732..965befba5e 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Twilio/TwilioConnect.module.scss +++ b/frontend/control-center/src/pages/Connectors/Providers/Twilio/TwilioConnect.module.scss @@ -85,11 +85,7 @@ background: var(--color-background-white); display: block; border-radius: 10px; - padding-left: 96px; - padding-top: 88px; width: 100%; - padding: 32px; - margin: 88px 1.5em 0 191px; min-height: calc(100vh - 170px); } diff --git a/frontend/control-center/src/pages/Connectors/Providers/Twilio/TwilioConnect.tsx b/frontend/control-center/src/pages/Connectors/Providers/Twilio/TwilioConnect.tsx index 63977ceb2c..f814bdb3f6 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Twilio/TwilioConnect.tsx +++ b/frontend/control-center/src/pages/Connectors/Providers/Twilio/TwilioConnect.tsx @@ -3,9 +3,8 @@ import {connect, ConnectedProps} from 'react-redux'; import {connectTwilioSms, connectTwilioWhatsapp} from '../../../../actions'; -import {Button, Input, LinkButton, UrlInputField, InfoButton} from 'components'; +import {Button, Input, UrlInputField} from 'components'; import {Channel, Source} from 'model'; -import {ReactComponent as ArrowLeft} from 'assets/images/icons/arrowLeft.svg'; import styles from './TwilioConnect.module.scss'; @@ -26,7 +25,7 @@ const mapDispatchToProps = {connectTwilioWhatsapp, connectTwilioSms}; const connector = connect(null, mapDispatchToProps); const TwilioConnect = (props: TwilioConnectProps) => { - const {channel, source, pageTitle, buttonText, infoLink, connectTwilioWhatsapp, connectTwilioSms} = props; + const {channel, source, buttonText, connectTwilioWhatsapp, connectTwilioSms} = props; const {t} = useTranslation(); const navigate = useNavigate(); @@ -74,14 +73,6 @@ const TwilioConnect = (props: TwilioConnectProps) => { return (
-

{pageTitle}

-
- - navigate(-1)} type="button"> - - {t('back')} - -
diff --git a/frontend/control-center/src/pages/Connectors/Providers/Twilio/WhatsApp/ConnectorTwilioWhatsapp.tsx b/frontend/control-center/src/pages/Connectors/Providers/Twilio/WhatsApp/ConnectorTwilioWhatsapp.tsx new file mode 100644 index 0000000000..d853608175 --- /dev/null +++ b/frontend/control-center/src/pages/Connectors/Providers/Twilio/WhatsApp/ConnectorTwilioWhatsapp.tsx @@ -0,0 +1,9 @@ +import {Source} from 'model'; +import React from 'react'; +import ConnectorConfig from '../../../ConnectorConfig'; + +const ConnectorTwilioWhatsapp = () => { + return ; +}; + +export default ConnectorTwilioWhatsapp; diff --git a/frontend/control-center/src/pages/Connectors/index.tsx b/frontend/control-center/src/pages/Connectors/index.tsx index f2874e1f6e..f3528799ce 100644 --- a/frontend/control-center/src/pages/Connectors/index.tsx +++ b/frontend/control-center/src/pages/Connectors/index.tsx @@ -14,6 +14,13 @@ import styles from './index.module.scss'; import {EmptyStateConnectors} from './EmptyStateConnectors'; import {ChannelCard} from './ChannelCard'; import {SimpleLoader} from 'components'; +import {getComponentStatus} from '../../services/getComponentStatus'; + +export enum ComponentStatus { + enabled = 'Enabled', + notConfigured = 'Not Configured', + disabled = 'Disabled', +} const mapDispatchToProps = { listChannels, @@ -47,17 +54,6 @@ const Connectors = (props: ConnectedProps) => { setPageTitle(pageTitle); }, [channels.length]); - const isComponentEnabled = (componentName: string, configKey: string) => { - if (connectors[componentName]) { - const componentConfigured = Object.keys(connectors[componentName]).length > 0; - return connectors[componentName] && componentConfigured && components[configKey].enabled - ? 'Enabled' - : !componentConfigured && components[configKey].enabled - ? 'Not Configured' - : 'Disabled'; - } - }; - const isComponentInstalled = (repository: string, componentName: string) => { const componentNameCatalog = repository + '/' + componentName; return catalogList[componentNameCatalog] && catalogList[componentNameCatalog].installed === true; @@ -86,6 +82,10 @@ const Connectors = (props: ConnectedProps) => { 0 || infoItem.type === Source.chatPlugin, + components[infoItem.configKey].enabled + )} key={index} /> )) || @@ -111,7 +111,10 @@ const Connectors = (props: ConnectedProps) => {
0, + components[infoItem.configKey].enabled + )} style={InfoCardStyle.normal} key={infoItem.type} sourceInfo={infoItem} diff --git a/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx b/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx index c0d738b156..265aa00259 100644 --- a/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx +++ b/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx @@ -7,7 +7,7 @@ import {ReactComponent as ArrowRight} from 'assets/images/icons/arrowRight.svg'; import {getChannelAvatar} from '../../../components/ChannelAvatar'; import {getSourcesInfo} from '../../../components/SourceInfo'; import {getComponentName} from '../../../services'; -import {getSourceForComponent} from 'model'; +import {ConfigServices, getSourceForComponent} from 'model'; import {SettingsModal, Button, Toggle, Tooltip} from 'components'; import styles from './index.module.scss'; import {connect, ConnectedProps, useSelector} from 'react-redux'; @@ -64,7 +64,13 @@ const ItemInfo = (props: ComponentInfoProps) => { Object.keys(connectors[formatName(itemName)]).length > 0; //status - const needsConfig = isComponent && enabled && healthy && isConfigurableConnector(itemName) && !isComponentConfigured; + const needsConfig = + isComponent && + enabled && + healthy && + isConfigurableConnector(itemName) && + !isComponentConfigured && + itemName !== ConfigServices.sourcesChatPlugin; const isRunning = healthy && enabled; const isNotHealthy = !healthy && enabled; const isDisabled = !enabled; diff --git a/frontend/control-center/src/services/getComponentStatus.ts b/frontend/control-center/src/services/getComponentStatus.ts new file mode 100644 index 0000000000..53735623b9 --- /dev/null +++ b/frontend/control-center/src/services/getComponentStatus.ts @@ -0,0 +1,7 @@ +import {ComponentStatus} from '../pages/Connectors'; + +export const getComponentStatus = (isConfigured: boolean, isEnabled: boolean) => { + if (isConfigured && isEnabled) return ComponentStatus.enabled; + if (!isConfigured && isEnabled) return ComponentStatus.notConfigured; + if (!isEnabled) return ComponentStatus.disabled; +}; diff --git a/lib/typescript/assets/images/icons/zendeskLogo.svg b/lib/typescript/assets/images/icons/zendeskLogo.svg index 7a895808ce..752637e9f5 100644 --- a/lib/typescript/assets/images/icons/zendeskLogo.svg +++ b/lib/typescript/assets/images/icons/zendeskLogo.svg @@ -1,3 +1,3 @@ - + diff --git a/lib/typescript/model/Config.ts b/lib/typescript/model/Config.ts index db0c1300e2..bd8a101055 100644 --- a/lib/typescript/model/Config.ts +++ b/lib/typescript/model/Config.ts @@ -16,7 +16,7 @@ export enum ConfigServices { integrationSourceApi = 'integration-source-api', integrationWebhook = 'integration-webhook', mediaResolver = 'media-resolver', - sourcesChatPlugin = 'sources-chat-plugin', + sourcesChatPlugin = 'sources-chatplugin', sourcesFacebook = 'sources-facebook', sourcesGoogle = 'sources-google', sourcesTwilio = 'sources-twilio', diff --git a/lib/typescript/translations/translations.ts b/lib/typescript/translations/translations.ts index 80731d6307..ca180ca92d 100644 --- a/lib/typescript/translations/translations.ts +++ b/lib/typescript/translations/translations.ts @@ -166,6 +166,7 @@ const resources = { channel: 'channel', channels: 'channels', channelsCapital: 'Channels', + addChannel: 'Add Channel', disconnectChannel: 'Disconnect Channel', confirmDisconnectChannelTitle: 'Confirm Channel Disconnection', confirmDisconnectChannelText: @@ -201,6 +202,7 @@ const resources = { //Customize Chatplugin chatpluginCustomize: 'Customise your Airy chat plugin and see the preview.', + successfullyCreatedChannel: 'Channel has been successfully created', addCodeTagHead: 'Add this code inside the tag ', copyCode: 'Copy code', headerTextColor: 'Header Text Color', @@ -573,6 +575,7 @@ const resources = { twilioWhatsappDescription: 'Weltweite Chat-App Nr. 1', channel: 'Kanal', channels: 'Kanäle', + addChannel: 'Kanal hinzufügen', channelsCapital: 'Kanäle', disconnectChannel: 'Kanal entfernen', confirmDisconnectChannelTitle: 'Bestätigung der Kanaltrennung', @@ -608,6 +611,7 @@ const resources = { //Customize Chatplugin chatpluginCustomize: 'Passen Sie Ihr Airy-Chat-Plugin an und sehen Sie sich die Vorschau an.', + successfullyCreatedChannel: 'Der Kanal wurde erfolgreich erstellt', addCodeTagHead: 'Fügen Sie diesen Code innerhalb des Tags ein ', copyCode: 'Code kopieren', headerTextColor: 'Textfarbe der Kopfzeile', @@ -971,6 +975,7 @@ const resources = { twilioWhatsappDescription: 'Première application de chat au monde', channel: 'canal', channels: 'canaux', + addChannel: 'Ajouter un canal', channelsCapital: 'Canaux', disconnectChannel: 'Déconnecter du canal', confirmDisconnectChannelTitle: 'Confirmer la déconnexion du canal', @@ -1006,6 +1011,7 @@ const resources = { //Customize Chatplugin chatpluginCustomize: `Personnalisez votre plugin de chat Airy et voyez l'aperçu.`, + successfullyCreatedChannel: 'Le canal a été créé avec succès', addCodeTagHead: `Ajoutez ce code à l'intérieur de la balise `, copyCode: 'Copier le code', headerTextColor: `Couleur du texte de l'en-tête`, @@ -1373,6 +1379,7 @@ const resources = { twilioWhatsappDescription: 'La aplicación de mensajería número 1 del mundo', channel: 'canal', channels: 'canales', + addChannel: 'Añadir canal', channelsCapital: 'Canales', disconnectChannel: 'Desconectar el canal', confirmDisconnectChannelTitle: 'Confirmar la desconexión del canal', @@ -1408,6 +1415,7 @@ const resources = { //Customize Chatplugin chatpluginCustomize: 'Personalice su plugin de chat Airy y vea la vista previa.', + successfullyCreatedChannel: 'El canal ha sido creado con éxito', addCodeTagHead: 'Añade este código dentro de la etiqueta ', copyCode: 'Copiar código', headerTextColor: 'Color del texto de la cabecera', From ce6df8481c7c4e2eb024186ac89d1517b156fbac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 10:01:51 +0200 Subject: [PATCH 18/92] Bump @svgr/webpack from 6.2.1 to 6.3.1 (#3507) Bumps [@svgr/webpack](https://github.com/gregberge/svgr) from 6.2.1 to 6.3.1. - [Release notes](https://github.com/gregberge/svgr/releases) - [Changelog](https://github.com/gregberge/svgr/blob/main/CHANGELOG.md) - [Commits](https://github.com/gregberge/svgr/compare/v6.2.1...v6.3.1) --- updated-dependencies: - dependency-name: "@svgr/webpack" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 220 +++++++++++++++++++++++++++++---------------------- 2 files changed, 126 insertions(+), 96 deletions(-) diff --git a/package.json b/package.json index 1fe037e3b0..f3bfef6c0f 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@bazel/typescript": "5.5.2", "@hot-loader/react-dom": "^17.0.2", "@svgr/plugin-svgo": "^6.3.1", - "@svgr/webpack": "^6.2.1", + "@svgr/webpack": "^6.3.1", "@testing-library/dom": "^8.16.0", "@testing-library/react": "13.3.0", "@types/dom-mediacapture-record": "^1.0.11", diff --git a/yarn.lock b/yarn.lock index e25bc74e34..6370159380 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,7 +29,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== -"@babel/core@7.18.6", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.15.5": +"@babel/core@7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.6.tgz#54a107a3c298aee3fe5e1947a6464b9b6faca03d" integrity sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ== @@ -50,6 +50,27 @@ json5 "^2.2.1" semver "^6.3.0" +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.5": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" + integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + "@babel/generator@^7.18.6", "@babel/generator@^7.7.2": version "7.18.7" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.7.tgz#2aa78da3c05aadfc82dbac16c99552fc802284bd" @@ -323,6 +344,15 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + "@babel/highlight@^7.10.4": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" @@ -822,12 +852,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-constant-elements@^7.14.5": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.12.tgz#cc580857696b6dd9e5e3d079e673d060a0657f37" - integrity sha512-maEkX2xs2STuv2Px8QuqxqjhV2LsFobT1elCgyU5704fcyTu9DyD/bJXxD/mrRiVyhpHweOQ00OJ5FKhHq9oEw== +"@babel/plugin-transform-react-constant-elements@^7.17.12": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.9.tgz#ff6aeedd38f57ba6b41dcf824fcc8bcedb3e783f" + integrity sha512-IrTYh1I3YCEL1trjknnlLKTp5JggjzhKl/d3ibzPc97JhpFcDTr38Jdek/oX4cFbS6By0bXJcOkpRvJ5ZHK2wQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-react-display-name@^7.18.6": version "7.18.6" @@ -937,7 +967,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@^7.15.6", "@babel/preset-env@^7.18.9": +"@babel/preset-env@^7.18.2", "@babel/preset-env@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.9.tgz#9b3425140d724fbe590322017466580844c7eaff" integrity sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg== @@ -1029,7 +1059,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.14.5", "@babel/preset-react@^7.18.6": +"@babel/preset-react@^7.17.12", "@babel/preset-react@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== @@ -1041,7 +1071,7 @@ "@babel/plugin-transform-react-jsx-development" "^7.18.6" "@babel/plugin-transform-react-pure-annotations" "^7.18.6" -"@babel/preset-typescript@^7.15.0", "@babel/preset-typescript@^7.18.6": +"@babel/preset-typescript@^7.17.12", "@babel/preset-typescript@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== @@ -1098,7 +1128,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.15.6", "@babel/types@^7.16.7", "@babel/types@^7.18.6", "@babel/types@^7.18.7", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.7", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== @@ -1590,88 +1620,88 @@ resolved "https://registry.yarnpkg.com/@stomp/stompjs/-/stompjs-6.1.2.tgz#4ac3c380e8d1de1da94a3623d404e67de69dd01e" integrity sha512-FHDTrIFM5Ospi4L3Xhj6v2+NzCVAeNDcBe95YjUWhWiRMrBF6uN3I7AUOlRgT6jU/2WQvvYK8ZaIxFfxFp+uHQ== -"@svgr/babel-plugin-add-jsx-attribute@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz#bd6d1ff32a31b82b601e73672a789cc41e84fe18" - integrity sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA== +"@svgr/babel-plugin-add-jsx-attribute@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.3.1.tgz#b9a5d84902be75a05ede92e70b338d28ab63fa74" + integrity sha512-jDBKArXYO1u0B1dmd2Nf8Oy6aTF5vLDfLoO9Oon/GLkqZ/NiggYWZA+a2HpUMH4ITwNqS3z43k8LWApB8S583w== -"@svgr/babel-plugin-remove-jsx-attribute@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz#58654908beebfa069681a83332544b17e5237e89" - integrity sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw== +"@svgr/babel-plugin-remove-jsx-attribute@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.3.1.tgz#4877995452efc997b36777abe1fde9705ef78e8b" + integrity sha512-dQzyJ4prwjcFd929T43Z8vSYiTlTu8eafV40Z2gO7zy/SV5GT+ogxRJRBIKWomPBOiaVXFg3jY4S5hyEN3IBjQ== -"@svgr/babel-plugin-remove-jsx-empty-expression@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz#d06dd6e8a8f603f92f9979bb9990a1f85a4f57ba" - integrity sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA== +"@svgr/babel-plugin-remove-jsx-empty-expression@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.3.1.tgz#2d67a0e92904c9be149a5b22d3a3797ce4d7b514" + integrity sha512-HBOUc1XwSU67fU26V5Sfb8MQsT0HvUyxru7d0oBJ4rA2s4HW3PhyAPC7fV/mdsSGpAvOdd8Wpvkjsr0fWPUO7A== -"@svgr/babel-plugin-replace-jsx-attribute-value@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz#0b85837577b02c31c09c758a12932820f5245cee" - integrity sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ== +"@svgr/babel-plugin-replace-jsx-attribute-value@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.3.1.tgz#306f5247139c53af70d1778f2719647c747998ee" + integrity sha512-C12e6aN4BXAolRrI601gPn5MDFCRHO7C4TM8Kks+rDtl8eEq+NN1sak0eAzJu363x3TmHXdZn7+Efd2nr9I5dA== -"@svgr/babel-plugin-svg-dynamic-title@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz#28236ec26f7ab9d486a487d36ae52d58ba15676f" - integrity sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg== +"@svgr/babel-plugin-svg-dynamic-title@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.3.1.tgz#6ce26d34cbc93eb81737ef528528907c292e7aa2" + integrity sha512-6NU55Mmh3M5u2CfCCt6TX29/pPneutrkJnnDCHbKZnjukZmmgUAZLtZ2g6ZoSPdarowaQmAiBRgAHqHmG0vuqA== -"@svgr/babel-plugin-svg-em-dimensions@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz#40267c5dea1b43c4f83a0eb6169e08b43d8bafce" - integrity sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA== +"@svgr/babel-plugin-svg-em-dimensions@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.3.1.tgz#5ade2a724b290873c30529d1d8cd23523856287a" + integrity sha512-HV1NGHYTTe1vCNKlBgq/gKuCSfaRlKcHIADn7P8w8U3Zvujdw1rmusutghJ1pZJV7pDt3Gt8ws+SVrqHnBO/Qw== -"@svgr/babel-plugin-transform-react-native-svg@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz#eb688d0a5f539e34d268d8a516e81f5d7fede7c9" - integrity sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ== +"@svgr/babel-plugin-transform-react-native-svg@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.3.1.tgz#d654f509d692c3a09dfb475757a44bd9f6ad7ddf" + integrity sha512-2wZhSHvTolFNeKDAN/ZmIeSz2O9JSw72XD+o2bNp2QAaWqa8KGpn5Yk5WHso6xqfSAiRzAE+GXlsrBO4UP9LLw== -"@svgr/babel-plugin-transform-svg-component@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz#7ba61d9fc1fb42b0ba1a04e4630019fa7e993c4f" - integrity sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg== +"@svgr/babel-plugin-transform-svg-component@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.3.1.tgz#21a285dbffdce9567c437ebf0d081bf9210807e6" + integrity sha512-cZ8Tr6ZAWNUFfDeCKn/pGi976iWSkS8ijmEYKosP+6ktdZ7lW9HVLHojyusPw3w0j8PI4VBeWAXAmi/2G7owxw== -"@svgr/babel-preset@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.2.0.tgz#1d3ad8c7664253a4be8e4a0f0e6872f30d8af627" - integrity sha512-4WQNY0J71JIaL03DRn0vLiz87JXx0b9dYm2aA8XHlQJQoixMl4r/soYHm8dsaJZ3jWtkCiOYy48dp9izvXhDkQ== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^6.0.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^6.0.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^6.0.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.0.0" - "@svgr/babel-plugin-svg-dynamic-title" "^6.0.0" - "@svgr/babel-plugin-svg-em-dimensions" "^6.0.0" - "@svgr/babel-plugin-transform-react-native-svg" "^6.0.0" - "@svgr/babel-plugin-transform-svg-component" "^6.2.0" - -"@svgr/core@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.2.1.tgz#195de807a9f27f9e0e0d678e01084b05c54fdf61" - integrity sha512-NWufjGI2WUyrg46mKuySfviEJ6IxHUOm/8a3Ph38VCWSp+83HBraCQrpEM3F3dB6LBs5x8OElS8h3C0oOJaJAA== - dependencies: - "@svgr/plugin-jsx" "^6.2.1" +"@svgr/babel-preset@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.3.1.tgz#8bd1ead79637d395e9362b01dd37cfd59702e152" + integrity sha512-tQtWtzuMMQ3opH7je+MpwfuRA1Hf3cKdSgTtAYwOBDfmhabP7rcTfBi3E7V3MuwJNy/Y02/7/RutvwS1W4Qv9g== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^6.3.1" + "@svgr/babel-plugin-remove-jsx-attribute" "^6.3.1" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^6.3.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.3.1" + "@svgr/babel-plugin-svg-dynamic-title" "^6.3.1" + "@svgr/babel-plugin-svg-em-dimensions" "^6.3.1" + "@svgr/babel-plugin-transform-react-native-svg" "^6.3.1" + "@svgr/babel-plugin-transform-svg-component" "^6.3.1" + +"@svgr/core@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.3.1.tgz#752adf49d8d5473b15d76ca741961de093f715bd" + integrity sha512-Sm3/7OdXbQreemf9aO25keerZSbnKMpGEfmH90EyYpj1e8wMD4TuwJIb3THDSgRMWk1kYJfSRulELBy4gVgZUA== + dependencies: + "@svgr/plugin-jsx" "^6.3.1" camelcase "^6.2.0" cosmiconfig "^7.0.1" -"@svgr/hast-util-to-babel-ast@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.2.1.tgz#ae065567b74cbe745afae617053adf9a764bea25" - integrity sha512-pt7MMkQFDlWJVy9ULJ1h+hZBDGFfSCwlBNW1HkLnVi7jUhyEXUaGYWi1x6bM2IXuAR9l265khBT4Av4lPmaNLQ== +"@svgr/hast-util-to-babel-ast@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.3.1.tgz#59614e24d2a4a28010e02089213b3448d905769d" + integrity sha512-NgyCbiTQIwe3wHe/VWOUjyxmpUmsrBjdoIxKpXt3Nqc3TN30BpJG22OxBvVzsAh9jqep0w0/h8Ywvdk3D9niNQ== dependencies: - "@babel/types" "^7.15.6" - entities "^3.0.1" + "@babel/types" "^7.18.4" + entities "^4.3.0" -"@svgr/plugin-jsx@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.2.1.tgz#5668f1d2aa18c2f1bb7a1fc9f682d3f9aed263bd" - integrity sha512-u+MpjTsLaKo6r3pHeeSVsh9hmGRag2L7VzApWIaS8imNguqoUwDq/u6U/NDmYs/KAsrmtBjOEaAAPbwNGXXp1g== +"@svgr/plugin-jsx@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.3.1.tgz#de7b2de824296b836d6b874d498377896e367f50" + integrity sha512-r9+0mYG3hD4nNtUgsTXWGYJomv/bNd7kC16zvsM70I/bGeoCi/3lhTmYqeN6ChWX317OtQCSZZbH4wq9WwoXbw== dependencies: - "@babel/core" "^7.15.5" - "@svgr/babel-preset" "^6.2.0" - "@svgr/hast-util-to-babel-ast" "^6.2.1" - svg-parser "^2.0.2" + "@babel/core" "^7.18.5" + "@svgr/babel-preset" "^6.3.1" + "@svgr/hast-util-to-babel-ast" "^6.3.1" + svg-parser "^2.0.4" -"@svgr/plugin-svgo@^6.2.0", "@svgr/plugin-svgo@^6.3.1": +"@svgr/plugin-svgo@^6.3.1": version "6.3.1" resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.3.1.tgz#3c1ff2efaed10e5c5d35a6cae7bacaedc18b5d4a" integrity sha512-yJIjTDKPYqzFVjmsbH5EdIwEsmKxjxdXSGJVLeUgwZOZPAkNQmD1v7LDbOdOKbR44FG8465Du+zWPdbYGnbMbw== @@ -1680,19 +1710,19 @@ deepmerge "^4.2.2" svgo "^2.8.0" -"@svgr/webpack@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.2.1.tgz#ef5d51c1b6be4e7537fb9f76b3f2b2e22b63c58d" - integrity sha512-h09ngMNd13hnePwgXa+Y5CgOjzlCvfWLHg+MBnydEedAnuLRzUHUJmGS3o2OsrhxTOOqEsPOFt5v/f6C5Qulcw== - dependencies: - "@babel/core" "^7.15.5" - "@babel/plugin-transform-react-constant-elements" "^7.14.5" - "@babel/preset-env" "^7.15.6" - "@babel/preset-react" "^7.14.5" - "@babel/preset-typescript" "^7.15.0" - "@svgr/core" "^6.2.1" - "@svgr/plugin-jsx" "^6.2.1" - "@svgr/plugin-svgo" "^6.2.0" +"@svgr/webpack@^6.3.1": + version "6.3.1" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.3.1.tgz#001d03236ebb03bf47c0a4b92d5423e05095ebe6" + integrity sha512-eODxwIUShLxSMaRjzJtrj9wg89D75JLczvWg9SaB5W+OtVTkiC1vdGd8+t+pf5fTlBOy4RRXAq7x1E3DUl3D0A== + dependencies: + "@babel/core" "^7.18.5" + "@babel/plugin-transform-react-constant-elements" "^7.17.12" + "@babel/preset-env" "^7.18.2" + "@babel/preset-react" "^7.17.12" + "@babel/preset-typescript" "^7.17.12" + "@svgr/core" "^6.3.1" + "@svgr/plugin-jsx" "^6.3.1" + "@svgr/plugin-svgo" "^6.3.1" "@testing-library/dom@^8.16.0", "@testing-library/dom@^8.5.0": version "8.16.0" @@ -3805,10 +3835,10 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" - integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== +entities@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.3.1.tgz#c34062a94c865c322f9d67b4384e4169bcede6a4" + integrity sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg== envinfo@^7.7.3: version "7.8.1" @@ -7950,7 +7980,7 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -svg-parser@^2.0.2: +svg-parser@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== From 38b9e02ad9f7cf9575b8f0d229a9e222a263ef04 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 10:02:53 +0200 Subject: [PATCH 19/92] Bump @testing-library/user-event from 14.2.6 to 14.3.0 (#3496) Bumps [@testing-library/user-event](https://github.com/testing-library/user-event) from 14.2.6 to 14.3.0. - [Release notes](https://github.com/testing-library/user-event/releases) - [Changelog](https://github.com/testing-library/user-event/blob/main/CHANGELOG.md) - [Commits](https://github.com/testing-library/user-event/compare/v14.2.6...v14.3) --- updated-dependencies: - dependency-name: "@testing-library/user-event" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f3bfef6c0f..9c1ee2cd6d 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "@reduxjs/toolkit": "^1.8.3", "@stomp/stompjs": "^6.1.2", "@testing-library/jest-dom": "^5.16.4", - "@testing-library/user-event": "^14.2.6", + "@testing-library/user-event": "^14.3.0", "@types/jest": "^28.1.5", "audio-recorder-polyfill": "^0.4.1", "camelcase-keys": "^7.0.2", diff --git a/yarn.lock b/yarn.lock index 6370159380..6358b7856e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1762,10 +1762,10 @@ "@testing-library/dom" "^8.5.0" "@types/react-dom" "^18.0.0" -"@testing-library/user-event@^14.2.6": - version "14.2.6" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.2.6.tgz#9ba313a212994eea66e018520e23542ac3eb6fbe" - integrity sha512-l/4W4x3Lm24wkWNkPasXqvEzG+a6n2X872XCUjhyfbNqcoOapaWyCxC5Fz+E4r7JPu8gysQKSSCrK0OO2x+D+A== +"@testing-library/user-event@^14.3.0": + version "14.3.0" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.3.0.tgz#0a6750b94b40e4739706d41e8efc2ccf64d2aad9" + integrity sha512-P02xtBBa8yMaLhK8CzJCIns8rqwnF6FxhR9zs810flHOBXUYCFjLd8Io1rQrAkQRWEmW2PGdZIEdMxf/KLsqFA== "@tootallnate/once@2": version "2.0.0" From 5bd50e313d16643272cd5f0470e28487dea1631f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 10:49:30 +0200 Subject: [PATCH 20/92] Bump @types/node from 18.6.1 to 18.6.3 (#3514) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 18.6.1 to 18.6.3. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 9c1ee2cd6d..e611c5d6dc 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "@testing-library/react": "13.3.0", "@types/dom-mediacapture-record": "^1.0.11", "@types/lodash-es": "^4.17.6", - "@types/node": "18.6.1", + "@types/node": "18.6.3", "@types/react": "18.0.15", "@types/react-dom": "18.0.6", "@types/react-redux": "7.1.24", diff --git a/yarn.lock b/yarn.lock index 6358b7856e..b0242c4c4e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2031,10 +2031,10 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== -"@types/node@*", "@types/node@18.6.1": - version "18.6.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.1.tgz#828e4785ccca13f44e2fb6852ae0ef11e3e20ba5" - integrity sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg== +"@types/node@*", "@types/node@18.6.3": + version "18.6.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.3.tgz#4e4a95b6fe44014563ceb514b2598b3e623d1c98" + integrity sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg== "@types/node@^14.14.31": version "14.18.18" From fff159a79c466781a38fd44e5063dafd7ac80caf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 10:50:00 +0200 Subject: [PATCH 21/92] Bump ts-node from 10.8.2 to 10.9.1 (#3445) Bumps [ts-node](https://github.com/TypeStrong/ts-node) from 10.8.2 to 10.9.1. - [Release notes](https://github.com/TypeStrong/ts-node/releases) - [Commits](https://github.com/TypeStrong/ts-node/compare/v10.8.2...v10.9.1) --- updated-dependencies: - dependency-name: ts-node dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e611c5d6dc..f79bd47db1 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "regenerator-runtime": "^0.13.9", "reselect": "4.1.6", "ts-jest": "^28.0.7", - "ts-node": "^10.8.2", + "ts-node": "^10.9.1", "typesafe-actions": "^5.1.0" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index b0242c4c4e..bc800538fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8169,10 +8169,10 @@ ts-jest@^28.0.7: semver "7.x" yargs-parser "^21.0.1" -ts-node@^10.8.2: - version "10.8.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.2.tgz#3185b75228cef116bf82ffe8762594f54b2a23f2" - integrity sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA== +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" From 203d255a808b92bcd40a748fc17b9740c8132769 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 11:37:43 +0200 Subject: [PATCH 22/92] Bump jest and @types/jest (#3515) Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) and [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest). These dependencies needed to be updated together. Updates `jest` from 28.1.2 to 28.1.3 - [Release notes](https://github.com/facebook/jest/releases) - [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/jest/commits/v28.1.3/packages/jest) Updates `@types/jest` from 28.1.5 to 28.1.6 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest) --- updated-dependencies: - dependency-name: jest dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: "@types/jest" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 4 +- yarn.lock | 570 ++++++++++++++++++++++----------------------------- 2 files changed, 252 insertions(+), 322 deletions(-) diff --git a/package.json b/package.json index f79bd47db1..34a998dd67 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "@stomp/stompjs": "^6.1.2", "@testing-library/jest-dom": "^5.16.4", "@testing-library/user-event": "^14.3.0", - "@types/jest": "^28.1.5", + "@types/jest": "^28.1.6", "audio-recorder-polyfill": "^0.4.1", "camelcase-keys": "^7.0.2", "core-js": "3.24.0", @@ -73,7 +73,7 @@ "file-loader": "^6.2.0", "html-webpack-plugin": "^5.5.0", "identity-obj-proxy": "^3.0.0", - "jest": "^28.1.2", + "jest": "^28.1.3", "jest-environment-jsdom": "^28.1.3", "minimist": "^1.2.6", "prettier": "^2.7.1", diff --git a/yarn.lock b/yarn.lock index bc800538fe..795224e2ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1266,54 +1266,54 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.1.tgz#305f8ca50b6e70413839f54c0e002b60a0f2fd7d" - integrity sha512-0RiUocPVFEm3WRMOStIHbRWllG6iW6E3/gUPnf4lkrVFyXIIDeCe+vlKeYyFOMhB2EPE6FLFCNADSOOQMaqvyA== +"@jest/console@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== dependencies: - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^28.1.1" - jest-util "^28.1.1" + jest-message-util "^28.1.3" + jest-util "^28.1.3" slash "^3.0.0" -"@jest/core@^28.1.2": - version "28.1.2" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.2.tgz#eac519b9acbd154313854b8823a47b5c645f785a" - integrity sha512-Xo4E+Sb/nZODMGOPt2G3cMmCBqL4/W2Ijwr7/mrXlq4jdJwcFQ/9KrrJZT2adQRk2otVBXXOz1GRQ4Z5iOgvRQ== - dependencies: - "@jest/console" "^28.1.1" - "@jest/reporters" "^28.1.2" - "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.2" - "@jest/types" "^28.1.1" +"@jest/core@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.3.tgz#0ebf2bd39840f1233cd5f2d1e6fc8b71bd5a1ac7" + integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/reporters" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" ci-info "^3.2.0" exit "^0.1.2" graceful-fs "^4.2.9" - jest-changed-files "^28.0.2" - jest-config "^28.1.2" - jest-haste-map "^28.1.1" - jest-message-util "^28.1.1" + jest-changed-files "^28.1.3" + jest-config "^28.1.3" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" jest-regex-util "^28.0.2" - jest-resolve "^28.1.1" - jest-resolve-dependencies "^28.1.2" - jest-runner "^28.1.2" - jest-runtime "^28.1.2" - jest-snapshot "^28.1.2" - jest-util "^28.1.1" - jest-validate "^28.1.1" - jest-watcher "^28.1.1" + jest-resolve "^28.1.3" + jest-resolve-dependencies "^28.1.3" + jest-runner "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + jest-watcher "^28.1.3" micromatch "^4.0.4" - pretty-format "^28.1.1" + pretty-format "^28.1.3" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^28.1.2", "@jest/environment@^28.1.3": +"@jest/environment@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e" integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== @@ -1323,22 +1323,22 @@ "@types/node" "*" jest-mock "^28.1.3" -"@jest/expect-utils@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.1.tgz#d84c346025b9f6f3886d02c48a6177e2b0360587" - integrity sha512-n/ghlvdhCdMI/hTcnn4qV57kQuV9OTsZzH1TTCVARANKhl6hXJqLKUkwX69ftMGpsbpt96SsDD8n8LD2d9+FRw== +"@jest/expect-utils@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== dependencies: jest-get-type "^28.0.2" -"@jest/expect@^28.1.2": - version "28.1.2" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.2.tgz#0b25acedff46e1e1e5606285306c8a399c12534f" - integrity sha512-HBzyZBeFBiOelNbBKN0pilWbbrGvwDUwAqMC46NVJmWm8AVkuE58NbG1s7DR4cxFt4U5cVLxofAoHxgvC5MyOw== +"@jest/expect@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.3.tgz#9ac57e1d4491baca550f6bdbd232487177ad6a72" + integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== dependencies: - expect "^28.1.1" - jest-snapshot "^28.1.2" + expect "^28.1.3" + jest-snapshot "^28.1.3" -"@jest/fake-timers@^28.1.2", "@jest/fake-timers@^28.1.3": +"@jest/fake-timers@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e" integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== @@ -1350,25 +1350,25 @@ jest-mock "^28.1.3" jest-util "^28.1.3" -"@jest/globals@^28.1.2": - version "28.1.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.2.tgz#92fab296e337c7309c25e4202fb724f62249d83f" - integrity sha512-cz0lkJVDOtDaYhvT3Fv2U1B6FtBnV+OpEyJCzTHM1fdoTsU4QNLAt/H4RkiwEUU+dL4g/MFsoTuHeT2pvbo4Hg== +"@jest/globals@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.3.tgz#a601d78ddc5fdef542728309894895b4a42dc333" + integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== dependencies: - "@jest/environment" "^28.1.2" - "@jest/expect" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/types" "^28.1.3" -"@jest/reporters@^28.1.2": - version "28.1.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.2.tgz#0327be4ce4d0d9ae49e7908656f89669d0c2a260" - integrity sha512-/whGLhiwAqeCTmQEouSigUZJPVl7sW8V26EiboImL+UyXznnr1a03/YZ2BX8OlFw0n+Zlwu+EZAITZtaeRTxyA== +"@jest/reporters@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.3.tgz#9adf6d265edafc5fc4a434cfb31e2df5a67a369a" + integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^28.1.1" - "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/console" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" "@types/node" "*" chalk "^4.0.0" @@ -1381,22 +1381,15 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^28.1.1" - jest-util "^28.1.1" - jest-worker "^28.1.1" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + jest-worker "^28.1.3" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" terminal-link "^2.0.0" v8-to-istanbul "^9.0.1" -"@jest/schemas@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.0.2.tgz#08c30df6a8d07eafea0aef9fb222c5e26d72e613" - integrity sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA== - dependencies: - "@sinclair/typebox" "^0.23.3" - "@jest/schemas@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" @@ -1413,27 +1406,27 @@ callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.1.tgz#c6f18d1bbb01aa88925dd687872a75f8414b317a" - integrity sha512-hPmkugBktqL6rRzwWAtp1JtYT4VHwv8OQ+9lE5Gymj6dHzubI/oJHMUpPOt8NrdVWSrz9S7bHjJUmv2ggFoUNQ== +"@jest/test-result@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== dependencies: - "@jest/console" "^28.1.1" - "@jest/types" "^28.1.1" + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.1.1.tgz#f594ee2331df75000afe0d1ae3237630ecec732e" - integrity sha512-nuL+dNSVMcWB7OOtgb0EGH5AjO4UBCt68SLP08rwmC+iRhyuJWS9MtZ/MpipxFwKAlHFftbMsydXqWre8B0+XA== +"@jest/test-sequencer@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz#9d0c283d906ac599c74bde464bc0d7e6a82886c3" + integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== dependencies: - "@jest/test-result" "^28.1.1" + "@jest/test-result" "^28.1.3" graceful-fs "^4.2.9" - jest-haste-map "^28.1.1" + jest-haste-map "^28.1.3" slash "^3.0.0" -"@jest/transform@^28.1.2", "@jest/transform@^28.1.3": +"@jest/transform@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== @@ -1454,7 +1447,7 @@ slash "^3.0.0" write-file-atomic "^4.0.1" -"@jest/types@^28.1.1", "@jest/types@^28.1.3": +"@jest/types@^28.1.3": version "28.1.3" resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== @@ -1591,11 +1584,6 @@ redux-thunk "^2.4.1" reselect "^4.1.5" -"@sinclair/typebox@^0.23.3": - version "0.23.5" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.23.5.tgz#93f7b9f4e3285a7a9ade7557d9a8d36809cbc47d" - integrity sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg== - "@sinclair/typebox@^0.24.1": version "0.24.20" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.20.tgz#11a657875de6008622d53f56e063a6347c51a6dd" @@ -1975,10 +1963,10 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@*", "@types/jest@^28.1.5": - version "28.1.5" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.5.tgz#4337404efa059adbf96c4ac53b28fdc0af514475" - integrity sha512-TLAC2zXxGnohSP3GxgIyJn7yrTeRPDEyVFyCY1NE2wzg392auI+69uk5EPGjUXuhkq/K208J/TWpLG7J8ebIEQ== +"@types/jest@*", "@types/jest@^28.1.6": + version "28.1.6" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.6.tgz#d6a9cdd38967d2d746861fb5be6b120e38284dd4" + integrity sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ== dependencies: jest-matcher-utils "^28.0.0" pretty-format "^28.0.0" @@ -2716,7 +2704,7 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -babel-jest@^28.1.2, babel-jest@^28.1.3: +babel-jest@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== @@ -4179,16 +4167,16 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= -expect@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.1.tgz#ca6fff65f6517cf7220c2e805a49c19aea30b420" - integrity sha512-/AANEwGL0tWBwzLNOvO0yUdy2D52jVdNXppOqswC49sxMN2cPWsGCQdzuIf9tj6hHoBQzNvx75JUYuQAckPo3w== +expect@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== dependencies: - "@jest/expect-utils" "^28.1.1" + "@jest/expect-utils" "^28.1.3" jest-get-type "^28.0.2" - jest-matcher-utils "^28.1.1" - jest-message-util "^28.1.1" - jest-util "^28.1.1" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" express@^4.17.3: version "4.18.1" @@ -5267,94 +5255,94 @@ istanbul-reports@^3.1.3: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^28.0.2: - version "28.0.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.0.2.tgz#7d7810660a5bd043af9e9cfbe4d58adb05e91531" - integrity sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA== +jest-changed-files@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.1.3.tgz#d9aeee6792be3686c47cb988a8eaf82ff4238831" + integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== dependencies: execa "^5.0.0" - throat "^6.0.1" + p-limit "^3.1.0" -jest-circus@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.2.tgz#0d5a5623eccb244efe87d1edc365696e4fcf80ce" - integrity sha512-E2vdPIJG5/69EMpslFhaA46WkcrN74LI5V/cSJ59L7uS8UNoXbzTxmwhpi9XrIL3zqvMt5T0pl5k2l2u2GwBNQ== +jest-circus@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.3.tgz#d14bd11cf8ee1a03d69902dc47b6bd4634ee00e4" + integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== dependencies: - "@jest/environment" "^28.1.2" - "@jest/expect" "^28.1.2" - "@jest/test-result" "^28.1.1" - "@jest/types" "^28.1.1" + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" is-generator-fn "^2.0.0" - jest-each "^28.1.1" - jest-matcher-utils "^28.1.1" - jest-message-util "^28.1.1" - jest-runtime "^28.1.2" - jest-snapshot "^28.1.2" - jest-util "^28.1.1" - pretty-format "^28.1.1" + jest-each "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + p-limit "^3.1.0" + pretty-format "^28.1.3" slash "^3.0.0" stack-utils "^2.0.3" - throat "^6.0.1" -jest-cli@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.2.tgz#b89012e5bad14135e71b1628b85475d3773a1bbc" - integrity sha512-l6eoi5Do/IJUXAFL9qRmDiFpBeEJAnjJb1dcd9i/VWfVWbp3mJhuH50dNtX67Ali4Ecvt4eBkWb4hXhPHkAZTw== +jest-cli@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.3.tgz#558b33c577d06de55087b8448d373b9f654e46b2" + integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== dependencies: - "@jest/core" "^28.1.2" - "@jest/test-result" "^28.1.1" - "@jest/types" "^28.1.1" + "@jest/core" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^28.1.2" - jest-util "^28.1.1" - jest-validate "^28.1.1" + jest-config "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.2.tgz#ba00ad30caf62286c86e7c1099e915218a0ac8c6" - integrity sha512-g6EfeRqddVbjPVBVY4JWpUY4IvQoFRIZcv4V36QkqzE0IGhEC/VkugFeBMAeUE7PRgC8KJF0yvJNDeQRbamEVA== +jest-config@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.3.tgz#e315e1f73df3cac31447eed8b8740a477392ec60" + integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^28.1.1" - "@jest/types" "^28.1.1" - babel-jest "^28.1.2" + "@jest/test-sequencer" "^28.1.3" + "@jest/types" "^28.1.3" + babel-jest "^28.1.3" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^28.1.2" - jest-environment-node "^28.1.2" + jest-circus "^28.1.3" + jest-environment-node "^28.1.3" jest-get-type "^28.0.2" jest-regex-util "^28.0.2" - jest-resolve "^28.1.1" - jest-runner "^28.1.2" - jest-util "^28.1.1" - jest-validate "^28.1.1" + jest-resolve "^28.1.3" + jest-runner "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^28.1.1" + pretty-format "^28.1.3" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.1.tgz#1a3eedfd81ae79810931c63a1d0f201b9120106c" - integrity sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg== +jest-diff@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== dependencies: chalk "^4.0.0" diff-sequences "^28.1.1" jest-get-type "^28.0.2" - pretty-format "^28.1.1" + pretty-format "^28.1.3" jest-docblock@^28.1.1: version "28.1.1" @@ -5363,16 +5351,16 @@ jest-docblock@^28.1.1: dependencies: detect-newline "^3.0.0" -jest-each@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.1.1.tgz#ba5238dacf4f31d9fe23ddc2c44c01e7c23885c4" - integrity sha512-A042rqh17ZvEhRceDMi784ppoXR7MWGDEKTXEZXb4svt0eShMZvijGxzKsx+yIjeE8QYmHPrnHiTSQVhN4nqaw== +jest-each@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.1.3.tgz#bdd1516edbe2b1f3569cfdad9acd543040028f81" + integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== dependencies: - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" chalk "^4.0.0" jest-get-type "^28.0.2" - jest-util "^28.1.1" - pretty-format "^28.1.1" + jest-util "^28.1.3" + pretty-format "^28.1.3" jest-environment-jsdom@^28.1.3: version "28.1.3" @@ -5388,42 +5376,23 @@ jest-environment-jsdom@^28.1.3: jest-util "^28.1.3" jsdom "^19.0.0" -jest-environment-node@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.2.tgz#3e2eb47f6d173b0648d5f7c717cb1c26651d5c8a" - integrity sha512-oYsZz9Qw27XKmOgTtnl0jW7VplJkN2oeof+SwAwKFQacq3CLlG9u4kTGuuLWfvu3J7bVutWlrbEQMOCL/jughw== +jest-environment-node@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.3.tgz#7e74fe40eb645b9d56c0c4b70ca4357faa349be5" + integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== dependencies: - "@jest/environment" "^28.1.2" - "@jest/fake-timers" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" "@types/node" "*" - jest-mock "^28.1.1" - jest-util "^28.1.1" + jest-mock "^28.1.3" + jest-util "^28.1.3" jest-get-type@^28.0.2: version "28.0.2" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== -jest-haste-map@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.1.tgz#471685f1acd365a9394745bb97c8fc16289adca3" - integrity sha512-ZrRSE2o3Ezh7sb1KmeLEZRZ4mgufbrMwolcFHNRSjKZhpLa8TdooXOOFlSwoUzlbVs1t0l7upVRW2K7RWGHzbQ== - dependencies: - "@jest/types" "^28.1.1" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^28.0.2" - jest-util "^28.1.1" - jest-worker "^28.1.1" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - jest-haste-map@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" @@ -5443,38 +5412,23 @@ jest-haste-map@^28.1.3: optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.1.tgz#537f37afd610a4b3f4cab15e06baf60484548efb" - integrity sha512-4jvs8V8kLbAaotE+wFR7vfUGf603cwYtFf1/PYEsyX2BAjSzj8hQSVTP6OWzseTl0xL6dyHuKs2JAks7Pfubmw== +jest-leak-detector@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz#a6685d9b074be99e3adee816ce84fd30795e654d" + integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== dependencies: jest-get-type "^28.0.2" - pretty-format "^28.1.1" + pretty-format "^28.1.3" -jest-matcher-utils@^28.0.0, jest-matcher-utils@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz#a7c4653c2b782ec96796eb3088060720f1e29304" - integrity sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw== +jest-matcher-utils@^28.0.0, jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== dependencies: chalk "^4.0.0" - jest-diff "^28.1.1" + jest-diff "^28.1.3" jest-get-type "^28.0.2" - pretty-format "^28.1.1" - -jest-message-util@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.1.tgz#60aa0b475cfc08c8a9363ed2fb9108514dd9ab89" - integrity sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^28.1.1" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^28.1.1" - slash "^3.0.0" - stack-utils "^2.0.3" + pretty-format "^28.1.3" jest-message-util@^28.1.3: version "28.1.3" @@ -5491,7 +5445,7 @@ jest-message-util@^28.1.3: slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^28.1.1, jest-mock@^28.1.3: +jest-mock@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da" integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== @@ -5509,114 +5463,114 @@ jest-regex-util@^28.0.2: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== -jest-resolve-dependencies@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.2.tgz#ca528858e0c6642d5a1dda8fc7cda10230c275bc" - integrity sha512-OXw4vbOZuyRTBi3tapWBqdyodU+T33ww5cPZORuTWkg+Y8lmsxQlVu3MWtJh6NMlKRTHQetF96yGPv01Ye7Mbg== +jest-resolve-dependencies@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz#8c65d7583460df7275c6ea2791901fa975c1fe66" + integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== dependencies: jest-regex-util "^28.0.2" - jest-snapshot "^28.1.2" + jest-snapshot "^28.1.3" -jest-resolve@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.1.1.tgz#bc2eaf384abdcc1aaf3ba7c50d1adf01e59095e5" - integrity sha512-/d1UbyUkf9nvsgdBildLe6LAD4DalgkgZcKd0nZ8XUGPyA/7fsnaQIlKVnDiuUXv/IeZhPEDrRJubVSulxrShA== +jest-resolve@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.1.3.tgz#cfb36100341ddbb061ec781426b3c31eb51aa0a8" + integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^28.1.1" + jest-haste-map "^28.1.3" jest-pnp-resolver "^1.2.2" - jest-util "^28.1.1" - jest-validate "^28.1.1" + jest-util "^28.1.3" + jest-validate "^28.1.3" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.2.tgz#f293409592a62234285a71237e38499a3554e350" - integrity sha512-6/k3DlAsAEr5VcptCMdhtRhOoYClZQmxnVMZvZ/quvPGRpN7OBQYPIC32tWSgOnbgqLXNs5RAniC+nkdFZpD4A== - dependencies: - "@jest/console" "^28.1.1" - "@jest/environment" "^28.1.2" - "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.2" - "@jest/types" "^28.1.1" +jest-runner@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.3.tgz#5eee25febd730b4713a2cdfd76bdd5557840f9a1" + integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/environment" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" "@types/node" "*" chalk "^4.0.0" emittery "^0.10.2" graceful-fs "^4.2.9" jest-docblock "^28.1.1" - jest-environment-node "^28.1.2" - jest-haste-map "^28.1.1" - jest-leak-detector "^28.1.1" - jest-message-util "^28.1.1" - jest-resolve "^28.1.1" - jest-runtime "^28.1.2" - jest-util "^28.1.1" - jest-watcher "^28.1.1" - jest-worker "^28.1.1" + jest-environment-node "^28.1.3" + jest-haste-map "^28.1.3" + jest-leak-detector "^28.1.3" + jest-message-util "^28.1.3" + jest-resolve "^28.1.3" + jest-runtime "^28.1.3" + jest-util "^28.1.3" + jest-watcher "^28.1.3" + jest-worker "^28.1.3" + p-limit "^3.1.0" source-map-support "0.5.13" - throat "^6.0.1" -jest-runtime@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.2.tgz#d68f34f814a848555a345ceda23289f14d59a688" - integrity sha512-i4w93OsWzLOeMXSi9epmakb2+3z0AchZtUQVF1hesBmcQQy4vtaql5YdVe9KexdJaVRyPDw8DoBR0j3lYsZVYw== +jest-runtime@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.3.tgz#a57643458235aa53e8ec7821949e728960d0605f" + integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== dependencies: - "@jest/environment" "^28.1.2" - "@jest/fake-timers" "^28.1.2" - "@jest/globals" "^28.1.2" + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/globals" "^28.1.3" "@jest/source-map" "^28.1.2" - "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" execa "^5.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^28.1.1" - jest-message-util "^28.1.1" - jest-mock "^28.1.1" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" jest-regex-util "^28.0.2" - jest-resolve "^28.1.1" - jest-snapshot "^28.1.2" - jest-util "^28.1.1" + jest-resolve "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.2.tgz#93d31b87b11b384f5946fe0767541496135f8d52" - integrity sha512-wzrieFttZYfLvrCVRJxX+jwML2YTArOUqFpCoSVy1QUapx+LlV9uLbV/mMEhYj4t7aMeE9aSQFHSvV/oNoDAMA== +jest-snapshot@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.3.tgz#17467b3ab8ddb81e2f605db05583d69388fc0668" + integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^28.1.1" - "@jest/transform" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/expect-utils" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^28.1.1" + expect "^28.1.3" graceful-fs "^4.2.9" - jest-diff "^28.1.1" + jest-diff "^28.1.3" jest-get-type "^28.0.2" - jest-haste-map "^28.1.1" - jest-matcher-utils "^28.1.1" - jest-message-util "^28.1.1" - jest-util "^28.1.1" + jest-haste-map "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" natural-compare "^1.4.0" - pretty-format "^28.1.1" + pretty-format "^28.1.3" semver "^7.3.5" -jest-util@^28.0.0, jest-util@^28.1.1, jest-util@^28.1.3: +jest-util@^28.0.0, jest-util@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== @@ -5628,30 +5582,30 @@ jest-util@^28.0.0, jest-util@^28.1.1, jest-util@^28.1.3: graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.1.tgz#59b7b339b3c85b5144bd0c06ad3600f503a4acc8" - integrity sha512-Kpf6gcClqFCIZ4ti5++XemYJWUPCFUW+N2gknn+KgnDf549iLul3cBuKVe1YcWRlaF8tZV8eJCap0eECOEE3Ug== +jest-validate@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.3.tgz#e322267fd5e7c64cea4629612c357bbda96229df" + integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== dependencies: - "@jest/types" "^28.1.1" + "@jest/types" "^28.1.3" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^28.0.2" leven "^3.1.0" - pretty-format "^28.1.1" + pretty-format "^28.1.3" -jest-watcher@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.1.tgz#533597fb3bfefd52b5cd115cd916cffd237fb60c" - integrity sha512-RQIpeZ8EIJMxbQrXpJQYIIlubBnB9imEHsxxE41f54ZwcqWLysL/A0ZcdMirf+XsMn3xfphVQVV4EW0/p7i7Ug== +jest-watcher@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== dependencies: - "@jest/test-result" "^28.1.1" - "@jest/types" "^28.1.1" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.10.2" - jest-util "^28.1.1" + jest-util "^28.1.3" string-length "^4.0.1" jest-worker@^27.4.5: @@ -5663,15 +5617,6 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.1.tgz#3480c73247171dfd01eda77200f0063ab6a3bf28" - integrity sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - jest-worker@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" @@ -5681,15 +5626,15 @@ jest-worker@^28.1.3: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^28.1.2: - version "28.1.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.2.tgz#451ff24081ce31ca00b07b60c61add13aa96f8eb" - integrity sha512-Tuf05DwLeCh2cfWCQbcz9UxldoDyiR1E9Igaei5khjonKncYdc6LDfynKCEWozK0oLE3GD+xKAo2u8x/0s6GOg== +jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.3.tgz#e9c6a7eecdebe3548ca2b18894a50f45b36dfc6b" + integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== dependencies: - "@jest/core" "^28.1.2" - "@jest/types" "^28.1.1" + "@jest/core" "^28.1.3" + "@jest/types" "^28.1.3" import-local "^3.0.2" - jest-cli "^28.1.2" + jest-cli "^28.1.3" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -6645,7 +6590,7 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -6888,17 +6833,7 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^28.0.0, pretty-format@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.1.tgz#f731530394e0f7fcd95aba6b43c50e02d86b95cb" - integrity sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw== - dependencies: - "@jest/schemas" "^28.0.2" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -pretty-format@^28.1.3: +pretty-format@^28.0.0, pretty-format@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== @@ -8062,11 +7997,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -throat@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" - integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== - throttleit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" From e29e4f8fd2b1040ae22cd817fdc1d73e55e5e8ff Mon Sep 17 00:00:00 2001 From: Christoph Proeschel Date: Mon, 1 Aug 2022 13:55:58 +0200 Subject: [PATCH 23/92] [#3510] Merge hoftix 0.47.1 back to develop (#3518) --- docs/docs/changelog.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/docs/docs/changelog.md b/docs/docs/changelog.md index 970343838e..26ae785e83 100644 --- a/docs/docs/changelog.md +++ b/docs/docs/changelog.md @@ -3,6 +3,20 @@ title: Changelog sidebar_label: 📝 Changelog --- +## 0.47.1 + +#### Hotfix + +* [[#3510](https://github.com/airyhq/airy/issues/3510)] Fix Kafka replication factor setting + +#### Airy CLI + +You can download the Airy CLI for your operating system from the following links: + +[MacOS](https://airy-core-binaries.s3.amazonaws.com/0.47.1/darwin/amd64/airy) +[Linux](https://airy-core-binaries.s3.amazonaws.com/0.47.1/linux/amd64/airy) +[Windows](https://airy-core-binaries.s3.amazonaws.com/0.47.1/windows/amd64/airy.exe) + ## 0.47.0 #### Changes @@ -1222,6 +1236,3 @@ You can download the Airy CLI for your operating system from the following links ## Hotfix 0.26.2 [[#2187](https://github.com/airyhq/airy/issues/2187)] Hotfix chat plugin async bundle loading failed on installed websites -## Hotfix 0.26.1 - -[[#2181](https://github.com/airyhq/airy/issues/2181)] Fixes chat plugin integration crashing with empty config From 0b14076266a54702f1cdb94726781f8dd3fa1d4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 13:57:42 +0200 Subject: [PATCH 24/92] Bump @babel/core from 7.18.6 to 7.18.9 (#3497) Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.18.6 to 7.18.9. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.9/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 88 +++++----------------------------------------------- 2 files changed, 8 insertions(+), 82 deletions(-) diff --git a/package.json b/package.json index 34a998dd67..09a22b0f11 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "typesafe-actions": "^5.1.0" }, "devDependencies": { - "@babel/core": "7.18.6", + "@babel/core": "7.18.9", "@babel/plugin-proposal-class-properties": "^7.16.7", "@babel/plugin-proposal-object-rest-spread": "^7.18.9", "@babel/plugin-transform-spread": "^7.18.9", diff --git a/yarn.lock b/yarn.lock index 795224e2ba..c5ae428c49 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,28 +29,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== -"@babel/core@7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.6.tgz#54a107a3c298aee3fe5e1947a6464b9b6faca03d" - integrity sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.6" - "@babel/helper-compilation-targets" "^7.18.6" - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helpers" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.6" - "@babel/types" "^7.18.6" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.5": +"@babel/core@7.18.9", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.5": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== @@ -71,16 +50,7 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.18.6", "@babel/generator@^7.7.2": - version "7.18.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.7.tgz#2aa78da3c05aadfc82dbac16c99552fc802284bd" - integrity sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A== - dependencies: - "@babel/types" "^7.18.7" - "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" - -"@babel/generator@^7.18.9": +"@babel/generator@^7.18.9", "@babel/generator@^7.7.2": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== @@ -104,7 +74,7 @@ "@babel/helper-explode-assignable-expression" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.6", "@babel/helper-compilation-targets@^7.18.9": +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== @@ -217,21 +187,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz#57e3ca669e273d55c3cda55e6ebf552f37f483c8" - integrity sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw== - dependencies: - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.18.6" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.6" - "@babel/types" "^7.18.6" - -"@babel/helper-module-transforms@^7.18.9": +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== @@ -335,15 +291,6 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helpers@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.6.tgz#4c966140eaa1fcaa3d5a8c09d7db61077d4debfd" - integrity sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ== - dependencies: - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.6" - "@babel/types" "^7.18.6" - "@babel/helpers@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" @@ -371,12 +318,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.6.tgz#845338edecad65ebffef058d3be851f1d28a63bc" - integrity sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw== - -"@babel/parser@^7.18.9": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6", "@babel/parser@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== @@ -1096,23 +1038,7 @@ "@babel/parser" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.6", "@babel/traverse@^7.7.2": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.6.tgz#a228562d2f46e89258efa4ddd0416942e2fd671d" - integrity sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-function-name" "^7.18.6" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/types" "^7.18.6" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.18.9": +"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== @@ -1128,7 +1054,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.7", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== From 6f4e624045b364c8ee2bfa474b99fb5e807054e3 Mon Sep 17 00:00:00 2001 From: Juan Sebastian Pena Rodriguez Date: Mon, 1 Aug 2022 13:59:07 +0200 Subject: [PATCH 25/92] Feature/3353 components.list endpoint version 2 (#3482) --- go.mod | 47 +++++----- infrastructure/controller/pkg/cache/BUILD | 12 +++ .../controller/pkg/cache/deployed_charts.go | 64 ++++++++++++++ infrastructure/controller/pkg/endpoints/BUILD | 1 + .../endpoints/components_install_uninstall.go | 10 ++- .../pkg/endpoints/components_list.go | 86 ++++++++++++------- .../pkg/endpoints/components_update.go | 29 ++++++- .../controller/pkg/endpoints/server.go | 12 +-- 8 files changed, 199 insertions(+), 62 deletions(-) create mode 100644 infrastructure/controller/pkg/cache/BUILD create mode 100644 infrastructure/controller/pkg/cache/deployed_charts.go diff --git a/go.mod b/go.mod index 6dee6d3e4c..799092b576 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,31 @@ go 1.18 // Used to update go_repositories.bzl with Gazelle // Automatically generated by running //tools/update-deps +require ( + github.com/Masterminds/sprig v2.22.0+incompatible + github.com/TwinProduction/go-color v1.0.0 + github.com/aws/aws-sdk-go v1.44.21 + github.com/aws/aws-sdk-go-v2/config v1.15.7 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.44.0 + github.com/aws/aws-sdk-go-v2/service/eks v1.21.1 + github.com/aws/aws-sdk-go-v2/service/iam v1.18.5 + github.com/golang-jwt/jwt v3.2.2+incompatible + github.com/gorilla/mux v1.8.0 + github.com/kr/pretty v0.3.0 + github.com/mitchellh/go-homedir v1.1.0 + github.com/spf13/cobra v1.5.0 + github.com/spf13/viper v1.11.0 + github.com/thanhpk/randstr v1.0.4 + github.com/txn2/txeh v1.3.0 + goji.io v2.0.2+incompatible + golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 + gopkg.in/segmentio/analytics-go.v3 v3.1.0 + gopkg.in/yaml.v2 v2.4.0 + k8s.io/api v0.24.2 + k8s.io/apimachinery v0.24.2 + k8s.io/client-go v0.24.2 +) + require ( cloud.google.com/go v0.102.0 // indirect cloud.google.com/go/compute v1.7.0 // indirect @@ -14,24 +39,17 @@ require ( github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver v1.5.0 // indirect github.com/Masterminds/semver/v3 v3.1.1 // indirect - github.com/Masterminds/sprig v2.22.0+incompatible github.com/Masterminds/sprig/v3 v3.2.2 // indirect github.com/Masterminds/squirrel v1.5.3 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/TwinProduction/go-color v1.0.0 github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect - github.com/aws/aws-sdk-go v1.44.21 github.com/aws/aws-sdk-go-v2 v1.16.4 // indirect - github.com/aws/aws-sdk-go-v2/config v1.15.7 github.com/aws/aws-sdk-go-v2/credentials v1.12.2 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.5 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.11 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.5 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.3.12 // indirect - github.com/aws/aws-sdk-go-v2/service/ec2 v1.44.0 - github.com/aws/aws-sdk-go-v2/service/eks v1.21.1 - github.com/aws/aws-sdk-go-v2/service/iam v1.18.5 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.5 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.11.5 // indirect github.com/aws/aws-sdk-go-v2/service/sts v1.16.6 // indirect @@ -64,7 +82,6 @@ require ( github.com/go-openapi/swag v0.21.1 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt v3.2.2+incompatible github.com/golang/protobuf v1.5.2 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/gnostic v0.6.9 // indirect @@ -73,7 +90,6 @@ require ( github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/gnostic v0.5.5 // indirect - github.com/gorilla/mux v1.8.0 github.com/gosuri/uitable v0.0.4 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect @@ -87,7 +103,6 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.15.7 // indirect - github.com/kr/pretty v0.3.0 github.com/kr/text v0.2.0 // indirect github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect @@ -100,7 +115,6 @@ require ( github.com/mattn/go-runewidth v0.0.13 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect - github.com/mitchellh/go-homedir v1.1.0 github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect @@ -133,23 +147,17 @@ require ( github.com/sirupsen/logrus v1.8.1 // indirect github.com/spf13/afero v1.8.2 // indirect github.com/spf13/cast v1.5.0 // indirect - github.com/spf13/cobra v1.5.0 github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.11.0 github.com/stretchr/testify v1.8.0 // indirect github.com/subosito/gotenv v1.3.0 // indirect - github.com/thanhpk/randstr v1.0.4 - github.com/txn2/txeh v1.3.0 github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/xlab/treeprint v1.1.0 // indirect github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect go.starlark.net v0.0.0-20220328144851-d1966c6b9fcd // indirect - goji.io v2.0.2+incompatible golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect - golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 golang.org/x/net v0.0.0-20220630215102-69896b714898 // indirect golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0 // indirect golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f // indirect @@ -165,16 +173,11 @@ require ( gopkg.in/gorp.v1 v1.7.2 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.66.4 // indirect - gopkg.in/segmentio/analytics-go.v3 v3.1.0 - gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 // indirect helm.sh/helm/v3 v3.9.0 // indirect - k8s.io/api v0.24.2 k8s.io/apiextensions-apiserver v0.24.2 // indirect - k8s.io/apimachinery v0.24.2 k8s.io/apiserver v0.24.2 // indirect k8s.io/cli-runtime v0.24.2 // indirect - k8s.io/client-go v0.24.2 k8s.io/component-base v0.24.2 // indirect k8s.io/helm v2.17.0+incompatible // indirect k8s.io/klog v1.0.0 // indirect diff --git a/infrastructure/controller/pkg/cache/BUILD b/infrastructure/controller/pkg/cache/BUILD new file mode 100644 index 0000000000..e6df26295c --- /dev/null +++ b/infrastructure/controller/pkg/cache/BUILD @@ -0,0 +1,12 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "cache", + srcs = ["deployed_charts.go"], + importpath = "github.com/airyhq/airy/infrastructure/controller/pkg/cache", + visibility = ["//visibility:public"], + deps = [ + "@com_github_mittwald_go_helm_client//:go-helm-client", + "@io_k8s_klog//:klog", + ], +) diff --git a/infrastructure/controller/pkg/cache/deployed_charts.go b/infrastructure/controller/pkg/cache/deployed_charts.go new file mode 100644 index 0000000000..2faa9d6270 --- /dev/null +++ b/infrastructure/controller/pkg/cache/deployed_charts.go @@ -0,0 +1,64 @@ +package cache + +import ( + "sync" + "time" + + helmCli "github.com/mittwald/go-helm-client" + "k8s.io/klog" +) + +type DeployedCharts struct { + deployedCharts map[string]bool + cli helmCli.Client + mu sync.RWMutex + refresh chan struct{} +} + +func MustNewDeployedCharts(Cli helmCli.Client) *DeployedCharts { + dc := DeployedCharts{cli: Cli, deployedCharts: make(map[string]bool), refresh: make(chan struct{})} + go dc.refreshScheduler() + dc.RefreshDeployedCharts() + return &dc +} + +func (s *DeployedCharts) refreshDeployedCharts() { + deployedReleases, err := s.cli.ListDeployedReleases() + if err != nil { + klog.Error(err.Error()) + return + } + + s.mu.Lock() + defer s.mu.Unlock() + + for _, r := range deployedReleases { + s.deployedCharts[r.Name] = true + } +} + +func (s *DeployedCharts) refreshScheduler() { + for { + select { + case <-s.refresh: + case <-time.After(10 * time.Minute): + } + s.refreshDeployedCharts() + } +} + +func (s *DeployedCharts) GetDeployedCharts() map[string]bool { + s.mu.RLock() + defer s.mu.RUnlock() + + d := make(map[string]bool, len(s.deployedCharts)) + for k, v := range s.deployedCharts { + d[k] = v + } + + return d +} + +func (s *DeployedCharts) RefreshDeployedCharts() { + s.refresh <- struct{}{} +} diff --git a/infrastructure/controller/pkg/endpoints/BUILD b/infrastructure/controller/pkg/endpoints/BUILD index fdcbf72037..0fc12c18dd 100644 --- a/infrastructure/controller/pkg/endpoints/BUILD +++ b/infrastructure/controller/pkg/endpoints/BUILD @@ -18,6 +18,7 @@ go_library( importpath = "github.com/airyhq/airy/infrastructure/controller/pkg/endpoints", visibility = ["//visibility:public"], deps = [ + "//infrastructure/controller/pkg/cache", "//lib/go/config", "//lib/go/k8s", "//lib/go/payloads", diff --git a/infrastructure/controller/pkg/endpoints/components_install_uninstall.go b/infrastructure/controller/pkg/endpoints/components_install_uninstall.go index 2931e7380a..92513430eb 100644 --- a/infrastructure/controller/pkg/endpoints/components_install_uninstall.go +++ b/infrastructure/controller/pkg/endpoints/components_install_uninstall.go @@ -8,6 +8,7 @@ import ( "net/http" "strings" + "github.com/airyhq/airy/infrastructure/controller/pkg/cache" "github.com/airyhq/airy/lib/go/payloads" helmCli "github.com/mittwald/go-helm-client" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -16,9 +17,10 @@ import ( ) type ComponentsInstallUninstall struct { - Cli helmCli.Client - ClientSet *kubernetes.Clientset - Namespace string + Cli helmCli.Client + ClientSet *kubernetes.Clientset + Namespace string + DeployedCharts *cache.DeployedCharts } func (s *ComponentsInstallUninstall) ServeHTTP(w http.ResponseWriter, r *http.Request) { @@ -50,6 +52,7 @@ func (s *ComponentsInstallUninstall) ServeHTTP(w http.ResponseWriter, r *http.Re Namespace: s.Namespace, UpgradeCRDs: true, Replace: true, + Force: true, ValuesYaml: globals, } @@ -76,6 +79,7 @@ func (s *ComponentsInstallUninstall) ServeHTTP(w http.ResponseWriter, r *http.Re return } + s.DeployedCharts.RefreshDeployedCharts() w.WriteHeader(http.StatusAccepted) } diff --git a/infrastructure/controller/pkg/endpoints/components_list.go b/infrastructure/controller/pkg/endpoints/components_list.go index 39957dfe2b..00237f1f1e 100644 --- a/infrastructure/controller/pkg/endpoints/components_list.go +++ b/infrastructure/controller/pkg/endpoints/components_list.go @@ -2,42 +2,33 @@ package endpoints import ( "encoding/json" + "fmt" + "io/ioutil" "net/http" - helmCli "github.com/mittwald/go-helm-client" + "github.com/airyhq/airy/infrastructure/controller/pkg/cache" "k8s.io/client-go/kubernetes" "k8s.io/helm/cmd/helm/search" "k8s.io/klog" ) type ComponentsList struct { - Cli helmCli.Client - ClientSet *kubernetes.Clientset - Namespace string - Index *search.Index -} - -//NOTE: We don't know yet how or where some properties like AvailableFor/Categories/Price -// are going to get stores, so for now they are defined but not used - -type componentsDetails struct { - Name string `json:"-"` - Description string `json:"description"` - Installed bool `json:"installed"` - AvailableFor string `json:"availableFor"` - Categories string `json:"categories"` - Price string `json:"price"` + ClientSet *kubernetes.Clientset + Namespace string + Index *search.Index + DeployedCharts *cache.DeployedCharts } func (s *ComponentsList) ServeHTTP(w http.ResponseWriter, r *http.Request) { - deployedCharts, err := s.getDeployedCharts() + deployedCharts := s.DeployedCharts.GetDeployedCharts() + + components, err := getComponentsDetailsFromCloud() if err != nil { klog.Error(err.Error()) w.WriteHeader(http.StatusInternalServerError) return } - components := make(map[string]*componentsDetails) seen := make(map[string]struct{}) for _, chart := range s.Index.All() { if _, ok := seen[chart.Name]; ok { @@ -45,12 +36,10 @@ func (s *ComponentsList) ServeHTTP(w http.ResponseWriter, r *http.Request) { } seen[chart.Name] = struct{}{} - c := &componentsDetails{ - Name: chart.Name, - Installed: deployedCharts[chart.Chart.Name], + if components[chart.Name] == nil { + components[chart.Name] = make(map[string]interface{}) } - - components[chart.Name] = c + components[chart.Name]["installed"] = deployedCharts[chart.Chart.Name] } blob, err := json.Marshal(map[string]interface{}{"components": components}) @@ -64,16 +53,53 @@ func (s *ComponentsList) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Write(blob) } -func (s *ComponentsList) getDeployedCharts() (map[string]bool, error) { - deployedReleases, err := s.Cli.ListDeployedReleases() +type componentsData struct { + Count int `json:"Count"` + Items []map[string]string `json:"Items"` + ScannedCount int `json:"ScannedCount"` +} + +func getComponentsDetailsFromCloud() (map[string]map[string]interface{}, error) { + //NOTE: This is a temporary solution before doing the refactoring + resp, err := http.Get("https://93l1ztafga.execute-api.us-east-1.amazonaws.com") + if err != nil { + return nil, err + } + + blob, err := ioutil.ReadAll(resp.Body) if err != nil { return nil, err } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("%s", blob) + } + + var data componentsData + err = json.Unmarshal(blob, &data) + if err != nil { + return nil, err + } + + componentsDetails := make(map[string]map[string]interface{}) + for _, item := range data.Items { + name, ok := item["name"] + if !ok || name == "" { + continue + } + + c := make(map[string]interface{}) + for k, v := range item { + //NOTE: For now we are assuming that all the values are strings + if v != "" { + c[k] = v + } + } - deployedCharts := make(map[string]bool, len(deployedReleases)) - for _, r := range deployedReleases { - deployedCharts[r.Name] = true + c["installed"] = false + componentsDetails[name] = c } - return deployedCharts, nil + return componentsDetails, nil } diff --git a/infrastructure/controller/pkg/endpoints/components_update.go b/infrastructure/controller/pkg/endpoints/components_update.go index bf74db9e6d..b3dde7d534 100644 --- a/infrastructure/controller/pkg/endpoints/components_update.go +++ b/infrastructure/controller/pkg/endpoints/components_update.go @@ -2,10 +2,13 @@ package endpoints import ( "encoding/json" + "fmt" "io/ioutil" "net/http" "strconv" + "strings" + "github.com/airyhq/airy/infrastructure/controller/pkg/cache" "github.com/airyhq/airy/lib/go/k8s" "github.com/airyhq/airy/lib/go/payloads" "k8s.io/client-go/kubernetes" @@ -13,8 +16,9 @@ import ( ) type ComponentsUpdate struct { - clientSet *kubernetes.Clientset - namespace string + DeployedCharts *cache.DeployedCharts + clientSet *kubernetes.Clientset + namespace string } func (s *ComponentsUpdate) ServeHTTP(w http.ResponseWriter, r *http.Request) { @@ -36,6 +40,13 @@ func (s *ComponentsUpdate) ServeHTTP(w http.ResponseWriter, r *http.Request) { responseComponents.Components = make(map[string]bool) for _, component := range requestComponents.Components { + if !s.isComponentInstalled(component.Name) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusBadRequest) + w.Write([]byte(fmt.Sprintf(`{"error": "component %s is not installed"}`, component.Name))) + return + } + labels := map[string]string{ "core.airy.co/component": component.Name, } @@ -58,3 +69,17 @@ func (s *ComponentsUpdate) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write(resp) } + +//NOTE: Prevent the upload of a configmap if the component is not present +func (s *ComponentsUpdate) isComponentInstalled(configName string) bool { + name := getNameFromConfigMapName(configName) + deployedCharts := s.DeployedCharts.GetDeployedCharts() + + return deployedCharts[name] +} + +func getNameFromConfigMapName(name string) string { + c := strings.Split(name, "-") + + return strings.Join(c[1:], "-") +} diff --git a/infrastructure/controller/pkg/endpoints/server.go b/infrastructure/controller/pkg/endpoints/server.go index 6ae54a440c..11364ac4a1 100644 --- a/infrastructure/controller/pkg/endpoints/server.go +++ b/infrastructure/controller/pkg/endpoints/server.go @@ -8,6 +8,7 @@ import ( "net/http" "os" + "github.com/airyhq/airy/infrastructure/controller/pkg/cache" "github.com/gorilla/mux" helmCli "github.com/mittwald/go-helm-client" "helm.sh/helm/v3/pkg/repo" @@ -46,10 +47,13 @@ func Serve(clientSet *kubernetes.Clientset, namespace string, kubeConfig *rest.C r.Use(authMiddleware.Middleware) } + helmCli, helmIndex := mustGetHelmClientAndIndex(namespace, kubeConfig, clientSet, repoFilePath) + deployedCharts := cache.MustNewDeployedCharts(helmCli) + services := &Services{clientSet: clientSet, namespace: namespace} r.Handle("/services", services) - componentsUpdate := &ComponentsUpdate{clientSet: clientSet, namespace: namespace} + componentsUpdate := &ComponentsUpdate{DeployedCharts: deployedCharts, clientSet: clientSet, namespace: namespace} r.Handle("/components.update", componentsUpdate) componentsDelete := &ComponentsDelete{clientSet: clientSet, namespace: namespace} @@ -61,13 +65,11 @@ func Serve(clientSet *kubernetes.Clientset, namespace string, kubeConfig *rest.C clusterUpdate := &ClusterUpdate{clientSet: clientSet, namespace: namespace} r.Handle("/cluster.update", clusterUpdate) - helmCli, helmIndex := mustGetHelmClientAndIndex(namespace, kubeConfig, clientSet, repoFilePath) - - componentsInstallUninstall := ComponentsInstallUninstall{Cli: helmCli, ClientSet: clientSet, Namespace: namespace} + componentsInstallUninstall := ComponentsInstallUninstall{DeployedCharts: deployedCharts, Cli: helmCli, ClientSet: clientSet, Namespace: namespace} r.Handle("/components.install", &componentsInstallUninstall) r.Handle("/components.uninstall", &componentsInstallUninstall) - componentsList := ComponentsList{Cli: helmCli, ClientSet: clientSet, Namespace: namespace, Index: helmIndex} + componentsList := ComponentsList{DeployedCharts: deployedCharts, ClientSet: clientSet, Namespace: namespace, Index: helmIndex} r.Handle("/components.list", &componentsList) log.Fatal(http.ListenAndServe(":8080", r)) From 1a79d9317ca3ca4f93aa901387fab2c5d1bd68d7 Mon Sep 17 00:00:00 2001 From: Ljupco Vangelski Date: Mon, 1 Aug 2022 14:55:00 +0200 Subject: [PATCH 26/92] [#3511] Update helm repo before install or upgrade (#3512) --- docs/docs/getting-started/installation/helm.md | 1 + docs/docs/getting-started/upgrade.md | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/docs/docs/getting-started/installation/helm.md b/docs/docs/getting-started/installation/helm.md index 1d2d46431b..d0c7e5bad5 100644 --- a/docs/docs/getting-started/installation/helm.md +++ b/docs/docs/getting-started/installation/helm.md @@ -210,6 +210,7 @@ Deploy Airy Core with the latest version. You can also configure a specific vers ```sh helm repo add airy https://helm.airy.co +helm repo update helm install airy airy/airy --timeout 10m ``` diff --git a/docs/docs/getting-started/upgrade.md b/docs/docs/getting-started/upgrade.md index 864466aa49..fb8ce09bc8 100644 --- a/docs/docs/getting-started/upgrade.md +++ b/docs/docs/getting-started/upgrade.md @@ -70,6 +70,14 @@ Copying the configuration file in the Airy Core K8s cluster. If you used Helm to deploy `Airy Core`, you can upgrade with the `helm upgrade` command: +```sh +helm repo add airy https://helm.airy.co +helm repo update +helm upgrade airy airy/airy --values ./airy.yaml --timeout 10m +``` + +or to upgrade to a specific version: + ```sh VERSION=$(curl -L -s https://airy-core-binaries.s3.amazonaws.com/stable.txt) helm upgrade airy https://helm.airy.co/charts/airy-${VERSION}.tgz --values ./airy.yaml From 1039312e6bfdab8abb6f771261f56f2c6ea37ede Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 15:57:15 +0200 Subject: [PATCH 27/92] Bump react-i18next from 11.18.1 to 11.18.3 (#3519) Bumps [react-i18next](https://github.com/i18next/react-i18next) from 11.18.1 to 11.18.3. - [Release notes](https://github.com/i18next/react-i18next/releases) - [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/react-i18next/compare/v11.18.1...v11.18.3) --- updated-dependencies: - dependency-name: react-i18next dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 09a22b0f11..5ac13b22bc 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "react-autosize-textarea": "^7.1.0", "react-color": "^2.19.3", "react-dom": "18.2.0", - "react-i18next": "^11.18.1", + "react-i18next": "^11.18.3", "react-markdown": "^8.0.2", "react-modal": "^3.14.4", "react-redux": "8.0.2", diff --git a/yarn.lock b/yarn.lock index c5ae428c49..d0ff57de5c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6925,10 +6925,10 @@ react-hot-loader@^4.13.0: shallowequal "^1.1.0" source-map "^0.7.3" -react-i18next@^11.18.1: - version "11.18.1" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.18.1.tgz#ba86ed09069e129b8623a28f2b9a03d7f105ea6f" - integrity sha512-S8cl4mvIOSA7OQCE5jNy2yhv705Vwi+7PinpqKIYcBmX/trJtHKqrf6CL67WJSA8crr2JU+oxE9jn9DQIrQezg== +react-i18next@^11.18.3: + version "11.18.3" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.18.3.tgz#50211810bcc9fdea2d70c8aefdfff5f1eb39a923" + integrity sha512-EttTX31HbqzZymUM3SIrMPuvamfSXFZVsDHm/ZAqoDfTLjhzlwyxqfbDNxcKNAGOi2mjZaXfR7hSNMlvLNpB/g== dependencies: "@babel/runtime" "^7.14.5" html-parse-stringify "^3.0.1" From b5b666d6649907935760da9c690651e2d95ad904 Mon Sep 17 00:00:00 2001 From: Christoph Proeschel Date: Mon, 1 Aug 2022 19:51:51 +0200 Subject: [PATCH 28/92] [#3373] Document how we work with rules_go, gazelle, and update-deps (#3521) * [#3373] Document how we work with rules_go, gazelle, and update-deps * fix lint --- docs/docs/guides/contributing.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/docs/docs/guides/contributing.md b/docs/docs/guides/contributing.md index e2223662d7..e6dd27ba78 100644 --- a/docs/docs/guides/contributing.md +++ b/docs/docs/guides/contributing.md @@ -80,6 +80,35 @@ re-pin dependencies using the following command: REPIN=1 bazel run @unpinned_maven//:pin ``` +### Working with golang + +We use [Gazelle](https://github.com/bazelbuild/bazel-gazelle) to manage golang based projects and dependencies in our code. +Gazelle allows you to work within a projects directory as if it were a regular golang project. +After changing code or adding/removing dependencies you have to run `bazel run //:gazelle` in order to update the project's `BUILD` files. + +#### Updating dependencies + +One essential advantage of mono repositories is that they allow you to deliver one version of each external dependency across the entire company. +This is however outside the scope of Gazelle which only takes care of syncing build files and does not take into account a global dependency structure. +Therefore, if you updated a subproject's `go.mod` file you need to run a custom tool that we built in order to perform the merge: + +```sh +bazel run //tools/update-deps +``` + +You can learn more about how it works [here](https://github.com/airyhq/airy/tree/main/tools/update-deps). + +#### Troubleshooting + +The `update-deps` tool uses gazelle to update the global `go_repositories.bzl` file adding one [`go_repository` rule](https://github.com/bazelbuild/bazel-gazelle/blob/master/repository.md#go_repository) for each dependency. +When encountering a build issue you can go through the following steps to try to solve it: + +1. Use community resources: [Gazelle docs](https://github.com/bazelbuild/bazel-gazelle), [Golang module docs](https://go.dev/ref/mod), the #go channel of the [Bazel slack](https://slack.bazel.build/) +2. Each dependency has an `importpath` that needs to be unique, e.g. `sigs.k8s.io/json`. If there is a build conflict within the dependencies it is likely that some dependency is out of date and brings in a sub-dependency with a conflicting import path. +3. Load order: Bazel reads the `WORKSPACE` file in a sequential manner. That means if some rule is loaded before our call to `go_repositories()` it would overwrite the version of a go module that we are trying to load. This behavior is improved in Bazel's [new module system](https://bazel.build/docs/bzlmod). +4. Use `go mod graph` to understand who is bringing in a dependency. This can be useful to understanding why a troublesome dependency is imported and how to update it. +5. Check that the `build_file_proto_mode` is set to `disable_global` for the dependency that is causing the issue. It is currently set to this value by default when running the `update-deps` tool, but Gazelle is capable of tracking some custom changes that you make to this file. + ### Exploring the code base Bazel has an extensive [query From 2a990d66a034fe6bdeaaaab957eb30bc5241df50 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Aug 2022 10:08:44 +0200 Subject: [PATCH 29/92] Bump i18next from 21.8.14 to 21.8.16 (#3522) Bumps [i18next](https://github.com/i18next/i18next) from 21.8.14 to 21.8.16. - [Release notes](https://github.com/i18next/i18next/releases) - [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next/compare/v21.8.14...v21.8.16) --- updated-dependencies: - dependency-name: i18next dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5ac13b22bc..5766f1838a 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "core-js": "3.24.0", "emoji-mart": "3.0.1", "form-data": "^4.0.0", - "i18next": "^21.8.14", + "i18next": "^21.8.16", "isomorphic-fetch": "^3.0.0", "linkify-react": "^3.0.4", "linkifyjs": "^3.0.5", diff --git a/yarn.lock b/yarn.lock index d0ff57de5c..ab8cef946e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4780,10 +4780,10 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -i18next@^21.8.14: - version "21.8.14" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.8.14.tgz#03a3a669ef4520aadd9d152c80596f600e287c6a" - integrity sha512-4Yi+DtexvMm/Yw3Q9fllzY12SgLk+Mcmar+rCAccsOPul/2UmnBzoHbTGn/L48IPkFcmrNaH7xTLboBWIbH6pw== +i18next@^21.8.16: + version "21.8.16" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.8.16.tgz#31fe4682e4e2077dbf229a88e5a58b7020e4ddc8" + integrity sha512-acJLCk38YMfEPjBR/1vS13SFY7rBQLs9E5m1tSRnWc9UW3f+SZszgH+NP1fZRA1+O+CdG2eLGGmuUMJW52EwzQ== dependencies: "@babel/runtime" "^7.17.2" From b47d09fcb34fc7e759563b1431b20f166b729c15 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Aug 2022 10:22:14 +0200 Subject: [PATCH 30/92] Bump cypress from 10.3.0 to 10.3.1 (#3517) Bumps [cypress](https://github.com/cypress-io/cypress) from 10.3.0 to 10.3.1. - [Release notes](https://github.com/cypress-io/cypress/releases) - [Changelog](https://github.com/cypress-io/cypress/blob/develop/.releaserc.base.js) - [Commits](https://github.com/cypress-io/cypress/compare/v10.3.0...v10.3.1) --- updated-dependencies: - dependency-name: cypress dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5766f1838a..40285058a0 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "copy-webpack-plugin": "^11.0.0", "babel-loader": "^8.2.5", "css-loader": "^6.7.1", - "cypress": "10.3.0", + "cypress": "10.3.1", "dotenv-webpack": "^8.0.0", "eslint": "^7.32.0", "eslint-plugin-react": "^7.30.1", diff --git a/yarn.lock b/yarn.lock index ab8cef946e..967d9bfa42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3365,10 +3365,10 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== -cypress@10.3.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.3.0.tgz#fae8d32f0822fcfb938e79c7c31ef344794336ae" - integrity sha512-txkQWKzvBVnWdCuKs5Xc08gjpO89W2Dom2wpZgT9zWZT5jXxqPIxqP/NC1YArtkpmp3fN5HW8aDjYBizHLUFvg== +cypress@10.3.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.3.1.tgz#7fab4ef43481c05a9a17ebe9a0ec860e15b95a19" + integrity sha512-As9HrExjAgpgjCnbiQCuPdw5sWKx5HUJcK2EOKziu642akwufr/GUeqL5UnCPYXTyyibvEdWT/pSC2qnGW/e5w== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" From d1df09b37f6721ee4f85a5adc9ac78551f5d1328 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Aug 2022 11:03:48 +0200 Subject: [PATCH 31/92] Bump core-js from 3.24.0 to 3.24.1 (#3513) Bumps [core-js](https://github.com/zloirock/core-js) from 3.24.0 to 3.24.1. - [Release notes](https://github.com/zloirock/core-js/releases) - [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md) - [Commits](https://github.com/zloirock/core-js/compare/v3.24.0...v3.24.1) --- updated-dependencies: - dependency-name: core-js dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 40285058a0..6f81beb4d3 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "@types/jest": "^28.1.6", "audio-recorder-polyfill": "^0.4.1", "camelcase-keys": "^7.0.2", - "core-js": "3.24.0", + "core-js": "3.24.1", "emoji-mart": "3.0.1", "form-data": "^4.0.0", "i18next": "^21.8.16", diff --git a/yarn.lock b/yarn.lock index 967d9bfa42..7d62f61760 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3239,10 +3239,10 @@ core-js-pure@^3.8.1: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.22.7.tgz#f58489d9b309fa7b26486a0f70d4ec19a418084e" integrity sha512-wTriFxiZI+C8msGeh7fJcbC/a0V8fdInN1oS2eK79DMBGs8iIJiXhtFJCiT3rBa8w6zroHWW3p8ArlujZ/Mz+w== -core-js@3.24.0: - version "3.24.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.24.0.tgz#4928d4e99c593a234eb1a1f9abd3122b04d3ac57" - integrity sha512-IeOyT8A6iK37Ep4kZDD423mpi6JfPRoPUdQwEWYiGolvn4o6j2diaRzNfDfpTdu3a5qMbrGUzKUpYpRY8jXCkQ== +core-js@3.24.1: + version "3.24.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.24.1.tgz#cf7724d41724154010a6576b7b57d94c5d66e64f" + integrity sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg== core-util-is@1.0.2: version "1.0.2" From 3d6b183164cb2c311758f151f421981a5ff3b969 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Aug 2022 11:44:38 +0200 Subject: [PATCH 32/92] Bump @bazel/typescript from 5.5.2 to 5.5.3 (#3516) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump @bazel/typescript from 5.5.2 to 5.5.3 Bumps [@bazel/typescript](https://github.com/bazelbuild/rules_nodejs/tree/HEAD/packages/typescript) from 5.5.2 to 5.5.3. - [Release notes](https://github.com/bazelbuild/rules_nodejs/releases) - [Changelog](https://github.com/bazelbuild/rules_nodejs/blob/stable/CHANGELOG.md) - [Commits](https://github.com/bazelbuild/rules_nodejs/commits/5.5.3/packages/typescript) --- updated-dependencies: - dependency-name: "@bazel/typescript" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * bump bazel tools Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Christoph Pröschel --- WORKSPACE | 4 ++-- package.json | 2 +- yarn.lock | 18 +++++++++--------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 2597062054..1387999ff1 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -10,9 +10,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") git_repository( name = "com_github_airyhq_bazel_tools", - commit = "50e7c808d9e7f5d839fda7898168143e75326878", + commit = "59690a4136add960dcb65c2f2025dfda18f73890", remote = "https://github.com/airyhq/bazel-tools.git", - shallow_since = "1657698793 +0200", + shallow_since = "1659431783 +0200", ) load("@com_github_airyhq_bazel_tools//:repositories.bzl", "airy_bazel_tools_dependencies", "airy_jvm_deps") diff --git a/package.json b/package.json index 6f81beb4d3..1bb8900544 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "@babel/preset-env": "^7.18.9", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", - "@bazel/typescript": "5.5.2", + "@bazel/typescript": "5.5.3", "@hot-loader/react-dom": "^17.0.2", "@svgr/plugin-svgo": "^6.3.1", "@svgr/webpack": "^6.3.1", diff --git a/yarn.lock b/yarn.lock index 7d62f61760..3f098517e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1062,20 +1062,20 @@ "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" -"@bazel/typescript@5.5.2": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-5.5.2.tgz#dc7464577a99e4586e9a26c4be6f6c7e898d738f" - integrity sha512-E5JQoBueGZO83sA86ygKOnCAUZH3FNKOGPJe9mAnZ/4ME2w+lE4FJ+amxoCKVAS8qC95Tn5MIVEbCmWmMSB07g== +"@bazel/typescript@5.5.3": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-5.5.3.tgz#3505f92c0bb9598e7ef090dec75f52a1eceab26b" + integrity sha512-DGlzz2RmzRrNWhoL1ynr62qsTk5cUzjIJj2MreeQVoYHQZfB3FCCu/TGtDS5xyEbfWhsn7Zwo5qpOxvdYiPWng== dependencies: - "@bazel/worker" "5.5.2" + "@bazel/worker" "5.5.3" semver "5.6.0" source-map-support "0.5.9" tsutils "3.21.0" -"@bazel/worker@5.5.2": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@bazel/worker/-/worker-5.5.2.tgz#192bf8809e8a74095f41c3ee580c4fe9d362ff58" - integrity sha512-YLmgESJZWrGlEZWJ8gKUOpI8GIB91Jzuru6NULJ+64xUX1S3nQicHp9hBG34GOPGfd8DFB+fgC5m0HdA3F7QYQ== +"@bazel/worker@5.5.3": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@bazel/worker/-/worker-5.5.3.tgz#3c23135a4e9d6c8ef05f1de85bc3c0c30df2ad38" + integrity sha512-Wm0istBBko5w2ddDwCK4rvDQrWfeFGaWdG3iTNkYAHKfQrkgYeMucMoAbFB6LZ87KZKuBEN9KSDq+fi8MXtGlw== dependencies: google-protobuf "^3.6.1" From 8d2dc676ef6b6df4e37fda339933a505ad9f97e7 Mon Sep 17 00:00:00 2001 From: Christoph Proeschel Date: Wed, 3 Aug 2022 10:24:17 +0200 Subject: [PATCH 33/92] [#2755] Add an "airy login" command to the CLI (#3531) --- cli/integration/golden/cli.no-args.golden | 1 + cli/pkg/cmd/BUILD | 1 + cli/pkg/cmd/config/config.go | 10 ++---- cli/pkg/cmd/login/BUILD | 17 ++++++++++ cli/pkg/cmd/login/login.go | 41 +++++++++++++++++++++++ cli/pkg/cmd/root.go | 2 ++ cli/pkg/cmd/status/status.go | 16 +-------- docs/docs/cli/usage.md | 24 +++++++++++++ lib/go/httpclient/httpclient.go | 3 +- 9 files changed, 92 insertions(+), 23 deletions(-) create mode 100644 cli/pkg/cmd/login/BUILD create mode 100644 cli/pkg/cmd/login/login.go diff --git a/cli/integration/golden/cli.no-args.golden b/cli/integration/golden/cli.no-args.golden index 56627ba2f3..e813960834 100644 --- a/cli/integration/golden/cli.no-args.golden +++ b/cli/integration/golden/cli.no-args.golden @@ -9,6 +9,7 @@ Available Commands: config Manages an Airy Core instance via airy.yaml create Creates an instance of Airy Core help Help about any command + login Authenticates your workspace with Airy core and stores the credentials. status Reports the status of an Airy Core instance ui Opens the Airy Core UI in your local browser upgrade Upgrades an instance of Airy Core diff --git a/cli/pkg/cmd/BUILD b/cli/pkg/cmd/BUILD index af54ef7c27..5decc11c51 100644 --- a/cli/pkg/cmd/BUILD +++ b/cli/pkg/cmd/BUILD @@ -14,6 +14,7 @@ go_library( "//cli/pkg/cmd/api", "//cli/pkg/cmd/config", "//cli/pkg/cmd/create", + "//cli/pkg/cmd/login", "//cli/pkg/cmd/status", "//cli/pkg/cmd/ui", "//cli/pkg/cmd/upgrade", diff --git a/cli/pkg/cmd/config/config.go b/cli/pkg/cmd/config/config.go index aa4634de78..6599ef17f5 100644 --- a/cli/pkg/cmd/config/config.go +++ b/cli/pkg/cmd/config/config.go @@ -24,9 +24,7 @@ var ConfigCmd = &cobra.Command{ } func getConfig(cmd *cobra.Command, args []string) { - systemToken := viper.GetString("systemToken") - c := httpclient.NewClient(viper.GetString("apihost")) - c.Token = systemToken + c := httpclient.NewClient(viper.GetString("apihost"), viper.GetString("authToken")) res, err := c.ComponentsGet() if err != nil { @@ -54,14 +52,12 @@ func ApplyConfig(workspacePath string) { fmt.Println(err.Error()) os.Exit(1) } - systemToken := viper.GetString("systemToken") + conf, err := dir.LoadAiryYaml() if err != nil { console.Exit("error parsing configuration file: ", err) } - c := httpclient.NewClient(viper.GetString("apihost")) - - c.Token = systemToken + c := httpclient.NewClient(viper.GetString("apihost"), viper.GetString("authToken")) resComponents, err := c.ComponentsUpdate(conf) if err != nil { diff --git a/cli/pkg/cmd/login/BUILD b/cli/pkg/cmd/login/BUILD new file mode 100644 index 0000000000..e60b40049f --- /dev/null +++ b/cli/pkg/cmd/login/BUILD @@ -0,0 +1,17 @@ +load("@com_github_airyhq_bazel_tools//lint:buildifier.bzl", "check_pkg") +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +check_pkg(name = "buildifier") + +go_library( + name = "login", + srcs = ["login.go"], + importpath = "cli/pkg/cmd/login", + visibility = ["//visibility:public"], + deps = [ + "//cli/pkg/console", + "@com_github_spf13_cobra//:cobra", + "@com_github_spf13_viper//:viper", + "@org_golang_x_term//:term", + ], +) diff --git a/cli/pkg/cmd/login/login.go b/cli/pkg/cmd/login/login.go new file mode 100644 index 0000000000..1111745628 --- /dev/null +++ b/cli/pkg/cmd/login/login.go @@ -0,0 +1,41 @@ +package login + +import ( + "cli/pkg/console" + "fmt" + "golang.org/x/term" + "strings" + "syscall" + + "github.com/spf13/viper" + + "github.com/spf13/cobra" +) + +// LoginCmd Logs in the current workspace +var LoginCmd = &cobra.Command{ + Use: "login", + TraverseChildren: true, + Short: "Authenticates your workspace with Airy core and stores the credentials.", + Long: ``, + Run: login, +} + +func login(cmd *cobra.Command, args []string) { + authToken := viper.GetString("authToken") + if authToken != "" { + fmt.Println("There is already a valid auth token stored in your cli.yaml. If you want to login again, please remove the auth token from your config file.") + return + } + + fmt.Print("Enter your system token: ") + byteToken, err := term.ReadPassword(int(syscall.Stdin)) + if err != nil { + console.Exit(err) + } + + token := strings.TrimSpace(string(byteToken)) + fmt.Println("\nAuthentication set") + viper.Set("authToken", token) + viper.WriteConfig() +} diff --git a/cli/pkg/cmd/root.go b/cli/pkg/cmd/root.go index e17b0dbb34..5ab30388cc 100644 --- a/cli/pkg/cmd/root.go +++ b/cli/pkg/cmd/root.go @@ -4,6 +4,7 @@ import ( "cli/pkg/cmd/api" "cli/pkg/cmd/config" "cli/pkg/cmd/create" + "cli/pkg/cmd/login" "cli/pkg/cmd/status" "cli/pkg/cmd/ui" "cli/pkg/cmd/upgrade" @@ -121,6 +122,7 @@ func init() { RootCmd.PersistentFlags().StringVar(&cliConfigDir, "workspace", "", "workspace directory of an Airy core instance (default is the cwd)") RootCmd.AddCommand(api.APICmd) + RootCmd.AddCommand(login.LoginCmd) RootCmd.AddCommand(config.ConfigCmd) RootCmd.AddCommand(status.StatusCmd) RootCmd.AddCommand(ui.UICmd) diff --git a/cli/pkg/cmd/status/status.go b/cli/pkg/cmd/status/status.go index 5885e9b606..97bddbd8f7 100644 --- a/cli/pkg/cmd/status/status.go +++ b/cli/pkg/cmd/status/status.go @@ -2,13 +2,10 @@ package status import ( "cli/pkg/console" - "context" "fmt" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "os" "text/tabwriter" - "cli/pkg/kube" "github.com/airyhq/airy/lib/go/httpclient" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -23,18 +20,7 @@ var StatusCmd = &cobra.Command{ } func status(cmd *cobra.Command, args []string) { - c := httpclient.NewClient(viper.GetString("apihost")) - - kubeCtx := kube.Load() - clientset, err := kubeCtx.GetClientSet() - - if err != nil { - console.Exit("Could not get kubernetes client", err) - } - cm, _ := clientset.CoreV1().ConfigMaps(viper.GetString("namespace")).Get(context.TODO(), "security", v1.GetOptions{}) - - c.Token = cm.Data["systemToken"] - + c := httpclient.NewClient(viper.GetString("apihost"), viper.GetString("authToken")) res, err := c.Config() if err != nil { diff --git a/docs/docs/cli/usage.md b/docs/docs/cli/usage.md index 0ea365d91f..013784cb55 100644 --- a/docs/docs/cli/usage.md +++ b/docs/docs/cli/usage.md @@ -90,6 +90,30 @@ airy create [workspace directory] [flags] ``` +*** + +## Login + +Authenticates your workspace with Airy core and stores the credentials. + +``` +airy login [flags] +``` + +#### Options + +``` + -h, --help help for login +``` + +#### Options inherited from parent commands + +``` + --apihost string Airy Core HTTP API endpoint + --workspace string workspace directory of an Airy core instance (default is the cwd) +``` + + *** ## Status diff --git a/lib/go/httpclient/httpclient.go b/lib/go/httpclient/httpclient.go index 786c0f857d..49be9a7255 100644 --- a/lib/go/httpclient/httpclient.go +++ b/lib/go/httpclient/httpclient.go @@ -15,9 +15,10 @@ type Client struct { c *http.Client } -func NewClient(baseURL string) *Client { +func NewClient(baseURL string, authToken string) *Client { return &Client{ BaseURL: baseURL, + Token: authToken, c: &http.Client{ Timeout: time.Minute, }, From 0dcf65304b9040e9391f9f4ce8da2c8d6f3e401b Mon Sep 17 00:00:00 2001 From: Arman Jindal <58370547+armanjindal@users.noreply.github.com> Date: Wed, 3 Aug 2022 16:40:45 +0200 Subject: [PATCH 34/92] [#3397] Airy CLI Installation with Terraform (#3404) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [#3360] Bug with external Go dependency build * Also add disable proto globally file to this PR and fix gazelle import order * [#3397] Change CLI for AWS to use Terraform * Decouple status from kubernetes * Update output message and aws docs * Update aws docs * Clarify aws docs Co-authored-by: Christoph Pröschel Co-authored-by: ljupcovangelski --- .gitignore | 1 + BUILD | 1 + cli/go.mod | 28 +- cli/go.sum | 83 +++ cli/pkg/cmd/create/create.go | 110 ++-- cli/pkg/cmd/status/BUILD | 1 - cli/pkg/cmd/status/status.go | 1 + cli/pkg/providers/aws/BUILD | 10 +- cli/pkg/providers/aws/aws.go | 485 ++---------------- cli/pkg/providers/minikube/minikube.go | 16 +- cli/pkg/providers/provider.go | 2 + cli/pkg/workspace/init.go | 12 +- docs/docs/getting-started/installation/aws.md | 146 +----- .../getting-started/installation/terraform.md | 150 +++++- docs/sidebars.js | 1 + go.mod | 17 +- go.sum | 20 + go_repositories.bzl | 85 ++- .../terraform/install/airy-core/main.tf | 12 +- .../terraform/install/airy-core/outputs.tf | 13 +- .../terraform/install/airy-core/variables.tf | 8 - tools/update-deps/go.mod | 2 +- tools/update-deps/go.sum | 2 + 23 files changed, 471 insertions(+), 735 deletions(-) diff --git a/.gitignore b/.gitignore index a99c524bc8..0cc898f0a9 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ package-lock.json *.tfstate.* .terraform.tfstate.lock.info .terraform.lock.hcl +/terraform # Kubernetes .kubeconfig diff --git a/BUILD b/BUILD index a25ae7809f..a30bd37195 100644 --- a/BUILD +++ b/BUILD @@ -181,6 +181,7 @@ exports_files( # gazelle:proto disable_global # gazelle:build_file_name BUILD # gazelle:prefix +# gazelle:exclude infrastructure/terraform gazelle(name = "gazelle") nogo( diff --git a/cli/go.mod b/cli/go.mod index fcf558418d..be34d12766 100644 --- a/cli/go.mod +++ b/cli/go.mod @@ -28,8 +28,10 @@ require ( ) require ( - cloud.google.com/go v0.100.2 // indirect - cloud.google.com/go/compute v1.6.1 // indirect + cloud.google.com/go v0.102.0 // indirect + cloud.google.com/go/compute v1.7.0 // indirect + cloud.google.com/go/iam v0.3.0 // indirect + cloud.google.com/go/storage v1.22.1 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver v1.5.0 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect @@ -44,6 +46,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/sso v1.11.5 // indirect github.com/aws/aws-sdk-go-v2/service/sts v1.16.6 // indirect github.com/aws/smithy-go v1.11.2 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emicklei/go-restful v2.15.0+incompatible // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect @@ -52,10 +55,16 @@ require ( github.com/go-openapi/jsonreference v0.20.0 // indirect github.com/go-openapi/swag v0.21.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/gnostic v0.6.9 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/uuid v1.3.0 // indirect + github.com/googleapis/gax-go/v2 v2.4.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-getter v1.6.2 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-version v1.1.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/huandu/xstrings v1.3.2 // indirect github.com/imdario/mergo v0.3.13 // indirect @@ -63,10 +72,12 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.11.2 // indirect github.com/kr/text v0.2.0 // indirect github.com/magiconair/properties v1.8.6 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/go-testing-interface v1.0.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -81,6 +92,7 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.3.0 // indirect + github.com/ulikunitz/xz v0.5.8 // indirect github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d // indirect golang.org/x/net v0.0.0-20220630215102-69896b714898 // indirect @@ -89,7 +101,19 @@ require ( golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect + go.opencensus.io v0.23.0 // indirect + golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898 // indirect + golang.org/x/net v0.0.0-20220630215102-69896b714898 // indirect + golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0 // indirect + golang.org/x/sys v0.0.0-20220624220833-87e55d714810 // indirect + golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 // indirect + golang.org/x/text v0.3.7 // indirect + golang.org/x/time v0.0.0-20220411224347-583f2d630306 // indirect + golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect + google.golang.org/api v0.86.0 // indirect google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f // indirect + google.golang.org/grpc v1.47.0 // indirect google.golang.org/protobuf v1.28.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.66.4 // indirect diff --git a/cli/go.sum b/cli/go.sum index 14e1b0d00d..766f5e9bf4 100644 --- a/cli/go.sum +++ b/cli/go.sum @@ -32,6 +32,7 @@ cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Ud cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -44,9 +45,12 @@ cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6m cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= cloud.google.com/go/compute v1.6.1 h1:2sMmt8prCn7DPaG4Pmh0N3Inmc8cT8ae5k1M6VJ9Wqc= cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -56,7 +60,9 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0 h1:6RRlFMv1omScs6iq2hfE3IvgE+l6RfJPampq8UZc5TU= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= @@ -110,6 +116,7 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= github.com/aws/aws-sdk-go v1.37.29 h1:OlePDQg2idesIZKPy8egpN51RIF3DHhtREnvgNpTZhE= github.com/aws/aws-sdk-go v1.37.29/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.44.21 h1:xZBdJmgkTQuIrbq5jSi5gyUwyz4eRTvjmLoT+c+Ao/A= @@ -166,12 +173,15 @@ github.com/aws/smithy-go v1.11.2 h1:eG/N+CcUMAvsdffgMvjMKwfyDzIkjM6pfxMJ8Mzc6mE= github.com/aws/smithy-go v1.11.2/go.mod h1:3xHYmszWVx2c0kIwQeEVf9uSm4fYZt67FBJnwub1bgM= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -183,6 +193,7 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -216,6 +227,7 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -271,6 +283,7 @@ github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= @@ -320,6 +333,7 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -350,12 +364,18 @@ github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0 h1:nRJtk3y8Fm770D42QV6T90ZnvFZyk7agSo3Q+Z9p3WI= github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= @@ -369,14 +389,22 @@ github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBt github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-getter v1.6.2 h1:7jX7xcB+uVCliddZgeKyNxv0xoT7qL5KDtH7rU4IqIk= +github.com/hashicorp/go-getter v1.6.2/go.mod h1:IZCrswsZPeWv9IkVnLElzRU/gz/QPi6pZHn4tv6vbwA= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.1.0 h1:bPIoEKD27tNdebFGGxxYwcL4nepeY4j1QP23PFRGzg0= +github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -398,6 +426,7 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= @@ -417,6 +446,8 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.11.2 h1:MiK62aErc3gIiVEtyzKfeOHgW7atJb5g/KNX5m3c2nQ= +github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -442,6 +473,8 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -452,6 +485,7 @@ github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HK github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= @@ -583,6 +617,8 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1 github.com/txn2/txeh v1.3.0 h1:vnbv63htVMZCaQgLqVBxKvj2+HHHFUzNW7I183zjg3E= github.com/txn2/txeh v1.3.0/go.mod h1:O7M6gUTPeMF+vsa4c4Ipx3JDkOYrruB1Wry8QRsMcw8= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= +github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= @@ -602,6 +638,7 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -712,8 +749,14 @@ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220524220425-1d687d428aca h1:xTaFYiPROfpPhqrfTIDXj0ri1SpfueYT951s4bAuDO8= golang.org/x/net v0.0.0-20220524220425-1d687d428aca/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e h1:TsQ7F31D3bUCLeqPT0u+yjp1guoArKaNKmCr22PYgTQ= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220630215102-69896b714898 h1:K7wO6V1IrczY9QOQ2WkVpw4JQSwCd52UsxVEirZUfiw= +golang.org/x/net v0.0.0-20220630215102-69896b714898/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -736,6 +779,11 @@ golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401 h1:zwrSfklXn0gxyLRX/aR+q6cgHbV/ItVyzbPlbA+dkAw= golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2 h1:+jnHzr9VPj32ykQVai5DNahi9+NSp7yYuCsl5eAQtL0= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0 h1:VnGaRqoLmqZH/3TMLJwYCEWkR4j1nuIU1U9TvbqsDUw= +golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -747,6 +795,7 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -817,8 +866,13 @@ golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 h1:EH1Deb8WZJ0xc0WK//leUHXcX9aLE5SymusoTmMZye8= @@ -906,7 +960,11 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U= golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -942,7 +1000,13 @@ google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQ google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0 h1:0AYh/ae6l9TDUvIQrDw5QRpM100P6oHgD+o3dYHMzJg= google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.86.0 h1:ZAnyOHQFIuWso1BodVfSaRyffD74T9ERGFa3k1fNk/U= +google.golang.org/api v0.86.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -994,6 +1058,7 @@ google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= @@ -1026,7 +1091,16 @@ google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2I google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3 h1:SeX3QUcBj3fciwnfPT9kt5gBhFy/FCZtYZ+I/RB8agc= google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f h1:hJ/Y5SqPXbarffmAsApliUlcvMU+wScNGfyop4bZm8o= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1054,7 +1128,11 @@ google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1077,6 +1155,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= @@ -1114,14 +1193,18 @@ k8s.io/api v0.19.0 h1:XyrFIJqTYZJ2DU7FBE/bSPz7b1HvbVBuBf07oeo6eTc= k8s.io/api v0.19.0/go.mod h1:I1K45XlvTrDjmj5LoM5LuP/KYrhWbjUKT/SoPG0qTjw= k8s.io/api v0.24.0 h1:J0hann2hfxWr1hinZIDefw7Q96wmCBx6SSB8IY0MdDg= k8s.io/api v0.24.0/go.mod h1:5Jl90IUrJHUJYEMANRURMiVvJ0g7Ax7r3R1bqO8zx8I= +k8s.io/api v0.24.2/go.mod h1:AHqbSkTm6YrQ0ObxjO3Pmp/ubFF/KuM7jU+3khoBsOg= k8s.io/apimachinery v0.19.0 h1:gjKnAda/HZp5k4xQYjL0K/Yb66IvNqjthCb03QlKpaQ= k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= k8s.io/apimachinery v0.24.0 h1:ydFCyC/DjCvFCHK5OPMKBlxayQytB8pxy8YQInd5UyQ= k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= +k8s.io/apimachinery v0.24.2/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= k8s.io/client-go v0.19.0 h1:1+0E0zfWFIWeyRhQYWzimJOyAk2UT7TiARaLNwJCf7k= k8s.io/client-go v0.19.0/go.mod h1:H9E/VT95blcFQnlyShFgnFT9ZnJOAceiUHM3MlRC+mU= k8s.io/client-go v0.24.0 h1:lbE4aB1gTHvYFSwm6eD3OF14NhFDKCejlnsGYlSJe5U= k8s.io/client-go v0.24.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw= +k8s.io/client-go v0.24.2 h1:CoXFSf8if+bLEbinDqN9ePIDGzcLtqhfd6jpfnwGOFA= +k8s.io/client-go v0.24.2/go.mod h1:zg4Xaoo+umDsfCWr4fCnmLEtQXyCNXCvJuSsglNcV30= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= diff --git a/cli/pkg/cmd/create/create.go b/cli/pkg/cmd/create/create.go index acb92b7394..08df0aa44c 100644 --- a/cli/pkg/cmd/create/create.go +++ b/cli/pkg/cmd/create/create.go @@ -65,11 +65,21 @@ func create(cmd *cobra.Command, args []string) { overrides.Version = version overrides.Namespace = namespace overrides.TrackingDisabled = disableTracking + if err := provider.CheckEnvironment(); err != nil { + console.Exit("please set up the required environment for the installation", err) + } + dir, err := workspace.Create(workspacePath, overrides) if err != nil { console.Exit("could not initialize Airy workspace directory", err) } fmt.Println("📁 Initialized Airy workspace directory at", dir.GetPath(".")) + + installDir, err := provider.PreInstallation(dir.GetPath(".")) + if err != nil { + console.Exit("could not set up files for install in Airy workspace directory", err) + } + fmt.Println("📁 Set up installation directory in the Airy workspace at", installDir) if initOnly { os.Exit(0) } @@ -78,69 +88,69 @@ func create(cmd *cobra.Command, args []string) { fmt.Fprintln(w) fmt.Fprintln(w, providerName, "provider output:") fmt.Fprintln(w) - context, err := provider.Provision(providerConfig, dir) + context, err := provider.Provision(providerConfig, workspace.ConfigDir{Path: installDir}) fmt.Fprintln(w) if err != nil { - console.Exit("could not provision cluster: ", err) - } - - fmt.Println("✅ Cluster provisioned") - - clientset, err := context.GetClientSet() - if err != nil { - console.Exit("could not get clientset: ", err) + console.Exit("could not install Airy: ", err) } + if providerName == "minikube" { // TEMP fix to keep minikube working + clientset, err := context.GetClientSet() + if err != nil { + console.Exit("could not get clientset: ", err) + } - if err = context.Store(); err != nil { - console.Exit("could not store the kube context: ", err) - } + if err = context.Store(); err != nil { + console.Exit("could not store the kube context: ", err) + } - helm := helm.New(clientset, version, namespace, dir.GetAiryYaml()) - if err := helm.Setup(); err != nil { - console.Exit("setting up Helm failed with err: ", err) - } + helm := helm.New(clientset, version, namespace, dir.GetAiryYaml()) + if err := helm.Setup(); err != nil { + console.Exit("setting up Helm failed with err: ", err) + } - fmt.Println("🚀 Starting airy with default components") + fmt.Println("🚀 Starting core with default components") - if err := helm.InstallCharts(); err != nil { - console.Exit("installing Helm charts failed with err: ", err) - } + if err := helm.InstallCharts(); err != nil { + console.Exit("installing Helm charts failed with err: ", err) + } - if err = provider.PostInstallation(providerConfig, namespace, dir); err != nil { - console.Exit("failed to run post installation hook: ", err) - } + if err = provider.PostInstallation(providerConfig, namespace, dir); err != nil { + console.Exit("failed to run post installation hook: ", err) + } - fmt.Println("🎉 Your Airy Core is ready") + fmt.Println("🎉 Your Airy Core is ready") - coreConfig, err := k8s.GetCmData("core-config", namespace, clientset) - if err != nil { - console.Exit("failed to get hosts from installation") - } + coreConfig, err := k8s.GetCmData("core-config", namespace, clientset) + if err != nil { + console.Exit("failed to get hosts from installation") + } - fmt.Println("\t 👩‍🍳 Available hosts:") - for hostName, host := range coreConfig { - switch hostName { - case "HOST": - fmt.Printf("\t\t %s:\t %s", "Host", host) - fmt.Println() - case "API_HOST": - fmt.Printf("\t\t %s:\t %s", "API", host) - fmt.Println() - case "NGROK": - fmt.Printf("\t\t %s:\t %s", "NGROK", host) - fmt.Println() + fmt.Println("\t 👩‍🍳 Available hosts:") + for hostName, host := range coreConfig { + switch hostName { + case "HOST": + fmt.Printf("\t\t %s:\t %s", "Host", host) + fmt.Println() + case "API_HOST": + fmt.Printf("\t\t %s:\t %s", "API", host) + fmt.Println() + case "NGROK": + fmt.Printf("\t\t %s:\t %s", "NGROK", host) + fmt.Println() + } } - } - fmt.Println() + fmt.Println("✅ Airy Installed") + fmt.Println() - viper.Set("provider", provider) - viper.Set("namespace", namespace) - viper.WriteConfig() + viper.Set("provider", provider) + viper.Set("namespace", namespace) + viper.WriteConfig() - airyAnalytics.Track(analytics.Track{ - UserId: coreConfig["CORE_ID"], - Event: "installation_succesful"}) - fmt.Printf("📚 For more information about the %s provider visit https://airy.co/docs/core/getting-started/installation/%s", providerName, providerName) - fmt.Println() + airyAnalytics.Track(analytics.Track{ + UserId: coreConfig["CORE_ID"], + Event: "installation_succesful"}) + fmt.Printf("📚 For more information about the %s provider visit https://airy.co/docs/core/getting-started/installation/%s", providerName, providerName) + fmt.Println() + } } diff --git a/cli/pkg/cmd/status/BUILD b/cli/pkg/cmd/status/BUILD index 247e79a125..1e6e15a3c4 100644 --- a/cli/pkg/cmd/status/BUILD +++ b/cli/pkg/cmd/status/BUILD @@ -8,7 +8,6 @@ go_library( visibility = ["//visibility:public"], deps = [ "//cli/pkg/console", - "//cli/pkg/kube", "//lib/go/httpclient", "@com_github_spf13_cobra//:cobra", "@com_github_spf13_viper//:viper", diff --git a/cli/pkg/cmd/status/status.go b/cli/pkg/cmd/status/status.go index 97bddbd8f7..a3714f96cb 100644 --- a/cli/pkg/cmd/status/status.go +++ b/cli/pkg/cmd/status/status.go @@ -21,6 +21,7 @@ var StatusCmd = &cobra.Command{ func status(cmd *cobra.Command, args []string) { c := httpclient.NewClient(viper.GetString("apihost"), viper.GetString("authToken")) + res, err := c.Config() if err != nil { diff --git a/cli/pkg/providers/aws/BUILD b/cli/pkg/providers/aws/BUILD index 56766c987c..52c3173890 100644 --- a/cli/pkg/providers/aws/BUILD +++ b/cli/pkg/providers/aws/BUILD @@ -17,15 +17,7 @@ go_library( "//cli/pkg/kube", "//cli/pkg/workspace", "//cli/pkg/workspace/template", - "@com_github_aws_aws_sdk_go//aws", - "@com_github_aws_aws_sdk_go_v2_config//:config", - "@com_github_aws_aws_sdk_go_v2_service_ec2//:ec2", - "@com_github_aws_aws_sdk_go_v2_service_ec2//types", - "@com_github_aws_aws_sdk_go_v2_service_eks//:eks", - "@com_github_aws_aws_sdk_go_v2_service_eks//types", - "@com_github_aws_aws_sdk_go_v2_service_iam//:iam", - "@com_github_aws_aws_sdk_go_v2_service_iam//types", - "@com_github_twinproduction_go_color//:go-color", + "@com_github_hashicorp_go_getter//:go-getter", "@in_gopkg_segmentio_analytics_go_v3//:analytics-go_v3", ], ) diff --git a/cli/pkg/providers/aws/aws.go b/cli/pkg/providers/aws/aws.go index 2feec6256a..ad90420bb3 100644 --- a/cli/pkg/providers/aws/aws.go +++ b/cli/pkg/providers/aws/aws.go @@ -5,36 +5,21 @@ import ( "cli/pkg/kube" "cli/pkg/workspace" tmpl "cli/pkg/workspace/template" - "context" - "fmt" "io" "math/rand" "os" + "os/exec" "strings" - "text/template" "time" + getter "github.com/hashicorp/go-getter" "gopkg.in/segmentio/analytics-go.v3" - - "github.com/TwinProduction/go-color" - "github.com/aws/aws-sdk-go-v2/config" - "github.com/aws/aws-sdk-go-v2/service/ec2" - ec2Types "github.com/aws/aws-sdk-go-v2/service/ec2/types" - "github.com/aws/aws-sdk-go-v2/service/eks" - eksTypes "github.com/aws/aws-sdk-go-v2/service/eks/types" - "github.com/aws/aws-sdk-go-v2/service/iam" - iamTypes "github.com/aws/aws-sdk-go-v2/service/iam/types" - "github.com/aws/aws-sdk-go/aws" ) var letters = []rune("abcdefghijklmnopqrstuvwxyz") type provider struct { - context kube.KubeCtx w io.Writer - ec2Client *ec2.Client - iamClient *iam.Client - eksClient *eks.Client analytics console.AiryAnalytics } @@ -50,6 +35,28 @@ func (p *provider) GetOverrides() tmpl.Variables { LoadbalancerAnnotations: map[string]string{"service.beta.kubernetes.io/aws-load-balancer-type": "nlb"}, } } +func (p *provider) CheckEnvironment() error { + return workspace.CheckBinaries([]string{"terraform", "aws"}) +} +func (p *provider) PreInstallation(workspacePath string) (string, error) { + remoteUrl := "github.com/airyhq/airy/infrastructure/terraform/install" + installDir := workspacePath + "/terraform" + installFlags := strings.Join([]string{"PROVIDER=aws-eks", "WORKSPACE=" + workspacePath}, "\n") + + var gitGetter = &getter.Client{ + Src: remoteUrl, + Dst: installDir, + Dir: true, + } + if err := gitGetter.Get(); err != nil { + return "", err + } + err := os.WriteFile(installDir+"/install.flags", []byte(installFlags), 0666) + if err != nil { + return "", err + } + return installDir, nil +} func (p *provider) PostInstallation(providerConfig map[string]string, namespace string, dir workspace.ConfigDir) error { return nil @@ -62,11 +69,7 @@ type KubeConfig struct { } func (p *provider) Provision(providerConfig map[string]string, dir workspace.ConfigDir) (kube.KubeCtx, error) { - cfg, err := config.LoadDefaultConfig(context.TODO()) - if err != nil { - console.Exit(err) - } - + installPath := dir.GetPath(".") id := RandString(8) p.analytics.Track(analytics.Identify{ AnonymousId: id, @@ -74,445 +77,23 @@ func (p *provider) Provision(providerConfig map[string]string, dir workspace.Con Set("provider", "AWS"), }) name := "Airy-" + id - fmt.Fprintf(p.w, "Creating Airy Core instance with id: %s. This might take a while.\n", name) - p.iamClient = iam.NewFromConfig(cfg) - - role, err := p.createRole(name) - if err != nil { - console.Exit("Error creating role: ", err) - } - fmt.Fprintf(p.w, "Created AWS Role with ARN: %s.\n", *role.Arn) - - if err = p.attachPolicies(role.RoleName); err != nil { - console.Exit("Error attaching policies: ", err) - } - - fmt.Fprintf(p.w, "EKS policies attached.\n") - - p.ec2Client = ec2.NewFromConfig(cfg) - - var subnetIds []string - instanceType := providerConfig["instanceType"] - if instanceType == "" { - instanceType = "c5.xlarge" - } - - vpcId := providerConfig["vpcId"] - if vpcId == "" { - vpc, err := p.createVpc("192.168.0.0/16", name) - if err != nil { - console.Exit("Error creating vpc: ", err) - } - vpcId = *vpc.VpcId - fmt.Fprintf(p.w, "VPC created with id: %s.\n", vpcId) - fmt.Fprintf(p.w, "Enabling DNS on VPC...\n") - if err = p.enableDNSOnVpc(&vpcId); err != nil { - console.Exit("Error enabling DNS on VPC.", err) - } - - fmt.Fprintf(p.w, "Creating Internet Gateway...\n") - internetGateway, err := p.createInternetGateway(&vpcId) - if err != nil { - console.Exit("Could not create internet gateway: ", err) - } - - fmt.Fprintf(p.w, "Creating route table...\n") - routeTable, err := p.createRoute(&vpcId, name, internetGateway) - if err != nil { - console.Exit("Error creating route table: ", err) - } - - availabilityZones, azErr := p.ec2Client.DescribeAvailabilityZones(context.TODO(), &ec2.DescribeAvailabilityZonesInput{}) - if azErr != nil { - console.Exit("Unable to get availability zones. Make sure you have set the ENV variable AWS_REGION") - } - fmt.Fprintf(p.w, "Creating first subnet...\n") - firstSubnet, err := p.createSubnet(&vpcId, name, "192.168.64.0/18", *availabilityZones.AvailabilityZones[0].ZoneName) - if err != nil { - console.Exit("Error creating subnet: ", err) - } - - fmt.Fprintf(p.w, "Creating second subnet\n") - secondSubnet, err := p.createSubnet(&vpcId, name, "192.168.128.0/18", *availabilityZones.AvailabilityZones[1].ZoneName) - if err != nil { - console.Exit("Error creating subnet: ", err) - } - - fmt.Fprintf(p.w, "Allowing public IP on first subnet...\n") - if err = p.allowPublicIpOnSubnet(firstSubnet.SubnetId); err != nil { - console.Exit("Error allowing public IP on first subnet: ", err) - } - - fmt.Fprintf(p.w, "Allowing public IP on second subnet...\n") - if err = p.allowPublicIpOnSubnet(secondSubnet.SubnetId); err != nil { - console.Exit("Error allowing public IP on second subnet: ", err) - } - - fmt.Fprintf(p.w, "Associating first subnet to route table...\n") - if err = p.associateSubnetToRouteTable(firstSubnet.SubnetId, routeTable.RouteTableId); err != nil { - console.Exit("Error associating first subnet to route table: ", err) - } - - fmt.Fprintf(p.w, "Associating second subnet to route table...\n") - if err = p.associateSubnetToRouteTable(secondSubnet.SubnetId, routeTable.RouteTableId); err != nil { - console.Exit("Error associating second subnet to route table: ", err) - } - - subnetIds = append(subnetIds, *firstSubnet.SubnetId) - subnetIds = append(subnetIds, *secondSubnet.SubnetId) - } else { - fmt.Fprintf(p.w, "Using existing VPC: %s.\n", vpcId) - subnets, subnetErr := p.getSubnets(vpcId) - if subnetErr != nil { - console.Exit("Unable to get subnets from VPC", subnetErr) - } - subnetIds = subnets - fmt.Fprintf(p.w, "Using subnets: %s.\n", strings.Join(subnets[:], ",")) - } - - p.eksClient = eks.NewFromConfig(cfg) - fmt.Fprintf(p.w, "Creating EKS cluster...\n") - - cluster, err := p.createCluster(name, role.Arn, subnetIds) - if err != nil { - console.Exit("Error creating cluster: ", err) - } - fmt.Fprintf(p.w, "Created EKS cluster named: %s.\n", *cluster.Name) - - fmt.Fprintf(p.w, "Waiting for cluster to be ready") - p.waitUntilResourceReady(func() bool { - describeClusterResult, err := p.eksClient.DescribeCluster(context.TODO(), &eks.DescribeClusterInput{ - Name: aws.String(name), - }) - - if err != nil { - fmt.Fprintf(p.w, "Error fetching cluster information. Trying it again.\n") - return false - } + cmd := exec.Command("/bin/bash", "install.sh") + cmd.Dir = installPath + cmd.Stdin = os.Stdin + cmd.Stderr = p.w + cmd.Stdout = p.w + err := cmd.Run() - return describeClusterResult.Cluster.Status == "ACTIVE" - }) - - nodeGroup, err := p.createNodeGroup(name, role.Arn, subnetIds, instanceType) - if err != nil { - console.Exit("Error creating node group: ", err) - } - - fmt.Fprintf(p.w, "Node group created %s.\n", *nodeGroup.NodegroupName) - fmt.Fprintf(p.w, "Waiting for node group to be ready") - p.waitUntilResourceReady(func() bool { - describeNodegroupResult, err := p.eksClient.DescribeNodegroup(context.TODO(), &eks.DescribeNodegroupInput{ - ClusterName: aws.String(name), - NodegroupName: aws.String(name), - }) - - if err != nil { - fmt.Fprintf(p.w, "Error fetching node group information. Trying it again.") - return false - } - - return describeNodegroupResult.Nodegroup.Status == "ACTIVE" - }) - - describeClusterResult, err := p.eksClient.DescribeCluster(context.TODO(), &eks.DescribeClusterInput{ - Name: aws.String(name), - }) if err != nil { - console.Exit("Error describing cluster: ", err) + console.Exit("Error with Terraform installation", err) } - - cluster = describeClusterResult.Cluster - kubeConfig := KubeConfig{ - ClusterName: name, - EndpointUrl: *cluster.Endpoint, - CertificateData: *cluster.CertificateAuthority.Data, - } - kubeConfigFilePath, err := p.createKubeConfigFile(dir, kubeConfig) - - if err != nil { - console.Exit("Error creating kube config file: ", err) - } - ctx := kube.KubeCtx{ - KubeConfigPath: kubeConfigFilePath, + KubeConfigPath: "./kube.conf", // change this into a CLI ContextName: name, } - - p.context = ctx return ctx, nil } -func (p *provider) createRole(name string) (*iamTypes.Role, error) { - createRoleInput := &iam.CreateRoleInput{ - AssumeRolePolicyDocument: aws.String(RolePolicyDocument), - Path: aws.String("/"), - RoleName: aws.String(name), - } - iamResult, err := p.iamClient.CreateRole(context.TODO(), createRoleInput) - - if err != nil { - return nil, err - } - - return iamResult.Role, nil -} - -func (p *provider) createVpc(cidr string, name string) (*ec2Types.Vpc, error) { - vpcTagList := ec2Types.TagSpecification{ - ResourceType: ec2Types.ResourceTypeVpc, - Tags: []ec2Types.Tag{ - { - Key: aws.String("Name"), Value: aws.String(name), - }, - }, - } - - createVpcResult, err := p.ec2Client.CreateVpc(context.TODO(), &ec2.CreateVpcInput{ - CidrBlock: aws.String(cidr), - TagSpecifications: []ec2Types.TagSpecification{vpcTagList}, - }) - - if err != nil { - return nil, err - } - return createVpcResult.Vpc, nil -} - -func (p *provider) enableDNSOnVpc(vpcId *string) error { - value := true - _, err := p.ec2Client.ModifyVpcAttribute(context.TODO(), &ec2.ModifyVpcAttributeInput{ - VpcId: vpcId, - EnableDnsSupport: &ec2Types.AttributeBooleanValue{ - Value: &value, - }, - }) - - if err != nil { - return err - } - - _, err = p.ec2Client.ModifyVpcAttribute(context.TODO(), &ec2.ModifyVpcAttributeInput{ - VpcId: vpcId, - EnableDnsHostnames: &ec2Types.AttributeBooleanValue{ - Value: &value, - }, - }) - - return err -} - -func (p *provider) createInternetGateway(vpcId *string) (*ec2Types.InternetGateway, error) { - createInternetGatewayResult, err := p.ec2Client.CreateInternetGateway(context.TODO(), &ec2.CreateInternetGatewayInput{}) - if err != nil { - return nil, err - } - - _, err = p.ec2Client.AttachInternetGateway(context.TODO(), &ec2.AttachInternetGatewayInput{ - InternetGatewayId: createInternetGatewayResult.InternetGateway.InternetGatewayId, - VpcId: vpcId, - }) - if err != nil { - return nil, err - } - return createInternetGatewayResult.InternetGateway, nil -} - -func (p *provider) createRoute(vpcId *string, name string, internetGateway *ec2Types.InternetGateway) (*ec2Types.RouteTable, error) { - routeTableTagList := ec2Types.TagSpecification{ - ResourceType: ec2Types.ResourceTypeRouteTable, - Tags: []ec2Types.Tag{ - { - Key: aws.String("Network"), Value: aws.String("Public"), - }, - { - Key: aws.String("Id"), Value: aws.String(name), - }, - }, - } - createRouteTable, err := p.ec2Client.CreateRouteTable(context.TODO(), &ec2.CreateRouteTableInput{ - VpcId: vpcId, - TagSpecifications: []ec2Types.TagSpecification{routeTableTagList}, - }) - if err != nil { - return nil, err - } - _, err = p.ec2Client.CreateRoute(context.TODO(), &ec2.CreateRouteInput{ - RouteTableId: createRouteTable.RouteTable.RouteTableId, - DestinationCidrBlock: aws.String("0.0.0.0/0"), - GatewayId: internetGateway.InternetGatewayId, - }) - - if err != nil { - return nil, err - } - return createRouteTable.RouteTable, nil -} - -func (p *provider) createSubnet(vpcId *string, name string, cidr string, availabilityZone string) (*ec2Types.Subnet, error) { - subnetTagList := ec2Types.TagSpecification{ - ResourceType: ec2Types.ResourceTypeSubnet, - Tags: []ec2Types.Tag{ - { - Key: aws.String("kubernetes.io/role/elb"), Value: aws.String("1"), - }, - { - Key: aws.String("Id"), Value: aws.String(name), - }, - }, - } - subnetResult, err := p.ec2Client.CreateSubnet(context.TODO(), &ec2.CreateSubnetInput{ - VpcId: vpcId, - CidrBlock: aws.String(cidr), - AvailabilityZone: aws.String(availabilityZone), - TagSpecifications: []ec2Types.TagSpecification{subnetTagList}, - }) - if err != nil { - return nil, err - } - - return subnetResult.Subnet, nil - -} - -func (p *provider) getSubnets(vpcId string) ([]string, error) { - var subnets []string - result, err := p.ec2Client.DescribeSubnets(context.TODO(), &ec2.DescribeSubnetsInput{ - Filters: []ec2Types.Filter{ - { - Name: aws.String("vpc-id"), - Values: []string{ - *aws.String(vpcId), - }, - }, - }, - }) - - for i := range result.Subnets { - if *result.Subnets[i].MapPublicIpOnLaunch == true { - subnets = append(subnets, *result.Subnets[i].SubnetId) - } - } - return subnets, err -} - -func (p *provider) allowPublicIpOnSubnet(subnetId *string) error { - value := true - _, err := p.ec2Client.ModifySubnetAttribute(context.TODO(), &ec2.ModifySubnetAttributeInput{ - SubnetId: subnetId, - MapPublicIpOnLaunch: &ec2Types.AttributeBooleanValue{ - Value: &value, - }, - }) - - return err -} - -func (p *provider) associateSubnetToRouteTable(subnetId *string, routeTableId *string) error { - _, err := p.ec2Client.AssociateRouteTable(context.TODO(), &ec2.AssociateRouteTableInput{ - RouteTableId: routeTableId, - SubnetId: subnetId, - }) - - return err -} - -func (p *provider) createCluster(name string, roleArn *string, subnetIds []string) (*eksTypes.Cluster, error) { - createdCluster, err := p.eksClient.CreateCluster(context.TODO(), &eks.CreateClusterInput{ - Name: aws.String(name), - RoleArn: roleArn, - ResourcesVpcConfig: &eksTypes.VpcConfigRequest{ - SubnetIds: subnetIds, - }, - Tags: map[string]string{"Id": name}, - }) - - if err != nil { - return nil, err - } - - return createdCluster.Cluster, nil - -} - -func (p *provider) createNodeGroup(name string, roleArn *string, subnetIds []string, instanceType string) (*eksTypes.Nodegroup, error) { - tagKey := "kubernetes.io/cluster/" + name - createdNodeGroup, err := p.eksClient.CreateNodegroup(context.TODO(), &eks.CreateNodegroupInput{ - AmiType: "AL2_x86_64", - ClusterName: aws.String(name), - InstanceTypes: []string{instanceType}, - NodeRole: roleArn, - NodegroupName: aws.String(name), - Subnets: subnetIds, - Tags: map[string]string{tagKey: "owned"}, - }) - - if err != nil { - return nil, err - } - - return createdNodeGroup.Nodegroup, nil -} - -func (p *provider) createKubeConfigFile(dir workspace.ConfigDir, kubeConfig KubeConfig) (string, error) { - tmpl, err := template.New("kube-template").Parse(KubeConfigTemplate) - if err != nil { - console.Exit("error parsing template", err) - } - - path := dir.GetPath("kube.conf") - kubeConfigFile, err := os.Create(path) - defer kubeConfigFile.Close() - - if err != nil { - return "", err - } - return path, tmpl.Execute(kubeConfigFile, kubeConfig) -} - -func (p *provider) attachPolicies(roleName *string) error { - policies := [...]string{"arn:aws:iam::aws:policy/AmazonEKSClusterPolicy", - "arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy", - "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly", - "arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy", - } - - for _, policyName := range policies { - policyInput := &iam.AttachRolePolicyInput{ - RoleName: roleName, - PolicyArn: aws.String(policyName), - } - _, errAttach := p.iamClient.AttachRolePolicy(context.TODO(), policyInput) - if errAttach != nil { - fmt.Fprintf(p.w, "%v\n", errAttach.Error()) - return errAttach - } - } - - return nil -} - -func (p *provider) waitUntilResourceReady(f func() bool) { - timeout := time.After(20 * time.Minute) - tick := time.Tick(10 * time.Second) - l := console.GetMiddleware(func(input string) string { - return color.Colorize(color.Cyan, input) - }) - for { - select { - case <-tick: - if f() { - fmt.Fprintf(l, "\n") - return - } - fmt.Fprintf(l, ".") - case <-timeout: - fmt.Fprintf(p.w, "Timeout when checking if resource is ready\n") - return - } - } - -} - func RandString(n int) string { rand.Seed(time.Now().UnixNano()) b := make([]rune, n) diff --git a/cli/pkg/providers/minikube/minikube.go b/cli/pkg/providers/minikube/minikube.go index e2e86c1a6a..7a937972f3 100644 --- a/cli/pkg/providers/minikube/minikube.go +++ b/cli/pkg/providers/minikube/minikube.go @@ -44,11 +44,14 @@ func (p *provider) GetOverrides() template.Variables { } } -func (p *provider) Provision(providerConfig map[string]string, dir workspace.ConfigDir) (kube.KubeCtx, error) { - if err := checkInstallation(); err != nil { - return kube.KubeCtx{}, err - } +func (p *provider) CheckEnvironment() error { + return workspace.CheckBinaries([]string{"minikube"}) +} +func (p *provider) PreInstallation(workspace string) (string, error) { + return workspace, nil +} +func (p *provider) Provision(providerConfig map[string]string, dir workspace.ConfigDir) (kube.KubeCtx, error) { if err := p.startCluster(providerConfig); err != nil { return kube.KubeCtx{}, err } @@ -63,11 +66,6 @@ func (p *provider) Provision(providerConfig map[string]string, dir workspace.Con return ctx, nil } -func checkInstallation() error { - _, err := exec.LookPath(minikube) - return err -} - func (p *provider) startCluster(providerConfig map[string]string) error { minikubeDriver := getArg(providerConfig, "driver", "docker") minikubeCpus := getArg(providerConfig, "cpus", "4") diff --git a/cli/pkg/providers/provider.go b/cli/pkg/providers/provider.go index 84e72285c9..a50841b76a 100644 --- a/cli/pkg/providers/provider.go +++ b/cli/pkg/providers/provider.go @@ -21,6 +21,8 @@ const ( type Provider interface { Provision(providerConfig map[string]string, dir workspace.ConfigDir) (kube.KubeCtx, error) GetOverrides() template.Variables + CheckEnvironment() error + PreInstallation(workspace string) (string, error) PostInstallation(providerConfig map[string]string, namespace string, dir workspace.ConfigDir) error } diff --git a/cli/pkg/workspace/init.go b/cli/pkg/workspace/init.go index e6751f1345..c9286dec60 100644 --- a/cli/pkg/workspace/init.go +++ b/cli/pkg/workspace/init.go @@ -4,6 +4,7 @@ import ( "cli/pkg/workspace/template" "fmt" "os" + "os/exec" "path/filepath" "github.com/spf13/viper" @@ -63,8 +64,17 @@ func Create(path string, data template.Variables) (ConfigDir, error) { viper.AddConfigPath(getConfigPath(path)) viper.SetConfigType("yaml") viper.SetConfigName(cliConfigFileName) - // Init viper config err := viper.WriteConfigAs(filepath.Join(path, cliConfigFileName)) return ConfigDir{Path: path}, err } + +func CheckBinaries(binaryList []string) error { + for _, binary := range binaryList { + _, err := exec.LookPath(binary) + if err != nil { + return err + } + } + return nil +} diff --git a/docs/docs/getting-started/installation/aws.md b/docs/docs/getting-started/installation/aws.md index 98951f8387..42903b2118 100644 --- a/docs/docs/getting-started/installation/aws.md +++ b/docs/docs/getting-started/installation/aws.md @@ -97,40 +97,19 @@ If you want to use Airy Core with auto-generated HTTPS certificates, refer to th ::: -Now you can run this command, which will create `Airy Core` in your AWS account: +Now you can run the following command in your Airy workspace, which will create a Kubernetes cluster with `Airy Core` in your AWS account: ```bash airy create --provider=aws ``` -You can also use an existing VPC, without creating additional VPC resources: - -```bash -airy create --provider aws --provider-config vpcId=myExistingVpcId -``` - -By default the command creates an AWS NodeGroup with two `c5.xlarge` instances. -For customizing the instance type run: - -```bash -airy create --provider aws --provider-config instanceType=c5.large -``` - This will execute the following actions: -1. Create the `my-airy` directory and populate it with the configuration that - the CLI will need. All subsequent commands need to either be run from this - directory or use the `--workspace` flag. -2. Start an Airy Core cluster in your AWS account. -3. Print URLs for accessing the UIs and APIs (see recording). - -By default, the installation will create a single EC2 Kubernetes node, as part -of a single node group. You can scale your EKS cluster by adding more nodes or -node groups through the AWS web console or the AWS CLI. - -import Script from "@site/src/components/Script"; - - +1. Download two Terraform modules inside the `terraform` directory in the workspace. First module is for creating the EKS cluster, the second is for deploying `Airy Core` on that cluster. +2. Run the `install.sh` bash script inside the `terraform` directory. +3. Create an EKS cluster in your AWS account (applying the `aws-eks` state). +4. Deploy `Airy Core` in that cluster (applying the `airy-core` state). +5. Print URLs for accessing the UI and API. If you want to customize your `Airy Core` instance please see our [Configuration Section](configuration.md). @@ -138,14 +117,14 @@ Section](configuration.md). After the installation, you can also interact with the components of `Airy Core` with the [kubectl](https://kubernetes.io/docs/tasks/tools/) command line utility. You can find the kubeconfig of your Airy Core instance in -`~/.airy/kube.conf`. +`WORKSPACE/terraform/kube.conf`. ### Verification After the installation process, you can verify that all the pods are running with ``` -kubectl get pods --kubeconfig ./kube.conf +kubectl get pods --kubeconfig .terraform/kube.conf ``` ### Common issues @@ -320,111 +299,4 @@ For more details please see our [Configuration Section](configuration.md). ## Uninstall Airy Core -You can remove the Airy Core AWS installation by deleting the Airy Core AWS resources with the [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html). - -Retrieve the ID of the installation, in this case `my-airy` is the name of the installation that was passed on the creation process: - -```sh -cd my-airy -id=$(cat cli.yaml | grep contextname | awk '{ print $2; }') -echo ${id} -``` - -Make sure that the ID was printed back to you, before proceeding with the deletion of the resources. - -Delete the EKS nodegroup: - -```sh -node_group_name=$(aws eks list-nodegroups --cluster-name ${id} --query 'nodegroups[0]' --output text) -aws eks delete-nodegroup --nodegroup-name $node_group_name --cluster-name ${id} -``` - -Delete the EKS cluster: - -```sh -while ! aws eks delete-cluster --name ${id} -do - echo "Waiting for EKS nodegroup to be deleted..." - sleep 15 -done -``` - -Delete the created IAM Role: - -```sh -for policy in $(aws iam list-attached-role-policies --role-name ${id} --query 'AttachedPolicies[].PolicyArn' --output text) -do - aws iam detach-role-policy --policy-arn ${policy} --role-name ${id} -done -aws iam delete-role --role-name ${id} -``` - -If you used an existing VPC, then you already removed `Airy Core` from your infrastructure and there is no need to run any additional commands. -If not, you can proceed with removing all the VPC resources, created exclusively for `Airy Core`. - -Get the ID of the VPC: - -```sh -vpc_id=$(aws ec2 describe-vpcs --filters Name=tag:Name,Values=${id} --query 'Vpcs[0].VpcId' --output text) -``` - -Delete all the load-balancers: - -```sh -for loadbalancer in $(aws elb describe-load-balancers --query "LoadBalancerDescriptions[?VPCId=='${vpc_id}'].LoadBalancerName" --output text) -do - aws elb delete-load-balancer --load-balancer-name ${loadbalancer} -done -``` - -Delete all used network interfaces (iIf the command fails, check if all the `loadbalancers` are deleted and run the previous command one more time): - -```sh -for interface in $(aws ec2 describe-network-interfaces --filters Name=vpc-id,Values=${vpc_id} --query 'NetworkInterfaces[].NetworkInterfaceId' --output text) -do - aws ec2 delete-network-interface --network-interface-id ${interface} -done -``` - -Delete the security groups created by the load-balancers: - -```sh -for group in $(aws ec2 describe-security-groups --filters Name=vpc-id,Values=${vpc_id} --filters Name=tag-key,Values=kubernetes.io/cluster/${id} --query 'SecurityGroups[].GroupId' --output text) -do - aws ec2 delete-security-group --group-id ${group} -done -``` - -Delete all the subnets in the VPC: - -```sh -for subnet in $(aws ec2 describe-subnets --filters Name=vpc-id,Values=${vpc_id} --query 'Subnets[].SubnetId' --output text) -do - aws ec2 delete-subnet --subnet-id ${subnet} -done -``` - -Delete the gateways and the routes in the VPC: - -```sh -for gateway in $(aws ec2 describe-internet-gateways --filters Name=attachment.vpc-id,Values=${vpc_id} --query 'InternetGateways[].InternetGatewayId' --output text) -do - aws ec2 detach-internet-gateway --internet-gateway-id ${gateway} --vpc-id ${vpc_id} - aws ec2 delete-internet-gateway --internet-gateway-id ${gateway} -done -``` - -Delete the route tables (the command will always fail for the default route table, but you can still delete the VPC in the next step): - -```sh -for route_table in $(aws ec2 describe-route-tables --filters Name=vpc-id,Values=${vpc_id} --query 'RouteTables[].RouteTableId' --output text) -do - aws ec2 delete-route-table --route-table-id ${route_table} -done -``` - -At the end, delete the VPC: - -```sh -aws ec2 delete-vpc --vpc-id ${vpc_id} -``` +To uninstall `Airy Core` from AWS, run the `uninstall.sh` script located in the `WORKSPACE/terraform` directory. This script will run `terraform destroy` on both the `kubernetes` (EKS) and the `airy-core` state. diff --git a/docs/docs/getting-started/installation/terraform.md b/docs/docs/getting-started/installation/terraform.md index 60cbd78f39..fbceb37f09 100644 --- a/docs/docs/getting-started/installation/terraform.md +++ b/docs/docs/getting-started/installation/terraform.md @@ -3,52 +3,148 @@ title: Run Airy Core on AWS with Terraform sidebar_label: Terraform --- + +Create a cluster and run Airy Core using Terraform. + + +The goal of this document is to provide a step-by-step guide to setting up `Airy Core` on a Kubernetes Cluster using the infrastructure-as-code tool [Terraform](https://www.terraform.io/). Terraform takes care of provisioning, updating, and cleaning up virtual resources. + +:::note + +Currently, we only support the AWS Elastic Kubernetes Service (AWS-EKS) as a provider. Terraform modules for other providers (and on different architectures) such as Google Cloud and Digital Ocean will soon be added. + +::: + ## Requirements -- [Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli) v1.0.0+ -- [Airy CLI](https://airy.co/docs/core/cli/introduction) v0.34.0+ -- [SSH key](https://www.ssh.com/academy/ssh/keygen) in `~/.ssh/id_rsa.pub` +- [Terraform](https://learn.hashicorp.com/tutorials/terraform/install-cli) v1.2.0+ - [Kubectl](https://kubernetes.io/docs/tasks/tools/) (optional) -## Create the Kubernetes cluster +## Architecture + +The local file structure for the installation is as follows: + +``` +[Airy Workspace Directory] + airy.yaml + cli.yaml + /[INSTALLATION DIRECTORY] + /airy-core + main.tf + variables.tf + outputs.tf + /[PROVIDER] + main.tf + variables.tf + outputs.tf +``` + +The installation takes place in two steps, each in a separate Terraform environment organized by directories: + +- 1. `/[PROVIDER]` (default = `aws-eks`) - where you create the cluster. +- 2. `/airy-core`- where `Airy Core` is installed on the cluster. + +In each directory, the `main.tf` is the root module of a remote parent [module](https://www.terraform.io/language/modules/syntax) of the same name in our GitHub [repository](https://github.com/airyhq/airy/tree/develop/infrastructure/terraform/modules) (airy/infrastructure/terraform/modules). + +## Install step by step + +:::note + +When you run a cloud installation with the Airy CLI with `airy create --provider cloud-provider`, the CLI will run all the following steps in a sequence. Currently, only the AWS EKS (aws-eks) provider is supported. + +If you already have a cluster installed without Terraform, i.e. via [Helm](../installation/helm.md), skip Step 4 and place the Kubernetes config file in the installation directory. Remember to specify the location of this file in the `main.tf` of `airy-core`. + +::: + +### 1. Create Airy Workspace + +Create a directory with an `airy.yaml` and `cli.yaml` file. If you skip this step, the CLI will create it for you. + +### 2. Create the installation directory inside Airy Workspace + +```sh +mkdir terraform +``` + +### 3. Set up files inside Installation Directory + +Copy/Download `airy-core` and the relevant provider directory from [airy/infrastructure/terraform/install](https://github.com/airyhq/airy/tree/develop/infrastructure/terraform/install). + +This can be done by `git clone git@github.com:airyhq/airy.git` and then moving the relevant files. +Or grab the files inside your installation directory directly (and select the provider directory). + +``` +$ cd terraform +$ svn export https://github.com/airyhq/airy/trunk/infrastructure/terraform/install/airy-core +$ svn export https://github.com/airyhq/airy/trunk/infrastructure/terraform/install/[PROVIDER] +``` -In case you already have a cluster running you can skip to the next section. +### 4. Create Kubernetes Cluster -### Amazon Web Services +:::note -You need to provide Terraform with the AWS credentials for your IAM Role. If -you don't know how to create one, [follow these -instructions](https://aws.amazon.com/premiumsupport/knowledge-center/create-access-key/). -They have to be put into a `terraform.tfvars` file in `terraform/kubernetes` that looks contains: +Every provider has its own requirements for creating and accessing the Kubernetes cluster. For AWS check the following [requirements](../installation/aws#configure-aws). + +::: + +Change into your `/[PROVIDER]` directory. ``` -aws_access_key = "" -aws_secret_key = "" +cd [PROVIDER] +$ terraform init +$ terraform apply ``` -If you want to deploy the EKS cluster in your existing VPC you have to override the -`vpc_id`, `subnets` and `fargate_subnets` variables with the outputs from your -vpc and set `create_vpc=false` in the Airy Core module. +This will ask for the provider environmental variables, in the case of AWS: `aws_profile` and `aws_region`. You can provide these values when prompted on the Command Line or do one of the following alternatives: + +- export them as AWS_REGION and AWS_PROFILE, +- export them as TF_VAR_aws_region and TF_VAR_aws_profile, +- store them, in a `terraform.tfvars` file in the same provider directory. + +This step will take time, depending on the provider and architecture. Provisioning a full Kubernetes Cluster takes between 5 - 10 mins. On completion, it will output a `kube.conf` in the installation directory. + +### 5. Install Airy on Cluster ``` -terraform init -terraform apply +$ cd ../airy-core +$ terraform init +$ terraform apply ``` -## Install Airy Helm chart +Terraform will look for a Kube Config to connect to the cluster provisioned in Step 4. (or which you already have provisioned), and `helm` install `airy-core` onto it. -After the Kubernetes cluster has been created we can deploy the Airy Helm chart -to it. Change to the `terraform/main` directory and make sure the `.kubeconfig` -file is there. +This will output a link to your UI, API, and source URLs. -You can [configure](https://airy.co/docs/core/getting-started/installation/configuration) your instance by making changes to `infrastructure/terraform/main/files/values.yaml` +### 6. Verify the installation -If you want to deploy the stateless apps with AWS Fargate you can add -`workerType: fargate` to the `values.yaml` +Connect to your new instance using `kube.conf` file inside your installation directory. -Finally, you need to initialize the Terraform workspace and run apply. +`kubectl get pods --kubeconfig ./kube.conf` + +To uninstall, simply run `terraform destroy` in the `airy-core` directory first, and then once again in the `PROVIDER` directory. + +## Uninstall step by step + +For uninstalling Airy you need to destroy both of the environments that you have created. First destroy the `airy-core` environment: ``` -terraform init -terraform apply +$ cd ../airy-core +$ terraform destroy +``` + +Then destroy the PROVIDER environment: + ``` +cd [PROVIDER] +$ terraform destroy +``` + +## Install and uninstall using a script + +In the [airy/infrastructure/terraform/install](https://github.com/airyhq/airy/tree/develop/infrastructure/terraform/install), there are scripts: + +- `install.sh` +- `uninstall.sh` +- `install.flags` + +These scripts provide a simple interface for the installation/uninstallation process. They are also used by the Airy CLI and are useful to check the file structure as well as ensure correct install/uninstall order. diff --git a/docs/sidebars.js b/docs/sidebars.js index ee134e3c9c..824602ceb1 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -9,6 +9,7 @@ module.exports = { 'getting-started/installation/introduction', 'getting-started/installation/minikube', 'getting-started/installation/aws', + 'getting-started/installation/terraform', 'getting-started/installation/helm', 'getting-started/installation/configuration', 'getting-started/installation/security', diff --git a/go.mod b/go.mod index 799092b576..e316d56400 100644 --- a/go.mod +++ b/go.mod @@ -36,6 +36,8 @@ require ( github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/BurntSushi/toml v1.1.0 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect + cloud.google.com/go/iam v0.3.0 // indirect + cloud.google.com/go/storage v1.22.1 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver v1.5.0 // indirect github.com/Masterminds/semver/v3 v3.1.1 // indirect @@ -59,6 +61,7 @@ require ( github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect github.com/containerd/containerd v1.6.6 // indirect github.com/cyphar/filepath-securejoin v0.2.3 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/cli v20.10.17+incompatible // indirect github.com/docker/distribution v2.8.1+incompatible // indirect @@ -82,6 +85,8 @@ require ( github.com/go-openapi/swag v0.21.1 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt v3.2.2+incompatible + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/gnostic v0.6.9 // indirect @@ -92,11 +97,17 @@ require ( github.com/googleapis/gnostic v0.5.5 // indirect github.com/gosuri/uitable v0.0.4 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect + github.com/googleapis/gax-go/v2 v2.4.0 // indirect + github.com/gorilla/mux v1.8.0 + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-getter v1.6.2 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-version v1.1.0 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/huandu/xstrings v1.3.2 // indirect github.com/iancoleman/strcase v0.2.0 // indirect - github.com/imdario/mergo v0.3.13 // indirect + github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmoiron/sqlx v1.3.5 // indirect @@ -168,6 +179,10 @@ require ( golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20220630174209-ad1d48641aa7 // indirect + github.com/ulikunitz/xz v0.5.8 // indirect + github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c // indirect + go.opencensus.io v0.23.0 // indirect + google.golang.org/api v0.86.0 // indirect google.golang.org/grpc v1.47.0 // indirect google.golang.org/protobuf v1.28.0 // indirect gopkg.in/gorp.v1 v1.7.2 // indirect diff --git a/go.sum b/go.sum index 9e1b56831e..ef450e4cc0 100644 --- a/go.sum +++ b/go.sum @@ -218,6 +218,7 @@ github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:o github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.34.9/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= github.com/aws/aws-sdk-go v1.37.29 h1:OlePDQg2idesIZKPy8egpN51RIF3DHhtREnvgNpTZhE= github.com/aws/aws-sdk-go v1.37.29/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.44.21/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= @@ -267,6 +268,7 @@ github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= @@ -302,6 +304,7 @@ github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1 github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= +github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= @@ -794,6 +797,7 @@ github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= @@ -856,6 +860,7 @@ github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-getter v1.6.2/go.mod h1:IZCrswsZPeWv9IkVnLElzRU/gz/QPi6pZHn4tv6vbwA= github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -870,6 +875,7 @@ github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es github.com/hashicorp/go-rootcerts v1.0.0 h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= @@ -879,6 +885,7 @@ github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1 github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -980,6 +987,7 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7 h1:0hzRabrMN4tSTvMfnL3SCv1ZGeAP23ynzodBgaHeMeg= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= @@ -1066,6 +1074,7 @@ github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vq github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= @@ -1452,6 +1461,7 @@ github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1 github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= +github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0= @@ -1708,6 +1718,7 @@ golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220524220425-1d687d428aca h1:xTaFYiPROfpPhqrfTIDXj0ri1SpfueYT951s4bAuDO8= golang.org/x/net v0.0.0-20220524220425-1d687d428aca/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220630215102-69896b714898/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1734,6 +1745,7 @@ golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401 h1:zwrSfklXn0gxyLRX/aR+q6cgHbV/ItVyzbPlbA+dkAw= golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220630143837-2104d58473e0/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1883,6 +1895,11 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbuf golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -2047,6 +2064,7 @@ google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69 google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.86.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -2154,6 +2172,7 @@ google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljW google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220630174209-ad1d48641aa7/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -2223,6 +2242,7 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= diff --git a/go_repositories.bzl b/go_repositories.bzl index e3a7d9c180..4226b71bcc 100644 --- a/go_repositories.bzl +++ b/go_repositories.bzl @@ -310,6 +310,13 @@ def go_repositories(): sum = "h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70=", version = "v1.0.0", ) + go_repository( + name = "com_github_bgentry_go_netrc", + build_file_proto_mode = "disable_global", + importpath = "github.com/bgentry/go-netrc", + sum = "h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas=", + version = "v0.0.0-20140422174119-9fd32a8b3d3d", + ) go_repository( name = "com_github_buger_jsonparser", @@ -398,6 +405,13 @@ def go_repositories(): sum = "h1:7aWHqerlJ41y6FOsEUvknqgXnGmJyJSbjhAWq5pO4F8=", version = "v0.0.0-20160711120539-c6fed771bfd5", ) + go_repository( + name = "com_github_cheggaaa_pb", + build_file_proto_mode = "disable_global", + importpath = "github.com/cheggaaa/pb", + sum = "h1:wIkZHkNfC7R6GI5w7l/PdAdzXzlrbcI3p8OAlnkTsnc=", + version = "v1.0.27", + ) go_repository( name = "com_github_chzyer_logex", @@ -703,18 +717,11 @@ def go_repositories(): version = "v1.1.1", ) go_repository( - name = "com_github_daviddengcn_go_colortext", - build_file_proto_mode = "disable_global", - importpath = "github.com/daviddengcn/go-colortext", - sum = "h1:uVsMphB1eRx7xB1njzL3fuMdWRN8HtVzoUOItHMwv5c=", - version = "v0.0.0-20160507010035-511bcaf42ccd", - ) - go_repository( - name = "com_github_denisenkom_go_mssqldb", + name = "com_github_elazarl_goproxy", build_file_proto_mode = "disable_global", - importpath = "github.com/denisenkom/go-mssqldb", - sum = "h1:RSohk2RsiZqLZ0zCjtfn3S4Gp4exhpBWHyQ7D0yGjAk=", - version = "v0.9.0", + importpath = "github.com/elazarl/goproxy", + sum = "h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc=", + version = "v0.0.0-20180725130230-947c36da3153", ) go_repository( @@ -818,13 +825,6 @@ def go_repositories(): version = "v1.0.0", ) - go_repository( - name = "com_github_elazarl_goproxy", - build_file_proto_mode = "disable_global", - importpath = "github.com/elazarl/goproxy", - sum = "h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc=", - version = "v0.0.0-20180725130230-947c36da3153", - ) go_repository( name = "com_github_emicklei_go_restful", build_file_proto_mode = "disable_global", @@ -1296,8 +1296,8 @@ def go_repositories(): name = "com_github_googleapis_enterprise_certificate_proxy", build_file_proto_mode = "disable_global", importpath = "github.com/googleapis/enterprise-certificate-proxy", - sum = "h1:7MYGT2XEMam7Mtzv1yDUYXANedWvwk3HKkR3MyGowy8=", - version = "v0.0.0-20220520183353-fd19c99a87aa", + sum = "h1:zO8WHNx/MYiAKJ3d5spxZXZE6KHmIQGQcAzwUzV7qQw=", + version = "v0.1.0", ) go_repository( @@ -1425,6 +1425,14 @@ def go_repositories(): sum = "h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=", version = "v0.5.2", ) + go_repository( + name = "com_github_hashicorp_go_getter", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/go-getter", + sum = "h1:7jX7xcB+uVCliddZgeKyNxv0xoT7qL5KDtH7rU4IqIk=", + version = "v1.6.2", + ) + go_repository( name = "com_github_hashicorp_go_hclog", build_file_proto_mode = "disable_global", @@ -1490,6 +1498,20 @@ def go_repositories(): sum = "h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE=", version = "v1.0.1", ) + go_repository( + name = "com_github_hashicorp_go_safetemp", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/go-safetemp", + sum = "h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo=", + version = "v1.0.0", + ) + go_repository( + name = "com_github_hashicorp_go_version", + build_file_proto_mode = "disable_global", + importpath = "github.com/hashicorp/go-version", + sum = "h1:bPIoEKD27tNdebFGGxxYwcL4nepeY4j1QP23PFRGzg0=", + version = "v1.1.0", + ) go_repository( name = "com_github_hashicorp_golang_lru", @@ -1700,10 +1722,9 @@ def go_repositories(): name = "com_github_kortschak_utter", build_file_proto_mode = "disable_global", importpath = "github.com/kortschak/utter", - sum = "h1:AJVccwLrdrikvkH0aI5JKlzZIORLpfMeGBQ5tHfIXis=", - version = "v1.0.1", + sum = "h1:MiK62aErc3gIiVEtyzKfeOHgW7atJb5g/KNX5m3c2nQ=", + version = "v1.11.2", ) - go_repository( name = "com_github_kr_fs", build_file_proto_mode = "disable_global", @@ -2664,6 +2685,13 @@ def go_repositories(): sum = "h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA=", version = "v0.0.0-20210104183010-2eb08e3e575f", ) + go_repository( + name = "com_github_ulikunitz_xz", + build_file_proto_mode = "disable_global", + importpath = "github.com/ulikunitz/xz", + sum = "h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ=", + version = "v0.5.8", + ) go_repository( name = "com_github_xeipuuv_gojsonpointer", @@ -2832,6 +2860,13 @@ def go_repositories(): sum = "h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=", version = "v1.0.0-20201130134442-10cb98267c6c", ) + go_repository( + name = "in_gopkg_cheggaaa_pb_v1", + build_file_proto_mode = "disable_global", + importpath = "gopkg.in/cheggaaa/pb.v1", + sum = "h1:kJdccidYzt3CaHD1crCFTS1hxyhSi059NhOFUf03YFo=", + version = "v1.0.27", + ) go_repository( name = "in_gopkg_errgo_v2", @@ -3341,8 +3376,8 @@ def go_repositories(): name = "org_golang_google_api", build_file_proto_mode = "disable_global", importpath = "google.golang.org/api", - sum = "h1:NMB9J4cCxs9xEm+1Z9QiO3eFvn7EnQj3Eo3hN6ugVlg=", - version = "v0.84.0", + sum = "h1:ZAnyOHQFIuWso1BodVfSaRyffD74T9ERGFa3k1fNk/U=", + version = "v0.86.0", ) go_repository( diff --git a/infrastructure/terraform/install/airy-core/main.tf b/infrastructure/terraform/install/airy-core/main.tf index c39172b814..a12865c304 100644 --- a/infrastructure/terraform/install/airy-core/main.tf +++ b/infrastructure/terraform/install/airy-core/main.tf @@ -18,15 +18,11 @@ provider "kubernetes" { module "my_airy_core" { source = "github.com/airyhq/airy.git/infrastructure/terraform/modules/core" - values_yaml = data.template_file.airy_yaml.rendered + values_yaml = file("${var.airy_workspace}/airy.yaml") resources_yaml = file("${path.module}/files/defaultResourceLimits.yaml") } -data "template_file" "airy_yaml" { - template = file("${var.airy_workspace}/airy.yaml") - - vars = { - host = var.host - hosted_zone = var.hosted_zone - } +resource "local_file" "cli_yaml" { + filename = "${var.airy_workspace}/cli.yaml" + content = "apihost: http://${module.airy_core.loadbalancer}\n" } diff --git a/infrastructure/terraform/install/airy-core/outputs.tf b/infrastructure/terraform/install/airy-core/outputs.tf index 66f4adad5c..7480452749 100644 --- a/infrastructure/terraform/install/airy-core/outputs.tf +++ b/infrastructure/terraform/install/airy-core/outputs.tf @@ -1,4 +1,9 @@ -output "loadbalancer" { - description = "The URL for the load balancer of the cluster. Used to access the UI via the browser" - value = module.my_airy_core.loadbalancer -} \ No newline at end of file +output "API" { + description = "The URL where the API and the UI can be reached" + value = module.airy_core.loadbalancer +} + +output "Info" { + description = "More information" + value = "For more information about the AWS provider visit https://airy.co/docs/core/getting-started/installation/aws" +} diff --git a/infrastructure/terraform/install/airy-core/variables.tf b/infrastructure/terraform/install/airy-core/variables.tf index 41d8e493d9..14bcec609f 100644 --- a/infrastructure/terraform/install/airy-core/variables.tf +++ b/infrastructure/terraform/install/airy-core/variables.tf @@ -3,14 +3,6 @@ variable "core_id" { description = "The name of the cluster " } -variable "host" { - default = "" -} - -variable "hosted_zone" { - default = "airy.co" -} - variable "airy_workspace" { type = string default = "../.." diff --git a/tools/update-deps/go.mod b/tools/update-deps/go.mod index 68f1b8c005..0f98be1a8a 100644 --- a/tools/update-deps/go.mod +++ b/tools/update-deps/go.mod @@ -2,6 +2,6 @@ module github.com/tools/update-deps go 1.18 -require golang.org/x/mod v0.5.1 +require golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 require golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect diff --git a/tools/update-deps/go.sum b/tools/update-deps/go.sum index b38eb3d6ca..c4806b3a6a 100644 --- a/tools/update-deps/go.sum +++ b/tools/update-deps/go.sum @@ -4,6 +4,8 @@ golang.org/x/mod v0.4.1 h1:Kvvh58BN8Y9/lBi7hTekvtMpm07eUZ0ck5pRHpsMWrY= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= From 6659e71320f79f6714e834dc69b20a50d9e5bbe5 Mon Sep 17 00:00:00 2001 From: Christoph Proeschel Date: Fri, 5 Aug 2022 10:11:21 +0200 Subject: [PATCH 35/92] [#3533] Connect whatsapp channels (#3537) --- backend/sources/whatsapp/connector/BUILD | 49 ++++++ .../sources/whatsapp/ChannelsController.java | 103 ++++++++++++ .../airy/core/sources/whatsapp/Connector.java | 58 +++++++ .../co/airy/core/sources/whatsapp/Stores.java | 150 ++++++++++++++++++ .../sources/whatsapp/WebhookController.java | 72 +++++++++ .../airy/core/sources/whatsapp/api/Api.java | 99 ++++++++++++ .../sources/whatsapp/api/ApiException.java | 15 ++ .../api/model/LongLivingUserAccessToken.java | 14 ++ .../sources/whatsapp/dto/Conversation.java | 21 +++ .../whatsapp/dto/SendMessageRequest.java | 18 +++ .../payload/ConnectChannelRequestPayload.java | 22 +++ .../DisconnectChannelRequestPayload.java | 16 ++ .../whatsapp/ChannelsControllerTest.java | 142 +++++++++++++++++ .../src/test/resources/test.properties | 5 + docs/docs/api/endpoints/channels.md | 6 + docs/docs/api/endpoints/components.md | 2 +- docs/docs/api/endpoints/connect-whatsapp.mdx | 35 ++++ docs/docs/sources/whatsapp-cloud.md | 128 +++++++++++++++ docs/sidebars.js | 1 + .../charts/sources/charts/whatsapp/Chart.yaml | 5 + .../whatsapp/templates/deployments.yaml | 129 +++++++++++++++ .../charts/whatsapp/templates/service.yaml | 31 ++++ .../sources/charts/whatsapp/values.yaml | 9 ++ .../charts/components/templates/ingress.yaml | 14 ++ .../ingress-controller/templates/ngrok.yaml | 7 + .../provisioning/kafka-create-topics.yaml | 2 + .../schema/source/SourceWhatsappEvents.java | 18 +++ 27 files changed, 1170 insertions(+), 1 deletion(-) create mode 100644 backend/sources/whatsapp/connector/BUILD create mode 100644 backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/ChannelsController.java create mode 100644 backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/Connector.java create mode 100644 backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/Stores.java create mode 100644 backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/WebhookController.java create mode 100644 backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/api/Api.java create mode 100644 backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/api/ApiException.java create mode 100644 backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/api/model/LongLivingUserAccessToken.java create mode 100644 backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/dto/Conversation.java create mode 100644 backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/dto/SendMessageRequest.java create mode 100644 backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/payload/ConnectChannelRequestPayload.java create mode 100644 backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/payload/DisconnectChannelRequestPayload.java create mode 100644 backend/sources/whatsapp/connector/src/test/java/co/airy/core/sources/whatsapp/ChannelsControllerTest.java create mode 100644 backend/sources/whatsapp/connector/src/test/resources/test.properties create mode 100644 docs/docs/api/endpoints/connect-whatsapp.mdx create mode 100644 docs/docs/sources/whatsapp-cloud.md create mode 100644 infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/Chart.yaml create mode 100644 infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/templates/deployments.yaml create mode 100644 infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/templates/service.yaml create mode 100644 infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/values.yaml create mode 100644 lib/java/kafka/schema/src/main/java/co/airy/kafka/schema/source/SourceWhatsappEvents.java diff --git a/backend/sources/whatsapp/connector/BUILD b/backend/sources/whatsapp/connector/BUILD new file mode 100644 index 0000000000..bd55606ce9 --- /dev/null +++ b/backend/sources/whatsapp/connector/BUILD @@ -0,0 +1,49 @@ +load("@com_github_airyhq_bazel_tools//lint:buildifier.bzl", "check_pkg") +load("//tools/build:springboot.bzl", "springboot") +load("//tools/build:junit5.bzl", "junit5") +load("//tools/build:container_release.bzl", "container_release") + +app_deps = [ + "//backend:base_app", + "//:springboot_actuator", + "//backend/model/channel", + "//backend/model/message", + "//backend/model/metadata", + "//lib/java/uuid", + "//lib/java/log", + "//lib/java/tracking", + "//lib/java/spring/web:spring-web", + "//lib/java/spring/auth:spring-auth", + "//lib/java/spring/kafka/core:spring-kafka-core", + "//lib/java/spring/kafka/streams:spring-kafka-streams", + "//lib/java/kafka/schema:source-whatsapp-events", +] + +springboot( + name = "connector", + srcs = glob(["src/main/java/**/*.java"]), + main_class = "co.airy.spring.core.AirySpringBootApplication", + deps = app_deps, +) + +[ + junit5( + size = "medium", + file = file, + resources = glob(["src/test/resources/**/*"]), + deps = [ + ":app", + "//backend:base_test", + "//lib/java/kafka/test:kafka-test", + "//lib/java/spring/test:spring-test", + ] + app_deps, + ) + for file in glob(["src/test/java/**/*Test.java"]) +] + +container_release( + registry = "ghcr.io/airyhq/sources", + repository = "whatsapp-connector", +) + +check_pkg(name = "buildifier") diff --git a/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/ChannelsController.java b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/ChannelsController.java new file mode 100644 index 0000000000..c102518d35 --- /dev/null +++ b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/ChannelsController.java @@ -0,0 +1,103 @@ +package co.airy.core.sources.whatsapp; + +import co.airy.avro.communication.Channel; +import co.airy.avro.communication.ChannelConnectionState; +import co.airy.avro.communication.Metadata; +import co.airy.core.sources.whatsapp.api.Api; +import co.airy.core.sources.whatsapp.api.ApiException; +import co.airy.core.sources.whatsapp.payload.ConnectChannelRequestPayload; +import co.airy.core.sources.whatsapp.payload.DisconnectChannelRequestPayload; +import co.airy.model.channel.dto.ChannelContainer; +import co.airy.model.metadata.MetadataKeys; +import co.airy.model.metadata.dto.MetadataMap; +import co.airy.spring.web.payload.RequestErrorResponsePayload; +import co.airy.uuid.UUIDv5; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.validation.Valid; +import java.util.List; + +import static co.airy.model.channel.ChannelPayload.fromChannelContainer; +import static co.airy.model.metadata.MetadataRepository.newChannelMetadata; + +@RestController +public class ChannelsController { + + private final Api api; + private final Stores stores; + + public ChannelsController(Api api, Stores stores) { + this.api = api; + this.stores = stores; + } + + @PostMapping("/channels.whatsapp.connect") + ResponseEntity connectWhatsapp(@RequestBody @Valid ConnectChannelRequestPayload payload) { + final String token = payload.getUserToken(); + final String phoneNumber = payload.getPhoneNumber(); + + final String channelId = UUIDv5.fromNamespaceAndName("whatsapp", phoneNumber).toString(); + + try { + final String longLivingUserToken = api.exchangeToLongLivingUserAccessToken(token); + + final ChannelContainer container = ChannelContainer.builder() + .channel( + Channel.newBuilder() + .setId(channelId) + .setConnectionState(ChannelConnectionState.CONNECTED) + .setSource("whatsapp") + .setSourceChannelId(phoneNumber) + .setToken(longLivingUserToken) + .build() + ) + .metadataMap(MetadataMap.from(List.of( + newChannelMetadata(channelId, MetadataKeys.ChannelKeys.NAME, payload.getName()) + ))).build(); + + if (payload.getImageUrl() != null) { + final Metadata metadata = newChannelMetadata(channelId, MetadataKeys.ChannelKeys.IMAGE_URL, payload.getImageUrl()); + container.getMetadataMap().put(metadata.getKey(), metadata); + } + + stores.storeChannelContainer(container); + + return ResponseEntity.ok(fromChannelContainer(container)); + } catch (ApiException e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new RequestErrorResponsePayload(e.getMessage())); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).build(); + } + } + + @PostMapping("/channels.whatsapp.disconnect") + ResponseEntity disconnect(@RequestBody @Valid DisconnectChannelRequestPayload payload) { + final String channelId = payload.getChannelId().toString(); + + final Channel channel = stores.getChannelsStore().get(channelId); + + if (channel == null) { + return ResponseEntity.notFound().build(); + } + + if (channel.getConnectionState().equals(ChannelConnectionState.DISCONNECTED)) { + return ResponseEntity.noContent().build(); + } + + channel.setConnectionState(ChannelConnectionState.DISCONNECTED); + channel.setToken(null); + + try { + stores.storeChannel(channel); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).build(); + } + + return ResponseEntity.noContent().build(); + } + +} diff --git a/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/Connector.java b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/Connector.java new file mode 100644 index 0000000000..0edcac0c8c --- /dev/null +++ b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/Connector.java @@ -0,0 +1,58 @@ +package co.airy.core.sources.whatsapp; + +import co.airy.avro.communication.Message; +import co.airy.core.sources.whatsapp.api.Api; +import co.airy.core.sources.whatsapp.dto.SendMessageRequest; +import co.airy.log.AiryLoggerFactory; +import co.airy.spring.auth.IgnoreAuthPattern; +import co.airy.spring.web.filters.RequestLoggingIgnorePatterns; +import co.airy.tracking.RouteTracking; +import org.apache.avro.specific.SpecificRecordBase; +import org.apache.kafka.streams.KeyValue; +import org.slf4j.Logger; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +@Component +public class Connector { + private static final Logger log = AiryLoggerFactory.getLogger(Connector.class); + private final long messageStaleAfterSec = 300L; // 5 minutes + private final Api api; + + Connector(Api api) { + this.api = api; + } + + public List> sendMessage(SendMessageRequest sendMessageRequest) { + // TODO + return List.of(); + } + + private boolean isMessageStale(Message message) { + return ChronoUnit.SECONDS.between(Instant.ofEpochMilli(message.getSentAt()), Instant.now()) > messageStaleAfterSec; + } + + @Bean + public IgnoreAuthPattern ignoreAuthPattern() { + return new IgnoreAuthPattern("/whatsapp"); + } + + @Bean + public RequestLoggingIgnorePatterns requestLoggingIgnorePatterns() { + return new RequestLoggingIgnorePatterns(List.of("/whatsapp")); + } + + @Bean + private RouteTracking routeTracking() { + Pattern urlPattern = Pattern.compile(".*whatsapp\\.connect$"); + HashMap properties = new HashMap<>(Map.of("channel", "whatsapp")); + return new RouteTracking(urlPattern, "channel_connected", properties); + } +} diff --git a/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/Stores.java b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/Stores.java new file mode 100644 index 0000000000..5a04642abd --- /dev/null +++ b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/Stores.java @@ -0,0 +1,150 @@ +package co.airy.core.sources.whatsapp; + +import co.airy.avro.communication.Channel; +import co.airy.avro.communication.ChannelConnectionState; +import co.airy.avro.communication.DeliveryState; +import co.airy.avro.communication.Message; +import co.airy.avro.communication.Metadata; +import co.airy.core.sources.whatsapp.dto.Conversation; +import co.airy.core.sources.whatsapp.dto.SendMessageRequest; +import co.airy.kafka.schema.application.ApplicationCommunicationChannels; +import co.airy.kafka.schema.application.ApplicationCommunicationMessages; +import co.airy.kafka.schema.application.ApplicationCommunicationMetadata; +import co.airy.kafka.streams.KafkaStreamsWrapper; +import co.airy.model.channel.dto.ChannelContainer; +import org.apache.avro.specific.SpecificRecordBase; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.streams.KafkaStreams; +import org.apache.kafka.streams.KeyValue; +import org.apache.kafka.streams.StreamsBuilder; +import org.apache.kafka.streams.kstream.KStream; +import org.apache.kafka.streams.kstream.KTable; +import org.apache.kafka.streams.kstream.Materialized; +import org.apache.kafka.streams.state.ReadOnlyKeyValueStore; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ExecutionException; + +import static co.airy.model.metadata.MetadataRepository.getId; +import static co.airy.model.metadata.MetadataRepository.getSubject; +import static co.airy.model.metadata.MetadataRepository.isConversationMetadata; + +@Service +public class Stores implements ApplicationListener, DisposableBean, HealthIndicator { + private static final String appId = "sources.whatsapp.ConnectorStores"; + + private final KafkaStreamsWrapper streams; + private final String channelsStore = "channels-store"; + private final String applicationCommunicationChannels = new ApplicationCommunicationChannels().name(); + private final String applicationCommunicationMetadata = new ApplicationCommunicationMetadata().name(); + private final String applicationCommunicationMessages = new ApplicationCommunicationMessages().name(); + private final KafkaProducer producer; + private final Connector connector; + + public Stores(KafkaStreamsWrapper streams, KafkaProducer producer, Connector connector) { + this.streams = streams; + this.producer = producer; + this.connector = connector; + } + + @Override + public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) { + final StreamsBuilder builder = new StreamsBuilder(); + + KStream channelStream = builder.stream(applicationCommunicationChannels); + + channelStream.toTable(Materialized.as(channelsStore)); + + // Channels table + KTable channelsTable = channelStream + .filter((sourceChannelId, channel) -> "whatsapp".equals(channel.getSource()) + && channel.getConnectionState().equals(ChannelConnectionState.CONNECTED)).toTable(); + + // Whatsapp messaging stream by conversation-id + final KStream messageStream = builder.stream(applicationCommunicationMessages) + .filter((messageId, message) -> message != null && "whatsapp".equals(message.getSource())) + .selectKey((messageId, message) -> message.getConversationId()); + + + // Context table + final KTable contextTable = messageStream + .groupByKey() + .aggregate(Conversation::new, + (conversationId, message, conversation) -> { + final Conversation.ConversationBuilder conversationBuilder = conversation.toBuilder(); + if (message.getIsFromContact()) { + conversationBuilder.sourceConversationId(message.getSenderId()); + } + conversationBuilder.channelId(message.getChannelId()); + + return conversationBuilder.build(); + }) + .join(channelsTable, Conversation::getChannelId, (conversation, channel) -> conversation.toBuilder() + .channelId(conversation.getChannelId()) + .channel(channel) + .sourceConversationId(conversation.getSourceConversationId()) + .build()); + + // Send outbound messages + messageStream.filter((conversationId, message) -> DeliveryState.PENDING.equals(message.getDeliveryState())) + .join(contextTable, (message, conversation) -> new SendMessageRequest(conversation, message)) + .flatMap((conversationId, sendMessageRequest) -> connector.sendMessage(sendMessageRequest)) + .to((recordId, record, context) -> { + if (record instanceof Metadata) { + return applicationCommunicationMetadata; + } + if (record instanceof Message) { + return applicationCommunicationMessages; + } + + throw new IllegalStateException("Unknown type for record " + record); + }); + + streams.start(builder.build(), appId); + } + + public ReadOnlyKeyValueStore getChannelsStore() { + return streams.acquireLocalStore(channelsStore); + } + + public void storeChannelContainer(ChannelContainer container) throws ExecutionException, InterruptedException { + final Channel channel = container.getChannel(); + storeChannel(channel); + + for (Metadata metadata : container.getMetadataMap().values()) { + producer.send(new ProducerRecord<>(applicationCommunicationMetadata, getId(metadata).toString(), metadata)).get(); + } + } + + public void storeChannel(Channel channel) throws ExecutionException, InterruptedException { + producer.send(new ProducerRecord<>(applicationCommunicationChannels, channel.getId(), channel)).get(); + } + + @Override + public void destroy() { + if (streams != null) { + streams.close(); + } + } + + @Override + public Health health() { + getChannelsStore(); + return Health.up().build(); + } + + // visible for testing + KafkaStreams.State getStreamState() { + return streams.state(); + } +} diff --git a/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/WebhookController.java b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/WebhookController.java new file mode 100644 index 0000000000..848027c14a --- /dev/null +++ b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/WebhookController.java @@ -0,0 +1,72 @@ +package co.airy.core.sources.whatsapp; + +import co.airy.kafka.schema.source.SourceWhatsappEvents; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.Producer; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.common.serialization.StringSerializer; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.time.Duration; +import java.util.Properties; +import java.util.UUID; + +@RestController +public class WebhookController implements DisposableBean { + private final String sourceWhatsappEvents = new SourceWhatsappEvents().name(); + private final String webhookSecret; + + private final Producer producer; + + WebhookController(@Value("${kafka.brokers}") String brokers, + @Value("${webhookSecret}") String webhookSecret) { + this.webhookSecret = webhookSecret; + final Properties props = new Properties(); + + props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, brokers); + props.put(ProducerConfig.RETRIES_CONFIG, String.valueOf(Integer.MAX_VALUE)); + props.put(ProducerConfig.ACKS_CONFIG, "1"); + props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); + props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); + + producer = new KafkaProducer<>(props); + } + + // https://developers.facebook.com/docs/whatsapp/cloud-api/get-started + @GetMapping("/whatsapp") + int verify(@RequestParam(value = "hub.challenge") int challenge, @RequestParam(value = "hub.verify_token") String verifyToken) { + if (!verifyToken.equals(this.webhookSecret)) { + return 0; + } + + return challenge; + } + + @PostMapping("/whatsapp") + ResponseEntity accept(@RequestBody String event) { + String requestId = UUID.randomUUID().toString(); + try { + ProducerRecord record = new ProducerRecord<>(sourceWhatsappEvents, requestId, event); + producer.send(record).get(); + return ResponseEntity.ok().build(); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).build(); + } + } + + @Override + public void destroy() { + if (producer != null) { + producer.close(Duration.ofSeconds(10)); + } + } +} diff --git a/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/api/Api.java b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/api/Api.java new file mode 100644 index 0000000000..73682af0f0 --- /dev/null +++ b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/api/Api.java @@ -0,0 +1,99 @@ +package co.airy.core.sources.whatsapp.api; + +import co.airy.core.sources.whatsapp.api.model.LongLivingUserAccessToken; +import co.airy.log.AiryLoggerFactory; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.PropertyNamingStrategy; +import org.slf4j.Logger; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.context.ApplicationListener; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.stereotype.Service; +import org.springframework.web.client.ResponseErrorHandler; +import org.springframework.web.client.RestTemplate; + +import java.io.IOException; +import java.util.Optional; + +/* + @see https://developers.whatsapp.com/docs/messenger-platform/reference/send-api/ + */ +@Service +public class Api implements ApplicationListener { + private static final Logger log = AiryLoggerFactory.getLogger(Api.class); + private final RestTemplateBuilder restTemplateBuilder; + private final ObjectMapper objectMapper; + private RestTemplate restTemplate; + + private static final String subscribedFields = "messages,messaging_postbacks,messaging_optins,message_deliveries,message_reads,messaging_payments,messaging_pre_checkouts,messaging_checkout_updates,messaging_account_linking,messaging_referrals,message_echoes,messaging_game_plays,standby,messaging_handovers,messaging_policy_enforcement,message_reactions,inbox_labels,message_reactions"; + private static final String baseUrl = "https://graph.facebook.com/v11.0"; + private static final String requestTemplate = baseUrl + "/me/messages?access_token=%s"; + private final String pageFields = "fields=id,name_with_location_descriptor,access_token,picture,is_webhooks_subscribed"; + + private final HttpHeaders httpHeaders = new HttpHeaders(); + private final String appId; + private final String appSecret; + + public Api(RestTemplateBuilder restTemplateBuilder, + @Value("${appId}") String appId, + @Value("${appSecret}") String appSecret) { + httpHeaders.setContentType(MediaType.APPLICATION_JSON); + this.objectMapper = new ObjectMapper() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .configure(DeserializationFeature.FAIL_ON_MISSING_EXTERNAL_TYPE_ID_PROPERTY, false) + .setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); + this.restTemplateBuilder = restTemplateBuilder; + this.appId = appId; + this.appSecret = appSecret; + } + private T apiResponse(String url, HttpMethod method, Class clazz) throws Exception { + ResponseEntity responseEntity = restTemplate.exchange(url, method, null, String.class); + return objectMapper.readValue(responseEntity.getBody(), clazz); + } + + public String exchangeToLongLivingUserAccessToken(String userAccessToken) throws Exception { + String apiUrl = String.format(baseUrl + "/oauth/access_token?grant_type=fb_exchange_token&client_id=%s&client_secret=%s&fb_exchange_token=%s", appId, appSecret, userAccessToken); + return apiResponse(apiUrl, HttpMethod.GET, LongLivingUserAccessToken.class).getAccessToken(); + } + + + @Override + public void onApplicationEvent(ApplicationReadyEvent event) { + restTemplate = restTemplateBuilder + .errorHandler(new ResponseErrorHandler() { + @Override + public boolean hasError(ClientHttpResponse response) throws IOException { + return response.getRawStatusCode() != HttpStatus.OK.value(); + } + + @Override + public void handleError(ClientHttpResponse response) throws IOException { + final String errorPayload = new String(response.getBody().readAllBytes()); + final int statusCode = response.getRawStatusCode(); + + final JsonNode jsonNode = objectMapper.readTree(errorPayload); + final String errorMessage = Optional.of(jsonNode.get("error")) + .map((node) -> node.get("message")) + .map(JsonNode::textValue) + .orElseGet(() -> { + log.warn("Could not parse error message from response: {}", errorPayload); + return String.format("Api replied with status code %s and payload %s", statusCode, errorPayload); + }); + throw new ApiException(errorMessage, errorPayload); + } + }) + .additionalMessageConverters(new MappingJackson2HttpMessageConverter(objectMapper)) + .build(); + } +} + diff --git a/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/api/ApiException.java b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/api/ApiException.java new file mode 100644 index 0000000000..ea24884960 --- /dev/null +++ b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/api/ApiException.java @@ -0,0 +1,15 @@ +package co.airy.core.sources.whatsapp.api; + +import lombok.Getter; + +public class ApiException extends RuntimeException { + @Getter + private String errorPayload; + public ApiException(String message) { + super(message); + } + public ApiException(String message, String errorPayload) { + super(message); + this.errorPayload = errorPayload; + } +} diff --git a/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/api/model/LongLivingUserAccessToken.java b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/api/model/LongLivingUserAccessToken.java new file mode 100644 index 0000000000..9df8aec1c1 --- /dev/null +++ b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/api/model/LongLivingUserAccessToken.java @@ -0,0 +1,14 @@ +package co.airy.core.sources.whatsapp.api.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class LongLivingUserAccessToken { + private String accessToken; +} + diff --git a/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/dto/Conversation.java b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/dto/Conversation.java new file mode 100644 index 0000000000..340337bc93 --- /dev/null +++ b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/dto/Conversation.java @@ -0,0 +1,21 @@ +package co.airy.core.sources.whatsapp.dto; + +import co.airy.avro.communication.Channel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Map; + +@Data +@Builder(toBuilder = true) +@NoArgsConstructor +@AllArgsConstructor +public class Conversation implements Serializable { + private String sourceConversationId; + private String channelId; + private Channel channel; + private Map metadata; +} diff --git a/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/dto/SendMessageRequest.java b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/dto/SendMessageRequest.java new file mode 100644 index 0000000000..7248091c91 --- /dev/null +++ b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/dto/SendMessageRequest.java @@ -0,0 +1,18 @@ +package co.airy.core.sources.whatsapp.dto; + +import co.airy.avro.communication.Message; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SendMessageRequest implements Serializable { + private Conversation conversation; + private Message message; +} diff --git a/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/payload/ConnectChannelRequestPayload.java b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/payload/ConnectChannelRequestPayload.java new file mode 100644 index 0000000000..3c4f533d94 --- /dev/null +++ b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/payload/ConnectChannelRequestPayload.java @@ -0,0 +1,22 @@ +package co.airy.core.sources.whatsapp.payload; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ConnectChannelRequestPayload { + @NotNull + private String phoneNumber; + @NotNull + private String userToken; + @NotNull + private String name; + private String imageUrl; +} diff --git a/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/payload/DisconnectChannelRequestPayload.java b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/payload/DisconnectChannelRequestPayload.java new file mode 100644 index 0000000000..237634e0b6 --- /dev/null +++ b/backend/sources/whatsapp/connector/src/main/java/co/airy/core/sources/whatsapp/payload/DisconnectChannelRequestPayload.java @@ -0,0 +1,16 @@ +package co.airy.core.sources.whatsapp.payload; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; +import java.util.UUID; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DisconnectChannelRequestPayload { + @NotNull + private UUID channelId; +} diff --git a/backend/sources/whatsapp/connector/src/test/java/co/airy/core/sources/whatsapp/ChannelsControllerTest.java b/backend/sources/whatsapp/connector/src/test/java/co/airy/core/sources/whatsapp/ChannelsControllerTest.java new file mode 100644 index 0000000000..53db9b8ce3 --- /dev/null +++ b/backend/sources/whatsapp/connector/src/test/java/co/airy/core/sources/whatsapp/ChannelsControllerTest.java @@ -0,0 +1,142 @@ +package co.airy.core.sources.whatsapp; + +import co.airy.avro.communication.Channel; +import co.airy.avro.communication.ChannelConnectionState; +import co.airy.avro.communication.Metadata; +import co.airy.core.sources.whatsapp.api.Api; +import co.airy.core.sources.whatsapp.payload.ConnectChannelRequestPayload; +import co.airy.kafka.schema.Topic; +import co.airy.kafka.schema.application.ApplicationCommunicationChannels; +import co.airy.kafka.schema.application.ApplicationCommunicationMessages; +import co.airy.kafka.schema.application.ApplicationCommunicationMetadata; +import co.airy.kafka.test.KafkaTestHelper; +import co.airy.kafka.test.junit.SharedKafkaTestResource; +import co.airy.model.metadata.MetadataKeys; +import co.airy.spring.core.AirySpringBootApplication; +import co.airy.spring.test.WebTestHelper; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.mockito.InjectMocks; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.List; + +import static co.airy.test.Timing.retryOnException; +import static org.apache.kafka.streams.KafkaStreams.State.RUNNING; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.IsEqual.equalTo; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.doReturn; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@SpringBootTest(classes = AirySpringBootApplication.class) +@TestPropertySource(value = "classpath:test.properties") +@AutoConfigureMockMvc +@ExtendWith(SpringExtension.class) +class ChannelsControllerTest { + + @Autowired + private ObjectMapper objectMapper; + + @Autowired + private WebTestHelper webTestHelper; + + @RegisterExtension + public static final SharedKafkaTestResource sharedKafkaTestResource = new SharedKafkaTestResource(); + private static KafkaTestHelper kafkaTestHelper; + + private static final Topic applicationCommunicationChannels = new ApplicationCommunicationChannels(); + private static final Topic applicationCommunicationMessages = new ApplicationCommunicationMessages(); + private static final Topic applicationCommunicationMetadata = new ApplicationCommunicationMetadata(); + + @MockBean + private Api api; + + @Autowired + @InjectMocks + private Connector worker; + + @Autowired + private Stores stores; + + @BeforeAll + static void beforeAll() throws Exception { + kafkaTestHelper = new KafkaTestHelper(sharedKafkaTestResource, + applicationCommunicationChannels, + applicationCommunicationMessages, + applicationCommunicationMetadata + ); + + kafkaTestHelper.beforeAll(); + } + + @AfterAll + static void afterAll() throws Exception { + kafkaTestHelper.afterAll(); + } + + @BeforeEach + void beforeEach() throws Exception { + MockitoAnnotations.openMocks(this); + retryOnException(() -> assertEquals(stores.getStreamState(), RUNNING), "Failed to reach RUNNING state."); + } + + @Test + void canConnectWhatsappChannel() throws Exception { + final String phoneNumber = "1234567890"; + final String channelName = "My customer support phone number"; + + final ConnectChannelRequestPayload connectPayload = ConnectChannelRequestPayload.builder() + .phoneNumber(phoneNumber) + .name(channelName) + .userToken("user token") + .build(); + + doReturn("new-long-live-token-string").when(api).exchangeToLongLivingUserAccessToken(connectPayload.getUserToken()); + + String content = webTestHelper.post( + "/channels.whatsapp.connect", + objectMapper.writeValueAsString(connectPayload)) + .andExpect(status().isOk()).andReturn().getResponse().getContentAsString(); + final String channelId = new ObjectMapper().readTree(content).get("id").textValue(); + + List channels = kafkaTestHelper.consumeValues(1, applicationCommunicationChannels.name()); + final Channel channel = channels.get(0); + + assertThat("whatsapp", equalTo(channel.getSource())); + assertThat(channel.getSourceChannelId(), equalTo(phoneNumber)); + assertThat(ChannelConnectionState.CONNECTED, equalTo(channel.getConnectionState())); + + final List metadataList = kafkaTestHelper.consumeValues(4, applicationCommunicationMetadata.name()); + metadataList.forEach((metadata) -> { + final String key = metadata.getKey(); + switch (key) { + case MetadataKeys.ChannelKeys.NAME: + assertThat(channelName, equalTo(metadata.getValue())); + break; + default: + throw new Error(String.format("unexpected key: %s", key)); + } + }); + + webTestHelper.post( + "/channels.whatsapp.disconnect", + String.format("{\"channel_id\":\"%s\"}", channelId)) + .andExpect(status().isNoContent()); + + channels = kafkaTestHelper.consumeValues(1, applicationCommunicationChannels.name()); + assertThat(ChannelConnectionState.DISCONNECTED, equalTo(channels.get(0).getConnectionState())); + } + +} diff --git a/backend/sources/whatsapp/connector/src/test/resources/test.properties b/backend/sources/whatsapp/connector/src/test/resources/test.properties new file mode 100644 index 0000000000..88b7b6c83e --- /dev/null +++ b/backend/sources/whatsapp/connector/src/test/resources/test.properties @@ -0,0 +1,5 @@ +kafka.cleanup=true +logs.enabled=false +appId=12345 +appSecret=secret +webhookSecret=secret diff --git a/docs/docs/api/endpoints/channels.md b/docs/docs/api/endpoints/channels.md index 5e36ce528b..45c676f86f 100644 --- a/docs/docs/api/endpoints/channels.md +++ b/docs/docs/api/endpoints/channels.md @@ -126,6 +126,12 @@ import ConnectInstagram from './connect-instagram.mdx' +### Facebook + +import ConnectWhatsapp from './connect-whatsapp.mdx' + + + ### Google import ConnectGoogle from './connect-google.mdx' diff --git a/docs/docs/api/endpoints/components.md b/docs/docs/api/endpoints/components.md index 2cf513dd96..ab22e62c47 100644 --- a/docs/docs/api/endpoints/components.md +++ b/docs/docs/api/endpoints/components.md @@ -121,7 +121,7 @@ List all the components, both installed and not installed. **Sample request** -```json +```json5 { "repository": "airy-core" // optional } diff --git a/docs/docs/api/endpoints/connect-whatsapp.mdx b/docs/docs/api/endpoints/connect-whatsapp.mdx new file mode 100644 index 0000000000..c385698c37 --- /dev/null +++ b/docs/docs/api/endpoints/connect-whatsapp.mdx @@ -0,0 +1,35 @@ +Connects a Whatsapp cloud phone number to Airy. + +``` +POST /channels.whatsapp.connect +``` + +- `phone_number` the whatsapp phone number connected to your business account +- `user_token` your user access token +- `name` is the custom name for the connected page +- `image_url` is a custom image url for displaying this channel on the UI + +**Sample request** + +```json5 +{ + "phone_number": "1234567", + "user_token": "user access token", + "name": "Customer support hotline", + "image_url": "https://example.org/custom-image.jpg" // optional +} +``` + +**Sample response** + +```json5 +{ + "id": "channel-uuid", + "source": "whatsapp", + "source_channel_id": "1234567", + "metadata": { + "name": "Customer support hotline", + "image_url": "https://example.org/custom-image.jpg" // optional + } +} +``` diff --git a/docs/docs/sources/whatsapp-cloud.md b/docs/docs/sources/whatsapp-cloud.md new file mode 100644 index 0000000000..f7ffc9a9df --- /dev/null +++ b/docs/docs/sources/whatsapp-cloud.md @@ -0,0 +1,128 @@ +--- +title: WhatsApp +sidebar_label: WhatsApp +--- + +import TLDR from "@site/src/components/TLDR"; +import SuccessBox from "@site/src/components/SuccessBox"; +import ButtonBox from "@site/src/components/ButtonBox"; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +:::warning + +This source is still under development. You can track the progress [here](https://github.com/airyhq/airy/milestone/38). + +::: + + + +Connect with **2 billion WhatsApp users** via messages and templates. + + + +The Whatsapp cloud API has finally been released for general use and you can now connect it to Airy. + +:::tip What you will learn + +- The required steps to configure Whatsapp +- How to connect a Twilio WhatsApp source to Airy Core + +::: + +:::note + +The WhatsApp cloud source is not enabled by default. + +You need to add configuration in your airy.yaml file and apply it to activate it. + +::: + +- [Step 1: Get a Whatsapp test phone number](#step-1-get-a-whatsapp-test-phone-number) +- [Step 2: Install the Whatsapp cloud source](#step-2-install-the-whatsapp-cloud-source) +- [Step 3: Configure the Whatsapp cloud source](#step-3-configure-the-whatsapp-cloud-source) +- [Step 4: Connect the webhook](#step-4-connect-the-webhook) +- [Step 5: Connect a phone number to Airy](#step-4-connect-a-phone-number-to-airy) +- [Step 6: Send and receive messages with the Inbox UI](#step-6-send-and-receive-messages-with-the-inbox-ui) + +We will go through [this guide](https://developers.facebook.com/docs/whatsapp/cloud-api/get-started) provided by Meta step by step and once we are able to send messages we will configure Airy to be able to send/receive messages from Whatsapp. + +## Step 1: Get a Whatsapp test phone number + +First you need to complete step 1 of [this guide](https://developers.facebook.com/docs/whatsapp/cloud-api/get-started). +At the end of which you should have the following: + +1. A meta developer account and a business account +2. A meta app with Whatsapp connected as a product +3. A Whatsapp test phone number + +After you also complete step 2 you have now verified that you can send messages from that test phone number to. + +Before proceeding go to your app dashboard and note down the id and secret of your app. +Airy will use these to generate long-lived access tokens and fetch conversation metadata on your behalf. + +## Step 2: Install the Whatsapp cloud source + +Here we assume that you already have a running Airy core instance ([get started](getting-started/installation/introduction)). +Now in order to use this source you have to first install it either by navigating to the [control center](/ui/control-center/connectors) or by directly calling the components installation API like so: + +`POST /components.install` + +```json +{ + "name": "airy-core/sources-whatsapp" +} +``` + +## Step 3: Configure the Whatsapp cloud source + +Now that the source is installed we can enable and configure it using the values obtained in the creation of the test phone number. +For this you can again either use the control center UI or make the following call to the components API: + +`POST /components.update` + +```json5 +{ + "components": [ + { + "name": "sources-whatsapp", + "enabled": true, + "data": { + "appId": "The id of your meta app", + "appSecret": "The secret of your meta app", + "webhookSecret": "a random secret created by you" + } + } + ] +} +``` + +Note down the `webhook_secret` and use it when registering your webhook. + +## Step 4: Connect the webhook + +TBD + +## Step 5: Connect a phone number to Airy + +Airy manages different connections of a messaging source as [channels](/getting-started/glossary.md#channel). +So in order to connect a phone number to Airy you need to create a channel. +You can do so by either using the control center UI or by using the API: + +} +title='Channels endpoint' +description='Connect a Whatsapp phone number to your Airy Core instance through the Channels endpoint' +link='api/endpoints/channels#whatsapp' +/> + +
+ +import ConnectWhatsapp from '../api/endpoints/connect-whatsapp.mdx' + + + +You can get a user token associated to your app using the [Facebook graph explorer](https://developers.facebook.com/tools/explorer). + +## Step 6: Send and receive messages with the Inbox UI + +TBD diff --git a/docs/sidebars.js b/docs/sidebars.js index 824602ceb1..a34fb99aa1 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -38,6 +38,7 @@ module.exports = { ], }, 'sources/facebook', + 'sources/whatsapp-cloud', 'sources/instagram', 'sources/google', 'sources/whatsapp-twilio', diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/Chart.yaml b/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/Chart.yaml new file mode 100644 index 0000000000..c63976595f --- /dev/null +++ b/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/Chart.yaml @@ -0,0 +1,5 @@ +apiVersion: v2 +appVersion: "1.0" +description: A Helm chart for Whatsapp source +name: sources-whatsapp +version: 0-develop diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/templates/deployments.yaml b/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/templates/deployments.yaml new file mode 100644 index 0000000000..157c843acb --- /dev/null +++ b/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/templates/deployments.yaml @@ -0,0 +1,129 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: sources-whatsapp-connector + labels: + app: sources-whatsapp-connector + type: sources + core.airy.co/managed: "true" + core.airy.co/mandatory: "{{ .Values.mandatory }}" + core.airy.co/component: "{{ .Values.component }}" +spec: + replicas: 0 + selector: + matchLabels: + app: sources-whatsapp-connector + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + type: RollingUpdate + template: + metadata: + labels: + app: sources-whatsapp-connector + WorkerType: "{{ default "NodeGroup" .Values.global.workerType }}" + spec: + containers: + - name: app + image: "{{ .Values.global.containerRegistry}}/{{ .Values.connector.image }}:{{ default .Chart.Version .Values.global.appImageTag }}" + imagePullPolicy: Always + envFrom: + - configMapRef: + name: kafka-config + - configMapRef: + name: security + - configMapRef: + name: core-config + - configMapRef: + name: "{{ .Values.component }}" + livenessProbe: + httpGet: + path: /actuator/health + port: 8080 + httpHeaders: + - name: Health-Check + value: health-check + initialDelaySeconds: 120 + resources: +{{ toYaml .Values.connector.resources | indent 12 }} + initContainers: + - name: wait + image: "{{ .Values.global.busyboxImage }}" + imagePullPolicy: IfNotPresent + command: ["/bin/sh", "/opt/provisioning/wait-for-minimum-kafkas.sh"] + envFrom: + - configMapRef: + name: kafka-config + volumeMounts: + - name: provisioning-scripts + mountPath: /opt/provisioning + volumes: + - name: provisioning-scripts + configMap: + name: provisioning-scripts +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: sources-whatsapp-events-router + labels: + app: sources-whatsapp-events-router + type: sources + core.airy.co/managed: "true" + core.airy.co/mandatory: "{{ .Values.mandatory }}" + core.airy.co/component: "{{ .Values.component }}" +spec: + replicas: 0 + selector: + matchLabels: + app: sources-whatsapp-events-router + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 1 + type: RollingUpdate + template: + metadata: + labels: + app: sources-whatsapp-events-router + WorkerType: "{{ default "NodeGroup" .Values.global.workerType }}" + spec: + containers: + - name: app + image: "{{ .Values.global.containerRegistry}}/{{ .Values.eventsRouter.image }}:{{ default .Chart.Version .Values.global.appImageTag }}" + imagePullPolicy: Always + envFrom: + - configMapRef: + name: kafka-config + env: + - name: WHATSAPP_APP_ID + valueFrom: + configMapKeyRef: + name: "{{ .Values.component }}" + key: appId + - name: SERVICE_NAME + value: whatsapp-events-router + livenessProbe: + tcpSocket: + port: 6000 + initialDelaySeconds: 120 + periodSeconds: 10 + failureThreshold: 3 + resources: +{{ toYaml .Values.eventsRouter.resources | indent 10 }} + initContainers: + - name: wait + image: "{{ .Values.global.busyboxImage }}" + imagePullPolicy: IfNotPresent + command: ["/bin/sh", "/opt/provisioning/wait-for-minimum-kafkas.sh"] + envFrom: + - configMapRef: + name: kafka-config + volumeMounts: + - name: provisioning-scripts + mountPath: /opt/provisioning + volumes: + - name: provisioning-scripts + configMap: + name: provisioning-scripts diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/templates/service.yaml b/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/templates/service.yaml new file mode 100644 index 0000000000..0385d9839a --- /dev/null +++ b/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/templates/service.yaml @@ -0,0 +1,31 @@ +apiVersion: v1 +kind: Service +metadata: + name: sources-whatsapp-connector + labels: + core.airy.co/prometheus: spring +spec: + ports: + - name: web + port: 80 + targetPort: 8080 + protocol: TCP + type: NodePort + selector: + app: sources-whatsapp-connector +--- +apiVersion: v1 +kind: Service +metadata: + name: sources-whatsapp-events-router + labels: + core.airy.co/prometheus: spring +spec: + ports: + - name: web + port: 80 + targetPort: 8080 + protocol: TCP + type: NodePort + selector: + app: sources-whatsapp-events-router diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/values.yaml b/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/values.yaml new file mode 100644 index 0000000000..50cfb53e31 --- /dev/null +++ b/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/values.yaml @@ -0,0 +1,9 @@ +component: sources-whatsapp +mandatory: false +enabled: true +connector: + image: sources/whatsapp-connector + resources: {} +eventsRouter: + image: sources/whatsapp-events-router + resources: {} diff --git a/infrastructure/helm-chart/charts/components/templates/ingress.yaml b/infrastructure/helm-chart/charts/components/templates/ingress.yaml index 705b578a35..f25060dac4 100644 --- a/infrastructure/helm-chart/charts/components/templates/ingress.yaml +++ b/infrastructure/helm-chart/charts/components/templates/ingress.yaml @@ -155,6 +155,13 @@ spec: name: sources-facebook-connector port: number: 80 + - path: /channels.whatsapp + pathType: Prefix + backend: + service: + name: sources-whatsapp-connector + port: + number: 80 - path: /channels.instagram pathType: Prefix backend: @@ -190,6 +197,13 @@ spec: name: sources-facebook-connector port: number: 80 + - path: /whatsapp + pathType: Prefix + backend: + service: + name: sources-whatsapp-connector + port: + number: 80 - path: /google pathType: Prefix backend: diff --git a/infrastructure/helm-chart/charts/ingress-controller/templates/ngrok.yaml b/infrastructure/helm-chart/charts/ingress-controller/templates/ngrok.yaml index 1d5732417f..5c4cdf1afb 100644 --- a/infrastructure/helm-chart/charts/ingress-controller/templates/ngrok.yaml +++ b/infrastructure/helm-chart/charts/ingress-controller/templates/ngrok.yaml @@ -16,6 +16,13 @@ spec: name: sources-facebook-connector port: number: 80 + - path: /whatsapp + pathType: Prefix + backend: + service: + name: sources-whatsapp-connector + port: + number: 80 - path: /google pathType: Prefix backend: diff --git a/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml b/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml index e7b46119d8..e88b76ff28 100644 --- a/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml +++ b/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml @@ -84,3 +84,5 @@ data: kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.viber.events" + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.whatsapp.events" + diff --git a/lib/java/kafka/schema/src/main/java/co/airy/kafka/schema/source/SourceWhatsappEvents.java b/lib/java/kafka/schema/src/main/java/co/airy/kafka/schema/source/SourceWhatsappEvents.java new file mode 100644 index 0000000000..f61dea0547 --- /dev/null +++ b/lib/java/kafka/schema/src/main/java/co/airy/kafka/schema/source/SourceWhatsappEvents.java @@ -0,0 +1,18 @@ +package co.airy.kafka.schema.source; + +import co.airy.kafka.schema.AbstractTopic; + +public class SourceWhatsappEvents extends AbstractTopic { + @Override + public String kind() { + return "source"; + } + @Override + public String domain() { + return "whatsapp"; + } + @Override + public String dataset() { + return "events"; + } +} From 1dc998c25bd4b841383d28d699fb505326950e9e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Aug 2022 19:52:35 +0200 Subject: [PATCH 36/92] Bump emoji-mart from 3.0.1 to 5.2.0 (#3488) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bump emoji-mart from 3.0.1 to 5.2.0 Bumps [emoji-mart](https://github.com/missive/emoji-mart/tree/HEAD/packages/emoji-mart) from 3.0.1 to 5.2.0. - [Release notes](https://github.com/missive/emoji-mart/releases) - [Commits](https://github.com/missive/emoji-mart/commits/v5.2.0/packages/emoji-mart) --- updated-dependencies: - dependency-name: emoji-mart dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * fix build * fix build Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Christoph Pröschel --- .eslintrc | 8 +++++- frontend/chat-plugin/deps.bzl | 2 ++ frontend/chat-plugin/lib/BUILD | 2 ++ frontend/chat-plugin/lib/publish_package.json | 4 ++- .../components/emojiPicker/EmojiPicker.tsx | 7 +++--- frontend/inbox/BUILD | 1 + frontend/inbox/src/components/Input.tsx | 10 +++++--- .../pages/Inbox/MessageInput/InputOptions.tsx | 15 ++++------- .../src/pages/Inbox/MessageInput/index.tsx | 1 - package.json | 8 +++--- yarn.lock | 25 ++++++++++++------- 11 files changed, 51 insertions(+), 32 deletions(-) diff --git a/.eslintrc b/.eslintrc index 6cba1cc7f8..f43c9b482e 100644 --- a/.eslintrc +++ b/.eslintrc @@ -26,6 +26,12 @@ "properties": "never" } ], + "@typescript-eslint/ban-ts-comment": [ + "error", + { + "ts-ignore": "allow-with-description" + } + ], "react/prop-types": 0, "@typescript-eslint/no-unused-vars": [ "error", @@ -53,4 +59,4 @@ "version": "16.12" } } -} \ No newline at end of file +} diff --git a/frontend/chat-plugin/deps.bzl b/frontend/chat-plugin/deps.bzl index 4f42ba2e86..3a9f0d6c71 100644 --- a/frontend/chat-plugin/deps.bzl +++ b/frontend/chat-plugin/deps.bzl @@ -20,5 +20,7 @@ npm_deps = [ "@npm//react-dom", "@npm//camelcase-keys", "@npm//emoji-mart", + "@npm//@emoji-mart/data", + "@npm//@emoji-mart/react", "@npm//react-i18next", ] diff --git a/frontend/chat-plugin/lib/BUILD b/frontend/chat-plugin/lib/BUILD index d65f4d94cb..42620eae05 100644 --- a/frontend/chat-plugin/lib/BUILD +++ b/frontend/chat-plugin/lib/BUILD @@ -43,6 +43,8 @@ web_library( "react-dom": "react-dom", "camelcase-keys": "camelcase-keys", "emoji-mart": "emoji-mart", + "@emoji-mart/data": "@emoji-mart/data", + "@emoji-mart/react": "@emoji-mart/react", }, output = { "library": "@airyhq/chat-plugin", diff --git a/frontend/chat-plugin/lib/publish_package.json b/frontend/chat-plugin/lib/publish_package.json index 8e854d0052..e50c145afb 100644 --- a/frontend/chat-plugin/lib/publish_package.json +++ b/frontend/chat-plugin/lib/publish_package.json @@ -24,6 +24,8 @@ "react": "18.1.0", "react-dom": "18.1.0", "camelcase-keys": "7.0.0", - "emoji-mart": "3.0.1" + "emoji-mart": "5.2.0", + "@emoji-mart/data": "^1.0.3", + "@emoji-mart/react": "^1.0.0" } } diff --git a/frontend/chat-plugin/lib/src/components/emojiPicker/EmojiPicker.tsx b/frontend/chat-plugin/lib/src/components/emojiPicker/EmojiPicker.tsx index 6c2735619f..d1ce21089d 100644 --- a/frontend/chat-plugin/lib/src/components/emojiPicker/EmojiPicker.tsx +++ b/frontend/chat-plugin/lib/src/components/emojiPicker/EmojiPicker.tsx @@ -1,7 +1,8 @@ import React from 'react'; -import {Picker} from 'emoji-mart'; -import 'emoji-mart/css/emoji-mart.css'; +// @ts-ignore: Missing type declarataions for this module +import data from '@emoji-mart/data'; +import Picker from '@emoji-mart/react'; export const EmojiPicker = ({addEmoji}) => { - return ; + return ; }; diff --git a/frontend/inbox/BUILD b/frontend/inbox/BUILD index b3f090d7d6..ddb42818d7 100644 --- a/frontend/inbox/BUILD +++ b/frontend/inbox/BUILD @@ -38,6 +38,7 @@ ts_web_library( "@npm//typesafe-actions", "@npm//camelcase-keys", "@npm//react-color", + "@npm//@emoji-mart/data", "@npm//audio-recorder-polyfill", ], ) diff --git a/frontend/inbox/src/components/Input.tsx b/frontend/inbox/src/components/Input.tsx index df751ff2df..89b8ac81c7 100644 --- a/frontend/inbox/src/components/Input.tsx +++ b/frontend/inbox/src/components/Input.tsx @@ -1,12 +1,14 @@ import React from 'react'; -import {Picker} from 'emoji-mart'; +// @ts-ignore: Missing type declarataions for this module +import data from '@emoji-mart/data'; +import Picker from '@emoji-mart/react'; import {Input as LibInput} from 'components'; const renderPicker = onSelect => ( ); diff --git a/frontend/inbox/src/pages/Inbox/MessageInput/InputOptions.tsx b/frontend/inbox/src/pages/Inbox/MessageInput/InputOptions.tsx index 328fe5e283..2b28037c11 100644 --- a/frontend/inbox/src/pages/Inbox/MessageInput/InputOptions.tsx +++ b/frontend/inbox/src/pages/Inbox/MessageInput/InputOptions.tsx @@ -1,14 +1,13 @@ import React, {ChangeEvent, useEffect, useRef, useState} from 'react'; -import {connect, ConnectedProps} from 'react-redux'; -import {Picker} from 'emoji-mart'; -import 'emoji-mart/css/emoji-mart.css'; +// @ts-ignore: Missing type declarataions for this module +import data from '@emoji-mart/data'; +import Picker from '@emoji-mart/react'; import {ReactComponent as Smiley} from 'assets/images/icons/smiley.svg'; import {ReactComponent as TemplateAlt} from 'assets/images/icons/templateAlt.svg'; import {ReactComponent as Paperclip} from 'assets/images/icons/paperclip.svg'; import {ReactComponent as MicrophoneOutline} from 'assets/images/icons/microphoneOutline.svg'; import {ReactComponent as MicrophoneFilled} from 'assets/images/icons/microphoneFilled.svg'; import TemplateSelector from '../TemplateSelector'; -import {sendMessages} from '../../../actions/messages'; import {Template, Source} from 'model'; import {ErrorPopUp} from 'components'; import {getInputAcceptedFilesForSource, supportsAudioRecordingMp3} from '../../../services/types/attachmentsTypes'; @@ -16,10 +15,6 @@ import styles from './InputOptions.module.scss'; import {useTranslation} from 'react-i18next'; import {ListenOutsideClick} from 'components'; -const mapDispatchToProps = {sendMessages}; - -const connector = connect(null, mapDispatchToProps); - type Props = { source: Source; inputDisabled: boolean; @@ -41,7 +36,7 @@ type Props = { audioRecordingPaused: boolean; isAudioRecordingPaused: (status: boolean) => void; audioRecordingCanceled?: boolean; -} & ConnectedProps; +}; export const InputOptions = (props: Props) => { const { @@ -156,7 +151,7 @@ export const InputOptions = (props: Props) => { )} {isShowingEmojiDrawer && ( setIsShowingEmojiDrawer(false)} className={styles.emojiDrawer}> - + )} diff --git a/frontend/inbox/src/pages/Inbox/MessageInput/index.tsx b/frontend/inbox/src/pages/Inbox/MessageInput/index.tsx index 6e31c3533e..6fa9a28889 100644 --- a/frontend/inbox/src/pages/Inbox/MessageInput/index.tsx +++ b/frontend/inbox/src/pages/Inbox/MessageInput/index.tsx @@ -531,7 +531,6 @@ const MessageInput = (props: Props) => { setInput={setInput} selectTemplate={selectTemplate} focusInput={focusInput} - sendMessages={sendMessages} selectFile={selectFile} isFileLoaded={isFileLoaded} canSendMedia={canSendMedia} diff --git a/package.json b/package.json index 1bb8900544..696517b4fa 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,8 @@ "version": "0.1.0", "private": true, "dependencies": { + "@emoji-mart/data": "^1.0.3", + "@emoji-mart/react": "^1.0.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7", "@reduxjs/toolkit": "^1.8.3", "@stomp/stompjs": "^6.1.2", @@ -12,7 +14,7 @@ "audio-recorder-polyfill": "^0.4.1", "camelcase-keys": "^7.0.2", "core-js": "3.24.1", - "emoji-mart": "3.0.1", + "emoji-mart": "^5.2.0", "form-data": "^4.0.0", "i18next": "^21.8.16", "isomorphic-fetch": "^3.0.0", @@ -63,8 +65,8 @@ "@typescript-eslint/eslint-plugin": "^4.33.0", "@typescript-eslint/parser": "^4.32.0", "babel-jest": "^28.1.3", - "copy-webpack-plugin": "^11.0.0", "babel-loader": "^8.2.5", + "copy-webpack-plugin": "^11.0.0", "css-loader": "^6.7.1", "cypress": "10.3.1", "dotenv-webpack": "^8.0.0", @@ -79,8 +81,8 @@ "prettier": "^2.7.1", "react-hot-loader": "^4.13.0", "react-test-renderer": "^18.2.0", - "sass-loader": "^13.0.2", "sass": "^1.54.0", + "sass-loader": "^13.0.2", "style-loader": "^3.3.1", "terser-webpack-plugin": "^5.3.3", "typescript": "^4.7.4", diff --git a/yarn.lock b/yarn.lock index 3f098517e9..6e74c618e3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1022,7 +1022,7 @@ "@babel/helper-validator-option" "^7.18.6" "@babel/plugin-transform-typescript" "^7.18.6" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.18.3" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4" integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug== @@ -1133,6 +1133,16 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== +"@emoji-mart/data@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@emoji-mart/data/-/data-1.0.3.tgz#a216a9a8cead038b756d2b882e1c9da0f7777e8a" + integrity sha512-SwxtfLOPiis9iXwWLjZHpUIUwYV/ghfBG6jpVP2HZgCt/dE8Q4r1RQg1Y5TyYBYKk8N5RKuLWJi1DNrEUIWj+A== + +"@emoji-mart/react@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@emoji-mart/react/-/react-1.0.0.tgz#485ffef5c34f0cde04ecb2820f150a483744346e" + integrity sha512-pRZ+e0uWJKVpUBcALevyjnp14HUFG/7p+XsUqNAkz322ruPzyDQ7/qUNONU0KGjQF71O4OIoFdvDPcxVpx1/xg== + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -3699,13 +3709,10 @@ emittery@^0.10.2: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== -emoji-mart@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/emoji-mart/-/emoji-mart-3.0.1.tgz#9ce86706e02aea0506345f98464814a662ca54c6" - integrity sha512-sxpmMKxqLvcscu6mFn9ITHeZNkGzIvD0BSNFE/LJESPbCA8s1jM6bCDPjWbV31xHq7JXaxgpHxLB54RCbBZSlg== - dependencies: - "@babel/runtime" "^7.0.0" - prop-types "^15.6.0" +emoji-mart@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/emoji-mart/-/emoji-mart-5.2.0.tgz#e6e30df81f75c6c5150f77a7c6714e05c3798e45" + integrity sha512-0ZTIbemlRjEV0ydF8lDqho2N5l4M7qdNFWGp+w3v32D+F6+DYsmuaZr/k4O79EBvqlDx6rx+B8jeaH2qa0ZNDQ== emoji-regex@^8.0.0: version "8.0.0" @@ -6792,7 +6799,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.6, prop-types@^15.6.1, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== From b7c696ac1c94e8ebdd14522d994e4fc293aef5fe Mon Sep 17 00:00:00 2001 From: Arman Jindal <58370547+armanjindal@users.noreply.github.com> Date: Mon, 8 Aug 2022 11:31:19 +0200 Subject: [PATCH 37/92] [#3541] Rename module for airy-core (#3547) Fixes #3541 --- infrastructure/terraform/install/airy-core/main.tf | 2 +- infrastructure/terraform/install/aws-eks/variables.tf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/infrastructure/terraform/install/airy-core/main.tf b/infrastructure/terraform/install/airy-core/main.tf index a12865c304..26886438aa 100644 --- a/infrastructure/terraform/install/airy-core/main.tf +++ b/infrastructure/terraform/install/airy-core/main.tf @@ -16,7 +16,7 @@ provider "kubernetes" { config_path = data.terraform_remote_state.kubernetes.outputs.kubeconfig_path } -module "my_airy_core" { +module "airy_core" { source = "github.com/airyhq/airy.git/infrastructure/terraform/modules/core" values_yaml = file("${var.airy_workspace}/airy.yaml") resources_yaml = file("${path.module}/files/defaultResourceLimits.yaml") diff --git a/infrastructure/terraform/install/aws-eks/variables.tf b/infrastructure/terraform/install/aws-eks/variables.tf index 7cd4df78be..c108c5a775 100644 --- a/infrastructure/terraform/install/aws-eks/variables.tf +++ b/infrastructure/terraform/install/aws-eks/variables.tf @@ -1,5 +1,5 @@ variable "aws_profile" { - description = "The AWS Profile associated with your credentials (default = 'default')" + description = "The AWS Profile associated with your credentials" } variable "aws_region" { From b5135b84215144e49220261145355b3ed3f1aa6a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 13:28:09 +0200 Subject: [PATCH 38/92] Bump @types/node from 18.6.3 to 18.6.4 (#3544) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 18.6.3 to 18.6.4. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 696517b4fa..afc708811b 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "@testing-library/react": "13.3.0", "@types/dom-mediacapture-record": "^1.0.11", "@types/lodash-es": "^4.17.6", - "@types/node": "18.6.3", + "@types/node": "18.6.4", "@types/react": "18.0.15", "@types/react-dom": "18.0.6", "@types/react-redux": "7.1.24", diff --git a/yarn.lock b/yarn.lock index 6e74c618e3..80f24ffb50 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1955,10 +1955,10 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== -"@types/node@*", "@types/node@18.6.3": - version "18.6.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.3.tgz#4e4a95b6fe44014563ceb514b2598b3e623d1c98" - integrity sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg== +"@types/node@*", "@types/node@18.6.4": + version "18.6.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.4.tgz#fd26723a8a3f8f46729812a7f9b4fc2d1608ed39" + integrity sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg== "@types/node@^14.14.31": version "14.18.18" From 66f47519fa5d555316dfcfc6d08f4f656824d9da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 13:30:54 +0200 Subject: [PATCH 39/92] Bump @babel/core from 7.18.9 to 7.18.10 (#3546) Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.18.9 to 7.18.10. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.10/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 76 ++++++++++++++++++++++++++++------------------------ 2 files changed, 42 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index afc708811b..4811ae8e1d 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "typesafe-actions": "^5.1.0" }, "devDependencies": { - "@babel/core": "7.18.9", + "@babel/core": "7.18.10", "@babel/plugin-proposal-class-properties": "^7.16.7", "@babel/plugin-proposal-object-rest-spread": "^7.18.9", "@babel/plugin-transform-spread": "^7.18.9", diff --git a/yarn.lock b/yarn.lock index 80f24ffb50..addec45e8e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,33 +29,33 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== -"@babel/core@7.18.9", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.5": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" - integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== +"@babel/core@7.18.10", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.5": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" + integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" + "@babel/generator" "^7.18.10" "@babel/helper-compilation-targets" "^7.18.9" "@babel/helper-module-transforms" "^7.18.9" "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.9" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.18.9", "@babel/generator@^7.7.2": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" - integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== +"@babel/generator@^7.18.10", "@babel/generator@^7.7.2": + version "7.18.12" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" + integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== dependencies: - "@babel/types" "^7.18.9" + "@babel/types" "^7.18.10" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" @@ -266,6 +266,11 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + "@babel/helper-validator-identifier@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" @@ -318,10 +323,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6", "@babel/parser@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" - integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" + integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" @@ -1029,36 +1034,37 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.18.6", "@babel/template@^7.3.3": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" - integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== +"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/types" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" - integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== +"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" + integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" + "@babel/generator" "^7.18.10" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.18.9" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/parser" "^7.18.11" + "@babel/types" "^7.18.10" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" - integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== +"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.18.10", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" + integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== dependencies: + "@babel/helper-string-parser" "^7.18.10" "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" From 5d85a558f8462b04d9ce08ad6063c0ddb1cfafce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 13:31:56 +0200 Subject: [PATCH 40/92] Bump preact from 10.10.0 to 10.10.1 (#3543) Bumps [preact](https://github.com/preactjs/preact) from 10.10.0 to 10.10.1. - [Release notes](https://github.com/preactjs/preact/releases) - [Commits](https://github.com/preactjs/preact/compare/10.10.0...10.10.1) --- updated-dependencies: - dependency-name: preact dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4811ae8e1d..2d689edf5b 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "linkify-react": "^3.0.4", "linkifyjs": "^3.0.5", "lodash-es": "^4.17.21", - "preact": "^10.10.0", + "preact": "^10.10.1", "react": "18.2.0", "react-autosize-textarea": "^7.1.0", "react-color": "^2.19.3", diff --git a/yarn.lock b/yarn.lock index addec45e8e..34047e3d9f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6730,10 +6730,10 @@ postcss@^8.4.7: picocolors "^1.0.0" source-map-js "^1.0.2" -preact@^10.10.0: - version "10.10.0" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.10.0.tgz#7434750a24b59dae1957d95dc0aa47a4a8e9a180" - integrity sha512-fszkg1iJJjq68I4lI8ZsmBiaoQiQHbxf1lNq+72EmC/mZOsFF5zn3k1yv9QGoFgIXzgsdSKtYymLJsrJPoamjQ== +preact@^10.10.1: + version "10.10.1" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.10.1.tgz#df67e4348f50fc6ad2e11e813553f15c6543176b" + integrity sha512-cXljG59ylGtSLismoLojXPAGvnh2ipQr3BYz9KZQr+1sdASCT+sR/v8dSMDS96xGCdtln2wHfAHCnLJK+XcBNg== prelude-ls@^1.2.1: version "1.2.1" From b2cc31bccb975da901ff35c5f4ef7a023d1e3400 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 13:32:35 +0200 Subject: [PATCH 41/92] Bump @testing-library/user-event from 14.3.0 to 14.4.2 (#3545) Bumps [@testing-library/user-event](https://github.com/testing-library/user-event) from 14.3.0 to 14.4.2. - [Release notes](https://github.com/testing-library/user-event/releases) - [Changelog](https://github.com/testing-library/user-event/blob/main/CHANGELOG.md) - [Commits](https://github.com/testing-library/user-event/compare/v14.3...v14.4.2) --- updated-dependencies: - dependency-name: "@testing-library/user-event" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 2d689edf5b..fbe6dc2761 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "@reduxjs/toolkit": "^1.8.3", "@stomp/stompjs": "^6.1.2", "@testing-library/jest-dom": "^5.16.4", - "@testing-library/user-event": "^14.3.0", + "@testing-library/user-event": "^14.4.2", "@types/jest": "^28.1.6", "audio-recorder-polyfill": "^0.4.1", "camelcase-keys": "^7.0.2", diff --git a/yarn.lock b/yarn.lock index 34047e3d9f..3321f3e174 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1692,10 +1692,10 @@ "@testing-library/dom" "^8.5.0" "@types/react-dom" "^18.0.0" -"@testing-library/user-event@^14.3.0": - version "14.3.0" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.3.0.tgz#0a6750b94b40e4739706d41e8efc2ccf64d2aad9" - integrity sha512-P02xtBBa8yMaLhK8CzJCIns8rqwnF6FxhR9zs810flHOBXUYCFjLd8Io1rQrAkQRWEmW2PGdZIEdMxf/KLsqFA== +"@testing-library/user-event@^14.4.2": + version "14.4.2" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.4.2.tgz#d3fb5d24e2d7d019a7d2e9978a8deb90b0aa230b" + integrity sha512-1gVTWtueNimveOjcm2ApFCnCTeky7WqY3EX31/GRKLWyCd+HfH+Gd2l1J8go9FpDNe+0Mx8X4zbQHTg0WWNJwg== "@tootallnate/once@2": version "2.0.0" From c963bece1e2f3efe655dcbe51a959ee0d8f824ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 13:32:52 +0200 Subject: [PATCH 42/92] Bump sass from 1.54.0 to 1.54.3 (#3542) Bumps [sass](https://github.com/sass/dart-sass) from 1.54.0 to 1.54.3. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.54.0...1.54.3) --- updated-dependencies: - dependency-name: sass dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index fbe6dc2761..4b5206418b 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "prettier": "^2.7.1", "react-hot-loader": "^4.13.0", "react-test-renderer": "^18.2.0", - "sass": "^1.54.0", + "sass": "^1.54.3", "sass-loader": "^13.0.2", "style-loader": "^3.3.1", "terser-webpack-plugin": "^5.3.3", diff --git a/yarn.lock b/yarn.lock index 3321f3e174..9c3972c855 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7353,10 +7353,10 @@ sass-loader@^13.0.2: klona "^2.0.4" neo-async "^2.6.2" -sass@^1.54.0: - version "1.54.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.0.tgz#24873673265e2a4fe3d3a997f714971db2fba1f4" - integrity sha512-C4zp79GCXZfK0yoHZg+GxF818/aclhp9F48XBu/+bm9vXEVAYov9iU3FBVRMq3Hx3OA4jfKL+p2K9180mEh0xQ== +sass@^1.54.3: + version "1.54.3" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.3.tgz#37baa2652f7f1fdadb73240ee9a2b9b81fabb5c4" + integrity sha512-fLodey5Qd41Pxp/Tk7Al97sViYwF/TazRc5t6E65O7JOk4XF8pzwIW7CvCxYVOfJFFI/1x5+elDyBIixrp+zrw== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From bf7f6381568e1f9970176f3180968aa61e4946a8 Mon Sep 17 00:00:00 2001 From: Ljupco Vangelski Date: Mon, 8 Aug 2022 14:43:55 +0200 Subject: [PATCH 43/92] [#3356] Create and destroy Minikube with Bazel (#3363) --- WORKSPACE | 11 +++++++++-- infrastructure/BUILD | 10 ++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 1387999ff1..f07b7efd9f 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -10,9 +10,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") git_repository( name = "com_github_airyhq_bazel_tools", - commit = "59690a4136add960dcb65c2f2025dfda18f73890", + commit = "c7a0cc1b77b01c3fa26b77527cc7dd1597975b93", remote = "https://github.com/airyhq/bazel-tools.git", - shallow_since = "1659431783 +0200", + shallow_since = "1659948620 +0200", ) load("@com_github_airyhq_bazel_tools//:repositories.bzl", "airy_bazel_tools_dependencies", "airy_jvm_deps") @@ -191,3 +191,10 @@ load("@com_github_airyhq_bazel_tools//helm:helm.bzl", "helm_tool") helm_tool( name = "helm_binary", ) + +### Minikube +load("@com_github_airyhq_bazel_tools//minikube:minikube.bzl", "minikube_tool") + +minikube_tool( + name = "minikube_binary", +) diff --git a/infrastructure/BUILD b/infrastructure/BUILD index 447ef02f2f..c5fb2ab93a 100644 --- a/infrastructure/BUILD +++ b/infrastructure/BUILD @@ -1,3 +1,13 @@ +load("@com_github_airyhq_bazel_tools//minikube:minikube.bzl", "minikube_start", "minikube_stop") + exports_files([ "defaults.yaml", ]) + +minikube_start( + name = "minikube-start", +) + +minikube_stop( + name = "minikube-stop", +) From 6673a5b5bbd84b775726fd5dd3dda24016c66bd4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 14:56:40 +0200 Subject: [PATCH 44/92] Bump @testing-library/dom from 8.16.0 to 8.16.1 (#3551) Bumps [@testing-library/dom](https://github.com/testing-library/dom-testing-library) from 8.16.0 to 8.16.1. - [Release notes](https://github.com/testing-library/dom-testing-library/releases) - [Changelog](https://github.com/testing-library/dom-testing-library/blob/main/CHANGELOG.md) - [Commits](https://github.com/testing-library/dom-testing-library/compare/v8.16.0...v8.16.1) --- updated-dependencies: - dependency-name: "@testing-library/dom" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 4b5206418b..1f78aa39e1 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "@hot-loader/react-dom": "^17.0.2", "@svgr/plugin-svgo": "^6.3.1", "@svgr/webpack": "^6.3.1", - "@testing-library/dom": "^8.16.0", + "@testing-library/dom": "^8.16.1", "@testing-library/react": "13.3.0", "@types/dom-mediacapture-record": "^1.0.11", "@types/lodash-es": "^4.17.6", diff --git a/yarn.lock b/yarn.lock index 9c3972c855..d4c9e5a580 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1654,10 +1654,10 @@ "@svgr/plugin-jsx" "^6.3.1" "@svgr/plugin-svgo" "^6.3.1" -"@testing-library/dom@^8.16.0", "@testing-library/dom@^8.5.0": - version "8.16.0" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.16.0.tgz#d6fc50250aed17b1035ca1bd64655e342db3936a" - integrity sha512-uxF4zmnLHHDlmW4l+0WDjcgLVwCvH+OVLpD8Dfp+Bjfz85prwxWGbwXgJdLtkgjD0qfOzkJF9SmA6YZPsMYX4w== +"@testing-library/dom@^8.16.1", "@testing-library/dom@^8.5.0": + version "8.16.1" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.16.1.tgz#96e528c9752d60061128f043e2b43566c0aba2d9" + integrity sha512-XEV2mBxgv6DKjL3+U3WEUzBgT2CjYksoXGlLrrJXYP8OvRfGkBonvelkorazpFlp8tkEecO06r43vN4DIEyegQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" From 828557958dce006701ec44cb88a53bba7b59fa14 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 15:18:38 +0200 Subject: [PATCH 45/92] Bump cypress from 10.3.1 to 10.4.0 (#3549) Bumps [cypress](https://github.com/cypress-io/cypress) from 10.3.1 to 10.4.0. - [Release notes](https://github.com/cypress-io/cypress/releases) - [Changelog](https://github.com/cypress-io/cypress/blob/develop/.releaserc.base.js) - [Commits](https://github.com/cypress-io/cypress/compare/v10.3.1...v10.4.0) --- updated-dependencies: - dependency-name: cypress dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 1f78aa39e1..6f4aa406ad 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "babel-loader": "^8.2.5", "copy-webpack-plugin": "^11.0.0", "css-loader": "^6.7.1", - "cypress": "10.3.1", + "cypress": "10.4.0", "dotenv-webpack": "^8.0.0", "eslint": "^7.32.0", "eslint-plugin-react": "^7.30.1", diff --git a/yarn.lock b/yarn.lock index d4c9e5a580..d32c768907 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3381,10 +3381,10 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== -cypress@10.3.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.3.1.tgz#7fab4ef43481c05a9a17ebe9a0ec860e15b95a19" - integrity sha512-As9HrExjAgpgjCnbiQCuPdw5sWKx5HUJcK2EOKziu642akwufr/GUeqL5UnCPYXTyyibvEdWT/pSC2qnGW/e5w== +cypress@10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.4.0.tgz#bb5b3b6588ad49eff172fecf5778cc0da2980e4e" + integrity sha512-OM7F8MRE01SHQRVVzunid1ZK1m90XTxYnl+7uZfIrB4CYqUDCrZEeSyCXzIbsS6qcaijVCAhqDL60SxG8N6hew== dependencies: "@cypress/request" "^2.88.10" "@cypress/xvfb" "^1.2.4" From edb561173810bf79d0950c48d8dbd24af765d542 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 15:22:53 +0200 Subject: [PATCH 46/92] Bump @babel/preset-env from 7.18.9 to 7.18.10 (#3552) Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.18.9 to 7.18.10. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.10/packages/babel-preset-env) --- updated-dependencies: - dependency-name: "@babel/preset-env" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 127 ++++++++++++++++++++++++++++----------------------- 2 files changed, 70 insertions(+), 59 deletions(-) diff --git a/package.json b/package.json index 6f4aa406ad..692721ab5c 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@babel/plugin-proposal-class-properties": "^7.16.7", "@babel/plugin-proposal-object-rest-spread": "^7.18.9", "@babel/plugin-transform-spread": "^7.18.9", - "@babel/preset-env": "^7.18.9", + "@babel/preset-env": "^7.18.10", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", "@bazel/typescript": "5.5.3", diff --git a/yarn.lock b/yarn.lock index d32c768907..b6ccb2d36c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,7 +24,7 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.8": +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== @@ -74,7 +74,7 @@ "@babel/helper-explode-assignable-expression" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.9": +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== @@ -105,15 +105,13 @@ "@babel/helper-annotate-as-pure" "^7.18.6" regexpu-core "^5.1.0" -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== +"@babel/helper-define-polyfill-provider@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073" + integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg== dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" @@ -173,13 +171,6 @@ dependencies: "@babel/types" "^7.18.9" -"@babel/helper-module-imports@^7.12.13": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-module-imports@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" @@ -208,7 +199,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== @@ -223,6 +214,16 @@ "@babel/helper-wrap-function" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + "@babel/helper-replace-supers@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz#efedf51cfccea7b7b8c0f00002ab317e7abfe420" @@ -296,6 +297,16 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-wrap-function@^7.18.9": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz#bff23ace436e3f6aefb61f85ffae2291c80ed1fb" + integrity sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w== + dependencies: + "@babel/helper-function-name" "^7.18.9" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.11" + "@babel/types" "^7.18.10" + "@babel/helpers@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" @@ -344,14 +355,14 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-proposal-optional-chaining" "^7.18.9" -"@babel/plugin-proposal-async-generator-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz#aedac81e6fc12bb643374656dd5f2605bf743d17" - integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== +"@babel/plugin-proposal-async-generator-functions@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz#85ea478c98b0095c3e4102bff3b67d306ed24952" + integrity sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew== dependencies: - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-proposal-class-properties@^7.16.7", "@babel/plugin-proposal-class-properties@^7.18.6": @@ -899,12 +910,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-typescript" "^7.18.6" -"@babel/plugin-transform-unicode-escapes@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz#0d01fb7fb2243ae1c033f65f6e3b4be78db75f27" - integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== +"@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-unicode-regex@^7.18.6": version "7.18.6" @@ -914,10 +925,10 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@^7.18.2", "@babel/preset-env@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.9.tgz#9b3425140d724fbe590322017466580844c7eaff" - integrity sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg== +"@babel/preset-env@^7.18.10", "@babel/preset-env@^7.18.2": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.10.tgz#83b8dfe70d7eea1aae5a10635ab0a5fe60dfc0f4" + integrity sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA== dependencies: "@babel/compat-data" "^7.18.8" "@babel/helper-compilation-targets" "^7.18.9" @@ -925,7 +936,7 @@ "@babel/helper-validator-option" "^7.18.6" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.18.6" + "@babel/plugin-proposal-async-generator-functions" "^7.18.10" "@babel/plugin-proposal-class-properties" "^7.18.6" "@babel/plugin-proposal-class-static-block" "^7.18.6" "@babel/plugin-proposal-dynamic-import" "^7.18.6" @@ -985,13 +996,13 @@ "@babel/plugin-transform-sticky-regex" "^7.18.6" "@babel/plugin-transform-template-literals" "^7.18.9" "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.6" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.9" - babel-plugin-polyfill-corejs2 "^0.3.1" - babel-plugin-polyfill-corejs3 "^0.5.2" - babel-plugin-polyfill-regenerator "^0.3.1" + "@babel/types" "^7.18.10" + babel-plugin-polyfill-corejs2 "^0.3.2" + babel-plugin-polyfill-corejs3 "^0.5.3" + babel-plugin-polyfill-regenerator "^0.4.0" core-js-compat "^3.22.1" semver "^6.3.0" @@ -1043,7 +1054,7 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": +"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.11", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": version "7.18.11" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== @@ -1059,7 +1070,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.18.10", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== @@ -2697,29 +2708,29 @@ babel-plugin-jest-hoist@^28.1.3: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== +babel-plugin-polyfill-corejs2@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" + integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q== dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.2" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== +babel-plugin-polyfill-corejs3@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" + integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/helper-define-polyfill-provider" "^0.3.2" core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== +babel-plugin-polyfill-regenerator@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe" + integrity sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/helper-define-polyfill-provider" "^0.3.2" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" From ba49b6456c2a42e4cf8005b4c6fb34a4f32904a8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 15:27:05 +0200 Subject: [PATCH 47/92] Bump @types/react from 18.0.15 to 18.0.17 (#3548) Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.0.15 to 18.0.17. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 4 ++-- yarn.lock | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 692721ab5c..eb70fe7805 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "@types/dom-mediacapture-record": "^1.0.11", "@types/lodash-es": "^4.17.6", "@types/node": "18.6.4", - "@types/react": "18.0.15", + "@types/react": "18.0.17", "@types/react-dom": "18.0.6", "@types/react-redux": "7.1.24", "@types/react-router-dom": "^5.3.3", @@ -93,6 +93,6 @@ "webpack-dev-server": "^4.9.3" }, "resolutions": { - "@types/react": "18.0.15" + "@types/react": "18.0.17" } } diff --git a/yarn.lock b/yarn.lock index b6ccb2d36c..a947d462f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2061,10 +2061,10 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@18.0.15": - version "18.0.15" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" - integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== +"@types/react@*", "@types/react@18.0.17": + version "18.0.17" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.17.tgz#4583d9c322d67efe4b39a935d223edcc7050ccf4" + integrity sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" From 74fc042f11107bf49a75b130447a3438a80c70b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 19:18:13 +0200 Subject: [PATCH 48/92] Bump @testing-library/jest-dom from 5.16.4 to 5.16.5 (#3550) Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 5.16.4 to 5.16.5. - [Release notes](https://github.com/testing-library/jest-dom/releases) - [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md) - [Commits](https://github.com/testing-library/jest-dom/compare/v5.16.4...v5.16.5) --- updated-dependencies: - dependency-name: "@testing-library/jest-dom" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 44 +++++++++++--------------------------------- 2 files changed, 12 insertions(+), 34 deletions(-) diff --git a/package.json b/package.json index eb70fe7805..48ea83e9b4 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7", "@reduxjs/toolkit": "^1.8.3", "@stomp/stompjs": "^6.1.2", - "@testing-library/jest-dom": "^5.16.4", + "@testing-library/jest-dom": "^5.16.5", "@testing-library/user-event": "^14.4.2", "@types/jest": "^28.1.6", "audio-recorder-polyfill": "^0.4.1", diff --git a/yarn.lock b/yarn.lock index a947d462f0..7c161f84d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@adobe/css-tools@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.0.1.tgz#b38b444ad3aa5fedbb15f2f746dcd934226a12dd" + integrity sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g== + "@ampproject/remapping@^2.1.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" @@ -1679,16 +1684,16 @@ lz-string "^1.4.4" pretty-format "^27.0.2" -"@testing-library/jest-dom@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.4.tgz#938302d7b8b483963a3ae821f1c0808f872245cd" - integrity sha512-Gy+IoFutbMQcky0k+bqqumXZ1cTGswLsFqmNLzNdSKkU9KGV2u9oXhukCbbJ9/LRPKiqwxEE8VpV/+YZlfkPUA== +"@testing-library/jest-dom@^5.16.5": + version "5.16.5" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz#3912846af19a29b2dbf32a6ae9c31ef52580074e" + integrity sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA== dependencies: + "@adobe/css-tools" "^4.0.1" "@babel/runtime" "^7.9.2" "@types/testing-library__jest-dom" "^5.9.1" aria-query "^5.0.0" chalk "^3.0.0" - css "^3.0.0" css.escape "^1.5.1" dom-accessibility-api "^0.5.6" lodash "^4.17.15" @@ -2632,11 +2637,6 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - audio-recorder-polyfill@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/audio-recorder-polyfill/-/audio-recorder-polyfill-0.4.1.tgz#4290eca3d8edf49eb6daba59592aacf357b6e5b7" @@ -3349,15 +3349,6 @@ css.escape@^1.5.1: resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= -css@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" - integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== - dependencies: - inherits "^2.0.4" - source-map "^0.6.1" - source-map-resolve "^0.6.0" - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -3494,11 +3485,6 @@ decode-named-character-reference@^1.0.0: dependencies: character-entities "^2.0.0" -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" @@ -4896,7 +4882,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -7610,14 +7596,6 @@ sockjs@^0.3.24: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" From 81baaae514a4bd82c89b98b6f2e4094a6a4b3c58 Mon Sep 17 00:00:00 2001 From: Audrey Kadjar Date: Tue, 9 Aug 2022 10:45:17 +0200 Subject: [PATCH 49/92] [#3402] adjust catalog view to remove install and uninstalled title (#3557) * tabspanel wip * tabs wip * wip * catalogcard wup * catalog revamp wip * wip * card fix * wip * catalog cards finished - wip * card wip * functionality done - still wip * working version * catalog fix * config status bug fix * fixes * update whatsapp business cloud cards * typing fix * svg fix --- .../src/components/ChannelAvatar/index.tsx | 13 ++ .../InfoCard/index.module.scss | 11 +- .../InfoCard/index.tsx | 46 +----- .../Catalog/CatalogCard/getRouteForCard.ts | 69 +++++++++ .../Catalog/CatalogCard/index.module.scss | 142 ++++++++++++++++++ .../src/pages/Catalog/CatalogCard/index.tsx | 127 ++++++++++++++++ .../src/pages/Catalog/CatalogItemList.tsx | 43 ------ .../src/pages/Catalog/index.module.scss | 35 +---- .../src/pages/Catalog/index.tsx | 141 ++++------------- .../Connectors/ConfigStatusButton/index.tsx | 9 -- .../ChannelsListItem/index.module.scss | 4 + .../ChannelsListItem/index.tsx | 2 +- .../ConnectorConfig/index.module.scss | 11 +- .../Connectors/ConnectorConfig/index.tsx | 5 +- .../ChatPlugin/ChatPluginConnect.module.scss | 6 + .../Airy/ChatPlugin/ChatPluginConnect.tsx | 2 +- .../src/pages/Connectors/index.tsx | 9 +- .../Status/ComponentListItem/ItemInfo.tsx | 2 +- .../ComponentListItem/index.module.scss | 4 + .../control-center/src/pages/Status/index.tsx | 6 +- .../src/pages/Webhooks/EmptyState/index.tsx | 1 + .../src/reducers/data/catalog/index.ts | 3 +- frontend/control-center/src/routes/routes.ts | 15 +- .../control-center/src/services/format.ts | 4 +- .../src/services/getComponentStatus.ts | 8 +- .../assets/images/icons/checkmarkFilled.svg | 4 +- lib/typescript/assets/scss/colors.scss | 1 + .../SettingsModal/ModalHeader.module.scss | 2 - .../components/alerts/SettingsModal/index.tsx | 4 +- .../components/cta/Button/index.tsx | 13 +- .../components/cta/Button/style.module.scss | 13 ++ .../general/TabsPanel/index.module.scss | 67 +++++++++ .../components/general/TabsPanel/index.tsx | 84 +++++++++++ lib/typescript/components/general/index.ts | 1 + lib/typescript/components/index.ts | 1 + .../wrapper/ContentWrapper/index.module.scss | 10 +- .../wrapper/ContentWrapper/index.tsx | 11 +- lib/typescript/model/Components.ts | 10 ++ lib/typescript/model/Source.ts | 18 ++- lib/typescript/translations/translations.ts | 34 +++-- 40 files changed, 708 insertions(+), 283 deletions(-) rename frontend/control-center/src/{pages/Connectors => components}/InfoCard/index.module.scss (96%) rename frontend/control-center/src/{pages/Connectors => components}/InfoCard/index.tsx (72%) create mode 100644 frontend/control-center/src/pages/Catalog/CatalogCard/getRouteForCard.ts create mode 100644 frontend/control-center/src/pages/Catalog/CatalogCard/index.module.scss create mode 100644 frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx delete mode 100644 frontend/control-center/src/pages/Catalog/CatalogItemList.tsx create mode 100644 lib/typescript/components/general/TabsPanel/index.module.scss create mode 100644 lib/typescript/components/general/TabsPanel/index.tsx diff --git a/frontend/control-center/src/components/ChannelAvatar/index.tsx b/frontend/control-center/src/components/ChannelAvatar/index.tsx index d1166f4662..796d5361d4 100644 --- a/frontend/control-center/src/components/ChannelAvatar/index.tsx +++ b/frontend/control-center/src/components/ChannelAvatar/index.tsx @@ -9,6 +9,8 @@ import {ReactComponent as TwilioAvatar} from 'assets/images/icons/twilioLogo.svg import {ReactComponent as ViberAvatar} from 'assets/images/icons/viberLogoFilled.svg'; import {ReactComponent as ZendeskAvatar} from 'assets/images/icons/zendeskLogo.svg'; import {ReactComponent as DialogflowAvatar} from 'assets/images/icons/dialogflowLogo.svg'; +import {ReactComponent as SalesforceAvatar} from 'assets/images/icons/salesforceLogo.svg'; + import {Channel, Source} from 'model'; import styles from './index.module.scss'; @@ -31,23 +33,34 @@ const fallbackImageUrl = (event: SyntheticEvent, source export const getChannelAvatar = (source: string) => { switch (source) { case Source.facebook: + case 'Facebook Messenger': return ; case Source.google: + case 'Google Business Messages': return ; case Source.twilioSMS: + case 'Twilio SMS': return ; case Source.twilioWhatsApp: + case 'WhatsApp Business Cloud': return ; case Source.twilio: return ; case Source.instagram: + case 'Instagram': return ; case Source.viber: + case 'Viber': return ; case Source.zendesk: + case 'Zendesk': return ; case Source.dialogflow: + case 'Dialogflow': return ; + case Source.salesforce: + case 'Salesforce': + return ; default: return ; } diff --git a/frontend/control-center/src/pages/Connectors/InfoCard/index.module.scss b/frontend/control-center/src/components/InfoCard/index.module.scss similarity index 96% rename from frontend/control-center/src/pages/Connectors/InfoCard/index.module.scss rename to frontend/control-center/src/components/InfoCard/index.module.scss index b76ba57f7b..25fefa8061 100644 --- a/frontend/control-center/src/pages/Connectors/InfoCard/index.module.scss +++ b/frontend/control-center/src/components/InfoCard/index.module.scss @@ -138,11 +138,12 @@ } } -.enableModalContainer button { - margin-top: 14px; - padding: 0 60px; -} - .headerModal { @include font-xl; } + +.checkmarkIcon { + width: 15%; + margin-bottom: 30px; + fill: var(--color-soft-green); +} diff --git a/frontend/control-center/src/pages/Connectors/InfoCard/index.tsx b/frontend/control-center/src/components/InfoCard/index.tsx similarity index 72% rename from frontend/control-center/src/pages/Connectors/InfoCard/index.tsx rename to frontend/control-center/src/components/InfoCard/index.tsx index a1c455e27a..a83ed921f7 100644 --- a/frontend/control-center/src/pages/Connectors/InfoCard/index.tsx +++ b/frontend/control-center/src/components/InfoCard/index.tsx @@ -1,15 +1,15 @@ import React, {useState, useEffect} from 'react'; -import {SourceInfo} from '../../../components/SourceInfo'; +import {SourceInfo} from '../SourceInfo'; import {useNavigate} from 'react-router-dom'; import {ReactComponent as CheckmarkIcon} from 'assets/images/icons/checkmarkFilled.svg'; -import {CATALOG_ROUTE, CONNECTORS_ROUTE} from '../../../routes/routes'; +import {CONNECTORS_ROUTE} from '../../routes/routes'; import {Button, SettingsModal} from 'components'; -import {installComponent, uninstallComponent} from '../../../actions/catalog'; +import {installComponent, uninstallComponent} from '../../actions/catalog'; import {useTranslation} from 'react-i18next'; import {connect, ConnectedProps} from 'react-redux'; -import {ConfigStatusButton} from '../ConfigStatusButton'; +import {ConfigStatusButton} from '../../pages/Connectors/ConfigStatusButton'; +import {ComponentStatus} from '../../pages/Connectors'; import styles from './index.module.scss'; -import {ComponentStatus} from '..'; export enum InfoCardStyle { normal = 'normal', @@ -22,8 +22,6 @@ type InfoCardProps = { installed: boolean; componentStatus?: ComponentStatus; style: InfoCardStyle; - updateItemList?: (installed: boolean, componentName: string) => void; - setIsInstalledToggled?: React.Dispatch>; } & ConnectedProps; const mapDispatchToProps = { @@ -34,42 +32,21 @@ const mapDispatchToProps = { const connector = connect(null, mapDispatchToProps); const InfoCard = (props: InfoCardProps) => { - const { - sourceInfo, - addChannelAction, - installed, - style, - componentStatus, - installComponent, - uninstallComponent, - updateItemList, - setIsInstalledToggled, - } = props; + const {sourceInfo, addChannelAction, installed, style, uninstallComponent, componentStatus} = props; const [isInstalled, setIsInstalled] = useState(installed); const [isModalVisible, setIsModalVisible] = useState(false); const [modalTitle, setModalTitle] = useState(''); const {t} = useTranslation(); const navigate = useNavigate(); const CONNECTORS_PAGE = window.location.pathname.includes(CONNECTORS_ROUTE); - const CATALOG_PAGE = window.location.pathname.includes(CATALOG_ROUTE); useEffect(() => { const title = isInstalled ? t('uninstall') + ' ' + sourceInfo.title : sourceInfo.title + ' ' + t('installed'); setModalTitle(title); }, [isInstalled]); - const openInstallModal = () => { - setIsInstalledToggled(true); - setIsModalVisible(true); - - if (!isInstalled) { - installComponent({name: `${sourceInfo.repository}/${sourceInfo.componentName}`}); - } - }; - const toggleInstallation = () => { setIsInstalled(!isInstalled); - updateItemList(!isInstalled, sourceInfo.componentName); }; const cancelInstallationToggle = () => { @@ -128,20 +105,11 @@ const InfoCard = (props: InfoCardProps) => {
- {CATALOG_PAGE && ( - <> - {!installed &&

{sourceInfo.description}

} - - - )} - {componentStatus && } {isModalVisible && ( : null} wrapperClassName={styles.enableModalContainerWrapper} containerClassName={styles.enableModalContainer} title={modalTitle} diff --git a/frontend/control-center/src/pages/Catalog/CatalogCard/getRouteForCard.ts b/frontend/control-center/src/pages/Catalog/CatalogCard/getRouteForCard.ts new file mode 100644 index 0000000000..a2cfc0b438 --- /dev/null +++ b/frontend/control-center/src/pages/Catalog/CatalogCard/getRouteForCard.ts @@ -0,0 +1,69 @@ +import { + CONNECTORS_CHAT_PLUGIN_CONNECTED_ROUTE, + CONNECTORS_FACEBOOK_CONNECTED_ROUTE, + CONNECTORS_TWILIO_SMS_CONNECTED_ROUTE, + CONNECTORS_TWILIO_WHATSAPP_CONNECTED_ROUTE, + CONNECTORS_WHATSAPP_BUSINESS_CLOUD_CONNECTED_ROUTE, + CONNECTORS_GOOGLE_CONNECTED_ROUTE, + CONNECTORS_INSTAGRAM_CONNECTED_ROUTE, + CONNECTORS_FACEBOOK_ROUTE, + CONNECTORS_CHAT_PLUGIN_ROUTE, + CONNECTORS_TWILIO_SMS_ROUTE, + CONNECTORS_TWILIO_WHATSAPP_ROUTE, + CONNECTORS_GOOGLE_ROUTE, + CONNECTORS_INSTAGRAM_ROUTE, + CONNECTORS_DIALOGFLOW_ROUTE, + CONNECTORS_ZENDESK_ROUTE, + CONNECTORS_SALESFORCE_ROUTE, + CONNECTORS_WHATSAPP_BUSINESS_CLOUD_ROUTE, +} from '../../../routes/routes'; + +export const getConnectedRouteForComponent = (displayName: string) => { + switch (displayName) { + case 'Airy Chat Plugin': + return CONNECTORS_CHAT_PLUGIN_CONNECTED_ROUTE; + case 'Facebook Messenger': + return CONNECTORS_FACEBOOK_CONNECTED_ROUTE; + case 'Twilio SMS': + return CONNECTORS_TWILIO_SMS_CONNECTED_ROUTE; + case 'Twilio WhatsApp': + return CONNECTORS_TWILIO_WHATSAPP_CONNECTED_ROUTE; + case 'WhatsApp Business Cloud': + return CONNECTORS_WHATSAPP_BUSINESS_CLOUD_CONNECTED_ROUTE; + case 'Google Business Messages': + return CONNECTORS_GOOGLE_CONNECTED_ROUTE; + case 'Instagram': + return CONNECTORS_INSTAGRAM_CONNECTED_ROUTE; + case 'Dialogflow': + return CONNECTORS_DIALOGFLOW_ROUTE + '/new'; + case 'Salesforce': + return CONNECTORS_SALESFORCE_ROUTE + '/new'; + case 'Zendesk': + return CONNECTORS_ZENDESK_ROUTE + '/new'; + } +}; + +export const getNewChannelRouteForComponent = (displayName: string) => { + switch (displayName) { + case 'Airy Chat Plugin': + return CONNECTORS_CHAT_PLUGIN_ROUTE + '/new'; + case 'Facebook Messenger': + return CONNECTORS_FACEBOOK_ROUTE + '/new'; + case 'Twilio SMS': + return CONNECTORS_TWILIO_SMS_ROUTE + '/new'; + case 'Twilio WhatsApp': + return CONNECTORS_TWILIO_WHATSAPP_ROUTE + '/new'; + case 'WhatsApp Business Cloud': + return CONNECTORS_WHATSAPP_BUSINESS_CLOUD_ROUTE + '/new'; + case 'Google Business Messages': + return CONNECTORS_GOOGLE_ROUTE + '/new'; + case 'Instagram': + return CONNECTORS_INSTAGRAM_ROUTE + '/new'; + case 'Dialogflow': + return CONNECTORS_DIALOGFLOW_ROUTE + '/new'; + case 'Salesforce': + return CONNECTORS_SALESFORCE_ROUTE + '/new'; + case 'Zendesk': + return CONNECTORS_ZENDESK_ROUTE + '/new'; + } +}; diff --git a/frontend/control-center/src/pages/Catalog/CatalogCard/index.module.scss b/frontend/control-center/src/pages/Catalog/CatalogCard/index.module.scss new file mode 100644 index 0000000000..d3db45cc0b --- /dev/null +++ b/frontend/control-center/src/pages/Catalog/CatalogCard/index.module.scss @@ -0,0 +1,142 @@ +@import 'assets/scss/fonts.scss'; +@import 'assets/scss/colors.scss'; +@import 'assets/scss/z-index.scss'; + +.catalogCard { + width: 340px; + height: 248px; + margin-bottom: 28px; + margin-right: 36px; + padding: 0px 12px 0px 20px; + display: flex; + flex-direction: column; + background-color: var(--color-background-blue); + border-radius: 10px; + border: 1px solid var(--color-dark-elements-gray); + outline: 2px solid transparent; + @include font-s; + transition: all 0.1s; + + &:hover { + outline: 2px solid var(--color-airy-blue); + border: 1px solid transparent; + cursor: pointer; + } +} + +.cardLogoTitleContainer { + display: flex; + align-items: flex-start; + height: 50%; + border-bottom: 1px solid var(--color-light-gray); + margin-top: 15px; + + .componentLogo { + display: flex; + align-items: center; + flex-direction: column; + + button { + margin-top: 14px; + } + + svg { + height: 55px; + fill: var(--color-text-contrast); + } + } +} + +.componentInfo { + margin-left: 10px; + h1 { + @include font-s-bold; + color: var(--color-text-contrast); + font-weight: 600; + letter-spacing: 0; + } + + p { + @include font-s; + margin: 10px 0 0 0; + color: var(--color-text-gray); + + span { + font-weight: bold; + } + } +} + +.descriptionInfo { + height: 50%; + margin-top: 10px; + + p { + width: 98%; + color: var(--color-text-contrast); + } + + button { + border: 1px solid var(--color-airy-blue); + @include font-xs; + border-radius: 20px; + background: transparent; + color: var(--color-airy-blue); + padding: 5px; + margin-right: 5px; + margin-top: 8px; + } +} + +.availability { + display: flex; + align-items: center; + color: var(--color-airy-blue); + @include font-s; + margin-top: 16px; + svg { + fill: var(--color-airy-blue); + width: 14px; + margin-right: 5px; + display: flex; + align-items: center; + } +} + +.bolded { + font-weight: 800; +} + +.checkmarkIcon { + width: 15%; + margin-bottom: 30px; + fill: var(--color-soft-green); +} + +.enableModalContainerWrapper { + width: 50%; + height: 70%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.enableModalContainer { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + @include font-l; + + p { + max-width: 70%; + text-align: center; + margin: 4px 0 20px 0; + color: var(--color-text-contrast); + } +} + +.headerModal { + @include font-xl; +} diff --git a/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx b/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx new file mode 100644 index 0000000000..882f329b7f --- /dev/null +++ b/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx @@ -0,0 +1,127 @@ +import React, {useState} from 'react'; +import {useNavigate} from 'react-router-dom'; +import {ComponentInfo, getSourceForComponent} from 'model'; +import {ReactComponent as CheckmarkIcon} from 'assets/images/icons/checkmarkFilled.svg'; +import {Button, SettingsModal} from 'components'; +import {installComponent} from '../../../actions/catalog'; +import {useTranslation} from 'react-i18next'; +import {connect, ConnectedProps} from 'react-redux'; +import {getChannelAvatar} from '../../../components/ChannelAvatar'; +import {getConnectedRouteForComponent, getNewChannelRouteForComponent} from './getRouteForCard'; +import styles from './index.module.scss'; + +type CatalogCardProps = { + componentInfo: ComponentInfo; +} & ConnectedProps; + +const mapDispatchToProps = { + installComponent, +}; + +const connector = connect(null, mapDispatchToProps); + +const CatalogCard = (props: CatalogCardProps) => { + const {componentInfo, installComponent} = props; + const [isInstalled, setIsInstalled] = useState(componentInfo.installed); + const [isModalVisible, setIsModalVisible] = useState(false); + const {t} = useTranslation(); + const navigate = useNavigate(); + + const CONFIG_CONNECTED_ROUTE = getConnectedRouteForComponent(componentInfo.displayName); + const NEW_CHANNEL_ROUTE = getNewChannelRouteForComponent(componentInfo.displayName); + + const openInstallModal = () => { + setIsModalVisible(true); + installComponent({name: componentInfo.name}); + }; + + const cancelInstallationToggle = () => { + setIsModalVisible(false); + setIsInstalled(!isInstalled); + }; + + const availabilityFormatted = (availability: string) => availability.split(','); + + const CatalogCardButton = () => { + if (isInstalled) { + return ( + + ); + } + + return ( + + ); + }; + + const DescriptionComponent = (props: {description: string}) => { + const {description} = props; + const {t} = useTranslation(); + return <>{t(description)}; + }; + + const getDescriptionSourceName = (name: string, displayName: string) => { + if (displayName.includes('SMS')) return 'twiliosms'; + if (displayName.includes('WhatsApp')) return 'twilioWhatsapp'; + return getSourceForComponent(name)?.replace('.', ''); + }; + + return ( +
+
+
+ {getChannelAvatar(componentInfo.displayName)} + +
+
+

{componentInfo.displayName}

+ +

+ {' '} + {t('categories')} {componentInfo.category}{' '} +

+
+
+ +
+ {componentInfo.name && ( +

+ +

+ )} + +

+ + {t('availableFor')}: +

+ {componentInfo?.availableFor && + availabilityFormatted(componentInfo.availableFor).map((service: string) => ( + + ))} +
+ + {isModalVisible && ( + } + wrapperClassName={styles.enableModalContainerWrapper} + containerClassName={styles.enableModalContainer} + title={`${componentInfo.displayName} ${t('installed')}`} + close={cancelInstallationToggle} + headerClassName={styles.headerModal} + > + + + )} +
+ ); +}; + +export default connector(CatalogCard); diff --git a/frontend/control-center/src/pages/Catalog/CatalogItemList.tsx b/frontend/control-center/src/pages/Catalog/CatalogItemList.tsx deleted file mode 100644 index 38ad9b0221..0000000000 --- a/frontend/control-center/src/pages/Catalog/CatalogItemList.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; -import InfoCard, {InfoCardStyle} from '../Connectors/InfoCard'; -import {useNavigate} from 'react-router-dom'; -import {SourceInfo} from '../../components/SourceInfo'; -import styles from './index.module.scss'; -import {useTranslation} from 'react-i18next'; - -interface CatalogItemListProps { - list: SourceInfo[]; - installedConnectors: boolean; - setDisplayDialogFromSource: React.Dispatch>; - updateItemList: (installed: boolean, componentName: string) => void; - setIsInstalledToggled: React.Dispatch>; -} - -export const CatalogItemList = (props: CatalogItemListProps) => { - const {list, installedConnectors, updateItemList, setIsInstalledToggled} = props; - const {t} = useTranslation(); - - const navigate = useNavigate(); - - return ( -
-

{installedConnectors ? t('installed') : t('notInstalled')}

- -
- {list.map(infoItem => ( - - installedConnectors ? navigate(infoItem.channelsListRoute) : navigate(infoItem.newChannelRoute) - } - /> - ))} -
-
- ); -}; diff --git a/frontend/control-center/src/pages/Catalog/index.module.scss b/frontend/control-center/src/pages/Catalog/index.module.scss index 415bcb71c6..e806ff4d8d 100644 --- a/frontend/control-center/src/pages/Catalog/index.module.scss +++ b/frontend/control-center/src/pages/Catalog/index.module.scss @@ -3,7 +3,6 @@ .catalogWrapper { background: var(--color-background-white); - color: var(--color-text-contrast); border-top-right-radius: 10px; border-top-left-radius: 10px; padding: 32px; @@ -14,40 +13,14 @@ width: 100%; } -.catalogHeadline { - @include font-xl; - font-weight: 900; - letter-spacing: 0; +.catalogListContainer { display: flex; - justify-content: space-between; - color: var(--color-text-contrast); - margin-bottom: 36px; + flex-wrap: wrap; } .catalogHeadlineText { @include font-xl; font-weight: 900; -} - -.listWrapper { - display: flex; - flex-direction: row; - flex-wrap: wrap; -} - -.connectorContainer { - width: 100%; - border-top: 1px solid var(--color-light-gray); - padding-top: 14px; - - h2 { - @include font-l; - font-weight: 700; - margin-bottom: 14px; - } -} - -.connectorList { - display: flex; - flex-wrap: wrap; + margin-bottom: 15px; + color: var(--color-text-contrast); } diff --git a/frontend/control-center/src/pages/Catalog/index.tsx b/frontend/control-center/src/pages/Catalog/index.tsx index 0cc0c3f115..2bcd177c08 100644 --- a/frontend/control-center/src/pages/Catalog/index.tsx +++ b/frontend/control-center/src/pages/Catalog/index.tsx @@ -1,18 +1,11 @@ -import React, {useEffect, useState} from 'react'; -import {connect, ConnectedProps} from 'react-redux'; -import {StateModel} from '../../reducers'; -import {useSelector} from 'react-redux'; -import {FacebookMessengerRequirementsDialog} from '../Connectors/Providers/Facebook/Messenger/FacebookMessengerRequirementsDialog'; -import {GoogleBusinessMessagesRequirementsDialog} from '../Connectors/Providers/Google/GoogleBusinessMessagesRequirementsDialog'; -import {TwilioRequirementsDialog} from '../Connectors/Providers/Twilio/TwilioRequirementsDialog'; -import {InstagramRequirementsDialog} from '../Connectors/Providers/Instagram/InstagramRequirementsDialog'; -import {setPageTitle} from '../../services/pageTitle'; -import {CatalogItemList} from './CatalogItemList'; -import {Source} from 'model'; -import {getSourcesInfo, SourceInfo} from '../../components/SourceInfo'; -import {SimpleLoader} from 'components'; +import React, {useState, useEffect} from 'react'; +import {useTranslation} from 'react-i18next'; +import {connect, ConnectedProps, useSelector} from 'react-redux'; import {listComponents} from '../../actions/catalog'; -import {removePrefix} from '../../services'; +import {StateModel} from '../../reducers'; +import {setPageTitle} from '../../services'; +import {ComponentInfo, getSourceForComponent} from 'model'; +import CatalogCard from './CatalogCard'; import styles from './index.module.scss'; const mapDispatchToProps = { @@ -23,116 +16,38 @@ const connector = connect(null, mapDispatchToProps); const Catalog = (props: ConnectedProps) => { const {listComponents} = props; + const [orderedCatalogList, setOrderedCatalogList] = useState([]); const catalogList = useSelector((state: StateModel) => state.data.catalog); - const [displayDialogFromSource, setDisplayDialogFromSource] = useState(''); - const [notInstalledConnectors, setNotInstalledConnectors] = useState([]); - const [installedConnectors, setInstalledConnectors] = useState([]); - const [sourcesInfo, setSourcesInfo] = useState([]); - const [isInstallToggled, setIsInstalledToggled] = useState(false); - const pageTitle = 'Catalog'; + const {t} = useTranslation(); + const catalogPageTitle = t('Catalog'); useEffect(() => { listComponents(); - setPageTitle(pageTitle); - setSourcesInfo(getSourcesInfo()); + setPageTitle(catalogPageTitle); }, []); useEffect(() => { - if (sourcesInfo.length > 0 && !isInstallToggled) { - let installedComponents = []; - let uninstalledComponents = []; - - Object.entries(catalogList).filter((componentElem: [string, {repository: string; installed: boolean}]) => { - if (componentElem[1].installed === true) { - installedComponents = installedComponents.concat(findComponent(removePrefix(componentElem[0]))); - } - - if (componentElem[1].installed === false) { - uninstalledComponents = uninstalledComponents.concat(findComponent(removePrefix(componentElem[0]))); - } - }); - - setInstalledConnectors(installedComponents); - setNotInstalledConnectors(uninstalledComponents); - } - }, [sourcesInfo, catalogList, isInstallToggled]); + setOrderedCatalogList(Object.values(catalogList).sort(sortByInstall)); + }, [catalogList]); - const findComponent = (name: string) => { - return sourcesInfo.filter((elem: SourceInfo) => elem.componentName === name); - }; - - const updateItemList = (installed: boolean, componentName: string) => { - if (!installed) { - const updatedInstalledList = installedConnectors.filter( - (elem: SourceInfo) => elem.componentName !== componentName - ); - const updatedNotInstalledList = notInstalledConnectors.concat(findComponent(componentName)); - - setInstalledConnectors(updatedInstalledList); - setNotInstalledConnectors(updatedNotInstalledList); - } - - if (installed) { - const updatedNotInstalledList = notInstalledConnectors.filter( - (elem: SourceInfo) => elem.componentName !== componentName - ); - const updatedInstalledList = installedConnectors.concat(findComponent(componentName)); - - setNotInstalledConnectors(updatedNotInstalledList); - setInstalledConnectors(updatedInstalledList); - } - }; - - const OpenRequirementsDialog = ({source}: {source: string}): JSX.Element => { - switch (source) { - case Source.facebook: - return setDisplayDialogFromSource('')} />; - case Source.google: - return setDisplayDialogFromSource('')} />; - case Source.twilioSMS: - case Source.twilioWhatsApp: - return setDisplayDialogFromSource('')} />; - case Source.instagram: - return setDisplayDialogFromSource('')} />; - } - - return null; + const sortByInstall = (a: ComponentInfo) => { + if (a.installed) return 1; + return -1; }; return ( -
-
-
-

Catalog

-
-
- -
- {displayDialogFromSource !== '' && } - - {notInstalledConnectors.length === 0 && installedConnectors.length === 0 && } - - {notInstalledConnectors.length > 0 && ( - - )} - - {installedConnectors.length > 0 && ( - - )} -
-
+
+

{catalogPageTitle}

+ +
+ {orderedCatalogList && + orderedCatalogList.map((infoItem: ComponentInfo) => { + if (infoItem?.name && !infoItem.name.includes('viber') && getSourceForComponent(infoItem.name)) { + return ; + } + })} +
+
); }; diff --git a/frontend/control-center/src/pages/Connectors/ConfigStatusButton/index.tsx b/frontend/control-center/src/pages/Connectors/ConfigStatusButton/index.tsx index 11a5acdfbf..f62e009f9b 100644 --- a/frontend/control-center/src/pages/Connectors/ConfigStatusButton/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ConfigStatusButton/index.tsx @@ -24,15 +24,6 @@ export const ConfigStatusButton = (props: ConfigStatusButtonProps) => { : styles.buttonDisabled }`} > - {/* ); diff --git a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.module.scss b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.module.scss index a8017d6a5e..49071f615e 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.module.scss +++ b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.module.scss @@ -262,3 +262,7 @@ header { .disconnectButton { border-radius: 10px; } + +.checkmarkIcon { + fill: var(--color-soft-green); +} diff --git a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.tsx b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.tsx index 62fbd068bc..f5c39e2305 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.tsx @@ -51,7 +51,7 @@ const ChannelListItem = (props: ChannelListItemProps) => { <>
- {channel.connected && } + {channel.connected && }
{channel.metadata?.name}
{isPhoneNumberSource() &&
{channel.sourceChannelId}
}
diff --git a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss index f88aeecddc..175eb52982 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss +++ b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss @@ -298,11 +298,12 @@ } } -.enableModalContainer button { - margin-top: 14px; - padding: 0 60px; -} - .headerModal { @include font-xl; } + +.checkmarkIcon { + width: 15%; + margin-bottom: 30px; + fill: var(--color-soft-green); +} diff --git a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx index 25b348a879..c21103adba 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx @@ -72,6 +72,7 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { const [backTitle, setBackTitle] = useState('Connectors'); const [backRoute, setBackRoute] = useState(''); const {t} = useTranslation(); + const isInstalled = true; useEffect(() => { if (connectorInfo && connectorConfiguration && connectorConfiguration[connectorInfo.componentName]) { @@ -277,7 +278,7 @@ const ConnectorConfig = (props: ConnectorConfigProps) => {

{connectorInfo && connectorInfo?.title}

@@ -328,7 +329,7 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { {configurationModal && ( : null} wrapperClassName={styles.enableModalContainerWrapper} containerClassName={styles.enableModalContainer} title={ diff --git a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.module.scss b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.module.scss index 3ab8c778ff..8e3d6e1cac 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.module.scss +++ b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.module.scss @@ -202,3 +202,9 @@ width: 200px; border-radius: 10px; } + +.checkmarkIcon { + width: 15%; + margin-bottom: 30px; + fill: var(--color-soft-green); +} diff --git a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.tsx b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.tsx index bc223ce643..f624606c93 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.tsx +++ b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.tsx @@ -203,7 +203,7 @@ const ChatPluginConnect = (props: ConnectedProps) => {
{showCreatedModal && ( } wrapperClassName={styles.enableModalContainerWrapper} containerClassName={styles.enableModalContainer} title={t('successfullyCreatedChannel')} diff --git a/frontend/control-center/src/pages/Connectors/index.tsx b/frontend/control-center/src/pages/Connectors/index.tsx index f3528799ce..7160f9a66a 100644 --- a/frontend/control-center/src/pages/Connectors/index.tsx +++ b/frontend/control-center/src/pages/Connectors/index.tsx @@ -2,7 +2,7 @@ import React, {useEffect, useState} from 'react'; import {connect, ConnectedProps, useSelector} from 'react-redux'; import {useNavigate} from 'react-router-dom'; import {Channel, Source, getSourceForComponent} from 'model'; -import InfoCard, {InfoCardStyle} from './InfoCard'; +import InfoCard, {InfoCardStyle} from '../../components/InfoCard'; import {StateModel} from '../../reducers'; import {allChannelsConnected} from '../../selectors/channels'; import {listChannels} from '../../actions/channel'; @@ -40,6 +40,7 @@ const Connectors = (props: ConnectedProps) => { const [sourcesInfo, setSourcesInfo] = useState([]); const navigate = useNavigate(); const pageTitle = 'Connectors'; + const isInstalled = true; useEffect(() => { setSourcesInfo(getSourcesInfo()); @@ -55,6 +56,7 @@ const Connectors = (props: ConnectedProps) => { }, [channels.length]); const isComponentInstalled = (repository: string, componentName: string) => { + if (repository === 'airy-enterprise') componentName = 'enterprise-' + componentName; const componentNameCatalog = repository + '/' + componentName; return catalogList[componentNameCatalog] && catalogList[componentNameCatalog].installed === true; }; @@ -83,6 +85,7 @@ const Connectors = (props: ConnectedProps) => { sourceInfo={infoItem} channelsToShow={channelsBySource(infoItem.type).length} componentStatus={getComponentStatus( + isInstalled, Object.keys(connectors[infoItem.type]).length > 0 || infoItem.type === Source.chatPlugin, components[infoItem.configKey].enabled )} @@ -104,6 +107,9 @@ const Connectors = (props: ConnectedProps) => {
)) || (getSourceForComponent(infoItem.type) && + connectors && + connectors[infoItem.componentName] && + Object.keys(connectors[infoItem?.componentName]) && components && components[infoItem.configKey] && !infoItem.channel && @@ -112,6 +118,7 @@ const Connectors = (props: ConnectedProps) => { 0, components[infoItem.configKey].enabled )} diff --git a/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx b/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx index 265aa00259..9cd790eba4 100644 --- a/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx +++ b/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx @@ -127,7 +127,7 @@ const ItemInfo = (props: ComponentInfoProps) => { /> ) : isRunning ? ( } + hoverElement={} hoverElementHeight={20} hoverElementWidth={20} tooltipContent={t('healthy')} diff --git a/frontend/control-center/src/pages/Status/ComponentListItem/index.module.scss b/frontend/control-center/src/pages/Status/ComponentListItem/index.module.scss index 2ba9baca11..da1fedb7ae 100644 --- a/frontend/control-center/src/pages/Status/ComponentListItem/index.module.scss +++ b/frontend/control-center/src/pages/Status/ComponentListItem/index.module.scss @@ -152,3 +152,7 @@ @include font-l; margin-bottom: 30px; } + +.runningHealthy { + fill: var(--color-soft-green); +} diff --git a/frontend/control-center/src/pages/Status/index.tsx b/frontend/control-center/src/pages/Status/index.tsx index 68581d6736..908702d749 100644 --- a/frontend/control-center/src/pages/Status/index.tsx +++ b/frontend/control-center/src/pages/Status/index.tsx @@ -1,6 +1,6 @@ import React, {useEffect, useState} from 'react'; import {connect, ConnectedProps, useSelector} from 'react-redux'; -import {getClientConfig, getConnectorsConfiguration, listComponents} from '../../actions'; +import {getClientConfig, getConnectorsConfiguration} from '../../actions'; import {StateModel} from '../../reducers'; import {ComponentListItem} from './ComponentListItem'; import {ReactComponent as RefreshIcon} from 'assets/images/icons/refreshIcon.svg'; @@ -11,13 +11,12 @@ import {useTranslation} from 'react-i18next'; const mapDispatchToProps = { getClientConfig, getConnectorsConfiguration, - listComponents, }; const connector = connect(null, mapDispatchToProps); const Status = (props: ConnectedProps) => { - const {getClientConfig, getConnectorsConfiguration, listComponents} = props; + const {getClientConfig, getConnectorsConfiguration} = props; const components = useSelector((state: StateModel) => Object.entries(state.data.config.components)); const [spinAnim, setSpinAnim] = useState(true); const {t} = useTranslation(); @@ -26,7 +25,6 @@ const Status = (props: ConnectedProps) => { setPageTitle('Status'); getClientConfig(); getConnectorsConfiguration(); - listComponents(); }, []); setInterval(() => { diff --git a/frontend/control-center/src/pages/Webhooks/EmptyState/index.tsx b/frontend/control-center/src/pages/Webhooks/EmptyState/index.tsx index 534ed6b100..41d6bb83af 100644 --- a/frontend/control-center/src/pages/Webhooks/EmptyState/index.tsx +++ b/frontend/control-center/src/pages/Webhooks/EmptyState/index.tsx @@ -15,6 +15,7 @@ export const EmptyState = (props: EmptyStateProps) => { return (
diff --git a/frontend/control-center/src/reducers/data/catalog/index.ts b/frontend/control-center/src/reducers/data/catalog/index.ts index 880dbc6f8c..e6ded10580 100644 --- a/frontend/control-center/src/reducers/data/catalog/index.ts +++ b/frontend/control-center/src/reducers/data/catalog/index.ts @@ -1,10 +1,11 @@ +import {ComponentInfo} from 'model'; import {ActionType, getType} from 'typesafe-actions'; import * as actions from '../../../actions/catalog'; type Action = ActionType; export interface CatalogConfig { - [key: string]: {repository: string; installed: boolean}; + [key: string]: ComponentInfo; } const defaultState = {}; diff --git a/frontend/control-center/src/routes/routes.ts b/frontend/control-center/src/routes/routes.ts index 0cb68e2c1b..007dde586e 100644 --- a/frontend/control-center/src/routes/routes.ts +++ b/frontend/control-center/src/routes/routes.ts @@ -1,17 +1,30 @@ export const ROOT_ROUTE = '/'; export const CONNECTORS_ROUTE = '/connectors'; -export const CONNECTORS_CONNECTED_ROUTE = '/connectors/connected'; export const CONNECTORS_FACEBOOK_ROUTE = '/connectors/facebook'; export const CONNECTORS_CHAT_PLUGIN_ROUTE = '/connectors/chatplugin'; export const CONNECTORS_TWILIO_SMS_ROUTE = '/connectors/twilio.sms'; export const CONNECTORS_TWILIO_WHATSAPP_ROUTE = '/connectors/twilio.whatsapp'; +//change this when adding WhatsApp Cloud +export const CONNECTORS_WHATSAPP_BUSINESS_CLOUD_ROUTE = '/connectors'; +// export const CONNECTORS_GOOGLE_ROUTE = '/connectors/google'; export const CONNECTORS_INSTAGRAM_ROUTE = '/connectors/instagram'; export const CONNECTORS_DIALOGFLOW_ROUTE = '/connectors/dialogflow'; export const CONNECTORS_ZENDESK_ROUTE = '/connectors/zendesk'; export const CONNECTORS_SALESFORCE_ROUTE = '/connectors/salesforce'; +export const CONNECTORS_CONNECTED_ROUTE = '/connectors/connected'; +export const CONNECTORS_FACEBOOK_CONNECTED_ROUTE = '/connectors/connected/facebook'; +export const CONNECTORS_CHAT_PLUGIN_CONNECTED_ROUTE = '/connectors/connected/chatplugin'; +export const CONNECTORS_TWILIO_SMS_CONNECTED_ROUTE = '/connectors/connected/twilio.sms'; +export const CONNECTORS_TWILIO_WHATSAPP_CONNECTED_ROUTE = '/connectors/connected/twilio.whatsapp'; +//change this when adding WhatsApp Cloud +export const CONNECTORS_WHATSAPP_BUSINESS_CLOUD_CONNECTED_ROUTE = '/connectors'; +// +export const CONNECTORS_GOOGLE_CONNECTED_ROUTE = '/connectors/connected/google'; +export const CONNECTORS_INSTAGRAM_CONNECTED_ROUTE = '/connectors/connected/instagram'; + export const CATALOG_ROUTE = '/catalog'; export const INBOX_ROUTE = '/inbox'; diff --git a/frontend/control-center/src/services/format.ts b/frontend/control-center/src/services/format.ts index bcaf9bdd6f..127412b05c 100644 --- a/frontend/control-center/src/services/format.ts +++ b/frontend/control-center/src/services/format.ts @@ -26,11 +26,11 @@ export const getComponentName = (itemName: string) => { return formatName(itemName); } - const formatteComponentName = itemName + const formattedComponentName = itemName .split('-') .filter(element => element !== 'sources' && element !== 'connector' && element !== 'frontend') .join(' '); - return capitalizeTitle(formatteComponentName); + return capitalizeTitle(formattedComponentName); }; export const removePrefix = (name: string) => name.split('/').pop(); diff --git a/frontend/control-center/src/services/getComponentStatus.ts b/frontend/control-center/src/services/getComponentStatus.ts index 53735623b9..8898cf07e9 100644 --- a/frontend/control-center/src/services/getComponentStatus.ts +++ b/frontend/control-center/src/services/getComponentStatus.ts @@ -1,7 +1,7 @@ import {ComponentStatus} from '../pages/Connectors'; -export const getComponentStatus = (isConfigured: boolean, isEnabled: boolean) => { - if (isConfigured && isEnabled) return ComponentStatus.enabled; - if (!isConfigured && isEnabled) return ComponentStatus.notConfigured; - if (!isEnabled) return ComponentStatus.disabled; +export const getComponentStatus = (isInstalled: boolean, isConfigured: boolean, isEnabled: boolean) => { + if (isInstalled && !isConfigured) return ComponentStatus.notConfigured; + if (isInstalled && isConfigured && isEnabled) return ComponentStatus.enabled; + if (isInstalled && !isEnabled) return ComponentStatus.disabled; }; diff --git a/lib/typescript/assets/images/icons/checkmarkFilled.svg b/lib/typescript/assets/images/icons/checkmarkFilled.svg index 455ebe1547..347b4a9f8d 100644 --- a/lib/typescript/assets/images/icons/checkmarkFilled.svg +++ b/lib/typescript/assets/images/icons/checkmarkFilled.svg @@ -1,4 +1,4 @@ - - + + diff --git a/lib/typescript/assets/scss/colors.scss b/lib/typescript/assets/scss/colors.scss index 3740f3bb28..84245b000b 100644 --- a/lib/typescript/assets/scss/colors.scss +++ b/lib/typescript/assets/scss/colors.scss @@ -47,6 +47,7 @@ --color-background-yellow: #fbf9ee; --color-background-red: #fff7f9; --color-soft-green: #0da36b; + --color-green-pressed: #0b8d5d; --color-tag-green: #0e764f; --color-tag-purple: #730a80; --color-airy-message-text-outbound: #ffffff; diff --git a/lib/typescript/components/alerts/SettingsModal/ModalHeader.module.scss b/lib/typescript/components/alerts/SettingsModal/ModalHeader.module.scss index 2d77fbb1ed..acb3117dfe 100644 --- a/lib/typescript/components/alerts/SettingsModal/ModalHeader.module.scss +++ b/lib/typescript/components/alerts/SettingsModal/ModalHeader.module.scss @@ -17,9 +17,7 @@ cursor: pointer; background-color: transparent; line-height: 20px; - padding: 3px 6px; background: none; - margin-left: 10px; font-weight: 100; outline: none; position: absolute; diff --git a/lib/typescript/components/alerts/SettingsModal/index.tsx b/lib/typescript/components/alerts/SettingsModal/index.tsx index f8ec95d802..bc9b0faf1a 100644 --- a/lib/typescript/components/alerts/SettingsModal/index.tsx +++ b/lib/typescript/components/alerts/SettingsModal/index.tsx @@ -10,7 +10,7 @@ type SettingsModalProps = { children: any; wrapperClassName?: string; containerClassName?: string; - Icon?: React.ElementType | null; + Icon?: React.ReactElement | null; headerClassName?: string; style?: CSSProperties; }; @@ -28,7 +28,7 @@ export const SettingsModal = (props: SettingsModalProps) => { onRequestClose={close} >
- {Icon ? : ''} + {Icon ? Icon : ''} {children}
diff --git a/lib/typescript/components/cta/Button/index.tsx b/lib/typescript/components/cta/Button/index.tsx index a3cf40cbbc..0d980103eb 100644 --- a/lib/typescript/components/cta/Button/index.tsx +++ b/lib/typescript/components/cta/Button/index.tsx @@ -2,7 +2,16 @@ import React, {CSSProperties, ReactNode} from 'react'; import styles from './style.module.scss'; -type styleVariantType = 'extra-small' | 'small' | 'normal' | 'outline' | 'outline-big' | 'warning' | 'link' | 'text'; +type styleVariantType = + | 'extra-small' + | 'small' + | 'normal' + | 'outline' + | 'outline-big' + | 'warning' + | 'link' + | 'text' + | 'green'; type ButtonProps = { children: ReactNode; onClick?: (event?) => void; @@ -32,6 +41,8 @@ export const Button = ({ switch (variant) { case 'extra-small': return styles.extraSmallButton; + case 'green': + return styles.greenButton; case 'small': return styles.smallButton; case 'outline': diff --git a/lib/typescript/components/cta/Button/style.module.scss b/lib/typescript/components/cta/Button/style.module.scss index ea77ffdf74..c9d5c1f68f 100644 --- a/lib/typescript/components/cta/Button/style.module.scss +++ b/lib/typescript/components/cta/Button/style.module.scss @@ -45,6 +45,19 @@ padding: 4px 16px; } +.greenButton { + @extend .extraSmallButton; + background-color: var(--color-soft-green); + + &:hover { + background-color: var(--color-green-pressed); + } + + &:active { + background-color: var(--color-green-pressed); + } +} + .smallButton { @extend .button; @include font-base; diff --git a/lib/typescript/components/general/TabsPanel/index.module.scss b/lib/typescript/components/general/TabsPanel/index.module.scss new file mode 100644 index 0000000000..ebf9da21e6 --- /dev/null +++ b/lib/typescript/components/general/TabsPanel/index.module.scss @@ -0,0 +1,67 @@ +@import 'assets/scss/fonts.scss'; +@import 'assets/scss/colors.scss'; + +.tabsPanelWrapper { + background: var(--color-background-white); + color: var(--color-text-contrast); + display: block; + border-radius: 10px; + width: 100%; + height: calc(100vh - 88px); + overflow-y: scroll; +} + +.tabsPanelContainer { + width: 100%; + display: flex; + flex-direction: column; + span { + @include font-base; + } +} + +.tabsPanelItems { + display: flex; +} + +.activeTabItem { + display: flex; + justify-content: center; + margin-top: 16px; + font-weight: 700; + background: transparent; + height: 42px; + width: 150px; + color: var(--color-airy-blue); + border-bottom: 5px solid var(--color-airy-blue); + z-index: 1; + &:hover { + cursor: pointer; + } +} + +.inactiveTabItem { + display: flex; + justify-content: center; + margin-top: 16px; + font-weight: 700; + background: transparent; + height: 32px; + width: 150px; + border-bottom: 5px solid transparent; + color: var(--color-text-gray); + z-index: 1; + &:hover { + cursor: pointer; + } +} + +.line { + width: 100%; + height: 1px; + background: rgb(202, 213, 219); + display: flex; + position: relative; + top: -3px; + left: 0px; +} diff --git a/lib/typescript/components/general/TabsPanel/index.tsx b/lib/typescript/components/general/TabsPanel/index.tsx new file mode 100644 index 0000000000..c66889e0ca --- /dev/null +++ b/lib/typescript/components/general/TabsPanel/index.tsx @@ -0,0 +1,84 @@ +import React, {useState, useEffect} from 'react'; +import styles from './index.module.scss'; + +export enum Pages { + pageOne = 'pageOne', + pageTwo = 'pageTwo', + pageThree = 'pageThree', +} + +interface TabsPanelProps { + PageContentOne: JSX.Element; + PageContentTwo: JSX.Element; + PageContentThree?: JSX.Element; + pageTitleOne: string; + pageTitleTwo: string; + pageTitleThree?: string; +} + +export const TabPanel = (props: TabsPanelProps) => { + const {PageContentOne, PageContentTwo, PageContentThree, pageTitleOne, pageTitleTwo, pageTitleThree} = props; + const [currentPage, setCurrentPage] = useState(''); + + useEffect(() => { + showPageOne(); + }, []); + + const showPageOne = (event?: React.MouseEvent) => { + if (event) event.preventDefault(); + setCurrentPage(Pages.pageOne); + }; + + const showPageTwo = (event: React.MouseEvent) => { + event.preventDefault(); + setCurrentPage(Pages.pageTwo); + }; + + const showPageThree = (event: React.MouseEvent) => { + event.preventDefault(); + setCurrentPage(Pages.pageThree); + }; + + const PageContent = () => { + switch (currentPage) { + case Pages.pageOne: + return PageContentOne; + case Pages.pageTwo: + return PageContentTwo; + case Pages.pageThree: + return PageContentThree; + } + }; + + return ( +
+
+
+ + {pageTitleOne} + + + {pageTitleTwo} + + + {PageContentThree && ( + + {pageTitleThree} + + )} +
+
+ +
+
+ ); +}; diff --git a/lib/typescript/components/general/index.ts b/lib/typescript/components/general/index.ts index 2afc5fdb63..c36853899a 100644 --- a/lib/typescript/components/general/index.ts +++ b/lib/typescript/components/general/index.ts @@ -4,3 +4,4 @@ export * from './ListenOutsideClick'; export * from './AudioClip'; export * from './ConnectorAvatar'; export * from './Pagination'; +export * from './TabsPanel'; diff --git a/lib/typescript/components/index.ts b/lib/typescript/components/index.ts index 9220eecc82..6d029e4ed6 100644 --- a/lib/typescript/components/index.ts +++ b/lib/typescript/components/index.ts @@ -5,3 +5,4 @@ export * from './inputs'; export * from './loaders'; export * from './message'; export * from './tooltip'; +export * from './wrapper/ContentWrapper'; diff --git a/lib/typescript/components/wrapper/ContentWrapper/index.module.scss b/lib/typescript/components/wrapper/ContentWrapper/index.module.scss index 6826eea50a..414641d0f6 100644 --- a/lib/typescript/components/wrapper/ContentWrapper/index.module.scss +++ b/lib/typescript/components/wrapper/ContentWrapper/index.module.scss @@ -16,10 +16,18 @@ overflow-y: scroll; overflow-x: hidden; width: 100%; - height: 160px; + margin-bottom: 24px; } +.headerBig { + height: 160px; +} + +.headerMedium { + height: 75px; +} + .transparentContent { background: var(--color-background-white); color: var(--color-text-contrast); diff --git a/lib/typescript/components/wrapper/ContentWrapper/index.tsx b/lib/typescript/components/wrapper/ContentWrapper/index.tsx index 46ac241b4c..b4658d7897 100644 --- a/lib/typescript/components/wrapper/ContentWrapper/index.tsx +++ b/lib/typescript/components/wrapper/ContentWrapper/index.tsx @@ -5,16 +5,23 @@ type ContentWrapperProps = { transparent: boolean; content: React.ReactNode; header?: React.ReactNode; + variantHeight?: 'big' | 'medium'; }; export const ContentWrapper = (props: ContentWrapperProps) => { - const {transparent, content, header} = props; + const {transparent, content, header, variantHeight} = props; return ( <> {transparent ? (
-
{header}
+
+ {header} +
{content}
) : ( diff --git a/lib/typescript/model/Components.ts b/lib/typescript/model/Components.ts index f43fec8469..a077c24161 100644 --- a/lib/typescript/model/Components.ts +++ b/lib/typescript/model/Components.ts @@ -5,3 +5,13 @@ export interface Components { }; }; } + +export interface ComponentInfo { + displayName: string; + name: string; + installed: boolean; + availableFor: string; + description: string; + category: string; + price: string; +} diff --git a/lib/typescript/model/Source.ts b/lib/typescript/model/Source.ts index 0c13ae648d..0c5ed35f4a 100644 --- a/lib/typescript/model/Source.ts +++ b/lib/typescript/model/Source.ts @@ -19,10 +19,26 @@ export const prettifySource = (source: string) => .join(' '); export const getSourceForComponent = (item: string) => { - const itemArr = item + let formattedItem; + + console.log('item', item); + + if (item.includes('airy-core') || item.includes('airy-enterprise')) { + formattedItem = item.split('/')[1]; + } else { + formattedItem = item; + } + + const itemArr = formattedItem .split('-') .filter(element => element !== 'enterprise' && element !== 'sources' && element !== 'connector'); let componentName = itemArr.join(' ').replace(/ /g, ''); if (componentName === 'chatplugin') componentName = 'chatPlugin'; + if (componentName === 'whatsappbusinesscloud') componentName = 'twilioWhatsApp'; + if (componentName === 'salesforcecontactsingestion') componentName = 'salesforce'; + + console.log('componentName', componentName); + + console.log('get info for compo', Source[componentName]); return Source[componentName]; }; diff --git a/lib/typescript/translations/translations.ts b/lib/typescript/translations/translations.ts index ca180ca92d..2cc4f4c4f4 100644 --- a/lib/typescript/translations/translations.ts +++ b/lib/typescript/translations/translations.ts @@ -152,17 +152,17 @@ const resources = { toConfigure: 'To configure', configure: 'Apply Configuration', chatpluginTitle: 'Chat Plugin', - chatpluginDescription: 'Best of class browser messenger', + chatpluginDescription: 'Best of class browser messenger.', facebookTitle: 'Facebook Messenger', - facebookDescription: 'Connect multiple Facebook pages', + facebookDescription: 'Connect multiple Facebook pages.', googleTitle: 'Google Business Messages', - googleDescription: 'Be there when people search', + googleDescription: 'Be there when people search.', instagramTitle: 'Instagram', - instagramDescription: 'Connect multiple Instagram pages', + instagramDescription: 'Connect multiple Instagram pages.', twilioSmsTitle: 'SMS', - twilioSmsDescription: 'Deliver SMS with ease', + twiliosmsDescription: 'Deliver SMS with ease.', twilioWhatsappTitle: 'WhatsApp', - twilioWhatsappDescription: 'World #1 chat app', + twilioWhatsappDescription: 'World #1 chat app.', channel: 'channel', channels: 'channels', channelsCapital: 'Channels', @@ -370,6 +370,10 @@ const resources = { installed: 'Installed', notInstalled: 'Not Installed', + //Catalog + categories: 'Categories', + availableFor: 'Available for', + //NotFound notFound: `Oops! We couldn't find that here.`, @@ -570,7 +574,7 @@ const resources = { instagramTitle: 'Instagram', instagramDescription: 'Mehrere Instagram-Seiten verbinden', twilioSmsTitle: 'SMS', - twilioSmsDescription: 'SMS-Versand mit Leichtigkeit', + twiliosmsDescription: 'SMS-Versand mit Leichtigkeit', twilioWhatsappTitle: 'WhatsApp', twilioWhatsappDescription: 'Weltweite Chat-App Nr. 1', channel: 'Kanal', @@ -778,6 +782,10 @@ const resources = { installed: 'Installiert', notInstalled: 'Nicht Installiert', + //Catalog + categories: 'Kategorien', + availableFor: 'Verfügbar für', + //NotFound notFound: 'Huch! Das konnten wir hier nicht finden.', @@ -970,7 +978,7 @@ const resources = { instagramTitle: 'Instagram', instagramDescription: 'Connecter plusieurs pages Instagram', twilioSmsTitle: 'SMS', - twilioSmsDescription: 'Envoyez des SMS en toute simplicité', + twiliosmsDescription: 'Envoyez des SMS en toute simplicité', twilioWhatsappTitle: 'WhatsApp', twilioWhatsappDescription: 'Première application de chat au monde', channel: 'canal', @@ -1178,6 +1186,10 @@ const resources = { installed: 'Installé(s)', notInstalled: 'Non installé(s)', + //Catalog + categories: 'Catégories', + availableFor: 'Disponible pour', + //NotFound notFound: 'Oups! Page non trouvée.', @@ -1374,7 +1386,7 @@ const resources = { instagramTitle: 'Instagram', instagramDescription: 'Conectar varias páginas de Instagram', twilioSmsTitle: 'SMS', - twilioSmsDescription: 'Envío de SMS con facilidad', + twiliosmsDescription: 'Envío de SMS con facilidad', twilioWhatsappTitle: 'WhatsApp', twilioWhatsappDescription: 'La aplicación de mensajería número 1 del mundo', channel: 'canal', @@ -1582,6 +1594,10 @@ const resources = { installed: 'Instalado(s)', notInstalled: 'No Instalado(s)', + //Catalog + categories: 'Categorías', + availableFor: 'Disponible para', + //NotFound notFound: '¡Uy! No pudimos encontrarlo aquí.', From c9f1288b118e42b95b02f5ed78eded097a4f960f Mon Sep 17 00:00:00 2001 From: Audrey Kadjar Date: Tue, 9 Aug 2022 12:28:23 +0200 Subject: [PATCH 50/92] [#3540] Simplify the spanish flag to reduce bundle size (#3559) --- .../assets/images/icons/flagFrance.svg | 11 +- .../assets/images/icons/flagGermany.svg | 11 +- .../assets/images/icons/flagSpain.svg | 570 +----------------- lib/typescript/assets/images/icons/flagUS.svg | 19 +- 4 files changed, 4 insertions(+), 607 deletions(-) diff --git a/lib/typescript/assets/images/icons/flagFrance.svg b/lib/typescript/assets/images/icons/flagFrance.svg index d483c2b83d..6eeb804f9c 100644 --- a/lib/typescript/assets/images/icons/flagFrance.svg +++ b/lib/typescript/assets/images/icons/flagFrance.svg @@ -1,10 +1 @@ - - - - - - - - - - + diff --git a/lib/typescript/assets/images/icons/flagGermany.svg b/lib/typescript/assets/images/icons/flagGermany.svg index 1bd9d9622b..cd627216fe 100644 --- a/lib/typescript/assets/images/icons/flagGermany.svg +++ b/lib/typescript/assets/images/icons/flagGermany.svg @@ -1,10 +1 @@ - - - - - - - - - - + diff --git a/lib/typescript/assets/images/icons/flagSpain.svg b/lib/typescript/assets/images/icons/flagSpain.svg index 64db6046f1..a8c916ef95 100644 --- a/lib/typescript/assets/images/icons/flagSpain.svg +++ b/lib/typescript/assets/images/icons/flagSpain.svg @@ -1,569 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/lib/typescript/assets/images/icons/flagUS.svg b/lib/typescript/assets/images/icons/flagUS.svg index 33df84fc96..ab114dcc5f 100644 --- a/lib/typescript/assets/images/icons/flagUS.svg +++ b/lib/typescript/assets/images/icons/flagUS.svg @@ -1,18 +1 @@ - - - - - - - - - - - - - - - - - - + From ec8c499101842b41f2c6ccd758c0e0553c598c09 Mon Sep 17 00:00:00 2001 From: Juan Sebastian Pena Rodriguez Date: Tue, 9 Aug 2022 14:57:23 +0200 Subject: [PATCH 51/92] [#3530] airy controller component name mapping (#3562) --- .../pkg/endpoints/components_update.go | 10 +-------- lib/go/k8s/configmaps.go | 21 +++---------------- 2 files changed, 4 insertions(+), 27 deletions(-) diff --git a/infrastructure/controller/pkg/endpoints/components_update.go b/infrastructure/controller/pkg/endpoints/components_update.go index b3dde7d534..c74b599f70 100644 --- a/infrastructure/controller/pkg/endpoints/components_update.go +++ b/infrastructure/controller/pkg/endpoints/components_update.go @@ -6,7 +6,6 @@ import ( "io/ioutil" "net/http" "strconv" - "strings" "github.com/airyhq/airy/infrastructure/controller/pkg/cache" "github.com/airyhq/airy/lib/go/k8s" @@ -72,14 +71,7 @@ func (s *ComponentsUpdate) ServeHTTP(w http.ResponseWriter, r *http.Request) { //NOTE: Prevent the upload of a configmap if the component is not present func (s *ComponentsUpdate) isComponentInstalled(configName string) bool { - name := getNameFromConfigMapName(configName) deployedCharts := s.DeployedCharts.GetDeployedCharts() - return deployedCharts[name] -} - -func getNameFromConfigMapName(name string) string { - c := strings.Split(name, "-") - - return strings.Join(c[1:], "-") + return deployedCharts[configName] } diff --git a/lib/go/k8s/configmaps.go b/lib/go/k8s/configmaps.go index eafffa4c06..98e5c63bcf 100644 --- a/lib/go/k8s/configmaps.go +++ b/lib/go/k8s/configmaps.go @@ -3,7 +3,6 @@ package k8s import ( "context" "fmt" - "strings" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -79,35 +78,21 @@ func GetComponentsConfigMaps( namespace string, clientSet *kubernetes.Clientset, valueTransformer func(map[string]string) map[string]string, -) (map[string]map[string]interface{}, error) { +) (map[string]interface{}, error) { configmapList, err := clientSet.CoreV1().ConfigMaps(namespace).List(ctx, v1.ListOptions{LabelSelector: "core.airy.co/component"}) if err != nil { return nil, fmt.Errorf("Unable to list config maps. Error: %s\n", err) } - components := make(map[string]map[string]interface{}) + components := make(map[string]interface{}) for _, configmap := range configmapList.Items { label, ok := configmap.Labels["core.airy.co/component"] if !ok { continue } - componentsGroup, componentName := getComponentFromLabel(label) - - componentsGroupContent, ok := components[componentsGroup] - if !ok { - componentsGroupContent = make(map[string]interface{}) - components[componentsGroup] = componentsGroupContent - } - - componentsGroupContent[componentName] = valueTransformer(configmap.Data) + components[label] = valueTransformer(configmap.Data) } return components, nil } - -func getComponentFromLabel(l string) (string, string) { - c := strings.Split(l, "-") - - return c[0], strings.Join(c[1:], "-") -} From bb4a77f15259c102d078f2369666ec8b468c0234 Mon Sep 17 00:00:00 2001 From: Audrey Kadjar Date: Tue, 9 Aug 2022 16:11:36 +0200 Subject: [PATCH 52/92] [#3563] update components.get handling (#3564) * update components.get handling * remove log --- .../control-center/src/components/SourceInfo/index.tsx | 6 +++--- frontend/control-center/src/pages/Connectors/index.tsx | 7 ++----- .../control-center/src/reducers/data/connector/index.ts | 3 +-- lib/typescript/model/Source.ts | 6 ------ 4 files changed, 6 insertions(+), 16 deletions(-) diff --git a/frontend/control-center/src/components/SourceInfo/index.tsx b/frontend/control-center/src/components/SourceInfo/index.tsx index 2e831e9611..5d2e0ccbd9 100644 --- a/frontend/control-center/src/components/SourceInfo/index.tsx +++ b/frontend/control-center/src/components/SourceInfo/index.tsx @@ -158,7 +158,7 @@ export const getSourcesInfo = (): SourceInfo[] => { newChannelRoute: CONNECTORS_DIALOGFLOW_ROUTE + '/new', channelsListRoute: CONNECTORS_CONNECTED_ROUTE + '/dialogflow', configKey: 'enterprise-dialogflow-connector', - componentName: 'dialogflow-connector', + componentName: 'enterprise-dialogflow-connector', repository: 'airy-enterprise', itemInfoString: 'connectors', docs: 'https://dialogflow.cloud.google.com/cx/projects', @@ -172,7 +172,7 @@ export const getSourcesInfo = (): SourceInfo[] => { newChannelRoute: CONNECTORS_ZENDESK_ROUTE + '/new', channelsListRoute: CONNECTORS_CONNECTED_ROUTE + '/zendesk', configKey: 'enterprise-zendesk-connector', - componentName: 'zendesk-connector', + componentName: 'enterprise-zendesk-connector', repository: 'airy-enterprise', itemInfoString: 'connectors', docs: 'https://airy.co/docs/enterprise/apps/zendesk/installation', @@ -186,7 +186,7 @@ export const getSourcesInfo = (): SourceInfo[] => { newChannelRoute: CONNECTORS_SALESFORCE_ROUTE + '/new', channelsListRoute: CONNECTORS_CONNECTED_ROUTE + '/salesforce', configKey: 'enterprise-salesforce-contacts-ingestion', - componentName: 'salesforce-contacts-ingestion', + componentName: 'enterprise-salesforce-contacts-ingestion', repository: 'airy-enterprise', itemInfoString: 'connectors', docs: 'https://airy.co/docs/enterprise/apps/salesforce-contacts-ingestion/deployment', diff --git a/frontend/control-center/src/pages/Connectors/index.tsx b/frontend/control-center/src/pages/Connectors/index.tsx index 7160f9a66a..2cde61e97a 100644 --- a/frontend/control-center/src/pages/Connectors/index.tsx +++ b/frontend/control-center/src/pages/Connectors/index.tsx @@ -56,7 +56,6 @@ const Connectors = (props: ConnectedProps) => { }, [channels.length]); const isComponentInstalled = (repository: string, componentName: string) => { - if (repository === 'airy-enterprise') componentName = 'enterprise-' + componentName; const componentNameCatalog = repository + '/' + componentName; return catalogList[componentNameCatalog] && catalogList[componentNameCatalog].installed === true; }; @@ -86,7 +85,8 @@ const Connectors = (props: ConnectedProps) => { channelsToShow={channelsBySource(infoItem.type).length} componentStatus={getComponentStatus( isInstalled, - Object.keys(connectors[infoItem.type]).length > 0 || infoItem.type === Source.chatPlugin, + Object.keys(connectors[infoItem.componentName]).length > 0 || + infoItem.type === Source.chatPlugin, components[infoItem.configKey].enabled )} key={index} @@ -107,9 +107,6 @@ const Connectors = (props: ConnectedProps) => {
)) || (getSourceForComponent(infoItem.type) && - connectors && - connectors[infoItem.componentName] && - Object.keys(connectors[infoItem?.componentName]) && components && components[infoItem.configKey] && !infoItem.channel && diff --git a/frontend/control-center/src/reducers/data/connector/index.ts b/frontend/control-center/src/reducers/data/connector/index.ts index 90c237b4a7..e0aaabc7bf 100644 --- a/frontend/control-center/src/reducers/data/connector/index.ts +++ b/frontend/control-center/src/reducers/data/connector/index.ts @@ -14,8 +14,7 @@ export default function connectorsReducer(state = defaultState, action: Action): case getType(actions.getComponentsAction): return { ...state, - ...action.payload.components.sources, - ...action.payload.components.enterprise, + ...action.payload.components, }; case getType(actions.updateConnectorConfigurationAction): { let name = action.payload.components[0].name; diff --git a/lib/typescript/model/Source.ts b/lib/typescript/model/Source.ts index 0c5ed35f4a..bd9e2ad555 100644 --- a/lib/typescript/model/Source.ts +++ b/lib/typescript/model/Source.ts @@ -21,8 +21,6 @@ export const prettifySource = (source: string) => export const getSourceForComponent = (item: string) => { let formattedItem; - console.log('item', item); - if (item.includes('airy-core') || item.includes('airy-enterprise')) { formattedItem = item.split('/')[1]; } else { @@ -36,9 +34,5 @@ export const getSourceForComponent = (item: string) => { if (componentName === 'chatplugin') componentName = 'chatPlugin'; if (componentName === 'whatsappbusinesscloud') componentName = 'twilioWhatsApp'; if (componentName === 'salesforcecontactsingestion') componentName = 'salesforce'; - - console.log('componentName', componentName); - - console.log('get info for compo', Source[componentName]); return Source[componentName]; }; From 0ca4a72d6bafb9c6bdbb1f121d32fcf92f6da601 Mon Sep 17 00:00:00 2001 From: Bilge Date: Tue, 9 Aug 2022 23:49:43 +0200 Subject: [PATCH 53/92] Issue #3539 documentation update for minikube installation --- .../docs/getting-started/installation/helm.md | 29 +++++++++++++++++-- .../getting-started/installation/minikube.md | 2 +- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/docs/docs/getting-started/installation/helm.md b/docs/docs/getting-started/installation/helm.md index d0c7e5bad5..056e5d4ed5 100644 --- a/docs/docs/getting-started/installation/helm.md +++ b/docs/docs/getting-started/installation/helm.md @@ -106,10 +106,10 @@ For more information refer to the [official DigitalOcean Guide](https://docs.dig `Airy Core` can be created on Minikube with predefined settings, using the [Airy CLI](/cli/introduction). However, if you want to create your custom Minikube instance, for example with custom settings for CPU and RAM, you can also do that with the [Minikube](https://minikube.sigs.k8s.io/docs/start/) utility: ```sh -minikube -p airy start --driver=virtualbox --cpus=4 --memory=7168 --extra-config=apiserver.service-nodeport-range=1-65535 +minikube -p airy start --driver=docker --cpus=4 --memory=7168 --extra-config=apiserver.service-node-port-range=1-65535 ``` -The `apiserver.service-nodeport-range` settings is needed if you want to use port 80 on the Minikube VM as the NodePort for the ingress controller service. +The `apiserver.service-node-port-range` settings is needed if you want to use port 80 on the Minikube VM as the NodePort for the ingress controller service. For more information refer to the [official Minikube Documentation](https://minikube.sigs.k8s.io/docs/start/). @@ -236,6 +236,20 @@ ingress-controller: letsencryptEmail: "mymail@myhostname.com" ``` +:::note + +The above suggested airy.yaml file works only for cloud installation. For Minikube installation the should be done by running the Airy CLI with --init-only or by running the default airy.yaml file shown below: + +```sh +global: + host: localhost +ingress-controller: + ngrokEnabled: true +``` + +::: + + Run the following command to upgrade your Airy Core installation and setup Let's Encrypt: ```sh @@ -350,6 +364,17 @@ kubeconfig: /home/user/.kube/config namespace: default ``` +:::note + +The above suggested cli.yaml file works only for cloud installation. For Minikube installation the should be done by running the Airy CLI with --init-only or by running the default cli.yaml file shown below: + +```sh +apihost: http://localhost +``` + +::: + + ## Upgrade For upgrading your `Airy Core` instance using helm, refer to our [upgrade document](/getting-started/upgrade#upgrade-using-helm). diff --git a/docs/docs/getting-started/installation/minikube.md b/docs/docs/getting-started/installation/minikube.md index 6853e8c9b2..1d11ef860f 100644 --- a/docs/docs/getting-started/installation/minikube.md +++ b/docs/docs/getting-started/installation/minikube.md @@ -51,7 +51,7 @@ The base URL for the [API](../../api/introduction.md) is the same to access the To customize your Minikube instance, you can adjust the `driver`, `cpus` and `memory` attributes in the following manner: ``` -airy create --provider=minikube --provider-config driver=virtualbox,cpus=4,memory=8192 my-airy +minikube -p airy-core start --driver=docker --cpus=3 --memory=7168 --container-runtime=containerd --ports=80:80 --extra-config=apiserver.service-node-port-range=1-65535 ``` If you want to customize your `Airy Core` instance please see our [Configuration From e78b53d1d3e2954fa0deb42f9dd9b38f982b362d Mon Sep 17 00:00:00 2001 From: Bilge Date: Wed, 10 Aug 2022 08:08:17 +0200 Subject: [PATCH 54/92] [#3539] Fixed the documentation for minikube installation --- docs/docs/getting-started/installation/helm.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/docs/getting-started/installation/helm.md b/docs/docs/getting-started/installation/helm.md index 056e5d4ed5..2b523ea59b 100644 --- a/docs/docs/getting-started/installation/helm.md +++ b/docs/docs/getting-started/installation/helm.md @@ -249,7 +249,6 @@ ingress-controller: ::: - Run the following command to upgrade your Airy Core installation and setup Let's Encrypt: ```sh @@ -374,7 +373,6 @@ apihost: http://localhost ::: - ## Upgrade For upgrading your `Airy Core` instance using helm, refer to our [upgrade document](/getting-started/upgrade#upgrade-using-helm). From c53a2e3ce022b4fc7a518e22680d5cf774a4ca30 Mon Sep 17 00:00:00 2001 From: Christoph Proeschel Date: Wed, 10 Aug 2022 09:01:52 +0200 Subject: [PATCH 55/92] [#3510] Hotfix: Airy with custom Kafka (#3561) * [#3510] Hotfix Kafka app replication factor * [#3553] Hotfix Airy installation with custom Kafka --- cli/pkg/providers/minikube/minikube.go | 2 +- docs/docs/changelog.md | 17 ++- .../docs/getting-started/installation/helm.md | 2 +- docs/sidebars.js | 1 + .../helm-chart/templates/config/kafka.yaml | 6 + .../provisioning/kafka-create-topics.yaml | 6 +- infrastructure/helm-chart/values.yaml | 4 +- .../co/airy/tools/topics/Application.java | 6 +- jaas.config | 3 + lib/go/config/airy_yaml.go | 1 + lib/go/config/kafka.go | 4 + .../main/resources/kafka-streams.properties | 2 +- tmp.yaml | 89 ++++++++++++ tmp2.yaml | 131 ++++++++++++++++++ 14 files changed, 261 insertions(+), 13 deletions(-) create mode 100644 jaas.config create mode 100644 tmp.yaml create mode 100644 tmp2.yaml diff --git a/cli/pkg/providers/minikube/minikube.go b/cli/pkg/providers/minikube/minikube.go index 7a937972f3..e08e9f4bea 100644 --- a/cli/pkg/providers/minikube/minikube.go +++ b/cli/pkg/providers/minikube/minikube.go @@ -78,7 +78,7 @@ func (p *provider) startCluster(providerConfig map[string]string) error { cpusArg := "--cpus=" + minikubeCpus memoryArg := "--memory=" + minikubeMemory args := []string{"start", "--extra-config=apiserver.service-node-port-range=1-65535", "--ports=80:80", driverArg, runtimeArg, cpusArg, memoryArg} - // Prevent minikube download progress bar from polluting the output + // Prevent minikube download progress bar from polluting the output by downloading silently first _, err := runGetOutput(append(args, "--download-only")...) if err != nil { return fmt.Errorf("downloading minikube files err: %v", err) diff --git a/docs/docs/changelog.md b/docs/docs/changelog.md index 26ae785e83..cda9e1ff6d 100644 --- a/docs/docs/changelog.md +++ b/docs/docs/changelog.md @@ -3,6 +3,20 @@ title: Changelog sidebar_label: 📝 Changelog --- +## 0.47.2 + +#### Hotfix + +* [[#3553](https://github.com/airyhq/airy/issues/3553)] Fix using a custom Kafka when installing Airy via Helm + +#### Airy CLI + +You can download the Airy CLI for your operating system from the following links: + +[MacOS](https://airy-core-binaries.s3.amazonaws.com/0.47.2/darwin/amd64/airy) +[Linux](https://airy-core-binaries.s3.amazonaws.com/0.47.2/linux/amd64/airy) +[Windows](https://airy-core-binaries.s3.amazonaws.com/0.47.2/windows/amd64/airy.exe) + ## 0.47.1 #### Hotfix @@ -1233,6 +1247,3 @@ You can download the Airy CLI for your operating system from the following links ## Hotfix 0.26.3 [[#2192](https://github.com/airyhq/airy/issues/2192)] Inbox crashing when selecting conversations in filtered view [[#2193](https://github.com/airyhq/airy/pull/2193)] -## Hotfix 0.26.2 - -[[#2187](https://github.com/airyhq/airy/issues/2187)] Hotfix chat plugin async bundle loading failed on installed websites diff --git a/docs/docs/getting-started/installation/helm.md b/docs/docs/getting-started/installation/helm.md index d0c7e5bad5..d96189c856 100644 --- a/docs/docs/getting-started/installation/helm.md +++ b/docs/docs/getting-started/installation/helm.md @@ -106,7 +106,7 @@ For more information refer to the [official DigitalOcean Guide](https://docs.dig `Airy Core` can be created on Minikube with predefined settings, using the [Airy CLI](/cli/introduction). However, if you want to create your custom Minikube instance, for example with custom settings for CPU and RAM, you can also do that with the [Minikube](https://minikube.sigs.k8s.io/docs/start/) utility: ```sh -minikube -p airy start --driver=virtualbox --cpus=4 --memory=7168 --extra-config=apiserver.service-nodeport-range=1-65535 +minikube start -p airy--driver=docker --cpus=4 --memory=7168 --ports=80:80 --extra-config=apiserver.service-node-port-range=1-65535 ``` The `apiserver.service-nodeport-range` settings is needed if you want to use port 80 on the Minikube VM as the NodePort for the ingress controller service. diff --git a/docs/sidebars.js b/docs/sidebars.js index a34fb99aa1..5fcf92e131 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -120,6 +120,7 @@ module.exports = { 'guides/monitoring', 'guides/backup', 'guides/component-reset', + 'guides/remote-kafka-cluster', ], }, 'changelog', diff --git a/infrastructure/helm-chart/templates/config/kafka.yaml b/infrastructure/helm-chart/templates/config/kafka.yaml index 639772ceff..a00933d800 100644 --- a/infrastructure/helm-chart/templates/config/kafka.yaml +++ b/infrastructure/helm-chart/templates/config/kafka.yaml @@ -4,6 +4,12 @@ metadata: name: kafka-config data: KAFKA_BROKERS: {{ .Values.config.kafka.brokers }} +{{- if .Values.config.kafka.authJaas }} + AUTH_JAAS: {{ .Values.config.kafka.authJaas }} +{{- end }} + KAFKA_MINIMUM_REPLICAS: "{{ .Values.config.kafka.minimumReplicas }}" +{{- if .Values.config.kafka.zookeepers }} ZOOKEEPER: {{ .Values.config.kafka.zookeepers }} +{{- end }} KAFKA_SCHEMA_REGISTRY_URL: {{ .Values.config.kafka.schemaRegistryUrl }} KAFKA_COMMIT_INTERVAL_MS: "{{ .Values.config.kafka.commitInterval }}" diff --git a/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml b/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml index e88b76ff28..dcff7229e7 100644 --- a/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml +++ b/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml @@ -42,9 +42,9 @@ data: if [ -n "${AUTH_JAAS}" ]; then cat < /opt/kafka/jaas.config - security.protocol=SASL_SSL - sasl.jaas.config=$AUTH_JAAS - sasl.mechanism=PLAIN + security.protocol=SASL_SSL + sasl.jaas.config=$AUTH_JAAS + sasl.mechanism=PLAIN EOF CONNECTION_OPTS+=(--command-config /opt/kafka/jaas.config) echo "Using jaas authentication for connecting to Kafka" diff --git a/infrastructure/helm-chart/values.yaml b/infrastructure/helm-chart/values.yaml index d47cc05ce5..cd653a01fb 100644 --- a/infrastructure/helm-chart/values.yaml +++ b/infrastructure/helm-chart/values.yaml @@ -12,12 +12,14 @@ config: kafka: brokers: "kafka-headless:9092" zookeepers: "zookeeper:2181" + authJaas: "" + minimumReplicas: 1 schemaRegistryUrl: "http://schema-registry:8081" commitInterval: 1000 provisioning: kafka: image: ghcr.io/airyhq/infrastructure/kafka - imageTag: 2.7.0 + imageTag: 3.2.0 namespaceTopics: false tools: segment: diff --git a/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java b/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java index 6bdcd8bffe..c4338875cb 100644 --- a/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java +++ b/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java @@ -67,9 +67,9 @@ public static void main(String[] args) { "\n" + " if [ -n \"${AUTH_JAAS}\" ]; then\n" + " cat < /opt/kafka/jaas.config\n" + - " security.protocol=SASL_SSL\n" + - " sasl.jaas.config=$AUTH_JAAS\n" + - " sasl.mechanism=PLAIN\n" + + " security.protocol=SASL_SSL\n" + + " sasl.jaas.config=$AUTH_JAAS\n" + + " sasl.mechanism=PLAIN\n" + " EOF\n" + " CONNECTION_OPTS+=(--command-config /opt/kafka/jaas.config)\n" + " echo \"Using jaas authentication for connecting to Kafka\"\n" + diff --git a/jaas.config b/jaas.config new file mode 100644 index 0000000000..1fe7ca95b1 --- /dev/null +++ b/jaas.config @@ -0,0 +1,3 @@ +security.protocol=SASL_SSL +sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username='4IOCAHDXJJ7HRTDQ' password='Cz5EpJBS9Y5pLjskf+Hs1XSGK9FcoO/tTqkstiEzCl/jVuN1EM4yKMDt2fx8Qbyl'; +sasl.mechanism=PLAIN diff --git a/lib/go/config/airy_yaml.go b/lib/go/config/airy_yaml.go index 638e35c5cd..132e891330 100644 --- a/lib/go/config/airy_yaml.go +++ b/lib/go/config/airy_yaml.go @@ -31,6 +31,7 @@ type KafkaConf struct { Zookeeper string `yaml:"zookeeper" json:"zookeeper"` SchemaRegistryUrl string `yaml:"schemaRegistryUrl" json:"schemaRegistryUrl"` AuthJaas string `yaml:"authJaas" json:"authJaas"` + MinimumReplicas string `yaml:"minimumReplicas" json:"minimumReplicas"` } type ComponentsConf map[string]map[string]string diff --git a/lib/go/config/kafka.go b/lib/go/config/kafka.go index a9f89b608c..8cfd87a581 100644 --- a/lib/go/config/kafka.go +++ b/lib/go/config/kafka.go @@ -23,5 +23,9 @@ func GetKafkaData(s KafkaConf) map[string]string { m["AUTH_JAAS"] = s.AuthJaas } + if s.MinimumReplicas != "" { + m["KAFKA_MINIMUM_REPLICAS"] = s.MinimumReplicas + } + return m } diff --git a/lib/java/spring/kafka/streams/src/main/resources/kafka-streams.properties b/lib/java/spring/kafka/streams/src/main/resources/kafka-streams.properties index f5c3dbbe3c..42f55d3942 100644 --- a/lib/java/spring/kafka/streams/src/main/resources/kafka-streams.properties +++ b/lib/java/spring/kafka/streams/src/main/resources/kafka-streams.properties @@ -1,6 +1,6 @@ kafka.brokers=${KAFKA_BROKERS} kafka.schema-registry-url=${KAFKA_SCHEMA_REGISTRY_URL} kafka.commit-interval-ms=${KAFKA_COMMIT_INTERVAL_MS:1000} - +kafka.replication.factor=${KAFKA_MINIMUM_REPLICAS:1} # Only used for testing: kafka.cleanup=${KAFKA_CLEANUP:false} diff --git a/tmp.yaml b/tmp.yaml new file mode 100644 index 0000000000..378e7ba805 --- /dev/null +++ b/tmp.yaml @@ -0,0 +1,89 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: kafka-create-topics + annotations: + "helm.sh/hook": "pre-install, pre-upgrade" + "helm.sh/hook-weight": "2" + namespace: default +data: + create-topics.sh: | + #!/bin/bash + + ########################################################################## + # THIS FILE WAS GENERATED. DO NOT EDIT. See /infrastructure/tools/topics # + ########################################################################## + + set -euo pipefail + IFS=$'\n\t' + + + if [ -z "${ZOOKEEPER+x}" ]; then + if [ -z "${KAFKA_BROKERS+x}" ]; then + echo "Neither ZOOKEEPER nor KAFKA_BROKERS is set. Exiting." + exit 1 + fi + CONNECTION_OPTS=(--bootstrap-server $KAFKA_BROKERS) + echo "ZOOKEEPER is not set, using --bootstrap-server option instead" + else + CONNECTION_OPTS=(--zookeeper $ZOOKEEPER) + fi + + + PARTITIONS=${PARTITIONS:-10} + REPLICAS=${KAFKA_MINIMUM_REPLICAS:-1} + AIRY_CORE_NAMESPACE=${AIRY_CORE_NAMESPACE:-} + AUTH_JAAS=${AUTH_JAAS:-} + + if [ -n "${AIRY_CORE_NAMESPACE}" ]; then + AIRY_CORE_NAMESPACE="${AIRY_CORE_NAMESPACE}." + echo "Using ${AIRY_CORE_NAMESPACE} to namespace topics" + fi + + if [ -n "${AUTH_JAAS}" ]; then + cat < /opt/kafka/jaas.config + security.protocol=SASL_SSL + sasl.jaas.config=$AUTH_JAAS + sasl.mechanism=PLAIN + EOF + CONNECTION_OPTS+=(--command-config /opt/kafka/jaas.config) + echo "Using jaas authentication for connecting to Kafka" + cat /opt/kafka/jaas.config + fi + + echo "Creating Kafka topics" + + + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.channels" + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.contacts" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.messages" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.metadata" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.read-receipt" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.sources" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.tags" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.templates" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.users" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.webhooks-v0.29.0" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}ops.application.logs" + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.facebook.events" + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.google.events" + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.twilio.events" + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.viber.events" + + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.whatsapp.events" + diff --git a/tmp2.yaml b/tmp2.yaml new file mode 100644 index 0000000000..da7cfb8e28 --- /dev/null +++ b/tmp2.yaml @@ -0,0 +1,131 @@ +{ + "apiVersion": "batch/v1", + "kind": "Job", + "metadata": { + "annotations": { + "batch.kubernetes.io/job-tracking": "", + "helm.sh/hook": "post-install,post-upgrade" + }, + "creationTimestamp": "2022-08-08T20:17:25Z", + "generation": 1, + "labels": { + "controller-uid": "a04b3a04-e2cf-4cdf-ac6c-b76950c3b110", + "job-name": "provisioning-topics" + }, + "name": "provisioning-topics", + "namespace": "default", + "resourceVersion": "4881", + "uid": "0644d3d4-f408-48b7-9683-46791ac90ad1" + }, + "spec": { + "backoffLimit": 3, + "completionMode": "NonIndexed", + "completions": 1, + "parallelism": 1, + "suspend": false, + "template": { + "metadata": { + "creationTimestamp": null + }, + "spec": { + "containers": [ + { + "command": [ + "/bin/bash", + "/opt/provisioning/create-topics.sh" + ], + "envFrom": [ + { + "configMapRef": { + "name": "kafka-config" + } + } + ], + "image": "ghcr.io/airyhq/infrastructure/kafka:3.2.0", + "imagePullPolicy": "IfNotPresent", + "name": "create-topics", + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/opt/provisioning", + "name": "kafka-create-topics" + } + ] + } + ], + "dnsPolicy": "ClusterFirst", + "initContainers": [ + { + "command": [ + "/bin/sh", + "/opt/provisioning/wait-for-minimum-kafkas.sh" + ], + "envFrom": [ + { + "configMapRef": { + "name": "kafka-config" + } + } + ], + "image": "ghcr.io/airyhq/infrastructure/busybox:latest", + "imagePullPolicy": "IfNotPresent", + "name": "wait", + "resources": {}, + "terminationMessagePath": "/dev/termination-log", + "terminationMessagePolicy": "File", + "volumeMounts": [ + { + "mountPath": "/opt/provisioning", + "name": "provisioning-scripts" + } + ] + } + ], + "restartPolicy": "Never", + "schedulerName": "default-scheduler", + "securityContext": {}, + "terminationGracePeriodSeconds": 30, + "volumes": [ + { + "configMap": { + "defaultMode": 420, + "name": "provisioning-scripts" + }, + "name": "provisioning-scripts" + }, + { + "configMap": { + "defaultMode": 420, + "name": "kafka-create-topics" + }, + "name": "kafka-create-topics" + }, + { + "configMap": { + "defaultMode": 420, + "name": "kafka-config" + }, + "name": "kafka-config" + } + ] + } + } + }, + "status": { + "conditions": [ + { + "lastProbeTime": "2022-08-08T20:17:41Z", + "lastTransitionTime": "2022-08-08T20:17:41Z", + "message": "Job has reached the specified backoff limit", + "reason": "BackoffLimitExceeded", + "status": "True", + "type": "Failed" + } + ], + "failed": 4, + "startTime": "2022-08-08T20:17:25Z", + "uncountedTerminatedPods": {} + } +} From dbf82e038886208cad3f3e0d4a028844fa781d56 Mon Sep 17 00:00:00 2001 From: Audrey Kadjar Date: Wed, 10 Aug 2022 09:55:27 +0200 Subject: [PATCH 56/92] [#3476] update cypress tests baseurl (#3509) * baseUrl change * baseUrl change * rebase wip * tests update * fix * linting * fix typing * fixed typings tests * global type fix * fix cypress tests bazel * typing fix * type fix * typings * fixing * typing fix * type fix * lint * fix unit testing * fix * added index.d.ts type * fixes * fix build file * type fix again * fix type * tsconfig fix * type fix * fix build file name * typing fix * build fix * lint * linting fix * fix rebase --- .../Airy/ChatPlugin/ChatPluginConnect.tsx | 2 ++ .../Status/ComponentListItem/ItemInfo.tsx | 2 +- frontend/inbox/handles/index.ts | 1 + integration/BUILD | 3 +- integration/chat-plugin/BUILD | 1 + .../chat-plugin/websocket_test.spec.ts | 33 ++++++++----------- integration/cypress.config.ts | 4 +-- integration/{commands => support}/BUILD | 7 ++-- .../createChatPluginConversation.ts | 7 ++-- .../editContactDetails.ts | 0 .../{commands => support}/editDisplayName.ts | 0 integration/{commands => support}/index.ts | 0 .../listConversationsForContact.ts | 0 integration/ui/connect_chatplugin.spec.ts | 4 +-- integration/ui/create_tag.spec.ts | 20 ++--------- integration/ui/filter_conversation.spec.ts | 13 +------- integration/ui/suggested_replies.spec.ts | 2 +- .../alerts/SettingsModal/ModalHeader.tsx | 5 +-- .../components/alerts/SettingsModal/index.tsx | 21 ++++++++++-- tsconfig.json | 4 +-- 20 files changed, 62 insertions(+), 67 deletions(-) rename integration/{commands => support}/BUILD (86%) rename integration/{commands => support}/createChatPluginConversation.ts (81%) rename integration/{commands => support}/editContactDetails.ts (100%) rename integration/{commands => support}/editDisplayName.ts (100%) rename integration/{commands => support}/index.ts (100%) rename integration/{commands => support}/listConversationsForContact.ts (100%) diff --git a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.tsx b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.tsx index f624606c93..6fe0e1323a 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.tsx +++ b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.tsx @@ -6,6 +6,7 @@ import {apiHostUrl} from '../../../../../httpClient'; import {StateModel} from '../../../../../reducers'; import {allChannels} from '../../../../../selectors/channels'; import {connectChatPlugin, updateChannel, disconnectChannel} from '../../../../../actions'; +import {cyChannelCreatedChatPluginCloseButton} from 'handles'; import {Button, LinkButton, SettingsModal} from 'components'; import {Channel, Source} from 'model'; @@ -209,6 +210,7 @@ const ChatPluginConnect = (props: ConnectedProps) => { title={t('successfullyCreatedChannel')} close={handleClose} headerClassName={styles.headerModal} + dataCyCloseButton={cyChannelCreatedChatPluginCloseButton} >
- {!needsConfig && ( + {isComponent && !needsConfig && (
diff --git a/frontend/inbox/handles/index.ts b/frontend/inbox/handles/index.ts index c84d2575e3..2ca4b24653 100644 --- a/frontend/inbox/handles/index.ts +++ b/frontend/inbox/handles/index.ts @@ -37,6 +37,7 @@ export const cyChannelsChatPluginConnectButton = 'channelsChatPluginConnectButto export const cyConnectorsAddNewButton = 'connectorsAddNewButton'; export const cyChannelsChatPluginFormNameInput = 'channelsChatPluginFormNameInput'; export const cyChannelsChatPluginFormSubmitButton = 'channelsChatPluginFormSubmitButton'; +export const cyChannelCreatedChatPluginCloseButton = 'channelCreatedChatPluginCloseButton'; export const cyChannelsFormBackButton = 'channelsFormBackButton'; export const cyOpenStateButton = 'openStateButton'; diff --git a/integration/BUILD b/integration/BUILD index e11df3e477..95753a948c 100644 --- a/integration/BUILD +++ b/integration/BUILD @@ -25,8 +25,9 @@ nodejs_binary( data = [ ":cypress.config.ts", "//integration/chat-plugin", - "//integration/commands", + "//integration/support", "//integration/ui", + "@npm//@types/node", "@npm//cypress", ], entry_point = { diff --git a/integration/chat-plugin/BUILD b/integration/chat-plugin/BUILD index ff2ad9094e..095a56dffd 100644 --- a/integration/chat-plugin/BUILD +++ b/integration/chat-plugin/BUILD @@ -23,6 +23,7 @@ ts_web_library( deps = [ "//frontend/chat-plugin/handles:chat-plugin-handles", "//frontend/inbox/handles", + "@npm//@types/node", "@npm//cypress", ], ) diff --git a/integration/chat-plugin/websocket_test.spec.ts b/integration/chat-plugin/websocket_test.spec.ts index 1e2fbbb344..5415747cec 100644 --- a/integration/chat-plugin/websocket_test.spec.ts +++ b/integration/chat-plugin/websocket_test.spec.ts @@ -1,25 +1,20 @@ -import {cyInputbarTextarea, cyInputbarButton, cyChatPluginMessageList} from 'chat-plugin-handles'; - -import { - cyChannelsChatPluginAddButton, - cyConnectorsAddNewButton, - cyChannelsChatPluginFormNameInput, - cyChannelsChatPluginFormSubmitButton, -} from 'handles'; +import {cyChatPluginMessageList} from 'chat-plugin-handles'; + +declare global { + namespace Cypress { + interface Chainable { + createChatPluginConversation(): Chainable; + editContactDetails(): Chainable; + connectChatPluginConnector(): Chainable; + editDisplayName(): Chainable; + listConversationsForContact(): Chainable; + } + } +} describe('Websocket test', () => { it('Send message from Inbox to Chatplugin and assert Websocket is working', () => { - cy.visit('/control-center/connectors'); - cy.wait(500); - cy.url().should('include', '/connectors'); - cy.get(`[data-cy=${cyChannelsChatPluginAddButton}]`).click(); - cy.get(`[data-cy=${cyConnectorsAddNewButton}]`).click(); - cy.get(`[data-cy=${cyChannelsChatPluginFormNameInput}]`).type(Cypress.env('chatPluginName')); - cy.get(`[data-cy=${cyChannelsChatPluginFormSubmitButton}]`).click(); - - cy.visit('/chatplugin/ui/example?channel_id=' + Cypress.env('channelId')); - cy.get(`[data-cy=${cyInputbarTextarea}]`).type(Cypress.env('messageChatplugin')); - cy.get(`[data-cy=${cyInputbarButton}]`).click(); + cy.createChatPluginConversation(); cy.wait(500); diff --git a/integration/cypress.config.ts b/integration/cypress.config.ts index bf45b999ad..100214da94 100644 --- a/integration/cypress.config.ts +++ b/integration/cypress.config.ts @@ -2,9 +2,9 @@ import {defineConfig} from 'cypress'; export default defineConfig({ e2e: { - baseUrl: 'http://airy.core', + baseUrl: 'http://localhost', specPattern: 'integration/**/*.spec.?s', - supportFile: 'integration/commands/index.ts', + supportFile: 'integration/support/index.ts', }, env: { chatPluginName: 'Cypress Chatplugin', diff --git a/integration/commands/BUILD b/integration/support/BUILD similarity index 86% rename from integration/commands/BUILD rename to integration/support/BUILD index f73c6cda03..f63a265afb 100644 --- a/integration/commands/BUILD +++ b/integration/support/BUILD @@ -6,15 +6,16 @@ check_pkg(name = "buildifier") package(default_visibility = ["//visibility:public"]) ts_web_library( - name = "commands", - srcs = glob(["*.spec.ts"]), + name = "support", tsconfig = { "compilerOptions": { "lib": [ "esnext", "dom", ], - "types": ["cypress"], + "types": [ + "cypress", + ], }, }, deps = [ diff --git a/integration/commands/createChatPluginConversation.ts b/integration/support/createChatPluginConversation.ts similarity index 81% rename from integration/commands/createChatPluginConversation.ts rename to integration/support/createChatPluginConversation.ts index 1eed08260e..35ccb3e065 100644 --- a/integration/commands/createChatPluginConversation.ts +++ b/integration/support/createChatPluginConversation.ts @@ -5,14 +5,17 @@ import { cyChannelsChatPluginFormSubmitButton, cyChannelsChatPluginList, cyChannelsFormBackButton, + cyChannelCreatedChatPluginCloseButton, } from 'handles'; import {cyInputbarButton, cyInputbarTextarea} from 'chat-plugin-handles'; export const connectChatPluginConnector = (): void => { cy.get(`[data-cy=${cyChannelsChatPluginAddButton}]`).click(); - cy.get(`[data-cy=${cyConnectorsAddNewButton}]`).click(); - cy.get(`[data-cy=${cyChannelsChatPluginFormNameInput}]`).type(Cypress.env('chatPluginName')); + cy.get(`[data-cy=${cyConnectorsAddNewButton}]`).first().click({force: true}); + cy.wait(500); + cy.get(`[data-cy=${cyChannelsChatPluginFormNameInput}]`).type(Cypress.env('chatPluginName'), {force: true}); cy.get(`[data-cy=${cyChannelsChatPluginFormSubmitButton}]`).click(); + cy.get(`[data-cy=${cyChannelCreatedChatPluginCloseButton}]`).click(); }; export const createChatPluginConversation = (): void => { diff --git a/integration/commands/editContactDetails.ts b/integration/support/editContactDetails.ts similarity index 100% rename from integration/commands/editContactDetails.ts rename to integration/support/editContactDetails.ts diff --git a/integration/commands/editDisplayName.ts b/integration/support/editDisplayName.ts similarity index 100% rename from integration/commands/editDisplayName.ts rename to integration/support/editDisplayName.ts diff --git a/integration/commands/index.ts b/integration/support/index.ts similarity index 100% rename from integration/commands/index.ts rename to integration/support/index.ts diff --git a/integration/commands/listConversationsForContact.ts b/integration/support/listConversationsForContact.ts similarity index 100% rename from integration/commands/listConversationsForContact.ts rename to integration/support/listConversationsForContact.ts diff --git a/integration/ui/connect_chatplugin.spec.ts b/integration/ui/connect_chatplugin.spec.ts index 9b92b575cb..ab7a23c2f1 100644 --- a/integration/ui/connect_chatplugin.spec.ts +++ b/integration/ui/connect_chatplugin.spec.ts @@ -15,11 +15,11 @@ declare global { describe('Connect chatplugin channel', () => { it('Connect chatplugin channel', () => { cy.visit('/control-center/connectors'); - cy.wait(500); + cy.wait(8000); cy.url().should('include', '/control-center/connectors'); cy.connectChatPluginConnector(); - cy.url().should('include', '/control-center/connectors/connected'); + cy.url().should('include', '/control-center/connectors'); cy.get(`[data-cy=${cyChannelsFormBackButton}]`).click(); cy.get(`[data-cy=${cyChannelsChatPluginList}]`).filter(`:contains("${Cypress.env('chatPluginName')}")`); }); diff --git a/integration/ui/create_tag.spec.ts b/integration/ui/create_tag.spec.ts index 0ebd83246c..c17626b37e 100644 --- a/integration/ui/create_tag.spec.ts +++ b/integration/ui/create_tag.spec.ts @@ -5,32 +5,16 @@ import { cyTagsDialogColorSelectorRed, cyTagsSearchField, cyTagsTable, - cyChannelsChatPluginAddButton, - cyConnectorsAddNewButton, - cyChannelsChatPluginFormNameInput, - cyChannelsChatPluginFormSubmitButton, cyTagsTableRowDisplayDeleteModal, cyTagsTableRowDisplayDeleteModalInput, cyTagsTableRowDisplayDeleteModalButton, - cyChannelsFormBackButton, } from 'handles'; -import {cyInputbarButton, cyInputbarTextarea} from 'chat-plugin-handles'; - describe('Creates and Deletes a Tag', () => { it('Creates and Deletes a Tag', () => { - cy.visit('/control-center/connectors'); - cy.wait(500); - cy.get(`[data-cy=${cyChannelsChatPluginAddButton}]`).click(); - cy.get(`[data-cy=${cyConnectorsAddNewButton}]`).click(); - cy.get(`[data-cy=${cyChannelsChatPluginFormNameInput}]`).type(Cypress.env('chatPluginName')); - cy.get(`[data-cy=${cyChannelsChatPluginFormSubmitButton}]`).click(); + cy.createChatPluginConversation(); - cy.get(`[data-cy=${cyChannelsFormBackButton}]`).click(); - - cy.visit('/chatplugin/ui/example?channel_id=' + Cypress.env('channelId')); - cy.get(`[data-cy=${cyInputbarTextarea}]`).type(Cypress.env('messageChatplugin')); - cy.get(`[data-cy=${cyInputbarButton}]`).click(); + cy.wait(500); cy.visit('/inbox/inbox'); cy.get(`[data-cy=${cyShowTagsDialog}]`).click(); diff --git a/integration/ui/filter_conversation.spec.ts b/integration/ui/filter_conversation.spec.ts index ee0cf371f3..3c71d04e45 100644 --- a/integration/ui/filter_conversation.spec.ts +++ b/integration/ui/filter_conversation.spec.ts @@ -1,15 +1,4 @@ -import { - cySearchButton, - cySearchField, - cyConversationList, - cyChannelsChatPluginAddButton, - cyChannelsChatPluginFormNameInput, - cyChannelsChatPluginFormSubmitButton, - cyChannelsFormBackButton, - cyConnectorsAddNewButton, -} from 'handles'; - -import {cyInputbarButton, cyInputbarTextarea} from 'chat-plugin-handles'; +import {cySearchButton, cySearchField, cyConversationList} from 'handles'; describe('Filter conversation', () => { it('Filter conversation', () => { diff --git a/integration/ui/suggested_replies.spec.ts b/integration/ui/suggested_replies.spec.ts index 3e13e1cbcc..fae1fb2507 100644 --- a/integration/ui/suggested_replies.spec.ts +++ b/integration/ui/suggested_replies.spec.ts @@ -24,7 +24,7 @@ describe('adds two suggested replies to a message and sends one of the suggested cy.visit(`/inbox/inbox/conversations/${Cypress.env('conversationId')}`); cy.url().should('include', '/inbox'); - cy.get(`[data-cy=${cySuggestionsButton}]`).should('be.visible').click(); + cy.get(`[data-cy=${cySuggestionsButton}]`).first().click({force: true}); cy.get(`[data-cy=${cySuggestionsList}]`).contains('Welcome!').click({force: true}); diff --git a/lib/typescript/components/alerts/SettingsModal/ModalHeader.tsx b/lib/typescript/components/alerts/SettingsModal/ModalHeader.tsx index d75cea0650..fccaaef190 100644 --- a/lib/typescript/components/alerts/SettingsModal/ModalHeader.tsx +++ b/lib/typescript/components/alerts/SettingsModal/ModalHeader.tsx @@ -7,12 +7,13 @@ type ModalHeaderProps = { close: (event: React.MouseEvent) => void; headerClassName: string; style: CSSProperties; + dataCyCloseButton?: string; }; -const ModalHeader = ({title, close, headerClassName, style}: ModalHeaderProps) => { +const ModalHeader = ({title, close, headerClassName, style, dataCyCloseButton}: ModalHeaderProps) => { return (
-
diff --git a/lib/typescript/components/alerts/SettingsModal/index.tsx b/lib/typescript/components/alerts/SettingsModal/index.tsx index bc9b0faf1a..6418f63ff3 100644 --- a/lib/typescript/components/alerts/SettingsModal/index.tsx +++ b/lib/typescript/components/alerts/SettingsModal/index.tsx @@ -13,10 +13,21 @@ type SettingsModalProps = { Icon?: React.ReactElement | null; headerClassName?: string; style?: CSSProperties; + dataCyCloseButton?: string; }; export const SettingsModal = (props: SettingsModalProps) => { - const {close, title, children, headerClassName, wrapperClassName, style, containerClassName, Icon} = props; + const { + close, + title, + children, + headerClassName, + wrapperClassName, + style, + containerClassName, + Icon, + dataCyCloseButton, + } = props; return ( { >
{Icon ? Icon : ''} - + {children}
diff --git a/tsconfig.json b/tsconfig.json index db9c23683f..eceabc70ad 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,8 +5,8 @@ }, "include": [ "./frontend/**/*", - "./lib/typescript/**/*" + "./lib/typescript/**/*", ], - "types": ["node", "jest", "@testing-library/jest-dom"], + "types": ["node", "@testing-library/jest-dom", "jest", "./integration/commands/index.ts"], "rootDirs": ["."] } From 091ae52f58c463a88721c6c2a81b614b20318f51 Mon Sep 17 00:00:00 2001 From: ljupcovangelski Date: Wed, 10 Aug 2022 18:17:21 +0200 Subject: [PATCH 57/92] [#3572] Use only Kafka when provisioning topics --- .../templates/provisioning/kafka-create-topics.yaml | 9 ++++++++- .../src/main/java/co/airy/tools/topics/Application.java | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml b/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml index 6b4f52cec9..66cfadfd35 100644 --- a/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml +++ b/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml @@ -17,7 +17,14 @@ data: set -euo pipefail IFS=$'\n\t' - ZOOKEEPER=${ZOOKEEPER:-zookeeper:2181} + + if [ -z "${KAFKA_BROKERS+x}" ]; then + echo "KAFKA_BROKERS is not set. Exiting." + exit 1 + else + CONNECTION_OPTS=(--bootstrap-server $KAFKA_BROKERS) + fi + PARTITIONS=${PARTITIONS:-10} REPLICAS=${KAFKA_MINIMUM_REPLICAS:-1} AIRY_CORE_NAMESPACE=${AIRY_CORE_NAMESPACE:-} diff --git a/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java b/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java index 8fea98c4ed..57c99bb858 100644 --- a/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java +++ b/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java @@ -42,7 +42,14 @@ public static void main(String[] args) { " set -euo pipefail\n" + " IFS=$'\\n\\t'\n" + "\n" + - " ZOOKEEPER=${ZOOKEEPER:-zookeeper:2181}\n" + + "\n" + + " if [ -z \"${KAFKA_BROKERS+x}\" ]; then\n" + + " echo \"KAFKA_BROKERS is not set. Exiting.\"\n" + + " exit 1\n" + + " else\n" + + " CONNECTION_OPTS=(--bootstrap-server $KAFKA_BROKERS)\n" + + " fi\n" + + "\n" + " PARTITIONS=${PARTITIONS:-10}\n" + " REPLICAS=${KAFKA_MINIMUM_REPLICAS:-1}\n" + " AIRY_CORE_NAMESPACE=${AIRY_CORE_NAMESPACE:-}\n" + From 39854eb3b71d31884f8bd64ed2ad2fc311b3ba01 Mon Sep 17 00:00:00 2001 From: ljupcovangelski Date: Thu, 11 Aug 2022 09:34:39 +0200 Subject: [PATCH 58/92] Update version and changelog --- VERSION | 2 +- docs/docs/changelog.md | 204 ++++++++++++++++++++++------------------- 2 files changed, 110 insertions(+), 96 deletions(-) diff --git a/VERSION b/VERSION index 55a0216801..fc7f502dba 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.47.2 +0.47.3 diff --git a/docs/docs/changelog.md b/docs/docs/changelog.md index cda9e1ff6d..078244ff16 100644 --- a/docs/docs/changelog.md +++ b/docs/docs/changelog.md @@ -1,10 +1,24 @@ ---- -title: Changelog -sidebar_label: 📝 Changelog ---- - -## 0.47.2 - +--- +title: Changelog +sidebar_label: 📝 Changelog +--- + +## 0.47.3 + +#### Hotfix + +* [[#3572](https://github.com/airyhq/airy/issues/3572)] Fix Kafka topics provisioning + +#### Airy CLI + +You can download the Airy CLI for your operating system from the following links: + +[MacOS](https://airy-core-binaries.s3.amazonaws.com/0.47.3/darwin/amd64/airy) +[Linux](https://airy-core-binaries.s3.amazonaws.com/0.47.3/linux/amd64/airy) +[Windows](https://airy-core-binaries.s3.amazonaws.com/0.47.3/windows/amd64/airy.exe) + +## 0.47.2 + #### Hotfix * [[#3553](https://github.com/airyhq/airy/issues/3553)] Fix using a custom Kafka when installing Airy via Helm @@ -16,9 +30,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.47.2/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.47.2/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.47.2/windows/amd64/airy.exe) - -## 0.47.1 - + +## 0.47.1 + #### Hotfix * [[#3510](https://github.com/airyhq/airy/issues/3510)] Fix Kafka replication factor setting @@ -30,9 +44,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.47.1/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.47.1/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.47.1/windows/amd64/airy.exe) - -## 0.47.0 - + +## 0.47.0 + #### Changes #### 🚀 Features @@ -123,9 +137,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.47.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.47.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.47.0/windows/amd64/airy.exe) - -## 0.46.0 - + +## 0.46.0 + #### Changes - [[#3270](https://github.com/airyhq/airy/issues/3270)] Cypress test for contacts page in inbox [[#3290](https://github.com/airyhq/airy/pull/3290)] @@ -184,9 +198,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.46.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.46.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.46.0/windows/amd64/airy.exe) - -## 0.45.1 - + +## 0.45.1 + #### Hotfix * [[#3267](https://github.com/airyhq/airy/issues/3267)] Putting components.* endpoints behind auth @@ -198,9 +212,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.45.1/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.45.1/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.45.1/windows/amd64/airy.exe) - -## 0.45.0 - + +## 0.45.0 + #### Changes - [[#3187](https://github.com/airyhq/airy/issues/3187)] Upgrade to react 18 [[#3222](https://github.com/airyhq/airy/pull/3222)] @@ -270,9 +284,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.45.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.45.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.45.0/windows/amd64/airy.exe) - -## 0.44.0 - + +## 0.44.0 + #### Changes #### 🚀 Features @@ -320,9 +334,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.44.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.44.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.44.0/windows/amd64/airy.exe) - -## 0.43.0 - + +## 0.43.0 + #### 🚀 Features - [[#1279](https://github.com/airyhq/airy/issues/1279)] Helm template on local chart with bazel [[#2922](https://github.com/airyhq/airy/pull/2922)] @@ -375,9 +389,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.43.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.43.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.43.0/windows/amd64/airy.exe) - -## 0.42.0 - + +## 0.42.0 + #### Changes - [[#2960](https://github.com/airyhq/airy/issues/2960)] Add prerequisite property overrides [[#2960](https://github.com/airyhq/airy/pull/2960)] @@ -442,9 +456,9 @@ You can download the Airy CLI for your operating system from the following links #### Upgrade notes -This version introduces a new topology in the `api-communication` component. After the upgrade, the component needs to be reset. For more information how do do this refer to the [docs for resetting a Kafka streaming app](https://develop.docs.airy.co/guides/component-reset). -## 0.41.0 - +This version introduces a new topology in the `api-communication` component. After the upgrade, the component needs to be reset. For more information how do do this refer to the [docs for resetting a Kafka streaming app](https://develop.docs.airy.co/guides/component-reset). +## 0.41.0 + #### 🚀 Features - [[[#2892](https://github.com/airyhq/airy/issues/2892)](https://github.com/airyhq/airy/issues/2892)] Failed message indicator [[[#2923](https://github.com/airyhq/airy/issues/2923)](https://github.com/airyhq/airy/pull/2923)] @@ -509,9 +523,9 @@ You can download the Airy CLI for your operating system from the following links #### Upgrade notes This release introduces a change in the structure of the `airy.yaml` file. The `host` setting is no longer present in the `ingress-controller` section and is moved to the `global` section. For more information refer to the [configuration page](https://airy.co/docs/core/getting-started/installation/configuration). - -## 0.40.0 - + +## 0.40.0 + #### 🚀 Features - [[#2742](https://github.com/airyhq/airy/issues/2742)] List objects in s3 bucket [[#2785](https://github.com/airyhq/airy/pull/2785)] @@ -579,9 +593,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.40.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.40.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.40.0/windows/amd64/airy.exe) - -## 0.39.0 - + +## 0.39.0 + #### Changes #### 🚀 Features @@ -631,9 +645,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.39.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.39.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.39.0/windows/amd64/airy.exe) - -## 0.38.1 - + +## 0.38.1 + #### 🐛 Bug Fixes - [[#2736](https://github.com/airyhq/airy/issues/2736)] Hotfix for re-provisioning topics on upgrade [[#2740](https://github.com/airyhq/airy/pull/2740)] @@ -645,9 +659,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.38.1/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.38.1/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.38.1/windows/amd64/airy.exe) - -## 0.38.0 - + +## 0.38.0 + #### Changes - [[#2697](https://github.com/airyhq/airy/issues/2697)] Fix Chatplugin Cutting in Web Browser [[#2709](https://github.com/airyhq/airy/pull/2709)] @@ -689,9 +703,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.38.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.38.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.38.0/windows/amd64/airy.exe) - -## 0.37.0 - + +## 0.37.0 + #### Changes - [[#2653](https://github.com/airyhq/airy/issues/2653)] upgrade slf4j and underlying log4j libraries [[#2654](https://github.com/airyhq/airy/pull/2654)] @@ -733,9 +747,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.37.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.37.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.37.0/windows/amd64/airy.exe) - -## 0.36.1 - + +## 0.36.1 + #### Changes #### 🐛 Bug Fixes @@ -753,9 +767,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.36.1/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.36.1/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.36.1/windows/amd64/airy.exe) - -## 0.36.0 - + +## 0.36.0 + #### 🚀 Features - [[#2604](https://github.com/airyhq/airy/issues/2604)] Added attachment toggle for chatplugin [[#2609](https://github.com/airyhq/airy/pull/2609)] @@ -776,9 +790,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.36.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.36.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.36.0/windows/amd64/airy.exe) - -## 0.35.1 - + +## 0.35.1 + #### 🚀 Features - [[#2586](https://github.com/airyhq/airy/issues/2586)] Terraform core module has wrong Helm link [[#2587](https://github.com/airyhq/airy/pull/2587)] @@ -808,9 +822,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.35.1/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.35.1/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.35.1/windows/amd64/airy.exe) - -## 0.35.0 - + +## 0.35.0 + #### 🚀 Features - [[#2455](https://github.com/airyhq/airy/issues/2455)] Custom message colors chatplugin [[#2585](https://github.com/airyhq/airy/pull/2585)] @@ -854,9 +868,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.35.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.35.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.35.0/windows/amd64/airy.exe) - -## 0.34.0 - + +## 0.34.0 + #### Changes #### 🚀 Features @@ -889,9 +903,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.34.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.34.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.34.0/windows/amd64/airy.exe) - -## 0.33.0 - + +## 0.33.0 + #### 🚀 Features - [[#2294](https://github.com/airyhq/airy/issues/2294)] Allow creating conversations with Twilio [[#2500](https://github.com/airyhq/airy/pull/2500)] @@ -960,9 +974,9 @@ This release has breaking changes in the structure of the airy.yaml file. When u from the version of the CLI and the - namespace is used from the workspace file cli.yaml - Rename the `ingress:` section to `ingress-controller:` - -## 0.32.0 - + +## 0.32.0 + #### Changes #### 🚀 Features @@ -988,9 +1002,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.32.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.32.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.32.0/windows/amd64/airy.exe) - -## 0.31.1 - + +## 0.31.1 + #### 🚀 Features - [[#2432](https://github.com/airyhq/airy/issues/2432)] Added more options to the UI [[#2433](https://github.com/airyhq/airy/pull/2433)] @@ -1012,9 +1026,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.31.1/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.31.1/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.31.1/windows/amd64/airy.exe) - -## 0.31.0 - + +## 0.31.0 + #### 🚀 Features - [[#628](https://github.com/airyhq/airy/issues/628)] Make library compatible with node.js [[#2426](https://github.com/airyhq/airy/pull/2426)] @@ -1054,9 +1068,9 @@ You can download the Airy CLI for your operating system from the following links #### Upgrade notes In the `airy.yaml` file, `host` is moved from the `kubernetes` section, into the `ingress` section. - -## 0.30.0 - + +## 0.30.0 + #### 🚀 Features - [[#2274](https://github.com/airyhq/airy/issues/2274)] Introduce the source API [[#2327](https://github.com/airyhq/airy/pull/2327)] @@ -1105,9 +1119,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.30.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.30.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.30.0/windows/amd64/airy.exe) - -## 0.29.0 - + +## 0.29.0 + #### Changes - [[#2304](https://github.com/airyhq/airy/issues/2304)] Fixed broken link from Messages Send Section to Sources. [[#2307](https://github.com/airyhq/airy/pull/2307)] @@ -1155,9 +1169,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.29.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.29.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.29.0/windows/amd64/airy.exe) - -## 0.28.0 - + +## 0.28.0 + #### 🚀 Features - [[#1911](https://github.com/airyhq/airy/issues/1911)] Reorganize the helm charts [[#2241](https://github.com/airyhq/airy/pull/2241)] @@ -1195,12 +1209,12 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.28.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.28.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.28.0/windows/amd64/airy.exe) - -## Hotfix 0.27.1 - -[[#2219](https://github.com/airyhq/airy/issues/2219)] fixed inbox ui overflow bug [[#2220](https://github.com/airyhq/airy/pull/2220)] -## 0.27.0 - + +## Hotfix 0.27.1 + +[[#2219](https://github.com/airyhq/airy/issues/2219)] fixed inbox ui overflow bug [[#2220](https://github.com/airyhq/airy/pull/2220)] +## 0.27.0 + #### Changes #### 🚀 Features @@ -1243,7 +1257,7 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.27.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.27.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.27.0/windows/amd64/airy.exe) - -## Hotfix 0.26.3 - -[[#2192](https://github.com/airyhq/airy/issues/2192)] Inbox crashing when selecting conversations in filtered view [[#2193](https://github.com/airyhq/airy/pull/2193)] + +## Hotfix 0.26.3 + +[[#2192](https://github.com/airyhq/airy/issues/2192)] Inbox crashing when selecting conversations in filtered view [[#2193](https://github.com/airyhq/airy/pull/2193)] From 4226d3fd53b18360442c223598c529b8c108afb1 Mon Sep 17 00:00:00 2001 From: Bilge Han Cakmak <110383049+bilgeAiry@users.noreply.github.com> Date: Thu, 11 Aug 2022 09:56:48 +0200 Subject: [PATCH 59/92] Update minikube.md The edited line was wrong only changed driver to docker. --- docs/docs/getting-started/installation/minikube.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/getting-started/installation/minikube.md b/docs/docs/getting-started/installation/minikube.md index 1d11ef860f..5fc6235dc2 100644 --- a/docs/docs/getting-started/installation/minikube.md +++ b/docs/docs/getting-started/installation/minikube.md @@ -51,7 +51,7 @@ The base URL for the [API](../../api/introduction.md) is the same to access the To customize your Minikube instance, you can adjust the `driver`, `cpus` and `memory` attributes in the following manner: ``` -minikube -p airy-core start --driver=docker --cpus=3 --memory=7168 --container-runtime=containerd --ports=80:80 --extra-config=apiserver.service-node-port-range=1-65535 +airy create --provider=minikube --provider-config driver=docker,cpus=4,memory=8192 my-airy ``` If you want to customize your `Airy Core` instance please see our [Configuration From 28369772e81e548345745321256927883fa32b1b Mon Sep 17 00:00:00 2001 From: Bilge Han Cakmak <110383049+bilgeAiry@users.noreply.github.com> Date: Thu, 11 Aug 2022 10:17:26 +0200 Subject: [PATCH 60/92] Update minikube.md --- docs/docs/getting-started/installation/minikube.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/getting-started/installation/minikube.md b/docs/docs/getting-started/installation/minikube.md index 5fc6235dc2..6853e8c9b2 100644 --- a/docs/docs/getting-started/installation/minikube.md +++ b/docs/docs/getting-started/installation/minikube.md @@ -51,7 +51,7 @@ The base URL for the [API](../../api/introduction.md) is the same to access the To customize your Minikube instance, you can adjust the `driver`, `cpus` and `memory` attributes in the following manner: ``` -airy create --provider=minikube --provider-config driver=docker,cpus=4,memory=8192 my-airy +airy create --provider=minikube --provider-config driver=virtualbox,cpus=4,memory=8192 my-airy ``` If you want to customize your `Airy Core` instance please see our [Configuration From 999dbf3a5712bdecbb3adb79585b58ad62b327f0 Mon Sep 17 00:00:00 2001 From: Audrey Kadjar Date: Thu, 11 Aug 2022 11:23:58 +0200 Subject: [PATCH 61/92] [#3489] component card details on catalog (#3569) * catalog product page wip * details wip * wip * card details finsihed - small fixes still wip * wip * feature finished * last fix * fixed styling * fix --- frontend/control-center/src/App.tsx | 3 + .../src/pages/Catalog/CatalogCard/index.tsx | 41 ++-- .../CatalogItemDetails/index.module.scss | 183 +++++++++++++++++ .../Catalog/CatalogItemDetails/index.tsx | 185 ++++++++++++++++++ .../{CatalogCard => }/getRouteForCard.ts | 37 +++- .../ConnectorConfig/index.module.scss | 45 +++-- .../src/pages/Connectors/index.tsx | 9 +- frontend/control-center/src/routes/routes.ts | 10 + .../components/cta/Button/index.tsx | 1 + .../wrapper/ContentWrapper/index.module.scss | 27 ++- .../wrapper/ContentWrapper/index.tsx | 15 +- lib/typescript/model/Components.ts | 1 + lib/typescript/translations/translations.ts | 16 +- 13 files changed, 515 insertions(+), 58 deletions(-) create mode 100644 frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss create mode 100644 frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.tsx rename frontend/control-center/src/pages/Catalog/{CatalogCard => }/getRouteForCard.ts (68%) diff --git a/frontend/control-center/src/App.tsx b/frontend/control-center/src/App.tsx index 427d98e87c..b4d57a9d5c 100644 --- a/frontend/control-center/src/App.tsx +++ b/frontend/control-center/src/App.tsx @@ -33,6 +33,7 @@ import ConnectorTwilioSms from './pages/Connectors/Providers/Twilio/SMS/Connecto import ConnectorTwilioWhatsapp from './pages/Connectors/Providers/Twilio/WhatsApp/ConnectorTwilioWhatsapp'; import ConnectorGoogle from './pages/Connectors/Providers/Google/ConnectorGoogle'; import ConnectorInstagram from './pages/Connectors/Providers/Instagram/ConnectorInstagram'; +import CatalogProductPage from './pages/Catalog/CatalogItemDetails'; const mapDispatchToProps = { getClientConfig, @@ -79,6 +80,8 @@ const App = (props: ConnectedProps) => { } /> } /> } /> + + } /> } /> diff --git a/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx b/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx index 882f329b7f..c5287c645f 100644 --- a/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx +++ b/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx @@ -7,7 +7,11 @@ import {installComponent} from '../../../actions/catalog'; import {useTranslation} from 'react-i18next'; import {connect, ConnectedProps} from 'react-redux'; import {getChannelAvatar} from '../../../components/ChannelAvatar'; -import {getConnectedRouteForComponent, getNewChannelRouteForComponent} from './getRouteForCard'; +import { + getConnectedRouteForComponent, + getNewChannelRouteForComponent, + getCatalogProductRouteForComponent, +} from '../getRouteForCard'; import styles from './index.module.scss'; type CatalogCardProps = { @@ -20,6 +24,20 @@ const mapDispatchToProps = { const connector = connect(null, mapDispatchToProps); +export const availabilityFormatted = (availability: string) => availability.split(','); + +export const DescriptionComponent = (props: {description: string}) => { + const {description} = props; + const {t} = useTranslation(); + return <>{t(description)}; +}; + +export const getDescriptionSourceName = (name: string, displayName: string) => { + if (displayName.includes('SMS')) return 'twiliosms'; + if (displayName.includes('WhatsApp')) return 'twilioWhatsapp'; + return getSourceForComponent(name)?.replace('.', ''); +}; + const CatalogCard = (props: CatalogCardProps) => { const {componentInfo, installComponent} = props; const [isInstalled, setIsInstalled] = useState(componentInfo.installed); @@ -40,8 +58,6 @@ const CatalogCard = (props: CatalogCardProps) => { setIsInstalled(!isInstalled); }; - const availabilityFormatted = (availability: string) => availability.split(','); - const CatalogCardButton = () => { if (isInstalled) { return ( @@ -58,20 +74,11 @@ const CatalogCard = (props: CatalogCardProps) => { ); }; - const DescriptionComponent = (props: {description: string}) => { - const {description} = props; - const {t} = useTranslation(); - return <>{t(description)}; - }; - - const getDescriptionSourceName = (name: string, displayName: string) => { - if (displayName.includes('SMS')) return 'twiliosms'; - if (displayName.includes('WhatsApp')) return 'twilioWhatsapp'; - return getSourceForComponent(name)?.replace('.', ''); - }; - return ( -
+
navigate(getCatalogProductRouteForComponent(componentInfo.displayName), {state: {componentInfo}})} + >
{getChannelAvatar(componentInfo.displayName)} @@ -82,7 +89,7 @@ const CatalogCard = (props: CatalogCardProps) => {

{' '} - {t('categories')} {componentInfo.category}{' '} + {t('categories')}: {componentInfo.category}{' '}

diff --git a/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss b/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss new file mode 100644 index 0000000000..a487e7b172 --- /dev/null +++ b/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss @@ -0,0 +1,183 @@ +@import 'assets/scss/fonts.scss'; +@import 'assets/scss/colors.scss'; + +.heading { + margin-left: 200px; + height: 100%; + display: flex; + justify-content: center; + flex-direction: column; + margin-top: 24px; + + h1 { + @include font-l; + font-weight: 900; + line-height: 24px; + } + + p { + @include font-base; + margin: 5px 0 0 0; + color: var(--color-text-gray); + } +} + +.componentDescription { + padding-left: 30px; + h1 { + @include font-m; + font-weight: 800; + margin: 20px 0; + } + + p { + width: 80%; + } +} + +.backButton { + text-decoration: none; + + button { + background: transparent; + color: var(--color-text-contrast); + } + + &:hover, + &:active, + &:visited { + text-decoration: underline; + } +} + +.linkButtonContainer { + @include font-base; + display: flex; + align-items: center; + text-decoration: none; + color: var(--color-text-contrast); + font-weight: bold; + + &:hover, + &:active, + &:visited { + text-decoration: none; + color: var(--color-text-contrast); + } +} + +.backIcon { + width: 20px; + background: transparent; + path { + fill: var(--color-text-gray); + } + margin-right: 8px; +} + +.detailsComponentLogo { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + margin-top: 20px; + padding-right: 16px; +} + +.logoIcon { + width: 120px; +} + +.installButton { + width: 100%; + height: 50px; + margin-top: 10px; + @include font-base; +} + +.details { + p { + color: var(--color-text-contrast); + @include font-s; + } + + button { + border: 1px solid var(--color-airy-blue); + border-radius: 20px; + background: transparent; + color: var(--color-airy-blue); + padding: 4px 12px; + margin-right: 5px; + margin-top: 8px; + } + + .detailInfo { + margin-bottom: 20px; + } + + section a, + section a:hover, + section a:visited, + section a:active { + color: var(--color-airy-blue); + word-break: break-word; + hyphens: auto; + text-decoration: none; + display: inline-block; + width: 80%; + } +} + +.availability { + display: flex; + align-items: center; + color: var(--color-airy-blue); + @include font-s; + margin-top: 20px; + svg { + fill: var(--color-airy-blue); + width: 14px; + margin-right: 5px; + display: flex; + align-items: center; + } +} + +.bolded { + font-weight: 800; +} + +.checkmarkIcon { + width: 15%; + margin-bottom: 30px; + fill: var(--color-soft-green); +} + +.enableModalContainerWrapper { + width: 50%; + height: 70%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.enableModalContainer { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + @include font-l; + + p { + max-width: 70%; + text-align: center; + margin: 4px 0 20px 0; + color: var(--color-text-contrast); + } +} + +.headerModal { + @include font-xl; +} diff --git a/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.tsx b/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.tsx new file mode 100644 index 0000000000..5087abfba5 --- /dev/null +++ b/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.tsx @@ -0,0 +1,185 @@ +import React, {useState, useEffect} from 'react'; +import {Link, useNavigate, useLocation} from 'react-router-dom'; +import {useTranslation} from 'react-i18next'; +import {connect, ConnectedProps} from 'react-redux'; +import {installComponent, uninstallComponent} from '../../../actions/catalog'; +import {ContentWrapper, Button, LinkButton, SettingsModal} from 'components'; +import {getChannelAvatar} from '../../../components/ChannelAvatar'; +import {availabilityFormatted, DescriptionComponent, getDescriptionSourceName} from '../CatalogCard'; +import {CATALOG_ROUTE} from '../../../routes/routes'; +import {ReactComponent as ArrowLeftIcon} from 'assets/images/icons/leftArrowCircle.svg'; +import {ReactComponent as CheckmarkIcon} from 'assets/images/icons/checkmarkFilled.svg'; +import {getNewChannelRouteForComponent} from '../getRouteForCard'; +import {ComponentInfo} from 'model'; +import styles from './index.module.scss'; + +const mapDispatchToProps = { + installComponent, + uninstallComponent, +}; + +const connector = connect(null, mapDispatchToProps); + +interface LocationState { + componentInfo: ComponentInfo; +} + +const CatalogItemDetails = (props: ConnectedProps) => { + const {installComponent, uninstallComponent} = props; + const location = useLocation(); + const locationState = location.state as LocationState; + const {componentInfo} = locationState; + const [isInstalled, setIsInstalled] = useState(componentInfo.installed); + const [isModalVisible, setIsModalVisible] = useState(false); + const [modalTitle, setModalTitle] = useState(''); + + const {t} = useTranslation(); + const navigate = useNavigate(); + const NEW_COMPONENT_INSTALL_ROUTE = getNewChannelRouteForComponent(componentInfo.displayName); + + const uninstallText = t('uninstall') + ` ${componentInfo.displayName}`; + const installText = `${componentInfo.displayName} ` + t('installed'); + + useEffect(() => { + const title = isInstalled ? uninstallText : installText; + setModalTitle(title); + }, [isInstalled]); + + const openModalInstall = () => { + setIsModalVisible(true); + + if (!isInstalled) installComponent({name: `${componentInfo.name}`}); + }; + + const toggleButtonInstallationStatus = () => { + setIsInstalled(!isInstalled); + }; + + const cancelInstallationToggle = () => { + setIsModalVisible(false); + + if (!isInstalled) toggleButtonInstallationStatus(); + }; + + const confirmUninstall = () => { + uninstallComponent({name: `${componentInfo.name}`}); + + setIsModalVisible(false); + toggleButtonInstallationStatus(); + }; + + const HeaderContent = () => { + return ( +
+

{componentInfo?.displayName}

+

+ +

+
+ ); + }; + + const BodyContent = () => { + return ( +
+

{t('Description')}

+

{componentInfo.description}

+
+ ); + }; + + const SideColumnContent = () => { + return ( + <> + + +
+ + {t('Catalog')} +
+
+ + +
+
{getChannelAvatar(componentInfo?.displayName)}
+ +
+ +
+
+

{t('availableFor')}:

+ {componentInfo?.availableFor && + availabilityFormatted(componentInfo.availableFor).map((service: string) => ( + + ))} +
+ +
+

{t('categories')}:

+ {componentInfo?.category && + availabilityFormatted(componentInfo?.category).map((categoryItem: string) => ( + + ))} +
+ +
+

{t('price')}:

+ +
+ +
+

+ Airy Docs:
{' '} + + {componentInfo?.docs} + +

+
+
+ + {isModalVisible && ( + : null} + wrapperClassName={styles.enableModalContainerWrapper} + containerClassName={styles.enableModalContainer} + title={modalTitle} + close={cancelInstallationToggle} + headerClassName={styles.headerModal} + > + {isInstalled &&

{t('uninstallComponentText')}

} + {!isInstalled ? ( + + ) : ( + + )} +
+ )} + + ); + }; + + return ( + } + sideColumnContent={} + transparent + isSideColumn + content={} + variantHeight="large" + /> + ); +}; + +export default connector(CatalogItemDetails); diff --git a/frontend/control-center/src/pages/Catalog/CatalogCard/getRouteForCard.ts b/frontend/control-center/src/pages/Catalog/getRouteForCard.ts similarity index 68% rename from frontend/control-center/src/pages/Catalog/CatalogCard/getRouteForCard.ts rename to frontend/control-center/src/pages/Catalog/getRouteForCard.ts index a2cfc0b438..88678b847b 100644 --- a/frontend/control-center/src/pages/Catalog/CatalogCard/getRouteForCard.ts +++ b/frontend/control-center/src/pages/Catalog/getRouteForCard.ts @@ -16,7 +16,17 @@ import { CONNECTORS_ZENDESK_ROUTE, CONNECTORS_SALESFORCE_ROUTE, CONNECTORS_WHATSAPP_BUSINESS_CLOUD_ROUTE, -} from '../../../routes/routes'; + CATALOG_FACEBOOK_ROUTE, + CATALOG_CHAT_PLUGIN_ROUTE, + CATALOG_TWILIO_SMS_ROUTE, + CATALOG_TWILIO_WHATSAPP_ROUTE, + CATALOG_WHATSAPP_BUSINESS_CLOUD_ROUTE, + CATALOG_GOOGLE_ROUTE, + CATALOG_INSTAGRAM_ROUTE, + CATALOG_DIALOGFLOW_ROUTE, + CATALOG_ZENDESK_ROUTE, + CATALOG_SALESFORCE_ROUTE, +} from '../../routes/routes'; export const getConnectedRouteForComponent = (displayName: string) => { switch (displayName) { @@ -67,3 +77,28 @@ export const getNewChannelRouteForComponent = (displayName: string) => { return CONNECTORS_ZENDESK_ROUTE + '/new'; } }; + +export const getCatalogProductRouteForComponent = (displayName: string) => { + switch (displayName) { + case 'Airy Chat Plugin': + return CATALOG_CHAT_PLUGIN_ROUTE; + case 'Facebook Messenger': + return CATALOG_FACEBOOK_ROUTE; + case 'Twilio SMS': + return CATALOG_TWILIO_SMS_ROUTE; + case 'Twilio WhatsApp': + return CATALOG_TWILIO_WHATSAPP_ROUTE; + case 'WhatsApp Business Cloud': + return CATALOG_WHATSAPP_BUSINESS_CLOUD_ROUTE; + case 'Google Business Messages': + return CATALOG_GOOGLE_ROUTE; + case 'Instagram': + return CATALOG_INSTAGRAM_ROUTE; + case 'Dialogflow': + return CATALOG_DIALOGFLOW_ROUTE; + case 'Salesforce': + return CATALOG_SALESFORCE_ROUTE; + case 'Zendesk': + return CATALOG_ZENDESK_ROUTE; + } +}; diff --git a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss index 175eb52982..eba8258976 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss +++ b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss @@ -16,6 +16,28 @@ width: 100%; } +.backButtonContainer { + display: flex; + align-items: center; + flex-direction: row; + + div { + @include font-base; + font-weight: 400; + text-decoration: none; + } + + a { + @include font-base; + text-decoration: none; + } + + button { + background: transparent; + color: var(--color-airy-blue); + } +} + .linkButtonContainer { @include font-base; display: flex; @@ -67,7 +89,6 @@ .componentTitle { display: flex; - // width: min-content; align-items: center; } @@ -111,28 +132,6 @@ display: flex; } -.backButtonContainer { - display: flex; - align-items: center; - flex-direction: row; - - div { - @include font-base; - font-weight: 400; - text-decoration: none; - } - - a { - @include font-base; - text-decoration: none; - } - - button { - background: transparent; - color: var(--color-airy-blue); - } -} - .infoBox { margin: 0; button { diff --git a/frontend/control-center/src/pages/Connectors/index.tsx b/frontend/control-center/src/pages/Connectors/index.tsx index 2cde61e97a..eb982978f8 100644 --- a/frontend/control-center/src/pages/Connectors/index.tsx +++ b/frontend/control-center/src/pages/Connectors/index.tsx @@ -78,6 +78,11 @@ const Connectors = (props: ConnectedProps) => { {sourcesInfo.map((infoItem: SourceInfo, index: number) => { return ( (channelsBySource(infoItem.type).length > 0 && + components && + components[infoItem.configKey] && + connectors && + connectors[infoItem.componentName] && + Object.keys(connectors[infoItem?.componentName]) && infoItem.channel && isComponentInstalled(infoItem.repository, infoItem.componentName) && ( ) => { isInstalled, Object.keys(connectors[infoItem.componentName]).length > 0 || infoItem.type === Source.chatPlugin, - components[infoItem.configKey].enabled + components[infoItem.configKey]?.enabled )} key={index} /> @@ -117,7 +122,7 @@ const Connectors = (props: ConnectedProps) => { componentStatus={getComponentStatus( isInstalled, Object.keys(connectors[infoItem.componentName]).length > 0, - components[infoItem.configKey].enabled + components[infoItem?.configKey].enabled )} style={InfoCardStyle.normal} key={infoItem.type} diff --git a/frontend/control-center/src/routes/routes.ts b/frontend/control-center/src/routes/routes.ts index 007dde586e..5359a8aa86 100644 --- a/frontend/control-center/src/routes/routes.ts +++ b/frontend/control-center/src/routes/routes.ts @@ -26,6 +26,16 @@ export const CONNECTORS_GOOGLE_CONNECTED_ROUTE = '/connectors/connected/google'; export const CONNECTORS_INSTAGRAM_CONNECTED_ROUTE = '/connectors/connected/instagram'; export const CATALOG_ROUTE = '/catalog'; +export const CATALOG_FACEBOOK_ROUTE = '/catalog/facebook'; +export const CATALOG_CHAT_PLUGIN_ROUTE = '/catalog/chatplugin'; +export const CATALOG_TWILIO_SMS_ROUTE = '/catalog/twilio.sms'; +export const CATALOG_TWILIO_WHATSAPP_ROUTE = '/catalog/twilio.whatsapp'; +export const CATALOG_WHATSAPP_BUSINESS_CLOUD_ROUTE = '/catalog/whatsappBusinessCloud'; +export const CATALOG_GOOGLE_ROUTE = '/catalog/google'; +export const CATALOG_INSTAGRAM_ROUTE = '/catalog/instagram'; +export const CATALOG_DIALOGFLOW_ROUTE = '/catalog/dialogflow'; +export const CATALOG_ZENDESK_ROUTE = '/catalog/zendesk'; +export const CATALOG_SALESFORCE_ROUTE = '/catalog/salesforce'; export const INBOX_ROUTE = '/inbox'; export const INBOX_CONNECTED_ROUTE = '/inbox/connected'; diff --git a/lib/typescript/components/cta/Button/index.tsx b/lib/typescript/components/cta/Button/index.tsx index 0d980103eb..9fca9c1c6b 100644 --- a/lib/typescript/components/cta/Button/index.tsx +++ b/lib/typescript/components/cta/Button/index.tsx @@ -12,6 +12,7 @@ type styleVariantType = | 'link' | 'text' | 'green'; + type ButtonProps = { children: ReactNode; onClick?: (event?) => void; diff --git a/lib/typescript/components/wrapper/ContentWrapper/index.module.scss b/lib/typescript/components/wrapper/ContentWrapper/index.module.scss index 414641d0f6..174ba9eb8c 100644 --- a/lib/typescript/components/wrapper/ContentWrapper/index.module.scss +++ b/lib/typescript/components/wrapper/ContentWrapper/index.module.scss @@ -2,7 +2,6 @@ display: flex; flex-direction: column; margin: 88px 16px 0 191px; - height: calc(100vh - 88px); overflow-y: scroll; overflow-x: hidden; width: 100%; @@ -13,30 +12,40 @@ color: var(--color-text-contrast); border-top-left-radius: 10px; border-top-right-radius: 10px; - overflow-y: scroll; - overflow-x: hidden; + overflow: hidden; width: 100%; + margin-bottom: 48px; +} - margin-bottom: 24px; +.headerMedium { + height: 75px; } .headerBig { height: 160px; } -.headerMedium { - height: 75px; +.headerLarge { + height: 170px; +} + +.sideColumn { + width: 196px; + height: 100%; + position: absolute; } .transparentContent { background: var(--color-background-white); color: var(--color-text-contrast); - border-top-left-radius: 10px; - border-top-right-radius: 10px; + border-radius: 10px; height: calc(100vh - 88px); overflow-y: scroll; overflow-x: hidden; - width: 100%; +} + +.leftOffset { + margin-left: 196px; } .colored { diff --git a/lib/typescript/components/wrapper/ContentWrapper/index.tsx b/lib/typescript/components/wrapper/ContentWrapper/index.tsx index b4658d7897..4905b6a6be 100644 --- a/lib/typescript/components/wrapper/ContentWrapper/index.tsx +++ b/lib/typescript/components/wrapper/ContentWrapper/index.tsx @@ -5,11 +5,13 @@ type ContentWrapperProps = { transparent: boolean; content: React.ReactNode; header?: React.ReactNode; - variantHeight?: 'big' | 'medium'; + variantHeight?: 'medium' | 'big' | 'large'; + isSideColumn?: boolean; + sideColumnContent?: React.ReactNode; }; export const ContentWrapper = (props: ContentWrapperProps) => { - const {transparent, content, header, variantHeight} = props; + const {transparent, content, header, variantHeight, isSideColumn, sideColumnContent} = props; return ( <> @@ -17,12 +19,17 @@ export const ContentWrapper = (props: ContentWrapperProps) => {
{header}
-
{content}
+
{sideColumnContent}
+
{content}
) : (
{content}
diff --git a/lib/typescript/model/Components.ts b/lib/typescript/model/Components.ts index a077c24161..a910e1d022 100644 --- a/lib/typescript/model/Components.ts +++ b/lib/typescript/model/Components.ts @@ -14,4 +14,5 @@ export interface ComponentInfo { description: string; category: string; price: string; + docs: string; } diff --git a/lib/typescript/translations/translations.ts b/lib/typescript/translations/translations.ts index 2cc4f4c4f4..2561980b4a 100644 --- a/lib/typescript/translations/translations.ts +++ b/lib/typescript/translations/translations.ts @@ -373,6 +373,9 @@ const resources = { //Catalog categories: 'Categories', availableFor: 'Available for', + price: 'Price', + Free: 'Free', + Paid: 'Paid', //NotFound notFound: `Oops! We couldn't find that here.`, @@ -563,7 +566,7 @@ const resources = { restartComponentUpdate: 'Wir werden die Komponente neu starten, um Ihr Update anzuwenden.', //Channels - toConfigure: 'konfigurieren', + toConfigure: 'Konfigurieren', configure: 'Konfigurieren', chatpluginTitle: 'Chat Plugin', chatpluginDescription: 'Der beste Browser-Messenger seiner Klasse', @@ -704,7 +707,7 @@ const resources = { //Salesforce salesforceDescription: - 'Steigern Sie die Vertriebsleistung mit der weltweit führenden CRM-Plattform für Unternehmen jeder Größe.', + 'Steigern Sie die Vertriebsleistung mit der weltweit führenden CRM-Plattform für Unternehmen.', salesforceOrgUrl: 'Organisations-URL', yourSalesforceOrgUrl: 'Ihre Salesforce-Organisations-URL', salesforceOrgUrlExample: 'Beispiel: https://org.my.salesforce.com', @@ -785,6 +788,9 @@ const resources = { //Catalog categories: 'Kategorien', availableFor: 'Verfügbar für', + price: 'Preis', + Free: 'Kostenlos', + Paid: 'Kostenpflichtig', //NotFound notFound: 'Huch! Das konnten wir hier nicht finden.', @@ -1189,6 +1195,9 @@ const resources = { //Catalog categories: 'Catégories', availableFor: 'Disponible pour', + price: 'Prix', + Free: 'Gratuit', + Paid: 'Payant', //NotFound notFound: 'Oups! Page non trouvée.', @@ -1597,6 +1606,9 @@ const resources = { //Catalog categories: 'Categorías', availableFor: 'Disponible para', + price: 'Precio', + Free: 'Gratis', + Paid: 'Premium', //NotFound notFound: '¡Uy! No pudimos encontrarlo aquí.', From de49fe6b2e2274483abc9684ed558174ecc5a3ec Mon Sep 17 00:00:00 2001 From: Ljupco Vangelski Date: Thu, 11 Aug 2022 20:22:51 +0200 Subject: [PATCH 62/92] [#3208] Package core components (#3570) --- WORKSPACE | 4 +- backend/api/contacts/helm/BUILD | 3 + .../api/contacts/helm}/Chart.yaml | 4 +- .../contacts/helm}/templates/configmap.yaml | 4 +- .../contacts/helm}/templates/deployment.yaml | 14 ++--- .../api/contacts/helm}/templates/service.yaml | 5 +- backend/api/contacts/helm/values.yaml | 9 +++ backend/media/helm/BUILD | 3 + .../media/helm}/Chart.yaml | 4 +- .../media/helm}/templates/configmap.yaml | 4 +- .../media/helm}/templates/deployment.yaml | 12 ++-- .../media/helm}/templates/service.yaml | 5 +- backend/media/helm/values.yaml | 9 +++ backend/sources/api/helm/BUILD | 3 + .../sources/api/helm}/Chart.yaml | 4 +- .../api/helm}/templates/configmap.yaml | 4 +- .../api/helm}/templates/deployment.yaml | 14 ++--- .../sources/api/helm}/templates/service.yaml | 5 +- backend/sources/api/helm/values.yaml | 9 +++ backend/sources/chat-plugin/helm/BUILD | 3 + .../sources/chat-plugin/helm}/Chart.yaml | 2 +- .../helm}/templates/backend/deployment.yaml | 14 ++--- .../helm/templates/backend/service.yaml | 16 ++++++ .../helm}/templates/configmap.yaml | 4 +- .../helm}/templates/frontend/deployment.yaml | 8 +-- .../helm}/templates/frontend/ingress.yaml | 0 .../helm}/templates/frontend/service.yaml | 2 + .../sources/chat-plugin/helm}/values.yaml | 2 +- backend/sources/facebook/helm/BUILD | 3 + .../sources/facebook/helm}/Chart.yaml | 2 +- .../facebook/helm/templates/configmap.yaml | 10 ++++ .../facebook/helm}/templates/deployments.yaml | 16 +++--- .../facebook/helm}/templates/service.yaml | 2 + backend/sources/facebook/helm/values.yaml | 13 +++++ backend/sources/google/helm/BUILD | 3 + .../sources/google/helm}/Chart.yaml | 2 +- .../google/helm/templates/configmap.yaml | 10 ++++ .../google/helm}/templates/deployments.yaml | 16 +++--- .../google/helm}/templates/service.yaml | 2 + backend/sources/google/helm/values.yaml | 13 +++++ backend/sources/twilio/helm/BUILD | 3 + .../sources/twilio/helm}/Chart.yaml | 2 +- .../twilio/helm/templates/configmap.yaml | 10 ++++ .../twilio/helm}/templates/deployments.yaml | 16 +++--- .../twilio/helm}/templates/service.yaml | 2 + backend/sources/twilio/helm/values.yaml | 13 +++++ backend/sources/viber/helm/BUILD | 3 + .../sources/viber/helm}/Chart.yaml | 2 +- .../viber/helm/templates/configmap.yaml | 10 ++++ .../viber/helm}/templates/deployments.yaml | 6 +- .../viber/helm}/templates/service.yaml | 1 + backend/sources/viber/helm/values.yaml | 10 ++++ backend/sources/whatsapp/helm/BUILD | 3 + .../sources/whatsapp/helm}/Chart.yaml | 2 +- .../whatsapp/helm/templates/configmap.yaml | 10 ++++ .../whatsapp/helm}/templates/deployments.yaml | 12 ++-- .../whatsapp/helm}/templates/service.yaml | 2 + .../sources/whatsapp/helm}/values.yaml | 6 +- backend/webhook/helm/BUILD | 3 + .../webhook/helm}/Chart.yaml | 4 +- backend/webhook/helm/templates/configmap.yaml | 10 ++++ .../webhook/helm}/templates/deployments.yaml | 12 ++-- .../webhook/helm}/templates/services.yaml | 3 + backend/webhook/helm/values.yaml | 13 +++++ infrastructure/helm-chart/Chart.yaml | 4 +- .../helm-chart/charts/components/Chart.yaml | 16 ------ .../charts/components/charts/api/Chart.yaml | 5 -- .../api/charts/api-communication/Chart.yaml | 5 -- .../api/charts/api-communication/values.yaml | 5 -- .../api/charts/api-contacts/values.yaml | 5 -- .../api/charts/api-websocket/Chart.yaml | 5 -- .../api/charts/api-websocket/values.yaml | 5 -- .../components/charts/frontend/Chart.yaml | 5 -- .../charts/frontend-control-center/Chart.yaml | 5 -- .../frontend-control-center/values.yaml | 5 -- .../frontend/charts/frontend-inbox/Chart.yaml | 5 -- .../frontend-inbox/templates/configmap.yaml | 10 ---- .../charts/frontend-inbox/values.yaml | 5 -- .../components/charts/integration/Chart.yaml | 5 -- .../integration/charts/source-api/values.yaml | 4 -- .../integration/charts/webhook/values.yaml | 9 --- .../charts/components/charts/media/Chart.yaml | 5 -- .../charts/resolver/templates/service.yaml | 15 ----- .../charts/media/charts/resolver/values.yaml | 5 -- .../components/charts/sources/Chart.yaml | 16 ------ .../charts/sources/charts/chatplugin/BUILD | 28 ---------- .../chatplugin/templates/backend/service.yaml | 15 ----- .../chatplugin/templates/configmap.yaml | 10 ---- .../sources/charts/facebook/values.yaml | 9 --- .../charts/sources/charts/google/values.yaml | 9 --- .../charts/sources/charts/twilio/values.yaml | 9 --- .../charts/sources/charts/viber/values.yaml | 6 -- .../components/charts/sources/values.yaml | 2 - .../templates/api/admin/configmap.yaml | 10 ---- .../templates/api/admin/service.yaml | 15 ----- .../helm-chart/charts/components/values.yaml | 7 --- .../charts/ingress-controller/BUILD | 29 +--------- .../charts/ingress-controller/Chart.yaml | 2 +- .../charts/prerequisites/Chart.yaml | 2 +- .../prerequisites/charts/beanstalkd/BUILD | 28 +--------- .../charts/prerequisites/charts/kafka/BUILD | 28 +--------- .../prerequisites/charts/kafka/values.yaml | 4 ++ .../helm-chart/charts/tools/charts/akhq/BUILD | 28 +--------- .../charts/tools/charts/kafka-connect/BUILD | 28 +--------- .../components/api-admin/configmap.yaml | 10 ++++ .../components/api-admin}/deployment.yaml | 18 +++--- .../components/api-admin}/service.yaml | 4 +- .../api-communication/configmap.yaml | 10 ++++ .../api-communication}/deployment.yaml | 20 +++---- .../components/api-communication/service.yaml | 15 +++++ .../components/api-websocket/configmap.yaml | 10 ++++ .../components/api-websocket}/deployment.yaml | 18 +++--- .../components/api-websocket/service.yaml | 15 +++++ .../frontend-control-center/configmap.yaml | 10 ++++ .../frontend-control-center}/deployment.yaml | 18 +++--- .../frontend-control-center}/ingress.yaml | 6 +- .../frontend-control-center}/service.yaml | 4 +- .../components/frontend-inbox/configmap.yaml | 10 ++++ .../frontend-inbox}/deployment.yaml | 18 +++--- .../components/frontend-inbox}/ingress.yaml | 2 +- .../components/frontend-inbox}/service.yaml | 4 +- .../components}/ingress.yaml | 0 infrastructure/helm-chart/values.yaml | 33 +++++++++++ scripts/push-helm-charts.sh | 2 +- tools/build/helm.bzl | 56 ++++++++++++++++++- 125 files changed, 560 insertions(+), 556 deletions(-) create mode 100644 backend/api/contacts/helm/BUILD rename {infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts => backend/api/contacts/helm}/Chart.yaml (70%) rename {infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket => backend/api/contacts/helm}/templates/configmap.yaml (69%) rename {infrastructure/helm-chart/charts/components/charts/api/charts/api-communication => backend/api/contacts/helm}/templates/deployment.yaml (85%) rename {infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket => backend/api/contacts/helm}/templates/service.yaml (65%) create mode 100644 backend/api/contacts/helm/values.yaml create mode 100644 backend/media/helm/BUILD rename {infrastructure/helm-chart/charts/components/charts/media/charts/resolver => backend/media/helm}/Chart.yaml (69%) rename {infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts => backend/media/helm}/templates/configmap.yaml (69%) rename {infrastructure/helm-chart/charts/components/charts/media/charts/resolver => backend/media/helm}/templates/deployment.yaml (87%) rename {infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts => backend/media/helm}/templates/service.yaml (65%) create mode 100644 backend/media/helm/values.yaml create mode 100644 backend/sources/api/helm/BUILD rename {infrastructure/helm-chart/charts/components/charts/integration/charts/source-api => backend/sources/api/helm}/Chart.yaml (66%) rename {infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center => backend/sources/api/helm}/templates/configmap.yaml (69%) rename {infrastructure/helm-chart/charts/components/charts/integration/charts/source-api => backend/sources/api/helm}/templates/deployment.yaml (87%) rename {infrastructure/helm-chart/charts/components/charts/integration/charts/source-api => backend/sources/api/helm}/templates/service.yaml (65%) create mode 100644 backend/sources/api/helm/values.yaml create mode 100644 backend/sources/chat-plugin/helm/BUILD rename {infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin => backend/sources/chat-plugin/helm}/Chart.yaml (87%) rename {infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin => backend/sources/chat-plugin/helm}/templates/backend/deployment.yaml (86%) create mode 100644 backend/sources/chat-plugin/helm/templates/backend/service.yaml rename {infrastructure/helm-chart/charts/components/charts/api/charts/api-communication => backend/sources/chat-plugin/helm}/templates/configmap.yaml (69%) rename {infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin => backend/sources/chat-plugin/helm}/templates/frontend/deployment.yaml (90%) rename {infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin => backend/sources/chat-plugin/helm}/templates/frontend/ingress.yaml (100%) rename {infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin => backend/sources/chat-plugin/helm}/templates/frontend/service.yaml (77%) rename {infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin => backend/sources/chat-plugin/helm}/values.yaml (90%) create mode 100644 backend/sources/facebook/helm/BUILD rename {infrastructure/helm-chart/charts/components/charts/sources/charts/facebook => backend/sources/facebook/helm}/Chart.yaml (84%) create mode 100644 backend/sources/facebook/helm/templates/configmap.yaml rename {infrastructure/helm-chart/charts/components/charts/sources/charts/facebook => backend/sources/facebook/helm}/templates/deployments.yaml (91%) rename {infrastructure/helm-chart/charts/components/charts/sources/charts/facebook => backend/sources/facebook/helm}/templates/service.yaml (85%) create mode 100644 backend/sources/facebook/helm/values.yaml create mode 100644 backend/sources/google/helm/BUILD rename {infrastructure/helm-chart/charts/components/charts/sources/charts/google => backend/sources/google/helm}/Chart.yaml (83%) create mode 100644 backend/sources/google/helm/templates/configmap.yaml rename {infrastructure/helm-chart/charts/components/charts/sources/charts/google => backend/sources/google/helm}/templates/deployments.yaml (90%) rename {infrastructure/helm-chart/charts/components/charts/sources/charts/google => backend/sources/google/helm}/templates/service.yaml (84%) create mode 100644 backend/sources/google/helm/values.yaml create mode 100644 backend/sources/twilio/helm/BUILD rename {infrastructure/helm-chart/charts/components/charts/sources/charts/twilio => backend/sources/twilio/helm}/Chart.yaml (84%) create mode 100644 backend/sources/twilio/helm/templates/configmap.yaml rename {infrastructure/helm-chart/charts/components/charts/sources/charts/twilio => backend/sources/twilio/helm}/templates/deployments.yaml (91%) rename {infrastructure/helm-chart/charts/components/charts/sources/charts/twilio => backend/sources/twilio/helm}/templates/service.yaml (84%) create mode 100644 backend/sources/twilio/helm/values.yaml create mode 100644 backend/sources/viber/helm/BUILD rename {infrastructure/helm-chart/charts/components/charts/sources/charts/viber => backend/sources/viber/helm}/Chart.yaml (84%) create mode 100644 backend/sources/viber/helm/templates/configmap.yaml rename {infrastructure/helm-chart/charts/components/charts/sources/charts/viber => backend/sources/viber/helm}/templates/deployments.yaml (92%) rename {infrastructure/helm-chart/charts/components/charts/sources/charts/viber => backend/sources/viber/helm}/templates/service.yaml (84%) create mode 100644 backend/sources/viber/helm/values.yaml create mode 100644 backend/sources/whatsapp/helm/BUILD rename {infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp => backend/sources/whatsapp/helm}/Chart.yaml (84%) create mode 100644 backend/sources/whatsapp/helm/templates/configmap.yaml rename {infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp => backend/sources/whatsapp/helm}/templates/deployments.yaml (92%) rename {infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp => backend/sources/whatsapp/helm}/templates/service.yaml (85%) rename {infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp => backend/sources/whatsapp/helm}/values.yaml (53%) create mode 100644 backend/webhook/helm/BUILD rename {infrastructure/helm-chart/charts/components/charts/integration/charts/webhook => backend/webhook/helm}/Chart.yaml (69%) create mode 100644 backend/webhook/helm/templates/configmap.yaml rename {infrastructure/helm-chart/charts/components/charts/integration/charts/webhook => backend/webhook/helm}/templates/deployments.yaml (93%) rename {infrastructure/helm-chart/charts/components/charts/integration/charts/webhook => backend/webhook/helm}/templates/services.yaml (80%) create mode 100644 backend/webhook/helm/values.yaml delete mode 100644 infrastructure/helm-chart/charts/components/Chart.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/api/Chart.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/Chart.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/values.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/values.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/Chart.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/values.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/frontend/Chart.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/Chart.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/values.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/Chart.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/templates/configmap.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/values.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/integration/Chart.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/integration/charts/source-api/values.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/integration/charts/webhook/values.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/media/Chart.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/media/charts/resolver/templates/service.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/media/charts/resolver/values.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/sources/Chart.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/BUILD delete mode 100644 infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/backend/service.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/configmap.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/sources/charts/facebook/values.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/sources/charts/google/values.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/sources/charts/twilio/values.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/sources/charts/viber/values.yaml delete mode 100644 infrastructure/helm-chart/charts/components/charts/sources/values.yaml delete mode 100644 infrastructure/helm-chart/charts/components/templates/api/admin/configmap.yaml delete mode 100644 infrastructure/helm-chart/charts/components/templates/api/admin/service.yaml delete mode 100644 infrastructure/helm-chart/charts/components/values.yaml create mode 100644 infrastructure/helm-chart/templates/components/api-admin/configmap.yaml rename infrastructure/helm-chart/{charts/components/templates/api/admin => templates/components/api-admin}/deployment.yaml (75%) rename infrastructure/helm-chart/{charts/components/charts/api/charts/api-communication/templates => templates/components/api-admin}/service.yaml (66%) create mode 100644 infrastructure/helm-chart/templates/components/api-communication/configmap.yaml rename infrastructure/helm-chart/{charts/components/charts/api/charts/api-contacts/templates => templates/components/api-communication}/deployment.yaml (68%) create mode 100644 infrastructure/helm-chart/templates/components/api-communication/service.yaml create mode 100644 infrastructure/helm-chart/templates/components/api-websocket/configmap.yaml rename infrastructure/helm-chart/{charts/components/charts/api/charts/api-websocket/templates => templates/components/api-websocket}/deployment.yaml (70%) create mode 100644 infrastructure/helm-chart/templates/components/api-websocket/service.yaml create mode 100644 infrastructure/helm-chart/templates/components/frontend-control-center/configmap.yaml rename infrastructure/helm-chart/{charts/components/charts/frontend/charts/frontend-control-center/templates => templates/components/frontend-control-center}/deployment.yaml (64%) rename infrastructure/helm-chart/{charts/components/charts/frontend/charts/frontend-control-center/templates => templates/components/frontend-control-center}/ingress.yaml (87%) rename infrastructure/helm-chart/{charts/components/charts/frontend/charts/frontend-control-center/templates => templates/components/frontend-control-center}/service.yaml (51%) create mode 100644 infrastructure/helm-chart/templates/components/frontend-inbox/configmap.yaml rename infrastructure/helm-chart/{charts/components/charts/frontend/charts/frontend-inbox/templates => templates/components/frontend-inbox}/deployment.yaml (67%) rename infrastructure/helm-chart/{charts/components/charts/frontend/charts/frontend-inbox/templates => templates/components/frontend-inbox}/ingress.yaml (91%) rename infrastructure/helm-chart/{charts/components/charts/frontend/charts/frontend-inbox/templates => templates/components/frontend-inbox}/service.yaml (55%) rename infrastructure/helm-chart/{charts/components/templates => templates/components}/ingress.yaml (100%) diff --git a/WORKSPACE b/WORKSPACE index f07b7efd9f..8a8a6dce0b 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -10,9 +10,9 @@ load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") git_repository( name = "com_github_airyhq_bazel_tools", - commit = "c7a0cc1b77b01c3fa26b77527cc7dd1597975b93", + commit = "6ea38fe01069589ad57e66ae43c6d320fd18e3e5", remote = "https://github.com/airyhq/bazel-tools.git", - shallow_since = "1659948620 +0200", + shallow_since = "1660208058 +0200", ) load("@com_github_airyhq_bazel_tools//:repositories.bzl", "airy_bazel_tools_dependencies", "airy_jvm_deps") diff --git a/backend/api/contacts/helm/BUILD b/backend/api/contacts/helm/BUILD new file mode 100644 index 0000000000..45805d5f1c --- /dev/null +++ b/backend/api/contacts/helm/BUILD @@ -0,0 +1,3 @@ +load("//tools/build:helm.bzl", "helm_ruleset_core_version") + +helm_ruleset_core_version() diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/Chart.yaml b/backend/api/contacts/helm/Chart.yaml similarity index 70% rename from infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/Chart.yaml rename to backend/api/contacts/helm/Chart.yaml index 85e950baa5..8861a3354a 100644 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/Chart.yaml +++ b/backend/api/contacts/helm/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 appVersion: "1.0" description: A Helm chart for the Api Contacts app -name: contacts -version: 0-develop +name: api-contacts +version: 0-alpha diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/templates/configmap.yaml b/backend/api/contacts/helm/templates/configmap.yaml similarity index 69% rename from infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/templates/configmap.yaml rename to backend/api/contacts/helm/templates/configmap.yaml index ae3f3c5c1c..00f096cb09 100644 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/templates/configmap.yaml +++ b/backend/api/contacts/helm/templates/configmap.yaml @@ -1,10 +1,10 @@ apiVersion: v1 kind: ConfigMap metadata: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" labels: core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" annotations: core.airy.co/enabled: "{{ .Values.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/templates/deployment.yaml b/backend/api/contacts/helm/templates/deployment.yaml similarity index 85% rename from infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/templates/deployment.yaml rename to backend/api/contacts/helm/templates/deployment.yaml index 218a447fdf..5e4c6846a8 100644 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/templates/deployment.yaml +++ b/backend/api/contacts/helm/templates/deployment.yaml @@ -1,18 +1,18 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: api-communication + name: {{ .Values.name }} labels: - app: api-communication + app: {{ .Values.name }} type: api core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 1 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: - app: api-communication + app: {{ .Values.name }} strategy: rollingUpdate: maxSurge: 1 @@ -21,7 +21,7 @@ spec: template: metadata: labels: - app: api-communication + app: {{ .Values.name }} WorkerType: "{{ default "NodeGroup" .Values.global.workerType }}" spec: containers: @@ -34,7 +34,7 @@ spec: - configMapRef: name: kafka-config - configMapRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" livenessProbe: httpGet: path: /actuator/health diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/templates/service.yaml b/backend/api/contacts/helm/templates/service.yaml similarity index 65% rename from infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/templates/service.yaml rename to backend/api/contacts/helm/templates/service.yaml index 49bb9cc0b6..0b9c6f42aa 100644 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/templates/service.yaml +++ b/backend/api/contacts/helm/templates/service.yaml @@ -1,9 +1,10 @@ apiVersion: v1 kind: Service metadata: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" labels: core.airy.co/prometheus: spring + core.airy.co/component: "{{ .Values.name }}" spec: ports: - name: web @@ -12,4 +13,4 @@ spec: protocol: TCP type: NodePort selector: - app: "{{ .Values.component }}" + app: "{{ .Values.name }}" diff --git a/backend/api/contacts/helm/values.yaml b/backend/api/contacts/helm/values.yaml new file mode 100644 index 0000000000..7fe5d8f366 --- /dev/null +++ b/backend/api/contacts/helm/values.yaml @@ -0,0 +1,9 @@ +name: api-contacts +mandatory: false +enabled: true +image: api/contacts +resources: {} +global: + containerRegistry: ghcr.io/airyhq + busyboxImage: ghcr.io/airyhq/infrastructure/busybox:latest + workerType: diff --git a/backend/media/helm/BUILD b/backend/media/helm/BUILD new file mode 100644 index 0000000000..45805d5f1c --- /dev/null +++ b/backend/media/helm/BUILD @@ -0,0 +1,3 @@ +load("//tools/build:helm.bzl", "helm_ruleset_core_version") + +helm_ruleset_core_version() diff --git a/infrastructure/helm-chart/charts/components/charts/media/charts/resolver/Chart.yaml b/backend/media/helm/Chart.yaml similarity index 69% rename from infrastructure/helm-chart/charts/components/charts/media/charts/resolver/Chart.yaml rename to backend/media/helm/Chart.yaml index da92da72b8..eadb4e01ad 100644 --- a/infrastructure/helm-chart/charts/components/charts/media/charts/resolver/Chart.yaml +++ b/backend/media/helm/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 appVersion: "1.0" description: A Helm chart for the Media Resolver app -name: resolver -version: 0-develop +name: media-resolver +version: 0-alpha diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/templates/configmap.yaml b/backend/media/helm/templates/configmap.yaml similarity index 69% rename from infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/templates/configmap.yaml rename to backend/media/helm/templates/configmap.yaml index ae3f3c5c1c..00f096cb09 100644 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/templates/configmap.yaml +++ b/backend/media/helm/templates/configmap.yaml @@ -1,10 +1,10 @@ apiVersion: v1 kind: ConfigMap metadata: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" labels: core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" annotations: core.airy.co/enabled: "{{ .Values.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/media/charts/resolver/templates/deployment.yaml b/backend/media/helm/templates/deployment.yaml similarity index 87% rename from infrastructure/helm-chart/charts/components/charts/media/charts/resolver/templates/deployment.yaml rename to backend/media/helm/templates/deployment.yaml index eeb9d41a69..b31af97ffd 100644 --- a/infrastructure/helm-chart/charts/components/charts/media/charts/resolver/templates/deployment.yaml +++ b/backend/media/helm/templates/deployment.yaml @@ -1,18 +1,18 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: media-resolver + name: "{{ .Values.name }}" labels: - app: media-resolver + app: "{{ .Values.name }}" type: media core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 0 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: - app: media-resolver + app: "{{ .Values.name }}" strategy: rollingUpdate: maxSurge: 1 @@ -21,7 +21,7 @@ spec: template: metadata: labels: - app: media-resolver + app: "{{ .Values.name }}" WorkerType: "{{ default "NodeGroup" .Values.global.workerType }}" spec: containers: diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/templates/service.yaml b/backend/media/helm/templates/service.yaml similarity index 65% rename from infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/templates/service.yaml rename to backend/media/helm/templates/service.yaml index 49bb9cc0b6..0b9c6f42aa 100644 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/templates/service.yaml +++ b/backend/media/helm/templates/service.yaml @@ -1,9 +1,10 @@ apiVersion: v1 kind: Service metadata: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" labels: core.airy.co/prometheus: spring + core.airy.co/component: "{{ .Values.name }}" spec: ports: - name: web @@ -12,4 +13,4 @@ spec: protocol: TCP type: NodePort selector: - app: "{{ .Values.component }}" + app: "{{ .Values.name }}" diff --git a/backend/media/helm/values.yaml b/backend/media/helm/values.yaml new file mode 100644 index 0000000000..e1d2aae6ae --- /dev/null +++ b/backend/media/helm/values.yaml @@ -0,0 +1,9 @@ +name: media-resolver +mandatory: false +enabled: false +image: media/resolver +resources: {} +global: + containerRegistry: ghcr.io/airyhq + busyboxImage: ghcr.io/airyhq/infrastructure/busybox:latest + workerType: diff --git a/backend/sources/api/helm/BUILD b/backend/sources/api/helm/BUILD new file mode 100644 index 0000000000..45805d5f1c --- /dev/null +++ b/backend/sources/api/helm/BUILD @@ -0,0 +1,3 @@ +load("//tools/build:helm.bzl", "helm_ruleset_core_version") + +helm_ruleset_core_version() diff --git a/infrastructure/helm-chart/charts/components/charts/integration/charts/source-api/Chart.yaml b/backend/sources/api/helm/Chart.yaml similarity index 66% rename from infrastructure/helm-chart/charts/components/charts/integration/charts/source-api/Chart.yaml rename to backend/sources/api/helm/Chart.yaml index a074f0edb0..f4f7873475 100644 --- a/infrastructure/helm-chart/charts/components/charts/integration/charts/source-api/Chart.yaml +++ b/backend/sources/api/helm/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 appVersion: "1.0" description: A Helm chart for the Sources Chatplugin app -name: source-api -version: 0-develop +name: integration-source-api +version: 0-alpha diff --git a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/templates/configmap.yaml b/backend/sources/api/helm/templates/configmap.yaml similarity index 69% rename from infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/templates/configmap.yaml rename to backend/sources/api/helm/templates/configmap.yaml index ae3f3c5c1c..00f096cb09 100644 --- a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/templates/configmap.yaml +++ b/backend/sources/api/helm/templates/configmap.yaml @@ -1,10 +1,10 @@ apiVersion: v1 kind: ConfigMap metadata: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" labels: core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" annotations: core.airy.co/enabled: "{{ .Values.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/integration/charts/source-api/templates/deployment.yaml b/backend/sources/api/helm/templates/deployment.yaml similarity index 87% rename from infrastructure/helm-chart/charts/components/charts/integration/charts/source-api/templates/deployment.yaml rename to backend/sources/api/helm/templates/deployment.yaml index 7fd641a165..ca80284be6 100644 --- a/infrastructure/helm-chart/charts/components/charts/integration/charts/source-api/templates/deployment.yaml +++ b/backend/sources/api/helm/templates/deployment.yaml @@ -1,18 +1,18 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: source-api + name: .Values.name labels: - app: source-api + app: .Values.name type: sources core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 0 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: - app: source-api + app: .Values.name strategy: rollingUpdate: maxSurge: 1 @@ -21,7 +21,7 @@ spec: template: metadata: labels: - app: source-api + app: .Values.name spec: containers: - name: app @@ -33,7 +33,7 @@ spec: - configMapRef: name: kafka-config - configMapRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" env: - name: jwtSecret valueFrom: diff --git a/infrastructure/helm-chart/charts/components/charts/integration/charts/source-api/templates/service.yaml b/backend/sources/api/helm/templates/service.yaml similarity index 65% rename from infrastructure/helm-chart/charts/components/charts/integration/charts/source-api/templates/service.yaml rename to backend/sources/api/helm/templates/service.yaml index 6d3cc63aaf..0b9c6f42aa 100644 --- a/infrastructure/helm-chart/charts/components/charts/integration/charts/source-api/templates/service.yaml +++ b/backend/sources/api/helm/templates/service.yaml @@ -1,9 +1,10 @@ apiVersion: v1 kind: Service metadata: - name: source-api + name: "{{ .Values.name }}" labels: core.airy.co/prometheus: spring + core.airy.co/component: "{{ .Values.name }}" spec: ports: - name: web @@ -12,4 +13,4 @@ spec: protocol: TCP type: NodePort selector: - app: source-api + app: "{{ .Values.name }}" diff --git a/backend/sources/api/helm/values.yaml b/backend/sources/api/helm/values.yaml new file mode 100644 index 0000000000..98943fcedb --- /dev/null +++ b/backend/sources/api/helm/values.yaml @@ -0,0 +1,9 @@ +name: integration-source-api +mandatory: false +enabled: false +image: sources/api +resources: {} +global: + containerRegistry: ghcr.io/airyhq + busyboxImage: ghcr.io/airyhq/infrastructure/busybox:latest + workerType: diff --git a/backend/sources/chat-plugin/helm/BUILD b/backend/sources/chat-plugin/helm/BUILD new file mode 100644 index 0000000000..45805d5f1c --- /dev/null +++ b/backend/sources/chat-plugin/helm/BUILD @@ -0,0 +1,3 @@ +load("//tools/build:helm.bzl", "helm_ruleset_core_version") + +helm_ruleset_core_version() diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/Chart.yaml b/backend/sources/chat-plugin/helm/Chart.yaml similarity index 87% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/Chart.yaml rename to backend/sources/chat-plugin/helm/Chart.yaml index 53bdafe1e9..93c88473d7 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/Chart.yaml +++ b/backend/sources/chat-plugin/helm/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v2 appVersion: "1.0" description: A Helm chart for the Sources Chatplugin app name: sources-chatplugin -version: 0 \ No newline at end of file +version: 0-alpha \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/backend/deployment.yaml b/backend/sources/chat-plugin/helm/templates/backend/deployment.yaml similarity index 86% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/backend/deployment.yaml rename to backend/sources/chat-plugin/helm/templates/backend/deployment.yaml index 98b7c33e86..1f8995b817 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/backend/deployment.yaml +++ b/backend/sources/chat-plugin/helm/templates/backend/deployment.yaml @@ -1,18 +1,18 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: sources-chatplugin + name: "{{ .Values.name }}" labels: - app: sources-chatplugin + app: "{{ .Values.name }}" type: sources core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 1 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: - app: sources-chatplugin + app: "{{ .Values.name }}" strategy: rollingUpdate: maxSurge: 1 @@ -21,7 +21,7 @@ spec: template: metadata: labels: - app: sources-chatplugin + app: "{{ .Values.name }}" WorkerType: "{{ default "NodeGroup" .Values.global.workerType }}" spec: containers: @@ -34,7 +34,7 @@ spec: - configMapRef: name: kafka-config - configMapRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" env: - name: jwtSecret valueFrom: diff --git a/backend/sources/chat-plugin/helm/templates/backend/service.yaml b/backend/sources/chat-plugin/helm/templates/backend/service.yaml new file mode 100644 index 0000000000..0b9c6f42aa --- /dev/null +++ b/backend/sources/chat-plugin/helm/templates/backend/service.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: "{{ .Values.name }}" + labels: + core.airy.co/prometheus: spring + core.airy.co/component: "{{ .Values.name }}" +spec: + ports: + - name: web + port: 80 + targetPort: 8080 + protocol: TCP + type: NodePort + selector: + app: "{{ .Values.name }}" diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/templates/configmap.yaml b/backend/sources/chat-plugin/helm/templates/configmap.yaml similarity index 69% rename from infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/templates/configmap.yaml rename to backend/sources/chat-plugin/helm/templates/configmap.yaml index ae3f3c5c1c..00f096cb09 100644 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/templates/configmap.yaml +++ b/backend/sources/chat-plugin/helm/templates/configmap.yaml @@ -1,10 +1,10 @@ apiVersion: v1 kind: ConfigMap metadata: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" labels: core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" annotations: core.airy.co/enabled: "{{ .Values.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/frontend/deployment.yaml b/backend/sources/chat-plugin/helm/templates/frontend/deployment.yaml similarity index 90% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/frontend/deployment.yaml rename to backend/sources/chat-plugin/helm/templates/frontend/deployment.yaml index e028722e78..d12abd0a01 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/frontend/deployment.yaml +++ b/backend/sources/chat-plugin/helm/templates/frontend/deployment.yaml @@ -7,9 +7,9 @@ metadata: type: frontend core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 1 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: app: frontend-chat-plugin @@ -38,7 +38,7 @@ spec: {{- end }} envFrom: - configMapRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" livenessProbe: httpGet: path: /health @@ -58,7 +58,7 @@ spec: command: ["/bin/sh", "/opt/provisioning/wait-for-service.sh"] env: - name: SERVICE_NAME - value: "{{ .Values.component }}" + value: "{{ .Values.name }}" - name: SERVICE_PORT value: "80" volumeMounts: diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/frontend/ingress.yaml b/backend/sources/chat-plugin/helm/templates/frontend/ingress.yaml similarity index 100% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/frontend/ingress.yaml rename to backend/sources/chat-plugin/helm/templates/frontend/ingress.yaml diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/frontend/service.yaml b/backend/sources/chat-plugin/helm/templates/frontend/service.yaml similarity index 77% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/frontend/service.yaml rename to backend/sources/chat-plugin/helm/templates/frontend/service.yaml index d72910243e..29c5ee6823 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/frontend/service.yaml +++ b/backend/sources/chat-plugin/helm/templates/frontend/service.yaml @@ -2,6 +2,8 @@ apiVersion: v1 kind: Service metadata: name: frontend-chat-plugin + labels: + core.airy.co/component: "{{ .Values.name }}" spec: ports: - port: 80 diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/values.yaml b/backend/sources/chat-plugin/helm/values.yaml similarity index 90% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/values.yaml rename to backend/sources/chat-plugin/helm/values.yaml index 2c54de9f19..56268bc982 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/values.yaml +++ b/backend/sources/chat-plugin/helm/values.yaml @@ -1,4 +1,4 @@ -component: sources-chatplugin +name: sources-chatplugin mandatory: false enabled: true backend: diff --git a/backend/sources/facebook/helm/BUILD b/backend/sources/facebook/helm/BUILD new file mode 100644 index 0000000000..45805d5f1c --- /dev/null +++ b/backend/sources/facebook/helm/BUILD @@ -0,0 +1,3 @@ +load("//tools/build:helm.bzl", "helm_ruleset_core_version") + +helm_ruleset_core_version() diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/facebook/Chart.yaml b/backend/sources/facebook/helm/Chart.yaml similarity index 84% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/facebook/Chart.yaml rename to backend/sources/facebook/helm/Chart.yaml index 26192ccbd5..d5399b2f10 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/facebook/Chart.yaml +++ b/backend/sources/facebook/helm/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v2 appVersion: "1.0" description: A Helm chart for Facebook source name: sources-facebook -version: 0-develop +version: 0-alpha diff --git a/backend/sources/facebook/helm/templates/configmap.yaml b/backend/sources/facebook/helm/templates/configmap.yaml new file mode 100644 index 0000000000..00f096cb09 --- /dev/null +++ b/backend/sources/facebook/helm/templates/configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Values.name }}" + labels: + core.airy.co/managed: "true" + core.airy.co/mandatory: "{{ .Values.mandatory }}" + core.airy.co/component: "{{ .Values.name }}" + annotations: + core.airy.co/enabled: "{{ .Values.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/facebook/templates/deployments.yaml b/backend/sources/facebook/helm/templates/deployments.yaml similarity index 91% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/facebook/templates/deployments.yaml rename to backend/sources/facebook/helm/templates/deployments.yaml index 8faab35f10..4d72ef5174 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/facebook/templates/deployments.yaml +++ b/backend/sources/facebook/helm/templates/deployments.yaml @@ -7,9 +7,9 @@ metadata: type: sources core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 0 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: app: sources-facebook-connector @@ -39,17 +39,17 @@ spec: - name: FACEBOOK_WEBHOOK_SECRET valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: webhookSecret - name: FACEBOOK_APP_ID valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: appId - name: FACEBOOK_APP_SECRET valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: appSecret livenessProbe: httpGet: @@ -86,9 +86,9 @@ metadata: type: sources core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 0 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: app: sources-facebook-events-router @@ -114,7 +114,7 @@ spec: - name: FACEBOOK_APP_ID valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: appId - name: SERVICE_NAME value: facebook-events-router diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/facebook/templates/service.yaml b/backend/sources/facebook/helm/templates/service.yaml similarity index 85% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/facebook/templates/service.yaml rename to backend/sources/facebook/helm/templates/service.yaml index ce10000c57..325ef25c96 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/facebook/templates/service.yaml +++ b/backend/sources/facebook/helm/templates/service.yaml @@ -4,6 +4,7 @@ metadata: name: sources-facebook-connector labels: core.airy.co/prometheus: spring + core.airy.co/component: "{{ .Values.name }}" spec: ports: - name: web @@ -20,6 +21,7 @@ metadata: name: sources-facebook-events-router labels: core.airy.co/prometheus: spring + core.airy.co/component: "{{ .Values.name }}" spec: ports: - name: web diff --git a/backend/sources/facebook/helm/values.yaml b/backend/sources/facebook/helm/values.yaml new file mode 100644 index 0000000000..30fa1ac67d --- /dev/null +++ b/backend/sources/facebook/helm/values.yaml @@ -0,0 +1,13 @@ +name: sources-facebook +mandatory: false +enabled: false +connector: + image: sources/facebook-connector + resources: {} +eventsRouter: + image: sources/facebook-events-router + resources: {} +global: + containerRegistry: ghcr.io/airyhq + busyboxImage: ghcr.io/airyhq/infrastructure/busybox:latest + workerType: diff --git a/backend/sources/google/helm/BUILD b/backend/sources/google/helm/BUILD new file mode 100644 index 0000000000..45805d5f1c --- /dev/null +++ b/backend/sources/google/helm/BUILD @@ -0,0 +1,3 @@ +load("//tools/build:helm.bzl", "helm_ruleset_core_version") + +helm_ruleset_core_version() diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/google/Chart.yaml b/backend/sources/google/helm/Chart.yaml similarity index 83% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/google/Chart.yaml rename to backend/sources/google/helm/Chart.yaml index dd72efd7f6..59b5116ff6 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/google/Chart.yaml +++ b/backend/sources/google/helm/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v2 appVersion: "1.0" description: A Helm chart for Google source name: sources-google -version: 0-develop +version: 0-alpha diff --git a/backend/sources/google/helm/templates/configmap.yaml b/backend/sources/google/helm/templates/configmap.yaml new file mode 100644 index 0000000000..00f096cb09 --- /dev/null +++ b/backend/sources/google/helm/templates/configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Values.name }}" + labels: + core.airy.co/managed: "true" + core.airy.co/mandatory: "{{ .Values.mandatory }}" + core.airy.co/component: "{{ .Values.name }}" + annotations: + core.airy.co/enabled: "{{ .Values.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/google/templates/deployments.yaml b/backend/sources/google/helm/templates/deployments.yaml similarity index 90% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/google/templates/deployments.yaml rename to backend/sources/google/helm/templates/deployments.yaml index 4de9622bb8..7af611787e 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/google/templates/deployments.yaml +++ b/backend/sources/google/helm/templates/deployments.yaml @@ -7,9 +7,9 @@ metadata: type: sources core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 0 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: app: sources-google-connector @@ -39,12 +39,12 @@ spec: - name: GOOGLE_SA_FILE valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: saFile - name: GOOGLE_PARTNER_KEY valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: partnerKey livenessProbe: httpGet: @@ -81,9 +81,9 @@ metadata: type: sources core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 0 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: app: sources-google-events-router @@ -109,12 +109,12 @@ spec: - name: GOOGLE_SA_FILE valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: saFile - name: GOOGLE_PARTNER_KEY valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: partnerKey livenessProbe: tcpSocket: diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/google/templates/service.yaml b/backend/sources/google/helm/templates/service.yaml similarity index 84% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/google/templates/service.yaml rename to backend/sources/google/helm/templates/service.yaml index 089965c57e..9b31564451 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/google/templates/service.yaml +++ b/backend/sources/google/helm/templates/service.yaml @@ -4,6 +4,7 @@ metadata: name: sources-google-connector labels: core.airy.co/prometheus: spring + core.airy.co/component: "{{ .Values.name }}" spec: ports: - name: web @@ -20,6 +21,7 @@ metadata: name: sources-google-events-router labels: core.airy.co/prometheus: spring + core.airy.co/component: "{{ .Values.name }}" spec: ports: - name: web diff --git a/backend/sources/google/helm/values.yaml b/backend/sources/google/helm/values.yaml new file mode 100644 index 0000000000..e5af2fc979 --- /dev/null +++ b/backend/sources/google/helm/values.yaml @@ -0,0 +1,13 @@ +name: sources-google +mandatory: false +enabled: false +connector: + image: sources/google-connector + resources: {} +eventsRouter: + image: sources/google-events-router + resources: {} +global: + containerRegistry: ghcr.io/airyhq + busyboxImage: ghcr.io/airyhq/infrastructure/busybox:latest + workerType: diff --git a/backend/sources/twilio/helm/BUILD b/backend/sources/twilio/helm/BUILD new file mode 100644 index 0000000000..45805d5f1c --- /dev/null +++ b/backend/sources/twilio/helm/BUILD @@ -0,0 +1,3 @@ +load("//tools/build:helm.bzl", "helm_ruleset_core_version") + +helm_ruleset_core_version() diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/twilio/Chart.yaml b/backend/sources/twilio/helm/Chart.yaml similarity index 84% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/twilio/Chart.yaml rename to backend/sources/twilio/helm/Chart.yaml index 15eaa79882..bab24c8195 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/twilio/Chart.yaml +++ b/backend/sources/twilio/helm/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v2 appVersion: "1.0" description: A Helm chart for the Twilio source name: sources-twilio -version: 0-develop +version: 0-alpha diff --git a/backend/sources/twilio/helm/templates/configmap.yaml b/backend/sources/twilio/helm/templates/configmap.yaml new file mode 100644 index 0000000000..00f096cb09 --- /dev/null +++ b/backend/sources/twilio/helm/templates/configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Values.name }}" + labels: + core.airy.co/managed: "true" + core.airy.co/mandatory: "{{ .Values.mandatory }}" + core.airy.co/component: "{{ .Values.name }}" + annotations: + core.airy.co/enabled: "{{ .Values.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/twilio/templates/deployments.yaml b/backend/sources/twilio/helm/templates/deployments.yaml similarity index 91% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/twilio/templates/deployments.yaml rename to backend/sources/twilio/helm/templates/deployments.yaml index e17426d4a6..0e3a6a5706 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/twilio/templates/deployments.yaml +++ b/backend/sources/twilio/helm/templates/deployments.yaml @@ -7,9 +7,9 @@ metadata: type: sources core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 0 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: app: sources-twilio-connector @@ -39,12 +39,12 @@ spec: - name: TWILIO_AUTH_TOKEN valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: authToken - name: TWILIO_ACCOUNT_SID valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: accountSid livenessProbe: httpGet: @@ -81,11 +81,11 @@ metadata: type: sources core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" annotations: core.airy.co/config-items-mandatory: "TWILIO_AUTH_TOKEN TWILIO_ACCOUNT_SID" spec: - replicas: 0 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: app: sources-twilio-events-router @@ -111,12 +111,12 @@ spec: - name: TWILIO_AUTH_TOKEN valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: authToken - name: TWILIO_ACCOUNT_SID valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: accountSid livenessProbe: tcpSocket: diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/twilio/templates/service.yaml b/backend/sources/twilio/helm/templates/service.yaml similarity index 84% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/twilio/templates/service.yaml rename to backend/sources/twilio/helm/templates/service.yaml index 03a28d3dd0..ec56196e81 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/twilio/templates/service.yaml +++ b/backend/sources/twilio/helm/templates/service.yaml @@ -4,6 +4,7 @@ metadata: name: sources-twilio-connector labels: core.airy.co/prometheus: spring + core.airy.co/component: "{{ .Values.name }}" spec: ports: - name: web @@ -20,6 +21,7 @@ metadata: name: sources-twilio-events-router labels: core.airy.co/prometheus: spring + core.airy.co/component: "{{ .Values.name }}" spec: ports: - name: web diff --git a/backend/sources/twilio/helm/values.yaml b/backend/sources/twilio/helm/values.yaml new file mode 100644 index 0000000000..d543174853 --- /dev/null +++ b/backend/sources/twilio/helm/values.yaml @@ -0,0 +1,13 @@ +name: sources-twilio +mandatory: false +enabled: false +connector: + image: sources/twilio-connector + resources: {} +eventsRouter: + image: sources/twilio-events-router + resources: {} +global: + containerRegistry: ghcr.io/airyhq + busyboxImage: ghcr.io/airyhq/infrastructure/busybox:latest + workerType: diff --git a/backend/sources/viber/helm/BUILD b/backend/sources/viber/helm/BUILD new file mode 100644 index 0000000000..45805d5f1c --- /dev/null +++ b/backend/sources/viber/helm/BUILD @@ -0,0 +1,3 @@ +load("//tools/build:helm.bzl", "helm_ruleset_core_version") + +helm_ruleset_core_version() diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/viber/Chart.yaml b/backend/sources/viber/helm/Chart.yaml similarity index 84% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/viber/Chart.yaml rename to backend/sources/viber/helm/Chart.yaml index d59e8fe15c..b771c6cf49 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/viber/Chart.yaml +++ b/backend/sources/viber/helm/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v2 appVersion: "1.0" description: A Helm chart for the Viber source name: sources-viber -version: 0-develop +version: 0-alpha diff --git a/backend/sources/viber/helm/templates/configmap.yaml b/backend/sources/viber/helm/templates/configmap.yaml new file mode 100644 index 0000000000..00f096cb09 --- /dev/null +++ b/backend/sources/viber/helm/templates/configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Values.name }}" + labels: + core.airy.co/managed: "true" + core.airy.co/mandatory: "{{ .Values.mandatory }}" + core.airy.co/component: "{{ .Values.name }}" + annotations: + core.airy.co/enabled: "{{ .Values.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/viber/templates/deployments.yaml b/backend/sources/viber/helm/templates/deployments.yaml similarity index 92% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/viber/templates/deployments.yaml rename to backend/sources/viber/helm/templates/deployments.yaml index 6bdd2fe36a..ebb0d5254b 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/viber/templates/deployments.yaml +++ b/backend/sources/viber/helm/templates/deployments.yaml @@ -7,9 +7,9 @@ metadata: type: sources core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 0 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: app: sources-viber-connector @@ -39,7 +39,7 @@ spec: - name: authToken valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: authToken livenessProbe: httpGet: diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/viber/templates/service.yaml b/backend/sources/viber/helm/templates/service.yaml similarity index 84% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/viber/templates/service.yaml rename to backend/sources/viber/helm/templates/service.yaml index 0d2ab4990b..fd95ecabb5 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/viber/templates/service.yaml +++ b/backend/sources/viber/helm/templates/service.yaml @@ -4,6 +4,7 @@ metadata: name: sources-viber-connector labels: core.airy.co/prometheus: spring + core.airy.co/component: "{{ .Values.name }}" spec: ports: - name: web diff --git a/backend/sources/viber/helm/values.yaml b/backend/sources/viber/helm/values.yaml new file mode 100644 index 0000000000..e729af5ba6 --- /dev/null +++ b/backend/sources/viber/helm/values.yaml @@ -0,0 +1,10 @@ +name: sources-viber +mandatory: false +enabled: false +connector: + image: sources/viber-connector + resources: {} +global: + containerRegistry: ghcr.io/airyhq + busyboxImage: ghcr.io/airyhq/infrastructure/busybox:latest + workerType: diff --git a/backend/sources/whatsapp/helm/BUILD b/backend/sources/whatsapp/helm/BUILD new file mode 100644 index 0000000000..45805d5f1c --- /dev/null +++ b/backend/sources/whatsapp/helm/BUILD @@ -0,0 +1,3 @@ +load("//tools/build:helm.bzl", "helm_ruleset_core_version") + +helm_ruleset_core_version() diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/Chart.yaml b/backend/sources/whatsapp/helm/Chart.yaml similarity index 84% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/Chart.yaml rename to backend/sources/whatsapp/helm/Chart.yaml index c63976595f..2ef2b21f42 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/Chart.yaml +++ b/backend/sources/whatsapp/helm/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v2 appVersion: "1.0" description: A Helm chart for Whatsapp source name: sources-whatsapp -version: 0-develop +version: 0-alpha diff --git a/backend/sources/whatsapp/helm/templates/configmap.yaml b/backend/sources/whatsapp/helm/templates/configmap.yaml new file mode 100644 index 0000000000..00f096cb09 --- /dev/null +++ b/backend/sources/whatsapp/helm/templates/configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Values.name }}" + labels: + core.airy.co/managed: "true" + core.airy.co/mandatory: "{{ .Values.mandatory }}" + core.airy.co/component: "{{ .Values.name }}" + annotations: + core.airy.co/enabled: "{{ .Values.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/templates/deployments.yaml b/backend/sources/whatsapp/helm/templates/deployments.yaml similarity index 92% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/templates/deployments.yaml rename to backend/sources/whatsapp/helm/templates/deployments.yaml index 157c843acb..d49b8054d3 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/templates/deployments.yaml +++ b/backend/sources/whatsapp/helm/templates/deployments.yaml @@ -7,9 +7,9 @@ metadata: type: sources core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 0 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: app: sources-whatsapp-connector @@ -36,7 +36,7 @@ spec: - configMapRef: name: core-config - configMapRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" livenessProbe: httpGet: path: /actuator/health @@ -72,9 +72,9 @@ metadata: type: sources core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 0 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: app: sources-whatsapp-events-router @@ -100,7 +100,7 @@ spec: - name: WHATSAPP_APP_ID valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: appId - name: SERVICE_NAME value: whatsapp-events-router diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/templates/service.yaml b/backend/sources/whatsapp/helm/templates/service.yaml similarity index 85% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/templates/service.yaml rename to backend/sources/whatsapp/helm/templates/service.yaml index 0385d9839a..728aa7a769 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/templates/service.yaml +++ b/backend/sources/whatsapp/helm/templates/service.yaml @@ -4,6 +4,7 @@ metadata: name: sources-whatsapp-connector labels: core.airy.co/prometheus: spring + core.airy.co/component: "{{ .Values.name }}" spec: ports: - name: web @@ -20,6 +21,7 @@ metadata: name: sources-whatsapp-events-router labels: core.airy.co/prometheus: spring + core.airy.co/component: "{{ .Values.name }}" spec: ports: - name: web diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/values.yaml b/backend/sources/whatsapp/helm/values.yaml similarity index 53% rename from infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/values.yaml rename to backend/sources/whatsapp/helm/values.yaml index 50cfb53e31..1c6b478e75 100644 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/whatsapp/values.yaml +++ b/backend/sources/whatsapp/helm/values.yaml @@ -1,4 +1,4 @@ -component: sources-whatsapp +name: sources-whatsapp mandatory: false enabled: true connector: @@ -7,3 +7,7 @@ connector: eventsRouter: image: sources/whatsapp-events-router resources: {} +global: + containerRegistry: ghcr.io/airyhq + busyboxImage: ghcr.io/airyhq/infrastructure/busybox:latest + workerType: diff --git a/backend/webhook/helm/BUILD b/backend/webhook/helm/BUILD new file mode 100644 index 0000000000..45805d5f1c --- /dev/null +++ b/backend/webhook/helm/BUILD @@ -0,0 +1,3 @@ +load("//tools/build:helm.bzl", "helm_ruleset_core_version") + +helm_ruleset_core_version() diff --git a/infrastructure/helm-chart/charts/components/charts/integration/charts/webhook/Chart.yaml b/backend/webhook/helm/Chart.yaml similarity index 69% rename from infrastructure/helm-chart/charts/components/charts/integration/charts/webhook/Chart.yaml rename to backend/webhook/helm/Chart.yaml index ccaa4034af..d9e1220af9 100644 --- a/infrastructure/helm-chart/charts/components/charts/integration/charts/webhook/Chart.yaml +++ b/backend/webhook/helm/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 appVersion: "1.0" description: A Helm chart for the Webhook integration component -name: webhook -version: 0-develop +name: integration-webhook +version: 0-alpha diff --git a/backend/webhook/helm/templates/configmap.yaml b/backend/webhook/helm/templates/configmap.yaml new file mode 100644 index 0000000000..00f096cb09 --- /dev/null +++ b/backend/webhook/helm/templates/configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Values.name }}" + labels: + core.airy.co/managed: "true" + core.airy.co/mandatory: "{{ .Values.mandatory }}" + core.airy.co/component: "{{ .Values.name }}" + annotations: + core.airy.co/enabled: "{{ .Values.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/integration/charts/webhook/templates/deployments.yaml b/backend/webhook/helm/templates/deployments.yaml similarity index 93% rename from infrastructure/helm-chart/charts/components/charts/integration/charts/webhook/templates/deployments.yaml rename to backend/webhook/helm/templates/deployments.yaml index eb614a113a..814a41c9ae 100644 --- a/infrastructure/helm-chart/charts/components/charts/integration/charts/webhook/templates/deployments.yaml +++ b/backend/webhook/helm/templates/deployments.yaml @@ -7,9 +7,9 @@ metadata: type: webhook core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 0 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: app: webhook-consumer @@ -45,7 +45,7 @@ spec: - name: WEBHOOK_NAME valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: name livenessProbe: httpGet: @@ -90,9 +90,9 @@ metadata: type: webhook core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/component: "{{ .Values.name }}" spec: - replicas: 0 + replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: app: webhook-publisher @@ -130,7 +130,7 @@ spec: - name: WEBHOOK_NAME valueFrom: configMapKeyRef: - name: "{{ .Values.component }}" + name: "{{ .Values.name }}" key: name livenessProbe: httpGet: diff --git a/infrastructure/helm-chart/charts/components/charts/integration/charts/webhook/templates/services.yaml b/backend/webhook/helm/templates/services.yaml similarity index 80% rename from infrastructure/helm-chart/charts/components/charts/integration/charts/webhook/templates/services.yaml rename to backend/webhook/helm/templates/services.yaml index 03e4b0db35..9f9b3d6396 100644 --- a/infrastructure/helm-chart/charts/components/charts/integration/charts/webhook/templates/services.yaml +++ b/backend/webhook/helm/templates/services.yaml @@ -2,6 +2,8 @@ apiVersion: v1 kind: Service metadata: name: webhook-consumer + labels: + core.airy.co/component: "{{ .Values.name }}" spec: ports: - port: 80 @@ -17,6 +19,7 @@ metadata: name: webhook-publisher labels: core.airy.co/prometheus: spring + core.airy.co/component: "{{ .Values.name }}" spec: ports: - name: web diff --git a/backend/webhook/helm/values.yaml b/backend/webhook/helm/values.yaml new file mode 100644 index 0000000000..42bf1404ea --- /dev/null +++ b/backend/webhook/helm/values.yaml @@ -0,0 +1,13 @@ +name: integration-webhook +mandatory: false +enabled: true +consumer: + image: webhook/consumer + resources: {} +publisher: + image: webhook/publisher + resources: {} +global: + containerRegistry: ghcr.io/airyhq + busyboxImage: ghcr.io/airyhq/infrastructure/busybox:latest + workerType: diff --git a/infrastructure/helm-chart/Chart.yaml b/infrastructure/helm-chart/Chart.yaml index 8b55e937a0..74efb1a3ab 100644 --- a/infrastructure/helm-chart/Chart.yaml +++ b/infrastructure/helm-chart/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 appVersion: "1.0" description: A Helm chart for Airy Core name: airy -version: 0-develop +version: 0-alpha dependencies: - name: prerequisites condition: prerequisites.enabled @@ -10,5 +10,3 @@ dependencies: condition: ingress-controller.enabled - name: tools condition: tools.enabled - - name: components - condition: components.enabled diff --git a/infrastructure/helm-chart/charts/components/Chart.yaml b/infrastructure/helm-chart/charts/components/Chart.yaml deleted file mode 100644 index ab17e64c11..0000000000 --- a/infrastructure/helm-chart/charts/components/Chart.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v2 -appVersion: "1.0" -description: A Helm chart for the Airy Core application -name: components -version: 0-develop -dependencies: - - name: api - condition: api.enabled - - name: frontend - condition: frontend.enabled - - name: integration - condition: integration.enabled - - name: media - condition: media.enabled - - name: sources - condition: sources.enabled diff --git a/infrastructure/helm-chart/charts/components/charts/api/Chart.yaml b/infrastructure/helm-chart/charts/components/charts/api/Chart.yaml deleted file mode 100644 index 7be2735383..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/api/Chart.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: v2 -appVersion: "1.0" -description: A Helm chart for the API apps in Airy Core -name: api -version: 0-develop diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/Chart.yaml b/infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/Chart.yaml deleted file mode 100644 index c73462a63c..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/Chart.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: v2 -appVersion: "1.0" -description: A Helm chart for the Api Communication app -name: communication -version: 0-develop \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/values.yaml b/infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/values.yaml deleted file mode 100644 index dbbdf99aaf..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/values.yaml +++ /dev/null @@ -1,5 +0,0 @@ -component: api-communication -mandatory: false -enabled: true -image: api/communication -resources: {} diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/values.yaml b/infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/values.yaml deleted file mode 100644 index fda935ee98..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/values.yaml +++ /dev/null @@ -1,5 +0,0 @@ -component: api-contacts -mandatory: false -enabled: true -image: api/contacts -resources: {} diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/Chart.yaml b/infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/Chart.yaml deleted file mode 100644 index 3975c7cc88..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/Chart.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: v2 -appVersion: "1.0" -description: A Helm chart for the Api Websocket app -name: websocket -version: 0-develop diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/values.yaml b/infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/values.yaml deleted file mode 100644 index b2210d733a..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/values.yaml +++ /dev/null @@ -1,5 +0,0 @@ -component: api-websocket -mandatory: false -enabled: true -image: api/websocket -resources: {} diff --git a/infrastructure/helm-chart/charts/components/charts/frontend/Chart.yaml b/infrastructure/helm-chart/charts/components/charts/frontend/Chart.yaml deleted file mode 100644 index 8b7a46807d..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/frontend/Chart.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: v2 -appVersion: "1.0" -description: A Helm chart for the frontend apps in Airy Core -name: frontend -version: 0-develop diff --git a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/Chart.yaml b/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/Chart.yaml deleted file mode 100644 index cabf51a023..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/Chart.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: v2 -appVersion: "1.0" -description: A Helm chart for the Airy Core Control Center -name: control-center -version: 0-develop diff --git a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/values.yaml b/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/values.yaml deleted file mode 100644 index 0db8f06f29..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/values.yaml +++ /dev/null @@ -1,5 +0,0 @@ -component: frontend-control-center -mandatory: false -enabled: true -image: frontend/control-center -resources: {} diff --git a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/Chart.yaml b/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/Chart.yaml deleted file mode 100644 index 66e9475cff..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/Chart.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: v2 -appVersion: "1.0" -description: A Helm chart for the Airy Core Inbox -name: inbox -version: 0-develop diff --git a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/templates/configmap.yaml b/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/templates/configmap.yaml deleted file mode 100644 index ae3f3c5c1c..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/templates/configmap.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: "{{ .Values.component }}" - labels: - core.airy.co/managed: "true" - core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" - annotations: - core.airy.co/enabled: "{{ .Values.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/values.yaml b/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/values.yaml deleted file mode 100644 index 6a28266aa1..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/values.yaml +++ /dev/null @@ -1,5 +0,0 @@ -component: frontend-inbox -mandatory: false -enabled: true -image: frontend/inbox -resources: {} diff --git a/infrastructure/helm-chart/charts/components/charts/integration/Chart.yaml b/infrastructure/helm-chart/charts/components/charts/integration/Chart.yaml deleted file mode 100644 index 21a1e67558..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/integration/Chart.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: v2 -appVersion: "1.0" -description: A Helm chart for the Airy Core integration components -name: integration -version: 0-develop diff --git a/infrastructure/helm-chart/charts/components/charts/integration/charts/source-api/values.yaml b/infrastructure/helm-chart/charts/components/charts/integration/charts/source-api/values.yaml deleted file mode 100644 index e73fd2f262..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/integration/charts/source-api/values.yaml +++ /dev/null @@ -1,4 +0,0 @@ -component: integration-source-api -mandatory: false -image: sources/api -resources: {} diff --git a/infrastructure/helm-chart/charts/components/charts/integration/charts/webhook/values.yaml b/infrastructure/helm-chart/charts/components/charts/integration/charts/webhook/values.yaml deleted file mode 100644 index ce8d1a4226..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/integration/charts/webhook/values.yaml +++ /dev/null @@ -1,9 +0,0 @@ -component: integration-webhook -mandatory: false -enabled: true -consumer: - image: webhook/consumer - resources: {} -publisher: - image: webhook/publisher - resources: {} diff --git a/infrastructure/helm-chart/charts/components/charts/media/Chart.yaml b/infrastructure/helm-chart/charts/components/charts/media/Chart.yaml deleted file mode 100644 index 34bdfec703..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/media/Chart.yaml +++ /dev/null @@ -1,5 +0,0 @@ -apiVersion: v2 -appVersion: "1.0" -description: A Helm chart for the Airy Core media components -name: media -version: 0-develop diff --git a/infrastructure/helm-chart/charts/components/charts/media/charts/resolver/templates/service.yaml b/infrastructure/helm-chart/charts/components/charts/media/charts/resolver/templates/service.yaml deleted file mode 100644 index 083a22b8d2..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/media/charts/resolver/templates/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: media-resolver - labels: - core.airy.co/prometheus: spring -spec: - ports: - - name: web - port: 80 - targetPort: 8080 - protocol: TCP - type: NodePort - selector: - app: media-resolver diff --git a/infrastructure/helm-chart/charts/components/charts/media/charts/resolver/values.yaml b/infrastructure/helm-chart/charts/components/charts/media/charts/resolver/values.yaml deleted file mode 100644 index 34cdd62cdf..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/media/charts/resolver/values.yaml +++ /dev/null @@ -1,5 +0,0 @@ -component: media-resolver -mandatory: false -enabled: true -image: media/resolver -resources: {} diff --git a/infrastructure/helm-chart/charts/components/charts/sources/Chart.yaml b/infrastructure/helm-chart/charts/components/charts/sources/Chart.yaml deleted file mode 100644 index f58bbc20ba..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/sources/Chart.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v2 -appVersion: "1.0" -description: A Helm chart for the Airy Core official sources -name: sources -version: 1.0 -dependencies: - - name: sources-chatplugin - condition: sources-chatplugin.installed - - name: sources-facebook - condition: sources-facebook.enabled - - name: sources-google - condition: sources-google.enabled - - name: sources-twilio - condition: sources-twilio.enabled - - name: sources-viber - condition: sources-viber.enabled diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/BUILD b/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/BUILD deleted file mode 100644 index 1f602ed4a8..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/BUILD +++ /dev/null @@ -1,28 +0,0 @@ -load("@rules_pkg//:pkg.bzl", "pkg_tar") -load("@com_github_airyhq_bazel_tools//helm:helm.bzl", "helm_template_test") -load("//tools/build:helm.bzl", "helm_push") - -filegroup( - name = "files", - srcs = glob( - ["**/*"], - exclude = ["BUILD"], - ), - visibility = ["//visibility:public"], -) - -pkg_tar( - name = "package", - srcs = [":files"], - extension = "tgz", - strip_prefix = "./", -) - -helm_template_test( - name = "template", - chart = ":package", -) - -helm_push( - chart = ":package", -) diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/backend/service.yaml b/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/backend/service.yaml deleted file mode 100644 index 49bb9cc0b6..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/backend/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: "{{ .Values.component }}" - labels: - core.airy.co/prometheus: spring -spec: - ports: - - name: web - port: 80 - targetPort: 8080 - protocol: TCP - type: NodePort - selector: - app: "{{ .Values.component }}" diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/configmap.yaml b/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/configmap.yaml deleted file mode 100644 index ae3f3c5c1c..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/chatplugin/templates/configmap.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: "{{ .Values.component }}" - labels: - core.airy.co/managed: "true" - core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" - annotations: - core.airy.co/enabled: "{{ .Values.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/facebook/values.yaml b/infrastructure/helm-chart/charts/components/charts/sources/charts/facebook/values.yaml deleted file mode 100644 index df9e87e6e8..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/facebook/values.yaml +++ /dev/null @@ -1,9 +0,0 @@ -component: sources-facebook -mandatory: false -enabled: true -connector: - image: sources/facebook-connector - resources: {} -eventsRouter: - image: sources/facebook-events-router - resources: {} diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/google/values.yaml b/infrastructure/helm-chart/charts/components/charts/sources/charts/google/values.yaml deleted file mode 100644 index f970cafe1f..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/google/values.yaml +++ /dev/null @@ -1,9 +0,0 @@ -component: sources-google -mandatory: false -enabled: true -connector: - image: sources/google-connector - resources: {} -eventsRouter: - image: sources/google-events-router - resources: {} diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/twilio/values.yaml b/infrastructure/helm-chart/charts/components/charts/sources/charts/twilio/values.yaml deleted file mode 100644 index f9768fdbbf..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/twilio/values.yaml +++ /dev/null @@ -1,9 +0,0 @@ -component: sources-twilio -mandatory: false -enabled: true -connector: - image: sources/twilio-connector - resources: {} -eventsRouter: - image: sources/twilio-events-router - resources: {} diff --git a/infrastructure/helm-chart/charts/components/charts/sources/charts/viber/values.yaml b/infrastructure/helm-chart/charts/components/charts/sources/charts/viber/values.yaml deleted file mode 100644 index 880e72e290..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/sources/charts/viber/values.yaml +++ /dev/null @@ -1,6 +0,0 @@ -component: sources-viber -mandatory: false -enabled: true -connector: - image: sources/viber-connector - resources: {} diff --git a/infrastructure/helm-chart/charts/components/charts/sources/values.yaml b/infrastructure/helm-chart/charts/components/charts/sources/values.yaml deleted file mode 100644 index cbafa05e0b..0000000000 --- a/infrastructure/helm-chart/charts/components/charts/sources/values.yaml +++ /dev/null @@ -1,2 +0,0 @@ -chatplugin: - installed: false diff --git a/infrastructure/helm-chart/charts/components/templates/api/admin/configmap.yaml b/infrastructure/helm-chart/charts/components/templates/api/admin/configmap.yaml deleted file mode 100644 index acd460b739..0000000000 --- a/infrastructure/helm-chart/charts/components/templates/api/admin/configmap.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: "{{ .Values.api.admin.component }}" - labels: - core.airy.co/managed: "true" - core.airy.co/mandatory: "{{ .Values.api.admin.mandatory }}" - core.airy.co/component: "{{ .Values.api.admin.component }}" - annotations: - core.airy.co/enabled: "{{ .Values.api.admin.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/templates/api/admin/service.yaml b/infrastructure/helm-chart/charts/components/templates/api/admin/service.yaml deleted file mode 100644 index 45ce197384..0000000000 --- a/infrastructure/helm-chart/charts/components/templates/api/admin/service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: api-admin - labels: - core.airy.co/prometheus: spring -spec: - ports: - - name: web - port: 80 - targetPort: 8080 - protocol: TCP - type: NodePort - selector: - app: api-admin diff --git a/infrastructure/helm-chart/charts/components/values.yaml b/infrastructure/helm-chart/charts/components/values.yaml deleted file mode 100644 index abfc886a88..0000000000 --- a/infrastructure/helm-chart/charts/components/values.yaml +++ /dev/null @@ -1,7 +0,0 @@ -api: - admin: - component: api-admin - image: api/admin - mandatory: true - enabled: true - resources: {} diff --git a/infrastructure/helm-chart/charts/ingress-controller/BUILD b/infrastructure/helm-chart/charts/ingress-controller/BUILD index 1f602ed4a8..45805d5f1c 100644 --- a/infrastructure/helm-chart/charts/ingress-controller/BUILD +++ b/infrastructure/helm-chart/charts/ingress-controller/BUILD @@ -1,28 +1,3 @@ -load("@rules_pkg//:pkg.bzl", "pkg_tar") -load("@com_github_airyhq_bazel_tools//helm:helm.bzl", "helm_template_test") -load("//tools/build:helm.bzl", "helm_push") +load("//tools/build:helm.bzl", "helm_ruleset_core_version") -filegroup( - name = "files", - srcs = glob( - ["**/*"], - exclude = ["BUILD"], - ), - visibility = ["//visibility:public"], -) - -pkg_tar( - name = "package", - srcs = [":files"], - extension = "tgz", - strip_prefix = "./", -) - -helm_template_test( - name = "template", - chart = ":package", -) - -helm_push( - chart = ":package", -) +helm_ruleset_core_version() diff --git a/infrastructure/helm-chart/charts/ingress-controller/Chart.yaml b/infrastructure/helm-chart/charts/ingress-controller/Chart.yaml index 558b81babe..ee9f9f3e4e 100644 --- a/infrastructure/helm-chart/charts/ingress-controller/Chart.yaml +++ b/infrastructure/helm-chart/charts/ingress-controller/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v2 appVersion: "1.0" description: A Helm chart for Airy Platform ingress controller name: ingress-controller -version: 0-develop \ No newline at end of file +version: 0-alpha \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/prerequisites/Chart.yaml b/infrastructure/helm-chart/charts/prerequisites/Chart.yaml index 2de31bb81e..6be9e97123 100644 --- a/infrastructure/helm-chart/charts/prerequisites/Chart.yaml +++ b/infrastructure/helm-chart/charts/prerequisites/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 appVersion: "1.0" description: A Helm chart for Airy configuration name: prerequisites -version: 0-develop +version: 0-alpha dependencies: - name: kafka condition: kafka.enabled diff --git a/infrastructure/helm-chart/charts/prerequisites/charts/beanstalkd/BUILD b/infrastructure/helm-chart/charts/prerequisites/charts/beanstalkd/BUILD index a962005d28..4ad930bdb6 100644 --- a/infrastructure/helm-chart/charts/prerequisites/charts/beanstalkd/BUILD +++ b/infrastructure/helm-chart/charts/prerequisites/charts/beanstalkd/BUILD @@ -1,29 +1,5 @@ -load("@rules_pkg//:pkg.bzl", "pkg_tar") -load("@com_github_airyhq_bazel_tools//helm:helm.bzl", "helm_template_test") -load("//tools/build:helm.bzl", "helm_push_version") +load("//tools/build:helm.bzl", "helm_ruleset_version") -filegroup( - name = "files", - srcs = glob( - ["**/*"], - exclude = ["BUILD"], - ), - visibility = ["//visibility:public"], -) - -pkg_tar( - name = "package", - srcs = [":files"], - extension = "tgz", - strip_prefix = "./", -) - -helm_template_test( - name = "template", - chart = ":package", -) - -helm_push_version( - chart = ":package", +helm_ruleset_version( version = "1.0", ) diff --git a/infrastructure/helm-chart/charts/prerequisites/charts/kafka/BUILD b/infrastructure/helm-chart/charts/prerequisites/charts/kafka/BUILD index 859b0226bd..374bb095f5 100644 --- a/infrastructure/helm-chart/charts/prerequisites/charts/kafka/BUILD +++ b/infrastructure/helm-chart/charts/prerequisites/charts/kafka/BUILD @@ -1,29 +1,5 @@ -load("@rules_pkg//:pkg.bzl", "pkg_tar") -load("@com_github_airyhq_bazel_tools//helm:helm.bzl", "helm_template_test") -load("//tools/build:helm.bzl", "helm_push_version") +load("//tools/build:helm.bzl", "helm_ruleset_version") -filegroup( - name = "files", - srcs = glob( - ["**/*"], - exclude = ["BUILD"], - ), - visibility = ["//visibility:public"], -) - -pkg_tar( - name = "package", - srcs = [":files"], - extension = "tgz", - strip_prefix = "./", -) - -helm_template_test( - name = "template", - chart = ":package", -) - -helm_push_version( - chart = ":package", +helm_ruleset_version( version = "2.7.0", ) diff --git a/infrastructure/helm-chart/charts/prerequisites/charts/kafka/values.yaml b/infrastructure/helm-chart/charts/prerequisites/charts/kafka/values.yaml index d4ca94189e..8e82f2dc9f 100644 --- a/infrastructure/helm-chart/charts/prerequisites/charts/kafka/values.yaml +++ b/infrastructure/helm-chart/charts/prerequisites/charts/kafka/values.yaml @@ -1 +1,5 @@ enabled: true +global: + containerRegistry: ghcr.io/airyhq + busyboxImage: ghcr.io/airyhq/infrastructure/busybox:latest + workerType: \ No newline at end of file diff --git a/infrastructure/helm-chart/charts/tools/charts/akhq/BUILD b/infrastructure/helm-chart/charts/tools/charts/akhq/BUILD index 8900f38491..32c6827b11 100644 --- a/infrastructure/helm-chart/charts/tools/charts/akhq/BUILD +++ b/infrastructure/helm-chart/charts/tools/charts/akhq/BUILD @@ -1,29 +1,5 @@ -load("@rules_pkg//:pkg.bzl", "pkg_tar") -load("@com_github_airyhq_bazel_tools//helm:helm.bzl", "helm_template_test") -load("//tools/build:helm.bzl", "helm_push_version") +load("//tools/build:helm.bzl", "helm_ruleset_version") -filegroup( - name = "files", - srcs = glob( - ["**/*"], - exclude = ["BUILD"], - ), - visibility = ["//visibility:public"], -) - -pkg_tar( - name = "package", - srcs = [":files"], - extension = "tgz", - strip_prefix = "./", -) - -helm_template_test( - name = "template", - chart = ":package", -) - -helm_push_version( - chart = ":package", +helm_ruleset_version( version = "0.16.0", ) diff --git a/infrastructure/helm-chart/charts/tools/charts/kafka-connect/BUILD b/infrastructure/helm-chart/charts/tools/charts/kafka-connect/BUILD index 859b0226bd..374bb095f5 100644 --- a/infrastructure/helm-chart/charts/tools/charts/kafka-connect/BUILD +++ b/infrastructure/helm-chart/charts/tools/charts/kafka-connect/BUILD @@ -1,29 +1,5 @@ -load("@rules_pkg//:pkg.bzl", "pkg_tar") -load("@com_github_airyhq_bazel_tools//helm:helm.bzl", "helm_template_test") -load("//tools/build:helm.bzl", "helm_push_version") +load("//tools/build:helm.bzl", "helm_ruleset_version") -filegroup( - name = "files", - srcs = glob( - ["**/*"], - exclude = ["BUILD"], - ), - visibility = ["//visibility:public"], -) - -pkg_tar( - name = "package", - srcs = [":files"], - extension = "tgz", - strip_prefix = "./", -) - -helm_template_test( - name = "template", - chart = ":package", -) - -helm_push_version( - chart = ":package", +helm_ruleset_version( version = "2.7.0", ) diff --git a/infrastructure/helm-chart/templates/components/api-admin/configmap.yaml b/infrastructure/helm-chart/templates/components/api-admin/configmap.yaml new file mode 100644 index 0000000000..a6fcf0f9f7 --- /dev/null +++ b/infrastructure/helm-chart/templates/components/api-admin/configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Values.components.api.admin.name }}" + labels: + core.airy.co/managed: "true" + core.airy.co/mandatory: "{{ .Values.components.api.admin.mandatory }}" + core.airy.co/component: "{{ .Values.components.api.admin.name }}" + annotations: + core.airy.co/enabled: "{{ .Values.components.api.admin.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/templates/api/admin/deployment.yaml b/infrastructure/helm-chart/templates/components/api-admin/deployment.yaml similarity index 75% rename from infrastructure/helm-chart/charts/components/templates/api/admin/deployment.yaml rename to infrastructure/helm-chart/templates/components/api-admin/deployment.yaml index 1c2193e915..f8de3976dc 100644 --- a/infrastructure/helm-chart/charts/components/templates/api/admin/deployment.yaml +++ b/infrastructure/helm-chart/templates/components/api-admin/deployment.yaml @@ -1,18 +1,18 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: api-admin + name: "{{ .Values.components.api.admin.name }}" labels: - app: api-admin + app: "{{ .Values.components.api.admin.name }}" type: api core.airy.co/managed: "true" - core.airy.co/mandatory: "{{ .Values.api.admin.mandatory }}" - core.airy.co/component: "{{ .Values.api.admin.component }}" + core.airy.co/mandatory: "{{ .Values.components.api.admin.mandatory }}" + core.airy.co/component: "{{ .Values.components.api.admin.name }}" spec: replicas: 1 selector: matchLabels: - app: api-admin + app: "{{ .Values.components.api.admin.name }}" strategy: rollingUpdate: maxSurge: 1 @@ -21,12 +21,12 @@ spec: template: metadata: labels: - app: api-admin + app: "{{ .Values.components.api.admin.name }}" WorkerType: "{{ default "NodeGroup" .Values.global.workerType }}" spec: containers: - name: app - image: "{{ .Values.global.containerRegistry}}/{{ .Values.api.admin.image }}:{{ default .Chart.Version .Values.global.appImageTag }}" + image: "{{ .Values.global.containerRegistry}}/{{ .Values.components.api.admin.image }}:{{ default .Chart.Version .Values.global.appImageTag }}" imagePullPolicy: Always envFrom: - configMapRef: @@ -36,7 +36,7 @@ spec: - configMapRef: name: core-config - configMapRef: - name: "{{ .Values.api.admin.component }}" + name: "{{ .Values.components.api.admin.name }}" env: - name: KUBERNETES_NAMESPACE valueFrom: @@ -57,7 +57,7 @@ spec: periodSeconds: 10 failureThreshold: 3 resources: -{{ toYaml .Values.api.admin.resources | indent 10 }} +{{ toYaml .Values.components.api.admin.resources | indent 10 }} initContainers: - name: wait image: "{{ .Values.global.busyboxImage }}" diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/templates/service.yaml b/infrastructure/helm-chart/templates/components/api-admin/service.yaml similarity index 66% rename from infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/templates/service.yaml rename to infrastructure/helm-chart/templates/components/api-admin/service.yaml index 80461897cb..140a698fdb 100644 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-communication/templates/service.yaml +++ b/infrastructure/helm-chart/templates/components/api-admin/service.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: Service metadata: - name: {{ .Values.component }} + name: "{{ .Values.components.api.admin.name }}" labels: core.airy.co/prometheus: spring spec: @@ -12,4 +12,4 @@ spec: protocol: TCP type: NodePort selector: - app: {{ .Values.component }} + app: "{{ .Values.components.api.admin.name }}" diff --git a/infrastructure/helm-chart/templates/components/api-communication/configmap.yaml b/infrastructure/helm-chart/templates/components/api-communication/configmap.yaml new file mode 100644 index 0000000000..7fbb65cf07 --- /dev/null +++ b/infrastructure/helm-chart/templates/components/api-communication/configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Values.components.api.communication.name }}" + labels: + core.airy.co/managed: "true" + core.airy.co/mandatory: "{{ .Values.components.api.communication.mandatory }}" + core.airy.co/component: "{{ .Values.components.api.communication.name }}" + annotations: + core.airy.co/enabled: "{{ .Values.components.api.communication.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/templates/deployment.yaml b/infrastructure/helm-chart/templates/components/api-communication/deployment.yaml similarity index 68% rename from infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/templates/deployment.yaml rename to infrastructure/helm-chart/templates/components/api-communication/deployment.yaml index dae9f7ae1a..362428ee8b 100644 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-contacts/templates/deployment.yaml +++ b/infrastructure/helm-chart/templates/components/api-communication/deployment.yaml @@ -1,18 +1,18 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: {{ .Values.component }} + name: "{{ .Values.components.api.communication.name }}" labels: - app: {{ .Values.component }} + app: "{{ .Values.components.api.communication.name }}" type: api core.airy.co/managed: "true" - core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/mandatory: "{{ .Values.components.api.communication.mandatory }}" + core.airy.co/component: "{{ .Values.components.api.communication.name }}" spec: - replicas: 0 + replicas: 1 selector: matchLabels: - app: {{ .Values.component }} + app: "{{ .Values.components.api.communication.name }}" strategy: rollingUpdate: maxSurge: 1 @@ -21,12 +21,12 @@ spec: template: metadata: labels: - app: {{ .Values.component }} + app: "{{ .Values.components.api.communication.name }}" WorkerType: "{{ default "NodeGroup" .Values.global.workerType }}" spec: containers: - name: app - image: "{{ .Values.global.containerRegistry}}/{{ .Values.image }}:{{ default .Chart.Version .Values.global.appImageTag }}" + image: "{{ .Values.global.containerRegistry}}/{{ .Values.components.api.communication.image }}:{{ default .Chart.Version .Values.global.appImageTag }}" imagePullPolicy: Always envFrom: - configMapRef: @@ -34,7 +34,7 @@ spec: - configMapRef: name: kafka-config - configMapRef: - name: "{{ .Values.component }}" + name: "{{ .Values.components.api.communication.name }}" livenessProbe: httpGet: path: /actuator/health @@ -46,7 +46,7 @@ spec: periodSeconds: 10 failureThreshold: 3 resources: -{{ toYaml .Values.resources | indent 10 }} +{{ toYaml .Values.components.api.communication.resources | indent 10 }} initContainers: - name: wait image: "{{ .Values.global.busyboxImage }}" diff --git a/infrastructure/helm-chart/templates/components/api-communication/service.yaml b/infrastructure/helm-chart/templates/components/api-communication/service.yaml new file mode 100644 index 0000000000..c62f06abd9 --- /dev/null +++ b/infrastructure/helm-chart/templates/components/api-communication/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Values.components.api.communication.name }} + labels: + core.airy.co/prometheus: spring +spec: + ports: + - name: web + port: 80 + targetPort: 8080 + protocol: TCP + type: NodePort + selector: + app: {{ .Values.components.api.communication.name }} diff --git a/infrastructure/helm-chart/templates/components/api-websocket/configmap.yaml b/infrastructure/helm-chart/templates/components/api-websocket/configmap.yaml new file mode 100644 index 0000000000..4b83b1e812 --- /dev/null +++ b/infrastructure/helm-chart/templates/components/api-websocket/configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Values.components.api.websocket.name }}" + labels: + core.airy.co/managed: "true" + core.airy.co/mandatory: "{{ .Values.components.api.websocket.mandatory }}" + core.airy.co/component: "{{ .Values.components.api.websocket.name }}" + annotations: + core.airy.co/enabled: "{{ .Values.components.api.websocket.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/templates/deployment.yaml b/infrastructure/helm-chart/templates/components/api-websocket/deployment.yaml similarity index 70% rename from infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/templates/deployment.yaml rename to infrastructure/helm-chart/templates/components/api-websocket/deployment.yaml index 431bfbd159..6739cfe3c0 100644 --- a/infrastructure/helm-chart/charts/components/charts/api/charts/api-websocket/templates/deployment.yaml +++ b/infrastructure/helm-chart/templates/components/api-websocket/deployment.yaml @@ -1,18 +1,18 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: api-websocket + name: "{{ .Values.components.api.websocket.name }}" labels: - app: api-websocket + app: "{{ .Values.components.api.websocket.name }}" type: api core.airy.co/managed: "true" - core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/mandatory: "{{ .Values.components.api.websocket.mandatory }}" + core.airy.co/component: "{{ .Values.components.api.websocket.name }}" spec: replicas: 1 selector: matchLabels: - app: api-websocket + app: "{{ .Values.components.api.websocket.name }}" strategy: rollingUpdate: maxSurge: 1 @@ -21,12 +21,12 @@ spec: template: metadata: labels: - app: api-websocket + app: "{{ .Values.components.api.websocket.name }}" WorkerType: "{{ default "NodeGroup" .Values.global.workerType }}" spec: containers: - name: app - image: "{{ .Values.global.containerRegistry}}/{{ .Values.image }}:{{ default .Chart.Version .Values.global.appImageTag }}" + image: "{{ .Values.global.containerRegistry}}/{{ .Values.components.api.websocket.image }}:{{ default .Chart.Version .Values.global.appImageTag }}" imagePullPolicy: Always envFrom: - configMapRef: @@ -34,7 +34,7 @@ spec: - configMapRef: name: kafka-config - configMapRef: - name: "{{ .Values.component }}" + name: "{{ .Values.components.api.websocket.name }}" livenessProbe: httpGet: path: /actuator/health @@ -46,7 +46,7 @@ spec: periodSeconds: 10 failureThreshold: 3 resources: -{{ toYaml .Values.resources | indent 10 }} +{{ toYaml .Values.components.api.websocket.resources | indent 10 }} initContainers: - name: wait image: "{{ .Values.global.busyboxImage }}" diff --git a/infrastructure/helm-chart/templates/components/api-websocket/service.yaml b/infrastructure/helm-chart/templates/components/api-websocket/service.yaml new file mode 100644 index 0000000000..b68799343d --- /dev/null +++ b/infrastructure/helm-chart/templates/components/api-websocket/service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: "{{ .Values.components.api.websocket.name }}" + labels: + core.airy.co/prometheus: spring +spec: + ports: + - name: web + port: 80 + targetPort: 8080 + protocol: TCP + type: NodePort + selector: + app: "{{ .Values.components.api.websocket.name }}" diff --git a/infrastructure/helm-chart/templates/components/frontend-control-center/configmap.yaml b/infrastructure/helm-chart/templates/components/frontend-control-center/configmap.yaml new file mode 100644 index 0000000000..e5ca68a6a0 --- /dev/null +++ b/infrastructure/helm-chart/templates/components/frontend-control-center/configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Values.components.frontend.control_center.name }}" + labels: + core.airy.co/managed: "true" + core.airy.co/mandatory: "{{ .Values.components.frontend.control_center.mandatory }}" + core.airy.co/component: "{{ .Values.components.frontend.control_center.name }}" + annotations: + core.airy.co/enabled: "{{ .Values.components.frontend.control_center.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/templates/deployment.yaml b/infrastructure/helm-chart/templates/components/frontend-control-center/deployment.yaml similarity index 64% rename from infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/templates/deployment.yaml rename to infrastructure/helm-chart/templates/components/frontend-control-center/deployment.yaml index 691651483e..db9602dfa2 100644 --- a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/templates/deployment.yaml +++ b/infrastructure/helm-chart/templates/components/frontend-control-center/deployment.yaml @@ -1,20 +1,20 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: frontend-control-center + name: "{{ .Values.components.frontend.control_center.name }}" labels: - app: frontend-control-center + app: "{{ .Values.components.frontend.control_center.name }}" type: frontend core.airy.co/managed: "true" - core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/mandatory: "{{ .Values.components.frontend.control_center.mandatory }}" + core.airy.co/component: "{{ .Values.components.frontend.control_center.name }}" annotations: core.airy.co/config-items-mandatory: "API_HOST" spec: replicas: 1 selector: matchLabels: - app: frontend-control-center + app: "{{ .Values.components.frontend.control_center.name }}" strategy: rollingUpdate: maxSurge: 1 @@ -23,12 +23,12 @@ spec: template: metadata: labels: - app: frontend-control-center + app: "{{ .Values.components.frontend.control_center.name }}" WorkerType: "{{ default "NodeGroup" .Values.global.workerType }}" spec: containers: - name: app - image: "{{ .Values.global.containerRegistry}}/{{ .Values.image }}:{{ default .Chart.Version .Values.global.appImageTag }}" + image: "{{ .Values.global.containerRegistry}}/{{ .Values.components.frontend.control_center.image }}:{{ default .Chart.Version .Values.global.appImageTag }}" imagePullPolicy: Always env: {{- if .Values.global.apiHost }} @@ -40,7 +40,7 @@ spec: {{- end }} envFrom: - configMapRef: - name: "{{ .Values.component }}" + name: "{{ .Values.components.frontend.control_center.name }}" livenessProbe: httpGet: path: /health @@ -52,7 +52,7 @@ spec: periodSeconds: 10 failureThreshold: 3 resources: -{{ toYaml .Values.resources | indent 10 }} +{{ toYaml .Values.components.frontend.control_center.resources | indent 10 }} volumes: - name: provisioning-scripts configMap: diff --git a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/templates/ingress.yaml b/infrastructure/helm-chart/templates/components/frontend-control-center/ingress.yaml similarity index 87% rename from infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/templates/ingress.yaml rename to infrastructure/helm-chart/templates/components/frontend-control-center/ingress.yaml index cd417ee877..3038bda172 100644 --- a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/templates/ingress.yaml +++ b/infrastructure/helm-chart/templates/components/frontend-control-center/ingress.yaml @@ -17,7 +17,7 @@ spec: pathType: Prefix backend: service: - name: frontend-control-center + name: "{{ .Values.components.frontend.control_center.name }}" port: number: 80 {{- if .Values.global.host }} @@ -50,14 +50,14 @@ spec: pathType: Prefix backend: service: - name: frontend-control-center + name: "{{ .Values.components.frontend.control_center.name }}" port: number: 80 - path: /ui pathType: Prefix backend: service: - name: frontend-control-center + name: "{{ .Values.components.frontend.control_center.name }}" port: number: 80 {{- if .Values.global.host }} diff --git a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/templates/service.yaml b/infrastructure/helm-chart/templates/components/frontend-control-center/service.yaml similarity index 51% rename from infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/templates/service.yaml rename to infrastructure/helm-chart/templates/components/frontend-control-center/service.yaml index 7c03589701..c480cd1bb3 100644 --- a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-control-center/templates/service.yaml +++ b/infrastructure/helm-chart/templates/components/frontend-control-center/service.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: Service metadata: - name: frontend-control-center + name: "{{ .Values.components.frontend.control_center.name }}" spec: ports: - port: 80 @@ -9,4 +9,4 @@ spec: protocol: TCP type: NodePort selector: - app: frontend-control-center + app: "{{ .Values.components.frontend.control_center.name }}" diff --git a/infrastructure/helm-chart/templates/components/frontend-inbox/configmap.yaml b/infrastructure/helm-chart/templates/components/frontend-inbox/configmap.yaml new file mode 100644 index 0000000000..02c4f86332 --- /dev/null +++ b/infrastructure/helm-chart/templates/components/frontend-inbox/configmap.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: "{{ .Values.components.frontend.inbox.name }}" + labels: + core.airy.co/managed: "true" + core.airy.co/mandatory: "{{ .Values.components.frontend.inbox.mandatory }}" + core.airy.co/component: "{{ .Values.components.frontend.inbox.name }}" + annotations: + core.airy.co/enabled: "{{ .Values.components.frontend.inbox.enabled }}" diff --git a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/templates/deployment.yaml b/infrastructure/helm-chart/templates/components/frontend-inbox/deployment.yaml similarity index 67% rename from infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/templates/deployment.yaml rename to infrastructure/helm-chart/templates/components/frontend-inbox/deployment.yaml index f238198f2d..38d1508506 100644 --- a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/templates/deployment.yaml +++ b/infrastructure/helm-chart/templates/components/frontend-inbox/deployment.yaml @@ -1,20 +1,20 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: frontend-inbox + name: "{{ .Values.components.frontend.inbox.name }}" labels: - app: frontend-inbox + app: "{{ .Values.components.frontend.inbox.name }}" type: frontend core.airy.co/managed: "true" - core.airy.co/mandatory: "{{ .Values.mandatory }}" - core.airy.co/component: "{{ .Values.component }}" + core.airy.co/mandatory: "{{ .Values.components.frontend.inbox.mandatory }}" + core.airy.co/component: "{{ .Values.components.frontend.inbox.name }}" annotations: core.airy.co/config-items-mandatory: "API_HOST" spec: replicas: 1 selector: matchLabels: - app: frontend-inbox + app: "{{ .Values.components.frontend.inbox.name }}" strategy: rollingUpdate: maxSurge: 1 @@ -23,12 +23,12 @@ spec: template: metadata: labels: - app: frontend-inbox + app: "{{ .Values.components.frontend.inbox.name }}" WorkerType: "{{ default "NodeGroup" .Values.global.workerType }}" spec: containers: - name: app - image: "{{ .Values.global.containerRegistry}}/{{ .Values.image }}:{{ default .Chart.Version .Values.global.appImageTag }}" + image: "{{ .Values.global.containerRegistry}}/{{ .Values.components.frontend.inbox.image }}:{{ default .Chart.Version .Values.global.appImageTag }}" imagePullPolicy: Always env: {{- if .Values.global.apiHost }} @@ -40,7 +40,7 @@ spec: {{- end }} envFrom: - configMapRef: - name: "{{ .Values.component }}" + name: "{{ .Values.components.frontend.inbox.name }}" livenessProbe: httpGet: path: /health @@ -52,7 +52,7 @@ spec: periodSeconds: 10 failureThreshold: 3 resources: -{{ toYaml .Values.resources | indent 10 }} +{{ toYaml .Values.components.frontend.inbox.resources | indent 10 }} volumes: - name: provisioning-scripts configMap: diff --git a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/templates/ingress.yaml b/infrastructure/helm-chart/templates/components/frontend-inbox/ingress.yaml similarity index 91% rename from infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/templates/ingress.yaml rename to infrastructure/helm-chart/templates/components/frontend-inbox/ingress.yaml index 020718c797..e92565a403 100644 --- a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/templates/ingress.yaml +++ b/infrastructure/helm-chart/templates/components/frontend-inbox/ingress.yaml @@ -17,7 +17,7 @@ spec: pathType: Prefix backend: service: - name: frontend-inbox + name: "{{ .Values.components.frontend.inbox.name }}" port: number: 80 {{- if .Values.global.host }} diff --git a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/templates/service.yaml b/infrastructure/helm-chart/templates/components/frontend-inbox/service.yaml similarity index 55% rename from infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/templates/service.yaml rename to infrastructure/helm-chart/templates/components/frontend-inbox/service.yaml index 82fbe9dadc..e3369746ab 100644 --- a/infrastructure/helm-chart/charts/components/charts/frontend/charts/frontend-inbox/templates/service.yaml +++ b/infrastructure/helm-chart/templates/components/frontend-inbox/service.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: Service metadata: - name: frontend-inbox + name: "{{ .Values.components.frontend.inbox.name }}" spec: ports: - port: 80 @@ -9,4 +9,4 @@ spec: protocol: TCP type: NodePort selector: - app: frontend-inbox + app: "{{ .Values.components.frontend.inbox.name }}" diff --git a/infrastructure/helm-chart/charts/components/templates/ingress.yaml b/infrastructure/helm-chart/templates/components/ingress.yaml similarity index 100% rename from infrastructure/helm-chart/charts/components/templates/ingress.yaml rename to infrastructure/helm-chart/templates/components/ingress.yaml diff --git a/infrastructure/helm-chart/values.yaml b/infrastructure/helm-chart/values.yaml index cd653a01fb..7cc7a65cf8 100644 --- a/infrastructure/helm-chart/values.yaml +++ b/infrastructure/helm-chart/values.yaml @@ -26,3 +26,36 @@ tools: enabled: true serviceAccount: airy-admin limitRange: false +components: + api: + admin: + name: api-admin + image: api/admin + mandatory: true + enabled: true + resources: {} + communication: + name: api-communication + mandatory: true + enabled: true + image: api/communication + resources: {} + websocket: + name: api-websocket + mandatory: true + enabled: true + image: api/websocket + resources: {} + frontend: + control_center: + name: frontend-control-center + mandatory: true + enabled: true + image: frontend/control-center + resources: {} + inbox: + name: frontend-inbox + mandatory: true + enabled: true + image: frontend/inbox + resources: {} diff --git a/scripts/push-helm-charts.sh b/scripts/push-helm-charts.sh index b79af1156a..8b89a7120b 100755 --- a/scripts/push-helm-charts.sh +++ b/scripts/push-helm-charts.sh @@ -2,7 +2,7 @@ set -eo pipefail IFS=$'\n\t' -release_targets=$(bazel query "filter(\"helm_push$\", //infrastructure/helm-chart/...)" --output label) +release_targets=$(bazel query "filter(\"helm_push$\", //...)" --output label) for target in $release_targets; do echo "Deploying $target" diff --git a/tools/build/helm.bzl b/tools/build/helm.bzl index baaf7cb0a2..c82a7b88a4 100644 --- a/tools/build/helm.bzl +++ b/tools/build/helm.bzl @@ -1,4 +1,5 @@ -load("@com_github_airyhq_bazel_tools//helm:helm.bzl", lib_helm_push = "helm_push") +load("@rules_pkg//:pkg.bzl", "pkg_tar") +load("@com_github_airyhq_bazel_tools//helm:helm.bzl", "helm_template_test", lib_helm_push = "helm_push") def helm_push(chart): lib_helm_push( @@ -39,3 +40,56 @@ def helm_push_version(chart, version): version = version, version_file = Label("//:VERSION"), ) + +def helm_ruleset_core_version(): + native.filegroup( + name = "files", + srcs = native.glob( + ["**/*"], + exclude = ["BUILD"], + ), + visibility = ["//visibility:public"], + ) + + pkg_tar( + name = "package", + srcs = [":files"], + extension = "tgz", + strip_prefix = "./", + ) + + helm_template_test( + name = "template", + chart = ":package", + ) + + helm_push( + chart = ":package", + ) + +def helm_ruleset_version(version): + native.filegroup( + name = "files", + srcs = native.glob( + ["**/*"], + exclude = ["BUILD"], + ), + visibility = ["//visibility:public"], + ) + + pkg_tar( + name = "package", + srcs = [":files"], + extension = "tgz", + strip_prefix = "./", + ) + + helm_template_test( + name = "template", + chart = ":package", + ) + + helm_push_version( + chart = ":package", + version = version, + ) From fd404a2ef329fc2ad741184972595a66e5034020 Mon Sep 17 00:00:00 2001 From: ljupcovangelski Date: Fri, 12 Aug 2022 13:14:19 +0200 Subject: [PATCH 63/92] [#3575] Fix Kafka topics provisioning --- VERSION | 2 +- docs/docs/changelog.md | 14 +++++++++ .../templates/provisioning/job-kafka.yaml | 2 +- .../provisioning/kafka-create-topics.yaml | 31 ++++++++++--------- .../co/airy/tools/topics/Application.java | 3 +- 5 files changed, 34 insertions(+), 18 deletions(-) diff --git a/VERSION b/VERSION index fc7f502dba..1c0069e4d9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.47.3 +0.47.4 diff --git a/docs/docs/changelog.md b/docs/docs/changelog.md index 078244ff16..1060eaf5d4 100644 --- a/docs/docs/changelog.md +++ b/docs/docs/changelog.md @@ -3,6 +3,20 @@ title: Changelog sidebar_label: 📝 Changelog --- +## 0.47.4 + +#### Hotfix + +* [[#3575](https://github.com/airyhq/airy/issues/3575)] Fix Kafka topics provisioning + +#### Airy CLI + +You can download the Airy CLI for your operating system from the following links: + +[MacOS](https://airy-core-binaries.s3.amazonaws.com/0.47.4/darwin/amd64/airy) +[Linux](https://airy-core-binaries.s3.amazonaws.com/0.47.4/linux/amd64/airy) +[Windows](https://airy-core-binaries.s3.amazonaws.com/0.47.4/windows/amd64/airy.exe) + ## 0.47.3 #### Hotfix diff --git a/infrastructure/helm-chart/templates/provisioning/job-kafka.yaml b/infrastructure/helm-chart/templates/provisioning/job-kafka.yaml index df740ca7e4..023587bb7f 100644 --- a/infrastructure/helm-chart/templates/provisioning/job-kafka.yaml +++ b/infrastructure/helm-chart/templates/provisioning/job-kafka.yaml @@ -10,7 +10,7 @@ spec: containers: - name: create-topics image: "{{ .Values.provisioning.kafka.image }}:{{ .Values.provisioning.kafka.imageTag }}" - command: ["/bin/sh", "/opt/provisioning/create-topics.sh"] + command: ["/bin/bash", "/opt/provisioning/create-topics.sh"] envFrom: - configMapRef: name: kafka-config diff --git a/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml b/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml index 66cfadfd35..5990908759 100644 --- a/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml +++ b/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml @@ -28,6 +28,7 @@ data: PARTITIONS=${PARTITIONS:-10} REPLICAS=${KAFKA_MINIMUM_REPLICAS:-1} AIRY_CORE_NAMESPACE=${AIRY_CORE_NAMESPACE:-} + AUTH_JAAS=${AUTH_JAAS:-} echo "Creating Kafka topics" @@ -51,33 +52,33 @@ data: - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.channels" + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.channels" - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.contacts" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.contacts" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.messages" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.messages" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.metadata" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.metadata" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.read-receipt" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.read-receipt" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.sources" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.sources" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.tags" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.tags" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.templates" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.templates" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.users" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.users" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.webhooks-v0.29.0" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}application.communication.webhooks-v0.29.0" --config cleanup.policy=compact min.compaction.lag.ms=86400000 segment.bytes=10485760 - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}ops.application.logs" + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}ops.application.logs" - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.facebook.events" + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.facebook.events" - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.google.events" + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.google.events" - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.twilio.events" + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.twilio.events" - kafka-topics.sh --create --if-not-exists --zookeeper "${ZOOKEEPER}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.viber.events" + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.viber.events" diff --git a/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java b/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java index 57c99bb858..7dd09f5d7a 100644 --- a/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java +++ b/infrastructure/tools/topics/src/main/java/co/airy/tools/topics/Application.java @@ -12,7 +12,7 @@ public class Application { public static void main(String[] args) { - String createTopicTemplate = " kafka-topics.sh --create --if-not-exists --zookeeper \"${ZOOKEEPER}\" --replication-factor \"${REPLICAS}\" --partitions \"${PARTITIONS}\" --topic \"${AIRY_CORE_NAMESPACE}%s\" %s"; + String createTopicTemplate = " kafka-topics.sh --create --if-not-exists \"${CONNECTION_OPTS[@]}\" --replication-factor \"${REPLICAS}\" --partitions \"${PARTITIONS}\" --topic \"${AIRY_CORE_NAMESPACE}%s\" %s"; String headerTemplate = "apiVersion: v1" + "\n" + "kind: ConfigMap" + @@ -53,6 +53,7 @@ public static void main(String[] args) { " PARTITIONS=${PARTITIONS:-10}\n" + " REPLICAS=${KAFKA_MINIMUM_REPLICAS:-1}\n" + " AIRY_CORE_NAMESPACE=${AIRY_CORE_NAMESPACE:-}\n" + + " AUTH_JAAS=${AUTH_JAAS:-}\n" + "\n" + " echo \"Creating Kafka topics\"\n" + "\n" + From 5c25f120f015996e16f6370df77766a254945acf Mon Sep 17 00:00:00 2001 From: ljupcovangelski Date: Fri, 12 Aug 2022 14:31:45 +0200 Subject: [PATCH 64/92] [#3575] Fix wrong merge --- .../helm-chart/templates/provisioning/kafka-create-topics.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml b/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml index e8fb229396..e965a02db9 100644 --- a/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml +++ b/infrastructure/helm-chart/templates/provisioning/kafka-create-topics.yaml @@ -79,3 +79,5 @@ data: kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.viber.events" + kafka-topics.sh --create --if-not-exists "${CONNECTION_OPTS[@]}" --replication-factor "${REPLICAS}" --partitions "${PARTITIONS}" --topic "${AIRY_CORE_NAMESPACE}source.whatsapp.events" + From d06c8f3939b902ac41627f57c64336347bf3c765 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 11:05:18 +0200 Subject: [PATCH 65/92] Bump @testing-library/user-event from 14.4.2 to 14.4.3 (#3582) Bumps [@testing-library/user-event](https://github.com/testing-library/user-event) from 14.4.2 to 14.4.3. - [Release notes](https://github.com/testing-library/user-event/releases) - [Changelog](https://github.com/testing-library/user-event/blob/main/CHANGELOG.md) - [Commits](https://github.com/testing-library/user-event/compare/v14.4.2...v14.4.3) --- updated-dependencies: - dependency-name: "@testing-library/user-event" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 48ea83e9b4..46a493ecc1 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "@reduxjs/toolkit": "^1.8.3", "@stomp/stompjs": "^6.1.2", "@testing-library/jest-dom": "^5.16.5", - "@testing-library/user-event": "^14.4.2", + "@testing-library/user-event": "^14.4.3", "@types/jest": "^28.1.6", "audio-recorder-polyfill": "^0.4.1", "camelcase-keys": "^7.0.2", diff --git a/yarn.lock b/yarn.lock index 7c161f84d9..f26ca7a8a4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1708,10 +1708,10 @@ "@testing-library/dom" "^8.5.0" "@types/react-dom" "^18.0.0" -"@testing-library/user-event@^14.4.2": - version "14.4.2" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.4.2.tgz#d3fb5d24e2d7d019a7d2e9978a8deb90b0aa230b" - integrity sha512-1gVTWtueNimveOjcm2ApFCnCTeky7WqY3EX31/GRKLWyCd+HfH+Gd2l1J8go9FpDNe+0Mx8X4zbQHTg0WWNJwg== +"@testing-library/user-event@^14.4.3": + version "14.4.3" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.4.3.tgz#af975e367743fa91989cd666666aec31a8f50591" + integrity sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q== "@tootallnate/once@2": version "2.0.0" From d29d1f42fd352a1b7d55599a90e9fb527027c8f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 11:05:47 +0200 Subject: [PATCH 66/92] Bump i18next from 21.8.16 to 21.9.0 (#3580) Bumps [i18next](https://github.com/i18next/i18next) from 21.8.16 to 21.9.0. - [Release notes](https://github.com/i18next/i18next/releases) - [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/i18next/compare/v21.8.16...v21.9.0) --- updated-dependencies: - dependency-name: i18next dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 46a493ecc1..be2f007534 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "core-js": "3.24.1", "emoji-mart": "^5.2.0", "form-data": "^4.0.0", - "i18next": "^21.8.16", + "i18next": "^21.9.0", "isomorphic-fetch": "^3.0.0", "linkify-react": "^3.0.4", "linkifyjs": "^3.0.5", diff --git a/yarn.lock b/yarn.lock index f26ca7a8a4..5f015b41d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4790,10 +4790,10 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -i18next@^21.8.16: - version "21.8.16" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.8.16.tgz#31fe4682e4e2077dbf229a88e5a58b7020e4ddc8" - integrity sha512-acJLCk38YMfEPjBR/1vS13SFY7rBQLs9E5m1tSRnWc9UW3f+SZszgH+NP1fZRA1+O+CdG2eLGGmuUMJW52EwzQ== +i18next@^21.9.0: + version "21.9.0" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-21.9.0.tgz#b63ebb0d4e1b23709951ca4774dc19d2ffac9553" + integrity sha512-B+6/yd7rCpJidyPuBaEApUECx7G8Ai6+tqYhrChsY4MmQqJhG7qJ4eT6Lm1OnRhieVelEtfxh4aAQktdNVZtDA== dependencies: "@babel/runtime" "^7.17.2" From 75005f0dce78f0c61c95a082dfcddf63c45a0bba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 11:07:42 +0200 Subject: [PATCH 67/92] Bump @types/node from 18.6.4 to 18.7.3 (#3581) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 18.6.4 to 18.7.3. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index be2f007534..72f3171122 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "@testing-library/react": "13.3.0", "@types/dom-mediacapture-record": "^1.0.11", "@types/lodash-es": "^4.17.6", - "@types/node": "18.6.4", + "@types/node": "18.7.3", "@types/react": "18.0.17", "@types/react-dom": "18.0.6", "@types/react-redux": "7.1.24", diff --git a/yarn.lock b/yarn.lock index 5f015b41d1..79aef4b9bb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1977,10 +1977,10 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== -"@types/node@*", "@types/node@18.6.4": - version "18.6.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.4.tgz#fd26723a8a3f8f46729812a7f9b4fc2d1608ed39" - integrity sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg== +"@types/node@*", "@types/node@18.7.3": + version "18.7.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.3.tgz#432c89796eab539b7a30b7b8801a727b585238a4" + integrity sha512-LJgzOEwWuMTBxHzgBR/fhhBOWrvBjvO+zPteUgbbuQi80rYIZHrk1mNbRUqPZqSLP2H7Rwt1EFLL/tNLD1Xx/w== "@types/node@^14.14.31": version "14.18.18" From cedf77ef637881387fc0c21940b1fdadc9efd410 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 11:08:09 +0200 Subject: [PATCH 68/92] Bump terser-webpack-plugin from 5.3.3 to 5.3.4 (#3579) Bumps [terser-webpack-plugin](https://github.com/webpack-contrib/terser-webpack-plugin) from 5.3.3 to 5.3.4. - [Release notes](https://github.com/webpack-contrib/terser-webpack-plugin/releases) - [Changelog](https://github.com/webpack-contrib/terser-webpack-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/terser-webpack-plugin/compare/v5.3.3...v5.3.4) --- updated-dependencies: - dependency-name: terser-webpack-plugin dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 30 +++++++++++------------------- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 72f3171122..33e151c857 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "sass": "^1.54.3", "sass-loader": "^13.0.2", "style-loader": "^3.3.1", - "terser-webpack-plugin": "^5.3.3", + "terser-webpack-plugin": "^5.3.4", "typescript": "^4.7.4", "url-loader": "^4.1.1", "webpack": "^5.74.0", diff --git a/yarn.lock b/yarn.lock index 79aef4b9bb..eeafb602b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1470,18 +1470,10 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.14" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" - integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/trace-mapping@^0.3.7": - version "0.3.13" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" - integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" + integrity sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" @@ -7890,18 +7882,18 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90" - integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== +terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.4.tgz#f4d31e265883d20fda3ca9c0fc6a53f173ae62e3" + integrity sha512-SmnkUhBxLDcBfTIeaq+ZqJXLVEyXxSaNcCeSezECdKjfkMrTTnPvapBILylYwyEvHFZAn2cJ8dtiXel5XnfOfQ== dependencies: - "@jridgewell/trace-mapping" "^0.3.7" + "@jridgewell/trace-mapping" "^0.3.14" jest-worker "^27.4.5" schema-utils "^3.1.1" serialize-javascript "^6.0.0" - terser "^5.7.2" + terser "^5.14.1" -terser@^5.10.0, terser@^5.7.2: +terser@^5.10.0, terser@^5.14.1: version "5.14.2" resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== From 5c4cd63afea2abdacbb1721b7b45a8619a70cfaa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 11:08:37 +0200 Subject: [PATCH 69/92] Bump @emoji-mart/react from 1.0.0 to 1.0.1 (#3578) Bumps [@emoji-mart/react](https://github.com/missive/emoji-mart/tree/HEAD/packages/emoji-mart-react) from 1.0.0 to 1.0.1. - [Release notes](https://github.com/missive/emoji-mart/releases) - [Commits](https://github.com/missive/emoji-mart/commits/v1.0.1/packages/emoji-mart-react) --- updated-dependencies: - dependency-name: "@emoji-mart/react" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 33e151c857..5b66cff62f 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "@emoji-mart/data": "^1.0.3", - "@emoji-mart/react": "^1.0.0", + "@emoji-mart/react": "^1.0.1", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7", "@reduxjs/toolkit": "^1.8.3", "@stomp/stompjs": "^6.1.2", diff --git a/yarn.lock b/yarn.lock index eeafb602b0..a82ef3f0ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1160,10 +1160,10 @@ resolved "https://registry.yarnpkg.com/@emoji-mart/data/-/data-1.0.3.tgz#a216a9a8cead038b756d2b882e1c9da0f7777e8a" integrity sha512-SwxtfLOPiis9iXwWLjZHpUIUwYV/ghfBG6jpVP2HZgCt/dE8Q4r1RQg1Y5TyYBYKk8N5RKuLWJi1DNrEUIWj+A== -"@emoji-mart/react@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@emoji-mart/react/-/react-1.0.0.tgz#485ffef5c34f0cde04ecb2820f150a483744346e" - integrity sha512-pRZ+e0uWJKVpUBcALevyjnp14HUFG/7p+XsUqNAkz322ruPzyDQ7/qUNONU0KGjQF71O4OIoFdvDPcxVpx1/xg== +"@emoji-mart/react@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@emoji-mart/react/-/react-1.0.1.tgz#46b6a2e92faf16fa9b7f9471f137fa2e3d1e8ac3" + integrity sha512-ALhLD96BOL5w+a4NI5NpmfqfF1aVjjj2qJE0dLst/OhjBfVmpteWNgn/h8LZy9ulU6AnbeS+13KnPFzDjCvRRw== "@eslint/eslintrc@^0.4.3": version "0.4.3" From dfd2c94070adf32433f9da48e4d23a08c5245cd8 Mon Sep 17 00:00:00 2001 From: Thorsten Date: Mon, 15 Aug 2022 15:37:32 +0200 Subject: [PATCH 70/92] [#3508] Fix empty state connectors (#3588) --- .../src/components/InfoCard/index.module.scss | 11 +- .../Catalog/CatalogCard/index.module.scss | 2 - .../src/pages/Catalog/CatalogCard/index.tsx | 169 +++++++++++------- .../CatalogItemDetails/index.module.scss | 2 - .../Catalog/CatalogItemDetails/index.tsx | 119 +++++++----- .../src/pages/Catalog/index.module.scss | 40 +++++ .../ConnectorConfig/index.module.scss | 11 +- .../Connectors/ConnectorConfig/index.tsx | 62 ++++++- .../ChatPlugin/ChatPluginConnect.module.scss | 3 - .../src/pages/Connectors/index.tsx | 19 +- .../pages/Webhooks/WebhooksListItem/index.tsx | 6 - .../src/pages/Webhooks/index.tsx | 45 ++--- .../alerts/Notification/index.module.scss | 93 ++++++++++ .../components/alerts/Notification/index.tsx | 86 +++++++++ .../components/alerts/SettingsModal/index.tsx | 5 +- .../alerts/SettingsModal/style.module.scss | 4 +- lib/typescript/components/alerts/index.ts | 1 + lib/typescript/model/Modal.ts | 9 + lib/typescript/model/Notification.ts | 5 + lib/typescript/model/index.ts | 2 + lib/typescript/translations/translations.ts | 41 ++++- 21 files changed, 564 insertions(+), 171 deletions(-) create mode 100644 lib/typescript/components/alerts/Notification/index.module.scss create mode 100644 lib/typescript/components/alerts/Notification/index.tsx create mode 100644 lib/typescript/model/Modal.ts create mode 100644 lib/typescript/model/Notification.ts diff --git a/frontend/control-center/src/components/InfoCard/index.module.scss b/frontend/control-center/src/components/InfoCard/index.module.scss index 25fefa8061..e5abed01bc 100644 --- a/frontend/control-center/src/components/InfoCard/index.module.scss +++ b/frontend/control-center/src/components/InfoCard/index.module.scss @@ -115,12 +115,13 @@ } .enableModalContainerWrapper { - width: 50%; - height: 70%; + height: 400px; + width: 550px; display: flex; flex-direction: column; justify-content: center; align-items: center; + border-radius: 20px; } .enableModalContainer { @@ -138,6 +139,12 @@ } } +.enableModalContainer button { + margin-top: 14px; + padding: 0 60px; + border-radius: 10px; +} + .headerModal { @include font-xl; } diff --git a/frontend/control-center/src/pages/Catalog/CatalogCard/index.module.scss b/frontend/control-center/src/pages/Catalog/CatalogCard/index.module.scss index d3db45cc0b..4472297f95 100644 --- a/frontend/control-center/src/pages/Catalog/CatalogCard/index.module.scss +++ b/frontend/control-center/src/pages/Catalog/CatalogCard/index.module.scss @@ -114,8 +114,6 @@ } .enableModalContainerWrapper { - width: 50%; - height: 70%; display: flex; flex-direction: column; justify-content: center; diff --git a/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx b/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx index c5287c645f..1e9b015fcc 100644 --- a/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx +++ b/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx @@ -1,8 +1,8 @@ -import React, {useState} from 'react'; +import React, {useRef, useState} from 'react'; import {useNavigate} from 'react-router-dom'; -import {ComponentInfo, getSourceForComponent} from 'model'; +import {ComponentInfo, getSourceForComponent, NotificationModel} from 'model'; import {ReactComponent as CheckmarkIcon} from 'assets/images/icons/checkmarkFilled.svg'; -import {Button, SettingsModal} from 'components'; +import {Button, NotificationComponent, SettingsModal} from 'components'; import {installComponent} from '../../../actions/catalog'; import {useTranslation} from 'react-i18next'; import {connect, ConnectedProps} from 'react-redux'; @@ -13,16 +13,21 @@ import { getCatalogProductRouteForComponent, } from '../getRouteForCard'; import styles from './index.module.scss'; +import {StateModel} from '../../../reducers'; type CatalogCardProps = { componentInfo: ComponentInfo; } & ConnectedProps; +const mapStateToProps = (state: StateModel) => ({ + component: state.data.catalog, +}); + const mapDispatchToProps = { installComponent, }; -const connector = connect(null, mapDispatchToProps); +const connector = connect(mapStateToProps, mapDispatchToProps); export const availabilityFormatted = (availability: string) => availability.split(','); @@ -39,9 +44,13 @@ export const getDescriptionSourceName = (name: string, displayName: string) => { }; const CatalogCard = (props: CatalogCardProps) => { - const {componentInfo, installComponent} = props; - const [isInstalled, setIsInstalled] = useState(componentInfo.installed); + const {component, componentInfo, installComponent} = props; + const isInstalled = component[componentInfo?.name].installed; const [isModalVisible, setIsModalVisible] = useState(false); + const [isInstalling, setIsInstalling] = useState(false); + const [notification, setNotification] = useState(null); + const installButtonCard = useRef(null); + const componentCard = useRef(null); const {t} = useTranslation(); const navigate = useNavigate(); @@ -49,85 +58,121 @@ const CatalogCard = (props: CatalogCardProps) => { const NEW_CHANNEL_ROUTE = getNewChannelRouteForComponent(componentInfo.displayName); const openInstallModal = () => { - setIsModalVisible(true); - installComponent({name: componentInfo.name}); + setIsInstalling(true); + installComponent({name: componentInfo.name}) + .then(() => { + setNotification({show: true, successful: true, text: t('successfullyInstalled')}); + setIsModalVisible(true); + }) + .catch(() => { + setNotification({show: true, successful: false, text: t('failedInstall')}); + }) + .finally(() => { + setIsInstalling(false); + }); }; - const cancelInstallationToggle = () => { + const closeModal = () => { setIsModalVisible(false); - setIsInstalled(!isInstalled); + }; + + const handleCardClick = (e: React.MouseEvent) => { + const isClickOnInstallButton = installButtonCard?.current.contains(e.target); + const isClickOnCard = componentCard?.current.contains(e.target); + + if (!isClickOnInstallButton && isClickOnCard) { + navigate(getCatalogProductRouteForComponent(componentInfo.displayName), {state: {componentInfo}}); + } }; const CatalogCardButton = () => { if (isInstalled) { return ( - ); } return ( - ); }; return ( -
navigate(getCatalogProductRouteForComponent(componentInfo.displayName), {state: {componentInfo}})} - > -
-
- {getChannelAvatar(componentInfo.displayName)} - -
-
-

{componentInfo.displayName}

- -

- {' '} - {t('categories')}: {componentInfo.category}{' '} + <> +

+
+
+ {getChannelAvatar(componentInfo.displayName)} + +
+
+

{componentInfo.displayName}

+ +

+ {' '} + {t('categories')}: {componentInfo.category}{' '} +

+
+
+ +
+ {componentInfo.name && ( +

+ +

+ )} + +

+ + {t('availableFor')}:

+ {componentInfo?.availableFor && + availabilityFormatted(componentInfo.availableFor).map((service: string) => ( + + ))}
-
- -
- {componentInfo.name && ( -

- -

- )} -

- - {t('availableFor')}: -

- {componentInfo?.availableFor && - availabilityFormatted(componentInfo.availableFor).map((service: string) => ( - - ))} -
- - {isModalVisible && ( - } - wrapperClassName={styles.enableModalContainerWrapper} - containerClassName={styles.enableModalContainer} - title={`${componentInfo.displayName} ${t('installed')}`} - close={cancelInstallationToggle} - headerClassName={styles.headerModal} - > - - + {isModalVisible && ( + } + wrapperClassName={styles.enableModalContainerWrapper} + containerClassName={styles.enableModalContainer} + title={`${componentInfo.displayName} ${t('installed')}`} + close={closeModal} + headerClassName={styles.headerModal} + > + + + )} +
+ {notification?.show && ( + )} -
+ ); }; diff --git a/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss b/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss index a487e7b172..9c34dba9a1 100644 --- a/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss +++ b/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss @@ -155,8 +155,6 @@ } .enableModalContainerWrapper { - width: 50%; - height: 70%; display: flex; flex-direction: column; justify-content: center; diff --git a/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.tsx b/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.tsx index 5087abfba5..d34929768e 100644 --- a/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.tsx +++ b/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.tsx @@ -1,37 +1,45 @@ -import React, {useState, useEffect} from 'react'; +import React, {useState} from 'react'; import {Link, useNavigate, useLocation} from 'react-router-dom'; import {useTranslation} from 'react-i18next'; import {connect, ConnectedProps} from 'react-redux'; import {installComponent, uninstallComponent} from '../../../actions/catalog'; -import {ContentWrapper, Button, LinkButton, SettingsModal} from 'components'; +import {ContentWrapper, Button, LinkButton, SettingsModal, NotificationComponent} from 'components'; import {getChannelAvatar} from '../../../components/ChannelAvatar'; import {availabilityFormatted, DescriptionComponent, getDescriptionSourceName} from '../CatalogCard'; import {CATALOG_ROUTE} from '../../../routes/routes'; import {ReactComponent as ArrowLeftIcon} from 'assets/images/icons/leftArrowCircle.svg'; import {ReactComponent as CheckmarkIcon} from 'assets/images/icons/checkmarkFilled.svg'; import {getNewChannelRouteForComponent} from '../getRouteForCard'; -import {ComponentInfo} from 'model'; +import {ComponentInfo, Modal, ModalType, NotificationModel} from 'model'; import styles from './index.module.scss'; +import {StateModel} from '../../../reducers'; + +const mapStateToProps = (state: StateModel) => ({ + component: state.data.catalog, +}); const mapDispatchToProps = { installComponent, uninstallComponent, }; -const connector = connect(null, mapDispatchToProps); +const connector = connect(mapStateToProps, mapDispatchToProps); interface LocationState { componentInfo: ComponentInfo; } const CatalogItemDetails = (props: ConnectedProps) => { - const {installComponent, uninstallComponent} = props; + const {component, installComponent, uninstallComponent} = props; const location = useLocation(); const locationState = location.state as LocationState; const {componentInfo} = locationState; - const [isInstalled, setIsInstalled] = useState(componentInfo.installed); + const isInstalled = component[componentInfo?.name]?.installed; const [isModalVisible, setIsModalVisible] = useState(false); - const [modalTitle, setModalTitle] = useState(''); + const [modal, setModal] = useState(null); + const [isInstalling, setIsInstalling] = useState(false); + const [isUninstalling, setIsUninstalling] = useState(false); + const [notification, setNotification] = useState(null); const {t} = useTranslation(); const navigate = useNavigate(); @@ -40,32 +48,44 @@ const CatalogItemDetails = (props: ConnectedProps) => { const uninstallText = t('uninstall') + ` ${componentInfo.displayName}`; const installText = `${componentInfo.displayName} ` + t('installed'); - useEffect(() => { - const title = isInstalled ? uninstallText : installText; - setModalTitle(title); - }, [isInstalled]); - const openModalInstall = () => { - setIsModalVisible(true); - - if (!isInstalled) installComponent({name: `${componentInfo.name}`}); - }; - - const toggleButtonInstallationStatus = () => { - setIsInstalled(!isInstalled); + if (!isInstalled) { + setIsInstalling(true); + installComponent({name: componentInfo.name}) + .then(() => { + setModal({type: ModalType.install, title: installText}); + setNotification({show: true, successful: true, text: t('successfullyInstalled')}); + setIsModalVisible(true); + }) + .catch(() => { + setNotification({show: true, successful: false, text: t('failedInstall')}); + }) + .finally(() => { + setIsInstalling(false); + }); + } else { + setModal({type: ModalType.uninstall, title: uninstallText}); + setIsModalVisible(true); + } }; const cancelInstallationToggle = () => { setIsModalVisible(false); - - if (!isInstalled) toggleButtonInstallationStatus(); }; const confirmUninstall = () => { - uninstallComponent({name: `${componentInfo.name}`}); - + setIsUninstalling(true); setIsModalVisible(false); - toggleButtonInstallationStatus(); + uninstallComponent({name: `${componentInfo.name}`}) + .then(() => { + setNotification({show: true, successful: true, text: t('successfullyUninstalled')}); + }) + .catch(() => { + setNotification({show: true, successful: false, text: t('failedUninstall')}); + }) + .finally(() => { + setIsUninstalling(false); + }); }; const HeaderContent = () => { @@ -107,9 +127,16 @@ const CatalogItemDetails = (props: ConnectedProps) => { @@ -147,22 +174,22 @@ const CatalogItemDetails = (props: ConnectedProps) => { {isModalVisible && ( : null} + Icon={modal.type === ModalType.install ? : null} wrapperClassName={styles.enableModalContainerWrapper} containerClassName={styles.enableModalContainer} - title={modalTitle} + title={modal.title} close={cancelInstallationToggle} headerClassName={styles.headerModal} > - {isInstalled &&

{t('uninstallComponentText')}

} - {!isInstalled ? ( - - ) : ( + {modal.type === ModalType.uninstall &&

{t('uninstallComponentText')}

} + {modal.type === ModalType.uninstall ? ( + ) : ( + )}
)} @@ -171,14 +198,24 @@ const CatalogItemDetails = (props: ConnectedProps) => { }; return ( - } - sideColumnContent={} - transparent - isSideColumn - content={} - variantHeight="large" - /> + <> + } + sideColumnContent={} + transparent + isSideColumn + content={} + variantHeight="large" + /> + {notification?.show && ( + + )} + ); }; diff --git a/frontend/control-center/src/pages/Catalog/index.module.scss b/frontend/control-center/src/pages/Catalog/index.module.scss index e806ff4d8d..2ee93ce47b 100644 --- a/frontend/control-center/src/pages/Catalog/index.module.scss +++ b/frontend/control-center/src/pages/Catalog/index.module.scss @@ -24,3 +24,43 @@ margin-bottom: 15px; color: var(--color-text-contrast); } + +.notificationAnimation { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + top: 0px; + left: 50%; + margin-left: -120px; + height: 40px; + width: 240px; + z-index: 9999; + border-radius: 10px; +} + +.notificationText { + @include font-base; + color: white; +} + +@keyframes translateYIn { + 0% { + transform: translateY(-50px); + opacity: 0; + } + + 50% { + transform: translateY(16px); + opacity: 1; + } + + 100% { + transform: translateY(-50px); + opacity: 0; + } +} + +.translateYAnimIn { + animation: translateYIn 4s ease-in-out; +} diff --git a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss index eba8258976..9e6b19dd93 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss +++ b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss @@ -274,12 +274,13 @@ } .enableModalContainerWrapper { - width: 50%; - height: 70%; + height: 400px; + width: 550px; display: flex; flex-direction: column; justify-content: center; align-items: center; + border-radius: 20px; } .enableModalContainer { @@ -297,6 +298,12 @@ } } +.enableModalContainer button { + margin-top: 14px; + padding: 0 60px; + border-radius: 10px; +} + .headerModal { @include font-xl; } diff --git a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx index c21103adba..01c7d08a89 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx @@ -2,7 +2,7 @@ import React, {useState, useEffect} from 'react'; import {connect, ConnectedProps, useSelector} from 'react-redux'; import {Link, useParams} from 'react-router-dom'; import {getSourcesInfo, SourceInfo} from '../../../components/SourceInfo'; -import {Button, SettingsModal} from 'components'; +import {Button, NotificationComponent, SettingsModal} from 'components'; import {ReactComponent as CheckmarkIcon} from 'assets/images/icons/checkmarkFilled.svg'; import {StateModel} from '../../../reducers'; import { @@ -14,7 +14,7 @@ import { getConnectorsConfiguration, } from '../../../actions'; import {LinkButton, InfoButton} from 'components'; -import {Source} from 'model'; +import {NotificationModel, Source} from 'model'; import {ReactComponent as ArrowLeftIcon} from 'assets/images/icons/leftArrowCircle.svg'; import {useTranslation} from 'react-i18next'; import {ConnectNewDialogflow} from '../Providers/Dialogflow/ConnectNewDialogflow'; @@ -50,6 +50,7 @@ const mapDispatchToProps = { const mapStateToProps = (state: StateModel) => ({ config: state.data.config, + components: state.data.config.components, }); const connector = connect(mapStateToProps, mapDispatchToProps); @@ -59,14 +60,22 @@ type ConnectorConfigProps = { } & ConnectedProps; const ConnectorConfig = (props: ConnectorConfigProps) => { - const {connector, enableDisableComponent, updateConnectorConfiguration, getConnectorsConfiguration, config} = props; + const { + connector, + components, + enableDisableComponent, + updateConnectorConfiguration, + getConnectorsConfiguration, + config, + } = props; const {channelId, source} = useParams(); const connectorConfiguration = useSelector((state: StateModel) => state.data.connector); const [connectorInfo, setConnectorInfo] = useState(null); const [currentPage] = useState(Pages.createUpdate); const [configurationModal, setConfigurationModal] = useState(false); - const [isEnabled, setIsEnabled] = useState(null); + const [notification, setNotification] = useState(null); + const [isEnabled, setIsEnabled] = useState(components[connectorInfo?.componentName]?.enabled); const [isConfigured, setIsConfigured] = useState(false); const [lineTitle, setLineTitle] = useState(''); const [backTitle, setBackTitle] = useState('Connectors'); @@ -233,15 +242,43 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { const enableDisableComponentToggle = () => { setConfigurationModal(false); - setIsEnabled(!isEnabled); - enableDisableComponent({components: [{name: connectorInfo && connectorInfo?.configKey, enabled: !isEnabled}]}); + enableDisableComponent({components: [{name: connectorInfo && connectorInfo?.configKey, enabled: !isEnabled}]}) + .then(() => { + setIsEnabled(!isEnabled); + setNotification({ + show: true, + successful: true, + text: isEnabled ? t('successfullyDisabled') : t('successfullyEnabled'), + }); + }) + .catch(() => { + setNotification({ + show: true, + successful: false, + text: isEnabled ? t('failedDisabled') : t('failedEnabled'), + }); + }); }; const closeConfigurationModal = () => { setConfigurationModal(false); if (!isEnabled) { - enableDisableComponent({components: [{name: connectorInfo && connectorInfo?.configKey, enabled: true}]}); - setIsEnabled(true); + enableDisableComponent({components: [{name: connectorInfo && connectorInfo?.configKey, enabled: true}]}) + .then(() => { + setIsEnabled(true); + setNotification({ + show: true, + successful: true, + text: t('successfullyEnabled'), + }); + }) + .catch(() => { + setNotification({ + show: true, + successful: false, + text: t('failedEnabled'), + }); + }); } }; @@ -327,6 +364,15 @@ const ConnectorConfig = (props: ConnectorConfigProps) => {
+ {notification?.show && ( + + )} + {configurationModal && ( : null} diff --git a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.module.scss b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.module.scss index 8e3d6e1cac..cb49cc1286 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.module.scss +++ b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.module.scss @@ -180,9 +180,6 @@ align-items: center; justify-content: center; background: var(--color-background-white); - height: 400px; - width: 550px; - border-radius: 20px; } .enableModalContainer { diff --git a/frontend/control-center/src/pages/Connectors/index.tsx b/frontend/control-center/src/pages/Connectors/index.tsx index eb982978f8..035d539411 100644 --- a/frontend/control-center/src/pages/Connectors/index.tsx +++ b/frontend/control-center/src/pages/Connectors/index.tsx @@ -38,6 +38,7 @@ const Connectors = (props: ConnectedProps) => { const catalogList = useSelector((state: StateModel) => state.data.catalog); const channelsBySource = (Source: Source) => channels.filter((channel: Channel) => channel.source === Source); const [sourcesInfo, setSourcesInfo] = useState([]); + const [hasInstalledComponents, setHasInstalledComponents] = useState(false); const navigate = useNavigate(); const pageTitle = 'Connectors'; const isInstalled = true; @@ -46,7 +47,11 @@ const Connectors = (props: ConnectedProps) => { setSourcesInfo(getSourcesInfo()); getConnectorsConfiguration(); if (Object.entries(catalogList).length === 0) listComponents(); - }, []); + if (Object.entries(catalogList).length > 0) + Object.entries(catalogList).map(component => { + component[1].installed === true && setHasInstalledComponents(true); + }); + }, [catalogList]); useEffect(() => { if (channels.length === 0) { @@ -71,7 +76,7 @@ const Connectors = (props: ConnectedProps) => {
)}
- {sourcesInfo.length === 0 ? ( + {!hasInstalledComponents && Object.entries(catalogList).length > 0 ? ( ) : ( <> @@ -79,10 +84,7 @@ const Connectors = (props: ConnectedProps) => { return ( (channelsBySource(infoItem.type).length > 0 && components && - components[infoItem.configKey] && - connectors && - connectors[infoItem.componentName] && - Object.keys(connectors[infoItem?.componentName]) && + components[infoItem?.configKey] && infoItem.channel && isComponentInstalled(infoItem.repository, infoItem.componentName) && ( ) => { channelsToShow={channelsBySource(infoItem.type).length} componentStatus={getComponentStatus( isInstalled, - Object.keys(connectors[infoItem.componentName]).length > 0 || - infoItem.type === Source.chatPlugin, + Object.keys(connectors[infoItem.configKey]).length > 0 || infoItem.type === Source.chatPlugin, components[infoItem.configKey]?.enabled )} key={index} @@ -121,7 +122,7 @@ const Connectors = (props: ConnectedProps) => { installed={true} componentStatus={getComponentStatus( isInstalled, - Object.keys(connectors[infoItem.componentName]).length > 0, + Object.keys(connectors[infoItem.configKey]).length > 0, components[infoItem?.configKey].enabled )} style={InfoCardStyle.normal} diff --git a/frontend/control-center/src/pages/Webhooks/WebhooksListItem/index.tsx b/frontend/control-center/src/pages/Webhooks/WebhooksListItem/index.tsx index ec619d527f..1c29d750d8 100644 --- a/frontend/control-center/src/pages/Webhooks/WebhooksListItem/index.tsx +++ b/frontend/control-center/src/pages/Webhooks/WebhooksListItem/index.tsx @@ -51,16 +51,10 @@ const WebhooksListItem = (props: WebhooksListItemProps) => { () => { setSubscribed(WebhooksStatus.subscribed); props.setShowNotification(true); - setTimeout(() => { - props.setShowNotification(false); - }, 4000); }, (error: Error) => { console.error(error); props.setShowNotification(true, true); - setTimeout(() => { - props.setShowNotification(false); - }, 4000); } ); }; diff --git a/frontend/control-center/src/pages/Webhooks/index.tsx b/frontend/control-center/src/pages/Webhooks/index.tsx index 04ce16798c..74391b0714 100644 --- a/frontend/control-center/src/pages/Webhooks/index.tsx +++ b/frontend/control-center/src/pages/Webhooks/index.tsx @@ -1,7 +1,8 @@ +import React, {useEffect, useState} from 'react'; +import {NotificationComponent} from 'components'; import {SettingsModal} from 'components/alerts/SettingsModal'; import {Button} from 'components/cta/Button'; import {Webhook} from 'model/Webhook'; -import React, {useEffect, useState} from 'react'; import {useTranslation} from 'react-i18next'; import {connect, ConnectedProps} from 'react-redux'; import {listWebhooks, subscribeWebhook, updateWebhook} from '../../actions/webhook'; @@ -11,6 +12,7 @@ import {EmptyState} from './EmptyState'; import styles from './index.module.scss'; import SubscriptionModal from './SubscriptionModal'; import WebhooksListItem from './WebhooksListItem'; +import {NotificationModel} from 'model'; type WebhooksProps = {} & ConnectedProps; @@ -31,9 +33,7 @@ const Webhooks = (props: WebhooksProps) => { const [newWebhook, setNewWebhook] = useState(false); const [isLoading, setIsLoading] = useState(false); const [errorOccurred, setErrorOccurred] = useState(false); - const [showSuccessNotification, setShowSuccessNotification] = useState(false); - const [notificationText, setNotificationText] = useState(''); - const [notifcationColor, setNotifcationColor] = useState(''); + const [notification, setNotification] = useState(null); const {t} = useTranslation(); useEffect(() => { @@ -46,9 +46,8 @@ const Webhooks = (props: WebhooksProps) => { const handleNotification = (show: boolean, error: boolean) => { error - ? (setNotificationText(t('errorOccurred')), setNotifcationColor('#d51548')) - : (setNotificationText(t('successfullySubscribed')), setNotifcationColor('#0da36b')); - setShowSuccessNotification(show); + ? setNotification({show: show, successful: false, text: t('errorOccurred')}) + : setNotification({show: show, successful: true, text: t('successfullySubscribed')}); }; const upsertWebhook = ( @@ -96,29 +95,6 @@ const Webhooks = (props: WebhooksProps) => { ); }; - const SuccessfulSubscribed = () => { - return ( -
- {notificationText} -
- ); - }; - const handleNewWebhook = (openModal: boolean) => { setNewWebhook(openModal); }; @@ -140,7 +116,14 @@ const Webhooks = (props: WebhooksProps) => { ) : ( <> - {showSuccessNotification && } + {notification?.show && ( + + )}
diff --git a/lib/typescript/components/alerts/Notification/index.module.scss b/lib/typescript/components/alerts/Notification/index.module.scss new file mode 100644 index 0000000000..935a41cc36 --- /dev/null +++ b/lib/typescript/components/alerts/Notification/index.module.scss @@ -0,0 +1,93 @@ +@import 'assets/scss/fonts.scss'; + +.notificationContainer { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + top: 16px; + left: 50%; + height: 40px; + min-width: 240px; + z-index: 9999; + border-radius: 10px; +} + +.contentContainer { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + margin-left: 16px; + margin-right: 16px; +} + +.notificationText { + @include font-base; + color: white; +} + +.stickyCloseButton { + position: absolute; + right: 16px; + + &:hover { + cursor: pointer; + } +} + +@keyframes translateYFade { + 0% { + transform: translateY(-50px); + opacity: 0; + } + + 50% { + transform: translateY(0px); + opacity: 1; + } + + 100% { + transform: translateY(-50px); + opacity: 0; + } +} + +@keyframes translateYSticky { + 0% { + transform: translateY(-50px); + opacity: 0; + } + + 100% { + transform: translateY(0px); + opacity: 1; + } +} + +@keyframes translateYStickyClose { + 0% { + transform: translateY(0px); + opacity: 1; + } + + 100% { + transform: translateY(-50px); + opacity: 0; + } +} + +.translateYAnimFade { + animation-name: translateYFade; + animation-timing-function: ease-in-out; +} + +.translateYAnimSticky { + animation-name: translateYSticky; + animation-timing-function: ease-in-out; +} + +.translateYAnimStickyClose { + animation-name: translateYStickyClose; + animation-timing-function: ease-in-out; +} diff --git a/lib/typescript/components/alerts/Notification/index.tsx b/lib/typescript/components/alerts/Notification/index.tsx new file mode 100644 index 0000000000..e7ade78fe8 --- /dev/null +++ b/lib/typescript/components/alerts/Notification/index.tsx @@ -0,0 +1,86 @@ +import {NotificationModel} from 'model'; +import React, {Dispatch, SetStateAction, useEffect, useRef, useState} from 'react'; +import {ReactComponent as CloseIcon} from 'assets/images/icons/close.svg'; +import styles from './index.module.scss'; + +enum NotificationType { + fade = 'fade', + sticky = 'sticky', +} + +type NotificationProps = { + type?: 'fade' | 'sticky'; + show: boolean; + successful?: boolean; + info?: boolean; + text: string; + setShowFalse: Dispatch>; + duration?: number; //in ms +}; + +export const NotificationComponent = (props: NotificationProps) => { + const {type, show, successful, info, text, setShowFalse, duration} = props; + const defaultDuration = 5000; + const [close, setClose] = useState(false); + const [usedDuration, setUsedDuration] = useState(duration || defaultDuration); + const [notificationContainerWidth, setNotificationContainerWidth] = useState(240); + const animType = type || NotificationType.fade; + const notificationRef = useRef(null); + const colorAiryBlue = '#1578d4'; + const colorSoftGreen = '#0da36b'; + const colorRedAlert = '#d51548'; + + setTimeout(() => { + animType === NotificationType.fade && setShowFalse({show: false}); + }, duration || defaultDuration); + + useEffect(() => { + setNotificationContainerWidth(notificationRef.current.offsetWidth); + if (duration) { + if (animType === NotificationType.fade) { + setUsedDuration(duration); + } else { + setUsedDuration(duration / 2); + } + } else { + if (animType === NotificationType.fade) { + setUsedDuration(defaultDuration); + } else { + setUsedDuration(defaultDuration / 2); + } + } + }, []); + + useEffect(() => { + close && + setTimeout(() => { + setShowFalse({show: false}); + setClose(false); + }, duration / 2 || defaultDuration / 2); + }, [close]); + + return ( +
+
+ + {text} + + {type === NotificationType.sticky && ( +
setClose(true)}> + +
+ )} +
+
+ ); +}; diff --git a/lib/typescript/components/alerts/SettingsModal/index.tsx b/lib/typescript/components/alerts/SettingsModal/index.tsx index 6418f63ff3..43dbc4352b 100644 --- a/lib/typescript/components/alerts/SettingsModal/index.tsx +++ b/lib/typescript/components/alerts/SettingsModal/index.tsx @@ -13,6 +13,7 @@ type SettingsModalProps = { Icon?: React.ReactElement | null; headerClassName?: string; style?: CSSProperties; + styleHeader?: CSSProperties; dataCyCloseButton?: string; }; @@ -24,6 +25,7 @@ export const SettingsModal = (props: SettingsModalProps) => { headerClassName, wrapperClassName, style, + styleHeader, containerClassName, Icon, dataCyCloseButton, @@ -37,13 +39,14 @@ export const SettingsModal = (props: SettingsModalProps) => { isOpen={true} shouldCloseOnOverlayClick={true} onRequestClose={close} + style={style} >
{Icon ? Icon : ''} diff --git a/lib/typescript/components/alerts/SettingsModal/style.module.scss b/lib/typescript/components/alerts/SettingsModal/style.module.scss index 1b9f4e5645..142f0d8588 100644 --- a/lib/typescript/components/alerts/SettingsModal/style.module.scss +++ b/lib/typescript/components/alerts/SettingsModal/style.module.scss @@ -20,9 +20,11 @@ transform: translate(-50%, -50%); border: none; background-color: var(--color-background-white); - border-radius: 7px; padding: 2em; outline: none; + min-height: 400px; + min-width: 550px; + border-radius: 20px; } .overlay { diff --git a/lib/typescript/components/alerts/index.ts b/lib/typescript/components/alerts/index.ts index 3234d2c997..41cfdf7566 100644 --- a/lib/typescript/components/alerts/index.ts +++ b/lib/typescript/components/alerts/index.ts @@ -2,3 +2,4 @@ export * from './ErrorMessage'; export * from './ErrorPopUp'; export * from './ErrorNotice'; export * from './SettingsModal'; +export * from './Notification'; diff --git a/lib/typescript/model/Modal.ts b/lib/typescript/model/Modal.ts new file mode 100644 index 0000000000..1ef7eb244a --- /dev/null +++ b/lib/typescript/model/Modal.ts @@ -0,0 +1,9 @@ +export enum ModalType { + install = 'install', + uninstall = 'uninstall', +} + +export type Modal = { + type: ModalType; + title: string; +}; diff --git a/lib/typescript/model/Notification.ts b/lib/typescript/model/Notification.ts new file mode 100644 index 0000000000..34d0a65842 --- /dev/null +++ b/lib/typescript/model/Notification.ts @@ -0,0 +1,5 @@ +export type NotificationModel = { + show: boolean; + successful?: boolean; + text?: string; +}; diff --git a/lib/typescript/model/index.ts b/lib/typescript/model/index.ts index 1b51cac8ac..263d0b2c7f 100644 --- a/lib/typescript/model/index.ts +++ b/lib/typescript/model/index.ts @@ -6,7 +6,9 @@ export * from './Contact'; export * from './Content'; export * from './Conversation'; export * from './Message'; +export * from './Modal'; export * from './Metadata'; +export * from './Notification'; export * from './Pagination'; export * from './Source'; export * from './SuggestedReply'; diff --git a/lib/typescript/translations/translations.ts b/lib/typescript/translations/translations.ts index 2561980b4a..cc38af0964 100644 --- a/lib/typescript/translations/translations.ts +++ b/lib/typescript/translations/translations.ts @@ -241,10 +241,19 @@ const resources = { update: 'Update', create: 'Create', customize: 'Customize', + successfullyEnabled: 'Successfully enabled', + successfullyDisabled: 'Successfully disabled', + failedEnabled: 'Failed to enable', + failedDisabled: 'Failed to disable', install: 'Install', + installing: 'Installing...', uninstall: 'Uninstall', + uninstalling: 'Uninstalling...', uninstalled: 'uninstalled', - + successfullyInstalled: 'Successfully installed', + successfullyUninstalled: 'Successfully uninstalled', + failedInstall: 'Failed to install', + failedUninstall: 'Failed to uninstall', addAName: 'Add a name', settings: 'Settings', installCustomize: 'Install & Customize', @@ -657,8 +666,18 @@ const resources = { update: 'Aktualisieren', create: 'Erstellen', customize: 'Anpassen', + successfullyEnabled: 'Erfolgreich aktiviert', + successfullyDisabled: 'Erfolgreich deaktiviert', + failedEnabled: 'Aktivierung fehlgeschlagen', + failedDisabled: 'Deaktivierung fehlgeschlagen', install: 'Installieren', + installing: 'Installierend...', + successfullyInstalled: 'Erfolgreich installiert', + successfullyUninstalled: 'Erfolgreich deinstalliert', + failedInstall: 'Installation ist fehlgeschlagen', + failedUninstall: 'Deinstallation fehlgeschlagen', uninstall: 'Deinstallieren', + uninstalling: 'Deinstalliert...', uninstalled: 'deinstalliert', addAName: 'Namen hinzufügen', settings: 'Einstellungen', @@ -1064,8 +1083,18 @@ const resources = { update: 'Mise à jour', create: 'Créer', customize: 'Personnaliser', + successfullyEnabled: 'Activé avec succès', + successfullyDisabled: 'Désactivé avec succès', + failedEnabled: `Échec de l'activation`, + failedDisabled: 'Échec de la désactivation', install: 'Installer', + installing: 'Installation...', + successfullyInstalled: 'Installation réussie', + successfullyUninstalled: 'Successfully uninstalled', + failedInstall: `L'installation a échoué`, + failedUninstall: 'Échec de la désinstallation', uninstall: 'Désinstaller', + uninstalling: 'Désinstallation...', uninstalled: 'désinstallé', addAName: 'Ajouter un nom', settings: 'Paramètres', @@ -1475,8 +1504,18 @@ const resources = { update: 'Actualización', create: 'Crear', customize: 'Personalizar', + successfullyEnabled: 'Activado con éxito', + successfullyDisabled: 'Desactivado con éxito', + failedEnabled: 'Fallo en la activación', + failedDisabled: 'Fallo en la desactivación', install: 'Instalar', + installing: 'Instalando...', + successfullyInstalled: 'Instalado con éxito', + successfullyUninstalled: 'Desinstalado con éxito', + failedInstall: 'Fallo en la instalación', + failedUninstall: 'Fallo en la desinstalación', uninstall: 'Desinstalar', + uninstalling: 'Desinstalando...', uninstalled: 'desinstalado', addAName: 'Añadir un nombre', settings: 'Ajustes', From dc76c350a3f405631077da326d919e1826f3f879 Mon Sep 17 00:00:00 2001 From: Audrey Kadjar Date: Mon, 15 Aug 2022 16:12:10 +0200 Subject: [PATCH 71/92] [#3571] update dialogflow configuration form (#3576) * form fix wip * wip * form update fix * dialogflow fix * fixed docs * type fix --- docs/docs/api/endpoints/components.md | 2 +- .../src/components/SourceInfo/index.tsx | 2 +- .../Connectors/ConnectorConfig/index.tsx | 13 +++- .../Dialogflow/ConnectNewDialogflow.tsx | 77 ++++++++++++++++++- lib/typescript/translations/translations.ts | 24 ++++++ 5 files changed, 112 insertions(+), 6 deletions(-) diff --git a/docs/docs/api/endpoints/components.md b/docs/docs/api/endpoints/components.md index ab22e62c47..f1244b166f 100644 --- a/docs/docs/api/endpoints/components.md +++ b/docs/docs/api/endpoints/components.md @@ -172,7 +172,7 @@ Uninstall an existing component. ```json { - "name": "airy-enterprise/dialogflow-connector" + "name": "airy-enterprise/enterprise-dialogflow-connector" } ``` diff --git a/frontend/control-center/src/components/SourceInfo/index.tsx b/frontend/control-center/src/components/SourceInfo/index.tsx index 5d2e0ccbd9..3e4e65d3eb 100644 --- a/frontend/control-center/src/components/SourceInfo/index.tsx +++ b/frontend/control-center/src/components/SourceInfo/index.tsx @@ -161,7 +161,7 @@ export const getSourcesInfo = (): SourceInfo[] => { componentName: 'enterprise-dialogflow-connector', repository: 'airy-enterprise', itemInfoString: 'connectors', - docs: 'https://dialogflow.cloud.google.com/cx/projects', + docs: 'https://airy.co/docs/enterprise/apps/dialogflow/deployment', }, { type: Source.zendesk, diff --git a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx index 01c7d08a89..c6f9a5e324 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx @@ -125,7 +125,15 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { let payload: UpdateComponentConfigurationRequestPayload; if (connector === Source.dialogflow) { - const [projectId, appCredentials, suggestionConfidenceLevel, replyConfidenceLevel] = args; + const [ + projectId, + appCredentials, + suggestionConfidenceLevel, + replyConfidenceLevel, + processorWaitingTime, + processorCheckPeriod, + defaultLanguage, + ] = args; payload = { components: [ @@ -137,6 +145,9 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { dialogflowCredentials: appCredentials, suggestionConfidenceLevel: suggestionConfidenceLevel, replyConfidenceLevel: replyConfidenceLevel, + connectorStoreMessagesProcessorMaxWaitMillis: processorWaitingTime, + connectorStoreMessagesProcessorCheckPeriodMillis: processorCheckPeriod, + connectorDefaultLanguage: defaultLanguage, }, }, ], diff --git a/frontend/control-center/src/pages/Connectors/Providers/Dialogflow/ConnectNewDialogflow.tsx b/frontend/control-center/src/pages/Connectors/Providers/Dialogflow/ConnectNewDialogflow.tsx index 8b895cb561..86b145ea26 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Dialogflow/ConnectNewDialogflow.tsx +++ b/frontend/control-center/src/pages/Connectors/Providers/Dialogflow/ConnectNewDialogflow.tsx @@ -11,7 +11,10 @@ type ConnectNewDialogflowProps = { projectId: string, appCredentials: string, suggestionConfidenceLevel: string, - replyConfidenceLevel: string + replyConfidenceLevel: string, + processorWaitingTime: string, + processorCheckPeriod: string, + defaultLanguage: string ) => void; isEnabled: boolean; isConfigured: boolean; @@ -26,6 +29,13 @@ export const ConnectNewDialogflow = ({createNewConnection, isEnabled, isConfigur ); const [replyConfidenceLevel, setReplyConfidenceLevel] = useState(componentInfo?.replyConfidenceLevel || ''); const [isUpdateModalVisible, setIsUpdateModalVisible] = useState(false); + const [processorWaitingTime, setProcessorWaitingTime] = useState( + componentInfo?.connectorStoreMessagesProcessorMaxWaitMillis || '5000' + ); + const [processorCheckPeriod, setProcessorCheckPeriod] = useState( + componentInfo?.connectorStoreMessagesProcessorCheckPeriodMillis || '2500' + ); + const [defaultLanguage, setDefaultLanguage] = useState(componentInfo?.connectorDefaultLanguage || 'en'); const {t} = useTranslation(); @@ -39,7 +49,15 @@ export const ConnectNewDialogflow = ({createNewConnection, isEnabled, isConfigur }; const enableSubmitConfigData = () => { - createNewConnection(projectID, appCredentials, suggestionConfidenceLevel, replyConfidenceLevel); + createNewConnection( + projectID, + appCredentials, + suggestionConfidenceLevel, + replyConfidenceLevel, + processorWaitingTime, + processorCheckPeriod, + defaultLanguage + ); }; return ( @@ -48,7 +66,15 @@ export const ConnectNewDialogflow = ({createNewConnection, isEnabled, isConfigur isUpdateModalVisible={isUpdateModalVisible} setIsUpdateModalVisible={setIsUpdateModalVisible} enableSubmitConfigData={enableSubmitConfigData} - disabled={!projectID || !appCredentials || !suggestionConfidenceLevel || !replyConfidenceLevel} + disabled={ + !projectID || + !appCredentials || + !suggestionConfidenceLevel || + !replyConfidenceLevel || + !processorWaitingTime || + !processorCheckPeriod || + !defaultLanguage + } isConfigured={isConfigured} updateConfig={updateConfig} > @@ -119,6 +145,51 @@ export const ConnectNewDialogflow = ({createNewConnection, isEnabled, isConfigur fontClass="font-base" />
+
+ ) => setProcessorWaitingTime(e.target.value)} + label={t('processorWaitingTime')} + placeholder={t('processorWaitingTime')} + showLabelIcon + tooltipText={t('waitingDefault')} + required + height={32} + fontClass="font-base" + /> +
+
+ ) => setProcessorCheckPeriod(e.target.value)} + label={t('processorCheckPeriod')} + placeholder={t('processorCheckPeriod')} + showLabelIcon + tooltipText={t('checkDefault')} + required + height={32} + fontClass="font-base" + /> +
+
+ ) => setDefaultLanguage(e.target.value)} + label={t('defaultLanguage')} + placeholder={t('defaultLanguage')} + showLabelIcon + tooltipText={t('defaultLanguageTooltip')} + required + height={32} + fontClass="font-base" + /> +
); }; diff --git a/lib/typescript/translations/translations.ts b/lib/typescript/translations/translations.ts index cc38af0964..5a41af20e4 100644 --- a/lib/typescript/translations/translations.ts +++ b/lib/typescript/translations/translations.ts @@ -298,6 +298,12 @@ const resources = { amountSuggestions: 'amount for suggestions', amountReplies: 'amount for replies', to: 'to', + processorWaitingTime: 'Processor waiting time', + processorCheckPeriod: 'Processor check period', + waitingDefault: 'Default value: 5000', + checkDefault: 'Default value: 2500', + defaultLanguage: 'Default language', + defaultLanguageTooltip: 'Default value: en', //Salesforce salesforceDescription: @@ -723,6 +729,12 @@ const resources = { fromCloudConsole: 'gegeben von der Cloud Console', amountSuggestions: 'Anzahl der Vorschläge', amountReplies: 'Anzahl der Antworten', + processorWaitingTime: 'Prozessor Wartezeit', + processorCheckPeriod: 'Prozessorprüfungszeitraum', + waitingDefault: 'Standardwert: 5000', + checkDefault: 'Standardwert: 2500', + defaultLanguage: 'Standardsprache', + defaultLanguageTooltip: 'Standardwert: en', //Salesforce salesforceDescription: @@ -1125,6 +1137,12 @@ const resources = { amountSuggestions: 'niveau pour les suggestions', amountReplies: 'niveau pour les réponses', to: 'à', + processorWaitingTime: 'Délai du processeur', + processorCheckPeriod: 'Délai de vérification du processeur', + waitingDefault: 'valeur par défaut: 5000', + checkDefault: 'valeur par défaut: 2500', + defaultLanguage: 'Langue utilisée', + defaultLanguageTooltip: 'valeur par défaut: en', //Salesforce salesforceDescription: 'Augmentez vos performances commerciales avec la plateforme CRM n° 1 au monde.', @@ -1562,6 +1580,12 @@ const resources = { fromCloudConsole: 'dado por la Cloud Console', amountSuggestions: 'nivel para sugerencias', amountReplies: 'nivel para respuestas', + processorWaitingTime: 'Tiempo de espera del procesador', + processorCheckPeriod: 'Período de verificación del procesador', + waitingDefault: 'valor por defecto: 5000', + checkDefault: 'valor por defecto: 2500', + defaultLanguage: 'Idioma por defecto', + defaultLanguageTooltip: 'valor por defecto: en', //Salesforce salesforceDescription: 'Aumente sus resultados de ventas con la plataforma de CRM n.º 1 del mundo.', From 00ae05ccf05b69fed278d0818d4fffec97213e5f Mon Sep 17 00:00:00 2001 From: Thorsten Date: Mon, 15 Aug 2022 16:21:17 +0200 Subject: [PATCH 72/92] [#3529] Align title fontsize customize and install --- .../InstallSection/InstallSection.module.scss | 2 +- .../Connectors/Providers/Google/GoogleConnect.tsx | 11 +---------- .../Providers/Instagram/InstagramConnect.tsx | 12 +----------- .../index.module.scss | 0 .../index.tsx | 0 lib/typescript/components/alerts/index.ts | 2 +- 6 files changed, 4 insertions(+), 23 deletions(-) rename lib/typescript/components/alerts/{Notification => NotificationComponent}/index.module.scss (100%) rename lib/typescript/components/alerts/{Notification => NotificationComponent}/index.tsx (100%) diff --git a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/InstallSection/InstallSection.module.scss b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/InstallSection/InstallSection.module.scss index 425b195c33..05a09ea1e3 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/InstallSection/InstallSection.module.scss +++ b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/InstallSection/InstallSection.module.scss @@ -3,7 +3,7 @@ .container { h1 { - @include font-xl; + @include font-l; font-weight: 700; } h2 { diff --git a/frontend/control-center/src/pages/Connectors/Providers/Google/GoogleConnect.tsx b/frontend/control-center/src/pages/Connectors/Providers/Google/GoogleConnect.tsx index 57cba57b29..61486fe0fe 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Google/GoogleConnect.tsx +++ b/frontend/control-center/src/pages/Connectors/Providers/Google/GoogleConnect.tsx @@ -3,9 +3,8 @@ import {connect, ConnectedProps} from 'react-redux'; import {connectGoogleChannel} from '../../../../actions'; -import {Button, Input, LinkButton, InfoButton} from 'components'; +import {Button, Input} from 'components'; import {ConnectChannelGoogleRequestPayload} from 'httpclient/src'; -import {ReactComponent as ArrowLeftIcon} from 'assets/images/icons/arrowLeft.svg'; import styles from './GoogleConnect.module.scss'; @@ -64,14 +63,6 @@ const GoogleConnect = (props: ConnectedProps) => { return (
-

{t('googleTitle')}

-
- - navigate(-1)} type="button"> - - {t('back')} - -
) => { return (
-

Instagram

-
- - - navigate(-1)} type="button"> - - {t('back')} - -
Date: Mon, 15 Aug 2022 19:25:20 +0200 Subject: [PATCH 73/92] Bump emoji-mart from 5.2.0 to 5.2.1 (#3587) Bumps [emoji-mart](https://github.com/missive/emoji-mart/tree/HEAD/packages/emoji-mart) from 5.2.0 to 5.2.1. - [Release notes](https://github.com/missive/emoji-mart/releases) - [Commits](https://github.com/missive/emoji-mart/commits/v5.2.1/packages/emoji-mart) --- updated-dependencies: - dependency-name: emoji-mart dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5b66cff62f..695368a54a 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "audio-recorder-polyfill": "^0.4.1", "camelcase-keys": "^7.0.2", "core-js": "3.24.1", - "emoji-mart": "^5.2.0", + "emoji-mart": "^5.2.1", "form-data": "^4.0.0", "i18next": "^21.9.0", "isomorphic-fetch": "^3.0.0", diff --git a/yarn.lock b/yarn.lock index a82ef3f0ee..c92e6b328c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3704,10 +3704,10 @@ emittery@^0.10.2: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== -emoji-mart@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/emoji-mart/-/emoji-mart-5.2.0.tgz#e6e30df81f75c6c5150f77a7c6714e05c3798e45" - integrity sha512-0ZTIbemlRjEV0ydF8lDqho2N5l4M7qdNFWGp+w3v32D+F6+DYsmuaZr/k4O79EBvqlDx6rx+B8jeaH2qa0ZNDQ== +emoji-mart@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/emoji-mart/-/emoji-mart-5.2.1.tgz#eccd7d650e7bc042a07834a263b87c8153f214e5" + integrity sha512-q6lz1u8TrGrO5Bv8dL2Z5atTRQaci3YzUfbYN0MzlLmIKdRt3N6vNT7uvCWRKc1tERrI45sn0nQYk3g99cBr/w== emoji-regex@^8.0.0: version "8.0.0" From 236dec1e051a235aa90dc8e6331f85fe6f6c2f18 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 19:26:49 +0200 Subject: [PATCH 74/92] Bump sass from 1.54.3 to 1.54.4 (#3586) Bumps [sass](https://github.com/sass/dart-sass) from 1.54.3 to 1.54.4. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.54.3...1.54.4) --- updated-dependencies: - dependency-name: sass dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 695368a54a..c64b36433b 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "prettier": "^2.7.1", "react-hot-loader": "^4.13.0", "react-test-renderer": "^18.2.0", - "sass": "^1.54.3", + "sass": "^1.54.4", "sass-loader": "^13.0.2", "style-loader": "^3.3.1", "terser-webpack-plugin": "^5.3.4", diff --git a/yarn.lock b/yarn.lock index c92e6b328c..52c3d7ecaf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7342,10 +7342,10 @@ sass-loader@^13.0.2: klona "^2.0.4" neo-async "^2.6.2" -sass@^1.54.3: - version "1.54.3" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.3.tgz#37baa2652f7f1fdadb73240ee9a2b9b81fabb5c4" - integrity sha512-fLodey5Qd41Pxp/Tk7Al97sViYwF/TazRc5t6E65O7JOk4XF8pzwIW7CvCxYVOfJFFI/1x5+elDyBIixrp+zrw== +sass@^1.54.4: + version "1.54.4" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.4.tgz#803ff2fef5525f1dd01670c3915b4b68b6cba72d" + integrity sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From 6455a70eb948d9e3b0bfe6b4af1050b3d887d5da Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 19:27:45 +0200 Subject: [PATCH 75/92] Bump preact from 10.10.1 to 10.10.2 (#3584) Bumps [preact](https://github.com/preactjs/preact) from 10.10.1 to 10.10.2. - [Release notes](https://github.com/preactjs/preact/releases) - [Commits](https://github.com/preactjs/preact/compare/10.10.1...10.10.2) --- updated-dependencies: - dependency-name: preact dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c64b36433b..ecb6a0e53e 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "linkify-react": "^3.0.4", "linkifyjs": "^3.0.5", "lodash-es": "^4.17.21", - "preact": "^10.10.1", + "preact": "^10.10.2", "react": "18.2.0", "react-autosize-textarea": "^7.1.0", "react-color": "^2.19.3", diff --git a/yarn.lock b/yarn.lock index 52c3d7ecaf..5ea1fdedd5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6719,10 +6719,10 @@ postcss@^8.4.7: picocolors "^1.0.0" source-map-js "^1.0.2" -preact@^10.10.1: - version "10.10.1" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.10.1.tgz#df67e4348f50fc6ad2e11e813553f15c6543176b" - integrity sha512-cXljG59ylGtSLismoLojXPAGvnh2ipQr3BYz9KZQr+1sdASCT+sR/v8dSMDS96xGCdtln2wHfAHCnLJK+XcBNg== +preact@^10.10.2: + version "10.10.2" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.10.2.tgz#3460d456d84c4701af33ac37e9bd3054271d5b1e" + integrity sha512-GUXSsfwq4NKhlLYY5ctfNE0IjFk7Xo4952yPI8yMkXdhzeQmQ+FahZITe7CeHXMPyKBVQ8SoCmGNIy9TSOdhgQ== prelude-ls@^1.2.1: version "1.2.1" From 33abd661f478725cc1e953de0f5a69a49a99d6a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 19:31:25 +0200 Subject: [PATCH 76/92] Bump ts-jest from 28.0.7 to 28.0.8 (#3583) Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 28.0.7 to 28.0.8. - [Release notes](https://github.com/kulshekhar/ts-jest/releases) - [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/kulshekhar/ts-jest/compare/v28.0.7...v28.0.8) --- updated-dependencies: - dependency-name: ts-jest dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index ecb6a0e53e..1db1a81981 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "redux": "^4.2.0", "regenerator-runtime": "^0.13.9", "reselect": "4.1.6", - "ts-jest": "^28.0.7", + "ts-jest": "^28.0.8", "ts-node": "^10.9.1", "typesafe-actions": "^5.1.0" }, diff --git a/yarn.lock b/yarn.lock index 5ea1fdedd5..7431124680 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8005,10 +8005,10 @@ trough@^2.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== -ts-jest@^28.0.7: - version "28.0.7" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-28.0.7.tgz#e18757a9e44693da9980a79127e5df5a98b37ac6" - integrity sha512-wWXCSmTwBVmdvWrOpYhal79bDpioDy4rTT+0vyUnE3ZzM7LOAAGG9NXwzkEL/a516rQEgnMmS/WKP9jBPCVJyA== +ts-jest@^28.0.8: + version "28.0.8" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-28.0.8.tgz#cd204b8e7a2f78da32cf6c95c9a6165c5b99cc73" + integrity sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg== dependencies: bs-logger "0.x" fast-json-stable-stringify "2.x" From de169e5ae343b082f85dc7e04ac61b7020be6c0e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 19:32:44 +0200 Subject: [PATCH 77/92] Bump webpack-dev-server from 4.9.3 to 4.10.0 (#3585) Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 4.9.3 to 4.10.0. - [Release notes](https://github.com/webpack/webpack-dev-server/releases) - [Changelog](https://github.com/webpack/webpack-dev-server/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-dev-server/compare/v4.9.3...v4.10.0) --- updated-dependencies: - dependency-name: webpack-dev-server dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 1db1a81981..07e0e77d18 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "webpack": "^5.74.0", "webpack-bundle-analyzer": "^4.5.0", "webpack-cli": "^4.10.0", - "webpack-dev-server": "^4.9.3" + "webpack-dev-server": "^4.10.0" }, "resolutions": { "@types/react": "18.0.17" diff --git a/yarn.lock b/yarn.lock index 7431124680..7781197b37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8454,10 +8454,10 @@ webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.9.3: - version "4.9.3" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz#2360a5d6d532acb5410a668417ad549ee3b8a3c9" - integrity sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw== +webpack-dev-server@^4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.10.0.tgz#de270d0009eba050546912be90116e7fd740a9ca" + integrity sha512-7dezwAs+k6yXVFZ+MaL8VnE+APobiO3zvpp3rBHe/HmWQ+avwh0Q3d0xxacOiBybZZ3syTZw9HXzpa3YNbAZDQ== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" From c4015139981bbf71c422fe7a58fa65e3339f80ca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 20:23:06 +0200 Subject: [PATCH 78/92] Bump @types/node from 18.7.3 to 18.7.4 (#3597) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 18.7.3 to 18.7.4. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 07e0e77d18..623b5e9e40 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "@testing-library/react": "13.3.0", "@types/dom-mediacapture-record": "^1.0.11", "@types/lodash-es": "^4.17.6", - "@types/node": "18.7.3", + "@types/node": "18.7.4", "@types/react": "18.0.17", "@types/react-dom": "18.0.6", "@types/react-redux": "7.1.24", diff --git a/yarn.lock b/yarn.lock index 7781197b37..dced93a2e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1969,10 +1969,10 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== -"@types/node@*", "@types/node@18.7.3": - version "18.7.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.3.tgz#432c89796eab539b7a30b7b8801a727b585238a4" - integrity sha512-LJgzOEwWuMTBxHzgBR/fhhBOWrvBjvO+zPteUgbbuQi80rYIZHrk1mNbRUqPZqSLP2H7Rwt1EFLL/tNLD1Xx/w== +"@types/node@*", "@types/node@18.7.4": + version "18.7.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.4.tgz#95baa50846ae112a7376869d49fec23b2506c69d" + integrity sha512-RzRcw8c0B8LzryWOR4Wj7YOTFXvdYKwvrb6xQQyuDfnlTxwYXGCV5RZ/TEbq5L5kn+w3rliHAUyRcG1RtbmTFg== "@types/node@^14.14.31": version "14.18.18" From b8448332e7cdb3af98f1a519b44b271903c050d5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 20:23:25 +0200 Subject: [PATCH 79/92] Bump react-i18next from 11.18.3 to 11.18.4 (#3596) Bumps [react-i18next](https://github.com/i18next/react-i18next) from 11.18.3 to 11.18.4. - [Release notes](https://github.com/i18next/react-i18next/releases) - [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md) - [Commits](https://github.com/i18next/react-i18next/compare/v11.18.3...v11.18.4) --- updated-dependencies: - dependency-name: react-i18next dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 623b5e9e40..1941ed2dab 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "react-autosize-textarea": "^7.1.0", "react-color": "^2.19.3", "react-dom": "18.2.0", - "react-i18next": "^11.18.3", + "react-i18next": "^11.18.4", "react-markdown": "^8.0.2", "react-modal": "^3.14.4", "react-redux": "8.0.2", diff --git a/yarn.lock b/yarn.lock index dced93a2e0..1997eb2f3a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6927,10 +6927,10 @@ react-hot-loader@^4.13.0: shallowequal "^1.1.0" source-map "^0.7.3" -react-i18next@^11.18.3: - version "11.18.3" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.18.3.tgz#50211810bcc9fdea2d70c8aefdfff5f1eb39a923" - integrity sha512-EttTX31HbqzZymUM3SIrMPuvamfSXFZVsDHm/ZAqoDfTLjhzlwyxqfbDNxcKNAGOi2mjZaXfR7hSNMlvLNpB/g== +react-i18next@^11.18.4: + version "11.18.4" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.18.4.tgz#b3c35ac4c4657b05d599b036536d7b2c0331e248" + integrity sha512-gK/AylAQC5DvCD5YLNCHW4PNzpCfrWIyVAXbSMl+/5QXzlDP8VdBoqE2s2niGHB+zIXwBV9hRXbDrVuupbgHcg== dependencies: "@babel/runtime" "^7.14.5" html-parse-stringify "^3.0.1" From 9e1f35875de52f6fa23a581d723e4da9caf7379e Mon Sep 17 00:00:00 2001 From: Arman Jindal <58370547+armanjindal@users.noreply.github.com> Date: Tue, 16 Aug 2022 16:05:55 +0200 Subject: [PATCH 80/92] [#3558] Docs for Contributing Components and Base Definition of Component (#3574) --- .../getting-started/componentDefinition.mdx | 1 + docs/docs/getting-started/components.md | 8 ++- docs/docs/getting-started/glossary.md | 8 ++- docs/docs/guides/contributing-components.md | 61 +++++++++++++++++++ ...ontributing.md => contributing-to-airy.md} | 4 +- docs/sidebars.js | 3 +- 6 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 docs/docs/getting-started/componentDefinition.mdx create mode 100644 docs/docs/guides/contributing-components.md rename docs/docs/guides/{contributing.md => contributing-to-airy.md} (99%) diff --git a/docs/docs/getting-started/componentDefinition.mdx b/docs/docs/getting-started/componentDefinition.mdx new file mode 100644 index 0000000000..e462e38aa7 --- /dev/null +++ b/docs/docs/getting-started/componentDefinition.mdx @@ -0,0 +1 @@ +A component is a [Helm Chart](https://helm.sh/docs/topics/charts/) (a package of Kubernetes resources) that represents a functional unit in an Airy instance. diff --git a/docs/docs/getting-started/components.md b/docs/docs/getting-started/components.md index 630a9df1be..249e9ac287 100644 --- a/docs/docs/getting-started/components.md +++ b/docs/docs/getting-started/components.md @@ -22,9 +22,15 @@ Airy Core comes with all the components you need for a fully-featured conversati +## Definition + +import ComponentDefinition from '../getting-started/componentDefinition.mdx' + + + ## Component types -Airy Core contains the following core components: +Airy Core contains the following components: -Airy Core allows its [users](#user) to process messaging data from a variety of +Airy allows its [users](#user) to process messaging data from a variety of [sources](#source), which are integrated via [source providers](#provider). Users connect sources via [channels](#channel). Once the channel is connected, Airy Core ingests source data and transforms them into @@ -28,6 +28,12 @@ model and glossary do not correspond exactly. The former is the exact machine representation of the data we store and the latter is a conceptual artifact we created to discuss and solve problems. +## Component + +import ComponentDefinition from './componentDefinition.mdx' + + + ## Channel A channel represents a connection between a [source](#source) and the Airy Core diff --git a/docs/docs/guides/contributing-components.md b/docs/docs/guides/contributing-components.md new file mode 100644 index 0000000000..0ffe639152 --- /dev/null +++ b/docs/docs/guides/contributing-components.md @@ -0,0 +1,61 @@ +--- +title: Contributing Components +sidebar_label: Contributing Components +--- + +:::warning + +This functionality does not yet exist and is under development. With these docs, we aim to elicit feedback from our community (you!) and focus our development efforts. Currently, we do not offer support for 3rd party components, but we are working toward supporting this. + +::: + +## Components + +import ComponentDefinition from '../getting-started/componentDefinition.mdx' + + + +With every [installation of Airy](../getting-started/installation/introduction.md) we bundle a set of default components to get you started: + +1. airy-controller +2. api-admin +3. api-communication +4. api-websocket +5. frontend-inbox +6. frontend-control-center + +Airy also provides a marketplace of _plug and play_ components that extend the functionality of your Airy instance. You can install them through the catalog page in the Control Center UI of your Airy Instance. + +In the following, we will explain how to create, update and store components. + +The Helm package and information on each component (except core components) are stored in an external repository managed by Airy called [airy-components](https://github.com/airyhq/airy-/airy-components). This repository is made up of directories where each directory contains a component's Helm package its description. + +## The Component File Structure + +Below is a model of the file structure of a single component inside the [`airy-components`](https://github.com/airyhq/airy-components) repository. + +``` +airy-components/ +└── [COMPONENT_NAME]/ + ├── description.yaml + └── helm/ + └── [HELM CHART] +``` + +The `helm` directory contains all the files that make up the Helm package. + +The `description.yaml` is the source-of-truth for every component. It includes a description of its functionality, pricing, availability, and version. This file is written by the component maintainer and rendered into the UI of the Control Center. + +:::note + +Since all components are maintained by Airy, the versioning of every component is tied to the version of Airy. However, once we support 3rd party components, we will revisit our versioning system. + +:::: + +## Developing your own Components + +A step-by-step guide to creating your component! + +## Publishing your Component to the Airy Marketplace + +A step-by-step guide to make your component available to the world! diff --git a/docs/docs/guides/contributing.md b/docs/docs/guides/contributing-to-airy.md similarity index 99% rename from docs/docs/guides/contributing.md rename to docs/docs/guides/contributing-to-airy.md index e6dd27ba78..fd9899c310 100644 --- a/docs/docs/guides/contributing.md +++ b/docs/docs/guides/contributing-to-airy.md @@ -1,6 +1,6 @@ --- -title: Contributing -sidebar_label: Contributing +title: Contributing to Airy +sidebar_label: Contributing to Airy --- We ❤️ every form of contribution. The following document aims to provide enough diff --git a/docs/sidebars.js b/docs/sidebars.js index 5fcf92e131..cff15d63d2 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -115,7 +115,8 @@ module.exports = { }, { '📚 Guides': [ - 'guides/contributing', + 'guides/contributing-to-airy', + 'guides/contributing-components', 'guides/analytics-demo', 'guides/monitoring', 'guides/backup', From 821b769806e1725febcd846fb536e3eefe022440 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 16:59:41 +0200 Subject: [PATCH 81/92] Bump @types/jest from 28.1.6 to 28.1.7 (#3598) Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 28.1.6 to 28.1.7. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest) --- updated-dependencies: - dependency-name: "@types/jest" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 1941ed2dab..210f1108fb 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "@stomp/stompjs": "^6.1.2", "@testing-library/jest-dom": "^5.16.5", "@testing-library/user-event": "^14.4.3", - "@types/jest": "^28.1.6", + "@types/jest": "^28.1.7", "audio-recorder-polyfill": "^0.4.1", "camelcase-keys": "^7.0.2", "core-js": "3.24.1", diff --git a/yarn.lock b/yarn.lock index 1997eb2f3a..997d877299 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1913,12 +1913,12 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@*", "@types/jest@^28.1.6": - version "28.1.6" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.6.tgz#d6a9cdd38967d2d746861fb5be6b120e38284dd4" - integrity sha512-0RbGAFMfcBJKOmqRazM8L98uokwuwD5F8rHrv/ZMbrZBwVOWZUyPG6VFNscjYr/vjM3Vu4fRrCPbOs42AfemaQ== +"@types/jest@*", "@types/jest@^28.1.7": + version "28.1.7" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.7.tgz#a680c5d05b69634c2d54a63cb106d7fb1adaba16" + integrity sha512-acDN4VHD40V24tgu0iC44jchXavRNVFXQ/E6Z5XNsswgoSO/4NgsXoEYmPUGookKldlZQyIpmrEXsHI9cA3ZTA== dependencies: - jest-matcher-utils "^28.0.0" + expect "^28.0.0" pretty-format "^28.0.0" "@types/jsdom@^16.2.4": @@ -4095,7 +4095,7 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= -expect@^28.1.3: +expect@^28.0.0, expect@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== @@ -5348,7 +5348,7 @@ jest-leak-detector@^28.1.3: jest-get-type "^28.0.2" pretty-format "^28.1.3" -jest-matcher-utils@^28.0.0, jest-matcher-utils@^28.1.3: +jest-matcher-utils@^28.1.3: version "28.1.3" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== From 9b14e01ecc5e0885d9c3e2b57d1f6370c4a71290 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 17:03:55 +0200 Subject: [PATCH 82/92] Bump @testing-library/dom from 8.16.1 to 8.17.1 (#3595) Bumps [@testing-library/dom](https://github.com/testing-library/dom-testing-library) from 8.16.1 to 8.17.1. - [Release notes](https://github.com/testing-library/dom-testing-library/releases) - [Changelog](https://github.com/testing-library/dom-testing-library/blob/main/CHANGELOG.md) - [Commits](https://github.com/testing-library/dom-testing-library/compare/v8.16.1...v8.17.1) --- updated-dependencies: - dependency-name: "@testing-library/dom" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 210f1108fb..e6bdb4b759 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "@hot-loader/react-dom": "^17.0.2", "@svgr/plugin-svgo": "^6.3.1", "@svgr/webpack": "^6.3.1", - "@testing-library/dom": "^8.16.1", + "@testing-library/dom": "^8.17.1", "@testing-library/react": "13.3.0", "@types/dom-mediacapture-record": "^1.0.11", "@types/lodash-es": "^4.17.6", diff --git a/yarn.lock b/yarn.lock index 997d877299..e47ab8c170 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1662,10 +1662,10 @@ "@svgr/plugin-jsx" "^6.3.1" "@svgr/plugin-svgo" "^6.3.1" -"@testing-library/dom@^8.16.1", "@testing-library/dom@^8.5.0": - version "8.16.1" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.16.1.tgz#96e528c9752d60061128f043e2b43566c0aba2d9" - integrity sha512-XEV2mBxgv6DKjL3+U3WEUzBgT2CjYksoXGlLrrJXYP8OvRfGkBonvelkorazpFlp8tkEecO06r43vN4DIEyegQ== +"@testing-library/dom@^8.17.1", "@testing-library/dom@^8.5.0": + version "8.17.1" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.17.1.tgz#2d7af4ff6dad8d837630fecd08835aee08320ad7" + integrity sha512-KnH2MnJUzmFNPW6RIKfd+zf2Wue8mEKX0M3cpX6aKl5ZXrJM1/c/Pc8c2xDNYQCnJO48Sm5ITbMXgqTr3h4jxQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" From 7811fd139811606b943cce46a7e6f00ac4192169 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 17:04:40 +0200 Subject: [PATCH 83/92] Bump @emoji-mart/data from 1.0.3 to 1.0.5 (#3594) Bumps [@emoji-mart/data](https://github.com/missive/emoji-mart/tree/HEAD/packages/emoji-mart-data) from 1.0.3 to 1.0.5. - [Release notes](https://github.com/missive/emoji-mart/releases) - [Commits](https://github.com/missive/emoji-mart/commits/HEAD/packages/emoji-mart-data) --- updated-dependencies: - dependency-name: "@emoji-mart/data" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index e6bdb4b759..9b32ae5136 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "dependencies": { - "@emoji-mart/data": "^1.0.3", + "@emoji-mart/data": "^1.0.5", "@emoji-mart/react": "^1.0.1", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7", "@reduxjs/toolkit": "^1.8.3", diff --git a/yarn.lock b/yarn.lock index e47ab8c170..a6aa954198 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1155,10 +1155,10 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@emoji-mart/data@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@emoji-mart/data/-/data-1.0.3.tgz#a216a9a8cead038b756d2b882e1c9da0f7777e8a" - integrity sha512-SwxtfLOPiis9iXwWLjZHpUIUwYV/ghfBG6jpVP2HZgCt/dE8Q4r1RQg1Y5TyYBYKk8N5RKuLWJi1DNrEUIWj+A== +"@emoji-mart/data@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@emoji-mart/data/-/data-1.0.5.tgz#62c837f1384eb2f94bec4c0dcfe8d230cc67e81d" + integrity sha512-HulW+jI7w3ghqRN4+i1LZYJ04bdsMJg5fJ7dr6rlVpsIYKmhpVA7/ACl9R3OB5aoMf8dqNdXftVss8qHCoOi+g== "@emoji-mart/react@^1.0.1": version "1.0.1" From 32d8dc75ac8c50a252cff2c221bb1214c97febf9 Mon Sep 17 00:00:00 2001 From: Ljupco Vangelski Date: Tue, 16 Aug 2022 17:11:08 +0200 Subject: [PATCH 84/92] [#3589] Retrieve installed components from cm (#3592) * [#3589] Retrieve installed components from cm * [#3599] Install component with a specific version --- docs/docs/api/endpoints/components.md | 2 +- docs/docs/getting-started/components.md | 28 ++++++++++++++++-- .../endpoints/components_install_uninstall.go | 25 ++++++++++++++++ .../pkg/endpoints/components_list.go | 3 +- .../pkg/endpoints/components_update.go | 29 ++++++++++++------- lib/go/k8s/configmaps.go | 12 ++++++++ 6 files changed, 84 insertions(+), 15 deletions(-) diff --git a/docs/docs/api/endpoints/components.md b/docs/docs/api/endpoints/components.md index f1244b166f..d7b85a224e 100644 --- a/docs/docs/api/endpoints/components.md +++ b/docs/docs/api/endpoints/components.md @@ -35,7 +35,7 @@ The list of the currently configured components is returned. ## Update -Update the configuration of a list of components. The `data` section is optional +Update the configuration of a list of components. The endpoint can accept configuration for multiple components at once. In a case when the configuration for a particular component cannot be applied (for example the component is not fully installed), that component will be omitted and the request will still return a `200`. This component will also not be in the response. The `data` section is optional. `POST /components.update` diff --git a/docs/docs/getting-started/components.md b/docs/docs/getting-started/components.md index 249e9ac287..7873f4a08a 100644 --- a/docs/docs/getting-started/components.md +++ b/docs/docs/getting-started/components.md @@ -79,6 +79,30 @@ Airy Core contains the following components: ## Installation -For installation purposes Airy Core is packaged in a Helm chart which creates all the necessary Kubernetes resources. However, every component is an independent entity and can be installed or uninstalled separately. Every component is packaged in its own independent Helm chart and belongs to a `repository`. By default, the `airy-core` repository is added with the components that can be found under `infrastructure/helm-chart/charts/components/charts`. +For installation purposes Airy Core is packaged in a Helm chart which creates all the necessary Kubernetes resources. However, every component is an independent entity and can be installed or uninstalled separately. Every component is packaged in its own independent Helm chart and belongs to a `repository`. By default, the `airy-core` repository is added with the components that can be found under https://helm.airy.co. -Some components are installed by default, while others can be added or removed later, depending on the particular use case. Components can be managed through the `Control center` or through the [components](/api/endpoints/components) and [repositories](/api/endpoints/repositories) API endpoints. +You can see all the available components either from the `Catalog` in the `Control center`. From the `Control center` you can also install, uninstall, configure, enable or disable the components. + +The following components are part of `Airy Core` and they cannot be uninstalled: + +- airy-controller +- api-admin +- communication +- api-websocket +- frontend-inbox +- frontend-control-center + +Here is a list of the open source components which can be added to `Airy Core`: + +- api-contacts +- integration-source-api +- integration-webhook +- media-resolver +- sources-chatplugin +- sources-facebook +- sources-google +- sources-twilio +- sources-viber +- sources-whatsapp + +More information about the components API can be found [here](/api/endpoints/components). diff --git a/infrastructure/controller/pkg/endpoints/components_install_uninstall.go b/infrastructure/controller/pkg/endpoints/components_install_uninstall.go index 92513430eb..d2d9ea84cc 100644 --- a/infrastructure/controller/pkg/endpoints/components_install_uninstall.go +++ b/infrastructure/controller/pkg/endpoints/components_install_uninstall.go @@ -46,6 +46,13 @@ func (s *ComponentsInstallUninstall) ServeHTTP(w http.ResponseWriter, r *http.Re return } + chartVersion, err := s.getVersion(r.Context()) + if err != nil { + klog.Error(err.Error()) + w.WriteHeader(http.StatusInternalServerError) + return + } + chartSpec := &helmCli.ChartSpec{ ReleaseName: releaseName, ChartName: chartName, @@ -53,6 +60,7 @@ func (s *ComponentsInstallUninstall) ServeHTTP(w http.ResponseWriter, r *http.Re UpgradeCRDs: true, Replace: true, Force: true, + Version: chartVersion, ValuesYaml: globals, } @@ -100,6 +108,23 @@ func (s *ComponentsInstallUninstall) getGlobals(ctx context.Context) (string, er return globals, nil } +func (s *ComponentsInstallUninstall) getVersion(ctx context.Context) (string, error) { + configMap, err := s.ClientSet.CoreV1().ConfigMaps(s.Namespace).Get(ctx, "core-config", metav1.GetOptions{}) + if err != nil { + return "", err + } + + var version string + if configMap.Data != nil { + version = configMap.Data["APP_IMAGE_TAG"] + } + if version == "" { + return "", fmt.Errorf("unable to retrieve version") + } + + return version, nil +} + func getChartNameFromBlob(blob []byte) (string, string, error) { var installComponent payloads.ComponentsInstallRequestPayload diff --git a/infrastructure/controller/pkg/endpoints/components_list.go b/infrastructure/controller/pkg/endpoints/components_list.go index 00237f1f1e..30a8a6afdd 100644 --- a/infrastructure/controller/pkg/endpoints/components_list.go +++ b/infrastructure/controller/pkg/endpoints/components_list.go @@ -7,6 +7,7 @@ import ( "net/http" "github.com/airyhq/airy/infrastructure/controller/pkg/cache" + "github.com/airyhq/airy/lib/go/k8s" "k8s.io/client-go/kubernetes" "k8s.io/helm/cmd/helm/search" "k8s.io/klog" @@ -20,7 +21,7 @@ type ComponentsList struct { } func (s *ComponentsList) ServeHTTP(w http.ResponseWriter, r *http.Request) { - deployedCharts := s.DeployedCharts.GetDeployedCharts() + deployedCharts, err := k8s.GetInstalledComponents(r.Context(), s.Namespace, s.ClientSet) components, err := getComponentsDetailsFromCloud() if err != nil { diff --git a/infrastructure/controller/pkg/endpoints/components_update.go b/infrastructure/controller/pkg/endpoints/components_update.go index c74b599f70..183ea66b4d 100644 --- a/infrastructure/controller/pkg/endpoints/components_update.go +++ b/infrastructure/controller/pkg/endpoints/components_update.go @@ -1,8 +1,8 @@ package endpoints import ( + "context" "encoding/json" - "fmt" "io/ioutil" "net/http" "strconv" @@ -39,12 +39,16 @@ func (s *ComponentsUpdate) ServeHTTP(w http.ResponseWriter, r *http.Request) { responseComponents.Components = make(map[string]bool) for _, component := range requestComponents.Components { - if !s.isComponentInstalled(component.Name) { - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusBadRequest) - w.Write([]byte(fmt.Sprintf(`{"error": "component %s is not installed"}`, component.Name))) + componentInstalled, err := s.isComponentInstalled(component.Name) + if err != nil { + klog.Error("Unable to retrieve the status of the component:" + component.Name + "\nError:\n" + err.Error()) + http.Error(w, err.Error(), http.StatusInternalServerError) return } + if !componentInstalled { + klog.Error("Trying to apply configuration for a component that is not installed: " + component.Name) + continue + } labels := map[string]string{ "core.airy.co/component": component.Name, @@ -52,8 +56,8 @@ func (s *ComponentsUpdate) ServeHTTP(w http.ResponseWriter, r *http.Request) { annotations := map[string]string{ "core.airy.co/enabled": strconv.FormatBool(component.Enabled), } - applyErr := k8s.ApplyConfigMap(component.Name, s.namespace, payloads.ToCamelCase(component.Data), labels, annotations, s.clientSet, r.Context()) - if applyErr != nil { + err = k8s.ApplyConfigMap(component.Name, s.namespace, payloads.ToCamelCase(component.Data), labels, annotations, s.clientSet, r.Context()) + if err != nil { klog.Error("Unable to apply configuration for component:" + component.Name + "\nError:\n" + err.Error()) responseComponents.Components[component.Name] = false http.Error(w, err.Error(), http.StatusInternalServerError) @@ -70,8 +74,11 @@ func (s *ComponentsUpdate) ServeHTTP(w http.ResponseWriter, r *http.Request) { } //NOTE: Prevent the upload of a configmap if the component is not present -func (s *ComponentsUpdate) isComponentInstalled(configName string) bool { - deployedCharts := s.DeployedCharts.GetDeployedCharts() - - return deployedCharts[configName] +func (s *ComponentsUpdate) isComponentInstalled(configName string) (bool, error) { + deployedCharts, err := k8s.GetInstalledComponents(context.TODO(), s.namespace, s.clientSet) + if err != nil { + klog.Error("Unable to get installed components:\n" + err.Error()) + return false, err + } + return deployedCharts[configName], nil } diff --git a/lib/go/k8s/configmaps.go b/lib/go/k8s/configmaps.go index 98e5c63bcf..4d594669b2 100644 --- a/lib/go/k8s/configmaps.go +++ b/lib/go/k8s/configmaps.go @@ -73,6 +73,18 @@ func GetCmData(configmapName string, namespace string, clientset *kubernetes.Cli return configMap.Data, nil } +func GetInstalledComponents(ctx context.Context, namespace string, clientSet *kubernetes.Clientset) (map[string]bool, error) { + configmapList, err := clientSet.CoreV1().ConfigMaps(namespace).List(ctx, v1.ListOptions{LabelSelector: "core.airy.co/component"}) + if err != nil { + return nil, fmt.Errorf("Unable to get the ConfigMaps for the components. Error: %s\n", err) + } + components := make(map[string]bool) + for _, configmap := range configmapList.Items { + components[configmap.Name] = true + } + return components, nil +} + func GetComponentsConfigMaps( ctx context.Context, namespace string, From 9c23adecacdac3783696d2ec61f5281dc132f70d Mon Sep 17 00:00:00 2001 From: Ljupco Vangelski Date: Tue, 16 Aug 2022 17:48:08 +0200 Subject: [PATCH 85/92] [#3603] Fix integration-source-api helm code (#3604) --- backend/sources/api/helm/templates/deployment.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/sources/api/helm/templates/deployment.yaml b/backend/sources/api/helm/templates/deployment.yaml index ca80284be6..9ce7cda665 100644 --- a/backend/sources/api/helm/templates/deployment.yaml +++ b/backend/sources/api/helm/templates/deployment.yaml @@ -1,9 +1,9 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: .Values.name + name: "{{ .Values.name }}" labels: - app: .Values.name + app: "{{ .Values.name }}" type: sources core.airy.co/managed: "true" core.airy.co/mandatory: "{{ .Values.mandatory }}" @@ -12,7 +12,7 @@ spec: replicas: {{ if .Values.enabled }} 1 {{ else }} 0 {{ end }} selector: matchLabels: - app: .Values.name + app: "{{ .Values.name }}" strategy: rollingUpdate: maxSurge: 1 @@ -21,7 +21,7 @@ spec: template: metadata: labels: - app: .Values.name + app: "{{ .Values.name }}" spec: containers: - name: app From fb12d359bc73219656249abc7a9e31fa39a5d8fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Aug 2022 17:55:28 +0200 Subject: [PATCH 86/92] Bump @reduxjs/toolkit from 1.8.3 to 1.8.4 (#3593) Bumps [@reduxjs/toolkit](https://github.com/reduxjs/redux-toolkit) from 1.8.3 to 1.8.4. - [Release notes](https://github.com/reduxjs/redux-toolkit/releases) - [Commits](https://github.com/reduxjs/redux-toolkit/compare/1.8.3...v1.8.4) --- updated-dependencies: - dependency-name: "@reduxjs/toolkit" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 9b32ae5136..28940557c3 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "@emoji-mart/data": "^1.0.5", "@emoji-mart/react": "^1.0.1", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7", - "@reduxjs/toolkit": "^1.8.3", + "@reduxjs/toolkit": "^1.8.4", "@stomp/stompjs": "^6.1.2", "@testing-library/jest-dom": "^5.16.5", "@testing-library/user-event": "^14.4.3", diff --git a/yarn.lock b/yarn.lock index a6aa954198..54c5e0c8a9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1524,10 +1524,10 @@ resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== -"@reduxjs/toolkit@^1.8.3": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.8.3.tgz#9c6a9c497bde43a67618d37a4175a00ae12efeb2" - integrity sha512-lU/LDIfORmjBbyDLaqFN2JB9YmAT1BElET9y0ZszwhSBa5Ef3t6o5CrHupw5J1iOXwd+o92QfQZ8OJpwXvsssg== +"@reduxjs/toolkit@^1.8.4": + version "1.8.4" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.8.4.tgz#8f226acff22adf539d078b64fa2eafc3f8d1d045" + integrity sha512-IpFq1WI7sCYeLQpDCGvlcQY9wn70UpAM3cOLq78HRnVn1746RI+l3y5xcuOeVOxORaxABJh3cfJMxycD2IwH5w== dependencies: immer "^9.0.7" redux "^4.1.2" From 1b1356d967d3e646f959b61df866dd472ae4aa1e Mon Sep 17 00:00:00 2001 From: Thorsten Date: Wed, 17 Aug 2022 09:40:43 +0200 Subject: [PATCH 87/92] [#3591] Enhancement enable/disable (#3601) --- frontend/control-center/src/App.module.scss | 3 +- .../src/pages/Catalog/index.tsx | 4 +- .../ChannelsListItem/index.module.scss | 8 ++- .../ChannelsListItem/index.tsx | 8 ++- .../ConnectedChannelsList/index.module.scss | 13 ++++- .../ConnectedChannelsList/index.tsx | 52 +++++++++-------- .../ConnectorConfig/index.module.scss | 3 +- .../Connectors/ConnectorConfig/index.tsx | 57 ++++++++++--------- .../src/pages/Connectors/index.tsx | 7 ++- .../components/general/Pagination/index.tsx | 2 +- .../wrapper/ContentWrapper/index.module.scss | 12 ++-- lib/typescript/model/Screen.ts | 4 ++ lib/typescript/model/index.ts | 1 + lib/typescript/translations/translations.ts | 28 +++++++-- 14 files changed, 124 insertions(+), 78 deletions(-) create mode 100644 lib/typescript/model/Screen.ts diff --git a/frontend/control-center/src/App.module.scss b/frontend/control-center/src/App.module.scss index 6881c2da75..81ee869bc5 100644 --- a/frontend/control-center/src/App.module.scss +++ b/frontend/control-center/src/App.module.scss @@ -15,9 +15,8 @@ .wrapper { display: flex; justify-content: flex-start; - overflow: visible; + overflow: hidden; width: 100%; - height: 100%; min-height: 100vh; background-color: var(--color-blue-white); } diff --git a/frontend/control-center/src/pages/Catalog/index.tsx b/frontend/control-center/src/pages/Catalog/index.tsx index 2bcd177c08..6e0d97b6eb 100644 --- a/frontend/control-center/src/pages/Catalog/index.tsx +++ b/frontend/control-center/src/pages/Catalog/index.tsx @@ -22,7 +22,9 @@ const Catalog = (props: ConnectedProps) => { const catalogPageTitle = t('Catalog'); useEffect(() => { - listComponents(); + listComponents().catch((error: Error) => { + console.error(error); + }); setPageTitle(catalogPageTitle); }, []); diff --git a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.module.scss b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.module.scss index 49071f615e..93e3897317 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.module.scss +++ b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.module.scss @@ -5,6 +5,7 @@ display: flex; flex-direction: row; align-items: center; + justify-content: space-between; flex-grow: 1; height: 64px; border-bottom: 1px solid var(--color-light-gray); @@ -86,12 +87,15 @@ } } +.checkmarkNameContainer { + display: flex; + align-items: center; +} + .listButtons { display: flex; align-items: center; height: 50px; - position: absolute; - right: 44px; svg { color: var(--color-text-gray); &:hover { diff --git a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.tsx b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.tsx index f5c39e2305..1932f3e055 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/ChannelsListItem/index.tsx @@ -51,9 +51,11 @@ const ChannelListItem = (props: ChannelListItemProps) => { <>
- {channel.connected && } -
{channel.metadata?.name}
- {isPhoneNumberSource() &&
{channel.sourceChannelId}
} +
+ {channel.connected && } +
{channel.metadata?.name}
+ {isPhoneNumberSource() &&
{channel.sourceChannelId}
} +
-
+
{t('name')} {t('manage')}
-
+
{filteredChannels.length > 0 ? ( sortBy(searchText === '' ? currentTableData : filteredChannels, (channel: Channel) => channel.metadata.name.toLowerCase() @@ -189,7 +191,7 @@ const ConnectedChannelsList = (props: ConnectedProps) => { = pageSize ? pageSize : filteredChannels.length} + pageCount={filteredChannels.length >= listPageSize ? listPageSize : filteredChannels.length} currentPage={currentPage} onPageChange={page => setCurrentPage(page)} onSearch={searchText !== ''} diff --git a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss index 9e6b19dd93..c916c10b95 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss +++ b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss @@ -5,7 +5,8 @@ background: var(--color-background-white); color: var(--color-text-contrast); display: block; - border-radius: 10px; + border-top-left-radius: 10px; + border-top-right-radius: 10px; width: 100%; margin: 248px 16px 0 191px; overflow-y: hidden; diff --git a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx index c6f9a5e324..4f51ea11ea 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.tsx @@ -1,4 +1,4 @@ -import React, {useState, useEffect} from 'react'; +import React, {useState, useEffect, useRef, useLayoutEffect} from 'react'; import {connect, ConnectedProps, useSelector} from 'react-redux'; import {Link, useParams} from 'react-router-dom'; import {getSourcesInfo, SourceInfo} from '../../../components/SourceInfo'; @@ -76,13 +76,21 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { const [configurationModal, setConfigurationModal] = useState(false); const [notification, setNotification] = useState(null); const [isEnabled, setIsEnabled] = useState(components[connectorInfo?.componentName]?.enabled); + const [isEnabling, setIsEnabling] = useState(false); + const [isDisabling, setIsDisabling] = useState(false); const [isConfigured, setIsConfigured] = useState(false); const [lineTitle, setLineTitle] = useState(''); const [backTitle, setBackTitle] = useState('Connectors'); const [backRoute, setBackRoute] = useState(''); + const pageContentRef = useRef(null); + const [offset, setOffset] = useState(pageContentRef?.current?.offsetTop); const {t} = useTranslation(); const isInstalled = true; + useLayoutEffect(() => { + setOffset(pageContentRef?.current?.offsetTop); + }, []); + useEffect(() => { if (connectorInfo && connectorConfiguration && connectorConfiguration[connectorInfo.componentName]) { if ( @@ -119,7 +127,7 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { if (config && connectorInfo) { setIsEnabled(config?.components[connectorInfo?.configKey]?.enabled); } - }, [config, connectorInfo]); + }, [config, connectorInfo, components]); const createNewConnection = (...args: string[]) => { let payload: UpdateComponentConfigurationRequestPayload; @@ -248,14 +256,14 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { return ; } - return ; + return ; }; const enableDisableComponentToggle = () => { setConfigurationModal(false); + isEnabled ? setIsDisabling(true) : setIsEnabling(true); enableDisableComponent({components: [{name: connectorInfo && connectorInfo?.configKey, enabled: !isEnabled}]}) .then(() => { - setIsEnabled(!isEnabled); setNotification({ show: true, successful: true, @@ -268,32 +276,17 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { successful: false, text: isEnabled ? t('failedDisabled') : t('failedEnabled'), }); + }) + .finally(() => { + isEnabled ? setIsDisabling(false) : setIsEnabling(false); }); }; const closeConfigurationModal = () => { setConfigurationModal(false); - if (!isEnabled) { - enableDisableComponent({components: [{name: connectorInfo && connectorInfo?.configKey, enabled: true}]}) - .then(() => { - setIsEnabled(true); - setNotification({ - show: true, - successful: true, - text: t('successfullyEnabled'), - }); - }) - .catch(() => { - setNotification({ - show: true, - successful: false, - text: t('failedEnabled'), - }); - }); - } }; - const openModal = () => { + const openConfigurationModal = () => { setConfigurationModal(true); }; @@ -346,10 +339,17 @@ const ConnectorConfig = (props: ConnectorConfigProps) => { )}
@@ -370,13 +370,14 @@ const ConnectorConfig = (props: ConnectorConfigProps) => {
)} -
+
{notification?.show && ( { wrapperClassName={styles.enableModalContainerWrapper} containerClassName={styles.enableModalContainer} title={ - isEnabled ? t('disableComponent') + ' ' + connectorInfo?.title : connectorInfo?.title + ' ' + t('enabled') + isEnabled + ? t('disableComponent') + ' ' + connectorInfo?.title + : connectorInfo?.title + ' ' + t('enabledComponent') } close={closeConfigurationModal} headerClassName={styles.headerModal} diff --git a/frontend/control-center/src/pages/Connectors/index.tsx b/frontend/control-center/src/pages/Connectors/index.tsx index 035d539411..70113c990f 100644 --- a/frontend/control-center/src/pages/Connectors/index.tsx +++ b/frontend/control-center/src/pages/Connectors/index.tsx @@ -46,7 +46,10 @@ const Connectors = (props: ConnectedProps) => { useEffect(() => { setSourcesInfo(getSourcesInfo()); getConnectorsConfiguration(); - if (Object.entries(catalogList).length === 0) listComponents(); + if (Object.entries(catalogList).length === 0) + listComponents().catch((error: Error) => { + console.error(error); + }); if (Object.entries(catalogList).length > 0) Object.entries(catalogList).map(component => { component[1].installed === true && setHasInstalledComponents(true); @@ -85,6 +88,8 @@ const Connectors = (props: ConnectedProps) => { (channelsBySource(infoItem.type).length > 0 && components && components[infoItem?.configKey] && + isInstalled && + connectors[infoItem.configKey] && infoItem.channel && isComponentInstalled(infoItem.repository, infoItem.componentName) && ( { useEffect(() => { currentPage * pageCount + pageCount > totalCount ? setEndReached(true) : setEndReached(false); - pageCount < pageSize && !onSearch && setDisplayedItems([1, pageSize]); + pageCount < pageSize && !onSearch && setDisplayedItems([1, pageCount]); }, [currentPage, pageCount, onSearch]); const onNext = () => { diff --git a/lib/typescript/components/wrapper/ContentWrapper/index.module.scss b/lib/typescript/components/wrapper/ContentWrapper/index.module.scss index 174ba9eb8c..b661a923e0 100644 --- a/lib/typescript/components/wrapper/ContentWrapper/index.module.scss +++ b/lib/typescript/components/wrapper/ContentWrapper/index.module.scss @@ -2,8 +2,7 @@ display: flex; flex-direction: column; margin: 88px 16px 0 191px; - overflow-y: scroll; - overflow-x: hidden; + overflow: hidden; width: 100%; } @@ -31,17 +30,16 @@ .sideColumn { width: 196px; - height: 100%; position: absolute; } .transparentContent { background: var(--color-background-white); color: var(--color-text-contrast); - border-radius: 10px; - height: calc(100vh - 88px); - overflow-y: scroll; - overflow-x: hidden; + border-top-left-radius: 10px; + border-top-right-radius: 10px; + height: 100%; + overflow: hidden; } .leftOffset { diff --git a/lib/typescript/model/Screen.ts b/lib/typescript/model/Screen.ts new file mode 100644 index 0000000000..2d41d3b8cd --- /dev/null +++ b/lib/typescript/model/Screen.ts @@ -0,0 +1,4 @@ +export type ScreenDimensions = { + height: number; + width: number; +}; diff --git a/lib/typescript/model/index.ts b/lib/typescript/model/index.ts index 263d0b2c7f..6f77846cd4 100644 --- a/lib/typescript/model/index.ts +++ b/lib/typescript/model/index.ts @@ -11,6 +11,7 @@ export * from './Metadata'; export * from './Notification'; export * from './Pagination'; export * from './Source'; +export * from './Screen'; export * from './SuggestedReply'; export * from './Tag'; export * from './Template'; diff --git a/lib/typescript/translations/translations.ts b/lib/typescript/translations/translations.ts index 5a41af20e4..b82915f241 100644 --- a/lib/typescript/translations/translations.ts +++ b/lib/typescript/translations/translations.ts @@ -140,10 +140,14 @@ const resources = { //Control-Center disableComponent: 'Disable', + disablingComponent: 'Disabling...', + disabledComponent: 'Disabled', disableComponentText: 'Are you sure you want to disable this component?', - Enabled: 'Enabled', - Enable: 'Enable', - NotConfigured: 'Not Configured', + enableComponent: 'Enable', + enabledComponent: 'Enabled', + enablingComponent: 'Enabling...', + enable: 'Enable', + notConfigured: 'Not Configured', uninstallComponentText: 'Are you sure you want to uninstall this component?', restart: 'Restart', restartComponentUpdate: 'We will restart the component to apply your update.', @@ -571,8 +575,12 @@ const resources = { //Control-Center disableComponent: 'Deaktivieren', + disablingComponent: 'Deaktivieren...', + disabledComponent: 'Deaktiviert', disableComponentText: 'Bist du sicher, dass du diese Komponente deaktivieren willst?', - Enabled: 'Aktiviert', + enableComponent: 'Aktivieren', + enabledComponent: 'Aktiviert', + enablingComponent: 'Aktivieren...', Enable: 'Aktivieren', NotConfigured: 'Nicht konfiguriert', uninstallComponentText: 'Bist du sicher, dass du diese Komponente deinstallieren willst?', @@ -994,8 +1002,12 @@ const resources = { //Control-Center disableComponent: 'Désactiver', + disablingComponent: 'Désactiver...', + disabledComponent: 'Désactivé', disableComponentText: 'Tu es sûre de vouloir désactiver ce composant ?', - Enabled: 'Activé', + enableComponent: 'Activer', + enabledComponent: 'Activé', + enablingComponent: 'Activation...', Enable: 'Activer', NotConfigured: 'Non configuré', uninstallComponentText: 'Tu es sûre de vouloir désinstaller ce composant ?', @@ -1421,8 +1433,12 @@ const resources = { //Control-Center disableComponent: 'Desactivar', + disablingComponent: 'Desactivar...', + disabledComponent: 'Discapacitados', disableComponentText: '¿Estás seguro de que quieres desactivar este componente?', - Enabled: 'Activado', + enableComponent: 'Activar', + enabledComponent: 'Activado', + enablingComponent: 'Activar...', Enable: 'Activar', NotConfigured: 'No configurado', uninstallComponentText: '¿Estás seguro de que quieres desinstalar este componente?', From 849f59c32458dc8561b806facaf302fb2c86bae2 Mon Sep 17 00:00:00 2001 From: Audrey Kadjar Date: Wed, 17 Aug 2022 11:04:16 +0200 Subject: [PATCH 88/92] [#3600] display all components in catalog (#3602) * displaying all components * catalog fix finished * small fix * viber svg fix * last fixes --- .../src/components/ChannelAvatar/index.tsx | 11 +- .../Catalog/CatalogCard/index.module.scss | 1 + .../src/pages/Catalog/CatalogCard/index.tsx | 2 +- .../CatalogItemDetails/index.module.scss | 3 + .../Catalog/CatalogItemDetails/index.tsx | 12 +- .../src/pages/Catalog/getRouteForCard.ts | 21 +++ .../src/pages/Catalog/index.tsx | 4 +- .../src/pages/Connectors/index.tsx | 3 +- .../Status/ComponentListItem/ItemInfo.tsx | 14 +- .../ComponentListItem/index.module.scss | 2 - frontend/control-center/src/routes/routes.ts | 7 + .../assets/images/icons/ameliaLogo.svg | 177 ++++++++++++++++++ .../assets/images/icons/congnigyLogo.svg | 1 + .../assets/images/icons/rasaLogo.svg | 1 + lib/typescript/assets/images/icons/viber.svg | 43 ++--- .../assets/images/icons/viberLogoFilled.svg | 8 - .../general/ConnectorAvatar/index.tsx | 2 +- lib/typescript/model/Source.ts | 7 + lib/typescript/translations/translations.ts | 88 +++++++++ 19 files changed, 343 insertions(+), 64 deletions(-) create mode 100644 lib/typescript/assets/images/icons/ameliaLogo.svg create mode 100644 lib/typescript/assets/images/icons/congnigyLogo.svg create mode 100644 lib/typescript/assets/images/icons/rasaLogo.svg delete mode 100644 lib/typescript/assets/images/icons/viberLogoFilled.svg diff --git a/frontend/control-center/src/components/ChannelAvatar/index.tsx b/frontend/control-center/src/components/ChannelAvatar/index.tsx index 796d5361d4..f57ea9aa14 100644 --- a/frontend/control-center/src/components/ChannelAvatar/index.tsx +++ b/frontend/control-center/src/components/ChannelAvatar/index.tsx @@ -6,10 +6,13 @@ import {ReactComponent as FacebookAvatar} from 'assets/images/icons/facebookMess import {ReactComponent as AiryAvatar} from 'assets/images/icons/airyLogo.svg'; import {ReactComponent as InstagramAvatar} from 'assets/images/icons/instagramLogoFilled.svg'; import {ReactComponent as TwilioAvatar} from 'assets/images/icons/twilioLogo.svg'; -import {ReactComponent as ViberAvatar} from 'assets/images/icons/viberLogoFilled.svg'; +import {ReactComponent as ViberAvatar} from 'assets/images/icons/viber.svg'; import {ReactComponent as ZendeskAvatar} from 'assets/images/icons/zendeskLogo.svg'; import {ReactComponent as DialogflowAvatar} from 'assets/images/icons/dialogflowLogo.svg'; import {ReactComponent as SalesforceAvatar} from 'assets/images/icons/salesforceLogo.svg'; +import {ReactComponent as CongnigyAvatar} from 'assets/images/icons/congnigyLogo.svg'; +import {ReactComponent as RasaAvatar} from 'assets/images/icons/rasaLogo.svg'; +import {ReactComponent as AmeliaAvatar} from 'assets/images/icons/ameliaLogo.svg'; import {Channel, Source} from 'model'; import styles from './index.module.scss'; @@ -61,6 +64,12 @@ export const getChannelAvatar = (source: string) => { case Source.salesforce: case 'Salesforce': return ; + case 'Congnigy': + return ; + case 'Rasa': + return ; + case 'Amelia': + return ; default: return ; } diff --git a/frontend/control-center/src/pages/Catalog/CatalogCard/index.module.scss b/frontend/control-center/src/pages/Catalog/CatalogCard/index.module.scss index 4472297f95..3394acc0a2 100644 --- a/frontend/control-center/src/pages/Catalog/CatalogCard/index.module.scss +++ b/frontend/control-center/src/pages/Catalog/CatalogCard/index.module.scss @@ -42,6 +42,7 @@ svg { height: 55px; + max-width: 85px; fill: var(--color-text-contrast); } } diff --git a/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx b/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx index 1e9b015fcc..7012fc8c01 100644 --- a/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx +++ b/frontend/control-center/src/pages/Catalog/CatalogCard/index.tsx @@ -45,7 +45,7 @@ export const getDescriptionSourceName = (name: string, displayName: string) => { const CatalogCard = (props: CatalogCardProps) => { const {component, componentInfo, installComponent} = props; - const isInstalled = component[componentInfo?.name].installed; + const isInstalled = component[componentInfo?.name]?.installed; const [isModalVisible, setIsModalVisible] = useState(false); const [isInstalling, setIsInstalling] = useState(false); const [notification, setNotification] = useState(null); diff --git a/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss b/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss index 9c34dba9a1..000468f7cb 100644 --- a/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss +++ b/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss @@ -87,6 +87,9 @@ .logoIcon { width: 120px; + height: 125px; + display: flex; + align-items: center; } .installButton { diff --git a/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.tsx b/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.tsx index d34929768e..ba4d29b49c 100644 --- a/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.tsx +++ b/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.tsx @@ -159,12 +159,20 @@ const CatalogItemDetails = (props: ConnectedProps) => {

{t('price')}:

- +

- Airy Docs:
{' '} + Docs:
{' '} {componentInfo?.docs} diff --git a/frontend/control-center/src/pages/Catalog/getRouteForCard.ts b/frontend/control-center/src/pages/Catalog/getRouteForCard.ts index 88678b847b..bff9b12686 100644 --- a/frontend/control-center/src/pages/Catalog/getRouteForCard.ts +++ b/frontend/control-center/src/pages/Catalog/getRouteForCard.ts @@ -26,6 +26,13 @@ import { CATALOG_DIALOGFLOW_ROUTE, CATALOG_ZENDESK_ROUTE, CATALOG_SALESFORCE_ROUTE, + CATALOG_CONGNIFY_ROUTE, + CATALOG_AMELIA_ROUTE, + CATALOG_FRONTEND_INBOX_ROUTE, + CATALOG_RASA_ROUTE, + CATALOG_WEBHOOKS_ROUTE, + CATALOG_MOBILE_ROUTE, + CATALOG_VIBER_ROUTE, } from '../../routes/routes'; export const getConnectedRouteForComponent = (displayName: string) => { @@ -100,5 +107,19 @@ export const getCatalogProductRouteForComponent = (displayName: string) => { return CATALOG_SALESFORCE_ROUTE; case 'Zendesk': return CATALOG_ZENDESK_ROUTE; + case 'Congnigy': + return CATALOG_CONGNIFY_ROUTE; + case 'Amelia': + return CATALOG_AMELIA_ROUTE; + case 'Inbox': + return CATALOG_FRONTEND_INBOX_ROUTE; + case 'Rasa': + return CATALOG_RASA_ROUTE; + case 'Mobile': + return CATALOG_MOBILE_ROUTE; + case 'Webhooks': + return CATALOG_WEBHOOKS_ROUTE; + case 'Viber': + return CATALOG_VIBER_ROUTE; } }; diff --git a/frontend/control-center/src/pages/Catalog/index.tsx b/frontend/control-center/src/pages/Catalog/index.tsx index 6e0d97b6eb..0daa42dece 100644 --- a/frontend/control-center/src/pages/Catalog/index.tsx +++ b/frontend/control-center/src/pages/Catalog/index.tsx @@ -4,7 +4,7 @@ import {connect, ConnectedProps, useSelector} from 'react-redux'; import {listComponents} from '../../actions/catalog'; import {StateModel} from '../../reducers'; import {setPageTitle} from '../../services'; -import {ComponentInfo, getSourceForComponent} from 'model'; +import {ComponentInfo} from 'model'; import CatalogCard from './CatalogCard'; import styles from './index.module.scss'; @@ -44,7 +44,7 @@ const Catalog = (props: ConnectedProps) => {

{orderedCatalogList && orderedCatalogList.map((infoItem: ComponentInfo) => { - if (infoItem?.name && !infoItem.name.includes('viber') && getSourceForComponent(infoItem.name)) { + if (infoItem?.name && infoItem?.displayName) { return ; } })} diff --git a/frontend/control-center/src/pages/Connectors/index.tsx b/frontend/control-center/src/pages/Connectors/index.tsx index 70113c990f..4d81a30be8 100644 --- a/frontend/control-center/src/pages/Connectors/index.tsx +++ b/frontend/control-center/src/pages/Connectors/index.tsx @@ -85,8 +85,7 @@ const Connectors = (props: ConnectedProps) => { <> {sourcesInfo.map((infoItem: SourceInfo, index: number) => { return ( - (channelsBySource(infoItem.type).length > 0 && - components && + (components && components[infoItem?.configKey] && isInstalled && connectors[infoItem.configKey] && diff --git a/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx b/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx index 979aedb917..e70dc5d463 100644 --- a/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx +++ b/frontend/control-center/src/pages/Status/ComponentListItem/ItemInfo.tsx @@ -28,16 +28,6 @@ const mapDispatchToProps = { const connector = connect(null, mapDispatchToProps); -const formatName = (name: string) => { - if (name?.includes('enterprise')) { - name = name.replace('enterprise-', ''); - } - if (name?.includes('sources')) { - name = name.replace('sources-', ''); - } - return name; -}; - const isConfigurableConnector = (name: string) => { let isConfigurable = false; @@ -59,9 +49,7 @@ const ItemInfo = (props: ComponentInfoProps) => { const {t} = useTranslation(); const isComponentConfigured = - connectors[formatName(itemName)] && - isConfigurableConnector(itemName) && - Object.keys(connectors[formatName(itemName)]).length > 0; + connectors[itemName] && isConfigurableConnector(itemName) && Object.keys(connectors[itemName]).length > 0; //status const needsConfig = diff --git a/frontend/control-center/src/pages/Status/ComponentListItem/index.module.scss b/frontend/control-center/src/pages/Status/ComponentListItem/index.module.scss index da1fedb7ae..f4a76994ca 100644 --- a/frontend/control-center/src/pages/Status/ComponentListItem/index.module.scss +++ b/frontend/control-center/src/pages/Status/ComponentListItem/index.module.scss @@ -122,8 +122,6 @@ } .enableModalContainerWrapper { - width: 50%; - height: 70%; display: flex; flex-direction: column; justify-content: center; diff --git a/frontend/control-center/src/routes/routes.ts b/frontend/control-center/src/routes/routes.ts index 5359a8aa86..c90969f8e1 100644 --- a/frontend/control-center/src/routes/routes.ts +++ b/frontend/control-center/src/routes/routes.ts @@ -36,6 +36,13 @@ export const CATALOG_INSTAGRAM_ROUTE = '/catalog/instagram'; export const CATALOG_DIALOGFLOW_ROUTE = '/catalog/dialogflow'; export const CATALOG_ZENDESK_ROUTE = '/catalog/zendesk'; export const CATALOG_SALESFORCE_ROUTE = '/catalog/salesforce'; +export const CATALOG_CONGNIFY_ROUTE = '/catalog/congnify'; +export const CATALOG_AMELIA_ROUTE = '/catalog/amelia'; +export const CATALOG_FRONTEND_INBOX_ROUTE = '/catalog/frontend-inbox'; +export const CATALOG_RASA_ROUTE = '/catalog/rasa'; +export const CATALOG_WEBHOOKS_ROUTE = '/catalog/webhooks'; +export const CATALOG_MOBILE_ROUTE = '/catalog/mobile'; +export const CATALOG_VIBER_ROUTE = '/catalog/viber'; export const INBOX_ROUTE = '/inbox'; export const INBOX_CONNECTED_ROUTE = '/inbox/connected'; diff --git a/lib/typescript/assets/images/icons/ameliaLogo.svg b/lib/typescript/assets/images/icons/ameliaLogo.svg new file mode 100644 index 0000000000..cf7d40a7da --- /dev/null +++ b/lib/typescript/assets/images/icons/ameliaLogo.svg @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/typescript/assets/images/icons/congnigyLogo.svg b/lib/typescript/assets/images/icons/congnigyLogo.svg new file mode 100644 index 0000000000..038ca24eae --- /dev/null +++ b/lib/typescript/assets/images/icons/congnigyLogo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/lib/typescript/assets/images/icons/rasaLogo.svg b/lib/typescript/assets/images/icons/rasaLogo.svg new file mode 100644 index 0000000000..2b693eda89 --- /dev/null +++ b/lib/typescript/assets/images/icons/rasaLogo.svg @@ -0,0 +1 @@ +Artboard 4 \ No newline at end of file diff --git a/lib/typescript/assets/images/icons/viber.svg b/lib/typescript/assets/images/icons/viber.svg index b776d0bd90..58e9d4ff00 100644 --- a/lib/typescript/assets/images/icons/viber.svg +++ b/lib/typescript/assets/images/icons/viber.svg @@ -1,32 +1,11 @@ - - - - - - - - - - - + + + + + + \ No newline at end of file diff --git a/lib/typescript/assets/images/icons/viberLogoFilled.svg b/lib/typescript/assets/images/icons/viberLogoFilled.svg deleted file mode 100644 index 042093970d..0000000000 --- a/lib/typescript/assets/images/icons/viberLogoFilled.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/lib/typescript/components/general/ConnectorAvatar/index.tsx b/lib/typescript/components/general/ConnectorAvatar/index.tsx index 8a245bb509..3a75d865ae 100644 --- a/lib/typescript/components/general/ConnectorAvatar/index.tsx +++ b/lib/typescript/components/general/ConnectorAvatar/index.tsx @@ -6,7 +6,7 @@ import {ReactComponent as FacebookAvatar} from 'assets/images/icons/facebookMess import {ReactComponent as AiryAvatar} from 'assets/images/icons/airyLogo.svg'; import {ReactComponent as InstagramAvatar} from 'assets/images/icons/instagramLogoFilled.svg'; import {ReactComponent as TwilioAvatar} from 'assets/images/icons/twilioLogo.svg'; -import {ReactComponent as ViberAvatar} from 'assets/images/icons/viberLogoFilled.svg'; +import {ReactComponent as ViberAvatar} from 'assets/images/icons/viber.svg'; import {ReactComponent as ZendeskAvatar} from 'assets/images/icons/zendeskLogo.svg'; import {ReactComponent as DialogflowAvatar} from 'assets/images/icons/dialogflowLogo.svg'; import {Source} from 'model'; diff --git a/lib/typescript/model/Source.ts b/lib/typescript/model/Source.ts index bd9e2ad555..a766c4399b 100644 --- a/lib/typescript/model/Source.ts +++ b/lib/typescript/model/Source.ts @@ -10,6 +10,12 @@ export enum Source { zendesk = 'zendesk', dialogflow = 'dialogflow', salesforce = 'salesforce', + congnigy = 'congnigy', + rasa = 'rasa', + webhooks = 'webhooks', + amelia = 'amelia', + frontendinbox = 'frontendinbox', + mobile = 'mobile', } export const prettifySource = (source: string) => @@ -34,5 +40,6 @@ export const getSourceForComponent = (item: string) => { if (componentName === 'chatplugin') componentName = 'chatPlugin'; if (componentName === 'whatsappbusinesscloud') componentName = 'twilioWhatsApp'; if (componentName === 'salesforcecontactsingestion') componentName = 'salesforce'; + return Source[componentName]; }; diff --git a/lib/typescript/translations/translations.ts b/lib/typescript/translations/translations.ts index b82915f241..072bdf9218 100644 --- a/lib/typescript/translations/translations.ts +++ b/lib/typescript/translations/translations.ts @@ -379,6 +379,27 @@ const resources = { connectWhatsappNumber: 'Connect Whatsapp Number', updateWhatsappNumber: 'Update Whatsapp Number', + //Congnigy + congnigyDescription: 'A low-code UI for conversational AI.', + + //Rasa + rasaDescription: 'Open source conversational AI.', + + //webhooks + webhooksDescription: 'Get notified when events happen.', + + //amelia + ameliaDescription: 'An intelligent cognitive conversational chatbot.', + + //mobile + mobileDescription: 'An Airy mobile app for your Inbox.', + + //viber + viberDescription: 'The messaging app connecting over a billion people worldwide.', + + //Inbox + frontendinboxDescription: 'An Inbox to view and organize all your conversations.', + //Connectors connectors: 'Connectors', noResults: 'Result not found.', @@ -395,6 +416,7 @@ const resources = { price: 'Price', Free: 'Free', Paid: 'Paid', + ['REQUEST ACCESS']: 'REQUEST ACCESS', //NotFound notFound: `Oops! We couldn't find that here.`, @@ -757,6 +779,27 @@ const resources = { securityToken: 'Sicherheitstoken', yourSalesforceSecurityToken: 'Ihr Salesforce-Sicherheitstoken', + //Congnigy + congnigyDescription: 'Eine Low-Code-Benutzeroberfläche für Konversations-KI.', + + //Rasa + rasaDescription: 'Open-Source-Gesprächs-KI.', + + //webhooks + webhooksDescription: 'Lassen Sie sich benachrichtigen, wenn Ereignisse eintreten.', + + //amelia + ameliaDescription: 'Ein intelligenter kognitiver Konversations-Chatbot.', + + //mobile + mobileDescription: 'Eine mobile Airy-App für Ihren Posteingang.', + + //viber + viberDescription: 'Die Messaging-App, die über eine Milliarde Menschen weltweit verbindet.', + + //Inbox + frontendinboxDescription: 'Ein Inbox zum Anzeigen und Organisieren aller Ihrer Konversationen.', + //Facebook Messenger connectMessenger: 'Messenger verbinden', facebookConfiguration: 'Die Facebook-Quelle erfordert die folgende Konfiguration:', @@ -830,6 +873,7 @@ const resources = { price: 'Preis', Free: 'Kostenlos', Paid: 'Kostenpflichtig', + ['REQUEST ACCESS']: 'ANFRAGE ZUGANG', //NotFound notFound: 'Huch! Das konnten wir hier nicht finden.', @@ -1241,6 +1285,27 @@ const resources = { connectWhatsappNumber: 'Connecter le numéro Whatsapp', updateWhatsappNumber: 'Mise à jour du numéro Whatsapp', + //Congnigy + congnigyDescription: "Une interface utilisateur low-code pour l'IA conversationnelle.", + + //Rasa + rasaDescription: 'IA conversationnelle open source.', + + //webhooks + webhooksDescription: 'Soyez averti lorsque des événements se produisent.', + + //amelia + ameliaDescription: 'Un chatbot conversationnel cognitif intelligent.', + + //mobile + mobileDescription: 'Une application mobile Airy pour votre boîte de réception.', + + //viber + viberDescription: "L'application de messagerie connectant plus d'un milliard de personnes dans le monde.", + + //Inbox + frontendinboxDescription: 'Une boîte de réception pour afficher et organiser toutes vos conversations.', + //Connectors connectors: 'Connecteurs', noResults: 'Résultat non trouvé.', @@ -1257,6 +1322,7 @@ const resources = { price: 'Prix', Free: 'Gratuit', Paid: 'Payant', + ['REQUEST ACCESS']: "DEMANDE D'ACCÈS", //NotFound notFound: 'Oups! Page non trouvée.', @@ -1672,6 +1738,27 @@ const resources = { connectWhatsappNumber: 'Conectar el número de Whatsapp', updateWhatsappNumber: 'Actualizar el número de Whatsapp', + //Congnigy + congnigyDescription: 'Una interfaz de usuario de código bajo para IA conversacional.', + + //Rasa + rasaDescription: 'IA conversacional Open Source.', + + //webhooks + webhooksDescription: 'Reciba notificaciones cuando ocurran eventos.', + + //amelia + ameliaDescription: 'Un chatbot conversacional cognitivo inteligente.', + + //mobile + mobileDescription: 'Una aplicación móvil Airy para su bandeja de entrada.', + + //viber + viberDescription: 'La aplicación de mensajería que conecta a más de mil millones de personas en todo el mundo.', + + //Inbox + frontendinboxDescription: 'Una bandeja de entrada para ver y organizar todas tus conversaciones.', + //Connectors connectors: 'Conectores', noResults: 'Resultado no encontrado.', @@ -1688,6 +1775,7 @@ const resources = { price: 'Precio', Free: 'Gratis', Paid: 'Premium', + ['REQUEST ACCESS']: 'SOLICITAR ACCESO', //NotFound notFound: '¡Uy! No pudimos encontrarlo aquí.', From a72ea3d6307b62d3383af131f08937fb48b7fd63 Mon Sep 17 00:00:00 2001 From: ljupcovangelski Date: Wed, 17 Aug 2022 11:24:41 +0200 Subject: [PATCH 89/92] Fixes #3608 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 4a05dc752a..a758a09aae 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.48.0-alpha +0.48.0 From d6a43ccadb9171ab37ad300e3df1576383508231 Mon Sep 17 00:00:00 2001 From: Audrey Kadjar Date: Wed, 17 Aug 2022 16:14:53 +0200 Subject: [PATCH 90/92] [#3605] Fix connectors connected channels (#3610) * [#3606] logo fix (#3607) * logo fix * fix * bug fixes * release fixes * darkmode fix --- .../src/components/SourceInfo/index.tsx | 2 +- .../CatalogItemDetails/index.module.scss | 7 ++++- .../ConnectedChannelsList/index.module.scss | 11 ++++++- .../ConnectedChannelsList/index.tsx | 29 ++++++++++++------- .../ConnectorConfig/index.module.scss | 2 +- .../ChatPlugin/ChatPluginConnect.module.scss | 1 - .../Airy/ChatPlugin/ChatPluginConnect.tsx | 2 +- .../CustomiseSection/CustomiseSection.tsx | 2 +- .../wrapper/ContentWrapper/index.module.scss | 1 + lib/typescript/translations/translations.ts | 8 +++++ 10 files changed, 48 insertions(+), 17 deletions(-) diff --git a/frontend/control-center/src/components/SourceInfo/index.tsx b/frontend/control-center/src/components/SourceInfo/index.tsx index 3e4e65d3eb..a308bf5321 100644 --- a/frontend/control-center/src/components/SourceInfo/index.tsx +++ b/frontend/control-center/src/components/SourceInfo/index.tsx @@ -93,7 +93,7 @@ export const getSourcesInfo = (): SourceInfo[] => { type: Source.twilioSMS, channel: true, title: 'SMS', - description: , + description: , image: , newChannelRoute: CONNECTORS_TWILIO_SMS_ROUTE + '/new', channelsListRoute: CONNECTORS_CONNECTED_ROUTE + '/twilio.sms/#', diff --git a/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss b/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss index 000468f7cb..e22879de72 100644 --- a/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss +++ b/frontend/control-center/src/pages/Catalog/CatalogItemDetails/index.module.scss @@ -88,14 +88,19 @@ .logoIcon { width: 120px; height: 125px; + margin-bottom: 15px; display: flex; align-items: center; + + svg { + fill: var(--color-text-contrast); + } } .installButton { width: 100%; height: 50px; - margin-top: 10px; + margin-top: 15px; @include font-base; } diff --git a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.module.scss b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.module.scss index 2fe5cfed1f..f329780e3d 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.module.scss +++ b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.module.scss @@ -181,13 +181,22 @@ } } -.noSearchMatch { +.noMatch { @include font-m; font-weight: bold; color: var(--color-text-contrast); margin-bottom: 4px; } +.noSearchMatch { + @extend .noMatch; +} + +.noChannelsConnected { + @extend .noMatch; + text-align: center; +} + .closeIcon { height: 10px; width: 10px; diff --git a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.tsx b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.tsx index db9869270b..533e35f485 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.tsx +++ b/frontend/control-center/src/pages/Connectors/ConnectedChannelsList/index.tsx @@ -68,6 +68,8 @@ const ConnectedChannelsList = (props: ConnectedChannelsListProps) => { channel.metadata?.name?.toLowerCase().includes(searchText.toLowerCase()) ); + const areConnectedChannels = channels.length > 0 && filteredChannels.length > 0; + const [currentPage, setCurrentPage] = useState(1); const listPageSize = Math.floor( @@ -169,7 +171,7 @@ const ConnectedChannelsList = (props: ConnectedChannelsListProps) => {
- {t('name')} + {areConnectedChannels ? t('name') : ''} {t('manage')}
@@ -181,21 +183,28 @@ const ConnectedChannelsList = (props: ConnectedChannelsListProps) => {
)) - ) : ( + ) : channels.length > 0 ? (

{t('noResults')}

{t('noResultsTerm')}

+ ) : ( +
+

{t('noChannelsConnected')}

+
)}
- = listPageSize ? listPageSize : filteredChannels.length} - currentPage={currentPage} - onPageChange={page => setCurrentPage(page)} - onSearch={searchText !== ''} - /> + + {areConnectedChannels && ( + = listPageSize ? listPageSize : filteredChannels.length} + currentPage={currentPage} + onPageChange={page => setCurrentPage(page)} + onSearch={searchText !== ''} + /> + )}
); }; diff --git a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss index c916c10b95..cef7301382 100644 --- a/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss +++ b/frontend/control-center/src/pages/Connectors/ConnectorConfig/index.module.scss @@ -9,7 +9,7 @@ border-top-right-radius: 10px; width: 100%; margin: 248px 16px 0 191px; - overflow-y: hidden; + overflow-y: scroll; } .container { diff --git a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.module.scss b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.module.scss index cb49cc1286..7fc9514c34 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.module.scss +++ b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.module.scss @@ -8,7 +8,6 @@ border-radius: 10px; width: 100%; height: calc(100vh - 88px); - overflow-y: scroll; } .container { diff --git a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.tsx b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.tsx index 6fe0e1323a..6404a0f48c 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.tsx +++ b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/ChatPluginConnect.tsx @@ -164,7 +164,7 @@ const ChatPluginConnect = (props: ConnectedProps) => { return (
-
+
)} diff --git a/lib/typescript/components/wrapper/ContentWrapper/index.module.scss b/lib/typescript/components/wrapper/ContentWrapper/index.module.scss index b661a923e0..97decde42e 100644 --- a/lib/typescript/components/wrapper/ContentWrapper/index.module.scss +++ b/lib/typescript/components/wrapper/ContentWrapper/index.module.scss @@ -4,6 +4,7 @@ margin: 88px 16px 0 191px; overflow: hidden; width: 100%; + height: 100vh; } .transparentHeader { diff --git a/lib/typescript/translations/translations.ts b/lib/typescript/translations/translations.ts index 072bdf9218..68c8f67bfb 100644 --- a/lib/typescript/translations/translations.ts +++ b/lib/typescript/translations/translations.ts @@ -410,6 +410,8 @@ const resources = { installed: 'Installed', notInstalled: 'Not Installed', + noChannelsConnected: 'This connector does not have any connected channels yet.', + //Catalog categories: 'Categories', availableFor: 'Available for', @@ -867,6 +869,8 @@ const resources = { installed: 'Installiert', notInstalled: 'Nicht Installiert', + noChannelsConnected: 'Mit diesem Anschluss sind noch keine Kanäle verbunden.', + //Catalog categories: 'Kategorien', availableFor: 'Verfügbar für', @@ -1316,6 +1320,8 @@ const resources = { installed: 'Installé(s)', notInstalled: 'Non installé(s)', + noChannelsConnected: "Ce connecteur n'a pas encore de canaux connectés.", + //Catalog categories: 'Catégories', availableFor: 'Disponible pour', @@ -1769,6 +1775,8 @@ const resources = { installed: 'Instalado(s)', notInstalled: 'No Instalado(s)', + noChannelsConnected: 'Este conector aún no tiene ningún canal conectado.', + //Catalog categories: 'Categorías', availableFor: 'Disponible para', From ec3d4a4ca2bf7b9e72a08b85e9c7b2378e2c0b2c Mon Sep 17 00:00:00 2001 From: Thorsten Date: Thu, 18 Aug 2022 12:35:16 +0200 Subject: [PATCH 91/92] [#3608] Fix chatplugin preview url (#3612) --- .../ChatPlugin/sections/CustomiseSection/CustomiseSection.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/CustomiseSection/CustomiseSection.tsx b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/CustomiseSection/CustomiseSection.tsx index 7722635fa7..96d46e0246 100644 --- a/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/CustomiseSection/CustomiseSection.tsx +++ b/frontend/control-center/src/pages/Connectors/Providers/Airy/ChatPlugin/sections/CustomiseSection/CustomiseSection.tsx @@ -208,7 +208,7 @@ export const CustomiseSection = ({channelId, host, setChatpluginConfig}: Customi )} From 20340df64784cc245e1dde02329085543527d080 Mon Sep 17 00:00:00 2001 From: ljupcovangelski Date: Thu, 18 Aug 2022 14:57:01 +0200 Subject: [PATCH 92/92] Update changelog # --- docs/docs/changelog.md | 311 ++++++++++++++++++++++------------------- 1 file changed, 168 insertions(+), 143 deletions(-) diff --git a/docs/docs/changelog.md b/docs/docs/changelog.md index 1060eaf5d4..381b5148d2 100644 --- a/docs/docs/changelog.md +++ b/docs/docs/changelog.md @@ -1,13 +1,89 @@ ---- -title: Changelog -sidebar_label: 📝 Changelog ---- +--- +title: Changelog +sidebar_label: 📝 Changelog +--- + +## 0.48.0 + +#### Changes + +#### 🚀 Features + +- [[#3591](https://github.com/airyhq/airy/issues/3591)] Enhancement enable/disable [[#3601](https://github.com/airyhq/airy/pull/3601)] +- [[#3589](https://github.com/airyhq/airy/issues/3589)] Retrieve installed components from cm [[#3592](https://github.com/airyhq/airy/pull/3592)] +- [[#3208](https://github.com/airyhq/airy/issues/3208)] Package core components [[#3570](https://github.com/airyhq/airy/pull/3570)] +- [[#3489](https://github.com/airyhq/airy/issues/3489)] Component card details on catalog [[#3569](https://github.com/airyhq/airy/pull/3569)] +- [[#3476](https://github.com/airyhq/airy/issues/3476)] Update cypress tests baseurl [[#3509](https://github.com/airyhq/airy/pull/3509)] +- [[#3402](https://github.com/airyhq/airy/issues/3402)] Adjust catalog view to remove install and uninstalled title [[#3557](https://github.com/airyhq/airy/pull/3557)] +- [[#3356](https://github.com/airyhq/airy/issues/3356)] Create and destroy Minikube with Bazel [[#3363](https://github.com/airyhq/airy/pull/3363)] +- [[#3533](https://github.com/airyhq/airy/issues/3533)] Connect whatsapp channels [[#3537](https://github.com/airyhq/airy/pull/3537)] +- [[#3397](https://github.com/airyhq/airy/issues/3397)] Airy CLI Installation with Terraform [[#3404](https://github.com/airyhq/airy/pull/3404)] +- [[#2755](https://github.com/airyhq/airy/issues/2755)] Add an "airy login" command to the CLI [[#3531](https://github.com/airyhq/airy/pull/3531)] +- [[#3353](https://github.com/airyhq/airy/issues/3353)] components.list endpoint version 2 [[#3482](https://github.com/airyhq/airy/pull/3482)] +- [[#3329](https://github.com/airyhq/airy/issues/3329)] New design channel connectors [[#3502](https://github.com/airyhq/airy/pull/3502)] +- [[#3096](https://github.com/airyhq/airy/issues/3096)] Use jaas for creating topics [[#3455](https://github.com/airyhq/airy/pull/3455)] + +#### 🐛 Bug Fixes + +- [[#3600](https://github.com/airyhq/airy/issues/3600)] Display all components in catalog [[#3602](https://github.com/airyhq/airy/pull/3602)] +- [[#3529](https://github.com/airyhq/airy/issues/3529)] Align title fontsize customize and install +- [[#3571](https://github.com/airyhq/airy/issues/3571)] Update dialogflow configuration form [[#3576](https://github.com/airyhq/airy/pull/3576)] +- [[#3563](https://github.com/airyhq/airy/issues/3563)] Update components.get handling [[#3564](https://github.com/airyhq/airy/pull/3564)] +- [[#3608](https://github.com/airyhq/airy/issues/3608)] Fix chatplugin preview url [[#3612](https://github.com/airyhq/airy/pull/3612)] +- [[#3605](https://github.com/airyhq/airy/issues/3605)] Fix connectors connected channels [[#3610](https://github.com/airyhq/airy/pull/3610)] +- [[#3600](https://github.com/airyhq/airy/issues/3600)] Display all components in catalog [[#3602](https://github.com/airyhq/airy/pull/3602)] +- [[#3591](https://github.com/airyhq/airy/issues/3591)] Enhancement enable/disable [[#3601](https://github.com/airyhq/airy/pull/3601)] +- [[#3603](https://github.com/airyhq/airy/issues/3603)] Fix integration-source-api helm code [[#3604](https://github.com/airyhq/airy/pull/3604)] +- [[#3589](https://github.com/airyhq/airy/issues/3589)] Retrieve installed components from cm [[#3592](https://github.com/airyhq/airy/pull/3592)] +- [[#3529](https://github.com/airyhq/airy/issues/3529)] Align title fontsize customize and install [[#3590](https://github.com/airyhq/airy/pull/3590)] +- [[#3571](https://github.com/airyhq/airy/issues/3571)] Update dialogflow configuration form [[#3576](https://github.com/airyhq/airy/pull/3576)] +- [[#3508](https://github.com/airyhq/airy/issues/3508)] Fix empty state connectors [[#3588](https://github.com/airyhq/airy/pull/3588)] +- [[#3572](https://github.com/airyhq/airy/issues/3572)] Use only Kafka when provisioning topics +- [[#3504](https://github.com/airyhq/airy/issues/3504)] Set minimum Kafka replicas to 1 [[#3506](https://github.com/airyhq/airy/pull/3506)] +- [[#3511](https://github.com/airyhq/airy/issues/3511)] Update helm repo before install or upgrade [[#3512](https://github.com/airyhq/airy/pull/3512)] +- [[#3530](https://github.com/airyhq/airy/issues/3530)] Airy controller component name mapping [[#3562](https://github.com/airyhq/airy/pull/3562)] +- [[#3540](https://github.com/airyhq/airy/issues/3540)] Simplify the spanish flag to reduce bundle size [[#3559](https://github.com/airyhq/airy/pull/3559)] +- [[#3541](https://github.com/airyhq/airy/issues/3541)] Rename module for airy-core [[#3547](https://github.com/airyhq/airy/pull/3547)] +- [[#3465](https://github.com/airyhq/airy/issues/3465)] Status view enable button error when component is not configured [[#3481](https://github.com/airyhq/airy/pull/3481)] + +#### 📚 Documentation + +- [[#3539](https://github.com/airyhq/airy/issues/3539)] Documentation update for minikube installation [[#3566](https://github.com/airyhq/airy/pull/3566)] +- [[#3373](https://github.com/airyhq/airy/issues/3373)] Document how we work with rules_go, gazelle, and update-deps [[#3521](https://github.com/airyhq/airy/pull/3521)] +- [[#3558](https://github.com/airyhq/airy/issues/3558)] Docs for Contributing and Defining Components [[#3574](https://github.com/airyhq/airy/pull/3574)] + +#### 🧰 Maintenance -## 0.47.4 +- Bump @reduxjs/toolkit from 1.8.3 to 1.8.4 [[#3593](https://github.com/airyhq/airy/pull/3593)] +- Bump @emoji-mart/data from 1.0.3 to 1.0.5 [[#3594](https://github.com/airyhq/airy/pull/3594)] +- Bump @testing-library/dom from 8.16.1 to 8.17.1 [[#3595](https://github.com/airyhq/airy/pull/3595)] +- Bump @types/jest from 28.1.6 to 28.1.7 [[#3598](https://github.com/airyhq/airy/pull/3598)] +- Bump react-i18next from 11.18.3 to 11.18.4 [[#3596](https://github.com/airyhq/airy/pull/3596)] +- Bump @types/node from 18.7.3 to 18.7.4 [[#3597](https://github.com/airyhq/airy/pull/3597)] +- Bump webpack-dev-server from 4.9.3 to 4.10.0 [[#3585](https://github.com/airyhq/airy/pull/3585)] +- Bump ts-jest from 28.0.7 to 28.0.8 [[#3583](https://github.com/airyhq/airy/pull/3583)] +- Bump preact from 10.10.1 to 10.10.2 [[#3584](https://github.com/airyhq/airy/pull/3584)] +- Bump sass from 1.54.3 to 1.54.4 [[#3586](https://github.com/airyhq/airy/pull/3586)] +- Bump emoji-mart from 5.2.0 to 5.2.1 [[#3587](https://github.com/airyhq/airy/pull/3587)] +- Bump @emoji-mart/react from 1.0.0 to 1.0.1 [[#3578](https://github.com/airyhq/airy/pull/3578)] +- Bump terser-webpack-plugin from 5.3.3 to 5.3.4 [[#3579](https://github.com/airyhq/airy/pull/3579)] +- Bump @types/node from 18.6.4 to 18.7.3 [[#3581](https://github.com/airyhq/airy/pull/3581)] +- Bump i18next from 21.8.16 to 21.9.0 [[#3580](https://github.com/airyhq/airy/pull/3580)] +- Bump @testing-library/user-event from 14.4.2 to 14.4.3 [[#3582](https://github.com/airyhq/airy/pull/3582)] +#### Airy CLI + +You can download the Airy CLI for your operating system from the following links: + +[MacOS](https://airy-core-binaries.s3.amazonaws.com/0.48.0/darwin/amd64/airy) +[Linux](https://airy-core-binaries.s3.amazonaws.com/0.48.0/linux/amd64/airy) +[Windows](https://airy-core-binaries.s3.amazonaws.com/0.48.0/windows/amd64/airy.exe) + +## 0.47.4 + #### Hotfix -* [[#3575](https://github.com/airyhq/airy/issues/3575)] Fix Kafka topics provisioning +- [[#3575](https://github.com/airyhq/airy/issues/3575)] Fix Kafka topics provisioning #### Airy CLI @@ -16,12 +92,12 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.47.4/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.47.4/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.47.4/windows/amd64/airy.exe) - -## 0.47.3 - + +## 0.47.3 + #### Hotfix -* [[#3572](https://github.com/airyhq/airy/issues/3572)] Fix Kafka topics provisioning +* [[[#3572](https://github.com/airyhq/airy/issues/3572)](https://github.com/airyhq/airy/issues/3572)] Fix Kafka topics provisioning #### Airy CLI @@ -30,9 +106,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.47.3/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.47.3/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.47.3/windows/amd64/airy.exe) - -## 0.47.2 - + +## 0.47.2 + #### Hotfix * [[#3553](https://github.com/airyhq/airy/issues/3553)] Fix using a custom Kafka when installing Airy via Helm @@ -44,9 +120,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.47.2/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.47.2/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.47.2/windows/amd64/airy.exe) - -## 0.47.1 - + +## 0.47.1 + #### Hotfix * [[#3510](https://github.com/airyhq/airy/issues/3510)] Fix Kafka replication factor setting @@ -58,9 +134,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.47.1/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.47.1/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.47.1/windows/amd64/airy.exe) - -## 0.47.0 - + +## 0.47.0 + #### Changes #### 🚀 Features @@ -151,9 +227,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.47.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.47.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.47.0/windows/amd64/airy.exe) - -## 0.46.0 - + +## 0.46.0 + #### Changes - [[#3270](https://github.com/airyhq/airy/issues/3270)] Cypress test for contacts page in inbox [[#3290](https://github.com/airyhq/airy/pull/3290)] @@ -212,9 +288,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.46.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.46.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.46.0/windows/amd64/airy.exe) - -## 0.45.1 - + +## 0.45.1 + #### Hotfix * [[#3267](https://github.com/airyhq/airy/issues/3267)] Putting components.* endpoints behind auth @@ -226,9 +302,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.45.1/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.45.1/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.45.1/windows/amd64/airy.exe) - -## 0.45.0 - + +## 0.45.0 + #### Changes - [[#3187](https://github.com/airyhq/airy/issues/3187)] Upgrade to react 18 [[#3222](https://github.com/airyhq/airy/pull/3222)] @@ -298,9 +374,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.45.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.45.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.45.0/windows/amd64/airy.exe) - -## 0.44.0 - + +## 0.44.0 + #### Changes #### 🚀 Features @@ -348,9 +424,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.44.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.44.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.44.0/windows/amd64/airy.exe) - -## 0.43.0 - + +## 0.43.0 + #### 🚀 Features - [[#1279](https://github.com/airyhq/airy/issues/1279)] Helm template on local chart with bazel [[#2922](https://github.com/airyhq/airy/pull/2922)] @@ -403,9 +479,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.43.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.43.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.43.0/windows/amd64/airy.exe) - -## 0.42.0 - + +## 0.42.0 + #### Changes - [[#2960](https://github.com/airyhq/airy/issues/2960)] Add prerequisite property overrides [[#2960](https://github.com/airyhq/airy/pull/2960)] @@ -470,9 +546,9 @@ You can download the Airy CLI for your operating system from the following links #### Upgrade notes -This version introduces a new topology in the `api-communication` component. After the upgrade, the component needs to be reset. For more information how do do this refer to the [docs for resetting a Kafka streaming app](https://develop.docs.airy.co/guides/component-reset). -## 0.41.0 - +This version introduces a new topology in the `api-communication` component. After the upgrade, the component needs to be reset. For more information how do do this refer to the [docs for resetting a Kafka streaming app](https://develop.docs.airy.co/guides/component-reset). +## 0.41.0 + #### 🚀 Features - [[[#2892](https://github.com/airyhq/airy/issues/2892)](https://github.com/airyhq/airy/issues/2892)] Failed message indicator [[[#2923](https://github.com/airyhq/airy/issues/2923)](https://github.com/airyhq/airy/pull/2923)] @@ -537,9 +613,9 @@ You can download the Airy CLI for your operating system from the following links #### Upgrade notes This release introduces a change in the structure of the `airy.yaml` file. The `host` setting is no longer present in the `ingress-controller` section and is moved to the `global` section. For more information refer to the [configuration page](https://airy.co/docs/core/getting-started/installation/configuration). - -## 0.40.0 - + +## 0.40.0 + #### 🚀 Features - [[#2742](https://github.com/airyhq/airy/issues/2742)] List objects in s3 bucket [[#2785](https://github.com/airyhq/airy/pull/2785)] @@ -607,9 +683,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.40.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.40.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.40.0/windows/amd64/airy.exe) - -## 0.39.0 - + +## 0.39.0 + #### Changes #### 🚀 Features @@ -659,9 +735,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.39.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.39.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.39.0/windows/amd64/airy.exe) - -## 0.38.1 - + +## 0.38.1 + #### 🐛 Bug Fixes - [[#2736](https://github.com/airyhq/airy/issues/2736)] Hotfix for re-provisioning topics on upgrade [[#2740](https://github.com/airyhq/airy/pull/2740)] @@ -673,9 +749,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.38.1/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.38.1/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.38.1/windows/amd64/airy.exe) - -## 0.38.0 - + +## 0.38.0 + #### Changes - [[#2697](https://github.com/airyhq/airy/issues/2697)] Fix Chatplugin Cutting in Web Browser [[#2709](https://github.com/airyhq/airy/pull/2709)] @@ -717,9 +793,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.38.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.38.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.38.0/windows/amd64/airy.exe) - -## 0.37.0 - + +## 0.37.0 + #### Changes - [[#2653](https://github.com/airyhq/airy/issues/2653)] upgrade slf4j and underlying log4j libraries [[#2654](https://github.com/airyhq/airy/pull/2654)] @@ -761,9 +837,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.37.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.37.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.37.0/windows/amd64/airy.exe) - -## 0.36.1 - + +## 0.36.1 + #### Changes #### 🐛 Bug Fixes @@ -781,9 +857,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.36.1/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.36.1/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.36.1/windows/amd64/airy.exe) - -## 0.36.0 - + +## 0.36.0 + #### 🚀 Features - [[#2604](https://github.com/airyhq/airy/issues/2604)] Added attachment toggle for chatplugin [[#2609](https://github.com/airyhq/airy/pull/2609)] @@ -804,9 +880,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.36.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.36.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.36.0/windows/amd64/airy.exe) - -## 0.35.1 - + +## 0.35.1 + #### 🚀 Features - [[#2586](https://github.com/airyhq/airy/issues/2586)] Terraform core module has wrong Helm link [[#2587](https://github.com/airyhq/airy/pull/2587)] @@ -836,9 +912,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.35.1/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.35.1/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.35.1/windows/amd64/airy.exe) - -## 0.35.0 - + +## 0.35.0 + #### 🚀 Features - [[#2455](https://github.com/airyhq/airy/issues/2455)] Custom message colors chatplugin [[#2585](https://github.com/airyhq/airy/pull/2585)] @@ -882,9 +958,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.35.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.35.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.35.0/windows/amd64/airy.exe) - -## 0.34.0 - + +## 0.34.0 + #### Changes #### 🚀 Features @@ -917,9 +993,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.34.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.34.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.34.0/windows/amd64/airy.exe) - -## 0.33.0 - + +## 0.33.0 + #### 🚀 Features - [[#2294](https://github.com/airyhq/airy/issues/2294)] Allow creating conversations with Twilio [[#2500](https://github.com/airyhq/airy/pull/2500)] @@ -988,9 +1064,9 @@ This release has breaking changes in the structure of the airy.yaml file. When u from the version of the CLI and the - namespace is used from the workspace file cli.yaml - Rename the `ingress:` section to `ingress-controller:` - -## 0.32.0 - + +## 0.32.0 + #### Changes #### 🚀 Features @@ -1016,9 +1092,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.32.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.32.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.32.0/windows/amd64/airy.exe) - -## 0.31.1 - + +## 0.31.1 + #### 🚀 Features - [[#2432](https://github.com/airyhq/airy/issues/2432)] Added more options to the UI [[#2433](https://github.com/airyhq/airy/pull/2433)] @@ -1040,9 +1116,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.31.1/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.31.1/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.31.1/windows/amd64/airy.exe) - -## 0.31.0 - + +## 0.31.0 + #### 🚀 Features - [[#628](https://github.com/airyhq/airy/issues/628)] Make library compatible with node.js [[#2426](https://github.com/airyhq/airy/pull/2426)] @@ -1082,9 +1158,9 @@ You can download the Airy CLI for your operating system from the following links #### Upgrade notes In the `airy.yaml` file, `host` is moved from the `kubernetes` section, into the `ingress` section. - -## 0.30.0 - + +## 0.30.0 + #### 🚀 Features - [[#2274](https://github.com/airyhq/airy/issues/2274)] Introduce the source API [[#2327](https://github.com/airyhq/airy/pull/2327)] @@ -1133,9 +1209,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.30.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.30.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.30.0/windows/amd64/airy.exe) - -## 0.29.0 - + +## 0.29.0 + #### Changes - [[#2304](https://github.com/airyhq/airy/issues/2304)] Fixed broken link from Messages Send Section to Sources. [[#2307](https://github.com/airyhq/airy/pull/2307)] @@ -1183,9 +1259,9 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.29.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.29.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.29.0/windows/amd64/airy.exe) - -## 0.28.0 - + +## 0.28.0 + #### 🚀 Features - [[#1911](https://github.com/airyhq/airy/issues/1911)] Reorganize the helm charts [[#2241](https://github.com/airyhq/airy/pull/2241)] @@ -1223,55 +1299,4 @@ You can download the Airy CLI for your operating system from the following links [MacOS](https://airy-core-binaries.s3.amazonaws.com/0.28.0/darwin/amd64/airy) [Linux](https://airy-core-binaries.s3.amazonaws.com/0.28.0/linux/amd64/airy) [Windows](https://airy-core-binaries.s3.amazonaws.com/0.28.0/windows/amd64/airy.exe) - -## Hotfix 0.27.1 - -[[#2219](https://github.com/airyhq/airy/issues/2219)] fixed inbox ui overflow bug [[#2220](https://github.com/airyhq/airy/pull/2220)] -## 0.27.0 - -#### Changes - -#### 🚀 Features - -- [[#2148](https://github.com/airyhq/airy/issues/2148)] Enable users to connect via instagram [[#2169](https://github.com/airyhq/airy/pull/2169)] -- [[#2140](https://github.com/airyhq/airy/issues/2140)] Call to /webhooks.subscribe fails when the component is not enabled or crashing [[#2198](https://github.com/airyhq/airy/pull/2198)] -- [[#2117](https://github.com/airyhq/airy/issues/2117)] Ingest and render Google Business Messages requests for live agents [[#2199](https://github.com/airyhq/airy/pull/2199)] -- [[#2168](https://github.com/airyhq/airy/issues/2168)] Support Twilio media url messages [[#2191](https://github.com/airyhq/airy/pull/2191)] - -#### 🐛 Bug Fixes - -- [[#2215](https://github.com/airyhq/airy/issues/2215)] Fix instagram mapper [[#2216](https://github.com/airyhq/airy/pull/2216)] -- [[#2115](https://github.com/airyhq/airy/issues/2115)] Conversation Status Changes occasionally not reflected in Inbox UI [[#2129](https://github.com/airyhq/airy/pull/2129)] -- [[#2002](https://github.com/airyhq/airy/issues/2002)] Fix chatplugin code generator [[#2196](https://github.com/airyhq/airy/pull/2196)] -- [[#2192](https://github.com/airyhq/airy/issues/2192)] Hotfix: Inbox message list crash [[#2194](https://github.com/airyhq/airy/pull/2194)] - -#### 📚 Documentation - -- [[#2186](https://github.com/airyhq/airy/issues/2186)] Small docs fixes [[#2214](https://github.com/airyhq/airy/pull/2214)] - -#### 🧰 Maintenance - -- Bump css-loader from 6.1.0 to 6.2.0 [[#2212](https://github.com/airyhq/airy/pull/2212)] -- Bump style-loader from 3.1.0 to 3.2.1 [[#2209](https://github.com/airyhq/airy/pull/2209)] -- Bump @types/react from 17.0.14 to 17.0.15 [[#2211](https://github.com/airyhq/airy/pull/2211)] -- Bump @babel/core from 7.14.6 to 7.14.8 [[#2206](https://github.com/airyhq/airy/pull/2206)] -- Bump regenerator-runtime from 0.13.7 to 0.13.9 [[#2207](https://github.com/airyhq/airy/pull/2207)] -- Bump sass from 1.35.2 to 1.36.0 [[#2208](https://github.com/airyhq/airy/pull/2208)] -- Bump @types/node from 16.3.3 to 16.4.3 [[#2200](https://github.com/airyhq/airy/pull/2200)] -- Bump webpack from 5.45.1 to 5.46.0 [[#2201](https://github.com/airyhq/airy/pull/2201)] -- Bump @typescript-eslint/parser from 4.28.3 to 4.28.4 [[#2202](https://github.com/airyhq/airy/pull/2202)] -- Bump @babel/preset-env from 7.14.7 to 7.14.8 [[#2205](https://github.com/airyhq/airy/pull/2205)] -- Bump @typescript-eslint/eslint-plugin from 4.28.3 to 4.28.4 [[#2203](https://github.com/airyhq/airy/pull/2203)] -- Bump webpack from 5.40.0 to 5.45.1 [[#2177](https://github.com/airyhq/airy/pull/2177)] - -#### Airy CLI - -You can download the Airy CLI for your operating system from the following links: - -[MacOS](https://airy-core-binaries.s3.amazonaws.com/0.27.0/darwin/amd64/airy) -[Linux](https://airy-core-binaries.s3.amazonaws.com/0.27.0/linux/amd64/airy) -[Windows](https://airy-core-binaries.s3.amazonaws.com/0.27.0/windows/amd64/airy.exe) - -## Hotfix 0.26.3 - -[[#2192](https://github.com/airyhq/airy/issues/2192)] Inbox crashing when selecting conversations in filtered view [[#2193](https://github.com/airyhq/airy/pull/2193)] +