@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
|
@@ -58,6 +58,32 @@ export type DbTypes =
|
|
|
58
58
|
| JSONArray
|
|
59
59
|
| Buffer;
|
|
60
60
|
|
|
61
|
+
/*
|
|
62
|
+
* Metadata-only vanilla instances used by toJSONObject to read table-column
|
|
63
|
+
* metadata. Frozen and never exported, so they can never be mutated or escape
|
|
64
|
+
* this file. _fromJSON must never use this cache — it mutates and returns the
|
|
65
|
+
* instance it constructs.
|
|
66
|
+
*/
|
|
67
|
+
const vanillaModelCache: WeakMap<
|
|
68
|
+
{ new (): DatabaseBaseModel },
|
|
69
|
+
DatabaseBaseModel
|
|
70
|
+
> = new WeakMap();
|
|
71
|
+
|
|
72
|
+
function getVanillaModel(modelType: {
|
|
73
|
+
new (): DatabaseBaseModel;
|
|
74
|
+
}): DatabaseBaseModel {
|
|
75
|
+
let vanillaModel: DatabaseBaseModel | undefined =
|
|
76
|
+
vanillaModelCache.get(modelType);
|
|
77
|
+
|
|
78
|
+
if (!vanillaModel) {
|
|
79
|
+
vanillaModel = new modelType();
|
|
80
|
+
Object.freeze(vanillaModel);
|
|
81
|
+
vanillaModelCache.set(modelType, vanillaModel);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return vanillaModel;
|
|
85
|
+
}
|
|
86
|
+
|
|
61
87
|
export default class DatabaseBaseModel extends BaseEntity {
|
|
62
88
|
@TableColumn({
|
|
63
89
|
title: "ID",
|
|
@@ -252,8 +278,7 @@ export default class DatabaseBaseModel extends BaseEntity {
|
|
|
252
278
|
}
|
|
253
279
|
|
|
254
280
|
public getTableColumnMetadata(columnName: string): TableColumnMetadata {
|
|
255
|
-
|
|
256
|
-
return dictionary[columnName] as TableColumnMetadata;
|
|
281
|
+
return getTableColumn(this, columnName);
|
|
257
282
|
}
|
|
258
283
|
|
|
259
284
|
public hasColumn(columnName: string): boolean {
|
|
@@ -275,8 +300,10 @@ export default class DatabaseBaseModel extends BaseEntity {
|
|
|
275
300
|
}
|
|
276
301
|
|
|
277
302
|
public getColumnAccessControlForAllColumns(): Dictionary<ColumnAccessControl> {
|
|
278
|
-
|
|
279
|
-
|
|
303
|
+
// Copy: the helper's dictionary is cached per class and must stay pristine.
|
|
304
|
+
const dictionary: Dictionary<ColumnAccessControl> = {
|
|
305
|
+
...getColumnAccessControlForAllColumns(this),
|
|
306
|
+
};
|
|
280
307
|
|
|
281
308
|
const defaultColumns: Array<string> = [
|
|
282
309
|
"_id",
|
|
@@ -613,7 +640,7 @@ export default class DatabaseBaseModel extends BaseEntity {
|
|
|
613
640
|
): JSONObject {
|
|
614
641
|
const json: JSONObject = {};
|
|
615
642
|
|
|
616
|
-
const vanillaModel: DatabaseBaseModel =
|
|
643
|
+
const vanillaModel: DatabaseBaseModel = getVanillaModel(modelType);
|
|
617
644
|
|
|
618
645
|
for (const key of vanillaModel.getTableColumns().columns) {
|
|
619
646
|
if ((model as any)[key] === undefined) {
|
|
@@ -1942,6 +1942,70 @@ export default class NetworkDevice extends BaseModel {
|
|
|
1942
1942
|
})
|
|
1943
1943
|
public lastSeenAt?: Date = undefined;
|
|
1944
1944
|
|
|
1945
|
+
@ColumnAccessControl({
|
|
1946
|
+
create: [],
|
|
1947
|
+
read: [
|
|
1948
|
+
Permission.ProjectOwner,
|
|
1949
|
+
Permission.ProjectAdmin,
|
|
1950
|
+
Permission.ProjectMember,
|
|
1951
|
+
Permission.Viewer,
|
|
1952
|
+
Permission.SettingsAdmin,
|
|
1953
|
+
Permission.SettingsMember,
|
|
1954
|
+
Permission.SettingsViewer,
|
|
1955
|
+
Permission.ReadNetworkDevice,
|
|
1956
|
+
],
|
|
1957
|
+
update: [
|
|
1958
|
+
Permission.ProjectOwner,
|
|
1959
|
+
Permission.ProjectAdmin,
|
|
1960
|
+
Permission.EditNetworkDevice,
|
|
1961
|
+
],
|
|
1962
|
+
})
|
|
1963
|
+
@TableColumn({
|
|
1964
|
+
required: false,
|
|
1965
|
+
type: TableColumnType.Date,
|
|
1966
|
+
canReadOnRelationQuery: true,
|
|
1967
|
+
title: "Last Polled At",
|
|
1968
|
+
description:
|
|
1969
|
+
'When the assigned probe last ATTEMPTED an SNMP walk of this device, whether or not the device answered. Paired with lastSeenAt (which only moves on a successful walk) this is what separates "the device did not answer" from "we have not asked recently". Managed by the probe.',
|
|
1970
|
+
})
|
|
1971
|
+
@Column({
|
|
1972
|
+
nullable: true,
|
|
1973
|
+
type: ColumnType.Date,
|
|
1974
|
+
})
|
|
1975
|
+
public lastPolledAt?: Date = undefined;
|
|
1976
|
+
|
|
1977
|
+
@ColumnAccessControl({
|
|
1978
|
+
create: [],
|
|
1979
|
+
read: [
|
|
1980
|
+
Permission.ProjectOwner,
|
|
1981
|
+
Permission.ProjectAdmin,
|
|
1982
|
+
Permission.ProjectMember,
|
|
1983
|
+
Permission.Viewer,
|
|
1984
|
+
Permission.SettingsAdmin,
|
|
1985
|
+
Permission.SettingsMember,
|
|
1986
|
+
Permission.SettingsViewer,
|
|
1987
|
+
Permission.ReadNetworkDevice,
|
|
1988
|
+
],
|
|
1989
|
+
update: [
|
|
1990
|
+
Permission.ProjectOwner,
|
|
1991
|
+
Permission.ProjectAdmin,
|
|
1992
|
+
Permission.EditNetworkDevice,
|
|
1993
|
+
],
|
|
1994
|
+
})
|
|
1995
|
+
@TableColumn({
|
|
1996
|
+
required: false,
|
|
1997
|
+
type: TableColumnType.Boolean,
|
|
1998
|
+
canReadOnRelationQuery: true,
|
|
1999
|
+
title: "Is Reachable",
|
|
2000
|
+
description:
|
|
2001
|
+
"Whether the most recent SNMP walk reached this device. NULL means it has never been polled. This — not the age of lastSeenAt — is what the device list, the topology graph and the site rollup read, so a device whose last poll succeeded is never shown as down just because the probe is behind schedule. Managed by the probe.",
|
|
2002
|
+
})
|
|
2003
|
+
@Column({
|
|
2004
|
+
nullable: true,
|
|
2005
|
+
type: ColumnType.Boolean,
|
|
2006
|
+
})
|
|
2007
|
+
public isReachable?: boolean = undefined;
|
|
2008
|
+
|
|
1945
2009
|
@ColumnAccessControl({
|
|
1946
2010
|
create: [],
|
|
1947
2011
|
read: [
|
|
@@ -588,6 +588,20 @@ export default class OnCallDutyPolicySchedule extends BaseModel {
|
|
|
588
588
|
})
|
|
589
589
|
@TableColumn({
|
|
590
590
|
type: TableColumnType.ObjectID,
|
|
591
|
+
/*
|
|
592
|
+
* Read through a relation, alongside `name`, so a joined schedule row can
|
|
593
|
+
* say whether it would page anybody right now. An escalation rule lists
|
|
594
|
+
* schedules by name and has to mark the ones that are currently uncovered;
|
|
595
|
+
* that is one join away from the rule, and without this flag
|
|
596
|
+
* QueryPermission rejects the whole select rather than dropping the column
|
|
597
|
+
* - the escalation rule page fails to load at all.
|
|
598
|
+
*
|
|
599
|
+
* The disclosure is a user id belonging to the same project as the
|
|
600
|
+
* schedule, to a caller who is already reading the schedule's name off the
|
|
601
|
+
* same joined row. It is not an @OwnerOnlyColumn: who is on call is
|
|
602
|
+
* operational state the team is meant to see, not a personal credential.
|
|
603
|
+
*/
|
|
604
|
+
canReadOnRelationQuery: true,
|
|
591
605
|
title: "Current User ID On Roster",
|
|
592
606
|
description: "User ID who is currently on roster",
|
|
593
607
|
example: "c3d4e5f6-a7b8-9012-cdef-123456789012",
|
|
@@ -317,6 +317,65 @@ export default class StatusPage extends BaseModel {
|
|
|
317
317
|
})
|
|
318
318
|
public pageDescription?: string = undefined;
|
|
319
319
|
|
|
320
|
+
/*
|
|
321
|
+
* Search engine indexing opt-out. Indexing stays on unless the owner turns
|
|
322
|
+
* it off, so this defaults to true and every pre-existing status page keeps
|
|
323
|
+
* being indexed exactly as it is today.
|
|
324
|
+
*
|
|
325
|
+
* Turning it off is served two ways, both of which a crawler honours before
|
|
326
|
+
* it decides to index: a <meta name="robots" content="noindex, nofollow">
|
|
327
|
+
* in the server-rendered index.ejs (so it is there before the JS bundle
|
|
328
|
+
* loads) and an X-Robots-Tag response header (so it also covers the RSS
|
|
329
|
+
* feed and llms.txt, which are not HTML).
|
|
330
|
+
*
|
|
331
|
+
* Deliberately NOT wired into robots.txt: Disallow blocks the crawl, and a
|
|
332
|
+
* crawler that never fetches the page never sees the noindex, so the URL can
|
|
333
|
+
* still surface in results. Letting crawlers in and telling them not to
|
|
334
|
+
* index is what actually removes the page.
|
|
335
|
+
*/
|
|
336
|
+
@ColumnAccessControl({
|
|
337
|
+
create: [
|
|
338
|
+
Permission.ProjectOwner,
|
|
339
|
+
Permission.ProjectAdmin,
|
|
340
|
+
Permission.ProjectMember,
|
|
341
|
+
Permission.StatusPageAdmin,
|
|
342
|
+
Permission.StatusPageMember,
|
|
343
|
+
Permission.CreateProjectStatusPage,
|
|
344
|
+
],
|
|
345
|
+
read: [
|
|
346
|
+
Permission.ProjectOwner,
|
|
347
|
+
Permission.ProjectAdmin,
|
|
348
|
+
Permission.ProjectMember,
|
|
349
|
+
Permission.Viewer,
|
|
350
|
+
Permission.StatusPageAdmin,
|
|
351
|
+
Permission.StatusPageMember,
|
|
352
|
+
Permission.StatusPageViewer,
|
|
353
|
+
Permission.ReadProjectStatusPage,
|
|
354
|
+
],
|
|
355
|
+
update: [
|
|
356
|
+
Permission.ProjectOwner,
|
|
357
|
+
Permission.ProjectAdmin,
|
|
358
|
+
Permission.ProjectMember,
|
|
359
|
+
Permission.StatusPageAdmin,
|
|
360
|
+
Permission.StatusPageMember,
|
|
361
|
+
Permission.EditProjectStatusPage,
|
|
362
|
+
],
|
|
363
|
+
})
|
|
364
|
+
@TableColumn({
|
|
365
|
+
isDefaultValueColumn: true,
|
|
366
|
+
type: TableColumnType.Boolean,
|
|
367
|
+
title: "Enable Search Engine Indexing",
|
|
368
|
+
description:
|
|
369
|
+
"Should search engines like Google and Bing be allowed to index this status page? Turn this off to keep the page reachable by link but out of search results.",
|
|
370
|
+
defaultValue: true,
|
|
371
|
+
})
|
|
372
|
+
@Column({
|
|
373
|
+
type: ColumnType.Boolean,
|
|
374
|
+
default: true,
|
|
375
|
+
nullable: false,
|
|
376
|
+
})
|
|
377
|
+
public enableSearchEngineIndexing?: boolean = undefined;
|
|
378
|
+
|
|
320
379
|
@ColumnAccessControl({
|
|
321
380
|
create: [
|
|
322
381
|
Permission.ProjectOwner,
|
|
@@ -14,6 +14,7 @@ import CanAccessIfCanReadOn from "../../Types/Database/CanAccessIfCanReadOn";
|
|
|
14
14
|
import ColumnLength from "../../Types/Database/ColumnLength";
|
|
15
15
|
import ColumnType from "../../Types/Database/ColumnType";
|
|
16
16
|
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
|
|
17
|
+
import EnableDocumentation from "../../Types/Database/EnableDocumentation";
|
|
17
18
|
import TableColumn from "../../Types/Database/TableColumn";
|
|
18
19
|
import TableColumnType from "../../Types/Database/TableColumnType";
|
|
19
20
|
import TableMetadata from "../../Types/Database/TableMetadata";
|
|
@@ -24,6 +25,7 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
24
25
|
import Permission from "../../Types/Permission";
|
|
25
26
|
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
|
|
26
27
|
|
|
28
|
+
@EnableDocumentation()
|
|
27
29
|
@CanAccessIfCanReadOn("statusPage")
|
|
28
30
|
@TableEditionAccessControl({
|
|
29
31
|
requiresEnterprise: true,
|
|
@@ -315,15 +315,27 @@ class UserCall extends BaseModel {
|
|
|
315
315
|
@OwnerOnlyColumn()
|
|
316
316
|
@TableColumn({
|
|
317
317
|
title: "Verification Code",
|
|
318
|
-
description:
|
|
318
|
+
description:
|
|
319
|
+
"Keyed digest of the temporary verification code — never the code itself",
|
|
319
320
|
isDefaultValueColumn: true,
|
|
320
321
|
computed: true,
|
|
321
322
|
required: true,
|
|
322
323
|
type: TableColumnType.ShortText,
|
|
324
|
+
/*
|
|
325
|
+
* A row is born with NO usable code on it: a 64-character random
|
|
326
|
+
* placeholder that no six-digit code can ever hash to. The real code is
|
|
327
|
+
* generated, hashed and sent by this channel's service once the row
|
|
328
|
+
* exists — the row id is part of the hashed message, so the digest cannot
|
|
329
|
+
* be computed before the insert has assigned one.
|
|
330
|
+
*
|
|
331
|
+
* This stays a forced default rather than moving wholly into the service
|
|
332
|
+
* hook because the column is NOT NULL and must be satisfied on every
|
|
333
|
+
* create path, including those that pass props.ignoreHooks.
|
|
334
|
+
*/
|
|
323
335
|
forceGetDefaultValueOnCreate: () => {
|
|
324
|
-
return Text.
|
|
336
|
+
return Text.generateRandomText(64);
|
|
325
337
|
},
|
|
326
|
-
example: "
|
|
338
|
+
example: "9f2c1b4a7d3e6058c1f0a9b8d7e6f5c4b3a291807f6e5d4c3b2a19081726354",
|
|
327
339
|
})
|
|
328
340
|
@Column({
|
|
329
341
|
type: ColumnType.ShortText,
|
|
@@ -331,6 +343,85 @@ class UserCall extends BaseModel {
|
|
|
331
343
|
length: ColumnLength.ShortText,
|
|
332
344
|
})
|
|
333
345
|
public verificationCode?: string = undefined;
|
|
346
|
+
|
|
347
|
+
@ColumnAccessControl({
|
|
348
|
+
create: [],
|
|
349
|
+
read: [],
|
|
350
|
+
update: [],
|
|
351
|
+
})
|
|
352
|
+
/*
|
|
353
|
+
* When the code currently on this row stops being accepted.
|
|
354
|
+
*
|
|
355
|
+
* NULL means there is no live code: none was ever issued, or the last one
|
|
356
|
+
* was used, or it was burned by the attempt limit — or the row predates
|
|
357
|
+
* this column, which is read the same conservative way. Without an expiry
|
|
358
|
+
* the six-digit code space stood open indefinitely, which is what made
|
|
359
|
+
* walking it worthwhile.
|
|
360
|
+
*/
|
|
361
|
+
@TableColumn({
|
|
362
|
+
title: "Verification Code Expires At",
|
|
363
|
+
description: "When the verification code on this row stops being accepted",
|
|
364
|
+
computed: true,
|
|
365
|
+
type: TableColumnType.Date,
|
|
366
|
+
})
|
|
367
|
+
@Column({
|
|
368
|
+
type: ColumnType.Date,
|
|
369
|
+
nullable: true,
|
|
370
|
+
})
|
|
371
|
+
public verificationCodeExpiresAt?: Date = undefined;
|
|
372
|
+
|
|
373
|
+
@ColumnAccessControl({
|
|
374
|
+
create: [],
|
|
375
|
+
read: [],
|
|
376
|
+
update: [],
|
|
377
|
+
})
|
|
378
|
+
/*
|
|
379
|
+
* Wrong guesses made against the code currently on this row, reset to zero
|
|
380
|
+
* each time a code is issued.
|
|
381
|
+
*
|
|
382
|
+
* This is the counter that stops /verify being an unlimited oracle over a
|
|
383
|
+
* space small enough to walk in minutes. It is incremented with a single
|
|
384
|
+
* atomic UPDATE ... RETURNING rather than a read-modify-write, because
|
|
385
|
+
* requests racing each other are the normal shape of the attack.
|
|
386
|
+
*/
|
|
387
|
+
@TableColumn({
|
|
388
|
+
title: "Verification Failed Attempts",
|
|
389
|
+
description:
|
|
390
|
+
"Incorrect verification attempts made against the current verification code",
|
|
391
|
+
computed: true,
|
|
392
|
+
type: TableColumnType.Number,
|
|
393
|
+
})
|
|
394
|
+
@Column({
|
|
395
|
+
type: ColumnType.Number,
|
|
396
|
+
nullable: false,
|
|
397
|
+
default: 0,
|
|
398
|
+
})
|
|
399
|
+
public verificationFailedAttempts?: number = undefined;
|
|
400
|
+
|
|
401
|
+
@ColumnAccessControl({
|
|
402
|
+
create: [],
|
|
403
|
+
read: [],
|
|
404
|
+
update: [],
|
|
405
|
+
})
|
|
406
|
+
/*
|
|
407
|
+
* When a verification code was last sent for this row.
|
|
408
|
+
*
|
|
409
|
+
* Drives the resend cooldown. Without it, "spend the five attempts, ask for
|
|
410
|
+
* a fresh code, repeat" costs an attacker nothing — and the resend control
|
|
411
|
+
* doubles as a way to send somebody unsolicited messages at whatever rate
|
|
412
|
+
* the network allows, at the project's expense.
|
|
413
|
+
*/
|
|
414
|
+
@TableColumn({
|
|
415
|
+
title: "Verification Code Sent At",
|
|
416
|
+
description: "When a verification code was last sent for this row",
|
|
417
|
+
computed: true,
|
|
418
|
+
type: TableColumnType.Date,
|
|
419
|
+
})
|
|
420
|
+
@Column({
|
|
421
|
+
type: ColumnType.Date,
|
|
422
|
+
nullable: true,
|
|
423
|
+
})
|
|
424
|
+
public verificationCodeSentAt?: Date = undefined;
|
|
334
425
|
}
|
|
335
426
|
|
|
336
427
|
export default UserCall;
|
|
@@ -318,15 +318,27 @@ class UserEmail extends BaseModel {
|
|
|
318
318
|
@OwnerOnlyColumn()
|
|
319
319
|
@TableColumn({
|
|
320
320
|
title: "Verification Code",
|
|
321
|
-
description:
|
|
321
|
+
description:
|
|
322
|
+
"Keyed digest of the temporary verification code — never the code itself",
|
|
322
323
|
isDefaultValueColumn: true,
|
|
323
324
|
computed: true,
|
|
324
325
|
required: true,
|
|
325
326
|
type: TableColumnType.ShortText,
|
|
327
|
+
/*
|
|
328
|
+
* A row is born with NO usable code on it: a 64-character random
|
|
329
|
+
* placeholder that no six-digit code can ever hash to. The real code is
|
|
330
|
+
* generated, hashed and sent by this channel's service once the row
|
|
331
|
+
* exists — the row id is part of the hashed message, so the digest cannot
|
|
332
|
+
* be computed before the insert has assigned one.
|
|
333
|
+
*
|
|
334
|
+
* This stays a forced default rather than moving wholly into the service
|
|
335
|
+
* hook because the column is NOT NULL and must be satisfied on every
|
|
336
|
+
* create path, including those that pass props.ignoreHooks.
|
|
337
|
+
*/
|
|
326
338
|
forceGetDefaultValueOnCreate: () => {
|
|
327
|
-
return Text.
|
|
339
|
+
return Text.generateRandomText(64);
|
|
328
340
|
},
|
|
329
|
-
example: "
|
|
341
|
+
example: "9f2c1b4a7d3e6058c1f0a9b8d7e6f5c4b3a291807f6e5d4c3b2a19081726354",
|
|
330
342
|
})
|
|
331
343
|
@Column({
|
|
332
344
|
type: ColumnType.ShortText,
|
|
@@ -334,6 +346,85 @@ class UserEmail extends BaseModel {
|
|
|
334
346
|
length: ColumnLength.ShortText,
|
|
335
347
|
})
|
|
336
348
|
public verificationCode?: string = undefined;
|
|
349
|
+
|
|
350
|
+
@ColumnAccessControl({
|
|
351
|
+
create: [],
|
|
352
|
+
read: [],
|
|
353
|
+
update: [],
|
|
354
|
+
})
|
|
355
|
+
/*
|
|
356
|
+
* When the code currently on this row stops being accepted.
|
|
357
|
+
*
|
|
358
|
+
* NULL means there is no live code: none was ever issued, or the last one
|
|
359
|
+
* was used, or it was burned by the attempt limit — or the row predates
|
|
360
|
+
* this column, which is read the same conservative way. Without an expiry
|
|
361
|
+
* the six-digit code space stood open indefinitely, which is what made
|
|
362
|
+
* walking it worthwhile.
|
|
363
|
+
*/
|
|
364
|
+
@TableColumn({
|
|
365
|
+
title: "Verification Code Expires At",
|
|
366
|
+
description: "When the verification code on this row stops being accepted",
|
|
367
|
+
computed: true,
|
|
368
|
+
type: TableColumnType.Date,
|
|
369
|
+
})
|
|
370
|
+
@Column({
|
|
371
|
+
type: ColumnType.Date,
|
|
372
|
+
nullable: true,
|
|
373
|
+
})
|
|
374
|
+
public verificationCodeExpiresAt?: Date = undefined;
|
|
375
|
+
|
|
376
|
+
@ColumnAccessControl({
|
|
377
|
+
create: [],
|
|
378
|
+
read: [],
|
|
379
|
+
update: [],
|
|
380
|
+
})
|
|
381
|
+
/*
|
|
382
|
+
* Wrong guesses made against the code currently on this row, reset to zero
|
|
383
|
+
* each time a code is issued.
|
|
384
|
+
*
|
|
385
|
+
* This is the counter that stops /verify being an unlimited oracle over a
|
|
386
|
+
* space small enough to walk in minutes. It is incremented with a single
|
|
387
|
+
* atomic UPDATE ... RETURNING rather than a read-modify-write, because
|
|
388
|
+
* requests racing each other are the normal shape of the attack.
|
|
389
|
+
*/
|
|
390
|
+
@TableColumn({
|
|
391
|
+
title: "Verification Failed Attempts",
|
|
392
|
+
description:
|
|
393
|
+
"Incorrect verification attempts made against the current verification code",
|
|
394
|
+
computed: true,
|
|
395
|
+
type: TableColumnType.Number,
|
|
396
|
+
})
|
|
397
|
+
@Column({
|
|
398
|
+
type: ColumnType.Number,
|
|
399
|
+
nullable: false,
|
|
400
|
+
default: 0,
|
|
401
|
+
})
|
|
402
|
+
public verificationFailedAttempts?: number = undefined;
|
|
403
|
+
|
|
404
|
+
@ColumnAccessControl({
|
|
405
|
+
create: [],
|
|
406
|
+
read: [],
|
|
407
|
+
update: [],
|
|
408
|
+
})
|
|
409
|
+
/*
|
|
410
|
+
* When a verification code was last sent for this row.
|
|
411
|
+
*
|
|
412
|
+
* Drives the resend cooldown. Without it, "spend the five attempts, ask for
|
|
413
|
+
* a fresh code, repeat" costs an attacker nothing — and the resend control
|
|
414
|
+
* doubles as a way to send somebody unsolicited messages at whatever rate
|
|
415
|
+
* the network allows, at the project's expense.
|
|
416
|
+
*/
|
|
417
|
+
@TableColumn({
|
|
418
|
+
title: "Verification Code Sent At",
|
|
419
|
+
description: "When a verification code was last sent for this row",
|
|
420
|
+
computed: true,
|
|
421
|
+
type: TableColumnType.Date,
|
|
422
|
+
})
|
|
423
|
+
@Column({
|
|
424
|
+
type: ColumnType.Date,
|
|
425
|
+
nullable: true,
|
|
426
|
+
})
|
|
427
|
+
public verificationCodeSentAt?: Date = undefined;
|
|
337
428
|
}
|
|
338
429
|
|
|
339
430
|
export default UserEmail;
|
|
@@ -275,15 +275,27 @@ class UserIncomingCallNumber extends BaseModel {
|
|
|
275
275
|
})
|
|
276
276
|
@TableColumn({
|
|
277
277
|
title: "Verification Code",
|
|
278
|
-
description:
|
|
278
|
+
description:
|
|
279
|
+
"Keyed digest of the temporary verification code — never the code itself",
|
|
279
280
|
isDefaultValueColumn: true,
|
|
280
281
|
computed: true,
|
|
281
282
|
required: true,
|
|
282
283
|
type: TableColumnType.ShortText,
|
|
284
|
+
/*
|
|
285
|
+
* A row is born with NO usable code on it: a 64-character random
|
|
286
|
+
* placeholder that no six-digit code can ever hash to. The real code is
|
|
287
|
+
* generated, hashed and sent by this channel's service once the row
|
|
288
|
+
* exists — the row id is part of the hashed message, so the digest cannot
|
|
289
|
+
* be computed before the insert has assigned one.
|
|
290
|
+
*
|
|
291
|
+
* This stays a forced default rather than moving wholly into the service
|
|
292
|
+
* hook because the column is NOT NULL and must be satisfied on every
|
|
293
|
+
* create path, including those that pass props.ignoreHooks.
|
|
294
|
+
*/
|
|
283
295
|
forceGetDefaultValueOnCreate: () => {
|
|
284
|
-
return Text.
|
|
296
|
+
return Text.generateRandomText(64);
|
|
285
297
|
},
|
|
286
|
-
example: "
|
|
298
|
+
example: "9f2c1b4a7d3e6058c1f0a9b8d7e6f5c4b3a291807f6e5d4c3b2a19081726354",
|
|
287
299
|
})
|
|
288
300
|
@Column({
|
|
289
301
|
type: ColumnType.ShortText,
|
|
@@ -291,6 +303,85 @@ class UserIncomingCallNumber extends BaseModel {
|
|
|
291
303
|
length: ColumnLength.ShortText,
|
|
292
304
|
})
|
|
293
305
|
public verificationCode?: string = undefined;
|
|
306
|
+
|
|
307
|
+
@ColumnAccessControl({
|
|
308
|
+
create: [],
|
|
309
|
+
read: [],
|
|
310
|
+
update: [],
|
|
311
|
+
})
|
|
312
|
+
/*
|
|
313
|
+
* When the code currently on this row stops being accepted.
|
|
314
|
+
*
|
|
315
|
+
* NULL means there is no live code: none was ever issued, or the last one
|
|
316
|
+
* was used, or it was burned by the attempt limit — or the row predates
|
|
317
|
+
* this column, which is read the same conservative way. Without an expiry
|
|
318
|
+
* the six-digit code space stood open indefinitely, which is what made
|
|
319
|
+
* walking it worthwhile.
|
|
320
|
+
*/
|
|
321
|
+
@TableColumn({
|
|
322
|
+
title: "Verification Code Expires At",
|
|
323
|
+
description: "When the verification code on this row stops being accepted",
|
|
324
|
+
computed: true,
|
|
325
|
+
type: TableColumnType.Date,
|
|
326
|
+
})
|
|
327
|
+
@Column({
|
|
328
|
+
type: ColumnType.Date,
|
|
329
|
+
nullable: true,
|
|
330
|
+
})
|
|
331
|
+
public verificationCodeExpiresAt?: Date = undefined;
|
|
332
|
+
|
|
333
|
+
@ColumnAccessControl({
|
|
334
|
+
create: [],
|
|
335
|
+
read: [],
|
|
336
|
+
update: [],
|
|
337
|
+
})
|
|
338
|
+
/*
|
|
339
|
+
* Wrong guesses made against the code currently on this row, reset to zero
|
|
340
|
+
* each time a code is issued.
|
|
341
|
+
*
|
|
342
|
+
* This is the counter that stops /verify being an unlimited oracle over a
|
|
343
|
+
* space small enough to walk in minutes. It is incremented with a single
|
|
344
|
+
* atomic UPDATE ... RETURNING rather than a read-modify-write, because
|
|
345
|
+
* requests racing each other are the normal shape of the attack.
|
|
346
|
+
*/
|
|
347
|
+
@TableColumn({
|
|
348
|
+
title: "Verification Failed Attempts",
|
|
349
|
+
description:
|
|
350
|
+
"Incorrect verification attempts made against the current verification code",
|
|
351
|
+
computed: true,
|
|
352
|
+
type: TableColumnType.Number,
|
|
353
|
+
})
|
|
354
|
+
@Column({
|
|
355
|
+
type: ColumnType.Number,
|
|
356
|
+
nullable: false,
|
|
357
|
+
default: 0,
|
|
358
|
+
})
|
|
359
|
+
public verificationFailedAttempts?: number = undefined;
|
|
360
|
+
|
|
361
|
+
@ColumnAccessControl({
|
|
362
|
+
create: [],
|
|
363
|
+
read: [],
|
|
364
|
+
update: [],
|
|
365
|
+
})
|
|
366
|
+
/*
|
|
367
|
+
* When a verification code was last sent for this row.
|
|
368
|
+
*
|
|
369
|
+
* Drives the resend cooldown. Without it, "spend the five attempts, ask for
|
|
370
|
+
* a fresh code, repeat" costs an attacker nothing — and the resend control
|
|
371
|
+
* doubles as a way to send somebody unsolicited messages at whatever rate
|
|
372
|
+
* the network allows, at the project's expense.
|
|
373
|
+
*/
|
|
374
|
+
@TableColumn({
|
|
375
|
+
title: "Verification Code Sent At",
|
|
376
|
+
description: "When a verification code was last sent for this row",
|
|
377
|
+
computed: true,
|
|
378
|
+
type: TableColumnType.Date,
|
|
379
|
+
})
|
|
380
|
+
@Column({
|
|
381
|
+
type: ColumnType.Date,
|
|
382
|
+
nullable: true,
|
|
383
|
+
})
|
|
384
|
+
public verificationCodeSentAt?: Date = undefined;
|
|
294
385
|
}
|
|
295
386
|
|
|
296
387
|
export default UserIncomingCallNumber;
|
|
@@ -346,6 +346,43 @@ class UserPush extends BaseModel {
|
|
|
346
346
|
default: false,
|
|
347
347
|
})
|
|
348
348
|
public isVerified?: boolean = undefined;
|
|
349
|
+
|
|
350
|
+
/*
|
|
351
|
+
* Whether this handset should be paged through silent mode and Do Not
|
|
352
|
+
* Disturb when it is on call. Per DEVICE and not per user on purpose: the
|
|
353
|
+
* responder's work phone on the nightstand and their tablet on the sofa are
|
|
354
|
+
* the same person making two different decisions, and only the phone should
|
|
355
|
+
* be allowed to wake the house.
|
|
356
|
+
*
|
|
357
|
+
* Off unless the responder turns it on from that device. It is the one
|
|
358
|
+
* setting in this product that deliberately defeats the switch a person
|
|
359
|
+
* flicked to be left alone, so it is opted into rather than out of, and the
|
|
360
|
+
* app only offers it once the OS has actually granted the capability
|
|
361
|
+
* (the iOS critical-alert entitlement, or Do Not Disturb access on Android).
|
|
362
|
+
*
|
|
363
|
+
* `update` is empty like every other column here: the value is written by
|
|
364
|
+
* UserPushAPI's critical-alerts route, which checks the row belongs to the
|
|
365
|
+
* caller and then writes as root. That keeps "who may change this" in one
|
|
366
|
+
* readable place rather than spread across the generic CRUD surface.
|
|
367
|
+
*/
|
|
368
|
+
@ColumnAccessControl({
|
|
369
|
+
create: [Permission.CurrentUser],
|
|
370
|
+
read: [Permission.CurrentUser],
|
|
371
|
+
update: [],
|
|
372
|
+
})
|
|
373
|
+
@TableColumn({
|
|
374
|
+
title: "Critical Alerts Enabled",
|
|
375
|
+
description:
|
|
376
|
+
"Should on-call notifications to this device override silent mode and Do Not Disturb?",
|
|
377
|
+
isDefaultValueColumn: true,
|
|
378
|
+
type: TableColumnType.Boolean,
|
|
379
|
+
defaultValue: false,
|
|
380
|
+
})
|
|
381
|
+
@Column({
|
|
382
|
+
type: ColumnType.Boolean,
|
|
383
|
+
default: false,
|
|
384
|
+
})
|
|
385
|
+
public isCriticalAlertEnabled?: boolean = undefined;
|
|
349
386
|
}
|
|
350
387
|
|
|
351
388
|
export default UserPush;
|