@rebornteam/reborn-api 4.0.0 → 4.6.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.6.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
  */
@@ -1426,6 +1537,43 @@ export interface PlayerSessionEndRequest {
1426
1537
  */
1427
1538
  'serverSessionId': string;
1428
1539
  }
1540
+ /**
1541
+ * Result of POST /v1/player-session/end. Confirms whether a session was closed and returns that session\'s lifetime plus the player\'s refreshed aggregate stats.
1542
+ */
1543
+ export interface PlayerSessionEndResponse {
1544
+ /**
1545
+ * Player Minecraft UUID, echoed from the request
1546
+ */
1547
+ 'playerUuid': string;
1548
+ /**
1549
+ * Server session id the player was on, echoed from the request
1550
+ */
1551
+ 'serverSessionId': string;
1552
+ /**
1553
+ * True when an active session was found and closed by this call; false on a no-op (no active session existed, e.g. a duplicate/retried end event).
1554
+ */
1555
+ 'sessionClosed': boolean;
1556
+ /**
1557
+ * Id of the session that was closed. Null on a no-op.
1558
+ */
1559
+ 'sessionId'?: string | null;
1560
+ /**
1561
+ * When the closed session was opened (ISO-8601). Null on a no-op.
1562
+ */
1563
+ 'startedAt'?: string | null;
1564
+ /**
1565
+ * When the session was closed (ISO-8601), i.e. now. Null on a no-op.
1566
+ */
1567
+ 'endedAt'?: string | null;
1568
+ /**
1569
+ * Length of the closed session in seconds (endedAt - startedAt). Null on a no-op.
1570
+ */
1571
+ 'durationSeconds'?: number | null;
1572
+ /**
1573
+ * Player\'s aggregate session stats, recomputed after this session was closed (so the just-ended session is included in the totals).
1574
+ */
1575
+ 'sessionStats': AdminPlayerSessionStats;
1576
+ }
1429
1577
  /**
1430
1578
  * Unified player-join request. Runs the full authorization check (VPN, bypass, punishments) and conditionally opens a player_session for the allowed players.
1431
1579
  */
@@ -3398,6 +3546,44 @@ export const AdminJobsApiAxiosParamCreator = function (configuration?: Configura
3398
3546
  await setBearerAuthToObject(localVarHeaderParameter, configuration)
3399
3547
 
3400
3548
 
3549
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
3550
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
3551
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
3552
+
3553
+ return {
3554
+ url: toPathString(localVarUrlObj),
3555
+ options: localVarRequestOptions,
3556
+ };
3557
+ },
3558
+ /**
3559
+ * 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).
3560
+ * @summary Download a job\'s CSV artifact
3561
+ * @param {string} id Job id
3562
+ * @param {*} [options] Override http request option.
3563
+ * @throws {RequiredError}
3564
+ */
3565
+ downloadArtifact: async (id: string, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
3566
+ // verify required parameter 'id' is not null or undefined
3567
+ assertParamExists('downloadArtifact', 'id', id)
3568
+ const localVarPath = `/admin/job/{id}/artifact.csv`
3569
+ .replace(`{${"id"}}`, encodeURIComponent(String(id)));
3570
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
3571
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
3572
+ let baseOptions;
3573
+ if (configuration) {
3574
+ baseOptions = configuration.baseOptions;
3575
+ }
3576
+
3577
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
3578
+ const localVarHeaderParameter = {} as any;
3579
+ const localVarQueryParameter = {} as any;
3580
+
3581
+ // authentication DiscordAuth required
3582
+ // http bearer authentication required
3583
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
3584
+
3585
+ localVarHeaderParameter['Accept'] = 'text/csv';
3586
+
3401
3587
  setSearchParams(localVarUrlObj, localVarQueryParameter);
3402
3588
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
3403
3589
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -3513,6 +3699,19 @@ export const AdminJobsApiFp = function(configuration?: Configuration) {
3513
3699
  const localVarOperationServerBasePath = operationServerMap['AdminJobsApi.cancel']?.[localVarOperationServerIndex]?.url;
3514
3700
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
3515
3701
  },
3702
+ /**
3703
+ * 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).
3704
+ * @summary Download a job\'s CSV artifact
3705
+ * @param {string} id Job id
3706
+ * @param {*} [options] Override http request option.
3707
+ * @throws {RequiredError}
3708
+ */
3709
+ async downloadArtifact(id: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<string>> {
3710
+ const localVarAxiosArgs = await localVarAxiosParamCreator.downloadArtifact(id, options);
3711
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
3712
+ const localVarOperationServerBasePath = operationServerMap['AdminJobsApi.downloadArtifact']?.[localVarOperationServerIndex]?.url;
3713
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
3714
+ },
3516
3715
  /**
3517
3716
  * The polling target — the admin UI hits this every ~2 s while a job is running to update its progress bar.
3518
3717
  * @summary Get one async job
@@ -3559,6 +3758,16 @@ export const AdminJobsApiFactory = function (configuration?: Configuration, base
3559
3758
  cancel(id: string, options?: RawAxiosRequestConfig): AxiosPromise<void> {
3560
3759
  return localVarFp.cancel(id, options).then((request) => request(axios, basePath));
3561
3760
  },
3761
+ /**
3762
+ * 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).
3763
+ * @summary Download a job\'s CSV artifact
3764
+ * @param {string} id Job id
3765
+ * @param {*} [options] Override http request option.
3766
+ * @throws {RequiredError}
3767
+ */
3768
+ downloadArtifact(id: string, options?: RawAxiosRequestConfig): AxiosPromise<string> {
3769
+ return localVarFp.downloadArtifact(id, options).then((request) => request(axios, basePath));
3770
+ },
3562
3771
  /**
3563
3772
  * The polling target — the admin UI hits this every ~2 s while a job is running to update its progress bar.
3564
3773
  * @summary Get one async job
@@ -3598,6 +3807,17 @@ export class AdminJobsApi extends BaseAPI {
3598
3807
  return AdminJobsApiFp(this.configuration).cancel(id, options).then((request) => request(this.axios, this.basePath));
3599
3808
  }
3600
3809
 
3810
+ /**
3811
+ * 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).
3812
+ * @summary Download a job\'s CSV artifact
3813
+ * @param {string} id Job id
3814
+ * @param {*} [options] Override http request option.
3815
+ * @throws {RequiredError}
3816
+ */
3817
+ public downloadArtifact(id: string, options?: RawAxiosRequestConfig) {
3818
+ return AdminJobsApiFp(this.configuration).downloadArtifact(id, options).then((request) => request(this.axios, this.basePath));
3819
+ }
3820
+
3601
3821
  /**
3602
3822
  * The polling target — the admin UI hits this every ~2 s while a job is running to update its progress bar.
3603
3823
  * @summary Get one async job
@@ -3671,6 +3891,40 @@ export const AdminPlayersApiAxiosParamCreator = function (configuration?: Config
3671
3891
  options: localVarRequestOptions,
3672
3892
  };
3673
3893
  },
3894
+ /**
3895
+ * 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.
3896
+ * @summary Start a username backfill job
3897
+ * @param {*} [options] Override http request option.
3898
+ * @throws {RequiredError}
3899
+ */
3900
+ backfillUsernames: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
3901
+ const localVarPath = `/admin/player/backfill-usernames`;
3902
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
3903
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
3904
+ let baseOptions;
3905
+ if (configuration) {
3906
+ baseOptions = configuration.baseOptions;
3907
+ }
3908
+
3909
+ const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
3910
+ const localVarHeaderParameter = {} as any;
3911
+ const localVarQueryParameter = {} as any;
3912
+
3913
+ // authentication DiscordAuth required
3914
+ // http bearer authentication required
3915
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
3916
+
3917
+ localVarHeaderParameter['Accept'] = 'application/json';
3918
+
3919
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
3920
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
3921
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
3922
+
3923
+ return {
3924
+ url: toPathString(localVarUrlObj),
3925
+ options: localVarRequestOptions,
3926
+ };
3927
+ },
3674
3928
  /**
3675
3929
  * 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
3930
  * @summary Bulk-revoke PROPAGATED links by source
@@ -3785,6 +4039,49 @@ export const AdminPlayersApiAxiosParamCreator = function (configuration?: Config
3785
4039
  await setBearerAuthToObject(localVarHeaderParameter, configuration)
3786
4040
 
3787
4041
 
4042
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
4043
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
4044
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
4045
+
4046
+ return {
4047
+ url: toPathString(localVarUrlObj),
4048
+ options: localVarRequestOptions,
4049
+ };
4050
+ },
4051
+ /**
4052
+ * 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.
4053
+ * @summary Alt-graph traversal rooted at a player
4054
+ * @param {string} uuid Player Minecraft UUID
4055
+ * @param {number} [depth] Hop depth to walk. 1&#x3D;direct alts only; 5&#x3D;full sticky-trap radius. Default 2.
4056
+ * @param {*} [options] Override http request option.
4057
+ * @throws {RequiredError}
4058
+ */
4059
+ getAltGraph: async (uuid: string, depth?: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
4060
+ // verify required parameter 'uuid' is not null or undefined
4061
+ assertParamExists('getAltGraph', 'uuid', uuid)
4062
+ const localVarPath = `/admin/player/{uuid}/alt-graph`
4063
+ .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
4064
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
4065
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
4066
+ let baseOptions;
4067
+ if (configuration) {
4068
+ baseOptions = configuration.baseOptions;
4069
+ }
4070
+
4071
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
4072
+ const localVarHeaderParameter = {} as any;
4073
+ const localVarQueryParameter = {} as any;
4074
+
4075
+ // authentication DiscordAuth required
4076
+ // http bearer authentication required
4077
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
4078
+
4079
+ if (depth !== undefined) {
4080
+ localVarQueryParameter['depth'] = depth;
4081
+ }
4082
+
4083
+ localVarHeaderParameter['Accept'] = 'application/json';
4084
+
3788
4085
  setSearchParams(localVarUrlObj, localVarQueryParameter);
3789
4086
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
3790
4087
  localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
@@ -4415,6 +4712,18 @@ export const AdminPlayersApiFp = function(configuration?: Configuration) {
4415
4712
  const localVarOperationServerBasePath = operationServerMap['AdminPlayersApi.addAltExemption']?.[localVarOperationServerIndex]?.url;
4416
4713
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
4417
4714
  },
4715
+ /**
4716
+ * 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.
4717
+ * @summary Start a username backfill job
4718
+ * @param {*} [options] Override http request option.
4719
+ * @throws {RequiredError}
4720
+ */
4721
+ async backfillUsernames(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AdminAsyncJobStartResponse>> {
4722
+ const localVarAxiosArgs = await localVarAxiosParamCreator.backfillUsernames(options);
4723
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
4724
+ const localVarOperationServerBasePath = operationServerMap['AdminPlayersApi.backfillUsernames']?.[localVarOperationServerIndex]?.url;
4725
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
4726
+ },
4418
4727
  /**
4419
4728
  * 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
4729
  * @summary Bulk-revoke PROPAGATED links by source
@@ -4456,6 +4765,20 @@ export const AdminPlayersApiFp = function(configuration?: Configuration) {
4456
4765
  const localVarOperationServerBasePath = operationServerMap['AdminPlayersApi.deletePlayerNote']?.[localVarOperationServerIndex]?.url;
4457
4766
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
4458
4767
  },
4768
+ /**
4769
+ * 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.
4770
+ * @summary Alt-graph traversal rooted at a player
4771
+ * @param {string} uuid Player Minecraft UUID
4772
+ * @param {number} [depth] Hop depth to walk. 1&#x3D;direct alts only; 5&#x3D;full sticky-trap radius. Default 2.
4773
+ * @param {*} [options] Override http request option.
4774
+ * @throws {RequiredError}
4775
+ */
4776
+ async getAltGraph(uuid: string, depth?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AdminAltGraph>> {
4777
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getAltGraph(uuid, depth, options);
4778
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
4779
+ const localVarOperationServerBasePath = operationServerMap['AdminPlayersApi.getAltGraph']?.[localVarOperationServerIndex]?.url;
4780
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
4781
+ },
4459
4782
  /**
4460
4783
  * Returns full detail for a single player including all known usernames and punishment scoring.
4461
4784
  * @summary Get player detail
@@ -4669,6 +4992,15 @@ export const AdminPlayersApiFactory = function (configuration?: Configuration, b
4669
4992
  addAltExemption(uuid: string, adminCreateAltExemptionRequest: AdminCreateAltExemptionRequest, options?: RawAxiosRequestConfig): AxiosPromise<void> {
4670
4993
  return localVarFp.addAltExemption(uuid, adminCreateAltExemptionRequest, options).then((request) => request(axios, basePath));
4671
4994
  },
4995
+ /**
4996
+ * 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.
4997
+ * @summary Start a username backfill job
4998
+ * @param {*} [options] Override http request option.
4999
+ * @throws {RequiredError}
5000
+ */
5001
+ backfillUsernames(options?: RawAxiosRequestConfig): AxiosPromise<AdminAsyncJobStartResponse> {
5002
+ return localVarFp.backfillUsernames(options).then((request) => request(axios, basePath));
5003
+ },
4672
5004
  /**
4673
5005
  * 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
5006
  * @summary Bulk-revoke PROPAGATED links by source
@@ -4701,6 +5033,17 @@ export const AdminPlayersApiFactory = function (configuration?: Configuration, b
4701
5033
  deletePlayerNote(uuid: string, noteId: number, options?: RawAxiosRequestConfig): AxiosPromise<void> {
4702
5034
  return localVarFp.deletePlayerNote(uuid, noteId, options).then((request) => request(axios, basePath));
4703
5035
  },
5036
+ /**
5037
+ * 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.
5038
+ * @summary Alt-graph traversal rooted at a player
5039
+ * @param {string} uuid Player Minecraft UUID
5040
+ * @param {number} [depth] Hop depth to walk. 1&#x3D;direct alts only; 5&#x3D;full sticky-trap radius. Default 2.
5041
+ * @param {*} [options] Override http request option.
5042
+ * @throws {RequiredError}
5043
+ */
5044
+ getAltGraph(uuid: string, depth?: number, options?: RawAxiosRequestConfig): AxiosPromise<AdminAltGraph> {
5045
+ return localVarFp.getAltGraph(uuid, depth, options).then((request) => request(axios, basePath));
5046
+ },
4704
5047
  /**
4705
5048
  * Returns full detail for a single player including all known usernames and punishment scoring.
4706
5049
  * @summary Get player detail
@@ -4871,6 +5214,16 @@ export class AdminPlayersApi extends BaseAPI {
4871
5214
  return AdminPlayersApiFp(this.configuration).addAltExemption(uuid, adminCreateAltExemptionRequest, options).then((request) => request(this.axios, this.basePath));
4872
5215
  }
4873
5216
 
5217
+ /**
5218
+ * 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.
5219
+ * @summary Start a username backfill job
5220
+ * @param {*} [options] Override http request option.
5221
+ * @throws {RequiredError}
5222
+ */
5223
+ public backfillUsernames(options?: RawAxiosRequestConfig) {
5224
+ return AdminPlayersApiFp(this.configuration).backfillUsernames(options).then((request) => request(this.axios, this.basePath));
5225
+ }
5226
+
4874
5227
  /**
4875
5228
  * 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
5229
  * @summary Bulk-revoke PROPAGATED links by source
@@ -4906,6 +5259,18 @@ export class AdminPlayersApi extends BaseAPI {
4906
5259
  return AdminPlayersApiFp(this.configuration).deletePlayerNote(uuid, noteId, options).then((request) => request(this.axios, this.basePath));
4907
5260
  }
4908
5261
 
5262
+ /**
5263
+ * 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.
5264
+ * @summary Alt-graph traversal rooted at a player
5265
+ * @param {string} uuid Player Minecraft UUID
5266
+ * @param {number} [depth] Hop depth to walk. 1&#x3D;direct alts only; 5&#x3D;full sticky-trap radius. Default 2.
5267
+ * @param {*} [options] Override http request option.
5268
+ * @throws {RequiredError}
5269
+ */
5270
+ public getAltGraph(uuid: string, depth?: number, options?: RawAxiosRequestConfig) {
5271
+ return AdminPlayersApiFp(this.configuration).getAltGraph(uuid, depth, options).then((request) => request(this.axios, this.basePath));
5272
+ }
5273
+
4909
5274
  /**
4910
5275
  * Returns full detail for a single player including all known usernames and punishment scoring.
4911
5276
  * @summary Get player detail
@@ -5199,6 +5564,44 @@ export const AdminPunishmentsApiAxiosParamCreator = function (configuration?: Co
5199
5564
  options: localVarRequestOptions,
5200
5565
  };
5201
5566
  },
5567
+ /**
5568
+ * 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\'.
5569
+ * @summary List a punishment\'s current participants
5570
+ * @param {number} id Punishment id
5571
+ * @param {*} [options] Override http request option.
5572
+ * @throws {RequiredError}
5573
+ */
5574
+ getPunishmentTargets: async (id: number, options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
5575
+ // verify required parameter 'id' is not null or undefined
5576
+ assertParamExists('getPunishmentTargets', 'id', id)
5577
+ const localVarPath = `/admin/punishment/{id}/targets`
5578
+ .replace(`{${"id"}}`, encodeURIComponent(String(id)));
5579
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
5580
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
5581
+ let baseOptions;
5582
+ if (configuration) {
5583
+ baseOptions = configuration.baseOptions;
5584
+ }
5585
+
5586
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
5587
+ const localVarHeaderParameter = {} as any;
5588
+ const localVarQueryParameter = {} as any;
5589
+
5590
+ // authentication DiscordAuth required
5591
+ // http bearer authentication required
5592
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
5593
+
5594
+ localVarHeaderParameter['Accept'] = 'application/json';
5595
+
5596
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
5597
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
5598
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
5599
+
5600
+ return {
5601
+ url: toPathString(localVarUrlObj),
5602
+ options: localVarRequestOptions,
5603
+ };
5604
+ },
5202
5605
  /**
5203
5606
  * Returns a paginated list of punishments with optional filtering by player UUID, username, IP address, type, and date range.
5204
5607
  * @summary List punishments
@@ -5270,6 +5673,40 @@ export const AdminPunishmentsApiAxiosParamCreator = function (configuration?: Co
5270
5673
  options: localVarRequestOptions,
5271
5674
  };
5272
5675
  },
5676
+ /**
5677
+ * 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.
5678
+ * @summary Start an alt-propagation sweep job
5679
+ * @param {*} [options] Override http request option.
5680
+ * @throws {RequiredError}
5681
+ */
5682
+ propagationSweep: async (options: RawAxiosRequestConfig = {}): Promise<RequestArgs> => {
5683
+ const localVarPath = `/admin/punishment/propagation-sweep`;
5684
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
5685
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
5686
+ let baseOptions;
5687
+ if (configuration) {
5688
+ baseOptions = configuration.baseOptions;
5689
+ }
5690
+
5691
+ const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
5692
+ const localVarHeaderParameter = {} as any;
5693
+ const localVarQueryParameter = {} as any;
5694
+
5695
+ // authentication DiscordAuth required
5696
+ // http bearer authentication required
5697
+ await setBearerAuthToObject(localVarHeaderParameter, configuration)
5698
+
5699
+ localVarHeaderParameter['Accept'] = 'application/json';
5700
+
5701
+ setSearchParams(localVarUrlObj, localVarQueryParameter);
5702
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
5703
+ localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
5704
+
5705
+ return {
5706
+ url: toPathString(localVarUrlObj),
5707
+ options: localVarRequestOptions,
5708
+ };
5709
+ },
5273
5710
  /**
5274
5711
  * Search for players by UUID or username, or look up all players associated with an IP address.
5275
5712
  * @summary Search punishment targets
@@ -5360,6 +5797,19 @@ export const AdminPunishmentsApiFp = function(configuration?: Configuration) {
5360
5797
  const localVarOperationServerBasePath = operationServerMap['AdminPunishmentsApi.editPunishment']?.[localVarOperationServerIndex]?.url;
5361
5798
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
5362
5799
  },
5800
+ /**
5801
+ * 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\'.
5802
+ * @summary List a punishment\'s current participants
5803
+ * @param {number} id Punishment id
5804
+ * @param {*} [options] Override http request option.
5805
+ * @throws {RequiredError}
5806
+ */
5807
+ async getPunishmentTargets(id: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AdminPunishmentTargets>> {
5808
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getPunishmentTargets(id, options);
5809
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
5810
+ const localVarOperationServerBasePath = operationServerMap['AdminPunishmentsApi.getPunishmentTargets']?.[localVarOperationServerIndex]?.url;
5811
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
5812
+ },
5363
5813
  /**
5364
5814
  * Returns a paginated list of punishments with optional filtering by player UUID, username, IP address, type, and date range.
5365
5815
  * @summary List punishments
@@ -5379,6 +5829,18 @@ export const AdminPunishmentsApiFp = function(configuration?: Configuration) {
5379
5829
  const localVarOperationServerBasePath = operationServerMap['AdminPunishmentsApi.getPunishments']?.[localVarOperationServerIndex]?.url;
5380
5830
  return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
5381
5831
  },
5832
+ /**
5833
+ * 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.
5834
+ * @summary Start an alt-propagation sweep job
5835
+ * @param {*} [options] Override http request option.
5836
+ * @throws {RequiredError}
5837
+ */
5838
+ async propagationSweep(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AdminAsyncJobStartResponse>> {
5839
+ const localVarAxiosArgs = await localVarAxiosParamCreator.propagationSweep(options);
5840
+ const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
5841
+ const localVarOperationServerBasePath = operationServerMap['AdminPunishmentsApi.propagationSweep']?.[localVarOperationServerIndex]?.url;
5842
+ return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath);
5843
+ },
5382
5844
  /**
5383
5845
  * Search for players by UUID or username, or look up all players associated with an IP address.
5384
5846
  * @summary Search punishment targets
@@ -5432,6 +5894,16 @@ export const AdminPunishmentsApiFactory = function (configuration?: Configuratio
5432
5894
  editPunishment(id: number, adminUpdatePunishmentRequest: AdminUpdatePunishmentRequest, options?: RawAxiosRequestConfig): AxiosPromise<void> {
5433
5895
  return localVarFp.editPunishment(id, adminUpdatePunishmentRequest, options).then((request) => request(axios, basePath));
5434
5896
  },
5897
+ /**
5898
+ * 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\'.
5899
+ * @summary List a punishment\'s current participants
5900
+ * @param {number} id Punishment id
5901
+ * @param {*} [options] Override http request option.
5902
+ * @throws {RequiredError}
5903
+ */
5904
+ getPunishmentTargets(id: number, options?: RawAxiosRequestConfig): AxiosPromise<AdminPunishmentTargets> {
5905
+ return localVarFp.getPunishmentTargets(id, options).then((request) => request(axios, basePath));
5906
+ },
5435
5907
  /**
5436
5908
  * Returns a paginated list of punishments with optional filtering by player UUID, username, IP address, type, and date range.
5437
5909
  * @summary List punishments
@@ -5448,6 +5920,15 @@ export const AdminPunishmentsApiFactory = function (configuration?: Configuratio
5448
5920
  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
5921
  return localVarFp.getPunishments(pageable, uuid, username, ipAddress, type, issuedAfter, issuedBefore, options).then((request) => request(axios, basePath));
5450
5922
  },
5923
+ /**
5924
+ * 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.
5925
+ * @summary Start an alt-propagation sweep job
5926
+ * @param {*} [options] Override http request option.
5927
+ * @throws {RequiredError}
5928
+ */
5929
+ propagationSweep(options?: RawAxiosRequestConfig): AxiosPromise<AdminAsyncJobStartResponse> {
5930
+ return localVarFp.propagationSweep(options).then((request) => request(axios, basePath));
5931
+ },
5451
5932
  /**
5452
5933
  * Search for players by UUID or username, or look up all players associated with an IP address.
5453
5934
  * @summary Search punishment targets
@@ -5499,6 +5980,17 @@ export class AdminPunishmentsApi extends BaseAPI {
5499
5980
  return AdminPunishmentsApiFp(this.configuration).editPunishment(id, adminUpdatePunishmentRequest, options).then((request) => request(this.axios, this.basePath));
5500
5981
  }
5501
5982
 
5983
+ /**
5984
+ * 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\'.
5985
+ * @summary List a punishment\'s current participants
5986
+ * @param {number} id Punishment id
5987
+ * @param {*} [options] Override http request option.
5988
+ * @throws {RequiredError}
5989
+ */
5990
+ public getPunishmentTargets(id: number, options?: RawAxiosRequestConfig) {
5991
+ return AdminPunishmentsApiFp(this.configuration).getPunishmentTargets(id, options).then((request) => request(this.axios, this.basePath));
5992
+ }
5993
+
5502
5994
  /**
5503
5995
  * Returns a paginated list of punishments with optional filtering by player UUID, username, IP address, type, and date range.
5504
5996
  * @summary List punishments
@@ -5516,6 +6008,16 @@ export class AdminPunishmentsApi extends BaseAPI {
5516
6008
  return AdminPunishmentsApiFp(this.configuration).getPunishments(pageable, uuid, username, ipAddress, type, issuedAfter, issuedBefore, options).then((request) => request(this.axios, this.basePath));
5517
6009
  }
5518
6010
 
6011
+ /**
6012
+ * 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.
6013
+ * @summary Start an alt-propagation sweep job
6014
+ * @param {*} [options] Override http request option.
6015
+ * @throws {RequiredError}
6016
+ */
6017
+ public propagationSweep(options?: RawAxiosRequestConfig) {
6018
+ return AdminPunishmentsApiFp(this.configuration).propagationSweep(options).then((request) => request(this.axios, this.basePath));
6019
+ }
6020
+
5519
6021
  /**
5520
6022
  * Search for players by UUID or username, or look up all players associated with an IP address.
5521
6023
  * @summary Search punishment targets
@@ -6573,7 +7075,7 @@ export class PlayerApi extends BaseAPI {
6573
7075
  export const PlayerSessionsApiAxiosParamCreator = function (configuration?: Configuration) {
6574
7076
  return {
6575
7077
  /**
6576
- * Closes the active session for a (playerUuid, serverSessionId) pair. No-op if no active session is found, so duplicate end events from a retry don\'t error.
7078
+ * Closes the active session for a (playerUuid, serverSessionId) pair and returns an acknowledgment: whether a session was actually closed, that session\'s start / end / duration, and the player\'s aggregate session stats recomputed after the close. No-op if no active session is found — `sessionClosed` is false and the per-session fields are null (stats are still returned) — so duplicate end events from a retry don\'t error.
6577
7079
  * @summary Close the active player session
6578
7080
  * @param {PlayerSessionEndRequest} playerSessionEndRequest
6579
7081
  * @param {*} [options] Override http request option.
@@ -6599,6 +7101,7 @@ export const PlayerSessionsApiAxiosParamCreator = function (configuration?: Conf
6599
7101
  await setBearerAuthToObject(localVarHeaderParameter, configuration)
6600
7102
 
6601
7103
  localVarHeaderParameter['Content-Type'] = 'application/json';
7104
+ localVarHeaderParameter['Accept'] = 'application/json';
6602
7105
 
6603
7106
  setSearchParams(localVarUrlObj, localVarQueryParameter);
6604
7107
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
@@ -6659,13 +7162,13 @@ export const PlayerSessionsApiFp = function(configuration?: Configuration) {
6659
7162
  const localVarAxiosParamCreator = PlayerSessionsApiAxiosParamCreator(configuration)
6660
7163
  return {
6661
7164
  /**
6662
- * Closes the active session for a (playerUuid, serverSessionId) pair. No-op if no active session is found, so duplicate end events from a retry don\'t error.
7165
+ * Closes the active session for a (playerUuid, serverSessionId) pair and returns an acknowledgment: whether a session was actually closed, that session\'s start / end / duration, and the player\'s aggregate session stats recomputed after the close. No-op if no active session is found — `sessionClosed` is false and the per-session fields are null (stats are still returned) — so duplicate end events from a retry don\'t error.
6663
7166
  * @summary Close the active player session
6664
7167
  * @param {PlayerSessionEndRequest} playerSessionEndRequest
6665
7168
  * @param {*} [options] Override http request option.
6666
7169
  * @throws {RequiredError}
6667
7170
  */
6668
- async end(playerSessionEndRequest: PlayerSessionEndRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
7171
+ async end(playerSessionEndRequest: PlayerSessionEndRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PlayerSessionEndResponse>> {
6669
7172
  const localVarAxiosArgs = await localVarAxiosParamCreator.end(playerSessionEndRequest, options);
6670
7173
  const localVarOperationServerIndex = configuration?.serverIndex ?? 0;
6671
7174
  const localVarOperationServerBasePath = operationServerMap['PlayerSessionsApi.end']?.[localVarOperationServerIndex]?.url;
@@ -6694,13 +7197,13 @@ export const PlayerSessionsApiFactory = function (configuration?: Configuration,
6694
7197
  const localVarFp = PlayerSessionsApiFp(configuration)
6695
7198
  return {
6696
7199
  /**
6697
- * Closes the active session for a (playerUuid, serverSessionId) pair. No-op if no active session is found, so duplicate end events from a retry don\'t error.
7200
+ * Closes the active session for a (playerUuid, serverSessionId) pair and returns an acknowledgment: whether a session was actually closed, that session\'s start / end / duration, and the player\'s aggregate session stats recomputed after the close. No-op if no active session is found — `sessionClosed` is false and the per-session fields are null (stats are still returned) — so duplicate end events from a retry don\'t error.
6698
7201
  * @summary Close the active player session
6699
7202
  * @param {PlayerSessionEndRequest} playerSessionEndRequest
6700
7203
  * @param {*} [options] Override http request option.
6701
7204
  * @throws {RequiredError}
6702
7205
  */
6703
- end(playerSessionEndRequest: PlayerSessionEndRequest, options?: RawAxiosRequestConfig): AxiosPromise<void> {
7206
+ end(playerSessionEndRequest: PlayerSessionEndRequest, options?: RawAxiosRequestConfig): AxiosPromise<PlayerSessionEndResponse> {
6704
7207
  return localVarFp.end(playerSessionEndRequest, options).then((request) => request(axios, basePath));
6705
7208
  },
6706
7209
  /**
@@ -6721,7 +7224,7 @@ export const PlayerSessionsApiFactory = function (configuration?: Configuration,
6721
7224
  */
6722
7225
  export class PlayerSessionsApi extends BaseAPI {
6723
7226
  /**
6724
- * Closes the active session for a (playerUuid, serverSessionId) pair. No-op if no active session is found, so duplicate end events from a retry don\'t error.
7227
+ * Closes the active session for a (playerUuid, serverSessionId) pair and returns an acknowledgment: whether a session was actually closed, that session\'s start / end / duration, and the player\'s aggregate session stats recomputed after the close. No-op if no active session is found — `sessionClosed` is false and the per-session fields are null (stats are still returned) — so duplicate end events from a retry don\'t error.
6725
7228
  * @summary Close the active player session
6726
7229
  * @param {PlayerSessionEndRequest} playerSessionEndRequest
6727
7230
  * @param {*} [options] Override http request option.