@fivenet-app/gen 2025.5.3 → 2026.3.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 (195) hide show
  1. package/README.md +1 -1
  2. package/buf/validate/validate.ts +11301 -0
  3. package/clients.ts +193 -154
  4. package/codegen/dbscanner/dbscanner.ts +91 -0
  5. package/codegen/perms/perms.ts +287 -0
  6. package/codegen/sanitizer/sanitizer.ts +113 -0
  7. package/google/protobuf/any.ts +4 -3
  8. package/google/protobuf/descriptor.ts +393 -239
  9. package/google/protobuf/duration.ts +4 -3
  10. package/google/protobuf/struct.ts +485 -0
  11. package/google/protobuf/timestamp.ts +4 -3
  12. package/package.json +3 -3
  13. package/perms.ts +217 -160
  14. package/resources/accounts/accounts.ts +115 -47
  15. package/resources/accounts/{oauth2.ts → oauth2/oauth2.ts} +33 -32
  16. package/resources/audit/audit.ts +172 -53
  17. package/resources/calendar/{access.ts → access/access.ts} +72 -71
  18. package/resources/calendar/calendar.ts +79 -543
  19. package/resources/calendar/entries/entries.ts +474 -0
  20. package/resources/centrum/access/access.ts +345 -0
  21. package/resources/centrum/dispatchers/dispatchers.ts +149 -0
  22. package/resources/centrum/{dispatches.ts → dispatches/dispatches.ts} +267 -164
  23. package/resources/centrum/joblist.ts +136 -0
  24. package/resources/centrum/settings/settings.ts +657 -0
  25. package/resources/centrum/{units_access.ts → units/access/access.ts} +78 -79
  26. package/resources/centrum/{units.ts → units/units.ts} +230 -130
  27. package/resources/clientconfig/clientconfig.ts +1015 -0
  28. package/resources/collab/collab.ts +805 -0
  29. package/resources/common/content/content.ts +169 -63
  30. package/resources/common/content/diff_activity.ts +267 -0
  31. package/resources/common/database/database.ts +92 -35
  32. package/resources/common/error.ts +17 -16
  33. package/resources/common/i18n.ts +20 -24
  34. package/resources/common/id_mapping.ts +69 -0
  35. package/resources/common/tests/objects.ts +4 -3
  36. package/resources/{common/cron → cron}/cron.ts +77 -65
  37. package/resources/discord/discord.ts +209 -0
  38. package/resources/documents/{access.ts → access/access.ts} +75 -76
  39. package/resources/documents/{activity.ts → activity/activity.ts} +349 -124
  40. package/resources/documents/approval/approval.ts +945 -0
  41. package/resources/documents/{category.ts → category/category.ts} +25 -32
  42. package/resources/documents/{comment.ts → comment/comment.ts} +35 -34
  43. package/resources/documents/data/data.ts +303 -0
  44. package/resources/documents/documents.ts +374 -686
  45. package/resources/{common/uuid.ts → documents/forms/forms.ts} +22 -21
  46. package/resources/documents/pins/pins.ts +127 -0
  47. package/resources/documents/references/references.ts +187 -0
  48. package/resources/documents/relations/relations.ts +184 -0
  49. package/resources/documents/{requests.ts → requests/requests.ts} +45 -44
  50. package/resources/documents/stamps/stamp.ts +355 -0
  51. package/resources/documents/{templates.ts → templates/templates.ts} +524 -199
  52. package/resources/documents/workflow/workflow.ts +600 -0
  53. package/resources/file/file.ts +152 -0
  54. package/{services/settings → resources/file}/filestore.ts +179 -165
  55. package/resources/file/meta.ts +148 -0
  56. package/resources/{common/grpcws → grpcws}/grpcws.ts +66 -65
  57. package/resources/jobs/{activity.ts → colleagues/activity/activity.ts} +83 -86
  58. package/resources/jobs/{colleagues.ts → colleagues/colleagues.ts} +76 -80
  59. package/resources/jobs/{conduct.ts → conduct/conduct.ts} +86 -62
  60. package/resources/jobs/jobs.ts +14 -13
  61. package/resources/jobs/{labels.ts → labels/labels.ts} +36 -37
  62. package/resources/jobs/{job_props.ts → props/props.ts} +63 -65
  63. package/resources/jobs/{job_settings.ts → settings/settings.ts} +89 -96
  64. package/resources/jobs/{timeclock.ts → timeclock/timeclock.ts} +42 -41
  65. package/resources/laws/laws.ts +40 -49
  66. package/resources/livemap/coords.ts +81 -0
  67. package/resources/livemap/heatmap/heatmap.ts +93 -0
  68. package/resources/livemap/{livemap.ts → markers/marker_marker.ts} +68 -335
  69. package/resources/livemap/markers/user_marker.ts +377 -0
  70. package/resources/mailer/{access.ts → access/access.ts} +119 -118
  71. package/resources/mailer/{email.ts → emails/email.ts} +38 -41
  72. package/resources/mailer/{events.ts → events/events.ts} +44 -43
  73. package/resources/mailer/{message.ts → messages/message.ts} +69 -74
  74. package/resources/mailer/{settings.ts → settings/settings.ts} +23 -25
  75. package/resources/mailer/{template.ts → templates/template.ts} +37 -40
  76. package/resources/mailer/{thread.ts → threads/thread.ts} +93 -94
  77. package/resources/notifications/clientview/clientview.ts +239 -0
  78. package/resources/notifications/{events.ts → events/events.ts} +67 -130
  79. package/resources/notifications/notifications.ts +55 -60
  80. package/resources/permissions/{attributes.ts → attributes/attributes.ts} +94 -237
  81. package/resources/permissions/events/events.ts +149 -0
  82. package/resources/permissions/{permissions.ts → permissions/permissions.ts} +127 -47
  83. package/resources/qualifications/{access.ts → access/access.ts} +43 -42
  84. package/resources/qualifications/{exam.ts → exam/exam.ts} +419 -229
  85. package/resources/qualifications/qualifications.ts +327 -388
  86. package/resources/settings/banner.ts +14 -21
  87. package/resources/settings/config.ts +663 -79
  88. package/resources/settings/data.ts +90 -0
  89. package/resources/settings/perms.ts +151 -0
  90. package/resources/settings/status.ts +533 -0
  91. package/resources/stats/stats.ts +382 -2
  92. package/resources/sync/{activity.ts → activity/activity.ts} +126 -46
  93. package/resources/sync/data/data.ts +1001 -0
  94. package/resources/sync/data/v2/data.ts +220 -0
  95. package/resources/timestamp/timestamp.ts +3 -2
  96. package/resources/{centrum/user_unit.ts → tracker/mapping.ts} +44 -44
  97. package/resources/userinfo/userinfo.ts +442 -0
  98. package/resources/users/{activity.ts → activity/activity.ts} +182 -166
  99. package/resources/users/{labels.ts → labels/labels.ts} +27 -30
  100. package/resources/users/{licenses.ts → licenses/licenses.ts} +18 -17
  101. package/resources/users/{props.ts → props/props.ts} +109 -77
  102. package/resources/users/short/user.ts +184 -0
  103. package/resources/users/user.ts +528 -0
  104. package/resources/vehicles/activity/activity.ts +231 -0
  105. package/resources/vehicles/props/props.ts +125 -0
  106. package/resources/vehicles/vehicles.ts +43 -18
  107. package/resources/wiki/{access.ts → access/access.ts} +72 -71
  108. package/resources/wiki/{activity.ts → activity/activity.ts} +218 -102
  109. package/resources/wiki/page.ts +164 -93
  110. package/services/auth/auth.client.ts +45 -35
  111. package/services/auth/auth.ts +498 -288
  112. package/services/calendar/calendar.client.ts +32 -91
  113. package/services/calendar/calendar.ts +157 -134
  114. package/services/centrum/centrum.client.ts +97 -137
  115. package/services/centrum/centrum.ts +755 -352
  116. package/services/citizens/citizens.client.ts +70 -39
  117. package/services/citizens/citizens.ts +226 -112
  118. package/services/completor/completor.client.ts +16 -35
  119. package/services/completor/completor.ts +95 -54
  120. package/services/documents/approval.client.ts +188 -0
  121. package/services/documents/approval.ts +1776 -0
  122. package/services/documents/collab.client.ts +46 -0
  123. package/services/documents/collab.ts +13 -0
  124. package/services/documents/documents.client.ts +88 -217
  125. package/services/documents/documents.ts +579 -619
  126. package/services/documents/forms.client.ts +51 -0
  127. package/services/documents/forms.ts +232 -0
  128. package/services/documents/stamps.client.ts +77 -0
  129. package/services/documents/stamps.ts +481 -0
  130. package/services/documents/stats.client.ts +38 -0
  131. package/services/documents/stats.ts +245 -0
  132. package/services/filestore/filestore.client.ts +86 -0
  133. package/services/filestore/filestore.ts +262 -0
  134. package/services/jobs/conduct.client.ts +40 -28
  135. package/services/jobs/conduct.ts +183 -56
  136. package/services/jobs/jobs.client.ts +22 -61
  137. package/services/jobs/jobs.ts +138 -121
  138. package/services/jobs/stats.client.ts +38 -0
  139. package/services/jobs/stats.ts +207 -0
  140. package/services/jobs/timeclock.client.ts +8 -19
  141. package/services/jobs/timeclock.ts +76 -75
  142. package/services/livemap/livemap.client.ts +8 -19
  143. package/services/livemap/livemap.ts +297 -126
  144. package/services/mailer/mailer.client.ts +44 -127
  145. package/services/mailer/mailer.ts +266 -269
  146. package/services/notifications/notifications.client.ts +65 -0
  147. package/services/{notificator/notificator.ts → notifications/notifications.ts} +126 -83
  148. package/services/qualifications/qualifications.client.ts +46 -91
  149. package/services/qualifications/qualifications.ts +250 -209
  150. package/services/settings/accounts.client.ts +31 -33
  151. package/services/settings/accounts.ts +251 -67
  152. package/services/settings/config.client.ts +6 -13
  153. package/services/settings/config.ts +8 -7
  154. package/services/settings/cron.client.ts +4 -7
  155. package/services/settings/cron.ts +7 -6
  156. package/services/settings/laws.client.ts +10 -25
  157. package/services/settings/laws.ts +30 -29
  158. package/services/settings/settings.client.ts +57 -103
  159. package/services/settings/settings.ts +237 -633
  160. package/services/settings/system.client.ts +103 -0
  161. package/services/settings/system.ts +718 -0
  162. package/services/stats/stats.client.ts +9 -8
  163. package/services/stats/stats.ts +27 -26
  164. package/services/sync/sync.client.ts +16 -15
  165. package/services/sync/sync.ts +174 -97
  166. package/services/sync/v2/sync.client.ts +331 -0
  167. package/services/sync/v2/sync.ts +1766 -0
  168. package/services/vehicles/vehicles.client.ts +17 -7
  169. package/services/vehicles/vehicles.ts +170 -25
  170. package/services/wiki/collab.client.ts +46 -0
  171. package/services/wiki/collab.ts +13 -0
  172. package/services/wiki/wiki.client.ts +28 -37
  173. package/services/wiki/wiki.ts +97 -67
  174. package/svcs.ts +174 -106
  175. package/resources/centrum/attributes.ts +0 -186
  176. package/resources/centrum/disponents.ts +0 -81
  177. package/resources/centrum/settings.ts +0 -307
  178. package/resources/documents/workflow.ts +0 -351
  179. package/resources/filestore/file.ts +0 -204
  180. package/resources/internet/access.ts +0 -358
  181. package/resources/internet/ads.ts +0 -257
  182. package/resources/internet/domain.ts +0 -328
  183. package/resources/internet/page.ts +0 -428
  184. package/resources/internet/search.ts +0 -128
  185. package/resources/livemap/tracker.ts +0 -81
  186. package/resources/sync/data.ts +0 -587
  187. package/resources/users/users.ts +0 -435
  188. package/services/internet/ads.client.ts +0 -41
  189. package/services/internet/ads.ts +0 -145
  190. package/services/internet/domain.client.ts +0 -109
  191. package/services/internet/domain.ts +0 -658
  192. package/services/internet/internet.client.ts +0 -58
  193. package/services/internet/internet.ts +0 -268
  194. package/services/notificator/notificator.client.ts +0 -76
  195. package/services/settings/filestore.client.ts +0 -75
@@ -1,6 +1,9 @@
1
- // @generated by protobuf-ts 2.10.0 with parameter optimize_speed,long_type_number,force_server_none
1
+ // @generated by protobuf-ts 2.11.1 with parameter force_server_none,long_type_number,optimize_speed,ts_nocheck
2
2
  // @generated from protobuf file "services/qualifications/qualifications.proto" (package "services.qualifications", syntax proto3)
3
+ // tslint:disable
3
4
  // @ts-nocheck
5
+ import { UploadFileResponse } from "../../resources/file/filestore";
6
+ import { UploadFileRequest } from "../../resources/file/filestore";
4
7
  import { ServiceType } from "@protobuf-ts/runtime-rpc";
5
8
  import type { BinaryWriteOptions } from "@protobuf-ts/runtime";
6
9
  import type { IBinaryWriter } from "@protobuf-ts/runtime";
@@ -12,16 +15,17 @@ import type { PartialMessage } from "@protobuf-ts/runtime";
12
15
  import { reflectionMergePartial } from "@protobuf-ts/runtime";
13
16
  import { MessageType } from "@protobuf-ts/runtime";
14
17
  import { Duration } from "../../google/protobuf/duration";
15
- import { ExamResponses } from "../../resources/qualifications/exam";
16
- import { ExamQuestions } from "../../resources/qualifications/exam";
17
- import { ExamUser } from "../../resources/qualifications/exam";
18
+ import { ExamResponses } from "../../resources/qualifications/exam/exam";
19
+ import { ExamQuestions } from "../../resources/qualifications/exam/exam";
20
+ import { ExamUser } from "../../resources/qualifications/exam/exam";
18
21
  import { QualificationShort } from "../../resources/qualifications/qualifications";
19
- import { ExamGrading } from "../../resources/qualifications/exam";
22
+ import { ExamGrading } from "../../resources/qualifications/exam/exam";
20
23
  import { QualificationResult } from "../../resources/qualifications/qualifications";
21
24
  import { ResultStatus } from "../../resources/qualifications/qualifications";
22
25
  import { QualificationRequest } from "../../resources/qualifications/qualifications";
23
26
  import { RequestStatus } from "../../resources/qualifications/qualifications";
24
- import { QualificationAccess } from "../../resources/qualifications/access";
27
+ import { QualificationAccess } from "../../resources/qualifications/access/access";
28
+ import { ContentType } from "../../resources/common/content/content";
25
29
  import { Qualification } from "../../resources/qualifications/qualifications";
26
30
  import { PaginationResponse } from "../../resources/common/database/database";
27
31
  import { Sort } from "../../resources/common/database/database";
@@ -31,21 +35,21 @@ import { PaginationRequest } from "../../resources/common/database/database";
31
35
  */
32
36
  export interface ListQualificationsRequest {
33
37
  /**
34
- * @generated from protobuf field: resources.common.database.PaginationRequest pagination = 1;
38
+ * @generated from protobuf field: resources.common.database.PaginationRequest pagination = 1
35
39
  */
36
40
  pagination?: PaginationRequest;
37
41
  /**
38
- * @generated from protobuf field: optional resources.common.database.Sort sort = 2;
42
+ * @generated from protobuf field: optional resources.common.database.Sort sort = 2
39
43
  */
40
44
  sort?: Sort;
41
45
  /**
42
46
  * Search params
43
47
  *
44
- * @generated from protobuf field: optional string search = 3;
48
+ * @generated from protobuf field: optional string search = 3
45
49
  */
46
50
  search?: string;
47
51
  /**
48
- * @generated from protobuf field: optional string job = 4;
52
+ * @generated from protobuf field: optional string job = 4
49
53
  */
50
54
  job?: string;
51
55
  }
@@ -54,11 +58,11 @@ export interface ListQualificationsRequest {
54
58
  */
55
59
  export interface ListQualificationsResponse {
56
60
  /**
57
- * @generated from protobuf field: resources.common.database.PaginationResponse pagination = 1;
61
+ * @generated from protobuf field: resources.common.database.PaginationResponse pagination = 1
58
62
  */
59
63
  pagination?: PaginationResponse;
60
64
  /**
61
- * @generated from protobuf field: repeated resources.qualifications.Qualification qualifications = 2;
65
+ * @generated from protobuf field: repeated resources.qualifications.Qualification qualifications = 2
62
66
  */
63
67
  qualifications: Qualification[];
64
68
  }
@@ -67,11 +71,11 @@ export interface ListQualificationsResponse {
67
71
  */
68
72
  export interface GetQualificationRequest {
69
73
  /**
70
- * @generated from protobuf field: uint64 qualification_id = 1;
74
+ * @generated from protobuf field: int64 qualification_id = 1
71
75
  */
72
76
  qualificationId: number;
73
77
  /**
74
- * @generated from protobuf field: optional bool with_exam = 2;
78
+ * @generated from protobuf field: optional bool with_exam = 2
75
79
  */
76
80
  withExam?: boolean;
77
81
  }
@@ -80,7 +84,7 @@ export interface GetQualificationRequest {
80
84
  */
81
85
  export interface GetQualificationResponse {
82
86
  /**
83
- * @generated from protobuf field: resources.qualifications.Qualification qualification = 1;
87
+ * @generated from protobuf field: resources.qualifications.Qualification qualification = 1
84
88
  */
85
89
  qualification?: Qualification;
86
90
  }
@@ -89,16 +93,16 @@ export interface GetQualificationResponse {
89
93
  */
90
94
  export interface CreateQualificationRequest {
91
95
  /**
92
- * @generated from protobuf field: resources.qualifications.Qualification qualification = 1;
96
+ * @generated from protobuf field: resources.common.content.ContentType content_type = 1
93
97
  */
94
- qualification?: Qualification;
98
+ contentType: ContentType;
95
99
  }
96
100
  /**
97
101
  * @generated from protobuf message services.qualifications.CreateQualificationResponse
98
102
  */
99
103
  export interface CreateQualificationResponse {
100
104
  /**
101
- * @generated from protobuf field: uint64 qualification_id = 1;
105
+ * @generated from protobuf field: int64 qualification_id = 1
102
106
  */
103
107
  qualificationId: number;
104
108
  }
@@ -107,7 +111,7 @@ export interface CreateQualificationResponse {
107
111
  */
108
112
  export interface UpdateQualificationRequest {
109
113
  /**
110
- * @generated from protobuf field: resources.qualifications.Qualification qualification = 1;
114
+ * @generated from protobuf field: resources.qualifications.Qualification qualification = 1
111
115
  */
112
116
  qualification?: Qualification;
113
117
  }
@@ -116,7 +120,7 @@ export interface UpdateQualificationRequest {
116
120
  */
117
121
  export interface UpdateQualificationResponse {
118
122
  /**
119
- * @generated from protobuf field: uint64 qualification_id = 1;
123
+ * @generated from protobuf field: int64 qualification_id = 1
120
124
  */
121
125
  qualificationId: number;
122
126
  }
@@ -125,7 +129,7 @@ export interface UpdateQualificationResponse {
125
129
  */
126
130
  export interface DeleteQualificationRequest {
127
131
  /**
128
- * @generated from protobuf field: uint64 qualification_id = 1;
132
+ * @generated from protobuf field: int64 qualification_id = 1
129
133
  */
130
134
  qualificationId: number;
131
135
  }
@@ -134,14 +138,14 @@ export interface DeleteQualificationRequest {
134
138
  */
135
139
  export interface DeleteQualificationResponse {
136
140
  }
137
- // Access =====================================================================
141
+ // Access
138
142
 
139
143
  /**
140
144
  * @generated from protobuf message services.qualifications.GetQualificationAccessRequest
141
145
  */
142
146
  export interface GetQualificationAccessRequest {
143
147
  /**
144
- * @generated from protobuf field: uint64 qualification_id = 1;
148
+ * @generated from protobuf field: int64 qualification_id = 1
145
149
  */
146
150
  qualificationId: number;
147
151
  }
@@ -150,7 +154,7 @@ export interface GetQualificationAccessRequest {
150
154
  */
151
155
  export interface GetQualificationAccessResponse {
152
156
  /**
153
- * @generated from protobuf field: resources.qualifications.QualificationAccess access = 1;
157
+ * @generated from protobuf field: resources.qualifications.access.QualificationAccess access = 1
154
158
  */
155
159
  access?: QualificationAccess;
156
160
  }
@@ -159,11 +163,11 @@ export interface GetQualificationAccessResponse {
159
163
  */
160
164
  export interface SetQualificationAccessRequest {
161
165
  /**
162
- * @generated from protobuf field: uint64 qualification_id = 1;
166
+ * @generated from protobuf field: int64 qualification_id = 1
163
167
  */
164
168
  qualificationId: number;
165
169
  /**
166
- * @generated from protobuf field: resources.qualifications.QualificationAccess access = 2;
170
+ * @generated from protobuf field: resources.qualifications.access.QualificationAccess access = 2
167
171
  */
168
172
  access?: QualificationAccess;
169
173
  }
@@ -172,32 +176,32 @@ export interface SetQualificationAccessRequest {
172
176
  */
173
177
  export interface SetQualificationAccessResponse {
174
178
  }
175
- // Requests ===================================================================
179
+ // Requests
176
180
 
177
181
  /**
178
182
  * @generated from protobuf message services.qualifications.ListQualificationRequestsRequest
179
183
  */
180
184
  export interface ListQualificationRequestsRequest {
181
185
  /**
182
- * @generated from protobuf field: resources.common.database.PaginationRequest pagination = 1;
186
+ * @generated from protobuf field: resources.common.database.PaginationRequest pagination = 1
183
187
  */
184
188
  pagination?: PaginationRequest;
185
189
  /**
186
- * @generated from protobuf field: optional resources.common.database.Sort sort = 2;
190
+ * @generated from protobuf field: optional resources.common.database.Sort sort = 2
187
191
  */
188
192
  sort?: Sort;
189
193
  /**
190
194
  * Search params
191
195
  *
192
- * @generated from protobuf field: optional uint64 qualification_id = 3;
196
+ * @generated from protobuf field: optional int64 qualification_id = 3
193
197
  */
194
198
  qualificationId?: number;
195
199
  /**
196
- * @generated from protobuf field: repeated resources.qualifications.RequestStatus status = 4;
200
+ * @generated from protobuf field: repeated resources.qualifications.RequestStatus status = 4
197
201
  */
198
202
  status: RequestStatus[];
199
203
  /**
200
- * @generated from protobuf field: optional int32 user_id = 5;
204
+ * @generated from protobuf field: optional int32 user_id = 5
201
205
  */
202
206
  userId?: number;
203
207
  }
@@ -206,11 +210,11 @@ export interface ListQualificationRequestsRequest {
206
210
  */
207
211
  export interface ListQualificationRequestsResponse {
208
212
  /**
209
- * @generated from protobuf field: resources.common.database.PaginationResponse pagination = 1;
213
+ * @generated from protobuf field: resources.common.database.PaginationResponse pagination = 1
210
214
  */
211
215
  pagination?: PaginationResponse;
212
216
  /**
213
- * @generated from protobuf field: repeated resources.qualifications.QualificationRequest requests = 2;
217
+ * @generated from protobuf field: repeated resources.qualifications.QualificationRequest requests = 2
214
218
  */
215
219
  requests: QualificationRequest[];
216
220
  }
@@ -219,7 +223,7 @@ export interface ListQualificationRequestsResponse {
219
223
  */
220
224
  export interface CreateOrUpdateQualificationRequestRequest {
221
225
  /**
222
- * @generated from protobuf field: resources.qualifications.QualificationRequest request = 1;
226
+ * @generated from protobuf field: resources.qualifications.QualificationRequest request = 1
223
227
  */
224
228
  request?: QualificationRequest;
225
229
  }
@@ -228,7 +232,7 @@ export interface CreateOrUpdateQualificationRequestRequest {
228
232
  */
229
233
  export interface CreateOrUpdateQualificationRequestResponse {
230
234
  /**
231
- * @generated from protobuf field: resources.qualifications.QualificationRequest request = 1;
235
+ * @generated from protobuf field: resources.qualifications.QualificationRequest request = 1
232
236
  */
233
237
  request?: QualificationRequest;
234
238
  }
@@ -237,11 +241,11 @@ export interface CreateOrUpdateQualificationRequestResponse {
237
241
  */
238
242
  export interface DeleteQualificationReqRequest {
239
243
  /**
240
- * @generated from protobuf field: uint64 qualification_id = 1;
244
+ * @generated from protobuf field: int64 qualification_id = 1
241
245
  */
242
246
  qualificationId: number;
243
247
  /**
244
- * @generated from protobuf field: int32 user_id = 2;
248
+ * @generated from protobuf field: int32 user_id = 2
245
249
  */
246
250
  userId: number;
247
251
  }
@@ -250,32 +254,32 @@ export interface DeleteQualificationReqRequest {
250
254
  */
251
255
  export interface DeleteQualificationReqResponse {
252
256
  }
253
- // Results ====================================================================
257
+ // Results
254
258
 
255
259
  /**
256
260
  * @generated from protobuf message services.qualifications.ListQualificationsResultsRequest
257
261
  */
258
262
  export interface ListQualificationsResultsRequest {
259
263
  /**
260
- * @generated from protobuf field: resources.common.database.PaginationRequest pagination = 1;
264
+ * @generated from protobuf field: resources.common.database.PaginationRequest pagination = 1
261
265
  */
262
266
  pagination?: PaginationRequest;
263
267
  /**
264
- * @generated from protobuf field: optional resources.common.database.Sort sort = 2;
268
+ * @generated from protobuf field: optional resources.common.database.Sort sort = 2
265
269
  */
266
270
  sort?: Sort;
267
271
  /**
268
272
  * Search params
269
273
  *
270
- * @generated from protobuf field: optional uint64 qualification_id = 3;
274
+ * @generated from protobuf field: optional int64 qualification_id = 3
271
275
  */
272
276
  qualificationId?: number;
273
277
  /**
274
- * @generated from protobuf field: repeated resources.qualifications.ResultStatus status = 4;
278
+ * @generated from protobuf field: repeated resources.qualifications.ResultStatus status = 4
275
279
  */
276
280
  status: ResultStatus[];
277
281
  /**
278
- * @generated from protobuf field: optional int32 user_id = 5;
282
+ * @generated from protobuf field: optional int32 user_id = 5
279
283
  */
280
284
  userId?: number;
281
285
  }
@@ -284,11 +288,11 @@ export interface ListQualificationsResultsRequest {
284
288
  */
285
289
  export interface ListQualificationsResultsResponse {
286
290
  /**
287
- * @generated from protobuf field: resources.common.database.PaginationResponse pagination = 1;
291
+ * @generated from protobuf field: resources.common.database.PaginationResponse pagination = 1
288
292
  */
289
293
  pagination?: PaginationResponse;
290
294
  /**
291
- * @generated from protobuf field: repeated resources.qualifications.QualificationResult results = 2;
295
+ * @generated from protobuf field: repeated resources.qualifications.QualificationResult results = 2
292
296
  */
293
297
  results: QualificationResult[];
294
298
  }
@@ -297,11 +301,11 @@ export interface ListQualificationsResultsResponse {
297
301
  */
298
302
  export interface CreateOrUpdateQualificationResultRequest {
299
303
  /**
300
- * @generated from protobuf field: resources.qualifications.QualificationResult result = 1;
304
+ * @generated from protobuf field: resources.qualifications.QualificationResult result = 1
301
305
  */
302
306
  result?: QualificationResult;
303
307
  /**
304
- * @generated from protobuf field: optional resources.qualifications.ExamGrading grading = 2;
308
+ * @generated from protobuf field: optional resources.qualifications.exam.ExamGrading grading = 2
305
309
  */
306
310
  grading?: ExamGrading;
307
311
  }
@@ -310,7 +314,7 @@ export interface CreateOrUpdateQualificationResultRequest {
310
314
  */
311
315
  export interface CreateOrUpdateQualificationResultResponse {
312
316
  /**
313
- * @generated from protobuf field: resources.qualifications.QualificationResult result = 1;
317
+ * @generated from protobuf field: resources.qualifications.QualificationResult result = 1
314
318
  */
315
319
  result?: QualificationResult;
316
320
  }
@@ -319,7 +323,7 @@ export interface CreateOrUpdateQualificationResultResponse {
319
323
  */
320
324
  export interface DeleteQualificationResultRequest {
321
325
  /**
322
- * @generated from protobuf field: uint64 result_id = 1;
326
+ * @generated from protobuf field: int64 result_id = 1
323
327
  */
324
328
  resultId: number;
325
329
  }
@@ -328,14 +332,14 @@ export interface DeleteQualificationResultRequest {
328
332
  */
329
333
  export interface DeleteQualificationResultResponse {
330
334
  }
331
- // Exam =======================================================================
335
+ // Exam
332
336
 
333
337
  /**
334
338
  * @generated from protobuf message services.qualifications.GetExamInfoRequest
335
339
  */
336
340
  export interface GetExamInfoRequest {
337
341
  /**
338
- * @generated from protobuf field: uint64 qualification_id = 1;
342
+ * @generated from protobuf field: int64 qualification_id = 1
339
343
  */
340
344
  qualificationId: number;
341
345
  }
@@ -344,15 +348,15 @@ export interface GetExamInfoRequest {
344
348
  */
345
349
  export interface GetExamInfoResponse {
346
350
  /**
347
- * @generated from protobuf field: resources.qualifications.QualificationShort qualification = 1;
351
+ * @generated from protobuf field: resources.qualifications.QualificationShort qualification = 1
348
352
  */
349
353
  qualification?: QualificationShort;
350
354
  /**
351
- * @generated from protobuf field: int32 question_count = 2;
355
+ * @generated from protobuf field: int64 question_count = 2
352
356
  */
353
357
  questionCount: number;
354
358
  /**
355
- * @generated from protobuf field: optional resources.qualifications.ExamUser exam_user = 3;
359
+ * @generated from protobuf field: optional resources.qualifications.exam.ExamUser exam_user = 3
356
360
  */
357
361
  examUser?: ExamUser;
358
362
  }
@@ -361,11 +365,11 @@ export interface GetExamInfoResponse {
361
365
  */
362
366
  export interface TakeExamRequest {
363
367
  /**
364
- * @generated from protobuf field: uint64 qualification_id = 1;
368
+ * @generated from protobuf field: int64 qualification_id = 1
365
369
  */
366
370
  qualificationId: number;
367
371
  /**
368
- * @generated from protobuf field: optional bool cancel = 2;
372
+ * @generated from protobuf field: optional bool cancel = 2
369
373
  */
370
374
  cancel?: boolean;
371
375
  }
@@ -374,33 +378,45 @@ export interface TakeExamRequest {
374
378
  */
375
379
  export interface TakeExamResponse {
376
380
  /**
377
- * @generated from protobuf field: resources.qualifications.ExamQuestions exam = 1;
381
+ * @generated from protobuf field: resources.qualifications.exam.ExamQuestions exam = 1
378
382
  */
379
383
  exam?: ExamQuestions;
380
384
  /**
381
- * @generated from protobuf field: resources.qualifications.ExamUser exam_user = 2;
385
+ * @generated from protobuf field: resources.qualifications.exam.ExamUser exam_user = 2
382
386
  */
383
387
  examUser?: ExamUser;
388
+ /**
389
+ * @generated from protobuf field: resources.qualifications.exam.ExamResponses responses = 3
390
+ */
391
+ responses?: ExamResponses;
392
+ /**
393
+ * @generated from protobuf field: bool times_up = 4
394
+ */
395
+ timesUp: boolean;
384
396
  }
385
397
  /**
386
398
  * @generated from protobuf message services.qualifications.SubmitExamRequest
387
399
  */
388
400
  export interface SubmitExamRequest {
389
401
  /**
390
- * @generated from protobuf field: uint64 qualification_id = 1;
402
+ * @generated from protobuf field: int64 qualification_id = 1
391
403
  */
392
404
  qualificationId: number;
393
405
  /**
394
- * @generated from protobuf field: resources.qualifications.ExamResponses responses = 2;
406
+ * @generated from protobuf field: resources.qualifications.exam.ExamResponses responses = 2
395
407
  */
396
408
  responses?: ExamResponses;
409
+ /**
410
+ * @generated from protobuf field: bool partial = 3
411
+ */
412
+ partial: boolean;
397
413
  }
398
414
  /**
399
415
  * @generated from protobuf message services.qualifications.SubmitExamResponse
400
416
  */
401
417
  export interface SubmitExamResponse {
402
418
  /**
403
- * @generated from protobuf field: google.protobuf.Duration duration = 1;
419
+ * @generated from protobuf field: google.protobuf.Duration duration = 1
404
420
  */
405
421
  duration?: Duration;
406
422
  }
@@ -409,11 +425,11 @@ export interface SubmitExamResponse {
409
425
  */
410
426
  export interface GetUserExamRequest {
411
427
  /**
412
- * @generated from protobuf field: uint64 qualification_id = 1;
428
+ * @generated from protobuf field: int64 qualification_id = 1
413
429
  */
414
430
  qualificationId: number;
415
431
  /**
416
- * @generated from protobuf field: int32 user_id = 2;
432
+ * @generated from protobuf field: int32 user_id = 2
417
433
  */
418
434
  userId: number;
419
435
  }
@@ -422,19 +438,19 @@ export interface GetUserExamRequest {
422
438
  */
423
439
  export interface GetUserExamResponse {
424
440
  /**
425
- * @generated from protobuf field: resources.qualifications.ExamQuestions exam = 1;
441
+ * @generated from protobuf field: resources.qualifications.exam.ExamQuestions exam = 1
426
442
  */
427
443
  exam?: ExamQuestions;
428
444
  /**
429
- * @generated from protobuf field: resources.qualifications.ExamUser exam_user = 2;
445
+ * @generated from protobuf field: resources.qualifications.exam.ExamUser exam_user = 2
430
446
  */
431
447
  examUser?: ExamUser;
432
448
  /**
433
- * @generated from protobuf field: resources.qualifications.ExamResponses responses = 3;
449
+ * @generated from protobuf field: resources.qualifications.exam.ExamResponses responses = 3
434
450
  */
435
451
  responses?: ExamResponses;
436
452
  /**
437
- * @generated from protobuf field: resources.qualifications.ExamGrading grading = 4;
453
+ * @generated from protobuf field: resources.qualifications.exam.ExamGrading grading = 4
438
454
  */
439
455
  grading?: ExamGrading;
440
456
  }
@@ -442,10 +458,10 @@ export interface GetUserExamResponse {
442
458
  class ListQualificationsRequest$Type extends MessageType<ListQualificationsRequest> {
443
459
  constructor() {
444
460
  super("services.qualifications.ListQualificationsRequest", [
445
- { no: 1, name: "pagination", kind: "message", T: () => PaginationRequest, options: { "validate.rules": { message: { required: true } } } },
461
+ { no: 1, name: "pagination", kind: "message", T: () => PaginationRequest, options: { "buf.validate.field": { required: true } } },
446
462
  { no: 2, name: "sort", kind: "message", T: () => Sort },
447
- { no: 3, name: "search", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxLen: "64" } } } },
448
- { no: 4, name: "job", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "validate.rules": { string: { maxLen: "20" } } } }
463
+ { no: 3, name: "search", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "64" } } } },
464
+ { no: 4, name: "job", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/, options: { "buf.validate.field": { string: { maxLen: "20" } } } }
449
465
  ]);
450
466
  }
451
467
  create(value?: PartialMessage<ListQualificationsRequest>): ListQualificationsRequest {
@@ -509,8 +525,8 @@ export const ListQualificationsRequest = new ListQualificationsRequest$Type();
509
525
  class ListQualificationsResponse$Type extends MessageType<ListQualificationsResponse> {
510
526
  constructor() {
511
527
  super("services.qualifications.ListQualificationsResponse", [
512
- { no: 1, name: "pagination", kind: "message", T: () => PaginationResponse },
513
- { no: 2, name: "qualifications", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Qualification }
528
+ { no: 1, name: "pagination", kind: "message", T: () => PaginationResponse, options: { "buf.validate.field": { required: true } } },
529
+ { no: 2, name: "qualifications", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Qualification, options: { "codegen.itemslen.enabled": true } }
514
530
  ]);
515
531
  }
516
532
  create(value?: PartialMessage<ListQualificationsResponse>): ListQualificationsResponse {
@@ -563,7 +579,7 @@ export const ListQualificationsResponse = new ListQualificationsResponse$Type();
563
579
  class GetQualificationRequest$Type extends MessageType<GetQualificationRequest> {
564
580
  constructor() {
565
581
  super("services.qualifications.GetQualificationRequest", [
566
- { no: 1, name: "qualification_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
582
+ { no: 1, name: "qualification_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
567
583
  { no: 2, name: "with_exam", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }
568
584
  ]);
569
585
  }
@@ -579,8 +595,8 @@ class GetQualificationRequest$Type extends MessageType<GetQualificationRequest>
579
595
  while (reader.pos < end) {
580
596
  let [fieldNo, wireType] = reader.tag();
581
597
  switch (fieldNo) {
582
- case /* uint64 qualification_id */ 1:
583
- message.qualificationId = reader.uint64().toNumber();
598
+ case /* int64 qualification_id */ 1:
599
+ message.qualificationId = reader.int64().toNumber();
584
600
  break;
585
601
  case /* optional bool with_exam */ 2:
586
602
  message.withExam = reader.bool();
@@ -597,9 +613,9 @@ class GetQualificationRequest$Type extends MessageType<GetQualificationRequest>
597
613
  return message;
598
614
  }
599
615
  internalBinaryWrite(message: GetQualificationRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
600
- /* uint64 qualification_id = 1; */
616
+ /* int64 qualification_id = 1; */
601
617
  if (message.qualificationId !== 0)
602
- writer.tag(1, WireType.Varint).uint64(message.qualificationId);
618
+ writer.tag(1, WireType.Varint).int64(message.qualificationId);
603
619
  /* optional bool with_exam = 2; */
604
620
  if (message.withExam !== undefined)
605
621
  writer.tag(2, WireType.Varint).bool(message.withExam);
@@ -663,11 +679,12 @@ export const GetQualificationResponse = new GetQualificationResponse$Type();
663
679
  class CreateQualificationRequest$Type extends MessageType<CreateQualificationRequest> {
664
680
  constructor() {
665
681
  super("services.qualifications.CreateQualificationRequest", [
666
- { no: 1, name: "qualification", kind: "message", T: () => Qualification, options: { "validate.rules": { message: { required: true } } } }
682
+ { no: 1, name: "content_type", kind: "enum", T: () => ["resources.common.content.ContentType", ContentType, "CONTENT_TYPE_"], options: { "buf.validate.field": { enum: { definedOnly: true } } } }
667
683
  ]);
668
684
  }
669
685
  create(value?: PartialMessage<CreateQualificationRequest>): CreateQualificationRequest {
670
686
  const message = globalThis.Object.create((this.messagePrototype!));
687
+ message.contentType = 0;
671
688
  if (value !== undefined)
672
689
  reflectionMergePartial<CreateQualificationRequest>(this, message, value);
673
690
  return message;
@@ -677,8 +694,8 @@ class CreateQualificationRequest$Type extends MessageType<CreateQualificationReq
677
694
  while (reader.pos < end) {
678
695
  let [fieldNo, wireType] = reader.tag();
679
696
  switch (fieldNo) {
680
- case /* resources.qualifications.Qualification qualification */ 1:
681
- message.qualification = Qualification.internalBinaryRead(reader, reader.uint32(), options, message.qualification);
697
+ case /* resources.common.content.ContentType content_type */ 1:
698
+ message.contentType = reader.int32();
682
699
  break;
683
700
  default:
684
701
  let u = options.readUnknownField;
@@ -692,9 +709,9 @@ class CreateQualificationRequest$Type extends MessageType<CreateQualificationReq
692
709
  return message;
693
710
  }
694
711
  internalBinaryWrite(message: CreateQualificationRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
695
- /* resources.qualifications.Qualification qualification = 1; */
696
- if (message.qualification)
697
- Qualification.internalBinaryWrite(message.qualification, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
712
+ /* resources.common.content.ContentType content_type = 1; */
713
+ if (message.contentType !== 0)
714
+ writer.tag(1, WireType.Varint).int32(message.contentType);
698
715
  let u = options.writeUnknownFields;
699
716
  if (u !== false)
700
717
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -709,7 +726,7 @@ export const CreateQualificationRequest = new CreateQualificationRequest$Type();
709
726
  class CreateQualificationResponse$Type extends MessageType<CreateQualificationResponse> {
710
727
  constructor() {
711
728
  super("services.qualifications.CreateQualificationResponse", [
712
- { no: 1, name: "qualification_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }
729
+ { no: 1, name: "qualification_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }
713
730
  ]);
714
731
  }
715
732
  create(value?: PartialMessage<CreateQualificationResponse>): CreateQualificationResponse {
@@ -724,8 +741,8 @@ class CreateQualificationResponse$Type extends MessageType<CreateQualificationRe
724
741
  while (reader.pos < end) {
725
742
  let [fieldNo, wireType] = reader.tag();
726
743
  switch (fieldNo) {
727
- case /* uint64 qualification_id */ 1:
728
- message.qualificationId = reader.uint64().toNumber();
744
+ case /* int64 qualification_id */ 1:
745
+ message.qualificationId = reader.int64().toNumber();
729
746
  break;
730
747
  default:
731
748
  let u = options.readUnknownField;
@@ -739,9 +756,9 @@ class CreateQualificationResponse$Type extends MessageType<CreateQualificationRe
739
756
  return message;
740
757
  }
741
758
  internalBinaryWrite(message: CreateQualificationResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
742
- /* uint64 qualification_id = 1; */
759
+ /* int64 qualification_id = 1; */
743
760
  if (message.qualificationId !== 0)
744
- writer.tag(1, WireType.Varint).uint64(message.qualificationId);
761
+ writer.tag(1, WireType.Varint).int64(message.qualificationId);
745
762
  let u = options.writeUnknownFields;
746
763
  if (u !== false)
747
764
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -756,7 +773,7 @@ export const CreateQualificationResponse = new CreateQualificationResponse$Type(
756
773
  class UpdateQualificationRequest$Type extends MessageType<UpdateQualificationRequest> {
757
774
  constructor() {
758
775
  super("services.qualifications.UpdateQualificationRequest", [
759
- { no: 1, name: "qualification", kind: "message", T: () => Qualification, options: { "validate.rules": { message: { required: true } } } }
776
+ { no: 1, name: "qualification", kind: "message", T: () => Qualification, options: { "buf.validate.field": { required: true } } }
760
777
  ]);
761
778
  }
762
779
  create(value?: PartialMessage<UpdateQualificationRequest>): UpdateQualificationRequest {
@@ -802,7 +819,7 @@ export const UpdateQualificationRequest = new UpdateQualificationRequest$Type();
802
819
  class UpdateQualificationResponse$Type extends MessageType<UpdateQualificationResponse> {
803
820
  constructor() {
804
821
  super("services.qualifications.UpdateQualificationResponse", [
805
- { no: 1, name: "qualification_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }
822
+ { no: 1, name: "qualification_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }
806
823
  ]);
807
824
  }
808
825
  create(value?: PartialMessage<UpdateQualificationResponse>): UpdateQualificationResponse {
@@ -817,8 +834,8 @@ class UpdateQualificationResponse$Type extends MessageType<UpdateQualificationRe
817
834
  while (reader.pos < end) {
818
835
  let [fieldNo, wireType] = reader.tag();
819
836
  switch (fieldNo) {
820
- case /* uint64 qualification_id */ 1:
821
- message.qualificationId = reader.uint64().toNumber();
837
+ case /* int64 qualification_id */ 1:
838
+ message.qualificationId = reader.int64().toNumber();
822
839
  break;
823
840
  default:
824
841
  let u = options.readUnknownField;
@@ -832,9 +849,9 @@ class UpdateQualificationResponse$Type extends MessageType<UpdateQualificationRe
832
849
  return message;
833
850
  }
834
851
  internalBinaryWrite(message: UpdateQualificationResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
835
- /* uint64 qualification_id = 1; */
852
+ /* int64 qualification_id = 1; */
836
853
  if (message.qualificationId !== 0)
837
- writer.tag(1, WireType.Varint).uint64(message.qualificationId);
854
+ writer.tag(1, WireType.Varint).int64(message.qualificationId);
838
855
  let u = options.writeUnknownFields;
839
856
  if (u !== false)
840
857
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -849,7 +866,7 @@ export const UpdateQualificationResponse = new UpdateQualificationResponse$Type(
849
866
  class DeleteQualificationRequest$Type extends MessageType<DeleteQualificationRequest> {
850
867
  constructor() {
851
868
  super("services.qualifications.DeleteQualificationRequest", [
852
- { no: 1, name: "qualification_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }
869
+ { no: 1, name: "qualification_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }
853
870
  ]);
854
871
  }
855
872
  create(value?: PartialMessage<DeleteQualificationRequest>): DeleteQualificationRequest {
@@ -864,8 +881,8 @@ class DeleteQualificationRequest$Type extends MessageType<DeleteQualificationReq
864
881
  while (reader.pos < end) {
865
882
  let [fieldNo, wireType] = reader.tag();
866
883
  switch (fieldNo) {
867
- case /* uint64 qualification_id */ 1:
868
- message.qualificationId = reader.uint64().toNumber();
884
+ case /* int64 qualification_id */ 1:
885
+ message.qualificationId = reader.int64().toNumber();
869
886
  break;
870
887
  default:
871
888
  let u = options.readUnknownField;
@@ -879,9 +896,9 @@ class DeleteQualificationRequest$Type extends MessageType<DeleteQualificationReq
879
896
  return message;
880
897
  }
881
898
  internalBinaryWrite(message: DeleteQualificationRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
882
- /* uint64 qualification_id = 1; */
899
+ /* int64 qualification_id = 1; */
883
900
  if (message.qualificationId !== 0)
884
- writer.tag(1, WireType.Varint).uint64(message.qualificationId);
901
+ writer.tag(1, WireType.Varint).int64(message.qualificationId);
885
902
  let u = options.writeUnknownFields;
886
903
  if (u !== false)
887
904
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -934,7 +951,7 @@ export const DeleteQualificationResponse = new DeleteQualificationResponse$Type(
934
951
  class GetQualificationAccessRequest$Type extends MessageType<GetQualificationAccessRequest> {
935
952
  constructor() {
936
953
  super("services.qualifications.GetQualificationAccessRequest", [
937
- { no: 1, name: "qualification_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }
954
+ { no: 1, name: "qualification_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }
938
955
  ]);
939
956
  }
940
957
  create(value?: PartialMessage<GetQualificationAccessRequest>): GetQualificationAccessRequest {
@@ -949,8 +966,8 @@ class GetQualificationAccessRequest$Type extends MessageType<GetQualificationAcc
949
966
  while (reader.pos < end) {
950
967
  let [fieldNo, wireType] = reader.tag();
951
968
  switch (fieldNo) {
952
- case /* uint64 qualification_id */ 1:
953
- message.qualificationId = reader.uint64().toNumber();
969
+ case /* int64 qualification_id */ 1:
970
+ message.qualificationId = reader.int64().toNumber();
954
971
  break;
955
972
  default:
956
973
  let u = options.readUnknownField;
@@ -964,9 +981,9 @@ class GetQualificationAccessRequest$Type extends MessageType<GetQualificationAcc
964
981
  return message;
965
982
  }
966
983
  internalBinaryWrite(message: GetQualificationAccessRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
967
- /* uint64 qualification_id = 1; */
984
+ /* int64 qualification_id = 1; */
968
985
  if (message.qualificationId !== 0)
969
- writer.tag(1, WireType.Varint).uint64(message.qualificationId);
986
+ writer.tag(1, WireType.Varint).int64(message.qualificationId);
970
987
  let u = options.writeUnknownFields;
971
988
  if (u !== false)
972
989
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -981,7 +998,7 @@ export const GetQualificationAccessRequest = new GetQualificationAccessRequest$T
981
998
  class GetQualificationAccessResponse$Type extends MessageType<GetQualificationAccessResponse> {
982
999
  constructor() {
983
1000
  super("services.qualifications.GetQualificationAccessResponse", [
984
- { no: 1, name: "access", kind: "message", T: () => QualificationAccess, options: { "validate.rules": { message: { required: true } } } }
1001
+ { no: 1, name: "access", kind: "message", T: () => QualificationAccess, options: { "buf.validate.field": { required: true } } }
985
1002
  ]);
986
1003
  }
987
1004
  create(value?: PartialMessage<GetQualificationAccessResponse>): GetQualificationAccessResponse {
@@ -995,7 +1012,7 @@ class GetQualificationAccessResponse$Type extends MessageType<GetQualificationAc
995
1012
  while (reader.pos < end) {
996
1013
  let [fieldNo, wireType] = reader.tag();
997
1014
  switch (fieldNo) {
998
- case /* resources.qualifications.QualificationAccess access */ 1:
1015
+ case /* resources.qualifications.access.QualificationAccess access */ 1:
999
1016
  message.access = QualificationAccess.internalBinaryRead(reader, reader.uint32(), options, message.access);
1000
1017
  break;
1001
1018
  default:
@@ -1010,7 +1027,7 @@ class GetQualificationAccessResponse$Type extends MessageType<GetQualificationAc
1010
1027
  return message;
1011
1028
  }
1012
1029
  internalBinaryWrite(message: GetQualificationAccessResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1013
- /* resources.qualifications.QualificationAccess access = 1; */
1030
+ /* resources.qualifications.access.QualificationAccess access = 1; */
1014
1031
  if (message.access)
1015
1032
  QualificationAccess.internalBinaryWrite(message.access, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
1016
1033
  let u = options.writeUnknownFields;
@@ -1027,8 +1044,8 @@ export const GetQualificationAccessResponse = new GetQualificationAccessResponse
1027
1044
  class SetQualificationAccessRequest$Type extends MessageType<SetQualificationAccessRequest> {
1028
1045
  constructor() {
1029
1046
  super("services.qualifications.SetQualificationAccessRequest", [
1030
- { no: 1, name: "qualification_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
1031
- { no: 2, name: "access", kind: "message", T: () => QualificationAccess, options: { "validate.rules": { message: { required: true } } } }
1047
+ { no: 1, name: "qualification_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
1048
+ { no: 2, name: "access", kind: "message", T: () => QualificationAccess, options: { "buf.validate.field": { required: true } } }
1032
1049
  ]);
1033
1050
  }
1034
1051
  create(value?: PartialMessage<SetQualificationAccessRequest>): SetQualificationAccessRequest {
@@ -1043,10 +1060,10 @@ class SetQualificationAccessRequest$Type extends MessageType<SetQualificationAcc
1043
1060
  while (reader.pos < end) {
1044
1061
  let [fieldNo, wireType] = reader.tag();
1045
1062
  switch (fieldNo) {
1046
- case /* uint64 qualification_id */ 1:
1047
- message.qualificationId = reader.uint64().toNumber();
1063
+ case /* int64 qualification_id */ 1:
1064
+ message.qualificationId = reader.int64().toNumber();
1048
1065
  break;
1049
- case /* resources.qualifications.QualificationAccess access */ 2:
1066
+ case /* resources.qualifications.access.QualificationAccess access */ 2:
1050
1067
  message.access = QualificationAccess.internalBinaryRead(reader, reader.uint32(), options, message.access);
1051
1068
  break;
1052
1069
  default:
@@ -1061,10 +1078,10 @@ class SetQualificationAccessRequest$Type extends MessageType<SetQualificationAcc
1061
1078
  return message;
1062
1079
  }
1063
1080
  internalBinaryWrite(message: SetQualificationAccessRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1064
- /* uint64 qualification_id = 1; */
1081
+ /* int64 qualification_id = 1; */
1065
1082
  if (message.qualificationId !== 0)
1066
- writer.tag(1, WireType.Varint).uint64(message.qualificationId);
1067
- /* resources.qualifications.QualificationAccess access = 2; */
1083
+ writer.tag(1, WireType.Varint).int64(message.qualificationId);
1084
+ /* resources.qualifications.access.QualificationAccess access = 2; */
1068
1085
  if (message.access)
1069
1086
  QualificationAccess.internalBinaryWrite(message.access, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
1070
1087
  let u = options.writeUnknownFields;
@@ -1119,11 +1136,11 @@ export const SetQualificationAccessResponse = new SetQualificationAccessResponse
1119
1136
  class ListQualificationRequestsRequest$Type extends MessageType<ListQualificationRequestsRequest> {
1120
1137
  constructor() {
1121
1138
  super("services.qualifications.ListQualificationRequestsRequest", [
1122
- { no: 1, name: "pagination", kind: "message", T: () => PaginationRequest, options: { "validate.rules": { message: { required: true } } } },
1139
+ { no: 1, name: "pagination", kind: "message", T: () => PaginationRequest, options: { "buf.validate.field": { required: true } } },
1123
1140
  { no: 2, name: "sort", kind: "message", T: () => Sort },
1124
- { no: 3, name: "qualification_id", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
1141
+ { no: 3, name: "qualification_id", kind: "scalar", opt: true, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
1125
1142
  { no: 4, name: "status", kind: "enum", repeat: 1 /*RepeatType.PACKED*/, T: () => ["resources.qualifications.RequestStatus", RequestStatus, "REQUEST_STATUS_"] },
1126
- { no: 5, name: "user_id", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/, options: { "validate.rules": { int32: { gte: 0 } } } }
1143
+ { no: 5, name: "user_id", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gte: 0 } } } }
1127
1144
  ]);
1128
1145
  }
1129
1146
  create(value?: PartialMessage<ListQualificationRequestsRequest>): ListQualificationRequestsRequest {
@@ -1144,8 +1161,8 @@ class ListQualificationRequestsRequest$Type extends MessageType<ListQualificatio
1144
1161
  case /* optional resources.common.database.Sort sort */ 2:
1145
1162
  message.sort = Sort.internalBinaryRead(reader, reader.uint32(), options, message.sort);
1146
1163
  break;
1147
- case /* optional uint64 qualification_id */ 3:
1148
- message.qualificationId = reader.uint64().toNumber();
1164
+ case /* optional int64 qualification_id */ 3:
1165
+ message.qualificationId = reader.int64().toNumber();
1149
1166
  break;
1150
1167
  case /* repeated resources.qualifications.RequestStatus status */ 4:
1151
1168
  if (wireType === WireType.LengthDelimited)
@@ -1175,9 +1192,9 @@ class ListQualificationRequestsRequest$Type extends MessageType<ListQualificatio
1175
1192
  /* optional resources.common.database.Sort sort = 2; */
1176
1193
  if (message.sort)
1177
1194
  Sort.internalBinaryWrite(message.sort, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
1178
- /* optional uint64 qualification_id = 3; */
1195
+ /* optional int64 qualification_id = 3; */
1179
1196
  if (message.qualificationId !== undefined)
1180
- writer.tag(3, WireType.Varint).uint64(message.qualificationId);
1197
+ writer.tag(3, WireType.Varint).int64(message.qualificationId);
1181
1198
  /* repeated resources.qualifications.RequestStatus status = 4; */
1182
1199
  if (message.status.length) {
1183
1200
  writer.tag(4, WireType.LengthDelimited).fork();
@@ -1202,8 +1219,8 @@ export const ListQualificationRequestsRequest = new ListQualificationRequestsReq
1202
1219
  class ListQualificationRequestsResponse$Type extends MessageType<ListQualificationRequestsResponse> {
1203
1220
  constructor() {
1204
1221
  super("services.qualifications.ListQualificationRequestsResponse", [
1205
- { no: 1, name: "pagination", kind: "message", T: () => PaginationResponse },
1206
- { no: 2, name: "requests", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => QualificationRequest }
1222
+ { no: 1, name: "pagination", kind: "message", T: () => PaginationResponse, options: { "buf.validate.field": { required: true } } },
1223
+ { no: 2, name: "requests", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => QualificationRequest, options: { "codegen.itemslen.enabled": true } }
1207
1224
  ]);
1208
1225
  }
1209
1226
  create(value?: PartialMessage<ListQualificationRequestsResponse>): ListQualificationRequestsResponse {
@@ -1256,7 +1273,7 @@ export const ListQualificationRequestsResponse = new ListQualificationRequestsRe
1256
1273
  class CreateOrUpdateQualificationRequestRequest$Type extends MessageType<CreateOrUpdateQualificationRequestRequest> {
1257
1274
  constructor() {
1258
1275
  super("services.qualifications.CreateOrUpdateQualificationRequestRequest", [
1259
- { no: 1, name: "request", kind: "message", T: () => QualificationRequest, options: { "validate.rules": { message: { required: true } } } }
1276
+ { no: 1, name: "request", kind: "message", T: () => QualificationRequest, options: { "buf.validate.field": { required: true } } }
1260
1277
  ]);
1261
1278
  }
1262
1279
  create(value?: PartialMessage<CreateOrUpdateQualificationRequestRequest>): CreateOrUpdateQualificationRequestRequest {
@@ -1348,8 +1365,8 @@ export const CreateOrUpdateQualificationRequestResponse = new CreateOrUpdateQual
1348
1365
  class DeleteQualificationReqRequest$Type extends MessageType<DeleteQualificationReqRequest> {
1349
1366
  constructor() {
1350
1367
  super("services.qualifications.DeleteQualificationReqRequest", [
1351
- { no: 1, name: "qualification_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
1352
- { no: 2, name: "user_id", kind: "scalar", T: 5 /*ScalarType.INT32*/, options: { "validate.rules": { int32: { gte: 0 } } } }
1368
+ { no: 1, name: "qualification_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
1369
+ { no: 2, name: "user_id", kind: "scalar", T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gte: 0 } } } }
1353
1370
  ]);
1354
1371
  }
1355
1372
  create(value?: PartialMessage<DeleteQualificationReqRequest>): DeleteQualificationReqRequest {
@@ -1365,8 +1382,8 @@ class DeleteQualificationReqRequest$Type extends MessageType<DeleteQualification
1365
1382
  while (reader.pos < end) {
1366
1383
  let [fieldNo, wireType] = reader.tag();
1367
1384
  switch (fieldNo) {
1368
- case /* uint64 qualification_id */ 1:
1369
- message.qualificationId = reader.uint64().toNumber();
1385
+ case /* int64 qualification_id */ 1:
1386
+ message.qualificationId = reader.int64().toNumber();
1370
1387
  break;
1371
1388
  case /* int32 user_id */ 2:
1372
1389
  message.userId = reader.int32();
@@ -1383,9 +1400,9 @@ class DeleteQualificationReqRequest$Type extends MessageType<DeleteQualification
1383
1400
  return message;
1384
1401
  }
1385
1402
  internalBinaryWrite(message: DeleteQualificationReqRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1386
- /* uint64 qualification_id = 1; */
1403
+ /* int64 qualification_id = 1; */
1387
1404
  if (message.qualificationId !== 0)
1388
- writer.tag(1, WireType.Varint).uint64(message.qualificationId);
1405
+ writer.tag(1, WireType.Varint).int64(message.qualificationId);
1389
1406
  /* int32 user_id = 2; */
1390
1407
  if (message.userId !== 0)
1391
1408
  writer.tag(2, WireType.Varint).int32(message.userId);
@@ -1441,11 +1458,11 @@ export const DeleteQualificationReqResponse = new DeleteQualificationReqResponse
1441
1458
  class ListQualificationsResultsRequest$Type extends MessageType<ListQualificationsResultsRequest> {
1442
1459
  constructor() {
1443
1460
  super("services.qualifications.ListQualificationsResultsRequest", [
1444
- { no: 1, name: "pagination", kind: "message", T: () => PaginationRequest, options: { "validate.rules": { message: { required: true } } } },
1461
+ { no: 1, name: "pagination", kind: "message", T: () => PaginationRequest, options: { "buf.validate.field": { required: true } } },
1445
1462
  { no: 2, name: "sort", kind: "message", T: () => Sort },
1446
- { no: 3, name: "qualification_id", kind: "scalar", opt: true, T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
1463
+ { no: 3, name: "qualification_id", kind: "scalar", opt: true, T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
1447
1464
  { no: 4, name: "status", kind: "enum", repeat: 1 /*RepeatType.PACKED*/, T: () => ["resources.qualifications.ResultStatus", ResultStatus, "RESULT_STATUS_"] },
1448
- { no: 5, name: "user_id", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/, options: { "validate.rules": { int32: { gte: 0 } } } }
1465
+ { no: 5, name: "user_id", kind: "scalar", opt: true, T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gte: 0 } } } }
1449
1466
  ]);
1450
1467
  }
1451
1468
  create(value?: PartialMessage<ListQualificationsResultsRequest>): ListQualificationsResultsRequest {
@@ -1466,8 +1483,8 @@ class ListQualificationsResultsRequest$Type extends MessageType<ListQualificatio
1466
1483
  case /* optional resources.common.database.Sort sort */ 2:
1467
1484
  message.sort = Sort.internalBinaryRead(reader, reader.uint32(), options, message.sort);
1468
1485
  break;
1469
- case /* optional uint64 qualification_id */ 3:
1470
- message.qualificationId = reader.uint64().toNumber();
1486
+ case /* optional int64 qualification_id */ 3:
1487
+ message.qualificationId = reader.int64().toNumber();
1471
1488
  break;
1472
1489
  case /* repeated resources.qualifications.ResultStatus status */ 4:
1473
1490
  if (wireType === WireType.LengthDelimited)
@@ -1497,9 +1514,9 @@ class ListQualificationsResultsRequest$Type extends MessageType<ListQualificatio
1497
1514
  /* optional resources.common.database.Sort sort = 2; */
1498
1515
  if (message.sort)
1499
1516
  Sort.internalBinaryWrite(message.sort, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
1500
- /* optional uint64 qualification_id = 3; */
1517
+ /* optional int64 qualification_id = 3; */
1501
1518
  if (message.qualificationId !== undefined)
1502
- writer.tag(3, WireType.Varint).uint64(message.qualificationId);
1519
+ writer.tag(3, WireType.Varint).int64(message.qualificationId);
1503
1520
  /* repeated resources.qualifications.ResultStatus status = 4; */
1504
1521
  if (message.status.length) {
1505
1522
  writer.tag(4, WireType.LengthDelimited).fork();
@@ -1524,8 +1541,8 @@ export const ListQualificationsResultsRequest = new ListQualificationsResultsReq
1524
1541
  class ListQualificationsResultsResponse$Type extends MessageType<ListQualificationsResultsResponse> {
1525
1542
  constructor() {
1526
1543
  super("services.qualifications.ListQualificationsResultsResponse", [
1527
- { no: 1, name: "pagination", kind: "message", T: () => PaginationResponse },
1528
- { no: 2, name: "results", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => QualificationResult }
1544
+ { no: 1, name: "pagination", kind: "message", T: () => PaginationResponse, options: { "buf.validate.field": { required: true } } },
1545
+ { no: 2, name: "results", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => QualificationResult, options: { "codegen.itemslen.enabled": true } }
1529
1546
  ]);
1530
1547
  }
1531
1548
  create(value?: PartialMessage<ListQualificationsResultsResponse>): ListQualificationsResultsResponse {
@@ -1578,7 +1595,7 @@ export const ListQualificationsResultsResponse = new ListQualificationsResultsRe
1578
1595
  class CreateOrUpdateQualificationResultRequest$Type extends MessageType<CreateOrUpdateQualificationResultRequest> {
1579
1596
  constructor() {
1580
1597
  super("services.qualifications.CreateOrUpdateQualificationResultRequest", [
1581
- { no: 1, name: "result", kind: "message", T: () => QualificationResult, options: { "validate.rules": { message: { required: true } } } },
1598
+ { no: 1, name: "result", kind: "message", T: () => QualificationResult, options: { "buf.validate.field": { required: true } } },
1582
1599
  { no: 2, name: "grading", kind: "message", T: () => ExamGrading }
1583
1600
  ]);
1584
1601
  }
@@ -1596,7 +1613,7 @@ class CreateOrUpdateQualificationResultRequest$Type extends MessageType<CreateOr
1596
1613
  case /* resources.qualifications.QualificationResult result */ 1:
1597
1614
  message.result = QualificationResult.internalBinaryRead(reader, reader.uint32(), options, message.result);
1598
1615
  break;
1599
- case /* optional resources.qualifications.ExamGrading grading */ 2:
1616
+ case /* optional resources.qualifications.exam.ExamGrading grading */ 2:
1600
1617
  message.grading = ExamGrading.internalBinaryRead(reader, reader.uint32(), options, message.grading);
1601
1618
  break;
1602
1619
  default:
@@ -1614,7 +1631,7 @@ class CreateOrUpdateQualificationResultRequest$Type extends MessageType<CreateOr
1614
1631
  /* resources.qualifications.QualificationResult result = 1; */
1615
1632
  if (message.result)
1616
1633
  QualificationResult.internalBinaryWrite(message.result, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
1617
- /* optional resources.qualifications.ExamGrading grading = 2; */
1634
+ /* optional resources.qualifications.exam.ExamGrading grading = 2; */
1618
1635
  if (message.grading)
1619
1636
  ExamGrading.internalBinaryWrite(message.grading, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
1620
1637
  let u = options.writeUnknownFields;
@@ -1677,7 +1694,7 @@ export const CreateOrUpdateQualificationResultResponse = new CreateOrUpdateQuali
1677
1694
  class DeleteQualificationResultRequest$Type extends MessageType<DeleteQualificationResultRequest> {
1678
1695
  constructor() {
1679
1696
  super("services.qualifications.DeleteQualificationResultRequest", [
1680
- { no: 1, name: "result_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }
1697
+ { no: 1, name: "result_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }
1681
1698
  ]);
1682
1699
  }
1683
1700
  create(value?: PartialMessage<DeleteQualificationResultRequest>): DeleteQualificationResultRequest {
@@ -1692,8 +1709,8 @@ class DeleteQualificationResultRequest$Type extends MessageType<DeleteQualificat
1692
1709
  while (reader.pos < end) {
1693
1710
  let [fieldNo, wireType] = reader.tag();
1694
1711
  switch (fieldNo) {
1695
- case /* uint64 result_id */ 1:
1696
- message.resultId = reader.uint64().toNumber();
1712
+ case /* int64 result_id */ 1:
1713
+ message.resultId = reader.int64().toNumber();
1697
1714
  break;
1698
1715
  default:
1699
1716
  let u = options.readUnknownField;
@@ -1707,9 +1724,9 @@ class DeleteQualificationResultRequest$Type extends MessageType<DeleteQualificat
1707
1724
  return message;
1708
1725
  }
1709
1726
  internalBinaryWrite(message: DeleteQualificationResultRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1710
- /* uint64 result_id = 1; */
1727
+ /* int64 result_id = 1; */
1711
1728
  if (message.resultId !== 0)
1712
- writer.tag(1, WireType.Varint).uint64(message.resultId);
1729
+ writer.tag(1, WireType.Varint).int64(message.resultId);
1713
1730
  let u = options.writeUnknownFields;
1714
1731
  if (u !== false)
1715
1732
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -1762,7 +1779,7 @@ export const DeleteQualificationResultResponse = new DeleteQualificationResultRe
1762
1779
  class GetExamInfoRequest$Type extends MessageType<GetExamInfoRequest> {
1763
1780
  constructor() {
1764
1781
  super("services.qualifications.GetExamInfoRequest", [
1765
- { no: 1, name: "qualification_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }
1782
+ { no: 1, name: "qualification_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ }
1766
1783
  ]);
1767
1784
  }
1768
1785
  create(value?: PartialMessage<GetExamInfoRequest>): GetExamInfoRequest {
@@ -1777,8 +1794,8 @@ class GetExamInfoRequest$Type extends MessageType<GetExamInfoRequest> {
1777
1794
  while (reader.pos < end) {
1778
1795
  let [fieldNo, wireType] = reader.tag();
1779
1796
  switch (fieldNo) {
1780
- case /* uint64 qualification_id */ 1:
1781
- message.qualificationId = reader.uint64().toNumber();
1797
+ case /* int64 qualification_id */ 1:
1798
+ message.qualificationId = reader.int64().toNumber();
1782
1799
  break;
1783
1800
  default:
1784
1801
  let u = options.readUnknownField;
@@ -1792,9 +1809,9 @@ class GetExamInfoRequest$Type extends MessageType<GetExamInfoRequest> {
1792
1809
  return message;
1793
1810
  }
1794
1811
  internalBinaryWrite(message: GetExamInfoRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1795
- /* uint64 qualification_id = 1; */
1812
+ /* int64 qualification_id = 1; */
1796
1813
  if (message.qualificationId !== 0)
1797
- writer.tag(1, WireType.Varint).uint64(message.qualificationId);
1814
+ writer.tag(1, WireType.Varint).int64(message.qualificationId);
1798
1815
  let u = options.writeUnknownFields;
1799
1816
  if (u !== false)
1800
1817
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -1810,7 +1827,7 @@ class GetExamInfoResponse$Type extends MessageType<GetExamInfoResponse> {
1810
1827
  constructor() {
1811
1828
  super("services.qualifications.GetExamInfoResponse", [
1812
1829
  { no: 1, name: "qualification", kind: "message", T: () => QualificationShort },
1813
- { no: 2, name: "question_count", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
1830
+ { no: 2, name: "question_count", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
1814
1831
  { no: 3, name: "exam_user", kind: "message", T: () => ExamUser }
1815
1832
  ]);
1816
1833
  }
@@ -1829,10 +1846,10 @@ class GetExamInfoResponse$Type extends MessageType<GetExamInfoResponse> {
1829
1846
  case /* resources.qualifications.QualificationShort qualification */ 1:
1830
1847
  message.qualification = QualificationShort.internalBinaryRead(reader, reader.uint32(), options, message.qualification);
1831
1848
  break;
1832
- case /* int32 question_count */ 2:
1833
- message.questionCount = reader.int32();
1849
+ case /* int64 question_count */ 2:
1850
+ message.questionCount = reader.int64().toNumber();
1834
1851
  break;
1835
- case /* optional resources.qualifications.ExamUser exam_user */ 3:
1852
+ case /* optional resources.qualifications.exam.ExamUser exam_user */ 3:
1836
1853
  message.examUser = ExamUser.internalBinaryRead(reader, reader.uint32(), options, message.examUser);
1837
1854
  break;
1838
1855
  default:
@@ -1850,10 +1867,10 @@ class GetExamInfoResponse$Type extends MessageType<GetExamInfoResponse> {
1850
1867
  /* resources.qualifications.QualificationShort qualification = 1; */
1851
1868
  if (message.qualification)
1852
1869
  QualificationShort.internalBinaryWrite(message.qualification, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
1853
- /* int32 question_count = 2; */
1870
+ /* int64 question_count = 2; */
1854
1871
  if (message.questionCount !== 0)
1855
- writer.tag(2, WireType.Varint).int32(message.questionCount);
1856
- /* optional resources.qualifications.ExamUser exam_user = 3; */
1872
+ writer.tag(2, WireType.Varint).int64(message.questionCount);
1873
+ /* optional resources.qualifications.exam.ExamUser exam_user = 3; */
1857
1874
  if (message.examUser)
1858
1875
  ExamUser.internalBinaryWrite(message.examUser, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
1859
1876
  let u = options.writeUnknownFields;
@@ -1870,7 +1887,7 @@ export const GetExamInfoResponse = new GetExamInfoResponse$Type();
1870
1887
  class TakeExamRequest$Type extends MessageType<TakeExamRequest> {
1871
1888
  constructor() {
1872
1889
  super("services.qualifications.TakeExamRequest", [
1873
- { no: 1, name: "qualification_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
1890
+ { no: 1, name: "qualification_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
1874
1891
  { no: 2, name: "cancel", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }
1875
1892
  ]);
1876
1893
  }
@@ -1886,8 +1903,8 @@ class TakeExamRequest$Type extends MessageType<TakeExamRequest> {
1886
1903
  while (reader.pos < end) {
1887
1904
  let [fieldNo, wireType] = reader.tag();
1888
1905
  switch (fieldNo) {
1889
- case /* uint64 qualification_id */ 1:
1890
- message.qualificationId = reader.uint64().toNumber();
1906
+ case /* int64 qualification_id */ 1:
1907
+ message.qualificationId = reader.int64().toNumber();
1891
1908
  break;
1892
1909
  case /* optional bool cancel */ 2:
1893
1910
  message.cancel = reader.bool();
@@ -1904,9 +1921,9 @@ class TakeExamRequest$Type extends MessageType<TakeExamRequest> {
1904
1921
  return message;
1905
1922
  }
1906
1923
  internalBinaryWrite(message: TakeExamRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1907
- /* uint64 qualification_id = 1; */
1924
+ /* int64 qualification_id = 1; */
1908
1925
  if (message.qualificationId !== 0)
1909
- writer.tag(1, WireType.Varint).uint64(message.qualificationId);
1926
+ writer.tag(1, WireType.Varint).int64(message.qualificationId);
1910
1927
  /* optional bool cancel = 2; */
1911
1928
  if (message.cancel !== undefined)
1912
1929
  writer.tag(2, WireType.Varint).bool(message.cancel);
@@ -1925,11 +1942,14 @@ class TakeExamResponse$Type extends MessageType<TakeExamResponse> {
1925
1942
  constructor() {
1926
1943
  super("services.qualifications.TakeExamResponse", [
1927
1944
  { no: 1, name: "exam", kind: "message", T: () => ExamQuestions },
1928
- { no: 2, name: "exam_user", kind: "message", T: () => ExamUser }
1945
+ { no: 2, name: "exam_user", kind: "message", T: () => ExamUser },
1946
+ { no: 3, name: "responses", kind: "message", T: () => ExamResponses },
1947
+ { no: 4, name: "times_up", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
1929
1948
  ]);
1930
1949
  }
1931
1950
  create(value?: PartialMessage<TakeExamResponse>): TakeExamResponse {
1932
1951
  const message = globalThis.Object.create((this.messagePrototype!));
1952
+ message.timesUp = false;
1933
1953
  if (value !== undefined)
1934
1954
  reflectionMergePartial<TakeExamResponse>(this, message, value);
1935
1955
  return message;
@@ -1939,12 +1959,18 @@ class TakeExamResponse$Type extends MessageType<TakeExamResponse> {
1939
1959
  while (reader.pos < end) {
1940
1960
  let [fieldNo, wireType] = reader.tag();
1941
1961
  switch (fieldNo) {
1942
- case /* resources.qualifications.ExamQuestions exam */ 1:
1962
+ case /* resources.qualifications.exam.ExamQuestions exam */ 1:
1943
1963
  message.exam = ExamQuestions.internalBinaryRead(reader, reader.uint32(), options, message.exam);
1944
1964
  break;
1945
- case /* resources.qualifications.ExamUser exam_user */ 2:
1965
+ case /* resources.qualifications.exam.ExamUser exam_user */ 2:
1946
1966
  message.examUser = ExamUser.internalBinaryRead(reader, reader.uint32(), options, message.examUser);
1947
1967
  break;
1968
+ case /* resources.qualifications.exam.ExamResponses responses */ 3:
1969
+ message.responses = ExamResponses.internalBinaryRead(reader, reader.uint32(), options, message.responses);
1970
+ break;
1971
+ case /* bool times_up */ 4:
1972
+ message.timesUp = reader.bool();
1973
+ break;
1948
1974
  default:
1949
1975
  let u = options.readUnknownField;
1950
1976
  if (u === "throw")
@@ -1957,12 +1983,18 @@ class TakeExamResponse$Type extends MessageType<TakeExamResponse> {
1957
1983
  return message;
1958
1984
  }
1959
1985
  internalBinaryWrite(message: TakeExamResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
1960
- /* resources.qualifications.ExamQuestions exam = 1; */
1986
+ /* resources.qualifications.exam.ExamQuestions exam = 1; */
1961
1987
  if (message.exam)
1962
1988
  ExamQuestions.internalBinaryWrite(message.exam, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
1963
- /* resources.qualifications.ExamUser exam_user = 2; */
1989
+ /* resources.qualifications.exam.ExamUser exam_user = 2; */
1964
1990
  if (message.examUser)
1965
1991
  ExamUser.internalBinaryWrite(message.examUser, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
1992
+ /* resources.qualifications.exam.ExamResponses responses = 3; */
1993
+ if (message.responses)
1994
+ ExamResponses.internalBinaryWrite(message.responses, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
1995
+ /* bool times_up = 4; */
1996
+ if (message.timesUp !== false)
1997
+ writer.tag(4, WireType.Varint).bool(message.timesUp);
1966
1998
  let u = options.writeUnknownFields;
1967
1999
  if (u !== false)
1968
2000
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -1977,13 +2009,15 @@ export const TakeExamResponse = new TakeExamResponse$Type();
1977
2009
  class SubmitExamRequest$Type extends MessageType<SubmitExamRequest> {
1978
2010
  constructor() {
1979
2011
  super("services.qualifications.SubmitExamRequest", [
1980
- { no: 1, name: "qualification_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
1981
- { no: 2, name: "responses", kind: "message", T: () => ExamResponses }
2012
+ { no: 1, name: "qualification_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
2013
+ { no: 2, name: "responses", kind: "message", T: () => ExamResponses },
2014
+ { no: 3, name: "partial", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
1982
2015
  ]);
1983
2016
  }
1984
2017
  create(value?: PartialMessage<SubmitExamRequest>): SubmitExamRequest {
1985
2018
  const message = globalThis.Object.create((this.messagePrototype!));
1986
2019
  message.qualificationId = 0;
2020
+ message.partial = false;
1987
2021
  if (value !== undefined)
1988
2022
  reflectionMergePartial<SubmitExamRequest>(this, message, value);
1989
2023
  return message;
@@ -1993,12 +2027,15 @@ class SubmitExamRequest$Type extends MessageType<SubmitExamRequest> {
1993
2027
  while (reader.pos < end) {
1994
2028
  let [fieldNo, wireType] = reader.tag();
1995
2029
  switch (fieldNo) {
1996
- case /* uint64 qualification_id */ 1:
1997
- message.qualificationId = reader.uint64().toNumber();
2030
+ case /* int64 qualification_id */ 1:
2031
+ message.qualificationId = reader.int64().toNumber();
1998
2032
  break;
1999
- case /* resources.qualifications.ExamResponses responses */ 2:
2033
+ case /* resources.qualifications.exam.ExamResponses responses */ 2:
2000
2034
  message.responses = ExamResponses.internalBinaryRead(reader, reader.uint32(), options, message.responses);
2001
2035
  break;
2036
+ case /* bool partial */ 3:
2037
+ message.partial = reader.bool();
2038
+ break;
2002
2039
  default:
2003
2040
  let u = options.readUnknownField;
2004
2041
  if (u === "throw")
@@ -2011,12 +2048,15 @@ class SubmitExamRequest$Type extends MessageType<SubmitExamRequest> {
2011
2048
  return message;
2012
2049
  }
2013
2050
  internalBinaryWrite(message: SubmitExamRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
2014
- /* uint64 qualification_id = 1; */
2051
+ /* int64 qualification_id = 1; */
2015
2052
  if (message.qualificationId !== 0)
2016
- writer.tag(1, WireType.Varint).uint64(message.qualificationId);
2017
- /* resources.qualifications.ExamResponses responses = 2; */
2053
+ writer.tag(1, WireType.Varint).int64(message.qualificationId);
2054
+ /* resources.qualifications.exam.ExamResponses responses = 2; */
2018
2055
  if (message.responses)
2019
2056
  ExamResponses.internalBinaryWrite(message.responses, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
2057
+ /* bool partial = 3; */
2058
+ if (message.partial !== false)
2059
+ writer.tag(3, WireType.Varint).bool(message.partial);
2020
2060
  let u = options.writeUnknownFields;
2021
2061
  if (u !== false)
2022
2062
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -2077,8 +2117,8 @@ export const SubmitExamResponse = new SubmitExamResponse$Type();
2077
2117
  class GetUserExamRequest$Type extends MessageType<GetUserExamRequest> {
2078
2118
  constructor() {
2079
2119
  super("services.qualifications.GetUserExamRequest", [
2080
- { no: 1, name: "qualification_id", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ },
2081
- { no: 2, name: "user_id", kind: "scalar", T: 5 /*ScalarType.INT32*/, options: { "validate.rules": { int32: { gte: 0 } } } }
2120
+ { no: 1, name: "qualification_id", kind: "scalar", T: 3 /*ScalarType.INT64*/, L: 2 /*LongType.NUMBER*/ },
2121
+ { no: 2, name: "user_id", kind: "scalar", T: 5 /*ScalarType.INT32*/, options: { "buf.validate.field": { int32: { gte: 0 } } } }
2082
2122
  ]);
2083
2123
  }
2084
2124
  create(value?: PartialMessage<GetUserExamRequest>): GetUserExamRequest {
@@ -2094,8 +2134,8 @@ class GetUserExamRequest$Type extends MessageType<GetUserExamRequest> {
2094
2134
  while (reader.pos < end) {
2095
2135
  let [fieldNo, wireType] = reader.tag();
2096
2136
  switch (fieldNo) {
2097
- case /* uint64 qualification_id */ 1:
2098
- message.qualificationId = reader.uint64().toNumber();
2137
+ case /* int64 qualification_id */ 1:
2138
+ message.qualificationId = reader.int64().toNumber();
2099
2139
  break;
2100
2140
  case /* int32 user_id */ 2:
2101
2141
  message.userId = reader.int32();
@@ -2112,9 +2152,9 @@ class GetUserExamRequest$Type extends MessageType<GetUserExamRequest> {
2112
2152
  return message;
2113
2153
  }
2114
2154
  internalBinaryWrite(message: GetUserExamRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
2115
- /* uint64 qualification_id = 1; */
2155
+ /* int64 qualification_id = 1; */
2116
2156
  if (message.qualificationId !== 0)
2117
- writer.tag(1, WireType.Varint).uint64(message.qualificationId);
2157
+ writer.tag(1, WireType.Varint).int64(message.qualificationId);
2118
2158
  /* int32 user_id = 2; */
2119
2159
  if (message.userId !== 0)
2120
2160
  writer.tag(2, WireType.Varint).int32(message.userId);
@@ -2149,16 +2189,16 @@ class GetUserExamResponse$Type extends MessageType<GetUserExamResponse> {
2149
2189
  while (reader.pos < end) {
2150
2190
  let [fieldNo, wireType] = reader.tag();
2151
2191
  switch (fieldNo) {
2152
- case /* resources.qualifications.ExamQuestions exam */ 1:
2192
+ case /* resources.qualifications.exam.ExamQuestions exam */ 1:
2153
2193
  message.exam = ExamQuestions.internalBinaryRead(reader, reader.uint32(), options, message.exam);
2154
2194
  break;
2155
- case /* resources.qualifications.ExamUser exam_user */ 2:
2195
+ case /* resources.qualifications.exam.ExamUser exam_user */ 2:
2156
2196
  message.examUser = ExamUser.internalBinaryRead(reader, reader.uint32(), options, message.examUser);
2157
2197
  break;
2158
- case /* resources.qualifications.ExamResponses responses */ 3:
2198
+ case /* resources.qualifications.exam.ExamResponses responses */ 3:
2159
2199
  message.responses = ExamResponses.internalBinaryRead(reader, reader.uint32(), options, message.responses);
2160
2200
  break;
2161
- case /* resources.qualifications.ExamGrading grading */ 4:
2201
+ case /* resources.qualifications.exam.ExamGrading grading */ 4:
2162
2202
  message.grading = ExamGrading.internalBinaryRead(reader, reader.uint32(), options, message.grading);
2163
2203
  break;
2164
2204
  default:
@@ -2173,16 +2213,16 @@ class GetUserExamResponse$Type extends MessageType<GetUserExamResponse> {
2173
2213
  return message;
2174
2214
  }
2175
2215
  internalBinaryWrite(message: GetUserExamResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
2176
- /* resources.qualifications.ExamQuestions exam = 1; */
2216
+ /* resources.qualifications.exam.ExamQuestions exam = 1; */
2177
2217
  if (message.exam)
2178
2218
  ExamQuestions.internalBinaryWrite(message.exam, writer.tag(1, WireType.LengthDelimited).fork(), options).join();
2179
- /* resources.qualifications.ExamUser exam_user = 2; */
2219
+ /* resources.qualifications.exam.ExamUser exam_user = 2; */
2180
2220
  if (message.examUser)
2181
2221
  ExamUser.internalBinaryWrite(message.examUser, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
2182
- /* resources.qualifications.ExamResponses responses = 3; */
2222
+ /* resources.qualifications.exam.ExamResponses responses = 3; */
2183
2223
  if (message.responses)
2184
2224
  ExamResponses.internalBinaryWrite(message.responses, writer.tag(3, WireType.LengthDelimited).fork(), options).join();
2185
- /* resources.qualifications.ExamGrading grading = 4; */
2225
+ /* resources.qualifications.exam.ExamGrading grading = 4; */
2186
2226
  if (message.grading)
2187
2227
  ExamGrading.internalBinaryWrite(message.grading, writer.tag(4, WireType.LengthDelimited).fork(), options).join();
2188
2228
  let u = options.writeUnknownFields;
@@ -2199,19 +2239,20 @@ export const GetUserExamResponse = new GetUserExamResponse$Type();
2199
2239
  * @generated ServiceType for protobuf service services.qualifications.QualificationsService
2200
2240
  */
2201
2241
  export const QualificationsService = new ServiceType("services.qualifications.QualificationsService", [
2202
- { name: "ListQualifications", options: {}, I: ListQualificationsRequest, O: ListQualificationsResponse },
2203
- { name: "GetQualification", options: {}, I: GetQualificationRequest, O: GetQualificationResponse },
2204
- { name: "CreateQualification", options: {}, I: CreateQualificationRequest, O: CreateQualificationResponse },
2205
- { name: "UpdateQualification", options: {}, I: UpdateQualificationRequest, O: UpdateQualificationResponse },
2206
- { name: "DeleteQualification", options: {}, I: DeleteQualificationRequest, O: DeleteQualificationResponse },
2207
- { name: "ListQualificationRequests", options: {}, I: ListQualificationRequestsRequest, O: ListQualificationRequestsResponse },
2208
- { name: "CreateOrUpdateQualificationRequest", options: {}, I: CreateOrUpdateQualificationRequestRequest, O: CreateOrUpdateQualificationRequestResponse },
2209
- { name: "DeleteQualificationReq", options: {}, I: DeleteQualificationReqRequest, O: DeleteQualificationReqResponse },
2210
- { name: "ListQualificationsResults", options: {}, I: ListQualificationsResultsRequest, O: ListQualificationsResultsResponse },
2211
- { name: "CreateOrUpdateQualificationResult", options: {}, I: CreateOrUpdateQualificationResultRequest, O: CreateOrUpdateQualificationResultResponse },
2212
- { name: "DeleteQualificationResult", options: {}, I: DeleteQualificationResultRequest, O: DeleteQualificationResultResponse },
2213
- { name: "GetExamInfo", options: {}, I: GetExamInfoRequest, O: GetExamInfoResponse },
2214
- { name: "TakeExam", options: {}, I: TakeExamRequest, O: TakeExamResponse },
2215
- { name: "SubmitExam", options: {}, I: SubmitExamRequest, O: SubmitExamResponse },
2216
- { name: "GetUserExam", options: {}, I: GetUserExamRequest, O: GetUserExamResponse }
2217
- ]);
2242
+ { name: "ListQualifications", options: { "codegen.perms.perms": { enabled: true } }, I: ListQualificationsRequest, O: ListQualificationsResponse },
2243
+ { name: "GetQualification", options: { "codegen.perms.perms": { enabled: true, name: "ListQualifications" } }, I: GetQualificationRequest, O: GetQualificationResponse },
2244
+ { name: "CreateQualification", options: { "codegen.perms.perms": { enabled: true, name: "UpdateQualification" } }, I: CreateQualificationRequest, O: CreateQualificationResponse },
2245
+ { name: "UpdateQualification", options: { "codegen.perms.perms": { enabled: true, attrs: [{ key: "Access", type: "ATTRIBUTE_TYPE_STRING_LIST", validStringList: ["Own", "Lower_Rank", "Same_Rank", "Any"] }, { key: "Fields", type: "ATTRIBUTE_TYPE_STRING_LIST", validStringList: ["Public"] }] } }, I: UpdateQualificationRequest, O: UpdateQualificationResponse },
2246
+ { name: "DeleteQualification", options: { "codegen.perms.perms": { enabled: true, attrs: [{ key: "Access", type: "ATTRIBUTE_TYPE_STRING_LIST", validStringList: ["Own", "Lower_Rank", "Same_Rank", "Any"] }] } }, I: DeleteQualificationRequest, O: DeleteQualificationResponse },
2247
+ { name: "ListQualificationRequests", options: { "codegen.perms.perms": { enabled: true, name: "ListQualifications" } }, I: ListQualificationRequestsRequest, O: ListQualificationRequestsResponse },
2248
+ { name: "CreateOrUpdateQualificationRequest", options: { "codegen.perms.perms": { enabled: true, name: "ListQualifications" } }, I: CreateOrUpdateQualificationRequestRequest, O: CreateOrUpdateQualificationRequestResponse },
2249
+ { name: "DeleteQualificationReq", options: { "codegen.perms.perms": { enabled: true, name: "ListQualifications" } }, I: DeleteQualificationReqRequest, O: DeleteQualificationReqResponse },
2250
+ { name: "ListQualificationsResults", options: { "codegen.perms.perms": { enabled: true, name: "ListQualifications" } }, I: ListQualificationsResultsRequest, O: ListQualificationsResultsResponse },
2251
+ { name: "CreateOrUpdateQualificationResult", options: { "codegen.perms.perms": { enabled: true, name: "ListQualifications" } }, I: CreateOrUpdateQualificationResultRequest, O: CreateOrUpdateQualificationResultResponse },
2252
+ { name: "DeleteQualificationResult", options: { "codegen.perms.perms": { enabled: true, name: "ListQualifications" } }, I: DeleteQualificationResultRequest, O: DeleteQualificationResultResponse },
2253
+ { name: "GetExamInfo", options: { "codegen.perms.perms": { enabled: true, name: "ListQualifications" } }, I: GetExamInfoRequest, O: GetExamInfoResponse },
2254
+ { name: "TakeExam", options: { "codegen.perms.perms": { enabled: true, name: "ListQualifications" } }, I: TakeExamRequest, O: TakeExamResponse },
2255
+ { name: "SubmitExam", options: { "codegen.perms.perms": { enabled: true, name: "ListQualifications" } }, I: SubmitExamRequest, O: SubmitExamResponse },
2256
+ { name: "GetUserExam", options: { "codegen.perms.perms": { enabled: true, name: "ListQualifications" } }, I: GetUserExamRequest, O: GetUserExamResponse },
2257
+ { name: "UploadFile", clientStreaming: true, options: { "codegen.perms.perms": { enabled: true, name: "UpdateQualification" } }, I: UploadFileRequest, O: UploadFileResponse }
2258
+ ], { "codegen.perms.perms_svc": { order: 80, icon: "i-mdi-school-outline" } });