@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/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.6.0
8
8
  *
9
9
  *
10
10
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
package/common.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).
package/configuration.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  * Reborn API
4
4
  * 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
5
5
  *
6
- * The version of the OpenAPI document: 4.0.0
6
+ * The version of the OpenAPI document: 4.6.0
7
7
  *
8
8
  *
9
9
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
package/dist/api.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * Reborn API
3
3
  * 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
4
4
  *
5
- * The version of the OpenAPI document: 4.0.0
5
+ * The version of the OpenAPI document: 4.6.0
6
6
  *
7
7
  *
8
8
  * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
@@ -63,6 +63,69 @@ export interface AdminAltExemption {
63
63
  */
64
64
  'reason'?: string | null;
65
65
  }
66
+ /**
67
+ * Alt-graph rooted at a player, walked out to the requested hop depth.
68
+ */
69
+ export interface AdminAltGraph {
70
+ /**
71
+ * UUID of the focal player. Always appears in nodes at depth=0.
72
+ */
73
+ 'rootUuid': string;
74
+ /**
75
+ * Maximum hop depth walked. Capped server-side at MAX_PROPAGATION_DEPTH.
76
+ */
77
+ 'depth': number;
78
+ /**
79
+ * Every player reachable from the root within {@code depth} hops, including the root at depth=0.
80
+ */
81
+ 'nodes': Array<AdminAltGraphNode>;
82
+ /**
83
+ * Undirected edges between any two players in nodes that share at least one non-promiscuous connection.
84
+ */
85
+ 'edges': Array<AdminAltGraphEdge>;
86
+ }
87
+ /**
88
+ * Undirected edge in an alt-graph traversal.
89
+ */
90
+ export interface AdminAltGraphEdge {
91
+ /**
92
+ * One endpoint of the edge
93
+ */
94
+ 'fromUuid': string;
95
+ /**
96
+ * Other endpoint of the edge. The pair is emitted only once — the SQL ensures fromUuid < toUuid lexicographically.
97
+ */
98
+ 'toUuid': string;
99
+ /**
100
+ * Number of distinct non-promiscuous connections these two players share. Drives edge thickness.
101
+ */
102
+ 'sharedConnectionCount': number;
103
+ }
104
+ /**
105
+ * One player node in an alt-graph traversal.
106
+ */
107
+ export interface AdminAltGraphNode {
108
+ /**
109
+ * Player Minecraft UUID
110
+ */
111
+ 'uuid': string;
112
+ /**
113
+ * Most recently seen username, null if never resolved
114
+ */
115
+ 'username'?: string | null;
116
+ /**
117
+ * Hop count from the focal player (0 = the focal player herself).
118
+ */
119
+ 'depth': number;
120
+ /**
121
+ * Trust factor (0-100). Drives the node colour in the graph.
122
+ */
123
+ 'trustFactor': number;
124
+ /**
125
+ * Whether this player currently has at least one active (non-revoked, non-expired) player_punishment row. Drives a red outline ring on the node.
126
+ */
127
+ 'hasActivePunishment': boolean;
128
+ }
66
129
  /**
67
130
  * Request to apply a punishment to one or more targets
68
131
  */
@@ -198,6 +261,23 @@ export interface AdminAsyncJob {
198
261
  * 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.
199
262
  */
200
263
  'hostInstance': string;
264
+ /**
265
+ * 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.
266
+ */
267
+ 'artifact'?: AdminAsyncJobArtifactMeta | null;
268
+ }
269
+ /**
270
+ * Pointer to a job\'s CSV artifact. Present only when the job emitted one.
271
+ */
272
+ export interface AdminAsyncJobArtifactMeta {
273
+ /**
274
+ * Number of data rows in the artifact (excluding the header).
275
+ */
276
+ 'rowCount': number;
277
+ /**
278
+ * When the artifact was finalized (typically a few seconds after the job marked COMPLETED).
279
+ */
280
+ 'createdAt': string;
201
281
  }
202
282
  /**
203
283
  * 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.
@@ -824,6 +904,19 @@ export interface AdminPunishmentTarget {
824
904
  */
825
905
  'ipAddress'?: string | null;
826
906
  }
907
+ /**
908
+ * Active DIRECT participants currently attached to a punishment.
909
+ */
910
+ export interface AdminPunishmentTargets {
911
+ /**
912
+ * UUIDs of players with an active DIRECT player_punishment link to this punishment.
913
+ */
914
+ 'playerUuids': Array<string>;
915
+ /**
916
+ * IPs of connections with a live connection_punishment row for this punishment.
917
+ */
918
+ 'ipAddresses': Array<string>;
919
+ }
827
920
  /**
828
921
  * One reported player attached to a report.
829
922
  */
@@ -971,7 +1064,7 @@ export interface AdminTrustFactorImpact {
971
1064
  'projectedTrustFactor': number;
972
1065
  }
973
1066
  /**
974
- * Partial update for a punishment. Only reason / notes / expiresAt may be edited — severity is intentionally immutable to keep the punishment score deterministic.
1067
+ * Partial update for a punishment. All fields are optional; omitted fields stay untouched.
975
1068
  */
976
1069
  export interface AdminUpdatePunishmentRequest {
977
1070
  /**
@@ -990,6 +1083,22 @@ export interface AdminUpdatePunishmentRequest {
990
1083
  * When true, clears expiresAt (makes the punishment permanent). Takes precedence over expiresAt.
991
1084
  */
992
1085
  'forcePermanent'?: boolean | null;
1086
+ /**
1087
+ * Replace the punishment type (BAN/MUTE/KICK/WARNING). Affects trust factor retroactively.
1088
+ */
1089
+ 'type'?: PunishmentType | null;
1090
+ /**
1091
+ * Replace the severity (1–4). Affects trust factor retroactively.
1092
+ */
1093
+ 'severity'?: number | null;
1094
+ /**
1095
+ * Targets to ADD. Each entry has either a player UUID or an IP. UUID → new DIRECT player_punishment row. IP → new connection_punishment row.
1096
+ */
1097
+ 'addTargets'?: Array<AdminPunishmentTarget> | null;
1098
+ /**
1099
+ * 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.
1100
+ */
1101
+ 'removeTargets'?: Array<AdminPunishmentTarget> | null;
993
1102
  }
994
1103
  /**
995
1104
  * A single entry in a player\'s username history
@@ -1376,6 +1485,43 @@ export interface PlayerSessionEndRequest {
1376
1485
  */
1377
1486
  'serverSessionId': string;
1378
1487
  }
1488
+ /**
1489
+ * 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.
1490
+ */
1491
+ export interface PlayerSessionEndResponse {
1492
+ /**
1493
+ * Player Minecraft UUID, echoed from the request
1494
+ */
1495
+ 'playerUuid': string;
1496
+ /**
1497
+ * Server session id the player was on, echoed from the request
1498
+ */
1499
+ 'serverSessionId': string;
1500
+ /**
1501
+ * 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).
1502
+ */
1503
+ 'sessionClosed': boolean;
1504
+ /**
1505
+ * Id of the session that was closed. Null on a no-op.
1506
+ */
1507
+ 'sessionId'?: string | null;
1508
+ /**
1509
+ * When the closed session was opened (ISO-8601). Null on a no-op.
1510
+ */
1511
+ 'startedAt'?: string | null;
1512
+ /**
1513
+ * When the session was closed (ISO-8601), i.e. now. Null on a no-op.
1514
+ */
1515
+ 'endedAt'?: string | null;
1516
+ /**
1517
+ * Length of the closed session in seconds (endedAt - startedAt). Null on a no-op.
1518
+ */
1519
+ 'durationSeconds'?: number | null;
1520
+ /**
1521
+ * Player\'s aggregate session stats, recomputed after this session was closed (so the just-ended session is included in the totals).
1522
+ */
1523
+ 'sessionStats': AdminPlayerSessionStats;
1524
+ }
1379
1525
  /**
1380
1526
  * Unified player-join request. Runs the full authorization check (VPN, bypass, punishments) and conditionally opens a player_session for the allowed players.
1381
1527
  */
@@ -2463,6 +2609,14 @@ export declare const AdminJobsApiAxiosParamCreator: (configuration?: Configurati
2463
2609
  * @throws {RequiredError}
2464
2610
  */
2465
2611
  cancel: (id: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
2612
+ /**
2613
+ * 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).
2614
+ * @summary Download a job\'s CSV artifact
2615
+ * @param {string} id Job id
2616
+ * @param {*} [options] Override http request option.
2617
+ * @throws {RequiredError}
2618
+ */
2619
+ downloadArtifact: (id: string, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
2466
2620
  /**
2467
2621
  * The polling target — the admin UI hits this every ~2 s while a job is running to update its progress bar.
2468
2622
  * @summary Get one async job
@@ -2493,6 +2647,14 @@ export declare const AdminJobsApiFp: (configuration?: Configuration) => {
2493
2647
  * @throws {RequiredError}
2494
2648
  */
2495
2649
  cancel(id: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>>;
2650
+ /**
2651
+ * 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).
2652
+ * @summary Download a job\'s CSV artifact
2653
+ * @param {string} id Job id
2654
+ * @param {*} [options] Override http request option.
2655
+ * @throws {RequiredError}
2656
+ */
2657
+ downloadArtifact(id: string, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<string>>;
2496
2658
  /**
2497
2659
  * The polling target — the admin UI hits this every ~2 s while a job is running to update its progress bar.
2498
2660
  * @summary Get one async job
@@ -2523,6 +2685,14 @@ export declare const AdminJobsApiFactory: (configuration?: Configuration, basePa
2523
2685
  * @throws {RequiredError}
2524
2686
  */
2525
2687
  cancel(id: string, options?: RawAxiosRequestConfig): AxiosPromise<void>;
2688
+ /**
2689
+ * 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).
2690
+ * @summary Download a job\'s CSV artifact
2691
+ * @param {string} id Job id
2692
+ * @param {*} [options] Override http request option.
2693
+ * @throws {RequiredError}
2694
+ */
2695
+ downloadArtifact(id: string, options?: RawAxiosRequestConfig): AxiosPromise<string>;
2526
2696
  /**
2527
2697
  * The polling target — the admin UI hits this every ~2 s while a job is running to update its progress bar.
2528
2698
  * @summary Get one async job
@@ -2553,6 +2723,14 @@ export declare class AdminJobsApi extends BaseAPI {
2553
2723
  * @throws {RequiredError}
2554
2724
  */
2555
2725
  cancel(id: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<void, any, {}>>;
2726
+ /**
2727
+ * 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).
2728
+ * @summary Download a job\'s CSV artifact
2729
+ * @param {string} id Job id
2730
+ * @param {*} [options] Override http request option.
2731
+ * @throws {RequiredError}
2732
+ */
2733
+ downloadArtifact(id: string, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<string, any, {}>>;
2556
2734
  /**
2557
2735
  * The polling target — the admin UI hits this every ~2 s while a job is running to update its progress bar.
2558
2736
  * @summary Get one async job
@@ -2584,6 +2762,13 @@ export declare const AdminPlayersApiAxiosParamCreator: (configuration?: Configur
2584
2762
  * @throws {RequiredError}
2585
2763
  */
2586
2764
  addAltExemption: (uuid: string, adminCreateAltExemptionRequest: AdminCreateAltExemptionRequest, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
2765
+ /**
2766
+ * 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.
2767
+ * @summary Start a username backfill job
2768
+ * @param {*} [options] Override http request option.
2769
+ * @throws {RequiredError}
2770
+ */
2771
+ backfillUsernames: (options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
2587
2772
  /**
2588
2773
  * 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.
2589
2774
  * @summary Bulk-revoke PROPAGATED links by source
@@ -2610,6 +2795,15 @@ export declare const AdminPlayersApiAxiosParamCreator: (configuration?: Configur
2610
2795
  * @throws {RequiredError}
2611
2796
  */
2612
2797
  deletePlayerNote: (uuid: string, noteId: number, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
2798
+ /**
2799
+ * 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.
2800
+ * @summary Alt-graph traversal rooted at a player
2801
+ * @param {string} uuid Player Minecraft UUID
2802
+ * @param {number} [depth] Hop depth to walk. 1&#x3D;direct alts only; 5&#x3D;full sticky-trap radius. Default 2.
2803
+ * @param {*} [options] Override http request option.
2804
+ * @throws {RequiredError}
2805
+ */
2806
+ getAltGraph: (uuid: string, depth?: number, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
2613
2807
  /**
2614
2808
  * Returns full detail for a single player including all known usernames and punishment scoring.
2615
2809
  * @summary Get player detail
@@ -2747,6 +2941,13 @@ export declare const AdminPlayersApiFp: (configuration?: Configuration) => {
2747
2941
  * @throws {RequiredError}
2748
2942
  */
2749
2943
  addAltExemption(uuid: string, adminCreateAltExemptionRequest: AdminCreateAltExemptionRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>>;
2944
+ /**
2945
+ * 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.
2946
+ * @summary Start a username backfill job
2947
+ * @param {*} [options] Override http request option.
2948
+ * @throws {RequiredError}
2949
+ */
2950
+ backfillUsernames(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AdminAsyncJobStartResponse>>;
2750
2951
  /**
2751
2952
  * 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.
2752
2953
  * @summary Bulk-revoke PROPAGATED links by source
@@ -2773,6 +2974,15 @@ export declare const AdminPlayersApiFp: (configuration?: Configuration) => {
2773
2974
  * @throws {RequiredError}
2774
2975
  */
2775
2976
  deletePlayerNote(uuid: string, noteId: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>>;
2977
+ /**
2978
+ * 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.
2979
+ * @summary Alt-graph traversal rooted at a player
2980
+ * @param {string} uuid Player Minecraft UUID
2981
+ * @param {number} [depth] Hop depth to walk. 1&#x3D;direct alts only; 5&#x3D;full sticky-trap radius. Default 2.
2982
+ * @param {*} [options] Override http request option.
2983
+ * @throws {RequiredError}
2984
+ */
2985
+ getAltGraph(uuid: string, depth?: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AdminAltGraph>>;
2776
2986
  /**
2777
2987
  * Returns full detail for a single player including all known usernames and punishment scoring.
2778
2988
  * @summary Get player detail
@@ -2910,6 +3120,13 @@ export declare const AdminPlayersApiFactory: (configuration?: Configuration, bas
2910
3120
  * @throws {RequiredError}
2911
3121
  */
2912
3122
  addAltExemption(uuid: string, adminCreateAltExemptionRequest: AdminCreateAltExemptionRequest, options?: RawAxiosRequestConfig): AxiosPromise<void>;
3123
+ /**
3124
+ * 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.
3125
+ * @summary Start a username backfill job
3126
+ * @param {*} [options] Override http request option.
3127
+ * @throws {RequiredError}
3128
+ */
3129
+ backfillUsernames(options?: RawAxiosRequestConfig): AxiosPromise<AdminAsyncJobStartResponse>;
2913
3130
  /**
2914
3131
  * 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.
2915
3132
  * @summary Bulk-revoke PROPAGATED links by source
@@ -2936,6 +3153,15 @@ export declare const AdminPlayersApiFactory: (configuration?: Configuration, bas
2936
3153
  * @throws {RequiredError}
2937
3154
  */
2938
3155
  deletePlayerNote(uuid: string, noteId: number, options?: RawAxiosRequestConfig): AxiosPromise<void>;
3156
+ /**
3157
+ * 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.
3158
+ * @summary Alt-graph traversal rooted at a player
3159
+ * @param {string} uuid Player Minecraft UUID
3160
+ * @param {number} [depth] Hop depth to walk. 1&#x3D;direct alts only; 5&#x3D;full sticky-trap radius. Default 2.
3161
+ * @param {*} [options] Override http request option.
3162
+ * @throws {RequiredError}
3163
+ */
3164
+ getAltGraph(uuid: string, depth?: number, options?: RawAxiosRequestConfig): AxiosPromise<AdminAltGraph>;
2939
3165
  /**
2940
3166
  * Returns full detail for a single player including all known usernames and punishment scoring.
2941
3167
  * @summary Get player detail
@@ -3073,6 +3299,13 @@ export declare class AdminPlayersApi extends BaseAPI {
3073
3299
  * @throws {RequiredError}
3074
3300
  */
3075
3301
  addAltExemption(uuid: string, adminCreateAltExemptionRequest: AdminCreateAltExemptionRequest, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<void, any, {}>>;
3302
+ /**
3303
+ * 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.
3304
+ * @summary Start a username backfill job
3305
+ * @param {*} [options] Override http request option.
3306
+ * @throws {RequiredError}
3307
+ */
3308
+ backfillUsernames(options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<AdminAsyncJobStartResponse, any, {}>>;
3076
3309
  /**
3077
3310
  * 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.
3078
3311
  * @summary Bulk-revoke PROPAGATED links by source
@@ -3099,6 +3332,15 @@ export declare class AdminPlayersApi extends BaseAPI {
3099
3332
  * @throws {RequiredError}
3100
3333
  */
3101
3334
  deletePlayerNote(uuid: string, noteId: number, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<void, any, {}>>;
3335
+ /**
3336
+ * 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.
3337
+ * @summary Alt-graph traversal rooted at a player
3338
+ * @param {string} uuid Player Minecraft UUID
3339
+ * @param {number} [depth] Hop depth to walk. 1&#x3D;direct alts only; 5&#x3D;full sticky-trap radius. Default 2.
3340
+ * @param {*} [options] Override http request option.
3341
+ * @throws {RequiredError}
3342
+ */
3343
+ getAltGraph(uuid: string, depth?: number, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<AdminAltGraph, any, {}>>;
3102
3344
  /**
3103
3345
  * Returns full detail for a single player including all known usernames and punishment scoring.
3104
3346
  * @summary Get player detail
@@ -3252,6 +3494,14 @@ export declare const AdminPunishmentsApiAxiosParamCreator: (configuration?: Conf
3252
3494
  * @throws {RequiredError}
3253
3495
  */
3254
3496
  editPunishment: (id: number, adminUpdatePunishmentRequest: AdminUpdatePunishmentRequest, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
3497
+ /**
3498
+ * 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\'.
3499
+ * @summary List a punishment\'s current participants
3500
+ * @param {number} id Punishment id
3501
+ * @param {*} [options] Override http request option.
3502
+ * @throws {RequiredError}
3503
+ */
3504
+ getPunishmentTargets: (id: number, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
3255
3505
  /**
3256
3506
  * Returns a paginated list of punishments with optional filtering by player UUID, username, IP address, type, and date range.
3257
3507
  * @summary List punishments
@@ -3266,6 +3516,13 @@ export declare const AdminPunishmentsApiAxiosParamCreator: (configuration?: Conf
3266
3516
  * @throws {RequiredError}
3267
3517
  */
3268
3518
  getPunishments: (pageable: Pageable, uuid?: string | null, username?: string | null, ipAddress?: string | null, type?: Array<PunishmentType> | null, issuedAfter?: number | null, issuedBefore?: number | null, options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
3519
+ /**
3520
+ * 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.
3521
+ * @summary Start an alt-propagation sweep job
3522
+ * @param {*} [options] Override http request option.
3523
+ * @throws {RequiredError}
3524
+ */
3525
+ propagationSweep: (options?: RawAxiosRequestConfig) => Promise<RequestArgs>;
3269
3526
  /**
3270
3527
  * Search for players by UUID or username, or look up all players associated with an IP address.
3271
3528
  * @summary Search punishment targets
@@ -3304,6 +3561,14 @@ export declare const AdminPunishmentsApiFp: (configuration?: Configuration) => {
3304
3561
  * @throws {RequiredError}
3305
3562
  */
3306
3563
  editPunishment(id: number, adminUpdatePunishmentRequest: AdminUpdatePunishmentRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>>;
3564
+ /**
3565
+ * 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\'.
3566
+ * @summary List a punishment\'s current participants
3567
+ * @param {number} id Punishment id
3568
+ * @param {*} [options] Override http request option.
3569
+ * @throws {RequiredError}
3570
+ */
3571
+ getPunishmentTargets(id: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AdminPunishmentTargets>>;
3307
3572
  /**
3308
3573
  * Returns a paginated list of punishments with optional filtering by player UUID, username, IP address, type, and date range.
3309
3574
  * @summary List punishments
@@ -3318,6 +3583,13 @@ export declare const AdminPunishmentsApiFp: (configuration?: Configuration) => {
3318
3583
  * @throws {RequiredError}
3319
3584
  */
3320
3585
  getPunishments(pageable: Pageable, uuid?: string | null, username?: string | null, ipAddress?: string | null, type?: Array<PunishmentType> | null, issuedAfter?: number | null, issuedBefore?: number | null, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PageAdminPunishmentListItem>>;
3586
+ /**
3587
+ * 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.
3588
+ * @summary Start an alt-propagation sweep job
3589
+ * @param {*} [options] Override http request option.
3590
+ * @throws {RequiredError}
3591
+ */
3592
+ propagationSweep(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AdminAsyncJobStartResponse>>;
3321
3593
  /**
3322
3594
  * Search for players by UUID or username, or look up all players associated with an IP address.
3323
3595
  * @summary Search punishment targets
@@ -3356,6 +3628,14 @@ export declare const AdminPunishmentsApiFactory: (configuration?: Configuration,
3356
3628
  * @throws {RequiredError}
3357
3629
  */
3358
3630
  editPunishment(id: number, adminUpdatePunishmentRequest: AdminUpdatePunishmentRequest, options?: RawAxiosRequestConfig): AxiosPromise<void>;
3631
+ /**
3632
+ * 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\'.
3633
+ * @summary List a punishment\'s current participants
3634
+ * @param {number} id Punishment id
3635
+ * @param {*} [options] Override http request option.
3636
+ * @throws {RequiredError}
3637
+ */
3638
+ getPunishmentTargets(id: number, options?: RawAxiosRequestConfig): AxiosPromise<AdminPunishmentTargets>;
3359
3639
  /**
3360
3640
  * Returns a paginated list of punishments with optional filtering by player UUID, username, IP address, type, and date range.
3361
3641
  * @summary List punishments
@@ -3370,6 +3650,13 @@ export declare const AdminPunishmentsApiFactory: (configuration?: Configuration,
3370
3650
  * @throws {RequiredError}
3371
3651
  */
3372
3652
  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>;
3653
+ /**
3654
+ * 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.
3655
+ * @summary Start an alt-propagation sweep job
3656
+ * @param {*} [options] Override http request option.
3657
+ * @throws {RequiredError}
3658
+ */
3659
+ propagationSweep(options?: RawAxiosRequestConfig): AxiosPromise<AdminAsyncJobStartResponse>;
3373
3660
  /**
3374
3661
  * Search for players by UUID or username, or look up all players associated with an IP address.
3375
3662
  * @summary Search punishment targets
@@ -3408,6 +3695,14 @@ export declare class AdminPunishmentsApi extends BaseAPI {
3408
3695
  * @throws {RequiredError}
3409
3696
  */
3410
3697
  editPunishment(id: number, adminUpdatePunishmentRequest: AdminUpdatePunishmentRequest, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<void, any, {}>>;
3698
+ /**
3699
+ * 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\'.
3700
+ * @summary List a punishment\'s current participants
3701
+ * @param {number} id Punishment id
3702
+ * @param {*} [options] Override http request option.
3703
+ * @throws {RequiredError}
3704
+ */
3705
+ getPunishmentTargets(id: number, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<AdminPunishmentTargets, any, {}>>;
3411
3706
  /**
3412
3707
  * Returns a paginated list of punishments with optional filtering by player UUID, username, IP address, type, and date range.
3413
3708
  * @summary List punishments
@@ -3422,6 +3717,13 @@ export declare class AdminPunishmentsApi extends BaseAPI {
3422
3717
  * @throws {RequiredError}
3423
3718
  */
3424
3719
  getPunishments(pageable: Pageable, uuid?: string | null, username?: string | null, ipAddress?: string | null, type?: Array<PunishmentType> | null, issuedAfter?: number | null, issuedBefore?: number | null, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<PageAdminPunishmentListItem, any, {}>>;
3720
+ /**
3721
+ * 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.
3722
+ * @summary Start an alt-propagation sweep job
3723
+ * @param {*} [options] Override http request option.
3724
+ * @throws {RequiredError}
3725
+ */
3726
+ propagationSweep(options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<AdminAsyncJobStartResponse, any, {}>>;
3425
3727
  /**
3426
3728
  * Search for players by UUID or username, or look up all players associated with an IP address.
3427
3729
  * @summary Search punishment targets
@@ -3924,7 +4226,7 @@ export declare class PlayerApi extends BaseAPI {
3924
4226
  */
3925
4227
  export declare const PlayerSessionsApiAxiosParamCreator: (configuration?: Configuration) => {
3926
4228
  /**
3927
- * 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.
4229
+ * 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.
3928
4230
  * @summary Close the active player session
3929
4231
  * @param {PlayerSessionEndRequest} playerSessionEndRequest
3930
4232
  * @param {*} [options] Override http request option.
@@ -3945,13 +4247,13 @@ export declare const PlayerSessionsApiAxiosParamCreator: (configuration?: Config
3945
4247
  */
3946
4248
  export declare const PlayerSessionsApiFp: (configuration?: Configuration) => {
3947
4249
  /**
3948
- * 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.
4250
+ * 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.
3949
4251
  * @summary Close the active player session
3950
4252
  * @param {PlayerSessionEndRequest} playerSessionEndRequest
3951
4253
  * @param {*} [options] Override http request option.
3952
4254
  * @throws {RequiredError}
3953
4255
  */
3954
- end(playerSessionEndRequest: PlayerSessionEndRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>>;
4256
+ end(playerSessionEndRequest: PlayerSessionEndRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PlayerSessionEndResponse>>;
3955
4257
  /**
3956
4258
  * Single round-trip the game server / proxy makes when a player joins. Runs the full authorization check (VPN detection, bypass tiers, punishment propagation, active-ban evaluation) and — only if allowed — opens (or re-attaches to) a player_session row. Replaces the older two-call flow (`GET /v1/connection/details` followed by a session-open POST). `/v1/connection/details` remains available for admin / debugging use but is deprecated for player-join purposes. Idempotent at the session-open step: a duplicate join request returns the existing active session\'s id instead of creating a duplicate row. Response shape: - `connectionResult` — always populated; carries ALLOWED / BANNED / VPN_DETECTED etc. plus a formatted kick message when denied. - `sessionId` / `startedAt` — populated only when the join was allowed. - Connection context (IP, location, VPN%, bypass) for display + logging. - `playerInformation`, `activePunishments` — full player history at join time. - `sessionStats` — total seconds played / days active / currently-online, useful for game-server-side welcome messages.
3957
4259
  * @summary Player join — unified authorization + session-open
@@ -3966,13 +4268,13 @@ export declare const PlayerSessionsApiFp: (configuration?: Configuration) => {
3966
4268
  */
3967
4269
  export declare const PlayerSessionsApiFactory: (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) => {
3968
4270
  /**
3969
- * 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.
4271
+ * 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.
3970
4272
  * @summary Close the active player session
3971
4273
  * @param {PlayerSessionEndRequest} playerSessionEndRequest
3972
4274
  * @param {*} [options] Override http request option.
3973
4275
  * @throws {RequiredError}
3974
4276
  */
3975
- end(playerSessionEndRequest: PlayerSessionEndRequest, options?: RawAxiosRequestConfig): AxiosPromise<void>;
4277
+ end(playerSessionEndRequest: PlayerSessionEndRequest, options?: RawAxiosRequestConfig): AxiosPromise<PlayerSessionEndResponse>;
3976
4278
  /**
3977
4279
  * Single round-trip the game server / proxy makes when a player joins. Runs the full authorization check (VPN detection, bypass tiers, punishment propagation, active-ban evaluation) and — only if allowed — opens (or re-attaches to) a player_session row. Replaces the older two-call flow (`GET /v1/connection/details` followed by a session-open POST). `/v1/connection/details` remains available for admin / debugging use but is deprecated for player-join purposes. Idempotent at the session-open step: a duplicate join request returns the existing active session\'s id instead of creating a duplicate row. Response shape: - `connectionResult` — always populated; carries ALLOWED / BANNED / VPN_DETECTED etc. plus a formatted kick message when denied. - `sessionId` / `startedAt` — populated only when the join was allowed. - Connection context (IP, location, VPN%, bypass) for display + logging. - `playerInformation`, `activePunishments` — full player history at join time. - `sessionStats` — total seconds played / days active / currently-online, useful for game-server-side welcome messages.
3978
4280
  * @summary Player join — unified authorization + session-open
@@ -3987,13 +4289,13 @@ export declare const PlayerSessionsApiFactory: (configuration?: Configuration, b
3987
4289
  */
3988
4290
  export declare class PlayerSessionsApi extends BaseAPI {
3989
4291
  /**
3990
- * 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.
4292
+ * 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.
3991
4293
  * @summary Close the active player session
3992
4294
  * @param {PlayerSessionEndRequest} playerSessionEndRequest
3993
4295
  * @param {*} [options] Override http request option.
3994
4296
  * @throws {RequiredError}
3995
4297
  */
3996
- end(playerSessionEndRequest: PlayerSessionEndRequest, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<void, any, {}>>;
4298
+ end(playerSessionEndRequest: PlayerSessionEndRequest, options?: RawAxiosRequestConfig): Promise<import("axios").AxiosResponse<PlayerSessionEndResponse, any, {}>>;
3997
4299
  /**
3998
4300
  * Single round-trip the game server / proxy makes when a player joins. Runs the full authorization check (VPN detection, bypass tiers, punishment propagation, active-ban evaluation) and — only if allowed — opens (or re-attaches to) a player_session row. Replaces the older two-call flow (`GET /v1/connection/details` followed by a session-open POST). `/v1/connection/details` remains available for admin / debugging use but is deprecated for player-join purposes. Idempotent at the session-open step: a duplicate join request returns the existing active session\'s id instead of creating a duplicate row. Response shape: - `connectionResult` — always populated; carries ALLOWED / BANNED / VPN_DETECTED etc. plus a formatted kick message when denied. - `sessionId` / `startedAt` — populated only when the join was allowed. - Connection context (IP, location, VPN%, bypass) for display + logging. - `playerInformation`, `activePunishments` — full player history at join time. - `sessionStats` — total seconds played / days active / currently-online, useful for game-server-side welcome messages.
3999
4301
  * @summary Player join — unified authorization + session-open