@fivenet-app/gen 2026.5.1 → 2026.7.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 (80) 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 +352 -8
  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/clientconfig/clientconfig.ts +11 -0
  17. package/resources/common/content/diff_activity.ts +1 -1
  18. package/resources/cron/cron.ts +1 -1
  19. package/resources/documents/access/access.ts +0 -329
  20. package/resources/documents/activity/activity.ts +49 -45
  21. package/resources/documents/documents.ts +1 -1
  22. package/resources/documents/requests/requests.ts +1 -1
  23. package/resources/documents/stamps/stamp.ts +40 -210
  24. package/resources/documents/templates/templates.ts +158 -318
  25. package/resources/jobs/colleagues/activity/activity.ts +1 -1
  26. package/resources/jobs/conduct/conduct.ts +2 -2
  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 +37 -2
  33. package/resources/qualifications/access/access.ts +0 -248
  34. package/resources/qualifications/qualifications.ts +9 -9
  35. package/resources/settings/config.ts +64 -5
  36. package/resources/settings/data.ts +1 -1
  37. package/resources/stats/stats.ts +32 -20
  38. package/resources/sync/data/data.ts +26 -1
  39. package/resources/timestamp/timestamp.ts +1 -1
  40. package/resources/userinfo/userinfo.ts +202 -51
  41. package/resources/users/activity/activity.ts +1 -1
  42. package/resources/vehicles/activity/activity.ts +146 -10
  43. package/resources/wiki/access/access.ts +0 -330
  44. package/resources/wiki/activity/activity.ts +45 -45
  45. package/resources/wiki/page.ts +9 -9
  46. package/services/auth/auth.client.ts +15 -2
  47. package/services/auth/auth.ts +135 -0
  48. package/services/calendar/calendar.ts +1 -1
  49. package/services/calendar/entries.ts +12 -1
  50. package/services/centrum/dispatches.ts +27 -7
  51. package/services/centrum/units.client.ts +15 -2
  52. package/services/centrum/units.ts +231 -123
  53. package/services/citizens/citizens.ts +1 -1
  54. package/services/citizens/labels.client.ts +7 -20
  55. package/services/citizens/labels.ts +35 -183
  56. package/services/documents/approval.ts +15 -4
  57. package/services/documents/collab.ts +1 -1
  58. package/services/documents/documents.ts +38 -38
  59. package/services/documents/stats.ts +14 -2
  60. package/services/filestore/filestore.ts +4 -4
  61. package/services/jobs/colleagues.ts +3 -3
  62. package/services/jobs/conduct.ts +15 -4
  63. package/services/jobs/groups.client.ts +22 -0
  64. package/services/jobs/groups.ts +9 -0
  65. package/services/jobs/timeclock.ts +2 -2
  66. package/services/mailer/thread.ts +2 -2
  67. package/services/qualifications/qualifications.ts +52 -34
  68. package/services/settings/accounts.ts +5 -5
  69. package/services/settings/config.ts +2 -2
  70. package/services/settings/cron.ts +2 -2
  71. package/services/settings/laws.client.ts +28 -2
  72. package/services/settings/laws.ts +229 -1
  73. package/services/settings/system.ts +6 -6
  74. package/services/sync/sync.client.ts +129 -20
  75. package/services/sync/sync.ts +262 -19
  76. package/services/vehicles/vehicles.client.ts +13 -0
  77. package/services/vehicles/vehicles.ts +181 -13
  78. package/services/wiki/wiki.client.ts +15 -2
  79. package/services/wiki/wiki.ts +122 -0
  80. package/svcs.ts +21 -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();
@@ -22,6 +22,10 @@ export interface AppConfig {
22
22
  * @generated from protobuf field: string version = 1
23
23
  */
24
24
  version: string;
25
+ /**
26
+ * @generated from protobuf field: optional bool setup_complete = 15
27
+ */
28
+ setupComplete?: boolean;
25
29
  /**
26
30
  * @generated from protobuf field: string default_locale = 8
27
31
  */
@@ -87,6 +91,22 @@ export interface Auth {
87
91
  * @generated from protobuf field: bool last_char_lock = 2
88
92
  */
89
93
  lastCharLock: boolean;
94
+ /**
95
+ * @generated from protobuf field: repeated string job_admin_groups = 3
96
+ */
97
+ jobAdminGroups: string[];
98
+ /**
99
+ * @generated from protobuf field: repeated string job_admin_users = 4
100
+ */
101
+ jobAdminUsers: string[];
102
+ /**
103
+ * @generated from protobuf field: repeated string config_admin_groups = 5
104
+ */
105
+ configAdminGroups: string[];
106
+ /**
107
+ * @generated from protobuf field: repeated string config_admin_users = 6
108
+ */
109
+ configAdminUsers: string[];
90
110
  }
91
111
  /**
92
112
  * @generated from protobuf message resources.settings.Perms
@@ -386,7 +406,8 @@ export enum DiscordBotPresenceType {
386
406
  class AppConfig$Type extends MessageType<AppConfig> {
387
407
  constructor() {
388
408
  super("resources.settings.AppConfig", [
389
- { no: 1, name: "version", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
409
+ { no: 1, name: "version", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "100" } } } },
410
+ { no: 15, name: "setup_complete", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
390
411
  { no: 8, name: "default_locale", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "20" } } } },
391
412
  { no: 2, name: "auth", kind: "message", T: () => Auth },
392
413
  { no: 3, name: "perms", kind: "message", T: () => Perms },
@@ -418,6 +439,9 @@ class AppConfig$Type extends MessageType<AppConfig> {
418
439
  case /* string version */ 1:
419
440
  message.version = reader.string();
420
441
  break;
442
+ case /* optional bool setup_complete */ 15:
443
+ message.setupComplete = reader.bool();
444
+ break;
421
445
  case /* string default_locale */ 8:
422
446
  message.defaultLocale = reader.string();
423
447
  break;
@@ -511,6 +535,9 @@ class AppConfig$Type extends MessageType<AppConfig> {
511
535
  /* resources.settings.Game game = 14; */
512
536
  if (message.game)
513
537
  Game.internalBinaryWrite(message.game, writer.tag(14, WireType.LengthDelimited).fork(), options).join();
538
+ /* optional bool setup_complete = 15; */
539
+ if (message.setupComplete !== undefined)
540
+ writer.tag(15, WireType.Varint).bool(message.setupComplete);
514
541
  let u = options.writeUnknownFields;
515
542
  if (u !== false)
516
543
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -526,13 +553,21 @@ class Auth$Type extends MessageType<Auth> {
526
553
  constructor() {
527
554
  super("resources.settings.Auth", [
528
555
  { no: 1, name: "signup_enabled", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
529
- { no: 2, name: "last_char_lock", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
556
+ { no: 2, name: "last_char_lock", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
557
+ { 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" } } } } } },
558
+ { 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" } } } } } },
559
+ { 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" } } } } } },
560
+ { 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
561
  ]);
531
562
  }
532
563
  create(value?: PartialMessage<Auth>): Auth {
533
564
  const message = globalThis.Object.create((this.messagePrototype!));
534
565
  message.signupEnabled = false;
535
566
  message.lastCharLock = false;
567
+ message.jobAdminGroups = [];
568
+ message.jobAdminUsers = [];
569
+ message.configAdminGroups = [];
570
+ message.configAdminUsers = [];
536
571
  if (value !== undefined)
537
572
  reflectionMergePartial<Auth>(this, message, value);
538
573
  return message;
@@ -548,6 +583,18 @@ class Auth$Type extends MessageType<Auth> {
548
583
  case /* bool last_char_lock */ 2:
549
584
  message.lastCharLock = reader.bool();
550
585
  break;
586
+ case /* repeated string job_admin_groups */ 3:
587
+ message.jobAdminGroups.push(reader.string());
588
+ break;
589
+ case /* repeated string job_admin_users */ 4:
590
+ message.jobAdminUsers.push(reader.string());
591
+ break;
592
+ case /* repeated string config_admin_groups */ 5:
593
+ message.configAdminGroups.push(reader.string());
594
+ break;
595
+ case /* repeated string config_admin_users */ 6:
596
+ message.configAdminUsers.push(reader.string());
597
+ break;
551
598
  default:
552
599
  let u = options.readUnknownField;
553
600
  if (u === "throw")
@@ -566,6 +613,18 @@ class Auth$Type extends MessageType<Auth> {
566
613
  /* bool last_char_lock = 2; */
567
614
  if (message.lastCharLock !== false)
568
615
  writer.tag(2, WireType.Varint).bool(message.lastCharLock);
616
+ /* repeated string job_admin_groups = 3; */
617
+ for (let i = 0; i < message.jobAdminGroups.length; i++)
618
+ writer.tag(3, WireType.LengthDelimited).string(message.jobAdminGroups[i]);
619
+ /* repeated string job_admin_users = 4; */
620
+ for (let i = 0; i < message.jobAdminUsers.length; i++)
621
+ writer.tag(4, WireType.LengthDelimited).string(message.jobAdminUsers[i]);
622
+ /* repeated string config_admin_groups = 5; */
623
+ for (let i = 0; i < message.configAdminGroups.length; i++)
624
+ writer.tag(5, WireType.LengthDelimited).string(message.configAdminGroups[i]);
625
+ /* repeated string config_admin_users = 6; */
626
+ for (let i = 0; i < message.configAdminUsers.length; i++)
627
+ writer.tag(6, WireType.LengthDelimited).string(message.configAdminUsers[i]);
569
628
  let u = options.writeUnknownFields;
570
629
  if (u !== false)
571
630
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -580,7 +639,7 @@ export const Auth = new Auth$Type();
580
639
  class Perms$Type extends MessageType<Perms> {
581
640
  constructor() {
582
641
  super("resources.settings.Perms", [
583
- { no: 1, name: "default", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Perm, options: { "buf.validate.field": { repeated: { maxItems: "100" } } } }
642
+ { no: 1, name: "default", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Perm, options: { "buf.validate.field": { repeated: { maxItems: "50" } } } }
584
643
  ]);
585
644
  }
586
645
  create(value?: PartialMessage<Perms>): Perms {
@@ -683,7 +742,7 @@ class Website$Type extends MessageType<Website> {
683
742
  constructor() {
684
743
  super("resources.settings.Website", [
685
744
  { no: 1, name: "links", kind: "message", T: () => Links },
686
- { no: 2, name: "stats_page", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
745
+ { no: 2, name: "stats_page", kind: "scalar", T: 8 /*ScalarType.BOOL*/, options: { "tagger.tags": "json:\"statsPage\"" } }
687
746
  ]);
688
747
  }
689
748
  create(value?: PartialMessage<Website>): Website {
@@ -1050,7 +1109,7 @@ export const Discord = new Discord$Type();
1050
1109
  class DiscordBotPresence$Type extends MessageType<DiscordBotPresence> {
1051
1110
  constructor() {
1052
1111
  super("resources.settings.DiscordBotPresence", [
1053
- { no: 1, name: "type", kind: "enum", T: () => ["resources.settings.DiscordBotPresenceType", DiscordBotPresenceType, "DISCORD_BOT_PRESENCE_TYPE_"] },
1112
+ { no: 1, name: "type", kind: "enum", T: () => ["resources.settings.DiscordBotPresenceType", DiscordBotPresenceType, "DISCORD_BOT_PRESENCE_TYPE_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
1054
1113
  { no: 2, name: "status", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } },
1055
1114
  { no: 3, name: "url", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "codegen.sanitizer.sanitizer": { enabled: true, stripHtmlTags: true } } }
1056
1115
  ]);
@@ -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);