@fivenet-app/gen 2026.8.0 → 2026.10.2

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 (83) hide show
  1. package/LICENSE +201 -0
  2. package/clients.ts +12 -0
  3. package/codegen/perms/perms.ts +331 -2
  4. package/google/protobuf/any.ts +47 -103
  5. package/google/protobuf/descriptor.ts +28 -29
  6. package/google/protobuf/struct.ts +33 -22
  7. package/google/protobuf/timestamp.ts +3 -3
  8. package/package.json +2 -2
  9. package/perms.ts +58 -17
  10. package/resources/calendar/calendar.ts +11 -0
  11. package/resources/calendar/entries/entries.ts +23 -0
  12. package/resources/centrum/dispatches/dispatches.ts +214 -21
  13. package/resources/centrum/units/units.ts +212 -5
  14. package/resources/citizens/labels/access.ts +10 -6
  15. package/resources/cron/cron.ts +44 -3
  16. package/resources/dbsync/state.ts +192 -0
  17. package/resources/documents/stamps/access.ts +25 -0
  18. package/resources/documents/stamps/stamp.ts +0 -21
  19. package/resources/documents/templates/templates.ts +63 -61
  20. package/resources/documents/workflow/workflow.ts +61 -1
  21. package/resources/file/file.ts +3 -3
  22. package/resources/file/filestore.ts +26 -10
  23. package/resources/jobs/colleagues/activity/activity.ts +50 -8
  24. package/resources/jobs/colleagues/colleagues.ts +14 -1
  25. package/resources/jobs/groups/access/access.ts +29 -0
  26. package/resources/jobs/groups/activity.ts +332 -0
  27. package/resources/jobs/groups/group.ts +1666 -0
  28. package/resources/jobs/groups/short/group_member_short.ts +129 -0
  29. package/resources/jobs/job_asset.ts +116 -0
  30. package/resources/jobs/user_selector.ts +170 -0
  31. package/resources/notifications/clientview/clientview.ts +5 -1
  32. package/resources/notifications/events/events.ts +35 -1
  33. package/resources/notifications/notifications.ts +322 -2
  34. package/resources/permissions/attributes/attributes.ts +164 -2
  35. package/resources/permissions/authorization/authorization.ts +86 -0
  36. package/resources/permissions/permissions/permissions.ts +16 -1
  37. package/resources/properties/properties.ts +1648 -0
  38. package/resources/qualifications/activity/activity.ts +328 -0
  39. package/resources/qualifications/exam/exam.ts +108 -4
  40. package/resources/qualifications/qualifications.ts +36 -2
  41. package/resources/settings/config.ts +3 -3
  42. package/resources/settings/status.ts +197 -105
  43. package/resources/sync/activity/activity.ts +4 -4
  44. package/resources/sync/data/data.ts +16 -4
  45. package/resources/users/activity/activity.ts +220 -3
  46. package/resources/users/props/props.ts +13 -1
  47. package/resources/users/user.ts +13 -1
  48. package/resources/vehicles/activity/activity.ts +222 -3
  49. package/resources/vehicles/props/props.ts +13 -1
  50. package/resources/vehicles/vehicles.ts +13 -1
  51. package/services/auth/auth.ts +61 -67
  52. package/services/calendar/calendar.ts +1 -1
  53. package/services/calendar/entries.ts +3 -3
  54. package/services/centrum/centrum.ts +103 -1
  55. package/services/centrum/dispatches.ts +25 -1
  56. package/services/centrum/units.ts +28 -4
  57. package/services/citizens/citizens.client.ts +49 -0
  58. package/services/citizens/citizens.ts +384 -7
  59. package/services/completor/completor.ts +2 -2
  60. package/services/documents/approval.ts +2 -2
  61. package/services/documents/documents.ts +10 -9
  62. package/services/documents/templates.ts +24 -13
  63. package/services/jobs/colleagues.client.ts +34 -8
  64. package/services/jobs/colleagues.ts +289 -75
  65. package/services/jobs/conduct.ts +12 -19
  66. package/services/jobs/groups.client.ts +311 -0
  67. package/services/jobs/groups.ts +3654 -1
  68. package/services/jobs/timeclock.ts +30 -27
  69. package/services/notifications/notifications.client.ts +40 -1
  70. package/services/notifications/notifications.ts +483 -3
  71. package/services/qualifications/qualifications.client.ts +20 -7
  72. package/services/qualifications/qualifications.ts +291 -8
  73. package/services/settings/job_assets.client.ts +105 -0
  74. package/services/settings/job_assets.ts +373 -0
  75. package/services/settings/properties.client.ts +194 -0
  76. package/services/settings/properties.ts +1555 -0
  77. package/services/settings/settings.ts +1 -1
  78. package/services/settings/system.ts +29 -9
  79. package/services/sync/sync.client.ts +69 -33
  80. package/services/sync/sync.ts +557 -18
  81. package/services/vehicles/vehicles.client.ts +52 -0
  82. package/services/vehicles/vehicles.ts +386 -8
  83. package/svcs.ts +87 -1
@@ -16,9 +16,11 @@ import { LabelCount } from "../../resources/jobs/labels/labels";
16
16
  import { Label } from "../../resources/jobs/labels/labels";
17
17
  import { ColleagueProps } from "../../resources/jobs/colleagues/colleagues";
18
18
  import { ColleagueActivity } from "../../resources/jobs/colleagues/activity/activity";
19
+ import { Timestamp } from "../../resources/timestamp/timestamp";
19
20
  import { ColleagueActivityType } from "../../resources/jobs/colleagues/activity/activity";
20
21
  import { Colleague } from "../../resources/jobs/colleagues/colleagues";
21
22
  import { PaginationResponse } from "../../resources/common/database/database";
23
+ import { UserSelector } from "../../resources/jobs/user_selector";
22
24
  import { Sort } from "../../resources/common/database/database";
23
25
  import { PaginationRequest } from "../../resources/common/database/database";
24
26
  // Colleagues
@@ -42,9 +44,9 @@ export interface ListColleaguesRequest {
42
44
  */
43
45
  search: string;
44
46
  /**
45
- * @generated from protobuf field: repeated int32 user_ids = 4
47
+ * @generated from protobuf field: optional resources.jobs.UserSelector users = 4
46
48
  */
47
- userIds: number[];
49
+ users?: UserSelector;
48
50
  /**
49
51
  * @generated from protobuf field: optional bool user_only = 5
50
52
  */
@@ -130,13 +132,23 @@ export interface ListColleagueActivityRequest {
130
132
  /**
131
133
  * Search params
132
134
  *
133
- * @generated from protobuf field: repeated int32 user_ids = 3
135
+ * @generated from protobuf field: optional resources.jobs.UserSelector users = 3
134
136
  */
135
- userIds: number[];
137
+ users?: UserSelector;
136
138
  /**
139
+ * Activity types to filter by. If empty, all user-permitted activity types will be returned.
140
+ *
137
141
  * @generated from protobuf field: repeated resources.jobs.colleagues.activity.ColleagueActivityType activity_types = 4
138
142
  */
139
143
  activityTypes: ColleagueActivityType[];
144
+ /**
145
+ * @generated from protobuf field: optional resources.timestamp.Timestamp from = 5
146
+ */
147
+ from?: Timestamp;
148
+ /**
149
+ * @generated from protobuf field: optional resources.timestamp.Timestamp to = 6
150
+ */
151
+ to?: Timestamp;
140
152
  }
141
153
  /**
142
154
  * @generated from protobuf message services.jobs.ListColleagueActivityResponse
@@ -192,22 +204,50 @@ export interface GetColleagueLabelsResponse {
192
204
  labels: Label[];
193
205
  }
194
206
  /**
195
- * @generated from protobuf message services.jobs.ManageLabelsRequest
207
+ * @generated from protobuf message services.jobs.CreateOrUpdateLabelRequest
196
208
  */
197
- export interface ManageLabelsRequest {
209
+ export interface CreateOrUpdateLabelRequest {
198
210
  /**
199
- * @generated from protobuf field: repeated resources.jobs.labels.Label labels = 1
211
+ * @generated from protobuf field: resources.jobs.labels.Label label = 1
200
212
  */
201
- labels: Label[];
213
+ label?: Label;
202
214
  }
203
215
  /**
204
- * @generated from protobuf message services.jobs.ManageLabelsResponse
216
+ * @generated from protobuf message services.jobs.CreateOrUpdateLabelResponse
205
217
  */
206
- export interface ManageLabelsResponse {
218
+ export interface CreateOrUpdateLabelResponse {
207
219
  /**
208
- * @generated from protobuf field: repeated resources.jobs.labels.Label labels = 1
220
+ * @generated from protobuf field: resources.jobs.labels.Label label = 1
209
221
  */
210
- labels: Label[];
222
+ label?: Label;
223
+ }
224
+ /**
225
+ * @generated from protobuf message services.jobs.DeleteLabelRequest
226
+ */
227
+ export interface DeleteLabelRequest {
228
+ /**
229
+ * @generated from protobuf field: int64 id = 1
230
+ */
231
+ id: number;
232
+ }
233
+ /**
234
+ * @generated from protobuf message services.jobs.DeleteLabelResponse
235
+ */
236
+ export interface DeleteLabelResponse {
237
+ }
238
+ /**
239
+ * @generated from protobuf message services.jobs.ReorderLabelsRequest
240
+ */
241
+ export interface ReorderLabelsRequest {
242
+ /**
243
+ * @generated from protobuf field: repeated int64 label_ids = 1
244
+ */
245
+ labelIds: number[];
246
+ }
247
+ /**
248
+ * @generated from protobuf message services.jobs.ReorderLabelsResponse
249
+ */
250
+ export interface ReorderLabelsResponse {
211
251
  }
212
252
  /**
213
253
  * @generated from protobuf message services.jobs.GetColleagueLabelsStatsRequest
@@ -234,7 +274,7 @@ class ListColleaguesRequest$Type extends MessageType<ListColleaguesRequest> {
234
274
  { no: 1, name: "pagination", kind: "message", T: () => PaginationRequest, options: { "buf.validate.field": { required: true } } },
235
275
  { no: 2, name: "sort", kind: "message", T: () => Sort },
236
276
  { no: 3, name: "search", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "64" } } } },
237
- { no: 4, name: "user_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { repeated: { maxItems: "10", items: { int32: { gte: 0 } } } } } },
277
+ { no: 4, name: "users", kind: "message", T: () => UserSelector },
238
278
  { no: 5, name: "user_only", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
239
279
  { no: 6, name: "absent", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
240
280
  { no: 7, name: "label_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/, options: { "buf.validate.field": { repeated: { maxItems: "10" } } } },
@@ -245,7 +285,6 @@ class ListColleaguesRequest$Type extends MessageType<ListColleaguesRequest> {
245
285
  create(value?: PartialMessage<ListColleaguesRequest>): ListColleaguesRequest {
246
286
  const message = globalThis.Object.create((this.messagePrototype!));
247
287
  message.search = "";
248
- message.userIds = [];
249
288
  message.labelIds = [];
250
289
  if (value !== undefined)
251
290
  reflectionMergePartial<ListColleaguesRequest>(this, message, value);
@@ -265,12 +304,8 @@ class ListColleaguesRequest$Type extends MessageType<ListColleaguesRequest> {
265
304
  case /* string search */ 3:
266
305
  message.search = reader.string();
267
306
  break;
268
- case /* repeated int32 user_ids */ 4:
269
- if (wireType === WireType.LengthDelimited)
270
- for (let e = reader.int32() + reader.pos; reader.pos < e;)
271
- message.userIds.push(reader.int32());
272
- else
273
- message.userIds.push(reader.int32());
307
+ case /* optional resources.jobs.UserSelector users */ 4:
308
+ message.users = UserSelector.internalBinaryRead(reader, reader.uint32(), options, message.users);
274
309
  break;
275
310
  case /* optional bool user_only */ 5:
276
311
  message.userOnly = reader.bool();
@@ -312,13 +347,9 @@ class ListColleaguesRequest$Type extends MessageType<ListColleaguesRequest> {
312
347
  /* string search = 3; */
313
348
  if (message.search !== "")
314
349
  writer.tag(3, WireType.LengthDelimited).string(message.search);
315
- /* repeated int32 user_ids = 4; */
316
- if (message.userIds.length) {
317
- writer.tag(4, WireType.LengthDelimited).fork();
318
- for (let i = 0; i < message.userIds.length; i++)
319
- writer.int32(message.userIds[i]);
320
- writer.join();
321
- }
350
+ /* optional resources.jobs.UserSelector users = 4; */
351
+ if (message.users)
352
+ UserSelector.internalBinaryWrite(message.users, writer.tag(4, WireType.LengthDelimited).fork(), options).join();
322
353
  /* optional bool user_only = 5; */
323
354
  if (message.userOnly !== undefined)
324
355
  writer.tag(5, WireType.Varint).bool(message.userOnly);
@@ -592,13 +623,14 @@ class ListColleagueActivityRequest$Type extends MessageType<ListColleagueActivit
592
623
  super("services.jobs.ListColleagueActivityRequest", [
593
624
  { no: 1, name: "pagination", kind: "message", T: () => PaginationRequest, options: { "buf.validate.field": { required: true } } },
594
625
  { no: 2, name: "sort", kind: "message", T: () => Sort },
595
- { no: 3, name: "user_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/ },
596
- { no: 4, name: "activity_types", kind: "enum", repeat: 1 /*RepeatType.PACKED*/, T: () => ["resources.jobs.colleagues.activity.ColleagueActivityType", ColleagueActivityType, "COLLEAGUE_ACTIVITY_TYPE_"], options: { "buf.validate.field": { repeated: { maxItems: "10", items: { enum: { definedOnly: true } } } } } }
626
+ { no: 3, name: "users", kind: "message", T: () => UserSelector },
627
+ { no: 4, name: "activity_types", kind: "enum", repeat: 1 /*RepeatType.PACKED*/, T: () => ["resources.jobs.colleagues.activity.ColleagueActivityType", ColleagueActivityType, "COLLEAGUE_ACTIVITY_TYPE_"], options: { "buf.validate.field": { repeated: { maxItems: "10", items: { enum: { definedOnly: true } } } } } },
628
+ { no: 5, name: "from", kind: "message", T: () => Timestamp },
629
+ { no: 6, name: "to", kind: "message", T: () => Timestamp }
597
630
  ]);
598
631
  }
599
632
  create(value?: PartialMessage<ListColleagueActivityRequest>): ListColleagueActivityRequest {
600
633
  const message = globalThis.Object.create((this.messagePrototype!));
601
- message.userIds = [];
602
634
  message.activityTypes = [];
603
635
  if (value !== undefined)
604
636
  reflectionMergePartial<ListColleagueActivityRequest>(this, message, value);
@@ -615,12 +647,8 @@ class ListColleagueActivityRequest$Type extends MessageType<ListColleagueActivit
615
647
  case /* optional resources.common.database.Sort sort */ 2:
616
648
  message.sort = Sort.internalBinaryRead(reader, reader.uint32(), options, message.sort);
617
649
  break;
618
- case /* repeated int32 user_ids */ 3:
619
- if (wireType === WireType.LengthDelimited)
620
- for (let e = reader.int32() + reader.pos; reader.pos < e;)
621
- message.userIds.push(reader.int32());
622
- else
623
- message.userIds.push(reader.int32());
650
+ case /* optional resources.jobs.UserSelector users */ 3:
651
+ message.users = UserSelector.internalBinaryRead(reader, reader.uint32(), options, message.users);
624
652
  break;
625
653
  case /* repeated resources.jobs.colleagues.activity.ColleagueActivityType activity_types */ 4:
626
654
  if (wireType === WireType.LengthDelimited)
@@ -629,6 +657,12 @@ class ListColleagueActivityRequest$Type extends MessageType<ListColleagueActivit
629
657
  else
630
658
  message.activityTypes.push(reader.int32());
631
659
  break;
660
+ case /* optional resources.timestamp.Timestamp from */ 5:
661
+ message.from = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.from);
662
+ break;
663
+ case /* optional resources.timestamp.Timestamp to */ 6:
664
+ message.to = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.to);
665
+ break;
632
666
  default:
633
667
  let u = options.readUnknownField;
634
668
  if (u === "throw")
@@ -647,13 +681,9 @@ class ListColleagueActivityRequest$Type extends MessageType<ListColleagueActivit
647
681
  /* optional resources.common.database.Sort sort = 2; */
648
682
  if (message.sort)
649
683
  Sort.internalBinaryWrite(message.sort, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
650
- /* repeated int32 user_ids = 3; */
651
- if (message.userIds.length) {
652
- writer.tag(3, WireType.LengthDelimited).fork();
653
- for (let i = 0; i < message.userIds.length; i++)
654
- writer.int32(message.userIds[i]);
655
- writer.join();
656
- }
684
+ /* optional resources.jobs.UserSelector users = 3; */
685
+ if (message.users)
686
+ UserSelector.internalBinaryWrite(message.users, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
657
687
  /* repeated resources.jobs.colleagues.activity.ColleagueActivityType activity_types = 4; */
658
688
  if (message.activityTypes.length) {
659
689
  writer.tag(4, WireType.LengthDelimited).fork();
@@ -661,6 +691,12 @@ class ListColleagueActivityRequest$Type extends MessageType<ListColleagueActivit
661
691
  writer.int32(message.activityTypes[i]);
662
692
  writer.join();
663
693
  }
694
+ /* optional resources.timestamp.Timestamp from = 5; */
695
+ if (message.from)
696
+ Timestamp.internalBinaryWrite(message.from, writer.tag(5, WireType.LengthDelimited).fork(), options).join();
697
+ /* optional resources.timestamp.Timestamp to = 6; */
698
+ if (message.to)
699
+ Timestamp.internalBinaryWrite(message.to, writer.tag(6, WireType.LengthDelimited).fork(), options).join();
664
700
  let u = options.writeUnknownFields;
665
701
  if (u !== false)
666
702
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -919,26 +955,25 @@ class GetColleagueLabelsResponse$Type extends MessageType<GetColleagueLabelsResp
919
955
  */
920
956
  export const GetColleagueLabelsResponse = new GetColleagueLabelsResponse$Type();
921
957
  // @generated message type with reflection information, may provide speed optimized methods
922
- class ManageLabelsRequest$Type extends MessageType<ManageLabelsRequest> {
958
+ class CreateOrUpdateLabelRequest$Type extends MessageType<CreateOrUpdateLabelRequest> {
923
959
  constructor() {
924
- super("services.jobs.ManageLabelsRequest", [
925
- { no: 1, name: "labels", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Label, options: { "buf.validate.field": { repeated: { maxItems: "50" } } } }
960
+ super("services.jobs.CreateOrUpdateLabelRequest", [
961
+ { no: 1, name: "label", kind: "message", T: () => Label, options: { "buf.validate.field": { required: true } } }
926
962
  ]);
927
963
  }
928
- create(value?: PartialMessage<ManageLabelsRequest>): ManageLabelsRequest {
964
+ create(value?: PartialMessage<CreateOrUpdateLabelRequest>): CreateOrUpdateLabelRequest {
929
965
  const message = globalThis.Object.create((this.messagePrototype!));
930
- message.labels = [];
931
966
  if (value !== undefined)
932
- reflectionMergePartial<ManageLabelsRequest>(this, message, value);
967
+ reflectionMergePartial<CreateOrUpdateLabelRequest>(this, message, value);
933
968
  return message;
934
969
  }
935
- internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ManageLabelsRequest): ManageLabelsRequest {
970
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: CreateOrUpdateLabelRequest): CreateOrUpdateLabelRequest {
936
971
  let message = target ?? this.create(), end = reader.pos + length;
937
972
  while (reader.pos < end) {
938
973
  let [fieldNo, wireType] = reader.tag();
939
974
  switch (fieldNo) {
940
- case /* repeated resources.jobs.labels.Label labels */ 1:
941
- message.labels.push(Label.internalBinaryRead(reader, reader.uint32(), options));
975
+ case /* resources.jobs.labels.Label label */ 1:
976
+ message.label = Label.internalBinaryRead(reader, reader.uint32(), options, message.label);
942
977
  break;
943
978
  default:
944
979
  let u = options.readUnknownField;
@@ -951,10 +986,10 @@ class ManageLabelsRequest$Type extends MessageType<ManageLabelsRequest> {
951
986
  }
952
987
  return message;
953
988
  }
954
- internalBinaryWrite(message: ManageLabelsRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
955
- /* repeated resources.jobs.labels.Label labels = 1; */
956
- for (let i = 0; i < message.labels.length; i++)
957
- Label.internalBinaryWrite(message.labels[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
989
+ internalBinaryWrite(message: CreateOrUpdateLabelRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
990
+ /* resources.jobs.labels.Label label = 1; */
991
+ if (message.label)
992
+ Label.internalBinaryWrite(message.label, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
958
993
  let u = options.writeUnknownFields;
959
994
  if (u !== false)
960
995
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -962,30 +997,29 @@ class ManageLabelsRequest$Type extends MessageType<ManageLabelsRequest> {
962
997
  }
963
998
  }
964
999
  /**
965
- * @generated MessageType for protobuf message services.jobs.ManageLabelsRequest
1000
+ * @generated MessageType for protobuf message services.jobs.CreateOrUpdateLabelRequest
966
1001
  */
967
- export const ManageLabelsRequest = new ManageLabelsRequest$Type();
1002
+ export const CreateOrUpdateLabelRequest = new CreateOrUpdateLabelRequest$Type();
968
1003
  // @generated message type with reflection information, may provide speed optimized methods
969
- class ManageLabelsResponse$Type extends MessageType<ManageLabelsResponse> {
1004
+ class CreateOrUpdateLabelResponse$Type extends MessageType<CreateOrUpdateLabelResponse> {
970
1005
  constructor() {
971
- super("services.jobs.ManageLabelsResponse", [
972
- { no: 1, name: "labels", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Label }
1006
+ super("services.jobs.CreateOrUpdateLabelResponse", [
1007
+ { no: 1, name: "label", kind: "message", T: () => Label }
973
1008
  ]);
974
1009
  }
975
- create(value?: PartialMessage<ManageLabelsResponse>): ManageLabelsResponse {
1010
+ create(value?: PartialMessage<CreateOrUpdateLabelResponse>): CreateOrUpdateLabelResponse {
976
1011
  const message = globalThis.Object.create((this.messagePrototype!));
977
- message.labels = [];
978
1012
  if (value !== undefined)
979
- reflectionMergePartial<ManageLabelsResponse>(this, message, value);
1013
+ reflectionMergePartial<CreateOrUpdateLabelResponse>(this, message, value);
980
1014
  return message;
981
1015
  }
982
- internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ManageLabelsResponse): ManageLabelsResponse {
1016
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: CreateOrUpdateLabelResponse): CreateOrUpdateLabelResponse {
983
1017
  let message = target ?? this.create(), end = reader.pos + length;
984
1018
  while (reader.pos < end) {
985
1019
  let [fieldNo, wireType] = reader.tag();
986
1020
  switch (fieldNo) {
987
- case /* repeated resources.jobs.labels.Label labels */ 1:
988
- message.labels.push(Label.internalBinaryRead(reader, reader.uint32(), options));
1021
+ case /* resources.jobs.labels.Label label */ 1:
1022
+ message.label = Label.internalBinaryRead(reader, reader.uint32(), options, message.label);
989
1023
  break;
990
1024
  default:
991
1025
  let u = options.readUnknownField;
@@ -998,10 +1032,188 @@ class ManageLabelsResponse$Type extends MessageType<ManageLabelsResponse> {
998
1032
  }
999
1033
  return message;
1000
1034
  }
1001
- internalBinaryWrite(message: ManageLabelsResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1002
- /* repeated resources.jobs.labels.Label labels = 1; */
1003
- for (let i = 0; i < message.labels.length; i++)
1004
- Label.internalBinaryWrite(message.labels[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
1035
+ internalBinaryWrite(message: CreateOrUpdateLabelResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1036
+ /* resources.jobs.labels.Label label = 1; */
1037
+ if (message.label)
1038
+ Label.internalBinaryWrite(message.label, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
1039
+ let u = options.writeUnknownFields;
1040
+ if (u !== false)
1041
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1042
+ return writer;
1043
+ }
1044
+ }
1045
+ /**
1046
+ * @generated MessageType for protobuf message services.jobs.CreateOrUpdateLabelResponse
1047
+ */
1048
+ export const CreateOrUpdateLabelResponse = new CreateOrUpdateLabelResponse$Type();
1049
+ // @generated message type with reflection information, may provide speed optimized methods
1050
+ class DeleteLabelRequest$Type extends MessageType<DeleteLabelRequest> {
1051
+ constructor() {
1052
+ super("services.jobs.DeleteLabelRequest", [
1053
+ { no: 1, name: "id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/, options: { "buf.validate.field": { int64: { gt: "0" } } } }
1054
+ ]);
1055
+ }
1056
+ create(value?: PartialMessage<DeleteLabelRequest>): DeleteLabelRequest {
1057
+ const message = globalThis.Object.create((this.messagePrototype!));
1058
+ message.id = 0;
1059
+ if (value !== undefined)
1060
+ reflectionMergePartial<DeleteLabelRequest>(this, message, value);
1061
+ return message;
1062
+ }
1063
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DeleteLabelRequest): DeleteLabelRequest {
1064
+ let message = target ?? this.create(), end = reader.pos + length;
1065
+ while (reader.pos < end) {
1066
+ let [fieldNo, wireType] = reader.tag();
1067
+ switch (fieldNo) {
1068
+ case /* int64 id */ 1:
1069
+ message.id = reader.int64().toNumber();
1070
+ break;
1071
+ default:
1072
+ let u = options.readUnknownField;
1073
+ if (u === "throw")
1074
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1075
+ let d = reader.skip(wireType);
1076
+ if (u !== false)
1077
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1078
+ }
1079
+ }
1080
+ return message;
1081
+ }
1082
+ internalBinaryWrite(message: DeleteLabelRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1083
+ /* int64 id = 1; */
1084
+ if (message.id !== 0)
1085
+ writer.tag(1, WireType.Varint).int64(message.id);
1086
+ let u = options.writeUnknownFields;
1087
+ if (u !== false)
1088
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1089
+ return writer;
1090
+ }
1091
+ }
1092
+ /**
1093
+ * @generated MessageType for protobuf message services.jobs.DeleteLabelRequest
1094
+ */
1095
+ export const DeleteLabelRequest = new DeleteLabelRequest$Type();
1096
+ // @generated message type with reflection information, may provide speed optimized methods
1097
+ class DeleteLabelResponse$Type extends MessageType<DeleteLabelResponse> {
1098
+ constructor() {
1099
+ super("services.jobs.DeleteLabelResponse", []);
1100
+ }
1101
+ create(value?: PartialMessage<DeleteLabelResponse>): DeleteLabelResponse {
1102
+ const message = globalThis.Object.create((this.messagePrototype!));
1103
+ if (value !== undefined)
1104
+ reflectionMergePartial<DeleteLabelResponse>(this, message, value);
1105
+ return message;
1106
+ }
1107
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DeleteLabelResponse): DeleteLabelResponse {
1108
+ let message = target ?? this.create(), end = reader.pos + length;
1109
+ while (reader.pos < end) {
1110
+ let [fieldNo, wireType] = reader.tag();
1111
+ switch (fieldNo) {
1112
+ default:
1113
+ let u = options.readUnknownField;
1114
+ if (u === "throw")
1115
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1116
+ let d = reader.skip(wireType);
1117
+ if (u !== false)
1118
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1119
+ }
1120
+ }
1121
+ return message;
1122
+ }
1123
+ internalBinaryWrite(message: DeleteLabelResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1124
+ let u = options.writeUnknownFields;
1125
+ if (u !== false)
1126
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1127
+ return writer;
1128
+ }
1129
+ }
1130
+ /**
1131
+ * @generated MessageType for protobuf message services.jobs.DeleteLabelResponse
1132
+ */
1133
+ export const DeleteLabelResponse = new DeleteLabelResponse$Type();
1134
+ // @generated message type with reflection information, may provide speed optimized methods
1135
+ class ReorderLabelsRequest$Type extends MessageType<ReorderLabelsRequest> {
1136
+ constructor() {
1137
+ super("services.jobs.ReorderLabelsRequest", [
1138
+ { no: 1, name: "label_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/, options: { "buf.validate.field": { repeated: { minItems: "1", maxItems: "50", items: { int64: { gt: "0" } } } } } }
1139
+ ]);
1140
+ }
1141
+ create(value?: PartialMessage<ReorderLabelsRequest>): ReorderLabelsRequest {
1142
+ const message = globalThis.Object.create((this.messagePrototype!));
1143
+ message.labelIds = [];
1144
+ if (value !== undefined)
1145
+ reflectionMergePartial<ReorderLabelsRequest>(this, message, value);
1146
+ return message;
1147
+ }
1148
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ReorderLabelsRequest): ReorderLabelsRequest {
1149
+ let message = target ?? this.create(), end = reader.pos + length;
1150
+ while (reader.pos < end) {
1151
+ let [fieldNo, wireType] = reader.tag();
1152
+ switch (fieldNo) {
1153
+ case /* repeated int64 label_ids */ 1:
1154
+ if (wireType === WireType.LengthDelimited)
1155
+ for (let e = reader.int32() + reader.pos; reader.pos < e;)
1156
+ message.labelIds.push(reader.int64().toNumber());
1157
+ else
1158
+ message.labelIds.push(reader.int64().toNumber());
1159
+ break;
1160
+ default:
1161
+ let u = options.readUnknownField;
1162
+ if (u === "throw")
1163
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1164
+ let d = reader.skip(wireType);
1165
+ if (u !== false)
1166
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1167
+ }
1168
+ }
1169
+ return message;
1170
+ }
1171
+ internalBinaryWrite(message: ReorderLabelsRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1172
+ /* repeated int64 label_ids = 1; */
1173
+ if (message.labelIds.length) {
1174
+ writer.tag(1, WireType.LengthDelimited).fork();
1175
+ for (let i = 0; i < message.labelIds.length; i++)
1176
+ writer.int64(message.labelIds[i]);
1177
+ writer.join();
1178
+ }
1179
+ let u = options.writeUnknownFields;
1180
+ if (u !== false)
1181
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
1182
+ return writer;
1183
+ }
1184
+ }
1185
+ /**
1186
+ * @generated MessageType for protobuf message services.jobs.ReorderLabelsRequest
1187
+ */
1188
+ export const ReorderLabelsRequest = new ReorderLabelsRequest$Type();
1189
+ // @generated message type with reflection information, may provide speed optimized methods
1190
+ class ReorderLabelsResponse$Type extends MessageType<ReorderLabelsResponse> {
1191
+ constructor() {
1192
+ super("services.jobs.ReorderLabelsResponse", []);
1193
+ }
1194
+ create(value?: PartialMessage<ReorderLabelsResponse>): ReorderLabelsResponse {
1195
+ const message = globalThis.Object.create((this.messagePrototype!));
1196
+ if (value !== undefined)
1197
+ reflectionMergePartial<ReorderLabelsResponse>(this, message, value);
1198
+ return message;
1199
+ }
1200
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ReorderLabelsResponse): ReorderLabelsResponse {
1201
+ let message = target ?? this.create(), end = reader.pos + length;
1202
+ while (reader.pos < end) {
1203
+ let [fieldNo, wireType] = reader.tag();
1204
+ switch (fieldNo) {
1205
+ default:
1206
+ let u = options.readUnknownField;
1207
+ if (u === "throw")
1208
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
1209
+ let d = reader.skip(wireType);
1210
+ if (u !== false)
1211
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
1212
+ }
1213
+ }
1214
+ return message;
1215
+ }
1216
+ internalBinaryWrite(message: ReorderLabelsResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1005
1217
  let u = options.writeUnknownFields;
1006
1218
  if (u !== false)
1007
1219
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -1009,14 +1221,14 @@ class ManageLabelsResponse$Type extends MessageType<ManageLabelsResponse> {
1009
1221
  }
1010
1222
  }
1011
1223
  /**
1012
- * @generated MessageType for protobuf message services.jobs.ManageLabelsResponse
1224
+ * @generated MessageType for protobuf message services.jobs.ReorderLabelsResponse
1013
1225
  */
1014
- export const ManageLabelsResponse = new ManageLabelsResponse$Type();
1226
+ export const ReorderLabelsResponse = new ReorderLabelsResponse$Type();
1015
1227
  // @generated message type with reflection information, may provide speed optimized methods
1016
1228
  class GetColleagueLabelsStatsRequest$Type extends MessageType<GetColleagueLabelsStatsRequest> {
1017
1229
  constructor() {
1018
1230
  super("services.jobs.GetColleagueLabelsStatsRequest", [
1019
- { no: 1, name: "label_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }
1231
+ { no: 1, name: "label_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/, options: { "buf.validate.field": { repeated: { maxItems: "50" } } } }
1020
1232
  ]);
1021
1233
  }
1022
1234
  create(value?: PartialMessage<GetColleagueLabelsStatsRequest>): GetColleagueLabelsStatsRequest {
@@ -1124,6 +1336,8 @@ export const ColleaguesService = new ServiceType("services.jobs.ColleaguesServic
1124
1336
  { name: "ListColleagueActivity", options: { "codegen.perms.perms": { enabled: true, attrs: [{ key: "Types", type: "ATTRIBUTE_TYPE_STRING_LIST", validStringList: ["HIRED", "FIRED", "PROMOTED", "DEMOTED", "ABSENCE_DATE", "NOTE", "LABELS", "NAME"] }] } }, I: ListColleagueActivityRequest, O: ListColleagueActivityResponse },
1125
1337
  { name: "SetColleagueProps", options: { "codegen.perms.perms": { enabled: true, attrs: [{ key: "Access", type: "ATTRIBUTE_TYPE_STRING_LIST", validStringList: ["Own", "Lower_Rank", "Same_Rank", "Any"] }, { key: "Types", type: "ATTRIBUTE_TYPE_STRING_LIST", validStringList: ["AbsenceDate", "Note", "Labels", "Name"] }] } }, I: SetColleaguePropsRequest, O: SetColleaguePropsResponse },
1126
1338
  { name: "GetColleagueLabels", options: { "codegen.perms.perms": { enabled: true, name: "GetColleague" } }, I: GetColleagueLabelsRequest, O: GetColleagueLabelsResponse },
1127
- { name: "ManageLabels", options: { "codegen.perms.perms": { enabled: true } }, I: ManageLabelsRequest, O: ManageLabelsResponse },
1339
+ { name: "CreateOrUpdateLabel", options: { "codegen.perms.perms": { enabled: true } }, I: CreateOrUpdateLabelRequest, O: CreateOrUpdateLabelResponse },
1340
+ { name: "DeleteLabel", options: { "codegen.perms.perms": { enabled: true, name: "CreateOrUpdateLabel" } }, I: DeleteLabelRequest, O: DeleteLabelResponse },
1341
+ { name: "ReorderLabels", options: { "codegen.perms.perms": { enabled: true, name: "CreateOrUpdateLabel" } }, I: ReorderLabelsRequest, O: ReorderLabelsResponse },
1128
1342
  { name: "GetColleagueLabelsStats", options: { "codegen.perms.perms": { enabled: true, name: "GetColleague" } }, I: GetColleagueLabelsStatsRequest, O: GetColleagueLabelsStatsResponse }
1129
1343
  ], { "codegen.perms.perms_svc": { order: 61, icon: "i-mdi-account-group" } });
@@ -16,6 +16,7 @@ import { reflectionMergePartial } from "@protobuf-ts/runtime";
16
16
  import { MessageType } from "@protobuf-ts/runtime";
17
17
  import { ConductEntry } from "../../resources/jobs/conduct/conduct";
18
18
  import { PaginationResponse } from "../../resources/common/database/database";
19
+ import { UserSelector } from "../../resources/jobs/user_selector";
19
20
  import { ConductType } from "../../resources/jobs/conduct/conduct";
20
21
  import { Sort } from "../../resources/common/database/database";
21
22
  import { PaginationRequest } from "../../resources/common/database/database";
@@ -35,6 +36,7 @@ export interface ListConductEntriesRequest {
35
36
  sort?: Sort;
36
37
  /**
37
38
  * Search params
39
+ * Conduct types to filter by. If empty, all conduct types will be returned.
38
40
  *
39
41
  * @generated from protobuf field: repeated resources.jobs.conduct.ConductType types = 3
40
42
  */
@@ -48,9 +50,9 @@ export interface ListConductEntriesRequest {
48
50
  */
49
51
  showDrafts?: boolean;
50
52
  /**
51
- * @generated from protobuf field: repeated int32 user_ids = 6
53
+ * @generated from protobuf field: optional resources.jobs.UserSelector users = 6
52
54
  */
53
- userIds: number[];
55
+ users?: UserSelector;
54
56
  /**
55
57
  * @generated from protobuf field: repeated int64 ids = 7
56
58
  */
@@ -147,18 +149,17 @@ class ListConductEntriesRequest$Type extends MessageType<ListConductEntriesReque
147
149
  super("services.jobs.ListConductEntriesRequest", [
148
150
  { no: 1, name: "pagination", kind: "message", T: () => PaginationRequest, options: { "buf.validate.field": { required: true } } },
149
151
  { no: 2, name: "sort", kind: "message", T: () => Sort },
150
- { no: 3, name: "types", kind: "enum", repeat: 1 /*RepeatType.PACKED*/, T: () => ["resources.jobs.conduct.ConductType", ConductType, "CONDUCT_TYPE_"], options: { "buf.validate.field": { repeated: { items: { enum: { definedOnly: true } } } } } },
152
+ { no: 3, name: "types", kind: "enum", repeat: 1 /*RepeatType.PACKED*/, T: () => ["resources.jobs.conduct.ConductType", ConductType, "CONDUCT_TYPE_"], options: { "buf.validate.field": { repeated: { maxItems: "10", items: { enum: { definedOnly: true } } } } } },
151
153
  { no: 4, name: "show_expired", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
152
154
  { no: 5, name: "show_drafts", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
153
- { no: 6, name: "user_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/ },
154
- { no: 7, name: "ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
155
+ { no: 6, name: "users", kind: "message", T: () => UserSelector },
156
+ { no: 7, name: "ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/, options: { "buf.validate.field": { repeated: { maxItems: "100" } } } },
155
157
  { no: 8, name: "show_deleted", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }
156
158
  ]);
157
159
  }
158
160
  create(value?: PartialMessage<ListConductEntriesRequest>): ListConductEntriesRequest {
159
161
  const message = globalThis.Object.create((this.messagePrototype!));
160
162
  message.types = [];
161
- message.userIds = [];
162
163
  message.ids = [];
163
164
  if (value !== undefined)
164
165
  reflectionMergePartial<ListConductEntriesRequest>(this, message, value);
@@ -188,12 +189,8 @@ class ListConductEntriesRequest$Type extends MessageType<ListConductEntriesReque
188
189
  case /* optional bool show_drafts */ 5:
189
190
  message.showDrafts = reader.bool();
190
191
  break;
191
- case /* repeated int32 user_ids */ 6:
192
- if (wireType === WireType.LengthDelimited)
193
- for (let e = reader.int32() + reader.pos; reader.pos < e;)
194
- message.userIds.push(reader.int32());
195
- else
196
- message.userIds.push(reader.int32());
192
+ case /* optional resources.jobs.UserSelector users */ 6:
193
+ message.users = UserSelector.internalBinaryRead(reader, reader.uint32(), options, message.users);
197
194
  break;
198
195
  case /* repeated int64 ids */ 7:
199
196
  if (wireType === WireType.LengthDelimited)
@@ -236,13 +233,9 @@ class ListConductEntriesRequest$Type extends MessageType<ListConductEntriesReque
236
233
  /* optional bool show_drafts = 5; */
237
234
  if (message.showDrafts !== undefined)
238
235
  writer.tag(5, WireType.Varint).bool(message.showDrafts);
239
- /* repeated int32 user_ids = 6; */
240
- if (message.userIds.length) {
241
- writer.tag(6, WireType.LengthDelimited).fork();
242
- for (let i = 0; i < message.userIds.length; i++)
243
- writer.int32(message.userIds[i]);
244
- writer.join();
245
- }
236
+ /* optional resources.jobs.UserSelector users = 6; */
237
+ if (message.users)
238
+ UserSelector.internalBinaryWrite(message.users, writer.tag(6, WireType.LengthDelimited).fork(), options).join();
246
239
  /* repeated int64 ids = 7; */
247
240
  if (message.ids.length) {
248
241
  writer.tag(7, WireType.LengthDelimited).fork();