@fivenet-app/gen 2025.9.1 → 2026.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 (134) hide show
  1. package/README.md +1 -1
  2. package/clients.ts +36 -0
  3. package/codegen/perms/perms.ts +186 -15
  4. package/codegen/sanitizer/sanitizer.ts +34 -1
  5. package/package.json +2 -2
  6. package/perms.ts +140 -8
  7. package/resources/accounts/accounts.ts +98 -31
  8. package/resources/accounts/{oauth2.ts → oauth2/oauth2.ts} +20 -20
  9. package/resources/audit/audit.ts +156 -38
  10. package/resources/calendar/{access.ts → access/access.ts} +30 -30
  11. package/resources/calendar/calendar.ts +17 -477
  12. package/resources/calendar/entries/entries.ts +474 -0
  13. package/resources/centrum/{access.ts → access/access.ts} +22 -22
  14. package/resources/centrum/{dispatchers.ts → dispatchers/dispatchers.ts} +14 -14
  15. package/resources/centrum/{dispatches.ts → dispatches/dispatches.ts} +151 -185
  16. package/resources/centrum/joblist.ts +136 -0
  17. package/resources/centrum/{settings.ts → settings/settings.ts} +70 -70
  18. package/resources/centrum/{units_access.ts → units/access/access.ts} +30 -30
  19. package/resources/centrum/{units.ts → units/units.ts} +131 -51
  20. package/resources/citizens/labels/labels.ts +526 -0
  21. package/resources/{users → citizens/licenses}/licenses.ts +17 -17
  22. package/resources/clientconfig/clientconfig.ts +126 -258
  23. package/resources/collab/collab.ts +4 -16
  24. package/resources/common/content/content.ts +108 -85
  25. package/resources/common/content/diff_activity.ts +267 -0
  26. package/resources/common/i18n.ts +2 -2
  27. package/resources/{common/cron → cron}/cron.ts +43 -43
  28. package/resources/documents/{access.ts → access/access.ts} +29 -52
  29. package/resources/documents/{activity.ts → activity/activity.ts} +171 -123
  30. package/resources/documents/approval/approval.ts +945 -0
  31. package/resources/documents/{category.ts → category/category.ts} +7 -7
  32. package/resources/documents/{comment.ts → comment/comment.ts} +10 -10
  33. package/resources/documents/data/data.ts +303 -0
  34. package/resources/documents/documents.ts +282 -667
  35. package/resources/{common/uuid.ts → documents/forms/forms.ts} +20 -20
  36. package/resources/documents/{pins.ts → pins/pins.ts} +5 -5
  37. package/resources/documents/references/references.ts +187 -0
  38. package/resources/documents/relations/relations.ts +184 -0
  39. package/resources/documents/{requests.ts → requests/requests.ts} +18 -18
  40. package/resources/documents/stamps/stamp.ts +355 -0
  41. package/resources/documents/{templates.ts → templates/templates.ts} +426 -84
  42. package/resources/documents/{workflow.ts → workflow/workflow.ts} +264 -26
  43. package/resources/file/filestore.ts +1 -1
  44. package/resources/{common/grpcws → grpcws}/grpcws.ts +52 -52
  45. package/resources/jobs/{activity.ts → colleagues/activity/activity.ts} +54 -54
  46. package/resources/jobs/{colleagues.ts → colleagues/colleagues.ts} +17 -28
  47. package/resources/jobs/{conduct.ts → conduct/conduct.ts} +70 -45
  48. package/resources/jobs/{labels.ts → labels/labels.ts} +34 -23
  49. package/resources/jobs/{job_props.ts → props/props.ts} +26 -38
  50. package/resources/jobs/{job_settings.ts → settings/settings.ts} +53 -53
  51. package/resources/jobs/{timeclock.ts → timeclock/timeclock.ts} +17 -17
  52. package/resources/livemap/{heatmap.ts → heatmap/heatmap.ts} +4 -4
  53. package/resources/livemap/{marker_marker.ts → markers/marker_marker.ts} +35 -35
  54. package/resources/livemap/{user_marker.ts → markers/user_marker.ts} +115 -36
  55. package/resources/mailer/{access.ts → access/access.ts} +67 -67
  56. package/resources/mailer/{email.ts → emails/email.ts} +19 -19
  57. package/resources/mailer/{events.ts → events/events.ts} +24 -24
  58. package/resources/mailer/{message.ts → messages/message.ts} +29 -29
  59. package/resources/mailer/{settings.ts → settings/settings.ts} +14 -13
  60. package/resources/mailer/{template.ts → templates/template.ts} +15 -15
  61. package/resources/mailer/{thread.ts → threads/thread.ts} +29 -29
  62. package/resources/notifications/{client_view.ts → clientview/clientview.ts} +22 -22
  63. package/resources/notifications/{events.ts → events/events.ts} +20 -20
  64. package/resources/notifications/notifications.ts +4 -4
  65. package/resources/permissions/{attributes.ts → attributes/attributes.ts} +42 -42
  66. package/resources/permissions/{events.ts → events/events.ts} +7 -7
  67. package/resources/permissions/{permissions.ts → permissions/permissions.ts} +30 -19
  68. package/resources/qualifications/{access.ts → access/access.ts} +19 -19
  69. package/resources/qualifications/{exam.ts → exam/exam.ts} +269 -141
  70. package/resources/qualifications/qualifications.ts +51 -179
  71. package/resources/settings/banner.ts +3 -3
  72. package/resources/settings/config.ts +527 -25
  73. package/resources/{documents/state.ts → settings/data.ts} +41 -20
  74. package/resources/settings/perms.ts +14 -14
  75. package/resources/stats/stats.ts +379 -0
  76. package/resources/sync/{activity.ts → activity/activity.ts} +104 -25
  77. package/resources/sync/{data.ts → data/data.ts} +405 -59
  78. package/resources/userinfo/{user_info.ts → userinfo.ts} +71 -93
  79. package/resources/users/{activity.ts → activity/activity.ts} +242 -101
  80. package/resources/users/{props.ts → props/props.ts} +91 -69
  81. package/resources/users/short/user.ts +184 -0
  82. package/resources/users/{users.ts → user.ts} +266 -195
  83. package/resources/vehicles/{activity.ts → activity/activity.ts} +20 -20
  84. package/resources/vehicles/{props.ts → props/props.ts} +28 -6
  85. package/resources/vehicles/vehicles.ts +20 -8
  86. package/resources/wiki/{access.ts → access/access.ts} +30 -30
  87. package/resources/wiki/{activity.ts → activity/activity.ts} +104 -70
  88. package/resources/wiki/page.ts +39 -15
  89. package/services/auth/auth.client.ts +23 -10
  90. package/services/auth/auth.ts +445 -262
  91. package/services/calendar/calendar.ts +56 -34
  92. package/services/centrum/centrum.ts +127 -127
  93. package/services/citizens/citizens.client.ts +0 -13
  94. package/services/citizens/citizens.ts +44 -134
  95. package/services/citizens/labels.client.ts +77 -0
  96. package/services/citizens/labels.ts +455 -0
  97. package/services/completor/completor.ts +36 -16
  98. package/services/documents/approval.client.ts +188 -0
  99. package/services/documents/approval.ts +1776 -0
  100. package/services/documents/documents.ts +164 -186
  101. package/services/documents/forms.client.ts +51 -0
  102. package/services/documents/forms.ts +232 -0
  103. package/services/documents/stamps.client.ts +77 -0
  104. package/services/documents/stamps.ts +481 -0
  105. package/services/documents/stats.client.ts +38 -0
  106. package/services/documents/stats.ts +245 -0
  107. package/services/jobs/conduct.client.ts +30 -3
  108. package/services/jobs/conduct.ts +159 -33
  109. package/services/jobs/jobs.ts +43 -43
  110. package/services/jobs/stats.client.ts +38 -0
  111. package/services/jobs/stats.ts +207 -0
  112. package/services/jobs/timeclock.ts +39 -39
  113. package/services/livemap/livemap.ts +18 -18
  114. package/services/mailer/mailer.ts +78 -78
  115. package/services/notifications/notifications.ts +35 -35
  116. package/services/qualifications/qualifications.ts +81 -46
  117. package/services/settings/accounts.client.ts +23 -10
  118. package/services/settings/accounts.ts +191 -30
  119. package/services/settings/cron.client.ts +13 -0
  120. package/services/settings/cron.ts +118 -5
  121. package/services/settings/laws.ts +1 -1
  122. package/services/settings/settings.ts +73 -52
  123. package/services/settings/system.client.ts +13 -0
  124. package/services/settings/system.ts +115 -15
  125. package/services/stats/stats.client.ts +7 -7
  126. package/services/stats/stats.ts +24 -24
  127. package/services/sync/sync.client.ts +271 -37
  128. package/services/sync/sync.ts +1525 -421
  129. package/services/vehicles/vehicles.ts +8 -8
  130. package/services/wiki/wiki.ts +8 -8
  131. package/svcs.ts +100 -6
  132. package/resources/centrum/attributes.ts +0 -183
  133. package/resources/documents/signoff.ts +0 -55
  134. package/resources/users/labels.ts +0 -160
@@ -11,11 +11,12 @@ import { UnknownFieldHandler } from "@protobuf-ts/runtime";
11
11
  import type { PartialMessage } from "@protobuf-ts/runtime";
12
12
  import { reflectionMergePartial } from "@protobuf-ts/runtime";
13
13
  import { MessageType } from "@protobuf-ts/runtime";
14
- import { Duration } from "../../google/protobuf/duration";
15
14
  import { File } from "../file/file";
16
- import { ExamQuestions } from "./exam";
17
- import { QualificationAccess } from "./access";
18
- import { UserShort } from "../users/users";
15
+ import { ExamQuestions } from "./exam/exam";
16
+ import { QualificationExamSettings } from "./exam/exam";
17
+ import { QualificationExamMode } from "./exam/exam";
18
+ import { QualificationAccess } from "./access/access";
19
+ import { UserShort } from "../users/short/user";
19
20
  import { Content } from "../common/content/content";
20
21
  import { Timestamp } from "../timestamp/timestamp";
21
22
  /**
@@ -79,7 +80,7 @@ export interface Qualification {
79
80
  */
80
81
  creatorId?: number;
81
82
  /**
82
- * @generated from protobuf field: optional resources.users.UserShort creator = 15
83
+ * @generated from protobuf field: optional resources.users.short.UserShort creator = 15
83
84
  */
84
85
  creator?: UserShort;
85
86
  /**
@@ -87,7 +88,7 @@ export interface Qualification {
87
88
  */
88
89
  creatorJob: string;
89
90
  /**
90
- * @generated from protobuf field: resources.qualifications.QualificationAccess access = 17
91
+ * @generated from protobuf field: resources.qualifications.access.QualificationAccess access = 17
91
92
  */
92
93
  access?: QualificationAccess;
93
94
  /**
@@ -103,15 +104,15 @@ export interface Qualification {
103
104
  */
104
105
  discordSettings?: QualificationDiscordSettings;
105
106
  /**
106
- * @generated from protobuf field: resources.qualifications.QualificationExamMode exam_mode = 21
107
+ * @generated from protobuf field: resources.qualifications.exam.QualificationExamMode exam_mode = 21
107
108
  */
108
109
  examMode: QualificationExamMode;
109
110
  /**
110
- * @generated from protobuf field: optional resources.qualifications.QualificationExamSettings exam_settings = 22
111
+ * @generated from protobuf field: optional resources.qualifications.exam.QualificationExamSettings exam_settings = 22
111
112
  */
112
113
  examSettings?: QualificationExamSettings;
113
114
  /**
114
- * @generated from protobuf field: optional resources.qualifications.ExamQuestions exam = 23
115
+ * @generated from protobuf field: optional resources.qualifications.exam.ExamQuestions exam = 23
115
116
  */
116
117
  exam?: ExamQuestions;
117
118
  /**
@@ -192,7 +193,7 @@ export interface QualificationShort {
192
193
  */
193
194
  creatorId?: number;
194
195
  /**
195
- * @generated from protobuf field: optional resources.users.UserShort creator = 15
196
+ * @generated from protobuf field: optional resources.users.short.UserShort creator = 15
196
197
  */
197
198
  creator?: UserShort;
198
199
  /**
@@ -204,11 +205,11 @@ export interface QualificationShort {
204
205
  */
205
206
  requirements: QualificationRequirement[];
206
207
  /**
207
- * @generated from protobuf field: resources.qualifications.QualificationExamMode exam_mode = 21
208
+ * @generated from protobuf field: resources.qualifications.exam.QualificationExamMode exam_mode = 21
208
209
  */
209
210
  examMode: QualificationExamMode;
210
211
  /**
211
- * @generated from protobuf field: optional resources.qualifications.QualificationExamSettings exam_settings = 22
212
+ * @generated from protobuf field: optional resources.qualifications.exam.QualificationExamSettings exam_settings = 22
212
213
  */
213
214
  examSettings?: QualificationExamSettings;
214
215
  /**
@@ -254,27 +255,6 @@ export interface QualificationDiscordSettings {
254
255
  */
255
256
  roleFormat?: string;
256
257
  }
257
- /**
258
- * @generated from protobuf message resources.qualifications.QualificationExamSettings
259
- */
260
- export interface QualificationExamSettings {
261
- /**
262
- * @generated from protobuf field: google.protobuf.Duration time = 1
263
- */
264
- time?: Duration;
265
- /**
266
- * @generated from protobuf field: bool auto_grade = 2
267
- */
268
- autoGrade: boolean;
269
- /**
270
- * @generated from protobuf field: resources.qualifications.AutoGradeMode auto_grade_mode = 3
271
- */
272
- autoGradeMode: AutoGradeMode;
273
- /**
274
- * @generated from protobuf field: int32 minimum_points = 4
275
- */
276
- minimumPoints: number;
277
- }
278
258
  /**
279
259
  * @generated from protobuf message resources.qualifications.QualificationRequest
280
260
  */
@@ -300,7 +280,7 @@ export interface QualificationRequest {
300
280
  */
301
281
  userId: number;
302
282
  /**
303
- * @generated from protobuf field: resources.users.UserShort user = 6
283
+ * @generated from protobuf field: resources.users.short.UserShort user = 6
304
284
  */
305
285
  user?: UserShort;
306
286
  /**
@@ -324,7 +304,7 @@ export interface QualificationRequest {
324
304
  */
325
305
  approverId?: number;
326
306
  /**
327
- * @generated from protobuf field: optional resources.users.UserShort approver = 12
307
+ * @generated from protobuf field: optional resources.users.short.UserShort approver = 12
328
308
  */
329
309
  approver?: UserShort;
330
310
  /**
@@ -361,7 +341,7 @@ export interface QualificationResult {
361
341
  */
362
342
  userId: number;
363
343
  /**
364
- * @generated from protobuf field: resources.users.UserShort user = 7
344
+ * @generated from protobuf field: resources.users.short.UserShort user = 7
365
345
  */
366
346
  user?: UserShort;
367
347
  /**
@@ -381,7 +361,7 @@ export interface QualificationResult {
381
361
  */
382
362
  creatorId: number;
383
363
  /**
384
- * @generated from protobuf field: resources.users.UserShort creator = 12
364
+ * @generated from protobuf field: resources.users.short.UserShort creator = 12
385
365
  */
386
366
  creator?: UserShort;
387
367
  /**
@@ -389,44 +369,6 @@ export interface QualificationResult {
389
369
  */
390
370
  creatorJob: string;
391
371
  }
392
- /**
393
- * @generated from protobuf enum resources.qualifications.QualificationExamMode
394
- */
395
- export enum QualificationExamMode {
396
- /**
397
- * @generated from protobuf enum value: QUALIFICATION_EXAM_MODE_UNSPECIFIED = 0;
398
- */
399
- UNSPECIFIED = 0,
400
- /**
401
- * @generated from protobuf enum value: QUALIFICATION_EXAM_MODE_DISABLED = 1;
402
- */
403
- DISABLED = 1,
404
- /**
405
- * @generated from protobuf enum value: QUALIFICATION_EXAM_MODE_REQUEST_NEEDED = 2;
406
- */
407
- REQUEST_NEEDED = 2,
408
- /**
409
- * @generated from protobuf enum value: QUALIFICATION_EXAM_MODE_ENABLED = 3;
410
- */
411
- ENABLED = 3
412
- }
413
- /**
414
- * @generated from protobuf enum resources.qualifications.AutoGradeMode
415
- */
416
- export enum AutoGradeMode {
417
- /**
418
- * @generated from protobuf enum value: AUTO_GRADE_MODE_UNSPECIFIED = 0;
419
- */
420
- UNSPECIFIED = 0,
421
- /**
422
- * @generated from protobuf enum value: AUTO_GRADE_MODE_STRICT = 1;
423
- */
424
- STRICT = 1,
425
- /**
426
- * @generated from protobuf enum value: AUTO_GRADE_MODE_PARTIAL_CREDIT = 2;
427
- */
428
- PARTIAL_CREDIT = 2
429
- }
430
372
  /**
431
373
  * @generated from protobuf enum resources.qualifications.RequestStatus
432
374
  */
@@ -494,9 +436,9 @@ class Qualification$Type extends MessageType<Qualification> {
494
436
  { no: 7, name: "closed", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
495
437
  { no: 8, name: "draft", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
496
438
  { no: 9, name: "public", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
497
- { no: 10, name: "abbreviation", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "20" } }, "codegen.sanitizer.sanitizer": { enabled: true, method: "StripTags" } } },
439
+ { no: 10, name: "abbreviation", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "20" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
498
440
  { no: 11, name: "title", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "3", maxLen: "1024" } }, "codegen.sanitizer.sanitizer": { enabled: true } } },
499
- { no: 12, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "512" } }, "codegen.sanitizer.sanitizer": { enabled: true, method: "StripTags" } } },
441
+ { no: 12, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "512" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
500
442
  { no: 13, name: "content", kind: "message", T: () => Content },
501
443
  { no: 14, name: "creator_id", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gt: 0 } } } },
502
444
  { no: 15, name: "creator", kind: "message", T: () => UserShort, options: { "tagger.tags": "alias:\"creator\"" } },
@@ -505,13 +447,13 @@ class Qualification$Type extends MessageType<Qualification> {
505
447
  { no: 18, name: "requirements", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => QualificationRequirement },
506
448
  { no: 19, name: "discord_sync_enabled", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
507
449
  { no: 20, name: "discord_settings", kind: "message", T: () => QualificationDiscordSettings },
508
- { no: 21, name: "exam_mode", kind: "enum", T: () => ["resources.qualifications.QualificationExamMode", QualificationExamMode, "QUALIFICATION_EXAM_MODE_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
450
+ { no: 21, name: "exam_mode", kind: "enum", T: () => ["resources.qualifications.exam.QualificationExamMode", QualificationExamMode, "QUALIFICATION_EXAM_MODE_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
509
451
  { no: 22, name: "exam_settings", kind: "message", T: () => QualificationExamSettings },
510
452
  { no: 23, name: "exam", kind: "message", T: () => ExamQuestions },
511
453
  { no: 24, name: "result", kind: "message", T: () => QualificationResult },
512
454
  { no: 25, name: "request", kind: "message", T: () => QualificationRequest },
513
455
  { no: 26, name: "label_sync_enabled", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
514
- { no: 27, name: "label_sync_format", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "128" } }, "codegen.sanitizer.sanitizer": { enabled: true, method: "StripTags" } } },
456
+ { no: 27, name: "label_sync_format", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "128" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
515
457
  { no: 28, name: "files", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => File, options: { "tagger.tags": "alias:\"files\"" } }
516
458
  ]);
517
459
  }
@@ -582,13 +524,13 @@ class Qualification$Type extends MessageType<Qualification> {
582
524
  case /* optional int32 creator_id */ 14:
583
525
  message.creatorId = reader.int32();
584
526
  break;
585
- case /* optional resources.users.UserShort creator */ 15:
527
+ case /* optional resources.users.short.UserShort creator */ 15:
586
528
  message.creator = UserShort.internalBinaryRead(reader, reader.uint32(), options, message.creator);
587
529
  break;
588
530
  case /* string creator_job */ 16:
589
531
  message.creatorJob = reader.string();
590
532
  break;
591
- case /* resources.qualifications.QualificationAccess access */ 17:
533
+ case /* resources.qualifications.access.QualificationAccess access */ 17:
592
534
  message.access = QualificationAccess.internalBinaryRead(reader, reader.uint32(), options, message.access);
593
535
  break;
594
536
  case /* repeated resources.qualifications.QualificationRequirement requirements */ 18:
@@ -600,13 +542,13 @@ class Qualification$Type extends MessageType<Qualification> {
600
542
  case /* optional resources.qualifications.QualificationDiscordSettings discord_settings */ 20:
601
543
  message.discordSettings = QualificationDiscordSettings.internalBinaryRead(reader, reader.uint32(), options, message.discordSettings);
602
544
  break;
603
- case /* resources.qualifications.QualificationExamMode exam_mode */ 21:
545
+ case /* resources.qualifications.exam.QualificationExamMode exam_mode */ 21:
604
546
  message.examMode = reader.int32();
605
547
  break;
606
- case /* optional resources.qualifications.QualificationExamSettings exam_settings */ 22:
548
+ case /* optional resources.qualifications.exam.QualificationExamSettings exam_settings */ 22:
607
549
  message.examSettings = QualificationExamSettings.internalBinaryRead(reader, reader.uint32(), options, message.examSettings);
608
550
  break;
609
- case /* optional resources.qualifications.ExamQuestions exam */ 23:
551
+ case /* optional resources.qualifications.exam.ExamQuestions exam */ 23:
610
552
  message.exam = ExamQuestions.internalBinaryRead(reader, reader.uint32(), options, message.exam);
611
553
  break;
612
554
  case /* optional resources.qualifications.QualificationResult result */ 24:
@@ -678,13 +620,13 @@ class Qualification$Type extends MessageType<Qualification> {
678
620
  /* optional int32 creator_id = 14; */
679
621
  if (message.creatorId !== undefined)
680
622
  writer.tag(14, WireType.Varint).int32(message.creatorId);
681
- /* optional resources.users.UserShort creator = 15; */
623
+ /* optional resources.users.short.UserShort creator = 15; */
682
624
  if (message.creator)
683
625
  UserShort.internalBinaryWrite(message.creator, writer.tag(15, WireType.LengthDelimited).fork(), options).join();
684
626
  /* string creator_job = 16; */
685
627
  if (message.creatorJob !== "")
686
628
  writer.tag(16, WireType.LengthDelimited).string(message.creatorJob);
687
- /* resources.qualifications.QualificationAccess access = 17; */
629
+ /* resources.qualifications.access.QualificationAccess access = 17; */
688
630
  if (message.access)
689
631
  QualificationAccess.internalBinaryWrite(message.access, writer.tag(17, WireType.LengthDelimited).fork(), options).join();
690
632
  /* repeated resources.qualifications.QualificationRequirement requirements = 18; */
@@ -696,13 +638,13 @@ class Qualification$Type extends MessageType<Qualification> {
696
638
  /* optional resources.qualifications.QualificationDiscordSettings discord_settings = 20; */
697
639
  if (message.discordSettings)
698
640
  QualificationDiscordSettings.internalBinaryWrite(message.discordSettings, writer.tag(20, WireType.LengthDelimited).fork(), options).join();
699
- /* resources.qualifications.QualificationExamMode exam_mode = 21; */
641
+ /* resources.qualifications.exam.QualificationExamMode exam_mode = 21; */
700
642
  if (message.examMode !== 0)
701
643
  writer.tag(21, WireType.Varint).int32(message.examMode);
702
- /* optional resources.qualifications.QualificationExamSettings exam_settings = 22; */
644
+ /* optional resources.qualifications.exam.QualificationExamSettings exam_settings = 22; */
703
645
  if (message.examSettings)
704
646
  QualificationExamSettings.internalBinaryWrite(message.examSettings, writer.tag(22, WireType.LengthDelimited).fork(), options).join();
705
- /* optional resources.qualifications.ExamQuestions exam = 23; */
647
+ /* optional resources.qualifications.exam.ExamQuestions exam = 23; */
706
648
  if (message.exam)
707
649
  ExamQuestions.internalBinaryWrite(message.exam, writer.tag(23, WireType.LengthDelimited).fork(), options).join();
708
650
  /* optional resources.qualifications.QualificationResult result = 24; */
@@ -743,14 +685,14 @@ class QualificationShort$Type extends MessageType<QualificationShort> {
743
685
  { no: 7, name: "closed", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
744
686
  { no: 8, name: "draft", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
745
687
  { no: 9, name: "public", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
746
- { no: 10, name: "abbreviation", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "20" } }, "codegen.sanitizer.sanitizer": { enabled: true, method: "StripTags" } } },
688
+ { no: 10, name: "abbreviation", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "20" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
747
689
  { no: 11, name: "title", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { minLen: "3", maxLen: "1024" } }, "codegen.sanitizer.sanitizer": { enabled: true } } },
748
- { no: 12, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "512" } }, "codegen.sanitizer.sanitizer": { enabled: true, method: "StripTags" } } },
690
+ { no: 12, name: "description", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "512" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
749
691
  { no: 14, name: "creator_id", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gt: 0 } } } },
750
692
  { no: 15, name: "creator", kind: "message", T: () => UserShort, options: { "tagger.tags": "alias:\"creator\"" } },
751
693
  { no: 16, name: "creator_job", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "20" } } } },
752
694
  { no: 18, name: "requirements", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => QualificationRequirement },
753
- { no: 21, name: "exam_mode", kind: "enum", T: () => ["resources.qualifications.QualificationExamMode", QualificationExamMode, "QUALIFICATION_EXAM_MODE_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
695
+ { no: 21, name: "exam_mode", kind: "enum", T: () => ["resources.qualifications.exam.QualificationExamMode", QualificationExamMode, "QUALIFICATION_EXAM_MODE_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
754
696
  { no: 22, name: "exam_settings", kind: "message", T: () => QualificationExamSettings },
755
697
  { no: 24, name: "result", kind: "message", T: () => QualificationResult }
756
698
  ]);
@@ -816,7 +758,7 @@ class QualificationShort$Type extends MessageType<QualificationShort> {
816
758
  case /* optional int32 creator_id */ 14:
817
759
  message.creatorId = reader.int32();
818
760
  break;
819
- case /* optional resources.users.UserShort creator */ 15:
761
+ case /* optional resources.users.short.UserShort creator */ 15:
820
762
  message.creator = UserShort.internalBinaryRead(reader, reader.uint32(), options, message.creator);
821
763
  break;
822
764
  case /* string creator_job */ 16:
@@ -825,10 +767,10 @@ class QualificationShort$Type extends MessageType<QualificationShort> {
825
767
  case /* repeated resources.qualifications.QualificationRequirement requirements */ 18:
826
768
  message.requirements.push(QualificationRequirement.internalBinaryRead(reader, reader.uint32(), options));
827
769
  break;
828
- case /* resources.qualifications.QualificationExamMode exam_mode */ 21:
770
+ case /* resources.qualifications.exam.QualificationExamMode exam_mode */ 21:
829
771
  message.examMode = reader.int32();
830
772
  break;
831
- case /* optional resources.qualifications.QualificationExamSettings exam_settings */ 22:
773
+ case /* optional resources.qualifications.exam.QualificationExamSettings exam_settings */ 22:
832
774
  message.examSettings = QualificationExamSettings.internalBinaryRead(reader, reader.uint32(), options, message.examSettings);
833
775
  break;
834
776
  case /* optional resources.qualifications.QualificationResult result */ 24:
@@ -885,7 +827,7 @@ class QualificationShort$Type extends MessageType<QualificationShort> {
885
827
  /* optional int32 creator_id = 14; */
886
828
  if (message.creatorId !== undefined)
887
829
  writer.tag(14, WireType.Varint).int32(message.creatorId);
888
- /* optional resources.users.UserShort creator = 15; */
830
+ /* optional resources.users.short.UserShort creator = 15; */
889
831
  if (message.creator)
890
832
  UserShort.internalBinaryWrite(message.creator, writer.tag(15, WireType.LengthDelimited).fork(), options).join();
891
833
  /* string creator_job = 16; */
@@ -894,10 +836,10 @@ class QualificationShort$Type extends MessageType<QualificationShort> {
894
836
  /* repeated resources.qualifications.QualificationRequirement requirements = 18; */
895
837
  for (let i = 0; i < message.requirements.length; i++)
896
838
  QualificationRequirement.internalBinaryWrite(message.requirements[i], writer.tag(18, WireType.LengthDelimited).fork(), options).join();
897
- /* resources.qualifications.QualificationExamMode exam_mode = 21; */
839
+ /* resources.qualifications.exam.QualificationExamMode exam_mode = 21; */
898
840
  if (message.examMode !== 0)
899
841
  writer.tag(21, WireType.Varint).int32(message.examMode);
900
- /* optional resources.qualifications.QualificationExamSettings exam_settings = 22; */
842
+ /* optional resources.qualifications.exam.QualificationExamSettings exam_settings = 22; */
901
843
  if (message.examSettings)
902
844
  QualificationExamSettings.internalBinaryWrite(message.examSettings, writer.tag(22, WireType.LengthDelimited).fork(), options).join();
903
845
  /* optional resources.qualifications.QualificationResult result = 24; */
@@ -1044,76 +986,6 @@ class QualificationDiscordSettings$Type extends MessageType<QualificationDiscord
1044
986
  */
1045
987
  export const QualificationDiscordSettings = new QualificationDiscordSettings$Type();
1046
988
  // @generated message type with reflection information, may provide speed optimized methods
1047
- class QualificationExamSettings$Type extends MessageType<QualificationExamSettings> {
1048
- constructor() {
1049
- super("resources.qualifications.QualificationExamSettings", [
1050
- { no: 1, name: "time", kind: "message", T: () => Duration, options: { "buf.validate.field": { required: true, duration: { lt: { seconds: "1036800" }, gte: { seconds: "300" } } } } },
1051
- { no: 2, name: "auto_grade", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
1052
- { no: 3, name: "auto_grade_mode", kind: "enum", T: () => ["resources.qualifications.AutoGradeMode", AutoGradeMode, "AUTO_GRADE_MODE_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
1053
- { no: 4, name: "minimum_points", kind: "scalar", T: 5 /*ScalarType.INT32*/ }
1054
- ], { "codegen.dbscanner.dbscanner": { enabled: true } });
1055
- }
1056
- create(value?: PartialMessage<QualificationExamSettings>): QualificationExamSettings {
1057
- const message = globalThis.Object.create((this.messagePrototype!));
1058
- message.autoGrade = false;
1059
- message.autoGradeMode = 0;
1060
- message.minimumPoints = 0;
1061
- if (value !== undefined)
1062
- reflectionMergePartial<QualificationExamSettings>(this, message, value);
1063
- return message;
1064
- }
1065
- internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: QualificationExamSettings): QualificationExamSettings {
1066
- let message = target ?? this.create(), end = reader.pos + length;
1067
- while (reader.pos < end) {
1068
- let [fieldNo, wireType] = reader.tag();
1069
- switch (fieldNo) {
1070
- case /* google.protobuf.Duration time */ 1:
1071
- message.time = Duration.internalBinaryRead(reader, reader.uint32(), options, message.time);
1072
- break;
1073
- case /* bool auto_grade */ 2:
1074
- message.autoGrade = reader.bool();
1075
- break;
1076
- case /* resources.qualifications.AutoGradeMode auto_grade_mode */ 3:
1077
- message.autoGradeMode = reader.int32();
1078
- break;
1079
- case /* int32 minimum_points */ 4:
1080
- message.minimumPoints = reader.int32();
1081
- break;
1082
- default:
1083
- let u = options.readUnknownField;
1084
- if (u === "throw")
1085
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1086
- let d = reader.skip(wireType);
1087
- if (u !== false)
1088
- (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1089
- }
1090
- }
1091
- return message;
1092
- }
1093
- internalBinaryWrite(message: QualificationExamSettings, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1094
- /* google.protobuf.Duration time = 1; */
1095
- if (message.time)
1096
- Duration.internalBinaryWrite(message.time, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
1097
- /* bool auto_grade = 2; */
1098
- if (message.autoGrade !== false)
1099
- writer.tag(2, WireType.Varint).bool(message.autoGrade);
1100
- /* resources.qualifications.AutoGradeMode auto_grade_mode = 3; */
1101
- if (message.autoGradeMode !== 0)
1102
- writer.tag(3, WireType.Varint).int32(message.autoGradeMode);
1103
- /* int32 minimum_points = 4; */
1104
- if (message.minimumPoints !== 0)
1105
- writer.tag(4, WireType.Varint).int32(message.minimumPoints);
1106
- let u = options.writeUnknownFields;
1107
- if (u !== false)
1108
- (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1109
- return writer;
1110
- }
1111
- }
1112
- /**
1113
- * @generated MessageType for protobuf message resources.qualifications.QualificationExamSettings
1114
- */
1115
- export const QualificationExamSettings = new QualificationExamSettings$Type();
1116
- // @generated message type with reflection information, may provide speed optimized methods
1117
989
  class QualificationRequest$Type extends MessageType<QualificationRequest> {
1118
990
  constructor() {
1119
991
  super("resources.qualifications.QualificationRequest", [
@@ -1123,10 +995,10 @@ class QualificationRequest$Type extends MessageType<QualificationRequest> {
1123
995
  { no: 4, name: "qualification", kind: "message", T: () => QualificationShort },
1124
996
  { no: 5, name: "user_id", kind: "scalar", T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gte: 0 } }, "tagger.tags": "sql:\"primary_key\"" } },
1125
997
  { no: 6, name: "user", kind: "message", T: () => UserShort, options: { "tagger.tags": "alias:\"user\"" } },
1126
- { no: 7, name: "user_comment", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "512" } }, "codegen.sanitizer.sanitizer": { enabled: true, method: "StripTags" } } },
998
+ { no: 7, name: "user_comment", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "512" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
1127
999
  { no: 8, name: "status", kind: "enum", opt: true, T: () => ["resources.qualifications.RequestStatus", RequestStatus, "REQUEST_STATUS_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
1128
1000
  { no: 9, name: "approved_at", kind: "message", T: () => Timestamp },
1129
- { no: 10, name: "approver_comment", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "512" } }, "codegen.sanitizer.sanitizer": { enabled: true, method: "StripTags" } } },
1001
+ { no: 10, name: "approver_comment", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "512" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
1130
1002
  { no: 11, name: "approver_id", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gt: 0 } } } },
1131
1003
  { no: 12, name: "approver", kind: "message", T: () => UserShort, options: { "tagger.tags": "alias:\"approver\"" } },
1132
1004
  { no: 13, name: "approver_job", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }
@@ -1160,7 +1032,7 @@ class QualificationRequest$Type extends MessageType<QualificationRequest> {
1160
1032
  case /* int32 user_id */ 5:
1161
1033
  message.userId = reader.int32();
1162
1034
  break;
1163
- case /* resources.users.UserShort user */ 6:
1035
+ case /* resources.users.short.UserShort user */ 6:
1164
1036
  message.user = UserShort.internalBinaryRead(reader, reader.uint32(), options, message.user);
1165
1037
  break;
1166
1038
  case /* optional string user_comment */ 7:
@@ -1178,7 +1050,7 @@ class QualificationRequest$Type extends MessageType<QualificationRequest> {
1178
1050
  case /* optional int32 approver_id */ 11:
1179
1051
  message.approverId = reader.int32();
1180
1052
  break;
1181
- case /* optional resources.users.UserShort approver */ 12:
1053
+ case /* optional resources.users.short.UserShort approver */ 12:
1182
1054
  message.approver = UserShort.internalBinaryRead(reader, reader.uint32(), options, message.approver);
1183
1055
  break;
1184
1056
  case /* optional string approver_job */ 13:
@@ -1211,7 +1083,7 @@ class QualificationRequest$Type extends MessageType<QualificationRequest> {
1211
1083
  /* int32 user_id = 5; */
1212
1084
  if (message.userId !== 0)
1213
1085
  writer.tag(5, WireType.Varint).int32(message.userId);
1214
- /* resources.users.UserShort user = 6; */
1086
+ /* resources.users.short.UserShort user = 6; */
1215
1087
  if (message.user)
1216
1088
  UserShort.internalBinaryWrite(message.user, writer.tag(6, WireType.LengthDelimited).fork(), options).join();
1217
1089
  /* optional string user_comment = 7; */
@@ -1229,7 +1101,7 @@ class QualificationRequest$Type extends MessageType<QualificationRequest> {
1229
1101
  /* optional int32 approver_id = 11; */
1230
1102
  if (message.approverId !== undefined)
1231
1103
  writer.tag(11, WireType.Varint).int32(message.approverId);
1232
- /* optional resources.users.UserShort approver = 12; */
1104
+ /* optional resources.users.short.UserShort approver = 12; */
1233
1105
  if (message.approver)
1234
1106
  UserShort.internalBinaryWrite(message.approver, writer.tag(12, WireType.LengthDelimited).fork(), options).join();
1235
1107
  /* optional string approver_job = 13; */
@@ -1258,7 +1130,7 @@ class QualificationResult$Type extends MessageType<QualificationResult> {
1258
1130
  { no: 7, name: "user", kind: "message", T: () => UserShort, options: { "tagger.tags": "alias:\"user\"" } },
1259
1131
  { no: 8, name: "status", kind: "enum", T: () => ["resources.qualifications.ResultStatus", ResultStatus, "RESULT_STATUS_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
1260
1132
  { no: 9, name: "score", kind: "scalar", opt: true, T: 2 /*ScalarType.FLOAT*/, options: { "buf.validate.field": { float: { lte: 1000, gte: 0 } } } },
1261
- { no: 10, name: "summary", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "512" } }, "codegen.sanitizer.sanitizer": { enabled: true, method: "StripTags" } } },
1133
+ { no: 10, name: "summary", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "512" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
1262
1134
  { no: 11, name: "creator_id", kind: "scalar", T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gt: 0 } } } },
1263
1135
  { no: 12, name: "creator", kind: "message", T: () => UserShort, options: { "tagger.tags": "alias:\"creator\"" } },
1264
1136
  { no: 13, name: "creator_job", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "20" } } } }
@@ -1300,7 +1172,7 @@ class QualificationResult$Type extends MessageType<QualificationResult> {
1300
1172
  case /* int32 user_id */ 6:
1301
1173
  message.userId = reader.int32();
1302
1174
  break;
1303
- case /* resources.users.UserShort user */ 7:
1175
+ case /* resources.users.short.UserShort user */ 7:
1304
1176
  message.user = UserShort.internalBinaryRead(reader, reader.uint32(), options, message.user);
1305
1177
  break;
1306
1178
  case /* resources.qualifications.ResultStatus status */ 8:
@@ -1315,7 +1187,7 @@ class QualificationResult$Type extends MessageType<QualificationResult> {
1315
1187
  case /* int32 creator_id */ 11:
1316
1188
  message.creatorId = reader.int32();
1317
1189
  break;
1318
- case /* resources.users.UserShort creator */ 12:
1190
+ case /* resources.users.short.UserShort creator */ 12:
1319
1191
  message.creator = UserShort.internalBinaryRead(reader, reader.uint32(), options, message.creator);
1320
1192
  break;
1321
1193
  case /* string creator_job */ 13:
@@ -1351,7 +1223,7 @@ class QualificationResult$Type extends MessageType<QualificationResult> {
1351
1223
  /* int32 user_id = 6; */
1352
1224
  if (message.userId !== 0)
1353
1225
  writer.tag(6, WireType.Varint).int32(message.userId);
1354
- /* resources.users.UserShort user = 7; */
1226
+ /* resources.users.short.UserShort user = 7; */
1355
1227
  if (message.user)
1356
1228
  UserShort.internalBinaryWrite(message.user, writer.tag(7, WireType.LengthDelimited).fork(), options).join();
1357
1229
  /* resources.qualifications.ResultStatus status = 8; */
@@ -1366,7 +1238,7 @@ class QualificationResult$Type extends MessageType<QualificationResult> {
1366
1238
  /* int32 creator_id = 11; */
1367
1239
  if (message.creatorId !== 0)
1368
1240
  writer.tag(11, WireType.Varint).int32(message.creatorId);
1369
- /* resources.users.UserShort creator = 12; */
1241
+ /* resources.users.short.UserShort creator = 12; */
1370
1242
  if (message.creator)
1371
1243
  UserShort.internalBinaryWrite(message.creator, writer.tag(12, WireType.LengthDelimited).fork(), options).join();
1372
1244
  /* string creator_job = 13; */
@@ -45,10 +45,10 @@ export interface BannerMessage {
45
45
  class BannerMessage$Type extends MessageType<BannerMessage> {
46
46
  constructor() {
47
47
  super("resources.settings.BannerMessage", [
48
- { no: 1, name: "id", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "64" } }, "codegen.sanitizer.sanitizer": { enabled: true, method: "StripTags" } } },
48
+ { no: 1, name: "id", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "64" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
49
49
  { no: 2, name: "title", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { ignore: "IGNORE_IF_ZERO_VALUE", string: { minLen: "3", maxLen: "512" } }, "codegen.sanitizer.sanitizer": { enabled: true } } },
50
- { no: 3, name: "icon", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "128", suffix: "Icon" } }, "codegen.sanitizer.sanitizer": { enabled: true, method: "StripTags" } } },
51
- { no: 4, name: "color", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "12" } }, "codegen.sanitizer.sanitizer": { enabled: true, method: "StripTags" } } },
50
+ { no: 3, name: "icon", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "128" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
51
+ { no: 4, name: "color", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "12" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
52
52
  { no: 5, name: "created_at", kind: "message", T: () => Timestamp, options: { "tagger.tags": "json:\"createdAt\"" } },
53
53
  { no: 6, name: "expires_at", kind: "message", T: () => Timestamp, options: { "tagger.tags": "json:\"expiresAt\"" } }
54
54
  ]);