@oneuptime/common 12.0.12 → 12.0.14
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.
- package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +32 -5
- package/Models/DatabaseModels/NetworkDevice.ts +64 -0
- package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +14 -0
- package/Models/DatabaseModels/StatusPage.ts +59 -0
- package/Models/DatabaseModels/StatusPageOidc.ts +2 -0
- package/Models/DatabaseModels/UserCall.ts +94 -3
- package/Models/DatabaseModels/UserEmail.ts +94 -3
- package/Models/DatabaseModels/UserIncomingCallNumber.ts +94 -3
- package/Models/DatabaseModels/UserPush.ts +37 -0
- package/Models/DatabaseModels/UserSMS.ts +94 -3
- package/Models/DatabaseModels/UserWhatsApp.ts +93 -2
- package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +19 -2
- package/Server/API/AIChatAPI.ts +55 -56
- package/Server/API/BaseAPI.ts +79 -14
- package/Server/API/CommonAPI.ts +89 -0
- package/Server/API/MicrosoftTeamsAPI.ts +20 -9
- package/Server/API/SlackAPI.ts +13 -10
- package/Server/API/StatusPageAPI.ts +2197 -2128
- package/Server/API/TelemetryAPI.ts +72 -3
- package/Server/API/UserCallAPI.ts +53 -45
- package/Server/API/UserEmailAPI.ts +53 -44
- package/Server/API/UserIncomingCallNumberAPI.ts +48 -38
- package/Server/API/UserNotificationMethodAdminAPI.ts +481 -0
- package/Server/API/UserPushAPI.ts +126 -2
- package/Server/API/UserSmsAPI.ts +53 -44
- package/Server/API/UserWhatsAppAPI.ts +53 -50
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.ts +154 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.ts +17 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787500000000-AddEnableSearchEngineIndexingToStatusPage.ts +30 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787600000000-AddNetworkDeviceReachabilityColumns.ts +47 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.ts +45 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Middleware/UserAuthorization.ts +11 -2
- package/Server/Middleware/VerificationCodeRateLimit.ts +586 -0
- package/Server/Services/AnalyticsDatabaseService.ts +169 -0
- package/Server/Services/ApiKeyPermissionService.ts +116 -2
- package/Server/Services/DatabaseService.ts +118 -6
- package/Server/Services/LogAggregationService.ts +39 -0
- package/Server/Services/LogService.ts +21 -0
- package/Server/Services/NetworkSiteService.ts +12 -0
- package/Server/Services/PushNotificationService.ts +127 -12
- package/Server/Services/SpanService.ts +21 -0
- package/Server/Services/TeamMemberService.ts +53 -13
- package/Server/Services/TraceAggregationService.ts +15 -0
- package/Server/Services/UserCallService.ts +55 -24
- package/Server/Services/UserEmailService.ts +83 -17
- package/Server/Services/UserIncomingCallNumberService.ts +49 -85
- package/Server/Services/UserNotificationMethodAdminService.ts +1527 -0
- package/Server/Services/UserNotificationRuleService.ts +26 -0
- package/Server/Services/UserPushService.ts +89 -0
- package/Server/Services/UserSmsService.ts +50 -17
- package/Server/Services/UserWhatsAppService.ts +48 -15
- package/Server/Services/WorkspaceNotificationRuleService.ts +172 -220
- package/Server/Types/AnalyticsDatabase/ModelPermission.ts +9 -0
- package/Server/Types/Database/Permissions/AccessControlPermission.ts +47 -16
- package/Server/Types/Database/QueryHelper.ts +30 -0
- package/Server/Utils/APIKey/AccessPermission.ts +16 -40
- package/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.ts +59 -0
- package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +144 -0
- package/Server/Utils/ChannelVerification.ts +510 -0
- package/Server/Utils/LogRedaction.ts +576 -0
- package/Server/Utils/Logger.ts +123 -46
- package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +13 -16
- package/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.ts +94 -23
- package/Server/Utils/Monitor/MonitorAlert.ts +24 -21
- package/Server/Utils/Monitor/MonitorIncident.ts +21 -18
- package/Server/Utils/Monitor/MonitorResource.ts +29 -9
- package/Server/Utils/Monitor/MonitorResourceContext.ts +107 -0
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +442 -0
- package/Server/Utils/Monitor/NetworkInventoryUtil.ts +28 -7
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +3 -3
- package/Server/Utils/Monitor/SeriesResourceLinker.ts +96 -28
- package/Server/Utils/SessionReplay/SessionReplayGateCacheStore.ts +56 -10
- package/Server/Utils/StartServer.ts +30 -9
- package/Server/Utils/StatusPageSearchEngineIndexing.ts +33 -0
- package/Server/Utils/Telemetry/ResourceEntityFilter.ts +441 -0
- package/Server/Utils/TotpAuth.ts +137 -9
- package/Server/Utils/UserRegistrationToken.ts +182 -0
- package/Server/Utils/VerificationCode.ts +134 -0
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +488 -46
- package/Tests/App/Dashboard/AdminNotificationRulesPage.test.tsx +173 -94
- package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +1151 -0
- package/Tests/App/Dashboard/AdminUserOnCallPages.test.tsx +905 -0
- package/Tests/App/Dashboard/DashboardCommandPalette.test.tsx +338 -0
- package/Tests/App/Dashboard/InvestigationPanel.test.tsx +1 -1
- package/Tests/App/Dashboard/MonitorTypePicker.test.tsx +328 -0
- package/Tests/App/StatusPage/StatusPageIndexPageRobotsMeta.test.ts +130 -0
- package/Tests/Models/DatabaseModels/DatabaseBaseModelToJSONObjectCache.test.ts +180 -0
- package/Tests/Models/StatusPageEnableSearchEngineIndexing.test.ts +157 -0
- package/Tests/Models/UserPushCriticalAlertColumn.test.ts +172 -0
- package/Tests/Server/API/AIChatCancelAndFeedback.test.ts +23 -1
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +785 -0
- package/Tests/Server/API/BaseAPIApiKeyAuth.test.ts +21 -8
- package/Tests/Server/API/BaseAPIGetListParallel.test.ts +519 -0
- package/Tests/Server/API/CommonAPIAuthGuard.test.ts +290 -0
- package/Tests/Server/API/MicrosoftTeamsManifest.test.ts +7 -1
- package/Tests/Server/API/NotificationChannelVerificationAPI.test.ts +543 -0
- package/Tests/Server/API/StatusPageOverviewCache.test.ts +474 -0
- package/Tests/Server/API/StatusPageSeoSearchEngineIndexing.test.ts +189 -0
- package/Tests/Server/API/UserIncomingCallNumberApi.test.ts +108 -18
- package/Tests/Server/API/UserNotificationMethodAdminAPI.test.ts +963 -0
- package/Tests/Server/API/UserPushCriticalAlertsApi.test.ts +114 -0
- package/Tests/Server/API/UserSmsApi.test.ts +107 -14
- package/Tests/Server/API/UserTotpAuthAPI.test.ts +427 -0
- package/Tests/Server/Infrastructure/InMemoryTTLCache.test.ts +158 -0
- package/Tests/Server/Infrastructure/Postgres/DeviceRoleAndDeclaredLinkParentMigration.test.ts +9 -60
- package/Tests/Server/Infrastructure/Postgres/FixTotpOtpUrlAlgorithmMigration.test.ts +315 -0
- package/Tests/Server/Middleware/ProjectAuthorizationApiKeyMiddleware.test.ts +24 -15
- package/Tests/Server/Middleware/UserAuthorization.test.ts +79 -0
- package/Tests/Server/Middleware/VerificationCodeRateLimit.test.ts +775 -0
- package/Tests/Server/Services/AddNetworkDeviceReachabilityColumnsMigration.test.ts +280 -0
- package/Tests/Server/Services/AnalyticsDatabasePaginationStability.test.ts +33 -13
- package/Tests/Server/Services/AnalyticsDatabaseSortKeyBoundary.test.ts +658 -0
- package/Tests/Server/Services/ApiKeyPermissionService.test.ts +347 -0
- package/Tests/Server/Services/CriticalOnCallAlertDelivery.test.ts +458 -0
- package/Tests/Server/Services/CriticalPushAlertPayload.test.ts +301 -0
- package/Tests/Server/Services/DatabaseServiceAtomicIncrement.test.ts +143 -0
- package/Tests/Server/Services/DatabaseServiceUpdateDebugLogging.test.ts +282 -0
- package/Tests/Server/Services/DeliverNotificationForRuleExtraction.test.ts +1 -0
- package/Tests/Server/Services/LogAggregationScanMemory.test.ts +421 -0
- package/Tests/Server/Services/LogAggregationService.test.ts +2 -2
- package/Tests/Server/Services/NetworkSiteService.test.ts +56 -2
- package/Tests/Server/Services/NotificationChannelCodeIssuance.test.ts +401 -0
- package/Tests/Server/Services/PushNotificationDeliveryOptions.test.ts +204 -0
- package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +21 -1
- package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +290 -0
- package/Tests/Server/Services/TelemetryResourceFacetFilters.test.ts +267 -0
- package/Tests/Server/Services/UserNotificationMethodAdminService.test.ts +948 -0
- package/Tests/Server/Services/UserNotificationRuleExecuteItem.test.ts +1 -0
- package/Tests/Server/Services/UserPushCriticalAlertToggle.test.ts +255 -0
- package/Tests/Server/Services/UserTotpAuthEnrolment.test.ts +218 -0
- package/Tests/Server/Services/WorkspaceNotificationRuleTestRuleChannels.test.ts +702 -0
- package/Tests/Server/TestingUtils/AuthenticatorApp.ts +248 -0
- package/Tests/Server/Types/Database/Permissions/AccessControlPermission.test.ts +165 -0
- package/Tests/Server/Types/Database/Permissions/NotificationChannelVerificationColumns.test.ts +135 -0
- package/Tests/Server/Types/Database/Permissions/OnCallScheduleRelationSelect.test.ts +504 -0
- package/Tests/Server/Types/Database/QueryHelperFindWithSameTextAnyOf.test.ts +91 -0
- package/Tests/Server/Types/Workflow/Components/JsonToText.test.ts +384 -0
- package/Tests/Server/Types/Workflow/Components/MergeJson.test.ts +403 -0
- package/Tests/Server/Utils/APIKey/AccessPermission.test.ts +48 -36
- package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +213 -0
- package/Tests/Server/Utils/Browser.test.ts +162 -0
- package/Tests/Server/Utils/ChannelVerification.test.ts +689 -0
- package/Tests/Server/Utils/Express.test.ts +371 -0
- package/Tests/Server/Utils/LogRedaction.test.ts +415 -0
- package/Tests/Server/Utils/LoggerCredentialLeak.test.ts +245 -0
- package/Tests/Server/Utils/Monitor/Criteria/CustomCodeMonitorCriteria.test.ts +707 -0
- package/Tests/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.test.ts +698 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingEmailBodyCriteria.test.ts +243 -0
- package/Tests/Server/Utils/Monitor/Criteria/IncomingRequestBodyCriteria.test.ts +278 -0
- package/Tests/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.test.ts +374 -4
- package/Tests/Server/Utils/Monitor/MonitorAlertResourceLinking.test.ts +160 -20
- package/Tests/Server/Utils/Monitor/MonitorDependencySuppressionCreatorSkip.test.ts +13 -8
- package/Tests/Server/Utils/Monitor/MonitorIncidentResourceLinking.test.ts +162 -18
- package/Tests/Server/Utils/Monitor/MonitorResourceContext.test.ts +349 -0
- package/Tests/Server/Utils/Monitor/MonitorResourceIngestedStepSelection.test.ts +455 -0
- package/Tests/Server/Utils/Monitor/MonitorStepResourceIdentity.test.ts +690 -0
- package/Tests/Server/Utils/Monitor/MonitorSummaryPersistence.test.ts +7 -2
- package/Tests/Server/Utils/Monitor/NetworkDeviceReachabilityRoundTrip.test.ts +369 -0
- package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +86 -8
- package/Tests/Server/Utils/Monitor/SeriesResourceLinker.test.ts +92 -18
- package/Tests/Server/Utils/PrivacyFilterUtil.test.ts +64 -0
- package/Tests/Server/Utils/PushNotificationUtilCreators.test.ts +267 -0
- package/Tests/Server/Utils/SessionReplay/SessionReplayGateCacheStore.test.ts +207 -0
- package/Tests/Server/Utils/StartServerBodyVerify.test.ts +335 -0
- package/Tests/Server/Utils/StatusPageSearchEngineIndexing.test.ts +60 -0
- package/Tests/Server/Utils/Telemetry/OneuptimeLabel.test.ts +439 -0
- package/Tests/Server/Utils/Telemetry/ResourceEntityFilter.test.ts +435 -0
- package/Tests/Server/Utils/TotpAuth.test.ts +719 -0
- package/Tests/Server/Utils/UserRegistrationToken.test.ts +322 -0
- package/Tests/Server/Utils/VerificationCode.test.ts +296 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChannelSend.test.ts +607 -62
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsInstalledTeamIdSpace.test.ts +778 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsTeamInstalls.test.ts +44 -10
- package/Tests/Types/API/HostnameFromAuthority.test.ts +164 -0
- package/Tests/Types/AutoRemediation/AutoRemediationSuggestionStatus.test.ts +192 -0
- package/Tests/Types/Call/CallRequest.test.ts +189 -0
- package/Tests/Types/Dashboard/DashboardSize.test.ts +226 -0
- package/Tests/Types/Database/AccessControl/ColumnAccessControlCache.test.ts +344 -0
- package/Tests/Types/Database/DatabasePropertyFindOperator.test.ts +518 -0
- package/Tests/Types/Database/TableColumnMetadataCache.test.ts +286 -0
- package/Tests/Types/Incident/IncidentSlaStatus.test.ts +191 -0
- package/Tests/Types/Metrics/MetricDashboardMetricType.test.ts +278 -0
- package/Tests/Types/Metrics/MetricPipelineRuleType.test.ts +517 -0
- package/Tests/Types/Monitor/IncomingMonitorDefaultCriteria.test.ts +470 -0
- package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +6 -4
- package/Tests/Types/Monitor/MonitorStep.test.ts +100 -0
- package/Tests/Types/Monitor/MonitorTypeKeywords.test.ts +360 -0
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCatalog.test.ts +262 -5
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationCoverage.test.ts +1 -1
- package/Tests/Types/Monitor/Recommendation/MonitorRecommendationNotificationMode.test.ts +1 -1
- package/Tests/Types/Monitor/ServiceAlertTemplates.test.ts +905 -0
- package/Tests/Types/Service/ServiceLanguage.test.ts +255 -0
- package/Tests/Types/StatusPage/SearchEngineIndexing.test.ts +86 -0
- package/Tests/Types/Telemetry/ResourceEntityFacet.test.ts +254 -0
- package/Tests/Types/TextRandomGeneration.test.ts +211 -0
- package/Tests/UI/Components/Button.test.tsx +175 -1
- package/Tests/UI/Components/CardSelect.test.tsx +1021 -0
- package/Tests/UI/Components/CodeBlockLanguages.test.tsx +236 -0
- package/Tests/UI/Components/CommandPalette/CommandPalette.test.tsx +568 -0
- package/Tests/UI/Components/CommandPalette/CommandPaletteKeyboard.test.tsx +239 -0
- package/Tests/UI/Components/CommandPalette/CommandPaletteProviders.test.tsx +400 -0
- package/Tests/UI/Components/CommandPalette/PaletteFilter.test.ts +234 -0
- package/Tests/UI/Components/CommandPalette/RecentCommands.test.ts +97 -0
- package/Tests/UI/Components/CountModelSideMenuItemGuard.test.tsx +198 -0
- package/Tests/UI/Components/FeedItemSafeMode.test.tsx +1 -1
- package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +267 -0
- package/Tests/UI/Components/List.test.tsx +9 -2
- package/Tests/UI/Components/ListLoadingStates.test.tsx +173 -0
- package/Tests/UI/Components/MarkdownLazy.test.tsx +113 -0
- package/Tests/UI/Components/MarkdownMermaidRetry.test.tsx +110 -0
- package/Tests/UI/Components/MasterPage.test.tsx +36 -1
- package/Tests/UI/Components/ModelTable/useCustomFieldColumns.test.tsx +8 -0
- package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +692 -0
- package/Tests/UI/Components/MoreMenuMotion.test.tsx +118 -0
- package/Tests/UI/Components/NavBarCommandKGating.test.tsx +178 -0
- package/Tests/UI/Components/OrderedStatesList.test.tsx +19 -2
- package/Tests/UI/Components/SideOverMotion.test.tsx +109 -0
- package/Tests/UI/Components/Skeleton.test.tsx +71 -0
- package/Tests/UI/Components/TableLoadingStates.test.tsx +279 -0
- package/Tests/UI/Components/Tabs.test.tsx +24 -0
- package/Tests/UI/Components/Toast.test.tsx +130 -7
- package/Tests/UI/Components/ToastStacking.test.tsx +198 -0
- package/Tests/UI/Utils/Dropdown.test.ts +423 -0
- package/Tests/UI/Utils/ModelAPITenantHeader.test.ts +122 -0
- package/Tests/UI/Utils/ModelListCache.test.ts +338 -0
- package/Tests/UI/Utils/ProjectListCacheInvalidation.test.ts +225 -0
- package/Tests/Utils/API.test.ts +16 -2
- package/Tests/Utils/Dashboard/Components/DashboardKubernetesResourceListShared.test.ts +347 -0
- package/Tests/Utils/Dashboard/Components/DashboardListSharedArgs.test.ts +259 -0
- package/Tests/Utils/Dashboard/Components/DashboardMonitorListComponent.test.ts +466 -0
- package/Tests/Utils/Monitor/MonitorMetricType.test.ts +66 -1
- package/Tests/Utils/Monitor/NetworkTopologyUtil.test.ts +115 -6
- package/Tests/Utils/NetworkDevice/DeviceReachabilityUtil.test.ts +610 -0
- package/Tests/Utils/NetworkSite/SiteStatusRollupUtil.test.ts +114 -45
- package/Tests/Utils/Rum/UrlScrubberSegments.test.ts +362 -0
- package/Types/API/Hostname.ts +79 -0
- package/Types/Database/AccessControl/ColumnAccessControl.ts +33 -11
- package/Types/Database/AccessControl/ColumnBillingAccessControl.ts +33 -11
- package/Types/Database/DatabaseProperty.ts +38 -0
- package/Types/Database/TableColumn.ts +34 -7
- package/Types/Email/EmailTemplateType.ts +1 -0
- package/Types/Events/Recurring.ts +16 -1
- package/Types/Monitor/MonitorCriteriaInstance.ts +41 -20
- package/Types/Monitor/MonitorStep.ts +13 -1
- package/Types/Monitor/MonitorType.ts +345 -40
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +131 -8
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +48 -8
- package/Types/Monitor/SSLMonitor/SslMonitorResponse.ts +43 -0
- package/Types/Monitor/ServiceAlertTemplates.ts +1352 -0
- package/Types/Permission.ts +35 -0
- package/Types/PushNotification/AndroidNotificationChannel.ts +26 -0
- package/Types/PushNotification/PushNotificationMessage.ts +15 -0
- package/Types/PushNotification/PushNotificationRequest.ts +8 -16
- package/Types/Service/ServiceLanguage.ts +144 -0
- package/Types/StatusPage/SearchEngineIndexing.ts +61 -0
- package/Types/Telemetry/ResourceEntityFacet.ts +211 -0
- package/Types/Text.ts +111 -19
- package/UI/Components/Button/Button.tsx +27 -14
- package/UI/Components/CardSelect/CardSelect.tsx +714 -105
- package/UI/Components/CodeBlock/CodeBlock.tsx +54 -7
- package/UI/Components/CodeBlock/LanguageRegistry.ts +103 -0
- package/UI/Components/CommandPalette/CommandPalette.tsx +790 -0
- package/UI/Components/CommandPalette/PaletteFilter.ts +196 -0
- package/UI/Components/CommandPalette/PaletteRow.tsx +173 -0
- package/UI/Components/CommandPalette/RecentCommands.ts +57 -0
- package/UI/Components/CommandPalette/Types.ts +49 -0
- package/UI/Components/CommandPalette/UseProviderSearch.ts +129 -0
- package/UI/Components/Dropdown/Dropdown.tsx +6 -1
- package/UI/Components/EmptyState/EmptyState.tsx +8 -1
- package/UI/Components/Feed/FeedItem.tsx +1 -1
- package/UI/Components/Footer/Footer.tsx +32 -6
- package/UI/Components/Forms/Fields/FormField.tsx +3 -0
- package/UI/Components/Forms/Types/Field.ts +8 -0
- package/UI/Components/List/List.tsx +37 -5
- package/UI/Components/List/ListSkeleton.tsx +54 -0
- package/UI/Components/Loader/PageLoader.tsx +29 -8
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +26 -4
- package/UI/Components/Markdown.tsx/LazyMarkdownViewer.tsx +23 -2
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +71 -26
- package/UI/Components/MasterPage/MasterPage.tsx +24 -11
- package/UI/Components/Modal/Modal.tsx +2 -2
- package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
- package/UI/Components/ModelTable/useCustomFieldColumns.ts +11 -5
- package/UI/Components/MoreMenu/MoreMenu.tsx +39 -1
- package/UI/Components/Navbar/NavBar.tsx +14 -1
- package/UI/Components/OrderedStatesList/OrderedStatesList.tsx +50 -5
- package/UI/Components/SideMenu/CountModelSideMenuItem.tsx +40 -1
- package/UI/Components/SideOver/SideOver.tsx +37 -2
- package/UI/Components/Skeleton/Skeleton.tsx +53 -0
- package/UI/Components/Table/Table.tsx +74 -44
- package/UI/Components/Table/TableSkeletonRows.tsx +141 -0
- package/UI/Components/Tabs/Tab.tsx +1 -1
- package/UI/Components/Toast/Toast.tsx +118 -53
- package/UI/Components/Toast/ToastInit.tsx +82 -32
- package/UI/Styles/Theme.css +40 -0
- package/UI/Utils/ModelAPI/ModelAPI.ts +20 -10
- package/UI/Utils/ModelListCache.ts +188 -0
- package/UI/Utils/Project.ts +29 -0
- package/Utils/API.ts +6 -1
- package/Utils/Monitor/MonitorMetricType.ts +16 -1
- package/Utils/Monitor/NetworkTopologyUtil.ts +60 -8
- package/Utils/NetworkDevice/DeviceReachabilityUtil.ts +262 -0
- package/Utils/NetworkSite/SiteStatusRollupUtil.ts +41 -24
- package/Utils/Telemetry/CrossSignalScope.ts +75 -4
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +20 -4
- package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDevice.js +66 -0
- package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +14 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPage.js +60 -0
- package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
- package/build/dist/Models/DatabaseModels/StatusPageOidc.js +2 -0
- package/build/dist/Models/DatabaseModels/StatusPageOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserCall.js +101 -3
- package/build/dist/Models/DatabaseModels/UserCall.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserEmail.js +101 -3
- package/build/dist/Models/DatabaseModels/UserEmail.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js +101 -3
- package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserPush.js +38 -0
- package/build/dist/Models/DatabaseModels/UserPush.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserSMS.js +101 -3
- package/build/dist/Models/DatabaseModels/UserSMS.js.map +1 -1
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js +100 -2
- package/build/dist/Models/DatabaseModels/UserWhatsApp.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
- package/build/dist/Server/API/AIChatAPI.js +48 -35
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/BaseAPI.js +69 -13
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/CommonAPI.js +59 -0
- package/build/dist/Server/API/CommonAPI.js.map +1 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +20 -6
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/SlackAPI.js +13 -10
- package/build/dist/Server/API/SlackAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +745 -673
- package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
- package/build/dist/Server/API/TelemetryAPI.js +34 -3
- package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
- package/build/dist/Server/API/UserCallAPI.js +42 -38
- package/build/dist/Server/API/UserCallAPI.js.map +1 -1
- package/build/dist/Server/API/UserEmailAPI.js +42 -38
- package/build/dist/Server/API/UserEmailAPI.js.map +1 -1
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js +37 -32
- package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -1
- package/build/dist/Server/API/UserNotificationMethodAdminAPI.js +341 -0
- package/build/dist/Server/API/UserNotificationMethodAdminAPI.js.map +1 -0
- package/build/dist/Server/API/UserPushAPI.js +95 -2
- package/build/dist/Server/API/UserPushAPI.js.map +1 -1
- package/build/dist/Server/API/UserSmsAPI.js +42 -38
- package/build/dist/Server/API/UserSmsAPI.js.map +1 -1
- package/build/dist/Server/API/UserWhatsAppAPI.js +42 -40
- package/build/dist/Server/API/UserWhatsAppAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js +89 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787500000000-AddEnableSearchEngineIndexingToStatusPage.js +23 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787500000000-AddEnableSearchEngineIndexingToStatusPage.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787600000000-AddNetworkDeviceReachabilityColumns.js +34 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787600000000-AddNetworkDeviceReachabilityColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.js +40 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787700000000-FixTotpOtpUrlAlgorithm.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +6 -2
- package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/VerificationCodeRateLimit.js +393 -0
- package/build/dist/Server/Middleware/VerificationCodeRateLimit.js.map +1 -0
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +136 -0
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/ApiKeyPermissionService.js +90 -1
- package/build/dist/Server/Services/ApiKeyPermissionService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +89 -6
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +7 -0
- package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
- package/build/dist/Server/Services/LogService.js +16 -0
- package/build/dist/Server/Services/LogService.js.map +1 -1
- package/build/dist/Server/Services/NetworkSiteService.js +12 -0
- package/build/dist/Server/Services/NetworkSiteService.js.map +1 -1
- package/build/dist/Server/Services/PushNotificationService.js +69 -30
- package/build/dist/Server/Services/PushNotificationService.js.map +1 -1
- package/build/dist/Server/Services/SpanService.js +16 -0
- package/build/dist/Server/Services/SpanService.js.map +1 -1
- package/build/dist/Server/Services/TeamMemberService.js +43 -7
- package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
- package/build/dist/Server/Services/TraceAggregationService.js +2 -0
- package/build/dist/Server/Services/TraceAggregationService.js.map +1 -1
- package/build/dist/Server/Services/UserCallService.js +54 -22
- package/build/dist/Server/Services/UserCallService.js.map +1 -1
- package/build/dist/Server/Services/UserEmailService.js +78 -17
- package/build/dist/Server/Services/UserEmailService.js.map +1 -1
- package/build/dist/Server/Services/UserIncomingCallNumberService.js +45 -74
- package/build/dist/Server/Services/UserIncomingCallNumberService.js.map +1 -1
- package/build/dist/Server/Services/UserNotificationMethodAdminService.js +1117 -0
- package/build/dist/Server/Services/UserNotificationMethodAdminService.js.map +1 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js +20 -0
- package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Services/UserPushService.js +77 -0
- package/build/dist/Server/Services/UserPushService.js.map +1 -1
- package/build/dist/Server/Services/UserSmsService.js +50 -17
- package/build/dist/Server/Services/UserSmsService.js.map +1 -1
- package/build/dist/Server/Services/UserWhatsAppService.js +48 -15
- package/build/dist/Server/Services/UserWhatsAppService.js.map +1 -1
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js +137 -164
- package/build/dist/Server/Services/WorkspaceNotificationRuleService.js.map +1 -1
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +9 -0
- package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/Permissions/AccessControlPermission.js +21 -13
- package/build/dist/Server/Types/Database/Permissions/AccessControlPermission.js.map +1 -1
- package/build/dist/Server/Types/Database/QueryHelper.js +27 -0
- package/build/dist/Server/Types/Database/QueryHelper.js.map +1 -1
- package/build/dist/Server/Utils/APIKey/AccessPermission.js +9 -32
- package/build/dist/Server/Utils/APIKey/AccessPermission.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js +46 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.js.map +1 -1
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +87 -0
- package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
- package/build/dist/Server/Utils/ChannelVerification.js +348 -0
- package/build/dist/Server/Utils/ChannelVerification.js.map +1 -0
- package/build/dist/Server/Utils/LogRedaction.js +449 -0
- package/build/dist/Server/Utils/LogRedaction.js.map +1 -0
- package/build/dist/Server/Utils/Logger.js +98 -45
- package/build/dist/Server/Utils/Logger.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +13 -12
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js +65 -13
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js +20 -17
- package/build/dist/Server/Utils/Monitor/MonitorAlert.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js +17 -14
- package/build/dist/Server/Utils/Monitor/MonitorIncident.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResource.js +20 -3
- package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js +95 -0
- package/build/dist/Server/Utils/Monitor/MonitorResourceContext.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js +313 -0
- package/build/dist/Server/Utils/Monitor/MonitorStepResourceIdentity.js.map +1 -0
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +27 -7
- package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +3 -3
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js +67 -26
- package/build/dist/Server/Utils/Monitor/SeriesResourceLinker.js.map +1 -1
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCacheStore.js +29 -10
- package/build/dist/Server/Utils/SessionReplay/SessionReplayGateCacheStore.js.map +1 -1
- package/build/dist/Server/Utils/StartServer.js +10 -7
- package/build/dist/Server/Utils/StartServer.js.map +1 -1
- package/build/dist/Server/Utils/StatusPageSearchEngineIndexing.js +24 -0
- package/build/dist/Server/Utils/StatusPageSearchEngineIndexing.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js +311 -0
- package/build/dist/Server/Utils/Telemetry/ResourceEntityFilter.js.map +1 -0
- package/build/dist/Server/Utils/TotpAuth.js +127 -8
- package/build/dist/Server/Utils/TotpAuth.js.map +1 -1
- package/build/dist/Server/Utils/UserRegistrationToken.js +170 -0
- package/build/dist/Server/Utils/UserRegistrationToken.js.map +1 -0
- package/build/dist/Server/Utils/VerificationCode.js +120 -0
- package/build/dist/Server/Utils/VerificationCode.js.map +1 -0
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +366 -37
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/API/Hostname.js +63 -0
- package/build/dist/Types/API/Hostname.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js +20 -6
- package/build/dist/Types/Database/AccessControl/ColumnAccessControl.js.map +1 -1
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js +20 -6
- package/build/dist/Types/Database/AccessControl/ColumnBillingAccessControl.js.map +1 -1
- package/build/dist/Types/Database/DatabaseProperty.js +38 -0
- package/build/dist/Types/Database/DatabaseProperty.js.map +1 -1
- package/build/dist/Types/Database/TableColumn.js +24 -6
- package/build/dist/Types/Database/TableColumn.js.map +1 -1
- package/build/dist/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Events/Recurring.js +13 -1
- package/build/dist/Types/Events/Recurring.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +42 -21
- package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorStep.js +9 -1
- package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
- package/build/dist/Types/Monitor/MonitorType.js +330 -31
- package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js +77 -5
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationCatalog.js.map +1 -1
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js +18 -6
- package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationTypes.js.map +1 -1
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js +1028 -0
- package/build/dist/Types/Monitor/ServiceAlertTemplates.js.map +1 -0
- package/build/dist/Types/Permission.js +33 -0
- package/build/dist/Types/Permission.js.map +1 -1
- package/build/dist/Types/PushNotification/AndroidNotificationChannel.js +27 -0
- package/build/dist/Types/PushNotification/AndroidNotificationChannel.js.map +1 -0
- package/build/dist/Types/Service/ServiceLanguage.js +96 -0
- package/build/dist/Types/Service/ServiceLanguage.js.map +1 -0
- package/build/dist/Types/StatusPage/SearchEngineIndexing.js +55 -0
- package/build/dist/Types/StatusPage/SearchEngineIndexing.js.map +1 -0
- package/build/dist/Types/Telemetry/ResourceEntityFacet.js +156 -0
- package/build/dist/Types/Telemetry/ResourceEntityFacet.js.map +1 -0
- package/build/dist/Types/Text.js +82 -17
- package/build/dist/Types/Text.js.map +1 -1
- package/build/dist/UI/Components/Button/Button.js +22 -14
- package/build/dist/UI/Components/Button/Button.js.map +1 -1
- package/build/dist/UI/Components/CardSelect/CardSelect.js +360 -40
- package/build/dist/UI/Components/CardSelect/CardSelect.js.map +1 -1
- package/build/dist/UI/Components/CodeBlock/CodeBlock.js +35 -3
- package/build/dist/UI/Components/CodeBlock/CodeBlock.js.map +1 -1
- package/build/dist/UI/Components/CodeBlock/LanguageRegistry.js +57 -0
- package/build/dist/UI/Components/CodeBlock/LanguageRegistry.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js +439 -0
- package/build/dist/UI/Components/CommandPalette/CommandPalette.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/PaletteFilter.js +135 -0
- package/build/dist/UI/Components/CommandPalette/PaletteFilter.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/PaletteRow.js +83 -0
- package/build/dist/UI/Components/CommandPalette/PaletteRow.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/RecentCommands.js +47 -0
- package/build/dist/UI/Components/CommandPalette/RecentCommands.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/Types.js +2 -0
- package/build/dist/UI/Components/CommandPalette/Types.js.map +1 -0
- package/build/dist/UI/Components/CommandPalette/UseProviderSearch.js +88 -0
- package/build/dist/UI/Components/CommandPalette/UseProviderSearch.js.map +1 -0
- package/build/dist/UI/Components/Dropdown/Dropdown.js +6 -1
- package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
- package/build/dist/UI/Components/EmptyState/EmptyState.js +1 -1
- package/build/dist/UI/Components/EmptyState/EmptyState.js.map +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/Footer/Footer.js +7 -4
- package/build/dist/UI/Components/Footer/Footer.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/List/List.js +19 -5
- package/build/dist/UI/Components/List/List.js.map +1 -1
- package/build/dist/UI/Components/List/ListSkeleton.js +21 -0
- package/build/dist/UI/Components/List/ListSkeleton.js.map +1 -0
- package/build/dist/UI/Components/Loader/PageLoader.js +15 -5
- package/build/dist/UI/Components/Loader/PageLoader.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +16 -3
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js +13 -1
- package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +52 -25
- package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
- package/build/dist/UI/Components/MasterPage/MasterPage.js +10 -2
- package/build/dist/UI/Components/MasterPage/MasterPage.js.map +1 -1
- package/build/dist/UI/Components/Modal/Modal.js +2 -2
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js +9 -2
- package/build/dist/UI/Components/ModelTable/useCustomFieldColumns.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +32 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/Navbar/NavBar.js +5 -1
- package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
- package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js +29 -5
- package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js.map +1 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js +23 -1
- package/build/dist/UI/Components/SideMenu/CountModelSideMenuItem.js.map +1 -1
- package/build/dist/UI/Components/SideOver/SideOver.js +23 -2
- package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
- package/build/dist/UI/Components/Skeleton/Skeleton.js +23 -0
- package/build/dist/UI/Components/Skeleton/Skeleton.js.map +1 -0
- package/build/dist/UI/Components/Table/Table.js +35 -24
- package/build/dist/UI/Components/Table/Table.js.map +1 -1
- package/build/dist/UI/Components/Table/TableSkeletonRows.js +52 -0
- package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -0
- package/build/dist/UI/Components/Tabs/Tab.js +1 -1
- package/build/dist/UI/Components/Tabs/Tab.js.map +1 -1
- package/build/dist/UI/Components/Toast/Toast.js +77 -23
- package/build/dist/UI/Components/Toast/Toast.js.map +1 -1
- package/build/dist/UI/Components/Toast/ToastInit.js +37 -15
- package/build/dist/UI/Components/Toast/ToastInit.js.map +1 -1
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js +18 -9
- package/build/dist/UI/Utils/ModelAPI/ModelAPI.js.map +1 -1
- package/build/dist/UI/Utils/ModelListCache.js +126 -0
- package/build/dist/UI/Utils/ModelListCache.js.map +1 -0
- package/build/dist/UI/Utils/Project.js +24 -1
- package/build/dist/UI/Utils/Project.js.map +1 -1
- package/build/dist/Utils/API.js +6 -1
- package/build/dist/Utils/API.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +13 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +34 -7
- package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js +177 -0
- package/build/dist/Utils/NetworkDevice/DeviceReachabilityUtil.js.map +1 -0
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js +23 -27
- package/build/dist/Utils/NetworkSite/SiteStatusRollupUtil.js.map +1 -1
- package/build/dist/Utils/Telemetry/CrossSignalScope.js +44 -4
- package/build/dist/Utils/Telemetry/CrossSignalScope.js.map +1 -1
- package/jest.config.json +1 -1
- package/package.json +2 -3
- package/Server/Utils/Monitor/MonitorClusterContext.ts +0 -182
- package/Tests/__mocks__/otpauth.js +0 -30
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js +0 -141
- package/build/dist/Server/Utils/Monitor/MonitorClusterContext.js.map +0 -1
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
import MergeJSON from "../../../../../Server/Types/Workflow/Components/JSON/MergeJson";
|
|
2
|
+
import {
|
|
3
|
+
RunOptions,
|
|
4
|
+
RunReturnType,
|
|
5
|
+
} from "../../../../../Server/Types/Workflow/ComponentCode";
|
|
6
|
+
import Exception from "../../../../../Types/Exception/Exception";
|
|
7
|
+
import { JSONObject } from "../../../../../Types/JSON";
|
|
8
|
+
import ObjectID from "../../../../../Types/ObjectID";
|
|
9
|
+
import ComponentMetadata, {
|
|
10
|
+
Port,
|
|
11
|
+
} from "../../../../../Types/Workflow/Component";
|
|
12
|
+
import ComponentID from "../../../../../Types/Workflow/ComponentID";
|
|
13
|
+
import { describe, expect, test } from "@jest/globals";
|
|
14
|
+
|
|
15
|
+
/*
|
|
16
|
+
* Fixture bundling the RunOptions passed to a component together with the
|
|
17
|
+
* spy-able mocks embedded inside it, so a test can both drive the component and
|
|
18
|
+
* assert on how the component talked back through `onError` / `log`.
|
|
19
|
+
*/
|
|
20
|
+
interface OptionsFixture {
|
|
21
|
+
options: RunOptions;
|
|
22
|
+
onError: jest.Mock;
|
|
23
|
+
log: jest.Mock;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/*
|
|
27
|
+
* Build a deterministic RunOptions object. `onError` echoes the exception it is
|
|
28
|
+
* given (mirroring the real runner, which returns the exception so callers can
|
|
29
|
+
* `throw options.onError(...)`) while recording that it was invoked.
|
|
30
|
+
*/
|
|
31
|
+
function makeOptions(): OptionsFixture {
|
|
32
|
+
const log: jest.Mock = jest.fn();
|
|
33
|
+
const onError: jest.Mock = jest.fn((exception: Exception): Exception => {
|
|
34
|
+
return exception;
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
return {
|
|
38
|
+
log,
|
|
39
|
+
onError,
|
|
40
|
+
options: {
|
|
41
|
+
log: log as RunOptions["log"],
|
|
42
|
+
workflowLogId: ObjectID.generate(),
|
|
43
|
+
workflowId: ObjectID.generate(),
|
|
44
|
+
projectId: ObjectID.generate(),
|
|
45
|
+
onError: onError as RunOptions["onError"],
|
|
46
|
+
executeWorkflow: async (): Promise<void> => {},
|
|
47
|
+
} as RunOptions,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/*
|
|
52
|
+
* Convenience wrapper: run a fresh MergeJSON with the supplied args and return
|
|
53
|
+
* both the fixture (for `onError` assertions) and the promise, without awaiting,
|
|
54
|
+
* so error-path tests can use `expect(...).rejects`.
|
|
55
|
+
*/
|
|
56
|
+
function runMerge(args: JSONObject): {
|
|
57
|
+
fixture: OptionsFixture;
|
|
58
|
+
result: Promise<RunReturnType>;
|
|
59
|
+
} {
|
|
60
|
+
const fixture: OptionsFixture = makeOptions();
|
|
61
|
+
const result: Promise<RunReturnType> = new MergeJSON().run(
|
|
62
|
+
args,
|
|
63
|
+
fixture.options,
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
return { fixture, result };
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
describe("MergeJSON constructor and metadata", () => {
|
|
70
|
+
test("wires up the Merge JSON component metadata", () => {
|
|
71
|
+
const component: MergeJSON = new MergeJSON();
|
|
72
|
+
const metadata: ComponentMetadata = component.getMetadata();
|
|
73
|
+
|
|
74
|
+
expect(metadata.id).toBe(ComponentID.MergeJson);
|
|
75
|
+
expect(metadata.title).toBe("Merge JSON");
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test("exposes both success and error out ports", () => {
|
|
79
|
+
const metadata: ComponentMetadata = new MergeJSON().getMetadata();
|
|
80
|
+
const portIds: Array<string> = metadata.outPorts.map((p: Port): string => {
|
|
81
|
+
return p.id;
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
expect(portIds).toContain("success");
|
|
85
|
+
expect(portIds).toContain("error");
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
describe("MergeJSON successful merges", () => {
|
|
90
|
+
test("merges two disjoint objects and routes to the success port", async () => {
|
|
91
|
+
const {
|
|
92
|
+
fixture,
|
|
93
|
+
result,
|
|
94
|
+
}: { fixture: OptionsFixture; result: Promise<RunReturnType> } = runMerge({
|
|
95
|
+
json1: { a: 1 },
|
|
96
|
+
json2: { b: 2 },
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
const value: RunReturnType = await result;
|
|
100
|
+
|
|
101
|
+
expect(value.executePort?.id).toBe("success");
|
|
102
|
+
expect(value.returnValues).toEqual({ json: { a: 1, b: 2 } });
|
|
103
|
+
expect(fixture.onError).not.toHaveBeenCalled();
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
test("gives json2 precedence over json1 on conflicting keys", async () => {
|
|
107
|
+
const value: RunReturnType = await runMerge({
|
|
108
|
+
json1: { shared: "from-json1", onlyOne: 1 },
|
|
109
|
+
json2: { shared: "from-json2", onlyTwo: 2 },
|
|
110
|
+
}).result;
|
|
111
|
+
|
|
112
|
+
expect(value.returnValues["json"]).toEqual({
|
|
113
|
+
shared: "from-json2",
|
|
114
|
+
onlyOne: 1,
|
|
115
|
+
onlyTwo: 2,
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test("performs a shallow merge so a nested value from json2 fully replaces json1", async () => {
|
|
120
|
+
const value: RunReturnType = await runMerge({
|
|
121
|
+
json1: { user: { name: "alice", age: 30 } },
|
|
122
|
+
json2: { user: { name: "bob" } },
|
|
123
|
+
}).result;
|
|
124
|
+
|
|
125
|
+
/*
|
|
126
|
+
* A deep merge would keep `age`; the spread-based implementation replaces
|
|
127
|
+
* the whole nested object, so only json2's `user` survives.
|
|
128
|
+
*/
|
|
129
|
+
expect(value.returnValues["json"]).toEqual({ user: { name: "bob" } });
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
test("returns an empty object when both inputs are empty objects", async () => {
|
|
133
|
+
const value: RunReturnType = await runMerge({
|
|
134
|
+
json1: {},
|
|
135
|
+
json2: {},
|
|
136
|
+
}).result;
|
|
137
|
+
|
|
138
|
+
expect(value.returnValues).toEqual({ json: {} });
|
|
139
|
+
expect(value.executePort?.id).toBe("success");
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
test("keeps every key when one input is empty", async () => {
|
|
143
|
+
const value: RunReturnType = await runMerge({
|
|
144
|
+
json1: {},
|
|
145
|
+
json2: { only: "json2" },
|
|
146
|
+
}).result;
|
|
147
|
+
|
|
148
|
+
expect(value.returnValues["json"]).toEqual({ only: "json2" });
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
test("does not mutate the returned json to share a reference with either input", async () => {
|
|
152
|
+
const json1: JSONObject = { a: 1 };
|
|
153
|
+
const json2: JSONObject = { b: 2 };
|
|
154
|
+
const value: RunReturnType = await runMerge({ json1, json2 }).result;
|
|
155
|
+
|
|
156
|
+
expect(value.returnValues["json"]).not.toBe(json1);
|
|
157
|
+
expect(value.returnValues["json"]).not.toBe(json2);
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
describe("MergeJSON string inputs parsed as JSON", () => {
|
|
162
|
+
test("parses json1 supplied as a JSON string before merging", async () => {
|
|
163
|
+
const value: RunReturnType = await runMerge({
|
|
164
|
+
json1: '{"a":1}',
|
|
165
|
+
json2: { b: 2 },
|
|
166
|
+
}).result;
|
|
167
|
+
|
|
168
|
+
expect(value.returnValues["json"]).toEqual({ a: 1, b: 2 });
|
|
169
|
+
expect(value.executePort?.id).toBe("success");
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
test("parses both json1 and json2 when both are JSON strings", async () => {
|
|
173
|
+
const value: RunReturnType = await runMerge({
|
|
174
|
+
json1: '{"a":1}',
|
|
175
|
+
json2: '{"b":2}',
|
|
176
|
+
}).result;
|
|
177
|
+
|
|
178
|
+
expect(value.returnValues["json"]).toEqual({ a: 1, b: 2 });
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
test("accepts lenient JSON5 syntax (single quotes, unquoted keys, trailing commas)", async () => {
|
|
182
|
+
const value: RunReturnType = await runMerge({
|
|
183
|
+
json1: "{ a: 'one', }",
|
|
184
|
+
json2: "{ b: 'two', }",
|
|
185
|
+
}).result;
|
|
186
|
+
|
|
187
|
+
expect(value.returnValues["json"]).toEqual({ a: "one", b: "two" });
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
test("surfaces a raw parse error (not routed through onError) for malformed json1", async () => {
|
|
191
|
+
const {
|
|
192
|
+
fixture,
|
|
193
|
+
result,
|
|
194
|
+
}: { fixture: OptionsFixture; result: Promise<RunReturnType> } = runMerge({
|
|
195
|
+
json1: "{ this is not valid",
|
|
196
|
+
json2: { b: 2 },
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
await expect(result).rejects.toThrow();
|
|
200
|
+
/*
|
|
201
|
+
* The parse happens outside the onError-wrapped guards, so a bad JSON
|
|
202
|
+
* string escapes as a raw parser exception rather than being routed to the
|
|
203
|
+
* component's error port.
|
|
204
|
+
*/
|
|
205
|
+
expect(fixture.onError).not.toHaveBeenCalled();
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
describe("MergeJSON json1 validation failures", () => {
|
|
210
|
+
test("rejects when json1 is undefined", async () => {
|
|
211
|
+
const {
|
|
212
|
+
fixture,
|
|
213
|
+
result,
|
|
214
|
+
}: { fixture: OptionsFixture; result: Promise<RunReturnType> } = runMerge({
|
|
215
|
+
json2: { b: 2 },
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
await expect(result).rejects.toThrow("JSON1 is undefined.");
|
|
219
|
+
expect(fixture.onError).toHaveBeenCalledTimes(1);
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
test("treats an empty string json1 as undefined", async () => {
|
|
223
|
+
const {
|
|
224
|
+
fixture,
|
|
225
|
+
result,
|
|
226
|
+
}: { fixture: OptionsFixture; result: Promise<RunReturnType> } = runMerge({
|
|
227
|
+
json1: "",
|
|
228
|
+
json2: { b: 2 },
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
await expect(result).rejects.toThrow("JSON1 is undefined.");
|
|
232
|
+
expect(fixture.onError).toHaveBeenCalled();
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
test("treats the falsy number 0 json1 as undefined", async () => {
|
|
236
|
+
const { result }: { result: Promise<RunReturnType> } = runMerge({
|
|
237
|
+
json1: 0,
|
|
238
|
+
json2: { b: 2 },
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
await expect(result).rejects.toThrow("JSON1 is undefined.");
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
test("treats a false json1 as undefined", async () => {
|
|
245
|
+
const { result }: { result: Promise<RunReturnType> } = runMerge({
|
|
246
|
+
json1: false,
|
|
247
|
+
json2: { b: 2 },
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
await expect(result).rejects.toThrow("JSON1 is undefined.");
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
test("rejects a non-object, non-string json1 with a type error", async () => {
|
|
254
|
+
const {
|
|
255
|
+
fixture,
|
|
256
|
+
result,
|
|
257
|
+
}: { fixture: OptionsFixture; result: Promise<RunReturnType> } = runMerge({
|
|
258
|
+
json1: 42,
|
|
259
|
+
json2: { b: 2 },
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
await expect(result).rejects.toThrow("JSON1 is should be of type object.");
|
|
263
|
+
expect(fixture.onError).toHaveBeenCalled();
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
test("rejects a json1 string that parses to a non-object", async () => {
|
|
267
|
+
const { result }: { result: Promise<RunReturnType> } = runMerge({
|
|
268
|
+
json1: "42",
|
|
269
|
+
json2: { b: 2 },
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
await expect(result).rejects.toThrow("JSON1 is should be of type object.");
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
describe("MergeJSON json2 validation failures", () => {
|
|
277
|
+
test("rejects when json2 is undefined", async () => {
|
|
278
|
+
const {
|
|
279
|
+
fixture,
|
|
280
|
+
result,
|
|
281
|
+
}: { fixture: OptionsFixture; result: Promise<RunReturnType> } = runMerge({
|
|
282
|
+
json1: { a: 1 },
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
await expect(result).rejects.toThrow("JSON2 is undefined.");
|
|
286
|
+
expect(fixture.onError).toHaveBeenCalledTimes(1);
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
test("treats an empty string json2 as undefined", async () => {
|
|
290
|
+
const { result }: { result: Promise<RunReturnType> } = runMerge({
|
|
291
|
+
json1: { a: 1 },
|
|
292
|
+
json2: "",
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
await expect(result).rejects.toThrow("JSON2 is undefined.");
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
test("rejects a non-object, non-string json2 with a type error", async () => {
|
|
299
|
+
const {
|
|
300
|
+
fixture,
|
|
301
|
+
result,
|
|
302
|
+
}: { fixture: OptionsFixture; result: Promise<RunReturnType> } = runMerge({
|
|
303
|
+
json1: { a: 1 },
|
|
304
|
+
json2: 42,
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
await expect(result).rejects.toThrow("JSON2 is should be of type object.");
|
|
308
|
+
expect(fixture.onError).toHaveBeenCalled();
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
test("rejects a json2 string that parses to a non-object", async () => {
|
|
312
|
+
const { result }: { result: Promise<RunReturnType> } = runMerge({
|
|
313
|
+
json1: { a: 1 },
|
|
314
|
+
json2: "true",
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
await expect(result).rejects.toThrow("JSON2 is should be of type object.");
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
describe("MergeJSON validation ordering", () => {
|
|
322
|
+
test("reports the json1 failure first when both inputs are missing", async () => {
|
|
323
|
+
const { result }: { result: Promise<RunReturnType> } = runMerge({});
|
|
324
|
+
|
|
325
|
+
await expect(result).rejects.toThrow("JSON1 is undefined.");
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
test("only reaches the json2 checks once json1 is valid", async () => {
|
|
329
|
+
const { result }: { result: Promise<RunReturnType> } = runMerge({
|
|
330
|
+
json1: { a: 1 },
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
await expect(result).rejects.toThrow("JSON2 is undefined.");
|
|
334
|
+
});
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
describe("MergeJSON out-port guards", () => {
|
|
338
|
+
/*
|
|
339
|
+
* These guards live before any argument handling. They are normally
|
|
340
|
+
* unreachable because the real metadata always defines both ports, so we
|
|
341
|
+
* drive them by swapping in a metadata clone whose out ports are missing.
|
|
342
|
+
*/
|
|
343
|
+
test("throws when the success port is missing from metadata", async () => {
|
|
344
|
+
const component: MergeJSON = new MergeJSON();
|
|
345
|
+
const base: ComponentMetadata = component.getMetadata();
|
|
346
|
+
component.setMetadata({
|
|
347
|
+
...base,
|
|
348
|
+
outPorts: base.outPorts.filter((p: Port): boolean => {
|
|
349
|
+
return p.id !== "success";
|
|
350
|
+
}),
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
const fixture: OptionsFixture = makeOptions();
|
|
354
|
+
|
|
355
|
+
await expect(
|
|
356
|
+
component.run({ json1: { a: 1 }, json2: { b: 2 } }, fixture.options),
|
|
357
|
+
).rejects.toThrow("Success port not found");
|
|
358
|
+
expect(fixture.onError).toHaveBeenCalled();
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
test("throws when the error port is missing from metadata", async () => {
|
|
362
|
+
const component: MergeJSON = new MergeJSON();
|
|
363
|
+
const base: ComponentMetadata = component.getMetadata();
|
|
364
|
+
component.setMetadata({
|
|
365
|
+
...base,
|
|
366
|
+
outPorts: base.outPorts.filter((p: Port): boolean => {
|
|
367
|
+
return p.id !== "error";
|
|
368
|
+
}),
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
const fixture: OptionsFixture = makeOptions();
|
|
372
|
+
|
|
373
|
+
await expect(
|
|
374
|
+
component.run({ json1: { a: 1 }, json2: { b: 2 } }, fixture.options),
|
|
375
|
+
).rejects.toThrow("Error port not found");
|
|
376
|
+
expect(fixture.onError).toHaveBeenCalled();
|
|
377
|
+
});
|
|
378
|
+
});
|
|
379
|
+
|
|
380
|
+
describe("MergeJSON array inputs", () => {
|
|
381
|
+
/*
|
|
382
|
+
* Arrays are truthy and `typeof [] === "object"`, so they pass the guards and
|
|
383
|
+
* get spread by index. This documents the real (arguably surprising)
|
|
384
|
+
* behavior rather than prescribing it.
|
|
385
|
+
*/
|
|
386
|
+
test("spreads array inputs by numeric index into the merged object", async () => {
|
|
387
|
+
const value: RunReturnType = await runMerge({
|
|
388
|
+
json1: ["x"],
|
|
389
|
+
json2: { a: 1 },
|
|
390
|
+
}).result;
|
|
391
|
+
|
|
392
|
+
expect(value.returnValues["json"]).toEqual({ "0": "x", a: 1 });
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
test("adds nothing for an empty array input", async () => {
|
|
396
|
+
const value: RunReturnType = await runMerge({
|
|
397
|
+
json1: { a: 1 },
|
|
398
|
+
json2: [],
|
|
399
|
+
}).result;
|
|
400
|
+
|
|
401
|
+
expect(value.returnValues["json"]).toEqual({ a: 1 });
|
|
402
|
+
});
|
|
403
|
+
});
|
|
@@ -6,10 +6,24 @@ import {
|
|
|
6
6
|
it,
|
|
7
7
|
jest,
|
|
8
8
|
} from "@jest/globals";
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
* PasswordHash has a known, pre-existing TS5.9 compile failure under ts-jest
|
|
12
|
+
* (Buffer vs BinaryLike) that breaks every suite whose import graph reaches
|
|
13
|
+
* it. Nothing here touches password hashing; stub the module before the
|
|
14
|
+
* service import graph drags it into compilation.
|
|
15
|
+
*/
|
|
16
|
+
jest.mock("../../../../Server/Utils/PasswordHash", () => {
|
|
17
|
+
return {
|
|
18
|
+
__esModule: true,
|
|
19
|
+
default: class PasswordHashStub {},
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
|
|
9
23
|
import APIKeyAccessPermission from "../../../../Server/Utils/APIKey/AccessPermission";
|
|
10
|
-
import ApiKeyPermissionService
|
|
11
|
-
|
|
12
|
-
|
|
24
|
+
import ApiKeyPermissionService, {
|
|
25
|
+
ApiKeyPermissionRow,
|
|
26
|
+
} from "../../../../Server/Services/ApiKeyPermissionService";
|
|
13
27
|
import ObjectID from "../../../../Types/ObjectID";
|
|
14
28
|
import Permission, {
|
|
15
29
|
UserGlobalAccessPermission,
|
|
@@ -27,10 +41,11 @@ import { getJestSpyOn } from "../../../Spy";
|
|
|
27
41
|
* key full control of the project; one that dropped it from the master path
|
|
28
42
|
* would break trusted internal automation. Both directions are pinned below.
|
|
29
43
|
*
|
|
30
|
-
* getApiTenantAccessPermission also reshapes
|
|
31
|
-
* runtime UserPermission shape (
|
|
32
|
-
* mapping is where a dropped label would quietly widen a
|
|
33
|
-
* it is tested against a spied service rather than a
|
|
44
|
+
* getApiTenantAccessPermission also reshapes the (cached) permission rows into
|
|
45
|
+
* the runtime UserPermission shape (labelIds carried over, block flag
|
|
46
|
+
* preserved). That mapping is where a dropped label would quietly widen a
|
|
47
|
+
* scoped permission, so it is tested against a spied service rather than a
|
|
48
|
+
* live database.
|
|
34
49
|
*/
|
|
35
50
|
|
|
36
51
|
const projectId: ObjectID = ObjectID.generate();
|
|
@@ -118,9 +133,9 @@ describe("APIKeyAccessPermission.getMasterApiTenantAccessPermission", () => {
|
|
|
118
133
|
});
|
|
119
134
|
|
|
120
135
|
describe("APIKeyAccessPermission.getApiTenantAccessPermission", () => {
|
|
121
|
-
const
|
|
136
|
+
const spyFindPermissions: jest.SpyInstance = getJestSpyOn(
|
|
122
137
|
ApiKeyPermissionService,
|
|
123
|
-
"
|
|
138
|
+
"findPermissionsByApiKeyId",
|
|
124
139
|
);
|
|
125
140
|
|
|
126
141
|
beforeEach(() => {
|
|
@@ -135,40 +150,33 @@ describe("APIKeyAccessPermission.getApiTenantAccessPermission", () => {
|
|
|
135
150
|
permission: Permission;
|
|
136
151
|
labelIds?: Array<ObjectID>;
|
|
137
152
|
isBlockPermission?: boolean;
|
|
138
|
-
}) =>
|
|
153
|
+
}) => ApiKeyPermissionRow = (data: {
|
|
139
154
|
permission: Permission;
|
|
140
155
|
labelIds?: Array<ObjectID>;
|
|
141
156
|
isBlockPermission?: boolean;
|
|
142
|
-
}):
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
label.id = id;
|
|
149
|
-
return label;
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
row.isBlockPermission = data.isBlockPermission ?? false;
|
|
153
|
-
return row;
|
|
157
|
+
}): ApiKeyPermissionRow => {
|
|
158
|
+
return {
|
|
159
|
+
permission: data.permission,
|
|
160
|
+
labelIds: data.labelIds ?? [],
|
|
161
|
+
isBlockPermission: data.isBlockPermission ?? false,
|
|
162
|
+
};
|
|
154
163
|
};
|
|
155
164
|
|
|
156
165
|
it("queries the permissions for exactly this api key", async () => {
|
|
157
|
-
|
|
166
|
+
spyFindPermissions.mockResolvedValue([] as never);
|
|
158
167
|
|
|
159
168
|
await APIKeyAccessPermission.getApiTenantAccessPermission(
|
|
160
169
|
projectId,
|
|
161
170
|
apiKeyId,
|
|
162
171
|
);
|
|
163
172
|
|
|
164
|
-
expect(
|
|
165
|
-
const arg:
|
|
166
|
-
|
|
167
|
-
expect(arg.query.apiKeyId.toString()).toBe(apiKeyId.toString());
|
|
173
|
+
expect(spyFindPermissions).toHaveBeenCalledTimes(1);
|
|
174
|
+
const arg: ObjectID = spyFindPermissions.mock.calls[0]![0] as ObjectID;
|
|
175
|
+
expect(arg.toString()).toBe(apiKeyId.toString());
|
|
168
176
|
});
|
|
169
177
|
|
|
170
178
|
it("returns just the default baseline when the key has no permissions", async () => {
|
|
171
|
-
|
|
179
|
+
spyFindPermissions.mockResolvedValue([] as never);
|
|
172
180
|
|
|
173
181
|
const perm: UserTenantAccessPermission =
|
|
174
182
|
await APIKeyAccessPermission.getApiTenantAccessPermission(
|
|
@@ -187,7 +195,7 @@ describe("APIKeyAccessPermission.getApiTenantAccessPermission", () => {
|
|
|
187
195
|
|
|
188
196
|
it("maps each stored permission row onto the tenant permission", async () => {
|
|
189
197
|
const labelId: ObjectID = ObjectID.generate();
|
|
190
|
-
|
|
198
|
+
spyFindPermissions.mockResolvedValue([
|
|
191
199
|
makeRow({
|
|
192
200
|
permission: Permission.CreateProjectIncident,
|
|
193
201
|
labelIds: [labelId],
|
|
@@ -219,7 +227,7 @@ describe("APIKeyAccessPermission.getApiTenantAccessPermission", () => {
|
|
|
219
227
|
});
|
|
220
228
|
|
|
221
229
|
it("preserves the block flag so a deny row stays a deny row", async () => {
|
|
222
|
-
|
|
230
|
+
spyFindPermissions.mockResolvedValue([
|
|
223
231
|
makeRow({
|
|
224
232
|
permission: Permission.CreateProjectIncident,
|
|
225
233
|
labelIds: [],
|
|
@@ -243,11 +251,16 @@ describe("APIKeyAccessPermission.getApiTenantAccessPermission", () => {
|
|
|
243
251
|
});
|
|
244
252
|
|
|
245
253
|
it("treats a row with no labels as an empty (unscoped) label set", async () => {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
254
|
+
/*
|
|
255
|
+
* The service DTO normalizes a stored row's undefined labels to [] (pinned
|
|
256
|
+
* in ApiKeyPermissionService.test.ts); here the mapping must keep that
|
|
257
|
+
* empty set an array rather than dropping it to undefined.
|
|
258
|
+
*/
|
|
259
|
+
spyFindPermissions.mockResolvedValue([
|
|
260
|
+
makeRow({
|
|
261
|
+
permission: Permission.CreateProjectIncident,
|
|
262
|
+
}),
|
|
263
|
+
] as never);
|
|
251
264
|
|
|
252
265
|
const perm: UserTenantAccessPermission =
|
|
253
266
|
await APIKeyAccessPermission.getApiTenantAccessPermission(
|
|
@@ -261,7 +274,6 @@ describe("APIKeyAccessPermission.getApiTenantAccessPermission", () => {
|
|
|
261
274
|
},
|
|
262
275
|
);
|
|
263
276
|
expect(mapped).toBeDefined();
|
|
264
|
-
// No crash on undefined labels, and it becomes [] rather than undefined.
|
|
265
277
|
expect(mapped!.labelIds).toEqual([]);
|
|
266
278
|
});
|
|
267
279
|
});
|