@oneuptime/common 8.0.5574 → 8.0.5575

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 (47) hide show
  1. package/Models/DatabaseModels/Index.ts +4 -0
  2. package/Models/DatabaseModels/StatusPagePrivateUserSession.ts +413 -0
  3. package/Models/DatabaseModels/UserSession.ts +318 -0
  4. package/Server/Infrastructure/Postgres/SchemaMigrations/1762890441920-MigrationName.ts +91 -0
  5. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  6. package/Server/Services/Index.ts +4 -0
  7. package/Server/Services/StatusPagePrivateUserSessionService.ts +369 -0
  8. package/Server/Services/UserSessionService.ts +350 -0
  9. package/Server/Utils/Cookie.ts +127 -5
  10. package/Server/Utils/Express.ts +100 -0
  11. package/Server/Utils/JsonWebToken.ts +8 -1
  12. package/Types/CookieName.ts +1 -0
  13. package/Types/JsonWebTokenData.ts +1 -0
  14. package/Types/Text.ts +15 -0
  15. package/UI/Utils/API/API.ts +39 -1
  16. package/Utils/API.ts +74 -5
  17. package/build/dist/Models/DatabaseModels/Index.js +4 -0
  18. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  19. package/build/dist/Models/DatabaseModels/StatusPagePrivateUserSession.js +456 -0
  20. package/build/dist/Models/DatabaseModels/StatusPagePrivateUserSession.js.map +1 -0
  21. package/build/dist/Models/DatabaseModels/UserSession.js +356 -0
  22. package/build/dist/Models/DatabaseModels/UserSession.js.map +1 -0
  23. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1762890441920-MigrationName.js +38 -0
  24. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1762890441920-MigrationName.js.map +1 -0
  25. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  26. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  27. package/build/dist/Server/Services/Index.js +4 -0
  28. package/build/dist/Server/Services/Index.js.map +1 -1
  29. package/build/dist/Server/Services/StatusPagePrivateUserSessionService.js +214 -0
  30. package/build/dist/Server/Services/StatusPagePrivateUserSessionService.js.map +1 -0
  31. package/build/dist/Server/Services/UserSessionService.js +202 -0
  32. package/build/dist/Server/Services/UserSessionService.js.map +1 -0
  33. package/build/dist/Server/Utils/Cookie.js +74 -7
  34. package/build/dist/Server/Utils/Cookie.js.map +1 -1
  35. package/build/dist/Server/Utils/Express.js +62 -0
  36. package/build/dist/Server/Utils/Express.js.map +1 -1
  37. package/build/dist/Server/Utils/JsonWebToken.js +8 -2
  38. package/build/dist/Server/Utils/JsonWebToken.js.map +1 -1
  39. package/build/dist/Types/CookieName.js +1 -0
  40. package/build/dist/Types/CookieName.js.map +1 -1
  41. package/build/dist/Types/Text.js +9 -0
  42. package/build/dist/Types/Text.js.map +1 -1
  43. package/build/dist/UI/Utils/API/API.js +27 -0
  44. package/build/dist/UI/Utils/API/API.js.map +1 -1
  45. package/build/dist/Utils/API.js +36 -6
  46. package/build/dist/Utils/API.js.map +1 -1
  47. package/package.json +146 -146
@@ -4,6 +4,7 @@ import ObjectID from "../../Types/ObjectID";
4
4
  import { CookieOptions } from "express";
5
5
  import JSONWebToken from "./JsonWebToken";
6
6
  import User from "../../Models/DatabaseModels/User";
7
+ import StatusPagePrivateUser from "../../Models/DatabaseModels/StatusPagePrivateUser";
7
8
  import OneUptimeDate from "../../Types/Date";
8
9
  import PositiveNumber from "../../Types/PositiveNumber";
9
10
  import CookieName from "../../Types/CookieName";
@@ -12,6 +13,8 @@ import CaptureSpan from "./Telemetry/CaptureSpan";
12
13
  export default class CookieUtil {
13
14
  // set cookie with express response
14
15
 
16
+ private static readonly DEFAULT_ACCESS_TOKEN_EXPIRY_SECONDS: number = 15 * 60;
17
+
15
18
  @CaptureSpan()
16
19
  public static getCookiesFromCookieString(
17
20
  cookieString: string,
@@ -58,8 +61,23 @@ export default class CookieUtil {
58
61
  expressResponse: ExpressResponse;
59
62
  user: User;
60
63
  isGlobalLogin: boolean;
64
+ sessionId: ObjectID;
65
+ refreshToken: string;
66
+ refreshTokenExpiresAt: Date;
67
+ accessTokenExpiresInSeconds?: number;
61
68
  }): void {
62
- const { expressResponse: res, user, isGlobalLogin } = data;
69
+ const {
70
+ expressResponse: res,
71
+ user,
72
+ isGlobalLogin,
73
+ sessionId,
74
+ refreshToken,
75
+ refreshTokenExpiresAt,
76
+ } = data;
77
+
78
+ const accessTokenExpiresInSeconds: number =
79
+ data.accessTokenExpiresInSeconds ||
80
+ CookieUtil.DEFAULT_ACCESS_TOKEN_EXPIRY_SECONDS;
63
81
 
64
82
  const token: string = JSONWebToken.signUserLoginToken({
65
83
  tokenData: {
@@ -69,13 +87,24 @@ export default class CookieUtil {
69
87
  timezone: user.timezone || null,
70
88
  isMasterAdmin: user.isMasterAdmin!,
71
89
  isGlobalLogin: isGlobalLogin, // This is a general login without SSO. So, we will set this to true. This will give access to all the projects that dont require SSO.
90
+ sessionId: sessionId,
72
91
  },
73
- expiresInSeconds: OneUptimeDate.getSecondsInDays(new PositiveNumber(30)),
92
+ expiresInSeconds: accessTokenExpiresInSeconds,
74
93
  });
75
94
 
76
95
  // Set a cookie with token.
77
96
  CookieUtil.setCookie(res, CookieUtil.getUserTokenKey(), token, {
78
- maxAge: OneUptimeDate.getMillisecondsInDays(new PositiveNumber(30)),
97
+ maxAge: accessTokenExpiresInSeconds * 1000,
98
+ httpOnly: true,
99
+ });
100
+
101
+ const refreshTokenTtl: number = Math.max(
102
+ refreshTokenExpiresAt.getTime() - Date.now(),
103
+ 0,
104
+ );
105
+
106
+ CookieUtil.setCookie(res, CookieUtil.getRefreshTokenKey(), refreshToken, {
107
+ maxAge: refreshTokenTtl,
79
108
  httpOnly: true,
80
109
  });
81
110
 
@@ -148,6 +177,67 @@ export default class CookieUtil {
148
177
  }
149
178
  }
150
179
 
180
+ @CaptureSpan()
181
+ public static setStatusPagePrivateUserCookie(data: {
182
+ expressResponse: ExpressResponse;
183
+ user: StatusPagePrivateUser;
184
+ statusPageId: ObjectID;
185
+ sessionId: ObjectID;
186
+ refreshToken: string;
187
+ refreshTokenExpiresAt: Date;
188
+ accessTokenExpiresInSeconds?: number;
189
+ }): string {
190
+ const {
191
+ expressResponse: res,
192
+ user,
193
+ statusPageId,
194
+ sessionId,
195
+ refreshToken,
196
+ refreshTokenExpiresAt,
197
+ } = data;
198
+
199
+ const accessTokenExpiresInSeconds: number =
200
+ data.accessTokenExpiresInSeconds ||
201
+ CookieUtil.DEFAULT_ACCESS_TOKEN_EXPIRY_SECONDS;
202
+
203
+ const token: string = JSONWebToken.sign({
204
+ data: {
205
+ userId: user.id!,
206
+ email: user.email!,
207
+ statusPageId: statusPageId,
208
+ sessionId: sessionId,
209
+ },
210
+ expiresInSeconds: accessTokenExpiresInSeconds,
211
+ });
212
+
213
+ CookieUtil.setCookie(
214
+ res,
215
+ CookieUtil.getUserTokenKey(statusPageId),
216
+ token,
217
+ {
218
+ maxAge: accessTokenExpiresInSeconds * 1000,
219
+ httpOnly: true,
220
+ },
221
+ );
222
+
223
+ const refreshTokenTtl: number = Math.max(
224
+ refreshTokenExpiresAt.getTime() - Date.now(),
225
+ 0,
226
+ );
227
+
228
+ CookieUtil.setCookie(
229
+ res,
230
+ CookieUtil.getRefreshTokenKey(statusPageId),
231
+ refreshToken,
232
+ {
233
+ maxAge: refreshTokenTtl,
234
+ httpOnly: true,
235
+ },
236
+ );
237
+
238
+ return token;
239
+ }
240
+
151
241
  @CaptureSpan()
152
242
  public static setCookie(
153
243
  res: ExpressResponse,
@@ -155,7 +245,13 @@ export default class CookieUtil {
155
245
  value: string,
156
246
  options: CookieOptions,
157
247
  ): void {
158
- res.cookie(name, value, options);
248
+ const cookieOptions: CookieOptions = {
249
+ path: "/",
250
+ sameSite: "lax",
251
+ ...options,
252
+ };
253
+
254
+ res.cookie(name, value, cookieOptions);
159
255
  }
160
256
 
161
257
  // get cookie with express request
@@ -168,11 +264,25 @@ export default class CookieUtil {
168
264
  return req.cookies[name];
169
265
  }
170
266
 
267
+ @CaptureSpan()
268
+ public static getRefreshTokenFromExpressRequest(
269
+ req: ExpressRequest,
270
+ id?: ObjectID,
271
+ ): string | undefined {
272
+ return CookieUtil.getCookieFromExpressRequest(
273
+ req,
274
+ CookieUtil.getRefreshTokenKey(id),
275
+ );
276
+ }
277
+
171
278
  // delete cookie with express response
172
279
 
173
280
  @CaptureSpan()
174
281
  public static removeCookie(res: ExpressResponse, name: string): void {
175
- res.clearCookie(name);
282
+ res.clearCookie(name, {
283
+ path: "/",
284
+ sameSite: "lax",
285
+ });
176
286
  }
177
287
 
178
288
  // get all cookies with express request
@@ -190,6 +300,15 @@ export default class CookieUtil {
190
300
  return `${CookieName.Token}-${id.toString()}`;
191
301
  }
192
302
 
303
+ @CaptureSpan()
304
+ public static getRefreshTokenKey(id?: ObjectID): string {
305
+ if (!id) {
306
+ return CookieName.RefreshToken;
307
+ }
308
+
309
+ return `${CookieName.RefreshToken}-${id.toString()}`;
310
+ }
311
+
193
312
  @CaptureSpan()
194
313
  public static getUserSSOKey(id: ObjectID): string {
195
314
  return `${this.getSSOKey()}${id.toString()}`;
@@ -210,5 +329,8 @@ export default class CookieUtil {
210
329
  for (const key in cookies) {
211
330
  this.removeCookie(res, key);
212
331
  }
332
+
333
+ // Always attempt to remove refresh token cookie even if not parsed.
334
+ this.removeCookie(res, this.getRefreshTokenKey());
213
335
  }
214
336
  }
@@ -46,6 +46,15 @@ export interface OneUptimeResponse extends express.Response {
46
46
  logBody: JSONObjectOrArray;
47
47
  }
48
48
 
49
+ export type RequestDeviceInfo = {
50
+ deviceName?: string;
51
+ deviceType?: string;
52
+ deviceOS?: string;
53
+ deviceBrowser?: string;
54
+ };
55
+
56
+ type HeaderValue = string | Array<string> | null | undefined;
57
+
49
58
  class Express {
50
59
  private static app: express.Application;
51
60
  private static httpServer: Server;
@@ -101,3 +110,94 @@ class Express {
101
110
  }
102
111
 
103
112
  export default Express;
113
+
114
+ export const headerValueToString: (value: HeaderValue) => string | undefined = (
115
+ value: HeaderValue,
116
+ ): string | undefined => {
117
+ if (Array.isArray(value)) {
118
+ return value.length > 0 ? value[0] : undefined;
119
+ }
120
+
121
+ if (typeof value === "string" && value.trim().length > 0) {
122
+ return value.trim();
123
+ }
124
+
125
+ return undefined;
126
+ };
127
+
128
+ export const extractDeviceInfo: (req: ExpressRequest) => RequestDeviceInfo = (
129
+ req: ExpressRequest,
130
+ ): RequestDeviceInfo => {
131
+ const body: JSONObject = (req.body || {}) as JSONObject;
132
+ const data: JSONObject = (body["data"] as JSONObject) || {};
133
+
134
+ const getValue: (key: string) => string | undefined = (
135
+ key: string,
136
+ ): string | undefined => {
137
+ const headerKey: string = key.toLowerCase();
138
+ const camelKey: string = headerKey
139
+ .split("-")
140
+ .map((part: string, index: number) => {
141
+ if (index === 0) {
142
+ return part;
143
+ }
144
+
145
+ return part.charAt(0).toUpperCase() + part.slice(1);
146
+ })
147
+ .join("");
148
+
149
+ return (
150
+ headerValueToString(req.headers[`x-${headerKey}`]) ||
151
+ headerValueToString(body[camelKey] as HeaderValue) ||
152
+ headerValueToString(data[camelKey] as HeaderValue) ||
153
+ headerValueToString(body[key] as HeaderValue) ||
154
+ headerValueToString(data[key] as HeaderValue)
155
+ );
156
+ };
157
+
158
+ const result: RequestDeviceInfo = {};
159
+
160
+ const deviceName: string | undefined = getValue("device-name");
161
+ if (deviceName) {
162
+ result.deviceName = deviceName;
163
+ }
164
+
165
+ const deviceType: string | undefined = getValue("device-type");
166
+ if (deviceType) {
167
+ result.deviceType = deviceType;
168
+ }
169
+
170
+ const deviceOS: string | undefined = getValue("device-os");
171
+ if (deviceOS) {
172
+ result.deviceOS = deviceOS;
173
+ }
174
+
175
+ const deviceBrowser: string | undefined = getValue("device-browser");
176
+ if (deviceBrowser) {
177
+ result.deviceBrowser = deviceBrowser;
178
+ }
179
+
180
+ return result;
181
+ };
182
+
183
+ export const getClientIp: (req: ExpressRequest) => string | undefined = (
184
+ req: ExpressRequest,
185
+ ): string | undefined => {
186
+ const forwarded: string | Array<string> | undefined = req.headers[
187
+ "x-forwarded-for"
188
+ ] as string | Array<string> | undefined;
189
+
190
+ if (Array.isArray(forwarded) && forwarded.length > 0) {
191
+ return forwarded[0]?.split(",")[0]?.trim();
192
+ }
193
+
194
+ if (typeof forwarded === "string" && forwarded.trim().length > 0) {
195
+ return forwarded.split(",")[0]?.trim();
196
+ }
197
+
198
+ if (req.socket?.remoteAddress) {
199
+ return req.socket.remoteAddress;
200
+ }
201
+
202
+ return req.ip;
203
+ };
@@ -24,6 +24,7 @@ class JSONWebToken {
24
24
  isMasterAdmin: boolean;
25
25
  // If this is OneUptime username and password login. This is true, if this is SSO login. Then, this is false.
26
26
  isGlobalLogin: boolean;
27
+ sessionId: ObjectID;
27
28
  };
28
29
  expiresInSeconds: number;
29
30
  }): string {
@@ -67,9 +68,9 @@ class JSONWebToken {
67
68
  name: data.name?.toString() || "",
68
69
  projectId: data.projectId?.toString() || "",
69
70
  isMasterAdmin: data.isMasterAdmin,
71
+ sessionId: data.sessionId?.toString() || undefined,
70
72
  };
71
73
  }
72
-
73
74
  return JSONWebToken.signJsonPayload(jsonObj, expiresInSeconds);
74
75
  }
75
76
 
@@ -106,6 +107,9 @@ class JSONWebToken {
106
107
  isMasterAdmin: false,
107
108
  name: new Name("User"),
108
109
  isGlobalLogin: Boolean(decoded["isGlobalLogin"]),
110
+ sessionId: decoded["sessionId"]
111
+ ? new ObjectID(decoded["sessionId"] as string)
112
+ : undefined,
109
113
  };
110
114
  }
111
115
 
@@ -118,6 +122,9 @@ class JSONWebToken {
118
122
  : undefined,
119
123
  isMasterAdmin: Boolean(decoded["isMasterAdmin"]),
120
124
  isGlobalLogin: Boolean(decoded["isGlobalLogin"]),
125
+ sessionId: decoded["sessionId"]
126
+ ? new ObjectID(decoded["sessionId"] as string)
127
+ : undefined,
121
128
  };
122
129
  } catch (e) {
123
130
  logger.error(e);
@@ -2,6 +2,7 @@ enum CookieName {
2
2
  UserID = "user-id",
3
3
  Email = "user-email",
4
4
  Token = "user-token",
5
+ RefreshToken = "user-refresh-token",
5
6
  Name = "user-name",
6
7
  Timezone = "user-timezone",
7
8
  IsMasterAdmin = "user-is-master-admin",
@@ -11,4 +11,5 @@ export default interface JSONWebTokenData extends JSONObject {
11
11
  statusPageId?: ObjectID | undefined; // for status page logins.
12
12
  projectId?: ObjectID | undefined; // for SSO logins.
13
13
  isGlobalLogin: boolean; // If this is OneUptime username and password login. This is true, if this is SSO login. Then, this is false.
14
+ sessionId?: ObjectID | undefined;
14
15
  }
package/Types/Text.ts CHANGED
@@ -297,4 +297,19 @@ export default class Text {
297
297
  ): string {
298
298
  return sentence.split(search).join(replaceBy);
299
299
  }
300
+
301
+ public static truncate(
302
+ value: string | null | undefined,
303
+ maxLength: number,
304
+ ): string | undefined {
305
+ if (value === null || value === undefined) {
306
+ return undefined;
307
+ }
308
+
309
+ if (maxLength <= 0) {
310
+ return "";
311
+ }
312
+
313
+ return value.length > maxLength ? value.slice(0, maxLength) : value;
314
+ }
300
315
  }
@@ -3,6 +3,8 @@ import Navigation from "../Navigation";
3
3
  import PermissionUtil from "../Permission";
4
4
  import User from "../User";
5
5
  import HTTPErrorResponse from "../../../Types/API/HTTPErrorResponse";
6
+ import HTTPMethod from "../../../Types/API/HTTPMethod";
7
+ import HTTPResponse from "../../../Types/API/HTTPResponse";
6
8
  import Headers from "../../../Types/API/Headers";
7
9
  import Hostname from "../../../Types/API/Hostname";
8
10
  import Protocol from "../../../Types/API/Protocol";
@@ -11,14 +13,18 @@ import URL from "../../../Types/API/URL";
11
13
  import Dictionary from "../../../Types/Dictionary";
12
14
  import APIException from "../../../Types/Exception/ApiException";
13
15
  import Exception from "../../../Types/Exception/Exception";
16
+ import { JSONObject } from "../../../Types/JSON";
14
17
  import JSONFunctions from "../../../Types/JSONFunctions";
15
18
  import {
16
19
  UserGlobalAccessPermission,
17
20
  UserTenantAccessPermission,
18
21
  } from "../../../Types/Permission";
19
- import API from "../../../Utils/API";
22
+ import API, { AuthRetryContext } from "../../../Utils/API";
23
+ import { IDENTITY_URL } from "../../Config";
20
24
 
21
25
  class BaseAPI extends API {
26
+ private static refreshPromise: Promise<boolean> | null = null;
27
+
22
28
  public constructor(protocol: Protocol, hostname: Hostname, route?: Route) {
23
29
  super(protocol, hostname, route);
24
30
  }
@@ -134,6 +140,38 @@ class BaseAPI extends API {
134
140
  return error;
135
141
  }
136
142
 
143
+ protected static override async tryRefreshAuth(
144
+ _context: AuthRetryContext,
145
+ ): Promise<boolean> {
146
+ if (!this.refreshPromise) {
147
+ this.refreshPromise = (async () => {
148
+ const refreshUrl: URL = URL.fromString(
149
+ IDENTITY_URL.toString(),
150
+ ).addRoute("/refresh-token");
151
+
152
+ const result: HTTPResponse<JSONObject> | HTTPErrorResponse =
153
+ await super.fetch<JSONObject>({
154
+ method: HTTPMethod.POST,
155
+ url: refreshUrl,
156
+ options: {
157
+ skipAuthRefresh: true,
158
+ hasAttemptedAuthRefresh: true,
159
+ },
160
+ });
161
+
162
+ if (result instanceof HTTPResponse && result.isSuccess()) {
163
+ return true;
164
+ }
165
+
166
+ return false;
167
+ })().finally(() => {
168
+ this.refreshPromise = null;
169
+ });
170
+ }
171
+
172
+ return await this.refreshPromise;
173
+ }
174
+
137
175
  protected static getLoginRoute(): Route {
138
176
  return new Route("/accounts/login");
139
177
  }
package/Utils/API.ts CHANGED
@@ -24,6 +24,8 @@ export interface RequestOptions {
24
24
  // Per-request proxy agent support (Probe supplies these instead of mutating global axios defaults)
25
25
  httpAgent?: HttpAgent | undefined;
26
26
  httpsAgent?: HttpsAgent | undefined;
27
+ skipAuthRefresh?: boolean | undefined;
28
+ hasAttemptedAuthRefresh?: boolean | undefined;
27
29
  }
28
30
 
29
31
  export interface APIRequestOptions {
@@ -43,6 +45,18 @@ export interface APIFetchOptions {
43
45
  options?: RequestOptions;
44
46
  }
45
47
 
48
+ export interface AuthRetryContext {
49
+ error: HTTPErrorResponse;
50
+ request: {
51
+ method: HTTPMethod;
52
+ url: URL;
53
+ data?: JSONObject | JSONArray;
54
+ headers?: Headers;
55
+ params?: Dictionary<string>;
56
+ options?: RequestOptions;
57
+ };
58
+ }
59
+
46
60
  export default class API {
47
61
  private _protocol: Protocol = Protocol.HTTPS;
48
62
  public get protocol(): Protocol {
@@ -83,6 +97,12 @@ export default class API {
83
97
  }
84
98
  }
85
99
 
100
+ protected static async tryRefreshAuth(
101
+ _context: AuthRetryContext,
102
+ ): Promise<boolean> {
103
+ return false;
104
+ }
105
+
86
106
  public async get<
87
107
  T extends JSONObject | JSONArray | BaseModel | Array<BaseModel>,
88
108
  >(options: APIRequestOptions): Promise<HTTPResponse<T> | HTTPErrorResponse> {
@@ -421,14 +441,63 @@ export default class API {
421
441
  return response;
422
442
  } catch (e) {
423
443
  const error: Error | AxiosError = e as Error | AxiosError;
424
- let errorResponse: HTTPErrorResponse;
425
- if (axios.isAxiosError(error)) {
426
- // Do whatever you want with native error
427
- errorResponse = this.getErrorResponse(error);
428
- } else {
444
+
445
+ if (!axios.isAxiosError(error)) {
429
446
  throw new APIException(error.message);
430
447
  }
431
448
 
449
+ const errorResponse: HTTPErrorResponse = this.getErrorResponse(error);
450
+
451
+ if (
452
+ error.response?.status === 401 &&
453
+ !options?.skipAuthRefresh &&
454
+ !options?.hasAttemptedAuthRefresh
455
+ ) {
456
+ const retryUrl: URL = URL.fromString(url.toString());
457
+
458
+ const requestContext: AuthRetryContext["request"] = {
459
+ method,
460
+ url: retryUrl,
461
+ };
462
+
463
+ if (data) {
464
+ requestContext.data = data;
465
+ }
466
+
467
+ if (headers) {
468
+ requestContext.headers = headers;
469
+ }
470
+
471
+ if (params) {
472
+ requestContext.params = params;
473
+ }
474
+
475
+ if (options) {
476
+ requestContext.options = options;
477
+ }
478
+
479
+ const refreshed: boolean = await this.tryRefreshAuth({
480
+ error: errorResponse,
481
+ request: requestContext,
482
+ });
483
+
484
+ if (refreshed) {
485
+ const nextOptions: RequestOptions = {
486
+ ...(options || {}),
487
+ hasAttemptedAuthRefresh: true,
488
+ };
489
+
490
+ return await this.fetchInternal(
491
+ method,
492
+ retryUrl,
493
+ data,
494
+ headers,
495
+ params,
496
+ nextOptions,
497
+ );
498
+ }
499
+ }
500
+
432
501
  this.handleError(errorResponse);
433
502
  return errorResponse;
434
503
  }
@@ -116,6 +116,7 @@ import StatusPageHistoryChartBarColorRule from "./StatusPageHistoryChartBarColor
116
116
  import StatusPageOwnerTeam from "./StatusPageOwnerTeam";
117
117
  import StatusPageOwnerUser from "./StatusPageOwnerUser";
118
118
  import StatusPagePrivateUser from "./StatusPagePrivateUser";
119
+ import StatusPagePrivateUserSession from "./StatusPagePrivateUserSession";
119
120
  import StatusPageResource from "./StatusPageResource";
120
121
  import StatusPageSCIM from "./StatusPageSCIM";
121
122
  import StatusPageSSO from "./StatusPageSso";
@@ -128,6 +129,7 @@ import TeamComplianceSetting from "./TeamComplianceSetting";
128
129
  import TelemetryService from "./TelemetryService";
129
130
  import UsageBilling from "./TelemetryUsageBilling";
130
131
  import User from "./User";
132
+ import UserSession from "./UserSession";
131
133
  import UserCall from "./UserCall";
132
134
  // Notification Methods
133
135
  import UserEmail from "./UserEmail";
@@ -243,6 +245,7 @@ const AllModelTypes = [
243
245
  StatusPageFooterLink,
244
246
  StatusPageHeaderLink,
245
247
  StatusPagePrivateUser,
248
+ StatusPagePrivateUserSession,
246
249
  StatusPageHistoryChartBarColorRule,
247
250
  ScheduledMaintenanceState,
248
251
  ScheduledMaintenance,
@@ -323,6 +326,7 @@ const AllModelTypes = [
323
326
  CopilotActionTypePriority,
324
327
  ProbeOwnerTeam,
325
328
  ProbeOwnerUser,
329
+ UserSession,
326
330
  UserTotpAuth,
327
331
  UserWebAuthn,
328
332
  TelemetryIngestionKey,
@@ -1 +1 @@
1
- {"version":3,"file":"Index.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/Index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Index.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/Index.ts"],"names":[],"mappings":"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"}