@rebornteam/reborn-api 4.0.0 → 4.5.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.
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: 4.0.0
7
+ * The version of the OpenAPI document: 4.5.0
8
8
  *
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -73,6 +73,69 @@ export interface AdminAltExemption {
73
73
  */
74
74
  'reason'?: string | null;
75
75
  }
76
+ /**
77
+ * Alt-graph rooted at a player, walked out to the requested hop depth.
78
+ */
79
+ export interface AdminAltGraph {
80
+ /**
81
+ * UUID of the focal player. Always appears in nodes at depth=0.
82
+ */
83
+ 'rootUuid': string;
84
+ /**
85
+ * Maximum hop depth walked. Capped server-side at MAX_PROPAGATION_DEPTH.
86
+ */
87
+ 'depth': number;
88
+ /**
89
+ * Every player reachable from the root within {@code depth} hops, including the root at depth=0.
90
+ */
91
+ 'nodes': Array<AdminAltGraphNode>;
92
+ /**
93
+ * Undirected edges between any two players in nodes that share at least one non-promiscuous connection.
94
+ */
95
+ 'edges': Array<AdminAltGraphEdge>;
96
+ }
97
+ /**
98
+ * Undirected edge in an alt-graph traversal.
99
+ */
100
+ export interface AdminAltGraphEdge {
101
+ /**
102
+ * One endpoint of the edge
103
+ */
104
+ 'fromUuid': string;
105
+ /**
106
+ * Other endpoint of the edge. The pair is emitted only once — the SQL ensures fromUuid < toUuid lexicographically.
107
+ */
108
+ 'toUuid': string;
109
+ /**
110
+ * Number of distinct non-promiscuous connections these two players share. Drives edge thickness.
111
+ */
112
+ 'sharedConnectionCount': number;
113
+ }
114
+ /**
115
+ * One player node in an alt-graph traversal.
116
+ */
117
+ export interface AdminAltGraphNode {
118
+ /**
119
+ * Player Minecraft UUID
120
+ */
121
+ 'uuid': string;
122
+ /**
123
+ * Most recently seen username, null if never resolved
124
+ */
125
+ 'username'?: string | null;
126
+ /**
127
+ * Hop count from the focal player (0 = the focal player herself).
128
+ */
129
+ 'depth': number;
130
+ /**
131
+ * Trust factor (0-100). Drives the node colour in the graph.
132
+ */
133
+ 'trustFactor': number;
134
+ /**
135
+ * Whether this player currently has at least one active (non-revoked, non-expired) player_punishment row. Drives a red outline ring on the node.
136
+ */
137
+ 'hasActivePunishment': boolean;
138
+ }
76
139
  /**
77
140
  * Request to apply a punishment to one or more targets
78
141
  */
@@ -212,9 +275,26 @@ export interface AdminAsyncJob {
212
275
  * Identifier of the API instance that is running this job. Other instances can see state and request cancellation but cannot dispose the in-flight Reactor subscription directly.
213
276
  */
214
277
  'hostInstance': string;
278
+ /**
279
+ * Pointer to a CSV artifact emitted by this job, when one exists. Present only after the job marks COMPLETED and the artifact has been persisted. Download the CSV bytes via GET /admin/job/{id}/artifact.csv.
280
+ */
281
+ 'artifact'?: AdminAsyncJobArtifactMeta | null;
215
282
  }
216
283
 
217
284
 
285
+ /**
286
+ * Pointer to a job\'s CSV artifact. Present only when the job emitted one.
287
+ */
288
+ export interface AdminAsyncJobArtifactMeta {
289
+ /**
290
+ * Number of data rows in the artifact (excluding the header).
291
+ */
292
+ 'rowCount': number;
293
+ /**
294
+ * When the artifact was finalized (typically a few seconds after the job marked COMPLETED).
295
+ */
296
+ 'createdAt': string;
297
+ }
218
298
  /**
219
299
  * Acknowledgement returned by endpoints that submit an async job. The id is the polling target — GET /admin/job/{id} for status, DELETE /admin/job/{id} to cancel.
220
300
  */
@@ -850,6 +930,19 @@ export interface AdminPunishmentTarget {
850
930
  */
851
931
  'ipAddress'?: string | null;
852
932
  }
933
+ /**
934
+ * Active DIRECT participants currently attached to a punishment.
935
+ */
936
+ export interface AdminPunishmentTargets {
937
+ /**
938
+ * UUIDs of players with an active DIRECT player_punishment link to this punishment.
939
+ */
940
+ 'playerUuids': Array<string>;
941
+ /**
942
+ * IPs of connections with a live connection_punishment row for this punishment.
943
+ */
944
+ 'ipAddresses': Array<string>;
945
+ }
853
946
  /**
854
947
  * One reported player attached to a report.
855
948
  */
@@ -997,7 +1090,7 @@ export interface AdminTrustFactorImpact {
997
1090
  'projectedTrustFactor': number;
998
1091
  }
999
1092
  /**
1000
- * Partial update for a punishment. Only reason / notes / expiresAt may be edited — severity is intentionally immutable to keep the punishment score deterministic.
1093
+ * Partial update for a punishment. All fields are optional; omitted fields stay untouched.
1001
1094
  */
1002
1095
  export interface AdminUpdatePunishmentRequest {
1003
1096
  /**
@@ -1016,7 +1109,25 @@ export interface AdminUpdatePunishmentRequest {
1016
1109
  * When true, clears expiresAt (makes the punishment permanent). Takes precedence over expiresAt.
1017
1110
  */
1018
1111
  'forcePermanent'?: boolean | null;
1112
+ /**
1113
+ * Replace the punishment type (BAN/MUTE/KICK/WARNING). Affects trust factor retroactively.
1114
+ */
1115
+ 'type'?: PunishmentType | null;
1116
+ /**
1117
+ * Replace the severity (1–4). Affects trust factor retroactively.
1118
+ */
1119
+ 'severity'?: number | null;
1120
+ /**
1121
+ * Targets to ADD. Each entry has either a player UUID or an IP. UUID → new DIRECT player_punishment row. IP → new connection_punishment row.
1122
+ */
1123
+ 'addTargets'?: Array<AdminPunishmentTarget> | null;
1124
+ /**
1125
+ * Targets to REMOVE. UUID → soft-revoke the DIRECT player_punishment link. IP → delete the connection_punishment row outright. PROPAGATED links are not affected by this endpoint.
1126
+ */
1127
+ 'removeTargets'?: Array<AdminPunishmentTarget> | null;
1019
1128
  }
1129
+
1130
+
1020
1131
  /**
1021
1132
  * A single entry in a player\'s username history
1022
1133
  */
@@ -3398,6 +3509,44 @@ export const AdminJobsApiAxiosParamCreator = function (configuration?: Configura
3398
3509
  await setBearerAuthToObject(localVarHeaderParameter, configuration)
3399
3510
 
3400
3511
 
3512
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
3513
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
3514
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
3515
+
3516
+ return {
3517
+ url: toPathString(localVarUrlObj),
3518
+ options: localVarRequestOptions,
3519
+ };
3520
+ },
3521
+ /**
3522
+ * Returns the CSV emitted by the job — typically one row per record the job touched. The first line is a header; subsequent lines are RFC-4180 escaped data rows. 404 when the job has no artifact (either it didn\'t emit one, or it hasn\'t finished yet).
3523
+ * @summary Download a job\'s CSV artifact
3524
+ * @param {string} id Job id
3525
+ * @param {*} [options] Override http request option.
3526
+ * @throws {RequiredError}
3527
+ */
3528
+ downloadArtifact: async (id: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
3529
+ // verify required parameter 'id' is not null or undefined
3530
+ assertParamExists('downloadArtifact', 'id', id)
3531
+ const localVarPath = `/admin/job/{id}/artifact.csv`
3532
+ .replace(`{${"id"}}`, encodeURIComponent(String(id)));
3533
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
3534
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
3535
+ let baseOptions;
3536
+ if (configuration) {
3537
+ baseOptions = configuration.baseOptions;
3538
+ }
3539
+
3540
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
3541
+ const localVarHeaderParameter = {} as any;
3542
+ const localVarQueryParameter = {} as any;
3543
+
3544
+ // authentication DiscordAuth required
3545
+ // http bearer authentication required
3546
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
3547
+
3548
+ localVarHeaderParameter['Accept'] = 'text/csv';
3549
+
3401
3550
  setSearchParams(localVarUrlObj, localVarQueryParameter);
3402
3551
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
3403
3552
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -3513,6 +3662,19 @@ export const AdminJobsApiFp = function(configuration?: Configuration) {
3513
3662
  const localVarOperationServerBasePath = operationServerMap['AdminJobsApi.cancel']?.[localVarOperationServerIndex]?.url;
3514
3663
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
3515
3664
  },
3665
+ /**
3666
+ * Returns the CSV emitted by the job — typically one row per record the job touched. The first line is a header; subsequent lines are RFC-4180 escaped data rows. 404 when the job has no artifact (either it didn\'t emit one, or it hasn\'t finished yet).
3667
+ * @summary Download a job\'s CSV artifact
3668
+ * @param {string} id Job id
3669
+ * @param {*} [options] Override http request option.
3670
+ * @throws {RequiredError}
3671
+ */
3672
+ async downloadArtifact(id: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<string>> {
3673
+ const localVarAxiosArgs = await localVarAxiosParamCreator.downloadArtifact(id, options);
3674
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
3675
+ const localVarOperationServerBasePath = operationServerMap['AdminJobsApi.downloadArtifact']?.[localVarOperationServerIndex]?.url;
3676
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
3677
+ },
3516
3678
  /**
3517
3679
  * The polling target — the admin UI hits this every ~2 s while a job is running to update its progress bar.
3518
3680
  * @summary Get one async job
@@ -3559,6 +3721,16 @@ export const AdminJobsApiFactory = function (configuration?: Configuration, base
3559
3721
  cancel(id: string, options?: RawAxiosRequestConfig): AxiosPromise<void> {
3560
3722
  return localVarFp.cancel(id, options).then((request) => request(axios, basePath));
3561
3723
  },
3724
+ /**
3725
+ * Returns the CSV emitted by the job — typically one row per record the job touched. The first line is a header; subsequent lines are RFC-4180 escaped data rows. 404 when the job has no artifact (either it didn\'t emit one, or it hasn\'t finished yet).
3726
+ * @summary Download a job\'s CSV artifact
3727
+ * @param {string} id Job id
3728
+ * @param {*} [options] Override http request option.
3729
+ * @throws {RequiredError}
3730
+ */
3731
+ downloadArtifact(id: string, options?: RawAxiosRequestConfig): AxiosPromise<string> {
3732
+ return localVarFp.downloadArtifact(id, options).then((request) => request(axios, basePath));
3733
+ },
3562
3734
  /**
3563
3735
  * The polling target — the admin UI hits this every ~2 s while a job is running to update its progress bar.
3564
3736
  * @summary Get one async job
@@ -3598,6 +3770,17 @@ export class AdminJobsApi extends BaseAPI {
3598
3770
  return AdminJobsApiFp(this.configuration).cancel(id, options).then((request) => request(this.axios, this.basePath));
3599
3771
  }
3600
3772
 
3773
+ /**
3774
+ * Returns the CSV emitted by the job — typically one row per record the job touched. The first line is a header; subsequent lines are RFC-4180 escaped data rows. 404 when the job has no artifact (either it didn\'t emit one, or it hasn\'t finished yet).
3775
+ * @summary Download a job\'s CSV artifact
3776
+ * @param {string} id Job id
3777
+ * @param {*} [options] Override http request option.
3778
+ * @throws {RequiredError}
3779
+ */
3780
+ public downloadArtifact(id: string, options?: RawAxiosRequestConfig) {
3781
+ return AdminJobsApiFp(this.configuration).downloadArtifact(id, options).then((request) => request(this.axios, this.basePath));
3782
+ }
3783
+
3601
3784
  /**
3602
3785
  * The polling target — the admin UI hits this every ~2 s while a job is running to update its progress bar.
3603
3786
  * @summary Get one async job
@@ -3671,6 +3854,40 @@ export const AdminPlayersApiAxiosParamCreator = function (configuration?: Config
3671
3854
  options: localVarRequestOptions,
3672
3855
  };
3673
3856
  },
3857
+ /**
3858
+ * Submits an async job that walks every player row whose username is NULL and calls the Mojang profile API to resolve it. The job upserts both the player.username column and a player_username_history row. Returns immediately with a job id — poll GET /admin/job/{id} for progress and DELETE /admin/job/{id} to cancel. The final Admin_BackfillUsernamesResponse (processed/succeeded/failed counts) lands in the job\'s result_payload on COMPLETED. Mojang rate-limits at ~1 req/sec; a backfill of many rows can run for a while — cancel is honoured between rows.
3859
+ * @summary Start a username backfill job
3860
+ * @param {*} [options] Override http request option.
3861
+ * @throws {RequiredError}
3862
+ */
3863
+ backfillUsernames: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
3864
+ const localVarPath = `/admin/player/backfill-usernames`;
3865
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
3866
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
3867
+ let baseOptions;
3868
+ if (configuration) {
3869
+ baseOptions = configuration.baseOptions;
3870
+ }
3871
+
3872
+ const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
3873
+ const localVarHeaderParameter = {} as any;
3874
+ const localVarQueryParameter = {} as any;
3875
+
3876
+ // authentication DiscordAuth required
3877
+ // http bearer authentication required
3878
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
3879
+
3880
+ localVarHeaderParameter['Accept'] = 'application/json';
3881
+
3882
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
3883
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
3884
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
3885
+
3886
+ return {
3887
+ url: toPathString(localVarUrlObj),
3888
+ options: localVarRequestOptions,
3889
+ };
3890
+ },
3674
3891
  /**
3675
3892
  * Soft-revokes every currently active PROPAGATED player_punishment row whose source matches the supplied id. Exactly one of sourcePlayerId / sourceConnectionId must be set. Useful when staff identify a single source as a false positive (e.g. shared NAT, legitimate roommate) and want to undo every link it caused in one operation.
3676
3893
  * @summary Bulk-revoke PROPAGATED links by source
@@ -3785,6 +4002,49 @@ export const AdminPlayersApiAxiosParamCreator = function (configuration?: Config
3785
4002
  await setBearerAuthToObject(localVarHeaderParameter, configuration)
3786
4003
 
3787
4004
 
4005
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
4006
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
4007
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
4008
+
4009
+ return {
4010
+ url: toPathString(localVarUrlObj),
4011
+ options: localVarRequestOptions,
4012
+ };
4013
+ },
4014
+ /**
4015
+ * Returns the connection-shared player graph reachable from this player within {depth} hops. Mirrors the propagation walk used by ALT_PROPAGATION_SWEEP — promiscuous (likely shared-NAT) connections are pruned, alt-exemption rows cut the graph at exempted players. Depth is clamped server-side at 5. Used by the admin Graph tab to render an interactive explorer.
4016
+ * @summary Alt-graph traversal rooted at a player
4017
+ * @param {string} uuid Player Minecraft UUID
4018
+ * @param {number} [depth] Hop depth to walk. 1&#x3D;direct alts only; 5&#x3D;full sticky-trap radius. Default 2.
4019
+ * @param {*} [options] Override http request option.
4020
+ * @throws {RequiredError}
4021
+ */
4022
+ getAltGraph: async (uuid: string, depth?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
4023
+ // verify required parameter 'uuid' is not null or undefined
4024
+ assertParamExists('getAltGraph', 'uuid', uuid)
4025
+ const localVarPath = `/admin/player/{uuid}/alt-graph`
4026
+ .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
4027
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
4028
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
4029
+ let baseOptions;
4030
+ if (configuration) {
4031
+ baseOptions = configuration.baseOptions;
4032
+ }
4033
+
4034
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
4035
+ const localVarHeaderParameter = {} as any;
4036
+ const localVarQueryParameter = {} as any;
4037
+
4038
+ // authentication DiscordAuth required
4039
+ // http bearer authentication required
4040
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
4041
+
4042
+ if (depth !== undefined) {
4043
+ localVarQueryParameter['depth'] = depth;
4044
+ }
4045
+
4046
+ localVarHeaderParameter['Accept'] = 'application/json';
4047
+
3788
4048
  setSearchParams(localVarUrlObj, localVarQueryParameter);
3789
4049
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
3790
4050
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -4415,6 +4675,18 @@ export const AdminPlayersApiFp = function(configuration?: Configuration) {
4415
4675
  const localVarOperationServerBasePath = operationServerMap['AdminPlayersApi.addAltExemption']?.[localVarOperationServerIndex]?.url;
4416
4676
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
4417
4677
  },
4678
+ /**
4679
+ * Submits an async job that walks every player row whose username is NULL and calls the Mojang profile API to resolve it. The job upserts both the player.username column and a player_username_history row. Returns immediately with a job id — poll GET /admin/job/{id} for progress and DELETE /admin/job/{id} to cancel. The final Admin_BackfillUsernamesResponse (processed/succeeded/failed counts) lands in the job\'s result_payload on COMPLETED. Mojang rate-limits at ~1 req/sec; a backfill of many rows can run for a while — cancel is honoured between rows.
4680
+ * @summary Start a username backfill job
4681
+ * @param {*} [options] Override http request option.
4682
+ * @throws {RequiredError}
4683
+ */
4684
+ async backfillUsernames(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AdminAsyncJobStartResponse>> {
4685
+ const localVarAxiosArgs = await localVarAxiosParamCreator.backfillUsernames(options);
4686
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
4687
+ const localVarOperationServerBasePath = operationServerMap['AdminPlayersApi.backfillUsernames']?.[localVarOperationServerIndex]?.url;
4688
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
4689
+ },
4418
4690
  /**
4419
4691
  * Soft-revokes every currently active PROPAGATED player_punishment row whose source matches the supplied id. Exactly one of sourcePlayerId / sourceConnectionId must be set. Useful when staff identify a single source as a false positive (e.g. shared NAT, legitimate roommate) and want to undo every link it caused in one operation.
4420
4692
  * @summary Bulk-revoke PROPAGATED links by source
@@ -4456,6 +4728,20 @@ export const AdminPlayersApiFp = function(configuration?: Configuration) {
4456
4728
  const localVarOperationServerBasePath = operationServerMap['AdminPlayersApi.deletePlayerNote']?.[localVarOperationServerIndex]?.url;
4457
4729
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
4458
4730
  },
4731
+ /**
4732
+ * Returns the connection-shared player graph reachable from this player within {depth} hops. Mirrors the propagation walk used by ALT_PROPAGATION_SWEEP — promiscuous (likely shared-NAT) connections are pruned, alt-exemption rows cut the graph at exempted players. Depth is clamped server-side at 5. Used by the admin Graph tab to render an interactive explorer.
4733
+ * @summary Alt-graph traversal rooted at a player
4734
+ * @param {string} uuid Player Minecraft UUID
4735
+ * @param {number} [depth] Hop depth to walk. 1&#x3D;direct alts only; 5&#x3D;full sticky-trap radius. Default 2.
4736
+ * @param {*} [options] Override http request option.
4737
+ * @throws {RequiredError}
4738
+ */
4739
+ async getAltGraph(uuid: string, depth?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AdminAltGraph>> {
4740
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getAltGraph(uuid, depth, options);
4741
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
4742
+ const localVarOperationServerBasePath = operationServerMap['AdminPlayersApi.getAltGraph']?.[localVarOperationServerIndex]?.url;
4743
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
4744
+ },
4459
4745
  /**
4460
4746
  * Returns full detail for a single player including all known usernames and punishment scoring.
4461
4747
  * @summary Get player detail
@@ -4669,6 +4955,15 @@ export const AdminPlayersApiFactory = function (configuration?: Configuration, b
4669
4955
  addAltExemption(uuid: string, adminCreateAltExemptionRequest: AdminCreateAltExemptionRequest, options?: RawAxiosRequestConfig): AxiosPromise<void> {
4670
4956
  return localVarFp.addAltExemption(uuid, adminCreateAltExemptionRequest, options).then((request) => request(axios, basePath));
4671
4957
  },
4958
+ /**
4959
+ * Submits an async job that walks every player row whose username is NULL and calls the Mojang profile API to resolve it. The job upserts both the player.username column and a player_username_history row. Returns immediately with a job id — poll GET /admin/job/{id} for progress and DELETE /admin/job/{id} to cancel. The final Admin_BackfillUsernamesResponse (processed/succeeded/failed counts) lands in the job\'s result_payload on COMPLETED. Mojang rate-limits at ~1 req/sec; a backfill of many rows can run for a while — cancel is honoured between rows.
4960
+ * @summary Start a username backfill job
4961
+ * @param {*} [options] Override http request option.
4962
+ * @throws {RequiredError}
4963
+ */
4964
+ backfillUsernames(options?: RawAxiosRequestConfig): AxiosPromise<AdminAsyncJobStartResponse> {
4965
+ return localVarFp.backfillUsernames(options).then((request) => request(axios, basePath));
4966
+ },
4672
4967
  /**
4673
4968
  * Soft-revokes every currently active PROPAGATED player_punishment row whose source matches the supplied id. Exactly one of sourcePlayerId / sourceConnectionId must be set. Useful when staff identify a single source as a false positive (e.g. shared NAT, legitimate roommate) and want to undo every link it caused in one operation.
4674
4969
  * @summary Bulk-revoke PROPAGATED links by source
@@ -4701,6 +4996,17 @@ export const AdminPlayersApiFactory = function (configuration?: Configuration, b
4701
4996
  deletePlayerNote(uuid: string, noteId: number, options?: RawAxiosRequestConfig): AxiosPromise<void> {
4702
4997
  return localVarFp.deletePlayerNote(uuid, noteId, options).then((request) => request(axios, basePath));
4703
4998
  },
4999
+ /**
5000
+ * Returns the connection-shared player graph reachable from this player within {depth} hops. Mirrors the propagation walk used by ALT_PROPAGATION_SWEEP — promiscuous (likely shared-NAT) connections are pruned, alt-exemption rows cut the graph at exempted players. Depth is clamped server-side at 5. Used by the admin Graph tab to render an interactive explorer.
5001
+ * @summary Alt-graph traversal rooted at a player
5002
+ * @param {string} uuid Player Minecraft UUID
5003
+ * @param {number} [depth] Hop depth to walk. 1&#x3D;direct alts only; 5&#x3D;full sticky-trap radius. Default 2.
5004
+ * @param {*} [options] Override http request option.
5005
+ * @throws {RequiredError}
5006
+ */
5007
+ getAltGraph(uuid: string, depth?: number, options?: RawAxiosRequestConfig): AxiosPromise<AdminAltGraph> {
5008
+ return localVarFp.getAltGraph(uuid, depth, options).then((request) => request(axios, basePath));
5009
+ },
4704
5010
  /**
4705
5011
  * Returns full detail for a single player including all known usernames and punishment scoring.
4706
5012
  * @summary Get player detail
@@ -4871,6 +5177,16 @@ export class AdminPlayersApi extends BaseAPI {
4871
5177
  return AdminPlayersApiFp(this.configuration).addAltExemption(uuid, adminCreateAltExemptionRequest, options).then((request) => request(this.axios, this.basePath));
4872
5178
  }
4873
5179
 
5180
+ /**
5181
+ * Submits an async job that walks every player row whose username is NULL and calls the Mojang profile API to resolve it. The job upserts both the player.username column and a player_username_history row. Returns immediately with a job id — poll GET /admin/job/{id} for progress and DELETE /admin/job/{id} to cancel. The final Admin_BackfillUsernamesResponse (processed/succeeded/failed counts) lands in the job\'s result_payload on COMPLETED. Mojang rate-limits at ~1 req/sec; a backfill of many rows can run for a while — cancel is honoured between rows.
5182
+ * @summary Start a username backfill job
5183
+ * @param {*} [options] Override http request option.
5184
+ * @throws {RequiredError}
5185
+ */
5186
+ public backfillUsernames(options?: RawAxiosRequestConfig) {
5187
+ return AdminPlayersApiFp(this.configuration).backfillUsernames(options).then((request) => request(this.axios, this.basePath));
5188
+ }
5189
+
4874
5190
  /**
4875
5191
  * Soft-revokes every currently active PROPAGATED player_punishment row whose source matches the supplied id. Exactly one of sourcePlayerId / sourceConnectionId must be set. Useful when staff identify a single source as a false positive (e.g. shared NAT, legitimate roommate) and want to undo every link it caused in one operation.
4876
5192
  * @summary Bulk-revoke PROPAGATED links by source
@@ -4906,6 +5222,18 @@ export class AdminPlayersApi extends BaseAPI {
4906
5222
  return AdminPlayersApiFp(this.configuration).deletePlayerNote(uuid, noteId, options).then((request) => request(this.axios, this.basePath));
4907
5223
  }
4908
5224
 
5225
+ /**
5226
+ * Returns the connection-shared player graph reachable from this player within {depth} hops. Mirrors the propagation walk used by ALT_PROPAGATION_SWEEP — promiscuous (likely shared-NAT) connections are pruned, alt-exemption rows cut the graph at exempted players. Depth is clamped server-side at 5. Used by the admin Graph tab to render an interactive explorer.
5227
+ * @summary Alt-graph traversal rooted at a player
5228
+ * @param {string} uuid Player Minecraft UUID
5229
+ * @param {number} [depth] Hop depth to walk. 1&#x3D;direct alts only; 5&#x3D;full sticky-trap radius. Default 2.
5230
+ * @param {*} [options] Override http request option.
5231
+ * @throws {RequiredError}
5232
+ */
5233
+ public getAltGraph(uuid: string, depth?: number, options?: RawAxiosRequestConfig) {
5234
+ return AdminPlayersApiFp(this.configuration).getAltGraph(uuid, depth, options).then((request) => request(this.axios, this.basePath));
5235
+ }
5236
+
4909
5237
  /**
4910
5238
  * Returns full detail for a single player including all known usernames and punishment scoring.
4911
5239
  * @summary Get player detail
@@ -5199,6 +5527,44 @@ export const AdminPunishmentsApiAxiosParamCreator = function (configuration?: Co
5199
5527
  options: localVarRequestOptions,
5200
5528
  };
5201
5529
  },
5530
+ /**
5531
+ * Returns the active DIRECT player_punishment UUIDs and the live connection_punishment IPs for a punishment. Used by the admin edit dialog to render the editable participant list. PROPAGATED links are excluded — they\'re an enforcement detail, not part of \'who the admin attached to this punishment\'.
5532
+ * @summary List a punishment\'s current participants
5533
+ * @param {number} id Punishment id
5534
+ * @param {*} [options] Override http request option.
5535
+ * @throws {RequiredError}
5536
+ */
5537
+ getPunishmentTargets: async (id: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
5538
+ // verify required parameter 'id' is not null or undefined
5539
+ assertParamExists('getPunishmentTargets', 'id', id)
5540
+ const localVarPath = `/admin/punishment/{id}/targets`
5541
+ .replace(`{${"id"}}`, encodeURIComponent(String(id)));
5542
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
5543
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
5544
+ let baseOptions;
5545
+ if (configuration) {
5546
+ baseOptions = configuration.baseOptions;
5547
+ }
5548
+
5549
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
5550
+ const localVarHeaderParameter = {} as any;
5551
+ const localVarQueryParameter = {} as any;
5552
+
5553
+ // authentication DiscordAuth required
5554
+ // http bearer authentication required
5555
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
5556
+
5557
+ localVarHeaderParameter['Accept'] = 'application/json';
5558
+
5559
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
5560
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
5561
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
5562
+
5563
+ return {
5564
+ url: toPathString(localVarUrlObj),
5565
+ options: localVarRequestOptions,
5566
+ };
5567
+ },
5202
5568
  /**
5203
5569
  * Returns a paginated list of punishments with optional filtering by player UUID, username, IP address, type, and date range.
5204
5570
  * @summary List punishments
@@ -5270,6 +5636,40 @@ export const AdminPunishmentsApiAxiosParamCreator = function (configuration?: Co
5270
5636
  options: localVarRequestOptions,
5271
5637
  };
5272
5638
  },
5639
+ /**
5640
+ * Submits an async job that walks every player and re-runs the aggressive-mode propagation logic (tier-1 own-IP plus tier-2 alt-driven). Useful after toggling aggressive-mode on, or after a propagation-rule change, to backfill PROPAGATED player_punishment rows that would otherwise only appear on each player\'s next login. Idempotent — ON CONFLICT DO NOTHING. Returns immediately with a job id; poll GET /admin/job/{id} for progress and DELETE /admin/job/{id} to cancel.
5641
+ * @summary Start an alt-propagation sweep job
5642
+ * @param {*} [options] Override http request option.
5643
+ * @throws {RequiredError}
5644
+ */
5645
+ propagationSweep: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
5646
+ const localVarPath = `/admin/punishment/propagation-sweep`;
5647
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
5648
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
5649
+ let baseOptions;
5650
+ if (configuration) {
5651
+ baseOptions = configuration.baseOptions;
5652
+ }
5653
+
5654
+ const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
5655
+ const localVarHeaderParameter = {} as any;
5656
+ const localVarQueryParameter = {} as any;
5657
+
5658
+ // authentication DiscordAuth required
5659
+ // http bearer authentication required
5660
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
5661
+
5662
+ localVarHeaderParameter['Accept'] = 'application/json';
5663
+
5664
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
5665
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
5666
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
5667
+
5668
+ return {
5669
+ url: toPathString(localVarUrlObj),
5670
+ options: localVarRequestOptions,
5671
+ };
5672
+ },
5273
5673
  /**
5274
5674
  * Search for players by UUID or username, or look up all players associated with an IP address.
5275
5675
  * @summary Search punishment targets
@@ -5360,6 +5760,19 @@ export const AdminPunishmentsApiFp = function(configuration?: Configuration) {
5360
5760
  const localVarOperationServerBasePath = operationServerMap['AdminPunishmentsApi.editPunishment']?.[localVarOperationServerIndex]?.url;
5361
5761
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
5362
5762
  },
5763
+ /**
5764
+ * Returns the active DIRECT player_punishment UUIDs and the live connection_punishment IPs for a punishment. Used by the admin edit dialog to render the editable participant list. PROPAGATED links are excluded — they\'re an enforcement detail, not part of \'who the admin attached to this punishment\'.
5765
+ * @summary List a punishment\'s current participants
5766
+ * @param {number} id Punishment id
5767
+ * @param {*} [options] Override http request option.
5768
+ * @throws {RequiredError}
5769
+ */
5770
+ async getPunishmentTargets(id: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AdminPunishmentTargets>> {
5771
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getPunishmentTargets(id, options);
5772
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
5773
+ const localVarOperationServerBasePath = operationServerMap['AdminPunishmentsApi.getPunishmentTargets']?.[localVarOperationServerIndex]?.url;
5774
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
5775
+ },
5363
5776
  /**
5364
5777
  * Returns a paginated list of punishments with optional filtering by player UUID, username, IP address, type, and date range.
5365
5778
  * @summary List punishments
@@ -5379,6 +5792,18 @@ export const AdminPunishmentsApiFp = function(configuration?: Configuration) {
5379
5792
  const localVarOperationServerBasePath = operationServerMap['AdminPunishmentsApi.getPunishments']?.[localVarOperationServerIndex]?.url;
5380
5793
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
5381
5794
  },
5795
+ /**
5796
+ * Submits an async job that walks every player and re-runs the aggressive-mode propagation logic (tier-1 own-IP plus tier-2 alt-driven). Useful after toggling aggressive-mode on, or after a propagation-rule change, to backfill PROPAGATED player_punishment rows that would otherwise only appear on each player\'s next login. Idempotent — ON CONFLICT DO NOTHING. Returns immediately with a job id; poll GET /admin/job/{id} for progress and DELETE /admin/job/{id} to cancel.
5797
+ * @summary Start an alt-propagation sweep job
5798
+ * @param {*} [options] Override http request option.
5799
+ * @throws {RequiredError}
5800
+ */
5801
+ async propagationSweep(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AdminAsyncJobStartResponse>> {
5802
+ const localVarAxiosArgs = await localVarAxiosParamCreator.propagationSweep(options);
5803
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
5804
+ const localVarOperationServerBasePath = operationServerMap['AdminPunishmentsApi.propagationSweep']?.[localVarOperationServerIndex]?.url;
5805
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
5806
+ },
5382
5807
  /**
5383
5808
  * Search for players by UUID or username, or look up all players associated with an IP address.
5384
5809
  * @summary Search punishment targets
@@ -5432,6 +5857,16 @@ export const AdminPunishmentsApiFactory = function (configuration?: Configuratio
5432
5857
  editPunishment(id: number, adminUpdatePunishmentRequest: AdminUpdatePunishmentRequest, options?: RawAxiosRequestConfig): AxiosPromise<void> {
5433
5858
  return localVarFp.editPunishment(id, adminUpdatePunishmentRequest, options).then((request) => request(axios, basePath));
5434
5859
  },
5860
+ /**
5861
+ * Returns the active DIRECT player_punishment UUIDs and the live connection_punishment IPs for a punishment. Used by the admin edit dialog to render the editable participant list. PROPAGATED links are excluded — they\'re an enforcement detail, not part of \'who the admin attached to this punishment\'.
5862
+ * @summary List a punishment\'s current participants
5863
+ * @param {number} id Punishment id
5864
+ * @param {*} [options] Override http request option.
5865
+ * @throws {RequiredError}
5866
+ */
5867
+ getPunishmentTargets(id: number, options?: RawAxiosRequestConfig): AxiosPromise<AdminPunishmentTargets> {
5868
+ return localVarFp.getPunishmentTargets(id, options).then((request) => request(axios, basePath));
5869
+ },
5435
5870
  /**
5436
5871
  * Returns a paginated list of punishments with optional filtering by player UUID, username, IP address, type, and date range.
5437
5872
  * @summary List punishments
@@ -5448,6 +5883,15 @@ export const AdminPunishmentsApiFactory = function (configuration?: Configuratio
5448
5883
  getPunishments(pageable: Pageable, uuid?: string | null, username?: string | null, ipAddress?: string | null, type?: Array<PunishmentType> | null, issuedAfter?: number | null, issuedBefore?: number | null, options?: RawAxiosRequestConfig): AxiosPromise<PageAdminPunishmentListItem> {
5449
5884
  return localVarFp.getPunishments(pageable, uuid, username, ipAddress, type, issuedAfter, issuedBefore, options).then((request) => request(axios, basePath));
5450
5885
  },
5886
+ /**
5887
+ * Submits an async job that walks every player and re-runs the aggressive-mode propagation logic (tier-1 own-IP plus tier-2 alt-driven). Useful after toggling aggressive-mode on, or after a propagation-rule change, to backfill PROPAGATED player_punishment rows that would otherwise only appear on each player\'s next login. Idempotent — ON CONFLICT DO NOTHING. Returns immediately with a job id; poll GET /admin/job/{id} for progress and DELETE /admin/job/{id} to cancel.
5888
+ * @summary Start an alt-propagation sweep job
5889
+ * @param {*} [options] Override http request option.
5890
+ * @throws {RequiredError}
5891
+ */
5892
+ propagationSweep(options?: RawAxiosRequestConfig): AxiosPromise<AdminAsyncJobStartResponse> {
5893
+ return localVarFp.propagationSweep(options).then((request) => request(axios, basePath));
5894
+ },
5451
5895
  /**
5452
5896
  * Search for players by UUID or username, or look up all players associated with an IP address.
5453
5897
  * @summary Search punishment targets
@@ -5499,6 +5943,17 @@ export class AdminPunishmentsApi extends BaseAPI {
5499
5943
  return AdminPunishmentsApiFp(this.configuration).editPunishment(id, adminUpdatePunishmentRequest, options).then((request) => request(this.axios, this.basePath));
5500
5944
  }
5501
5945
 
5946
+ /**
5947
+ * Returns the active DIRECT player_punishment UUIDs and the live connection_punishment IPs for a punishment. Used by the admin edit dialog to render the editable participant list. PROPAGATED links are excluded — they\'re an enforcement detail, not part of \'who the admin attached to this punishment\'.
5948
+ * @summary List a punishment\'s current participants
5949
+ * @param {number} id Punishment id
5950
+ * @param {*} [options] Override http request option.
5951
+ * @throws {RequiredError}
5952
+ */
5953
+ public getPunishmentTargets(id: number, options?: RawAxiosRequestConfig) {
5954
+ return AdminPunishmentsApiFp(this.configuration).getPunishmentTargets(id, options).then((request) => request(this.axios, this.basePath));
5955
+ }
5956
+
5502
5957
  /**
5503
5958
  * Returns a paginated list of punishments with optional filtering by player UUID, username, IP address, type, and date range.
5504
5959
  * @summary List punishments
@@ -5516,6 +5971,16 @@ export class AdminPunishmentsApi extends BaseAPI {
5516
5971
  return AdminPunishmentsApiFp(this.configuration).getPunishments(pageable, uuid, username, ipAddress, type, issuedAfter, issuedBefore, options).then((request) => request(this.axios, this.basePath));
5517
5972
  }
5518
5973
 
5974
+ /**
5975
+ * Submits an async job that walks every player and re-runs the aggressive-mode propagation logic (tier-1 own-IP plus tier-2 alt-driven). Useful after toggling aggressive-mode on, or after a propagation-rule change, to backfill PROPAGATED player_punishment rows that would otherwise only appear on each player\'s next login. Idempotent — ON CONFLICT DO NOTHING. Returns immediately with a job id; poll GET /admin/job/{id} for progress and DELETE /admin/job/{id} to cancel.
5976
+ * @summary Start an alt-propagation sweep job
5977
+ * @param {*} [options] Override http request option.
5978
+ * @throws {RequiredError}
5979
+ */
5980
+ public propagationSweep(options?: RawAxiosRequestConfig) {
5981
+ return AdminPunishmentsApiFp(this.configuration).propagationSweep(options).then((request) => request(this.axios, this.basePath));
5982
+ }
5983
+
5519
5984
  /**
5520
5985
  * Search for players by UUID or username, or look up all players associated with an IP address.
5521
5986
  * @summary Search punishment targets
package/base.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: 4.0.0
7
+ * The version of the OpenAPI document: 4.5.0
8
8
  *
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).