diff --git a/scripts/deploy/deploy-azure.ps1 b/scripts/deploy/deploy-azure.ps1 index eea677665..6fe55ceb9 100644 --- a/scripts/deploy/deploy-azure.ps1 +++ b/scripts/deploy/deploy-azure.ps1 @@ -47,7 +47,7 @@ param( $ResourceGroup, [string] - # Region to which to make the deployment (ignored when deploying to an existing resource group) + # Region to which to make the deployment $Region = "southcentralus", [string] @@ -58,15 +58,11 @@ param( # Azure AD cloud instance for authenticating users $AzureAdInstance = "https://login.microsoftonline.com", - [ValidateSet("Volatile", "AzureCognitiveSearch", "Qdrant", "Postgres")] + [ValidateSet("AzureCognitiveSearch", "Qdrant")] [string] # What method to use to persist embeddings $MemoryStore = "AzureCognitiveSearch", - [SecureString] - # Password for the Postgres database - $SqlAdminPassword, - [switch] # Don't deploy Cosmos DB for chat storage - Use volatile memory instead $NoCosmosDb, @@ -80,7 +76,7 @@ param( $DebugDeployment, [switch] - # Switches on whether to deploy release packages + # Skip deployment of binary packages $NoDeployPackage ) @@ -88,18 +84,17 @@ param( if ($AIService -eq "AzureOpenAI") { # Both $AIEndpoint and $AIApiKey must be set if ((!$AIEndpoint -and $AIApiKey) -or ($AIEndpoint -and !$AIApiKey)) { - Write-Error "When AIService is AzureOpenAI, when either AIEndpoint and AIApiKey are set then both must be set." + Write-Error "When AIService is AzureOpenAI, both AIEndpoint and AIApiKey must be set." exit 1 } # If both $AIEndpoint and $AIApiKey are not set, set $DeployAzureOpenAI to true and inform the user. Otherwise set $DeployAzureOpenAI to false and inform the user. if (!$AIEndpoint -and !$AIApiKey) { $DeployAzureOpenAI = $true - Write-Host "When AIService is AzureOpenAI and both AIEndpoint and AIApiKey are not set then a new Azure OpenAI resource will be created." + Write-Host "When AIService is AzureOpenAI and both AIEndpoint and AIApiKey are not set, then a new Azure OpenAI resource will be created." } else { $DeployAzureOpenAI = $false - Write-Host "When AIService is AzureOpenAI and both AIEndpoint and AIApiKey are set, use the existing Azure OpenAI resource." } } @@ -109,20 +104,13 @@ if ($AIService -eq "OpenAI" -and !$AIApiKey) { exit 1 } -if ($MemoryStore -eq "Postgres" -and !$SqlAdminPassword) { - Write-Host "When MemoryStore is Postgres, SqlAdminPassword must be set" - exit 1 -} - $jsonConfig = " { `\`"webAppServiceSku`\`": { `\`"value`\`": `\`"$WebAppServiceSku`\`" }, `\`"aiService`\`": { `\`"value`\`": `\`"$AIService`\`" }, `\`"aiApiKey`\`": { `\`"value`\`": `\`"$AIApiKey`\`" }, `\`"aiEndpoint`\`": { `\`"value`\`": `\`"$AIEndpoint`\`" }, - `\`"deployWebApiPackage`\`": { `\`"value`\`": $(If (!($NoDeployPackage)) {"true"} Else {"false"}) }, - `\`"deployMemoryPipelinePackage`\`": { `\`"value`\`": $(If (!($NoDeployPackage)) {"true"} Else {"false"}) }, - `\`"deployWebSearcherPackage`\`": { `\`"value`\`": $(If (!($NoDeployPackage)) {"true"} Else {"false"}) }, + `\`"deployPackages`\`": { `\`"value`\`": $(If ($NoDeployPackage) {"false"} Else {"true"}) }, `\`"azureAdInstance`\`": { `\`"value`\`": `\`"$AzureAdInstance`\`" }, `\`"azureAdTenantId`\`": { `\`"value`\`": `\`"$TenantId`\`" }, `\`"webApiClientId`\`": { `\`"value`\`": `\`"$BackendClientId`\`"}, @@ -130,8 +118,7 @@ $jsonConfig = " `\`"deployNewAzureOpenAI`\`": { `\`"value`\`": $(If ($DeployAzureOpenAI) {"true"} Else {"false"}) }, `\`"memoryStore`\`": { `\`"value`\`": `\`"$MemoryStore`\`" }, `\`"deployCosmosDB`\`": { `\`"value`\`": $(If (!($NoCosmosDb)) {"true"} Else {"false"}) }, - `\`"deploySpeechServices`\`": { `\`"value`\`": $(If (!($NoSpeechServices)) {"true"} Else {"false"}) }, - `\`"sqlAdminPassword`\`": { `\`"value`\`": `\`"$(If ($SqlAdminPassword) {ConvertFrom-SecureString $SqlAdminPassword -AsPlainText} Else {$null})`\`" } + `\`"deploySpeechServices`\`": { `\`"value`\`": $(If (!($NoSpeechServices)) {"true"} Else {"false"}) } } " diff --git a/scripts/deploy/deploy-azure.sh b/scripts/deploy/deploy-azure.sh index 3bc0cae50..dac1f827e 100755 --- a/scripts/deploy/deploy-azure.sh +++ b/scripts/deploy/deploy-azure.sh @@ -22,12 +22,11 @@ usage() { echo " -i, --instance AZURE_AD_INSTANCE Azure AD cloud instance for authenticating users" echo " (default: \"https://login.microsoftonline.com\")" echo " -ms, --memory-store Method to use to persist embeddings. Valid values are" - echo " \"AzureCognitiveSearch\" (default), \"Qdrant\", \"Postgres\" and \"Volatile\"" - echo " -sap, --sql-admin-password Password for the PostgreSQL Server admin user" + echo " \"AzureCognitiveSearch\" (default) and \"Qdrant\"" echo " -nc, --no-cosmos-db Don't deploy Cosmos DB for chat storage - Use volatile memory instead" echo " -ns, --no-speech-services Don't deploy Speech Services to enable speech as chat input" echo " -dd, --debug-deployment Switches on verbose template deployment output" - echo " -ndp, --no-deploy-package Skips deploying the Web API package when set." + echo " -ndp, --no-deploy-package Skips deploying binary packages to cloud when set." } # Parse arguments @@ -98,11 +97,6 @@ while [[ $# -gt 0 ]]; do MEMORY_STORE=="$2" shift ;; - -sap | --sql-admin-password) - SQL_ADMIN_PASSWORD="$2" - shift - shift - ;; -nc | --no-cosmos-db) NO_COSMOS_DB=true shift @@ -166,13 +160,6 @@ if [[ "${AI_SERVICE_TYPE,,}" = "openai" ]] && [[ -z "$AI_SERVICE_KEY" ]]; then exit 1 fi -# If MEMORY_STORE is Postges, then SQL_ADMIN_PASSWORD is mandatory -if [[ "${MEMORY_STORE,,}" = "postgres" ]] && [[ -z "$SQL_ADMIN_PASSWORD" ]]; then - echo "When --memory-store is 'Postgres', --sql-admin-password must be set." - usage - exit 1 -fi - # If resource group is not set, then set it to rg-DEPLOYMENT_NAME if [ -z "$RESOURCE_GROUP" ]; then RESOURCE_GROUP="rg-${DEPLOYMENT_NAME}" @@ -203,9 +190,7 @@ JSON_CONFIG=$( "webAppServiceSku": { "value": "$WEB_APP_SVC_SKU" }, "aiService": { "value": "$AI_SERVICE_TYPE" }, "aiApiKey": { "value": "$AI_SERVICE_KEY" }, - "deployWebApiPackage": { "value": $([ "$NO_DEPLOY_PACKAGE" = true ] && echo "false" || echo "true") }, - "deployMemoryPipelinePackage": { "value": $([ "$NO_DEPLOY_PACKAGE" = true ] && echo "false" || echo "true") }, - "deployWebSearcherPackage": { "value": $([ "$NO_DEPLOY_PACKAGE" = true ] && echo "false" || echo "true") }, + "deployPackages": { "value": $([ "$NO_DEPLOY_PACKAGE" = true ] && echo "false" || echo "true") }, "aiEndpoint": { "value": "$([ ! -z "$AI_ENDPOINT" ] && echo "$AI_ENDPOINT")" }, "azureAdInstance": { "value": "$AZURE_AD_INSTANCE" }, "azureAdTenantId": { "value": "$AZURE_AD_TENANT_ID" }, @@ -213,7 +198,6 @@ JSON_CONFIG=$( "frontendClientId": { "value": "$FRONTEND_CLIENT_ID" }, "deployNewAzureOpenAI": { "value": $([ "$NO_NEW_AZURE_OPENAI" = true ] && echo "false" || echo "true") }, "memoryStore": { "value": "$MEMORY_STORE" }, - "sqlAdminPassword": { "value": "$SQL_ADMIN_PASSWORD" }, "deployCosmosDB": { "value": $([ "$NO_COSMOS_DB" = true ] && echo "false" || echo "true") }, "deploySpeechServices": { "value": $([ "$NO_SPEECH_SERVICES" = true ] && echo "false" || echo "true") } } diff --git a/scripts/deploy/main.bicep b/scripts/deploy/main.bicep index 4d2c51cdc..13f6c34c6 100644 --- a/scripts/deploy/main.bicep +++ b/scripts/deploy/main.bicep @@ -67,24 +67,16 @@ param deployCosmosDB bool = true @description('What method to use to persist embeddings') @allowed([ - 'Volatile' 'AzureCognitiveSearch' 'Qdrant' - 'Postgres' ]) -param memoryStore string = 'Volatile' +param memoryStore string = 'AzureCognitiveSearch' @description('Whether to deploy Azure Speech Services to enable input by voice') param deploySpeechServices bool = true -@description('Whether to deploy the backend Web API package') -param deployWebApiPackage bool = true - -@description('Whether to deploy the memory pipeline package') -param deployMemoryPipelinePackage bool = true - -@description('Whether to deploy the websearcher plugin package') -param deployWebSearcherPackage bool = true +@description('Whether to deploy binary packages to the cloud') +param deployPackages bool = true @description('Region for the resources') param location string = resourceGroup().location @@ -98,10 +90,6 @@ var uniqueName = '${name}-${rgIdHash}' @description('Name of the Azure Storage file share to create') var storageFileShareName = 'aciqdrantshare' -@description('PostgreSQL admin password') -@secure() -param sqlAdminPassword string = newGuid() - resource openAI 'Microsoft.CognitiveServices/accounts@2022-12-01' = if (deployNewAzureOpenAI) { name: 'ai-${uniqueName}' location: location @@ -242,30 +230,6 @@ resource appServiceWebConfig 'Microsoft.Web/sites/config@2022-09-01' = { name: 'ChatStore:Cosmos:ConnectionString' value: deployCosmosDB ? cosmosAccount.listConnectionStrings().connectionStrings[0].connectionString : '' } - { - name: 'MemoryStore:Type' - value: memoryStore - } - { - name: 'MemoryStore:Qdrant:Host' - value: memoryStore == 'Qdrant' ? 'https://${appServiceQdrant.properties.defaultHostName}' : '' - } - { - name: 'MemoryStore:Qdrant:Port' - value: '443' - } - { - name: 'MemoryStore:AzureCognitiveSearch:Endpoint' - value: memoryStore == 'AzureCognitiveSearch' ? 'https://${azureCognitiveSearch.name}.search.windows.net' : '' - } - { - name: 'MemoryStore:AzureCognitiveSearch:Key' - value: memoryStore == 'AzureCognitiveSearch' ? azureCognitiveSearch.listAdminKeys().primaryKey : '' - } - { - name: 'MemoryStore:Postgres:ConnectionString' - value: memoryStore == 'Postgres' ? 'Host=${postgreServerGroup.properties.serverNames[0].fullyQualifiedDomainName}:5432;Username=citus;Password=${sqlAdminPassword};Database=citus' : '' - } { name: 'AzureSpeech:Region' value: location @@ -312,7 +276,7 @@ resource appServiceWebConfig 'Microsoft.Web/sites/config@2022-09-01' = { } { name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' - value: appInsightsWeb.properties.ConnectionString + value: appInsights.properties.ConnectionString } { name: 'ApplicationInsightsAgent_EXTENSION_VERSION' @@ -382,6 +346,10 @@ resource appServiceWebConfig 'Microsoft.Web/sites/config@2022-09-01' = { name: 'SemanticMemory:Services:AzureCognitiveSearch:APIKey' value: memoryStore == 'AzureCognitiveSearch' ? azureCognitiveSearch.listAdminKeys().primaryKey : '' } + { + name: 'SemanticMemory:Services:Qdrant:Endpoint' + value: memoryStore == 'Qdrant' ? 'https://${appServiceQdrant.properties.defaultHostName}' : '' + } { name: 'SemanticMemory:Services:AzureOpenAIText:Auth' value: 'ApiKey' @@ -438,7 +406,7 @@ resource appServiceWebConfig 'Microsoft.Web/sites/config@2022-09-01' = { } } -resource appServiceWebDeploy 'Microsoft.Web/sites/extensions@2022-09-01' = if (deployWebApiPackage) { +resource appServiceWebDeploy 'Microsoft.Web/sites/extensions@2022-09-01' = if (deployPackages) { name: 'MSDeploy' kind: 'string' parent: appServiceWeb @@ -459,6 +427,7 @@ resource appServiceMemoryPipeline 'Microsoft.Web/sites@2022-09-01' = { } properties: { serverFarmId: appServicePlan.id + virtualNetworkSubnetId: virtualNetwork.properties.subnets[0].id siteConfig: { alwaysOn: true } @@ -474,6 +443,8 @@ resource appServiceMemoryPipelineConfig 'Microsoft.Web/sites/config@2022-09-01' minTlsVersion: '1.2' netFrameworkVersion: 'v6.0' use32BitWorkerProcess: false + vnetName: webSubnetConnection.name + vnetRouteAllEnabled: true appSettings: [ { name: 'SemanticMemory:ContentStorageType' @@ -543,6 +514,10 @@ resource appServiceMemoryPipelineConfig 'Microsoft.Web/sites/config@2022-09-01' name: 'SemanticMemory:Services:AzureCognitiveSearch:APIKey' value: memoryStore == 'AzureCognitiveSearch' ? azureCognitiveSearch.listAdminKeys().primaryKey : '' } + { + name: 'SemanticMemory:Services:Qdrant:Endpoint' + value: memoryStore == 'Qdrant' ? 'https://${appServiceQdrant.properties.defaultHostName}' : '' + } { name: 'SemanticMemory:Services:AzureOpenAIText:Auth' value: 'ApiKey' @@ -601,13 +576,13 @@ resource appServiceMemoryPipelineConfig 'Microsoft.Web/sites/config@2022-09-01' } { name: 'ApplicationInsights:ConnectionString' - value: appInsightsMemoryPipeline.properties.ConnectionString + value: appInsights.properties.ConnectionString } ] } } -resource appServiceMemoryPipelineDeploy 'Microsoft.Web/sites/extensions@2022-09-01' = if (deployMemoryPipelinePackage) { +resource appServiceMemoryPipelineDeploy 'Microsoft.Web/sites/extensions@2022-09-01' = if (deployPackages) { name: 'MSDeploy' kind: 'string' parent: appServiceMemoryPipeline @@ -655,7 +630,7 @@ resource functionAppWebSearcherPluginConfig 'Microsoft.Web/sites/config@2022-09- } { name: 'APPINSIGHTS_INSTRUMENTATIONKEY' - value: appInsightsWebSearcherPlugin.properties.InstrumentationKey + value: appInsights.properties.InstrumentationKey } { name: 'PluginConfig:BingApiKey' @@ -665,7 +640,7 @@ resource functionAppWebSearcherPluginConfig 'Microsoft.Web/sites/config@2022-09- } } -resource functionAppWebSearcherDeploy 'Microsoft.Web/sites/extensions@2022-09-01' = if (deployWebSearcherPackage) { +resource functionAppWebSearcherDeploy 'Microsoft.Web/sites/extensions@2022-09-01' = if (deployPackages) { name: 'MSDeploy' kind: 'string' parent: functionAppWebSearcherPlugin @@ -677,12 +652,12 @@ resource functionAppWebSearcherDeploy 'Microsoft.Web/sites/extensions@2022-09-01 ] } -resource appInsightsWeb 'Microsoft.Insights/components@2020-02-02' = { - name: 'appins-${uniqueName}-webapi' +resource appInsights 'Microsoft.Insights/components@2020-02-02' = { + name: 'appins-${uniqueName}' location: location kind: 'string' tags: { - displayName: 'AppInsightWeb' + displayName: 'AppInsight' } properties: { Application_Type: 'web' @@ -693,40 +668,19 @@ resource appInsightsWeb 'Microsoft.Insights/components@2020-02-02' = { resource appInsightExtensionWeb 'Microsoft.Web/sites/siteextensions@2022-09-01' = { parent: appServiceWeb name: 'Microsoft.ApplicationInsights.AzureWebSites' - dependsOn: [ appServiceWebConfig ] -} - -resource appInsightsMemoryPipeline 'Microsoft.Insights/components@2020-02-02' = { - name: 'appins-${uniqueName}-memorypipeline' - location: location - kind: 'string' - tags: { - displayName: 'AppInsightMemoryPipeline' - } - properties: { - Application_Type: 'web' - WorkspaceResourceId: logAnalyticsWorkspace.id - } + dependsOn: [ appServiceWebDeploy ] } -resource appInsightExtensionMemoryPipeline 'Microsoft.Web/sites/siteextensions@2022-09-01' = { +resource appInsightExtensionMemory 'Microsoft.Web/sites/siteextensions@2022-09-01' = { parent: appServiceMemoryPipeline name: 'Microsoft.ApplicationInsights.AzureWebSites' - dependsOn: [ appServiceMemoryPipelineConfig ] + dependsOn: [ appServiceMemoryPipelineDeploy ] } -resource appInsightsWebSearcherPlugin 'Microsoft.Insights/components@2020-02-02' = { - name: 'appins-${uniqueName}-websearcher-plugin' - location: location - kind: 'web' - tags: { - displayName: 'AppInsightWebSearcherPlugin' - } - properties: { - Application_Type: 'web' - Request_Source: 'IbizaWebAppExtensionCreate' - WorkspaceResourceId: logAnalyticsWorkspace.id - } +resource appInsightExtensionWebSearchPlugin 'Microsoft.Web/sites/siteextensions@2022-09-01' = { + parent: functionAppWebSearcherPlugin + name: 'Microsoft.ApplicationInsights.AzureWebSites' + dependsOn: [ functionAppWebSearcherDeploy ] } resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2022-10-01' = { @@ -1109,76 +1063,6 @@ resource memorySourcesContainer 'Microsoft.DocumentDB/databaseAccounts/sqlDataba } } -resource postgreServerGroup 'Microsoft.DBforPostgreSQL/serverGroupsv2@2022-11-08' = if (memoryStore == 'Postgres') { - name: 'pg-${uniqueName}' - location: location - properties: { - postgresqlVersion: '15' - administratorLoginPassword: sqlAdminPassword - enableHa: false - coordinatorVCores: 1 - coordinatorServerEdition: 'BurstableMemoryOptimized' - coordinatorStorageQuotaInMb: 32768 - nodeVCores: 4 - nodeCount: 0 - nodeStorageQuotaInMb: 524288 - nodeEnablePublicIpAccess: false - } -} - -resource postgresDNSZone 'Microsoft.Network/privateDnsZones@2020-06-01' = if (memoryStore == 'Postgres') { - name: 'privatelink.postgres.cosmos.azure.com' - location: 'global' -} - -resource postgresPrivateEndpoint 'Microsoft.Network/privateEndpoints@2023-05-01' = if (memoryStore == 'Postgres') { - name: 'pg-${uniqueName}-pe' - location: location - properties: { - subnet: { - id: virtualNetwork.properties.subnets[2].id - } - privateLinkServiceConnections: [ - { - name: 'postgres' - properties: { - privateLinkServiceId: postgreServerGroup.id - groupIds: [ - 'coordinator' - ] - } - } - ] - } -} - -resource postgresVirtualNetworkLink 'Microsoft.Network/privateDnsZones/virtualNetworkLinks@2020-06-01' = if (memoryStore == 'Postgres') { - parent: postgresDNSZone - name: 'pg-${uniqueName}-vnl' - location: 'global' - properties: { - virtualNetwork: { - id: virtualNetwork.id - } - registrationEnabled: true - } -} - -resource postgresPrivateDnsZoneGroup 'Microsoft.Network/privateEndpoints/privateDnsZoneGroups@2023-04-01' = if (memoryStore == 'Postgres') { - #disable-next-line use-parent-property - name: '${postgresPrivateEndpoint.name}/default' - properties: { - privateDnsZoneConfigs: [ - { - name: 'postgres' - properties: { - privateDnsZoneId: postgresDNSZone.id - } - } - ] - } -} - resource speechAccount 'Microsoft.CognitiveServices/accounts@2022-12-01' = if (deploySpeechServices) { name: 'cog-speech-${uniqueName}' location: location diff --git a/scripts/deploy/main.json b/scripts/deploy/main.json index b89754164..475d3a7f9 100644 --- a/scripts/deploy/main.json +++ b/scripts/deploy/main.json @@ -4,8 +4,8 @@ "metadata": { "_generator": { "name": "bicep", - "version": "0.21.1.54444", - "templateHash": "4239752954578942550" + "version": "0.22.6.54827", + "templateHash": "9519863138806302085" } }, "parameters": { @@ -144,12 +144,10 @@ }, "memoryStore": { "type": "string", - "defaultValue": "Volatile", + "defaultValue": "AzureCognitiveSearch", "allowedValues": [ - "Volatile", "AzureCognitiveSearch", - "Qdrant", - "Postgres" + "Qdrant" ], "metadata": { "description": "What method to use to persist embeddings" @@ -162,25 +160,11 @@ "description": "Whether to deploy Azure Speech Services to enable input by voice" } }, - "deployWebApiPackage": { + "deployPackages": { "type": "bool", "defaultValue": true, "metadata": { - "description": "Whether to deploy the backend Web API package" - } - }, - "deployMemoryPipelinePackage": { - "type": "bool", - "defaultValue": true, - "metadata": { - "description": "Whether to deploy the memory pipeline package" - } - }, - "deployWebSearcherPackage": { - "type": "bool", - "defaultValue": true, - "metadata": { - "description": "Whether to deploy the websearcher plugin package" + "description": "Whether to deploy binary packages to the cloud" } }, "location": { @@ -189,13 +173,6 @@ "metadata": { "description": "Region for the resources" } - }, - "sqlAdminPassword": { - "type": "securestring", - "defaultValue": "[newGuid()]", - "metadata": { - "description": "PostgreSQL admin password" - } } }, "variables": { @@ -377,30 +354,6 @@ "name": "ChatStore:Cosmos:ConnectionString", "value": "[if(parameters('deployCosmosDB'), listConnectionStrings(resourceId('Microsoft.DocumentDB/databaseAccounts', toLower(format('cosmos-{0}', variables('uniqueName')))), '2023-04-15').connectionStrings[0].connectionString, '')]" }, - { - "name": "MemoryStore:Type", - "value": "[parameters('memoryStore')]" - }, - { - "name": "MemoryStore:Qdrant:Host", - "value": "[if(equals(parameters('memoryStore'), 'Qdrant'), format('https://{0}', reference(resourceId('Microsoft.Web/sites', format('app-{0}-qdrant', variables('uniqueName'))), '2022-09-01').defaultHostName), '')]" - }, - { - "name": "MemoryStore:Qdrant:Port", - "value": "443" - }, - { - "name": "MemoryStore:AzureCognitiveSearch:Endpoint", - "value": "[if(equals(parameters('memoryStore'), 'AzureCognitiveSearch'), format('https://{0}.search.windows.net', format('acs-{0}', variables('uniqueName'))), '')]" - }, - { - "name": "MemoryStore:AzureCognitiveSearch:Key", - "value": "[if(equals(parameters('memoryStore'), 'AzureCognitiveSearch'), listAdminKeys(resourceId('Microsoft.Search/searchServices', format('acs-{0}', variables('uniqueName'))), '2022-09-01').primaryKey, '')]" - }, - { - "name": "MemoryStore:Postgres:ConnectionString", - "value": "[if(equals(parameters('memoryStore'), 'Postgres'), format('Host={0}:5432;Username=citus;Password={1};Database=citus', reference(resourceId('Microsoft.DBforPostgreSQL/serverGroupsv2', format('pg-{0}', variables('uniqueName'))), '2022-11-08').serverNames[0].fullyQualifiedDomainName, parameters('sqlAdminPassword')), '')]" - }, { "name": "AzureSpeech:Region", "value": "[parameters('location')]" @@ -447,7 +400,7 @@ }, { "name": "APPLICATIONINSIGHTS_CONNECTION_STRING", - "value": "[reference(resourceId('Microsoft.Insights/components', format('appins-{0}-webapi', variables('uniqueName'))), '2020-02-02').ConnectionString]" + "value": "[reference(resourceId('Microsoft.Insights/components', format('appins-{0}', variables('uniqueName'))), '2020-02-02').ConnectionString]" }, { "name": "ApplicationInsightsAgent_EXTENSION_VERSION", @@ -517,6 +470,10 @@ "name": "SemanticMemory:Services:AzureCognitiveSearch:APIKey", "value": "[if(equals(parameters('memoryStore'), 'AzureCognitiveSearch'), listAdminKeys(resourceId('Microsoft.Search/searchServices', format('acs-{0}', variables('uniqueName'))), '2022-09-01').primaryKey, '')]" }, + { + "name": "SemanticMemory:Services:Qdrant:Endpoint", + "value": "[if(equals(parameters('memoryStore'), 'Qdrant'), format('https://{0}', reference(resourceId('Microsoft.Web/sites', format('app-{0}-qdrant', variables('uniqueName'))), '2022-09-01').defaultHostName), '')]" + }, { "name": "SemanticMemory:Services:AzureOpenAIText:Auth", "value": "ApiKey" @@ -572,20 +529,19 @@ ] }, "dependsOn": [ - "[resourceId('Microsoft.Insights/components', format('appins-{0}-webapi', variables('uniqueName')))]", + "[resourceId('Microsoft.Insights/components', format('appins-{0}', variables('uniqueName')))]", "[resourceId('Microsoft.Web/sites', format('app-{0}-qdrant', variables('uniqueName')))]", "[resourceId('Microsoft.Web/sites', format('app-{0}-webapi', variables('uniqueName')))]", "[resourceId('Microsoft.Search/searchServices', format('acs-{0}', variables('uniqueName')))]", "[resourceId('Microsoft.DocumentDB/databaseAccounts', toLower(format('cosmos-{0}', variables('uniqueName'))))]", "[resourceId('Microsoft.Web/sites', format('function-{0}-websearcher-plugin', variables('uniqueName')))]", "[resourceId('Microsoft.CognitiveServices/accounts', format('ai-{0}', variables('uniqueName')))]", - "[resourceId('Microsoft.DBforPostgreSQL/serverGroupsv2', format('pg-{0}', variables('uniqueName')))]", "[resourceId('Microsoft.CognitiveServices/accounts', format('cog-speech-{0}', variables('uniqueName')))]", "[resourceId('Microsoft.Storage/storageAccounts', format('st{0}', variables('rgIdHash')))]" ] }, { - "condition": "[parameters('deployWebApiPackage')]", + "condition": "[parameters('deployPackages')]", "type": "Microsoft.Web/sites/extensions", "apiVersion": "2022-09-01", "name": "[format('{0}/{1}', format('app-{0}-webapi', variables('uniqueName')), 'MSDeploy')]", @@ -609,12 +565,14 @@ }, "properties": { "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', format('asp-{0}-webapi', variables('uniqueName')))]", + "virtualNetworkSubnetId": "[reference(resourceId('Microsoft.Network/virtualNetworks', format('vnet-{0}', variables('uniqueName'))), '2021-05-01').subnets[0].id]", "siteConfig": { "alwaysOn": true } }, "dependsOn": [ - "[resourceId('Microsoft.Web/serverfarms', format('asp-{0}-webapi', variables('uniqueName')))]" + "[resourceId('Microsoft.Web/serverfarms', format('asp-{0}-webapi', variables('uniqueName')))]", + "[resourceId('Microsoft.Network/virtualNetworks', format('vnet-{0}', variables('uniqueName')))]" ] }, { @@ -627,6 +585,8 @@ "minTlsVersion": "1.2", "netFrameworkVersion": "v6.0", "use32BitWorkerProcess": false, + "vnetName": "webSubnetConnection", + "vnetRouteAllEnabled": true, "appSettings": [ { "name": "SemanticMemory:ContentStorageType", @@ -696,6 +656,10 @@ "name": "SemanticMemory:Services:AzureCognitiveSearch:APIKey", "value": "[if(equals(parameters('memoryStore'), 'AzureCognitiveSearch'), listAdminKeys(resourceId('Microsoft.Search/searchServices', format('acs-{0}', variables('uniqueName'))), '2022-09-01').primaryKey, '')]" }, + { + "name": "SemanticMemory:Services:Qdrant:Endpoint", + "value": "[if(equals(parameters('memoryStore'), 'Qdrant'), format('https://{0}', reference(resourceId('Microsoft.Web/sites', format('app-{0}-qdrant', variables('uniqueName'))), '2022-09-01').defaultHostName), '')]" + }, { "name": "SemanticMemory:Services:AzureOpenAIText:Auth", "value": "ApiKey" @@ -754,21 +718,23 @@ }, { "name": "ApplicationInsights:ConnectionString", - "value": "[reference(resourceId('Microsoft.Insights/components', format('appins-{0}-memorypipeline', variables('uniqueName'))), '2020-02-02').ConnectionString]" + "value": "[reference(resourceId('Microsoft.Insights/components', format('appins-{0}', variables('uniqueName'))), '2020-02-02').ConnectionString]" } ] }, "dependsOn": [ - "[resourceId('Microsoft.Insights/components', format('appins-{0}-memorypipeline', variables('uniqueName')))]", + "[resourceId('Microsoft.Insights/components', format('appins-{0}', variables('uniqueName')))]", "[resourceId('Microsoft.Web/sites', format('app-{0}-memorypipeline', variables('uniqueName')))]", + "[resourceId('Microsoft.Web/sites', format('app-{0}-qdrant', variables('uniqueName')))]", "[resourceId('Microsoft.Search/searchServices', format('acs-{0}', variables('uniqueName')))]", "[resourceId('Microsoft.CognitiveServices/accounts', format('cog-ocr-{0}', variables('uniqueName')))]", "[resourceId('Microsoft.CognitiveServices/accounts', format('ai-{0}', variables('uniqueName')))]", - "[resourceId('Microsoft.Storage/storageAccounts', format('st{0}', variables('rgIdHash')))]" + "[resourceId('Microsoft.Storage/storageAccounts', format('st{0}', variables('rgIdHash')))]", + "[resourceId('Microsoft.Web/sites/virtualNetworkConnections', format('app-{0}-webapi', variables('uniqueName')), 'webSubnetConnection')]" ] }, { - "condition": "[parameters('deployMemoryPipelinePackage')]", + "condition": "[parameters('deployPackages')]", "type": "Microsoft.Web/sites/extensions", "apiVersion": "2022-09-01", "name": "[format('{0}/{1}', format('app-{0}-memorypipeline', variables('uniqueName')), 'MSDeploy')]", @@ -822,7 +788,7 @@ }, { "name": "APPINSIGHTS_INSTRUMENTATIONKEY", - "value": "[reference(resourceId('Microsoft.Insights/components', format('appins-{0}-websearcher-plugin', variables('uniqueName'))), '2020-02-02').InstrumentationKey]" + "value": "[reference(resourceId('Microsoft.Insights/components', format('appins-{0}', variables('uniqueName'))), '2020-02-02').InstrumentationKey]" }, { "name": "PluginConfig:BingApiKey", @@ -831,14 +797,14 @@ ] }, "dependsOn": [ - "[resourceId('Microsoft.Insights/components', format('appins-{0}-websearcher-plugin', variables('uniqueName')))]", + "[resourceId('Microsoft.Insights/components', format('appins-{0}', variables('uniqueName')))]", "[resourceId('Microsoft.Bing/accounts', format('bing-search-{0}', variables('uniqueName')))]", "[resourceId('Microsoft.Web/sites', format('function-{0}-websearcher-plugin', variables('uniqueName')))]", "[resourceId('Microsoft.Storage/storageAccounts', format('st{0}', variables('rgIdHash')))]" ] }, { - "condition": "[parameters('deployWebSearcherPackage')]", + "condition": "[parameters('deployPackages')]", "type": "Microsoft.Web/sites/extensions", "apiVersion": "2022-09-01", "name": "[format('{0}/{1}', format('function-{0}-websearcher-plugin', variables('uniqueName')), 'MSDeploy')]", @@ -854,11 +820,11 @@ { "type": "Microsoft.Insights/components", "apiVersion": "2020-02-02", - "name": "[format('appins-{0}-webapi', variables('uniqueName'))]", + "name": "[format('appins-{0}', variables('uniqueName'))]", "location": "[parameters('location')]", "kind": "string", "tags": { - "displayName": "AppInsightWeb" + "displayName": "AppInsight" }, "properties": { "Application_Type": "web", @@ -874,24 +840,7 @@ "name": "[format('{0}/{1}', format('app-{0}-webapi', variables('uniqueName')), 'Microsoft.ApplicationInsights.AzureWebSites')]", "dependsOn": [ "[resourceId('Microsoft.Web/sites', format('app-{0}-webapi', variables('uniqueName')))]", - "[resourceId('Microsoft.Web/sites/config', format('app-{0}-webapi', variables('uniqueName')), 'web')]" - ] - }, - { - "type": "Microsoft.Insights/components", - "apiVersion": "2020-02-02", - "name": "[format('appins-{0}-memorypipeline', variables('uniqueName'))]", - "location": "[parameters('location')]", - "kind": "string", - "tags": { - "displayName": "AppInsightMemoryPipeline" - }, - "properties": { - "Application_Type": "web", - "WorkspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', format('la-{0}', variables('uniqueName')))]" - }, - "dependsOn": [ - "[resourceId('Microsoft.OperationalInsights/workspaces', format('la-{0}', variables('uniqueName')))]" + "[resourceId('Microsoft.Web/sites/extensions', format('app-{0}-webapi', variables('uniqueName')), 'MSDeploy')]" ] }, { @@ -900,25 +849,16 @@ "name": "[format('{0}/{1}', format('app-{0}-memorypipeline', variables('uniqueName')), 'Microsoft.ApplicationInsights.AzureWebSites')]", "dependsOn": [ "[resourceId('Microsoft.Web/sites', format('app-{0}-memorypipeline', variables('uniqueName')))]", - "[resourceId('Microsoft.Web/sites/config', format('app-{0}-memorypipeline', variables('uniqueName')), 'web')]" + "[resourceId('Microsoft.Web/sites/extensions', format('app-{0}-memorypipeline', variables('uniqueName')), 'MSDeploy')]" ] }, { - "type": "Microsoft.Insights/components", - "apiVersion": "2020-02-02", - "name": "[format('appins-{0}-websearcher-plugin', variables('uniqueName'))]", - "location": "[parameters('location')]", - "kind": "web", - "tags": { - "displayName": "AppInsightWebSearcherPlugin" - }, - "properties": { - "Application_Type": "web", - "Request_Source": "IbizaWebAppExtensionCreate", - "WorkspaceResourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', format('la-{0}', variables('uniqueName')))]" - }, + "type": "Microsoft.Web/sites/siteextensions", + "apiVersion": "2022-09-01", + "name": "[format('{0}/{1}', format('function-{0}-websearcher-plugin', variables('uniqueName')), 'Microsoft.ApplicationInsights.AzureWebSites')]", "dependsOn": [ - "[resourceId('Microsoft.OperationalInsights/workspaces', format('la-{0}', variables('uniqueName')))]" + "[resourceId('Microsoft.Web/sites/extensions', format('function-{0}-websearcher-plugin', variables('uniqueName')), 'MSDeploy')]", + "[resourceId('Microsoft.Web/sites', format('function-{0}-websearcher-plugin', variables('uniqueName')))]" ] }, { @@ -1349,96 +1289,6 @@ "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', toLower(format('cosmos-{0}', variables('uniqueName'))), 'CopilotChat')]" ] }, - { - "condition": "[equals(parameters('memoryStore'), 'Postgres')]", - "type": "Microsoft.DBforPostgreSQL/serverGroupsv2", - "apiVersion": "2022-11-08", - "name": "[format('pg-{0}', variables('uniqueName'))]", - "location": "[parameters('location')]", - "properties": { - "postgresqlVersion": "15", - "administratorLoginPassword": "[parameters('sqlAdminPassword')]", - "enableHa": false, - "coordinatorVCores": 1, - "coordinatorServerEdition": "BurstableMemoryOptimized", - "coordinatorStorageQuotaInMb": 32768, - "nodeVCores": 4, - "nodeCount": 0, - "nodeStorageQuotaInMb": 524288, - "nodeEnablePublicIpAccess": false - } - }, - { - "condition": "[equals(parameters('memoryStore'), 'Postgres')]", - "type": "Microsoft.Network/privateDnsZones", - "apiVersion": "2020-06-01", - "name": "privatelink.postgres.cosmos.azure.com", - "location": "global" - }, - { - "condition": "[equals(parameters('memoryStore'), 'Postgres')]", - "type": "Microsoft.Network/privateEndpoints", - "apiVersion": "2023-05-01", - "name": "[format('pg-{0}-pe', variables('uniqueName'))]", - "location": "[parameters('location')]", - "properties": { - "subnet": { - "id": "[reference(resourceId('Microsoft.Network/virtualNetworks', format('vnet-{0}', variables('uniqueName'))), '2021-05-01').subnets[2].id]" - }, - "privateLinkServiceConnections": [ - { - "name": "postgres", - "properties": { - "privateLinkServiceId": "[resourceId('Microsoft.DBforPostgreSQL/serverGroupsv2', format('pg-{0}', variables('uniqueName')))]", - "groupIds": [ - "coordinator" - ] - } - } - ] - }, - "dependsOn": [ - "[resourceId('Microsoft.DBforPostgreSQL/serverGroupsv2', format('pg-{0}', variables('uniqueName')))]", - "[resourceId('Microsoft.Network/virtualNetworks', format('vnet-{0}', variables('uniqueName')))]" - ] - }, - { - "condition": "[equals(parameters('memoryStore'), 'Postgres')]", - "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks", - "apiVersion": "2020-06-01", - "name": "[format('{0}/{1}', 'privatelink.postgres.cosmos.azure.com', format('pg-{0}-vnl', variables('uniqueName')))]", - "location": "global", - "properties": { - "virtualNetwork": { - "id": "[resourceId('Microsoft.Network/virtualNetworks', format('vnet-{0}', variables('uniqueName')))]" - }, - "registrationEnabled": true - }, - "dependsOn": [ - "[resourceId('Microsoft.Network/privateDnsZones', 'privatelink.postgres.cosmos.azure.com')]", - "[resourceId('Microsoft.Network/virtualNetworks', format('vnet-{0}', variables('uniqueName')))]" - ] - }, - { - "condition": "[equals(parameters('memoryStore'), 'Postgres')]", - "type": "Microsoft.Network/privateEndpoints/privateDnsZoneGroups", - "apiVersion": "2023-04-01", - "name": "[format('{0}/default', format('pg-{0}-pe', variables('uniqueName')))]", - "properties": { - "privateDnsZoneConfigs": [ - { - "name": "postgres", - "properties": { - "privateDnsZoneId": "[resourceId('Microsoft.Network/privateDnsZones', 'privatelink.postgres.cosmos.azure.com')]" - } - } - ] - }, - "dependsOn": [ - "[resourceId('Microsoft.Network/privateDnsZones', 'privatelink.postgres.cosmos.azure.com')]", - "[resourceId('Microsoft.Network/privateEndpoints', format('pg-{0}-pe', variables('uniqueName')))]" - ] - }, { "condition": "[parameters('deploySpeechServices')]", "type": "Microsoft.CognitiveServices/accounts", diff --git a/webapp/package.json b/webapp/package.json index 7d5928594..b2db164d8 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -18,11 +18,11 @@ "@azure/msal-browser": "^2.38.2", "@azure/msal-react": "^1.5.11", "@fluentui/react-components": "^9.34.1", - "@fluentui/react-icons": "^2.0.218", + "@fluentui/react-icons": "^2.0.220", "@fluentui/react-northstar": "^0.66.4", "@microsoft/signalr": "^7.0.11", "@playwright/test": "^1.39.0", - "@reduxjs/toolkit": "^1.9.6", + "@reduxjs/toolkit": "^1.9.7", "debug": "^4.3.4", "microsoft-cognitiveservices-speech-sdk": "^1.32.0", "react": "^18.2.0", @@ -34,11 +34,11 @@ "devDependencies": { "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@types/debug": "^4.1.7", - "@types/node": "^20.8.3", + "@types/node": "^20.8.6", "@types/react": "^18.2.24", "@types/react-dom": "^18.2.11", "@typescript-eslint/eslint-plugin": "^6.7.3", - "@typescript-eslint/parser": "^6.7.4", + "@typescript-eslint/parser": "^6.7.5", "eslint": "^8.51.0", "prettier": "^3.0.3", "react-scripts": "^5.0.1", diff --git a/webapp/yarn.lock b/webapp/yarn.lock index e380f4b3a..43df006b6 100644 --- a/webapp/yarn.lock +++ b/webapp/yarn.lock @@ -53,6 +53,14 @@ dependencies: "@babel/highlight" "^7.22.5" +"@babel/code-frame@^7.22.13": + version "7.22.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" + integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== + dependencies: + "@babel/highlight" "^7.22.13" + chalk "^2.4.2" + "@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" @@ -88,7 +96,7 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.1" -"@babel/generator@^7.22.7", "@babel/generator@^7.22.9", "@babel/generator@^7.7.2": +"@babel/generator@^7.22.9", "@babel/generator@^7.7.2": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d" integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw== @@ -98,6 +106,16 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" + integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== + dependencies: + "@babel/types" "^7.23.0" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -158,6 +176,11 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + "@babel/helper-environment-visitor@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" @@ -171,6 +194,14 @@ "@babel/template" "^7.22.5" "@babel/types" "^7.22.5" +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" @@ -259,6 +290,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + "@babel/helper-validator-identifier@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" @@ -287,6 +323,15 @@ "@babel/traverse" "^7.22.6" "@babel/types" "^7.22.5" +"@babel/highlight@^7.22.13": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54" + integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + "@babel/highlight@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" @@ -301,6 +346,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== +"@babel/parser@^7.22.15", "@babel/parser@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" + integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": version "7.22.5" 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.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" @@ -1144,6 +1194,15 @@ dependencies: regenerator-runtime "^0.13.11" +"@babel/template@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + "@babel/template@^7.22.5", "@babel/template@^7.3.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" @@ -1154,18 +1213,18 @@ "@babel/types" "^7.22.5" "@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8", "@babel/traverse@^7.7.2": - version "7.22.8" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e" - integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw== - dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.7" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" + integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.7" - "@babel/types" "^7.22.5" + "@babel/parser" "^7.23.0" + "@babel/types" "^7.23.0" debug "^4.1.0" globals "^11.1.0" @@ -1178,6 +1237,15 @@ "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" +"@babel/types@^7.22.15", "@babel/types@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" + integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1680,10 +1748,10 @@ "@fluentui/styles" "^0.66.5" classnames "^2.2.6" -"@fluentui/react-icons@^2.0.217", "@fluentui/react-icons@^2.0.218": - version "2.0.218" - resolved "https://registry.yarnpkg.com/@fluentui/react-icons/-/react-icons-2.0.218.tgz#4f562d36c36bf0bcead383473ba0c9ced3e2d9d8" - integrity sha512-9XoxrPQ4+fvYr6cUTTz4BRHl7UZMZRKL4j8nfJd+wix87AQqFVfloeFO2qUqxD/4uiJyt62VJJMfQCaxLdZCyA== +"@fluentui/react-icons@^2.0.217", "@fluentui/react-icons@^2.0.220": + version "2.0.220" + resolved "https://registry.yarnpkg.com/@fluentui/react-icons/-/react-icons-2.0.220.tgz#93e422c5b3fd8550377795fda083e0474dc5abf5" + integrity sha512-AIe0y3QuG2dATGVlszyt/xCzVhyBcDulQnDepSLZvDXkuu8zL/zqQaSuiOizwZUVxxuF0SvePyf4zgi86zgtjg== dependencies: "@griffel/react" "^1.0.0" tslib "^2.1.0" @@ -2670,10 +2738,10 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.4.4.tgz#11d5db19bd178936ec89cd84519c4de439574398" integrity sha512-1oO6+dN5kdIA3sKPZhRGJTfGVP4SWV6KqlMOwry4J3HfyD68sl/3KmG7DeYUzvN+RbhXDnv/D8vNNB8168tAMg== -"@reduxjs/toolkit@^1.9.6": - version "1.9.6" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.6.tgz#fc968b45fe5b17ff90932c4556960d9c1078365a" - integrity sha512-Gc4ikl90ORF4viIdAkY06JNUnODjKfGxZRwATM30EdHq8hLSVoSrwXne5dd739yenP5bJxAX7tLuOWK5RPGtrw== +"@reduxjs/toolkit@^1.9.7": + version "1.9.7" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.7.tgz#7fc07c0b0ebec52043f8cb43510cf346405f78a6" + integrity sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ== dependencies: immer "^9.0.21" redux "^4.2.1" @@ -3084,10 +3152,12 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== -"@types/node@*", "@types/node@^20.8.3": - version "20.8.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.3.tgz#c4ae2bb1cfab2999ed441a95c122bbbe1567a66d" - integrity sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw== +"@types/node@*", "@types/node@^20.8.6": + version "20.8.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.6.tgz#0dbd4ebcc82ad0128df05d0e6f57e05359ee47fa" + integrity sha512-eWO4K2Ji70QzKUqRy6oyJWUeB7+g2cRagT3T/nxYibYcT4y2BDL8lqolRXjTHmkZCdJfIPaY73KbJAZmcryxTQ== + dependencies: + undici-types "~5.25.1" "@types/parse-json@^4.0.0": version "4.0.0" @@ -3284,15 +3354,15 @@ "@typescript-eslint/typescript-estree" "5.62.0" debug "^4.3.4" -"@typescript-eslint/parser@^6.7.4": - version "6.7.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.4.tgz#23d1dd4fe5d295c7fa2ab651f5406cd9ad0bd435" - integrity sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA== +"@typescript-eslint/parser@^6.7.5": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.5.tgz#8d7ca3d1fbd9d5a58cc4d30b2aa797a760137886" + integrity sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw== dependencies: - "@typescript-eslint/scope-manager" "6.7.4" - "@typescript-eslint/types" "6.7.4" - "@typescript-eslint/typescript-estree" "6.7.4" - "@typescript-eslint/visitor-keys" "6.7.4" + "@typescript-eslint/scope-manager" "6.7.5" + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/typescript-estree" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" debug "^4.3.4" "@typescript-eslint/scope-manager@5.62.0": @@ -3311,13 +3381,13 @@ "@typescript-eslint/types" "6.7.3" "@typescript-eslint/visitor-keys" "6.7.3" -"@typescript-eslint/scope-manager@6.7.4": - version "6.7.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.4.tgz#a484a17aa219e96044db40813429eb7214d7b386" - integrity sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A== +"@typescript-eslint/scope-manager@6.7.5": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz#1cf33b991043886cd67f4f3600b8e122fc14e711" + integrity sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A== dependencies: - "@typescript-eslint/types" "6.7.4" - "@typescript-eslint/visitor-keys" "6.7.4" + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" "@typescript-eslint/type-utils@5.62.0": version "5.62.0" @@ -3349,10 +3419,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.3.tgz#0402b5628a63f24f2dc9d4a678e9a92cc50ea3e9" integrity sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw== -"@typescript-eslint/types@6.7.4": - version "6.7.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.4.tgz#5d358484d2be986980c039de68e9f1eb62ea7897" - integrity sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA== +"@typescript-eslint/types@6.7.5": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.5.tgz#4571320fb9cf669de9a95d9849f922c3af809790" + integrity sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" @@ -3380,13 +3450,13 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/typescript-estree@6.7.4": - version "6.7.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.4.tgz#f2baece09f7bb1df9296e32638b2e1130014ef1a" - integrity sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ== +"@typescript-eslint/typescript-estree@6.7.5": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz#4578de1a26e9f24950f029a4f00d1bfe41f15a39" + integrity sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg== dependencies: - "@typescript-eslint/types" "6.7.4" - "@typescript-eslint/visitor-keys" "6.7.4" + "@typescript-eslint/types" "6.7.5" + "@typescript-eslint/visitor-keys" "6.7.5" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -3436,12 +3506,12 @@ "@typescript-eslint/types" "6.7.3" eslint-visitor-keys "^3.4.1" -"@typescript-eslint/visitor-keys@6.7.4": - version "6.7.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.4.tgz#80dfecf820fc67574012375859085f91a4dff043" - integrity sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA== +"@typescript-eslint/visitor-keys@6.7.5": + version "6.7.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz#84c68d6ceb5b12d5246b918b84f2b79affd6c2f1" + integrity sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg== dependencies: - "@typescript-eslint/types" "6.7.4" + "@typescript-eslint/types" "6.7.5" eslint-visitor-keys "^3.4.1" "@uifabric/set-version@^7.0.24": @@ -4340,7 +4410,7 @@ chalk@5.0.1: resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== -chalk@^2.0.0, chalk@^2.4.1: +chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -10862,6 +10932,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.25.1: + version "5.25.3" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.25.3.tgz#e044115914c85f0bcbb229f346ab739f064998c3" + integrity sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"