@fivenet-app/gen 2026.5.1 → 2026.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/clients.ts +6 -0
  2. package/codegen/perms/perms.ts +14 -2
  3. package/codegen/sanitizer/sanitizer.ts +6 -0
  4. package/google/protobuf/descriptor.ts +11 -3
  5. package/google/protobuf/timestamp.ts +7 -6
  6. package/package.json +1 -1
  7. package/perms.ts +343 -3
  8. package/resources/access/access.ts +481 -0
  9. package/resources/calendar/access/access.ts +0 -330
  10. package/resources/calendar/calendar.ts +307 -25
  11. package/resources/calendar/entries/entries.ts +204 -11
  12. package/resources/centrum/units/access/access.ts +0 -373
  13. package/resources/centrum/units/units.ts +20 -8
  14. package/resources/citizens/labels/access.ts +0 -191
  15. package/resources/citizens/labels/labels.ts +20 -8
  16. package/resources/common/content/diff_activity.ts +1 -1
  17. package/resources/cron/cron.ts +1 -1
  18. package/resources/documents/access/access.ts +0 -329
  19. package/resources/documents/activity/activity.ts +49 -45
  20. package/resources/documents/documents.ts +1 -1
  21. package/resources/documents/requests/requests.ts +1 -1
  22. package/resources/documents/stamps/stamp.ts +40 -210
  23. package/resources/documents/templates/templates.ts +158 -318
  24. package/resources/jobs/colleagues/activity/activity.ts +1 -1
  25. package/resources/jobs/conduct/conduct.ts +2 -2
  26. package/resources/jobs/jobs.ts +22 -0
  27. package/resources/jobs/labels/labels.ts +9 -9
  28. package/resources/laws/laws.ts +24 -0
  29. package/resources/livemap/markers/marker_marker.ts +311 -4
  30. package/resources/mailer/access/access.ts +0 -457
  31. package/resources/mailer/emails/email.ts +4 -4
  32. package/resources/notifications/events/events.ts +18 -1
  33. package/resources/qualifications/access/access.ts +0 -248
  34. package/resources/qualifications/qualifications.ts +9 -9
  35. package/resources/settings/config.ts +53 -5
  36. package/resources/settings/data.ts +1 -1
  37. package/resources/stats/stats.ts +32 -20
  38. package/resources/sync/data/data.ts +13 -1
  39. package/resources/userinfo/userinfo.ts +202 -51
  40. package/resources/users/activity/activity.ts +1 -1
  41. package/resources/wiki/access/access.ts +0 -330
  42. package/resources/wiki/activity/activity.ts +45 -45
  43. package/resources/wiki/page.ts +9 -9
  44. package/services/calendar/calendar.ts +1 -1
  45. package/services/calendar/entries.ts +12 -1
  46. package/services/centrum/dispatches.ts +27 -7
  47. package/services/centrum/units.client.ts +15 -2
  48. package/services/centrum/units.ts +231 -123
  49. package/services/citizens/citizens.ts +1 -1
  50. package/services/citizens/labels.client.ts +7 -20
  51. package/services/citizens/labels.ts +35 -183
  52. package/services/documents/approval.ts +15 -4
  53. package/services/documents/collab.ts +1 -1
  54. package/services/documents/documents.ts +38 -38
  55. package/services/documents/stats.ts +14 -2
  56. package/services/filestore/filestore.ts +4 -4
  57. package/services/jobs/colleagues.ts +3 -3
  58. package/services/jobs/conduct.ts +2 -2
  59. package/services/jobs/groups.client.ts +22 -0
  60. package/services/jobs/groups.ts +9 -0
  61. package/services/jobs/timeclock.ts +2 -2
  62. package/services/mailer/thread.ts +2 -2
  63. package/services/qualifications/qualifications.ts +52 -34
  64. package/services/settings/accounts.ts +5 -5
  65. package/services/settings/config.ts +2 -2
  66. package/services/settings/cron.ts +2 -2
  67. package/services/settings/laws.client.ts +28 -2
  68. package/services/settings/laws.ts +229 -1
  69. package/services/settings/system.ts +6 -6
  70. package/services/sync/sync.client.ts +42 -14
  71. package/services/sync/sync.ts +162 -13
  72. package/services/wiki/wiki.client.ts +15 -2
  73. package/services/wiki/wiki.ts +122 -0
  74. package/svcs.ts +18 -2
package/clients.ts CHANGED
@@ -128,6 +128,12 @@ export async function getJobsConductClient() {
128
128
  return new ConductServiceClient(useGRPCTransport());
129
129
  }
130
130
 
131
+ // Factory for jobs.groups client.
132
+ export async function getJobsGroupsClient() {
133
+ const { GroupsServiceClient } = await import('~~/gen/ts/services/jobs/groups.client');
134
+ return new GroupsServiceClient(useGRPCTransport());
135
+ }
136
+
131
137
  // Factory for jobs.jobs client.
132
138
  export async function getJobsJobsClient() {
133
139
  const { JobsServiceClient } = await import('~~/gen/ts/services/jobs/jobs.client');
@@ -44,6 +44,10 @@ export interface PermsOptions {
44
44
  * @generated from protobuf field: repeated codegen.perms.Attr attrs = 7
45
45
  */
46
46
  attrs: Attr[];
47
+ /**
48
+ * @generated from protobuf field: bool internal = 8
49
+ */
50
+ internal: boolean;
47
51
  }
48
52
  /**
49
53
  * @generated from protobuf message codegen.perms.Attr
@@ -118,7 +122,8 @@ class PermsOptions$Type extends MessageType<PermsOptions> {
118
122
  { no: 4, name: "name", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
119
123
  { no: 5, name: "names", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
120
124
  { no: 6, name: "order", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
121
- { no: 7, name: "attrs", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Attr }
125
+ { no: 7, name: "attrs", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Attr },
126
+ { no: 8, name: "internal", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
122
127
  ]);
123
128
  }
124
129
  create(value?: PartialMessage<PermsOptions>): PermsOptions {
@@ -127,6 +132,7 @@ class PermsOptions$Type extends MessageType<PermsOptions> {
127
132
  message.names = [];
128
133
  message.order = 0;
129
134
  message.attrs = [];
135
+ message.internal = false;
130
136
  if (value !== undefined)
131
137
  reflectionMergePartial<PermsOptions>(this, message, value);
132
138
  return message;
@@ -157,6 +163,9 @@ class PermsOptions$Type extends MessageType<PermsOptions> {
157
163
  case /* repeated codegen.perms.Attr attrs */ 7:
158
164
  message.attrs.push(Attr.internalBinaryRead(reader, reader.uint32(), options));
159
165
  break;
166
+ case /* bool internal */ 8:
167
+ message.internal = reader.bool();
168
+ break;
160
169
  default:
161
170
  let u = options.readUnknownField;
162
171
  if (u === "throw")
@@ -190,6 +199,9 @@ class PermsOptions$Type extends MessageType<PermsOptions> {
190
199
  /* repeated codegen.perms.Attr attrs = 7; */
191
200
  for (let i = 0; i < message.attrs.length; i++)
192
201
  Attr.internalBinaryWrite(message.attrs[i], writer.tag(7, WireType.LengthDelimited).fork(), options).join();
202
+ /* bool internal = 8; */
203
+ if (message.internal !== false)
204
+ writer.tag(8, WireType.Varint).bool(message.internal);
193
205
  let u = options.writeUnknownFields;
194
206
  if (u !== false)
195
207
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -206,7 +218,7 @@ class Attr$Type extends MessageType<Attr> {
206
218
  super("codegen.perms.Attr", [
207
219
  { no: 1, name: "key", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
208
220
  { no: 2, name: "value", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
209
- { no: 3, name: "type", kind: "enum", T: () => ["resources.permissions.attributes.AttributeType", AttributeType, "ATTRIBUTE_TYPE_"] },
221
+ { no: 3, name: "type", kind: "enum", T: () => ["resources.permissions.attributes.AttributeType", AttributeType, "ATTRIBUTE_TYPE_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } },
210
222
  { no: 4, name: "valid_string_list", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }
211
223
  ]);
212
224
  }
@@ -16,6 +16,8 @@ import { MessageType } from "@protobuf-ts/runtime";
16
16
  */
17
17
  export interface FieldOptions {
18
18
  /**
19
+ * Default false
20
+ *
19
21
  * @generated from protobuf field: bool enabled = 1
20
22
  */
21
23
  enabled: boolean;
@@ -24,10 +26,14 @@ export interface FieldOptions {
24
26
  */
25
27
  method?: string;
26
28
  /**
29
+ * Default false
30
+ *
27
31
  * @generated from protobuf field: optional bool strip_html_tags = 3
28
32
  */
29
33
  stripHtmlTags?: boolean;
30
34
  /**
35
+ * Default false
36
+ *
31
37
  * @generated from protobuf field: optional bool tiptap_json = 4
32
38
  */
33
39
  tiptapJson?: boolean;
@@ -1150,9 +1150,11 @@ export interface FieldOptions {
1150
1150
  */
1151
1151
  deprecated?: boolean;
1152
1152
  /**
1153
+ * DEPRECATED. DO NOT USE!
1153
1154
  * For Google-internal migration only. Do not use.
1154
1155
  *
1155
- * @generated from protobuf field: optional bool weak = 10 [default = false]
1156
+ * @deprecated
1157
+ * @generated from protobuf field: optional bool weak = 10 [default = false, deprecated = true]
1156
1158
  */
1157
1159
  weak?: boolean;
1158
1160
  /**
@@ -2180,6 +2182,12 @@ export enum Edition {
2180
2182
  * @generated from protobuf enum value: EDITION_2024 = 1001;
2181
2183
  */
2182
2184
  EDITION_2024 = 1001,
2185
+ /**
2186
+ * A placeholder edition for developing and testing unscheduled features.
2187
+ *
2188
+ * @generated from protobuf enum value: EDITION_UNSTABLE = 9999;
2189
+ */
2190
+ EDITION_UNSTABLE = 9999,
2183
2191
  /**
2184
2192
  * Placeholder editions for testing feature resolution. These should not be
2185
2193
  * used or relied on outside of tests.
@@ -3651,7 +3659,7 @@ class FieldOptions$Type extends MessageType<FieldOptions> {
3651
3659
  case /* optional bool deprecated = 3 [default = false] */ 3:
3652
3660
  message.deprecated = reader.bool();
3653
3661
  break;
3654
- case /* optional bool weak = 10 [default = false] */ 10:
3662
+ case /* optional bool weak = 10 [default = false, deprecated = true] */ 10:
3655
3663
  message.weak = reader.bool();
3656
3664
  break;
3657
3665
  case /* optional bool debug_redact = 16 [default = false] */ 16:
@@ -3706,7 +3714,7 @@ class FieldOptions$Type extends MessageType<FieldOptions> {
3706
3714
  /* optional google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL]; */
3707
3715
  if (message.jstype !== undefined)
3708
3716
  writer.tag(6, WireType.Varint).int32(message.jstype);
3709
- /* optional bool weak = 10 [default = false]; */
3717
+ /* optional bool weak = 10 [default = false, deprecated = true]; */
3710
3718
  if (message.weak !== undefined)
3711
3719
  writer.tag(10, WireType.Varint).bool(message.weak);
3712
3720
  /* optional bool unverified_lazy = 15 [default = false]; */
@@ -143,17 +143,18 @@ import { MessageType } from "@protobuf-ts/runtime";
143
143
  */
144
144
  export interface Timestamp {
145
145
  /**
146
- * Represents seconds of UTC time since Unix epoch
147
- * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
148
- * 9999-12-31T23:59:59Z inclusive.
146
+ * Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must
147
+ * be between -315576000000 and 315576000000 inclusive (which corresponds to
148
+ * 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z).
149
149
  *
150
150
  * @generated from protobuf field: int64 seconds = 1
151
151
  */
152
152
  seconds: number;
153
153
  /**
154
- * Non-negative fractions of a second at nanosecond resolution. Negative
155
- * second values with fractions must still have non-negative nanos values
156
- * that count forward in time. Must be from 0 to 999,999,999
154
+ * Non-negative fractions of a second at nanosecond resolution. This field is
155
+ * the nanosecond portion of the duration, not an alternative to seconds.
156
+ * Negative second values with fractions must still have non-negative nanos
157
+ * values that count forward in time. Must be between 0 and 999,999,999
157
158
  * inclusive.
158
159
  *
159
160
  * @generated from protobuf field: int32 nanos = 2
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fivenet-app/gen",
3
3
  "private": false,
4
- "version": "2026.5.1",
4
+ "version": "2026.7.0",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
7
7
  "homepage": "https://fivenet.app",
package/perms.ts CHANGED
@@ -20,6 +20,7 @@
20
20
  // source: services/filestore/filestore.proto
21
21
  // source: services/jobs/colleagues.proto
22
22
  // source: services/jobs/conduct.proto
23
+ // source: services/jobs/groups.proto
23
24
  // source: services/jobs/jobs.proto
24
25
  // source: services/jobs/stats.proto
25
26
  // source: services/jobs/timeclock.proto
@@ -44,7 +45,7 @@
44
45
 
45
46
  export type Perms = SystemPerms | GRPCServicePerms;
46
47
 
47
- export type SystemPerms = 'internal.Superuser/CanBeSuperuser' | 'internal.Superuser/Superuser' | 'TODOService/TODOMethod';
48
+ export type SystemPerms = 'internal.Superuser/CanBeSuperuser' | 'internal.Superuser/JobAdmin' | 'internal.Superuser/ConfigAdmin' | 'TODOService/TODOMethod';
48
49
 
49
50
  export type GRPCServicePerms =
50
51
  | 'auth.AuthService/ChooseCharacter'
@@ -65,7 +66,6 @@ export type GRPCServicePerms =
65
66
  | 'citizens.CitizensService/SetUserProps'
66
67
  | 'citizens.LabelsService/CreateOrUpdateLabel'
67
68
  | 'citizens.LabelsService/DeleteLabel'
68
- | 'citizens.LabelsService/ListLabels'
69
69
  | 'documents.ApprovalService/DeleteApprovalTasks'
70
70
  | 'documents.ApprovalService/RevokeApproval'
71
71
  | 'documents.ApprovalService/UpsertApprovalPolicy'
@@ -133,6 +133,7 @@ export type GRPCServicePerms =
133
133
  | 'wiki.WikiService/DeletePage'
134
134
  | 'wiki.WikiService/ListPageActivity'
135
135
  | 'wiki.WikiService/ListPages'
136
+ | 'wiki.WikiService/MovePage'
136
137
  | 'wiki.WikiService/UpdatePage'
137
138
  | 'wiki.WikiService/UploadFile';
138
139
 
@@ -184,7 +185,6 @@ export const GRPCServiceMethods = [
184
185
  'citizens.CitizensService/SetUserProps',
185
186
  'citizens.LabelsService/CreateOrUpdateLabel',
186
187
  'citizens.LabelsService/DeleteLabel',
187
- 'citizens.LabelsService/ListLabels',
188
188
  'documents.ApprovalService/DeleteApprovalTasks',
189
189
  'documents.ApprovalService/RevokeApproval',
190
190
  'documents.ApprovalService/UpsertApprovalPolicy',
@@ -252,6 +252,346 @@ export const GRPCServiceMethods = [
252
252
  'wiki.WikiService/DeletePage',
253
253
  'wiki.WikiService/ListPageActivity',
254
254
  'wiki.WikiService/ListPages',
255
+ 'wiki.WikiService/MovePage',
255
256
  'wiki.WikiService/UpdatePage',
256
257
  'wiki.WikiService/UploadFile',
257
258
  ];
259
+
260
+ export const PermAttributes = {
261
+ 'auth.AuthService/ChooseCharacter': {
262
+ },
263
+ 'calendar.CalendarService/CreateCalendar': {
264
+ 'Fields': {
265
+ type: 'stringList',
266
+ values: ['Job','Public',] as const,
267
+ },
268
+ },
269
+ 'centrum.CentrumService/Stream': {
270
+ },
271
+ 'centrum.CentrumService/TakeControl': {
272
+ },
273
+ 'centrum.CentrumService/UpdateDispatchers': {
274
+ },
275
+ 'centrum.CentrumService/UpdateSettings': {
276
+ 'Access': {
277
+ type: 'stringList',
278
+ values: ['Shared','Public',] as const,
279
+ },
280
+ },
281
+ 'centrum.DispatchesService/CreateDispatch': {
282
+ },
283
+ 'centrum.DispatchesService/DeleteDispatch': {
284
+ },
285
+ 'centrum.DispatchesService/TakeDispatch': {
286
+ },
287
+ 'centrum.DispatchesService/UpdateDispatch': {
288
+ },
289
+ 'centrum.UnitsService/CreateOrUpdateUnit': {
290
+ },
291
+ 'centrum.UnitsService/DeleteUnit': {
292
+ },
293
+ 'citizens.CitizensService/GetUser': {
294
+ 'Jobs': {
295
+ type: 'jobGradeList',
296
+ },
297
+ },
298
+ 'citizens.CitizensService/ListCitizens': {
299
+ 'Fields': {
300
+ type: 'stringList',
301
+ values: ['PhoneNumber','Licenses','UserProps.Wanted','UserProps.Job','UserProps.TrafficInfractionPoints','UserProps.OpenFines','UserProps.BloodType','UserProps.Mugshot','UserProps.Labels','UserProps.Email',] as const,
302
+ },
303
+ },
304
+ 'citizens.CitizensService/ListUserActivity': {
305
+ 'Fields': {
306
+ type: 'stringList',
307
+ values: ['SourceUser','Own',] as const,
308
+ },
309
+ },
310
+ 'citizens.CitizensService/SetUserProps': {
311
+ 'Fields': {
312
+ type: 'stringList',
313
+ values: ['Wanted','Job','TrafficInfractionPoints','Mugshot','Labels',] as const,
314
+ },
315
+ },
316
+ 'citizens.LabelsService/CreateOrUpdateLabel': {
317
+ },
318
+ 'citizens.LabelsService/DeleteLabel': {
319
+ },
320
+ 'documents.ApprovalService/DeleteApprovalTasks': {
321
+ },
322
+ 'documents.ApprovalService/RevokeApproval': {
323
+ },
324
+ 'documents.ApprovalService/UpsertApprovalPolicy': {
325
+ },
326
+ 'documents.ApprovalService/UpsertApprovalTasks': {
327
+ },
328
+ 'documents.CategoriesService/CreateOrUpdateCategory': {
329
+ },
330
+ 'documents.CategoriesService/DeleteCategory': {
331
+ },
332
+ 'documents.CategoriesService/ListCategories': {
333
+ 'Jobs': {
334
+ type: 'jobList',
335
+ },
336
+ },
337
+ 'documents.CommentsService/DeleteComment': {
338
+ 'Access': {
339
+ type: 'stringList',
340
+ values: ['Own','Lower_Rank','Same_Rank','Any',] as const,
341
+ },
342
+ },
343
+ 'documents.DocumentsService/AddDocumentReference': {
344
+ },
345
+ 'documents.DocumentsService/AddDocumentRelation': {
346
+ },
347
+ 'documents.DocumentsService/ChangeDocumentOwner': {
348
+ 'Access': {
349
+ type: 'stringList',
350
+ values: ['Own','Lower_Rank','Same_Rank','Any',] as const,
351
+ },
352
+ },
353
+ 'documents.DocumentsService/CreateDocumentReq': {
354
+ 'Types': {
355
+ type: 'stringList',
356
+ values: ['Access','Closure','Update','Deletion','OwnerChange',] as const,
357
+ },
358
+ },
359
+ 'documents.DocumentsService/DeleteDocument': {
360
+ 'Access': {
361
+ type: 'stringList',
362
+ values: ['Own','Lower_Rank','Same_Rank','Any',] as const,
363
+ },
364
+ },
365
+ 'documents.DocumentsService/DeleteDocumentReq': {
366
+ },
367
+ 'documents.DocumentsService/ListDocumentActivity': {
368
+ },
369
+ 'documents.DocumentsService/ListDocumentReqs': {
370
+ },
371
+ 'documents.DocumentsService/ListDocuments': {
372
+ },
373
+ 'documents.DocumentsService/ListUserDocuments': {
374
+ },
375
+ 'documents.DocumentsService/SetDocumentReminder': {
376
+ },
377
+ 'documents.DocumentsService/ToggleDocument': {
378
+ 'Access': {
379
+ type: 'stringList',
380
+ values: ['Own','Lower_Rank','Same_Rank','Any',] as const,
381
+ },
382
+ },
383
+ 'documents.DocumentsService/ToggleDocumentPin': {
384
+ 'Types': {
385
+ type: 'stringList',
386
+ values: ['JobWide',] as const,
387
+ },
388
+ },
389
+ 'documents.DocumentsService/UpdateDocument': {
390
+ 'Access': {
391
+ type: 'stringList',
392
+ values: ['Own','Lower_Rank','Same_Rank','Any',] as const,
393
+ },
394
+ },
395
+ 'documents.StampsService/DeleteStamp': {
396
+ },
397
+ 'documents.StampsService/ListUsableStamps': {
398
+ },
399
+ 'documents.StampsService/UpsertStamp': {
400
+ },
401
+ 'documents.StatsService/GetStats': {
402
+ 'Categories': {
403
+ type: 'stringList',
404
+ values: ['PenaltyCalculator',] as const,
405
+ },
406
+ 'Jobs': {
407
+ type: 'jobList',
408
+ },
409
+ },
410
+ 'documents.TemplatesService/CreateTemplate': {
411
+ },
412
+ 'documents.TemplatesService/DeleteTemplate': {
413
+ },
414
+ 'documents.TemplatesService/ListTemplates': {
415
+ },
416
+ 'jobs.ColleaguesService/GetColleague': {
417
+ 'Access': {
418
+ type: 'stringList',
419
+ values: ['Own','Lower_Rank','Same_Rank','Any',] as const,
420
+ },
421
+ 'Types': {
422
+ type: 'stringList',
423
+ values: ['Note','Labels',] as const,
424
+ },
425
+ },
426
+ 'jobs.ColleaguesService/ListColleagueActivity': {
427
+ 'Types': {
428
+ type: 'stringList',
429
+ values: ['HIRED','FIRED','PROMOTED','DEMOTED','ABSENCE_DATE','NOTE','LABELS','NAME',] as const,
430
+ },
431
+ },
432
+ 'jobs.ColleaguesService/ListColleagues': {
433
+ },
434
+ 'jobs.ColleaguesService/ManageLabels': {
435
+ },
436
+ 'jobs.ColleaguesService/SetColleagueProps': {
437
+ 'Access': {
438
+ type: 'stringList',
439
+ values: ['Own','Lower_Rank','Same_Rank','Any',] as const,
440
+ },
441
+ 'Types': {
442
+ type: 'stringList',
443
+ values: ['AbsenceDate','Note','Labels','Name',] as const,
444
+ },
445
+ },
446
+ 'jobs.ConductService/CreateConductEntry': {
447
+ },
448
+ 'jobs.ConductService/DeleteConductEntry': {
449
+ },
450
+ 'jobs.ConductService/ListConductEntries': {
451
+ 'Access': {
452
+ type: 'stringList',
453
+ values: ['Own','All',] as const,
454
+ },
455
+ },
456
+ 'jobs.ConductService/UpdateConductEntry': {
457
+ },
458
+ 'jobs.ConductService/UploadFile': {
459
+ },
460
+ 'jobs.JobsService/SetMOTD': {
461
+ },
462
+ 'jobs.StatsService/GetStats': {
463
+ },
464
+ 'jobs.TimeclockService/ListInactiveEmployees': {
465
+ },
466
+ 'jobs.TimeclockService/ListTimeclock': {
467
+ 'Access': {
468
+ type: 'stringList',
469
+ values: ['All',] as const,
470
+ },
471
+ },
472
+ 'livemap.LivemapService/CreateOrUpdateMarker': {
473
+ 'Access': {
474
+ type: 'stringList',
475
+ values: ['Own','Lower_Rank','Same_Rank','Any',] as const,
476
+ },
477
+ },
478
+ 'livemap.LivemapService/DeleteMarker': {
479
+ 'Access': {
480
+ type: 'stringList',
481
+ values: ['Own','Lower_Rank','Same_Rank','Any',] as const,
482
+ },
483
+ },
484
+ 'livemap.LivemapService/Stream': {
485
+ 'Markers': {
486
+ type: 'jobList',
487
+ },
488
+ 'Players': {
489
+ type: 'jobGradeList',
490
+ },
491
+ },
492
+ 'mailer.MailerService/CreateOrUpdateEmail': {
493
+ 'Fields': {
494
+ type: 'stringList',
495
+ values: ['Job',] as const,
496
+ },
497
+ },
498
+ 'mailer.MailerService/DeleteEmail': {
499
+ },
500
+ 'mailer.MailerService/ListEmails': {
501
+ },
502
+ 'qualifications.QualificationsService/DeleteQualification': {
503
+ 'Access': {
504
+ type: 'stringList',
505
+ values: ['Own','Lower_Rank','Same_Rank','Any',] as const,
506
+ },
507
+ },
508
+ 'qualifications.QualificationsService/ListQualifications': {
509
+ },
510
+ 'qualifications.QualificationsService/UpdateQualification': {
511
+ 'Access': {
512
+ type: 'stringList',
513
+ values: ['Own','Lower_Rank','Same_Rank','Any',] as const,
514
+ },
515
+ 'Fields': {
516
+ type: 'stringList',
517
+ values: ['Public',] as const,
518
+ },
519
+ },
520
+ 'settings.LawsService/CreateOrUpdateLawBook': {
521
+ },
522
+ 'settings.LawsService/DeleteLawBook': {
523
+ },
524
+ 'settings.SettingsService/CreateRole': {
525
+ },
526
+ 'settings.SettingsService/DeleteRole': {
527
+ },
528
+ 'settings.SettingsService/GetJobProps': {
529
+ },
530
+ 'settings.SettingsService/GetRoles': {
531
+ },
532
+ 'settings.SettingsService/SetJobProps': {
533
+ },
534
+ 'settings.SettingsService/UpdateRolePerms': {
535
+ },
536
+ 'settings.SettingsService/ViewAuditLog': {
537
+ },
538
+ 'vehicles.VehiclesService/ListVehicles': {
539
+ 'Fields': {
540
+ type: 'stringList',
541
+ values: ['Wanted',] as const,
542
+ },
543
+ },
544
+ 'vehicles.VehiclesService/SetVehicleProps': {
545
+ 'Fields': {
546
+ type: 'stringList',
547
+ values: ['Wanted',] as const,
548
+ },
549
+ },
550
+ 'wiki.WikiService/CreatePage': {
551
+ },
552
+ 'wiki.WikiService/DeletePage': {
553
+ },
554
+ 'wiki.WikiService/ListPageActivity': {
555
+ },
556
+ 'wiki.WikiService/ListPages': {
557
+ },
558
+ 'wiki.WikiService/MovePage': {
559
+ },
560
+ 'wiki.WikiService/UpdatePage': {
561
+ 'Fields': {
562
+ type: 'stringList',
563
+ values: ['Public',] as const,
564
+ },
565
+ },
566
+ 'wiki.WikiService/UploadFile': {
567
+ },
568
+ } as const;
569
+
570
+ export type PermAttributesMap = typeof PermAttributes;
571
+ export type PermAttrKind = 'stringList' | 'jobList' | 'jobGradeList';
572
+
573
+ export type PermAttrPerm = keyof PermAttributesMap;
574
+
575
+ export type PermAttrKey<P extends Perms> = P extends keyof PermAttributesMap
576
+ ? keyof PermAttributesMap[P] & string
577
+ : never;
578
+
579
+ export type PermAttrDescriptor<P extends Perms, K extends PermAttrKey<P>> = P extends keyof PermAttributesMap
580
+ ? K extends keyof PermAttributesMap[P]
581
+ ? PermAttributesMap[P][K]
582
+ : never
583
+ : never;
584
+
585
+ export type PermAttrType<P extends Perms, K extends PermAttrKey<P>> = PermAttrDescriptor<P, K>['type'];
586
+
587
+ export type PermAttrValue<P extends Perms, K extends PermAttrKey<P>> = PermAttrDescriptor<P, K> extends {
588
+ values: readonly (infer V)[];
589
+ }
590
+ ? V
591
+ : string;
592
+
593
+ export type PermAttrKeysByType<P extends Perms, T extends PermAttrKind> = P extends keyof PermAttributesMap
594
+ ? {
595
+ [K in keyof PermAttributesMap[P] & string]: PermAttributesMap[P][K] extends { type: T } ? K : never;
596
+ }[keyof PermAttributesMap[P] & string]
597
+ : never;