@oneuptime/common 10.2.1 → 10.2.2

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 (35) hide show
  1. package/Models/DatabaseModels/Index.ts +2 -0
  2. package/Models/DatabaseModels/ProjectOidc.ts +705 -0
  3. package/Server/API/ProjectOIDC.ts +73 -0
  4. package/Server/Infrastructure/Postgres/SchemaMigrations/1778506655291-AddProjectOIDC.ts +79 -0
  5. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  6. package/Server/Services/Index.ts +2 -0
  7. package/Server/Services/OnCallDutyPolicyScheduleService.ts +139 -26
  8. package/Server/Services/ProjectOidcService.ts +10 -0
  9. package/Types/OnCallDutyPolicy/UserOverrideUtil.ts +155 -0
  10. package/Types/Permission.ts +42 -0
  11. package/UI/Components/Calendar/Calendar.css +257 -0
  12. package/UI/Components/Calendar/Calendar.tsx +22 -11
  13. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  14. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  15. package/build/dist/Models/DatabaseModels/ProjectOidc.js +727 -0
  16. package/build/dist/Models/DatabaseModels/ProjectOidc.js.map +1 -0
  17. package/build/dist/Server/API/ProjectOIDC.js +45 -0
  18. package/build/dist/Server/API/ProjectOIDC.js.map +1 -0
  19. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778506655291-AddProjectOIDC.js +34 -0
  20. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1778506655291-AddProjectOIDC.js.map +1 -0
  21. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  22. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  23. package/build/dist/Server/Services/Index.js +2 -0
  24. package/build/dist/Server/Services/Index.js.map +1 -1
  25. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js +106 -17
  26. package/build/dist/Server/Services/OnCallDutyPolicyScheduleService.js.map +1 -1
  27. package/build/dist/Server/Services/ProjectOidcService.js +9 -0
  28. package/build/dist/Server/Services/ProjectOidcService.js.map +1 -0
  29. package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js +86 -0
  30. package/build/dist/Types/OnCallDutyPolicy/UserOverrideUtil.js.map +1 -0
  31. package/build/dist/Types/Permission.js +40 -0
  32. package/build/dist/Types/Permission.js.map +1 -1
  33. package/build/dist/UI/Components/Calendar/Calendar.js +12 -10
  34. package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
  35. package/package.json +1 -1
@@ -0,0 +1,9 @@
1
+ import DatabaseService from "./DatabaseService";
2
+ import Model from "../../Models/DatabaseModels/ProjectOidc";
3
+ export class Service extends DatabaseService {
4
+ constructor() {
5
+ super(Model);
6
+ }
7
+ }
8
+ export default new Service();
9
+ //# sourceMappingURL=ProjectOidcService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProjectOidcService.js","sourceRoot":"","sources":["../../../../Server/Services/ProjectOidcService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,yCAAyC,CAAC;AAE5D,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}
@@ -0,0 +1,86 @@
1
+ import OneUptimeDate from "../Date";
2
+ /*
3
+ * CalendarEvent extends JSONObject so it accepts string-indexed metadata.
4
+ * We attach the override info under a known key so downstream consumers can
5
+ * detect and render the substitution distinctly.
6
+ */
7
+ export const OVERRIDE_META_KEY = "_override";
8
+ export default class UserOverrideUtil {
9
+ /**
10
+ * Returns true when this override should be applied on top of the schedule
11
+ * events. Global overrides always apply; policy-scoped overrides apply to
12
+ * any schedule, since a schedule's calendar shows coverage information for
13
+ * every user who could potentially be paged through it.
14
+ */
15
+ static isOverrideApplicable(_override) {
16
+ return true;
17
+ }
18
+ static applyOverridesToEvents(data) {
19
+ const applicable = data.overrides.filter(UserOverrideUtil.isOverrideApplicable);
20
+ if (applicable.length === 0) {
21
+ return data.events;
22
+ }
23
+ let working = data.events;
24
+ for (const override of applicable) {
25
+ const next = [];
26
+ for (const event of working) {
27
+ next.push(...UserOverrideUtil.splitEventByOverride(event, override));
28
+ }
29
+ working = next;
30
+ }
31
+ return UserOverrideUtil.reassignEventIds(working);
32
+ }
33
+ static splitEventByOverride(event, override) {
34
+ if (event.title !== override.overrideUserId) {
35
+ return [event];
36
+ }
37
+ // Override window doesn't overlap event window at all.
38
+ if (OneUptimeDate.isAfter(override.startsAt, event.end) ||
39
+ OneUptimeDate.isSame(override.startsAt, event.end) ||
40
+ OneUptimeDate.isBefore(override.endsAt, event.start) ||
41
+ OneUptimeDate.isSame(override.endsAt, event.start)) {
42
+ return [event];
43
+ }
44
+ const overrideStart = OneUptimeDate.isAfter(override.startsAt, event.start)
45
+ ? override.startsAt
46
+ : event.start;
47
+ const overrideEnd = OneUptimeDate.isBefore(override.endsAt, event.end)
48
+ ? override.endsAt
49
+ : event.end;
50
+ const segments = [];
51
+ // Segment before the override window — original user remains on call.
52
+ if (OneUptimeDate.isBefore(event.start, overrideStart)) {
53
+ segments.push(Object.assign(Object.assign({}, event), { end: overrideStart }));
54
+ }
55
+ // Override window — substitute user takes over.
56
+ const meta = {
57
+ isOverride: true,
58
+ originalUserId: override.overrideUserId,
59
+ overrideUserId: override.routeAlertsToUserId,
60
+ overrideStartsAt: override.startsAt,
61
+ overrideEndsAt: override.endsAt,
62
+ };
63
+ segments.push(Object.assign(Object.assign({}, event), { start: overrideStart, end: overrideEnd, title: override.routeAlertsToUserId, [OVERRIDE_META_KEY]: meta }));
64
+ // Segment after the override window — original user resumes.
65
+ if (OneUptimeDate.isAfter(event.end, overrideEnd)) {
66
+ segments.push(Object.assign(Object.assign({}, event), { start: overrideEnd }));
67
+ }
68
+ return segments;
69
+ }
70
+ static reassignEventIds(events) {
71
+ let id = 1;
72
+ return events.map((event) => {
73
+ return Object.assign(Object.assign({}, event), { id: id++ });
74
+ });
75
+ }
76
+ static getOverrideMeta(event) {
77
+ const meta = event[OVERRIDE_META_KEY];
78
+ if (meta &&
79
+ typeof meta === "object" &&
80
+ meta.isOverride === true) {
81
+ return meta;
82
+ }
83
+ return null;
84
+ }
85
+ }
86
+ //# sourceMappingURL=UserOverrideUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserOverrideUtil.js","sourceRoot":"","sources":["../../../../Types/OnCallDutyPolicy/UserOverrideUtil.ts"],"names":[],"mappings":"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"}
@@ -414,6 +414,10 @@ var Permission;
414
414
  Permission["DeleteProjectSSO"] = "DeleteProjectSSO";
415
415
  Permission["EditProjectSSO"] = "EditProjectSSO";
416
416
  Permission["ReadProjectSSO"] = "ReadProjectSSO";
417
+ Permission["CreateProjectOIDC"] = "CreateProjectOIDC";
418
+ Permission["DeleteProjectOIDC"] = "DeleteProjectOIDC";
419
+ Permission["EditProjectOIDC"] = "EditProjectOIDC";
420
+ Permission["ReadProjectOIDC"] = "ReadProjectOIDC";
417
421
  Permission["CreateStatusPageSSO"] = "CreateStatusPageSSO";
418
422
  Permission["DeleteStatusPageSSO"] = "DeleteStatusPageSSO";
419
423
  Permission["EditStatusPageSSO"] = "EditStatusPageSSO";
@@ -2522,6 +2526,42 @@ export class PermissionHelper {
2522
2526
  isRolePermission: false,
2523
2527
  group: PermissionGroup.Settings,
2524
2528
  },
2529
+ {
2530
+ permission: Permission.CreateProjectOIDC,
2531
+ title: "Create Project OIDC",
2532
+ description: "This permission can create Project OIDC in this project.",
2533
+ isAssignableToTenant: true,
2534
+ isAccessControlPermission: false,
2535
+ isRolePermission: false,
2536
+ group: PermissionGroup.Settings,
2537
+ },
2538
+ {
2539
+ permission: Permission.DeleteProjectOIDC,
2540
+ title: "Delete Project OIDC",
2541
+ description: "This permission can delete Project OIDC in this project.",
2542
+ isAssignableToTenant: true,
2543
+ isAccessControlPermission: false,
2544
+ isRolePermission: false,
2545
+ group: PermissionGroup.Settings,
2546
+ },
2547
+ {
2548
+ permission: Permission.EditProjectOIDC,
2549
+ title: "Edit Project OIDC",
2550
+ description: "This permission can edit Project OIDC in this project.",
2551
+ isAssignableToTenant: true,
2552
+ isAccessControlPermission: false,
2553
+ isRolePermission: false,
2554
+ group: PermissionGroup.Settings,
2555
+ },
2556
+ {
2557
+ permission: Permission.ReadProjectOIDC,
2558
+ title: "Read Project OIDC",
2559
+ description: "This permission can read Project OIDC in this project.",
2560
+ isAssignableToTenant: true,
2561
+ isAccessControlPermission: false,
2562
+ isRolePermission: false,
2563
+ group: PermissionGroup.Settings,
2564
+ },
2525
2565
  {
2526
2566
  permission: Permission.CreateStatusPageSSO,
2527
2567
  title: "Create Status Page SSO",