@oneuptime/common 9.3.22 → 9.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/Models/DatabaseModels/IncomingCallLog.ts +521 -0
  2. package/Models/DatabaseModels/IncomingCallLogItem.ts +463 -0
  3. package/Models/DatabaseModels/IncomingCallPolicy.ts +811 -0
  4. package/Models/DatabaseModels/IncomingCallPolicyEscalationRule.ts +597 -0
  5. package/Models/DatabaseModels/Index.ts +18 -0
  6. package/Models/DatabaseModels/ProjectSCIMLog.ts +422 -0
  7. package/Models/DatabaseModels/StatusPageSCIMLog.ts +455 -0
  8. package/Models/DatabaseModels/User.ts +0 -15
  9. package/Models/DatabaseModels/UserIncomingCallNumber.ts +296 -0
  10. package/Server/API/UserIncomingCallNumberAPI.ts +128 -0
  11. package/Server/Infrastructure/Postgres/SchemaMigrations/1768583966447-MigrationName.ts +121 -0
  12. package/Server/Infrastructure/Postgres/SchemaMigrations/1768647802022-RemoveAlertPhoneNumberFromUser.ts +22 -0
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/1768649699509-MigrationName.ts +787 -0
  14. package/Server/Infrastructure/Postgres/SchemaMigrations/1768682071562-MigrationName.ts +29 -0
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  16. package/Server/Services/IncomingCallLogItemService.ts +10 -0
  17. package/Server/Services/IncomingCallLogService.ts +10 -0
  18. package/Server/Services/IncomingCallPolicyEscalationRuleService.ts +267 -0
  19. package/Server/Services/IncomingCallPolicyService.ts +10 -0
  20. package/Server/Services/Index.ts +7 -0
  21. package/Server/Services/ProjectSCIMLogService.ts +11 -0
  22. package/Server/Services/StatusPageSCIMLogService.ts +11 -0
  23. package/Server/Services/UserCallService.ts +31 -0
  24. package/Server/Services/UserIncomingCallNumberService.ts +258 -0
  25. package/Server/Services/UserSmsService.ts +31 -0
  26. package/Server/Utils/StartServer.ts +5 -0
  27. package/Types/Call/CallProvider.ts +99 -0
  28. package/Types/Call/CallProviderType.ts +6 -0
  29. package/Types/Icon/IconProp.ts +1 -0
  30. package/Types/IncomingCall/IncomingCallStatus.ts +13 -0
  31. package/Types/Permission.ts +126 -0
  32. package/Types/Phone.ts +53 -4
  33. package/Types/SCIM/SCIMLogStatus.ts +7 -0
  34. package/UI/Components/Diagram/ConceptCards.tsx +74 -0
  35. package/UI/Components/Diagram/HorizontalStepChain.tsx +92 -0
  36. package/UI/Components/Diagram/Index.ts +11 -0
  37. package/UI/Components/Diagram/NumberedSteps.tsx +77 -0
  38. package/UI/Components/Diagram/VerticalFlowSteps.tsx +59 -0
  39. package/UI/Components/Icon/Icon.tsx +10 -0
  40. package/UI/Components/SimpleLogViewer/SimpleLogViewer.tsx +86 -2
  41. package/build/dist/Models/DatabaseModels/IncomingCallLog.js +565 -0
  42. package/build/dist/Models/DatabaseModels/IncomingCallLog.js.map +1 -0
  43. package/build/dist/Models/DatabaseModels/IncomingCallLogItem.js +497 -0
  44. package/build/dist/Models/DatabaseModels/IncomingCallLogItem.js.map +1 -0
  45. package/build/dist/Models/DatabaseModels/IncomingCallPolicy.js +840 -0
  46. package/build/dist/Models/DatabaseModels/IncomingCallPolicy.js.map +1 -0
  47. package/build/dist/Models/DatabaseModels/IncomingCallPolicyEscalationRule.js +619 -0
  48. package/build/dist/Models/DatabaseModels/IncomingCallPolicyEscalationRule.js.map +1 -0
  49. package/build/dist/Models/DatabaseModels/Index.js +16 -0
  50. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  51. package/build/dist/Models/DatabaseModels/ProjectSCIMLog.js +455 -0
  52. package/build/dist/Models/DatabaseModels/ProjectSCIMLog.js.map +1 -0
  53. package/build/dist/Models/DatabaseModels/StatusPageSCIMLog.js +486 -0
  54. package/build/dist/Models/DatabaseModels/StatusPageSCIMLog.js.map +1 -0
  55. package/build/dist/Models/DatabaseModels/User.js +0 -16
  56. package/build/dist/Models/DatabaseModels/User.js.map +1 -1
  57. package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js +315 -0
  58. package/build/dist/Models/DatabaseModels/UserIncomingCallNumber.js.map +1 -0
  59. package/build/dist/Server/API/UserIncomingCallNumberAPI.js +72 -0
  60. package/build/dist/Server/API/UserIncomingCallNumberAPI.js.map +1 -0
  61. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768583966447-MigrationName.js +48 -0
  62. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768583966447-MigrationName.js.map +1 -0
  63. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768647802022-RemoveAlertPhoneNumberFromUser.js +34 -0
  64. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768647802022-RemoveAlertPhoneNumberFromUser.js.map +1 -0
  65. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768649699509-MigrationName.js +270 -0
  66. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768649699509-MigrationName.js.map +1 -0
  67. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768682071562-MigrationName.js +16 -0
  68. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1768682071562-MigrationName.js.map +1 -0
  69. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  70. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  71. package/build/dist/Server/Services/IncomingCallLogItemService.js +9 -0
  72. package/build/dist/Server/Services/IncomingCallLogItemService.js.map +1 -0
  73. package/build/dist/Server/Services/IncomingCallLogService.js +9 -0
  74. package/build/dist/Server/Services/IncomingCallLogService.js.map +1 -0
  75. package/build/dist/Server/Services/IncomingCallPolicyEscalationRuleService.js +197 -0
  76. package/build/dist/Server/Services/IncomingCallPolicyEscalationRuleService.js.map +1 -0
  77. package/build/dist/Server/Services/IncomingCallPolicyService.js +9 -0
  78. package/build/dist/Server/Services/IncomingCallPolicyService.js.map +1 -0
  79. package/build/dist/Server/Services/Index.js +6 -0
  80. package/build/dist/Server/Services/Index.js.map +1 -1
  81. package/build/dist/Server/Services/ProjectSCIMLogService.js +10 -0
  82. package/build/dist/Server/Services/ProjectSCIMLogService.js.map +1 -0
  83. package/build/dist/Server/Services/StatusPageSCIMLogService.js +10 -0
  84. package/build/dist/Server/Services/StatusPageSCIMLogService.js.map +1 -0
  85. package/build/dist/Server/Services/UserCallService.js +21 -0
  86. package/build/dist/Server/Services/UserCallService.js.map +1 -1
  87. package/build/dist/Server/Services/UserIncomingCallNumberService.js +225 -0
  88. package/build/dist/Server/Services/UserIncomingCallNumberService.js.map +1 -0
  89. package/build/dist/Server/Services/UserSmsService.js +21 -0
  90. package/build/dist/Server/Services/UserSmsService.js.map +1 -1
  91. package/build/dist/Server/Utils/StartServer.js +5 -0
  92. package/build/dist/Server/Utils/StartServer.js.map +1 -1
  93. package/build/dist/Types/Call/CallProvider.js +2 -0
  94. package/build/dist/Types/Call/CallProvider.js.map +1 -0
  95. package/build/dist/Types/Call/CallProviderType.js +7 -0
  96. package/build/dist/Types/Call/CallProviderType.js.map +1 -0
  97. package/build/dist/Types/Icon/IconProp.js +1 -0
  98. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  99. package/build/dist/Types/IncomingCall/IncomingCallStatus.js +14 -0
  100. package/build/dist/Types/IncomingCall/IncomingCallStatus.js.map +1 -0
  101. package/build/dist/Types/Permission.js +104 -0
  102. package/build/dist/Types/Permission.js.map +1 -1
  103. package/build/dist/Types/Phone.js +47 -3
  104. package/build/dist/Types/Phone.js.map +1 -1
  105. package/build/dist/Types/SCIM/SCIMLogStatus.js +8 -0
  106. package/build/dist/Types/SCIM/SCIMLogStatus.js.map +1 -0
  107. package/build/dist/UI/Components/Diagram/ConceptCards.js +30 -0
  108. package/build/dist/UI/Components/Diagram/ConceptCards.js.map +1 -0
  109. package/build/dist/UI/Components/Diagram/HorizontalStepChain.js +30 -0
  110. package/build/dist/UI/Components/Diagram/HorizontalStepChain.js.map +1 -0
  111. package/build/dist/UI/Components/Diagram/Index.js +5 -0
  112. package/build/dist/UI/Components/Diagram/Index.js.map +1 -0
  113. package/build/dist/UI/Components/Diagram/NumberedSteps.js +18 -0
  114. package/build/dist/UI/Components/Diagram/NumberedSteps.js.map +1 -0
  115. package/build/dist/UI/Components/Diagram/VerticalFlowSteps.js +16 -0
  116. package/build/dist/UI/Components/Diagram/VerticalFlowSteps.js.map +1 -0
  117. package/build/dist/UI/Components/Icon/Icon.js +4 -0
  118. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  119. package/build/dist/UI/Components/SimpleLogViewer/SimpleLogViewer.js +30 -1
  120. package/build/dist/UI/Components/SimpleLogViewer/SimpleLogViewer.js.map +1 -1
  121. package/package.json +1 -1
@@ -0,0 +1,296 @@
1
+ import Project from "./Project";
2
+ import User from "./User";
3
+ import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
4
+ import Route from "../../Types/API/Route";
5
+ import AllowAccessIfSubscriptionIsUnpaid from "../../Types/Database/AccessControl/AllowAccessIfSubscriptionIsUnpaid";
6
+ import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
7
+ import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
8
+ import ColumnLength from "../../Types/Database/ColumnLength";
9
+ import ColumnType from "../../Types/Database/ColumnType";
10
+ import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
11
+ import CurrentUserCanAccessRecordBy from "../../Types/Database/CurrentUserCanAccessRecordBy";
12
+ import TableColumn from "../../Types/Database/TableColumn";
13
+ import TableColumnType from "../../Types/Database/TableColumnType";
14
+ import TableMetadata from "../../Types/Database/TableMetadata";
15
+ import TenantColumn from "../../Types/Database/TenantColumn";
16
+ import IconProp from "../../Types/Icon/IconProp";
17
+ import ObjectID from "../../Types/ObjectID";
18
+ import Permission from "../../Types/Permission";
19
+ import Phone from "../../Types/Phone";
20
+ import Text from "../../Types/Text";
21
+ import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm";
22
+
23
+ @TenantColumn("projectId")
24
+ @AllowAccessIfSubscriptionIsUnpaid()
25
+ @TableAccessControl({
26
+ create: [Permission.CurrentUser],
27
+ read: [Permission.CurrentUser],
28
+ delete: [Permission.CurrentUser],
29
+ update: [Permission.CurrentUser],
30
+ })
31
+ @CrudApiEndpoint(new Route("/user-incoming-call-number"))
32
+ @Entity({
33
+ name: "UserIncomingCallNumber",
34
+ })
35
+ @TableMetadata({
36
+ tableName: "UserIncomingCallNumber",
37
+ singularName: "Phone Number for Incoming Call Routing",
38
+ pluralName: "Phone Numbers for Incoming Call Routing",
39
+ icon: IconProp.Call,
40
+ tableDescription:
41
+ "Phone Number which will be used for receiving routed incoming calls.",
42
+ })
43
+ @CurrentUserCanAccessRecordBy("userId")
44
+ class UserIncomingCallNumber extends BaseModel {
45
+ @ColumnAccessControl({
46
+ create: [Permission.CurrentUser],
47
+ read: [Permission.CurrentUser],
48
+ update: [],
49
+ })
50
+ @TableColumn({
51
+ manyToOneRelationColumn: "projectId",
52
+ type: TableColumnType.Entity,
53
+ modelType: Project,
54
+ title: "Project",
55
+ description: "Relation to Project Resource in which this object belongs",
56
+ })
57
+ @ManyToOne(
58
+ () => {
59
+ return Project;
60
+ },
61
+ {
62
+ eager: false,
63
+ nullable: true,
64
+ onDelete: "CASCADE",
65
+ orphanedRowAction: "nullify",
66
+ },
67
+ )
68
+ @JoinColumn({ name: "projectId" })
69
+ public project?: Project = undefined;
70
+
71
+ @ColumnAccessControl({
72
+ create: [Permission.CurrentUser],
73
+ read: [Permission.CurrentUser],
74
+ update: [],
75
+ })
76
+ @Index()
77
+ @TableColumn({
78
+ type: TableColumnType.ObjectID,
79
+ required: true,
80
+ canReadOnRelationQuery: true,
81
+ title: "Project ID",
82
+ description: "ID of your OneUptime Project in which this object belongs",
83
+ example: "5f8b9c0d-e1a2-4b3c-8d5e-6f7a8b9c0d1e",
84
+ })
85
+ @Column({
86
+ type: ColumnType.ObjectID,
87
+ nullable: false,
88
+ transformer: ObjectID.getDatabaseTransformer(),
89
+ })
90
+ public projectId?: ObjectID = undefined;
91
+
92
+ @ColumnAccessControl({
93
+ create: [Permission.CurrentUser],
94
+ read: [Permission.CurrentUser],
95
+ update: [],
96
+ })
97
+ @TableColumn({
98
+ title: "Phone",
99
+ required: true,
100
+ unique: false,
101
+ type: TableColumnType.Phone,
102
+ canReadOnRelationQuery: true,
103
+ example: "+1-555-123-4567",
104
+ })
105
+ @Column({
106
+ type: ColumnType.Phone,
107
+ length: ColumnLength.Phone,
108
+ unique: false,
109
+ nullable: false,
110
+ transformer: Phone.getDatabaseTransformer(),
111
+ })
112
+ public phone?: Phone = undefined;
113
+
114
+ @ColumnAccessControl({
115
+ create: [Permission.CurrentUser],
116
+ read: [Permission.CurrentUser],
117
+ update: [],
118
+ })
119
+ @TableColumn({
120
+ manyToOneRelationColumn: "user",
121
+ type: TableColumnType.Entity,
122
+ modelType: User,
123
+ title: "User",
124
+ description: "Relation to User who this phone number belongs to",
125
+ })
126
+ @ManyToOne(
127
+ () => {
128
+ return User;
129
+ },
130
+ {
131
+ eager: false,
132
+ nullable: true,
133
+ onDelete: "CASCADE",
134
+ orphanedRowAction: "nullify",
135
+ },
136
+ )
137
+ @JoinColumn({ name: "userId" })
138
+ public user?: User = undefined;
139
+
140
+ @ColumnAccessControl({
141
+ create: [Permission.CurrentUser],
142
+ read: [Permission.CurrentUser],
143
+ update: [],
144
+ })
145
+ @TableColumn({
146
+ type: TableColumnType.ObjectID,
147
+ title: "User ID",
148
+ description: "User ID who this phone number belongs to",
149
+ example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
150
+ })
151
+ @Column({
152
+ type: ColumnType.ObjectID,
153
+ nullable: true,
154
+ transformer: ObjectID.getDatabaseTransformer(),
155
+ })
156
+ @Index()
157
+ public userId?: ObjectID = undefined;
158
+
159
+ @ColumnAccessControl({
160
+ create: [Permission.CurrentUser],
161
+ read: [Permission.CurrentUser],
162
+ update: [],
163
+ })
164
+ @TableColumn({
165
+ manyToOneRelationColumn: "createdByUserId",
166
+ type: TableColumnType.Entity,
167
+ modelType: User,
168
+ title: "Created by User",
169
+ description:
170
+ "Relation to User who created this object (if this object was created by a User)",
171
+ })
172
+ @ManyToOne(
173
+ () => {
174
+ return User;
175
+ },
176
+ {
177
+ eager: false,
178
+ nullable: true,
179
+ onDelete: "SET NULL",
180
+ orphanedRowAction: "nullify",
181
+ },
182
+ )
183
+ @JoinColumn({ name: "createdByUserId" })
184
+ public createdByUser?: User = undefined;
185
+
186
+ @ColumnAccessControl({
187
+ create: [Permission.CurrentUser],
188
+ read: [Permission.CurrentUser],
189
+ update: [],
190
+ })
191
+ @TableColumn({
192
+ type: TableColumnType.ObjectID,
193
+ title: "Created by User ID",
194
+ description:
195
+ "User ID who created this object (if this object was created by a User)",
196
+ example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
197
+ })
198
+ @Column({
199
+ type: ColumnType.ObjectID,
200
+ nullable: true,
201
+ transformer: ObjectID.getDatabaseTransformer(),
202
+ })
203
+ public createdByUserId?: ObjectID = undefined;
204
+
205
+ @ColumnAccessControl({
206
+ create: [],
207
+ read: [],
208
+ update: [],
209
+ })
210
+ @TableColumn({
211
+ manyToOneRelationColumn: "deletedByUserId",
212
+ type: TableColumnType.Entity,
213
+ title: "Deleted by User",
214
+ modelType: User,
215
+ description:
216
+ "Relation to User who deleted this object (if this object was deleted by a User)",
217
+ })
218
+ @ManyToOne(
219
+ () => {
220
+ return User;
221
+ },
222
+ {
223
+ cascade: false,
224
+ eager: false,
225
+ nullable: true,
226
+ onDelete: "SET NULL",
227
+ orphanedRowAction: "nullify",
228
+ },
229
+ )
230
+ @JoinColumn({ name: "deletedByUserId" })
231
+ public deletedByUser?: User = undefined;
232
+
233
+ @ColumnAccessControl({
234
+ create: [],
235
+ read: [],
236
+ update: [],
237
+ })
238
+ @TableColumn({
239
+ type: TableColumnType.ObjectID,
240
+ title: "Deleted by User ID",
241
+ description:
242
+ "User ID who deleted this object (if this object was deleted by a User)",
243
+ example: "7c9d8e0f-a1b2-4c3d-9e5f-8a7b9c0d1e2f",
244
+ })
245
+ @Column({
246
+ type: ColumnType.ObjectID,
247
+ nullable: true,
248
+ transformer: ObjectID.getDatabaseTransformer(),
249
+ })
250
+ public deletedByUserId?: ObjectID = undefined;
251
+
252
+ @ColumnAccessControl({
253
+ create: [],
254
+ read: [Permission.CurrentUser],
255
+ update: [],
256
+ })
257
+ @TableColumn({
258
+ title: "Is Verified",
259
+ description: "Is this phone number verified?",
260
+ isDefaultValueColumn: true,
261
+ type: TableColumnType.Boolean,
262
+ defaultValue: false,
263
+ example: true,
264
+ })
265
+ @Column({
266
+ type: ColumnType.Boolean,
267
+ default: false,
268
+ })
269
+ public isVerified?: boolean = undefined;
270
+
271
+ @ColumnAccessControl({
272
+ create: [],
273
+ read: [],
274
+ update: [],
275
+ })
276
+ @TableColumn({
277
+ title: "Verification Code",
278
+ description: "Temporary Verification Code",
279
+ isDefaultValueColumn: true,
280
+ computed: true,
281
+ required: true,
282
+ type: TableColumnType.ShortText,
283
+ forceGetDefaultValueOnCreate: () => {
284
+ return Text.generateRandomNumber(6);
285
+ },
286
+ example: "123456",
287
+ })
288
+ @Column({
289
+ type: ColumnType.ShortText,
290
+ nullable: false,
291
+ length: ColumnLength.ShortText,
292
+ })
293
+ public verificationCode?: string = undefined;
294
+ }
295
+
296
+ export default UserIncomingCallNumber;
@@ -0,0 +1,128 @@
1
+ import UserMiddleware from "../Middleware/UserAuthorization";
2
+ import UserIncomingCallNumberService, {
3
+ Service as UserIncomingCallNumberServiceType,
4
+ } from "../Services/UserIncomingCallNumberService";
5
+ import {
6
+ ExpressRequest,
7
+ ExpressResponse,
8
+ NextFunction,
9
+ OneUptimeRequest,
10
+ } from "../Utils/Express";
11
+ import Response from "../Utils/Response";
12
+ import BaseAPI from "./BaseAPI";
13
+ import BadDataException from "../../Types/Exception/BadDataException";
14
+ import UserIncomingCallNumber from "../../Models/DatabaseModels/UserIncomingCallNumber";
15
+
16
+ export default class UserIncomingCallNumberAPI extends BaseAPI<
17
+ UserIncomingCallNumber,
18
+ UserIncomingCallNumberServiceType
19
+ > {
20
+ public constructor() {
21
+ super(UserIncomingCallNumber, UserIncomingCallNumberService);
22
+
23
+ this.router.post(
24
+ `/user-incoming-call-number/verify`,
25
+ UserMiddleware.getUserMiddleware,
26
+ async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
27
+ try {
28
+ req = req as OneUptimeRequest;
29
+
30
+ if (!req.body.itemId) {
31
+ return Response.sendErrorResponse(
32
+ req,
33
+ res,
34
+ new BadDataException("Invalid item ID"),
35
+ );
36
+ }
37
+
38
+ if (!req.body.code) {
39
+ return Response.sendErrorResponse(
40
+ req,
41
+ res,
42
+ new BadDataException("Invalid code"),
43
+ );
44
+ }
45
+
46
+ // Check if the code matches and verify the phone number
47
+ const item: UserIncomingCallNumber | null =
48
+ await this.service.findOneById({
49
+ id: req.body["itemId"],
50
+ props: {
51
+ isRoot: true,
52
+ },
53
+ select: {
54
+ userId: true,
55
+ verificationCode: true,
56
+ },
57
+ });
58
+
59
+ if (!item) {
60
+ return Response.sendErrorResponse(
61
+ req,
62
+ res,
63
+ new BadDataException("Item not found"),
64
+ );
65
+ }
66
+
67
+ // Check user ID
68
+ if (
69
+ item.userId?.toString() !==
70
+ (req as OneUptimeRequest)?.userAuthorization?.userId?.toString()
71
+ ) {
72
+ return Response.sendErrorResponse(
73
+ req,
74
+ res,
75
+ new BadDataException("Invalid user ID"),
76
+ );
77
+ }
78
+
79
+ if (item.verificationCode !== req.body["code"]) {
80
+ return Response.sendErrorResponse(
81
+ req,
82
+ res,
83
+ new BadDataException("Invalid code"),
84
+ );
85
+ }
86
+
87
+ await this.service.updateOneById({
88
+ id: item.id!,
89
+ props: {
90
+ isRoot: true,
91
+ },
92
+ data: {
93
+ isVerified: true,
94
+ },
95
+ });
96
+
97
+ return Response.sendEmptySuccessResponse(req, res);
98
+ } catch (err) {
99
+ return next(err);
100
+ }
101
+ },
102
+ );
103
+
104
+ this.router.post(
105
+ `/user-incoming-call-number/resend-verification-code`,
106
+ UserMiddleware.getUserMiddleware,
107
+ async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
108
+ try {
109
+ req = req as OneUptimeRequest;
110
+
111
+ if (!req.body.itemId) {
112
+ return Response.sendErrorResponse(
113
+ req,
114
+ res,
115
+ new BadDataException("Invalid item ID"),
116
+ );
117
+ }
118
+
119
+ await this.service.resendVerificationCode(req.body.itemId);
120
+
121
+ return Response.sendEmptySuccessResponse(req, res);
122
+ } catch (err) {
123
+ return next(err);
124
+ }
125
+ },
126
+ );
127
+ }
128
+ }
@@ -0,0 +1,121 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class MigrationName1768583966447 implements MigrationInterface {
4
+ public name = "MigrationName1768583966447";
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ await queryRunner.query(
8
+ `CREATE TABLE "ProjectSCIMLog" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "projectScimId" uuid NOT NULL, "operationType" character varying(100) NOT NULL, "status" character varying(100) NOT NULL, "statusMessage" character varying(500), "logBody" text, "httpMethod" character varying(100), "requestPath" character varying(500), "httpStatusCode" integer, "affectedUserEmail" character varying(100), "affectedGroupName" character varying(100), "deletedByUserId" uuid, CONSTRAINT "PK_34ebb18e06358cda3a5fa42b7f5" PRIMARY KEY ("_id"))`,
9
+ );
10
+ await queryRunner.query(
11
+ `CREATE INDEX "IDX_bd00098373b7d8e93bfefc91c6" ON "ProjectSCIMLog" ("projectId") `,
12
+ );
13
+ await queryRunner.query(
14
+ `CREATE INDEX "IDX_0724e5b4be4059cac2b15651e1" ON "ProjectSCIMLog" ("projectScimId") `,
15
+ );
16
+ await queryRunner.query(
17
+ `CREATE INDEX "IDX_df8b4cb02b89ef3f6ad29f8f9a" ON "ProjectSCIMLog" ("affectedUserEmail") `,
18
+ );
19
+ await queryRunner.query(
20
+ `CREATE INDEX "IDX_7799e790e5ea4949d0d6a91693" ON "ProjectSCIMLog" ("affectedGroupName") `,
21
+ );
22
+ await queryRunner.query(
23
+ `CREATE TABLE "StatusPageSCIMLog" ("_id" uuid NOT NULL DEFAULT uuid_generate_v4(), "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP WITH TIME ZONE, "version" integer NOT NULL, "projectId" uuid NOT NULL, "statusPageId" uuid NOT NULL, "statusPageScimId" uuid NOT NULL, "operationType" character varying(100) NOT NULL, "status" character varying(100) NOT NULL, "statusMessage" character varying(500), "logBody" text, "httpMethod" character varying(100), "requestPath" character varying(500), "httpStatusCode" integer, "affectedUserEmail" character varying(100), "deletedByUserId" uuid, CONSTRAINT "PK_1f134bf6bb2c5821843fef09d8b" PRIMARY KEY ("_id"))`,
24
+ );
25
+ await queryRunner.query(
26
+ `CREATE INDEX "IDX_471e2e23a7fac2347c349ab7aa" ON "StatusPageSCIMLog" ("projectId") `,
27
+ );
28
+ await queryRunner.query(
29
+ `CREATE INDEX "IDX_0578ea0d995fc31caec5307eee" ON "StatusPageSCIMLog" ("statusPageId") `,
30
+ );
31
+ await queryRunner.query(
32
+ `CREATE INDEX "IDX_28bda116a05cba76bd0ef09c21" ON "StatusPageSCIMLog" ("statusPageScimId") `,
33
+ );
34
+ await queryRunner.query(
35
+ `CREATE INDEX "IDX_719561fe6e01bc475e255b4a87" ON "StatusPageSCIMLog" ("affectedUserEmail") `,
36
+ );
37
+ await queryRunner.query(
38
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "rotation" SET DEFAULT '{"_type":"Recurring","value":{"intervalType":"Day","intervalCount":{"_type":"PositiveNumber","value":1}}}'`,
39
+ );
40
+ await queryRunner.query(
41
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "restrictionTimes" SET DEFAULT '{"_type":"RestrictionTimes","value":{"restictionType":"None","dayRestrictionTimes":null,"weeklyRestrictionTimes":[]}}'`,
42
+ );
43
+ await queryRunner.query(
44
+ `ALTER TABLE "ProjectSCIMLog" ADD CONSTRAINT "FK_bd00098373b7d8e93bfefc91c6a" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
45
+ );
46
+ await queryRunner.query(
47
+ `ALTER TABLE "ProjectSCIMLog" ADD CONSTRAINT "FK_0724e5b4be4059cac2b15651e19" FOREIGN KEY ("projectScimId") REFERENCES "ProjectSCIM"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
48
+ );
49
+ await queryRunner.query(
50
+ `ALTER TABLE "ProjectSCIMLog" ADD CONSTRAINT "FK_3a3dea844d9d75b76a2531294d2" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
51
+ );
52
+ await queryRunner.query(
53
+ `ALTER TABLE "StatusPageSCIMLog" ADD CONSTRAINT "FK_471e2e23a7fac2347c349ab7aae" FOREIGN KEY ("projectId") REFERENCES "Project"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
54
+ );
55
+ await queryRunner.query(
56
+ `ALTER TABLE "StatusPageSCIMLog" ADD CONSTRAINT "FK_0578ea0d995fc31caec5307eee2" FOREIGN KEY ("statusPageId") REFERENCES "StatusPage"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
57
+ );
58
+ await queryRunner.query(
59
+ `ALTER TABLE "StatusPageSCIMLog" ADD CONSTRAINT "FK_28bda116a05cba76bd0ef09c21c" FOREIGN KEY ("statusPageScimId") REFERENCES "StatusPageSCIM"("_id") ON DELETE CASCADE ON UPDATE NO ACTION`,
60
+ );
61
+ await queryRunner.query(
62
+ `ALTER TABLE "StatusPageSCIMLog" ADD CONSTRAINT "FK_004a49a480f499f41c0afda2b01" FOREIGN KEY ("deletedByUserId") REFERENCES "User"("_id") ON DELETE SET NULL ON UPDATE NO ACTION`,
63
+ );
64
+ }
65
+
66
+ public async down(queryRunner: QueryRunner): Promise<void> {
67
+ await queryRunner.query(
68
+ `ALTER TABLE "StatusPageSCIMLog" DROP CONSTRAINT "FK_004a49a480f499f41c0afda2b01"`,
69
+ );
70
+ await queryRunner.query(
71
+ `ALTER TABLE "StatusPageSCIMLog" DROP CONSTRAINT "FK_28bda116a05cba76bd0ef09c21c"`,
72
+ );
73
+ await queryRunner.query(
74
+ `ALTER TABLE "StatusPageSCIMLog" DROP CONSTRAINT "FK_0578ea0d995fc31caec5307eee2"`,
75
+ );
76
+ await queryRunner.query(
77
+ `ALTER TABLE "StatusPageSCIMLog" DROP CONSTRAINT "FK_471e2e23a7fac2347c349ab7aae"`,
78
+ );
79
+ await queryRunner.query(
80
+ `ALTER TABLE "ProjectSCIMLog" DROP CONSTRAINT "FK_3a3dea844d9d75b76a2531294d2"`,
81
+ );
82
+ await queryRunner.query(
83
+ `ALTER TABLE "ProjectSCIMLog" DROP CONSTRAINT "FK_0724e5b4be4059cac2b15651e19"`,
84
+ );
85
+ await queryRunner.query(
86
+ `ALTER TABLE "ProjectSCIMLog" DROP CONSTRAINT "FK_bd00098373b7d8e93bfefc91c6a"`,
87
+ );
88
+ await queryRunner.query(
89
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "restrictionTimes" SET DEFAULT '{"_type": "RestrictionTimes", "value": {"restictionType": "None", "dayRestrictionTimes": null, "weeklyRestrictionTimes": []}}'`,
90
+ );
91
+ await queryRunner.query(
92
+ `ALTER TABLE "OnCallDutyPolicyScheduleLayer" ALTER COLUMN "rotation" SET DEFAULT '{"_type": "Recurring", "value": {"intervalType": "Day", "intervalCount": {"_type": "PositiveNumber", "value": 1}}}'`,
93
+ );
94
+ await queryRunner.query(
95
+ `DROP INDEX "public"."IDX_719561fe6e01bc475e255b4a87"`,
96
+ );
97
+ await queryRunner.query(
98
+ `DROP INDEX "public"."IDX_28bda116a05cba76bd0ef09c21"`,
99
+ );
100
+ await queryRunner.query(
101
+ `DROP INDEX "public"."IDX_0578ea0d995fc31caec5307eee"`,
102
+ );
103
+ await queryRunner.query(
104
+ `DROP INDEX "public"."IDX_471e2e23a7fac2347c349ab7aa"`,
105
+ );
106
+ await queryRunner.query(`DROP TABLE "StatusPageSCIMLog"`);
107
+ await queryRunner.query(
108
+ `DROP INDEX "public"."IDX_7799e790e5ea4949d0d6a91693"`,
109
+ );
110
+ await queryRunner.query(
111
+ `DROP INDEX "public"."IDX_df8b4cb02b89ef3f6ad29f8f9a"`,
112
+ );
113
+ await queryRunner.query(
114
+ `DROP INDEX "public"."IDX_0724e5b4be4059cac2b15651e1"`,
115
+ );
116
+ await queryRunner.query(
117
+ `DROP INDEX "public"."IDX_bd00098373b7d8e93bfefc91c6"`,
118
+ );
119
+ await queryRunner.query(`DROP TABLE "ProjectSCIMLog"`);
120
+ }
121
+ }
@@ -0,0 +1,22 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+ import CaptureSpan from "../../../Utils/Telemetry/CaptureSpan";
3
+
4
+ export class RemoveAlertPhoneNumberFromUser1768647802022
5
+ implements MigrationInterface
6
+ {
7
+ public name = "RemoveAlertPhoneNumberFromUser1768647802022";
8
+
9
+ @CaptureSpan()
10
+ public async up(queryRunner: QueryRunner): Promise<void> {
11
+ await queryRunner.query(
12
+ `ALTER TABLE "User" DROP COLUMN IF EXISTS "alertPhoneNumber"`,
13
+ );
14
+ }
15
+
16
+ @CaptureSpan()
17
+ public async down(queryRunner: QueryRunner): Promise<void> {
18
+ await queryRunner.query(
19
+ `ALTER TABLE "User" ADD "alertPhoneNumber" character varying(30)`,
20
+ );
21
+ }
22
+ }