@oneuptime/cli 14.0.75 → 14.0.77

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 (2) hide show
  1. package/build/dist/Index.js +1364 -22
  2. package/package.json +1 -1
@@ -122606,6 +122606,28 @@ var import_zod_to_openapi = __toESM(require_dist());
122606
122606
  var Zod = external_exports;
122607
122607
  var Zod_default = Zod;
122608
122608
 
122609
+ // ../Common/Utils/RefusedValue.ts
122610
+ var MAX_REFUSED_VALUE_LENGTH = 80;
122611
+ var REFUSED_VALUE_CUT_MARK = "\u2026";
122612
+ var isSurrogatePairAt = /* @__PURE__ */ __name((text, index) => {
122613
+ const high = text.charCodeAt(index);
122614
+ const low = text.charCodeAt(index + 1);
122615
+ return high >= 55296 && high <= 56319 && low >= 56320 && low <= 57343;
122616
+ }, "isSurrogatePairAt");
122617
+ var refusedValue = /* @__PURE__ */ __name((value) => {
122618
+ let text;
122619
+ try {
122620
+ text = String(value);
122621
+ } catch {
122622
+ return "";
122623
+ }
122624
+ if (text.length <= MAX_REFUSED_VALUE_LENGTH) {
122625
+ return text;
122626
+ }
122627
+ const end = isSurrogatePairAt(text, MAX_REFUSED_VALUE_LENGTH - 1) ? MAX_REFUSED_VALUE_LENGTH - 1 : MAX_REFUSED_VALUE_LENGTH;
122628
+ return text.slice(0, end) + REFUSED_VALUE_CUT_MARK;
122629
+ }, "refusedValue");
122630
+
122609
122631
  // ../Common/Types/Date.ts
122610
122632
  var Moment = import_moment_timezone.default;
122611
122633
  var UNIX_NANO_INTEGER_PATTERN = /^[+-]?\d+$/;
@@ -124123,7 +124145,9 @@ var OneUptimeDate = class _OneUptimeDate {
124123
124145
  if (date && date["value"] && typeof date["value"] === "string" && date["_type"] && (date["_type"] === "Date" || date["_type"] === "DateTime")) {
124124
124146
  return (0, import_moment_timezone.default)(date["value"]).toDate();
124125
124147
  }
124126
- throw new BadDataException("Invalid date: " + date?.toString());
124148
+ throw new BadDataException(
124149
+ "Invalid date: " + refusedValue(date?.toString())
124150
+ );
124127
124151
  }
124128
124152
  static asDateForDatabaseQuery(date) {
124129
124153
  const formatstring = "YYYY-MM-DD";
@@ -125060,7 +125084,7 @@ var Hostname = class _Hostname extends DatabaseProperty {
125060
125084
  this._route = value;
125061
125085
  } else {
125062
125086
  throw new BadDataException(
125063
- "Hostname " + value + " is not in valid format."
125087
+ "Hostname " + refusedValue(value) + " is not in valid format."
125064
125088
  );
125065
125089
  }
125066
125090
  }
@@ -125270,11 +125294,11 @@ var Route = class _Route extends DatabaseProperty {
125270
125294
  }
125271
125295
  static validateRoute(route) {
125272
125296
  if (_Route.hasSchemePrefix(route)) {
125273
- throw new BadDataException(`Invalid route: ${route}`);
125297
+ throw new BadDataException(`Invalid route: ${refusedValue(route)}`);
125274
125298
  }
125275
125299
  const matchRouteCharacters = /^[a-zA-Z_\d\-!#$%&'()*+,./:;=?@[\]~]*$/;
125276
125300
  if (route && !matchRouteCharacters.test(route)) {
125277
- throw new BadDataException(`Invalid route: ${route}`);
125301
+ throw new BadDataException(`Invalid route: ${refusedValue(route)}`);
125278
125302
  }
125279
125303
  }
125280
125304
  get route() {
@@ -125371,10 +125395,24 @@ var nonBusinessEmailDomains = [
125371
125395
  "zoho",
125372
125396
  "yandex"
125373
125397
  ];
125398
+ var MAX_EMAIL_ADDRESS_LENGTH = 254;
125399
+ var ONE_EMAIL_ADDRESS = (
125400
+ // eslint-disable-next-line no-control-regex
125401
+ /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[[a-z0-9:._-]{1,64}\])$/i
125402
+ );
125374
125403
  var Email = class _Email extends DatabaseProperty {
125375
125404
  constructor(email) {
125376
125405
  super();
125377
125406
  this._email = "";
125407
+ /*
125408
+ * Set only by the lenient read paths (fromDatabase / fromJSON) when a stored
125409
+ * value is not one valid mailbox. Such an Email keeps its raw string so it
125410
+ * still round-trips and still renders, but toDatabase refuses it, so a value
125411
+ * that is not a single address can never be written back or newly created -
125412
+ * only a value already stored before this check existed can carry the flag.
125413
+ * This mirrors how URL keeps a legacy value it can no longer parse.
125414
+ */
125415
+ this._isMalformed = false;
125378
125416
  this.email = email;
125379
125417
  }
125380
125418
  static {
@@ -125384,26 +125422,52 @@ var Email = class _Email extends DatabaseProperty {
125384
125422
  return this._email;
125385
125423
  }
125386
125424
  set email(value) {
125425
+ if (value instanceof _Email) {
125426
+ value = value.toString();
125427
+ }
125387
125428
  if (value && typeof value === "string") {
125388
125429
  value = value.trim();
125389
125430
  value = value.toLowerCase();
125390
125431
  }
125391
125432
  if (_Email.isValid(value)) {
125392
125433
  this._email = value;
125434
+ this._isMalformed = false;
125393
125435
  } else {
125394
- throw new BadDataException(`Email ${value} is not in valid format.`);
125436
+ throw new BadDataException(
125437
+ `Email ${refusedValue(value)} is not in valid format.`
125438
+ );
125395
125439
  }
125396
125440
  }
125441
+ isMalformed() {
125442
+ return this._isMalformed;
125443
+ }
125397
125444
  static isValid(value) {
125398
- const re = (
125399
- // eslint-disable-next-line no-control-regex
125400
- /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/i
125401
- );
125402
- const isValid2 = re.test(value);
125403
- if (!isValid2) {
125445
+ if (typeof value !== "string" || !value || value.length > MAX_EMAIL_ADDRESS_LENGTH) {
125404
125446
  return false;
125405
125447
  }
125406
- return true;
125448
+ return ONE_EMAIL_ADDRESS.test(value);
125449
+ }
125450
+ /*
125451
+ * A read-only path: builds an Email from a value already stored, holding it
125452
+ * as-is when it is not one valid mailbox, so a single legacy row cannot fail
125453
+ * the whole query that reads it. Writes stay strict - see toDatabase. A
125454
+ * stored address is always text, so anything else is refused here as it
125455
+ * always was.
125456
+ */
125457
+ static fromStoredValueLenient(value) {
125458
+ if (typeof value !== "string") {
125459
+ throw new BadDataException(
125460
+ `Email ${refusedValue(value)} is not in valid format.`
125461
+ );
125462
+ }
125463
+ const trimmed = value.trim().toLowerCase();
125464
+ if (_Email.isValid(trimmed)) {
125465
+ return new _Email(trimmed);
125466
+ }
125467
+ const email = new _Email("placeholder@oneuptime.invalid");
125468
+ email._email = trimmed;
125469
+ email._isMalformed = true;
125470
+ return email;
125407
125471
  }
125408
125472
  toJSON() {
125409
125473
  return {
@@ -125455,7 +125519,13 @@ var Email = class _Email extends DatabaseProperty {
125455
125519
  }
125456
125520
  static fromJSON(json) {
125457
125521
  if (json["_type"] === "Email" /* Email */) {
125458
- return new _Email(json["value"] || "");
125522
+ const value = json["value"];
125523
+ if (typeof value !== "string" || !value.trim()) {
125524
+ throw new BadDataException(
125525
+ `Email ${refusedValue(value ?? "")} is not in valid format.`
125526
+ );
125527
+ }
125528
+ return _Email.fromStoredValueLenient(value);
125459
125529
  }
125460
125530
  throw new BadDataException("Invalid JSON: " + JSON.stringify(json));
125461
125531
  }
@@ -125481,13 +125551,21 @@ var Email = class _Email extends DatabaseProperty {
125481
125551
  if (typeof value === "string") {
125482
125552
  value = new _Email(value);
125483
125553
  }
125554
+ if (value instanceof _Email && value.isMalformed()) {
125555
+ throw new BadDataException(
125556
+ `Email ${refusedValue(value.toString())} is not in valid format.`
125557
+ );
125558
+ }
125484
125559
  return value.toString();
125485
125560
  }
125486
125561
  return null;
125487
125562
  }
125488
125563
  static fromDatabase(_value) {
125489
- if (_value) {
125490
- return new _Email(_value);
125564
+ if (_value instanceof _Email) {
125565
+ _value = _value.toString();
125566
+ }
125567
+ if (_value && (typeof _value !== "string" || _value.trim())) {
125568
+ return _Email.fromStoredValueLenient(_value);
125491
125569
  }
125492
125570
  return null;
125493
125571
  }
@@ -125605,7 +125683,7 @@ var URL2 = class _URL extends DatabaseProperty {
125605
125683
  const value = v.trim();
125606
125684
  if (!_URL.isValidOpaqueValue(value)) {
125607
125685
  throw new BadDataException(
125608
- "Phone number " + v + " is not in valid format."
125686
+ "Phone number " + refusedValue(v) + " is not in valid format."
125609
125687
  );
125610
125688
  }
125611
125689
  this._opaqueValue = value;
@@ -125743,7 +125821,7 @@ var URL2 = class _URL extends DatabaseProperty {
125743
125821
  ].includes(scheme);
125744
125822
  if (hasAuthorityMarker || isDangerousInAnHref) {
125745
125823
  throw new BadDataException(
125746
- "URL scheme " + scheme + ": is not supported."
125824
+ "URL scheme " + refusedValue(scheme) + ": is not supported."
125747
125825
  );
125748
125826
  }
125749
125827
  }
@@ -125902,7 +125980,7 @@ var URL2 = class _URL extends DatabaseProperty {
125902
125980
  }
125903
125981
  if (value instanceof _URL && value.isMalformed()) {
125904
125982
  throw new BadDataException(
125905
- "URL " + value.toString() + " is not in valid format."
125983
+ "URL " + refusedValue(value.toString()) + " is not in valid format."
125906
125984
  );
125907
125985
  }
125908
125986
  return value.toString();
@@ -126865,7 +126943,9 @@ var Color = class _Color extends DatabaseProperty {
126865
126943
  const re = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;
126866
126944
  const result = re.exec(color.toString());
126867
126945
  if (!result) {
126868
- throw new BadDataException("Invalid color: " + color.toString());
126946
+ throw new BadDataException(
126947
+ "Invalid color: " + refusedValue(color.toString())
126948
+ );
126869
126949
  }
126870
126950
  return {
126871
126951
  red: parseInt(result[1] ? result[1] : "0", 16),
@@ -126946,7 +127026,9 @@ var Domain = class _Domain extends DatabaseProperty {
126946
127026
  set domain(v) {
126947
127027
  const isValid2 = _Domain.isValidDomain(v);
126948
127028
  if (!isValid2) {
126949
- throw new BadDataException("Domain " + v + " is not in valid format.");
127029
+ throw new BadDataException(
127030
+ "Domain " + refusedValue(v) + " is not in valid format."
127031
+ );
126950
127032
  }
126951
127033
  this._domain = v;
126952
127034
  }
@@ -127697,7 +127779,7 @@ var ObjectID = class _ObjectID extends DatabaseProperty {
127697
127779
  static validateUUID(id) {
127698
127780
  if (!_ObjectID.isValidUUID(id.toString())) {
127699
127781
  throw new BadDataException(
127700
- `Invalid ID format: "${id}". Expected a valid UUID (e.g., "550e8400-e29b-41d4-a716-446655440000").`
127782
+ `Invalid ID format: "${refusedValue(id)}". Expected a valid UUID (e.g., "550e8400-e29b-41d4-a716-446655440000").`
127701
127783
  );
127702
127784
  }
127703
127785
  }
@@ -135749,7 +135831,9 @@ var Phone = class _Phone extends DatabaseProperty {
135749
135831
  const re = /^[+]?[(]?[0-9]{3}[)]?[-\s.]?[0-9]{3}[-\s.]?[0-9]{4,7}$/;
135750
135832
  const isValid2 = re.test(v);
135751
135833
  if (!isValid2) {
135752
- throw new BadDataException(`Phone is not in valid format: ${v}`);
135834
+ throw new BadDataException(
135835
+ `Phone is not in valid format: ${refusedValue(v)}`
135836
+ );
135753
135837
  }
135754
135838
  this._phone = v;
135755
135839
  }
@@ -140725,6 +140809,7 @@ var Project = class extends TenantModel {
140725
140809
  this.isSessionReplayAllowed = void 0;
140726
140810
  this.auditLogsRetentionInDays = void 0;
140727
140811
  this.storeSystemEventsInAuditLogs = void 0;
140812
+ this.recordAndTranscribeIncidentCalls = void 0;
140728
140813
  }
140729
140814
  };
140730
140815
  __name(Project, "Project");
@@ -144466,6 +144551,39 @@ __decorateClass([
144466
144551
  create: "Enterprise" /* Enterprise */
144467
144552
  })
144468
144553
  ], Project.prototype, "storeSystemEventsInAuditLogs", 2);
144554
+ __decorateClass([
144555
+ ColumnAccessControl_default({
144556
+ create: [Permission_default.User],
144557
+ read: [
144558
+ Permission_default.ProjectOwner,
144559
+ Permission_default.ProjectAdmin,
144560
+ Permission_default.ProjectMember,
144561
+ Permission_default.Viewer,
144562
+ Permission_default.ReadProject,
144563
+ Permission_default.UnAuthorizedSsoUser,
144564
+ Permission_default.ProjectUser
144565
+ ],
144566
+ update: [
144567
+ Permission_default.ProjectOwner,
144568
+ Permission_default.ProjectAdmin,
144569
+ Permission_default.EditProject
144570
+ ]
144571
+ }),
144572
+ TableColumn_default({
144573
+ required: true,
144574
+ type: TableColumnType_default.Boolean,
144575
+ isDefaultValueColumn: true,
144576
+ defaultValue: false,
144577
+ title: "Record and Transcribe Incident Calls",
144578
+ description: "When enabled, OneUptime asks Zoom and Google Meet to record and transcribe every incident call it starts, and adds each call's transcript to its incident once the call is over. Microsoft Teams calls, Slack huddles and meeting links are not recorded; their transcripts can be added by hand. Off by default."
144579
+ }),
144580
+ Column({
144581
+ type: ColumnType_default.Boolean,
144582
+ nullable: false,
144583
+ unique: false,
144584
+ default: false
144585
+ })
144586
+ ], Project.prototype, "recordAndTranscribeIncidentCalls", 2);
144469
144587
  Project = __decorateClass([
144470
144588
  EnableDocumentation_default({
144471
144589
  isMasterAdminApiDocs: true
@@ -233842,6 +233960,7 @@ var Incident = class extends DatabaseBaseModel {
233842
233960
  this.createdByProbeId = void 0;
233843
233961
  this.isCreatedAutomatically = void 0;
233844
233962
  this.holdsMonitors = void 0;
233963
+ this.postmortemDraftWaitingSince = void 0;
233845
233964
  this.remediationNotes = void 0;
233846
233965
  this.telemetryQuery = void 0;
233847
233966
  this.incidentNumber = void 0;
@@ -236482,6 +236601,35 @@ __decorateClass([
236482
236601
  nullable: true
236483
236602
  })
236484
236603
  ], Incident.prototype, "holdsMonitors", 2);
236604
+ __decorateClass([
236605
+ ColumnAccessControl_default({
236606
+ create: [],
236607
+ read: [
236608
+ Permission_default.ProjectOwner,
236609
+ Permission_default.ProjectAdmin,
236610
+ Permission_default.ProjectMember,
236611
+ Permission_default.Viewer,
236612
+ Permission_default.IncidentAdmin,
236613
+ Permission_default.IncidentMember,
236614
+ Permission_default.IncidentViewer,
236615
+ Permission_default.ReadProjectIncident
236616
+ ],
236617
+ update: []
236618
+ }),
236619
+ Index(),
236620
+ TableColumn_default({
236621
+ isDefaultValueColumn: false,
236622
+ required: false,
236623
+ computed: true,
236624
+ type: TableColumnType_default.Date,
236625
+ title: "Postmortem Draft Waiting Since",
236626
+ description: "When the automatic postmortem draft started waiting for the transcript of the incident's call, so that the draft reads what was said on it: set when the incident resolves while a call's transcript is still on its way, and cleared once the draft is written. Empty the rest of the time. Set by OneUptime; it cannot be written."
236627
+ }),
236628
+ Column({
236629
+ type: ColumnType_default.Date,
236630
+ nullable: true
236631
+ })
236632
+ ], Incident.prototype, "postmortemDraftWaitingSince", 2);
236485
236633
  __decorateClass([
236486
236634
  ColumnAccessControl_default({
236487
236635
  create: [
@@ -344951,6 +345099,10 @@ var StatusPageSCIM = class extends DatabaseBaseModel {
344951
345099
  this.name = void 0;
344952
345100
  this.description = void 0;
344953
345101
  this.bearerToken = void 0;
345102
+ this.oauthClientSecretHash = void 0;
345103
+ this.oauthClientSecretExpiresAt = void 0;
345104
+ this.oauthPreviousClientSecretHash = void 0;
345105
+ this.oauthPreviousClientSecretExpiresAt = void 0;
344954
345106
  this.autoProvisionUsers = void 0;
344955
345107
  this.autoDeprovisionUsers = void 0;
344956
345108
  this.createdByUser = void 0;
@@ -345187,6 +345339,118 @@ __decorateClass([
345187
345339
  length: ColumnLength_default.LongText
345188
345340
  })
345189
345341
  ], StatusPageSCIM.prototype, "bearerToken", 2);
345342
+ __decorateClass([
345343
+ ColumnAccessControl_default({
345344
+ create: [
345345
+ Permission_default.ProjectOwner,
345346
+ Permission_default.ProjectAdmin,
345347
+ Permission_default.CreateStatusPageSSO
345348
+ ],
345349
+ read: [],
345350
+ update: [
345351
+ Permission_default.ProjectOwner,
345352
+ Permission_default.ProjectAdmin,
345353
+ Permission_default.EditStatusPageSSO
345354
+ ]
345355
+ }),
345356
+ TableColumn_default({
345357
+ required: false,
345358
+ hideColumnInDocumentation: true,
345359
+ type: TableColumnType_default.LongText,
345360
+ title: "OAuth Client Secret Hash",
345361
+ description: "SHA-256 hash of the connection's OAuth 2.0 client secret. The secret itself is shown once, when it is made, and never kept."
345362
+ }),
345363
+ Column({
345364
+ nullable: true,
345365
+ type: ColumnType_default.LongText,
345366
+ length: ColumnLength_default.LongText
345367
+ })
345368
+ ], StatusPageSCIM.prototype, "oauthClientSecretHash", 2);
345369
+ __decorateClass([
345370
+ ColumnAccessControl_default({
345371
+ create: [
345372
+ Permission_default.ProjectOwner,
345373
+ Permission_default.ProjectAdmin,
345374
+ Permission_default.CreateStatusPageSSO
345375
+ ],
345376
+ read: [
345377
+ Permission_default.ProjectOwner,
345378
+ Permission_default.ProjectAdmin,
345379
+ Permission_default.ReadStatusPageSSO
345380
+ ],
345381
+ update: [
345382
+ Permission_default.ProjectOwner,
345383
+ Permission_default.ProjectAdmin,
345384
+ Permission_default.EditStatusPageSSO
345385
+ ]
345386
+ }),
345387
+ TableColumn_default({
345388
+ required: false,
345389
+ type: TableColumnType_default.Date,
345390
+ title: "OAuth Client Secret Expires At",
345391
+ description: "When the connection's OAuth 2.0 client secret stops working. No access token is issued with an expired secret."
345392
+ }),
345393
+ Column({
345394
+ nullable: true,
345395
+ type: ColumnType_default.Date
345396
+ })
345397
+ ], StatusPageSCIM.prototype, "oauthClientSecretExpiresAt", 2);
345398
+ __decorateClass([
345399
+ ColumnAccessControl_default({
345400
+ create: [
345401
+ Permission_default.ProjectOwner,
345402
+ Permission_default.ProjectAdmin,
345403
+ Permission_default.CreateStatusPageSSO
345404
+ ],
345405
+ read: [],
345406
+ update: [
345407
+ Permission_default.ProjectOwner,
345408
+ Permission_default.ProjectAdmin,
345409
+ Permission_default.EditStatusPageSSO
345410
+ ]
345411
+ }),
345412
+ TableColumn_default({
345413
+ required: false,
345414
+ hideColumnInDocumentation: true,
345415
+ type: TableColumnType_default.LongText,
345416
+ title: "Previous OAuth Client Secret Hash",
345417
+ description: "SHA-256 hash of the client secret the current one replaced, which keeps working until it expires or is deleted."
345418
+ }),
345419
+ Column({
345420
+ nullable: true,
345421
+ type: ColumnType_default.LongText,
345422
+ length: ColumnLength_default.LongText
345423
+ })
345424
+ ], StatusPageSCIM.prototype, "oauthPreviousClientSecretHash", 2);
345425
+ __decorateClass([
345426
+ ColumnAccessControl_default({
345427
+ create: [
345428
+ Permission_default.ProjectOwner,
345429
+ Permission_default.ProjectAdmin,
345430
+ Permission_default.CreateStatusPageSSO
345431
+ ],
345432
+ read: [
345433
+ Permission_default.ProjectOwner,
345434
+ Permission_default.ProjectAdmin,
345435
+ Permission_default.ReadStatusPageSSO
345436
+ ],
345437
+ update: [
345438
+ Permission_default.ProjectOwner,
345439
+ Permission_default.ProjectAdmin,
345440
+ Permission_default.EditStatusPageSSO
345441
+ ]
345442
+ }),
345443
+ TableColumn_default({
345444
+ required: false,
345445
+ type: TableColumnType_default.Date,
345446
+ title: "Previous OAuth Client Secret Expires At",
345447
+ description: "When the previous OAuth 2.0 client secret stops working, unless it is deleted before."
345448
+ }),
345449
+ Column({
345450
+ nullable: true,
345451
+ type: ColumnType_default.Date
345452
+ })
345453
+ ], StatusPageSCIM.prototype, "oauthPreviousClientSecretExpiresAt", 2);
345190
345454
  __decorateClass([
345191
345455
  ColumnAccessControl_default({
345192
345456
  create: [
@@ -353825,6 +354089,200 @@ UserProjectSsoConsent = __decorateClass([
353825
354089
  })
353826
354090
  ], UserProjectSsoConsent);
353827
354091
 
354092
+ // ../Common/Models/DatabaseModels/UserProjectSsoIdentity.ts
354093
+ var UserProjectSsoIdentity = class extends DatabaseBaseModel {
354094
+ constructor() {
354095
+ super(...arguments);
354096
+ this.user = void 0;
354097
+ this.userId = void 0;
354098
+ this.project = void 0;
354099
+ this.projectId = void 0;
354100
+ this.projectSso = void 0;
354101
+ this.projectSsoId = void 0;
354102
+ this.objectId = void 0;
354103
+ }
354104
+ };
354105
+ __name(UserProjectSsoIdentity, "UserProjectSsoIdentity");
354106
+ __decorateClass([
354107
+ ColumnAccessControl_default({
354108
+ create: [],
354109
+ read: [],
354110
+ update: []
354111
+ }),
354112
+ TableColumn_default({
354113
+ manyToOneRelationColumn: "userId",
354114
+ type: TableColumnType_default.Entity,
354115
+ modelType: User_default,
354116
+ title: "User",
354117
+ description: "The account that is bound."
354118
+ }),
354119
+ ManyToOne(
354120
+ () => {
354121
+ return User_default;
354122
+ },
354123
+ {
354124
+ eager: false,
354125
+ nullable: false,
354126
+ onDelete: "CASCADE",
354127
+ orphanedRowAction: "nullify"
354128
+ }
354129
+ ),
354130
+ JoinColumn({ name: "userId" })
354131
+ ], UserProjectSsoIdentity.prototype, "user", 2);
354132
+ __decorateClass([
354133
+ ColumnAccessControl_default({
354134
+ create: [],
354135
+ read: [],
354136
+ update: []
354137
+ }),
354138
+ Index(),
354139
+ TableColumn_default({
354140
+ type: TableColumnType_default.ObjectID,
354141
+ required: true,
354142
+ title: "User ID",
354143
+ description: "ID of the account that is bound."
354144
+ }),
354145
+ Column({
354146
+ type: ColumnType_default.ObjectID,
354147
+ nullable: false,
354148
+ transformer: ObjectID.getDatabaseTransformer()
354149
+ })
354150
+ ], UserProjectSsoIdentity.prototype, "userId", 2);
354151
+ __decorateClass([
354152
+ ColumnAccessControl_default({
354153
+ create: [],
354154
+ read: [],
354155
+ update: []
354156
+ }),
354157
+ TableColumn_default({
354158
+ manyToOneRelationColumn: "projectId",
354159
+ type: TableColumnType_default.Entity,
354160
+ modelType: Project,
354161
+ title: "Project",
354162
+ description: "The project whose SAML provider the account signs in through."
354163
+ }),
354164
+ ManyToOne(
354165
+ () => {
354166
+ return Project;
354167
+ },
354168
+ {
354169
+ eager: false,
354170
+ nullable: false,
354171
+ onDelete: "CASCADE",
354172
+ orphanedRowAction: "nullify"
354173
+ }
354174
+ ),
354175
+ JoinColumn({ name: "projectId" })
354176
+ ], UserProjectSsoIdentity.prototype, "project", 2);
354177
+ __decorateClass([
354178
+ ColumnAccessControl_default({
354179
+ create: [],
354180
+ read: [],
354181
+ update: []
354182
+ }),
354183
+ Index(),
354184
+ TableColumn_default({
354185
+ type: TableColumnType_default.ObjectID,
354186
+ required: true,
354187
+ title: "Project ID",
354188
+ description: "ID of the project whose SAML provider the account signs in through."
354189
+ }),
354190
+ Column({
354191
+ type: ColumnType_default.ObjectID,
354192
+ nullable: false,
354193
+ transformer: ObjectID.getDatabaseTransformer()
354194
+ })
354195
+ ], UserProjectSsoIdentity.prototype, "projectId", 2);
354196
+ __decorateClass([
354197
+ ColumnAccessControl_default({
354198
+ create: [],
354199
+ read: [],
354200
+ update: []
354201
+ }),
354202
+ TableColumn_default({
354203
+ manyToOneRelationColumn: "projectSsoId",
354204
+ type: TableColumnType_default.Entity,
354205
+ modelType: ProjectSSO,
354206
+ title: "Project SSO",
354207
+ description: "The SAML provider the binding holds for."
354208
+ }),
354209
+ ManyToOne(
354210
+ () => {
354211
+ return ProjectSSO;
354212
+ },
354213
+ {
354214
+ eager: false,
354215
+ nullable: false,
354216
+ onDelete: "CASCADE",
354217
+ orphanedRowAction: "nullify"
354218
+ }
354219
+ ),
354220
+ JoinColumn({ name: "projectSsoId" })
354221
+ ], UserProjectSsoIdentity.prototype, "projectSso", 2);
354222
+ __decorateClass([
354223
+ ColumnAccessControl_default({
354224
+ create: [],
354225
+ read: [],
354226
+ update: []
354227
+ }),
354228
+ Index(),
354229
+ TableColumn_default({
354230
+ type: TableColumnType_default.ObjectID,
354231
+ required: true,
354232
+ title: "Project SSO ID",
354233
+ description: "ID of the SAML provider the binding holds for."
354234
+ }),
354235
+ Column({
354236
+ type: ColumnType_default.ObjectID,
354237
+ nullable: false,
354238
+ transformer: ObjectID.getDatabaseTransformer()
354239
+ })
354240
+ ], UserProjectSsoIdentity.prototype, "projectSsoId", 2);
354241
+ __decorateClass([
354242
+ ColumnAccessControl_default({
354243
+ create: [],
354244
+ read: [],
354245
+ update: []
354246
+ }),
354247
+ TableColumn_default({
354248
+ type: TableColumnType_default.ShortText,
354249
+ required: true,
354250
+ title: "Object ID",
354251
+ description: "The identity provider's immutable ID for the person: Microsoft Entra ID's object ID, a GUID kept in lower case."
354252
+ }),
354253
+ Column({
354254
+ type: ColumnType_default.ShortText,
354255
+ length: ColumnLength_default.ShortText,
354256
+ nullable: false
354257
+ })
354258
+ ], UserProjectSsoIdentity.prototype, "objectId", 2);
354259
+ UserProjectSsoIdentity = __decorateClass([
354260
+ TableAccessControl_default({
354261
+ create: [],
354262
+ read: [],
354263
+ delete: [],
354264
+ update: []
354265
+ }),
354266
+ Index(
354267
+ "IDX_UserProjectSsoIdentity_projectSsoId_userId",
354268
+ ["projectSsoId", "userId"],
354269
+ {
354270
+ unique: true,
354271
+ where: '"deletedAt" IS NULL'
354272
+ }
354273
+ ),
354274
+ TableMetadata_default({
354275
+ tableName: "UserProjectSsoIdentity",
354276
+ singularName: "Project SSO Identity",
354277
+ pluralName: "Project SSO Identities",
354278
+ icon: IconProp_default.Lock,
354279
+ tableDescription: "Binds an account to the identity provider's immutable ID for the person it signed in as through a project's SAML provider."
354280
+ }),
354281
+ Entity({
354282
+ name: "UserProjectSsoIdentity"
354283
+ })
354284
+ ], UserProjectSsoIdentity);
354285
+
353828
354286
  // ../Common/Models/DatabaseModels/UserNotificationSetting.ts
353829
354287
  var UserNotificationSetting = class extends DatabaseBaseModel {
353830
354288
  constructor() {
@@ -436512,6 +436970,10 @@ var IncidentVideoCall = class extends DatabaseBaseModel {
436512
436970
  this.rootCauseSuggestionReviewedAt = void 0;
436513
436971
  this.rootCauseSuggestionReviewedByUser = void 0;
436514
436972
  this.rootCauseSuggestionReviewedByUserId = void 0;
436973
+ this.transcriptFetchStatus = void 0;
436974
+ this.transcriptFetchReason = void 0;
436975
+ this.transcriptFetchCheckedAt = void 0;
436976
+ this.transcriptFetchNextAttemptAt = void 0;
436515
436977
  this.createdByUser = void 0;
436516
436978
  this.createdByUserId = void 0;
436517
436979
  this.deletedByUser = void 0;
@@ -437070,6 +437532,83 @@ __decorateClass([
437070
437532
  transformer: ObjectID.getDatabaseTransformer()
437071
437533
  })
437072
437534
  ], IncidentVideoCall.prototype, "rootCauseSuggestionReviewedByUserId", 2);
437535
+ __decorateClass([
437536
+ ColumnAccessControl_default({
437537
+ create: [],
437538
+ read: readPermissions16,
437539
+ update: []
437540
+ }),
437541
+ TableColumn_default({
437542
+ required: false,
437543
+ type: TableColumnType_default.ShortText,
437544
+ computed: true,
437545
+ title: "Transcript Fetch Status",
437546
+ description: "Whether OneUptime gets the call's transcript from Zoom or Google Meet by itself, as it does for the calls it starts while Record and transcribe incident calls is on: Waiting while it asks the provider (again at Transcript Fetch Next Attempt At), Stopped once it no longer asks (Transcript Fetch Reason says why). Empty for a call it does not ask about, and once it has the transcript.",
437547
+ example: "Waiting"
437548
+ }),
437549
+ Column({
437550
+ nullable: true,
437551
+ type: ColumnType_default.ShortText,
437552
+ length: ColumnLength_default.ShortText
437553
+ })
437554
+ ], IncidentVideoCall.prototype, "transcriptFetchStatus", 2);
437555
+ __decorateClass([
437556
+ ColumnAccessControl_default({
437557
+ create: [],
437558
+ read: readPermissions16,
437559
+ update: []
437560
+ }),
437561
+ TableColumn_default({
437562
+ required: false,
437563
+ type: TableColumnType_default.ShortText,
437564
+ computed: true,
437565
+ title: "Transcript Fetch Reason",
437566
+ description: "Why the provider had no transcript to give when OneUptime last asked: NotReady (still preparing it), NotTranscribed (nothing recorded or transcribed yet), NoMeeting, Expired, PermissionMissing, ConnectionProblem or NotSupported. Empty when the provider did not answer.",
437567
+ example: "NotReady"
437568
+ }),
437569
+ Column({
437570
+ nullable: true,
437571
+ type: ColumnType_default.ShortText,
437572
+ length: ColumnLength_default.ShortText
437573
+ })
437574
+ ], IncidentVideoCall.prototype, "transcriptFetchReason", 2);
437575
+ __decorateClass([
437576
+ ColumnAccessControl_default({
437577
+ create: [],
437578
+ read: readPermissions16,
437579
+ update: []
437580
+ }),
437581
+ TableColumn_default({
437582
+ required: false,
437583
+ type: TableColumnType_default.Date,
437584
+ computed: true,
437585
+ title: "Transcript Fetch Checked At",
437586
+ description: "When OneUptime last asked the provider for the call's transcript."
437587
+ }),
437588
+ Column({
437589
+ type: ColumnType_default.Date,
437590
+ nullable: true
437591
+ })
437592
+ ], IncidentVideoCall.prototype, "transcriptFetchCheckedAt", 2);
437593
+ __decorateClass([
437594
+ ColumnAccessControl_default({
437595
+ create: [],
437596
+ read: readPermissions16,
437597
+ update: []
437598
+ }),
437599
+ Index(),
437600
+ TableColumn_default({
437601
+ required: false,
437602
+ type: TableColumnType_default.Date,
437603
+ computed: true,
437604
+ title: "Transcript Fetch Next Attempt At",
437605
+ description: "When OneUptime next asks the provider for the call's transcript, while the Transcript Fetch Status is Waiting."
437606
+ }),
437607
+ Column({
437608
+ type: ColumnType_default.Date,
437609
+ nullable: true
437610
+ })
437611
+ ], IncidentVideoCall.prototype, "transcriptFetchNextAttemptAt", 2);
437073
437612
  __decorateClass([
437074
437613
  ColumnAccessControl_default({
437075
437614
  create: createPermissions10,
@@ -447487,6 +448026,10 @@ var ProjectSCIM = class extends DatabaseBaseModel {
447487
448026
  this.name = void 0;
447488
448027
  this.description = void 0;
447489
448028
  this.bearerToken = void 0;
448029
+ this.oauthClientSecretHash = void 0;
448030
+ this.oauthClientSecretExpiresAt = void 0;
448031
+ this.oauthPreviousClientSecretHash = void 0;
448032
+ this.oauthPreviousClientSecretExpiresAt = void 0;
447490
448033
  this.teams = void 0;
447491
448034
  this.autoProvisionUsers = void 0;
447492
448035
  this.autoDeprovisionUsers = void 0;
@@ -447636,6 +448179,78 @@ __decorateClass([
447636
448179
  length: ColumnLength_default.LongText
447637
448180
  })
447638
448181
  ], ProjectSCIM.prototype, "bearerToken", 2);
448182
+ __decorateClass([
448183
+ ColumnAccessControl_default({
448184
+ create: [Permission_default.ProjectOwner],
448185
+ read: [],
448186
+ update: [Permission_default.ProjectOwner]
448187
+ }),
448188
+ TableColumn_default({
448189
+ required: false,
448190
+ hideColumnInDocumentation: true,
448191
+ type: TableColumnType_default.LongText,
448192
+ title: "OAuth Client Secret Hash",
448193
+ description: "SHA-256 hash of the connection's OAuth 2.0 client secret. The secret itself is shown once, when it is made, and never kept."
448194
+ }),
448195
+ Column({
448196
+ nullable: true,
448197
+ type: ColumnType_default.LongText,
448198
+ length: ColumnLength_default.LongText
448199
+ })
448200
+ ], ProjectSCIM.prototype, "oauthClientSecretHash", 2);
448201
+ __decorateClass([
448202
+ ColumnAccessControl_default({
448203
+ create: [Permission_default.ProjectOwner],
448204
+ read: [Permission_default.ProjectOwner],
448205
+ update: [Permission_default.ProjectOwner]
448206
+ }),
448207
+ TableColumn_default({
448208
+ required: false,
448209
+ type: TableColumnType_default.Date,
448210
+ title: "OAuth Client Secret Expires At",
448211
+ description: "When the connection's OAuth 2.0 client secret stops working. No access token is issued with an expired secret."
448212
+ }),
448213
+ Column({
448214
+ nullable: true,
448215
+ type: ColumnType_default.Date
448216
+ })
448217
+ ], ProjectSCIM.prototype, "oauthClientSecretExpiresAt", 2);
448218
+ __decorateClass([
448219
+ ColumnAccessControl_default({
448220
+ create: [Permission_default.ProjectOwner],
448221
+ read: [],
448222
+ update: [Permission_default.ProjectOwner]
448223
+ }),
448224
+ TableColumn_default({
448225
+ required: false,
448226
+ hideColumnInDocumentation: true,
448227
+ type: TableColumnType_default.LongText,
448228
+ title: "Previous OAuth Client Secret Hash",
448229
+ description: "SHA-256 hash of the client secret the current one replaced, which keeps working until it expires or is deleted."
448230
+ }),
448231
+ Column({
448232
+ nullable: true,
448233
+ type: ColumnType_default.LongText,
448234
+ length: ColumnLength_default.LongText
448235
+ })
448236
+ ], ProjectSCIM.prototype, "oauthPreviousClientSecretHash", 2);
448237
+ __decorateClass([
448238
+ ColumnAccessControl_default({
448239
+ create: [Permission_default.ProjectOwner],
448240
+ read: [Permission_default.ProjectOwner],
448241
+ update: [Permission_default.ProjectOwner]
448242
+ }),
448243
+ TableColumn_default({
448244
+ required: false,
448245
+ type: TableColumnType_default.Date,
448246
+ title: "Previous OAuth Client Secret Expires At",
448247
+ description: "When the previous OAuth 2.0 client secret stops working, unless it is deleted before."
448248
+ }),
448249
+ Column({
448250
+ nullable: true,
448251
+ type: ColumnType_default.Date
448252
+ })
448253
+ ], ProjectSCIM.prototype, "oauthPreviousClientSecretExpiresAt", 2);
447639
448254
  __decorateClass([
447640
448255
  ColumnAccessControl_default({
447641
448256
  create: [Permission_default.ProjectOwner],
@@ -448364,6 +448979,256 @@ ProjectSCIMLog = __decorateClass([
448364
448979
  })
448365
448980
  ], ProjectSCIMLog);
448366
448981
 
448982
+ // ../Common/Models/DatabaseModels/ProjectSCIMUser.ts
448983
+ var ProjectSCIMUser = class extends DatabaseBaseModel {
448984
+ constructor() {
448985
+ super(...arguments);
448986
+ this.project = void 0;
448987
+ this.projectId = void 0;
448988
+ this.projectScim = void 0;
448989
+ this.projectScimId = void 0;
448990
+ this.user = void 0;
448991
+ this.userId = void 0;
448992
+ this.isActive = void 0;
448993
+ this.userName = void 0;
448994
+ this.externalId = void 0;
448995
+ this.scimAttributes = void 0;
448996
+ }
448997
+ };
448998
+ __name(ProjectSCIMUser, "ProjectSCIMUser");
448999
+ __decorateClass([
449000
+ ColumnAccessControl_default({
449001
+ create: [],
449002
+ read: [],
449003
+ update: []
449004
+ }),
449005
+ TableColumn_default({
449006
+ manyToOneRelationColumn: "projectId",
449007
+ type: TableColumnType_default.Entity,
449008
+ modelType: Project,
449009
+ title: "Project",
449010
+ description: "The project the connection belongs to."
449011
+ }),
449012
+ ManyToOne(
449013
+ () => {
449014
+ return Project;
449015
+ },
449016
+ {
449017
+ eager: false,
449018
+ nullable: false,
449019
+ onDelete: "CASCADE",
449020
+ orphanedRowAction: "nullify"
449021
+ }
449022
+ ),
449023
+ JoinColumn({ name: "projectId" })
449024
+ ], ProjectSCIMUser.prototype, "project", 2);
449025
+ __decorateClass([
449026
+ ColumnAccessControl_default({
449027
+ create: [],
449028
+ read: [],
449029
+ update: []
449030
+ }),
449031
+ Index(),
449032
+ TableColumn_default({
449033
+ type: TableColumnType_default.ObjectID,
449034
+ required: true,
449035
+ title: "Project ID",
449036
+ description: "ID of the project the connection belongs to."
449037
+ }),
449038
+ Column({
449039
+ type: ColumnType_default.ObjectID,
449040
+ nullable: false,
449041
+ transformer: ObjectID.getDatabaseTransformer()
449042
+ })
449043
+ ], ProjectSCIMUser.prototype, "projectId", 2);
449044
+ __decorateClass([
449045
+ ColumnAccessControl_default({
449046
+ create: [],
449047
+ read: [],
449048
+ update: []
449049
+ }),
449050
+ TableColumn_default({
449051
+ manyToOneRelationColumn: "projectScimId",
449052
+ type: TableColumnType_default.Entity,
449053
+ modelType: ProjectSCIM,
449054
+ title: "SCIM Connection",
449055
+ description: "The connection that provisioned the user."
449056
+ }),
449057
+ ManyToOne(
449058
+ () => {
449059
+ return ProjectSCIM;
449060
+ },
449061
+ {
449062
+ eager: false,
449063
+ nullable: false,
449064
+ onDelete: "CASCADE",
449065
+ orphanedRowAction: "nullify"
449066
+ }
449067
+ ),
449068
+ JoinColumn({ name: "projectScimId" })
449069
+ ], ProjectSCIMUser.prototype, "projectScim", 2);
449070
+ __decorateClass([
449071
+ ColumnAccessControl_default({
449072
+ create: [],
449073
+ read: [],
449074
+ update: []
449075
+ }),
449076
+ Index(),
449077
+ TableColumn_default({
449078
+ type: TableColumnType_default.ObjectID,
449079
+ required: true,
449080
+ title: "SCIM Connection ID",
449081
+ description: "ID of the connection that provisioned the user."
449082
+ }),
449083
+ Column({
449084
+ type: ColumnType_default.ObjectID,
449085
+ nullable: false,
449086
+ transformer: ObjectID.getDatabaseTransformer()
449087
+ })
449088
+ ], ProjectSCIMUser.prototype, "projectScimId", 2);
449089
+ __decorateClass([
449090
+ ColumnAccessControl_default({
449091
+ create: [],
449092
+ read: [],
449093
+ update: []
449094
+ }),
449095
+ TableColumn_default({
449096
+ manyToOneRelationColumn: "userId",
449097
+ type: TableColumnType_default.Entity,
449098
+ modelType: User_default,
449099
+ title: "User",
449100
+ description: "The OneUptime account the SCIM user is."
449101
+ }),
449102
+ ManyToOne(
449103
+ () => {
449104
+ return User_default;
449105
+ },
449106
+ {
449107
+ eager: false,
449108
+ nullable: false,
449109
+ onDelete: "CASCADE",
449110
+ orphanedRowAction: "nullify"
449111
+ }
449112
+ ),
449113
+ JoinColumn({ name: "userId" })
449114
+ ], ProjectSCIMUser.prototype, "user", 2);
449115
+ __decorateClass([
449116
+ ColumnAccessControl_default({
449117
+ create: [],
449118
+ read: [],
449119
+ update: []
449120
+ }),
449121
+ Index(),
449122
+ TableColumn_default({
449123
+ type: TableColumnType_default.ObjectID,
449124
+ required: true,
449125
+ title: "User ID",
449126
+ description: "ID of the OneUptime account the SCIM user is."
449127
+ }),
449128
+ Column({
449129
+ type: ColumnType_default.ObjectID,
449130
+ nullable: false,
449131
+ transformer: ObjectID.getDatabaseTransformer()
449132
+ })
449133
+ ], ProjectSCIMUser.prototype, "userId", 2);
449134
+ __decorateClass([
449135
+ ColumnAccessControl_default({
449136
+ create: [],
449137
+ read: [],
449138
+ update: []
449139
+ }),
449140
+ TableColumn_default({
449141
+ type: TableColumnType_default.Boolean,
449142
+ required: true,
449143
+ title: "Active",
449144
+ description: "Whether the identity provider has the user active (SCIM's active attribute)."
449145
+ }),
449146
+ Column({
449147
+ type: ColumnType_default.Boolean,
449148
+ nullable: false,
449149
+ default: true
449150
+ })
449151
+ ], ProjectSCIMUser.prototype, "isActive", 2);
449152
+ __decorateClass([
449153
+ ColumnAccessControl_default({
449154
+ create: [],
449155
+ read: [],
449156
+ update: []
449157
+ }),
449158
+ TableColumn_default({
449159
+ type: TableColumnType_default.LongText,
449160
+ required: false,
449161
+ title: "User Name",
449162
+ description: "The userName the identity provider sent, as it sent it. Usually the account's email address."
449163
+ }),
449164
+ Column({
449165
+ type: ColumnType_default.LongText,
449166
+ length: ColumnLength_default.LongText,
449167
+ nullable: true
449168
+ })
449169
+ ], ProjectSCIMUser.prototype, "userName", 2);
449170
+ __decorateClass([
449171
+ ColumnAccessControl_default({
449172
+ create: [],
449173
+ read: [],
449174
+ update: []
449175
+ }),
449176
+ TableColumn_default({
449177
+ type: TableColumnType_default.LongText,
449178
+ required: false,
449179
+ title: "External ID",
449180
+ description: "The identity provider's own id for the user (SCIM's externalId), as it sent it."
449181
+ }),
449182
+ Column({
449183
+ type: ColumnType_default.LongText,
449184
+ length: ColumnLength_default.LongText,
449185
+ nullable: true
449186
+ })
449187
+ ], ProjectSCIMUser.prototype, "externalId", 2);
449188
+ __decorateClass([
449189
+ ColumnAccessControl_default({
449190
+ create: [],
449191
+ read: [],
449192
+ update: []
449193
+ }),
449194
+ TableColumn_default({
449195
+ type: TableColumnType_default.JSON,
449196
+ required: false,
449197
+ title: "SCIM Attributes",
449198
+ description: "The rest of what the identity provider last sent for the user: displayName, name and emails."
449199
+ }),
449200
+ Column({
449201
+ type: ColumnType_default.JSON,
449202
+ nullable: true
449203
+ })
449204
+ ], ProjectSCIMUser.prototype, "scimAttributes", 2);
449205
+ ProjectSCIMUser = __decorateClass([
449206
+ TableAccessControl_default({
449207
+ create: [],
449208
+ read: [],
449209
+ delete: [],
449210
+ update: []
449211
+ }),
449212
+ Index(
449213
+ "IDX_ProjectSCIMUser_projectScimId_userId",
449214
+ ["projectScimId", "userId"],
449215
+ {
449216
+ unique: true,
449217
+ where: '"deletedAt" IS NULL'
449218
+ }
449219
+ ),
449220
+ TableMetadata_default({
449221
+ tableName: "ProjectSCIMUser",
449222
+ singularName: "SCIM User",
449223
+ pluralName: "SCIM Users",
449224
+ icon: IconProp_default.User,
449225
+ tableDescription: "A user a project's SCIM connection provisioned: whether the identity provider has them active, and what it sent for them."
449226
+ }),
449227
+ Entity({
449228
+ name: "ProjectSCIMUser"
449229
+ })
449230
+ ], ProjectSCIMUser);
449231
+
448367
449232
  // ../Common/Models/DatabaseModels/StatusPageSCIMLog.ts
448368
449233
  var StatusPageSCIMLog = class extends DatabaseBaseModel {
448369
449234
  constructor() {
@@ -450322,6 +451187,479 @@ MarketplaceCharge = __decorateClass([
450322
451187
  })
450323
451188
  ], MarketplaceCharge);
450324
451189
 
451190
+ // ../Common/Models/DatabaseModels/VercelMarketplaceInstallation.ts
451191
+ var VercelMarketplaceInstallation = class extends DatabaseBaseModel {
451192
+ constructor() {
451193
+ super(...arguments);
451194
+ this.installationId = void 0;
451195
+ this.vercelAccountId = void 0;
451196
+ this.accessToken = void 0;
451197
+ this.tokenType = void 0;
451198
+ this.scopes = void 0;
451199
+ this.acceptedPolicies = void 0;
451200
+ this.accountName = void 0;
451201
+ this.accountUrl = void 0;
451202
+ this.contactEmail = void 0;
451203
+ this.contactName = void 0;
451204
+ this.status = void 0;
451205
+ this.deleteRequestedAt = void 0;
451206
+ this.invoicedUntil = void 0;
451207
+ this.billingDataSentAt = void 0;
451208
+ this.lastBillingError = void 0;
451209
+ }
451210
+ };
451211
+ __name(VercelMarketplaceInstallation, "VercelMarketplaceInstallation");
451212
+ __decorateClass([
451213
+ ColumnAccessControl_default({
451214
+ create: [],
451215
+ read: [],
451216
+ update: []
451217
+ }),
451218
+ Index({ unique: true }),
451219
+ TableColumn_default({
451220
+ required: true,
451221
+ type: TableColumnType_default.ShortText,
451222
+ title: "Installation ID",
451223
+ description: "Vercel's ID of the installation (icfg_...). A reinstall gets a new one.",
451224
+ example: "icfg_7BsYazjxsiKpsDTXiAUcOJmP"
451225
+ }),
451226
+ Column({
451227
+ nullable: false,
451228
+ type: ColumnType_default.ShortText,
451229
+ length: ColumnLength_default.ShortText
451230
+ })
451231
+ ], VercelMarketplaceInstallation.prototype, "installationId", 2);
451232
+ __decorateClass([
451233
+ ColumnAccessControl_default({
451234
+ create: [],
451235
+ read: [],
451236
+ update: []
451237
+ }),
451238
+ Index(),
451239
+ TableColumn_default({
451240
+ required: false,
451241
+ type: TableColumnType_default.ShortText,
451242
+ title: "Vercel Account ID",
451243
+ description: "The Vercel team (account) that installed OneUptime.",
451244
+ example: "team_LLHUOMOoDlqOp8wPE4kFo9pE"
451245
+ }),
451246
+ Column({
451247
+ nullable: true,
451248
+ type: ColumnType_default.ShortText,
451249
+ length: ColumnLength_default.ShortText
451250
+ })
451251
+ ], VercelMarketplaceInstallation.prototype, "vercelAccountId", 2);
451252
+ __decorateClass([
451253
+ ColumnAccessControl_default({
451254
+ create: [],
451255
+ read: [],
451256
+ update: []
451257
+ }),
451258
+ TableColumn_default({
451259
+ required: false,
451260
+ type: TableColumnType_default.VeryLongText,
451261
+ encrypted: true,
451262
+ title: "Access Token",
451263
+ description: "The token Vercel gave OneUptime for this installation, which calls Vercel's marketplace API. Encrypted at rest and never returned by the API.",
451264
+ hideColumnInDocumentation: true
451265
+ }),
451266
+ Column({
451267
+ nullable: true,
451268
+ type: ColumnType_default.VeryLongText
451269
+ })
451270
+ ], VercelMarketplaceInstallation.prototype, "accessToken", 2);
451271
+ __decorateClass([
451272
+ ColumnAccessControl_default({
451273
+ create: [],
451274
+ read: [],
451275
+ update: []
451276
+ }),
451277
+ TableColumn_default({
451278
+ required: false,
451279
+ type: TableColumnType_default.ShortText,
451280
+ title: "Token Type",
451281
+ description: "The access token's type, as Vercel gave it (Bearer).",
451282
+ example: "Bearer"
451283
+ }),
451284
+ Column({
451285
+ nullable: true,
451286
+ type: ColumnType_default.ShortText,
451287
+ length: ColumnLength_default.ShortText
451288
+ })
451289
+ ], VercelMarketplaceInstallation.prototype, "tokenType", 2);
451290
+ __decorateClass([
451291
+ ColumnAccessControl_default({
451292
+ create: [],
451293
+ read: [],
451294
+ update: []
451295
+ }),
451296
+ TableColumn_default({
451297
+ required: false,
451298
+ type: TableColumnType_default.JSON,
451299
+ title: "Scopes",
451300
+ description: "The Vercel API scopes the team granted the integration, such as read:project."
451301
+ }),
451302
+ Column({
451303
+ nullable: true,
451304
+ type: ColumnType_default.JSON
451305
+ })
451306
+ ], VercelMarketplaceInstallation.prototype, "scopes", 2);
451307
+ __decorateClass([
451308
+ ColumnAccessControl_default({
451309
+ create: [],
451310
+ read: [],
451311
+ update: []
451312
+ }),
451313
+ TableColumn_default({
451314
+ required: false,
451315
+ type: TableColumnType_default.JSON,
451316
+ title: "Accepted Policies",
451317
+ description: "The policies the team accepted while installing (terms of service, privacy policy...), with when.",
451318
+ example: { toc: "2026-10-18T10:00:00Z" }
451319
+ }),
451320
+ Column({
451321
+ nullable: true,
451322
+ type: ColumnType_default.JSON
451323
+ })
451324
+ ], VercelMarketplaceInstallation.prototype, "acceptedPolicies", 2);
451325
+ __decorateClass([
451326
+ ColumnAccessControl_default({
451327
+ create: [],
451328
+ read: [],
451329
+ update: []
451330
+ }),
451331
+ TableColumn_default({
451332
+ required: false,
451333
+ type: TableColumnType_default.LongText,
451334
+ title: "Account Name",
451335
+ description: "The Vercel team's name.",
451336
+ example: "Acme"
451337
+ }),
451338
+ Column({
451339
+ nullable: true,
451340
+ type: ColumnType_default.LongText,
451341
+ length: ColumnLength_default.LongText
451342
+ })
451343
+ ], VercelMarketplaceInstallation.prototype, "accountName", 2);
451344
+ __decorateClass([
451345
+ ColumnAccessControl_default({
451346
+ create: [],
451347
+ read: [],
451348
+ update: []
451349
+ }),
451350
+ TableColumn_default({
451351
+ required: false,
451352
+ type: TableColumnType_default.LongText,
451353
+ title: "Account URL",
451354
+ description: "The installation in the Vercel dashboard.",
451355
+ example: "https://vercel.com/acme/~/integrations/oneuptime"
451356
+ }),
451357
+ Column({
451358
+ nullable: true,
451359
+ type: ColumnType_default.LongText,
451360
+ length: ColumnLength_default.LongText
451361
+ })
451362
+ ], VercelMarketplaceInstallation.prototype, "accountUrl", 2);
451363
+ __decorateClass([
451364
+ ColumnAccessControl_default({
451365
+ create: [],
451366
+ read: [],
451367
+ update: []
451368
+ }),
451369
+ TableColumn_default({
451370
+ required: false,
451371
+ type: TableColumnType_default.Email,
451372
+ title: "Contact Email",
451373
+ description: "Who Vercel names as the team's contact for the installation.",
451374
+ example: "owner@acme.com"
451375
+ }),
451376
+ Column({
451377
+ nullable: true,
451378
+ type: ColumnType_default.Email,
451379
+ length: ColumnLength_default.Email
451380
+ })
451381
+ ], VercelMarketplaceInstallation.prototype, "contactEmail", 2);
451382
+ __decorateClass([
451383
+ ColumnAccessControl_default({
451384
+ create: [],
451385
+ read: [],
451386
+ update: []
451387
+ }),
451388
+ TableColumn_default({
451389
+ required: false,
451390
+ type: TableColumnType_default.LongText,
451391
+ title: "Contact Name",
451392
+ description: "The contact's name, where Vercel gives one.",
451393
+ example: "Ada Lovelace"
451394
+ }),
451395
+ Column({
451396
+ nullable: true,
451397
+ type: ColumnType_default.LongText,
451398
+ length: ColumnLength_default.LongText
451399
+ })
451400
+ ], VercelMarketplaceInstallation.prototype, "contactName", 2);
451401
+ __decorateClass([
451402
+ ColumnAccessControl_default({
451403
+ create: [],
451404
+ read: [],
451405
+ update: []
451406
+ }),
451407
+ Index(),
451408
+ TableColumn_default({
451409
+ required: true,
451410
+ type: TableColumnType_default.ShortText,
451411
+ title: "Status",
451412
+ description: "Active, DeletePending (uninstalled; the final invoice is still to be sent) or Deleted.",
451413
+ example: "Active"
451414
+ }),
451415
+ Column({
451416
+ nullable: false,
451417
+ type: ColumnType_default.ShortText,
451418
+ length: ColumnLength_default.ShortText
451419
+ })
451420
+ ], VercelMarketplaceInstallation.prototype, "status", 2);
451421
+ __decorateClass([
451422
+ ColumnAccessControl_default({
451423
+ create: [],
451424
+ read: [],
451425
+ update: []
451426
+ }),
451427
+ TableColumn_default({
451428
+ required: false,
451429
+ type: TableColumnType_default.Date,
451430
+ title: "Delete Requested At",
451431
+ description: "When Vercel asked OneUptime to delete the installation.",
451432
+ example: "2026-10-18T10:00:00.000Z"
451433
+ }),
451434
+ Column({
451435
+ nullable: true,
451436
+ type: ColumnType_default.Date
451437
+ })
451438
+ ], VercelMarketplaceInstallation.prototype, "deleteRequestedAt", 2);
451439
+ __decorateClass([
451440
+ ColumnAccessControl_default({
451441
+ create: [],
451442
+ read: [],
451443
+ update: []
451444
+ }),
451445
+ TableColumn_default({
451446
+ required: false,
451447
+ type: TableColumnType_default.Date,
451448
+ title: "Invoiced Until",
451449
+ description: "The end of the last period OneUptime sent Vercel an invoice for. The next invoice starts here.",
451450
+ example: "2026-10-01T00:00:00.000Z"
451451
+ }),
451452
+ Column({
451453
+ nullable: true,
451454
+ type: ColumnType_default.Date
451455
+ })
451456
+ ], VercelMarketplaceInstallation.prototype, "invoicedUntil", 2);
451457
+ __decorateClass([
451458
+ ColumnAccessControl_default({
451459
+ create: [],
451460
+ read: [],
451461
+ update: []
451462
+ }),
451463
+ TableColumn_default({
451464
+ required: false,
451465
+ type: TableColumnType_default.Date,
451466
+ title: "Billing Data Sent At",
451467
+ description: "When OneUptime last sent Vercel the running totals of the current period.",
451468
+ example: "2026-10-18T10:10:00.000Z"
451469
+ }),
451470
+ Column({
451471
+ nullable: true,
451472
+ type: ColumnType_default.Date
451473
+ })
451474
+ ], VercelMarketplaceInstallation.prototype, "billingDataSentAt", 2);
451475
+ __decorateClass([
451476
+ ColumnAccessControl_default({
451477
+ create: [],
451478
+ read: [],
451479
+ update: []
451480
+ }),
451481
+ TableColumn_default({
451482
+ required: false,
451483
+ type: TableColumnType_default.LongText,
451484
+ title: "Last Billing Error",
451485
+ description: "Why Vercel last refused, or could not be sent, this installation's usage or invoice. Empty once one goes through."
451486
+ }),
451487
+ Column({
451488
+ nullable: true,
451489
+ type: ColumnType_default.LongText,
451490
+ length: ColumnLength_default.LongText
451491
+ })
451492
+ ], VercelMarketplaceInstallation.prototype, "lastBillingError", 2);
451493
+ VercelMarketplaceInstallation = __decorateClass([
451494
+ TableAccessControl_default({
451495
+ create: [],
451496
+ read: [],
451497
+ update: [],
451498
+ delete: []
451499
+ }),
451500
+ CrudApiEndpoint_default(new Route("/vercel-marketplace-installation")),
451501
+ TableMetadata_default({
451502
+ tableName: "VercelMarketplaceInstallation",
451503
+ singularName: "Vercel Marketplace Installation",
451504
+ pluralName: "Vercel Marketplace Installations",
451505
+ icon: IconProp_default.Billing,
451506
+ tableDescription: "Vercel teams that installed OneUptime from Vercel Marketplace, and the access token OneUptime calls Vercel with for them."
451507
+ }),
451508
+ Entity({
451509
+ name: "VercelMarketplaceInstallation"
451510
+ })
451511
+ ], VercelMarketplaceInstallation);
451512
+
451513
+ // ../Common/Models/DatabaseModels/VercelMarketplaceConnection.ts
451514
+ var VercelMarketplaceConnection = class extends DatabaseBaseModel {
451515
+ constructor() {
451516
+ super(...arguments);
451517
+ this.marketplaceSubscriptionId = void 0;
451518
+ this.projectId = void 0;
451519
+ this.vercelProjectId = void 0;
451520
+ this.vercelProjectName = void 0;
451521
+ this.productionDomain = void 0;
451522
+ this.monitorId = void 0;
451523
+ }
451524
+ };
451525
+ __name(VercelMarketplaceConnection, "VercelMarketplaceConnection");
451526
+ __decorateClass([
451527
+ ColumnAccessControl_default({
451528
+ create: [],
451529
+ read: [],
451530
+ update: []
451531
+ }),
451532
+ Index(),
451533
+ TableColumn_default({
451534
+ required: true,
451535
+ type: TableColumnType_default.ObjectID,
451536
+ title: "Marketplace Subscription ID",
451537
+ description: "The resource the Vercel project is connected to: its marketplace purchase.",
451538
+ example: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
451539
+ }),
451540
+ Column({
451541
+ nullable: false,
451542
+ type: ColumnType_default.ObjectID,
451543
+ transformer: ObjectID.getDatabaseTransformer()
451544
+ })
451545
+ ], VercelMarketplaceConnection.prototype, "marketplaceSubscriptionId", 2);
451546
+ __decorateClass([
451547
+ ColumnAccessControl_default({
451548
+ create: [],
451549
+ read: [],
451550
+ update: []
451551
+ }),
451552
+ Index(),
451553
+ TableColumn_default({
451554
+ required: true,
451555
+ type: TableColumnType_default.ObjectID,
451556
+ title: "Project ID",
451557
+ description: "The OneUptime project of the resource.",
451558
+ example: "5f8b9c0d-e1f2-3a4b-5c6d-7e8f9a0b1c2d"
451559
+ }),
451560
+ Column({
451561
+ nullable: false,
451562
+ type: ColumnType_default.ObjectID,
451563
+ transformer: ObjectID.getDatabaseTransformer()
451564
+ })
451565
+ ], VercelMarketplaceConnection.prototype, "projectId", 2);
451566
+ __decorateClass([
451567
+ ColumnAccessControl_default({
451568
+ create: [],
451569
+ read: [],
451570
+ update: []
451571
+ }),
451572
+ TableColumn_default({
451573
+ required: true,
451574
+ type: TableColumnType_default.ShortText,
451575
+ title: "Vercel Project ID",
451576
+ description: "The connected Vercel project.",
451577
+ example: "prj_ndlgr43fadlPyCtREAqxxdyFK"
451578
+ }),
451579
+ Column({
451580
+ nullable: false,
451581
+ type: ColumnType_default.ShortText,
451582
+ length: ColumnLength_default.ShortText
451583
+ })
451584
+ ], VercelMarketplaceConnection.prototype, "vercelProjectId", 2);
451585
+ __decorateClass([
451586
+ ColumnAccessControl_default({
451587
+ create: [],
451588
+ read: [],
451589
+ update: []
451590
+ }),
451591
+ TableColumn_default({
451592
+ required: false,
451593
+ type: TableColumnType_default.LongText,
451594
+ title: "Vercel Project Name",
451595
+ description: "The Vercel project's name, as Vercel last gave it.",
451596
+ example: "storefront"
451597
+ }),
451598
+ Column({
451599
+ nullable: true,
451600
+ type: ColumnType_default.LongText,
451601
+ length: ColumnLength_default.LongText
451602
+ })
451603
+ ], VercelMarketplaceConnection.prototype, "vercelProjectName", 2);
451604
+ __decorateClass([
451605
+ ColumnAccessControl_default({
451606
+ create: [],
451607
+ read: [],
451608
+ update: []
451609
+ }),
451610
+ TableColumn_default({
451611
+ required: false,
451612
+ type: TableColumnType_default.LongText,
451613
+ title: "Production Domain",
451614
+ description: "The Vercel project's production domain, which the monitor checks. Empty until the project has one.",
451615
+ example: "storefront.vercel.app"
451616
+ }),
451617
+ Column({
451618
+ nullable: true,
451619
+ type: ColumnType_default.LongText,
451620
+ length: ColumnLength_default.LongText
451621
+ })
451622
+ ], VercelMarketplaceConnection.prototype, "productionDomain", 2);
451623
+ __decorateClass([
451624
+ ColumnAccessControl_default({
451625
+ create: [],
451626
+ read: [],
451627
+ update: []
451628
+ }),
451629
+ TableColumn_default({
451630
+ required: false,
451631
+ type: TableColumnType_default.ObjectID,
451632
+ title: "Monitor ID",
451633
+ description: "The website monitor OneUptime made for the production domain, if it made one.",
451634
+ example: "b1c2d3e4-f5a6-7890-abcd-ef1234567890"
451635
+ }),
451636
+ Column({
451637
+ nullable: true,
451638
+ type: ColumnType_default.ObjectID,
451639
+ transformer: ObjectID.getDatabaseTransformer()
451640
+ })
451641
+ ], VercelMarketplaceConnection.prototype, "monitorId", 2);
451642
+ VercelMarketplaceConnection = __decorateClass([
451643
+ TableAccessControl_default({
451644
+ create: [],
451645
+ read: [],
451646
+ update: [],
451647
+ delete: []
451648
+ }),
451649
+ CrudApiEndpoint_default(new Route("/vercel-marketplace-connection")),
451650
+ TableMetadata_default({
451651
+ tableName: "VercelMarketplaceConnection",
451652
+ singularName: "Vercel Marketplace Connection",
451653
+ pluralName: "Vercel Marketplace Connections",
451654
+ icon: IconProp_default.Link,
451655
+ tableDescription: "Vercel projects connected to a OneUptime resource from Vercel Marketplace, and the monitor that watches each one's production domain."
451656
+ }),
451657
+ Entity({
451658
+ name: "VercelMarketplaceConnection"
451659
+ }),
451660
+ Index(["marketplaceSubscriptionId", "vercelProjectId"], { unique: true })
451661
+ ], VercelMarketplaceConnection);
451662
+
450325
451663
  // ../Common/Models/DatabaseModels/UserNotificationEmailRollupItem.ts
450326
451664
  var UserNotificationEmailRollupItem = class extends DatabaseBaseModel {
450327
451665
  constructor() {
@@ -452224,6 +453562,7 @@ var AllModelTypes = [
452224
453562
  DataSource2,
452225
453563
  UserSession_default,
452226
453564
  UserProjectSsoConsent,
453565
+ UserProjectSsoIdentity,
452227
453566
  UserTotpAuth_default,
452228
453567
  UserTwoFactorBackupCode_default,
452229
453568
  UserWebAuthn_default,
@@ -452263,6 +453602,7 @@ var AllModelTypes = [
452263
453602
  OnCallDutyPolicyTimeLog,
452264
453603
  ProjectSCIM,
452265
453604
  ProjectSCIMLog,
453605
+ ProjectSCIMUser,
452266
453606
  StatusPageSCIMLog,
452267
453607
  KubernetesCluster,
452268
453608
  KubernetesAiAgent,
@@ -452369,6 +453709,8 @@ var AllModelTypes = [
452369
453709
  MarketplaceSubscription,
452370
453710
  MarketplaceUsageReport,
452371
453711
  MarketplaceCharge,
453712
+ VercelMarketplaceInstallation,
453713
+ VercelMarketplaceConnection,
452372
453714
  UserNotificationEmailRollupItem,
452373
453715
  UserNotificationEmailRollupBatch,
452374
453716
  UserNotificationEmailRollupSetting_default,