graphdb-workbench 4.0.0-TR2 → 4.0.0-TR3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/{30575.19fdf3b549db571bb535.bundle.js → 30575.184c5f6f13b5bff89fec.bundle.js} +2 -2
  2. package/dist/30575.184c5f6f13b5bff89fec.bundle.js.map +1 -0
  3. package/dist/32401.e87fc66be912718fffc3.bundle.js +2 -0
  4. package/dist/32401.e87fc66be912718fffc3.bundle.js.map +1 -0
  5. package/dist/44906.42387d9a889a05ef93ae.bundle.js +2 -0
  6. package/dist/44906.42387d9a889a05ef93ae.bundle.js.map +1 -0
  7. package/dist/{64700.a10c20a33a6c92f01733.bundle.js → 64700.847995c53301ff65bccd.bundle.js} +2 -2
  8. package/dist/64700.847995c53301ff65bccd.bundle.js.map +1 -0
  9. package/dist/{64709.dfde8159d07e957a12b0.bundle.js → 64709.d0144177c2b8d83b494f.bundle.js} +2 -2
  10. package/dist/{64709.dfde8159d07e957a12b0.bundle.js.map → 64709.d0144177c2b8d83b494f.bundle.js.map} +1 -1
  11. package/dist/{65677.4ed21f2097d86718611c.bundle.js → 65677.9e40e2d5fe66932a18ab.bundle.js} +2 -2
  12. package/dist/{65677.4ed21f2097d86718611c.bundle.js.map → 65677.9e40e2d5fe66932a18ab.bundle.js.map} +1 -1
  13. package/dist/{75384.cc7de25be91251aa6aa4.bundle.js → 75384.94d3d9790b82fe24ba69.bundle.js} +2 -2
  14. package/dist/75384.94d3d9790b82fe24ba69.bundle.js.map +1 -0
  15. package/dist/79796.9e99cce3ecaefe7b75fc.bundle.js +2 -0
  16. package/dist/79796.9e99cce3ecaefe7b75fc.bundle.js.map +1 -0
  17. package/dist/{80933.19f69bc85c52a8b19311.bundle.js → 80933.d5c0bca925e9cb27ac57.bundle.js} +2 -2
  18. package/dist/{80933.19f69bc85c52a8b19311.bundle.js.map → 80933.d5c0bca925e9cb27ac57.bundle.js.map} +1 -1
  19. package/dist/{82917.c68c153aaca95c11341f.bundle.js → 82917.9da9f14ffe9dc7768d10.bundle.js} +2 -2
  20. package/dist/{82917.c68c153aaca95c11341f.bundle.js.map → 82917.9da9f14ffe9dc7768d10.bundle.js.map} +1 -1
  21. package/dist/{86099.ab0bf43b346e9cfb20d8.bundle.js → 86099.33c740b4d5684dde18c7.bundle.js} +2 -2
  22. package/dist/{86099.ab0bf43b346e9cfb20d8.bundle.js.map → 86099.33c740b4d5684dde18c7.bundle.js.map} +1 -1
  23. package/dist/api/models/broadcast/broadcast-message.d.ts +11 -0
  24. package/dist/api/models/broadcast/index.d.ts +3 -0
  25. package/dist/api/models/broadcast/message-handler.d.ts +5 -0
  26. package/dist/api/models/broadcast/message-type.d.ts +3 -0
  27. package/dist/api/ontotext-workbench-api.d.ts +2 -0
  28. package/dist/api/ontotext-workbench-api.js +1 -1
  29. package/dist/api/ontotext-workbench-api.js.map +1 -1
  30. package/dist/api/services/broadcast/broadcast.service.d.ts +24 -0
  31. package/dist/api/services/broadcast/index.d.ts +1 -0
  32. package/dist/api/services/broadcast/test/broadcast.service.spec.d.ts +1 -0
  33. package/dist/assets/i18n/language-config.json +1 -1
  34. package/dist/css/user.css +1 -1
  35. package/dist/i18n/locale-en.json +1 -0
  36. package/dist/i18n/locale-fr.json +1 -0
  37. package/dist/index.html +8 -8
  38. package/dist/js/angular/clustermanagement/templates/cluster-configuration/cluster-configuration.html +1 -1
  39. package/dist/js/angular/clustermanagement/templates/cluster-configuration/multi-region.html +1 -1
  40. package/dist/js/angular/clustermanagement/templates/cluster-nodes-configuration.html +1 -1
  41. package/dist/js/angular/core/directives/autocomplete/templates/autocomplete.html +1 -1
  42. package/dist/js/angular/core/directives/dynamic-form/templates/dynamic-form.html +1 -1
  43. package/dist/js/angular/core/directives/operations-statuses-monitor/templates/operations-statuses-monitor.html +1 -1
  44. package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
  45. package/dist/js/angular/core/directives/shuttle-multiselect/templates/shuttle-multiselect.html +1 -1
  46. package/dist/js/angular/core/directives/yasgui-component/templates/yasgui-component.html +2 -2
  47. package/dist/js/angular/core/templates/cookie-policy/cookie-consent.html +1 -1
  48. package/dist/js/angular/core/templates/cookie-policy/cookie-policy.html +1 -1
  49. package/dist/js/angular/core/templates/editable-content/editable-content.html +1 -1
  50. package/dist/js/angular/core/templates/markdown-content/markdown-content.html +1 -1
  51. package/dist/js/angular/core/templates/search-resource-input.html +1 -1
  52. package/dist/js/angular/graphql/templates/create-graphql-endpoint.html +2 -2
  53. package/dist/js/angular/graphql/templates/graphql-endpoint-management.html +1 -1
  54. package/dist/js/angular/graphql/templates/graphql-playground.html +2 -2
  55. package/dist/js/angular/graphql/templates/modal/endpoint-configuration-modal.html +1 -1
  56. package/dist/js/angular/graphql/templates/modal/endpoint-generation-failure-result-modal.html +1 -1
  57. package/dist/js/angular/graphql/templates/modal/import-endpoint-definition-modal.html +1 -1
  58. package/dist/js/angular/security/templates/user.html +8 -5
  59. package/dist/js/angular/security/templates/users.html +1 -1
  60. package/dist/js/angular/ttyg/templates/agent-list.html +1 -1
  61. package/dist/js/angular/ttyg/templates/agent-select-menu.html +1 -1
  62. package/dist/js/angular/ttyg/templates/chat-item-detail.html +1 -1
  63. package/dist/js/angular/ttyg/templates/chat-list.html +1 -1
  64. package/dist/js/angular/ttyg/templates/chat-panel.html +1 -1
  65. package/dist/js/angular/ttyg/templates/modal/agent-instructions-explain-modal.html +1 -1
  66. package/dist/js/angular/ttyg/templates/modal/agent-settings-modal.html +3 -3
  67. package/dist/js/angular/ttyg/templates/modal/external-integration-configuration-modal.html +1 -1
  68. package/dist/js/angular/ttyg/templates/no-agents-view.html +1 -1
  69. package/dist/js/angular/ttyg/templates/ttyg.html +1 -1
  70. package/dist/legacyWorkbench.5ba16dfe45d478531c81.js +3 -0
  71. package/dist/{legacyWorkbench.d546b7e4a3f1505b1746.js.map → legacyWorkbench.5ba16dfe45d478531c81.js.map} +1 -1
  72. package/dist/pages/aclmanagement.html +1 -1
  73. package/dist/pages/autocomplete.html +1 -1
  74. package/dist/pages/choose-repository-type.html +1 -1
  75. package/dist/pages/cluster-management/clusterInfo.html +2 -2
  76. package/dist/pages/create-index.html +1 -1
  77. package/dist/pages/dependencies.html +1 -1
  78. package/dist/pages/domainRangeInfo.html +2 -2
  79. package/dist/pages/edit.html +1 -1
  80. package/dist/pages/explore.html +1 -1
  81. package/dist/pages/export.html +1 -1
  82. package/dist/pages/find.html +1 -1
  83. package/dist/pages/graph-config/saveGraphConfig.html +8 -8
  84. package/dist/pages/graphs-visualizations.html +7 -7
  85. package/dist/pages/guides.html +1 -1
  86. package/dist/pages/home.html +1 -1
  87. package/dist/pages/import.html +2 -2
  88. package/dist/pages/jdbc-create.html +1 -1
  89. package/dist/pages/jdbc.html +1 -1
  90. package/dist/pages/monitor/backup-and-restore.html +1 -1
  91. package/dist/pages/monitor/queries.html +1 -1
  92. package/dist/pages/monitor/resources.html +1 -1
  93. package/dist/pages/namespaces.html +2 -2
  94. package/dist/pages/plugins.html +1 -1
  95. package/dist/pages/rdfClassHierarchyInfo.html +7 -7
  96. package/dist/pages/rdfrank.html +2 -2
  97. package/dist/pages/repositories.html +1 -1
  98. package/dist/pages/repository.html +1 -1
  99. package/dist/pages/similarity-indexes.html +1 -1
  100. package/dist/pages/sparql-editor.html +1 -1
  101. package/dist/pages/sparql-template-create.html +1 -1
  102. package/dist/pages/sparql-templates.html +1 -1
  103. package/dist/pages/ux-test1.html +2 -2
  104. package/dist/pages/webapi.html +2 -2
  105. package/dist/plugins/plugins-bundle.js +1 -1
  106. package/dist/plugins/plugins-bundle.js.map +1 -1
  107. package/dist/plugins.js +1 -1
  108. package/dist/res/swagger5/index.html +11 -11
  109. package/dist/shared-components/collection/pages/js/main.js +1 -1
  110. package/package.json +2 -2
  111. package/dist/30575.19fdf3b549db571bb535.bundle.js.map +0 -1
  112. package/dist/32401.023d0082b98ee532b4d3.bundle.js +0 -2
  113. package/dist/32401.023d0082b98ee532b4d3.bundle.js.map +0 -1
  114. package/dist/44906.6d83b4aafb42ccc2f46c.bundle.js +0 -2
  115. package/dist/44906.6d83b4aafb42ccc2f46c.bundle.js.map +0 -1
  116. package/dist/64700.a10c20a33a6c92f01733.bundle.js.map +0 -1
  117. package/dist/75384.cc7de25be91251aa6aa4.bundle.js.map +0 -1
  118. package/dist/79796.c484b55f1aa1581ac64c.bundle.js +0 -2
  119. package/dist/79796.c484b55f1aa1581ac64c.bundle.js.map +0 -1
  120. package/dist/legacyWorkbench.d546b7e4a3f1505b1746.js +0 -3
  121. /package/dist/{legacyWorkbench.d546b7e4a3f1505b1746.js.LICENSE.txt → legacyWorkbench.5ba16dfe45d478531c81.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"44906.6d83b4aafb42ccc2f46c.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/core/directives/validate-url.directive.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/repositories/controllers.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/repositories/controllers/manage-remote-location-dialog.controller.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/repositories/repository.constants.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/utils/url-utils.js"],"sourcesContent":["/**\n * @ngdoc directive\n * @name validateUrl\n * @module graphdb.framework.core.directives.validate-url\n * @restrict A\n *\n * @description\n * This directive validates the URL input field based on a specified pattern.\n * It ensures that the input URL adheres to standard URL formats and provides\n * visual feedback to the user if the URL is invalid.\n *\n * The directive can also be configured to exclude certain substrings or protocols from valid URLs,\n * and to control whether empty input values are considered valid.\n *\n * @example\n * <pre>\n * <form name=\"myForm\">\n * <!-- Basic URL validation -->\n * <input type=\"text\" name=\"urlField\" ng-model=\"url\" validate-url/>\n * <div ng-show=\"myForm.urlField.$error.validUrl\">\n * Invalid URL format.\n * </div>\n *\n * <!-- URL validation excluding a specific substring -->\n * <input type=\"text\" name=\"urlFieldWithExclusion\" ng-model=\"url\" validate-url exclude=\"/repositories\"/>\n * <div ng-show=\"myForm.urlFieldWithExclusion.$error.validUrl\">\n * Invalid URL format or contains excluded substring.\n * </div>\n *\n * <!-- URL validation excluding a specific protocol -->\n * <input type=\"text\" name=\"urlFieldWithProtocolExclusion\" ng-model=\"url\" validate-url exclude-protocol=\"ftp\"/>\n * <div ng-show=\"myForm.urlFieldWithProtocolExclusion.$error.validUrl\">\n * Invalid URL format or uses an excluded protocol.\n * </div>\n *\n * <!-- URL validation that does not allow empty values -->\n * <input type=\"text\" name=\"urlFieldNoEmpty\" ng-model=\"url\" validate-url allow-empty=\"false\"/>\n * <div ng-show=\"myForm.urlFieldNoEmpty.$error.validUrl\">\n * Invalid URL format or empty value not allowed.\n * </div>\n *\n * <!-- URL validation with both substring and protocol exclusions, and empty values not allowed -->\n * <input type=\"text\" name=\"urlFieldFullValidation\" ng-model=\"url\" validate-url exclude=\"/repositories\" exclude-protocol=\"ftp\" allow-empty=\"false\"/>\n * <div ng-show=\"myForm.urlFieldFullValidation.$error.validUrl\">\n * Invalid URL format, contains excluded substring, uses an excluded protocol, or empty value not allowed.\n * </div>\n * </form>\n * </pre>\n *\n * @usage\n * This directive can be added as an attribute to any input field where URL validation is required.\n * It will automatically validate the input value.\n *\n * Optional attributes:\n * - `exclude`: A string specifying a substring that must not be present in the URL.\n * - `exclude-protocol`: A comma-separated list of protocols (e.g., `ftp,http`) that must not be used in the URL.\n * - `allow-empty`: A boolean attribute (`true` by default). If set to `false`, empty values are considered invalid.\n */\n\nimport {UrlUtils} from \"../../utils/url-utils\";\n\nconst modules = [];\n\nangular\n .module('graphdb.framework.core.directives.validate-url', modules)\n .directive('validateUrl', validateUrl);\n\nfunction validateUrl() {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, element, attr, ctrl) {\n ctrl.$validators.validUrl = function (modelValue, viewValue) {\n // Check if empty values should be allowed\n if (ctrl.$isEmpty(viewValue)) {\n return attr.allowEmpty !== 'false';\n }\n\n if (!UrlUtils.isValidUrl(viewValue)) {\n return false;\n }\n\n if (attr.exclude && !UrlUtils.doesNotContain(viewValue, attr.exclude)) {\n return false;\n }\n\n if (attr.excludeProtocol) {\n const excludedProtocols = attr.excludeProtocol.split(',');\n if (!UrlUtils.doesNotUseProtocol(viewValue, excludedProtocols)) {\n return false;\n }\n }\n return true;\n };\n }\n };\n}\n","import {\n FILENAME_PATTERN,\n NUMBER_PATTERN,\n REPOSITORY_TYPES,\n STATIC_RULESETS,\n} from \"./repository.constants\";\nimport {decodeHTML} from \"../../../app\";\nimport './controllers/manage-remote-location-dialog.controller';\nimport {RemoteLocationType} from \"../models/repository/remote-location.model\";\nimport {\n service,\n AuthenticationStorageService,\n AuthorizationService,\n GuidesService,\n} from '@ontotext/workbench-api';\nimport {DocumentationUrlResolver} from \"../utils/documentation-url-resolver\";\n\nconst ENTITY_INDEX_SIZE_MIN = 10000;\n\nexport const getFileName = function(path) {\n let lastIdx = path.lastIndexOf('/');\n if (lastIdx === -1) {\n lastIdx = path.lastIndexOf('\\\\');\n }\n let name = path;\n if (lastIdx !== -1) {\n name = name.substring(lastIdx + 1);\n }\n return name;\n};\n\nconst parseNumberParamsIfNeeded = function(params) {\n if (!params) {\n return;\n }\n\n Object.keys(params).forEach((key) => {\n const param = params[key];\n if (param && typeof param.value === 'string') {\n const possibleNumber = parseFloat(params[key].value);\n if (!isNaN(possibleNumber) && numberParamToErrorKey[key]) {\n params[key].value = Number.isInteger(possibleNumber) ? parseInt(param.value, 10) : possibleNumber;\n // internal prop to indicate number value and save extra checks\n param.isNumber = true;\n }\n }\n });\n};\n\nconst parseMemberParamIfNeeded = function(param) {\n if (param && param.member) {\n param.member.value = [];\n }\n};\n\nconst getShaclOptionsClass = function() {\n const optionsModule = document.getElementById('shaclOptions');\n\n if (optionsModule) {\n const isAriaExpanded = optionsModule.getAttribute('aria-expanded');\n if (isAriaExpanded && isAriaExpanded === 'true') {\n return 'ri-arrow-down-s-line';\n }\n }\n return 'ri-arrow-right-s-line';\n};\n\nconst numberParamToErrorKey = {\n queryLimitResults: 'invalid.query.limit',\n queryTimeout: 'invalid.query.timeout',\n validationResultsLimitTotal: 'invalid.validation.results.limit.total',\n validationResultsLimitPerConstraint: 'invalid.validation.results.limit.per.constraint',\n joinWorkerThreads: 'invalid.join.worker.threads',\n leftJoinWorkerThreads: 'invalid.left.join.worker.threads',\n unionWorkerThreads: 'invalid.union.worker.threads',\n boundJoinBlockSize: 'invalid.bound.join.block.size',\n entityIndexSize: 'invalid.entity.index.size',\n};\n\nconst getNumberFormatError = function(params, $translate) {\n if (!params) {\n return '';\n }\n\n const errorEntry = Object.keys(params).find((key) => {\n const param = params[key];\n return param.isNumber && !NUMBER_PATTERN.test(param.value);\n });\n\n return errorEntry && numberParamToErrorKey[errorEntry]\n ? $translate.instant(numberParamToErrorKey[errorEntry])\n : '';\n};\n\nconst getDocBase = function(productInfo) {\n return `https://graphdb.ontotext.com/documentation/${productInfo.shortVersion}`;\n};\nconst filterLocations = function(result) {\n return result.filter((location) => location.isGraphDBLocation() && !location.errorMsg && !location.degradedReason);\n};\n\n/**\n * Gets the remote locations that are error free, without degraded reason and is not of type Ontopic\n * @param {*} $repositories the repositories service\n * @return {[] | Promise} returns the locations as array or a promise of the array\n */\nconst getFilteredLocations = function($repositories) {\n // Don't allow the user to create repository on location with error or degradeded reason\n return $repositories.getLocations().then((locations) => filterLocations(locations));\n};\n\nconst modules = [\n 'ngCookies',\n 'ui.bootstrap',\n 'graphdb.framework.core.services.repositories',\n 'graphdb.framework.utils.localstorageadapter',\n 'toastr',\n 'ngFileUpload',\n 'graphdb.framework.repositories.controllers.manage-remote-location-dialog',\n];\n\nangular.module('graphdb.framework.repositories.controllers', modules)\n .controller('LocationsAndRepositoriesCtrl', LocationsAndRepositoriesCtrl)\n .controller('AddLocationCtrl', AddLocationCtrl)\n .controller('EditLocationCtrl', EditLocationCtrl)\n .controller('ChooseRepositoryCtrl', ChooseRepositoryCtrl)\n .controller('AddRepositoryCtrl', AddRepositoryCtrl)\n .controller('EditRepositoryCtrl', EditRepositoryCtrl)\n .controller('EditRepositoryFileCtrl', EditRepositoryFileCtrl)\n .controller('UploadRepositoryConfigCtrl', UploadRepositoryConfigCtrl);\n\nLocationsAndRepositoriesCtrl.$inject = ['$scope', '$rootScope', '$uibModal', 'toastr', '$repositories', 'ModalService', 'LocationsRestService',\n 'LocalStorageAdapter', '$interval', '$translate', '$q'];\n\nfunction LocationsAndRepositoriesCtrl($scope, $rootScope, $uibModal, toastr, $repositories, ModalService, LocationsRestService, // NOSONAR\n LocalStorageAdapter, $interval, $translate, $q) {\n const guidesService = service(GuidesService);\n const authorizationService = service(AuthorizationService);\n $scope.RemoteLocationType = RemoteLocationType;\n $scope.loader = true;\n /**\n * @type {RemoteLocationModel[]}\n */\n $scope.locations = [];\n\n $scope.isLocationInactive = function(location) {\n return !location.active || !$scope.hasActiveLocation();\n };\n\n const getLocationsAbortRequestPromise = $q.defer();\n //Get locations\n function getLocations() {\n return $repositories.getLocations(getLocationsAbortRequestPromise)\n .then((locations) => {\n $scope.locations = locations;\n return locations;\n })\n .finally(() => $scope.loader = false);\n }\n\n $scope.getLocalLocation = (local, locationType) => {\n const remoteLocationModel = $scope.locations.filter((location) => {\n let locationTypeCheck = true;\n if (locationType) {\n locationTypeCheck = location.locationType === locationType;\n }\n return locationTypeCheck && location.local === local;\n });\n\n // Repository managers can access all locations.\n if ($scope.isRepoManager()) {\n return remoteLocationModel;\n }\n\n // Users without the repository manager role can access only locations where they have\n // repository-specific maintain permission for at least one repository.\n return remoteLocationModel.filter((location) => $scope.getRepositoriesFromLocation(location.uri)?.length > 0);\n };\n\n $scope.hasAnyRemoteLocation = (local, locationTypes) => {\n return locationTypes.some((locationType) => $scope.getLocalLocation(local, locationType).length > 0);\n };\n\n $scope.hasActiveLocation = function() {\n return $repositories.hasActiveLocation();\n };\n\n $scope.getActiveLocation = function() {\n return $repositories.getActiveLocation();\n };\n\n $scope.getLocationError = function() {\n return $repositories.getLocationError();\n };\n\n $scope.getDegradedReason = function() {\n return $repositories.getDegradedReason();\n };\n\n $scope.getRepositories = function() {\n return $repositories.getRepositories();\n };\n\n $scope.isRepoActive = function(repo) {\n return $repositories.isRepoActive(repo);\n };\n\n //Delete location\n $scope.deleteLocation = function(uri) {\n ModalService.openSimpleModal({\n title: $translate.instant('location.confirm.detach'),\n message: $translate.instant('location.confirm.detach.warning', {uri: uri}),\n warning: true,\n }).result\n .then(function() {\n $scope.loader = true;\n $repositories.deleteLocation(uri).finally(() => getLocations());\n });\n };\n\n //Add new location\n $scope.addLocationHttp = function(dataAddLocation) {\n $scope.loader = true;\n LocationsRestService.addLocation(dataAddLocation)\n .success(function() {\n //Reload locations and repositories\n $repositories.init();\n })\n .error(function(data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n })\n .finally(() => getLocations());\n };\n\n $scope.addLocation = () => {\n $scope.openRemoteLocationDialog();\n };\n\n $scope.editLocation = (remoteLocation) => {\n if (remoteLocation.locationType === undefined) {\n // for backward compatibility. The old instances this property not exist so we assume it is GraphDB instance.\n remoteLocation.locationType = RemoteLocationType.GRAPH_DB;\n }\n $scope.openRemoteLocationDialog(remoteLocation);\n };\n\n /**\n * Opens the location dialog.\n * @param {RemoteLocationModel} remoteLocation (optional) If a location is passed, the dialog will open for editing; otherwise, it will open for registering a new one.\n */\n $scope.openRemoteLocationDialog = (remoteLocation) => {\n $uibModal.open({\n templateUrl: 'js/angular/repositories/templates/manage-remote-location-dialog.template.html',\n windowClass: 'addLocationDialog',\n controller: 'ManageRemoteLocationDialogController',\n resolve: {\n data: () => {\n return {\n remoteLocation,\n };\n },\n },\n }).result.then((dataAddLocation) => {\n if (remoteLocation) {\n $scope.editLocationHttp(dataAddLocation);\n } else {\n $scope.addLocationHttp(dataAddLocation);\n }\n });\n };\n\n //Edit location\n $scope.editLocationHttp = function(dataEditLocation) {\n $scope.loader = true;\n LocationsRestService.editLocation(dataEditLocation)\n .success(function() {\n //Reload locations and repositories\n $repositories.init();\n })\n .error(function(data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n })\n .finally(() => getLocations());\n };\n\n //Change repository\n $scope.setRepository = function(repo) {\n $repositories.setRepository(repo);\n };\n\n //Delete repository\n $scope.deleteRepository = function(repository) {\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm.delete'),\n message: decodeHTML($translate.instant('delete.repo.warning.msg', {repositoryId: repository.id})),\n warning: true,\n }).result\n .then(function() {\n $scope.loader = true;\n $repositories.deleteRepository(repository)\n .finally(() => {\n getLocations();\n $scope.loader = false;\n });\n removeCachedGraphsOnDelete(repository);\n });\n };\n\n $scope.restartRepository = function(repository) {\n ModalService.openSimpleModal({\n title: $translate.instant('confirm.restart.repo'),\n message: decodeHTML($translate.instant('confirm.restart.repo.warning.msg', {repositoryId: repository.id})),\n warning: true,\n }).result\n .then(function() {\n $scope.loader = true;\n $repositories.restartRepository(repository).finally(() => getLocations());\n });\n };\n\n $scope.toggleDefaultRepository = function(repositoryId) {\n if ($scope.getDefaultRepository() === repositoryId) {\n // unset\n $repositories.setDefaultRepository(null);\n } else {\n // set\n $repositories.setDefaultRepository(repositoryId);\n }\n };\n\n $scope.getDefaultRepository = function() {\n return $repositories.getDefaultRepository();\n };\n\n /* Unused, data urls don't behave well in all browsers, avoid them when possible\n $scope.getRepoTurtleConfig = function (repository) {\n function downloadRepoConfig(repoTurtleConfig, repository) {\n $('.download-turtle-config')\n .mouseup(function () {\n $(this)\n .attr('href', repoTurtleConfig)\n .attr('download', repository.id + '-config.ttl')\n });\n }\n\n $repositories.getRepositoryTurtleConfig(repository)\n .success(function (response) {\n var repoTurtleConfigDownload = 'data:application/octet-stream;charset=utf-8;base64,'\n + btoa(unescape(encodeURIComponent(response)));\n downloadRepoConfig(repoTurtleConfigDownload, repository);\n })\n .error(function () {\n toastr.error('Error getting repository configuration for '' + repository.id + ''');\n });\n };\n */\n\n $scope.getRepositoryDownloadLink = function(repository) {\n let url = `rest/repositories/${repository.id}${(repository.type === REPOSITORY_TYPES.ontop ? '/download-zip'\n : '/download-ttl')}?location=${repository.location}`;\n const token = service(AuthenticationStorageService).getAuthToken().getValue();\n if (token) {\n url = `${url}&authToken=${encodeURIComponent(token)}`;\n }\n return url;\n };\n\n ///Copy to clipboard popover options\n $scope.copyToClipboard = function(uri) {\n ModalService.openCopyToClipboardModal(uri);\n };\n\n $scope.fromFile = function() {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/templates/modal/upload-repository-config.html',\n controller: 'UploadRepositoryConfigCtrl',\n });\n modalInstance.result.then(function() {\n $repositories.init();\n });\n };\n\n //Delete repository\n $scope.openActiveLocationSettings = function() {\n $uibModal.open({\n templateUrl: 'js/angular/settings/modal/location-settings.html',\n controller: 'ActiveLocationSettingsCtrl',\n });\n };\n\n getLocations();\n const timer = $interval(function() {\n if (guidesService.isActive() && !$rootScope.guidePaused) {\n // Don't refresh list while a guide is active\n return;\n }\n\n // Update repositories state\n $repositories.initQuick();\n getLocations();\n }, 5000);\n\n $scope.$on('$destroy', function() {\n $interval.cancel(timer);\n // If there is a getLocations request in progress, abort it so the service can properly clear flags\n if (getLocationsAbortRequestPromise) {\n getLocationsAbortRequestPromise.resolve();\n }\n });\n\n function removeCachedGraphsOnDelete(repo) {\n const cashedDependenciesGraphPrefix = `dependencies-selectedGraph-${repo.id}`;\n const cashedClassHierarchyGraphPrefix = `classHierarchy-selectedGraph-${repo.id}`;\n angular.forEach(LocalStorageAdapter.keys(), function(key) {\n // remove everything but the hide prefixes setting, it should always persist\n if (key.startsWith(cashedClassHierarchyGraphPrefix) || key.startsWith(cashedDependenciesGraphPrefix)) {\n LocalStorageAdapter.remove(key);\n }\n });\n }\n\n /**\n * Returns the repositories available in the specified location that the current user is allowed to access.\n *\n * @param {string} locationId The identifier of the location.\n * @returns {Array<Repository>} The repositories visible to the current user in the specified location.\n */\n $scope.getRepositoriesFromLocation = function(locationId) {\n const repositoriesFromLocation = $repositories.getRepositoriesFromLocation(locationId) || [];\n\n if ($scope.isRepoManager()) {\n return repositoriesFromLocation;\n }\n\n return repositoriesFromLocation.filter((repo) => authorizationService.canReadRepo(repo) || authorizationService.canReadGqlRepo(repo));\n };\n\n $scope.isRepoManager = () => {\n return authorizationService.isRepoManager();\n };\n\n $scope.canMaintainRepo = (repo) => {\n return authorizationService.canMaintainRepo(repo);\n };\n}\n\nUploadRepositoryConfigCtrl.$inject = ['$scope', '$uibModalInstance', 'Upload', 'toastr', '$translate'];\n\nfunction UploadRepositoryConfigCtrl($scope, $uibModalInstance, Upload, toastr, $translate) {\n $scope.upload = function(files) {\n if (files && files.length) {\n $scope.uploadFile = files[0];\n }\n };\n $scope.ok = function() {\n if ($scope.uploadFile) {\n $scope.uploadFileLoader = true;\n Upload.upload({\n url: 'rest/repositories',\n method: 'POST',\n data: {config: $scope.uploadFile},\n })\n .success(function() {\n $scope.uploadFileLoader = false;\n $uibModalInstance.close();\n })\n .error(function(data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n $scope.uploadFileLoader = false;\n });\n }\n };\n $scope.cancel = function() {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nAddLocationCtrl.$inject = ['$scope', '$uibModalInstance', 'toastr', 'productInfo', '$translate'];\n\nfunction AddLocationCtrl($scope, $uibModalInstance, toastr, productInfo, $translate) {\n $scope.newLocation = {\n 'uri': '',\n 'authType': 'none',\n 'username': '',\n 'password': '',\n 'active': false,\n };\n $scope.docBase = getDocBase(productInfo);\n\n $scope.isValidLocation = function() {\n return ($scope.newLocation.uri.length < 6 ||\n $scope.newLocation.uri.indexOf('http:') === 0 || $scope.newLocation.uri.indexOf('https:') === 0)\n && $scope.newLocation.uri.indexOf('/repositories') <= -1;\n };\n\n $scope.ok = function() {\n if (!$scope.newLocation) {\n toastr.error($translate.instant('location.cannot.be.empty.error'));\n return;\n }\n $uibModalInstance.close($scope.newLocation);\n };\n\n $scope.cancel = function() {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nEditLocationCtrl.$inject = ['$scope', '$uibModalInstance', 'location', 'productInfo'];\n\nfunction EditLocationCtrl($scope, $uibModalInstance, location, productInfo) {\n $scope.editedLocation = _.cloneDeep(location);\n $scope.docBase = getDocBase(productInfo);\n\n $scope.ok = function() {\n $uibModalInstance.close($scope.editedLocation);\n };\n\n $scope.cancel = function() {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nChooseRepositoryCtrl.$inject = ['$scope', '$location'];\n\nfunction ChooseRepositoryCtrl($scope, $location) {\n $scope.repositoryTypes = REPOSITORY_TYPES;\n $scope.chooseRepositoryType = function(repoType) {\n $location.path(`${$location.path()}/${repoType}`);\n };\n}\n\nAddRepositoryCtrl.$inject = ['$rootScope', '$scope', 'toastr', '$repositories', '$location', '$timeout', 'Upload', '$routeParams',\n 'RepositoriesRestService', '$translate', 'productInfo'];\n\nfunction AddRepositoryCtrl($rootScope, $scope, toastr, $repositories, $location, $timeout, Upload, $routeParams, RepositoriesRestService, $translate, productInfo) {\n $scope.rulesets = STATIC_RULESETS.slice();\n $scope.repositoryTypes = REPOSITORY_TYPES;\n $scope.params = $routeParams;\n $scope.repositoryType = $routeParams.repositoryType;\n $scope.enable = true;\n $scope.entityIndexSizeMin = ENTITY_INDEX_SIZE_MIN;\n $scope.documentationUrlForStorageEncryption = DocumentationUrlResolver.getDocumentationUrl(productInfo.shortVersion, 'creating-a-repository.html#using-workbench');\n $scope.encryptInput = {hovered: false};\n\n $scope.loader = true;\n $scope.pageTitle = $translate.instant('view.create.repo.title');\n $scope.repositoryInfo = {\n id: '',\n params: {},\n title: '',\n type: '',\n location: '',\n };\n\n getFilteredLocations($repositories)\n .then((locations) => {\n $scope.locations = locations;\n });\n\n $scope.changedLocation = function() {\n $scope.$broadcast('changedLocation');\n };\n\n function isValidEERepository(repositoryType) {\n return $scope.isEnterprise() && (repositoryType === REPOSITORY_TYPES.graphdbRepo);\n }\n\n function isValidSERepository(repositoryType) {\n return !$scope.isFreeEdition() && !$scope.isEnterprise() && repositoryType === REPOSITORY_TYPES.graphdbRepo;\n }\n\n function isValidFRRepository(repositoryType) {\n return $scope.isFreeEdition() && repositoryType === REPOSITORY_TYPES.graphdbRepo;\n }\n\n function isValidOntopRepository(repositoryType) {\n return repositoryType === REPOSITORY_TYPES.ontop;\n }\n\n function isValidFedXRepository(repositoryType) {\n return repositoryType === REPOSITORY_TYPES.fedx;\n }\n\n function isRepositoryTypeValid(repositoryType) {\n return isValidEERepository(repositoryType) || isValidSERepository(repositoryType)\n || isValidFRRepository(repositoryType) || isValidOntopRepository(repositoryType)\n || isValidFedXRepository(repositoryType);\n }\n\n function setPageTitle(repositoryType) {\n switch (repositoryType) {\n case REPOSITORY_TYPES.graphdbRepo:\n $scope.pageTitle = $translate.instant('view.create.repo.title', {repoType: 'GraphDB'});\n break;\n case REPOSITORY_TYPES.ontop:\n $scope.pageTitle = $translate.instant('view.create.repo.title', {repoType: 'Ontop Virtual SPARQL'});\n break;\n case REPOSITORY_TYPES.fedx:\n $scope.pageTitle = $translate.instant('view.create.repo.title', {repoType: 'FedX Virtual SPARQL'});\n break;\n }\n }\n\n $scope.getConfig = function(repoType) {\n RepositoriesRestService.getRepositoryConfiguration(repoType).then(function(resp) {\n const data = resp.data;\n $scope.repositoryInfo.params = data.params;\n $scope.repositoryInfo.type = data.type;\n parseNumberParamsIfNeeded($scope.repositoryInfo.params);\n parseMemberParamIfNeeded($scope.repositoryInfo.params);\n $scope.loader = false;\n // The clean way is the \"autofocus\" attribute and we use it but it doesn't seem to\n // work in all browsers because of the way dynamic content is handled so give it another\n // try here.\n $timeout(function() {\n // Focus the ID field\n angular.element(document).find('#id').focus();\n }, 50);\n }).catch(function(data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n $scope.loader = false;\n });\n };\n\n if ($scope.repositoryType && isRepositoryTypeValid($scope.repositoryType)) {\n $scope.repositoryInfo.type = $scope.repositoryType;\n $scope.getConfig($scope.repositoryType);\n setPageTitle($scope.repositoryType);\n } else {\n $location.path('/repository/create');\n }\n\n $scope.hasActiveLocation = function() {\n return $repositories.hasActiveLocation();\n };\n\n $scope.activeLocation = function() {\n return $repositories.getActiveLocation();\n };\n\n let isInvalidPieFile = false;\n $scope.uploadRuleset = function(files) {\n if (files && files.length) {\n $scope.uploadFile = files[0];\n $scope.uploadFileLoader = true;\n Upload.upload({\n url: 'rest/repositories/ruleset/upload',\n data: {ruleset: $scope.uploadFile, location: $scope.repositoryInfo.location},\n }).progress(function(evt) {\n /*\t\t\t\t\t\tvar progressPercentage = parseInt(100.0 * evt.loaded / evt.total);\n console.log('progress: ' + progressPercentage + '% ' + evt.config.file.name);*/\n }).success(function(data) {\n if (!data.success) {\n toastr.error(data.errorMessage);\n isInvalidPieFile = true;\n $scope.uploadFile = '';\n } else {\n isInvalidPieFile = false;\n const fileName = $scope.uploadFile.name;\n const newValue = {id: data.fileLocation, name: 'Custom: ' + fileName};\n if ($scope.rulesetPie) {\n // file was previously uploaded\n $scope.rulesets[0] = newValue;\n } else {\n // file uploaded for the first time\n $scope.rulesets.unshift(newValue);\n }\n $scope.rulesetPie = data.fileLocation;\n $scope.rulesetPieFile = fileName;\n $scope.repositoryInfo.params.ruleset.value = $scope.rulesetPie;\n }\n $scope.uploadFileLoader = false;\n }).error(function(data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n $scope.uploadFile = '';\n $scope.uploadFileLoader = false;\n isInvalidPieFile = true;\n });\n }\n };\n\n $scope.noMembersError = function() {\n toastr.error($translate.instant('fedx.create.repo.no.members.warning'));\n };\n\n $scope.goBackToPreviousLocation = function() {\n const previous = $location.search().previous;\n if (previous) {\n $location.search('previous', null);\n const isAbsolute = typeof previous === 'string' && previous.charAt(0) === '/';\n const target = isAbsolute ? previous : '/' + previous;\n $location.url(target);\n } else {\n $location.path('/repository');\n }\n };\n\n $scope.createRepoHttp = function() {\n $scope.loader = true;\n RepositoriesRestService.createRepository($scope.repositoryInfo)\n .then(function() {\n toastr.success($translate.instant('created.repo.success.msg', {repoId: $scope.repositoryInfo.id}));\n return $repositories.init();\n })\n .then(() => $scope.goBackToPreviousLocation())\n .catch(function(error) {\n const msg = getError(error.data);\n toastr.error(msg, $translate.instant('common.error'));\n })\n .finally(() => {\n $scope.loader = false;\n });\n };\n\n $scope.createRepo = function() {\n if (!$scope.repositoryInfo.id) {\n toastr.error($translate.instant('empty.repoid.warning'));\n return;\n }\n\n $scope.isInvalidRepoName = !FILENAME_PATTERN.test($scope.repositoryInfo.id);\n $scope.isInvalidEntityIndexSizeMin = $scope.repositoryInfo.params.entityIndexSize?.value < ENTITY_INDEX_SIZE_MIN;\n const numberFormatError = getNumberFormatError($scope.repositoryInfo.params, $translate);\n\n if (isInvalidPieFile) {\n toastr.error($translate.instant('invalid.ruleset.file.error'));\n } else if ($scope.isInvalidRepoName) {\n toastr.error($translate.instant('wrong.repo.name.error'));\n } else if ($scope.repositoryType === \"fedx\" && $scope.repositoryInfo.params.member.value.length === 0) {\n $scope.noMembersError();\n } else if (numberFormatError) {\n toastr.error(numberFormatError);\n } else if ($scope.isInvalidEntityIndexSizeMin) {\n toastr.error($translate.instant('repo.error.entityIndex.min'));\n } else {\n $scope.createRepoHttp();\n }\n };\n\n $scope.rulesetWarning = function() {\n const pp = $scope.repositoryInfo.params;\n if (pp === undefined || pp.ruleset === undefined || pp.disableSameAs === undefined) {\n return '';\n }\n\n if (pp.ruleset.value.indexOf('owl') === 0 && pp.disableSameAs.value === 'true') {\n return $translate.instant('repoTooltips.rulesetWarnings.needsSameAs');\n } else if (pp.ruleset.value.indexOf('rdfs') === 0 && pp.disableSameAs.value === 'false') {\n return $translate.instant('repoTooltips.rulesetWarnings.doesntNeedSameAs');\n } else if (pp.ruleset.value === $scope.rulesetPie) {\n return $translate.instant('repoTooltips.rulesetWarnings.customRuleset');\n } else {\n return '';\n }\n };\n\n $scope.getShaclOptionsClass = function() {\n return getShaclOptionsClass();\n };\n //TODO - check if repositoryID exist\n\n // Request auto-focus of the ID input when creating a repo (but not when editing)\n $scope.autofocusId = 'autofocus';\n\n const languageChangedSubscription = $rootScope.$on('$translateChangeSuccess', () => {\n setPageTitle($scope.repositoryType);\n });\n $scope.$on('$destroy', () => {\n languageChangedSubscription();\n });\n}\n\nEditRepositoryFileCtrl.$inject = ['$scope', '$uibModalInstance', 'RepositoriesRestService', 'file', 'toastr', '$translate', 'dialogTitle', 'repositoryReference'];\n\nfunction EditRepositoryFileCtrl($scope, $uibModalInstance, RepositoriesRestService, file, toastr, $translate, dialogTitle, repositoryReference) {\n $scope.dialogTitle = dialogTitle ? dialogTitle : $translate.instant('update.file.content.header');\n if (file) {\n RepositoriesRestService.getRepositoryFileContent(file, repositoryReference).success(function(data) {\n $scope.fileContent = data;\n }).error(function(data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n });\n }\n\n $scope.ok = function() {\n $uibModalInstance.close({\n content: $scope.fileContent,\n fileLocation: file,\n });\n };\n\n $scope.cancel = function() {\n $uibModalInstance.dismiss('cancel');\n };\n}\n\nEditRepositoryCtrl.$inject = ['$rootScope', '$scope', '$routeParams', 'toastr', '$repositories', '$location', 'ModalService', 'RepositoriesRestService',\n '$translate', 'MonitoringRestService'];\n\nfunction EditRepositoryCtrl($rootScope, $scope, $routeParams, toastr, $repositories, $location, ModalService, RepositoriesRestService, $translate, MonitoringRestService) {\n // =========================\n // Private variables\n // =========================\n\n const authorizationService = service(AuthorizationService);\n\n // =========================\n // Public variables\n // =========================\n\n $scope.rulesets = STATIC_RULESETS.slice();\n $scope.repositoryTypes = REPOSITORY_TYPES;\n $scope.entityIndexSizeMin = ENTITY_INDEX_SIZE_MIN;\n\n $scope.editRepoPage = true;\n $scope.canEditRepoId = false;\n // Renaming a repository is allowed only for administrators and repository managers. Users with a repository\n // specific maintain permission may change the repository configuration, but not its id.\n $scope.canRenameRepo = false;\n $scope.isRepoInCluster = true;\n $scope.params = $routeParams;\n $scope.loader = true;\n $scope.repositoryInfo = {};\n $scope.repositoryInfo.id = $scope.params.repositoryId;\n $scope.repositoryInfo.location = $scope.params.location;\n $scope.repositoryInfo.restartRequested = false;\n $scope.repositoryType = '';\n $scope.saveRepoId = $scope.params.repositoryId;\n $scope.pageTitle = $translate.instant('view.edit.repo.title', {repositoryId: $scope.params.repositoryId});\n $scope.hasActiveLocation = function() {\n return $repositories.hasActiveLocation();\n };\n\n // =========================\n // Private methods\n // =========================\n\n const loadRepositoryData = () => {\n return getFilteredLocations($repositories).then((locations) => {\n $scope.locations = locations;\n return RepositoriesRestService.getRepository($scope.repositoryInfo);\n });\n };\n\n const initView = (repositoryInfoResponse) => {\n const repositoryInfo = repositoryInfoResponse.data;\n $scope.canRenameRepo = authorizationService.isAdminOrRepoManager() && repositoryInfo.type === REPOSITORY_TYPES.graphdbRepo;\n if (angular.isDefined(repositoryInfo.params.ruleset)) {\n let ifRulesetExists = false;\n angular.forEach($scope.rulesets, function(item) {\n if (item.id === repositoryInfo.params.ruleset.value) {\n ifRulesetExists = true;\n }\n });\n if (repositoryInfo.params.ruleset && !ifRulesetExists) {\n const name = getFileName(repositoryInfo.params.ruleset.value);\n $scope.rulesets.unshift({id: repositoryInfo.params.ruleset.value, name: 'Custom: ' + name});\n }\n }\n $scope.repositoryInfo = repositoryInfo;\n $scope.setRepositoryType(repositoryInfo.type);\n parseNumberParamsIfNeeded($scope.repositoryInfo.params);\n $scope.repositoryInfo.saveId = $scope.saveRepoId;\n $scope.loader = false;\n };\n\n // =========================\n // Public methods\n // =========================\n\n $scope.$watch($scope.hasActiveLocation, function() {\n if ($scope.hasActiveLocation) {\n // Should get locations before getting repository info\n let repositoryInfoResponse;\n loadRepositoryData().then((repositoryInfo) => {\n repositoryInfoResponse = repositoryInfo;\n return MonitoringRestService.monitorActiveOperations($scope.repositoryInfo.id);\n }).then((monitoringResponse) => {\n $scope.isRepoInCluster = monitoringResponse.hasClusterOperation();\n }).catch((error) => {\n if (!repositoryInfoResponse) {\n $scope.repositoryInfo = undefined;\n return Promise.reject(error);\n }\n // the monitoring request failed, but we can still continue\n return Promise.resolve();\n }).then(() => {\n initView(repositoryInfoResponse);\n }).catch((response) => {\n const data = response.data;\n const status = response.status;\n const repositoryId = $routeParams.repositoryId;\n let toastrMsg;\n\n if (status === 404 && repositoryId !== 'system') {\n toastrMsg = decodeHTML($translate.instant('edit.repo.error.not.exists', {repositoryId}));\n } else if (status === 404 && repositoryId === 'system') {\n toastrMsg = decodeHTML($translate.instant('edit.system.repo.warning'));\n } else {\n toastrMsg = getError(data);\n }\n\n toastr.error(toastrMsg, $translate.instant('common.error'), {allowHtml: true});\n\n if (status === 404) {\n setTimeout(function() {\n $scope.loader = false;\n $location.path('repository');\n }, 1000);\n } else {\n $scope.loader = false;\n }\n });\n }\n });\n\n $scope.setRepositoryType = function(type) {\n $scope.repositoryType = type;\n };\n\n $scope.noMembersError = function() {\n toastr.error($translate.instant('fedx.create.repo.no.members.warning'));\n };\n\n $scope.editRepoHttp = function() {\n $scope.loader = true;\n RepositoriesRestService.editRepository($scope.repositoryInfo.saveId, $scope.repositoryInfo)\n .success(function() {\n toastr.success($translate.instant('edit.repo.success.msg', {saveId: $scope.repositoryInfo.saveId}));\n $repositories.init().finally(() => $scope.goBackToPreviousLocation());\n if ($scope.repositoryInfo.saveId === $scope.repositoryInfo.id && $scope.repositoryInfo.restartRequested) {\n $repositories.restartRepository($scope.repositoryInfo);\n }\n }).error(function(data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n $scope.loader = false;\n });\n };\n\n $scope.editRepository = function() {\n $scope.isInvalidRepoName = !FILENAME_PATTERN.test($scope.repositoryInfo.id);\n $scope.isInvalidEntityIndexSizeMin = $scope.repositoryInfo.params.entityIndexSize?.value < ENTITY_INDEX_SIZE_MIN;\n const numberFormatError = getNumberFormatError($scope.repositoryInfo.params, $translate);\n let modalMsg = decodeHTML($translate.instant('edit.repo.save.changes.msg', {repoId: $scope.repositoryInfo.id}));\n if ($scope.repositoryInfo.saveId !== $scope.repositoryInfo.id) {\n modalMsg += decodeHTML($translate.instant('edit.repo.rename.changes.msg'));\n } else if ($scope.repositoryInfo.restartRequested) {\n modalMsg += decodeHTML($translate.instant('edit.repo.restart.requested.msg'));\n } else {\n modalMsg += decodeHTML($translate.instant('edit.repo.restart.needed.msg'));\n }\n if ($scope.isInvalidRepoName) {\n toastr.error($translate.instant('wrong.repo.name.error'));\n } else if ($scope.repositoryType === \"fedx\" && $scope.repositoryInfo.params.member.value.length === 0) {\n $scope.noMembersError();\n } else if (numberFormatError) {\n toastr.error(numberFormatError);\n } else if ($scope.isInvalidEntityIndexSizeMin) {\n toastr.error($translate.instant('repo.error.entityIndex.min'));\n } else if (!$scope.canRenameRepo && $scope.repositoryInfo.saveId !== $scope.repositoryInfo.id) {\n toastr.error($translate.instant('edit.repo.id.change.error', {repoType: $scope.repositoryInfo.type}));\n } else {\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm.save'),\n message: modalMsg,\n warning: true,\n }).result\n .then(function() {\n $scope.editRepoHttp();\n });\n }\n };\n\n $scope.editRepositoryId = function() {\n if (!$scope.canRenameRepo) {\n return;\n }\n const msg = decodeHTML($translate.instant('edit.repo.id.warning.msg'));\n\n ModalService.openSimpleModal({\n title: $translate.instant('confirm.enable.edit'),\n message: msg,\n warning: true,\n }).result.then(function() {\n $scope.canEditRepoId = true;\n });\n };\n\n $scope.goBackToPreviousLocation = function() {\n if (angular.isDefined($routeParams.previous)) {\n delete $location.$$search.previous;\n $location.path('/');\n } else {\n $location.path('/repository');\n }\n };\n\n $scope.getShaclOptionsClass = function() {\n return getShaclOptionsClass();\n };\n\n // =================================\n // Subscriptions and event handlers\n // =================================\n\n const languageChangedSubscription = $rootScope.$on('$translateChangeSuccess', () => {\n $scope.pageTitle = $translate.instant('view.edit.repo.title', {repositoryId: $scope.params.repositoryId});\n });\n $scope.$on('$destroy', () => {\n languageChangedSubscription();\n });\n}\n","import {RemoteLocationAuthType, RemoteLocationModel, RemoteLocationType} from \"../../models/repository/remote-location.model\";\nimport 'angular/core/directives/validate-url.directive';\n\nconst modules = [\n 'graphdb.framework.core.directives.validate-url',\n];\n\nangular.module('graphdb.framework.repositories.controllers.manage-remote-location-dialog', modules)\n .controller('ManageRemoteLocationDialogController', ManageRemoteLocationDialogController);\n\nManageRemoteLocationDialogController.$inject = ['$scope', '$uibModalInstance', 'productInfo', 'data'];\n\n/**\n * Controller for managing the remote location dialog, which handles both creation and editing of remote locations.\n *\n * @param {Object} $scope\n * @param {Object} $uibModalInstance\n * @param {Object} productInfo\n * @param {Object} data - Data passed to the dialog:\n * - If `data.remoteLocation` is provided, the dialog is in edit mode\n * and the remote location object is initialized with the provided data.\n * - If `data.remoteLocation` is not provided, the dialog is in create mode\n * and a new `RemoteLocationModel` instance is initialized.\n *\n * @constructor\n */\nfunction ManageRemoteLocationDialogController($scope, $uibModalInstance, productInfo, data) {\n /**\n * @type {RemoteLocationModel}\n */\n $scope.remoteLocation = data.remoteLocation ? new RemoteLocationModel({...data.remoteLocation}) : new RemoteLocationModel();\n\n $scope.RemoteLocationType = RemoteLocationType;\n $scope.RemoteLocationAuthType = RemoteLocationAuthType;\n $scope.isEdit = !!data.remoteLocation;\n $scope.docBase = `https://graphdb.ontotext.com/documentation/${productInfo.shortVersion}`;\n\n $scope.ok = () => {\n if ($scope.remoteLocationForm.$pristine || $scope.remoteLocationForm.$invalid) {\n return;\n }\n $uibModalInstance.close($scope.remoteLocation);\n };\n\n $scope.cancel = () => {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.onLocationTypeChanged = () => {\n if ([RemoteLocationType.ONTOPIC, RemoteLocationType.SPARQL].includes($scope.remoteLocation.locationType)) {\n $scope.remoteLocation.authType = RemoteLocationAuthType.BASIC;\n } else {\n $scope.remoteLocation.authType = RemoteLocationAuthType.NONE;\n }\n };\n}\n","export const STATIC_RULESETS = [\n {id: 'empty', name: 'No inference'},\n {id: 'rdfs-optimized', name: 'RDFS (Optimized)'},\n {id: 'rdfs', name: 'RDFS'},\n {id: 'rdfsplus-optimized', name: 'RDFS-Plus (Optimized)'},\n {id: 'owl-horst-optimized', name: 'OWL-Horst (Optimized)'},\n {id: 'owl-horst', name: 'OWL-Horst'},\n {id: 'owl2-ql-optimized', name: 'OWL2-QL (Optimized)'},\n {id: 'owl2-ql', name: 'OWL2-QL'},\n {id: 'owl-max-optimized', name: 'OWL-Max (Optimized)'},\n {id: 'owl-max', name: 'OWL-Max'},\n {id: 'owl2-rl-optimized', name: 'OWL2-RL (Optimized)'},\n {id: 'owl2-rl', name: 'OWL2-RL'},\n\n];\n\nexport const REPOSITORY_TYPES = {graphdbRepo: 'graphdb', free: 'free', eeWorker: 'worker', eeMaster: 'master', ontop: 'ontop', se: 'se', fedx: 'fedx'};\nexport const FILENAME_PATTERN = new RegExp('^[a-zA-Z0-9-_]+$');\nexport const NUMBER_PATTERN = new RegExp('^[0-9]+$');\n","const httpRegex = /^(h|ht|htt|http|https|http:|https:|http:\\/|https:\\/|http:\\/\\/|https:\\/\\/|https?:\\/\\/[\\S]*)$/i;\nconst ftpRegex = /^(f|ft|ftp|ftps|ftp:|ftps:|ftp:\\/|ftps:\\/|ftp:\\/\\/|ftps:\\/\\/[\\S]*)$/i;\n\n\n/**\n * Utilities for URL manipulation, validation, etc.\n */\nexport class UrlUtils {\n /**\n * Validates whether the given string is a valid URL or a partial URL that follows the rules.\n *\n * @param {string} url - The URL string to validate.\n * @return {boolean} True if the URL is valid or a valid partial URL, false otherwise.\n */\n static isValidUrl(url) {\n return httpRegex.test(url) || ftpRegex.test(url);\n }\n\n /**\n * Checks if the URL contains an excluded substring.\n *\n * @param {string} url - The URL string to check.\n * @param {string} exclude - The substring to exclude.\n * @return {boolean} True if the URL does not contain the substring, false if it does.\n */\n static doesNotContain(url, exclude) {\n return !new RegExp(exclude).test(url);\n }\n\n /**\n * Checks if the URL uses an excluded protocol.\n *\n * @param {string} url - The URL string to check.\n * @param {Array<string>} excludedProtocols - The protocols to exclude.\n * @return {boolean} True if the URL does not use the excluded protocols, false if it does.\n */\n static doesNotUseProtocol(url, excludedProtocols) {\n const protocolPattern = new RegExp('^(' + excludedProtocols.join('|') + ')://', 'i');\n return !protocolPattern.test(url);\n }\n}\n"],"names":["angular","module","directive","restrict","require","link","scope","element","attr","ctrl","$validators","validUrl","modelValue","viewValue","$isEmpty","allowEmpty","UrlUtils","isValidUrl","exclude","doesNotContain","excludeProtocol","excludedProtocols","split","doesNotUseProtocol","ENTITY_INDEX_SIZE_MIN","getFileName","path","lastIdx","lastIndexOf","name","substring","parseNumberParamsIfNeeded","params","Object","keys","forEach","key","param","value","possibleNumber","parseFloat","isNaN","numberParamToErrorKey","Number","isInteger","parseInt","isNumber","getShaclOptionsClass","optionsModule","document","getElementById","isAriaExpanded","getAttribute","queryLimitResults","queryTimeout","validationResultsLimitTotal","validationResultsLimitPerConstraint","joinWorkerThreads","leftJoinWorkerThreads","unionWorkerThreads","boundJoinBlockSize","entityIndexSize","getNumberFormatError","$translate","errorEntry","find","NUMBER_PATTERN","test","instant","getDocBase","productInfo","shortVersion","getFilteredLocations","$repositories","getLocations","then","locations","filter","location","isGraphDBLocation","errorMsg","degradedReason","LocationsAndRepositoriesCtrl","$scope","$rootScope","$uibModal","toastr","ModalService","LocationsRestService","LocalStorageAdapter","$interval","$q","guidesService","service","GuidesService","authorizationService","AuthorizationService","RemoteLocationType","loader","isLocationInactive","active","hasActiveLocation","getLocationsAbortRequestPromise","defer","finally","getLocalLocation","local","locationType","remoteLocationModel","locationTypeCheck","isRepoManager","getRepositoriesFromLocation","uri","length","hasAnyRemoteLocation","locationTypes","some","getActiveLocation","getLocationError","getDegradedReason","getRepositories","isRepoActive","repo","deleteLocation","openSimpleModal","title","message","warning","result","addLocationHttp","dataAddLocation","addLocation","success","init","error","data","msg","getError","openRemoteLocationDialog","editLocation","remoteLocation","undefined","GRAPH_DB","open","templateUrl","windowClass","controller","resolve","editLocationHttp","dataEditLocation","setRepository","deleteRepository","repository","decodeHTML","repositoryId","id","cashedDependenciesGraphPrefix","cashedClassHierarchyGraphPrefix","startsWith","remove","removeCachedGraphsOnDelete","restartRepository","toggleDefaultRepository","getDefaultRepository","setDefaultRepository","getRepositoryDownloadLink","url","type","REPOSITORY_TYPES","ontop","token","AuthenticationStorageService","getAuthToken","getValue","encodeURIComponent","copyToClipboard","openCopyToClipboardModal","fromFile","openActiveLocationSettings","timer","isActive","guidePaused","initQuick","$on","cancel","locationId","repositoriesFromLocation","canReadRepo","canReadGqlRepo","canMaintainRepo","UploadRepositoryConfigCtrl","$uibModalInstance","Upload","upload","files","uploadFile","ok","uploadFileLoader","method","config","close","dismiss","AddLocationCtrl","newLocation","docBase","isValidLocation","indexOf","EditLocationCtrl","editedLocation","_","cloneDeep","ChooseRepositoryCtrl","$location","repositoryTypes","chooseRepositoryType","repoType","AddRepositoryCtrl","$timeout","$routeParams","RepositoriesRestService","setPageTitle","repositoryType","graphdbRepo","pageTitle","fedx","rulesets","STATIC_RULESETS","slice","enable","entityIndexSizeMin","documentationUrlForStorageEncryption","DocumentationUrlResolver","getDocumentationUrl","encryptInput","hovered","repositoryInfo","changedLocation","$broadcast","getConfig","getRepositoryConfiguration","resp","member","focus","catch","isEnterprise","isValidEERepository","isFreeEdition","isValidSERepository","isValidFRRepository","isValidOntopRepository","isValidFedXRepository","activeLocation","isInvalidPieFile","uploadRuleset","ruleset","progress","evt","fileName","newValue","fileLocation","rulesetPie","unshift","rulesetPieFile","errorMessage","noMembersError","goBackToPreviousLocation","previous","search","target","charAt","createRepoHttp","createRepository","repoId","createRepo","isInvalidRepoName","FILENAME_PATTERN","isInvalidEntityIndexSizeMin","numberFormatError","rulesetWarning","pp","disableSameAs","autofocusId","languageChangedSubscription","EditRepositoryFileCtrl","file","dialogTitle","repositoryReference","getRepositoryFileContent","fileContent","content","EditRepositoryCtrl","MonitoringRestService","editRepoPage","canEditRepoId","canRenameRepo","isRepoInCluster","restartRequested","saveRepoId","$watch","repositoryInfoResponse","getRepository","monitorActiveOperations","monitoringResponse","hasClusterOperation","Promise","reject","isAdminOrRepoManager","isDefined","ifRulesetExists","item","setRepositoryType","saveId","initView","response","status","toastrMsg","allowHtml","setTimeout","editRepoHttp","editRepository","modalMsg","editRepositoryId","$$search","$inject","ManageRemoteLocationDialogController","RemoteLocationModel","RemoteLocationAuthType","isEdit","remoteLocationForm","$pristine","$invalid","onLocationTypeChanged","ONTOPIC","SPARQL","includes","authType","BASIC","NONE","free","eeWorker","eeMaster","se","RegExp","httpRegex","ftpRegex","join"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"64700.a10c20a33a6c92f01733.bundle.js","mappings":"6HAAAA,eAAeC,IAAI,QAAS,CACxB,CACI,IAAO,QACP,YAAe,sCACf,OAAU,yBACV,KAAQ,WACR,WAAc,eACd,MAAS,kBACT,SAAY,gBACZ,iBAAoB,qBACpB,iBAAoB,CAAC,yBAI7BD,eAAeC,IAAI,YAAa,CAC5B,MAAS,CACL,CACIC,MAAO,qBACPC,SAAU,kBACVC,KAAM,OACNC,MAAO,GACPC,KAAM,YACNC,OAAQ,MACRC,cAAe,gBACfC,aAAc,mB","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/plugin.js"],"sourcesContent":["PluginRegistry.add('route', [\n {\n 'url': '/ttyg',\n 'templateUrl': 'js/angular/ttyg/templates/ttyg.html',\n 'module': 'graphdb.framework.ttyg',\n 'path': 'ttyg/app',\n 'controller': 'TTYGViewCtrl',\n 'title': 'menu.ttyg.label',\n 'helpInfo': 'ttyg.helpInfo',\n 'documentationUrl': 'talk-to-graph.html',\n 'allowAuthorities': ['READ_REPO_{repoId}']\n }\n]);\n\nPluginRegistry.add('main.menu', {\n 'items': [\n {\n label: 'Talk to Your Graph',\n labelKey: 'menu.ttyg.label',\n href: 'ttyg',\n order: 20,\n role: 'ROLE_USER',\n parent: 'Lab',\n guideSelector: 'sub-menu-ttyg',\n testSelector: 'sub-menu-ttyg'\n }]\n});\n"],"names":["PluginRegistry","add","label","labelKey","href","order","role","parent","guideSelector","testSelector"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"75384.cc7de25be91251aa6aa4.bundle.js","mappings":"uPAeA,SAASA,EAAYC,EAAiBC,GA4MlC,MAAO,CACHC,WAvMgBC,GACTH,EAAgBE,WAAWC,EAASC,uBACtCC,KAAMC,GAAaA,EAASC,KAAKC,gBAsMtCC,gBAzLqBC,GACdV,EAAgBS,gBAAgBC,GAClCL,KAAMC,IAAaK,EAAAA,EAAAA,GAAgBL,EAASC,OAwLjDK,mBAhLwBC,GACjBb,EAAgBY,mBAAmBC,EAAKH,GAAIG,EAAKC,0BACnDT,KAAMC,IAAaK,EAAAA,EAAAA,GAAgBL,EAASC,OA+KjDQ,mBAvKwBL,GACjBV,EAAgBe,mBAAmBL,GACrCL,KAAK,SAASW,GACX,MAAMT,EAAOS,EAAIT,KAEXU,EADUD,EAAIE,UACqB,uBACzC,IAAIC,EAAW,cAKf,OAJIF,IACAE,EAAWF,EAAyBG,MAAM,aAAa,GACvDD,EAAWA,EAASE,UAAU,EAAGF,EAASG,SAEvC,CAACf,OAAMY,WAClB,GA4JJI,YApJiBpB,GACVH,EAAgBuB,YAAYpB,EAASC,uBACvCC,KAAMC,IAAakB,EAAAA,EAAAA,IAAsBlB,EAASC,OAmJvDkB,gBA3IqBC,IACrB,MAAMC,EAAUD,EAAaE,8BAC7B,OAAO5B,EAAgByB,gBAAgBE,GAClCtB,KAAMC,IAAakB,EAAAA,EAAAA,IAAsBlB,EAASC,QAyIvDsB,iBAxMqBA,CAACC,EAAgBC,IAC/B/B,EAAgB6B,mBAClBxB,KAAMC,IAAa0B,EAAAA,EAAAA,GAAgB1B,EAASC,OAuMjD0B,mBAlIwBvB,GACjBV,EAAgBiC,mBAAmBvB,GAkI1CwB,mBA7GwB/B,GACjBH,EAAgBkC,mBAAmB/B,EAASgC,8BAC9C9B,KAAMC,IAAakB,EAAAA,EAAAA,IAAsBlB,EAASC,OA4GvD6B,sBAzH2BC,GACpBrC,EAAgBoC,sBAAsBC,GAyH7CC,UAtGcA,KACd,MAAMC,EAAoBtC,EAAcuC,sCACxC,OAAOxC,EAAgBsC,YAClBjC,KAAMC,IACImC,EAAAA,EAAAA,IAAgBnC,EAASC,KAAMgC,KAmG9CG,SA1FchC,IACd,MAAM6B,EAAoBtC,EAAcuC,sCACxC,OAAOxC,EAAgB0C,SAAShC,GAC3BL,KAAMC,IAAaqC,EAAAA,EAAAA,IAAiBrC,EAASC,KAAMgC,KAwFxDK,YAhFiBjB,IACjB,MAAMY,EAAoBtC,EAAcuC,sCACxC,OAAOxC,EAAgB4C,YAAYjB,GAC9BtB,KAAMC,IACIqC,EAAAA,EAAAA,IAAiBrC,EAASC,KAAMgC,KA6E/CM,UApEelB,IACf,MAAMY,EAAoBtC,EAAcuC,sCACxC,OAAOxC,EAAgB6C,UAAUlB,GAC5BtB,KAAMC,IACIqC,EAAAA,EAAAA,IAAiBrC,EAASC,KAAMgC,KAiE/CO,YAxDiBpC,GACVV,EAAgB8C,YAAYpC,GAwDnCqC,gBA/CoBA,CAAC5C,EAAU6C,IACxBhD,EAAgB+C,gBAAgB5C,EAAS8C,yBAAyBD,IACpE3C,KAAMC,IACI4C,EAAAA,EAAAA,IAAsB5C,EAASC,OA6C9C4C,gBArCoBA,KACpB,MAAMZ,EAAoBtC,EAAcuC,sCACxC,OAAOxC,EAAgBoD,wBAClB/C,KAAMC,IACIqC,EAAAA,EAAAA,IAAiBrC,EAASC,KAAMgC,KAkC/Cc,qBAzB0B1B,GACnB3B,EAAgBqD,qBAAqB1B,GACvCtB,KAAMC,IACIgD,EAAAA,EAAAA,GAA+BhD,EAASC,OAwB/D,CAtOAgD,QACKC,OAAO,+CAHI,CAAC,wCAIZC,QAAQ,cAAe1D,GAE5BA,EAAY2D,QAAU,CAAC,kBAAmB,gB,wCCbnC,MAAMC,EACTC,WAAAA,CAAYrD,GAKRsD,KAAKC,MAAQvD,EAAKwD,KAKlBF,KAAKG,SAAWzD,EAAK0D,QAKrBJ,KAAKK,MAAQ3D,EAAK4D,IACtB,CAEA,QAAIA,GACA,OAAON,KAAKK,KAChB,CAEA,QAAIC,CAAKC,GACLP,KAAKK,MAAQE,CACjB,CACA,WAAIH,GACA,OAAOJ,KAAKG,QAChB,CAEA,WAAIC,CAAQG,GACRP,KAAKG,SAAWI,CACpB,CACA,QAAIL,GACA,OAAOF,KAAKC,KAChB,CAEA,QAAIC,CAAKK,GACLP,KAAKC,MAAQM,CACjB,EAGG,MAAMC,EACTT,WAAAA,CAAYrD,GAKRsD,KAAKS,cAAgB/D,EAAKgE,YAC9B,CAEA,gBAAIA,GACA,OAAOV,KAAKS,aAChB,CAEA,gBAAIC,CAAaH,GACbP,KAAKS,cAAgBF,CACzB,E,uCCzDG,MAAMI,EACTZ,WAAAA,CAAYrD,EAAO,CAAC,GAIhBsD,KAAKY,QAAUlE,EAAK8B,OAKpBwB,KAAKa,UAAYnE,EAAKoE,UAAY,GAKlCd,KAAKe,WAAarE,EAAKsE,UAKvBhB,KAAKiB,UAAYvE,EAAKwE,UAAY,GAKlClB,KAAKmB,eAAiBzE,EAAK0E,cAO3BpB,KAAKqB,eAAiB3E,EAAK2E,cAC/B,CAEA,UAAI7C,GACA,OAAOwB,KAAKY,OAChB,CAEA,UAAIpC,CAAO+B,GACPP,KAAKY,QAAUL,CACnB,CAEA,YAAIO,GACA,OAAOd,KAAKa,SAChB,CAEA,YAAIC,CAASP,GACTP,KAAKa,UAAYN,CACrB,CAEA,aAAIS,GACA,OAAOhB,KAAKe,UAChB,CAEA,aAAIC,CAAUT,GACVP,KAAKe,WAAaR,CACtB,CAEA,YAAIW,GACA,OAAOlB,KAAKiB,SAChB,CAEA,YAAIC,CAASX,GACTP,KAAKiB,UAAYV,CACrB,CAEA,iBAAIa,GACA,OAAOpB,KAAKmB,cAChB,CAEA,iBAAIC,CAAcb,GACdP,KAAKmB,eAAiBZ,CAC1B,EAOG,MAAMe,EACTvB,WAAAA,CAAYzD,EAAUiF,GAClBvB,KAAKwB,UAAYlF,EACjB0D,KAAKyB,OAASF,CAClB,CAEA,UAAI/C,GACA,OAAOwB,KAAKwB,UAAUhD,MAC1B,CAEAT,2BAAAA,GACI,MAAO,CACHpB,eAAgBqD,KAAKxB,OACrB+C,MAAOvB,KAAKyB,OACZC,QAAS1B,KAAKwB,UAAUE,QACxBC,WAAW,IAAIC,MAAOC,oBAE9B,E,uDC1FG,MAAMC,EAQT/B,WAAAA,CAAYvB,EAAQuD,GAMhB/B,KAAKY,QAAUpC,EAMfwB,KAAKgC,cAAWC,EAMhBjC,KAAKkC,UAAYH,EAOjB/B,KAAKmC,SAAW,EACpB,CAEA,UAAI3D,GACA,OAAOwB,KAAKY,OAChB,CAEA,UAAIpC,CAAO+B,GACPP,KAAKY,QAAUL,CACnB,CAEA,WAAImB,GACA,OAAO1B,KAAKgC,QAChB,CAEA,WAAIN,CAAQnB,GACRP,KAAKgC,SAAWzB,CACpB,CAEA,YAAIwB,GACA,OAAO/B,KAAKkC,SAChB,CAEA,YAAIH,CAASxB,GACTP,KAAKkC,UAAY3B,CACrB,CAEA,WAAI6B,GACA,OAAOpC,KAAKmC,QAChB,CAMA,WAAIC,CAAQ7B,GACRP,KAAKmC,SAAW5B,CACpB,CAOA8B,kBAAAA,CAAmBC,GACVtC,KAAKkC,YACNlC,KAAKkC,UAAY,IAAIK,EAAAA,EAAiB,CAACC,KAAMC,EAAAA,EAAkBC,QAEnE1C,KAAKkC,UAAUI,QAAUA,CAC7B,CAOAK,kBAAAA,GACI,OAAO3C,KAAKkC,UAAUI,OAC1B,CAOAhE,0BAAAA,GACI,MAAO,CACHoD,QAAS1B,KAAKgC,SACdD,SAAU/B,KAAKkC,UAAUI,QAEjC,CAOA/F,mBAAAA,GACI,MAAO,CACHI,eAAgBqD,KAAKY,QACrBc,QAAS1B,KAAKgC,SACdD,SAAU/B,KAAKkC,UAAUI,QACzBX,WAAW,IAAIC,MAAOC,oBAE9B,CAEAzC,wBAAAA,CAAyBD,GACrB,MAAO,CACHxC,eAAgBqD,KAAKY,QACrBzB,WAER,EAGG,MAAMyD,EAKT7C,WAAAA,CAAY8C,EAAQ,IAChB7C,KAAK8C,OAASD,CAClB,CAEAE,OAAAA,GACI,OAA8B,IAAvB/C,KAAK8C,OAAOrF,MACvB,CAKAuF,UAAAA,CAAW1G,GACP0D,KAAK8C,OAAOG,KAAK3G,EACrB,CAEA,SAAIuG,GACA,OAAO7C,KAAK8C,MAChB,CAEA,SAAID,CAAMtC,GACNP,KAAK8C,OAASvC,GAAS,EAC3B,CAEA2C,OAAAA,GACI,IAAKlD,KAAK+C,UACN,OAAO/C,KAAK8C,OAAO9C,KAAK8C,OAAOrF,OAAS,EAEhD,E,mECnKG,MAAM0F,EACT,iBAAOC,GACH,MAAM1G,EAAO,CACT2G,KAAM,QACNrC,UAAWsC,KAAKC,MAAM3B,KAAK4B,MAAQ,KACnCC,KAAK,GAET,OAAO,IAAIN,EAAUzG,GAAMgH,EAAAA,EAAAA,KAC/B,CAEA3D,WAAAA,CAAYrD,EAAMiH,GACd3D,KAAK2D,cAAgBA,EAKrB3D,KAAK4D,IAAMlH,EAAKG,GAKhBmD,KAAK6D,MAAQnH,EAAK2G,KAKlBrD,KAAKe,WAAarE,EAAKsE,UAKvBhB,KAAK8D,aAAepH,EAAKqH,aAAe,IAAInB,EAAAA,EAC5C5C,KAAKgE,KAAOtH,EAAK+G,MAAO,EACxBzD,KAAKiE,KAAOjE,KAAKkE,eACjBlE,KAAKmE,QAAUzH,EAAK0H,SAAU,CAClC,CAEAC,KAAAA,GACI,OAAOrE,KAAKgE,IAChB,CAEA,OAAIP,CAAIlD,GACJP,KAAKgE,KAAOzD,CAChB,CAEA2D,YAAAA,GACI,OAAOlE,KAAK2D,cAAcW,KAAKC,UAAUvE,MAC7C,CAEA,MAAInD,GACA,OAAOmD,KAAK4D,GAChB,CAEA,MAAI/G,CAAG0D,GACHP,KAAK4D,IAAMrD,CACf,CAEA,QAAI8C,GACA,OAAOrD,KAAK6D,KAChB,CAEA,QAAIR,CAAK9C,GACLP,KAAKkE,eACLlE,KAAK6D,MAAQtD,CACjB,CAEA,aAAIS,GACA,OAAOhB,KAAKe,UAChB,CAEA,aAAIC,CAAUT,GACVP,KAAKe,WAAaR,CACtB,CAEA,eAAIwD,GACA,OAAO/D,KAAK8D,YAChB,CAEA,eAAIC,CAAYxD,GACZP,KAAK8D,aAAevD,GAAS,IAAIqC,EAAAA,CACrC,CAEA4B,QAAAA,GACI,OAAOxE,KAAKmE,OAChB,CAEA,UAAIC,CAAO7D,GACPP,KAAKmE,QAAU5D,CACnB,CAQAtD,sBAAAA,GACI,MAAO,CAACoG,KAAMrD,KAAK6D,MACvB,EAGG,MAAMY,EACT1E,WAAAA,CAAYrD,GACRsD,KAAK0E,KAAOhI,EAAKiI,IAKjB3E,KAAKe,WAAarE,EAAKsE,UAKvBhB,KAAK4E,OAASlI,EAAKmI,KACvB,CAEA,OAAIF,GACA,OAAO3E,KAAK0E,IAChB,CAEA,OAAIC,CAAIpE,GACJP,KAAK0E,KAAOnE,CAChB,CAEA,aAAIS,GACA,OAAOhB,KAAKe,UAChB,CAEA,aAAIC,CAAUT,GACVP,KAAKe,WAAaR,CACtB,CAEA,SAAIsE,GACA,OAAO7E,KAAK4E,MAChB,CAEA,SAAIC,CAAMtE,GACNP,KAAK4E,OAASrE,CAClB,EAGG,MAAMuE,EACT/E,WAAAA,CAAY8E,GAKR7E,KAAK4E,OAASC,GAAS,GAKvB7E,KAAK+E,YAAc,GACnB/E,KAAKgF,aACLhF,KAAKiF,kBACT,CAOAC,gBAAAA,GACI,OAAOlF,KAAK4E,OAAOO,KAAMnI,GAASA,EAAKqH,QAC3C,CAKAW,UAAAA,GACIhF,KAAK4E,OAAOQ,KAAK,CAACC,EAAGC,IACVA,EAAEtE,UAAYqE,EAAErE,UAE/B,CAOAuE,mBAAAA,CAAoB/G,EAAQwC,GACxB,MAAMhE,EAAOgD,KAAK4E,OAAOY,KAAMC,GAAMA,EAAE5I,KAAO2B,GAC1CxB,IACAA,EAAKgE,UAAYA,EACjBhB,KAAKgF,aACLhF,KAAKiF,mBAEb,CAOAS,YAAAA,CAAalH,GACT,MAAMxB,EAAOgD,KAAK4E,OAAOY,KAAMxI,GAASA,EAAKH,KAAO2B,GAChDxB,IACAA,EAAKyG,KAAM,EAEnB,CAEAkC,eAAAA,CAAgBnH,EAAQ4F,GACpB,IAAK5F,EACD,OAEJ,MAAMxB,EAAOgD,KAAK4E,OAAOY,KAAMxI,GAASA,EAAKH,KAAO2B,GAChDxB,IACAA,EAAKoH,OAASA,EAEtB,CAOAwB,cAAAA,CAAepH,EAAQ6E,GACnB,MAAMrG,EAAOgD,KAAK4E,OAAOY,KAAMC,GAAMA,EAAE5I,KAAO2B,GAC1CxB,IACAA,EAAKqG,KAAOA,EAEpB,CAMAwC,UAAAA,CAAWC,GACP9F,KAAK4E,OAAS5E,KAAK4E,OAAOmB,OAAQ/I,GAASA,EAAKH,KAAOiJ,EAAgBjJ,IACvEmD,KAAKgF,aACLhF,KAAKiF,kBACT,CAEAA,gBAAAA,GACIjF,KAAK+E,YAAc,GAEnB/E,KAAK4E,OAAOoB,QAAShJ,IACjB,MAAM2H,EAAM,IAAI/C,KAAsB,IAAjB5E,EAAKgE,WAAkBiF,eACtCC,EAAWlG,KAAK+E,YAAYS,KAAMW,GAAMA,EAAExB,MAAQA,GACpDuB,EACAA,EAASrB,MAAM5B,KAAKjG,GAEpBgD,KAAK+E,YAAY9B,KAAK,IAAIwB,EAAe,CAACE,IAAKA,EAAK3D,UAA4B,IAAjBhE,EAAKgE,UAAkB6D,MAAO,CAAC7H,OAG1G,CAEAoJ,UAAAA,CAAWpJ,GACPgD,KAAK4E,OAAO3B,KAAKjG,GACjBgD,KAAKgF,aACLhF,KAAKiF,kBACT,CAEAoB,WAAAA,CAAYC,EAASC,GACjBvG,KAAK4E,OAAS5E,KAAK4E,OAAO4B,IAAKxJ,GACvBA,EAAKH,KAAO0J,EAAQ1J,GACbyJ,EAEJtJ,GAEXgD,KAAKgF,aACLhF,KAAKiF,kBACT,CAMAlC,OAAAA,GACI,OAA8B,IAAvB/C,KAAK4E,OAAOnH,MACvB,CAMAgJ,YAAAA,GACI,OAAOzG,KAAK4E,OAAO,EACvB,CAKA8B,WAAAA,GACI1G,KAAK4E,OAAOoB,QAASP,IACjBA,EAAEkB,UAAW,GAErB,CAMAC,UAAAA,CAAW5J,GACPgD,KAAK0G,cACL1G,KAAK4E,OAAOoB,QAASP,IACjBA,EAAEkB,SAAWlB,EAAE5I,KAAOG,EAAKH,IAEnC,CAEAgK,OAAAA,CAAQhK,GACJ,OAAOmD,KAAK4E,OAAOY,KAAMC,GAAMA,EAAE5I,KAAOA,EAC5C,CAEAiK,mBAAAA,GACI,OAAO9G,KAAK4E,OAAOY,KAAMxI,IAAUA,EAAKH,GAC5C,CAEAkK,UAAAA,CAAWC,GACP,MAAMhK,EAAOgD,KAAK4E,OAAOY,KAAMC,GAAMA,EAAE5I,KAAOmK,EAAYnK,IACtDG,IACAA,EAAKqG,KAAO2D,EAAY3D,KAEhC,CAKA,SAAIwB,GACA,OAAO7E,KAAK4E,MAChB,CAKA,SAAIC,CAAMtE,GACNP,KAAK4E,OAASrE,CAClB,CAEA,cAAI0G,GACA,OAAOjH,KAAK+E,WAChB,CAEA,cAAIkC,CAAW1G,GACXP,KAAK+E,YAAcxE,CACvB,E,4DClVG,MAAM2G,EACTnH,WAAAA,CAAYrD,EAAO,CAAC,GAKhBsD,KAAKY,QAAUlE,EAAK8B,OAKpBwB,KAAKmH,UAAYzK,EAAKyC,SAKtBa,KAAKoH,cAAgB1K,EAAK2K,aAE1BrH,KAAKsH,eAA8BrF,IAAlBvF,EAAK6K,UAAyB7K,EAAK6K,QACxD,CAEA,UAAI/I,GACA,OAAOwB,KAAKY,OAChB,CAEA,UAAIpC,CAAO+B,GACPP,KAAKY,QAAUL,CACnB,CAEA,YAAIpB,GACA,OAAOa,KAAKmH,SAChB,CAEA,YAAIhI,CAASoB,GACTP,KAAKmH,UAAY5G,CACrB,CAEA,gBAAI8G,GACA,OAAOrH,KAAKoH,aAChB,CAEA,gBAAIC,CAAa9G,GACbP,KAAKoH,cAAgB7G,CACzB,CAEA,YAAIgH,GACA,OAAOvH,KAAKsH,SAChB,CAEA,YAAIC,CAAShH,GACTP,KAAKsH,UAAY/G,CACrB,EAGG,MAAMiH,EACTzH,WAAAA,CAAYrD,EAAO,IACfsD,KAAK8C,OAASpG,CAClB,CAEA,SAAImG,GACA,OAAO7C,KAAK8C,MAChB,CAEA,SAAID,CAAMtC,GACNP,KAAK8C,OAASvC,CAClB,EAGG,MAAMkH,EACT1H,WAAAA,CAAYrD,EAAO,CAAC,GAIhBsD,KAAK6D,MAAQnH,EAAK2G,KAKlBrD,KAAK0H,UAAYhL,EAAKiL,SAKtB3H,KAAK4H,OAASlL,EAAKmL,MAMnB7H,KAAK8H,WAAapL,EAAKqL,UAMvB/H,KAAKgI,cAAgBtL,EAAKuL,WAC9B,CAEA,QAAI5E,GACA,OAAOrD,KAAK6D,KAChB,CAEA,QAAIR,CAAK9C,GACLP,KAAK6D,MAAQtD,CACjB,CAEA,YAAIoH,GACA,OAAO3H,KAAK0H,SAChB,CAEA,YAAIC,CAASpH,GACTP,KAAK0H,UAAYnH,CACrB,CAEA,SAAIsH,GACA,OAAO7H,KAAK4H,MAChB,CAEA,SAAIC,CAAMtH,GACNP,KAAK4H,OAASrH,CAClB,CAEA,aAAIwH,GACA,OAAO/H,KAAK8H,UAChB,CAEA,aAAIC,CAAUxH,GACVP,KAAK8H,WAAavH,CACtB,CAEA,gBAAI2H,GACA,OAAOlI,KAAKgI,aAChB,CAEA,gBAAIE,CAAa3H,GACbP,KAAKgI,cAAgBzH,CACzB,EAGG,MAAM4H,EAAmB,CAC5BC,OAAQ,SACR9D,KAAM,OACN+D,MAAO,Q,8BC5IX3I,QACKC,OAAO,sCAAuC,IAC9CC,QAAQ,kBAAmBzD,GAEhCA,EAAgB0D,QAAU,CAAC,SAE3B,MAAMyI,EAAyB,0BACzBC,EAAkB,mBAClBC,EAA4B,GAAGF,YAC/BG,EAAiB,kBAIvB,SAAStM,EAAgBuM,GA8NrB,OA7NqB,IAAIC,EAAAA,EA6NlB,CACHtM,WAvNgBK,GAITgM,EAAME,KAAKH,EAAgB/L,GAoNlCE,gBArMqBC,GAId6L,EAAMG,IAAI,GAAGP,KAA0BzL,KAkM9CE,mBAtLuBA,CAACF,EAAIH,IAIrBgM,EAAMI,IAAI,GAAGR,KAA0BzL,IAAMH,GAmLpDQ,mBA3KwBL,GAIjB6L,EAAMG,IAAI,GAAGP,YAAiCzL,IAAM,CAACkM,aAAc,SAwK1ErL,YAhKiBhB,GAIVgM,EAAME,KAAK,GAAGH,aAA2B/L,GA6JhDkB,gBArJqBlB,GAIdgM,EAAME,KAAK,GAAGN,aAAmC5L,GAkJxDsB,iBAtNqBA,IAId0K,EAAMG,IAAIP,GAmNjBlK,mBA3IwBvB,GAIjB6L,EAAMM,OAAO,GAAGV,KAA0BzL,KAwIjDwB,mBAhIuBA,CAAC3B,EAAO,CAAC,IAIzBgM,EAAME,KAAKN,EAAwB5L,GA6H1C6B,sBAnH2BC,GAIpBkK,EAAME,KAAK,GAAGH,KAAkBjK,YAgHvCC,UAzGcA,IAQPiK,EAAMG,IAAIN,GAkGjB1J,SA1FchC,GAIP6L,EAAMG,IAAI,GAAGN,KAAmB1L,KAuFvCkC,YA/EiBkK,GAIVP,EAAME,KAAKL,EAAiBU,GA4EnCjK,UApEeiK,GAIRP,EAAMI,IAAI,GAAGP,IAAmBU,GAiEvChK,YAzDiBpC,GAIV6L,EAAMM,OAAO,GAAGT,KAAmB1L,KAsD1CqC,gBA9CoBA,CAACxC,EAAO,CAAC,IAItBgM,EAAME,KAAKJ,EAA2B9L,GA2C7C6C,sBApC0BA,IAInBmJ,EAAMG,IAAI,GAAGN,aAiCpB/I,qBAzB0B9C,GAInBgM,EAAME,KAAK,GAAGL,YAA2B7L,GAuBxD,C,+CC/PO,MAAMwM,UAAuBC,EAAAA,GAKhCpJ,WAAAA,CAAYkJ,GACRG,MAAMH,GACNjJ,KAAKqJ,cAAe,EACpBrJ,KAAKsJ,cAAe,EACpBtJ,KAAKuJ,gBAAiB,EACtBvJ,KAAKwJ,yCAA0C,CACnD,E,+CCNG,MAAM/J,EAAkC/C,GACtCA,EAGEA,EAAK8J,IAAKiD,GAAgB,IAAI3J,EAAAA,EAAyB2J,IAFnD,IAAIjJ,EAAAA,EAA6B,G,qJCoBzC,MAAMkJ,EAAuBA,CAACC,EAAYC,EAAmBC,KAChE,IAAKF,EACD,OAEJ,MAAMG,EAAiB,IAAIC,EAAAA,GAC3BD,EAAejN,GAAK8M,EAAW9M,IAAM+M,EAAkB/M,GACvDiN,EAAezG,KAAOsG,EAAWtG,MAAQuG,EAAkBvG,KAC3DyG,EAAeE,aAAeL,EAAWK,cAAgBJ,EAAkBI,aAC3EF,EAAeG,MAAQN,EAAWM,OAASL,EAAkBK,MAC7DH,EAAeI,YAAcP,EAAWO,aAAeN,EAAkBM,YACzEJ,EAAeK,gBAAkBP,EAAkBM,YAGnD,MAAME,EAAuB,IAAIC,EAAAA,GAAkB,IAAIC,EAAAA,KACvDF,EAAqB7J,WAAmC0B,IAA3B0H,EAAWY,YAA4BZ,EAAWY,YAAcX,EAAkBW,YAC/GT,EAAeS,YAAcH,EAC7BN,EAAeU,oBAAsBC,EAAAA,WAAWC,kBAAkBZ,EAAeS,YAAYhK,OAG7F,MAAMoK,EAAgB,IAAIN,EAAAA,GAAkB,IAAIO,EAAAA,KAUhD,OATAD,EAAcpK,WAA4B0B,IAApB0H,EAAWkB,KAAqBlB,EAAWkB,KAAOjB,EAAkBiB,KAC1Ff,EAAee,KAAOF,EACtBb,EAAegB,aAAeL,EAAAA,WAAWC,kBAAkBZ,EAAee,KAAKtK,OAE/EuJ,EAAeiB,KAAOpB,EAAWoB,MAAQnB,EAAkBmB,KAC3DjB,EAAepJ,aAAesK,EAA4BrB,EAAWjJ,aAAckJ,EAAkBlJ,cACrGuK,EAA4BnB,EAAgBD,EAAWD,EAAkBsB,2BAA4BvB,EAAWuB,4BA0FpH,SAA+CC,EAAqCC,EAAuCtB,GAEvH,IAAKqB,EACD,OAEJ,MAAME,EAA8BF,EAAoC3E,IAAK8E,IACzE,MAAM5O,EAAO,CACT4O,OAAQA,EAAOA,QAAUF,EAAsCE,OAC/D/D,SAAU+D,EAAO/D,UAAY6D,EAAsC7D,UASvE,OAPI+D,EAAOA,SAAWC,EAAAA,GAA2BC,sBAAwBF,EAAOA,SAAWC,EAAAA,GAA2BE,oCAClH/O,EAAKiK,SAAWwE,EAAoChG,KAAMuG,GAAgBA,EAAYJ,SAAWA,EAAOA,SAGxGA,EAAOA,SAAWC,EAAAA,GAA2BE,oCAC7C/O,EAAKiP,0BAA4BL,EAAOM,4BAA8BR,EAAsCO,2BAEzG,IAAIE,EAAAA,GAAoCnP,KAEnDoN,EAAeuB,4BAA4BS,8BAA8BT,EAC7E,CA5GIU,CAAsCpC,EAAW0B,4BAA6BzB,EAAkByB,4BAA6BvB,GACtHA,GAQLkB,EAA8BA,CAACgB,EAA+BC,KAChE,IAAKD,IAAkCC,EACnC,OAEJ,MAAMC,EAAoBF,GAAiCA,EAA8BE,mBAAqBD,EAAoBC,kBAC5HC,EAAkBH,GAAiCA,EAA8BG,iBAAmBF,EAAoBE,gBAC9H,OAAO,IAAIC,EAAAA,GAA2B,CAClCF,kBAAmBA,EACnBC,gBAAiBA,EACjBE,yBAA0BJ,EAAoBC,kBAC9CI,uBAAwBL,EAAoBE,mBAU9ClB,EAA8BA,CAACnB,EAAgBD,EAAW0C,EAAa7P,EAAO,MAChF,MAAM8P,EAA2BD,EAAYxG,OAAQ0G,IAA6B/P,EAAKyI,KAAMuG,GAAgBA,EAAYJ,SAAWmB,EAAwBnB,SACtJoB,EAA4BH,EAAY/G,KAAMiH,GAA+D,kBAAnCA,EAAwBnB,QAC9E,IAAI5O,KAAS8P,GACrBxG,QAAS2G,IACvB,MAAMC,EAAmBlQ,EAAKyI,KAAMmG,GAAWA,EAAOA,SAAWqB,EAAiBrB,QAElF,IAAIuB,EAAe,GACfD,GAAgD,kBAA5BD,EAAiBrB,SACjCwB,EAAAA,GAAgBC,SAAWlD,EAC3BgD,EAAe,GACRF,EAAiBK,YACxBH,EAAe,cACRF,EAAiBM,gBACxBJ,EAAe,kBAIvB,MAAMK,EAA4BrD,IAAciD,EAAAA,GAAgBK,MAAQtD,IAAciD,EAAAA,GAAgBM,MAChGC,EAAiB,IAAIC,EAAAA,GAA0B,CACjD3G,SAAUuG,GAA6BN,EACvCtB,OAAQqB,EAAiBrB,OACzBuB,aAAcA,EACdI,cAAeN,EAAiBM,eAAiBP,EAA0BO,cAC3EM,qBAAsBZ,EAAiBY,qBACvCP,YAAa,IAAIQ,EAAAA,GAAe,CAC5BjN,MAAOoM,EAAiBK,aAAeN,EAA0BM,YACjES,UAAW,EACXC,UAAW,OAEfC,cAAehB,EAAiBgB,cAChCC,gBAAiBjB,EAAiBiB,gBAClCC,uBAAwBlB,EAAiBiB,gBAAgB,GACzDE,gBAAiBnB,EAAiBmB,gBAClCC,yBAA0BpB,EAAiBoB,0BAA4B,IAAI1D,EAAAA,GAAkB,CACzF9J,MAAOoM,EAAiBoB,yBACxBC,SAAU,EACVC,SAAU,EACVC,KAAM,KAIVC,0BAA0E,IAA/CxB,EAAiBwB,0BAAkC,KAAOxB,EAAiBwB,0BACtGC,cAAezB,EAAiByB,eAAiB,IAAIZ,EAAAA,GAAe,CAChEjN,MAAOoM,EAAiByB,cACxBX,UAAW,EACXC,UAAW,OAEfW,2BAA4B1B,EAAiB0B,6BAEjDvE,EAAeoB,2BAA2BoD,oBAAoBjB,MAqCzDzO,EAAkBA,CAAClC,EAAM6R,KAClC,IAAK7R,EACD,OAAO,IAAI8R,EAAAA,GAEf,MAAMC,EAAc/R,EACf8J,IAAKyC,GAAUnK,EAAiBmK,EAAOsF,IAC5C,OAAO,IAAIC,EAAAA,GAAeC,IAGjB3P,EAAmBA,CAACpC,EAAM6R,KACnC,IAAK7R,EACD,OAEJ,MAAMiH,GAAgBD,EAAAA,EAAAA,KACtB,OAAO,IAAIyF,EAAAA,GAAW,CAClBtM,GAAIH,EAAKG,GACTwG,KAAM3G,EAAK2G,KACX2G,aAActN,EAAKsN,aAEnB0E,qBAAsBH,EAAmBI,SAASjS,EAAKsN,cACvDC,MAAOvN,EAAKuN,MACZC,YAA0B,sBAAbxN,EAAKkS,IAA8B,KAAOlS,EAAKwN,YAC5DK,YAAa7N,EAAK6N,YAClBM,KAAMnO,EAAKmO,KACXE,KAAMrO,EAAKqO,KACXrK,aAAcmO,EAAwBnS,EAAKgE,cAC3CwK,2BAA4B4D,EAAwBpS,EAAKwO,4BACzDG,4BAA6B0D,EAAkCrS,EAAK2O,6BACpE2D,cAAetS,EAAKsS,eACrBrL,IAGDmL,EAA2BpS,IAC7B,GAAKA,EAGL,OAAOA,EAAK8J,IAAKmG,GAAqBsC,EAAuBtC,KAG3DsC,EAA0BvS,IAC5B,GAAKA,EAGL,OAAO,IAAIwS,EAAAA,GAAsB,CAC7B5D,OAAQ5O,EAAK4O,OACb2B,cAAevQ,EAAKuQ,cACpBM,qBAAsB7Q,EAAK6Q,qBAC3BP,YAAatQ,EAAKsQ,YAClBc,gBAAiBpR,EAAKoR,gBACtBF,gBAAiBlR,EAAKkR,gBACtBD,cAAejR,EAAKiR,cACpBI,yBAA0BrR,EAAKqR,yBAC/BI,0BAA2BzR,EAAKyR,0BAChCC,cAAe1R,EAAK0R,cACpBC,2BAA4B3R,EAAK2R,8BAInCU,EAAqCrS,IACvC,GAAKA,EAGL,OAAOA,EAAK8J,IAAK2I,GAA+BC,EAAiCD,KAG/EC,EAAoC1S,IACtC,GAAKA,EAGL,OAAIA,EAAK4O,SAAWC,EAAAA,GAA2BE,kCACpC,IAAI4D,EAAAA,GAAgC,CACvC/D,OAAQ5O,EAAK4O,OACbK,0BAA2BjP,EAAK4S,OAAS,IAEtC5S,EAAK4O,SAAWC,EAAAA,GAA2BC,qBAC3C,IAAI6D,EAAAA,GAAgC,CACvC/D,OAAQ5O,EAAK4O,cAFd,GAOLuD,EAA2BnS,IAC7B,GAAKA,EAGL,OAAO,IAAI6S,EAAAA,GAAuB,CAC9BrD,kBAAmBxP,EAAKwP,kBACxBC,gBAAiBzP,EAAKyP,mBAYjBqD,EAAwCA,CAACC,EAAWC,IACtD,IAAIlB,EAAAA,GAAeiB,EAAUE,OAAOnJ,IAAKyC,GAAU2G,EAA8B3G,EAAOyG,KAWtFE,EAAgCA,CAAC3G,EAAOyG,KACjD,MAAMG,EAAY,IAAI3G,EAAAA,EAAeD,GAC/B6G,EAAkBJ,EAAqBI,gBAAgB,CAACjT,GAAIoM,EAAMe,aAAc+F,SAAU,KAMhG,OALAF,EAAUxG,aAAeyG,EACzBD,EAAUvG,cAAe,EACzBuG,EAAUtG,eAAiBuG,EAC3BD,EAAUrG,wCAA0CsG,EAE7CD,E,8EC3RJ,MAAMG,EAA8BtT,GAClCA,EAGEA,EAAK8J,IAAKyJ,GAAgBC,EAAuBD,IAF7C,GAoCFE,EAAuBA,CAACzT,EAAO,MACxC,MAAMmG,EAAQ,GACd,IAAIuN,EAuBJ,OAtBA1T,EAAKsJ,QAAS1D,IAKV,MAAM9D,EAAS8D,EAAQ3F,eACnB8F,EAAAA,EAAkBC,OAASJ,EAAQE,MAC/B4N,GACAvN,EAAMI,KAAKmN,GAEfA,EAAc,IAAItO,EAAAA,EAActD,EAAQ0R,EAAuB5N,MAE1D8N,IACDA,EAAc,IAAItO,EAAAA,EAActD,EAAQ,OAE5C4R,EAAYhO,QAAQa,KAAKiN,EAAuB5N,IAChD8N,EAAY1O,QAAUY,EAAQZ,WAGlC0O,GACAvN,EAAMI,KAAKmN,GAER,IAAIxN,EAAAA,EAAmBC,IAQrBqN,EAA0BxT,IACnC,GAAKA,EAGL,OAAO,IAAI6F,EAAAA,EAAiB,CACxB1F,GAAIH,EAAKG,GACT2F,KAAM9F,EAAK8F,KACXF,QAAS5F,EAAK4F,QACdtB,UAAWtE,EAAKsE,UAChBK,eAAgB3E,EAAK2T,MACrB3T,KAAMA,EACN4T,gBAAiB5T,EAAK4T,gBACtBC,OAAQ7T,EAAK8T,sBASR7S,EAAyBjB,IAClC,GAAKA,EAGL,OAAO,IAAIiE,EAAAA,EAAgB,CACvBnC,OAAQ9B,EAAKG,GACbiE,SAAUpE,EAAK2G,KACfrC,UAAWtE,EAAKsE,UAChBE,SAAU8O,EAA2BtT,EAAKwE,UAC1CE,cAAe1E,EAAK0E,cACpBC,eAAgB3E,EAAK2T,Q,wFC1G7B,MAAM1M,GAAgBD,EAAAA,EAAAA,KAOTvF,EAAmBzB,IAC5B,IAAKA,EACD,OAAO,IAAIoI,EAAAA,GAEf,MAAM2L,EAAa/T,EAAK8J,IAAKxJ,GAASF,EAAgBE,IACtD,OAAO,IAAI8H,EAAAA,GAAe2L,IAQjB3T,EAAmBJ,IAC5B,GAAKA,EAGL,OAAO,IAAIyG,EAAAA,EAAU,CACjBtG,GAAIH,EAAKG,GACTwG,KAAM3G,EAAK2G,KACXrC,UAAWtE,EAAKsE,UAChB+C,YAAarH,EAAKwE,UAAYxE,EAAKwE,SAASzD,QAAS0S,EAAAA,EAAAA,IAAqBzT,EAAKwE,UAAY,IAAI0B,EAAAA,GAChGe,G,gDCtBA,MAAMtE,EAAyB3C,GAC3B,IAAIwK,EAAAA,GAAqB,CAC5B1I,OAAQ9B,EAAKC,eACbwC,SAAUzC,EAAKyC,SACfkI,aAAcqJ,EAA8BhU,EAAK2K,gBAU5CqJ,EAAgCA,CAAChU,EAAO,KAC1C,IAAI8K,EAAAA,GAA6B9K,EAAK8J,IAAImK,IASxCA,EAA4BjU,GAC9B,IAAI+K,EAAAA,GAAwB/K,E","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/core/services/ttyg.service.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/models/ttyg/agent-instructions-explain.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/models/ttyg/chat-answer.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/models/ttyg/chat-item.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/models/ttyg/chats.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/models/ttyg/explain-response.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/rest/ttyg.rest.service.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/model/agent-view.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/services/agent-instruction-explain.mapper.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/services/agents.mapper.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/services/chat-message.mapper.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/services/chats.mapper.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/ttyg/services/explain.mapper.js"],"sourcesContent":["import {chatModelMapper, chatsListMapper} from \"../../ttyg/services/chats.mapper\";\nimport 'angular/rest/ttyg.rest.service';\nimport {chatAnswerModelMapper} from \"../../ttyg/services/chat-message.mapper\";\nimport {agentListMapper, agentModelMapper} from \"../../ttyg/services/agents.mapper\";\nimport {explainResponseMapper} from \"../../ttyg/services/explain.mapper\";\nimport {agentInstructionsExplainMapper} from \"../../ttyg/services/agent-instruction-explain.mapper\";\n\nconst modules = ['graphdb.framework.rest.ttyg.service'];\n\nangular\n .module('graphdb.framework.core.services.ttyg-service', modules)\n .factory('TTYGService', TTYGService);\n\nTTYGService.$inject = ['TTYGRestService', '$repositories'];\n\nfunction TTYGService(TTYGRestService, $repositories) {\n /**\n * Creates a new chat.\n * @param {ChatItemModel} chatItem\n * @returns {Promise<string>} A promise that resolves with the newly created chat ID.\n */\n const createChat = (chatItem) => {\n return TTYGRestService.createChat(chatItem.toAskRequestPayload())\n .then((response) => response.data.conversationId);\n };\n\n const getConversations = (savedQueryName, owner) => {\n return TTYGRestService.getConversations()\n .then((response) => chatsListMapper(response.data));\n };\n\n /**\n * Loads a conversation by its ID.\n * @param {string} id\n * @return {Promise<ChatModel>}\n */\n const getConversation = (id) => {\n return TTYGRestService.getConversation(id)\n .then((response) => chatModelMapper(response.data));\n };\n\n /**\n * Renames the conversation (<code>chart</code>).\n * @param {ChatModel} chat - the conversation to be renamed.\n * @return {*}\n */\n const renameConversation = (chat) => {\n return TTYGRestService.renameConversation(chat.id, chat.toRenameRequestPayload())\n .then((response) => chatModelMapper(response.data));\n };\n\n /**\n * Exports the conversation (<code>chart</code>).\n * @param {string} id - the conversation to be exported.\n * @return {Promise<{Blob, string}>} Returns the conversation as a Blob and the filename wrapped in a Promise\n * */\n const exportConversation = (id) => {\n return TTYGRestService.exportConversation(id)\n .then(function(res) {\n const data = res.data;\n const headers = res.headers();\n const contentDispositionHeader = headers['content-disposition'];\n let filename = 'chat-export';\n if (contentDispositionHeader) {\n filename = contentDispositionHeader.split('filename=')[1];\n filename = filename.substring(0, filename.length);\n }\n return {data, filename};\n });\n };\n\n /**\n * Asks a question.\n * @param {ChatItemModel} chatItem\n * @return {Promise<ChatAnswerModel>} the answer of the question.\n */\n const askQuestion = (chatItem) => {\n return TTYGRestService.askQuestion(chatItem.toAskRequestPayload())\n .then((response) => chatAnswerModelMapper(response.data));\n };\n\n /**\n * Continues a chat run. In essence continue means \"fetch more answers\".\n * @param {ContinueChatRun} continueData .\n * @return {Promise<ChatAnswerModel>} the next answer in the run.\n */\n const continueChatRun = (continueData) => {\n const payload = continueData.toContinueRunRequestPayload();\n return TTYGRestService.continueChatRun(payload)\n .then((response) => chatAnswerModelMapper(response.data));\n };\n\n /**\n * Deletes a conversation by its ID.\n * @param {string} id\n * @return {Promise<void>}\n */\n const deleteConversation = (id) => {\n return TTYGRestService.deleteConversation(id);\n };\n\n /**\n * Cancels a pending question within a chat.\n *\n * @param {string|number} chatId - The unique identifier of the chat containing the pending question to be canceled.\n * @returns {Promise} A promise that resolves when the pending question has been successfully canceled,\n * or rejects with an error.\n */\n const cancelPendingQuestion = (chatId) => {\n return TTYGRestService.cancelPendingQuestion(chatId);\n };\n\n /**\n * Creates a new conversation. The creation of a chat and asking a question share the same endpoint. If the request payload\n * doesn't contain the chat ID, the backend will create a new chat and return the answer, which includes the ID of the created chat.\n *\n * @param {ChatItemModel} chatItem - The conversation data.\n * @return {Promise<ChatAnswerModel>} The answer of the question.\n */\n const createConversation = (chatItem) => {\n return TTYGRestService.createConversation(chatItem.toCreateChatRequestPayload())\n .then((response) => chatAnswerModelMapper(response.data));\n };\n\n /**\n * Loads all agents from the server and converts the response to a list of AgentModels.\n * @return {Promise<AgentListModel>}\n */\n const getAgents = () => {\n const localRepositories = $repositories.getLocalReadablGraphdbRepositoryIds();\n return TTYGRestService.getAgents()\n .then((response) => {\n return agentListMapper(response.data, localRepositories);\n });\n };\n\n /**\n * Loads an agent by its ID.\n * @param {string} id\n * @return {Promise<AgentModel|undefined>}\n */\n const getAgent = (id) => {\n const localRepositories = $repositories.getLocalReadablGraphdbRepositoryIds();\n return TTYGRestService.getAgent(id)\n .then((response) => agentModelMapper(response.data, localRepositories));\n };\n\n /**\n * Creates a new agent.\n * @param {*} payload - the agent data\n * @return {Promise<AgentModel>} created agent;\n */\n const createAgent = (payload) => {\n const localRepositories = $repositories.getLocalReadablGraphdbRepositoryIds();\n return TTYGRestService.createAgent(payload)\n .then((response) => {\n return agentModelMapper(response.data, localRepositories);\n });\n };\n\n /**\n * Updates the agent with the provided <code>payload</code>.\n * @param {*} payload - The data for updating the agent.\n * @return {Promise<AgentModel>} A promise that resolves to the updated agent.\n */\n const editAgent = (payload) => {\n const localRepositories = $repositories.getLocalReadablGraphdbRepositoryIds();\n return TTYGRestService.editAgent(payload)\n .then((response) => {\n return agentModelMapper(response.data, localRepositories);\n });\n };\n\n /**\n * Deletes an agent by its ID.\n * @param {string} id\n * @return {Promise<void>|*}\n */\n const deleteAgent = (id) => {\n return TTYGRestService.deleteAgent(id);\n };\n\n /**\n * Returns an explanation of how the answer was generated.\n * @param {ChatItemModel} chatItem\n * @param {string} answerId\n * @return {ExplainResponseModel}\n */\n const explainResponse = (chatItem, answerId) => {\n return TTYGRestService.explainResponse(chatItem.toExplainResponsePayload(answerId))\n .then((response) => {\n return explainResponseMapper(response.data);\n });\n };\n\n /**\n * Get the default agent values from server.\n * @return {Promise<AgentModel>}\n */\n const getDefaultAgent = () => {\n const localRepositories = $repositories.getLocalReadablGraphdbRepositoryIds();\n return TTYGRestService.getAgentDefaultValues()\n .then((response) => {\n return agentModelMapper(response.data, localRepositories);\n });\n };\n\n /**\n * Calls the backend server to fetch an explanation of how the agent settings were generated.\n * @param {*} payload - payload generated by the agent settings form model.\n * @return {Promise<unknown>}\n */\n const explainAgentSettings = (payload) => {\n return TTYGRestService.explainAgentSettings(payload)\n .then((response) => {\n return agentInstructionsExplainMapper(response.data);\n });\n };\n\n return {\n createChat,\n getConversation,\n renameConversation,\n exportConversation,\n askQuestion,\n continueChatRun,\n getConversations,\n deleteConversation,\n createConversation,\n cancelPendingQuestion,\n getAgents,\n getAgent,\n createAgent,\n editAgent,\n deleteAgent,\n explainResponse,\n getDefaultAgent,\n explainAgentSettings,\n };\n}\n","export class AgentInstructionsExplain {\n constructor(data) {\n /**\n * @type {string}\n * @private\n */\n this._type = data.type;\n /**\n * @type {string}\n * @private\n */\n this._content = data.content;\n /**\n * @type {number}\n * @private\n */\n this._size = data.size;\n }\n\n get size() {\n return this._size;\n }\n\n set size(value) {\n this._size = value;\n }\n get content() {\n return this._content;\n }\n\n set content(value) {\n this._content = value;\n }\n get type() {\n return this._type;\n }\n\n set type(value) {\n this._type = value;\n }\n}\n\nexport class AgentInstructionsExplainList {\n constructor(data) {\n /**\n * @type {AgentInstructionsExplain[]}\n * @private\n */\n this._instructions = data.instructions;\n }\n\n get instructions() {\n return this._instructions;\n }\n\n set instructions(value) {\n this._instructions = value;\n }\n}\n","export class ChatAnswerModel {\n constructor(data = {}) {\n /**\n * @type {string | undefined}\n */\n this._chatId = data.chatId;\n\n /**\n * @type {string}\n */\n this._chatName = data.chatName || '';\n\n /**\n * @type {number}\n */\n this._timestamp = data.timestamp;\n\n /**\n * @type {ChatMessageModel[]}\n */\n this._messages = data.messages || [];\n\n /**\n * @type {string}\n */\n this._continueRunId = data.continueRunId;\n\n /**\n * Holds information about the number of tokens used for this answer, including prompt and completion tokens.\n *\n * @type {TokenUsageInfo}\n */\n this.tokenUsageInfo = data.tokenUsageInfo;\n }\n\n get chatId() {\n return this._chatId;\n }\n\n set chatId(value) {\n this._chatId = value;\n }\n\n get chatName() {\n return this._chatName;\n }\n\n set chatName(value) {\n this._chatName = value;\n }\n\n get timestamp() {\n return this._timestamp;\n }\n\n set timestamp(value) {\n this._timestamp = value;\n }\n\n get messages() {\n return this._messages;\n }\n\n set messages(value) {\n this._messages = value;\n }\n\n get continueRunId() {\n return this._continueRunId;\n }\n\n set continueRunId(value) {\n this._continueRunId = value;\n }\n}\n\n/**\n * Represents information on continuing the chat run, i.e., fetching answers iteratively after\n * asking until the last answer is received.\n */\nexport class ContinueChatRun {\n constructor(chatItem, runId) {\n this._chatItem = chatItem;\n this._runId = runId;\n }\n\n get chatId() {\n return this._chatItem.chatId;\n }\n\n toContinueRunRequestPayload() {\n return {\n conversationId: this.chatId,\n runId: this._runId,\n agentId: this._chatItem.agentId,\n tzOffset: -new Date().getTimezoneOffset() // offsets are reversed here hence the minus\n };\n }\n}\n","import {CHAT_MESSAGE_ROLE, ChatMessageModel} from \"./chat-message\";\n\n/**\n *\n * Represents a model that holds a question and the answer of it in a chat.\n *\n */\nexport class ChatItemModel {\n\n /**\n * Creates an instance of ChatItemModel.\n *\n * @param {string} chatId - The unique identifier for the chat associated with this instance.\n * @param {ChatMessageModel} question - The message object representing the question.\n */\n constructor(chatId, question) {\n\n /**\n * @type {string | undefined}\n * @private\n */\n this._chatId = chatId;\n\n /**\n * @type {string | undefined}\n * @private\n */\n this._agentId = undefined;\n\n /**\n * @type {ChatMessageModel}\n * @private\n */\n this._question = question;\n\n /**\n *\n * @type {ChatMessageModel[] | undefined}\n * @private\n */\n this._answers = [];\n }\n\n get chatId() {\n return this._chatId;\n }\n\n set chatId(value) {\n this._chatId = value;\n }\n\n get agentId() {\n return this._agentId;\n }\n\n set agentId(value) {\n this._agentId = value;\n }\n\n get question() {\n return this._question;\n }\n\n set question(value) {\n this._question = value;\n }\n\n get answers() {\n return this._answers;\n }\n\n /**\n *\n * @param {ChatMessageModel[]} value\n */\n set answers(value) {\n this._answers = value;\n }\n\n /**\n * Sets the message for the user's question.\n *\n * @param {string} message - The message content for the user's question.\n */\n setQuestionMessage(message) {\n if (!this._question) {\n this._question = new ChatMessageModel({role: CHAT_MESSAGE_ROLE.USER});\n }\n this._question.message = message;\n }\n\n /**\n * Retrieves the message of the user's question.\n *\n * @return {string} - The message content of the user's question.\n */\n getQuestionMessage() {\n return this._question.message;\n }\n\n /**\n * Converts the instance to a create chat request payload.\n *\n * @return {{agentId: string, question: string}} An object representing the create request payload.\n */\n toCreateChatRequestPayload() {\n return {\n agentId: this._agentId,\n question: this._question.message\n };\n }\n\n /**\n * Converts the instance to an ask request payload.\n *\n * @return {{conversationId: string, agentId: string, question: string}} An object representing the ask request payload.\n */\n toAskRequestPayload() {\n return {\n conversationId: this._chatId,\n agentId: this._agentId,\n question: this._question.message,\n tzOffset: -new Date().getTimezoneOffset() // offsets are reversed here hence the minus\n };\n }\n\n toExplainResponsePayload(answerId) {\n return {\n conversationId: this._chatId,\n answerId\n };\n }\n}\n\nexport class ChatItemsListModel {\n\n /**\n * @param {ChatItemModel[]} items\n */\n constructor(items = []) {\n this._items = items;\n }\n\n isEmpty() {\n return this._items.length === 0;\n }\n\n /**\n * @param {ChatItemModel} chatItem\n */\n appendItem(chatItem) {\n this._items.push(chatItem);\n }\n\n get items() {\n return this._items;\n }\n\n set items(value) {\n this._items = value || [];\n }\n\n getLast() {\n if (!this.isEmpty()) {\n return this._items[this._items.length - 1];\n }\n }\n}\n","import {ChatItemsListModel} from \"./chat-item\";\nimport {md5HashGenerator} from \"../../utils/hash-utils\";\n\nexport class ChatModel {\n static getNewChat() {\n const data = {\n name: \"\\u00B7 \\u00B7 \\u00B7\",\n timestamp: Math.floor(Date.now() / 1000),\n new: true,\n };\n return new ChatModel(data, md5HashGenerator());\n }\n\n constructor(data, hashGenerator) {\n this.hashGenerator = hashGenerator;\n\n /**\n * @type {string}\n */\n this._id = data.id;\n\n /**\n * @type {string}\n */\n this._name = data.name;\n\n /**\n * @type {number}\n */\n this._timestamp = data.timestamp;\n\n /**\n * @type {ChatItemsListModel}\n */\n this._chatHistory = data.chatHistory || new ChatItemsListModel();\n this._new = data.new ?? false;\n this.hash = this.generateHash();\n this._asking = data.asking ?? false;\n }\n\n isNew() {\n return this._new;\n }\n\n set new(value) {\n this._new = value;\n }\n\n generateHash() {\n return this.hashGenerator(JSON.stringify(this));\n }\n\n get id() {\n return this._id;\n }\n\n set id(value) {\n this._id = value;\n }\n\n get name() {\n return this._name;\n }\n\n set name(value) {\n this.generateHash();\n this._name = value;\n }\n\n get timestamp() {\n return this._timestamp;\n }\n\n set timestamp(value) {\n this._timestamp = value;\n }\n\n get chatHistory() {\n return this._chatHistory;\n }\n\n set chatHistory(value) {\n this._chatHistory = value || new ChatItemsListModel();\n }\n\n isAsking() {\n return this._asking;\n }\n\n set asking(value) {\n this._asking = value;\n }\n\n /**\n * Converts the instance to a rename chat request payload.\n * This request object contains the new name for renaming the chat.\n *\n * @return {{name: string}} An object representing the rename request payload.\n */\n toRenameRequestPayload() {\n return {name: this._name};\n }\n}\n\nexport class ChatByDayModel {\n constructor(data) {\n this._day = data.day;\n /**\n * @type {number}\n * @private\n */\n this._timestamp = data.timestamp;\n /**\n * @type {ChatModel[]|*}\n * @private\n */\n this._chats = data.chats;\n }\n\n get day() {\n return this._day;\n }\n\n set day(value) {\n this._day = value;\n }\n\n get timestamp() {\n return this._timestamp;\n }\n\n set timestamp(value) {\n this._timestamp = value;\n }\n\n get chats() {\n return this._chats;\n }\n\n set chats(value) {\n this._chats = value;\n }\n}\n\nexport class ChatsListModel {\n constructor(chats) {\n /**\n * @type {ChatModel[]}\n * @private\n */\n this._chats = chats || [];\n /**\n * @type {ChatByDayModel[]}\n * @private\n */\n this._chatsByDay = [];\n this.sortByTime();\n this.updateChatsByDay();\n }\n\n /**\n * Checks if there is at least one new chat.\n *\n * @returns {boolean} True if any chat is marked as new, otherwise false.\n */\n containsNewChats() {\n return this._chats.some((chat) => chat.isNew());\n }\n\n /**\n * Sorts the list of chats by timestamp in descending order, with the newest items on top.\n */\n sortByTime() {\n this._chats.sort((a, b) => {\n return b.timestamp - a.timestamp;\n });\n }\n\n /**\n * Updates the timestamp of a chat in the list.\n * @param {string} chatId\n * @param {number} timestamp\n */\n updateChatTimestamp(chatId, timestamp) {\n const chat = this._chats.find((c) => c.id === chatId);\n if (chat) {\n chat.timestamp = timestamp;\n this.sortByTime();\n this.updateChatsByDay();\n }\n }\n\n /**\n * Marks the specified chat as no longer new.\n *\n * @param {string} chatId - The ID of the chat to update.\n */\n setChatAsOld(chatId) {\n const chat = this._chats.find((chat) => chat.id === chatId);\n if (chat) {\n chat.new = false;\n }\n }\n\n setChatAsAsking(chatId, asking) {\n if (!chatId) {\n return;\n }\n const chat = this._chats.find((chat) => chat.id === chatId);\n if (chat) {\n chat.asking = asking;\n }\n }\n\n /**\n * Updates the name of a chat in the list.\n * @param {string} chatId\n * @param {string} name\n */\n updateChatName(chatId, name) {\n const chat = this._chats.find((c) => c.id === chatId);\n if (chat) {\n chat.name = name;\n }\n }\n\n /**\n * Deletes a chat from the chat list.\n * @param {ChatModel} chatToBeDeleted\n */\n deleteChat(chatToBeDeleted) {\n this._chats = this._chats.filter((chat) => chat.id !== chatToBeDeleted.id);\n this.sortByTime();\n this.updateChatsByDay();\n }\n\n updateChatsByDay() {\n this._chatsByDay = [];\n // group chats by day\n this._chats.forEach((chat) => {\n const day = new Date(chat.timestamp * 1000).toDateString();\n const dayModel = this._chatsByDay.find((d) => d.day === day);\n if (dayModel) {\n dayModel.chats.push(chat);\n } else {\n this._chatsByDay.push(new ChatByDayModel({day: day, timestamp: chat.timestamp * 1000, chats: [chat]}));\n }\n });\n }\n\n appendChat(chat) {\n this._chats.push(chat);\n this.sortByTime();\n this.updateChatsByDay();\n }\n\n replaceChat(newChat, oldChat) {\n this._chats = this._chats.map((chat) => {\n if (chat.id === oldChat.id) {\n return newChat;\n }\n return chat;\n });\n this.sortByTime();\n this.updateChatsByDay();\n }\n\n /**\n * Checks if the chat list is empty.\n * @return {boolean}\n */\n isEmpty() {\n return this._chats.length === 0;\n }\n\n /**\n * Returns the first chat from the list.\n * @return {ChatModel|undefined}\n */\n getFirstChat() {\n return this._chats[0];\n }\n\n /**\n * Deselects all chats.\n */\n deselectAll() {\n this._chats.forEach((c) => {\n c.selected = false;\n });\n }\n\n /**\n * Selects a chat.\n * @param {ChatModel} chat\n */\n selectChat(chat) {\n this.deselectAll();\n this._chats.forEach((c) => {\n c.selected = c.id === chat.id;\n });\n }\n\n getChat(id) {\n return this._chats.find((c) => c.id === id);\n }\n\n getNonPersistedChat() {\n return this._chats.find((chat) => !chat.id);\n }\n\n renameChat(renamedChat) {\n const chat = this._chats.find((c) => c.id === renamedChat.id);\n if (chat) {\n chat.name = renamedChat.name;\n }\n }\n\n /**\n * @return {ChatModel[]}\n */\n get chats() {\n return this._chats;\n }\n\n /**\n * @param {ChatModel[]} value\n */\n set chats(value) {\n this._chats = value;\n }\n\n get chatsByDay() {\n return this._chatsByDay;\n }\n\n set chatsByDay(value) {\n this._chatsByDay = value;\n }\n}\n","export class ExplainResponseModel {\n constructor(data = {}) {\n\n /**\n * @type {string}\n */\n this._chatId = data.chatId;\n\n /**\n * @type {string}\n */\n this._answerId = data.answerId;\n\n /**\n * @type {ExplainQueryMethodsListModel}\n */\n this._queryMethods = data.queryMethods;\n\n this._expanded = data.expanded !== undefined ? data.expanded : true;\n }\n\n get chatId() {\n return this._chatId;\n }\n\n set chatId(value) {\n this._chatId = value;\n }\n\n get answerId() {\n return this._answerId;\n }\n\n set answerId(value) {\n this._answerId = value;\n }\n\n get queryMethods() {\n return this._queryMethods;\n }\n\n set queryMethods(value) {\n this._queryMethods = value;\n }\n\n get expanded() {\n return this._expanded;\n }\n\n set expanded(value) {\n this._expanded = value;\n }\n}\n\nexport class ExplainQueryMethodsListModel {\n constructor(data = []) {\n this._items = data;\n }\n\n get items() {\n return this._items;\n }\n\n set items(value) {\n this._items = value;\n }\n}\n\nexport class ExplainQueryMethodModel {\n constructor(data = {}) {\n /**\n * @type {ExtractionMethod.FTS_SEARCH | ExtractionMethod.RETRIEVAL | ExtractionMethod.SPARQL | ExtractionMethod.SIMILARITY}\n */\n this._name = data.name;\n\n /**\n * @type {string}\n */\n this._rawQuery = data.rawQuery;\n\n /**\n * @type {string}\n */\n this._query = data.query;\n\n /**\n * @Type {ExplainQueryType}\n * @private\n */\n this._queryType = data.queryType;\n\n /**\n * @type {string | null}\n * @private\n */\n this._errorMessage = data.errorOutput;\n }\n\n get name() {\n return this._name;\n }\n\n set name(value) {\n this._name = value;\n }\n\n get rawQuery() {\n return this._rawQuery;\n }\n\n set rawQuery(value) {\n this._rawQuery = value;\n }\n\n get query() {\n return this._query;\n }\n\n set query(value) {\n this._query = value;\n }\n\n get queryType() {\n return this._queryType;\n }\n\n set queryType(value) {\n this._queryType = value;\n }\n\n get errorMessage() {\n return this._errorMessage;\n }\n\n set errorMessage(value) {\n this._errorMessage = value;\n }\n}\n\nexport const ExplainQueryType = {\n SPARQL: 'sparql',\n JSON: 'json',\n OTHER: 'other'\n};\n","import {TtygRestServiceFakeBackend} from './ttyg.rest.service.fake.backend';\n\nangular\n .module('graphdb.framework.rest.ttyg.service', [])\n .factory('TTYGRestService', TTYGRestService);\n\nTTYGRestService.$inject = ['$http'];\n\nconst CONVERSATIONS_ENDPOINT = 'rest/chat/conversations';\nconst AGENTS_ENDPOINT = 'rest/chat/agents';\nconst EXPLAIN_RESPONSE_ENDPOINT = `${CONVERSATIONS_ENDPOINT}/explain`;\nconst CHATS_ENDPOINT = 'rest/chat/chats';\n\nconst DEVELOPMENT = false;\n\nfunction TTYGRestService($http) {\n const _fakeBackend = new TtygRestServiceFakeBackend();\n\n /**\n * Creates a new chat.\n * @param {*} data the payload\n * @returns {Promise<string>} A promise that resolves with the newly created chat ID.\n */\n const createChat = (data) => {\n if (DEVELOPMENT) {\n return _fakeBackend.createChat();\n }\n return $http.post(CHATS_ENDPOINT, data);\n };\n\n const getConversations = () => {\n if (DEVELOPMENT) {\n return _fakeBackend.getConversations();\n }\n return $http.get(CONVERSATIONS_ENDPOINT);\n };\n\n /**\n * Loads a conversation by its ID.\n * @param {string} id\n * @return {Promise<*>}\n */\n const getConversation = (id) => {\n if (DEVELOPMENT) {\n return _fakeBackend.getConversation(id);\n }\n return $http.get(`${CONVERSATIONS_ENDPOINT}/${id}`);\n };\n\n /**\n * Calls the REST API to rename the conversation.\n *\n * Bear in mind that the backend doesn't return the whole conversation object, but only the name and the ID.\n *\n * @param {string} id - the conversation ID\n * @param {{name: string}} data - request payload containing the new name\n * @return {Promise<{name: string, id: string}>}\n */\n const renameConversation = (id, data) => {\n if (DEVELOPMENT) {\n return _fakeBackend.renameConversation(id, data);\n }\n return $http.put(`${CONVERSATIONS_ENDPOINT}/${id}`, data);\n };\n\n /**\n * Exports a conversation by its ID.\n * @param {string} id\n * @return {Promise<{Blob}>} Returns the conversation as a Blob\n */\n const exportConversation = (id) => {\n if (DEVELOPMENT) {\n return _fakeBackend.exportConversation(id);\n }\n return $http.get(`${CONVERSATIONS_ENDPOINT}/export/${id}`, {responseType: 'blob'});\n };\n\n /**\n * Calls the REST API to ask a question.\n * @param {*} data the payload\n * @return {*}\n */\n const askQuestion = (data) => {\n if (DEVELOPMENT) {\n return _fakeBackend.askQuestion(data);\n }\n return $http.post(`${CHATS_ENDPOINT}/question`, data);\n };\n\n /**\n * Calls the REST API to continue a chat run.\n * @param {*} data\n * @return {*}\n */\n const continueChatRun = (data) => {\n if (DEVELOPMENT) {\n return _fakeBackend.continueChatRun(data);\n }\n return $http.post(`${CONVERSATIONS_ENDPOINT}/continue`, data);\n };\n\n /**\n * Deletes a conversation by its ID.\n * @param {string} id\n * @return {Promise<void>}\n */\n const deleteConversation = (id) => {\n if (DEVELOPMENT) {\n return _fakeBackend.deleteConversation(id);\n }\n return $http.delete(`${CONVERSATIONS_ENDPOINT}/${id}`);\n };\n\n /**\n * Creates a new conversation.\n * @param {*} data - the data to be sent to the backend\n * @return {Promise<*>}\n */\n const createConversation = (data = {}) => {\n if (DEVELOPMENT) {\n return _fakeBackend.createConversation(data);\n }\n return $http.post(CONVERSATIONS_ENDPOINT, data);\n };\n\n /**\n * Cancels a pending question within a chat.\n *\n * @param {string|number} chatId - The unique identifier of the chat containing the pending question to be canceled.\n * @returns {Promise} A promise that resolves when the pending question has been successfully canceled,\n * or rejects with an error.\n */\n const cancelPendingQuestion = (chatId) => {\n if (DEVELOPMENT) {\n return _fakeBackend.cancelPendingQuestion(false);\n }\n return $http.post(`${CHATS_ENDPOINT}/${chatId}/cancel`);\n };\n\n /**\n * Fetches agents from the backend.\n * @return {Promise<*>|*}\n */\n const getAgents = () => {\n if (DEVELOPMENT) {\n // return _fakeBackend.simulateHttpError();\n return _fakeBackend.getAgents();\n // return new Promise((resolve) => {\n // setTimeout(() => resolve(_fakeBackend.getAgents()), 3000);\n // });\n }\n return $http.get(AGENTS_ENDPOINT);\n };\n\n /**\n * Fetches an agent by its ID from the backend.\n * @param {string} id\n * @return {Promise<Awaited<{data: T}>>|*}\n */\n const getAgent = (id) => {\n if (DEVELOPMENT) {\n return _fakeBackend.getAgent(id);\n }\n return $http.get(`${AGENTS_ENDPOINT}/${id}`);\n };\n\n /**\n * Creates a new agent in the backend.\n * @param {*} agent\n * @return {Promise<AgentModel>}\n */\n const createAgent = (agent) => {\n if (DEVELOPMENT) {\n return _fakeBackend.createAgent(agent);\n }\n return $http.post(AGENTS_ENDPOINT, agent);\n };\n\n /**\n * Updates the specified <code>agent</code>.\n * @param {AgentModel} agent - The agent to be updated.\n * @return {Promise<AgentModel>} A promise that resolves the updated agent.\n */\n const editAgent = (agent) => {\n if (DEVELOPMENT) {\n return _fakeBackend.editAgent(agent);\n }\n return $http.put(`${AGENTS_ENDPOINT}`, agent);\n };\n\n /**\n * Deletes an agent by its ID from the backend.\n * @param {string} id\n * @return {Promise<void>}\n */\n const deleteAgent = (id) => {\n if (DEVELOPMENT) {\n return _fakeBackend.deleteAgent(id);\n }\n return $http.delete(`${AGENTS_ENDPOINT}/${id}`);\n };\n\n /**\n * Calls backend server to fetch an explanation of how the answer was generated.\n * @param {*} data\n * @return {Promise}\n */\n const explainResponse = (data = {}) => {\n if (DEVELOPMENT) {\n return _fakeBackend.explainResponse(data);\n }\n return $http.post(EXPLAIN_RESPONSE_ENDPOINT, data);\n };\n\n /**\n * Calls the backend server to fetch the default values for an agent.\n * @return {Promise}\n */\n const getAgentDefaultValues = () => {\n if (DEVELOPMENT) {\n return _fakeBackend.getAgentDefaultValues();\n }\n return $http.get(`${AGENTS_ENDPOINT}/default`);\n };\n\n /**\n * Calls the backend server to fetch an explanation of how the agent settings were generated.\n * @param {*} data\n * @return {Promise}\n */\n const explainAgentSettings = (data) => {\n if (DEVELOPMENT) {\n return _fakeBackend.explainAgentSettings();\n }\n return $http.post(`${AGENTS_ENDPOINT}/explain`, data);\n };\n\n return {\n createChat,\n getConversation,\n renameConversation,\n exportConversation,\n askQuestion,\n continueChatRun,\n getConversations,\n deleteConversation,\n createConversation,\n cancelPendingQuestion,\n getAgents,\n getAgent,\n createAgent,\n editAgent,\n deleteAgent,\n explainResponse,\n getAgentDefaultValues,\n explainAgentSettings,\n };\n}\n","import {AgentModel} from '../../models/ttyg/agents';\n\nexport class AgentViewModel extends AgentModel {\n /**\n * @param agent\n * @type {AgentModel}\n */\n constructor(agent) {\n super(agent);\n this.canEditAgent = false;\n this.canCopyAgent = false;\n this.canDeleteAgent = false;\n this.canOpenExternalIntegrationConfiguration = false;\n }\n}\n","import {AgentInstructionsExplain, AgentInstructionsExplainList} from \"../../models/ttyg/agent-instructions-explain\";\n\n/**\n * Maps the response from the backend to the AgentInstructionsExplainList model.\n * @param {*} data\n * @return {AgentInstructionsExplainList}\n */\nexport const agentInstructionsExplainMapper = (data) => {\n if (!data) {\n return new AgentInstructionsExplainList([]);\n }\n return data.map((instruction) => new AgentInstructionsExplain(instruction));\n};\n","import {\n AdditionalExtractionMethod,\n AdditionalExtractionMethodModel,\n AgentInstructionsModel,\n AgentListModel,\n AgentModel, DEFAULT_TEMPERATURE_RANGE, DEFAULT_TOP_P_RANGE,\n ExtractionMethodModel,\n} from '../../models/ttyg/agents';\nimport {\n AdditionalExtractionMethodFormModel,\n AgentFormModel,\n AgentInstructionsFormModel,\n ExtractionMethodFormModel,\n} from '../../models/ttyg/agent-form';\nimport {NumericRangeModel, TextFieldModel} from '../../models/form-fields';\nimport {md5HashGenerator} from '../../utils/hash-utils';\nimport {AGENT_OPERATION} from \"./constants\";\nimport {AgentViewModel} from '../model/agent-view';\nimport {\n ObjectUtil,\n} from '@ontotext/workbench-api';\n\n/**\n * Converts an agent model to an agent form model.\n * @param {AgentModel} agentModel\n * @param {AgentModel} defaultAgentModel\n * @param {string} operation\n * @return {AgentFormModel}\n */\nexport const agentFormModelMapper = (agentModel, defaultAgentModel, operation ) => {\n if (!agentModel) {\n return;\n }\n const agentFormModel = new AgentFormModel();\n agentFormModel.id = agentModel.id || defaultAgentModel.id;\n agentFormModel.name = agentModel.name || defaultAgentModel.name;\n agentFormModel.repositoryId = agentModel.repositoryId || defaultAgentModel.repositoryId;\n agentFormModel.model = agentModel.model || defaultAgentModel.model;\n agentFormModel.contextSize = agentModel.contextSize || defaultAgentModel.contextSize;\n agentFormModel.contextSizeCopy = defaultAgentModel.contextSize;\n\n // Set temperature related properties.\n const temperatureFormModel = new NumericRangeModel({...DEFAULT_TEMPERATURE_RANGE});\n temperatureFormModel.value = agentModel.temperature !== undefined ? agentModel.temperature : defaultAgentModel.temperature;\n agentFormModel.temperature = temperatureFormModel;\n agentFormModel.temperatureEnabled = !ObjectUtil.isNullOrUndefined(agentFormModel.temperature.value);\n\n // Set topP related properties.\n const topPFormModel = new NumericRangeModel({...DEFAULT_TOP_P_RANGE});\n topPFormModel.value = agentModel.topP !== undefined ? agentModel.topP : defaultAgentModel.topP;\n agentFormModel.topP = topPFormModel;\n agentFormModel.topPEnabled = !ObjectUtil.isNullOrUndefined(agentFormModel.topP.value);\n\n agentFormModel.seed = agentModel.seed || defaultAgentModel.seed;\n agentFormModel.instructions = agentInstructionsFormMapper(agentModel.instructions, defaultAgentModel.instructions);\n extractionMethodsFormMapper(agentFormModel, operation, defaultAgentModel.assistantExtractionMethods, agentModel.assistantExtractionMethods);\n // Select additional methods if they are present in the list returned from the backend (BE).\n additionalExtractionMethodsFormMapper(agentModel.additionalExtractionMethods, defaultAgentModel.additionalExtractionMethods, agentFormModel);\n return agentFormModel;\n};\n\n/**\n * @param {AgentInstructionsModel} currentAgentModelInstructions\n * @param {AgentInstructionsModel} defaultInstructions\n * @return {AgentInstructionsFormModel}\n */\nconst agentInstructionsFormMapper = (currentAgentModelInstructions, defaultInstructions) => {\n if (!currentAgentModelInstructions && !defaultInstructions) {\n return;\n }\n const systemInstruction = currentAgentModelInstructions && currentAgentModelInstructions.systemInstruction || defaultInstructions.systemInstruction;\n const userInstruction = currentAgentModelInstructions && currentAgentModelInstructions.userInstruction || defaultInstructions.userInstruction;\n return new AgentInstructionsFormModel({\n systemInstruction: systemInstruction,\n userInstruction: userInstruction,\n defaultSystemInstruction: defaultInstructions.systemInstruction,\n defaultUserInstruction: defaultInstructions.userInstruction,\n });\n};\n\n/**\n * @param {AgentFormModel} agentFormModel\n * @param {string} operation\n * @param {ExtractionMethodModel[]} defaultData\n * @param {ExtractionMethodModel[]} data\n */\nconst extractionMethodsFormMapper = (agentFormModel, operation, defaultData, data = []) => {\n const defaultExtractionMethods = defaultData.filter((defaultExtractionMethod) => !data.some((agentMethod) => agentMethod.method === defaultExtractionMethod.method));\n const defaultSparqlMethodValues = defaultData.find((defaultExtractionMethod) => defaultExtractionMethod.method === 'sparql_search');\n const extractionMethods = [...data, ...defaultExtractionMethods];\n extractionMethods.forEach((extractionMethod) => {\n const isMethodSelected = data.some((method) => method.method === extractionMethod.method);\n // The sparqlOption is applicable only for the sparql_search method.\n let sparqlOption = '';\n if (isMethodSelected && extractionMethod.method === 'sparql_search') {\n if (AGENT_OPERATION.CREATE === operation) {\n sparqlOption = '';\n } else if (extractionMethod.sparqlQuery) {\n sparqlOption = 'sparqlQuery';\n } else if (extractionMethod.ontologyGraph) {\n sparqlOption = 'ontologyGraph';\n }\n }\n // In edit and clone operations we have an existing agent instance, so we should show the selected methods from it.\n const shouldShowSelectedMethods = operation === AGENT_OPERATION.EDIT || operation === AGENT_OPERATION.CLONE;\n const existingMethod = new ExtractionMethodFormModel({\n selected: shouldShowSelectedMethods && isMethodSelected,\n method: extractionMethod.method,\n sparqlOption: sparqlOption,\n ontologyGraph: extractionMethod.ontologyGraph || defaultSparqlMethodValues.ontologyGraph,\n addMissingNamespaces: extractionMethod.addMissingNamespaces,\n sparqlQuery: new TextFieldModel({\n value: extractionMethod.sparqlQuery || defaultSparqlMethodValues.sparqlQuery,\n minLength: 1,\n maxLength: 2380,\n }),\n connectorType: extractionMethod.connectorType,\n connectorFields: extractionMethod.connectorFields,\n selectedConnectorField: extractionMethod.connectorFields[0],\n similarityIndex: extractionMethod.similarityIndex,\n similarityIndexThreshold: extractionMethod.similarityIndexThreshold && new NumericRangeModel({\n value: extractionMethod.similarityIndexThreshold,\n minValue: 0,\n maxValue: 1,\n step: 0.1,\n }),\n // In case backend returns 0 as a default value this means that there is no limit, so we set the null in order\n // to show the placeholder in the input field.\n maxNumberOfTriplesPerCall: extractionMethod.maxNumberOfTriplesPerCall === 0 ? null : extractionMethod.maxNumberOfTriplesPerCall,\n queryTemplate: extractionMethod.queryTemplate && new TextFieldModel({\n value: extractionMethod.queryTemplate,\n minLength: 1,\n maxLength: 2380,\n }),\n retrievalConnectorInstance: extractionMethod.retrievalConnectorInstance,\n });\n agentFormModel.assistantExtractionMethods.setExtractionMethod(existingMethod);\n });\n};\n\n/**\n * @param {AdditionalExtractionMethodsModel} additionalExtractionMethodsResponse\n * @param {AdditionalExtractionMethodsModel} defaultAdditionalExtractionMethodData\n * @param {AgentFormModel} agentFormModel\n */\nfunction additionalExtractionMethodsFormMapper(additionalExtractionMethodsResponse, defaultAdditionalExtractionMethodData, agentFormModel) {\n // No Additional extraction methods on new agent creation\n if (!additionalExtractionMethodsResponse) {\n return;\n }\n const additionalExtractionMethods = additionalExtractionMethodsResponse.map((method) => {\n const data = {\n method: method.method || defaultAdditionalExtractionMethodData.method,\n expanded: method.expanded || defaultAdditionalExtractionMethodData.expanded,\n };\n if (method.method === AdditionalExtractionMethod.IRI_DISCOVERY_SEARCH || method.method === AdditionalExtractionMethod.AUTOCOMPLETE_IRI_DISCOVERY_SEARCH) {\n data.selected = additionalExtractionMethodsResponse.some((agentMethod) => agentMethod.method === method.method);\n }\n\n if (method.method === AdditionalExtractionMethod.AUTOCOMPLETE_IRI_DISCOVERY_SEARCH) {\n data.maxNumberOfResultsPerCall = method._maxNumberOfResultsPerCall || defaultAdditionalExtractionMethodData.maxNumberOfResultsPerCall;\n }\n return new AdditionalExtractionMethodFormModel(data);\n });\n agentFormModel.additionalExtractionMethods.setAdditionalExtractionMethod(additionalExtractionMethods);\n}\n\n/**\n * Converts the response from the server to a list of AgentModel.\n * @param {*[]} data\n * @param {string[]} localRepositoryIds\n * @return {AgentListModel}\n */\nexport const agentListMapper = (data, localRepositoryIds) => {\n if (!data) {\n return new AgentListModel();\n }\n const agentModels = data\n .map((agent) => agentModelMapper(agent, localRepositoryIds));\n return new AgentListModel(agentModels);\n};\n\nexport const agentModelMapper = (data, localRepositoryIds) => {\n if (!data) {\n return;\n }\n const hashGenerator = md5HashGenerator();\n return new AgentModel({\n id: data.id,\n name: data.name,\n repositoryId: data.repositoryId,\n // Sets the isRepositoryDeleted flag based on whether the repository ID is not in the list of repositories.\n isRepositoryDeleted: !localRepositoryIds.includes(data.repositoryId),\n model: data.model,\n contextSize: data.api === 'openai-assistants' ? null : data.contextSize,\n temperature: data.temperature,\n topP: data.topP,\n seed: data.seed,\n instructions: agentInstructionsMapper(data.instructions),\n assistantExtractionMethods: extractionMethodsMapper(data.assistantExtractionMethods),\n additionalExtractionMethods: additionalExtractionMethodsMapper(data.additionalExtractionMethods),\n compatibility: data.compatibility,\n }, hashGenerator);\n};\n\nconst extractionMethodsMapper = (data) => {\n if (!data) {\n return;\n }\n return data.map((extractionMethod) => extractionMethodMapper(extractionMethod));\n};\n\nconst extractionMethodMapper = (data) => {\n if (!data) {\n return;\n }\n return new ExtractionMethodModel({\n method: data.method,\n ontologyGraph: data.ontologyGraph,\n addMissingNamespaces: data.addMissingNamespaces,\n sparqlQuery: data.sparqlQuery,\n similarityIndex: data.similarityIndex,\n connectorFields: data.connectorFields,\n connectorType: data.connectorType,\n similarityIndexThreshold: data.similarityIndexThreshold,\n maxNumberOfTriplesPerCall: data.maxNumberOfTriplesPerCall,\n queryTemplate: data.queryTemplate,\n retrievalConnectorInstance: data.retrievalConnectorInstance,\n });\n};\n\nconst additionalExtractionMethodsMapper = (data) => {\n if (!data) {\n return;\n }\n return data.map((additionalExtractionMethod) => additionalExtractionMethodMapper(additionalExtractionMethod));\n};\n\nconst additionalExtractionMethodMapper = (data) => {\n if (!data) {\n return;\n }\n if (data.method === AdditionalExtractionMethod.AUTOCOMPLETE_IRI_DISCOVERY_SEARCH) {\n return new AdditionalExtractionMethodModel({\n method: data.method,\n maxNumberOfResultsPerCall: data.limit || 0,\n });\n } else if (data.method === AdditionalExtractionMethod.IRI_DISCOVERY_SEARCH) {\n return new AdditionalExtractionMethodModel({\n method: data.method,\n });\n }\n};\n\nconst agentInstructionsMapper = (data) => {\n if (!data) {\n return;\n }\n return new AgentInstructionsModel({\n systemInstruction: data.systemInstruction,\n userInstruction: data.userInstruction,\n });\n};\n\n/**\n * Converts an agent list containing {@link AgentModel} instances into an agent list\n * containing {@link AgentViewModel} instances enriched with UI permissions.\n *\n * @param {AgentListModel} agentList The agent list to convert.\n * @param {AuthorizationService} authorizationService The authorization service used to determine user permissions.\n * @returns {AgentListModel} An agent list containing {@link AgentViewModel} instances.\n */\nexport const mapAgentListModelToAgentViewListModel = (agentList, authorizationService) => {\n return new AgentListModel(agentList.agents.map((agent) => mapAgentModelToAgentViewModel(agent, authorizationService)));\n};\n\n/**\n * Converts an {@link AgentModel} into an {@link AgentViewModel} by enriching it\n * with UI-specific permissions based on the current user's repository maintain rights.\n *\n * @param {AgentModel} agent The agent to convert.\n * @param {AuthorizationService} authorizationService The authorization service used to determine user permissions.\n * @returns {AgentViewModel} The converted agent view model.\n */\nexport const mapAgentModelToAgentViewModel = (agent, authorizationService) => {\n const viewAgent = new AgentViewModel(agent);\n const canMaintainRepo = authorizationService.canMaintainRepo({id: agent.repositoryId, location: ''});\n viewAgent.canEditAgent = canMaintainRepo;\n viewAgent.canCopyAgent = true;\n viewAgent.canDeleteAgent = canMaintainRepo;\n viewAgent.canOpenExternalIntegrationConfiguration = canMaintainRepo;\n\n return viewAgent;\n};\n","import {CHAT_MESSAGE_ROLE, ChatMessageModel} from \"../../models/ttyg/chat-message\";\nimport {ChatItemModel, ChatItemsListModel} from \"../../models/ttyg/chat-item\";\nimport {ChatAnswerModel} from \"../../models/ttyg/chat-answer\";\n\n/**\n * Converts the response from the server to a list of ChatMessageModel array.\n * @param {*[]} data\n * @return {ChatMessageModel[]}\n */\nexport const chatMessageModelListMapper = (data) => {\n if (!data) {\n return [];\n }\n return data.map((chatMessage) => chatMessageModelMapper(chatMessage));\n};\n\n/**\n * Maps a list of chat messages into an instance of {@see ChatItemsListModel}, which contains a list of `ChatItemModel` objects. Each object represents a question (from the user) and its corresponding answer (from the agent).\n * The backend returns messages as individual entries, and this function transforms those entries into objects that pair each question with its answer.\n *\n * @param {Array<Object>} data - An array of message objects, where each message contains details such as the role (user or assistant) and the message content.\n * @return {ChatItemsListModel} An instance of `ChatItemsListModel` containing a list of `ChatItemModel` objects, where each object holds a question and its corresponding answer.\n *\n * @example\n * // Example message data from the backend\n * const data = [\n * { role: 'user', conversationId: '123', agentId: 'agent-1', message: 'What is the weather?', timestamp: 1628876583 },\n * { role: 'assistant', conversationId: '123', agentId: 'agent-1', message: 'The weather is sunny.', timestamp: 1628876590 }\n * ];\n *\n * // Example of the resulting ChatItemsListModel array\n * const items = [\n * {\n * conversationId: '123',\n * agentId: 'agent-1',\n * question: {\n * role: 'user',\n * message: 'What is the weather?',\n * timestamp: 1628876583\n * },\n * answer: {\n * role: 'assistant',\n * message: 'The weather is sunny.',\n * timestamp: 1628876590\n * }\n * }]\n */\nexport const chatItemsModelMapper = (data = []) => {\n const items = [];\n let currentItem;\n data.forEach((message) => {\n // NOTE: The backend chat model doesn't have a ChatItemModel object,\n // i.e. it doesn't group user + assistant messages together.\n // In essence, there may be multiple consecutive user messages as well as\n // multiple consecutive assistant messages.\n const chatId = message.conversationId;\n if (CHAT_MESSAGE_ROLE.USER === message.role) {\n if (currentItem) {\n items.push(currentItem);\n }\n currentItem = new ChatItemModel(chatId, chatMessageModelMapper(message));\n } else {\n if (!currentItem) {\n currentItem = new ChatItemModel(chatId, null);\n }\n currentItem.answers.push(chatMessageModelMapper(message));\n currentItem.agentId = message.agentId;\n }\n });\n if (currentItem) {\n items.push(currentItem);\n }\n return new ChatItemsListModel(items);\n};\n\n/**\n * Converts the response from the server to a ChatMessageModel.\n * @param {*} data\n * @return {ChatMessageModel|undefined}\n */\nexport const chatMessageModelMapper = (data) => {\n if (!data) {\n return;\n }\n return new ChatMessageModel({\n id: data.id,\n role: data.role,\n message: data.message,\n timestamp: data.timestamp,\n tokenUsageInfo: data.usage,\n data: data,\n isTerminalState: data.isTerminalState,\n status: data.terminalStatusCode\n });\n};\n\n/**\n * Converts the response from the server to a ChatAnswerModel instance.\n * @param {*} data\n * @return {ChatAnswerModel|undefined}\n */\nexport const chatAnswerModelMapper = (data) => {\n if (!data) {\n return;\n }\n return new ChatAnswerModel({\n chatId: data.id,\n chatName: data.name,\n timestamp: data.timestamp,\n messages: chatMessageModelListMapper(data.messages),\n continueRunId: data.continueRunId,\n tokenUsageInfo: data.usage\n });\n};\n","import {ChatsListModel, ChatModel} from \"../../models/ttyg/chats\";\nimport {md5HashGenerator} from \"../../utils/hash-utils\";\nimport {chatItemsModelMapper} from \"./chat-message.mapper\";\nimport {ChatItemsListModel} from \"../../models/ttyg/chat-item\";\n\nconst hashGenerator = md5HashGenerator();\n\n/**\n * Converts the response from the server to a list of ChatModels.\n * @param {*[]} data\n * @return {ChatsListModel}\n */\nexport const chatsListMapper = (data) => {\n if (!data) {\n return new ChatsListModel();\n }\n const chatModels = data.map((chat) => chatModelMapper(chat));\n return new ChatsListModel(chatModels);\n};\n\n/**\n * Converts the response from the server to a ChatModel.\n * @param {*} data\n * @return {ChatModel|undefined}\n */\nexport const chatModelMapper = (data) => {\n if (!data) {\n return;\n }\n return new ChatModel({\n id: data.id,\n name: data.name,\n timestamp: data.timestamp,\n chatHistory: data.messages && data.messages.length ? chatItemsModelMapper(data.messages) : new ChatItemsListModel()\n }, hashGenerator);\n};\n","import {\n ExplainQueryMethodModel,\n ExplainQueryMethodsListModel,\n ExplainResponseModel\n} from \"../../models/ttyg/explain-response\";\n\n/**\n * Converts the response from the server to a ExplainResponseModel.\n *\n * @param {*} data\n * @return {ExplainResponseModel}\n */\nexport const explainResponseMapper = (data) => {\n return new ExplainResponseModel({\n chatId: data.conversationId,\n answerId: data.answerId,\n queryMethods: explainQueryMethodsListMapper(data.queryMethods)\n });\n};\n\n/**\n * Converts the response from the server to a ExplainQueryMethodsListModel.\n *\n * @param {*} data\n * @return {ExplainQueryMethodsListModel}\n */\nexport const explainQueryMethodsListMapper = (data = []) => {\n return new ExplainQueryMethodsListModel(data.map(explainQueryMethodMapper));\n};\n\n/**\n * Converts the response from the server to a ExplainQueryMethodModel.\n *\n * @param {*} data\n * @return {ExplainQueryMethodModel}\n */\nexport const explainQueryMethodMapper = (data) => {\n return new ExplainQueryMethodModel(data);\n};\n"],"names":["TTYGService","TTYGRestService","$repositories","createChat","chatItem","toAskRequestPayload","then","response","data","conversationId","getConversation","id","chatModelMapper","renameConversation","chat","toRenameRequestPayload","exportConversation","res","contentDispositionHeader","headers","filename","split","substring","length","askQuestion","chatAnswerModelMapper","continueChatRun","continueData","payload","toContinueRunRequestPayload","getConversations","savedQueryName","owner","chatsListMapper","deleteConversation","createConversation","toCreateChatRequestPayload","cancelPendingQuestion","chatId","getAgents","localRepositories","getLocalReadablGraphdbRepositoryIds","agentListMapper","getAgent","agentModelMapper","createAgent","editAgent","deleteAgent","explainResponse","answerId","toExplainResponsePayload","explainResponseMapper","getDefaultAgent","getAgentDefaultValues","explainAgentSettings","agentInstructionsExplainMapper","angular","module","factory","$inject","AgentInstructionsExplain","constructor","this","_type","type","_content","content","_size","size","value","AgentInstructionsExplainList","_instructions","instructions","ChatAnswerModel","_chatId","_chatName","chatName","_timestamp","timestamp","_messages","messages","_continueRunId","continueRunId","tokenUsageInfo","ContinueChatRun","runId","_chatItem","_runId","agentId","tzOffset","Date","getTimezoneOffset","ChatItemModel","question","_agentId","undefined","_question","_answers","answers","setQuestionMessage","message","ChatMessageModel","role","CHAT_MESSAGE_ROLE","USER","getQuestionMessage","ChatItemsListModel","items","_items","isEmpty","appendItem","push","getLast","ChatModel","getNewChat","name","Math","floor","now","new","md5HashGenerator","hashGenerator","_id","_name","_chatHistory","chatHistory","_new","hash","generateHash","_asking","asking","isNew","JSON","stringify","isAsking","ChatByDayModel","_day","day","_chats","chats","ChatsListModel","_chatsByDay","sortByTime","updateChatsByDay","containsNewChats","some","sort","a","b","updateChatTimestamp","find","c","setChatAsOld","setChatAsAsking","updateChatName","deleteChat","chatToBeDeleted","filter","forEach","toDateString","dayModel","d","appendChat","replaceChat","newChat","oldChat","map","getFirstChat","deselectAll","selected","selectChat","getChat","getNonPersistedChat","renameChat","renamedChat","chatsByDay","ExplainResponseModel","_answerId","_queryMethods","queryMethods","_expanded","expanded","ExplainQueryMethodsListModel","ExplainQueryMethodModel","_rawQuery","rawQuery","_query","query","_queryType","queryType","_errorMessage","errorOutput","errorMessage","ExplainQueryType","SPARQL","OTHER","CONVERSATIONS_ENDPOINT","AGENTS_ENDPOINT","EXPLAIN_RESPONSE_ENDPOINT","CHATS_ENDPOINT","$http","TtygRestServiceFakeBackend","post","get","put","responseType","delete","agent","AgentViewModel","AgentModel","super","canEditAgent","canCopyAgent","canDeleteAgent","canOpenExternalIntegrationConfiguration","instruction","agentFormModelMapper","agentModel","defaultAgentModel","operation","agentFormModel","AgentFormModel","repositoryId","model","contextSize","contextSizeCopy","temperatureFormModel","NumericRangeModel","DEFAULT_TEMPERATURE_RANGE","temperature","temperatureEnabled","ObjectUtil","isNullOrUndefined","topPFormModel","DEFAULT_TOP_P_RANGE","topP","topPEnabled","seed","agentInstructionsFormMapper","extractionMethodsFormMapper","assistantExtractionMethods","additionalExtractionMethodsResponse","defaultAdditionalExtractionMethodData","additionalExtractionMethods","method","AdditionalExtractionMethod","IRI_DISCOVERY_SEARCH","AUTOCOMPLETE_IRI_DISCOVERY_SEARCH","agentMethod","maxNumberOfResultsPerCall","_maxNumberOfResultsPerCall","AdditionalExtractionMethodFormModel","setAdditionalExtractionMethod","additionalExtractionMethodsFormMapper","currentAgentModelInstructions","defaultInstructions","systemInstruction","userInstruction","AgentInstructionsFormModel","defaultSystemInstruction","defaultUserInstruction","defaultData","defaultExtractionMethods","defaultExtractionMethod","defaultSparqlMethodValues","extractionMethod","isMethodSelected","sparqlOption","AGENT_OPERATION","CREATE","sparqlQuery","ontologyGraph","shouldShowSelectedMethods","EDIT","CLONE","existingMethod","ExtractionMethodFormModel","addMissingNamespaces","TextFieldModel","minLength","maxLength","connectorType","connectorFields","selectedConnectorField","similarityIndex","similarityIndexThreshold","minValue","maxValue","step","maxNumberOfTriplesPerCall","queryTemplate","retrievalConnectorInstance","setExtractionMethod","localRepositoryIds","AgentListModel","agentModels","isRepositoryDeleted","includes","api","agentInstructionsMapper","extractionMethodsMapper","additionalExtractionMethodsMapper","compatibility","extractionMethodMapper","ExtractionMethodModel","additionalExtractionMethod","additionalExtractionMethodMapper","AdditionalExtractionMethodModel","limit","AgentInstructionsModel","mapAgentListModelToAgentViewListModel","agentList","authorizationService","agents","mapAgentModelToAgentViewModel","viewAgent","canMaintainRepo","location","chatMessageModelListMapper","chatMessage","chatMessageModelMapper","chatItemsModelMapper","currentItem","usage","isTerminalState","status","terminalStatusCode","chatModels","explainQueryMethodsListMapper","explainQueryMethodMapper"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- export const __webpack_esm_id__=79796;export const __webpack_esm_ids__=[3801,48605,79796,93966];export const __webpack_esm_modules__={48605(){angular.module("graphdb.framework.core.directives.multiselect",[]).directive("multiSelectDropdown",function(){return{restrict:"E",scope:{items:"=",placeholder:"@?",onChange:"&?",labelKeys:"=?"},templateUrl:"js/angular/core/directives/multiselect-search/templates/multiselect-search.html",controller:["$scope","$document","$element","$filter","$timeout",function(e,t,o,n,r){e.open=!1,e.search={query:""},e.visibleItems=[];const i=[],a=e=>null===e?"":(""+e).toLowerCase(),s=()=>{const t=Array.isArray(e.items)?e.items:[],o=a(e.search.query);e.visibleItems=o?t.filter(e=>a(e.label).includes(o)):t},l=t=>{e.open&&(o[0].contains(t.target)||e.$applyAsync(function(){e.open=!1}))};e.toggleOpen=function(t){t&&t.stopPropagation(),e.open=!e.open,e.open&&r(function(){const e=o[0].querySelector(".multiselect-search");e&&e.focus()})},e.onKeydownMenu=function(t){"Escape"===t.key&&(e.open=!1,t.stopPropagation(),t.preventDefault(),r(function(){const e=o[0].querySelector(".multiselect-button");e&&e.focus()}))},e.selectedCount=function(){return Array.isArray(e.items)?e.items.filter(e=>e.selected).length:0},e.allFilteredSelected=function(){const t=e.visibleItems||[];return 0!==t.length&&t.every(e=>e.selected)},e.someFilteredSelected=function(){const t=e.visibleItems||[],o=t.some(e=>e.selected),n=t.every(e=>e.selected);return o&&!n},e.toggleSelectAll=function(t){t&&t.stopPropagation();const o=e.visibleItems||[],n=!e.allFilteredSelected();for(const e of o)e.selected=n;e.emitChange()},e.emitChange=function(){if("function"==typeof e.onChange){const t=(e.items||[]).filter(e=>e.selected);e.onChange({selected:t})}},t.on("click",l),i.push(e.$watch("search.query",s),e.$watchCollection("items",s)),e.$on("$destroy",()=>{t.off("click",l);for(const e of i)e()}),s()}]}})},3801(e,t,o){o.d(t,{X:()=>n});const n={SIMILARITY:"similarity",ELASTICSEARCH:"elasticsearch",OPENSEARCH:"opensearch"}},79796(e,t,o){var n=o(41767),r=o(12454),i=(o(48175),o(6336),o(75384),o(48605),o(51504),o(94154),o(83427),o(75504)),a=o(35197),s=o(9297),l=o(19274),c=o(82385),d=o(71315),g=o(79069),m=o(3801);const u=d.I.logger;function p(e,t,o,d,p,y,h,I,f,v,E,S,M,F,x,_,C,A,T){e.similarityInput={hovered:!1},e.AGENT_OPERATION=s.A1,e.operation=S.operation,e.savingAgent=!1,e.agentFormModel=S.agentFormModel,e.activeRepositoryInfo=S.activeRepositoryInfo,e.extractionMethodLoaderFlags={[r.Ht.SIMILARITY]:!1},e.activeRepositoryList=S.activeRepositoryList,e.extractionMethods=r.Ht,e.additionalExtractionMethods=r.eA,e.ExtractionMethodTemplates=x,e.showAdvancedSettings=!1,e.showHighTemperatureWarning=!1,e.showSystemInstructionWarning=!1,e.retrievalConnectors=[],e.ftsEnabled=!1,e.autocompleteSuggestions=[],e.showContextSize=null!==e.agentFormModel.contextSize,e.vectorFields=[],e.documentationUrlForSimilarity=c.m.getDocumentationUrl(T.shortVersion,"talk-to-graph.html#prerequisites-and-configuration"),e.similarityOptionsGrouped=[],e.toggleExtractionMethod=t=>{t.expanded=t.selected,e.agentSettingsForm.extractionMethods.$setTouched(),k(),j[t.method](t)},e.toggleTemperature=()=>{const t=new g.U0({...r.Hn});e.agentFormModel.temperatureEnabled||(t.value=void 0),e.agentFormModel.temperature=t,B()},e.toggleTopP=()=>{const t=new g.U0({...r.Zb});e.agentFormModel.topPEnabled||(t.value=void 0),e.agentFormModel.topP=t},e.onExtractionMethodPanelToggle=e=>{e.toggleCollapse(),j[e.method](e)},e.toggleAdditionalExtractionMethod=t=>{t.expanded=t.selected,e.checkAutocompleteIndexEnabled(),q[t.method](t)},e.onAdditionalExtractionMethodPanelToggle=e=>{e.toggleCollapse(),q[e.method](e)},e.helpInfoForModel={ttygHelpInfo:function(){const e=(0,n.Gz)(E.instant("ttyg.agent.create_agent_modal.form.model.hint"));return I.trustAsHtml(e)}(),linkText:E.instant("ttyg.agent.create_agent_modal.form.model.link_text"),documentationUrl:c.m.getDocumentationUrl(T.shortVersion,"talk-to-graph.html#prerequisites-and-configuration")},e.getFTSDisabledHelpMessage=()=>{const t=(0,n.Gz)(E.instant("ttyg.agent.create_agent_modal.form.fts_search.fts_disabled_message",{repositoryEditPage:"repository/edit/"+e.agentFormModel.repositoryId}));return I.trustAsHtml(t)},e.goToAutocompleteView=t=>{t.preventDefault(),M.emit(a.I.GO_TO_AUTOCOMPLETE_INDEX_VIEW,{repositoryId:e.agentFormModel.repositoryId})},e.goToCreateSimilarityView=t=>{t.preventDefault(),M.emit(a.I.GO_TO_CREATE_SIMILARITY_VIEW,{repositoryId:e.agentFormModel.repositoryId})},e.goToConnectorsView=t=>{t.preventDefault(),M.emit(a.I.GO_TO_CONNECTORS_VIEW,{repositoryId:e.agentFormModel.repositoryId})},e.ok=()=>{const t=e.agentFormModel.toPayload();return R[e.operation](t)},e.cancel=()=>{t.dismiss({})},e.close=()=>{t.dismiss({})},e.updateSimilaritySearchPanel=(t=!1)=>{const o=e.agentFormModel.assistantExtractionMethods.getSimilarityExtractionMethod();o.selected?(t&&(o.similarityIndex=null),D(o,!0)):e.agentSettingsForm.$setValidity("FTSDisabled",!0)},e.updateRetrievalConnectorPanel=(t=!1)=>{const o=e.agentFormModel.assistantExtractionMethods.getRetrievalExtractionMethod();o.selected&&(t&&(o.retrievalConnectorInstance=null),N(o))},e.checkIfFTSEnabled=()=>{e.agentFormModel.repositoryId?e.agentFormModel.assistantExtractionMethods.getFTSSearchExtractionMethod().selected?(e.extractionMethodLoaderFlags[r.Ht.FTS_SEARCH]=!0,h.getRepositoryModel({id:e.agentFormModel.repositoryId}).then(t=>{e.ftsEnabled=t.getParamValue(i.YF.enableFtsIndex)}).catch(e=>{O(e,"ttyg.agent.messages.error_repository_config_loading")}).finally(()=>{e.extractionMethodLoaderFlags[r.Ht.FTS_SEARCH]=!1,e.agentSettingsForm.$setValidity("FTSDisabled",e.ftsEnabled)})):e.agentSettingsForm.$setValidity("FTSDisabled",!0):e.agentSettingsForm.$setValidity("FTSDisabled",!1)},e.openExternalIntegrationConfig=()=>{const t=e.agentFormModel;A.open(t)},e.onRepositoryChange=()=>{Y(!0,!0)},e.checkAutocompleteIndexEnabled=t=>{if(t||(t=e.agentFormModel.additionalExtractionMethods.additionalExtractionMethods.find(e=>e.method===r.eA.AUTOCOMPLETE_IRI_DISCOVERY_SEARCH)),t&&!t.selected||!e.agentFormModel.repositoryId)return;const o=V();_.checkAutocompleteStatus(o.repositoryId,o.repositoryLocation).then(t=>{e.autocompleteEnabled=t,e.agentSettingsForm.$setValidity("autocompleteDisabled",t)}).catch(t=>{e.agentSettingsForm.$setValidity("autocompleteDisabled",!1),f.error(getError(t))})},e.onRestoreDefaultContextSize=()=>{e.agentFormModel.contextSize=e.agentFormModel.contextSizeCopy},e.onRestoreDefaultSystemInstructions=()=>{e.agentFormModel.instructions.systemInstruction=e.agentFormModel.instructions.systemInstructionCopy},e.onRestoreDefaultUserInstructions=()=>{e.agentFormModel.instructions.userInstruction=e.agentFormModel.instructions.userInstructionCopy},e.onTemperatureChange=()=>{B()},e.onSystemInstructionChange=()=>{""===e.agentFormModel.instructions.systemInstruction||e.showSystemInstructionWarning||(e.showSystemInstructionWarning=!0,o.openModalAlert({title:E.instant("ttyg.agent.create_agent_modal.form.system_instruction.overriding_system_instruction_warning.title"),message:E.instant("ttyg.agent.create_agent_modal.form.system_instruction.overriding_system_instruction_warning.body")}).result.then(function(){})),""===e.agentFormModel.instructions.systemInstruction&&(e.showSystemInstructionWarning=!1)},e.onExplainAgentSettings=()=>{const t=e.agentFormModel.toPayload();F.explainAgentSettings(t).then(e=>{const t={templateUrl:"js/angular/ttyg/templates/modal/agent-instructions-explain-modal.html",controller:"AgentInstructionsExplainModalController",windowClass:"agent-instructions-explain-modal",backdrop:"static",resolve:{dialogModel:function(){return{agentInstructionsExplain:e}}},size:"lg"};d.open(t).result.then(()=>{})}).catch(e=>{f.error(getError(e,0,s.LE))})},e.getSuggestions=t=>{const o=t.target.value;C.getAutocompleteSuggestions(o).then(l.C).then(t=>{e.autocompleteSuggestions=t.map(e=>({text:e.value}))}).catch(e=>{f.error(getError(e,0,s.LE))})},e.onVectorFieldsChange=function(e){e.connectorFields=e.selectedConnectorField?[e.selectedConnectorField]:[]},e.hasConnectorData=()=>!(!e.connectorMap||!Object.keys(e.connectorMap).length),e.shouldShowVectorFields=t=>{if(!t)return!1;const o=t.connectorType,n=t.similarityIndex;if(!P(o))return!1;if(Array.isArray(e.vectorFields))return e.vectorFields.length>0;const r=b(o,n);return Array.isArray(r)&&r.length>0},e.onSimilarityIndexChange=t=>{const o=t&&t.similarityIndexOption;if(t.selectedConnectorField=void 0,t.connectorFields=[],!o)return t.connectorType=null,t.similarityIndex="",void(e.vectorFields=[]);t.connectorType=o.provider,t.similarityIndex=o.value,e.vectorFields=b(o.provider,o.value)};const b=(t,o)=>{const n=e.connectorMap||{};return n[t]&&n[t][o]?n[t][o]:[]},R={[s.A1.CREATE]:e=>$(e),[s.A1.EDIT]:e=>w(e),[s.A1.CLONE]:e=>L(e)},$=o=>(e.savingAgent=!0,F.createAgent(o).then(e=>{t.close(e),f.success(E.instant("ttyg.agent.messages.agent_save_successfully",{agentName:e.name}))}).catch(e=>{f.error(getError(e,0,s.LE))}).finally(()=>{e.savingAgent=!1})),w=o=>(e.savingAgent=!0,F.editAgent(o).then(e=>{t.close(e),f.success(E.instant("ttyg.agent.messages.agent_save_successfully",{agentName:e.name}))}).catch(e=>{f.error(getError(e,0,s.LE))}).finally(()=>{e.savingAgent=!1})),L=o=>(e.savingAgent=!0,F.createAgent(o).then(e=>{t.close(e),f.success(E.instant("ttyg.agent.messages.agent_save_successfully",{agentName:e.name}))}).catch(e=>{f.error(getError(e,0,s.LE))}).finally(()=>{e.savingAgent=!1})),O=(e,t)=>{u.error(e),f.error(E.instant(t))},k=()=>{e.agentSettingsForm.extractionMethods.$setValidity("required",e.agentFormModel.hasExtractionMethodSelected())},V=()=>{const t=e.activeRepositoryList.find(t=>t.value===e.agentFormModel.repositoryId);return{repositoryId:t?t.data.repository.id:void 0,repositoryLocation:t?t.data.repository.location:void 0}},P=e=>e===m.X.OPENSEARCH||e===m.X.ELASTICSEARCH,D=(t,o=!1)=>{if(!t.selected)return void e.agentSettingsForm.$setValidity("missingIndex",!0);const n=e.agentSettingsForm&&e.agentSettingsForm.connectorInstances,r=!n||n.$pristine;if(e.connectorMap&&!r)return;if(!e.agentFormModel.repositoryId)return;e.extractionMethodLoaderFlags[t.method]=!0;const i=V();p.getSimilarityIndexesWithVectorFields(i.repositoryId).then(n=>{e.connectorMap=n;const r=U(n);(t=>{e.similarityOptionsGrouped=[],Object.entries(t).forEach(([t,o])=>{const n=E.instant(`ttyg.agent.create_agent_modal.form.similarity_instance_type_label.${t}`);Object.keys(o||{}).forEach(o=>{e.similarityOptionsGrouped.push({provider:t,label:o,value:o,group:n})})})})(n),H(r,t),(t=>{const o=t.connectorType,n=t.similarityIndex;P(o)?e.vectorFields=b(o,n):e.vectorFields=[]})(t),e.agentSettingsForm.$setValidity("missingIndex",!t.selected||e.hasConnectorData()),(o||t.connectorFields&&0===t.connectorFields.length)&&e.onSimilarityIndexChange(t)}).catch(t=>{e.connectorMap=null,e.agentSettingsForm.$setValidity("missingIndex",!1),O(t,"ttyg.agent.messages.error_similarity_indexes_loading")}).finally(()=>{e.extractionMethodLoaderFlags[t.method]=!1})},H=(t,o)=>{if(!t.length)return o.connectorType="",o.similarityIndex="",void(o.similarityIndexOption=void 0);const n=o.connectorType,r=o.similarityIndex,i=t.find(e=>e.data.connectorType===n&&e.value===r)||t[0];o.connectorType=i.data.connectorType,o.similarityIndex=i.value;const a=(e.similarityOptionsGrouped||[]).find(e=>e.provider===o.connectorType&&e.value===o.similarityIndex);o.similarityIndexOption=a||void 0},U=e=>{const t=[];return Object.entries(e).forEach(([e,o])=>{Object.entries(o).forEach(([o,n])=>{t.push(new g.rx({label:o,value:o,data:{connectorType:e,connectorFields:n}}))})}),t},N=t=>{if(!e.agentFormModel.repositoryId)return;if(!t.selected)return void e.agentSettingsForm.$setValidity("missingConnector",!0);e.extractionMethodLoaderFlags[t.method]=!0;const o=V();y.getConnectorPrefixByName("ChatGPT Retrieval",o.repositoryId,o.repositoryLocation).then(e=>y.getConnectorsByTypeAsSelectMenuOptions(e,o.repositoryId,o.repositoryLocation)).then(o=>{e.retrievalConnectors=o,e.agentSettingsForm.$setValidity("missingConnector",!t.selected||!(!o||!o.length)),G(e.retrievalConnectors,t)}).catch(t=>{e.agentSettingsForm.$setValidity("missingConnector",!1),O(t,"ttyg.agent.messages.error_retrieval_connectors_loading")}).finally(()=>{e.extractionMethodLoaderFlags[t.method]=!1})},G=(e,t)=>{if(0===e.length)return void(t.retrievalConnectorInstance=null);const o=e.find(e=>e.value===t.retrievalConnectorInstance);t.retrievalConnectorInstance=o?o.value:e[0].value},j={[r.Ht.FTS_SEARCH]:t=>{e.checkIfFTSEnabled()},[r.Ht.SPARQL]:e=>{},[r.Ht.SIMILARITY]:e=>D(e),[r.Ht.RETRIEVAL]:e=>N(e)},q={[r.eA.AUTOCOMPLETE_IRI_DISCOVERY_SEARCH]:e=>W(e),[r.eA.IRI_DISCOVERY_SEARCH]:()=>{}},W=t=>{t.selected||e.agentSettingsForm.$setValidity("autocompleteDisabled",!0),e.checkAutocompleteIndexEnabled(t)},Y=(t=!1,o=!1)=>{e.checkIfFTSEnabled(),e.updateSimilaritySearchPanel(t),e.updateRetrievalConnectorPanel(o),e.checkAutocompleteIndexEnabled()},z=()=>{document.hidden||Y()},X=(e,t)=>{const o=document.getElementById(e);o&&(o.value=t)},B=()=>{e.showHighTemperatureWarning=e.agentFormModel.temperature.value>1};document.addEventListener("visibilitychange",z),e.$on("$destroy",()=>{document.removeEventListener("visibilitychange",z)}),V().repositoryId||(e.agentFormModel.repositoryId=null),setTimeout(k,0),t.rendered.then(()=>{X("temperatureSlider",e.agentFormModel.temperature.value),X("topPSlider",e.agentFormModel.topP.value),e.operation!==s.A1.CREATE&&Y()})}angular.module("graphdb.framework.ttyg.controllers.agent-settings-modal",["graphdb.framework.core.services.similarity","graphdb.framework.core.services.connectors","graphdb.framework.rest.repositories.service","graphdb.framework.ttyg.controllers.agent-instructions-explain-modal","graphdb.framework.ttyg.services.externalIntegrationModal","ngTagsInput","graphdb.framework.core.directives.multiselect"]).constant("ExtractionMethodTemplates",{iri_discovery_search:"iri-discovery-search",autocomplete_iri_discovery_search:"autocomplete-iri-discovery-search"}).filter("map",function(){return function(e,t){return Array.isArray(e)?e.map(function(e){return e[t]}):e}}).controller("AgentSettingsModalController",p),p.$inject=["$scope","$uibModalInstance","ModalService","$uibModal","SimilarityService","ConnectorsService","RepositoriesRestService","$sce","toastr","UriUtils","$translate","dialogModel","TTYGContextService","TTYGService","ExtractionMethodTemplates","AutocompleteService","AutocompleteRestService","ExternalIntegrationModalService","productInfo"]},93966(){function e(e,t,o,n,r){e.externalIntegrationConfiguration=r.externalIntegrationConfiguration,e.difyExtension=r.difyExtensionUrl,e.queryMethods=r.queryMethodsUrl,e.agentId=r.agentId,e.agentName=r.agentName,e.close=()=>{t.dismiss({})},e.onCloseExternalIntegrationConfigurationModal=()=>{t.dismiss({})}}angular.module("graphdb.framework.ttyg.controllers.external-integration-configuration-modal",[]).controller("ExternalIntegrationConfigurationModalController",e),e.$inject=["$scope","$uibModalInstance","ModalService","$translate","dialogModel"]},83427(e,t,o){o(93966);var n=o(9297);function r(e,t,o){return{open:function(r){return t.getExternalUrl().then(t=>{const o=function(e,t){return{agentName:e.name,agentId:e.id,queryMethodsUrl:`${t}/rest/llm/tool/ttyg/${e.id}`,difyExtensionUrl:`${t}/rest/llm/ttyg/${e.id}/dify`}}(r,t.data);return e.open({templateUrl:"js/angular/ttyg/templates/modal/external-integration-configuration-modal.html",controller:"ExternalIntegrationConfigurationModalController",windowClass:"external-integration-configuration-modal",backdrop:"static",resolve:{dialogModel:()=>o}}).result.then(()=>{}).catch(()=>{})}).catch(e=>{o.error(getError(e,0,n.LE))})}}}angular.module("graphdb.framework.ttyg.services.externalIntegrationModal",["graphdb.framework.ttyg.controllers.external-integration-configuration-modal"]).factory("ExternalIntegrationModalService",r),r.$inject=["$uibModal","LocationsRestService","toastr"]}};
2
- //# sourceMappingURL=79796.c484b55f1aa1581ac64c.bundle.js.map