@oneuptime/common 12.0.13 → 12.0.15
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/GlobalOidc.ts +20 -0
- package/Models/DatabaseModels/GlobalSso.ts +20 -0
- package/Models/DatabaseModels/MarketingConversion.ts +19 -9
- package/Models/DatabaseModels/NetworkDeviceLinkRule.ts +46 -0
- package/Models/DatabaseModels/OnCallDutyPolicySchedule.ts +14 -0
- package/Models/DatabaseModels/StatusPage.ts +7 -4
- 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/Server/API/BaseAPI.ts +79 -14
- package/Server/API/StatusPageAPI.ts +29 -4
- 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/EnvironmentConfig.ts +7 -0
- 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/1787700000000-FixTotpOtpUrlAlgorithm.ts +45 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.ts +19 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.ts +40 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
- package/Server/Middleware/SlackAuthorization.ts +43 -6
- package/Server/Middleware/UserAuthorization.ts +236 -26
- package/Server/Middleware/VerificationCodeRateLimit.ts +586 -0
- package/Server/Middleware/WhatsAppAuthorization.ts +43 -3
- package/Server/Services/AnalyticsDatabaseService.ts +169 -0
- package/Server/Services/DatabaseService.ts +101 -0
- package/Server/Services/GlobalOidcProjectService.ts +126 -1
- package/Server/Services/GlobalOidcService.ts +132 -0
- package/Server/Services/GlobalSsoProjectService.ts +126 -1
- package/Server/Services/GlobalSsoService.ts +132 -0
- package/Server/Services/LogAggregationService.ts +5 -0
- package/Server/Services/PushNotificationService.ts +127 -12
- package/Server/Services/TeamMemberService.ts +53 -13
- 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/Types/Database/QueryHelper.ts +30 -0
- package/Server/Utils/AnalyticsDatabase/QuerySettingsHelper.ts +59 -0
- package/Server/Utils/ChannelVerification.ts +510 -0
- package/Server/Utils/CronTab.ts +73 -0
- package/Server/Utils/GlobalSsoAuthorization.ts +175 -0
- package/Server/Utils/Marketing/ConversionUploadProvider.ts +35 -5
- package/Server/Utils/Marketing/Providers/GoogleAds.ts +1 -1
- package/Server/Utils/Marketing/Providers/LinkedIn.ts +1 -1
- package/Server/Utils/Marketing/Providers/Meta.ts +1 -1
- package/Server/Utils/Marketing/Providers/MicrosoftAds.ts +1 -1
- package/Server/Utils/Marketing/Providers/Reddit.ts +1 -1
- package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +48 -33
- package/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.ts +35 -30
- package/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.ts +33 -28
- package/Server/Utils/Monitor/Criteria/EvaluateOverTime.ts +475 -47
- package/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.ts +35 -30
- package/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.ts +47 -44
- package/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.ts +33 -28
- package/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.ts +69 -40
- package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +35 -29
- package/Server/Utils/Monitor/MonitorAlert.ts +24 -21
- package/Server/Utils/Monitor/MonitorCriteriaEvaluator.ts +8 -0
- package/Server/Utils/Monitor/MonitorIncident.ts +21 -18
- package/Server/Utils/Monitor/MonitorResource.ts +161 -21
- package/Server/Utils/Monitor/MonitorResourceContext.ts +107 -0
- package/Server/Utils/Monitor/MonitorStepResourceIdentity.ts +442 -0
- package/Server/Utils/Monitor/SeriesResourceLabels.ts +3 -3
- package/Server/Utils/Monitor/SeriesResourceLinker.ts +96 -28
- package/Server/Utils/StatusPageContentSecurityPolicy.ts +56 -0
- package/Server/Utils/StatusPageCustomizationAccess.ts +117 -0
- package/Server/Utils/TotpAuth.ts +137 -9
- package/Server/Utils/UserRegistrationToken.ts +182 -0
- package/Server/Utils/VerificationCode.ts +134 -0
- 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 +28 -0
- package/Tests/Models/UserPushCriticalAlertColumn.test.ts +172 -0
- package/Tests/Server/API/BaseAPIGetListParallel.test.ts +519 -0
- package/Tests/Server/API/NotificationChannelVerificationAPI.test.ts +543 -0
- package/Tests/Server/API/StatusPageCustomizationOrigin.test.ts +348 -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/Postgres/FixTotpOtpUrlAlgorithmMigration.test.ts +265 -0
- package/Tests/Server/Infrastructure/Postgres/SchemaMigrationsOrdering.test.ts +227 -0
- package/Tests/Server/Middleware/SlackAuthorization.test.ts +149 -0
- package/Tests/Server/Middleware/UserAuthorization.test.ts +27 -13
- package/Tests/Server/Middleware/UserAuthorizationGlobalSsoGovernance.test.ts +1455 -0
- package/Tests/Server/Middleware/UserAuthorizationSSOProvider.test.ts +91 -2
- package/Tests/Server/Middleware/VerificationCodeRateLimit.test.ts +775 -0
- package/Tests/Server/Middleware/WhatsAppAuthorization.test.ts +233 -0
- package/Tests/Server/Services/AddNetworkDeviceReachabilityColumnsMigration.test.ts +10 -62
- package/Tests/Server/Services/AnalyticsDatabasePaginationStability.test.ts +33 -13
- package/Tests/Server/Services/AnalyticsDatabaseSortKeyBoundary.test.ts +658 -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/DeliverNotificationForRuleExtraction.test.ts +1 -0
- package/Tests/Server/Services/DiscoveryScanClaimHookFreeSafety.test.ts +21 -8
- package/Tests/Server/Services/GlobalSsoProviderAuthorization.test.ts +1242 -0
- package/Tests/Server/Services/LogAggregationScanMemory.test.ts +421 -0
- package/Tests/Server/Services/LogAggregationService.test.ts +2 -2
- package/Tests/Server/Services/MonitorResourceProbeAgreementHydration.test.ts +459 -0
- package/Tests/Server/Services/MonitorResourceProbeAgreementReuse.test.ts +10 -0
- 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/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/TestingUtils/AuthenticatorApp.ts +248 -0
- package/Tests/Server/Types/AnalyticsDatabase/AggregateUtilBucketTimestamp.test.ts +416 -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/Database/QueryHelperManyToManyAndEmptyValues.test.ts +551 -0
- package/Tests/Server/Types/Database/SelectUtil.test.ts +348 -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/Browser.test.ts +162 -0
- package/Tests/Server/Utils/ChannelVerification.test.ts +689 -0
- package/Tests/Server/Utils/CronTab.test.ts +116 -0
- package/Tests/Server/Utils/Express.test.ts +371 -0
- package/Tests/Server/Utils/GlobalSSOToken.test.ts +581 -0
- package/Tests/Server/Utils/GlobalSsoAuthorization.test.ts +1401 -0
- package/Tests/Server/Utils/Marketing/AdUploadableConversionTypes.test.ts +254 -0
- package/Tests/Server/Utils/Marketing/ConversionUploadProvider.test.ts +1 -1
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaEvaluateOverTime.test.ts +508 -0
- package/Tests/Server/Utils/Monitor/Criteria/APIRequestCriteriaPortTimings.test.ts +30 -9
- 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/EvaluateOverTime.test.ts +987 -0
- package/Tests/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.test.ts +916 -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/ProfileMonitorCriteria.test.ts +382 -0
- package/Tests/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.test.ts +1219 -0
- 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 +86 -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/SeriesResourceLinker.test.ts +92 -18
- package/Tests/Server/Utils/PushNotificationUtilCreators.test.ts +267 -0
- package/Tests/Server/Utils/StatusPageContentSecurityPolicy.test.ts +136 -0
- package/Tests/Server/Utils/StatusPageCustomizationAccess.test.ts +223 -0
- package/Tests/Server/Utils/Telemetry/OneuptimeLabel.test.ts +439 -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/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/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/MonitorStepConfigHelpers.test.ts +165 -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/NetworkDevice/NetworkDeviceLinkRuleScope.test.ts +215 -0
- package/Tests/Types/Service/ServiceLanguage.test.ts +255 -0
- package/Tests/Types/TextRandomGeneration.test.ts +211 -0
- package/Tests/UI/Components/Button.test.tsx +175 -1
- 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/FormSubmitAnalytics.test.tsx +206 -0
- 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/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/AIChatExport/ConversationMarkdown.test.ts +774 -0
- package/Tests/UI/Utils/AIChatExport/MarkdownBlocks.test.ts +791 -0
- package/Tests/UI/Utils/AIChatExport/MarkdownSafety.test.ts +544 -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/Analytics.test.ts +187 -0
- 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 +80 -0
- package/Tests/Utils/Monitor/NetworkDeviceLinkRuleUtil.test.ts +1291 -0
- package/Tests/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.test.ts +214 -0
- package/Tests/Utils/Rum/UrlScrubberSegments.test.ts +362 -0
- package/Types/Email/EmailTemplateType.ts +1 -0
- package/Types/Marketing/MarketingConversion.ts +12 -0
- package/Types/Monitor/CriteriaFilter.ts +9 -0
- package/Types/Monitor/MonitorCriteriaInstance.ts +41 -20
- package/Types/Monitor/Recommendation/MonitorRecommendationCatalog.ts +131 -8
- package/Types/Monitor/Recommendation/MonitorRecommendationTypes.ts +48 -8
- package/Types/Monitor/ServiceAlertTemplates.ts +1352 -0
- package/Types/NetworkDevice/NetworkDeviceLinkRuleScope.ts +51 -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/Text.ts +111 -19
- package/UI/Components/Button/Button.tsx +27 -14
- 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/Feed/FeedItem.tsx +1 -1
- package/UI/Components/FormModal/BasicFormModal.tsx +12 -0
- package/UI/Components/Forms/BasicForm.tsx +13 -1
- package/UI/Components/Forms/BasicModelForm.tsx +2 -1
- package/UI/Components/Forms/ModelForm.tsx +10 -1
- package/UI/Components/Forms/Utils/FormAnalyticsName.ts +39 -0
- package/UI/Components/List/List.tsx +37 -5
- package/UI/Components/List/ListSkeleton.tsx +54 -0
- package/UI/Components/Markdown.tsx/LazyMarkdownViewer.tsx +6 -1
- package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +71 -26
- package/UI/Components/Modal/Modal.tsx +2 -2
- package/UI/Components/ModelFormModal/ModelFormModal.tsx +6 -1
- 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/Analytics.ts +55 -2
- package/Utils/Monitor/MonitorMetricType.ts +40 -0
- package/Utils/Monitor/NetworkDeviceLinkRuleUtil.ts +587 -37
- package/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.ts +115 -0
- package/build/dist/Models/DatabaseModels/GlobalOidc.js +21 -0
- package/build/dist/Models/DatabaseModels/GlobalOidc.js.map +1 -1
- package/build/dist/Models/DatabaseModels/GlobalSso.js +21 -0
- package/build/dist/Models/DatabaseModels/GlobalSso.js.map +1 -1
- package/build/dist/Models/DatabaseModels/MarketingConversion.js +20 -10
- package/build/dist/Models/DatabaseModels/MarketingConversion.js.map +1 -1
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.js +47 -0
- package/build/dist/Models/DatabaseModels/NetworkDeviceLinkRule.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 +4 -4
- package/build/dist/Models/DatabaseModels/StatusPage.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/Server/API/BaseAPI.js +69 -13
- package/build/dist/Server/API/BaseAPI.js.map +1 -1
- package/build/dist/Server/API/StatusPageAPI.js +25 -4
- package/build/dist/Server/API/StatusPageAPI.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/EnvironmentConfig.js +6 -0
- package/build/dist/Server/EnvironmentConfig.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/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/1787800000000-AddScopeToNetworkDeviceLinkRule.js +12 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787800000000-AddScopeToNetworkDeviceLinkRule.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.js +29 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787900000000-AddRestrictToAttachedProjectsToGlobalSso.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/SlackAuthorization.js +28 -4
- package/build/dist/Server/Middleware/SlackAuthorization.js.map +1 -1
- package/build/dist/Server/Middleware/UserAuthorization.js +197 -22
- 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/Middleware/WhatsAppAuthorization.js +32 -2
- package/build/dist/Server/Middleware/WhatsAppAuthorization.js.map +1 -1
- package/build/dist/Server/Services/AnalyticsDatabaseService.js +136 -0
- package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
- package/build/dist/Server/Services/DatabaseService.js +74 -0
- package/build/dist/Server/Services/DatabaseService.js.map +1 -1
- package/build/dist/Server/Services/GlobalOidcProjectService.js +105 -0
- package/build/dist/Server/Services/GlobalOidcProjectService.js.map +1 -1
- package/build/dist/Server/Services/GlobalOidcService.js +127 -0
- package/build/dist/Server/Services/GlobalOidcService.js.map +1 -1
- package/build/dist/Server/Services/GlobalSsoProjectService.js +105 -0
- package/build/dist/Server/Services/GlobalSsoProjectService.js.map +1 -1
- package/build/dist/Server/Services/GlobalSsoService.js +127 -0
- package/build/dist/Server/Services/GlobalSsoService.js.map +1 -1
- package/build/dist/Server/Services/LogAggregationService.js +5 -0
- package/build/dist/Server/Services/LogAggregationService.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/TeamMemberService.js +43 -7
- package/build/dist/Server/Services/TeamMemberService.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/Types/Database/QueryHelper.js +27 -0
- package/build/dist/Server/Types/Database/QueryHelper.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/ChannelVerification.js +348 -0
- package/build/dist/Server/Utils/ChannelVerification.js.map +1 -0
- package/build/dist/Server/Utils/CronTab.js +66 -0
- package/build/dist/Server/Utils/CronTab.js.map +1 -1
- package/build/dist/Server/Utils/GlobalSsoAuthorization.js +112 -0
- package/build/dist/Server/Utils/GlobalSsoAuthorization.js.map +1 -0
- package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js +17 -1
- package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Meta.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Meta.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js.map +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Reddit.js +1 -1
- package/build/dist/Server/Utils/Marketing/Providers/Reddit.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +37 -35
- package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js +20 -22
- package/build/dist/Server/Utils/Monitor/Criteria/DomainMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js +370 -42
- package/build/dist/Server/Utils/Monitor/Criteria/EvaluateOverTime.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/ExternalStatusPageMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js +34 -37
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js +21 -25
- package/build/dist/Server/Utils/Monitor/Criteria/SSLMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js +64 -52
- package/build/dist/Server/Utils/Monitor/Criteria/ServerMonitorCriteria.js.map +1 -1
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +25 -29
- package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.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/MonitorCriteriaEvaluator.js +8 -0
- package/build/dist/Server/Utils/Monitor/MonitorCriteriaEvaluator.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 +123 -23
- 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/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/StatusPageContentSecurityPolicy.js +39 -0
- package/build/dist/Server/Utils/StatusPageContentSecurityPolicy.js.map +1 -0
- package/build/dist/Server/Utils/StatusPageCustomizationAccess.js +85 -0
- package/build/dist/Server/Utils/StatusPageCustomizationAccess.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/Types/Email/EmailTemplateType.js +1 -0
- package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
- package/build/dist/Types/Marketing/MarketingConversion.js +10 -0
- package/build/dist/Types/Marketing/MarketingConversion.js.map +1 -1
- package/build/dist/Types/Monitor/CriteriaFilter.js +1 -0
- package/build/dist/Types/Monitor/CriteriaFilter.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/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/NetworkDevice/NetworkDeviceLinkRuleScope.js +46 -0
- package/build/dist/Types/NetworkDevice/NetworkDeviceLinkRuleScope.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/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/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/Feed/FeedItem.js +1 -1
- package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
- package/build/dist/UI/Components/FormModal/BasicFormModal.js +2 -1
- package/build/dist/UI/Components/FormModal/BasicFormModal.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicForm.js +10 -1
- package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/BasicModelForm.js +2 -1
- package/build/dist/UI/Components/Forms/BasicModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/ModelForm.js +4 -1
- package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
- package/build/dist/UI/Components/Forms/Utils/FormAnalyticsName.js +33 -0
- package/build/dist/UI/Components/Forms/Utils/FormAnalyticsName.js.map +1 -0
- 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/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/Modal/Modal.js +2 -2
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js +2 -1
- package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
- 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/Analytics.js +50 -2
- package/build/dist/Utils/Analytics.js.map +1 -1
- package/build/dist/Utils/Monitor/MonitorMetricType.js +37 -0
- package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js +318 -37
- package/build/dist/Utils/Monitor/NetworkDeviceLinkRuleUtil.js.map +1 -1
- package/build/dist/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.js +87 -0
- package/build/dist/Utils/NetworkDiscovery/UnclaimedScanDiagnosis.js.map +1 -0
- 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
|
@@ -235,6 +235,26 @@ export default class GlobalOIDC extends BaseModel {
|
|
|
235
235
|
})
|
|
236
236
|
public disableSignUpWithSso?: boolean = undefined;
|
|
237
237
|
|
|
238
|
+
@ColumnAccessControl({
|
|
239
|
+
create: [],
|
|
240
|
+
read: [],
|
|
241
|
+
update: [],
|
|
242
|
+
})
|
|
243
|
+
@TableColumn({
|
|
244
|
+
isDefaultValueColumn: true,
|
|
245
|
+
type: TableColumnType.Boolean,
|
|
246
|
+
title: "Restrict to Attached Projects",
|
|
247
|
+
description:
|
|
248
|
+
"When enabled, a login through this provider only satisfies SSO enforcement for the projects attached below. Leave this off (the default) and the provider satisfies SSO enforcement for every project the user is a member of, which is how attachments have always behaved - they are the provisioning allow-list, not an access boundary. Turning this on narrows access for people already signed in.",
|
|
249
|
+
defaultValue: false,
|
|
250
|
+
example: true,
|
|
251
|
+
})
|
|
252
|
+
@Column({
|
|
253
|
+
type: ColumnType.Boolean,
|
|
254
|
+
default: false,
|
|
255
|
+
})
|
|
256
|
+
public restrictToAttachedProjects?: boolean = undefined;
|
|
257
|
+
|
|
238
258
|
@ColumnAccessControl({
|
|
239
259
|
create: [],
|
|
240
260
|
read: [],
|
|
@@ -196,6 +196,26 @@ export default class GlobalSSO extends BaseModel {
|
|
|
196
196
|
})
|
|
197
197
|
public disableSignUpWithSso?: boolean = undefined;
|
|
198
198
|
|
|
199
|
+
@ColumnAccessControl({
|
|
200
|
+
create: [],
|
|
201
|
+
read: [],
|
|
202
|
+
update: [],
|
|
203
|
+
})
|
|
204
|
+
@TableColumn({
|
|
205
|
+
isDefaultValueColumn: true,
|
|
206
|
+
type: TableColumnType.Boolean,
|
|
207
|
+
title: "Restrict to Attached Projects",
|
|
208
|
+
description:
|
|
209
|
+
"When enabled, a login through this provider only satisfies SSO enforcement for the projects attached below. Leave this off (the default) and the provider satisfies SSO enforcement for every project the user is a member of, which is how attachments have always behaved - they are the provisioning allow-list, not an access boundary. Turning this on narrows access for people already signed in.",
|
|
210
|
+
defaultValue: false,
|
|
211
|
+
example: true,
|
|
212
|
+
})
|
|
213
|
+
@Column({
|
|
214
|
+
type: ColumnType.Boolean,
|
|
215
|
+
default: false,
|
|
216
|
+
})
|
|
217
|
+
public restrictToAttachedProjects?: boolean = undefined;
|
|
218
|
+
|
|
199
219
|
@ColumnAccessControl({
|
|
200
220
|
create: [],
|
|
201
221
|
read: [],
|
|
@@ -14,11 +14,13 @@ import ObjectID from "../../Types/ObjectID";
|
|
|
14
14
|
import { Column, Entity, Index } from "typeorm";
|
|
15
15
|
|
|
16
16
|
/*
|
|
17
|
-
* Internal table (no API access) recording
|
|
18
|
-
* signups and paid subscriptions
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
17
|
+
* Internal table (no API access) recording server-confirmed conversions —
|
|
18
|
+
* signups, booked meetings and paid subscriptions, along with any ad click IDs
|
|
19
|
+
* the converting visitor carried — and the status of uploading the
|
|
20
|
+
* ad-uploadable ones to ad platforms (Google Ads offline click conversions,
|
|
21
|
+
* Meta Conversions API). Browser analytics never write this table: rows are
|
|
22
|
+
* written by the signup/subscription flows and the Cal.com webhook, and read
|
|
23
|
+
* by the MarketingConversions worker job.
|
|
22
24
|
*/
|
|
23
25
|
@TableAccessControl({
|
|
24
26
|
create: [],
|
|
@@ -33,11 +35,18 @@ import { Column, Entity, Index } from "typeorm";
|
|
|
33
35
|
pluralName: "Marketing Conversions",
|
|
34
36
|
icon: IconProp.ChartBar,
|
|
35
37
|
tableDescription:
|
|
36
|
-
"
|
|
38
|
+
"Server-confirmed conversions (signups, meetings booked, paid subscriptions) and their upload status to ad platforms for offline conversion tracking.",
|
|
37
39
|
})
|
|
38
40
|
@Entity({
|
|
39
41
|
name: "MarketingConversion",
|
|
40
42
|
})
|
|
43
|
+
/*
|
|
44
|
+
* One conversion of each type per user/project. Postgres treats NULLs as
|
|
45
|
+
* distinct, so these indexes only constrain rows that actually carry a user or
|
|
46
|
+
* project id — conversion types with neither (a booked meeting from an
|
|
47
|
+
* anonymous visitor) are de-duplicated by their deterministic primary key
|
|
48
|
+
* instead.
|
|
49
|
+
*/
|
|
41
50
|
@Index("uq_marketing_conversion_type_user", ["conversionType", "userId"], {
|
|
42
51
|
unique: true,
|
|
43
52
|
})
|
|
@@ -58,7 +67,7 @@ export default class MarketingConversion extends BaseModel {
|
|
|
58
67
|
type: TableColumnType.ShortText,
|
|
59
68
|
required: true,
|
|
60
69
|
title: "Conversion Type",
|
|
61
|
-
description: "SignUp or PaidSubscription.",
|
|
70
|
+
description: "SignUp, MeetingBooked or PaidSubscription.",
|
|
62
71
|
})
|
|
63
72
|
@Column({
|
|
64
73
|
type: ColumnType.ShortText,
|
|
@@ -77,7 +86,8 @@ export default class MarketingConversion extends BaseModel {
|
|
|
77
86
|
type: TableColumnType.ObjectID,
|
|
78
87
|
required: false,
|
|
79
88
|
title: "User ID",
|
|
80
|
-
description:
|
|
89
|
+
description:
|
|
90
|
+
"User this conversion belongs to (SignUp conversions). Null when the conversion has no OneUptime user yet, as with a booked meeting.",
|
|
81
91
|
})
|
|
82
92
|
@Column({
|
|
83
93
|
type: ColumnType.ObjectID,
|
|
@@ -170,7 +180,7 @@ export default class MarketingConversion extends BaseModel {
|
|
|
170
180
|
required: false,
|
|
171
181
|
title: "Conversion Value (USD Cents)",
|
|
172
182
|
description:
|
|
173
|
-
"Conversion value in USD cents (monthly recurring revenue for paid subscriptions). Null when unknown (custom pricing) or not applicable (signups).",
|
|
183
|
+
"Conversion value in USD cents (monthly recurring revenue for paid subscriptions). Null when unknown (custom pricing) or not applicable (signups, booked meetings).",
|
|
174
184
|
})
|
|
175
185
|
@Column({
|
|
176
186
|
type: ColumnType.Number,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Label from "./Label";
|
|
2
2
|
import Project from "./Project";
|
|
3
3
|
import User from "./User";
|
|
4
|
+
import NetworkDeviceLinkRuleScope from "../../Types/NetworkDevice/NetworkDeviceLinkRuleScope";
|
|
4
5
|
import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
|
|
5
6
|
import Route from "../../Types/API/Route";
|
|
6
7
|
import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
|
|
@@ -42,6 +43,15 @@ import {
|
|
|
42
43
|
* cabling. Both cases are reported rather than silently producing an empty
|
|
43
44
|
* map — see NetworkDeviceLinkRuleUtil.
|
|
44
45
|
*
|
|
46
|
+
* "Exactly one" needs a universe, and `scope` names it. By default the
|
|
47
|
+
* question is asked across the whole project, which is what every rule
|
|
48
|
+
* written before that column existed means. Setting it to Site asks the same
|
|
49
|
+
* question once per site instead, so one rule draws the same router-to-switch
|
|
50
|
+
* star in every building rather than reporting fourteen candidate routers and
|
|
51
|
+
* drawing nothing anywhere. A site-scoped rule looks only inside each device's
|
|
52
|
+
* OWN site — it never reaches up to a parent site — and skips devices that
|
|
53
|
+
* have no site at all, reporting how many it walked past.
|
|
54
|
+
*
|
|
45
55
|
* Rules are evaluated when the topology is built, not materialised into
|
|
46
56
|
* NetworkDeviceLink rows: relabelling a device then shows up on the next
|
|
47
57
|
* refresh, and there is nothing to garbage-collect when a rule is deleted.
|
|
@@ -342,6 +352,42 @@ export default class NetworkDeviceLinkRule extends BaseModel {
|
|
|
342
352
|
})
|
|
343
353
|
public parentDeviceLabels?: Array<Label> = undefined;
|
|
344
354
|
|
|
355
|
+
@ColumnAccessControl({
|
|
356
|
+
create: [
|
|
357
|
+
Permission.ProjectOwner,
|
|
358
|
+
Permission.ProjectAdmin,
|
|
359
|
+
Permission.CreateNetworkDeviceLinkRule,
|
|
360
|
+
],
|
|
361
|
+
read: [
|
|
362
|
+
Permission.ProjectOwner,
|
|
363
|
+
Permission.ProjectAdmin,
|
|
364
|
+
Permission.ProjectMember,
|
|
365
|
+
Permission.Viewer,
|
|
366
|
+
Permission.ReadNetworkDeviceLinkRule,
|
|
367
|
+
],
|
|
368
|
+
update: [
|
|
369
|
+
Permission.ProjectOwner,
|
|
370
|
+
Permission.ProjectAdmin,
|
|
371
|
+
Permission.EditNetworkDeviceLinkRule,
|
|
372
|
+
],
|
|
373
|
+
})
|
|
374
|
+
@TableColumn({
|
|
375
|
+
required: false,
|
|
376
|
+
type: TableColumnType.ShortText,
|
|
377
|
+
canReadOnRelationQuery: true,
|
|
378
|
+
title: "Parent Scope",
|
|
379
|
+
description:
|
|
380
|
+
"How wide the 'exactly one parent device' question is asked. Project (the default) looks for one parent across the whole project. Site asks once per site, so the same rule can draw an uplink in every building. Rules created before this existed are Project.",
|
|
381
|
+
example: "Project",
|
|
382
|
+
})
|
|
383
|
+
@Column({
|
|
384
|
+
nullable: true,
|
|
385
|
+
type: ColumnType.ShortText,
|
|
386
|
+
length: ColumnLength.ShortText,
|
|
387
|
+
default: NetworkDeviceLinkRuleScope.Project,
|
|
388
|
+
})
|
|
389
|
+
public scope?: string = undefined;
|
|
390
|
+
|
|
345
391
|
@ColumnAccessControl({
|
|
346
392
|
create: [
|
|
347
393
|
Permission.ProjectOwner,
|
|
@@ -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",
|
|
@@ -928,7 +928,8 @@ export default class StatusPage extends BaseModel {
|
|
|
928
928
|
required: false,
|
|
929
929
|
type: TableColumnType.HTML,
|
|
930
930
|
title: "Header HTML",
|
|
931
|
-
description:
|
|
931
|
+
description:
|
|
932
|
+
"Status Page Custom HTML Header. Served only from a verified custom domain.",
|
|
932
933
|
})
|
|
933
934
|
@Column({
|
|
934
935
|
nullable: true,
|
|
@@ -973,7 +974,8 @@ export default class StatusPage extends BaseModel {
|
|
|
973
974
|
required: false,
|
|
974
975
|
type: TableColumnType.HTML,
|
|
975
976
|
title: "Footer HTML",
|
|
976
|
-
description:
|
|
977
|
+
description:
|
|
978
|
+
"Status Page Custom HTML Footer. Served only from a verified custom domain.",
|
|
977
979
|
})
|
|
978
980
|
@Column({
|
|
979
981
|
nullable: true,
|
|
@@ -1018,7 +1020,8 @@ export default class StatusPage extends BaseModel {
|
|
|
1018
1020
|
required: false,
|
|
1019
1021
|
type: TableColumnType.CSS,
|
|
1020
1022
|
title: "CSS",
|
|
1021
|
-
description:
|
|
1023
|
+
description:
|
|
1024
|
+
"Status Page Custom CSS. Served only from a verified custom domain.",
|
|
1022
1025
|
})
|
|
1023
1026
|
@Column({
|
|
1024
1027
|
nullable: true,
|
|
@@ -1064,7 +1067,7 @@ export default class StatusPage extends BaseModel {
|
|
|
1064
1067
|
type: TableColumnType.JavaScript,
|
|
1065
1068
|
title: "JavaScript",
|
|
1066
1069
|
description:
|
|
1067
|
-
"Status Page Custom JavaScript. This runs when the status page is loaded.",
|
|
1070
|
+
"Status Page Custom JavaScript. This runs when the status page is loaded from a verified custom domain.",
|
|
1068
1071
|
})
|
|
1069
1072
|
@Column({
|
|
1070
1073
|
nullable: 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;
|