@fivenet-app/gen 2026.8.0 → 2026.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +201 -0
  2. package/clients.ts +12 -0
  3. package/codegen/perms/perms.ts +331 -2
  4. package/google/protobuf/any.ts +47 -103
  5. package/google/protobuf/descriptor.ts +28 -29
  6. package/google/protobuf/struct.ts +33 -22
  7. package/google/protobuf/timestamp.ts +3 -3
  8. package/package.json +2 -2
  9. package/perms.ts +58 -17
  10. package/resources/calendar/calendar.ts +11 -0
  11. package/resources/calendar/entries/entries.ts +23 -0
  12. package/resources/centrum/dispatches/dispatches.ts +214 -21
  13. package/resources/centrum/units/units.ts +212 -5
  14. package/resources/citizens/labels/access.ts +10 -6
  15. package/resources/cron/cron.ts +44 -3
  16. package/resources/dbsync/state.ts +192 -0
  17. package/resources/documents/stamps/access.ts +25 -0
  18. package/resources/documents/stamps/stamp.ts +0 -21
  19. package/resources/documents/templates/templates.ts +63 -61
  20. package/resources/documents/workflow/workflow.ts +61 -1
  21. package/resources/file/file.ts +3 -3
  22. package/resources/file/filestore.ts +26 -10
  23. package/resources/jobs/colleagues/activity/activity.ts +50 -8
  24. package/resources/jobs/colleagues/colleagues.ts +14 -1
  25. package/resources/jobs/groups/access/access.ts +29 -0
  26. package/resources/jobs/groups/activity.ts +332 -0
  27. package/resources/jobs/groups/group.ts +1666 -0
  28. package/resources/jobs/groups/short/group_member_short.ts +129 -0
  29. package/resources/jobs/job_asset.ts +116 -0
  30. package/resources/jobs/user_selector.ts +170 -0
  31. package/resources/notifications/clientview/clientview.ts +5 -1
  32. package/resources/notifications/events/events.ts +35 -1
  33. package/resources/notifications/notifications.ts +322 -2
  34. package/resources/permissions/attributes/attributes.ts +164 -2
  35. package/resources/permissions/authorization/authorization.ts +86 -0
  36. package/resources/permissions/permissions/permissions.ts +16 -1
  37. package/resources/properties/properties.ts +1648 -0
  38. package/resources/qualifications/activity/activity.ts +328 -0
  39. package/resources/qualifications/exam/exam.ts +108 -4
  40. package/resources/qualifications/qualifications.ts +36 -2
  41. package/resources/settings/config.ts +3 -3
  42. package/resources/settings/status.ts +197 -105
  43. package/resources/sync/activity/activity.ts +4 -4
  44. package/resources/sync/data/data.ts +16 -4
  45. package/resources/users/activity/activity.ts +220 -3
  46. package/resources/users/props/props.ts +13 -1
  47. package/resources/users/user.ts +13 -1
  48. package/resources/vehicles/activity/activity.ts +222 -3
  49. package/resources/vehicles/props/props.ts +13 -1
  50. package/resources/vehicles/vehicles.ts +13 -1
  51. package/services/auth/auth.ts +61 -67
  52. package/services/calendar/calendar.ts +1 -1
  53. package/services/calendar/entries.ts +3 -3
  54. package/services/centrum/centrum.ts +103 -1
  55. package/services/centrum/dispatches.ts +25 -1
  56. package/services/centrum/units.ts +28 -4
  57. package/services/citizens/citizens.client.ts +49 -0
  58. package/services/citizens/citizens.ts +384 -7
  59. package/services/completor/completor.ts +2 -2
  60. package/services/documents/approval.ts +2 -2
  61. package/services/documents/documents.ts +10 -9
  62. package/services/documents/templates.ts +24 -13
  63. package/services/jobs/colleagues.client.ts +34 -8
  64. package/services/jobs/colleagues.ts +289 -75
  65. package/services/jobs/conduct.ts +12 -19
  66. package/services/jobs/groups.client.ts +311 -0
  67. package/services/jobs/groups.ts +3654 -1
  68. package/services/jobs/timeclock.ts +30 -27
  69. package/services/notifications/notifications.client.ts +40 -1
  70. package/services/notifications/notifications.ts +483 -3
  71. package/services/qualifications/qualifications.client.ts +20 -7
  72. package/services/qualifications/qualifications.ts +291 -8
  73. package/services/settings/job_assets.client.ts +105 -0
  74. package/services/settings/job_assets.ts +373 -0
  75. package/services/settings/properties.client.ts +194 -0
  76. package/services/settings/properties.ts +1555 -0
  77. package/services/settings/settings.ts +1 -1
  78. package/services/settings/system.ts +29 -9
  79. package/services/sync/sync.client.ts +69 -33
  80. package/services/sync/sync.ts +557 -18
  81. package/services/vehicles/vehicles.client.ts +52 -0
  82. package/services/vehicles/vehicles.ts +386 -8
  83. package/svcs.ts +87 -1
@@ -14,6 +14,56 @@ import { MessageType } from "@protobuf-ts/runtime";
14
14
  import { UserShort } from "../users/short/user";
15
15
  import { I18NItem } from "../common/i18n";
16
16
  import { Timestamp } from "../timestamp/timestamp";
17
+ /**
18
+ * A per-user override for notification delivery. An unspecified category and
19
+ * kind form the global default; a category with an unspecified kind is a
20
+ * category default; and both set is a kind-specific override. Optional fields
21
+ * intentionally inherit from the less specific scope when absent.
22
+ *
23
+ * @generated from protobuf message resources.notifications.NotificationPreference
24
+ */
25
+ export interface NotificationPreference {
26
+ /**
27
+ * @generated from protobuf field: resources.notifications.NotificationCategory category = 1
28
+ */
29
+ category: NotificationCategory;
30
+ /**
31
+ * @generated from protobuf field: resources.notifications.NotificationKind kind = 2
32
+ */
33
+ kind: NotificationKind;
34
+ /**
35
+ * @generated from protobuf field: optional bool inbox_enabled = 3
36
+ */
37
+ inboxEnabled?: boolean;
38
+ /**
39
+ * @generated from protobuf field: optional bool toast_enabled = 4
40
+ */
41
+ toastEnabled?: boolean;
42
+ /**
43
+ * @generated from protobuf field: optional bool sound_enabled = 5
44
+ */
45
+ soundEnabled?: boolean;
46
+ }
47
+ /**
48
+ * Delivery instructions are resolved server-side and are only attached to a
49
+ * live notification event. They are never persisted with the notification.
50
+ *
51
+ * @generated from protobuf message resources.notifications.NotificationDelivery
52
+ */
53
+ export interface NotificationDelivery {
54
+ /**
55
+ * @generated from protobuf field: bool inbox_enabled = 1
56
+ */
57
+ inboxEnabled: boolean;
58
+ /**
59
+ * @generated from protobuf field: bool toast_enabled = 2
60
+ */
61
+ toastEnabled: boolean;
62
+ /**
63
+ * @generated from protobuf field: bool sound_enabled = 3
64
+ */
65
+ soundEnabled: boolean;
66
+ }
17
67
  /**
18
68
  * @generated from protobuf message resources.notifications.Notification
19
69
  */
@@ -58,6 +108,30 @@ export interface Notification {
58
108
  * @generated from protobuf field: optional bool starred = 10
59
109
  */
60
110
  starred?: boolean;
111
+ /**
112
+ * @generated from protobuf field: resources.notifications.NotificationKind kind = 11
113
+ */
114
+ kind: NotificationKind;
115
+ /**
116
+ * @generated from protobuf field: optional int32 actor_user_id = 12
117
+ */
118
+ actorUserId?: number;
119
+ /**
120
+ * @generated from protobuf field: optional string entity_type = 13
121
+ */
122
+ entityType?: string;
123
+ /**
124
+ * @generated from protobuf field: optional int64 entity_id = 14
125
+ */
126
+ entityId?: number;
127
+ /**
128
+ * @generated from protobuf field: resources.timestamp.Timestamp archived_at = 15
129
+ */
130
+ archivedAt?: Timestamp;
131
+ /**
132
+ * @generated from protobuf field: optional resources.notifications.NotificationDelivery delivery = 16
133
+ */
134
+ delivery?: NotificationDelivery;
61
135
  }
62
136
  /**
63
137
  * @generated from protobuf message resources.notifications.Data
@@ -150,8 +224,211 @@ export enum NotificationCategory {
150
224
  /**
151
225
  * @generated from protobuf enum value: NOTIFICATION_CATEGORY_CALENDAR = 3;
152
226
  */
153
- CALENDAR = 3
227
+ CALENDAR = 3,
228
+ /**
229
+ * @generated from protobuf enum value: NOTIFICATION_CATEGORY_JOBS = 4;
230
+ */
231
+ JOBS = 4,
232
+ /**
233
+ * @generated from protobuf enum value: NOTIFICATION_CATEGORY_QUALIFICATIONS = 5;
234
+ */
235
+ QUALIFICATIONS = 5,
236
+ /**
237
+ * @generated from protobuf enum value: NOTIFICATION_CATEGORY_MAILER = 6;
238
+ */
239
+ MAILER = 6,
240
+ /**
241
+ * @generated from protobuf enum value: NOTIFICATION_CATEGORY_DISPATCH = 7;
242
+ */
243
+ DISPATCH = 7,
244
+ /**
245
+ * @generated from protobuf enum value: NOTIFICATION_CATEGORY_SYSTEM = 8;
246
+ */
247
+ SYSTEM = 8
248
+ }
249
+ /**
250
+ * A precise, typed event within a notification category. Categories remain
251
+ * intentionally broad so clients can provide consistent filtering and UI.
252
+ *
253
+ * @generated from protobuf enum resources.notifications.NotificationKind
254
+ */
255
+ export enum NotificationKind {
256
+ /**
257
+ * @generated from protobuf enum value: NOTIFICATION_KIND_UNSPECIFIED = 0;
258
+ */
259
+ UNSPECIFIED = 0,
260
+ /**
261
+ * @generated from protobuf enum value: NOTIFICATION_KIND_JOBS_GROUP_LEADERSHIP_ADDED = 1;
262
+ */
263
+ JOBS_GROUP_LEADERSHIP_ADDED = 1,
264
+ /**
265
+ * @generated from protobuf enum value: NOTIFICATION_KIND_JOBS_GROUP_LEADERSHIP_REMOVED = 2;
266
+ */
267
+ JOBS_GROUP_LEADERSHIP_REMOVED = 2,
268
+ /**
269
+ * @generated from protobuf enum value: NOTIFICATION_KIND_JOBS_GROUP_MEMBER_ADDED = 3;
270
+ */
271
+ JOBS_GROUP_MEMBER_ADDED = 3,
272
+ /**
273
+ * @generated from protobuf enum value: NOTIFICATION_KIND_JOBS_GROUP_MEMBER_REMOVED = 4;
274
+ */
275
+ JOBS_GROUP_MEMBER_REMOVED = 4,
276
+ /**
277
+ * @generated from protobuf enum value: NOTIFICATION_KIND_DOCUMENT_APPROVAL_ASSIGNED = 5;
278
+ */
279
+ DOCUMENT_APPROVAL_ASSIGNED = 5,
280
+ /**
281
+ * @generated from protobuf enum value: NOTIFICATION_KIND_DOCUMENT_REQUEST_CREATED = 6;
282
+ */
283
+ DOCUMENT_REQUEST_CREATED = 6,
284
+ /**
285
+ * @generated from protobuf enum value: NOTIFICATION_KIND_DOCUMENT_REQUEST_DECIDED = 7;
286
+ */
287
+ DOCUMENT_REQUEST_DECIDED = 7,
288
+ /**
289
+ * @generated from protobuf enum value: NOTIFICATION_KIND_DOCUMENT_REQUEST_CANCELLED = 8;
290
+ */
291
+ DOCUMENT_REQUEST_CANCELLED = 8
292
+ }
293
+ // @generated message type with reflection information, may provide speed optimized methods
294
+ class NotificationPreference$Type extends MessageType<NotificationPreference> {
295
+ constructor() {
296
+ super("resources.notifications.NotificationPreference", [
297
+ { no: 1, name: "category", kind: "enum", T: () => ["resources.notifications.NotificationCategory", NotificationCategory, "NOTIFICATION_CATEGORY_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
298
+ { no: 2, name: "kind", kind: "enum", T: () => ["resources.notifications.NotificationKind", NotificationKind, "NOTIFICATION_KIND_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
299
+ { no: 3, name: "inbox_enabled", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
300
+ { no: 4, name: "toast_enabled", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
301
+ { no: 5, name: "sound_enabled", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }
302
+ ]);
303
+ }
304
+ create(value?: PartialMessage<NotificationPreference>): NotificationPreference {
305
+ const message = globalThis.Object.create((this.messagePrototype!));
306
+ message.category = 0;
307
+ message.kind = 0;
308
+ if (value !== undefined)
309
+ reflectionMergePartial<NotificationPreference>(this, message, value);
310
+ return message;
311
+ }
312
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: NotificationPreference): NotificationPreference {
313
+ let message = target ?? this.create(), end = reader.pos + length;
314
+ while (reader.pos < end) {
315
+ let [fieldNo, wireType] = reader.tag();
316
+ switch (fieldNo) {
317
+ case /* resources.notifications.NotificationCategory category */ 1:
318
+ message.category = reader.int32();
319
+ break;
320
+ case /* resources.notifications.NotificationKind kind */ 2:
321
+ message.kind = reader.int32();
322
+ break;
323
+ case /* optional bool inbox_enabled */ 3:
324
+ message.inboxEnabled = reader.bool();
325
+ break;
326
+ case /* optional bool toast_enabled */ 4:
327
+ message.toastEnabled = reader.bool();
328
+ break;
329
+ case /* optional bool sound_enabled */ 5:
330
+ message.soundEnabled = reader.bool();
331
+ break;
332
+ default:
333
+ let u = options.readUnknownField;
334
+ if (u === "throw")
335
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
336
+ let d = reader.skip(wireType);
337
+ if (u !== false)
338
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
339
+ }
340
+ }
341
+ return message;
342
+ }
343
+ internalBinaryWrite(message: NotificationPreference, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
344
+ /* resources.notifications.NotificationCategory category = 1; */
345
+ if (message.category !== 0)
346
+ writer.tag(1, WireType.Varint).int32(message.category);
347
+ /* resources.notifications.NotificationKind kind = 2; */
348
+ if (message.kind !== 0)
349
+ writer.tag(2, WireType.Varint).int32(message.kind);
350
+ /* optional bool inbox_enabled = 3; */
351
+ if (message.inboxEnabled !== undefined)
352
+ writer.tag(3, WireType.Varint).bool(message.inboxEnabled);
353
+ /* optional bool toast_enabled = 4; */
354
+ if (message.toastEnabled !== undefined)
355
+ writer.tag(4, WireType.Varint).bool(message.toastEnabled);
356
+ /* optional bool sound_enabled = 5; */
357
+ if (message.soundEnabled !== undefined)
358
+ writer.tag(5, WireType.Varint).bool(message.soundEnabled);
359
+ let u = options.writeUnknownFields;
360
+ if (u !== false)
361
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
362
+ return writer;
363
+ }
154
364
  }
365
+ /**
366
+ * @generated MessageType for protobuf message resources.notifications.NotificationPreference
367
+ */
368
+ export const NotificationPreference = new NotificationPreference$Type();
369
+ // @generated message type with reflection information, may provide speed optimized methods
370
+ class NotificationDelivery$Type extends MessageType<NotificationDelivery> {
371
+ constructor() {
372
+ super("resources.notifications.NotificationDelivery", [
373
+ { no: 1, name: "inbox_enabled", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
374
+ { no: 2, name: "toast_enabled", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
375
+ { no: 3, name: "sound_enabled", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
376
+ ]);
377
+ }
378
+ create(value?: PartialMessage<NotificationDelivery>): NotificationDelivery {
379
+ const message = globalThis.Object.create((this.messagePrototype!));
380
+ message.inboxEnabled = false;
381
+ message.toastEnabled = false;
382
+ message.soundEnabled = false;
383
+ if (value !== undefined)
384
+ reflectionMergePartial<NotificationDelivery>(this, message, value);
385
+ return message;
386
+ }
387
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: NotificationDelivery): NotificationDelivery {
388
+ let message = target ?? this.create(), end = reader.pos + length;
389
+ while (reader.pos < end) {
390
+ let [fieldNo, wireType] = reader.tag();
391
+ switch (fieldNo) {
392
+ case /* bool inbox_enabled */ 1:
393
+ message.inboxEnabled = reader.bool();
394
+ break;
395
+ case /* bool toast_enabled */ 2:
396
+ message.toastEnabled = reader.bool();
397
+ break;
398
+ case /* bool sound_enabled */ 3:
399
+ message.soundEnabled = reader.bool();
400
+ break;
401
+ default:
402
+ let u = options.readUnknownField;
403
+ if (u === "throw")
404
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
405
+ let d = reader.skip(wireType);
406
+ if (u !== false)
407
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
408
+ }
409
+ }
410
+ return message;
411
+ }
412
+ internalBinaryWrite(message: NotificationDelivery, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
413
+ /* bool inbox_enabled = 1; */
414
+ if (message.inboxEnabled !== false)
415
+ writer.tag(1, WireType.Varint).bool(message.inboxEnabled);
416
+ /* bool toast_enabled = 2; */
417
+ if (message.toastEnabled !== false)
418
+ writer.tag(2, WireType.Varint).bool(message.toastEnabled);
419
+ /* bool sound_enabled = 3; */
420
+ if (message.soundEnabled !== false)
421
+ writer.tag(3, WireType.Varint).bool(message.soundEnabled);
422
+ let u = options.writeUnknownFields;
423
+ if (u !== false)
424
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
425
+ return writer;
426
+ }
427
+ }
428
+ /**
429
+ * @generated MessageType for protobuf message resources.notifications.NotificationDelivery
430
+ */
431
+ export const NotificationDelivery = new NotificationDelivery$Type();
155
432
  // @generated message type with reflection information, may provide speed optimized methods
156
433
  class Notification$Type extends MessageType<Notification> {
157
434
  constructor() {
@@ -165,7 +442,13 @@ class Notification$Type extends MessageType<Notification> {
165
442
  { no: 7, name: "content", kind: "message", T: () => I18NItem, options: { "codegen.sanitizer.sanitizer": { enabled: true } } },
166
443
  { no: 8, name: "category", kind: "enum", T: () => ["resources.notifications.NotificationCategory", NotificationCategory, "NOTIFICATION_CATEGORY_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
167
444
  { no: 9, name: "data", kind: "message", T: () => Data },
168
- { no: 10, name: "starred", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }
445
+ { no: 10, name: "starred", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
446
+ { no: 11, name: "kind", kind: "enum", T: () => ["resources.notifications.NotificationKind", NotificationKind, "NOTIFICATION_KIND_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
447
+ { no: 12, name: "actor_user_id", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gte: 0 } } } },
448
+ { no: 13, name: "entity_type", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "64" } } } },
449
+ { no: 14, name: "entity_id", kind: "scalar", opt: true, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/, options: { "buf.validate.field": { int64: { gte: "0" } } } },
450
+ { no: 15, name: "archived_at", kind: "message", T: () => Timestamp },
451
+ { no: 16, name: "delivery", kind: "message", T: () => NotificationDelivery }
169
452
  ]);
170
453
  }
171
454
  create(value?: PartialMessage<Notification>): Notification {
@@ -174,6 +457,7 @@ class Notification$Type extends MessageType<Notification> {
174
457
  message.userId = 0;
175
458
  message.type = 0;
176
459
  message.category = 0;
460
+ message.kind = 0;
177
461
  if (value !== undefined)
178
462
  reflectionMergePartial<Notification>(this, message, value);
179
463
  return message;
@@ -213,6 +497,24 @@ class Notification$Type extends MessageType<Notification> {
213
497
  case /* optional bool starred */ 10:
214
498
  message.starred = reader.bool();
215
499
  break;
500
+ case /* resources.notifications.NotificationKind kind */ 11:
501
+ message.kind = reader.int32();
502
+ break;
503
+ case /* optional int32 actor_user_id */ 12:
504
+ message.actorUserId = reader.int32();
505
+ break;
506
+ case /* optional string entity_type */ 13:
507
+ message.entityType = reader.string();
508
+ break;
509
+ case /* optional int64 entity_id */ 14:
510
+ message.entityId = reader.int64().toNumber();
511
+ break;
512
+ case /* resources.timestamp.Timestamp archived_at */ 15:
513
+ message.archivedAt = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.archivedAt);
514
+ break;
515
+ case /* optional resources.notifications.NotificationDelivery delivery */ 16:
516
+ message.delivery = NotificationDelivery.internalBinaryRead(reader, reader.uint32(), options, message.delivery);
517
+ break;
216
518
  default:
217
519
  let u = options.readUnknownField;
218
520
  if (u === "throw")
@@ -255,6 +557,24 @@ class Notification$Type extends MessageType<Notification> {
255
557
  /* optional bool starred = 10; */
256
558
  if (message.starred !== undefined)
257
559
  writer.tag(10, WireType.Varint).bool(message.starred);
560
+ /* resources.notifications.NotificationKind kind = 11; */
561
+ if (message.kind !== 0)
562
+ writer.tag(11, WireType.Varint).int32(message.kind);
563
+ /* optional int32 actor_user_id = 12; */
564
+ if (message.actorUserId !== undefined)
565
+ writer.tag(12, WireType.Varint).int32(message.actorUserId);
566
+ /* optional string entity_type = 13; */
567
+ if (message.entityType !== undefined)
568
+ writer.tag(13, WireType.LengthDelimited).string(message.entityType);
569
+ /* optional int64 entity_id = 14; */
570
+ if (message.entityId !== undefined)
571
+ writer.tag(14, WireType.Varint).int64(message.entityId);
572
+ /* resources.timestamp.Timestamp archived_at = 15; */
573
+ if (message.archivedAt)
574
+ Timestamp.internalBinaryWrite(message.archivedAt, writer.tag(15, WireType.LengthDelimited).fork(), options).join();
575
+ /* optional resources.notifications.NotificationDelivery delivery = 16; */
576
+ if (message.delivery)
577
+ NotificationDelivery.internalBinaryWrite(message.delivery, writer.tag(16, WireType.LengthDelimited).fork(), options).join();
258
578
  let u = options.writeUnknownFields;
259
579
  if (u !== false)
260
580
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -90,6 +90,12 @@ export interface AttributeValues {
90
90
  * @generated from protobuf field: resources.permissions.attributes.JobGradeList job_grade_list = 3
91
91
  */
92
92
  jobGradeList: JobGradeList;
93
+ } | {
94
+ oneofKind: "propertyList";
95
+ /**
96
+ * @generated from protobuf field: resources.permissions.attributes.PropertyList property_list = 4
97
+ */
98
+ propertyList: PropertyList;
93
99
  } | {
94
100
  oneofKind: undefined;
95
101
  };
@@ -103,6 +109,35 @@ export interface StringList {
103
109
  */
104
110
  strings: string[];
105
111
  }
112
+ /**
113
+ * @generated from protobuf message resources.permissions.attributes.PropertyList
114
+ */
115
+ export interface PropertyList {
116
+ /**
117
+ * @generated from protobuf field: repeated string keys = 1
118
+ */
119
+ keys: string[];
120
+ /**
121
+ * Display metadata for the keys above. This is response metadata only; role
122
+ * attribute values continue to persist and authorize by key.
123
+ *
124
+ * @generated from protobuf field: repeated resources.permissions.attributes.PropertyListEntry properties = 2
125
+ */
126
+ properties: PropertyListEntry[];
127
+ }
128
+ /**
129
+ * @generated from protobuf message resources.permissions.attributes.PropertyListEntry
130
+ */
131
+ export interface PropertyListEntry {
132
+ /**
133
+ * @generated from protobuf field: string key = 1
134
+ */
135
+ key: string;
136
+ /**
137
+ * @generated from protobuf field: string label = 2
138
+ */
139
+ label: string;
140
+ }
106
141
  /**
107
142
  * @generated from protobuf message resources.permissions.attributes.JobGradeList
108
143
  */
@@ -152,7 +187,14 @@ export enum AttributeType {
152
187
  /**
153
188
  * @generated from protobuf enum value: ATTRIBUTE_TYPE_JOB_GRADE_LIST = 3;
154
189
  */
155
- JOB_GRADE_LIST = 3
190
+ JOB_GRADE_LIST = 3,
191
+ /**
192
+ * Property lists select runtime-defined property keys. The RPC permission
193
+ * controls the operation; this attribute only controls which properties.
194
+ *
195
+ * @generated from protobuf enum value: ATTRIBUTE_TYPE_PROPERTY_LIST = 4;
196
+ */
197
+ PROPERTY_LIST = 4
156
198
  }
157
199
  // @generated message type with reflection information, may provide speed optimized methods
158
200
  class RoleAttribute$Type extends MessageType<RoleAttribute> {
@@ -291,7 +333,8 @@ class AttributeValues$Type extends MessageType<AttributeValues> {
291
333
  super("resources.permissions.attributes.AttributeValues", [
292
334
  { no: 1, name: "string_list", kind: "message", oneof: "validValues", T: () => StringList },
293
335
  { no: 2, name: "job_list", kind: "message", oneof: "validValues", T: () => StringList },
294
- { no: 3, name: "job_grade_list", kind: "message", oneof: "validValues", T: () => JobGradeList }
336
+ { no: 3, name: "job_grade_list", kind: "message", oneof: "validValues", T: () => JobGradeList },
337
+ { no: 4, name: "property_list", kind: "message", oneof: "validValues", T: () => PropertyList }
295
338
  ], { "codegen.dbscanner.dbscanner": { enabled: true } });
296
339
  }
297
340
  create(value?: PartialMessage<AttributeValues>): AttributeValues {
@@ -324,6 +367,12 @@ class AttributeValues$Type extends MessageType<AttributeValues> {
324
367
  jobGradeList: JobGradeList.internalBinaryRead(reader, reader.uint32(), options, (message.validValues as any).jobGradeList)
325
368
  };
326
369
  break;
370
+ case /* resources.permissions.attributes.PropertyList property_list */ 4:
371
+ message.validValues = {
372
+ oneofKind: "propertyList",
373
+ propertyList: PropertyList.internalBinaryRead(reader, reader.uint32(), options, (message.validValues as any).propertyList)
374
+ };
375
+ break;
327
376
  default:
328
377
  let u = options.readUnknownField;
329
378
  if (u === "throw")
@@ -345,6 +394,9 @@ class AttributeValues$Type extends MessageType<AttributeValues> {
345
394
  /* resources.permissions.attributes.JobGradeList job_grade_list = 3; */
346
395
  if (message.validValues.oneofKind === "jobGradeList")
347
396
  JobGradeList.internalBinaryWrite(message.validValues.jobGradeList, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
397
+ /* resources.permissions.attributes.PropertyList property_list = 4; */
398
+ if (message.validValues.oneofKind === "propertyList")
399
+ PropertyList.internalBinaryWrite(message.validValues.propertyList, writer.tag(4, WireType.LengthDelimited).fork(), options).join();
348
400
  let u = options.writeUnknownFields;
349
401
  if (u !== false)
350
402
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -403,6 +455,116 @@ class StringList$Type extends MessageType<StringList> {
403
455
  */
404
456
  export const StringList = new StringList$Type();
405
457
  // @generated message type with reflection information, may provide speed optimized methods
458
+ class PropertyList$Type extends MessageType<PropertyList> {
459
+ constructor() {
460
+ super("resources.permissions.attributes.PropertyList", [
461
+ { no: 1, name: "keys", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { repeated: { items: { string: { minLen: "1", maxLen: "64", pattern: "^[a-z][a-z0-9_.-]*$" } } } } } },
462
+ { no: 2, name: "properties", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => PropertyListEntry }
463
+ ]);
464
+ }
465
+ create(value?: PartialMessage<PropertyList>): PropertyList {
466
+ const message = globalThis.Object.create((this.messagePrototype!));
467
+ message.keys = [];
468
+ message.properties = [];
469
+ if (value !== undefined)
470
+ reflectionMergePartial<PropertyList>(this, message, value);
471
+ return message;
472
+ }
473
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PropertyList): PropertyList {
474
+ let message = target ?? this.create(), end = reader.pos + length;
475
+ while (reader.pos < end) {
476
+ let [fieldNo, wireType] = reader.tag();
477
+ switch (fieldNo) {
478
+ case /* repeated string keys */ 1:
479
+ message.keys.push(reader.string());
480
+ break;
481
+ case /* repeated resources.permissions.attributes.PropertyListEntry properties */ 2:
482
+ message.properties.push(PropertyListEntry.internalBinaryRead(reader, reader.uint32(), options));
483
+ break;
484
+ default:
485
+ let u = options.readUnknownField;
486
+ if (u === "throw")
487
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
488
+ let d = reader.skip(wireType);
489
+ if (u !== false)
490
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
491
+ }
492
+ }
493
+ return message;
494
+ }
495
+ internalBinaryWrite(message: PropertyList, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
496
+ /* repeated string keys = 1; */
497
+ for (let i = 0; i < message.keys.length; i++)
498
+ writer.tag(1, WireType.LengthDelimited).string(message.keys[i]);
499
+ /* repeated resources.permissions.attributes.PropertyListEntry properties = 2; */
500
+ for (let i = 0; i < message.properties.length; i++)
501
+ PropertyListEntry.internalBinaryWrite(message.properties[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();
502
+ let u = options.writeUnknownFields;
503
+ if (u !== false)
504
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
505
+ return writer;
506
+ }
507
+ }
508
+ /**
509
+ * @generated MessageType for protobuf message resources.permissions.attributes.PropertyList
510
+ */
511
+ export const PropertyList = new PropertyList$Type();
512
+ // @generated message type with reflection information, may provide speed optimized methods
513
+ class PropertyListEntry$Type extends MessageType<PropertyListEntry> {
514
+ constructor() {
515
+ super("resources.permissions.attributes.PropertyListEntry", [
516
+ { no: 1, name: "key", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
517
+ { no: 2, name: "label", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
518
+ ]);
519
+ }
520
+ create(value?: PartialMessage<PropertyListEntry>): PropertyListEntry {
521
+ const message = globalThis.Object.create((this.messagePrototype!));
522
+ message.key = "";
523
+ message.label = "";
524
+ if (value !== undefined)
525
+ reflectionMergePartial<PropertyListEntry>(this, message, value);
526
+ return message;
527
+ }
528
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PropertyListEntry): PropertyListEntry {
529
+ let message = target ?? this.create(), end = reader.pos + length;
530
+ while (reader.pos < end) {
531
+ let [fieldNo, wireType] = reader.tag();
532
+ switch (fieldNo) {
533
+ case /* string key */ 1:
534
+ message.key = reader.string();
535
+ break;
536
+ case /* string label */ 2:
537
+ message.label = reader.string();
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: PropertyListEntry, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
551
+ /* string key = 1; */
552
+ if (message.key !== "")
553
+ writer.tag(1, WireType.LengthDelimited).string(message.key);
554
+ /* string label = 2; */
555
+ if (message.label !== "")
556
+ writer.tag(2, WireType.LengthDelimited).string(message.label);
557
+ let u = options.writeUnknownFields;
558
+ if (u !== false)
559
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
560
+ return writer;
561
+ }
562
+ }
563
+ /**
564
+ * @generated MessageType for protobuf message resources.permissions.attributes.PropertyListEntry
565
+ */
566
+ export const PropertyListEntry = new PropertyListEntry$Type();
567
+ // @generated message type with reflection information, may provide speed optimized methods
406
568
  class JobGradeList$Type extends MessageType<JobGradeList> {
407
569
  constructor() {
408
570
  super("resources.permissions.attributes.JobGradeList", [
@@ -0,0 +1,86 @@
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/permissions/authorization/authorization.proto" (package "resources.permissions.authorization", 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 { 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 { RoleAttribute } from "../attributes/attributes";
15
+ import { Permission } from "../permissions/permissions";
16
+ /**
17
+ * AuthorizationState is the effective authorization of the currently selected
18
+ * character. It is a complete replacement snapshot, not a delta.
19
+ *
20
+ * @generated from protobuf message resources.permissions.authorization.AuthorizationState
21
+ */
22
+ export interface AuthorizationState {
23
+ /**
24
+ * @generated from protobuf field: repeated resources.permissions.permissions.Permission permissions = 1
25
+ */
26
+ permissions: Permission[];
27
+ /**
28
+ * @generated from protobuf field: repeated resources.permissions.attributes.RoleAttribute attributes = 2
29
+ */
30
+ attributes: RoleAttribute[];
31
+ }
32
+ // @generated message type with reflection information, may provide speed optimized methods
33
+ class AuthorizationState$Type extends MessageType<AuthorizationState> {
34
+ constructor() {
35
+ super("resources.permissions.authorization.AuthorizationState", [
36
+ { no: 1, name: "permissions", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Permission },
37
+ { no: 2, name: "attributes", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => RoleAttribute }
38
+ ]);
39
+ }
40
+ create(value?: PartialMessage<AuthorizationState>): AuthorizationState {
41
+ const message = globalThis.Object.create((this.messagePrototype!));
42
+ message.permissions = [];
43
+ message.attributes = [];
44
+ if (value !== undefined)
45
+ reflectionMergePartial<AuthorizationState>(this, message, value);
46
+ return message;
47
+ }
48
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AuthorizationState): AuthorizationState {
49
+ let message = target ?? this.create(), end = reader.pos + length;
50
+ while (reader.pos < end) {
51
+ let [fieldNo, wireType] = reader.tag();
52
+ switch (fieldNo) {
53
+ case /* repeated resources.permissions.permissions.Permission permissions */ 1:
54
+ message.permissions.push(Permission.internalBinaryRead(reader, reader.uint32(), options));
55
+ break;
56
+ case /* repeated resources.permissions.attributes.RoleAttribute attributes */ 2:
57
+ message.attributes.push(RoleAttribute.internalBinaryRead(reader, reader.uint32(), options));
58
+ break;
59
+ default:
60
+ let u = options.readUnknownField;
61
+ if (u === "throw")
62
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
63
+ let d = reader.skip(wireType);
64
+ if (u !== false)
65
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
66
+ }
67
+ }
68
+ return message;
69
+ }
70
+ internalBinaryWrite(message: AuthorizationState, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
71
+ /* repeated resources.permissions.permissions.Permission permissions = 1; */
72
+ for (let i = 0; i < message.permissions.length; i++)
73
+ Permission.internalBinaryWrite(message.permissions[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
74
+ /* repeated resources.permissions.attributes.RoleAttribute attributes = 2; */
75
+ for (let i = 0; i < message.attributes.length; i++)
76
+ RoleAttribute.internalBinaryWrite(message.attributes[i], writer.tag(2, WireType.LengthDelimited).fork(), options).join();
77
+ let u = options.writeUnknownFields;
78
+ if (u !== false)
79
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
80
+ return writer;
81
+ }
82
+ }
83
+ /**
84
+ * @generated MessageType for protobuf message resources.permissions.authorization.AuthorizationState
85
+ */
86
+ export const AuthorizationState = new AuthorizationState$Type();