@fivenet-app/gen 2026.3.0 → 2026.5.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 (68) hide show
  1. package/clients.ts +66 -6
  2. package/codegen/perms/perms.ts +104 -1
  3. package/package.json +1 -1
  4. package/perms.ts +16 -5
  5. package/resources/centrum/settings/settings.ts +1 -1
  6. package/resources/centrum/units/units.ts +1 -1
  7. package/resources/citizens/labels/access.ts +216 -0
  8. package/resources/citizens/labels/labels.ts +320 -0
  9. package/resources/{users → citizens}/licenses/licenses.ts +17 -17
  10. package/resources/clientconfig/clientconfig.ts +32 -289
  11. package/resources/cron/cron.ts +2 -2
  12. package/resources/documents/access/access.ts +0 -23
  13. package/resources/documents/category/category.ts +1 -1
  14. package/resources/documents/templates/templates.ts +2 -2
  15. package/resources/jobs/labels/labels.ts +16 -5
  16. package/resources/livemap/markers/marker_marker.ts +1 -1
  17. package/resources/settings/banner.ts +1 -1
  18. package/resources/settings/config.ts +16 -14
  19. package/resources/sync/data/data.ts +9 -9
  20. package/resources/users/activity/activity.ts +132 -12
  21. package/resources/users/props/props.ts +4 -4
  22. package/resources/users/user.ts +4 -4
  23. package/services/calendar/calendar.client.ts +2 -106
  24. package/services/calendar/calendar.ts +0 -1018
  25. package/services/calendar/entries.client.ts +129 -0
  26. package/services/calendar/entries.ts +1040 -0
  27. package/services/centrum/centrum.client.ts +23 -244
  28. package/services/centrum/centrum.ts +246 -2383
  29. package/services/centrum/dispatches.client.ts +155 -0
  30. package/services/centrum/dispatches.ts +1305 -0
  31. package/services/centrum/units.client.ts +116 -0
  32. package/services/centrum/units.ts +876 -0
  33. package/services/citizens/citizens.client.ts +0 -13
  34. package/services/citizens/citizens.ts +1 -115
  35. package/services/citizens/labels.client.ts +77 -0
  36. package/services/citizens/labels.ts +455 -0
  37. package/services/completor/completor.ts +5 -5
  38. package/services/documents/categories.client.ts +64 -0
  39. package/services/documents/categories.ts +331 -0
  40. package/services/documents/comments.client.ts +77 -0
  41. package/services/documents/comments.ts +479 -0
  42. package/services/documents/documents.client.ts +26 -182
  43. package/services/documents/documents.ts +335 -1682
  44. package/services/documents/templates.client.ts +90 -0
  45. package/services/documents/templates.ts +591 -0
  46. package/services/jobs/colleagues.client.ts +129 -0
  47. package/services/jobs/colleagues.ts +1129 -0
  48. package/services/jobs/jobs.client.ts +3 -107
  49. package/services/jobs/jobs.ts +1 -1113
  50. package/services/mailer/mailer.client.ts +0 -208
  51. package/services/mailer/mailer.ts +1 -2010
  52. package/services/mailer/settings.client.ts +103 -0
  53. package/services/mailer/settings.ts +708 -0
  54. package/services/mailer/thread.client.ts +155 -0
  55. package/services/mailer/thread.ts +1343 -0
  56. package/services/qualifications/exam.client.ts +77 -0
  57. package/services/qualifications/exam.ts +609 -0
  58. package/services/qualifications/qualifications.client.ts +1 -53
  59. package/services/qualifications/qualifications.ts +0 -591
  60. package/services/settings/cron.client.ts +13 -0
  61. package/services/settings/cron.ts +114 -1
  62. package/services/sync/sync.client.ts +271 -37
  63. package/services/sync/sync.ts +1463 -383
  64. package/svcs.ts +182 -94
  65. package/resources/sync/data/v2/data.ts +0 -220
  66. package/resources/users/labels/labels.ts +0 -160
  67. package/services/sync/v2/sync.client.ts +0 -331
  68. package/services/sync/v2/sync.ts +0 -1766
@@ -435,7 +435,7 @@ export const CircleMarker = new CircleMarker$Type();
435
435
  class IconMarker$Type extends MessageType<IconMarker> {
436
436
  constructor() {
437
437
  super("resources.livemap.markers.IconMarker", [
438
- { no: 1, name: "icon", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "128", suffix: "Icon" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } }
438
+ { no: 1, name: "icon", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "128" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } }
439
439
  ]);
440
440
  }
441
441
  create(value?: PartialMessage<IconMarker>): IconMarker {
@@ -47,7 +47,7 @@ class BannerMessage$Type extends MessageType<BannerMessage> {
47
47
  super("resources.settings.BannerMessage", [
48
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, stripHtmlTags: true } } },
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
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\"" } }
@@ -19,9 +19,9 @@ import { Data } from "./data";
19
19
  */
20
20
  export interface AppConfig {
21
21
  /**
22
- * @generated from protobuf field: optional string version = 1
22
+ * @generated from protobuf field: string version = 1
23
23
  */
24
- version?: string;
24
+ version: string;
25
25
  /**
26
26
  * @generated from protobuf field: string default_locale = 8
27
27
  */
@@ -249,9 +249,9 @@ export interface Display {
249
249
  /**
250
250
  * IETF BCP 47 language tag (e.g. "en-US", "de-DE")
251
251
  *
252
- * @generated from protobuf field: optional string intl_locale = 1
252
+ * @generated from protobuf field: string intl_locale = 1
253
253
  */
254
- intlLocale?: string;
254
+ intlLocale: string;
255
255
  /**
256
256
  * ISO 4217 currency code (e.g. "USD", "EUR")
257
257
  *
@@ -386,7 +386,7 @@ export enum DiscordBotPresenceType {
386
386
  class AppConfig$Type extends MessageType<AppConfig> {
387
387
  constructor() {
388
388
  super("resources.settings.AppConfig", [
389
- { no: 1, name: "version", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
389
+ { no: 1, name: "version", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
390
390
  { no: 8, name: "default_locale", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "20" } } } },
391
391
  { no: 2, name: "auth", kind: "message", T: () => Auth },
392
392
  { no: 3, name: "perms", kind: "message", T: () => Perms },
@@ -404,6 +404,7 @@ class AppConfig$Type extends MessageType<AppConfig> {
404
404
  }
405
405
  create(value?: PartialMessage<AppConfig>): AppConfig {
406
406
  const message = globalThis.Object.create((this.messagePrototype!));
407
+ message.version = "";
407
408
  message.defaultLocale = "";
408
409
  if (value !== undefined)
409
410
  reflectionMergePartial<AppConfig>(this, message, value);
@@ -414,7 +415,7 @@ class AppConfig$Type extends MessageType<AppConfig> {
414
415
  while (reader.pos < end) {
415
416
  let [fieldNo, wireType] = reader.tag();
416
417
  switch (fieldNo) {
417
- case /* optional string version */ 1:
418
+ case /* string version */ 1:
418
419
  message.version = reader.string();
419
420
  break;
420
421
  case /* string default_locale */ 8:
@@ -468,8 +469,8 @@ class AppConfig$Type extends MessageType<AppConfig> {
468
469
  return message;
469
470
  }
470
471
  internalBinaryWrite(message: AppConfig, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
471
- /* optional string version = 1; */
472
- if (message.version !== undefined)
472
+ /* string version = 1; */
473
+ if (message.version !== "")
473
474
  writer.tag(1, WireType.LengthDelimited).string(message.version);
474
475
  /* resources.settings.Auth auth = 2; */
475
476
  if (message.auth)
@@ -1164,12 +1165,13 @@ export const System = new System$Type();
1164
1165
  class Display$Type extends MessageType<Display> {
1165
1166
  constructor() {
1166
1167
  super("resources.settings.Display", [
1167
- { no: 1, name: "intl_locale", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "32" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true }, "tagger.tags": "json:\"intlLocale\"" } },
1168
+ { no: 1, name: "intl_locale", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "32" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true }, "tagger.tags": "json:\"intlLocale\"" } },
1168
1169
  { no: 2, name: "currency_name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { len: "3" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true }, "tagger.tags": "json:\"currencyName\"" } }
1169
1170
  ]);
1170
1171
  }
1171
1172
  create(value?: PartialMessage<Display>): Display {
1172
1173
  const message = globalThis.Object.create((this.messagePrototype!));
1174
+ message.intlLocale = "";
1173
1175
  message.currencyName = "";
1174
1176
  if (value !== undefined)
1175
1177
  reflectionMergePartial<Display>(this, message, value);
@@ -1180,7 +1182,7 @@ class Display$Type extends MessageType<Display> {
1180
1182
  while (reader.pos < end) {
1181
1183
  let [fieldNo, wireType] = reader.tag();
1182
1184
  switch (fieldNo) {
1183
- case /* optional string intl_locale */ 1:
1185
+ case /* string intl_locale */ 1:
1184
1186
  message.intlLocale = reader.string();
1185
1187
  break;
1186
1188
  case /* string currency_name */ 2:
@@ -1198,8 +1200,8 @@ class Display$Type extends MessageType<Display> {
1198
1200
  return message;
1199
1201
  }
1200
1202
  internalBinaryWrite(message: Display, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1201
- /* optional string intl_locale = 1; */
1202
- if (message.intlLocale !== undefined)
1203
+ /* string intl_locale = 1; */
1204
+ if (message.intlLocale !== "")
1203
1205
  writer.tag(1, WireType.LengthDelimited).string(message.intlLocale);
1204
1206
  /* string currency_name = 2; */
1205
1207
  if (message.currencyName !== "")
@@ -1507,9 +1509,9 @@ class Game$Type extends MessageType<Game> {
1507
1509
  constructor() {
1508
1510
  super("resources.settings.Game", [
1509
1511
  { no: 4, name: "max_wanted_duration_user_enabled", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
1510
- { no: 5, name: "max_wanted_duration_user", kind: "message", T: () => Duration },
1512
+ { no: 5, name: "max_wanted_duration_user", kind: "message", T: () => Duration, options: { "buf.validate.field": { duration: { lte: { seconds: "315360000" }, gte: { seconds: "86400" } } } } },
1511
1513
  { no: 6, name: "max_wanted_duration_vehicle_enabled", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
1512
- { no: 7, name: "max_wanted_duration_vehicle", kind: "message", T: () => Duration }
1514
+ { no: 7, name: "max_wanted_duration_vehicle", kind: "message", T: () => Duration, options: { "buf.validate.field": { duration: { lte: { seconds: "315360000" }, gte: { seconds: "86400" } } } } }
1513
1515
  ]);
1514
1516
  }
1515
1517
  create(value?: PartialMessage<Game>): Game {
@@ -16,7 +16,7 @@ import { UserJob } from "../../users/user";
16
16
  import { Timestamp } from "../../timestamp/timestamp";
17
17
  import { AccountUpdate } from "../activity/activity";
18
18
  import { Coords } from "../../livemap/coords";
19
- import { License } from "../../users/licenses/licenses";
19
+ import { License } from "../../citizens/licenses/licenses";
20
20
  import { Vehicle } from "../../vehicles/vehicles";
21
21
  import { Job } from "../../jobs/jobs";
22
22
  /**
@@ -60,7 +60,7 @@ export interface DataVehicles {
60
60
  */
61
61
  export interface DataLicenses {
62
62
  /**
63
- * @generated from protobuf field: repeated resources.users.licenses.License licenses = 1
63
+ * @generated from protobuf field: repeated resources.citizens.licenses.License licenses = 1
64
64
  */
65
65
  licenses: License[];
66
66
  }
@@ -222,7 +222,7 @@ export interface DataUser {
222
222
  */
223
223
  playtime?: number;
224
224
  /**
225
- * @generated from protobuf field: repeated resources.users.licenses.License licenses = 16
225
+ * @generated from protobuf field: repeated resources.citizens.licenses.License licenses = 16
226
226
  */
227
227
  licenses: License[];
228
228
  /**
@@ -379,7 +379,7 @@ export const DataUsers = new DataUsers$Type();
379
379
  class DataVehicles$Type extends MessageType<DataVehicles> {
380
380
  constructor() {
381
381
  super("resources.sync.data.DataVehicles", [
382
- { no: 1, name: "vehicles", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Vehicle, options: { "buf.validate.field": { repeated: { maxItems: "1000" } } } }
382
+ { no: 1, name: "vehicles", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Vehicle, options: { "buf.validate.field": { repeated: { maxItems: "500" } } } }
383
383
  ]);
384
384
  }
385
385
  create(value?: PartialMessage<DataVehicles>): DataVehicles {
@@ -441,7 +441,7 @@ class DataLicenses$Type extends MessageType<DataLicenses> {
441
441
  while (reader.pos < end) {
442
442
  let [fieldNo, wireType] = reader.tag();
443
443
  switch (fieldNo) {
444
- case /* repeated resources.users.licenses.License licenses */ 1:
444
+ case /* repeated resources.citizens.licenses.License licenses */ 1:
445
445
  message.licenses.push(License.internalBinaryRead(reader, reader.uint32(), options));
446
446
  break;
447
447
  default:
@@ -456,7 +456,7 @@ class DataLicenses$Type extends MessageType<DataLicenses> {
456
456
  return message;
457
457
  }
458
458
  internalBinaryWrite(message: DataLicenses, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
459
- /* repeated resources.users.licenses.License licenses = 1; */
459
+ /* repeated resources.citizens.licenses.License licenses = 1; */
460
460
  for (let i = 0; i < message.licenses.length; i++)
461
461
  License.internalBinaryWrite(message.licenses[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
462
462
  let u = options.writeUnknownFields;
@@ -768,7 +768,7 @@ export const LastCharID = new LastCharID$Type();
768
768
  class DataAccounts$Type extends MessageType<DataAccounts> {
769
769
  constructor() {
770
770
  super("resources.sync.data.DataAccounts", [
771
- { no: 1, name: "account_updates", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => AccountUpdate, options: { "buf.validate.field": { repeated: { maxItems: "100" } } } }
771
+ { no: 1, name: "account_updates", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => AccountUpdate, options: { "buf.validate.field": { repeated: { maxItems: "200" } } } }
772
772
  ]);
773
773
  }
774
774
  create(value?: PartialMessage<DataAccounts>): DataAccounts {
@@ -908,7 +908,7 @@ class DataUser$Type extends MessageType<DataUser> {
908
908
  case /* optional int32 playtime */ 14:
909
909
  message.playtime = reader.int32();
910
910
  break;
911
- case /* repeated resources.users.licenses.License licenses */ 16:
911
+ case /* repeated resources.citizens.licenses.License licenses */ 16:
912
912
  message.licenses.push(License.internalBinaryRead(reader, reader.uint32(), options));
913
913
  break;
914
914
  case /* optional int64 profile_picture_file_id */ 17:
@@ -971,7 +971,7 @@ class DataUser$Type extends MessageType<DataUser> {
971
971
  /* optional int32 playtime = 14; */
972
972
  if (message.playtime !== undefined)
973
973
  writer.tag(14, WireType.Varint).int32(message.playtime);
974
- /* repeated resources.users.licenses.License licenses = 16; */
974
+ /* repeated resources.citizens.licenses.License licenses = 16; */
975
975
  for (let i = 0; i < message.licenses.length; i++)
976
976
  License.internalBinaryWrite(message.licenses[i], writer.tag(16, WireType.LengthDelimited).fork(), options).join();
977
977
  /* optional int64 profile_picture_file_id = 17; */
@@ -12,8 +12,8 @@ import type { PartialMessage } from "@protobuf-ts/runtime";
12
12
  import { reflectionMergePartial } from "@protobuf-ts/runtime";
13
13
  import { MessageType } from "@protobuf-ts/runtime";
14
14
  import { DocRelation } from "../../documents/relations/relations";
15
- import { Label } from "../labels/labels";
16
- import { License } from "../licenses/licenses";
15
+ import { Label } from "../../citizens/labels/labels";
16
+ import { License } from "../../citizens/licenses/licenses";
17
17
  import { UserShort } from "../short/user";
18
18
  import { Timestamp } from "../../timestamp/timestamp";
19
19
  /**
@@ -114,6 +114,12 @@ export interface UserActivityData {
114
114
  * @generated from protobuf field: resources.users.activity.LabelsChange labels_change = 6
115
115
  */
116
116
  labelsChange: LabelsChange;
117
+ } | {
118
+ oneofKind: "labelChange";
119
+ /**
120
+ * @generated from protobuf field: resources.users.activity.LabelChange label_change = 11
121
+ */
122
+ labelChange: LabelChange;
117
123
  } | {
118
124
  oneofKind: "jobChange";
119
125
  /**
@@ -170,7 +176,7 @@ export interface LicenseChange {
170
176
  */
171
177
  added: boolean;
172
178
  /**
173
- * @generated from protobuf field: repeated resources.users.licenses.License licenses = 2
179
+ * @generated from protobuf field: repeated resources.citizens.licenses.License licenses = 2
174
180
  */
175
181
  licenses: License[];
176
182
  }
@@ -210,17 +216,44 @@ export interface MugshotChange {
210
216
  new?: string;
211
217
  }
212
218
  /**
219
+ * @deprecated
220
+ *
213
221
  * @generated from protobuf message resources.users.activity.LabelsChange
214
222
  */
215
223
  export interface LabelsChange {
216
224
  /**
217
- * @generated from protobuf field: repeated resources.users.labels.Label added = 1
225
+ * @generated from protobuf field: repeated resources.citizens.labels.Label added = 1
218
226
  */
219
227
  added: Label[];
220
228
  /**
221
- * @generated from protobuf field: repeated resources.users.labels.Label removed = 2
229
+ * @generated from protobuf field: repeated resources.citizens.labels.Label removed = 2
222
230
  */
223
231
  removed: Label[];
232
+ /**
233
+ * @generated from protobuf field: bool expired = 4
234
+ */
235
+ expired: boolean;
236
+ }
237
+ /**
238
+ * @generated from protobuf message resources.users.activity.LabelChange
239
+ */
240
+ export interface LabelChange {
241
+ /**
242
+ * @generated from protobuf field: resources.citizens.labels.Label label = 1
243
+ */
244
+ label?: Label;
245
+ /**
246
+ * @generated from protobuf field: bool added = 2
247
+ */
248
+ added: boolean;
249
+ /**
250
+ * @generated from protobuf field: optional resources.timestamp.Timestamp expires_at = 3
251
+ */
252
+ expiresAt?: Timestamp;
253
+ /**
254
+ * @generated from protobuf field: bool expired = 4
255
+ */
256
+ expired: boolean;
224
257
  }
225
258
  /**
226
259
  * @generated from protobuf message resources.users.activity.JobChange
@@ -485,6 +518,7 @@ class UserActivityData$Type extends MessageType<UserActivityData> {
485
518
  { no: 4, name: "traffic_infraction_points_change", kind: "message", oneof: "data", T: () => TrafficInfractionPointsChange },
486
519
  { no: 5, name: "mugshot_change", kind: "message", oneof: "data", T: () => MugshotChange },
487
520
  { no: 6, name: "labels_change", kind: "message", oneof: "data", T: () => LabelsChange },
521
+ { no: 11, name: "label_change", kind: "message", oneof: "data", T: () => LabelChange },
488
522
  { no: 7, name: "job_change", kind: "message", oneof: "data", T: () => JobChange },
489
523
  { no: 8, name: "document_relation", kind: "message", oneof: "data", T: () => CitizenDocumentRelation },
490
524
  { no: 9, name: "jail_change", kind: "message", oneof: "data", T: () => JailChange },
@@ -539,6 +573,12 @@ class UserActivityData$Type extends MessageType<UserActivityData> {
539
573
  labelsChange: LabelsChange.internalBinaryRead(reader, reader.uint32(), options, (message.data as any).labelsChange)
540
574
  };
541
575
  break;
576
+ case /* resources.users.activity.LabelChange label_change */ 11:
577
+ message.data = {
578
+ oneofKind: "labelChange",
579
+ labelChange: LabelChange.internalBinaryRead(reader, reader.uint32(), options, (message.data as any).labelChange)
580
+ };
581
+ break;
542
582
  case /* resources.users.activity.JobChange job_change */ 7:
543
583
  message.data = {
544
584
  oneofKind: "jobChange",
@@ -605,6 +645,9 @@ class UserActivityData$Type extends MessageType<UserActivityData> {
605
645
  /* resources.users.activity.FineChange fine_change = 10; */
606
646
  if (message.data.oneofKind === "fineChange")
607
647
  FineChange.internalBinaryWrite(message.data.fineChange, writer.tag(10, WireType.LengthDelimited).fork(), options).join();
648
+ /* resources.users.activity.LabelChange label_change = 11; */
649
+ if (message.data.oneofKind === "labelChange")
650
+ LabelChange.internalBinaryWrite(message.data.labelChange, writer.tag(11, WireType.LengthDelimited).fork(), options).join();
608
651
  let u = options.writeUnknownFields;
609
652
  if (u !== false)
610
653
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -694,7 +737,7 @@ class LicenseChange$Type extends MessageType<LicenseChange> {
694
737
  case /* bool added */ 1:
695
738
  message.added = reader.bool();
696
739
  break;
697
- case /* repeated resources.users.licenses.License licenses */ 2:
740
+ case /* repeated resources.citizens.licenses.License licenses */ 2:
698
741
  message.licenses.push(License.internalBinaryRead(reader, reader.uint32(), options));
699
742
  break;
700
743
  default:
@@ -712,7 +755,7 @@ class LicenseChange$Type extends MessageType<LicenseChange> {
712
755
  /* bool added = 1; */
713
756
  if (message.added !== false)
714
757
  writer.tag(1, WireType.Varint).bool(message.added);
715
- /* repeated resources.users.licenses.License licenses = 2; */
758
+ /* repeated resources.citizens.licenses.License licenses = 2; */
716
759
  for (let i = 0; i < message.licenses.length; i++)
717
760
  License.internalBinaryWrite(message.licenses[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();
718
761
  let u = options.writeUnknownFields;
@@ -886,13 +929,15 @@ class LabelsChange$Type extends MessageType<LabelsChange> {
886
929
  constructor() {
887
930
  super("resources.users.activity.LabelsChange", [
888
931
  { no: 1, name: "added", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Label },
889
- { no: 2, name: "removed", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Label }
932
+ { no: 2, name: "removed", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Label },
933
+ { no: 4, name: "expired", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
890
934
  ]);
891
935
  }
892
936
  create(value?: PartialMessage<LabelsChange>): LabelsChange {
893
937
  const message = globalThis.Object.create((this.messagePrototype!));
894
938
  message.added = [];
895
939
  message.removed = [];
940
+ message.expired = false;
896
941
  if (value !== undefined)
897
942
  reflectionMergePartial<LabelsChange>(this, message, value);
898
943
  return message;
@@ -902,12 +947,15 @@ class LabelsChange$Type extends MessageType<LabelsChange> {
902
947
  while (reader.pos < end) {
903
948
  let [fieldNo, wireType] = reader.tag();
904
949
  switch (fieldNo) {
905
- case /* repeated resources.users.labels.Label added */ 1:
950
+ case /* repeated resources.citizens.labels.Label added */ 1:
906
951
  message.added.push(Label.internalBinaryRead(reader, reader.uint32(), options));
907
952
  break;
908
- case /* repeated resources.users.labels.Label removed */ 2:
953
+ case /* repeated resources.citizens.labels.Label removed */ 2:
909
954
  message.removed.push(Label.internalBinaryRead(reader, reader.uint32(), options));
910
955
  break;
956
+ case /* bool expired */ 4:
957
+ message.expired = reader.bool();
958
+ break;
911
959
  default:
912
960
  let u = options.readUnknownField;
913
961
  if (u === "throw")
@@ -920,12 +968,15 @@ class LabelsChange$Type extends MessageType<LabelsChange> {
920
968
  return message;
921
969
  }
922
970
  internalBinaryWrite(message: LabelsChange, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
923
- /* repeated resources.users.labels.Label added = 1; */
971
+ /* repeated resources.citizens.labels.Label added = 1; */
924
972
  for (let i = 0; i < message.added.length; i++)
925
973
  Label.internalBinaryWrite(message.added[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
926
- /* repeated resources.users.labels.Label removed = 2; */
974
+ /* repeated resources.citizens.labels.Label removed = 2; */
927
975
  for (let i = 0; i < message.removed.length; i++)
928
976
  Label.internalBinaryWrite(message.removed[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();
977
+ /* bool expired = 4; */
978
+ if (message.expired !== false)
979
+ writer.tag(4, WireType.Varint).bool(message.expired);
929
980
  let u = options.writeUnknownFields;
930
981
  if (u !== false)
931
982
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -937,6 +988,75 @@ class LabelsChange$Type extends MessageType<LabelsChange> {
937
988
  */
938
989
  export const LabelsChange = new LabelsChange$Type();
939
990
  // @generated message type with reflection information, may provide speed optimized methods
991
+ class LabelChange$Type extends MessageType<LabelChange> {
992
+ constructor() {
993
+ super("resources.users.activity.LabelChange", [
994
+ { no: 1, name: "label", kind: "message", T: () => Label },
995
+ { no: 2, name: "added", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
996
+ { no: 3, name: "expires_at", kind: "message", T: () => Timestamp },
997
+ { no: 4, name: "expired", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
998
+ ]);
999
+ }
1000
+ create(value?: PartialMessage<LabelChange>): LabelChange {
1001
+ const message = globalThis.Object.create((this.messagePrototype!));
1002
+ message.added = false;
1003
+ message.expired = false;
1004
+ if (value !== undefined)
1005
+ reflectionMergePartial<LabelChange>(this, message, value);
1006
+ return message;
1007
+ }
1008
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LabelChange): LabelChange {
1009
+ let message = target ?? this.create(), end = reader.pos + length;
1010
+ while (reader.pos < end) {
1011
+ let [fieldNo, wireType] = reader.tag();
1012
+ switch (fieldNo) {
1013
+ case /* resources.citizens.labels.Label label */ 1:
1014
+ message.label = Label.internalBinaryRead(reader, reader.uint32(), options, message.label);
1015
+ break;
1016
+ case /* bool added */ 2:
1017
+ message.added = reader.bool();
1018
+ break;
1019
+ case /* optional resources.timestamp.Timestamp expires_at */ 3:
1020
+ message.expiresAt = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.expiresAt);
1021
+ break;
1022
+ case /* bool expired */ 4:
1023
+ message.expired = reader.bool();
1024
+ break;
1025
+ default:
1026
+ let u = options.readUnknownField;
1027
+ if (u === "throw")
1028
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1029
+ let d = reader.skip(wireType);
1030
+ if (u !== false)
1031
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1032
+ }
1033
+ }
1034
+ return message;
1035
+ }
1036
+ internalBinaryWrite(message: LabelChange, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1037
+ /* resources.citizens.labels.Label label = 1; */
1038
+ if (message.label)
1039
+ Label.internalBinaryWrite(message.label, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
1040
+ /* bool added = 2; */
1041
+ if (message.added !== false)
1042
+ writer.tag(2, WireType.Varint).bool(message.added);
1043
+ /* optional resources.timestamp.Timestamp expires_at = 3; */
1044
+ if (message.expiresAt)
1045
+ Timestamp.internalBinaryWrite(message.expiresAt, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
1046
+ /* bool expired = 4; */
1047
+ if (message.expired !== false)
1048
+ writer.tag(4, WireType.Varint).bool(message.expired);
1049
+ let u = options.writeUnknownFields;
1050
+ if (u !== false)
1051
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1052
+ return writer;
1053
+ }
1054
+ }
1055
+ /**
1056
+ * @generated MessageType for protobuf message resources.users.activity.LabelChange
1057
+ */
1058
+ export const LabelChange = new LabelChange$Type();
1059
+ // @generated message type with reflection information, may provide speed optimized methods
940
1060
  class JobChange$Type extends MessageType<JobChange> {
941
1061
  constructor() {
942
1062
  super("resources.users.activity.JobChange", [
@@ -11,7 +11,7 @@ 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 { Labels } from "../labels/labels";
14
+ import { Labels } from "../../citizens/labels/labels";
15
15
  import { File } from "../../file/file";
16
16
  import { JobGrade } from "../../jobs/jobs";
17
17
  import { Job } from "../../jobs/jobs";
@@ -81,7 +81,7 @@ export interface UserProps {
81
81
  */
82
82
  mugshot?: File;
83
83
  /**
84
- * @generated from protobuf field: optional resources.users.labels.Labels labels = 16
84
+ * @generated from protobuf field: optional resources.citizens.labels.Labels labels = 16
85
85
  */
86
86
  labels?: Labels;
87
87
  /**
@@ -169,7 +169,7 @@ class UserProps$Type extends MessageType<UserProps> {
169
169
  case /* optional resources.file.File mugshot */ 15:
170
170
  message.mugshot = File.internalBinaryRead(reader, reader.uint32(), options, message.mugshot);
171
171
  break;
172
- case /* optional resources.users.labels.Labels labels */ 16:
172
+ case /* optional resources.citizens.labels.Labels labels */ 16:
173
173
  message.labels = Labels.internalBinaryRead(reader, reader.uint32(), options, message.labels);
174
174
  break;
175
175
  case /* optional string email */ 17:
@@ -232,7 +232,7 @@ class UserProps$Type extends MessageType<UserProps> {
232
232
  /* optional resources.file.File mugshot = 15; */
233
233
  if (message.mugshot)
234
234
  File.internalBinaryWrite(message.mugshot, writer.tag(15, WireType.LengthDelimited).fork(), options).join();
235
- /* optional resources.users.labels.Labels labels = 16; */
235
+ /* optional resources.citizens.labels.Labels labels = 16; */
236
236
  if (message.labels)
237
237
  Labels.internalBinaryWrite(message.labels, writer.tag(16, WireType.LengthDelimited).fork(), options).join();
238
238
  /* optional string email = 17; */
@@ -12,7 +12,7 @@ import type { PartialMessage } from "@protobuf-ts/runtime";
12
12
  import { reflectionMergePartial } from "@protobuf-ts/runtime";
13
13
  import { MessageType } from "@protobuf-ts/runtime";
14
14
  import { Timestamp } from "../timestamp/timestamp";
15
- import { License } from "./licenses/licenses";
15
+ import { License } from "../citizens/licenses/licenses";
16
16
  import { UserProps } from "./props/props";
17
17
  /**
18
18
  * @generated from protobuf message resources.users.User
@@ -87,7 +87,7 @@ export interface User {
87
87
  */
88
88
  props?: UserProps;
89
89
  /**
90
- * @generated from protobuf field: repeated resources.users.licenses.License licenses = 16
90
+ * @generated from protobuf field: repeated resources.citizens.licenses.License licenses = 16
91
91
  */
92
92
  licenses: License[];
93
93
  /**
@@ -259,7 +259,7 @@ class User$Type extends MessageType<User> {
259
259
  case /* resources.users.props.UserProps props */ 15:
260
260
  message.props = UserProps.internalBinaryRead(reader, reader.uint32(), options, message.props);
261
261
  break;
262
- case /* repeated resources.users.licenses.License licenses */ 16:
262
+ case /* repeated resources.citizens.licenses.License licenses */ 16:
263
263
  message.licenses.push(License.internalBinaryRead(reader, reader.uint32(), options));
264
264
  break;
265
265
  case /* optional int64 profile_picture_file_id */ 17:
@@ -325,7 +325,7 @@ class User$Type extends MessageType<User> {
325
325
  /* resources.users.props.UserProps props = 15; */
326
326
  if (message.props)
327
327
  UserProps.internalBinaryWrite(message.props, writer.tag(15, WireType.LengthDelimited).fork(), options).join();
328
- /* repeated resources.users.licenses.License licenses = 16; */
328
+ /* repeated resources.citizens.licenses.License licenses = 16; */
329
329
  for (let i = 0; i < message.licenses.length; i++)
330
330
  License.internalBinaryWrite(message.licenses[i], writer.tag(16, WireType.LengthDelimited).fork(), options).join();
331
331
  /* optional int64 profile_picture_file_id = 17; */