@oneuptime/common 12.0.13 → 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/OnCallDutyPolicySchedule.ts +14 -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/Server/API/BaseAPI.ts +79 -14
- 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/1787700000000-FixTotpOtpUrlAlgorithm.ts +45 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/VerificationCodeRateLimit.ts +586 -0
- package/Server/Services/AnalyticsDatabaseService.ts +169 -0
- package/Server/Services/DatabaseService.ts +101 -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/Monitor/Criteria/IncomingRequestCriteria.ts +13 -16
- package/Server/Utils/Monitor/MonitorAlert.ts +24 -21
- package/Server/Utils/Monitor/MonitorIncident.ts +21 -18
- 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/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/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 +315 -0
- package/Tests/Server/Middleware/VerificationCodeRateLimit.test.ts +775 -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/LogAggregationScanMemory.test.ts +421 -0
- package/Tests/Server/Services/LogAggregationService.test.ts +2 -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/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/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/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/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/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/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/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/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/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/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/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/Rum/UrlScrubberSegments.test.ts +362 -0
- package/Types/Email/EmailTemplateType.ts +1 -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/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/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/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/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.js +14 -0
- package/build/dist/Models/DatabaseModels/OnCallDutyPolicySchedule.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/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/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 +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.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/DatabaseService.js +74 -0
- package/build/dist/Server/Services/DatabaseService.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/Monitor/Criteria/IncomingRequestCriteria.js +13 -12
- package/build/dist/Server/Utils/Monitor/Criteria/IncomingRequestCriteria.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/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/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/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/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/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/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/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
|
@@ -11,6 +11,31 @@ import NotAuthenticatedException from "../../Types/Exception/NotAuthenticatedExc
|
|
|
11
11
|
import ObjectID from "../../Types/ObjectID";
|
|
12
12
|
import PushDeviceType from "../../Types/PushNotification/PushDeviceType";
|
|
13
13
|
import UserPush from "../../Models/DatabaseModels/UserPush";
|
|
14
|
+
/*
|
|
15
|
+
* Booleans arrive from the mobile client as JSON booleans, but the same routes
|
|
16
|
+
* get called by hand and from form posts where "true" is a string.
|
|
17
|
+
*
|
|
18
|
+
* On REGISTRATION, absence is the normal case and means off: overriding a
|
|
19
|
+
* silenced phone is never something a device registration turns on by itself.
|
|
20
|
+
*/
|
|
21
|
+
export function parseCriticalAlertFlag(raw) {
|
|
22
|
+
return raw === true || raw === "true";
|
|
23
|
+
}
|
|
24
|
+
/*
|
|
25
|
+
* On the toggle route the caller is stating an intent, so an unrecognised
|
|
26
|
+
* value is refused rather than read as false. Quietly storing "off" for a
|
|
27
|
+
* client that meant "on" leaves a responder believing their phone will ring
|
|
28
|
+
* while it will not, and nothing surfaces the mistake until a missed page.
|
|
29
|
+
*/
|
|
30
|
+
export function parseCriticalAlertFlagStrict(raw) {
|
|
31
|
+
if (raw === true || raw === "true") {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
if (raw === false || raw === "false") {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
throw new BadDataException("isEnabled must be either true or false.");
|
|
38
|
+
}
|
|
14
39
|
function getAuthenticatedUserId(req) {
|
|
15
40
|
var _a;
|
|
16
41
|
const userId = (_a = req
|
|
@@ -63,6 +88,14 @@ export default class UserPushAPI extends BaseAPI {
|
|
|
63
88
|
userPush.deviceType = req.body.deviceType;
|
|
64
89
|
userPush.deviceName = req.body.deviceName || "Unknown Device";
|
|
65
90
|
userPush.isVerified = true; // Web, iOS, and Android devices are verified immediately
|
|
91
|
+
/*
|
|
92
|
+
* The mobile app sends this when the responder already had critical
|
|
93
|
+
* alerts on and the device is re-registering (a reinstall, a new push
|
|
94
|
+
* token, a second project). Absent, it stays off: overriding a
|
|
95
|
+
* silenced phone is never something a registration turns on by
|
|
96
|
+
* itself.
|
|
97
|
+
*/
|
|
98
|
+
userPush.isCriticalAlertEnabled = parseCriticalAlertFlag(req.body.isCriticalAlertEnabled);
|
|
66
99
|
const savedDevice = await this.service.create({
|
|
67
100
|
data: userPush,
|
|
68
101
|
props: {
|
|
@@ -139,6 +172,7 @@ export default class UserPushAPI extends BaseAPI {
|
|
|
139
172
|
deviceType: true,
|
|
140
173
|
isVerified: true,
|
|
141
174
|
projectId: true,
|
|
175
|
+
isCriticalAlertEnabled: true,
|
|
142
176
|
},
|
|
143
177
|
});
|
|
144
178
|
if (!device) {
|
|
@@ -153,13 +187,27 @@ export default class UserPushAPI extends BaseAPI {
|
|
|
153
187
|
}
|
|
154
188
|
try {
|
|
155
189
|
// Send test notification
|
|
190
|
+
const isCriticalAlert = Boolean(device.isCriticalAlertEnabled);
|
|
191
|
+
/*
|
|
192
|
+
* A test that behaves unlike the real page is not a test of
|
|
193
|
+
* anything. Critical alerts are the one setting whose effect a
|
|
194
|
+
* responder cannot check by reasoning about it - they have to
|
|
195
|
+
* silence the phone and hear it ring - so a device with the option
|
|
196
|
+
* on gets a test that overrides silent mode exactly as a 3am page
|
|
197
|
+
* would.
|
|
198
|
+
*/
|
|
156
199
|
const testMessage = PushNotificationUtil.createGenericNotification({
|
|
157
|
-
title:
|
|
158
|
-
|
|
200
|
+
title: isCriticalAlert
|
|
201
|
+
? "Test Critical Alert from OneUptime"
|
|
202
|
+
: "Test Notification from OneUptime",
|
|
203
|
+
body: isCriticalAlert
|
|
204
|
+
? "This is a test critical alert. If your device is silenced or in Do Not Disturb and you heard this, on-call pages will reach you."
|
|
205
|
+
: "This is a test notification to verify your device is working correctly.",
|
|
159
206
|
clickAction: "/dashboard",
|
|
160
207
|
tag: "test-notification",
|
|
161
208
|
requireInteraction: false,
|
|
162
209
|
});
|
|
210
|
+
testMessage.isCriticalAlert = isCriticalAlert;
|
|
163
211
|
await PushNotificationService.sendPushNotification({
|
|
164
212
|
devices: [
|
|
165
213
|
Object.assign({ token: device.deviceToken }, (device.deviceName && {
|
|
@@ -186,6 +234,51 @@ export default class UserPushAPI extends BaseAPI {
|
|
|
186
234
|
return next(error);
|
|
187
235
|
}
|
|
188
236
|
});
|
|
237
|
+
/*
|
|
238
|
+
* Turn "ring me through silent mode" on or off for this handset.
|
|
239
|
+
*
|
|
240
|
+
* A dedicated route rather than the generic CRUD update, for the same
|
|
241
|
+
* reason verify/unverify are: UserPush grants no update permission to
|
|
242
|
+
* anybody, so every write to it passes an explicit ownership check first
|
|
243
|
+
* and then runs as root. That keeps the set of things that can change a
|
|
244
|
+
* responder's paging configuration short and readable.
|
|
245
|
+
*
|
|
246
|
+
* Keyed on the device token, like unregister and unlike verify: the mobile
|
|
247
|
+
* app knows its own push token and holds no row ids, and one phone has a
|
|
248
|
+
* row per project it is registered against.
|
|
249
|
+
*/
|
|
250
|
+
this.router.post(`/user-push/critical-alerts`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
|
|
251
|
+
try {
|
|
252
|
+
req = req;
|
|
253
|
+
const userId = getAuthenticatedUserId(req);
|
|
254
|
+
if (!req.body.deviceToken) {
|
|
255
|
+
return Response.sendErrorResponse(req, res, new BadDataException("Device token is required"));
|
|
256
|
+
}
|
|
257
|
+
/*
|
|
258
|
+
* Required rather than defaulted. A request that forgot the field
|
|
259
|
+
* would otherwise silently turn the setting OFF, and a responder
|
|
260
|
+
* whose pages stopped overriding Do Not Disturb has no way to notice
|
|
261
|
+
* until the page they missed.
|
|
262
|
+
*/
|
|
263
|
+
if (req.body.isEnabled === undefined || req.body.isEnabled === null) {
|
|
264
|
+
return Response.sendErrorResponse(req, res, new BadDataException("isEnabled is required"));
|
|
265
|
+
}
|
|
266
|
+
const isEnabled = parseCriticalAlertFlagStrict(req.body.isEnabled);
|
|
267
|
+
const updatedCount = await this.service.setCriticalAlertEnabledForDeviceToken({
|
|
268
|
+
userId: userId,
|
|
269
|
+
deviceToken: req.body.deviceToken,
|
|
270
|
+
isEnabled: isEnabled,
|
|
271
|
+
});
|
|
272
|
+
return Response.sendJsonObjectResponse(req, res, {
|
|
273
|
+
success: true,
|
|
274
|
+
isCriticalAlertEnabled: isEnabled,
|
|
275
|
+
devicesUpdated: updatedCount,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
return next(error);
|
|
280
|
+
}
|
|
281
|
+
});
|
|
189
282
|
this.router.post(`/user-push/:deviceId/verify`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
|
|
190
283
|
var _a;
|
|
191
284
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserPushAPI.js","sourceRoot":"","sources":["../../../../Server/API/UserPushAPI.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UserPushAPI.js","sourceRoot":"","sources":["../../../../Server/API/UserPushAPI.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,35 @@
|
|
|
1
1
|
import UserMiddleware from "../Middleware/UserAuthorization";
|
|
2
|
+
import VerificationCodeRateLimit, { VerificationCodeRateLimitBucket, } from "../Middleware/VerificationCodeRateLimit";
|
|
2
3
|
import UserSMSService from "../Services/UserSmsService";
|
|
3
|
-
import
|
|
4
|
+
import ChannelVerification, { ChannelVerificationOutcome, } from "../Utils/ChannelVerification";
|
|
4
5
|
import Response from "../Utils/Response";
|
|
5
|
-
import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
|
|
6
6
|
import BaseAPI from "./BaseAPI";
|
|
7
7
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
8
8
|
import ObjectID from "../../Types/ObjectID";
|
|
9
9
|
import UserSMS from "../../Models/DatabaseModels/UserSMS";
|
|
10
|
+
import UserNotificationRuleService from "../Services/UserNotificationRuleService";
|
|
11
|
+
import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
|
|
12
|
+
/*
|
|
13
|
+
* The verify and resend routes for this notification channel.
|
|
14
|
+
*
|
|
15
|
+
* Neither the checking of a submitted code nor the issuing of a new one lives
|
|
16
|
+
* here, on purpose. The state machine is shared by all five channels
|
|
17
|
+
* (Common/Server/Utils/ChannelVerification.ts) so that a control added for one
|
|
18
|
+
* of them cannot quietly go missing on another — which is exactly what went
|
|
19
|
+
* wrong before: five hand-written copies of "compare the column, set
|
|
20
|
+
* isVerified", none of which expired the code, counted attempts, or refused a
|
|
21
|
+
* caller running the comparison a million times against somebody else's phone
|
|
22
|
+
* number.
|
|
23
|
+
*
|
|
24
|
+
* What is left here is the HTTP shape: reject malformed bodies, run the rate
|
|
25
|
+
* limiter before anything costs a database read, and turn the outcome into a
|
|
26
|
+
* response.
|
|
27
|
+
*/
|
|
10
28
|
export default class UserSMSAPI extends BaseAPI {
|
|
11
29
|
constructor() {
|
|
12
30
|
super(UserSMS, UserSMSService);
|
|
13
|
-
this.router.post(`/user-sms/verify`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
|
|
14
|
-
var _a
|
|
31
|
+
this.router.post(`/user-sms/verify`, UserMiddleware.getUserMiddleware, VerificationCodeRateLimit.getMiddleware(VerificationCodeRateLimitBucket.Verify), async (req, res, next) => {
|
|
32
|
+
var _a;
|
|
15
33
|
try {
|
|
16
34
|
req = req;
|
|
17
35
|
if (!req.body.itemId) {
|
|
@@ -20,45 +38,26 @@ export default class UserSMSAPI extends BaseAPI {
|
|
|
20
38
|
if (!req.body.code) {
|
|
21
39
|
return Response.sendErrorResponse(req, res, new BadDataException("Invalid code"));
|
|
22
40
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
id: req.body["itemId"],
|
|
26
|
-
props: {
|
|
27
|
-
isRoot: true,
|
|
28
|
-
},
|
|
29
|
-
select: {
|
|
30
|
-
userId: true,
|
|
31
|
-
projectId: true,
|
|
32
|
-
verificationCode: true,
|
|
33
|
-
},
|
|
34
|
-
});
|
|
35
|
-
if (!item) {
|
|
36
|
-
return Response.sendErrorResponse(req, res, new BadDataException("Item not found"));
|
|
37
|
-
}
|
|
38
|
-
//check user id
|
|
39
|
-
if (((_a = item.userId) === null || _a === void 0 ? void 0 : _a.toString()) !==
|
|
40
|
-
((_c = (_b = req === null || req === void 0 ? void 0 : req.userAuthorization) === null || _b === void 0 ? void 0 : _b.userId) === null || _c === void 0 ? void 0 : _c.toString())) {
|
|
41
|
+
const userId = (_a = req === null || req === void 0 ? void 0 : req.userAuthorization) === null || _a === void 0 ? void 0 : _a.userId;
|
|
42
|
+
if (!userId) {
|
|
41
43
|
return Response.sendErrorResponse(req, res, new BadDataException("Invalid user ID"));
|
|
42
44
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
props: {
|
|
49
|
-
isRoot: true,
|
|
50
|
-
},
|
|
51
|
-
data: {
|
|
52
|
-
isVerified: true,
|
|
53
|
-
},
|
|
45
|
+
const result = await ChannelVerification.verifyCode({
|
|
46
|
+
service: this.service,
|
|
47
|
+
itemId: new ObjectID(req.body["itemId"].toString()),
|
|
48
|
+
userId: userId,
|
|
49
|
+
code: req.body["code"].toString(),
|
|
54
50
|
});
|
|
55
|
-
|
|
51
|
+
if (result.outcome !== ChannelVerificationOutcome.Verified) {
|
|
52
|
+
return Response.sendErrorResponse(req, res, ChannelVerification.getFailureException(result.outcome));
|
|
53
|
+
}
|
|
54
|
+
/* Create default notification rules for this verified SMS number */
|
|
56
55
|
try {
|
|
57
56
|
await UserNotificationRuleService.addDefaultNotificationRulesForVerifiedMethod({
|
|
58
|
-
projectId: new ObjectID(
|
|
59
|
-
userId: new ObjectID(
|
|
57
|
+
projectId: new ObjectID(result.projectId.toString()),
|
|
58
|
+
userId: new ObjectID(result.userId.toString()),
|
|
60
59
|
notificationMethod: {
|
|
61
|
-
userSmsId:
|
|
60
|
+
userSmsId: result.itemId,
|
|
62
61
|
},
|
|
63
62
|
});
|
|
64
63
|
}
|
|
@@ -71,7 +70,7 @@ export default class UserSMSAPI extends BaseAPI {
|
|
|
71
70
|
return next(err);
|
|
72
71
|
}
|
|
73
72
|
});
|
|
74
|
-
this.router.post(`/user-sms/resend-verification-code`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
|
|
73
|
+
this.router.post(`/user-sms/resend-verification-code`, UserMiddleware.getUserMiddleware, VerificationCodeRateLimit.getMiddleware(VerificationCodeRateLimitBucket.Resend), async (req, res, next) => {
|
|
75
74
|
var _a, _b, _c;
|
|
76
75
|
try {
|
|
77
76
|
req = req;
|
|
@@ -90,6 +89,11 @@ export default class UserSMSAPI extends BaseAPI {
|
|
|
90
89
|
if (!item) {
|
|
91
90
|
return Response.sendErrorResponse(req, res, new BadDataException("Item not found"));
|
|
92
91
|
}
|
|
92
|
+
/*
|
|
93
|
+
* A caller may only ask for a code to be sent to a row they own.
|
|
94
|
+
* Without this the resend route is a way to make somebody else's
|
|
95
|
+
* device ring on demand.
|
|
96
|
+
*/
|
|
93
97
|
if (((_a = item.userId) === null || _a === void 0 ? void 0 : _a.toString()) !==
|
|
94
98
|
((_c = (_b = req === null || req === void 0 ? void 0 : req.userAuthorization) === null || _b === void 0 ? void 0 : _b.userId) === null || _c === void 0 ? void 0 : _c.toString())) {
|
|
95
99
|
return Response.sendErrorResponse(req, res, new BadDataException("Invalid user ID"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserSmsAPI.js","sourceRoot":"","sources":["../../../../Server/API/UserSmsAPI.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"UserSmsAPI.js","sourceRoot":"","sources":["../../../../Server/API/UserSmsAPI.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,36 @@
|
|
|
1
1
|
import UserMiddleware from "../Middleware/UserAuthorization";
|
|
2
|
+
import VerificationCodeRateLimit, { VerificationCodeRateLimitBucket, } from "../Middleware/VerificationCodeRateLimit";
|
|
2
3
|
import UserWhatsAppService from "../Services/UserWhatsAppService";
|
|
3
|
-
import
|
|
4
|
+
import ChannelVerification, { ChannelVerificationOutcome, } from "../Utils/ChannelVerification";
|
|
4
5
|
import Response from "../Utils/Response";
|
|
5
|
-
import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
|
|
6
6
|
import BaseAPI from "./BaseAPI";
|
|
7
7
|
import BadDataException from "../../Types/Exception/BadDataException";
|
|
8
8
|
import ObjectID from "../../Types/ObjectID";
|
|
9
9
|
import UserWhatsApp from "../../Models/DatabaseModels/UserWhatsApp";
|
|
10
|
+
import UserNotificationRuleService from "../Services/UserNotificationRuleService";
|
|
11
|
+
import logger, { getLogAttributesFromRequest } from "../Utils/Logger";
|
|
12
|
+
/*
|
|
13
|
+
* The verify and resend routes for this notification channel.
|
|
14
|
+
*
|
|
15
|
+
* Neither the checking of a submitted code nor the issuing of a new one lives
|
|
16
|
+
* here, on purpose. The state machine is shared by all five channels
|
|
17
|
+
* (Common/Server/Utils/ChannelVerification.ts) so that a control added for one
|
|
18
|
+
* of them cannot quietly go missing on another — which is exactly what went
|
|
19
|
+
* wrong before: five hand-written copies of "compare the column, set
|
|
20
|
+
* isVerified", none of which expired the code, counted attempts, or refused a
|
|
21
|
+
* caller running the comparison a million times against somebody else's phone
|
|
22
|
+
* number.
|
|
23
|
+
*
|
|
24
|
+
* What is left here is the HTTP shape: reject malformed bodies, run the rate
|
|
25
|
+
* limiter before anything costs a database read, and turn the outcome into a
|
|
26
|
+
* response.
|
|
27
|
+
*/
|
|
10
28
|
export default class UserWhatsAppAPI extends BaseAPI {
|
|
11
29
|
constructor() {
|
|
12
30
|
var _a, _b;
|
|
13
31
|
super(UserWhatsApp, UserWhatsAppService);
|
|
14
|
-
this.router.post(`${(_a = new this.entityType().getCrudApiPath()) === null || _a === void 0 ? void 0 : _a.toString()}/verify`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
|
|
15
|
-
var _a
|
|
32
|
+
this.router.post(`${(_a = new this.entityType().getCrudApiPath()) === null || _a === void 0 ? void 0 : _a.toString()}/verify`, UserMiddleware.getUserMiddleware, VerificationCodeRateLimit.getMiddleware(VerificationCodeRateLimitBucket.Verify), async (req, res, next) => {
|
|
33
|
+
var _a;
|
|
16
34
|
try {
|
|
17
35
|
req = req;
|
|
18
36
|
if (!req.body.itemId) {
|
|
@@ -21,47 +39,26 @@ export default class UserWhatsAppAPI extends BaseAPI {
|
|
|
21
39
|
if (!req.body.code) {
|
|
22
40
|
return Response.sendErrorResponse(req, res, new BadDataException("Invalid code"));
|
|
23
41
|
}
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
props: {
|
|
27
|
-
isRoot: true,
|
|
28
|
-
},
|
|
29
|
-
select: {
|
|
30
|
-
userId: true,
|
|
31
|
-
projectId: true,
|
|
32
|
-
verificationCode: true,
|
|
33
|
-
isVerified: true,
|
|
34
|
-
},
|
|
35
|
-
});
|
|
36
|
-
if (!item) {
|
|
37
|
-
return Response.sendErrorResponse(req, res, new BadDataException("Item not found"));
|
|
38
|
-
}
|
|
39
|
-
if (item.isVerified) {
|
|
40
|
-
return Response.sendErrorResponse(req, res, new BadDataException("WhatsApp number already verified"));
|
|
41
|
-
}
|
|
42
|
-
if (((_a = item.userId) === null || _a === void 0 ? void 0 : _a.toString()) !==
|
|
43
|
-
((_c = (_b = req === null || req === void 0 ? void 0 : req.userAuthorization) === null || _b === void 0 ? void 0 : _b.userId) === null || _c === void 0 ? void 0 : _c.toString())) {
|
|
42
|
+
const userId = (_a = req === null || req === void 0 ? void 0 : req.userAuthorization) === null || _a === void 0 ? void 0 : _a.userId;
|
|
43
|
+
if (!userId) {
|
|
44
44
|
return Response.sendErrorResponse(req, res, new BadDataException("Invalid user ID"));
|
|
45
45
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
props: {
|
|
52
|
-
isRoot: true,
|
|
53
|
-
},
|
|
54
|
-
data: {
|
|
55
|
-
isVerified: true,
|
|
56
|
-
},
|
|
46
|
+
const result = await ChannelVerification.verifyCode({
|
|
47
|
+
service: this.service,
|
|
48
|
+
itemId: new ObjectID(req.body["itemId"].toString()),
|
|
49
|
+
userId: userId,
|
|
50
|
+
code: req.body["code"].toString(),
|
|
57
51
|
});
|
|
58
|
-
|
|
52
|
+
if (result.outcome !== ChannelVerificationOutcome.Verified) {
|
|
53
|
+
return Response.sendErrorResponse(req, res, ChannelVerification.getFailureException(result.outcome));
|
|
54
|
+
}
|
|
55
|
+
/* Create default notification rules for this verified WhatsApp number */
|
|
59
56
|
try {
|
|
60
57
|
await UserNotificationRuleService.addDefaultNotificationRulesForVerifiedMethod({
|
|
61
|
-
projectId: new ObjectID(
|
|
62
|
-
userId: new ObjectID(
|
|
58
|
+
projectId: new ObjectID(result.projectId.toString()),
|
|
59
|
+
userId: new ObjectID(result.userId.toString()),
|
|
63
60
|
notificationMethod: {
|
|
64
|
-
userWhatsAppId:
|
|
61
|
+
userWhatsAppId: result.itemId,
|
|
65
62
|
},
|
|
66
63
|
});
|
|
67
64
|
}
|
|
@@ -75,7 +72,7 @@ export default class UserWhatsAppAPI extends BaseAPI {
|
|
|
75
72
|
}
|
|
76
73
|
});
|
|
77
74
|
this.router.post(`${(_b = new this.entityType()
|
|
78
|
-
.getCrudApiPath()) === null || _b === void 0 ? void 0 : _b.toString()}/resend-verification-code`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
|
|
75
|
+
.getCrudApiPath()) === null || _b === void 0 ? void 0 : _b.toString()}/resend-verification-code`, UserMiddleware.getUserMiddleware, VerificationCodeRateLimit.getMiddleware(VerificationCodeRateLimitBucket.Resend), async (req, res, next) => {
|
|
79
76
|
var _a, _b, _c;
|
|
80
77
|
try {
|
|
81
78
|
req = req;
|
|
@@ -94,6 +91,11 @@ export default class UserWhatsAppAPI extends BaseAPI {
|
|
|
94
91
|
if (!item) {
|
|
95
92
|
return Response.sendErrorResponse(req, res, new BadDataException("Item not found"));
|
|
96
93
|
}
|
|
94
|
+
/*
|
|
95
|
+
* A caller may only ask for a code to be sent to a row they own.
|
|
96
|
+
* Without this the resend route is a way to make somebody else's
|
|
97
|
+
* device ring on demand.
|
|
98
|
+
*/
|
|
97
99
|
if (((_a = item.userId) === null || _a === void 0 ? void 0 : _a.toString()) !==
|
|
98
100
|
((_c = (_b = req === null || req === void 0 ? void 0 : req.userAuthorization) === null || _b === void 0 ? void 0 : _b.userId) === null || _c === void 0 ? void 0 : _c.toString())) {
|
|
99
101
|
return Response.sendErrorResponse(req, res, new BadDataException("Invalid user ID"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserWhatsAppAPI.js","sourceRoot":"","sources":["../../../../Server/API/UserWhatsAppAPI.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"UserWhatsAppAPI.js","sourceRoot":"","sources":["../../../../Server/API/UserWhatsAppAPI.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,yBAAyB,EAAE,EAChC,+BAA+B,GAChC,MAAM,yCAAyC,CAAC;AACjD,OAAO,mBAEN,MAAM,iCAAiC,CAAC;AAOzC,OAAO,mBAAmB,EAAE,EAC1B,0BAA0B,GAE3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,gBAAgB,MAAM,wCAAwC,CAAC;AACtE,OAAO,QAAQ,MAAM,sBAAsB,CAAC;AAC5C,OAAO,YAAY,MAAM,0CAA0C,CAAC;AACpE,OAAO,2BAA2B,MAAM,yCAAyC,CAAC;AAClF,OAAO,MAAM,EAAE,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAEtE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAG5C;IACC;;QACE,KAAK,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;QAEzC,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,GAAG,MAAA,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,cAAc,EAAE,0CAAE,QAAQ,EAAE,SAAS,EAC9D,cAAc,CAAC,iBAAiB,EAChC,yBAAyB,CAAC,aAAa,CACrC,+BAA+B,CAAC,MAAM,CACvC,EACD,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;;YACtE,IAAI,CAAC;gBACH,GAAG,GAAG,GAAuB,CAAC;gBAE9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACrB,OAAO,QAAQ,CAAC,iBAAiB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,CACxC,CAAC;gBACJ,CAAC;gBAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACnB,OAAO,QAAQ,CAAC,iBAAiB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,gBAAgB,CAAC,cAAc,CAAC,CACrC,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAyB,MAAC,GAAwB,aAAxB,GAAG,uBAAH,GAAG,CACrC,iBAAiB,0CAAE,MAAM,CAAC;gBAE9B,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,QAAQ,CAAC,iBAAiB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,CACxC,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GACV,MAAM,mBAAmB,CAAC,UAAU,CAAC;oBACnC,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,MAAM,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACnD,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;iBAClC,CAAC,CAAC;gBAEL,IAAI,MAAM,CAAC,OAAO,KAAK,0BAA0B,CAAC,QAAQ,EAAE,CAAC;oBAC3D,OAAO,QAAQ,CAAC,iBAAiB,CAC/B,GAAG,EACH,GAAG,EACH,mBAAmB,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CACxD,CAAC;gBACJ,CAAC;gBAED,yEAAyE;gBACzE,IAAI,CAAC;oBACH,MAAM,2BAA2B,CAAC,4CAA4C,CAC5E;wBACE,SAAS,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAU,CAAC,QAAQ,EAAE,CAAC;wBACrD,MAAM,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAO,CAAC,QAAQ,EAAE,CAAC;wBAC/C,kBAAkB,EAAE;4BAClB,cAAc,EAAE,MAAM,CAAC,MAAO;yBAC/B;qBACF,CACF,CAAC;gBACJ,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,CACV,CAAC,EACD,2BAA2B,CAAC,GAAuB,CAAC,CACrD,CAAC;gBACJ,CAAC;gBAED,OAAO,QAAQ,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,GAAG,MAAA,IAAI,IAAI,CAAC,UAAU,EAAE;aACrB,cAAc,EAAE,0CACf,QAAQ,EAAE,2BAA2B,EACzC,cAAc,CAAC,iBAAiB,EAChC,yBAAyB,CAAC,aAAa,CACrC,+BAA+B,CAAC,MAAM,CACvC,EACD,KAAK,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAkB,EAAE,EAAE;;YACtE,IAAI,CAAC;gBACH,GAAG,GAAG,GAAuB,CAAC;gBAE9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACrB,OAAO,QAAQ,CAAC,iBAAiB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,CACxC,CAAC;gBACJ,CAAC;gBAED,MAAM,IAAI,GAAwB,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;oBAC/D,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;oBACtB,KAAK,EAAE;wBACL,MAAM,EAAE,IAAI;qBACb;oBACD,MAAM,EAAE;wBACN,MAAM,EAAE,IAAI;qBACb;iBACF,CAAC,CAAC;gBAEH,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,OAAO,QAAQ,CAAC,iBAAiB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CACvC,CAAC;gBACJ,CAAC;gBAED;;;;mBAIG;gBACH,IACE,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,QAAQ,EAAE;qBACvB,MAAA,MAAC,GAAwB,aAAxB,GAAG,uBAAH,GAAG,CAAuB,iBAAiB,0CAAE,MAAM,0CAAE,QAAQ,EAAE,CAAA,EAChE,CAAC;oBACD,OAAO,QAAQ,CAAC,iBAAiB,CAC/B,GAAG,EACH,GAAG,EACH,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,CACxC,CAAC;gBACJ,CAAC;gBAED,MAAM,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAE3D,OAAO,QAAQ,CAAC,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;CACF"}
|
package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* GHSA-5cr8-vph4-3hrf: expiry, attempt counting and resend throttling for the
|
|
3
|
+
* notification-channel verification codes.
|
|
4
|
+
*
|
|
5
|
+
* Three columns per channel table:
|
|
6
|
+
*
|
|
7
|
+
* verificationCodeExpiresAt NULL means there is no live code. Every row
|
|
8
|
+
* that exists when this runs gets NULL, which
|
|
9
|
+
* is read as expired — so the plaintext codes
|
|
10
|
+
* those rows are carrying stop being accepted
|
|
11
|
+
* the moment this lands, and their owners
|
|
12
|
+
* press "resend" once. That is the intended
|
|
13
|
+
* behaviour, not a side effect: those codes
|
|
14
|
+
* never expired and were never attempt-limited.
|
|
15
|
+
*
|
|
16
|
+
* verificationFailedAttempts The counter that bounds guessing. NOT NULL
|
|
17
|
+
* DEFAULT 0 so the atomic increment never has
|
|
18
|
+
* to deal with a NULL.
|
|
19
|
+
*
|
|
20
|
+
* verificationCodeSentAt Drives the resend cooldown. NULL on existing
|
|
21
|
+
* rows, which allows one immediate resend —
|
|
22
|
+
* correct, since the code they hold has just
|
|
23
|
+
* been invalidated above.
|
|
24
|
+
*
|
|
25
|
+
* The up() also SCRUBS the plaintext codes those rows are still carrying.
|
|
26
|
+
* They are already unusable by the time the scrub runs, but they are live
|
|
27
|
+
* six-digit secrets sitting in a table, its replicas and every backup taken
|
|
28
|
+
* while they were there, and the whole point of the change this migration
|
|
29
|
+
* supports is that the column holds a keyed digest and never the code.
|
|
30
|
+
*/
|
|
31
|
+
export class MigrationName1787142779538 {
|
|
32
|
+
constructor() {
|
|
33
|
+
this.name = "MigrationName1787142779538";
|
|
34
|
+
}
|
|
35
|
+
async up(queryRunner) {
|
|
36
|
+
await queryRunner.query(`ALTER TABLE "UserCall" ADD "verificationCodeExpiresAt" TIMESTAMP WITH TIME ZONE`);
|
|
37
|
+
await queryRunner.query(`ALTER TABLE "UserCall" ADD "verificationFailedAttempts" integer NOT NULL DEFAULT '0'`);
|
|
38
|
+
await queryRunner.query(`ALTER TABLE "UserCall" ADD "verificationCodeSentAt" TIMESTAMP WITH TIME ZONE`);
|
|
39
|
+
await queryRunner.query(`ALTER TABLE "UserEmail" ADD "verificationCodeExpiresAt" TIMESTAMP WITH TIME ZONE`);
|
|
40
|
+
await queryRunner.query(`ALTER TABLE "UserEmail" ADD "verificationFailedAttempts" integer NOT NULL DEFAULT '0'`);
|
|
41
|
+
await queryRunner.query(`ALTER TABLE "UserEmail" ADD "verificationCodeSentAt" TIMESTAMP WITH TIME ZONE`);
|
|
42
|
+
await queryRunner.query(`ALTER TABLE "UserSMS" ADD "verificationCodeExpiresAt" TIMESTAMP WITH TIME ZONE`);
|
|
43
|
+
await queryRunner.query(`ALTER TABLE "UserSMS" ADD "verificationFailedAttempts" integer NOT NULL DEFAULT '0'`);
|
|
44
|
+
await queryRunner.query(`ALTER TABLE "UserSMS" ADD "verificationCodeSentAt" TIMESTAMP WITH TIME ZONE`);
|
|
45
|
+
await queryRunner.query(`ALTER TABLE "UserWhatsApp" ADD "verificationCodeExpiresAt" TIMESTAMP WITH TIME ZONE`);
|
|
46
|
+
await queryRunner.query(`ALTER TABLE "UserWhatsApp" ADD "verificationFailedAttempts" integer NOT NULL DEFAULT '0'`);
|
|
47
|
+
await queryRunner.query(`ALTER TABLE "UserWhatsApp" ADD "verificationCodeSentAt" TIMESTAMP WITH TIME ZONE`);
|
|
48
|
+
await queryRunner.query(`ALTER TABLE "UserIncomingCallNumber" ADD "verificationCodeExpiresAt" TIMESTAMP WITH TIME ZONE`);
|
|
49
|
+
await queryRunner.query(`ALTER TABLE "UserIncomingCallNumber" ADD "verificationFailedAttempts" integer NOT NULL DEFAULT '0'`);
|
|
50
|
+
await queryRunner.query(`ALTER TABLE "UserIncomingCallNumber" ADD "verificationCodeSentAt" TIMESTAMP WITH TIME ZONE`);
|
|
51
|
+
/*
|
|
52
|
+
* Replace every stored plaintext code with a value nothing can hash
|
|
53
|
+
* to. Two md5s give the 64 hex characters a real digest has, using
|
|
54
|
+
* only functions core Postgres always has — gen_random_bytes would
|
|
55
|
+
* need pgcrypto, which is not a dependency this schema otherwise has.
|
|
56
|
+
*
|
|
57
|
+
* Restricted to values that look like a code rather than applied
|
|
58
|
+
* blindly, so re-running against a database that has already moved on
|
|
59
|
+
* cannot damage a real digest.
|
|
60
|
+
*/
|
|
61
|
+
for (const tableName of [
|
|
62
|
+
"UserEmail",
|
|
63
|
+
"UserSMS",
|
|
64
|
+
"UserCall",
|
|
65
|
+
"UserWhatsApp",
|
|
66
|
+
"UserIncomingCallNumber",
|
|
67
|
+
]) {
|
|
68
|
+
await queryRunner.query(`UPDATE "${tableName}" SET "verificationCode" = md5(random()::text || clock_timestamp()::text) || md5(random()::text || clock_timestamp()::text) WHERE "verificationCode" ~ '^[0-9]{1,10}$'`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async down(queryRunner) {
|
|
72
|
+
await queryRunner.query(`ALTER TABLE "UserIncomingCallNumber" DROP COLUMN "verificationCodeSentAt"`);
|
|
73
|
+
await queryRunner.query(`ALTER TABLE "UserIncomingCallNumber" DROP COLUMN "verificationFailedAttempts"`);
|
|
74
|
+
await queryRunner.query(`ALTER TABLE "UserIncomingCallNumber" DROP COLUMN "verificationCodeExpiresAt"`);
|
|
75
|
+
await queryRunner.query(`ALTER TABLE "UserWhatsApp" DROP COLUMN "verificationCodeSentAt"`);
|
|
76
|
+
await queryRunner.query(`ALTER TABLE "UserWhatsApp" DROP COLUMN "verificationFailedAttempts"`);
|
|
77
|
+
await queryRunner.query(`ALTER TABLE "UserWhatsApp" DROP COLUMN "verificationCodeExpiresAt"`);
|
|
78
|
+
await queryRunner.query(`ALTER TABLE "UserSMS" DROP COLUMN "verificationCodeSentAt"`);
|
|
79
|
+
await queryRunner.query(`ALTER TABLE "UserSMS" DROP COLUMN "verificationFailedAttempts"`);
|
|
80
|
+
await queryRunner.query(`ALTER TABLE "UserSMS" DROP COLUMN "verificationCodeExpiresAt"`);
|
|
81
|
+
await queryRunner.query(`ALTER TABLE "UserEmail" DROP COLUMN "verificationCodeSentAt"`);
|
|
82
|
+
await queryRunner.query(`ALTER TABLE "UserEmail" DROP COLUMN "verificationFailedAttempts"`);
|
|
83
|
+
await queryRunner.query(`ALTER TABLE "UserEmail" DROP COLUMN "verificationCodeExpiresAt"`);
|
|
84
|
+
await queryRunner.query(`ALTER TABLE "UserCall" DROP COLUMN "verificationCodeSentAt"`);
|
|
85
|
+
await queryRunner.query(`ALTER TABLE "UserCall" DROP COLUMN "verificationFailedAttempts"`);
|
|
86
|
+
await queryRunner.query(`ALTER TABLE "UserCall" DROP COLUMN "verificationCodeExpiresAt"`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=1787142779538-MigrationName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1787142779538-MigrationName.js","sourceRoot":"","sources":["../../../../../../Server/Infrastructure/Postgres/SchemaMigrations/1787142779538-MigrationName.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,MAAM,OAAO,0BAA0B;IAAvC;QACS,SAAI,GAAW,4BAA4B,CAAC;IAuHrD,CAAC;IArHQ,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,WAAW,CAAC,KAAK,CACrB,iFAAiF,CAClF,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,sFAAsF,CACvF,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,8EAA8E,CAC/E,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,kFAAkF,CACnF,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,uFAAuF,CACxF,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,+EAA+E,CAChF,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,gFAAgF,CACjF,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,qFAAqF,CACtF,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,6EAA6E,CAC9E,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,qFAAqF,CACtF,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,0FAA0F,CAC3F,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,kFAAkF,CACnF,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,+FAA+F,CAChG,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,oGAAoG,CACrG,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,4FAA4F,CAC7F,CAAC;QAEF;;;;;;;;;WASG;QACH,KAAK,MAAM,SAAS,IAAI;YACtB,WAAW;YACX,SAAS;YACT,UAAU;YACV,cAAc;YACd,wBAAwB;SACzB,EAAE,CAAC;YACF,MAAM,WAAW,CAAC,KAAK,CACrB,WAAW,SAAS,wKAAwK,CAC7L,CAAC;QACJ,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACxC,MAAM,WAAW,CAAC,KAAK,CACrB,2EAA2E,CAC5E,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,+EAA+E,CAChF,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,8EAA8E,CAC/E,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,iEAAiE,CAClE,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,qEAAqE,CACtE,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,oEAAoE,CACrE,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,4DAA4D,CAC7D,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,gEAAgE,CACjE,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,+DAA+D,CAChE,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,8DAA8D,CAC/D,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,kEAAkE,CACnE,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,iEAAiE,CAClE,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,6DAA6D,CAC9D,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,iEAAiE,CAClE,CAAC;QACF,MAAM,WAAW,CAAC,KAAK,CACrB,gEAAgE,CACjE,CAAC;IACJ,CAAC;CACF"}
|
package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export class MigrationName1787156982416 {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.name = "MigrationName1787156982416";
|
|
4
|
+
}
|
|
5
|
+
async up(queryRunner) {
|
|
6
|
+
await queryRunner.query(`ALTER TABLE "UserPush" ADD "isCriticalAlertEnabled" boolean NOT NULL DEFAULT false`);
|
|
7
|
+
}
|
|
8
|
+
async down(queryRunner) {
|
|
9
|
+
await queryRunner.query(`ALTER TABLE "UserPush" DROP COLUMN "isCriticalAlertEnabled"`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=1787156982416-MigrationName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1787156982416-MigrationName.js","sourceRoot":"","sources":["../../../../../../Server/Infrastructure/Postgres/SchemaMigrations/1787156982416-MigrationName.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,0BAA0B;IAAvC;QACS,SAAI,GAAG,4BAA4B,CAAC;IAa7C,CAAC;IAXQ,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,WAAW,CAAC,KAAK,CACrB,oFAAoF,CACrF,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACxC,MAAM,WAAW,CAAC,KAAK,CACrB,6DAA6D,CAC9D,CAAC;IACJ,CAAC;CACF"}
|