@fivenet-app/gen 2026.5.1 → 2026.7.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 (74) hide show
  1. package/clients.ts +6 -0
  2. package/codegen/perms/perms.ts +14 -2
  3. package/codegen/sanitizer/sanitizer.ts +6 -0
  4. package/google/protobuf/descriptor.ts +11 -3
  5. package/google/protobuf/timestamp.ts +7 -6
  6. package/package.json +1 -1
  7. package/perms.ts +343 -3
  8. package/resources/access/access.ts +481 -0
  9. package/resources/calendar/access/access.ts +0 -330
  10. package/resources/calendar/calendar.ts +307 -25
  11. package/resources/calendar/entries/entries.ts +204 -11
  12. package/resources/centrum/units/access/access.ts +0 -373
  13. package/resources/centrum/units/units.ts +20 -8
  14. package/resources/citizens/labels/access.ts +0 -191
  15. package/resources/citizens/labels/labels.ts +20 -8
  16. package/resources/common/content/diff_activity.ts +1 -1
  17. package/resources/cron/cron.ts +1 -1
  18. package/resources/documents/access/access.ts +0 -329
  19. package/resources/documents/activity/activity.ts +49 -45
  20. package/resources/documents/documents.ts +1 -1
  21. package/resources/documents/requests/requests.ts +1 -1
  22. package/resources/documents/stamps/stamp.ts +40 -210
  23. package/resources/documents/templates/templates.ts +158 -318
  24. package/resources/jobs/colleagues/activity/activity.ts +1 -1
  25. package/resources/jobs/conduct/conduct.ts +2 -2
  26. package/resources/jobs/jobs.ts +22 -0
  27. package/resources/jobs/labels/labels.ts +9 -9
  28. package/resources/laws/laws.ts +24 -0
  29. package/resources/livemap/markers/marker_marker.ts +311 -4
  30. package/resources/mailer/access/access.ts +0 -457
  31. package/resources/mailer/emails/email.ts +4 -4
  32. package/resources/notifications/events/events.ts +18 -1
  33. package/resources/qualifications/access/access.ts +0 -248
  34. package/resources/qualifications/qualifications.ts +9 -9
  35. package/resources/settings/config.ts +53 -5
  36. package/resources/settings/data.ts +1 -1
  37. package/resources/stats/stats.ts +32 -20
  38. package/resources/sync/data/data.ts +13 -1
  39. package/resources/userinfo/userinfo.ts +202 -51
  40. package/resources/users/activity/activity.ts +1 -1
  41. package/resources/wiki/access/access.ts +0 -330
  42. package/resources/wiki/activity/activity.ts +45 -45
  43. package/resources/wiki/page.ts +9 -9
  44. package/services/calendar/calendar.ts +1 -1
  45. package/services/calendar/entries.ts +12 -1
  46. package/services/centrum/dispatches.ts +27 -7
  47. package/services/centrum/units.client.ts +15 -2
  48. package/services/centrum/units.ts +231 -123
  49. package/services/citizens/citizens.ts +1 -1
  50. package/services/citizens/labels.client.ts +7 -20
  51. package/services/citizens/labels.ts +35 -183
  52. package/services/documents/approval.ts +15 -4
  53. package/services/documents/collab.ts +1 -1
  54. package/services/documents/documents.ts +38 -38
  55. package/services/documents/stats.ts +14 -2
  56. package/services/filestore/filestore.ts +4 -4
  57. package/services/jobs/colleagues.ts +3 -3
  58. package/services/jobs/conduct.ts +2 -2
  59. package/services/jobs/groups.client.ts +22 -0
  60. package/services/jobs/groups.ts +9 -0
  61. package/services/jobs/timeclock.ts +2 -2
  62. package/services/mailer/thread.ts +2 -2
  63. package/services/qualifications/qualifications.ts +52 -34
  64. package/services/settings/accounts.ts +5 -5
  65. package/services/settings/config.ts +2 -2
  66. package/services/settings/cron.ts +2 -2
  67. package/services/settings/laws.client.ts +28 -2
  68. package/services/settings/laws.ts +229 -1
  69. package/services/settings/system.ts +6 -6
  70. package/services/sync/sync.client.ts +42 -14
  71. package/services/sync/sync.ts +162 -13
  72. package/services/wiki/wiki.client.ts +15 -2
  73. package/services/wiki/wiki.ts +122 -0
  74. package/svcs.ts +18 -2
@@ -57,6 +57,27 @@ export interface UserInfo {
57
57
  * @generated from protobuf field: bool superuser = 10
58
58
  */
59
59
  superuser: boolean;
60
+ /**
61
+ * @generated from protobuf field: bool can_be_config_admin = 12
62
+ */
63
+ canBeConfigAdmin: boolean;
64
+ /**
65
+ * @generated from protobuf field: optional resources.userinfo.OriginalJob original_job = 11
66
+ */
67
+ originalJob?: OriginalJob;
68
+ }
69
+ /**
70
+ * @generated from protobuf message resources.userinfo.OriginalJob
71
+ */
72
+ export interface OriginalJob {
73
+ /**
74
+ * @generated from protobuf field: string job = 1
75
+ */
76
+ job: string;
77
+ /**
78
+ * @generated from protobuf field: int32 job_grade = 2
79
+ */
80
+ jobGrade: number;
60
81
  }
61
82
  /**
62
83
  * PollReq: published to `userinfo.poll.request` when an active user connects or requests a refresh.
@@ -78,7 +99,7 @@ export interface PollReq {
78
99
  userId: number;
79
100
  }
80
101
  /**
81
- * UserInfoChanged used to signal Job or JobGrade changes.
102
+ * UserInfoChanged used to signal live primary job or job grade changes.
82
103
  *
83
104
  * @generated from protobuf message resources.userinfo.UserInfoChanged
84
105
  */
@@ -101,12 +122,6 @@ export interface UserInfoChanged {
101
122
  * @generated from protobuf field: resources.timestamp.Timestamp changed_at = 3
102
123
  */
103
124
  changedAt?: Timestamp;
104
- /**
105
- * Previous job title
106
- *
107
- * @generated from protobuf field: string old_job = 4
108
- */
109
- oldJob: string;
110
125
  /**
111
126
  * New job title
112
127
  *
@@ -117,12 +132,6 @@ export interface UserInfoChanged {
117
132
  * @generated from protobuf field: optional string new_job_label = 6
118
133
  */
119
134
  newJobLabel?: string;
120
- /**
121
- * Previous job grade
122
- *
123
- * @generated from protobuf field: int32 old_job_grade = 7
124
- */
125
- oldJobGrade: number;
126
135
  /**
127
136
  * New job grade
128
137
  *
@@ -135,18 +144,43 @@ export interface UserInfoChanged {
135
144
  * @generated from protobuf field: optional string new_job_grade_label = 9
136
145
  */
137
146
  newJobGradeLabel?: string;
147
+ }
148
+ /**
149
+ * AccountGroupsChanged used to signal live account group changes.
150
+ *
151
+ * @generated from protobuf message resources.userinfo.AccountGroupsChanged
152
+ */
153
+ export interface AccountGroupsChanged {
154
+ /**
155
+ * The account the user belongs to
156
+ *
157
+ * @generated from protobuf field: int64 account_id = 1
158
+ */
159
+ accountId: number;
160
+ /**
161
+ * Timestamp of when the change was detected
162
+ *
163
+ * @generated from protobuf field: resources.timestamp.Timestamp changed_at = 2
164
+ */
165
+ changedAt?: Timestamp;
138
166
  /**
139
- * Can the user be superuser (by group or license)
167
+ * New account groups
140
168
  *
141
- * @generated from protobuf field: optional bool can_be_superuser = 10
169
+ * @generated from protobuf field: resources.accounts.AccountGroups new_groups = 3
142
170
  */
143
- canBeSuperuser?: boolean;
171
+ newGroups?: AccountGroups;
144
172
  /**
145
- * Superuser state
173
+ * Whether the account can enter superuser mode after the change
146
174
  *
147
- * @generated from protobuf field: optional bool superuser = 11
175
+ * @generated from protobuf field: bool can_be_superuser = 4
148
176
  */
149
- superuser?: boolean;
177
+ canBeSuperuser: boolean;
178
+ /**
179
+ * Whether the account can access config-admin gated screens and RPCs after the change
180
+ *
181
+ * @generated from protobuf field: bool can_be_config_admin = 5
182
+ */
183
+ canBeConfigAdmin: boolean;
150
184
  }
151
185
  // @generated message type with reflection information, may provide speed optimized methods
152
186
  class UserInfo$Type extends MessageType<UserInfo> {
@@ -161,7 +195,9 @@ class UserInfo$Type extends MessageType<UserInfo> {
161
195
  { no: 7, name: "job_grade", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
162
196
  { no: 8, name: "groups", kind: "message", T: () => AccountGroups },
163
197
  { no: 9, name: "can_be_superuser", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
164
- { no: 10, name: "superuser", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
198
+ { no: 10, name: "superuser", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
199
+ { no: 12, name: "can_be_config_admin", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
200
+ { no: 11, name: "original_job", kind: "message", T: () => OriginalJob }
165
201
  ]);
166
202
  }
167
203
  create(value?: PartialMessage<UserInfo>): UserInfo {
@@ -174,6 +210,7 @@ class UserInfo$Type extends MessageType<UserInfo> {
174
210
  message.jobGrade = 0;
175
211
  message.canBeSuperuser = false;
176
212
  message.superuser = false;
213
+ message.canBeConfigAdmin = false;
177
214
  if (value !== undefined)
178
215
  reflectionMergePartial<UserInfo>(this, message, value);
179
216
  return message;
@@ -213,6 +250,12 @@ class UserInfo$Type extends MessageType<UserInfo> {
213
250
  case /* bool superuser */ 10:
214
251
  message.superuser = reader.bool();
215
252
  break;
253
+ case /* bool can_be_config_admin */ 12:
254
+ message.canBeConfigAdmin = reader.bool();
255
+ break;
256
+ case /* optional resources.userinfo.OriginalJob original_job */ 11:
257
+ message.originalJob = OriginalJob.internalBinaryRead(reader, reader.uint32(), options, message.originalJob);
258
+ break;
216
259
  default:
217
260
  let u = options.readUnknownField;
218
261
  if (u === "throw")
@@ -255,6 +298,12 @@ class UserInfo$Type extends MessageType<UserInfo> {
255
298
  /* bool superuser = 10; */
256
299
  if (message.superuser !== false)
257
300
  writer.tag(10, WireType.Varint).bool(message.superuser);
301
+ /* optional resources.userinfo.OriginalJob original_job = 11; */
302
+ if (message.originalJob)
303
+ OriginalJob.internalBinaryWrite(message.originalJob, writer.tag(11, WireType.LengthDelimited).fork(), options).join();
304
+ /* bool can_be_config_admin = 12; */
305
+ if (message.canBeConfigAdmin !== false)
306
+ writer.tag(12, WireType.Varint).bool(message.canBeConfigAdmin);
258
307
  let u = options.writeUnknownFields;
259
308
  if (u !== false)
260
309
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -266,6 +315,61 @@ class UserInfo$Type extends MessageType<UserInfo> {
266
315
  */
267
316
  export const UserInfo = new UserInfo$Type();
268
317
  // @generated message type with reflection information, may provide speed optimized methods
318
+ class OriginalJob$Type extends MessageType<OriginalJob> {
319
+ constructor() {
320
+ super("resources.userinfo.OriginalJob", [
321
+ { no: 1, name: "job", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
322
+ { no: 2, name: "job_grade", kind: "scalar", T: 5 /*ScalarType.INT32*/ }
323
+ ]);
324
+ }
325
+ create(value?: PartialMessage<OriginalJob>): OriginalJob {
326
+ const message = globalThis.Object.create((this.messagePrototype!));
327
+ message.job = "";
328
+ message.jobGrade = 0;
329
+ if (value !== undefined)
330
+ reflectionMergePartial<OriginalJob>(this, message, value);
331
+ return message;
332
+ }
333
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: OriginalJob): OriginalJob {
334
+ let message = target ?? this.create(), end = reader.pos + length;
335
+ while (reader.pos < end) {
336
+ let [fieldNo, wireType] = reader.tag();
337
+ switch (fieldNo) {
338
+ case /* string job */ 1:
339
+ message.job = reader.string();
340
+ break;
341
+ case /* int32 job_grade */ 2:
342
+ message.jobGrade = reader.int32();
343
+ break;
344
+ default:
345
+ let u = options.readUnknownField;
346
+ if (u === "throw")
347
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
348
+ let d = reader.skip(wireType);
349
+ if (u !== false)
350
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
351
+ }
352
+ }
353
+ return message;
354
+ }
355
+ internalBinaryWrite(message: OriginalJob, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
356
+ /* string job = 1; */
357
+ if (message.job !== "")
358
+ writer.tag(1, WireType.LengthDelimited).string(message.job);
359
+ /* int32 job_grade = 2; */
360
+ if (message.jobGrade !== 0)
361
+ writer.tag(2, WireType.Varint).int32(message.jobGrade);
362
+ let u = options.writeUnknownFields;
363
+ if (u !== false)
364
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
365
+ return writer;
366
+ }
367
+ }
368
+ /**
369
+ * @generated MessageType for protobuf message resources.userinfo.OriginalJob
370
+ */
371
+ export const OriginalJob = new OriginalJob$Type();
372
+ // @generated message type with reflection information, may provide speed optimized methods
269
373
  class PollReq$Type extends MessageType<PollReq> {
270
374
  constructor() {
271
375
  super("resources.userinfo.PollReq", [
@@ -327,22 +431,16 @@ class UserInfoChanged$Type extends MessageType<UserInfoChanged> {
327
431
  { no: 1, name: "account_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
328
432
  { no: 2, name: "user_id", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
329
433
  { no: 3, name: "changed_at", kind: "message", T: () => Timestamp },
330
- { no: 4, name: "old_job", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
331
434
  { no: 5, name: "new_job", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
332
435
  { no: 6, name: "new_job_label", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
333
- { no: 7, name: "old_job_grade", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
334
436
  { no: 8, name: "new_job_grade", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/ },
335
- { no: 9, name: "new_job_grade_label", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
336
- { no: 10, name: "can_be_superuser", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
337
- { no: 11, name: "superuser", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }
437
+ { no: 9, name: "new_job_grade_label", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }
338
438
  ]);
339
439
  }
340
440
  create(value?: PartialMessage<UserInfoChanged>): UserInfoChanged {
341
441
  const message = globalThis.Object.create((this.messagePrototype!));
342
442
  message.accountId = 0;
343
443
  message.userId = 0;
344
- message.oldJob = "";
345
- message.oldJobGrade = 0;
346
444
  if (value !== undefined)
347
445
  reflectionMergePartial<UserInfoChanged>(this, message, value);
348
446
  return message;
@@ -361,30 +459,18 @@ class UserInfoChanged$Type extends MessageType<UserInfoChanged> {
361
459
  case /* resources.timestamp.Timestamp changed_at */ 3:
362
460
  message.changedAt = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.changedAt);
363
461
  break;
364
- case /* string old_job */ 4:
365
- message.oldJob = reader.string();
366
- break;
367
462
  case /* optional string new_job */ 5:
368
463
  message.newJob = reader.string();
369
464
  break;
370
465
  case /* optional string new_job_label */ 6:
371
466
  message.newJobLabel = reader.string();
372
467
  break;
373
- case /* int32 old_job_grade */ 7:
374
- message.oldJobGrade = reader.int32();
375
- break;
376
468
  case /* optional int32 new_job_grade */ 8:
377
469
  message.newJobGrade = reader.int32();
378
470
  break;
379
471
  case /* optional string new_job_grade_label */ 9:
380
472
  message.newJobGradeLabel = reader.string();
381
473
  break;
382
- case /* optional bool can_be_superuser */ 10:
383
- message.canBeSuperuser = reader.bool();
384
- break;
385
- case /* optional bool superuser */ 11:
386
- message.superuser = reader.bool();
387
- break;
388
474
  default:
389
475
  let u = options.readUnknownField;
390
476
  if (u === "throw")
@@ -406,30 +492,18 @@ class UserInfoChanged$Type extends MessageType<UserInfoChanged> {
406
492
  /* resources.timestamp.Timestamp changed_at = 3; */
407
493
  if (message.changedAt)
408
494
  Timestamp.internalBinaryWrite(message.changedAt, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
409
- /* string old_job = 4; */
410
- if (message.oldJob !== "")
411
- writer.tag(4, WireType.LengthDelimited).string(message.oldJob);
412
495
  /* optional string new_job = 5; */
413
496
  if (message.newJob !== undefined)
414
497
  writer.tag(5, WireType.LengthDelimited).string(message.newJob);
415
498
  /* optional string new_job_label = 6; */
416
499
  if (message.newJobLabel !== undefined)
417
500
  writer.tag(6, WireType.LengthDelimited).string(message.newJobLabel);
418
- /* int32 old_job_grade = 7; */
419
- if (message.oldJobGrade !== 0)
420
- writer.tag(7, WireType.Varint).int32(message.oldJobGrade);
421
501
  /* optional int32 new_job_grade = 8; */
422
502
  if (message.newJobGrade !== undefined)
423
503
  writer.tag(8, WireType.Varint).int32(message.newJobGrade);
424
504
  /* optional string new_job_grade_label = 9; */
425
505
  if (message.newJobGradeLabel !== undefined)
426
506
  writer.tag(9, WireType.LengthDelimited).string(message.newJobGradeLabel);
427
- /* optional bool can_be_superuser = 10; */
428
- if (message.canBeSuperuser !== undefined)
429
- writer.tag(10, WireType.Varint).bool(message.canBeSuperuser);
430
- /* optional bool superuser = 11; */
431
- if (message.superuser !== undefined)
432
- writer.tag(11, WireType.Varint).bool(message.superuser);
433
507
  let u = options.writeUnknownFields;
434
508
  if (u !== false)
435
509
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -440,3 +514,80 @@ class UserInfoChanged$Type extends MessageType<UserInfoChanged> {
440
514
  * @generated MessageType for protobuf message resources.userinfo.UserInfoChanged
441
515
  */
442
516
  export const UserInfoChanged = new UserInfoChanged$Type();
517
+ // @generated message type with reflection information, may provide speed optimized methods
518
+ class AccountGroupsChanged$Type extends MessageType<AccountGroupsChanged> {
519
+ constructor() {
520
+ super("resources.userinfo.AccountGroupsChanged", [
521
+ { no: 1, name: "account_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
522
+ { no: 2, name: "changed_at", kind: "message", T: () => Timestamp },
523
+ { no: 3, name: "new_groups", kind: "message", T: () => AccountGroups },
524
+ { no: 4, name: "can_be_superuser", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
525
+ { no: 5, name: "can_be_config_admin", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
526
+ ]);
527
+ }
528
+ create(value?: PartialMessage<AccountGroupsChanged>): AccountGroupsChanged {
529
+ const message = globalThis.Object.create((this.messagePrototype!));
530
+ message.accountId = 0;
531
+ message.canBeSuperuser = false;
532
+ message.canBeConfigAdmin = false;
533
+ if (value !== undefined)
534
+ reflectionMergePartial<AccountGroupsChanged>(this, message, value);
535
+ return message;
536
+ }
537
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AccountGroupsChanged): AccountGroupsChanged {
538
+ let message = target ?? this.create(), end = reader.pos + length;
539
+ while (reader.pos < end) {
540
+ let [fieldNo, wireType] = reader.tag();
541
+ switch (fieldNo) {
542
+ case /* int64 account_id */ 1:
543
+ message.accountId = reader.int64().toNumber();
544
+ break;
545
+ case /* resources.timestamp.Timestamp changed_at */ 2:
546
+ message.changedAt = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.changedAt);
547
+ break;
548
+ case /* resources.accounts.AccountGroups new_groups */ 3:
549
+ message.newGroups = AccountGroups.internalBinaryRead(reader, reader.uint32(), options, message.newGroups);
550
+ break;
551
+ case /* bool can_be_superuser */ 4:
552
+ message.canBeSuperuser = reader.bool();
553
+ break;
554
+ case /* bool can_be_config_admin */ 5:
555
+ message.canBeConfigAdmin = reader.bool();
556
+ break;
557
+ default:
558
+ let u = options.readUnknownField;
559
+ if (u === "throw")
560
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
561
+ let d = reader.skip(wireType);
562
+ if (u !== false)
563
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
564
+ }
565
+ }
566
+ return message;
567
+ }
568
+ internalBinaryWrite(message: AccountGroupsChanged, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
569
+ /* int64 account_id = 1; */
570
+ if (message.accountId !== 0)
571
+ writer.tag(1, WireType.Varint).int64(message.accountId);
572
+ /* resources.timestamp.Timestamp changed_at = 2; */
573
+ if (message.changedAt)
574
+ Timestamp.internalBinaryWrite(message.changedAt, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
575
+ /* resources.accounts.AccountGroups new_groups = 3; */
576
+ if (message.newGroups)
577
+ AccountGroups.internalBinaryWrite(message.newGroups, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
578
+ /* bool can_be_superuser = 4; */
579
+ if (message.canBeSuperuser !== false)
580
+ writer.tag(4, WireType.Varint).bool(message.canBeSuperuser);
581
+ /* bool can_be_config_admin = 5; */
582
+ if (message.canBeConfigAdmin !== false)
583
+ writer.tag(5, WireType.Varint).bool(message.canBeConfigAdmin);
584
+ let u = options.writeUnknownFields;
585
+ if (u !== false)
586
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
587
+ return writer;
588
+ }
589
+ }
590
+ /**
591
+ * @generated MessageType for protobuf message resources.userinfo.AccountGroupsChanged
592
+ */
593
+ export const AccountGroupsChanged = new AccountGroupsChanged$Type();
@@ -1122,7 +1122,7 @@ class CitizenDocumentRelation$Type extends MessageType<CitizenDocumentRelation>
1122
1122
  super("resources.users.activity.CitizenDocumentRelation", [
1123
1123
  { no: 1, name: "added", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
1124
1124
  { no: 2, name: "document_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
1125
- { no: 3, name: "relation", kind: "enum", T: () => ["resources.documents.relations.DocRelation", DocRelation, "DOC_RELATION_"] }
1125
+ { no: 3, name: "relation", kind: "enum", T: () => ["resources.documents.relations.DocRelation", DocRelation, "DOC_RELATION_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } }
1126
1126
  ]);
1127
1127
  }
1128
1128
  create(value?: PartialMessage<CitizenDocumentRelation>): CitizenDocumentRelation {