@oneuptime/common 11.5.13 → 11.6.0

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.
Files changed (122) hide show
  1. package/Models/DatabaseModels/EnterpriseLicense.ts +21 -0
  2. package/Models/DatabaseModels/EnterpriseLicenseInstance.ts +25 -0
  3. package/Models/DatabaseModels/GlobalConfig.ts +76 -0
  4. package/Server/API/EnterpriseLicenseAPI.ts +57 -0
  5. package/Server/API/GlobalConfigAPI.ts +62 -1
  6. package/Server/EnvironmentConfig.ts +22 -0
  7. package/Server/Infrastructure/Postgres/SchemaMigrations/1784659816363-AddInstanceVersionAndLatestReleaseColumns.ts +38 -0
  8. package/Server/Infrastructure/Postgres/SchemaMigrations/1784705487674-AddEnterpriseLicenseEvaluationColumns.ts +25 -0
  9. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  10. package/Server/Services/AnalyticsDatabaseService.ts +48 -45
  11. package/Server/Services/DatabaseService.ts +66 -1
  12. package/Server/Services/WorkflowService.ts +100 -39
  13. package/Server/Types/Workflow/Components/Schedule.ts +57 -32
  14. package/Server/Utils/AnalyticsDatabase/InsertDedupContext.ts +59 -0
  15. package/Server/Utils/Express.ts +13 -0
  16. package/Server/Utils/Telemetry/TelemetryFanInWriter.ts +799 -0
  17. package/Server/Utils/Telemetry/TelemetryWriterClient.ts +263 -0
  18. package/Server/Utils/Telemetry/TelemetryWriterServer.ts +240 -0
  19. package/Server/Utils/Telemetry/TelemetryWriterShedMetrics.ts +93 -0
  20. package/Tests/Server/Services/DatabaseServiceSanitizeUpdateData.test.ts +232 -0
  21. package/Tests/Server/Services/UpdateOneByIdKeepsRowId.test.ts +107 -0
  22. package/Tests/Server/Services/WorkflowService.test.ts +308 -0
  23. package/Tests/Server/Utils/Attribution.test.ts +203 -0
  24. package/Tests/Server/Utils/Marketing/ConversionUploadProvider.test.ts +183 -0
  25. package/Tests/Server/Utils/Marketing/GoogleAds.test.ts +340 -0
  26. package/Tests/Server/Utils/Monitor/Criteria/ExceptionMonitorCriteria.test.ts +87 -0
  27. package/Tests/Server/Utils/Monitor/Criteria/LogMonitorCriteria.test.ts +165 -0
  28. package/Tests/Server/Utils/Monitor/Criteria/TraceMonitorCriteria.test.ts +86 -0
  29. package/Tests/Server/Utils/Telemetry/TelemetryFanInWriter.test.ts +1565 -0
  30. package/Tests/Server/Utils/Telemetry/TelemetryWriterClient.test.ts +313 -0
  31. package/Tests/Server/Utils/Telemetry/TelemetryWriterServer.test.ts +270 -0
  32. package/Tests/Server/Utils/Telemetry/TelemetryWriterShedMetrics.test.ts +127 -0
  33. package/Tests/Types/AI/CodeFixTaskType.test.ts +3 -0
  34. package/Tests/Types/Monitor/MonitorCriteriaMetricVariables.test.ts +228 -0
  35. package/Tests/Types/Monitor/MonitorStepDefaultTelemetryConfig.test.ts +169 -0
  36. package/Tests/Types/Monitor/MonitorStepExceptionMonitor.test.ts +289 -0
  37. package/Tests/Types/Monitor/MonitorStepLogMonitor.test.ts +231 -0
  38. package/Tests/Types/Monitor/MonitorStepMetricViewConfigUtil.test.ts +245 -0
  39. package/Tests/Types/Monitor/MonitorStepNetworkDeviceMonitor.test.ts +155 -0
  40. package/Tests/Types/Monitor/MonitorStepTelemetrySerialization.test.ts +141 -0
  41. package/Tests/Types/Monitor/MonitorStepTraceMonitor.test.ts +137 -0
  42. package/Tests/Types/Workspace/NotificationRules/NotificationRuleCondition.test.ts +311 -0
  43. package/Tests/UI/Utils/Breadcrumb/BreadcrumbTrailResolver.test.ts +461 -0
  44. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +2852 -0
  45. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +758 -0
  46. package/Tests/UI/Utils/NotificationMethodUtil.test.ts +564 -0
  47. package/Tests/Utils/Array.test.ts +156 -0
  48. package/Tests/Utils/CronTab.test.ts +199 -0
  49. package/Tests/Utils/ModelImportExport.test.ts +101 -0
  50. package/Tests/Utils/Number.test.ts +179 -0
  51. package/Tests/Utils/VersionUtil.test.ts +348 -0
  52. package/Tests/jest.setup.ts +1 -0
  53. package/Types/EnterpriseLicense/EnterpriseLicenseInstanceSummary.ts +6 -0
  54. package/Types/Monitor/MonitorStep.ts +24 -4
  55. package/Types/Monitor/MonitorStepMetricViewConfigUtil.ts +105 -0
  56. package/UI/Components/EditionLabel/EditionLabel.tsx +445 -12
  57. package/UI/Components/Workflow/ArgumentsForm.tsx +68 -30
  58. package/UI/Components/Workflow/CronScheduleField.tsx +411 -0
  59. package/UI/Utils/Breadcrumb/BreadcrumbTrailResolver.ts +176 -0
  60. package/UI/Utils/NotificationMethodUtil.ts +310 -0
  61. package/Utils/CronTab.ts +823 -0
  62. package/Utils/ModelImportExport.ts +21 -6
  63. package/Utils/VersionUtil.ts +260 -0
  64. package/build/dist/Models/DatabaseModels/EnterpriseLicense.js +22 -0
  65. package/build/dist/Models/DatabaseModels/EnterpriseLicense.js.map +1 -1
  66. package/build/dist/Models/DatabaseModels/EnterpriseLicenseInstance.js +26 -0
  67. package/build/dist/Models/DatabaseModels/EnterpriseLicenseInstance.js.map +1 -1
  68. package/build/dist/Models/DatabaseModels/GlobalConfig.js +81 -0
  69. package/build/dist/Models/DatabaseModels/GlobalConfig.js.map +1 -1
  70. package/build/dist/Server/API/EnterpriseLicenseAPI.js +47 -0
  71. package/build/dist/Server/API/EnterpriseLicenseAPI.js.map +1 -1
  72. package/build/dist/Server/API/GlobalConfigAPI.js +52 -1
  73. package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
  74. package/build/dist/Server/EnvironmentConfig.js +17 -0
  75. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  76. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784659816363-AddInstanceVersionAndLatestReleaseColumns.js +18 -0
  77. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784659816363-AddInstanceVersionAndLatestReleaseColumns.js.map +1 -0
  78. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784705487674-AddEnterpriseLicenseEvaluationColumns.js +14 -0
  79. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1784705487674-AddEnterpriseLicenseEvaluationColumns.js.map +1 -0
  80. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  81. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  82. package/build/dist/Server/Services/AnalyticsDatabaseService.js +44 -16
  83. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  84. package/build/dist/Server/Services/DatabaseService.js +53 -1
  85. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  86. package/build/dist/Server/Services/WorkflowService.js +80 -30
  87. package/build/dist/Server/Services/WorkflowService.js.map +1 -1
  88. package/build/dist/Server/Types/Workflow/Components/Schedule.js +44 -19
  89. package/build/dist/Server/Types/Workflow/Components/Schedule.js.map +1 -1
  90. package/build/dist/Server/Utils/AnalyticsDatabase/InsertDedupContext.js +24 -0
  91. package/build/dist/Server/Utils/AnalyticsDatabase/InsertDedupContext.js.map +1 -0
  92. package/build/dist/Server/Utils/Express.js +12 -0
  93. package/build/dist/Server/Utils/Express.js.map +1 -1
  94. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js +496 -0
  95. package/build/dist/Server/Utils/Telemetry/TelemetryFanInWriter.js.map +1 -0
  96. package/build/dist/Server/Utils/Telemetry/TelemetryWriterClient.js +165 -0
  97. package/build/dist/Server/Utils/Telemetry/TelemetryWriterClient.js.map +1 -0
  98. package/build/dist/Server/Utils/Telemetry/TelemetryWriterServer.js +136 -0
  99. package/build/dist/Server/Utils/Telemetry/TelemetryWriterServer.js.map +1 -0
  100. package/build/dist/Server/Utils/Telemetry/TelemetryWriterShedMetrics.js +76 -0
  101. package/build/dist/Server/Utils/Telemetry/TelemetryWriterShedMetrics.js.map +1 -0
  102. package/build/dist/Types/Monitor/MonitorStep.js +20 -4
  103. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  104. package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js +73 -0
  105. package/build/dist/Types/Monitor/MonitorStepMetricViewConfigUtil.js.map +1 -0
  106. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +261 -13
  107. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  108. package/build/dist/UI/Components/Workflow/ArgumentsForm.js +30 -6
  109. package/build/dist/UI/Components/Workflow/ArgumentsForm.js.map +1 -1
  110. package/build/dist/UI/Components/Workflow/CronScheduleField.js +209 -0
  111. package/build/dist/UI/Components/Workflow/CronScheduleField.js.map +1 -0
  112. package/build/dist/UI/Utils/Breadcrumb/BreadcrumbTrailResolver.js +129 -0
  113. package/build/dist/UI/Utils/Breadcrumb/BreadcrumbTrailResolver.js.map +1 -0
  114. package/build/dist/UI/Utils/NotificationMethodUtil.js +189 -0
  115. package/build/dist/UI/Utils/NotificationMethodUtil.js.map +1 -0
  116. package/build/dist/Utils/CronTab.js +609 -0
  117. package/build/dist/Utils/CronTab.js.map +1 -0
  118. package/build/dist/Utils/ModelImportExport.js +20 -6
  119. package/build/dist/Utils/ModelImportExport.js.map +1 -1
  120. package/build/dist/Utils/VersionUtil.js +193 -0
  121. package/build/dist/Utils/VersionUtil.js.map +1 -0
  122. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ArgumentsForm.js","sourceRoot":"","sources":["../../../../../UI/Components/Workflow/ArgumentsForm.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ArgumentsForm.js","sourceRoot":"","sources":["../../../../../UI/Components/Workflow/ArgumentsForm.tsx"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,oCAAoC,CAAC;AACjE,OAAO,YAAY,MAAM,8BAA8B,CAAC;AACxD,OAAO,SAAwB,MAAM,oBAAoB,CAAC;AAC1D,OAAO,mBAAmB,MAAM,oCAAoC,CAAC;AAGrE,OAAO,yBAAyB,MAAM,6BAA6B,CAAC;AACpE,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iCAAiC,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAEL,kBAAkB,GAEnB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,QAAwB,MAAM,+BAA+B,CAAC;AACrE,OAAO,QAAQ,MAAM,yCAAyC,CAAC;AAC/D,OAAO,KAAK,EAAE,EAGZ,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AAUf,MAAM,aAAa,GAAsC,CACvD,KAAqB,EACP,EAAE;;IAChB,MAAM,OAAO,GAED,MAAM,CAA2C,IAAI,CAAC,CAAC;IACnE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAe,KAAK,CAAC,SAAS,CAAC,CAAC;IAC1E,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAC3E,MAAM,CAAC,wBAAwB,EAAE,2BAA2B,CAAC,GAC3D,QAAQ,CAAU,KAAK,CAAC,CAAC;IAC3B,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,CAAC,GAAG,QAAQ,CAEpE,EAAE,CAAC,CAAC;IAEN,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAE/D;;;;OAIG;IACH,MAAM,CAAC,uBAAuB,EAAE,0BAA0B,CAAC,GAAG,QAAQ,CAEpE,EAAE,CAAC,CAAC;IACN,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IAE7E,MAAM,oBAAoB,GAAY,OAAO,CAC3C,MAAA,SAAS,CAAC,QAAQ,CAAC,SAAS,0CAAE,IAAI,CAAC,CAAC,GAAa,EAAE,EAAE;QACnD,OAAO,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC,cAAc,CAAC;IACxD,CAAC,CAAC,CACH,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,SAAS,GAAY,KAAK,CAAC;QAC/B,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAE5B,MAAM,aAAa,GAAwB,KAAK,IAAmB,EAAE;YACnE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAyB,MAAM,QAAQ,CAAC,OAAO,CAAW;oBACpE,SAAS,EAAE,QAAQ;oBACnB,KAAK,EAAE,EAAE;oBACT,KAAK,EAAE,iBAAiB;oBACxB,IAAI,EAAE,CAAC;oBACP,MAAM,EAAE;wBACN,GAAG,EAAE,IAAI;wBACT,IAAI,EAAE,IAAI;qBACX;oBACD,IAAI,EAAE;wBACJ,IAAI,EAAE,WAAkB;qBACzB;iBACF,CAAC,CAAC;gBAEH,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO;gBACT,CAAC;gBAED,MAAM,oBAAoB,GAAW,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAEjE,MAAM,OAAO,GAA0B,MAAM,CAAC,IAAI;qBAC/C,MAAM,CAAC,CAAC,EAAY,EAAE,EAAE;;oBACvB,sDAAsD;oBACtD,OAAO,CAAA,MAAA,EAAE,CAAC,GAAG,0CAAE,QAAQ,EAAE,MAAK,oBAAoB,CAAC;gBACrD,CAAC,CAAC;qBACD,GAAG,CAAC,CAAC,EAAY,EAAE,EAAE;;oBACpB,OAAO;wBACL,KAAK,EAAG,EAAE,CAAC,IAAe,IAAI,CAAC,MAAA,MAAA,EAAE,CAAC,GAAG,0CAAE,QAAQ,EAAE,mCAAI,EAAE,CAAC;wBACxD,KAAK,EAAE,MAAA,MAAA,EAAE,CAAC,GAAG,0CAAE,QAAQ,EAAE,mCAAI,EAAE;qBAChC,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEL,0BAA0B,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;YAAC,WAAM,CAAC;gBACP;;;mBAGG;gBACH,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,0BAA0B,CAAC,EAAE,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,aAAa,EAAE,CAAC;QAErB,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;QACF,2EAA2E;IAC7E,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,CAAC;IAC3D,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAE9B,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,CACL;QACE;YACG,SAAS,CAAC,QAAQ,CAAC,SAAS;gBAC3B,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAC3C,oBAAC,YAAY,IAAC,OAAO,EAAE,uCAAuC,GAAI,CACnE;YAMF,oBAAoB,IAAI,kBAAkB,IAAI,oBAAC,eAAe,OAAG;YACjE,SAAS,CAAC,QAAQ,CAAC,SAAS;gBAC3B,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;gBACvC,CAAC,CAAC,oBAAoB,IAAI,kBAAkB,CAAC,IAAI,CAC/C,oBAAC,SAAS,IACR,gBAAgB,EAAE,IAAI,EACtB,GAAG,EAAE,OAAO,EACZ,aAAa,oBACR,CAAC,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC,GAEhC,QAAQ,EAAE,CAAC,MAA8B,EAAE,EAAE;oBAC3C,YAAY,iCACP,SAAS,KACZ,SAAS,kCACJ,CAAE,SAAS,CAAC,SAAwB,IAAI,EAAE,CAAC,GAC3C,CAAE,MAAqB,IAAI,EAAE,CAAC,KAEnC,CAAC;gBACL,CAAC,EACD,4BAA4B,EAAE,CAAC,QAAiB,EAAE,EAAE;oBAClD,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;wBAC/C,0BAA0B,iCACrB,uBAAuB,KAC1B,EAAE,EAAE,QAAQ,IACZ,CAAC;oBACL,CAAC;gBACH,CAAC,EACD,MAAM,EACJ,SAAS,CAAC,QAAQ,CAAC,SAAS;oBAC5B,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAa,EAAE,EAAE;wBACjD,MAAM,gBAAgB,GACpB,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC,cAAc,CAAC;wBAEjD;;;;;;2BAMG;wBACH,MAAM,cAAc,GAClB,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC,MAAM;4BACtC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;wBAExC;;;;2BAIG;wBACH,MAAM,aAAa,GACjB,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC,OAAO,CAAC;wBAE1C,IAAI,SAOH,CAAC;wBAEF,IAAI,cAAc,EAAE,CAAC;4BACnB,SAAS,GAAG;gCACV,SAAS,EAAE,mBAAmB,CAAC,eAAe;gCAC9C,gBAAgB,EAAE,CAChB,OAA+B,EAC/B,WAA+B,EACjB,EAAE;oCAChB,OAAO,CACL,oBAAC,gBAAgB,IACf,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAmB,EACjD,YAAY,EAAE,WAAW,CAAC,YAAY,EACtC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;;4CAC1B,KAAK,CAAA,MAAA,WAAW,CAAC,QAAQ,4DAAG,KAAK,CAAC,CAAA,CAAC;wCACrC,CAAC,EACD,WAAW,EAAE,WAAW,CAAC,WAAW,EACpC,KAAK,EAAE,WAAW,CAAC,KAAK,EACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ,GAC9B,CACH,CAAC;gCACJ,CAAC;6BACF,CAAC;wBACJ,CAAC;6BAAM,IAAI,aAAa,EAAE,CAAC;4BACzB,SAAS,GAAG;gCACV,SAAS,EAAE,mBAAmB,CAAC,eAAe;gCAC9C,gBAAgB,EAAE,CAChB,OAA+B,EAC/B,WAA+B,EACjB,EAAE;oCAChB,OAAO,CACL,oBAAC,iBAAiB,IAChB,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,YAAY,EACV,WAAW,CAAC,YAA6B,EAE3C,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;;4CAC1B,KAAK,CAAA,MAAA,WAAW,CAAC,QAAQ,4DAAG,KAAK,CAAC,CAAA,CAAC;wCACrC,CAAC,EACD,WAAW,EAAE,WAAW,CAAC,WAAW,EACpC,KAAK,EAAE,WAAW,CAAC,KAAK,EACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ,GAC9B,CACH,CAAC;gCACJ,CAAC;6BACF,CAAC;wBACJ,CAAC;6BAAM,CAAC;4BACN,SAAS,GAAG,iCAAiC,CAC3C,GAAG,CAAC,IAAI,EACR,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;gCAChD,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;gCAC7B,CAAC,CAAC,IAAI,CACT,CAAC;wBACJ,CAAC;wBAED;;;2BAGG;wBACH,IAAI,gBAAgB,EAAE,CAAC;4BACrB,SAAS,CAAC,eAAe,GAAG,uBAAuB,CAAC;wBACtD,CAAC;wBAED;;;;;;2BAMG;wBACH,MAAM,kBAAkB,GACtB,CAAC,gBAAgB,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,CAAC;wBAEzD,uBACE,KAAK,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,EACpB,aAAa,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAClC,6BAAK,SAAS,EAAC,eAAe;gCAC5B,2BAAG,SAAS,EAAC,SAAS;;oCACO,GAAG;oCAC9B,gCACE,SAAS,EAAC,4DAA4D,EACtE,OAAO,EAAE,GAAG,EAAE;4CACZ,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;4CACzB,2BAA2B,CAAC,IAAI,CAAC,CAAC;wCACpC,CAAC,gBAGM;oCAAC,GAAG;;oCACL,GAAG;oCACX,gCACE,SAAS,EAAC,4DAA4D,EACtE,OAAO,EAAE,GAAG,EAAE;4CACZ,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;4CACzB,oBAAoB,CAAC,IAAI,CAAC,CAAC;wCAC7B,CAAC,gBAGM,CACP,CACA,CACP,CAAC,CAAC,CAAC,SAAS,EACb,WAAW,EAAE,GACX,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAC9B,KAAK,GAAG,CAAC,WAAW,EAAE,EACtB,KAAK,EAAE;gCACL,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI;6BACf,EACD,QAAQ,EAAE,GAAG,CAAC,QAAQ,EACtB,WAAW,EAAE,GAAG,CAAC,WAAW,IACzB,SAAS,EACZ;oBACJ,CAAC,CAAC,GAEJ,CACH,CACC;QACL,iBAAiB,IAAI,CACpB,oBAAC,aAAa,IACZ,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,OAAO,EAAE,GAAG,EAAE;gBACZ,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC,EACD,MAAM,EAAE,CAAC,UAAkB,EAAE,EAAE;;gBAC7B,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBAC5B,MAAA,OAAO,CAAC,OAAO,0CAAE,aAAa,CAC5B,aAAa,EACb,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;oBACxD,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;oBACpC,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CACrB,CAAC;YACJ,CAAC,GACD,CACH;QAEA,wBAAwB,IAAI,CAC3B,oBAAC,yBAAyB,IACxB,UAAU,EAAE,KAAK,CAAC,eAAe,EACjC,OAAO,EAAE,GAAG,EAAE;gBACZ,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC,EACD,MAAM,EAAE,CAAC,eAAuB,EAAE,EAAE;;gBAClC,2BAA2B,CAAC,KAAK,CAAC,CAAC;gBACnC,MAAA,OAAO,CAAC,OAAO,0CAAE,aAAa,CAC5B,aAAa,EACb,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;oBACxD,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC;oBACpC,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAC1B,CAAC;YACJ,CAAC,GACD,CACH,CACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,209 @@
1
+ import Dropdown from "../Dropdown/Dropdown";
2
+ import Icon from "../Icon/Icon";
3
+ import VariableModal from "./VariableModal";
4
+ import IconProp from "../../../Types/Icon/IconProp";
5
+ import CronTab from "../../../Utils/CronTab";
6
+ import React, { useMemo, useState, } from "react";
7
+ const PRESET_OPTIONS = CronTab.PRESETS.map((preset) => {
8
+ return {
9
+ label: preset.label,
10
+ value: preset.value,
11
+ };
12
+ });
13
+ const PRESET_VALUES = new Set(CronTab.PRESETS.map((preset) => {
14
+ return preset.value;
15
+ }));
16
+ const normalizeInitialValue = (value) => {
17
+ if (value === null || value === undefined) {
18
+ return "";
19
+ }
20
+ return `${value}`;
21
+ };
22
+ const inferInitialMode = (value) => {
23
+ const trimmed = value.trim();
24
+ if (CronTab.isVariableExpression(trimmed)) {
25
+ return "variable";
26
+ }
27
+ if (trimmed !== "" && !PRESET_VALUES.has(trimmed)) {
28
+ return "custom";
29
+ }
30
+ return "preset";
31
+ };
32
+ const formatUtc = (date) => {
33
+ try {
34
+ return (new Intl.DateTimeFormat("en-US", {
35
+ timeZone: "UTC",
36
+ weekday: "short",
37
+ year: "numeric",
38
+ month: "short",
39
+ day: "numeric",
40
+ hour: "2-digit",
41
+ minute: "2-digit",
42
+ hour12: false,
43
+ }).format(date) + " UTC");
44
+ }
45
+ catch (_a) {
46
+ return date.toUTCString();
47
+ }
48
+ };
49
+ /**
50
+ * A rich picker for the workflow "Schedule" trigger. It lets the user choose a
51
+ * common schedule from a preset list, write any custom cron expression (with a
52
+ * live human-readable description, next-run preview and validation), or point
53
+ * the schedule at a workflow / global variable that resolves to a cron
54
+ * expression when the workflow is saved.
55
+ */
56
+ const CronScheduleField = (props) => {
57
+ const initialValue = useMemo(() => {
58
+ return normalizeInitialValue(props.initialValue);
59
+ }, []);
60
+ const [value, setValue] = useState(initialValue);
61
+ const [mode, setMode] = useState(inferInitialMode(initialValue));
62
+ const [showVariableModal, setShowVariableModal] = useState(false);
63
+ const emit = (next) => {
64
+ setValue(next);
65
+ props.onChange(next);
66
+ };
67
+ const trimmedValue = value.trim();
68
+ const isVariable = CronTab.isVariableExpression(trimmedValue);
69
+ const validationError = useMemo(() => {
70
+ if (trimmedValue === "" || isVariable) {
71
+ return null;
72
+ }
73
+ return CronTab.getValidationError(trimmedValue);
74
+ }, [trimmedValue, isVariable]);
75
+ const description = useMemo(() => {
76
+ if (trimmedValue === "" || isVariable || validationError) {
77
+ return null;
78
+ }
79
+ return CronTab.getHumanReadableDescription(trimmedValue);
80
+ }, [trimmedValue, isVariable, validationError]);
81
+ const nextRuns = useMemo(() => {
82
+ if (trimmedValue === "" || isVariable || validationError) {
83
+ return [];
84
+ }
85
+ try {
86
+ return CronTab.getNextExecutionTimes(trimmedValue, 3, new Date());
87
+ }
88
+ catch (_a) {
89
+ return [];
90
+ }
91
+ }, [trimmedValue, isVariable, validationError]);
92
+ const selectedPresetOption = PRESET_OPTIONS.find((option) => {
93
+ return option.value === trimmedValue;
94
+ });
95
+ const renderModeTab = (args) => {
96
+ const isActive = mode === args.tabMode;
97
+ return (React.createElement("button", { type: "button", onClick: () => {
98
+ setMode(args.tabMode);
99
+ }, className: `inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium transition-colors ${isActive
100
+ ? "bg-white text-indigo-700 shadow-sm ring-1 ring-gray-200"
101
+ : "text-gray-500 hover:text-gray-700"}` },
102
+ React.createElement(Icon, { icon: args.icon, className: `h-3.5 w-3.5 ${isActive ? "text-indigo-600" : "text-gray-400"}` }),
103
+ args.label));
104
+ };
105
+ const renderPreview = () => {
106
+ if (isVariable) {
107
+ return null;
108
+ }
109
+ if (validationError) {
110
+ return (React.createElement("div", { className: "flex items-start gap-2 rounded-md border border-red-200 bg-red-50/60 px-3 py-2 text-xs text-red-800" },
111
+ React.createElement(Icon, { icon: IconProp.Error, className: "h-4 w-4 text-red-500 mt-0.5 flex-shrink-0" }),
112
+ React.createElement("div", null,
113
+ React.createElement("p", { className: "font-semibold" }, "Not a valid cron expression"),
114
+ React.createElement("p", { className: "text-red-700" }, validationError))));
115
+ }
116
+ if (!description) {
117
+ return null;
118
+ }
119
+ return (React.createElement("div", { className: "rounded-md border border-gray-200 bg-gray-50/60 px-3 py-2.5" },
120
+ React.createElement("div", { className: "flex items-start gap-2" },
121
+ React.createElement(Icon, { icon: IconProp.Clock, className: "h-4 w-4 text-indigo-500 mt-0.5 flex-shrink-0" }),
122
+ React.createElement("div", { className: "min-w-0" },
123
+ React.createElement("p", { className: "text-sm font-medium text-gray-800" }, description),
124
+ nextRuns.length > 0 && (React.createElement("div", { className: "mt-1.5" },
125
+ React.createElement("p", { className: "text-[10px] font-semibold uppercase tracking-wider text-gray-400" }, "Next runs"),
126
+ React.createElement("ul", { className: "mt-0.5 space-y-0.5" }, nextRuns.map((run, index) => {
127
+ return (React.createElement("li", { key: index, className: "text-xs text-gray-600 font-mono" }, formatUtc(run)));
128
+ }))))))));
129
+ };
130
+ return (React.createElement("div", { className: "space-y-3" },
131
+ React.createElement("div", { className: "inline-flex items-center gap-1 rounded-lg bg-gray-100 p-1" },
132
+ renderModeTab({
133
+ tabMode: "preset",
134
+ label: "Common schedules",
135
+ icon: IconProp.Clock,
136
+ }),
137
+ renderModeTab({
138
+ tabMode: "custom",
139
+ label: "Custom cron",
140
+ icon: IconProp.Code,
141
+ }),
142
+ renderModeTab({
143
+ tabMode: "variable",
144
+ label: "Variable",
145
+ icon: IconProp.Variable,
146
+ })),
147
+ mode === "preset" && (React.createElement("div", { className: "space-y-3" },
148
+ React.createElement(Dropdown, { options: PRESET_OPTIONS, value: selectedPresetOption, placeholder: "Select a schedule", tabIndex: props.tabIndex, onChange: (newValue) => {
149
+ if (typeof newValue === "string") {
150
+ emit(newValue);
151
+ }
152
+ } }),
153
+ !selectedPresetOption && trimmedValue !== "" && !isVariable && (React.createElement("p", { className: "text-xs text-gray-500" },
154
+ "Your current schedule",
155
+ " ",
156
+ React.createElement("code", { className: "rounded bg-gray-100 px-1 py-0.5 font-mono text-gray-700" }, trimmedValue),
157
+ " ",
158
+ "is not one of the presets. Switch to",
159
+ " ",
160
+ React.createElement("button", { type: "button", className: "text-indigo-600 underline hover:text-indigo-700", onClick: () => {
161
+ setMode("custom");
162
+ } }, "Custom cron"),
163
+ " ",
164
+ "to edit it.")),
165
+ renderPreview())),
166
+ mode === "custom" && (React.createElement("div", { className: "space-y-3" },
167
+ React.createElement("input", { type: "text", value: value, spellCheck: false, autoComplete: "off", tabIndex: props.tabIndex, placeholder: props.placeholder || "e.g. 0 */18 * * *", onChange: (event) => {
168
+ emit(event.target.value);
169
+ }, className: `block w-full rounded-md border bg-white px-3 py-2 font-mono text-sm placeholder-gray-400 focus:outline-none focus:ring-1 ${validationError
170
+ ? "border-red-300 focus:border-red-500 focus:ring-red-500"
171
+ : "border-gray-300 focus:border-indigo-500 focus:ring-indigo-500"}` }),
172
+ React.createElement("p", { className: "text-xs text-gray-400 font-mono" }, "minute hour day-of-month month day-of-week"),
173
+ renderPreview())),
174
+ mode === "variable" && (React.createElement("div", { className: "space-y-3" },
175
+ isVariable ? (React.createElement("div", { className: "flex items-center justify-between gap-3 rounded-md border border-indigo-200 bg-indigo-50/50 px-3 py-2" },
176
+ React.createElement("div", { className: "flex items-center gap-2 min-w-0" },
177
+ React.createElement(Icon, { icon: IconProp.Variable, className: "h-4 w-4 text-indigo-500 flex-shrink-0" }),
178
+ React.createElement("code", { className: "truncate font-mono text-sm text-indigo-800" }, trimmedValue)),
179
+ React.createElement("div", { className: "flex items-center gap-2 flex-shrink-0" },
180
+ React.createElement("button", { type: "button", className: "text-xs font-medium text-indigo-600 hover:text-indigo-700", onClick: () => {
181
+ setShowVariableModal(true);
182
+ } }, "Change"),
183
+ React.createElement("span", { className: "text-gray-300" }, "\u00B7"),
184
+ React.createElement("button", { type: "button", className: "text-xs font-medium text-gray-500 hover:text-gray-700", onClick: () => {
185
+ emit("");
186
+ setMode("preset");
187
+ } }, "Clear")))) : (React.createElement("button", { type: "button", onClick: () => {
188
+ setShowVariableModal(true);
189
+ }, className: "inline-flex items-center gap-1.5 rounded-md border border-gray-300 bg-white px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 hover:border-gray-400" },
190
+ React.createElement(Icon, { icon: IconProp.Variable, className: "h-4 w-4 text-gray-500" }),
191
+ "Select a variable")),
192
+ React.createElement("div", { className: "flex items-start gap-2 rounded-md border border-gray-200 bg-gray-50/60 px-3 py-2 text-xs text-gray-600" },
193
+ React.createElement(Icon, { icon: IconProp.Info, className: "h-4 w-4 text-gray-400 mt-0.5 flex-shrink-0" }),
194
+ React.createElement("p", null,
195
+ "The variable is resolved when the workflow is saved. It must contain a valid cron expression (for example",
196
+ " ",
197
+ React.createElement("code", { className: "rounded bg-gray-100 px-1 py-0.5 font-mono text-gray-700" }, "0 */18 * * *"),
198
+ "). Component return values can't be used here because the schedule is set up before the workflow runs.")))),
199
+ props.error && (React.createElement("p", { className: "text-xs text-red-600", "data-testid": "error-message" }, props.error)),
200
+ showVariableModal && (React.createElement(VariableModal, { workflowId: props.workflowId, onClose: () => {
201
+ setShowVariableModal(false);
202
+ }, onSave: (variableId) => {
203
+ setShowVariableModal(false);
204
+ setMode("variable");
205
+ emit(variableId);
206
+ } }))));
207
+ };
208
+ export default CronScheduleField;
209
+ //# sourceMappingURL=CronScheduleField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CronScheduleField.js","sourceRoot":"","sources":["../../../../../UI/Components/Workflow/CronScheduleField.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ /*
2
+ * Pure resolution of breadcrumb destinations.
3
+ *
4
+ * A breadcrumb trail mirrors the URL segments of the current page: crumb `i`
5
+ * conceptually corresponds to the URL truncated to `i + 3` segments (the
6
+ * leading "", "dashboard" and the project id account for the first three).
7
+ *
8
+ * Historically each crumb linked to that truncated URL directly. That is wrong
9
+ * for the many intermediate segments that are only section *prefixes* with no
10
+ * page of their own — `/user-settings`, `/on-call-duty`, `/<product>/settings`,
11
+ * `/ai`, `/llm`. Linking to such a prefix navigates to a route that matches
12
+ * nothing and renders a blank page. Leaf detail pages (`/traces/view/:id`) have
13
+ * the mirror problem: the last crumb's truncated URL drops the id.
14
+ *
15
+ * This module contains the pure, framework-agnostic decision of *what* each
16
+ * crumb should point at, expressed as a `BreadcrumbTarget` descriptor. It has no
17
+ * dependency on the router or the app's route table so it can be unit-tested in
18
+ * isolation. Callers translate the descriptor into a concrete route.
19
+ */
20
+ export var BreadcrumbTargetKind;
21
+ (function (BreadcrumbTargetKind) {
22
+ // Link to the project home (URL truncated to its first 3 segments).
23
+ BreadcrumbTargetKind["Home"] = "home";
24
+ // The current page — rendered as plain text, never a link.
25
+ BreadcrumbTargetKind["CurrentPage"] = "current";
26
+ // Link to an ancestor page that lies on the current path, at `depth` segments.
27
+ BreadcrumbTargetKind["Ancestor"] = "ancestor";
28
+ // Link to a real page on a different branch (the section's landing page).
29
+ BreadcrumbTargetKind["SectionLanding"] = "landing";
30
+ })(BreadcrumbTargetKind || (BreadcrumbTargetKind = {}));
31
+ /*
32
+ * Strip a trailing slash so "/a/b/" and "/a/b" compare equal. The root "/" is
33
+ * left intact.
34
+ */
35
+ export function normalizeRoutePath(path) {
36
+ if (path.length > 1 && path.endsWith("/")) {
37
+ return path.replace(/\/+$/, "");
38
+ }
39
+ return path;
40
+ }
41
+ /*
42
+ * Resolve the destination of a single crumb.
43
+ *
44
+ * - First crumb ("Project") -> Home.
45
+ * - Last crumb -> CurrentPage (plain text).
46
+ * - Intermediate crumb -> the nearest real ancestor route on the
47
+ * current path; else the section's
48
+ * landing page; else CurrentPage. It
49
+ * never points at a non-existent route.
50
+ */
51
+ export function resolveBreadcrumbTarget(options) {
52
+ const { index, crumbCount, pagePattern, realRoutePatterns } = options;
53
+ if (index <= 0) {
54
+ return { kind: BreadcrumbTargetKind.Home, depth: 3 };
55
+ }
56
+ if (index >= crumbCount - 1) {
57
+ return { kind: BreadcrumbTargetKind.CurrentPage };
58
+ }
59
+ const normalizedPage = normalizeRoutePath(pagePattern);
60
+ const pageSegments = normalizedPage.split("/");
61
+ const realRouteSet = new Set(realRoutePatterns.map(normalizeRoutePath));
62
+ // Depth (segment count) of this crumb's own URL prefix.
63
+ const crumbDepth = index + 3;
64
+ /*
65
+ * Walk from this crumb's prefix depth toward — but not including — the current
66
+ * page and link to the nearest ancestor that is a real page. This links
67
+ * "Insights" to /ai/insights on an /ai/insights/settings page, and keeps
68
+ * section list pages (e.g. "Traces" -> /traces) linkable as before.
69
+ */
70
+ for (let depth = crumbDepth; depth < pageSegments.length; depth++) {
71
+ const ancestorPattern = pageSegments.slice(0, depth).join("/");
72
+ if (realRouteSet.has(ancestorPattern)) {
73
+ return { kind: BreadcrumbTargetKind.Ancestor, depth };
74
+ }
75
+ }
76
+ /*
77
+ * The crumb sits at or beyond the current page's own depth — either a "packed"
78
+ * trail with more crumbs than URL segments (e.g. Project > Profiler > Overview
79
+ * on /profiles, where "Profiler" and "Overview" share the single /profiles
80
+ * segment), or exactly the page depth. There is no distinct ancestor page to
81
+ * point at, so render it as plain text like the current page's own crumb
82
+ * rather than inventing a link to a sibling.
83
+ */
84
+ if (crumbDepth >= pageSegments.length) {
85
+ return { kind: BreadcrumbTargetKind.CurrentPage };
86
+ }
87
+ /*
88
+ * The prefix is a bare section root with no page above the current page (e.g.
89
+ * /user-settings). Fall back to the section's landing page — the first
90
+ * declared real route under the prefix — so the crumb still navigates
91
+ * somewhere useful.
92
+ */
93
+ const prefixWithSlash = pageSegments.slice(0, crumbDepth).join("/") + "/";
94
+ const landingPattern = realRoutePatterns
95
+ .map(normalizeRoutePath)
96
+ .find((pattern) => {
97
+ return pattern.startsWith(prefixWithSlash);
98
+ });
99
+ // No page under the prefix, or the landing is the current page -> plain text.
100
+ if (!landingPattern || landingPattern === normalizedPage) {
101
+ return { kind: BreadcrumbTargetKind.CurrentPage };
102
+ }
103
+ /*
104
+ * The landing is a real page on a different branch of this section (e.g.
105
+ * "On-Call Duty" -> /policies while viewing /schedules). A landing that lay on
106
+ * the current path would already have been returned as an Ancestor by the loop
107
+ * above, so at this point it is always off-path; the caller fills in the
108
+ * project id.
109
+ */
110
+ return {
111
+ kind: BreadcrumbTargetKind.SectionLanding,
112
+ routePattern: landingPattern,
113
+ };
114
+ }
115
+ // Resolve the destination of every crumb in a trail.
116
+ export function resolveBreadcrumbTrail(options) {
117
+ const { pagePattern, crumbCount, realRoutePatterns } = options;
118
+ const targets = [];
119
+ for (let index = 0; index < crumbCount; index++) {
120
+ targets.push(resolveBreadcrumbTarget({
121
+ index,
122
+ crumbCount,
123
+ pagePattern,
124
+ realRoutePatterns,
125
+ }));
126
+ }
127
+ return targets;
128
+ }
129
+ //# sourceMappingURL=BreadcrumbTrailResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BreadcrumbTrailResolver.js","sourceRoot":"","sources":["../../../../../UI/Utils/Breadcrumb/BreadcrumbTrailResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,CAAN,IAAY,oBASX;AATD,WAAY,oBAAoB;IAC9B,oEAAoE;IACpE,qCAAa,CAAA;IACb,2DAA2D;IAC3D,+CAAuB,CAAA;IACvB,+EAA+E;IAC/E,6CAAqB,CAAA;IACrB,0EAA0E;IAC1E,kDAA0B,CAAA;AAC5B,CAAC,EATW,oBAAoB,KAApB,oBAAoB,QAS/B;AAyBD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAKvC;IACC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAEtE,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,EAAE,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;IAED,IAAI,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,oBAAoB,CAAC,WAAW,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,cAAc,GAAW,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAkB,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAgB,IAAI,GAAG,CACvC,iBAAiB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAC1C,CAAC;IAEF,wDAAwD;IACxD,MAAM,UAAU,GAAW,KAAK,GAAG,CAAC,CAAC;IAErC;;;;;OAKG;IACH,KAAK,IAAI,KAAK,GAAW,UAAU,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1E,MAAM,eAAe,GAAW,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvE,IAAI,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YACtC,OAAO,EAAE,IAAI,EAAE,oBAAoB,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,UAAU,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,EAAE,IAAI,EAAE,oBAAoB,CAAC,WAAW,EAAE,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACH,MAAM,eAAe,GACnB,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACpD,MAAM,cAAc,GAAuB,iBAAiB;SACzD,GAAG,CAAC,kBAAkB,CAAC;SACvB,IAAI,CAAC,CAAC,OAAe,EAAW,EAAE;QACjC,OAAO,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEL,8EAA8E;IAC9E,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,cAAc,EAAE,CAAC;QACzD,OAAO,EAAE,IAAI,EAAE,oBAAoB,CAAC,WAAW,EAAE,CAAC;IACpD,CAAC;IAED;;;;;;OAMG;IACH,OAAO;QACL,IAAI,EAAE,oBAAoB,CAAC,cAAc;QACzC,YAAY,EAAE,cAAc;KAC7B,CAAC;AACJ,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,sBAAsB,CACpC,OAAsC;IAEtC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAE/D,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,KAAK,IAAI,KAAK,GAAW,CAAC,EAAE,KAAK,GAAG,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC;QACxD,OAAO,CAAC,IAAI,CACV,uBAAuB,CAAC;YACtB,KAAK;YACL,UAAU;YACV,WAAW;YACX,iBAAiB;SAClB,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,189 @@
1
+ import UserCall from "../../Models/DatabaseModels/UserCall";
2
+ import UserPush from "../../Models/DatabaseModels/UserPush";
3
+ import UserSMS from "../../Models/DatabaseModels/UserSMS";
4
+ import UserTelegram from "../../Models/DatabaseModels/UserTelegram";
5
+ import UserWebhook from "../../Models/DatabaseModels/UserWebhook";
6
+ import UserWhatsApp from "../../Models/DatabaseModels/UserWhatsApp";
7
+ /*
8
+ * Display order for the "Notification Method" table cell. A rule only ever has
9
+ * one method set, so this order is cosmetic, but it is kept stable so the cell
10
+ * reads identically wherever it is rendered.
11
+ */
12
+ const NOTIFICATION_METHOD_RELATIONS = [
13
+ { relationName: "userEmail", title: "Email", columns: ["email"] },
14
+ { relationName: "userCall", title: "Call", columns: ["phone"] },
15
+ { relationName: "userSms", title: "SMS", columns: ["phone"] },
16
+ { relationName: "userWhatsApp", title: "WhatsApp", columns: ["phone"] },
17
+ {
18
+ relationName: "userTelegram",
19
+ title: "Telegram",
20
+ columns: ["telegramUserHandle", "telegramChatId"],
21
+ },
22
+ /*
23
+ * Only `name` is read here. A webhook URL is a bearer credential for
24
+ * Slack/Discord/Teams style hooks, so it is deliberately never selected into
25
+ * the browser or rendered. `name` is NOT NULL on UserWebhook.
26
+ */
27
+ { relationName: "userWebhook", title: "Webhook", columns: ["name"] },
28
+ { relationName: "userPush", title: "Push", columns: ["deviceName"] },
29
+ ];
30
+ export default class NotificationMethodUtil {
31
+ /*
32
+ * The relation -> column selection the on-call rule tables need in order to
33
+ * render the "Notification Method" cell. Shared so every table that renders
34
+ * NotificationMethodView selects the same fields; a table that under-selects
35
+ * silently renders a blank cell.
36
+ */
37
+ static getSelectForNotificationMethods() {
38
+ const select = {};
39
+ for (const relation of NOTIFICATION_METHOD_RELATIONS) {
40
+ const columns = {};
41
+ for (const column of relation.columns) {
42
+ columns[column] = true;
43
+ }
44
+ select[relation.relationName] = columns;
45
+ }
46
+ return select;
47
+ }
48
+ /*
49
+ * Turns a rule (or an on-call log timeline entry) into the lines to render in
50
+ * the "Notification Method" column. Returns an empty array when no method
51
+ * relation was loaded or populated.
52
+ */
53
+ static getDisplayItems(item) {
54
+ const displayItems = [];
55
+ for (const relation of NOTIFICATION_METHOD_RELATIONS) {
56
+ const relationValue = item.getColumnValue(relation.relationName);
57
+ if (!relationValue || typeof relationValue !== "object") {
58
+ continue;
59
+ }
60
+ const value = NotificationMethodUtil.firstNonEmpty(relationValue, relation.columns);
61
+ if (value) {
62
+ displayItems.push({ title: relation.title, value: value });
63
+ }
64
+ }
65
+ return displayItems;
66
+ }
67
+ /*
68
+ * The dropdown shown on the on-call rule create form. Every method the user
69
+ * has configured becomes one option, prefixed with the method name so a phone
70
+ * number used for both SMS and WhatsApp stays distinguishable.
71
+ */
72
+ static getDropdownOptions(models) {
73
+ return NotificationMethodUtil.toOrderedList(models).map((model) => {
74
+ return {
75
+ label: NotificationMethodUtil.getLabel(model),
76
+ value: model.id.toString(),
77
+ };
78
+ });
79
+ }
80
+ /*
81
+ * The label for a single method, e.g. `SMS: +15550100`. Exported separately so
82
+ * the dropdown and any future surface stay in agreement.
83
+ */
84
+ static getLabel(model) {
85
+ if (model instanceof UserWebhook) {
86
+ return ("Webhook: " +
87
+ (NotificationMethodUtil.readColumn(model, "name") || "Unknown Webhook"));
88
+ }
89
+ if (model instanceof UserPush) {
90
+ return ("Push: " +
91
+ (NotificationMethodUtil.readColumn(model, "deviceName") ||
92
+ "Unknown Device"));
93
+ }
94
+ if (model instanceof UserTelegram) {
95
+ return ("Telegram: " +
96
+ (NotificationMethodUtil.readColumn(model, "telegramUserHandle") ||
97
+ NotificationMethodUtil.readColumn(model, "telegramChatId") ||
98
+ "Unknown Chat"));
99
+ }
100
+ const identifier = NotificationMethodUtil.readColumn(model, "phone") ||
101
+ NotificationMethodUtil.readColumn(model, "email") ||
102
+ "";
103
+ if (model instanceof UserCall) {
104
+ return "Call: " + identifier;
105
+ }
106
+ if (model instanceof UserSMS) {
107
+ return "SMS: " + identifier;
108
+ }
109
+ if (model instanceof UserWhatsApp) {
110
+ return "WhatsApp: " + identifier;
111
+ }
112
+ return "Email: " + identifier;
113
+ }
114
+ /*
115
+ * Maps the id chosen in the dropdown back onto the rule being created. The
116
+ * dropdown is single-select, so at most one of the seven foreign keys is set.
117
+ * An id that matches nothing leaves the rule untouched, and the server then
118
+ * rejects the create as having no notification method.
119
+ */
120
+ static setSelectedMethodOnRule(rule, selectedValue, models) {
121
+ if (!selectedValue) {
122
+ return rule;
123
+ }
124
+ const selectedId = selectedValue.toString();
125
+ const assignById = (candidates, assign) => {
126
+ const match = candidates.find((candidate) => {
127
+ var _a;
128
+ return ((_a = candidate.id) === null || _a === void 0 ? void 0 : _a.toString()) === selectedId;
129
+ });
130
+ if (match) {
131
+ assign(match.id);
132
+ }
133
+ };
134
+ assignById(models.userEmails, (id) => {
135
+ rule.userEmailId = id;
136
+ });
137
+ assignById(models.userSMSs, (id) => {
138
+ rule.userSmsId = id;
139
+ });
140
+ assignById(models.userCalls, (id) => {
141
+ rule.userCallId = id;
142
+ });
143
+ assignById(models.userPush, (id) => {
144
+ rule.userPushId = id;
145
+ });
146
+ assignById(models.userWhatsApps, (id) => {
147
+ rule.userWhatsAppId = id;
148
+ });
149
+ assignById(models.userTelegrams, (id) => {
150
+ rule.userTelegramId = id;
151
+ });
152
+ assignById(models.userWebhooks, (id) => {
153
+ rule.userWebhookId = id;
154
+ });
155
+ return rule;
156
+ }
157
+ /*
158
+ * Dropdown ordering: methods are grouped by type in a fixed order so the list
159
+ * does not reshuffle between page loads.
160
+ */
161
+ static toOrderedList(models) {
162
+ return [
163
+ ...models.userCalls,
164
+ ...models.userEmails,
165
+ ...models.userSMSs,
166
+ ...models.userPush,
167
+ ...models.userWhatsApps,
168
+ ...models.userTelegrams,
169
+ ...models.userWebhooks,
170
+ ];
171
+ }
172
+ static readColumn(model, columnName) {
173
+ const value = model.getColumnValue(columnName);
174
+ if (value === undefined || value === null || value === "") {
175
+ return "";
176
+ }
177
+ return value.toString();
178
+ }
179
+ static firstNonEmpty(source, columns) {
180
+ for (const column of columns) {
181
+ const value = source[column];
182
+ if (value !== undefined && value !== null && value !== "") {
183
+ return value.toString();
184
+ }
185
+ }
186
+ return undefined;
187
+ }
188
+ }
189
+ //# sourceMappingURL=NotificationMethodUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationMethodUtil.js","sourceRoot":"","sources":["../../../../UI/Utils/NotificationMethodUtil.ts"],"names":[],"mappings":"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"}