@fivenet-app/gen 2026.7.3 → 2026.8.5

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 (40) hide show
  1. package/google/protobuf/descriptor.ts +3 -11
  2. package/google/protobuf/timestamp.ts +6 -7
  3. package/package.json +1 -1
  4. package/perms.ts +21 -4
  5. package/resources/audit/audit.ts +19 -9
  6. package/resources/calendar/calendar.ts +11 -0
  7. package/resources/calendar/entries/entries.ts +23 -0
  8. package/resources/centrum/dispatches/dispatches.ts +8 -8
  9. package/resources/centrum/units/units.ts +5 -5
  10. package/resources/citizens/labels/access.ts +10 -6
  11. package/resources/dbsync/state.ts +192 -0
  12. package/resources/documents/stamps/access.ts +25 -0
  13. package/resources/documents/stamps/stamp.ts +0 -21
  14. package/resources/documents/templates/templates.ts +61 -83
  15. package/resources/documents/workflow/workflow.ts +61 -1
  16. package/resources/jobs/groups/access/access.ts +29 -0
  17. package/resources/jobs/groups/activity.ts +332 -0
  18. package/resources/jobs/groups/group.ts +1666 -0
  19. package/resources/jobs/user_selector.ts +184 -0
  20. package/resources/settings/status.ts +197 -105
  21. package/services/calendar/calendar.ts +1 -1
  22. package/services/calendar/entries.ts +3 -3
  23. package/services/centrum/units.ts +3 -3
  24. package/services/completor/completor.ts +2 -2
  25. package/services/documents/approval.ts +2 -2
  26. package/services/documents/documents.ts +9 -9
  27. package/services/documents/templates.client.ts +13 -0
  28. package/services/documents/templates.ts +136 -14
  29. package/services/jobs/colleagues.client.ts +34 -8
  30. package/services/jobs/colleagues.ts +263 -74
  31. package/services/jobs/conduct.ts +11 -19
  32. package/services/jobs/groups.client.ts +311 -0
  33. package/services/jobs/groups.ts +3596 -1
  34. package/services/jobs/timeclock.ts +30 -27
  35. package/services/qualifications/qualifications.ts +26 -4
  36. package/services/settings/settings.ts +1 -1
  37. package/services/sync/sync.client.ts +90 -37
  38. package/services/sync/sync.ts +555 -6
  39. package/services/vehicles/vehicles.ts +2 -2
  40. package/svcs.ts +31 -1
@@ -0,0 +1,184 @@
1
+ // @generated by protobuf-ts 2.11.1 with parameter force_server_none,long_type_number,optimize_speed,ts_nocheck
2
+ // @generated from protobuf file "resources/jobs/user_selector.proto" (package "resources.jobs", syntax proto3)
3
+ // tslint:disable
4
+ // @ts-nocheck
5
+ import type { BinaryWriteOptions } from "@protobuf-ts/runtime";
6
+ import type { IBinaryWriter } from "@protobuf-ts/runtime";
7
+ import type { BinaryReadOptions } from "@protobuf-ts/runtime";
8
+ import type { IBinaryReader } from "@protobuf-ts/runtime";
9
+ import { UnknownFieldHandler } from "@protobuf-ts/runtime";
10
+ import { WireType } from "@protobuf-ts/runtime";
11
+ import type { PartialMessage } from "@protobuf-ts/runtime";
12
+ import { reflectionMergePartial } from "@protobuf-ts/runtime";
13
+ import { MessageType } from "@protobuf-ts/runtime";
14
+ /**
15
+ * @generated from protobuf message resources.jobs.UserSelector
16
+ */
17
+ export interface UserSelector {
18
+ /**
19
+ * Explicit users to include.
20
+ *
21
+ * @generated from protobuf field: repeated int32 user_ids = 1
22
+ */
23
+ userIds: number[];
24
+ /**
25
+ * Users resolved from job groups.
26
+ *
27
+ * @generated from protobuf field: resources.jobs.GroupUserSelector groups = 2
28
+ */
29
+ groups?: GroupUserSelector;
30
+ }
31
+ /**
32
+ * @generated from protobuf message resources.jobs.GroupUserSelector
33
+ */
34
+ export interface GroupUserSelector {
35
+ /**
36
+ * @generated from protobuf field: repeated int64 group_ids = 1
37
+ */
38
+ groupIds: number[];
39
+ /**
40
+ * Include group leaders even if they are not resolved members.
41
+ *
42
+ * @generated from protobuf field: bool include_leaders = 2
43
+ */
44
+ includeLeaders: boolean;
45
+ /**
46
+ * Normally false: group exclusions should be respected.
47
+ *
48
+ * @generated from protobuf field: bool include_excluded = 3
49
+ */
50
+ includeExcluded: boolean;
51
+ }
52
+ // @generated message type with reflection information, may provide speed optimized methods
53
+ class UserSelector$Type extends MessageType<UserSelector> {
54
+ constructor() {
55
+ super("resources.jobs.UserSelector", [
56
+ { no: 1, name: "user_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { repeated: { maxItems: "50", items: { int32: { gt: 0 } } } } } },
57
+ { no: 2, name: "groups", kind: "message", T: () => GroupUserSelector }
58
+ ]);
59
+ }
60
+ create(value?: PartialMessage<UserSelector>): UserSelector {
61
+ const message = globalThis.Object.create((this.messagePrototype!));
62
+ message.userIds = [];
63
+ if (value !== undefined)
64
+ reflectionMergePartial<UserSelector>(this, message, value);
65
+ return message;
66
+ }
67
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: UserSelector): UserSelector {
68
+ let message = target ?? this.create(), end = reader.pos + length;
69
+ while (reader.pos < end) {
70
+ let [fieldNo, wireType] = reader.tag();
71
+ switch (fieldNo) {
72
+ case /* repeated int32 user_ids */ 1:
73
+ if (wireType === WireType.LengthDelimited)
74
+ for (let e = reader.int32() + reader.pos; reader.pos < e;)
75
+ message.userIds.push(reader.int32());
76
+ else
77
+ message.userIds.push(reader.int32());
78
+ break;
79
+ case /* resources.jobs.GroupUserSelector groups */ 2:
80
+ message.groups = GroupUserSelector.internalBinaryRead(reader, reader.uint32(), options, message.groups);
81
+ break;
82
+ default:
83
+ let u = options.readUnknownField;
84
+ if (u === "throw")
85
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
86
+ let d = reader.skip(wireType);
87
+ if (u !== false)
88
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
89
+ }
90
+ }
91
+ return message;
92
+ }
93
+ internalBinaryWrite(message: UserSelector, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
94
+ /* repeated int32 user_ids = 1; */
95
+ if (message.userIds.length) {
96
+ writer.tag(1, WireType.LengthDelimited).fork();
97
+ for (let i = 0; i < message.userIds.length; i++)
98
+ writer.int32(message.userIds[i]);
99
+ writer.join();
100
+ }
101
+ /* resources.jobs.GroupUserSelector groups = 2; */
102
+ if (message.groups)
103
+ GroupUserSelector.internalBinaryWrite(message.groups, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
104
+ let u = options.writeUnknownFields;
105
+ if (u !== false)
106
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
107
+ return writer;
108
+ }
109
+ }
110
+ /**
111
+ * @generated MessageType for protobuf message resources.jobs.UserSelector
112
+ */
113
+ export const UserSelector = new UserSelector$Type();
114
+ // @generated message type with reflection information, may provide speed optimized methods
115
+ class GroupUserSelector$Type extends MessageType<GroupUserSelector> {
116
+ constructor() {
117
+ super("resources.jobs.GroupUserSelector", [
118
+ { no: 1, name: "group_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/, options: { "buf.validate.field": { repeated: { maxItems: "5", items: { int64: { gt: "0" } } } } } },
119
+ { no: 2, name: "include_leaders", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
120
+ { no: 3, name: "include_excluded", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
121
+ ]);
122
+ }
123
+ create(value?: PartialMessage<GroupUserSelector>): GroupUserSelector {
124
+ const message = globalThis.Object.create((this.messagePrototype!));
125
+ message.groupIds = [];
126
+ message.includeLeaders = false;
127
+ message.includeExcluded = false;
128
+ if (value !== undefined)
129
+ reflectionMergePartial<GroupUserSelector>(this, message, value);
130
+ return message;
131
+ }
132
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: GroupUserSelector): GroupUserSelector {
133
+ let message = target ?? this.create(), end = reader.pos + length;
134
+ while (reader.pos < end) {
135
+ let [fieldNo, wireType] = reader.tag();
136
+ switch (fieldNo) {
137
+ case /* repeated int64 group_ids */ 1:
138
+ if (wireType === WireType.LengthDelimited)
139
+ for (let e = reader.int32() + reader.pos; reader.pos < e;)
140
+ message.groupIds.push(reader.int64().toNumber());
141
+ else
142
+ message.groupIds.push(reader.int64().toNumber());
143
+ break;
144
+ case /* bool include_leaders */ 2:
145
+ message.includeLeaders = reader.bool();
146
+ break;
147
+ case /* bool include_excluded */ 3:
148
+ message.includeExcluded = reader.bool();
149
+ break;
150
+ default:
151
+ let u = options.readUnknownField;
152
+ if (u === "throw")
153
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
154
+ let d = reader.skip(wireType);
155
+ if (u !== false)
156
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
157
+ }
158
+ }
159
+ return message;
160
+ }
161
+ internalBinaryWrite(message: GroupUserSelector, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
162
+ /* repeated int64 group_ids = 1; */
163
+ if (message.groupIds.length) {
164
+ writer.tag(1, WireType.LengthDelimited).fork();
165
+ for (let i = 0; i < message.groupIds.length; i++)
166
+ writer.int64(message.groupIds[i]);
167
+ writer.join();
168
+ }
169
+ /* bool include_leaders = 2; */
170
+ if (message.includeLeaders !== false)
171
+ writer.tag(2, WireType.Varint).bool(message.includeLeaders);
172
+ /* bool include_excluded = 3; */
173
+ if (message.includeExcluded !== false)
174
+ writer.tag(3, WireType.Varint).bool(message.includeExcluded);
175
+ let u = options.writeUnknownFields;
176
+ if (u !== false)
177
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
178
+ return writer;
179
+ }
180
+ }
181
+ /**
182
+ * @generated MessageType for protobuf message resources.jobs.GroupUserSelector
183
+ */
184
+ export const GroupUserSelector = new GroupUserSelector$Type();
@@ -11,6 +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 { DBSyncTableSyncState } from "../dbsync/state";
14
15
  import { Timestamp } from "../timestamp/timestamp";
15
16
  /**
16
17
  * @generated from protobuf message resources.settings.SystemStatus
@@ -25,13 +26,13 @@ export interface SystemStatus {
25
26
  */
26
27
  nats?: Nats;
27
28
  /**
28
- * @generated from protobuf field: resources.settings.DBSyncStatus dbsync = 3
29
+ * @generated from protobuf field: resources.settings.VersionStatus version = 3
29
30
  */
30
- dbsync?: DBSyncStatus;
31
+ version?: VersionStatus;
31
32
  /**
32
- * @generated from protobuf field: resources.settings.VersionStatus version = 4
33
+ * @generated from protobuf field: resources.settings.DBSyncStatus dbsync = 4
33
34
  */
34
- version?: VersionStatus;
35
+ dbsync?: DBSyncStatus;
35
36
  }
36
37
  /**
37
38
  * @generated from protobuf message resources.settings.Nats
@@ -45,6 +46,10 @@ export interface Nats {
45
46
  * @generated from protobuf field: bool connected = 2
46
47
  */
47
48
  connected: boolean;
49
+ /**
50
+ * @generated from protobuf field: string migration_version = 3
51
+ */
52
+ migrationVersion: string;
48
53
  }
49
54
  /**
50
55
  * @generated from protobuf message resources.settings.Database
@@ -79,27 +84,6 @@ export interface Database {
79
84
  */
80
85
  tablesOk: boolean;
81
86
  }
82
- /**
83
- * @generated from protobuf message resources.settings.DBSyncStatus
84
- */
85
- export interface DBSyncStatus {
86
- /**
87
- * @generated from protobuf field: bool enabled = 1
88
- */
89
- enabled: boolean;
90
- /**
91
- * @generated from protobuf field: optional resources.timestamp.Timestamp last_synced_data = 2
92
- */
93
- lastSyncedData?: Timestamp;
94
- /**
95
- * @generated from protobuf field: optional resources.timestamp.Timestamp last_synced_activity = 3
96
- */
97
- lastSyncedActivity?: Timestamp;
98
- /**
99
- * @generated from protobuf field: optional string last_dbsync_version = 4
100
- */
101
- lastDbsyncVersion?: string;
102
- }
103
87
  /**
104
88
  * @generated from protobuf message resources.settings.VersionStatus
105
89
  */
@@ -130,14 +114,52 @@ export interface NewVersionInfo {
130
114
  */
131
115
  releaseDate?: Timestamp;
132
116
  }
117
+ /**
118
+ * @generated from protobuf message resources.settings.DBSyncStatus
119
+ */
120
+ export interface DBSyncStatus {
121
+ /**
122
+ * @generated from protobuf field: bool enabled = 1
123
+ */
124
+ enabled: boolean;
125
+ /**
126
+ * @generated from protobuf field: optional resources.timestamp.Timestamp last_synced_data = 2
127
+ */
128
+ lastSyncedData?: Timestamp;
129
+ /**
130
+ * @generated from protobuf field: optional resources.timestamp.Timestamp last_synced_activity = 3
131
+ */
132
+ lastSyncedActivity?: Timestamp;
133
+ /**
134
+ * @generated from protobuf field: optional string last_dbsync_version = 4
135
+ */
136
+ lastDbsyncVersion?: string;
137
+ /**
138
+ * @generated from protobuf field: bool stream_connected = 5
139
+ */
140
+ streamConnected: boolean;
141
+ /**
142
+ * @generated from protobuf field: optional resources.settings.DBSyncSyncState sync_state = 6
143
+ */
144
+ syncState?: DBSyncSyncState;
145
+ }
146
+ /**
147
+ * @generated from protobuf message resources.settings.DBSyncSyncState
148
+ */
149
+ export interface DBSyncSyncState {
150
+ /**
151
+ * @generated from protobuf field: repeated resources.dbsync.DBSyncTableSyncState tables = 1
152
+ */
153
+ tables: DBSyncTableSyncState[];
154
+ }
133
155
  // @generated message type with reflection information, may provide speed optimized methods
134
156
  class SystemStatus$Type extends MessageType<SystemStatus> {
135
157
  constructor() {
136
158
  super("resources.settings.SystemStatus", [
137
159
  { no: 1, name: "database", kind: "message", T: () => Database },
138
160
  { no: 2, name: "nats", kind: "message", T: () => Nats },
139
- { no: 3, name: "dbsync", kind: "message", T: () => DBSyncStatus },
140
- { no: 4, name: "version", kind: "message", T: () => VersionStatus }
161
+ { no: 3, name: "version", kind: "message", T: () => VersionStatus },
162
+ { no: 4, name: "dbsync", kind: "message", T: () => DBSyncStatus }
141
163
  ]);
142
164
  }
143
165
  create(value?: PartialMessage<SystemStatus>): SystemStatus {
@@ -157,12 +179,12 @@ class SystemStatus$Type extends MessageType<SystemStatus> {
157
179
  case /* resources.settings.Nats nats */ 2:
158
180
  message.nats = Nats.internalBinaryRead(reader, reader.uint32(), options, message.nats);
159
181
  break;
160
- case /* resources.settings.DBSyncStatus dbsync */ 3:
161
- message.dbsync = DBSyncStatus.internalBinaryRead(reader, reader.uint32(), options, message.dbsync);
162
- break;
163
- case /* resources.settings.VersionStatus version */ 4:
182
+ case /* resources.settings.VersionStatus version */ 3:
164
183
  message.version = VersionStatus.internalBinaryRead(reader, reader.uint32(), options, message.version);
165
184
  break;
185
+ case /* resources.settings.DBSyncStatus dbsync */ 4:
186
+ message.dbsync = DBSyncStatus.internalBinaryRead(reader, reader.uint32(), options, message.dbsync);
187
+ break;
166
188
  default:
167
189
  let u = options.readUnknownField;
168
190
  if (u === "throw")
@@ -181,12 +203,12 @@ class SystemStatus$Type extends MessageType<SystemStatus> {
181
203
  /* resources.settings.Nats nats = 2; */
182
204
  if (message.nats)
183
205
  Nats.internalBinaryWrite(message.nats, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
184
- /* resources.settings.DBSyncStatus dbsync = 3; */
185
- if (message.dbsync)
186
- DBSyncStatus.internalBinaryWrite(message.dbsync, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
187
- /* resources.settings.VersionStatus version = 4; */
206
+ /* resources.settings.VersionStatus version = 3; */
188
207
  if (message.version)
189
- VersionStatus.internalBinaryWrite(message.version, writer.tag(4, WireType.LengthDelimited).fork(), options).join();
208
+ VersionStatus.internalBinaryWrite(message.version, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
209
+ /* resources.settings.DBSyncStatus dbsync = 4; */
210
+ if (message.dbsync)
211
+ DBSyncStatus.internalBinaryWrite(message.dbsync, writer.tag(4, WireType.LengthDelimited).fork(), options).join();
190
212
  let u = options.writeUnknownFields;
191
213
  if (u !== false)
192
214
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -202,13 +224,15 @@ class Nats$Type extends MessageType<Nats> {
202
224
  constructor() {
203
225
  super("resources.settings.Nats", [
204
226
  { no: 1, name: "version", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "32" } } } },
205
- { no: 2, name: "connected", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
227
+ { no: 2, name: "connected", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
228
+ { no: 3, name: "migration_version", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "32" } } } }
206
229
  ]);
207
230
  }
208
231
  create(value?: PartialMessage<Nats>): Nats {
209
232
  const message = globalThis.Object.create((this.messagePrototype!));
210
233
  message.version = "";
211
234
  message.connected = false;
235
+ message.migrationVersion = "";
212
236
  if (value !== undefined)
213
237
  reflectionMergePartial<Nats>(this, message, value);
214
238
  return message;
@@ -224,6 +248,9 @@ class Nats$Type extends MessageType<Nats> {
224
248
  case /* bool connected */ 2:
225
249
  message.connected = reader.bool();
226
250
  break;
251
+ case /* string migration_version */ 3:
252
+ message.migrationVersion = reader.string();
253
+ break;
227
254
  default:
228
255
  let u = options.readUnknownField;
229
256
  if (u === "throw")
@@ -242,6 +269,9 @@ class Nats$Type extends MessageType<Nats> {
242
269
  /* bool connected = 2; */
243
270
  if (message.connected !== false)
244
271
  writer.tag(2, WireType.Varint).bool(message.connected);
272
+ /* string migration_version = 3; */
273
+ if (message.migrationVersion !== "")
274
+ writer.tag(3, WireType.LengthDelimited).string(message.migrationVersion);
245
275
  let u = options.writeUnknownFields;
246
276
  if (u !== false)
247
277
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -348,74 +378,6 @@ class Database$Type extends MessageType<Database> {
348
378
  */
349
379
  export const Database = new Database$Type();
350
380
  // @generated message type with reflection information, may provide speed optimized methods
351
- class DBSyncStatus$Type extends MessageType<DBSyncStatus> {
352
- constructor() {
353
- super("resources.settings.DBSyncStatus", [
354
- { no: 1, name: "enabled", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
355
- { no: 2, name: "last_synced_data", kind: "message", T: () => Timestamp },
356
- { no: 3, name: "last_synced_activity", kind: "message", T: () => Timestamp },
357
- { no: 4, name: "last_dbsync_version", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "32" } } } }
358
- ]);
359
- }
360
- create(value?: PartialMessage<DBSyncStatus>): DBSyncStatus {
361
- const message = globalThis.Object.create((this.messagePrototype!));
362
- message.enabled = false;
363
- if (value !== undefined)
364
- reflectionMergePartial<DBSyncStatus>(this, message, value);
365
- return message;
366
- }
367
- internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DBSyncStatus): DBSyncStatus {
368
- let message = target ?? this.create(), end = reader.pos + length;
369
- while (reader.pos < end) {
370
- let [fieldNo, wireType] = reader.tag();
371
- switch (fieldNo) {
372
- case /* bool enabled */ 1:
373
- message.enabled = reader.bool();
374
- break;
375
- case /* optional resources.timestamp.Timestamp last_synced_data */ 2:
376
- message.lastSyncedData = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.lastSyncedData);
377
- break;
378
- case /* optional resources.timestamp.Timestamp last_synced_activity */ 3:
379
- message.lastSyncedActivity = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.lastSyncedActivity);
380
- break;
381
- case /* optional string last_dbsync_version */ 4:
382
- message.lastDbsyncVersion = reader.string();
383
- break;
384
- default:
385
- let u = options.readUnknownField;
386
- if (u === "throw")
387
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
388
- let d = reader.skip(wireType);
389
- if (u !== false)
390
- (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
391
- }
392
- }
393
- return message;
394
- }
395
- internalBinaryWrite(message: DBSyncStatus, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
396
- /* bool enabled = 1; */
397
- if (message.enabled !== false)
398
- writer.tag(1, WireType.Varint).bool(message.enabled);
399
- /* optional resources.timestamp.Timestamp last_synced_data = 2; */
400
- if (message.lastSyncedData)
401
- Timestamp.internalBinaryWrite(message.lastSyncedData, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
402
- /* optional resources.timestamp.Timestamp last_synced_activity = 3; */
403
- if (message.lastSyncedActivity)
404
- Timestamp.internalBinaryWrite(message.lastSyncedActivity, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
405
- /* optional string last_dbsync_version = 4; */
406
- if (message.lastDbsyncVersion !== undefined)
407
- writer.tag(4, WireType.LengthDelimited).string(message.lastDbsyncVersion);
408
- let u = options.writeUnknownFields;
409
- if (u !== false)
410
- (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
411
- return writer;
412
- }
413
- }
414
- /**
415
- * @generated MessageType for protobuf message resources.settings.DBSyncStatus
416
- */
417
- export const DBSyncStatus = new DBSyncStatus$Type();
418
- // @generated message type with reflection information, may provide speed optimized methods
419
381
  class VersionStatus$Type extends MessageType<VersionStatus> {
420
382
  constructor() {
421
383
  super("resources.settings.VersionStatus", [
@@ -531,3 +493,133 @@ class NewVersionInfo$Type extends MessageType<NewVersionInfo> {
531
493
  * @generated MessageType for protobuf message resources.settings.NewVersionInfo
532
494
  */
533
495
  export const NewVersionInfo = new NewVersionInfo$Type();
496
+ // @generated message type with reflection information, may provide speed optimized methods
497
+ class DBSyncStatus$Type extends MessageType<DBSyncStatus> {
498
+ constructor() {
499
+ super("resources.settings.DBSyncStatus", [
500
+ { no: 1, name: "enabled", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
501
+ { no: 2, name: "last_synced_data", kind: "message", T: () => Timestamp },
502
+ { no: 3, name: "last_synced_activity", kind: "message", T: () => Timestamp },
503
+ { no: 4, name: "last_dbsync_version", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "32" } } } },
504
+ { no: 5, name: "stream_connected", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
505
+ { no: 6, name: "sync_state", kind: "message", T: () => DBSyncSyncState }
506
+ ]);
507
+ }
508
+ create(value?: PartialMessage<DBSyncStatus>): DBSyncStatus {
509
+ const message = globalThis.Object.create((this.messagePrototype!));
510
+ message.enabled = false;
511
+ message.streamConnected = false;
512
+ if (value !== undefined)
513
+ reflectionMergePartial<DBSyncStatus>(this, message, value);
514
+ return message;
515
+ }
516
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DBSyncStatus): DBSyncStatus {
517
+ let message = target ?? this.create(), end = reader.pos + length;
518
+ while (reader.pos < end) {
519
+ let [fieldNo, wireType] = reader.tag();
520
+ switch (fieldNo) {
521
+ case /* bool enabled */ 1:
522
+ message.enabled = reader.bool();
523
+ break;
524
+ case /* optional resources.timestamp.Timestamp last_synced_data */ 2:
525
+ message.lastSyncedData = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.lastSyncedData);
526
+ break;
527
+ case /* optional resources.timestamp.Timestamp last_synced_activity */ 3:
528
+ message.lastSyncedActivity = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.lastSyncedActivity);
529
+ break;
530
+ case /* optional string last_dbsync_version */ 4:
531
+ message.lastDbsyncVersion = reader.string();
532
+ break;
533
+ case /* bool stream_connected */ 5:
534
+ message.streamConnected = reader.bool();
535
+ break;
536
+ case /* optional resources.settings.DBSyncSyncState sync_state */ 6:
537
+ message.syncState = DBSyncSyncState.internalBinaryRead(reader, reader.uint32(), options, message.syncState);
538
+ break;
539
+ default:
540
+ let u = options.readUnknownField;
541
+ if (u === "throw")
542
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
543
+ let d = reader.skip(wireType);
544
+ if (u !== false)
545
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
546
+ }
547
+ }
548
+ return message;
549
+ }
550
+ internalBinaryWrite(message: DBSyncStatus, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
551
+ /* bool enabled = 1; */
552
+ if (message.enabled !== false)
553
+ writer.tag(1, WireType.Varint).bool(message.enabled);
554
+ /* optional resources.timestamp.Timestamp last_synced_data = 2; */
555
+ if (message.lastSyncedData)
556
+ Timestamp.internalBinaryWrite(message.lastSyncedData, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
557
+ /* optional resources.timestamp.Timestamp last_synced_activity = 3; */
558
+ if (message.lastSyncedActivity)
559
+ Timestamp.internalBinaryWrite(message.lastSyncedActivity, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
560
+ /* optional string last_dbsync_version = 4; */
561
+ if (message.lastDbsyncVersion !== undefined)
562
+ writer.tag(4, WireType.LengthDelimited).string(message.lastDbsyncVersion);
563
+ /* bool stream_connected = 5; */
564
+ if (message.streamConnected !== false)
565
+ writer.tag(5, WireType.Varint).bool(message.streamConnected);
566
+ /* optional resources.settings.DBSyncSyncState sync_state = 6; */
567
+ if (message.syncState)
568
+ DBSyncSyncState.internalBinaryWrite(message.syncState, writer.tag(6, WireType.LengthDelimited).fork(), options).join();
569
+ let u = options.writeUnknownFields;
570
+ if (u !== false)
571
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
572
+ return writer;
573
+ }
574
+ }
575
+ /**
576
+ * @generated MessageType for protobuf message resources.settings.DBSyncStatus
577
+ */
578
+ export const DBSyncStatus = new DBSyncStatus$Type();
579
+ // @generated message type with reflection information, may provide speed optimized methods
580
+ class DBSyncSyncState$Type extends MessageType<DBSyncSyncState> {
581
+ constructor() {
582
+ super("resources.settings.DBSyncSyncState", [
583
+ { no: 1, name: "tables", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => DBSyncTableSyncState, options: { "buf.validate.field": { repeated: { maxItems: "16" } } } }
584
+ ]);
585
+ }
586
+ create(value?: PartialMessage<DBSyncSyncState>): DBSyncSyncState {
587
+ const message = globalThis.Object.create((this.messagePrototype!));
588
+ message.tables = [];
589
+ if (value !== undefined)
590
+ reflectionMergePartial<DBSyncSyncState>(this, message, value);
591
+ return message;
592
+ }
593
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DBSyncSyncState): DBSyncSyncState {
594
+ let message = target ?? this.create(), end = reader.pos + length;
595
+ while (reader.pos < end) {
596
+ let [fieldNo, wireType] = reader.tag();
597
+ switch (fieldNo) {
598
+ case /* repeated resources.dbsync.DBSyncTableSyncState tables */ 1:
599
+ message.tables.push(DBSyncTableSyncState.internalBinaryRead(reader, reader.uint32(), options));
600
+ break;
601
+ default:
602
+ let u = options.readUnknownField;
603
+ if (u === "throw")
604
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
605
+ let d = reader.skip(wireType);
606
+ if (u !== false)
607
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
608
+ }
609
+ }
610
+ return message;
611
+ }
612
+ internalBinaryWrite(message: DBSyncSyncState, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
613
+ /* repeated resources.dbsync.DBSyncTableSyncState tables = 1; */
614
+ for (let i = 0; i < message.tables.length; i++)
615
+ DBSyncTableSyncState.internalBinaryWrite(message.tables[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
616
+ let u = options.writeUnknownFields;
617
+ if (u !== false)
618
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
619
+ return writer;
620
+ }
621
+ }
622
+ /**
623
+ * @generated MessageType for protobuf message resources.settings.DBSyncSyncState
624
+ */
625
+ export const DBSyncSyncState = new DBSyncSyncState$Type();
@@ -182,7 +182,7 @@ class ListCalendarsRequest$Type extends MessageType<ListCalendarsRequest> {
182
182
  { no: 2, name: "only_public", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
183
183
  { no: 3, name: "min_access_level", kind: "enum", opt: true, T: () => ["resources.calendar.access.AccessLevel", AccessLevel, "ACCESS_LEVEL_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
184
184
  { no: 4, name: "after", kind: "message", T: () => Timestamp },
185
- { no: 5, name: "calendar_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }
185
+ { no: 5, name: "calendar_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/, options: { "buf.validate.field": { repeated: { maxItems: "50" } } } }
186
186
  ]);
187
187
  }
188
188
  create(value?: PartialMessage<ListCalendarsRequest>): ListCalendarsRequest {
@@ -207,7 +207,7 @@ class ListCalendarEntriesRequest$Type extends MessageType<ListCalendarEntriesReq
207
207
  super("services.calendar.ListCalendarEntriesRequest", [
208
208
  { no: 1, name: "year", kind: "scalar", T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gte: 2023 } } } },
209
209
  { no: 2, name: "month", kind: "scalar", T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { lte: 12, gte: 1 } } } },
210
- { no: 3, name: "calendar_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
210
+ { no: 3, name: "calendar_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/, options: { "buf.validate.field": { repeated: { maxItems: "50" } } } },
211
211
  { no: 4, name: "show_hidden", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
212
212
  { no: 5, name: "after", kind: "message", T: () => Timestamp }
213
213
  ]);
@@ -525,7 +525,7 @@ class CreateOrUpdateCalendarEntryRequest$Type extends MessageType<CreateOrUpdate
525
525
  constructor() {
526
526
  super("services.calendar.CreateOrUpdateCalendarEntryRequest", [
527
527
  { no: 1, name: "entry", kind: "message", T: () => CalendarEntry, options: { "buf.validate.field": { required: true } } },
528
- { no: 2, name: "user_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/ }
528
+ { no: 2, name: "user_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { repeated: { maxItems: "25" } } } }
529
529
  ]);
530
530
  }
531
531
  create(value?: PartialMessage<CreateOrUpdateCalendarEntryRequest>): CreateOrUpdateCalendarEntryRequest {
@@ -718,7 +718,7 @@ class ShareCalendarEntryRequest$Type extends MessageType<ShareCalendarEntryReque
718
718
  constructor() {
719
719
  super("services.calendar.ShareCalendarEntryRequest", [
720
720
  { no: 1, name: "entry_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
721
- { no: 2, name: "user_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/ }
721
+ { no: 2, name: "user_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { repeated: { maxItems: "25" } } } }
722
722
  ]);
723
723
  }
724
724
  create(value?: PartialMessage<ShareCalendarEntryRequest>): ShareCalendarEntryRequest {
@@ -269,7 +269,7 @@ export const JoinUnitResponse = new JoinUnitResponse$Type();
269
269
  class ListUnitsRequest$Type extends MessageType<ListUnitsRequest> {
270
270
  constructor() {
271
271
  super("services.centrum.ListUnitsRequest", [
272
- { no: 1, name: "status", kind: "enum", repeat: 1 /*RepeatType.PACKED*/, T: () => ["resources.centrum.units.StatusUnit", StatusUnit, "STATUS_UNIT_"], options: { "buf.validate.field": { repeated: { items: { enum: { definedOnly: true } } } } } }
272
+ { no: 1, name: "status", kind: "enum", repeat: 1 /*RepeatType.PACKED*/, T: () => ["resources.centrum.units.StatusUnit", StatusUnit, "STATUS_UNIT_"], options: { "buf.validate.field": { repeated: { maxItems: "7", items: { enum: { definedOnly: true } } } } } }
273
273
  ]);
274
274
  }
275
275
  create(value?: PartialMessage<ListUnitsRequest>): ListUnitsRequest {
@@ -750,8 +750,8 @@ class AssignUnitRequest$Type extends MessageType<AssignUnitRequest> {
750
750
  constructor() {
751
751
  super("services.centrum.AssignUnitRequest", [
752
752
  { no: 1, name: "unit_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
753
- { no: 2, name: "to_add", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/ },
754
- { no: 3, name: "to_remove", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/ }
753
+ { no: 2, name: "to_add", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { repeated: { maxItems: "30" } } } },
754
+ { no: 3, name: "to_remove", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { repeated: { maxItems: "30" } } } }
755
755
  ]);
756
756
  }
757
757
  create(value?: PartialMessage<AssignUnitRequest>): AssignUnitRequest {
@@ -119,7 +119,7 @@ class CompleteCitizensRequest$Type extends MessageType<CompleteCitizensRequest>
119
119
  { no: 1, name: "search", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "64" } } } },
120
120
  { no: 2, name: "current_job", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
121
121
  { no: 3, name: "on_duty", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
122
- { no: 4, name: "user_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { repeated: { items: { int32: { gt: 0 } } } } } },
122
+ { no: 4, name: "user_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { repeated: { maxItems: "10", items: { int32: { gt: 0 } } } } } },
123
123
  { no: 5, name: "user_ids_only", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }
124
124
  ]);
125
125
  }
@@ -355,7 +355,7 @@ class CompleteDocumentCategoriesRequest$Type extends MessageType<CompleteDocumen
355
355
  constructor() {
356
356
  super("services.completor.CompleteDocumentCategoriesRequest", [
357
357
  { no: 1, name: "search", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "64" } } } },
358
- { no: 2, name: "category_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/, options: { "buf.validate.field": { repeated: { items: { int64: { gt: "0" } } } } } }
358
+ { no: 2, name: "category_ids", kind: "scalar", repeat: 1 /*RepeatType.PACKED*/, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/, options: { "buf.validate.field": { repeated: { maxItems: "50", items: { int64: { gt: "0" } } } } } }
359
359
  ]);
360
360
  }
361
361
  create(value?: PartialMessage<CompleteDocumentCategoriesRequest>): CompleteDocumentCategoriesRequest {