@oneuptime/common 11.0.9 → 11.0.12

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 (125) hide show
  1. package/Models/DatabaseModels/CephCluster.ts +134 -0
  2. package/Models/DatabaseModels/CloudResource.ts +134 -0
  3. package/Models/DatabaseModels/DockerHost.ts +134 -0
  4. package/Models/DatabaseModels/DockerSwarmCluster.ts +134 -0
  5. package/Models/DatabaseModels/Host.ts +134 -0
  6. package/Models/DatabaseModels/KubernetesCluster.ts +134 -0
  7. package/Models/DatabaseModels/PodmanHost.ts +134 -0
  8. package/Models/DatabaseModels/ProxmoxCluster.ts +134 -0
  9. package/Models/DatabaseModels/RumApplication.ts +134 -0
  10. package/Models/DatabaseModels/ServerlessFunction.ts +134 -0
  11. package/Models/DatabaseModels/Service.ts +134 -0
  12. package/README.md +1 -1
  13. package/Scripts/generate-service-worker.js +46 -36
  14. package/Server/Infrastructure/Postgres/DataSourceOptions.ts +4 -2
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/1782600000000-AddArchiveToResources.ts +331 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/Readme.md +3 -3
  18. package/Server/Services/AIAgentService.ts +9 -4
  19. package/Server/Services/AnalyticsDatabaseService.ts +89 -56
  20. package/Server/Services/CephClusterService.ts +6 -4
  21. package/Server/Services/CloudResourceService.ts +6 -4
  22. package/Server/Services/DatabaseService.ts +126 -0
  23. package/Server/Services/DockerHostService.ts +6 -4
  24. package/Server/Services/DockerSwarmClusterService.ts +6 -4
  25. package/Server/Services/HostService.ts +6 -4
  26. package/Server/Services/KubernetesClusterService.ts +6 -4
  27. package/Server/Services/PodmanHostService.ts +6 -4
  28. package/Server/Services/ProbeService.ts +10 -4
  29. package/Server/Services/ProxmoxClusterService.ts +6 -4
  30. package/Server/Services/RumApplicationService.ts +6 -4
  31. package/Server/Services/ServerlessFunctionService.ts +6 -4
  32. package/Server/Services/ServiceService.ts +17 -4
  33. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +1 -1
  34. package/Server/Utils/Monitor/MonitorResource.ts +24 -10
  35. package/Server/Utils/Telemetry/EntityRegistry.ts +10 -5
  36. package/Server/Utils/Workspace/Slack/app-manifest.json +86 -92
  37. package/Tests/Server/Services/UpdateColumnsByIdWithoutHooks.test.ts +154 -0
  38. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +12 -9
  39. package/Tests/Types/DiskSize.test.ts +49 -0
  40. package/Types/Dashboard/DashboardComponents/DashboardTableComponent.ts +11 -0
  41. package/Types/Icon/IconProp.ts +1 -0
  42. package/Types/Monitor/MonitorType.ts +15 -31
  43. package/Types/Monitor/schema.json +32 -35
  44. package/UI/Components/BulkUpdate/BulkArchiveActions.tsx +150 -0
  45. package/UI/Components/Icon/Icon.tsx +42 -126
  46. package/UI/Components/Navbar/NavBarMenuModal.tsx +2 -5
  47. package/UI/esbuild-config.js +136 -110
  48. package/Utils/ClientAPI/README.md +1 -1
  49. package/build/dist/Models/DatabaseModels/CephCluster.js +136 -0
  50. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
  51. package/build/dist/Models/DatabaseModels/CloudResource.js +136 -0
  52. package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
  53. package/build/dist/Models/DatabaseModels/DockerHost.js +136 -0
  54. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  55. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +136 -0
  56. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
  57. package/build/dist/Models/DatabaseModels/Host.js +136 -0
  58. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  59. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +136 -0
  60. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  61. package/build/dist/Models/DatabaseModels/PodmanHost.js +136 -0
  62. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
  63. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +136 -0
  64. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
  65. package/build/dist/Models/DatabaseModels/RumApplication.js +136 -0
  66. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  67. package/build/dist/Models/DatabaseModels/ServerlessFunction.js +136 -0
  68. package/build/dist/Models/DatabaseModels/ServerlessFunction.js.map +1 -1
  69. package/build/dist/Models/DatabaseModels/Service.js +136 -0
  70. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  71. package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js +4 -2
  72. package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js.map +1 -1
  73. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782600000000-AddArchiveToResources.js +120 -0
  74. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782600000000-AddArchiveToResources.js.map +1 -0
  75. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  76. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  77. package/build/dist/Server/Services/AIAgentService.js +9 -4
  78. package/build/dist/Server/Services/AIAgentService.js.map +1 -1
  79. package/build/dist/Server/Services/AnalyticsDatabaseService.js +52 -17
  80. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  81. package/build/dist/Server/Services/CephClusterService.js +6 -4
  82. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  83. package/build/dist/Server/Services/CloudResourceService.js +6 -4
  84. package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
  85. package/build/dist/Server/Services/DatabaseService.js +101 -0
  86. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  87. package/build/dist/Server/Services/DockerHostService.js +6 -4
  88. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  89. package/build/dist/Server/Services/DockerSwarmClusterService.js +6 -4
  90. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  91. package/build/dist/Server/Services/HostService.js +6 -4
  92. package/build/dist/Server/Services/HostService.js.map +1 -1
  93. package/build/dist/Server/Services/KubernetesClusterService.js +6 -4
  94. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  95. package/build/dist/Server/Services/PodmanHostService.js +6 -4
  96. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  97. package/build/dist/Server/Services/ProbeService.js +10 -4
  98. package/build/dist/Server/Services/ProbeService.js.map +1 -1
  99. package/build/dist/Server/Services/ProxmoxClusterService.js +6 -4
  100. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  101. package/build/dist/Server/Services/RumApplicationService.js +6 -4
  102. package/build/dist/Server/Services/RumApplicationService.js.map +1 -1
  103. package/build/dist/Server/Services/ServerlessFunctionService.js +6 -4
  104. package/build/dist/Server/Services/ServerlessFunctionService.js.map +1 -1
  105. package/build/dist/Server/Services/ServiceService.js +17 -4
  106. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  107. package/build/dist/Server/Utils/Monitor/MonitorResource.js +24 -10
  108. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  109. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +10 -5
  110. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  111. package/build/dist/Server/Utils/Workspace/Slack/app-manifest.json +3 -9
  112. package/build/dist/Types/Dashboard/DashboardComponents/DashboardTableComponent.js.map +1 -1
  113. package/build/dist/Types/Icon/IconProp.js +1 -0
  114. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  115. package/build/dist/Types/Monitor/MonitorType.js +15 -31
  116. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  117. package/build/dist/UI/Components/BulkUpdate/BulkArchiveActions.js +96 -0
  118. package/build/dist/UI/Components/BulkUpdate/BulkArchiveActions.js.map +1 -0
  119. package/build/dist/UI/Components/Icon/Icon.js +17 -41
  120. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  121. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +2 -3
  122. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  123. package/jest.config.json +47 -66
  124. package/package.json +1 -1
  125. package/tsconfig.json +109 -113
@@ -77,6 +77,7 @@ import {
77
77
  * device — a per-device row would be a cardinality disaster.
78
78
  */
79
79
  @Index(["projectId", "appIdentifier"], { unique: true })
80
+ @Index(["projectId", "isArchived"])
80
81
  @TableMetadata({
81
82
  tableName: "RumApplication",
82
83
  singularName: "RUM Application",
@@ -665,6 +666,139 @@ export default class RumApplication extends BaseModel {
665
666
  })
666
667
  public createdByUserId?: ObjectID = undefined;
667
668
 
669
+ @ColumnAccessControl({
670
+ create: [
671
+ Permission.ProjectOwner,
672
+ Permission.ProjectAdmin,
673
+ Permission.ProjectMember,
674
+ Permission.SettingsAdmin,
675
+ Permission.SettingsMember,
676
+ Permission.CreateRumApplication,
677
+ ],
678
+ read: [
679
+ Permission.ProjectOwner,
680
+ Permission.ProjectAdmin,
681
+ Permission.ProjectMember,
682
+ Permission.Viewer,
683
+ Permission.SettingsAdmin,
684
+ Permission.SettingsMember,
685
+ Permission.SettingsViewer,
686
+ Permission.ReadRumApplication,
687
+ ],
688
+ update: [
689
+ Permission.ProjectOwner,
690
+ Permission.ProjectAdmin,
691
+ Permission.ProjectMember,
692
+ Permission.SettingsAdmin,
693
+ Permission.SettingsMember,
694
+ Permission.EditRumApplication,
695
+ ],
696
+ })
697
+ @TableColumn({
698
+ isDefaultValueColumn: true,
699
+ required: true,
700
+ type: TableColumnType.Boolean,
701
+ title: "Is Archived",
702
+ description:
703
+ "Is this RUM application archived? Archived RUM applications are hidden from lists but keep collecting telemetry.",
704
+ defaultValue: false,
705
+ })
706
+ @Column({
707
+ type: ColumnType.Boolean,
708
+ nullable: false,
709
+ default: false,
710
+ })
711
+ public isArchived?: boolean = undefined;
712
+
713
+ @ColumnAccessControl({
714
+ create: [],
715
+ read: [
716
+ Permission.ProjectOwner,
717
+ Permission.ProjectAdmin,
718
+ Permission.ProjectMember,
719
+ Permission.Viewer,
720
+ Permission.SettingsAdmin,
721
+ Permission.SettingsMember,
722
+ Permission.SettingsViewer,
723
+ Permission.ReadRumApplication,
724
+ ],
725
+ update: [],
726
+ })
727
+ @TableColumn({
728
+ required: false,
729
+ type: TableColumnType.Date,
730
+ title: "Archived At",
731
+ description: "When was this RUM application archived?",
732
+ })
733
+ @Column({
734
+ type: ColumnType.Date,
735
+ nullable: true,
736
+ })
737
+ public archivedAt?: Date = undefined;
738
+
739
+ @ColumnAccessControl({
740
+ create: [],
741
+ read: [
742
+ Permission.ProjectOwner,
743
+ Permission.ProjectAdmin,
744
+ Permission.ProjectMember,
745
+ Permission.Viewer,
746
+ Permission.SettingsAdmin,
747
+ Permission.SettingsMember,
748
+ Permission.SettingsViewer,
749
+ Permission.ReadRumApplication,
750
+ ],
751
+ update: [],
752
+ })
753
+ @TableColumn({
754
+ manyToOneRelationColumn: "archivedByUserId",
755
+ type: TableColumnType.Entity,
756
+ modelType: User,
757
+ title: "Archived by User",
758
+ description:
759
+ "Relation to User who archived this object (if this object was archived by a User)",
760
+ })
761
+ @ManyToOne(
762
+ () => {
763
+ return User;
764
+ },
765
+ {
766
+ eager: false,
767
+ nullable: true,
768
+ onDelete: "SET NULL",
769
+ orphanedRowAction: "nullify",
770
+ },
771
+ )
772
+ @JoinColumn({ name: "archivedByUserId" })
773
+ public archivedByUser?: User = undefined;
774
+
775
+ @ColumnAccessControl({
776
+ create: [],
777
+ read: [
778
+ Permission.ProjectOwner,
779
+ Permission.ProjectAdmin,
780
+ Permission.ProjectMember,
781
+ Permission.Viewer,
782
+ Permission.SettingsAdmin,
783
+ Permission.SettingsMember,
784
+ Permission.SettingsViewer,
785
+ Permission.ReadRumApplication,
786
+ ],
787
+ update: [],
788
+ })
789
+ @TableColumn({
790
+ type: TableColumnType.ObjectID,
791
+ title: "Archived by User ID",
792
+ description:
793
+ "User ID who archived this object (if this object was archived by a User)",
794
+ })
795
+ @Column({
796
+ type: ColumnType.ObjectID,
797
+ nullable: true,
798
+ transformer: ObjectID.getDatabaseTransformer(),
799
+ })
800
+ public archivedByUserId?: ObjectID = undefined;
801
+
668
802
  @ColumnAccessControl({
669
803
  create: [],
670
804
  read: [
@@ -77,6 +77,7 @@ import {
77
77
  * function collapse into a single row instead of racing to create duplicates.
78
78
  */
79
79
  @Index(["projectId", "functionIdentifier"], { unique: true })
80
+ @Index(["projectId", "isArchived"])
80
81
  @TableMetadata({
81
82
  tableName: "ServerlessFunction",
82
83
  singularName: "Serverless Function",
@@ -815,6 +816,139 @@ export default class ServerlessFunction extends BaseModel {
815
816
  })
816
817
  public createdByUserId?: ObjectID = undefined;
817
818
 
819
+ @ColumnAccessControl({
820
+ create: [
821
+ Permission.ProjectOwner,
822
+ Permission.ProjectAdmin,
823
+ Permission.ProjectMember,
824
+ Permission.SettingsAdmin,
825
+ Permission.SettingsMember,
826
+ Permission.CreateServerlessFunction,
827
+ ],
828
+ read: [
829
+ Permission.ProjectOwner,
830
+ Permission.ProjectAdmin,
831
+ Permission.ProjectMember,
832
+ Permission.Viewer,
833
+ Permission.SettingsAdmin,
834
+ Permission.SettingsMember,
835
+ Permission.SettingsViewer,
836
+ Permission.ReadServerlessFunction,
837
+ ],
838
+ update: [
839
+ Permission.ProjectOwner,
840
+ Permission.ProjectAdmin,
841
+ Permission.ProjectMember,
842
+ Permission.SettingsAdmin,
843
+ Permission.SettingsMember,
844
+ Permission.EditServerlessFunction,
845
+ ],
846
+ })
847
+ @TableColumn({
848
+ isDefaultValueColumn: true,
849
+ required: true,
850
+ type: TableColumnType.Boolean,
851
+ title: "Is Archived",
852
+ description:
853
+ "Is this serverless function archived? Archived serverless functions are hidden from lists but keep collecting telemetry.",
854
+ defaultValue: false,
855
+ })
856
+ @Column({
857
+ type: ColumnType.Boolean,
858
+ nullable: false,
859
+ default: false,
860
+ })
861
+ public isArchived?: boolean = undefined;
862
+
863
+ @ColumnAccessControl({
864
+ create: [],
865
+ read: [
866
+ Permission.ProjectOwner,
867
+ Permission.ProjectAdmin,
868
+ Permission.ProjectMember,
869
+ Permission.Viewer,
870
+ Permission.SettingsAdmin,
871
+ Permission.SettingsMember,
872
+ Permission.SettingsViewer,
873
+ Permission.ReadServerlessFunction,
874
+ ],
875
+ update: [],
876
+ })
877
+ @TableColumn({
878
+ required: false,
879
+ type: TableColumnType.Date,
880
+ title: "Archived At",
881
+ description: "When was this serverless function archived?",
882
+ })
883
+ @Column({
884
+ type: ColumnType.Date,
885
+ nullable: true,
886
+ })
887
+ public archivedAt?: Date = undefined;
888
+
889
+ @ColumnAccessControl({
890
+ create: [],
891
+ read: [
892
+ Permission.ProjectOwner,
893
+ Permission.ProjectAdmin,
894
+ Permission.ProjectMember,
895
+ Permission.Viewer,
896
+ Permission.SettingsAdmin,
897
+ Permission.SettingsMember,
898
+ Permission.SettingsViewer,
899
+ Permission.ReadServerlessFunction,
900
+ ],
901
+ update: [],
902
+ })
903
+ @TableColumn({
904
+ manyToOneRelationColumn: "archivedByUserId",
905
+ type: TableColumnType.Entity,
906
+ modelType: User,
907
+ title: "Archived by User",
908
+ description:
909
+ "Relation to User who archived this object (if this object was archived by a User)",
910
+ })
911
+ @ManyToOne(
912
+ () => {
913
+ return User;
914
+ },
915
+ {
916
+ eager: false,
917
+ nullable: true,
918
+ onDelete: "SET NULL",
919
+ orphanedRowAction: "nullify",
920
+ },
921
+ )
922
+ @JoinColumn({ name: "archivedByUserId" })
923
+ public archivedByUser?: User = undefined;
924
+
925
+ @ColumnAccessControl({
926
+ create: [],
927
+ read: [
928
+ Permission.ProjectOwner,
929
+ Permission.ProjectAdmin,
930
+ Permission.ProjectMember,
931
+ Permission.Viewer,
932
+ Permission.SettingsAdmin,
933
+ Permission.SettingsMember,
934
+ Permission.SettingsViewer,
935
+ Permission.ReadServerlessFunction,
936
+ ],
937
+ update: [],
938
+ })
939
+ @TableColumn({
940
+ type: TableColumnType.ObjectID,
941
+ title: "Archived by User ID",
942
+ description:
943
+ "User ID who archived this object (if this object was archived by a User)",
944
+ })
945
+ @Column({
946
+ type: ColumnType.ObjectID,
947
+ nullable: true,
948
+ transformer: ObjectID.getDatabaseTransformer(),
949
+ })
950
+ public archivedByUserId?: ObjectID = undefined;
951
+
818
952
  @ColumnAccessControl({
819
953
  create: [],
820
954
  read: [
@@ -100,6 +100,7 @@ import {
100
100
  * winning row.
101
101
  */
102
102
  @Index(["projectId", "name"], { unique: true })
103
+ @Index(["projectId", "isArchived"])
103
104
  @TableMetadata({
104
105
  tableName: "Service",
105
106
  singularName: "Service",
@@ -421,6 +422,139 @@ export default class Service extends BaseModel {
421
422
  })
422
423
  public createdByUserId?: ObjectID = undefined;
423
424
 
425
+ @ColumnAccessControl({
426
+ create: [
427
+ Permission.ProjectOwner,
428
+ Permission.ProjectAdmin,
429
+ Permission.ProjectMember,
430
+ Permission.SettingsAdmin,
431
+ Permission.SettingsMember,
432
+ Permission.CreateService,
433
+ ],
434
+ read: [
435
+ Permission.ProjectOwner,
436
+ Permission.ProjectAdmin,
437
+ Permission.ProjectMember,
438
+ Permission.Viewer,
439
+ Permission.SettingsAdmin,
440
+ Permission.SettingsMember,
441
+ Permission.SettingsViewer,
442
+ Permission.ReadService,
443
+ ],
444
+ update: [
445
+ Permission.ProjectOwner,
446
+ Permission.ProjectAdmin,
447
+ Permission.ProjectMember,
448
+ Permission.SettingsAdmin,
449
+ Permission.SettingsMember,
450
+ Permission.EditService,
451
+ ],
452
+ })
453
+ @TableColumn({
454
+ isDefaultValueColumn: true,
455
+ required: true,
456
+ type: TableColumnType.Boolean,
457
+ title: "Is Archived",
458
+ description:
459
+ "Is this service archived? Archived services are hidden from lists but keep collecting telemetry.",
460
+ defaultValue: false,
461
+ })
462
+ @Column({
463
+ type: ColumnType.Boolean,
464
+ nullable: false,
465
+ default: false,
466
+ })
467
+ public isArchived?: boolean = undefined;
468
+
469
+ @ColumnAccessControl({
470
+ create: [],
471
+ read: [
472
+ Permission.ProjectOwner,
473
+ Permission.ProjectAdmin,
474
+ Permission.ProjectMember,
475
+ Permission.Viewer,
476
+ Permission.SettingsAdmin,
477
+ Permission.SettingsMember,
478
+ Permission.SettingsViewer,
479
+ Permission.ReadService,
480
+ ],
481
+ update: [],
482
+ })
483
+ @TableColumn({
484
+ required: false,
485
+ type: TableColumnType.Date,
486
+ title: "Archived At",
487
+ description: "When was this service archived?",
488
+ })
489
+ @Column({
490
+ type: ColumnType.Date,
491
+ nullable: true,
492
+ })
493
+ public archivedAt?: Date = undefined;
494
+
495
+ @ColumnAccessControl({
496
+ create: [],
497
+ read: [
498
+ Permission.ProjectOwner,
499
+ Permission.ProjectAdmin,
500
+ Permission.ProjectMember,
501
+ Permission.Viewer,
502
+ Permission.SettingsAdmin,
503
+ Permission.SettingsMember,
504
+ Permission.SettingsViewer,
505
+ Permission.ReadService,
506
+ ],
507
+ update: [],
508
+ })
509
+ @TableColumn({
510
+ manyToOneRelationColumn: "archivedByUserId",
511
+ type: TableColumnType.Entity,
512
+ modelType: User,
513
+ title: "Archived by User",
514
+ description:
515
+ "Relation to User who archived this object (if this object was archived by a User)",
516
+ })
517
+ @ManyToOne(
518
+ () => {
519
+ return User;
520
+ },
521
+ {
522
+ eager: false,
523
+ nullable: true,
524
+ onDelete: "SET NULL",
525
+ orphanedRowAction: "nullify",
526
+ },
527
+ )
528
+ @JoinColumn({ name: "archivedByUserId" })
529
+ public archivedByUser?: User = undefined;
530
+
531
+ @ColumnAccessControl({
532
+ create: [],
533
+ read: [
534
+ Permission.ProjectOwner,
535
+ Permission.ProjectAdmin,
536
+ Permission.ProjectMember,
537
+ Permission.Viewer,
538
+ Permission.SettingsAdmin,
539
+ Permission.SettingsMember,
540
+ Permission.SettingsViewer,
541
+ Permission.ReadService,
542
+ ],
543
+ update: [],
544
+ })
545
+ @TableColumn({
546
+ type: TableColumnType.ObjectID,
547
+ title: "Archived by User ID",
548
+ description:
549
+ "User ID who archived this object (if this object was archived by a User)",
550
+ })
551
+ @Column({
552
+ type: ColumnType.ObjectID,
553
+ nullable: true,
554
+ transformer: ObjectID.getDatabaseTransformer(),
555
+ })
556
+ public archivedByUserId?: ObjectID = undefined;
557
+
424
558
  @ColumnAccessControl({
425
559
  create: [],
426
560
  read: [
package/README.md CHANGED
@@ -1,3 +1,3 @@
1
1
  # OneUptime Common UI Library
2
2
 
3
- The OneUptime Common UI Library is a collection of shared components, utilities that are used across the OneUptime platform. It is designed to be easy to install and use, and to be extensible. This library is built with React and TypeScript. It includes components like buttons, modals, and form elements. It also includes utilities like date formatting, and string manipulation.
3
+ The OneUptime Common UI Library is a collection of shared components, utilities that are used across the OneUptime platform. It is designed to be easy to install and use, and to be extensible. This library is built with React and TypeScript. It includes components like buttons, modals, and form elements. It also includes utilities like date formatting, and string manipulation.
@@ -2,24 +2,24 @@
2
2
 
3
3
  /**
4
4
  * Universal Service Worker Generator for OneUptime Services
5
- *
5
+ *
6
6
  * This script can be used by any OneUptime service to generate
7
7
  * a service worker from a template with dynamic versioning.
8
- *
8
+ *
9
9
  * Usage:
10
10
  * node generate-service-worker.js [template-path] [output-path]
11
- *
11
+ *
12
12
  * Example:
13
13
  * node generate-service-worker.js sw.js.template public/sw.js
14
14
  */
15
15
 
16
- const fs = require('fs');
17
- const path = require('path');
18
- const crypto = require('crypto');
16
+ const fs = require("fs");
17
+ const path = require("path");
18
+ const crypto = require("crypto");
19
19
 
20
20
  // Default values
21
- const DEFAULT_APP_VERSION = '1.0.0';
22
- const DEFAULT_GIT_SHA = 'local';
21
+ const DEFAULT_APP_VERSION = "1.0.0";
22
+ const DEFAULT_GIT_SHA = "local";
23
23
 
24
24
  /**
25
25
  * Get app version from environment or package.json
@@ -29,13 +29,13 @@ function getAppVersion(packageJsonPath) {
29
29
  if (process.env.APP_VERSION) {
30
30
  return process.env.APP_VERSION;
31
31
  }
32
-
32
+
33
33
  // Fallback to package.json version
34
34
  try {
35
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
35
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
36
36
  return packageJson.version || DEFAULT_APP_VERSION;
37
37
  } catch (error) {
38
- console.warn('Could not read package.json, using default version');
38
+ console.warn("Could not read package.json, using default version");
39
39
  return DEFAULT_APP_VERSION;
40
40
  }
41
41
  }
@@ -48,16 +48,18 @@ function getGitSha() {
48
48
  if (process.env.GIT_SHA) {
49
49
  return process.env.GIT_SHA.substring(0, 8); // Short SHA
50
50
  }
51
-
51
+
52
52
  // Try to get from git command if available
53
53
  try {
54
- const { execSync } = require('child_process');
55
- const gitSha = execSync('git rev-parse --short HEAD', { encoding: 'utf8' }).trim();
54
+ const { execSync } = require("child_process");
55
+ const gitSha = execSync("git rev-parse --short HEAD", {
56
+ encoding: "utf8",
57
+ }).trim();
56
58
  return gitSha;
57
59
  } catch (error) {
58
60
  // Fallback to timestamp-based hash for local development
59
61
  const timestamp = Date.now().toString();
60
- const hash = crypto.createHash('md5').update(timestamp).digest('hex');
62
+ const hash = crypto.createHash("md5").update(timestamp).digest("hex");
61
63
  return hash.substring(0, 8);
62
64
  }
63
65
  }
@@ -65,34 +67,38 @@ function getGitSha() {
65
67
  /**
66
68
  * Generate service worker from template
67
69
  */
68
- function generateServiceWorker(templatePath, outputPath, serviceName = 'OneUptime') {
70
+ function generateServiceWorker(
71
+ templatePath,
72
+ outputPath,
73
+ serviceName = "OneUptime",
74
+ ) {
69
75
  // Check if template exists
70
76
  if (!fs.existsSync(templatePath)) {
71
- console.error('❌ Service worker template not found:', templatePath);
77
+ console.error("❌ Service worker template not found:", templatePath);
72
78
  process.exit(1);
73
79
  }
74
-
80
+
75
81
  // Read template
76
- const template = fs.readFileSync(templatePath, 'utf8');
77
-
82
+ const template = fs.readFileSync(templatePath, "utf8");
83
+
78
84
  // Get version information
79
- const packageJsonPath = path.join(path.dirname(templatePath), 'package.json');
85
+ const packageJsonPath = path.join(path.dirname(templatePath), "package.json");
80
86
  const appVersion = getAppVersion(packageJsonPath);
81
87
  const gitSha = getGitSha();
82
88
  const buildTimestamp = new Date().toISOString();
83
-
89
+
84
90
  console.log(`🔧 Generating service worker for ${serviceName}...`);
85
91
  console.log(` App Version: ${appVersion}`);
86
92
  console.log(` Git SHA: ${gitSha}`);
87
93
  console.log(` Build Time: ${buildTimestamp}`);
88
-
94
+
89
95
  // Replace placeholders
90
96
  const generatedContent = template
91
97
  .replace(/\{\{APP_VERSION\}\}/g, appVersion)
92
98
  .replace(/\{\{GIT_SHA\}\}/g, gitSha)
93
99
  .replace(/\{\{BUILD_TIMESTAMP\}\}/g, buildTimestamp)
94
100
  .replace(/\{\{SERVICE_NAME\}\}/g, serviceName);
95
-
101
+
96
102
  // Add generation comment at the top
97
103
  const header = `/*
98
104
  * Generated Service Worker for ${serviceName}
@@ -106,37 +112,41 @@ function generateServiceWorker(templatePath, outputPath, serviceName = 'OneUptim
106
112
  */
107
113
 
108
114
  `;
109
-
115
+
110
116
  const finalContent = header + generatedContent;
111
-
117
+
112
118
  // Ensure output directory exists
113
119
  const outputDir = path.dirname(outputPath);
114
120
  if (!fs.existsSync(outputDir)) {
115
121
  fs.mkdirSync(outputDir, { recursive: true });
116
122
  }
117
-
123
+
118
124
  // Write generated service worker
119
- fs.writeFileSync(outputPath, finalContent, 'utf8');
120
-
121
- console.log('✅ Service worker generated successfully:', outputPath);
125
+ fs.writeFileSync(outputPath, finalContent, "utf8");
126
+
127
+ console.log("✅ Service worker generated successfully:", outputPath);
122
128
  console.log(` Cache version: oneuptime-v${appVersion}-${gitSha}`);
123
129
  }
124
130
 
125
131
  // Command line interface
126
132
  if (require.main === module) {
127
133
  const args = process.argv.slice(2);
128
- const templatePath = args[0] || 'sw.js.template';
129
- const outputPath = args[1] || 'public/sw.js';
134
+ const templatePath = args[0] || "sw.js.template";
135
+ const outputPath = args[1] || "public/sw.js";
130
136
  const serviceName = args[2] || path.basename(process.cwd());
131
-
137
+
132
138
  try {
133
139
  // Resolve paths relative to current working directory
134
140
  const resolvedTemplatePath = path.resolve(templatePath);
135
141
  const resolvedOutputPath = path.resolve(outputPath);
136
-
137
- generateServiceWorker(resolvedTemplatePath, resolvedOutputPath, serviceName);
142
+
143
+ generateServiceWorker(
144
+ resolvedTemplatePath,
145
+ resolvedOutputPath,
146
+ serviceName,
147
+ );
138
148
  } catch (error) {
139
- console.error('❌ Failed to generate service worker:', error.message);
149
+ console.error("❌ Failed to generate service worker:", error.message);
140
150
  process.exit(1);
141
151
  }
142
152
  }
@@ -34,8 +34,10 @@ const dataSourceOptions: DataSourceOptions = {
34
34
  database: DatabaseName,
35
35
  migrationsTableName: "migrations",
36
36
  migrations: Migrations,
37
- // Schema migrations run on connect unless disabled (e.g. runtime pods when a
38
- // dedicated migrate Job owns migrations). See RunDatabaseMigrationsOnBoot.
37
+ /*
38
+ * Schema migrations run on connect unless disabled (e.g. runtime pods when a
39
+ * dedicated migrate Job owns migrations). See RunDatabaseMigrationsOnBoot.
40
+ */
39
41
  migrationsRun: RunDatabaseMigrationsOnBoot,
40
42
  entities: Entities,
41
43
  applicationName: "oneuptime",