@rebornteam/reborn-api 3.1.0 → 3.2.1

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 (55) hide show
  1. package/.openapi-generator/FILES +1 -0
  2. package/README.md +4 -2
  3. package/api.ts +185 -95
  4. package/base.ts +1 -1
  5. package/common.ts +1 -1
  6. package/configuration.ts +1 -1
  7. package/dist/api.d.ts +148 -95
  8. package/dist/api.js +63 -1
  9. package/dist/base.d.ts +1 -1
  10. package/dist/base.js +1 -1
  11. package/dist/common.d.ts +1 -1
  12. package/dist/common.js +1 -1
  13. package/dist/configuration.d.ts +1 -1
  14. package/dist/configuration.js +1 -1
  15. package/dist/esm/api.d.ts +148 -95
  16. package/dist/esm/api.js +63 -1
  17. package/dist/esm/base.d.ts +1 -1
  18. package/dist/esm/base.js +1 -1
  19. package/dist/esm/common.d.ts +1 -1
  20. package/dist/esm/common.js +1 -1
  21. package/dist/esm/configuration.d.ts +1 -1
  22. package/dist/esm/configuration.js +1 -1
  23. package/dist/esm/index.d.ts +1 -1
  24. package/dist/esm/index.js +1 -1
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.js +1 -1
  27. package/docs/AdminApplyPunishmentRequest.md +2 -2
  28. package/docs/AdminApplyPunishmentResponse.md +1 -1
  29. package/docs/AdminApplyPunishmentResult.md +6 -6
  30. package/docs/AdminBackfillLocationResponse.md +25 -0
  31. package/docs/AdminClientCredentialResponse.md +6 -6
  32. package/docs/AdminConnectionBypassResponse.md +4 -4
  33. package/docs/AdminConnectionCheckResult.md +7 -3
  34. package/docs/AdminConnectionsApi.md +47 -0
  35. package/docs/AdminCreatePunishmentDraftRequest.md +2 -2
  36. package/docs/AdminDashboardConnectionResponse.md +2 -2
  37. package/docs/AdminIpSearchResult.md +2 -2
  38. package/docs/AdminPagedConnectionResponse.md +5 -5
  39. package/docs/AdminPagedPlayerResponse.md +5 -5
  40. package/docs/AdminPagedPunishmentResponse.md +5 -5
  41. package/docs/AdminPlayerDetailResponse.md +7 -7
  42. package/docs/AdminPlayerSearchResult.md +1 -1
  43. package/docs/AdminPlayerSummary.md +6 -6
  44. package/docs/AdminPunishmentDraftResponse.md +1 -1
  45. package/docs/AdminPunishmentEvaluation.md +9 -9
  46. package/docs/AdminPunishmentSearchResponse.md +3 -3
  47. package/docs/AdminUsernameHistoryEntry.md +2 -2
  48. package/docs/ConnectionGetConnectionDetailsResponse.md +7 -7
  49. package/docs/PlayerGetPlayerInformation.md +4 -4
  50. package/docs/PunishmentGetPunishmentResponse.md +6 -6
  51. package/docs/PunishmentSeveritiesResponse.md +1 -1
  52. package/docs/PunishmentSeveritiesResponsePunishmentTypeInfo.md +2 -2
  53. package/docs/PunishmentSeveritiesResponseSeverityInfo.md +2 -2
  54. package/index.ts +1 -1
  55. package/package.json +1 -1
package/api.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * Reborn API
5
5
  * The Reborn API serves as the central backend for the platform, orchestrating secure communication between game clients and data services. This API supports two authentication methods: - **OAuth 2.0 Client Credentials**: For programmatic API access - **Discord SSO Bearer Token**: For admin endpoints requiring Discord authentication
6
6
  *
7
- * The version of the OpenAPI document: 3.1.0
7
+ * The version of the OpenAPI document: 3.2.1
8
8
  *
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -38,7 +38,7 @@ export interface AdminApplyPunishmentRequest {
38
38
  /**
39
39
  * Severity level: 1=Minor, 2=Moderate, 3=Severe, 4=Critical
40
40
  */
41
- 'severity'?: number;
41
+ 'severity': number;
42
42
  /**
43
43
  * Reason for the punishment
44
44
  */
@@ -50,7 +50,7 @@ export interface AdminApplyPunishmentRequest {
50
50
  /**
51
51
  * Force the punishment to be permanent regardless of the target\'s current score
52
52
  */
53
- 'forcePermanent'?: boolean;
53
+ 'forcePermanent': boolean;
54
54
  /**
55
55
  * Internal notes visible only to administrators — not shown to the punished player
56
56
  */
@@ -65,7 +65,7 @@ export interface AdminApplyPunishmentResponse {
65
65
  /**
66
66
  * Ordered list of results, one per target in the request
67
67
  */
68
- 'results'?: Array<AdminApplyPunishmentResult>;
68
+ 'results': Array<AdminApplyPunishmentResult>;
69
69
  }
70
70
  /**
71
71
  * Result of applying a punishment to a single target
@@ -74,27 +74,27 @@ export interface AdminApplyPunishmentResult {
74
74
  /**
75
75
  * The target this result applies to
76
76
  */
77
- 'target'?: AdminPunishmentTarget;
77
+ 'target': AdminPunishmentTarget;
78
78
  /**
79
79
  * ID of the created punishment record
80
80
  */
81
- 'punishmentId'?: number;
81
+ 'punishmentId': number;
82
82
  /**
83
83
  * Punishment type applied
84
84
  */
85
- 'type'?: PunishmentType;
85
+ 'type': PunishmentType;
86
86
  /**
87
87
  * Severity level applied
88
88
  */
89
- 'severity'?: number;
89
+ 'severity': number;
90
90
  /**
91
91
  * Updated punishment score after applying
92
92
  */
93
- 'newScore'?: number;
93
+ 'newScore': number;
94
94
  /**
95
95
  * Whether the punishment was made permanent
96
96
  */
97
- 'isPermanent'?: boolean;
97
+ 'isPermanent': boolean;
98
98
  /**
99
99
  * When the punishment expires — null if permanent or a WARNING
100
100
  */
@@ -102,6 +102,23 @@ export interface AdminApplyPunishmentResult {
102
102
  }
103
103
 
104
104
 
105
+ /**
106
+ * Result of a location backfill run — rechecks every connection_check row missing both city and country, repopulating them from the VPN providers.
107
+ */
108
+ export interface AdminBackfillLocationResponse {
109
+ /**
110
+ * Total checks attempted
111
+ */
112
+ 'processed': number;
113
+ /**
114
+ * Checks where the provider returned at least a city or country
115
+ */
116
+ 'succeeded': number;
117
+ /**
118
+ * Checks that errored or returned no location data
119
+ */
120
+ 'failed': number;
121
+ }
105
122
  /**
106
123
  * Client credential response
107
124
  */
@@ -109,11 +126,11 @@ export interface AdminClientCredentialResponse {
109
126
  /**
110
127
  * Unique identifier for the client credential
111
128
  */
112
- 'id'?: number;
129
+ 'id': number;
113
130
  /**
114
131
  * Client ID used for authentication
115
132
  */
116
- 'clientId'?: string;
133
+ 'clientId': string;
117
134
  /**
118
135
  * Client secret (only returned on generation/rotation, null otherwise)
119
136
  */
@@ -121,19 +138,19 @@ export interface AdminClientCredentialResponse {
121
138
  /**
122
139
  * Human-readable name for the client
123
140
  */
124
- 'name'?: string;
141
+ 'name': string;
125
142
  /**
126
143
  * Optional description of the client\'s purpose
127
144
  */
128
- 'description'?: string;
145
+ 'description': string;
129
146
  /**
130
147
  * Whether the client credential is currently enabled
131
148
  */
132
- 'enabled'?: boolean;
149
+ 'enabled': boolean;
133
150
  /**
134
151
  * Timestamp when the credential was created (ISO-8601 format)
135
152
  */
136
- 'createdAt'?: string;
153
+ 'createdAt': string;
137
154
  /**
138
155
  * Timestamp when the credential expires (ISO-8601 format). Null means the credential never expires.
139
156
  */
@@ -146,19 +163,19 @@ export interface AdminConnectionBypassResponse {
146
163
  /**
147
164
  * Unique identifier for the bypass
148
165
  */
149
- 'id'?: number;
166
+ 'id': number;
150
167
  /**
151
168
  * IP address that is bypassed
152
169
  */
153
- 'ipAddress'?: string;
170
+ 'ipAddress': string;
154
171
  /**
155
172
  * Timestamp when the bypass expires (ISO-8601 format)
156
173
  */
157
- 'expiresAt'?: string;
174
+ 'expiresAt': string;
158
175
  /**
159
176
  * Timestamp when the bypass was created (ISO-8601 format)
160
177
  */
161
- 'createdAt'?: string;
178
+ 'createdAt': string;
162
179
  }
163
180
  /**
164
181
  * Result from a single VPN detection service for a given IP address
@@ -167,15 +184,23 @@ export interface AdminConnectionCheckResult {
167
184
  /**
168
185
  * Service identifier
169
186
  */
170
- 'service'?: string;
187
+ 'service': string;
171
188
  /**
172
189
  * Whether this service flagged the IP as a VPN, proxy, or Tor exit node
173
190
  */
174
- 'result'?: boolean;
191
+ 'result': boolean;
175
192
  /**
176
193
  * When this check was last performed
177
194
  */
178
- 'checkedAt'?: string;
195
+ 'checkedAt': string;
196
+ /**
197
+ * City reported by this service, if available
198
+ */
199
+ 'city'?: string | null;
200
+ /**
201
+ * Country code reported by this service, if available
202
+ */
203
+ 'country'?: string | null;
179
204
  }
180
205
  /**
181
206
  * Request to evaluate the impact of a punishment across one or more targets before applying
@@ -192,7 +217,7 @@ export interface AdminCreatePunishmentDraftRequest {
192
217
  /**
193
218
  * Severity level: 1=Minor, 2=Moderate, 3=Severe, 4=Critical
194
219
  */
195
- 'severity'?: number;
220
+ 'severity': number;
196
221
  /**
197
222
  * Reason for the punishment (not used in evaluation, required for apply)
198
223
  */
@@ -204,14 +229,14 @@ export interface AdminCreatePunishmentDraftRequest {
204
229
  /**
205
230
  * Force the punishment to be permanent regardless of the target\'s current score
206
231
  */
207
- 'forcePermanent'?: boolean;
232
+ 'forcePermanent': boolean;
208
233
  }
209
234
 
210
235
 
211
236
  export interface AdminDashboardConnectionResponse {
212
237
  'id': number;
213
238
  'ipAddress': string;
214
- 'location': string;
239
+ 'location'?: string | null;
215
240
  'isVpn': boolean;
216
241
  'isBypassed': boolean;
217
242
  'bypassExpiresAt'?: string | null;
@@ -222,7 +247,7 @@ export interface AdminDashboardConnectionResponse {
222
247
  /**
223
248
  * Results from each VPN detection service for this IP address
224
249
  */
225
- 'results'?: Array<AdminConnectionCheckResult>;
250
+ 'results': Array<AdminConnectionCheckResult>;
226
251
  }
227
252
  export interface AdminGetDashboardStats {
228
253
  'totalPlayers': number;
@@ -236,11 +261,11 @@ export interface AdminIpSearchResult {
236
261
  /**
237
262
  * IP address
238
263
  */
239
- 'ipAddress'?: string;
264
+ 'ipAddress': string;
240
265
  /**
241
266
  * Players ever seen on this IP
242
267
  */
243
- 'players'?: Array<AdminPlayerSearchResult>;
268
+ 'players': Array<AdminPlayerSearchResult>;
244
269
  }
245
270
  /**
246
271
  * Paginated connection list response
@@ -249,23 +274,23 @@ export interface AdminPagedConnectionResponse {
249
274
  /**
250
275
  * Connections on the current page
251
276
  */
252
- 'data'?: Array<AdminDashboardConnectionResponse>;
277
+ 'data': Array<AdminDashboardConnectionResponse>;
253
278
  /**
254
279
  * Total number of connections matching the filters
255
280
  */
256
- 'total'?: number;
281
+ 'total': number;
257
282
  /**
258
283
  * Current page (1-indexed)
259
284
  */
260
- 'page'?: number;
285
+ 'page': number;
261
286
  /**
262
287
  * Page size
263
288
  */
264
- 'limit'?: number;
289
+ 'limit': number;
265
290
  /**
266
291
  * Total number of pages
267
292
  */
268
- 'totalPages'?: number;
293
+ 'totalPages': number;
269
294
  }
270
295
  /**
271
296
  * Paginated player list response
@@ -274,23 +299,23 @@ export interface AdminPagedPlayerResponse {
274
299
  /**
275
300
  * Players on the current page
276
301
  */
277
- 'data'?: Array<AdminPlayerSummary>;
302
+ 'data': Array<AdminPlayerSummary>;
278
303
  /**
279
304
  * Total number of players matching the search filter
280
305
  */
281
- 'total'?: number;
306
+ 'total': number;
282
307
  /**
283
308
  * Current page (1-indexed)
284
309
  */
285
- 'page'?: number;
310
+ 'page': number;
286
311
  /**
287
312
  * Page size
288
313
  */
289
- 'limit'?: number;
314
+ 'limit': number;
290
315
  /**
291
316
  * Total number of pages
292
317
  */
293
- 'totalPages'?: number;
318
+ 'totalPages': number;
294
319
  }
295
320
  /**
296
321
  * Paginated punishment list response
@@ -299,23 +324,23 @@ export interface AdminPagedPunishmentResponse {
299
324
  /**
300
325
  * Punishments on the current page
301
326
  */
302
- 'data'?: Array<AdminPunishmentListItem>;
327
+ 'data': Array<AdminPunishmentListItem>;
303
328
  /**
304
329
  * Total number of punishments matching the filters
305
330
  */
306
- 'total'?: number;
331
+ 'total': number;
307
332
  /**
308
333
  * Current page (1-indexed)
309
334
  */
310
- 'page'?: number;
335
+ 'page': number;
311
336
  /**
312
337
  * Page size
313
338
  */
314
- 'limit'?: number;
339
+ 'limit': number;
315
340
  /**
316
341
  * Total number of pages
317
342
  */
318
- 'totalPages'?: number;
343
+ 'totalPages': number;
319
344
  }
320
345
  /**
321
346
  * Full player detail including punishment history and all known usernames
@@ -324,11 +349,11 @@ export interface AdminPlayerDetailResponse {
324
349
  /**
325
350
  * Internal player ID
326
351
  */
327
- 'id'?: number;
352
+ 'id': number;
328
353
  /**
329
354
  * Player Minecraft UUID
330
355
  */
331
- 'uuid'?: string;
356
+ 'uuid': string;
332
357
  /**
333
358
  * Most recently seen username
334
359
  */
@@ -336,11 +361,11 @@ export interface AdminPlayerDetailResponse {
336
361
  /**
337
362
  * Whether this player still has first-join status
338
363
  */
339
- 'firstJoin'?: boolean;
364
+ 'firstJoin': boolean;
340
365
  /**
341
366
  * Timestamp of first connection (ISO-8601)
342
367
  */
343
- 'firstLogin'?: string;
368
+ 'firstLogin': string;
344
369
  /**
345
370
  * Timestamp of most recent connection (ISO-8601)
346
371
  */
@@ -348,15 +373,15 @@ export interface AdminPlayerDetailResponse {
348
373
  /**
349
374
  * Raw punishment score
350
375
  */
351
- 'punishmentPointsRaw'?: number;
376
+ 'punishmentPointsRaw': number;
352
377
  /**
353
378
  * Punishment score as a percentage
354
379
  */
355
- 'punishmentPointsPercent'?: number;
380
+ 'punishmentPointsPercent': number;
356
381
  /**
357
382
  * All usernames this player has used, newest first
358
383
  */
359
- 'usernameHistory'?: Array<AdminUsernameHistoryEntry>;
384
+ 'usernameHistory': Array<AdminUsernameHistoryEntry>;
360
385
  }
361
386
  /**
362
387
  * Lightweight player reference used in search results and punishment evaluations
@@ -365,7 +390,7 @@ export interface AdminPlayerSearchResult {
365
390
  /**
366
391
  * Player Minecraft UUID
367
392
  */
368
- 'uuid'?: string;
393
+ 'uuid': string;
369
394
  /**
370
395
  * Most recently seen username, null if never recorded
371
396
  */
@@ -378,11 +403,11 @@ export interface AdminPlayerSummary {
378
403
  /**
379
404
  * Internal player ID
380
405
  */
381
- 'id'?: number;
406
+ 'id': number;
382
407
  /**
383
408
  * Player Minecraft UUID
384
409
  */
385
- 'uuid'?: string;
410
+ 'uuid': string;
386
411
  /**
387
412
  * Most recently seen username, null if never recorded
388
413
  */
@@ -390,11 +415,11 @@ export interface AdminPlayerSummary {
390
415
  /**
391
416
  * Whether this player still has first-join status
392
417
  */
393
- 'firstJoin'?: boolean;
418
+ 'firstJoin': boolean;
394
419
  /**
395
420
  * Timestamp of first connection (ISO-8601)
396
421
  */
397
- 'firstLogin'?: string;
422
+ 'firstLogin': string;
398
423
  /**
399
424
  * Timestamp of most recent connection (ISO-8601)
400
425
  */
@@ -402,11 +427,11 @@ export interface AdminPlayerSummary {
402
427
  /**
403
428
  * Raw punishment score (sum of weighted punishment values)
404
429
  */
405
- 'punishmentPointsRaw'?: number;
430
+ 'punishmentPointsRaw': number;
406
431
  /**
407
432
  * Punishment score as a percentage. Values above 100 indicate future punishments should be permanent.
408
433
  */
409
- 'punishmentPointsPercent'?: number;
434
+ 'punishmentPointsPercent': number;
410
435
  }
411
436
  /**
412
437
  * Batch punishment draft — one evaluation per target
@@ -415,7 +440,7 @@ export interface AdminPunishmentDraftResponse {
415
440
  /**
416
441
  * Ordered list of evaluations, one per target in the request
417
442
  */
418
- 'evaluations'?: Array<AdminPunishmentEvaluation>;
443
+ 'evaluations': Array<AdminPunishmentEvaluation>;
419
444
  }
420
445
  /**
421
446
  * Evaluation of a punishment\'s impact on a single target
@@ -424,27 +449,27 @@ export interface AdminPunishmentEvaluation {
424
449
  /**
425
450
  * The target this evaluation applies to
426
451
  */
427
- 'target'?: AdminPunishmentTarget;
452
+ 'target': AdminPunishmentTarget;
428
453
  /**
429
454
  * Players affected — one player for UUID targets, all players on the IP for connection targets
430
455
  */
431
- 'affectedPlayers'?: Array<AdminPlayerSearchResult>;
456
+ 'affectedPlayers': Array<AdminPlayerSearchResult>;
432
457
  /**
433
458
  * Current punishment score before applying this punishment (0–100+)
434
459
  */
435
- 'currentScore'?: number;
460
+ 'currentScore': number;
436
461
  /**
437
462
  * Points this punishment would add to the score
438
463
  */
439
- 'pointsToAdd'?: number;
464
+ 'pointsToAdd': number;
440
465
  /**
441
466
  * Projected score after applying this punishment
442
467
  */
443
- 'newScore'?: number;
468
+ 'newScore': number;
444
469
  /**
445
470
  * Whether this punishment would be permanent based on the current score threshold
446
471
  */
447
- 'willBePermanent'?: boolean;
472
+ 'willBePermanent': boolean;
448
473
  /**
449
474
  * Resolved duration in seconds — null if permanent or a WARNING
450
475
  */
@@ -452,15 +477,15 @@ export interface AdminPunishmentEvaluation {
452
477
  /**
453
478
  * Number of existing punishments on this target
454
479
  */
455
- 'previousPunishmentCount'?: number;
480
+ 'previousPunishmentCount': number;
456
481
  /**
457
482
  * True when the target is an IP address (connection punishment) rather than a player UUID
458
483
  */
459
- 'isConnectionTarget'?: boolean;
484
+ 'isConnectionTarget': boolean;
460
485
  /**
461
486
  * The effective punishment type that will be applied — may differ from the requested type if escalated to BAN at threshold
462
487
  */
463
- 'effectiveType'?: PunishmentType;
488
+ 'effectiveType': PunishmentType;
464
489
  }
465
490
 
466
491
 
@@ -487,15 +512,15 @@ export interface AdminPunishmentSearchResponse {
487
512
  /**
488
513
  * Search kind — PLAYER for UUID/username searches, IP for IP address searches
489
514
  */
490
- 'kind'?: SearchKind;
515
+ 'kind': SearchKind;
491
516
  /**
492
517
  * Matching players — only populated when kind=\'player\'
493
518
  */
494
- 'players'?: Array<AdminPlayerSearchResult>;
519
+ 'players': Array<AdminPlayerSearchResult>;
495
520
  /**
496
521
  * Matching IP addresses with their associated players — only populated when kind=\'ip\'
497
522
  */
498
- 'ipResults'?: Array<AdminIpSearchResult>;
523
+ 'ipResults': Array<AdminIpSearchResult>;
499
524
  }
500
525
 
501
526
 
@@ -519,11 +544,11 @@ export interface AdminUsernameHistoryEntry {
519
544
  /**
520
545
  * The username at this point in time
521
546
  */
522
- 'username'?: string;
547
+ 'username': string;
523
548
  /**
524
549
  * When this username was first observed (ISO-8601)
525
550
  */
526
- 'changedAt'?: string;
551
+ 'changedAt': string;
527
552
  }
528
553
  export interface ChatMessageDTO {
529
554
  'id': number;
@@ -563,23 +588,23 @@ export interface ConnectionGetConnectionDetailsResponse {
563
588
  /**
564
589
  * The analyzed IPv4 address
565
590
  */
566
- 'ipAddress'?: string;
591
+ 'ipAddress': string;
567
592
  /**
568
593
  * Approximate geographic location of the IP address. Returns \'Local, N/A\' for localhost or private IPs.
569
594
  */
570
- 'approximateLocation'?: string;
595
+ 'approximateLocation': string;
571
596
  /**
572
597
  * Confidence score representing the percentage of VPN detection services that flagged this IP as suspicious. Range: 0.0 (clean) to 100.0 (definitely VPN/proxy).
573
598
  */
574
- 'percentPositive'?: number;
599
+ 'percentPositive': number;
575
600
  /**
576
601
  * Total number of VPN detection services successfully queried during the last check.
577
602
  */
578
- 'numberOfChecks'?: number;
603
+ 'numberOfChecks': number;
579
604
  /**
580
605
  * Indicates if this IP address has been administratively bypassed.
581
606
  */
582
- 'isBypassed'?: boolean;
607
+ 'isBypassed': boolean;
583
608
  /**
584
609
  * Expiration timestamp for the bypass (ISO-8601 format). Null if not bypassed or bypass is permanent.
585
610
  */
@@ -587,7 +612,7 @@ export interface ConnectionGetConnectionDetailsResponse {
587
612
  /**
588
613
  * Results from each VPN detection service that checked this IP address
589
614
  */
590
- 'results'?: Array<AdminConnectionCheckResult>;
615
+ 'results': Array<AdminConnectionCheckResult>;
591
616
  /**
592
617
  * Player information associated with this connection. Only populated when \'associate_uuid\' query parameter is provided.
593
618
  */
@@ -595,7 +620,7 @@ export interface ConnectionGetConnectionDetailsResponse {
595
620
  /**
596
621
  * Combined list of active punishments for both the IP address and player UUID (if provided). Only includes non-expired punishments.
597
622
  */
598
- 'punishments'?: Array<PunishmentGetPunishmentResponse>;
623
+ 'punishments': Array<PunishmentGetPunishmentResponse>;
599
624
  /**
600
625
  * Join enforcement result. Only populated when \'associate_uuid\' query parameter is provided. Contains the final allow/deny decision and a formatted kick message if denied.
601
626
  */
@@ -655,19 +680,19 @@ export interface PlayerGetPlayerInformation {
655
680
  /**
656
681
  * Indicates whether this is the player\'s first time joining the server.
657
682
  */
658
- 'firstJoin'?: boolean;
683
+ 'firstJoin': boolean;
659
684
  /**
660
685
  * Timestamp of when the player first connected to the server (ISO-8601 format).
661
686
  */
662
- 'firstLogin'?: string;
687
+ 'firstLogin': string;
663
688
  /**
664
689
  * Raw punishment score calculated as: SUM((base_weight × severity/10)). Used for tracking overall punishment severity.
665
690
  */
666
- 'punishmentPointsRaw'?: number;
691
+ 'punishmentPointsRaw': number;
667
692
  /**
668
693
  * Punishment score as a percentage (0-100). When >100% before applying a new punishment, the new punishment should be made permanent.
669
694
  */
670
- 'punishmentPointsPercent'?: number;
695
+ 'punishmentPointsPercent': number;
671
696
  }
672
697
  /**
673
698
  * Punishment information including reason, type, creator, and expiration
@@ -676,11 +701,11 @@ export interface PunishmentGetPunishmentResponse {
676
701
  /**
677
702
  * Unique identifier for the punishment
678
703
  */
679
- 'id'?: number;
704
+ 'id': number;
680
705
  /**
681
706
  * Reason for the punishment, shown to the punished player
682
707
  */
683
- 'reason'?: string;
708
+ 'reason': string;
684
709
  /**
685
710
  * Internal administrator notes — not shown to the punished player
686
711
  */
@@ -688,15 +713,15 @@ export interface PunishmentGetPunishmentResponse {
688
713
  /**
689
714
  * Type of punishment
690
715
  */
691
- 'type'?: PunishmentType;
716
+ 'type': PunishmentType;
692
717
  /**
693
718
  * Severity level (1=Minor, 2=Moderate, 3=Severe, 4=Critical)
694
719
  */
695
- 'severity'?: number;
720
+ 'severity': number;
696
721
  /**
697
722
  * Username or identifier of the person who created this punishment
698
723
  */
699
- 'createdBy'?: string;
724
+ 'createdBy': string;
700
725
  /**
701
726
  * Timestamp when the punishment expires (ISO-8601 format). Null for permanent punishments.
702
727
  */
@@ -704,7 +729,7 @@ export interface PunishmentGetPunishmentResponse {
704
729
  /**
705
730
  * Timestamp when the punishment was created (ISO-8601 format)
706
731
  */
707
- 'createdAt'?: string;
732
+ 'createdAt': string;
708
733
  }
709
734
 
710
735
 
@@ -715,7 +740,7 @@ export interface PunishmentSeveritiesResponse {
715
740
  /**
716
741
  * List of punishment types with their severity durations
717
742
  */
718
- 'punishmentTypes'?: Array<PunishmentSeveritiesResponsePunishmentTypeInfo>;
743
+ 'punishmentTypes': Array<PunishmentSeveritiesResponsePunishmentTypeInfo>;
719
744
  }
720
745
  /**
721
746
  * Punishment type with severity information
@@ -724,11 +749,11 @@ export interface PunishmentSeveritiesResponsePunishmentTypeInfo {
724
749
  /**
725
750
  * Type of punishment
726
751
  */
727
- 'type'?: PunishmentType;
752
+ 'type': PunishmentType;
728
753
  /**
729
754
  * List of severity levels with durations
730
755
  */
731
- 'severities'?: Array<PunishmentSeveritiesResponseSeverityInfo>;
756
+ 'severities': Array<PunishmentSeveritiesResponseSeverityInfo>;
732
757
  }
733
758
 
734
759
 
@@ -739,11 +764,11 @@ export interface PunishmentSeveritiesResponseSeverityInfo {
739
764
  /**
740
765
  * Severity level
741
766
  */
742
- 'severity'?: number;
767
+ 'severity': number;
743
768
  /**
744
769
  * Duration in seconds (0 means no duration)
745
770
  */
746
- 'durationSeconds'?: number;
771
+ 'durationSeconds': number;
747
772
  }
748
773
 
749
774
  export const PunishmentTargetType = {
@@ -1386,6 +1411,40 @@ export class AdminClientCredentialsApi extends BaseAPI {
1386
1411
  */
1387
1412
  export const AdminConnectionsApiAxiosParamCreator = function (configuration?: Configuration) {
1388
1413
  return {
1414
+ /**
1415
+ * Iterates every connection_check row where both city and country are NULL and re-runs that row\'s source VPN service to populate location data. Concurrency is capped to avoid overwhelming external providers. Synchronous — returns once the run completes.
1416
+ * @summary Backfill missing location data
1417
+ * @param {*} [options] Override http request option.
1418
+ * @throws {RequiredError}
1419
+ */
1420
+ backfillLocation: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
1421
+ const localVarPath = `/admin/connection/backfill-location`;
1422
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
1423
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
1424
+ let baseOptions;
1425
+ if (configuration) {
1426
+ baseOptions = configuration.baseOptions;
1427
+ }
1428
+
1429
+ const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
1430
+ const localVarHeaderParameter = {} as any;
1431
+ const localVarQueryParameter = {} as any;
1432
+
1433
+ // authentication DiscordAuth required
1434
+ // http bearer authentication required
1435
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
1436
+
1437
+ localVarHeaderParameter['Accept'] = 'application/json';
1438
+
1439
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
1440
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1441
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
1442
+
1443
+ return {
1444
+ url: toPathString(localVarUrlObj),
1445
+ options: localVarRequestOptions,
1446
+ };
1447
+ },
1389
1448
  /**
1390
1449
  * Creates a temporary bypass for an IP address, expiring at the specified epoch timestamp (milliseconds since Unix epoch).
1391
1450
  * @summary Create connection bypass
@@ -1604,6 +1663,18 @@ export const AdminConnectionsApiAxiosParamCreator = function (configuration?: Co
1604
1663
  export const AdminConnectionsApiFp = function(configuration?: Configuration) {
1605
1664
  const localVarAxiosParamCreator = AdminConnectionsApiAxiosParamCreator(configuration)
1606
1665
  return {
1666
+ /**
1667
+ * Iterates every connection_check row where both city and country are NULL and re-runs that row\'s source VPN service to populate location data. Concurrency is capped to avoid overwhelming external providers. Synchronous — returns once the run completes.
1668
+ * @summary Backfill missing location data
1669
+ * @param {*} [options] Override http request option.
1670
+ * @throws {RequiredError}
1671
+ */
1672
+ async backfillLocation(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AdminBackfillLocationResponse>> {
1673
+ const localVarAxiosArgs = await localVarAxiosParamCreator.backfillLocation(options);
1674
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
1675
+ const localVarOperationServerBasePath = operationServerMap['AdminConnectionsApi.backfillLocation']?.[localVarOperationServerIndex]?.url;
1676
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
1677
+ },
1607
1678
  /**
1608
1679
  * Creates a temporary bypass for an IP address, expiring at the specified epoch timestamp (milliseconds since Unix epoch).
1609
1680
  * @summary Create connection bypass
@@ -1676,6 +1747,15 @@ export const AdminConnectionsApiFp = function(configuration?: Configuration) {
1676
1747
  export const AdminConnectionsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
1677
1748
  const localVarFp = AdminConnectionsApiFp(configuration)
1678
1749
  return {
1750
+ /**
1751
+ * Iterates every connection_check row where both city and country are NULL and re-runs that row\'s source VPN service to populate location data. Concurrency is capped to avoid overwhelming external providers. Synchronous — returns once the run completes.
1752
+ * @summary Backfill missing location data
1753
+ * @param {*} [options] Override http request option.
1754
+ * @throws {RequiredError}
1755
+ */
1756
+ backfillLocation(options?: RawAxiosRequestConfig): AxiosPromise<AdminBackfillLocationResponse> {
1757
+ return localVarFp.backfillLocation(options).then((request) => request(axios, basePath));
1758
+ },
1679
1759
  /**
1680
1760
  * Creates a temporary bypass for an IP address, expiring at the specified epoch timestamp (milliseconds since Unix epoch).
1681
1761
  * @summary Create connection bypass
@@ -1734,6 +1814,16 @@ export const AdminConnectionsApiFactory = function (configuration?: Configuratio
1734
1814
  * AdminConnectionsApi - object-oriented interface
1735
1815
  */
1736
1816
  export class AdminConnectionsApi extends BaseAPI {
1817
+ /**
1818
+ * Iterates every connection_check row where both city and country are NULL and re-runs that row\'s source VPN service to populate location data. Concurrency is capped to avoid overwhelming external providers. Synchronous — returns once the run completes.
1819
+ * @summary Backfill missing location data
1820
+ * @param {*} [options] Override http request option.
1821
+ * @throws {RequiredError}
1822
+ */
1823
+ public backfillLocation(options?: RawAxiosRequestConfig) {
1824
+ return AdminConnectionsApiFp(this.configuration).backfillLocation(options).then((request) => request(this.axios, this.basePath));
1825
+ }
1826
+
1737
1827
  /**
1738
1828
  * Creates a temporary bypass for an IP address, expiring at the specified epoch timestamp (milliseconds since Unix epoch).
1739
1829
  * @summary Create connection bypass