@fivenet-app/gen 2026.5.1 → 2026.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/clients.ts +6 -0
  2. package/codegen/perms/perms.ts +14 -2
  3. package/codegen/sanitizer/sanitizer.ts +6 -0
  4. package/google/protobuf/descriptor.ts +11 -3
  5. package/google/protobuf/timestamp.ts +7 -6
  6. package/package.json +1 -1
  7. package/perms.ts +343 -3
  8. package/resources/access/access.ts +481 -0
  9. package/resources/calendar/access/access.ts +0 -330
  10. package/resources/calendar/calendar.ts +307 -25
  11. package/resources/calendar/entries/entries.ts +204 -11
  12. package/resources/centrum/units/access/access.ts +0 -373
  13. package/resources/centrum/units/units.ts +20 -8
  14. package/resources/citizens/labels/access.ts +0 -191
  15. package/resources/citizens/labels/labels.ts +20 -8
  16. package/resources/common/content/diff_activity.ts +1 -1
  17. package/resources/cron/cron.ts +1 -1
  18. package/resources/documents/access/access.ts +0 -329
  19. package/resources/documents/activity/activity.ts +49 -45
  20. package/resources/documents/documents.ts +1 -1
  21. package/resources/documents/requests/requests.ts +1 -1
  22. package/resources/documents/stamps/stamp.ts +40 -210
  23. package/resources/documents/templates/templates.ts +158 -318
  24. package/resources/jobs/colleagues/activity/activity.ts +1 -1
  25. package/resources/jobs/conduct/conduct.ts +2 -2
  26. package/resources/jobs/jobs.ts +22 -0
  27. package/resources/jobs/labels/labels.ts +9 -9
  28. package/resources/laws/laws.ts +24 -0
  29. package/resources/livemap/markers/marker_marker.ts +311 -4
  30. package/resources/mailer/access/access.ts +0 -457
  31. package/resources/mailer/emails/email.ts +4 -4
  32. package/resources/notifications/events/events.ts +18 -1
  33. package/resources/qualifications/access/access.ts +0 -248
  34. package/resources/qualifications/qualifications.ts +9 -9
  35. package/resources/settings/config.ts +53 -5
  36. package/resources/settings/data.ts +1 -1
  37. package/resources/stats/stats.ts +32 -20
  38. package/resources/sync/data/data.ts +13 -1
  39. package/resources/userinfo/userinfo.ts +202 -51
  40. package/resources/users/activity/activity.ts +1 -1
  41. package/resources/wiki/access/access.ts +0 -330
  42. package/resources/wiki/activity/activity.ts +45 -45
  43. package/resources/wiki/page.ts +9 -9
  44. package/services/calendar/calendar.ts +1 -1
  45. package/services/calendar/entries.ts +12 -1
  46. package/services/centrum/dispatches.ts +27 -7
  47. package/services/centrum/units.client.ts +15 -2
  48. package/services/centrum/units.ts +231 -123
  49. package/services/citizens/citizens.ts +1 -1
  50. package/services/citizens/labels.client.ts +7 -20
  51. package/services/citizens/labels.ts +35 -183
  52. package/services/documents/approval.ts +15 -4
  53. package/services/documents/collab.ts +1 -1
  54. package/services/documents/documents.ts +38 -38
  55. package/services/documents/stats.ts +14 -2
  56. package/services/filestore/filestore.ts +4 -4
  57. package/services/jobs/colleagues.ts +3 -3
  58. package/services/jobs/conduct.ts +2 -2
  59. package/services/jobs/groups.client.ts +22 -0
  60. package/services/jobs/groups.ts +9 -0
  61. package/services/jobs/timeclock.ts +2 -2
  62. package/services/mailer/thread.ts +2 -2
  63. package/services/qualifications/qualifications.ts +52 -34
  64. package/services/settings/accounts.ts +5 -5
  65. package/services/settings/config.ts +2 -2
  66. package/services/settings/cron.ts +2 -2
  67. package/services/settings/laws.client.ts +28 -2
  68. package/services/settings/laws.ts +229 -1
  69. package/services/settings/system.ts +6 -6
  70. package/services/sync/sync.client.ts +42 -14
  71. package/services/sync/sync.ts +162 -13
  72. package/services/wiki/wiki.client.ts +15 -2
  73. package/services/wiki/wiki.ts +122 -0
  74. package/svcs.ts +18 -2
@@ -2,69 +2,6 @@
2
2
  // @generated from protobuf file "resources/qualifications/access/access.proto" (package "resources.qualifications.access", syntax proto3)
3
3
  // tslint:disable
4
4
  // @ts-nocheck
5
- import type { BinaryWriteOptions } from "@protobuf-ts/runtime";
6
- import type { IBinaryWriter } from "@protobuf-ts/runtime";
7
- import { WireType } from "@protobuf-ts/runtime";
8
- import type { BinaryReadOptions } from "@protobuf-ts/runtime";
9
- import type { IBinaryReader } from "@protobuf-ts/runtime";
10
- import { UnknownFieldHandler } 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
- import { Timestamp } from "../../timestamp/timestamp";
15
- /**
16
- * @generated from protobuf message resources.qualifications.access.QualificationAccess
17
- */
18
- export interface QualificationAccess {
19
- /**
20
- * @generated from protobuf field: repeated resources.qualifications.access.QualificationJobAccess jobs = 1
21
- */
22
- jobs: QualificationJobAccess[];
23
- }
24
- /**
25
- * @generated from protobuf message resources.qualifications.access.QualificationJobAccess
26
- */
27
- export interface QualificationJobAccess {
28
- /**
29
- * @generated from protobuf field: int64 id = 1
30
- */
31
- id: number;
32
- /**
33
- * @generated from protobuf field: optional resources.timestamp.Timestamp created_at = 2
34
- */
35
- createdAt?: Timestamp;
36
- /**
37
- * @generated from protobuf field: int64 target_id = 4
38
- */
39
- targetId: number;
40
- /**
41
- * @generated from protobuf field: string job = 5
42
- */
43
- job: string;
44
- /**
45
- * @generated from protobuf field: optional string job_label = 6
46
- */
47
- jobLabel?: string;
48
- /**
49
- * @generated from protobuf field: int32 minimum_grade = 7
50
- */
51
- minimumGrade: number;
52
- /**
53
- * @generated from protobuf field: optional string job_grade_label = 8
54
- */
55
- jobGradeLabel?: string;
56
- /**
57
- * @generated from protobuf field: resources.qualifications.access.AccessLevel access = 9
58
- */
59
- access: AccessLevel;
60
- }
61
- /**
62
- * Dummy - DO NOT USE!
63
- *
64
- * @generated from protobuf message resources.qualifications.access.QualificationUserAccess
65
- */
66
- export interface QualificationUserAccess {
67
- }
68
5
  /**
69
6
  * @generated from protobuf enum resources.qualifications.access.AccessLevel
70
7
  */
@@ -98,188 +35,3 @@ export enum AccessLevel {
98
35
  */
99
36
  EDIT = 6
100
37
  }
101
- // @generated message type with reflection information, may provide speed optimized methods
102
- class QualificationAccess$Type extends MessageType<QualificationAccess> {
103
- constructor() {
104
- super("resources.qualifications.access.QualificationAccess", [
105
- { no: 1, name: "jobs", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => QualificationJobAccess }
106
- ]);
107
- }
108
- create(value?: PartialMessage<QualificationAccess>): QualificationAccess {
109
- const message = globalThis.Object.create((this.messagePrototype!));
110
- message.jobs = [];
111
- if (value !== undefined)
112
- reflectionMergePartial<QualificationAccess>(this, message, value);
113
- return message;
114
- }
115
- internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: QualificationAccess): QualificationAccess {
116
- let message = target ?? this.create(), end = reader.pos + length;
117
- while (reader.pos < end) {
118
- let [fieldNo, wireType] = reader.tag();
119
- switch (fieldNo) {
120
- case /* repeated resources.qualifications.access.QualificationJobAccess jobs */ 1:
121
- message.jobs.push(QualificationJobAccess.internalBinaryRead(reader, reader.uint32(), options));
122
- break;
123
- default:
124
- let u = options.readUnknownField;
125
- if (u === "throw")
126
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
127
- let d = reader.skip(wireType);
128
- if (u !== false)
129
- (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
130
- }
131
- }
132
- return message;
133
- }
134
- internalBinaryWrite(message: QualificationAccess, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
135
- /* repeated resources.qualifications.access.QualificationJobAccess jobs = 1; */
136
- for (let i = 0; i < message.jobs.length; i++)
137
- QualificationJobAccess.internalBinaryWrite(message.jobs[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
138
- let u = options.writeUnknownFields;
139
- if (u !== false)
140
- (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
141
- return writer;
142
- }
143
- }
144
- /**
145
- * @generated MessageType for protobuf message resources.qualifications.access.QualificationAccess
146
- */
147
- export const QualificationAccess = new QualificationAccess$Type();
148
- // @generated message type with reflection information, may provide speed optimized methods
149
- class QualificationJobAccess$Type extends MessageType<QualificationJobAccess> {
150
- constructor() {
151
- super("resources.qualifications.access.QualificationJobAccess", [
152
- { no: 1, name: "id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/, options: { "tagger.tags": "sql:\"primary_key\" alias:\"id\"" } },
153
- { no: 2, name: "created_at", kind: "message", T: () => Timestamp },
154
- { no: 4, name: "target_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
155
- { no: 5, name: "job", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "20" } } } },
156
- { no: 6, name: "job_label", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "50" } } } },
157
- { no: 7, name: "minimum_grade", kind: "scalar", T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gte: 0 } } } },
158
- { no: 8, name: "job_grade_label", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "50" } } } },
159
- { no: 9, name: "access", kind: "enum", T: () => ["resources.qualifications.access.AccessLevel", AccessLevel, "ACCESS_LEVEL_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } }
160
- ]);
161
- }
162
- create(value?: PartialMessage<QualificationJobAccess>): QualificationJobAccess {
163
- const message = globalThis.Object.create((this.messagePrototype!));
164
- message.id = 0;
165
- message.targetId = 0;
166
- message.job = "";
167
- message.minimumGrade = 0;
168
- message.access = 0;
169
- if (value !== undefined)
170
- reflectionMergePartial<QualificationJobAccess>(this, message, value);
171
- return message;
172
- }
173
- internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: QualificationJobAccess): QualificationJobAccess {
174
- let message = target ?? this.create(), end = reader.pos + length;
175
- while (reader.pos < end) {
176
- let [fieldNo, wireType] = reader.tag();
177
- switch (fieldNo) {
178
- case /* int64 id */ 1:
179
- message.id = reader.int64().toNumber();
180
- break;
181
- case /* optional resources.timestamp.Timestamp created_at */ 2:
182
- message.createdAt = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.createdAt);
183
- break;
184
- case /* int64 target_id */ 4:
185
- message.targetId = reader.int64().toNumber();
186
- break;
187
- case /* string job */ 5:
188
- message.job = reader.string();
189
- break;
190
- case /* optional string job_label */ 6:
191
- message.jobLabel = reader.string();
192
- break;
193
- case /* int32 minimum_grade */ 7:
194
- message.minimumGrade = reader.int32();
195
- break;
196
- case /* optional string job_grade_label */ 8:
197
- message.jobGradeLabel = reader.string();
198
- break;
199
- case /* resources.qualifications.access.AccessLevel access */ 9:
200
- message.access = reader.int32();
201
- break;
202
- default:
203
- let u = options.readUnknownField;
204
- if (u === "throw")
205
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
206
- let d = reader.skip(wireType);
207
- if (u !== false)
208
- (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
209
- }
210
- }
211
- return message;
212
- }
213
- internalBinaryWrite(message: QualificationJobAccess, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
214
- /* int64 id = 1; */
215
- if (message.id !== 0)
216
- writer.tag(1, WireType.Varint).int64(message.id);
217
- /* optional resources.timestamp.Timestamp created_at = 2; */
218
- if (message.createdAt)
219
- Timestamp.internalBinaryWrite(message.createdAt, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
220
- /* int64 target_id = 4; */
221
- if (message.targetId !== 0)
222
- writer.tag(4, WireType.Varint).int64(message.targetId);
223
- /* string job = 5; */
224
- if (message.job !== "")
225
- writer.tag(5, WireType.LengthDelimited).string(message.job);
226
- /* optional string job_label = 6; */
227
- if (message.jobLabel !== undefined)
228
- writer.tag(6, WireType.LengthDelimited).string(message.jobLabel);
229
- /* int32 minimum_grade = 7; */
230
- if (message.minimumGrade !== 0)
231
- writer.tag(7, WireType.Varint).int32(message.minimumGrade);
232
- /* optional string job_grade_label = 8; */
233
- if (message.jobGradeLabel !== undefined)
234
- writer.tag(8, WireType.LengthDelimited).string(message.jobGradeLabel);
235
- /* resources.qualifications.access.AccessLevel access = 9; */
236
- if (message.access !== 0)
237
- writer.tag(9, WireType.Varint).int32(message.access);
238
- let u = options.writeUnknownFields;
239
- if (u !== false)
240
- (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
241
- return writer;
242
- }
243
- }
244
- /**
245
- * @generated MessageType for protobuf message resources.qualifications.access.QualificationJobAccess
246
- */
247
- export const QualificationJobAccess = new QualificationJobAccess$Type();
248
- // @generated message type with reflection information, may provide speed optimized methods
249
- class QualificationUserAccess$Type extends MessageType<QualificationUserAccess> {
250
- constructor() {
251
- super("resources.qualifications.access.QualificationUserAccess", []);
252
- }
253
- create(value?: PartialMessage<QualificationUserAccess>): QualificationUserAccess {
254
- const message = globalThis.Object.create((this.messagePrototype!));
255
- if (value !== undefined)
256
- reflectionMergePartial<QualificationUserAccess>(this, message, value);
257
- return message;
258
- }
259
- internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: QualificationUserAccess): QualificationUserAccess {
260
- let message = target ?? this.create(), end = reader.pos + length;
261
- while (reader.pos < end) {
262
- let [fieldNo, wireType] = reader.tag();
263
- switch (fieldNo) {
264
- default:
265
- let u = options.readUnknownField;
266
- if (u === "throw")
267
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
268
- let d = reader.skip(wireType);
269
- if (u !== false)
270
- (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
271
- }
272
- }
273
- return message;
274
- }
275
- internalBinaryWrite(message: QualificationUserAccess, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
276
- let u = options.writeUnknownFields;
277
- if (u !== false)
278
- (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
279
- return writer;
280
- }
281
- }
282
- /**
283
- * @generated MessageType for protobuf message resources.qualifications.access.QualificationUserAccess
284
- */
285
- export const QualificationUserAccess = new QualificationUserAccess$Type();
@@ -15,7 +15,7 @@ import { File } from "../file/file";
15
15
  import { ExamQuestions } from "./exam/exam";
16
16
  import { QualificationExamSettings } from "./exam/exam";
17
17
  import { QualificationExamMode } from "./exam/exam";
18
- import { QualificationAccess } from "./access/access";
18
+ import { Access } from "../access/access";
19
19
  import { UserShort } from "../users/short/user";
20
20
  import { Content } from "../common/content/content";
21
21
  import { Timestamp } from "../timestamp/timestamp";
@@ -88,9 +88,9 @@ export interface Qualification {
88
88
  */
89
89
  creatorJob: string;
90
90
  /**
91
- * @generated from protobuf field: resources.qualifications.access.QualificationAccess access = 17
91
+ * @generated from protobuf field: resources.access.Access access = 17
92
92
  */
93
- access?: QualificationAccess;
93
+ access?: Access;
94
94
  /**
95
95
  * @generated from protobuf field: repeated resources.qualifications.QualificationRequirement requirements = 18
96
96
  */
@@ -443,7 +443,7 @@ class Qualification$Type extends MessageType<Qualification> {
443
443
  { no: 14, name: "creator_id", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gt: 0 } } } },
444
444
  { no: 15, name: "creator", kind: "message", T: () => UserShort, options: { "tagger.tags": "alias:\"creator\"" } },
445
445
  { no: 16, name: "creator_job", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "20" } } } },
446
- { no: 17, name: "access", kind: "message", T: () => QualificationAccess },
446
+ { no: 17, name: "access", kind: "message", T: () => Access },
447
447
  { no: 18, name: "requirements", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => QualificationRequirement },
448
448
  { no: 19, name: "discord_sync_enabled", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
449
449
  { no: 20, name: "discord_settings", kind: "message", T: () => QualificationDiscordSettings },
@@ -454,7 +454,7 @@ class Qualification$Type extends MessageType<Qualification> {
454
454
  { no: 25, name: "request", kind: "message", T: () => QualificationRequest },
455
455
  { no: 26, name: "label_sync_enabled", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
456
456
  { no: 27, name: "label_sync_format", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "128" } }, "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
457
- { no: 28, name: "files", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => File, options: { "tagger.tags": "alias:\"files\"" } }
457
+ { no: 28, name: "files", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => File, options: { "buf.validate.field": { repeated: { maxItems: "5" } }, "tagger.tags": "alias:\"files\"" } }
458
458
  ]);
459
459
  }
460
460
  create(value?: PartialMessage<Qualification>): Qualification {
@@ -530,8 +530,8 @@ class Qualification$Type extends MessageType<Qualification> {
530
530
  case /* string creator_job */ 16:
531
531
  message.creatorJob = reader.string();
532
532
  break;
533
- case /* resources.qualifications.access.QualificationAccess access */ 17:
534
- message.access = QualificationAccess.internalBinaryRead(reader, reader.uint32(), options, message.access);
533
+ case /* resources.access.Access access */ 17:
534
+ message.access = Access.internalBinaryRead(reader, reader.uint32(), options, message.access);
535
535
  break;
536
536
  case /* repeated resources.qualifications.QualificationRequirement requirements */ 18:
537
537
  message.requirements.push(QualificationRequirement.internalBinaryRead(reader, reader.uint32(), options));
@@ -626,9 +626,9 @@ class Qualification$Type extends MessageType<Qualification> {
626
626
  /* string creator_job = 16; */
627
627
  if (message.creatorJob !== "")
628
628
  writer.tag(16, WireType.LengthDelimited).string(message.creatorJob);
629
- /* resources.qualifications.access.QualificationAccess access = 17; */
629
+ /* resources.access.Access access = 17; */
630
630
  if (message.access)
631
- QualificationAccess.internalBinaryWrite(message.access, writer.tag(17, WireType.LengthDelimited).fork(), options).join();
631
+ Access.internalBinaryWrite(message.access, writer.tag(17, WireType.LengthDelimited).fork(), options).join();
632
632
  /* repeated resources.qualifications.QualificationRequirement requirements = 18; */
633
633
  for (let i = 0; i < message.requirements.length; i++)
634
634
  QualificationRequirement.internalBinaryWrite(message.requirements[i], writer.tag(18, WireType.LengthDelimited).fork(), options).join();
@@ -87,6 +87,22 @@ export interface Auth {
87
87
  * @generated from protobuf field: bool last_char_lock = 2
88
88
  */
89
89
  lastCharLock: boolean;
90
+ /**
91
+ * @generated from protobuf field: repeated string job_admin_groups = 3
92
+ */
93
+ jobAdminGroups: string[];
94
+ /**
95
+ * @generated from protobuf field: repeated string job_admin_users = 4
96
+ */
97
+ jobAdminUsers: string[];
98
+ /**
99
+ * @generated from protobuf field: repeated string config_admin_groups = 5
100
+ */
101
+ configAdminGroups: string[];
102
+ /**
103
+ * @generated from protobuf field: repeated string config_admin_users = 6
104
+ */
105
+ configAdminUsers: string[];
90
106
  }
91
107
  /**
92
108
  * @generated from protobuf message resources.settings.Perms
@@ -386,7 +402,7 @@ export enum DiscordBotPresenceType {
386
402
  class AppConfig$Type extends MessageType<AppConfig> {
387
403
  constructor() {
388
404
  super("resources.settings.AppConfig", [
389
- { no: 1, name: "version", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
405
+ { no: 1, name: "version", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "100" } } } },
390
406
  { no: 8, name: "default_locale", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "20" } } } },
391
407
  { no: 2, name: "auth", kind: "message", T: () => Auth },
392
408
  { no: 3, name: "perms", kind: "message", T: () => Perms },
@@ -526,13 +542,21 @@ class Auth$Type extends MessageType<Auth> {
526
542
  constructor() {
527
543
  super("resources.settings.Auth", [
528
544
  { no: 1, name: "signup_enabled", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
529
- { no: 2, name: "last_char_lock", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
545
+ { no: 2, name: "last_char_lock", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
546
+ { no: 3, name: "job_admin_groups", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { repeated: { maxItems: "10", items: { string: { maxLen: "64" } } } } } },
547
+ { no: 4, name: "job_admin_users", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { repeated: { maxItems: "10", items: { string: { maxLen: "64" } } } } } },
548
+ { no: 5, name: "config_admin_groups", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { repeated: { maxItems: "10", items: { string: { maxLen: "64" } } } } } },
549
+ { no: 6, name: "config_admin_users", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { repeated: { maxItems: "10", items: { string: { maxLen: "64" } } } } } }
530
550
  ]);
531
551
  }
532
552
  create(value?: PartialMessage<Auth>): Auth {
533
553
  const message = globalThis.Object.create((this.messagePrototype!));
534
554
  message.signupEnabled = false;
535
555
  message.lastCharLock = false;
556
+ message.jobAdminGroups = [];
557
+ message.jobAdminUsers = [];
558
+ message.configAdminGroups = [];
559
+ message.configAdminUsers = [];
536
560
  if (value !== undefined)
537
561
  reflectionMergePartial<Auth>(this, message, value);
538
562
  return message;
@@ -548,6 +572,18 @@ class Auth$Type extends MessageType<Auth> {
548
572
  case /* bool last_char_lock */ 2:
549
573
  message.lastCharLock = reader.bool();
550
574
  break;
575
+ case /* repeated string job_admin_groups */ 3:
576
+ message.jobAdminGroups.push(reader.string());
577
+ break;
578
+ case /* repeated string job_admin_users */ 4:
579
+ message.jobAdminUsers.push(reader.string());
580
+ break;
581
+ case /* repeated string config_admin_groups */ 5:
582
+ message.configAdminGroups.push(reader.string());
583
+ break;
584
+ case /* repeated string config_admin_users */ 6:
585
+ message.configAdminUsers.push(reader.string());
586
+ break;
551
587
  default:
552
588
  let u = options.readUnknownField;
553
589
  if (u === "throw")
@@ -566,6 +602,18 @@ class Auth$Type extends MessageType<Auth> {
566
602
  /* bool last_char_lock = 2; */
567
603
  if (message.lastCharLock !== false)
568
604
  writer.tag(2, WireType.Varint).bool(message.lastCharLock);
605
+ /* repeated string job_admin_groups = 3; */
606
+ for (let i = 0; i < message.jobAdminGroups.length; i++)
607
+ writer.tag(3, WireType.LengthDelimited).string(message.jobAdminGroups[i]);
608
+ /* repeated string job_admin_users = 4; */
609
+ for (let i = 0; i < message.jobAdminUsers.length; i++)
610
+ writer.tag(4, WireType.LengthDelimited).string(message.jobAdminUsers[i]);
611
+ /* repeated string config_admin_groups = 5; */
612
+ for (let i = 0; i < message.configAdminGroups.length; i++)
613
+ writer.tag(5, WireType.LengthDelimited).string(message.configAdminGroups[i]);
614
+ /* repeated string config_admin_users = 6; */
615
+ for (let i = 0; i < message.configAdminUsers.length; i++)
616
+ writer.tag(6, WireType.LengthDelimited).string(message.configAdminUsers[i]);
569
617
  let u = options.writeUnknownFields;
570
618
  if (u !== false)
571
619
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -580,7 +628,7 @@ export const Auth = new Auth$Type();
580
628
  class Perms$Type extends MessageType<Perms> {
581
629
  constructor() {
582
630
  super("resources.settings.Perms", [
583
- { no: 1, name: "default", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Perm, options: { "buf.validate.field": { repeated: { maxItems: "100" } } } }
631
+ { no: 1, name: "default", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Perm, options: { "buf.validate.field": { repeated: { maxItems: "50" } } } }
584
632
  ]);
585
633
  }
586
634
  create(value?: PartialMessage<Perms>): Perms {
@@ -683,7 +731,7 @@ class Website$Type extends MessageType<Website> {
683
731
  constructor() {
684
732
  super("resources.settings.Website", [
685
733
  { no: 1, name: "links", kind: "message", T: () => Links },
686
- { no: 2, name: "stats_page", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
734
+ { no: 2, name: "stats_page", kind: "scalar", T: 8 /*ScalarType.BOOL*/, options: { "tagger.tags": "json:\"statsPage\"" } }
687
735
  ]);
688
736
  }
689
737
  create(value?: PartialMessage<Website>): Website {
@@ -1050,7 +1098,7 @@ export const Discord = new Discord$Type();
1050
1098
  class DiscordBotPresence$Type extends MessageType<DiscordBotPresence> {
1051
1099
  constructor() {
1052
1100
  super("resources.settings.DiscordBotPresence", [
1053
- { no: 1, name: "type", kind: "enum", T: () => ["resources.settings.DiscordBotPresenceType", DiscordBotPresenceType, "DISCORD_BOT_PRESENCE_TYPE_"] },
1101
+ { no: 1, name: "type", kind: "enum", T: () => ["resources.settings.DiscordBotPresenceType", DiscordBotPresenceType, "DISCORD_BOT_PRESENCE_TYPE_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
1054
1102
  { no: 2, name: "status", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
1055
1103
  { no: 3, name: "url", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } }
1056
1104
  ]);
@@ -45,7 +45,7 @@ export enum DataMode {
45
45
  class Data$Type extends MessageType<Data> {
46
46
  constructor() {
47
47
  super("resources.settings.Data", [
48
- { no: 1, name: "mode", kind: "enum", T: () => ["resources.settings.DataMode", DataMode, "DATA_MODE_"] }
48
+ { no: 1, name: "mode", kind: "enum", T: () => ["resources.settings.DataMode", DataMode, "DATA_MODE_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } }
49
49
  ]);
50
50
  }
51
51
  create(value?: PartialMessage<Data>): Data {
@@ -77,19 +77,23 @@ export interface CategoryValue {
77
77
  */
78
78
  id: number;
79
79
  /**
80
- * @generated from protobuf field: string name = 2
80
+ * @generated from protobuf field: string job = 2
81
+ */
82
+ job: string;
83
+ /**
84
+ * @generated from protobuf field: string name = 3
81
85
  */
82
86
  name: string;
83
87
  /**
84
- * @generated from protobuf field: optional string color = 3
88
+ * @generated from protobuf field: optional string color = 4
85
89
  */
86
90
  color?: string;
87
91
  /**
88
- * @generated from protobuf field: optional string icon = 4
92
+ * @generated from protobuf field: optional string icon = 5
89
93
  */
90
94
  icon?: string;
91
95
  /**
92
- * @generated from protobuf field: int64 value = 5
96
+ * @generated from protobuf field: int64 value = 6
93
97
  */
94
98
  value: number;
95
99
  }
@@ -373,15 +377,17 @@ class CategoryValue$Type extends MessageType<CategoryValue> {
373
377
  constructor() {
374
378
  super("resources.stats.CategoryValue", [
375
379
  { no: 1, name: "id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
376
- { no: 2, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
377
- { no: 3, name: "color", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
378
- { no: 4, name: "icon", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
379
- { no: 5, name: "value", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }
380
+ { no: 2, name: "job", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
381
+ { no: 3, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
382
+ { no: 4, name: "color", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
383
+ { no: 5, name: "icon", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
384
+ { no: 6, name: "value", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }
380
385
  ]);
381
386
  }
382
387
  create(value?: PartialMessage<CategoryValue>): CategoryValue {
383
388
  const message = globalThis.Object.create((this.messagePrototype!));
384
389
  message.id = 0;
390
+ message.job = "";
385
391
  message.name = "";
386
392
  message.value = 0;
387
393
  if (value !== undefined)
@@ -396,16 +402,19 @@ class CategoryValue$Type extends MessageType<CategoryValue> {
396
402
  case /* int64 id */ 1:
397
403
  message.id = reader.int64().toNumber();
398
404
  break;
399
- case /* string name */ 2:
405
+ case /* string job */ 2:
406
+ message.job = reader.string();
407
+ break;
408
+ case /* string name */ 3:
400
409
  message.name = reader.string();
401
410
  break;
402
- case /* optional string color */ 3:
411
+ case /* optional string color */ 4:
403
412
  message.color = reader.string();
404
413
  break;
405
- case /* optional string icon */ 4:
414
+ case /* optional string icon */ 5:
406
415
  message.icon = reader.string();
407
416
  break;
408
- case /* int64 value */ 5:
417
+ case /* int64 value */ 6:
409
418
  message.value = reader.int64().toNumber();
410
419
  break;
411
420
  default:
@@ -423,18 +432,21 @@ class CategoryValue$Type extends MessageType<CategoryValue> {
423
432
  /* int64 id = 1; */
424
433
  if (message.id !== 0)
425
434
  writer.tag(1, WireType.Varint).int64(message.id);
426
- /* string name = 2; */
435
+ /* string job = 2; */
436
+ if (message.job !== "")
437
+ writer.tag(2, WireType.LengthDelimited).string(message.job);
438
+ /* string name = 3; */
427
439
  if (message.name !== "")
428
- writer.tag(2, WireType.LengthDelimited).string(message.name);
429
- /* optional string color = 3; */
440
+ writer.tag(3, WireType.LengthDelimited).string(message.name);
441
+ /* optional string color = 4; */
430
442
  if (message.color !== undefined)
431
- writer.tag(3, WireType.LengthDelimited).string(message.color);
432
- /* optional string icon = 4; */
443
+ writer.tag(4, WireType.LengthDelimited).string(message.color);
444
+ /* optional string icon = 5; */
433
445
  if (message.icon !== undefined)
434
- writer.tag(4, WireType.LengthDelimited).string(message.icon);
435
- /* int64 value = 5; */
446
+ writer.tag(5, WireType.LengthDelimited).string(message.icon);
447
+ /* int64 value = 6; */
436
448
  if (message.value !== 0)
437
- writer.tag(5, WireType.Varint).int64(message.value);
449
+ writer.tag(6, WireType.Varint).int64(message.value);
438
450
  let u = options.writeUnknownFields;
439
451
  if (u !== false)
440
452
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -145,6 +145,10 @@ export interface DataAccounts {
145
145
  * @generated from protobuf field: repeated resources.sync.activity.AccountUpdate account_updates = 1
146
146
  */
147
147
  accountUpdates: AccountUpdate[];
148
+ /**
149
+ * @generated from protobuf field: bool clear = 2
150
+ */
151
+ clear: boolean;
148
152
  }
149
153
  /**
150
154
  * Detailed user information for sync purposes
@@ -768,12 +772,14 @@ export const LastCharID = new LastCharID$Type();
768
772
  class DataAccounts$Type extends MessageType<DataAccounts> {
769
773
  constructor() {
770
774
  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: "200" } } } }
775
+ { no: 1, name: "account_updates", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => AccountUpdate, options: { "buf.validate.field": { repeated: { maxItems: "200" } } } },
776
+ { no: 2, name: "clear", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
772
777
  ]);
773
778
  }
774
779
  create(value?: PartialMessage<DataAccounts>): DataAccounts {
775
780
  const message = globalThis.Object.create((this.messagePrototype!));
776
781
  message.accountUpdates = [];
782
+ message.clear = false;
777
783
  if (value !== undefined)
778
784
  reflectionMergePartial<DataAccounts>(this, message, value);
779
785
  return message;
@@ -786,6 +792,9 @@ class DataAccounts$Type extends MessageType<DataAccounts> {
786
792
  case /* repeated resources.sync.activity.AccountUpdate account_updates */ 1:
787
793
  message.accountUpdates.push(AccountUpdate.internalBinaryRead(reader, reader.uint32(), options));
788
794
  break;
795
+ case /* bool clear */ 2:
796
+ message.clear = reader.bool();
797
+ break;
789
798
  default:
790
799
  let u = options.readUnknownField;
791
800
  if (u === "throw")
@@ -801,6 +810,9 @@ class DataAccounts$Type extends MessageType<DataAccounts> {
801
810
  /* repeated resources.sync.activity.AccountUpdate account_updates = 1; */
802
811
  for (let i = 0; i < message.accountUpdates.length; i++)
803
812
  AccountUpdate.internalBinaryWrite(message.accountUpdates[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
813
+ /* bool clear = 2; */
814
+ if (message.clear !== false)
815
+ writer.tag(2, WireType.Varint).bool(message.clear);
804
816
  let u = options.writeUnknownFields;
805
817
  if (u !== false)
806
818
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);