@fivenet-app/gen 2026.8.5 → 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 (63) 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 +39 -32
  6. package/google/protobuf/struct.ts +33 -22
  7. package/google/protobuf/timestamp.ts +9 -8
  8. package/package.json +2 -2
  9. package/perms.ts +41 -13
  10. package/resources/centrum/dispatches/dispatches.ts +206 -13
  11. package/resources/centrum/units/units.ts +207 -0
  12. package/resources/cron/cron.ts +44 -3
  13. package/resources/documents/templates/templates.ts +3 -3
  14. package/resources/file/file.ts +3 -3
  15. package/resources/file/filestore.ts +26 -10
  16. package/resources/jobs/colleagues/activity/activity.ts +50 -8
  17. package/resources/jobs/colleagues/colleagues.ts +14 -1
  18. package/resources/jobs/groups/short/group_member_short.ts +129 -0
  19. package/resources/jobs/job_asset.ts +116 -0
  20. package/resources/jobs/user_selector.ts +1 -15
  21. package/resources/notifications/clientview/clientview.ts +5 -1
  22. package/resources/notifications/events/events.ts +35 -1
  23. package/resources/notifications/notifications.ts +322 -2
  24. package/resources/permissions/attributes/attributes.ts +164 -2
  25. package/resources/permissions/authorization/authorization.ts +86 -0
  26. package/resources/permissions/permissions/permissions.ts +16 -1
  27. package/resources/properties/properties.ts +1648 -0
  28. package/resources/qualifications/activity/activity.ts +328 -0
  29. package/resources/qualifications/exam/exam.ts +108 -4
  30. package/resources/qualifications/qualifications.ts +36 -2
  31. package/resources/settings/config.ts +3 -3
  32. package/resources/sync/activity/activity.ts +4 -4
  33. package/resources/sync/data/data.ts +16 -4
  34. package/resources/users/activity/activity.ts +220 -3
  35. package/resources/users/props/props.ts +13 -1
  36. package/resources/users/user.ts +13 -1
  37. package/resources/vehicles/activity/activity.ts +222 -3
  38. package/resources/vehicles/props/props.ts +13 -1
  39. package/resources/vehicles/vehicles.ts +13 -1
  40. package/services/auth/auth.ts +61 -67
  41. package/services/centrum/centrum.ts +103 -1
  42. package/services/centrum/dispatches.ts +25 -1
  43. package/services/centrum/units.ts +25 -1
  44. package/services/citizens/citizens.client.ts +49 -0
  45. package/services/citizens/citizens.ts +384 -7
  46. package/services/documents/documents.ts +1 -0
  47. package/services/documents/templates.ts +12 -1
  48. package/services/jobs/colleagues.ts +26 -1
  49. package/services/jobs/conduct.ts +1 -0
  50. package/services/jobs/groups.ts +62 -4
  51. package/services/notifications/notifications.client.ts +40 -1
  52. package/services/notifications/notifications.ts +483 -3
  53. package/services/qualifications/qualifications.client.ts +20 -7
  54. package/services/qualifications/qualifications.ts +265 -4
  55. package/services/settings/job_assets.client.ts +105 -0
  56. package/services/settings/job_assets.ts +373 -0
  57. package/services/settings/properties.client.ts +194 -0
  58. package/services/settings/properties.ts +1555 -0
  59. package/services/settings/system.ts +29 -9
  60. package/services/sync/sync.ts +115 -12
  61. package/services/vehicles/vehicles.client.ts +52 -0
  62. package/services/vehicles/vehicles.ts +385 -7
  63. package/svcs.ts +58 -0
@@ -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();
@@ -53,6 +53,13 @@ export interface Permission {
53
53
  * @generated from protobuf field: optional string icon = 9
54
54
  */
55
55
  icon?: string;
56
+ /**
57
+ * True when this permission is granted through the AppConfig default list.
58
+ * This is metadata for consumers; override behavior is enforced separately.
59
+ *
60
+ * @generated from protobuf field: bool is_default = 10
61
+ */
62
+ isDefault: boolean;
56
63
  }
57
64
  /**
58
65
  * @generated from protobuf message resources.permissions.permissions.Role
@@ -116,7 +123,8 @@ class Permission$Type extends MessageType<Permission> {
116
123
  { no: 6, name: "guard_name", kind: "scalar", T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "255" } } } },
117
124
  { no: 7, name: "val", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
118
125
  { no: 8, name: "order", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gte: 0 } } } },
119
- { no: 9, name: "icon", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "128" } } } }
126
+ { no: 9, name: "icon", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "128" } } } },
127
+ { no: 10, name: "is_default", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
120
128
  ]);
121
129
  }
122
130
  create(value?: PartialMessage<Permission>): Permission {
@@ -127,6 +135,7 @@ class Permission$Type extends MessageType<Permission> {
127
135
  message.name = "";
128
136
  message.guardName = "";
129
137
  message.val = false;
138
+ message.isDefault = false;
130
139
  if (value !== undefined)
131
140
  reflectionMergePartial<Permission>(this, message, value);
132
141
  return message;
@@ -163,6 +172,9 @@ class Permission$Type extends MessageType<Permission> {
163
172
  case /* optional string icon */ 9:
164
173
  message.icon = reader.string();
165
174
  break;
175
+ case /* bool is_default */ 10:
176
+ message.isDefault = reader.bool();
177
+ break;
166
178
  default:
167
179
  let u = options.readUnknownField;
168
180
  if (u === "throw")
@@ -202,6 +214,9 @@ class Permission$Type extends MessageType<Permission> {
202
214
  /* optional string icon = 9; */
203
215
  if (message.icon !== undefined)
204
216
  writer.tag(9, WireType.LengthDelimited).string(message.icon);
217
+ /* bool is_default = 10; */
218
+ if (message.isDefault !== false)
219
+ writer.tag(10, WireType.Varint).bool(message.isDefault);
205
220
  let u = options.writeUnknownFields;
206
221
  if (u !== false)
207
222
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);