@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
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
import JsonToText from "../../../../../Server/Types/Workflow/Components/JSON/JsonToText";
|
|
2
|
+
import {
|
|
3
|
+
RunOptions,
|
|
4
|
+
RunReturnType,
|
|
5
|
+
} from "../../../../../Server/Types/Workflow/ComponentCode";
|
|
6
|
+
import logger from "../../../../../Server/Utils/Logger";
|
|
7
|
+
import Exception from "../../../../../Types/Exception/Exception";
|
|
8
|
+
import { JSONObject } from "../../../../../Types/JSON";
|
|
9
|
+
import ObjectID from "../../../../../Types/ObjectID";
|
|
10
|
+
import ComponentMetadata, {
|
|
11
|
+
Port,
|
|
12
|
+
} from "../../../../../Types/Workflow/Component";
|
|
13
|
+
import ComponentID from "../../../../../Types/Workflow/ComponentID";
|
|
14
|
+
import { afterEach, describe, expect, test } from "@jest/globals";
|
|
15
|
+
|
|
16
|
+
/*
|
|
17
|
+
* Fixture bundling the RunOptions passed to the component together with the
|
|
18
|
+
* spy-able mocks embedded inside it, so a test can both drive the component and
|
|
19
|
+
* assert on how the component talked back through `onError` / `log`.
|
|
20
|
+
*/
|
|
21
|
+
interface OptionsFixture {
|
|
22
|
+
options: RunOptions;
|
|
23
|
+
onError: jest.Mock;
|
|
24
|
+
log: jest.Mock;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/*
|
|
28
|
+
* Build a deterministic RunOptions object. `onError` echoes the exception it is
|
|
29
|
+
* given (mirroring the real runner, which returns the exception so callers can
|
|
30
|
+
* `throw options.onError(...)`) while recording that it was invoked. No wall
|
|
31
|
+
* clock, network, or randomness is involved.
|
|
32
|
+
*/
|
|
33
|
+
function makeOptions(): OptionsFixture {
|
|
34
|
+
const log: jest.Mock = jest.fn();
|
|
35
|
+
const onError: jest.Mock = jest.fn((exception: Exception): Exception => {
|
|
36
|
+
return exception;
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
log,
|
|
41
|
+
onError,
|
|
42
|
+
options: {
|
|
43
|
+
log: log as RunOptions["log"],
|
|
44
|
+
workflowLogId: ObjectID.generate(),
|
|
45
|
+
workflowId: ObjectID.generate(),
|
|
46
|
+
projectId: ObjectID.generate(),
|
|
47
|
+
onError: onError as RunOptions["onError"],
|
|
48
|
+
executeWorkflow: async (): Promise<void> => {},
|
|
49
|
+
} as RunOptions,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/*
|
|
54
|
+
* Convenience wrapper: run a fresh JsonToText with the supplied args and return
|
|
55
|
+
* both the fixture (for `onError` / `log` assertions) and the promise, without
|
|
56
|
+
* awaiting, so error-path tests can use `expect(...).rejects`.
|
|
57
|
+
*/
|
|
58
|
+
function runJsonToText(args: JSONObject): {
|
|
59
|
+
fixture: OptionsFixture;
|
|
60
|
+
result: Promise<RunReturnType>;
|
|
61
|
+
} {
|
|
62
|
+
const fixture: OptionsFixture = makeOptions();
|
|
63
|
+
const result: Promise<RunReturnType> = new JsonToText().run(
|
|
64
|
+
args,
|
|
65
|
+
fixture.options,
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
return { fixture, result };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
afterEach(() => {
|
|
72
|
+
jest.restoreAllMocks();
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
describe("JsonToText constructor and metadata", () => {
|
|
76
|
+
test("wires up the JSON to Text component metadata", () => {
|
|
77
|
+
const component: JsonToText = new JsonToText();
|
|
78
|
+
const metadata: ComponentMetadata = component.getMetadata();
|
|
79
|
+
|
|
80
|
+
expect(metadata.id).toBe(ComponentID.JsonToText);
|
|
81
|
+
expect(metadata.title).toBe("JSON to Text");
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
test("exposes both success and error out ports", () => {
|
|
85
|
+
const metadata: ComponentMetadata = new JsonToText().getMetadata();
|
|
86
|
+
const portIds: Array<string> = metadata.outPorts.map((p: Port): string => {
|
|
87
|
+
return p.id;
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
expect(portIds).toContain("success");
|
|
91
|
+
expect(portIds).toContain("error");
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
test("declares a single `text` return value", () => {
|
|
95
|
+
const metadata: ComponentMetadata = new JsonToText().getMetadata();
|
|
96
|
+
const returnValueIds: Array<string> = metadata.returnValues.map(
|
|
97
|
+
(r: { id: string }): string => {
|
|
98
|
+
return r.id;
|
|
99
|
+
},
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
expect(returnValueIds).toEqual(["text"]);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
describe("JsonToText successful conversions from object input", () => {
|
|
107
|
+
test("serializes a simple object and routes to the success port", async () => {
|
|
108
|
+
const {
|
|
109
|
+
fixture,
|
|
110
|
+
result,
|
|
111
|
+
}: { fixture: OptionsFixture; result: Promise<RunReturnType> } =
|
|
112
|
+
runJsonToText({ json: { a: 1, b: "two" } });
|
|
113
|
+
|
|
114
|
+
const value: RunReturnType = await result;
|
|
115
|
+
|
|
116
|
+
expect(value.executePort?.id).toBe("success");
|
|
117
|
+
expect(value.returnValues).toEqual({ text: '{"a":1,"b":"two"}' });
|
|
118
|
+
expect(fixture.onError).not.toHaveBeenCalled();
|
|
119
|
+
expect(fixture.log).not.toHaveBeenCalled();
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
test("returns the text as a string type, not the original object", async () => {
|
|
123
|
+
const value: RunReturnType = await runJsonToText({
|
|
124
|
+
json: { nested: { deep: [1, 2, 3] } },
|
|
125
|
+
}).result;
|
|
126
|
+
|
|
127
|
+
expect(typeof value.returnValues["text"]).toBe("string");
|
|
128
|
+
expect(value.returnValues["text"]).toBe('{"nested":{"deep":[1,2,3]}}');
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
test("serializes an empty object to the two-character string {}", async () => {
|
|
132
|
+
const value: RunReturnType = await runJsonToText({ json: {} }).result;
|
|
133
|
+
|
|
134
|
+
expect(value.returnValues).toEqual({ text: "{}" });
|
|
135
|
+
expect(value.executePort?.id).toBe("success");
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
test("preserves key insertion order in the serialized text", async () => {
|
|
139
|
+
const value: RunReturnType = await runJsonToText({
|
|
140
|
+
json: { z: 1, a: 2, m: 3 },
|
|
141
|
+
}).result;
|
|
142
|
+
|
|
143
|
+
expect(value.returnValues["text"]).toBe('{"z":1,"a":2,"m":3}');
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
describe("JsonToText array inputs", () => {
|
|
148
|
+
/*
|
|
149
|
+
* `typeof [] === "object"` and a populated array is truthy, so an array slips
|
|
150
|
+
* past both guards and is serialized as a JSON array. This documents the real
|
|
151
|
+
* (arguably surprising) behavior rather than prescribing it.
|
|
152
|
+
*/
|
|
153
|
+
test("serializes a populated array to a JSON array string via the success port", async () => {
|
|
154
|
+
const value: RunReturnType = await runJsonToText({
|
|
155
|
+
json: ["x", "y"] as unknown as JSONObject,
|
|
156
|
+
}).result;
|
|
157
|
+
|
|
158
|
+
expect(value.returnValues["text"]).toBe('["x","y"]');
|
|
159
|
+
expect(value.executePort?.id).toBe("success");
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
test("serializes an empty array to the two-character string []", async () => {
|
|
163
|
+
/*
|
|
164
|
+
* An empty array is still truthy, so it is not rejected by the
|
|
165
|
+
* `!args["json"]` guard the way an empty object literal-string would be.
|
|
166
|
+
*/
|
|
167
|
+
const value: RunReturnType = await runJsonToText({
|
|
168
|
+
json: [] as unknown as JSONObject,
|
|
169
|
+
}).result;
|
|
170
|
+
|
|
171
|
+
expect(value.returnValues["text"]).toBe("[]");
|
|
172
|
+
expect(value.executePort?.id).toBe("success");
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
describe("JsonToText string inputs parsed as JSON", () => {
|
|
177
|
+
test("parses a strict JSON string, then re-serializes it as text", async () => {
|
|
178
|
+
const value: RunReturnType = await runJsonToText({
|
|
179
|
+
json: '{"name":"alice","age":30}',
|
|
180
|
+
}).result;
|
|
181
|
+
|
|
182
|
+
expect(value.returnValues["text"]).toBe('{"name":"alice","age":30}');
|
|
183
|
+
expect(value.executePort?.id).toBe("success");
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
test("canonicalizes lenient JSON5 (single quotes, unquoted keys, trailing commas)", async () => {
|
|
187
|
+
const value: RunReturnType = await runJsonToText({
|
|
188
|
+
json: "{ a: 'one', b: 'two', }",
|
|
189
|
+
}).result;
|
|
190
|
+
|
|
191
|
+
/*
|
|
192
|
+
* JSONFunctions.parse delegates to JSON5, so lenient syntax parses; the
|
|
193
|
+
* subsequent JSON.stringify emits strict, canonical JSON.
|
|
194
|
+
*/
|
|
195
|
+
expect(value.returnValues["text"]).toBe('{"a":"one","b":"two"}');
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
test("treats the string 'null' as a parsed null that passes the object guard", async () => {
|
|
199
|
+
/*
|
|
200
|
+
* JSON5 parses the literal to `null`, and `typeof null === "object"`, so the
|
|
201
|
+
* type guard does not fire and JSON.stringify(null) yields the text "null".
|
|
202
|
+
* Contrast this with a direct null argument, which is rejected as undefined.
|
|
203
|
+
*/
|
|
204
|
+
const {
|
|
205
|
+
fixture,
|
|
206
|
+
result,
|
|
207
|
+
}: { fixture: OptionsFixture; result: Promise<RunReturnType> } =
|
|
208
|
+
runJsonToText({ json: "null" });
|
|
209
|
+
|
|
210
|
+
const value: RunReturnType = await result;
|
|
211
|
+
|
|
212
|
+
expect(value.returnValues["text"]).toBe("null");
|
|
213
|
+
expect(value.executePort?.id).toBe("success");
|
|
214
|
+
expect(fixture.onError).not.toHaveBeenCalled();
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
test("surfaces a raw parse error (not routed through onError) for a malformed json string", async () => {
|
|
218
|
+
const {
|
|
219
|
+
fixture,
|
|
220
|
+
result,
|
|
221
|
+
}: { fixture: OptionsFixture; result: Promise<RunReturnType> } =
|
|
222
|
+
runJsonToText({ json: "{ this is not valid" });
|
|
223
|
+
|
|
224
|
+
await expect(result).rejects.toThrow();
|
|
225
|
+
/*
|
|
226
|
+
* The parse happens outside the onError-wrapped guards, so a bad JSON string
|
|
227
|
+
* escapes as a raw parser exception rather than being routed to the
|
|
228
|
+
* component's error port.
|
|
229
|
+
*/
|
|
230
|
+
expect(fixture.onError).not.toHaveBeenCalled();
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
describe("JsonToText json argument validation", () => {
|
|
235
|
+
test("rejects when json is undefined", async () => {
|
|
236
|
+
const {
|
|
237
|
+
fixture,
|
|
238
|
+
result,
|
|
239
|
+
}: { fixture: OptionsFixture; result: Promise<RunReturnType> } =
|
|
240
|
+
runJsonToText({});
|
|
241
|
+
|
|
242
|
+
await expect(result).rejects.toThrow("JSON is undefined.");
|
|
243
|
+
expect(fixture.onError).toHaveBeenCalledTimes(1);
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
test("treats an empty string as undefined", async () => {
|
|
247
|
+
const { result }: { result: Promise<RunReturnType> } = runJsonToText({
|
|
248
|
+
json: "",
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
await expect(result).rejects.toThrow("JSON is undefined.");
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
test("treats the falsy number 0 as undefined", async () => {
|
|
255
|
+
const { result }: { result: Promise<RunReturnType> } = runJsonToText({
|
|
256
|
+
json: 0,
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
await expect(result).rejects.toThrow("JSON is undefined.");
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
test("treats a false boolean as undefined", async () => {
|
|
263
|
+
const { result }: { result: Promise<RunReturnType> } = runJsonToText({
|
|
264
|
+
json: false,
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
await expect(result).rejects.toThrow("JSON is undefined.");
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
test("treats a direct null as undefined despite typeof null being object", async () => {
|
|
271
|
+
const { result }: { result: Promise<RunReturnType> } = runJsonToText({
|
|
272
|
+
json: null,
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
await expect(result).rejects.toThrow("JSON is undefined.");
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
test("rejects a non-object, non-string number with a type error", async () => {
|
|
279
|
+
const {
|
|
280
|
+
fixture,
|
|
281
|
+
result,
|
|
282
|
+
}: { fixture: OptionsFixture; result: Promise<RunReturnType> } =
|
|
283
|
+
runJsonToText({ json: 42 });
|
|
284
|
+
|
|
285
|
+
await expect(result).rejects.toThrow("JSON is should be of type object.");
|
|
286
|
+
expect(fixture.onError).toHaveBeenCalledTimes(1);
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
test("rejects a string that parses to a bare number", async () => {
|
|
290
|
+
const { result }: { result: Promise<RunReturnType> } = runJsonToText({
|
|
291
|
+
json: "42",
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
await expect(result).rejects.toThrow("JSON is should be of type object.");
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
test("rejects a string that parses to a boolean", async () => {
|
|
298
|
+
const { result }: { result: Promise<RunReturnType> } = runJsonToText({
|
|
299
|
+
json: "true",
|
|
300
|
+
});
|
|
301
|
+
|
|
302
|
+
await expect(result).rejects.toThrow("JSON is should be of type object.");
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
describe("JsonToText serialization failure routes to the error port", () => {
|
|
307
|
+
test("routes a circular-reference object to the error port and logs a message", async () => {
|
|
308
|
+
/*
|
|
309
|
+
* A circular object is truthy and `typeof === "object"`, so it clears both
|
|
310
|
+
* guards, but JSON.stringify throws on the cycle. That exception is caught
|
|
311
|
+
* and the run resolves to the error port instead of rejecting. The logger is
|
|
312
|
+
* stubbed to keep the assertion deterministic and the console quiet.
|
|
313
|
+
*/
|
|
314
|
+
const errorLogSpy: jest.SpyInstance = jest
|
|
315
|
+
.spyOn(logger, "error")
|
|
316
|
+
.mockImplementation((): void => {});
|
|
317
|
+
|
|
318
|
+
const circular: JSONObject = {};
|
|
319
|
+
circular["self"] = circular;
|
|
320
|
+
|
|
321
|
+
const {
|
|
322
|
+
fixture,
|
|
323
|
+
result,
|
|
324
|
+
}: { fixture: OptionsFixture; result: Promise<RunReturnType> } =
|
|
325
|
+
runJsonToText({ json: circular });
|
|
326
|
+
|
|
327
|
+
const value: RunReturnType = await result;
|
|
328
|
+
|
|
329
|
+
expect(value.executePort?.id).toBe("error");
|
|
330
|
+
expect(value.returnValues).toEqual({});
|
|
331
|
+
expect(fixture.log).toHaveBeenCalledWith(
|
|
332
|
+
"JSON is not in the correct format.",
|
|
333
|
+
);
|
|
334
|
+
expect(errorLogSpy).toHaveBeenCalledTimes(1);
|
|
335
|
+
/*
|
|
336
|
+
* The failure is handled internally, so the onError guard channel is never
|
|
337
|
+
* touched.
|
|
338
|
+
*/
|
|
339
|
+
expect(fixture.onError).not.toHaveBeenCalled();
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
describe("JsonToText out-port guards", () => {
|
|
344
|
+
/*
|
|
345
|
+
* These guards live before any argument handling. They are normally
|
|
346
|
+
* unreachable because the real metadata always defines both ports, so we drive
|
|
347
|
+
* them by swapping in a metadata clone whose out ports are missing.
|
|
348
|
+
*/
|
|
349
|
+
test("throws when the success port is missing from metadata", async () => {
|
|
350
|
+
const component: JsonToText = new JsonToText();
|
|
351
|
+
const base: ComponentMetadata = component.getMetadata();
|
|
352
|
+
component.setMetadata({
|
|
353
|
+
...base,
|
|
354
|
+
outPorts: base.outPorts.filter((p: Port): boolean => {
|
|
355
|
+
return p.id !== "success";
|
|
356
|
+
}),
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
const fixture: OptionsFixture = makeOptions();
|
|
360
|
+
|
|
361
|
+
await expect(
|
|
362
|
+
component.run({ json: { a: 1 } }, fixture.options),
|
|
363
|
+
).rejects.toThrow("Success port not found");
|
|
364
|
+
expect(fixture.onError).toHaveBeenCalled();
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
test("throws when the error port is missing from metadata", async () => {
|
|
368
|
+
const component: JsonToText = new JsonToText();
|
|
369
|
+
const base: ComponentMetadata = component.getMetadata();
|
|
370
|
+
component.setMetadata({
|
|
371
|
+
...base,
|
|
372
|
+
outPorts: base.outPorts.filter((p: Port): boolean => {
|
|
373
|
+
return p.id !== "error";
|
|
374
|
+
}),
|
|
375
|
+
});
|
|
376
|
+
|
|
377
|
+
const fixture: OptionsFixture = makeOptions();
|
|
378
|
+
|
|
379
|
+
await expect(
|
|
380
|
+
component.run({ json: { a: 1 } }, fixture.options),
|
|
381
|
+
).rejects.toThrow("Error port not found");
|
|
382
|
+
expect(fixture.onError).toHaveBeenCalled();
|
|
383
|
+
});
|
|
384
|
+
});
|