@babylonjs-toolkit/server 0.0.0-stage → 9.35.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/CUSTOM.md +1690 -0
- package/DEPLOY.md +2012 -0
- package/README.md +1081 -2
- package/lib/AbuseLimits.d.ts +64 -0
- package/lib/AbuseLimits.js +121 -0
- package/lib/Authentication.d.ts +86 -0
- package/lib/Authentication.js +272 -0
- package/lib/BootSessionOwner.d.ts +86 -0
- package/lib/BootSessionOwner.js +116 -0
- package/lib/ColyseusLoggerAdapter.d.ts +32 -0
- package/lib/ColyseusLoggerAdapter.js +73 -0
- package/lib/DedicatedSceneRegistry.d.ts +52 -0
- package/lib/DedicatedSceneRegistry.js +74 -0
- package/lib/DedicatedSession.d.ts +152 -0
- package/lib/DedicatedSession.js +173 -0
- package/lib/DualTransport.d.ts +112 -0
- package/lib/DualTransport.js +197 -0
- package/lib/GameServer.d.ts +64 -0
- package/lib/GameServer.js +647 -0
- package/lib/GameServerConfig.d.ts +387 -0
- package/lib/GameServerConfig.js +1059 -0
- package/lib/GameServerLobbyRoom.d.ts +33 -0
- package/lib/GameServerLobbyRoom.js +56 -0
- package/lib/GameServerLogger.d.ts +111 -0
- package/lib/GameServerLogger.js +190 -0
- package/lib/GameServerMetrics.d.ts +158 -0
- package/lib/GameServerMetrics.js +276 -0
- package/lib/GameServerState.d.ts +164 -0
- package/lib/GameServerState.js +26 -0
- package/lib/HeadlessRuntime.d.ts +316 -0
- package/lib/HeadlessRuntime.js +380 -0
- package/lib/JoinGate.d.ts +34 -0
- package/lib/JoinGate.js +221 -0
- package/lib/NetworkAddresses.d.ts +33 -0
- package/lib/NetworkAddresses.js +90 -0
- package/lib/PlayerTokens.d.ts +17 -0
- package/lib/PlayerTokens.js +24 -0
- package/lib/RoomServerTransport.d.ts +73 -0
- package/lib/RoomServerTransport.js +90 -0
- package/lib/ServerEndpoints.d.ts +133 -0
- package/lib/ServerEndpoints.js +247 -0
- package/lib/ServerInit.d.ts +28 -0
- package/lib/ServerInit.js +113 -0
- package/lib/SessionRoom.d.ts +391 -0
- package/lib/SessionRoom.js +930 -0
- package/lib/TlsCertificates.d.ts +35 -0
- package/lib/TlsCertificates.js +130 -0
- package/lib/admin/AccountRoutes.d.ts +8 -0
- package/lib/admin/AccountRoutes.js +502 -0
- package/lib/admin/AdminAccounts.d.ts +329 -0
- package/lib/admin/AdminAccounts.js +607 -0
- package/lib/admin/AdminApiRouter.d.ts +202 -0
- package/lib/admin/AdminApiRouter.js +465 -0
- package/lib/admin/AdminApiTypes.d.ts +1782 -0
- package/lib/admin/AdminApiTypes.js +4 -0
- package/lib/admin/AdminAudit.d.ts +113 -0
- package/lib/admin/AdminAudit.js +266 -0
- package/lib/admin/AdminCli.d.ts +7 -0
- package/lib/admin/AdminCli.js +351 -0
- package/lib/admin/AdminClock.d.ts +51 -0
- package/lib/admin/AdminClock.js +10 -0
- package/lib/admin/AdminConsole.d.ts +39 -0
- package/lib/admin/AdminConsole.js +325 -0
- package/lib/admin/AdminConstants.d.ts +147 -0
- package/lib/admin/AdminConstants.js +167 -0
- package/lib/admin/AdminCrypto.d.ts +19 -0
- package/lib/admin/AdminCrypto.js +29 -0
- package/lib/admin/AdminExtensionsHost.d.ts +176 -0
- package/lib/admin/AdminExtensionsHost.js +307 -0
- package/lib/admin/AdminPasswords.d.ts +33 -0
- package/lib/admin/AdminPasswords.js +92 -0
- package/lib/admin/AdminPermissions.d.ts +28 -0
- package/lib/admin/AdminPermissions.js +74 -0
- package/lib/admin/AdminRecords.d.ts +196 -0
- package/lib/admin/AdminRecords.js +3 -0
- package/lib/admin/AdminRequestBodies.d.ts +47 -0
- package/lib/admin/AdminRequestBodies.js +84 -0
- package/lib/admin/AdminRequestGate.d.ts +38 -0
- package/lib/admin/AdminRequestGate.js +59 -0
- package/lib/admin/AdminResponses.d.ts +103 -0
- package/lib/admin/AdminResponses.js +164 -0
- package/lib/admin/AdminServices.d.ts +99 -0
- package/lib/admin/AdminServices.js +4 -0
- package/lib/admin/AdminStaticFiles.d.ts +29 -0
- package/lib/admin/AdminStaticFiles.js +97 -0
- package/lib/admin/AdminStore.d.ts +152 -0
- package/lib/admin/AdminStore.js +46 -0
- package/lib/admin/AlertChannels.d.ts +43 -0
- package/lib/admin/AlertChannels.js +120 -0
- package/lib/admin/AlertEngine.d.ts +231 -0
- package/lib/admin/AlertEngine.js +681 -0
- package/lib/admin/AlertRoutes.d.ts +8 -0
- package/lib/admin/AlertRoutes.js +180 -0
- package/lib/admin/ApiKeyRoutes.d.ts +8 -0
- package/lib/admin/ApiKeyRoutes.js +53 -0
- package/lib/admin/ApiKeys.d.ts +63 -0
- package/lib/admin/ApiKeys.js +167 -0
- package/lib/admin/AuditRoutes.d.ts +8 -0
- package/lib/admin/AuditRoutes.js +106 -0
- package/lib/admin/AuthToolRoutes.d.ts +13 -0
- package/lib/admin/AuthToolRoutes.js +164 -0
- package/lib/admin/BanList.d.ts +87 -0
- package/lib/admin/BanList.js +152 -0
- package/lib/admin/CborDecoder.d.ts +18 -0
- package/lib/admin/CborDecoder.js +201 -0
- package/lib/admin/ColyseusCloudClient.d.ts +313 -0
- package/lib/admin/ColyseusCloudClient.js +272 -0
- package/lib/admin/ColyseusCloudRoutes.d.ts +8 -0
- package/lib/admin/ColyseusCloudRoutes.js +91 -0
- package/lib/admin/ColyseusCloudService.d.ts +180 -0
- package/lib/admin/ColyseusCloudService.js +476 -0
- package/lib/admin/ColyseusCloudSettings.d.ts +16 -0
- package/lib/admin/ColyseusCloudSettings.js +29 -0
- package/lib/admin/ColyseusCloudViews.d.ts +105 -0
- package/lib/admin/ColyseusCloudViews.js +371 -0
- package/lib/admin/CommonPasswords.d.ts +6 -0
- package/lib/admin/CommonPasswords.js +19 -0
- package/lib/admin/ConfigOverrides.d.ts +174 -0
- package/lib/admin/ConfigOverrides.js +406 -0
- package/lib/admin/ConfigRoutes.d.ts +8 -0
- package/lib/admin/ConfigRoutes.js +91 -0
- package/lib/admin/ConsoleSessions.d.ts +112 -0
- package/lib/admin/ConsoleSessions.js +201 -0
- package/lib/admin/DedicatedRoutes.d.ts +21 -0
- package/lib/admin/DedicatedRoutes.js +254 -0
- package/lib/admin/ExtensionRoutes.d.ts +8 -0
- package/lib/admin/ExtensionRoutes.js +145 -0
- package/lib/admin/FileAdminStore.d.ts +157 -0
- package/lib/admin/FileAdminStore.js +349 -0
- package/lib/admin/FleetDirectory.d.ts +323 -0
- package/lib/admin/FleetDirectory.js +489 -0
- package/lib/admin/FleetLeader.d.ts +43 -0
- package/lib/admin/FleetLeader.js +89 -0
- package/lib/admin/FleetRoutes.d.ts +55 -0
- package/lib/admin/FleetRoutes.js +465 -0
- package/lib/admin/HealthWarnings.d.ts +10 -0
- package/lib/admin/HealthWarnings.js +95 -0
- package/lib/admin/LeaderboardRoutes.d.ts +8 -0
- package/lib/admin/LeaderboardRoutes.js +569 -0
- package/lib/admin/LogBuffer.d.ts +60 -0
- package/lib/admin/LogBuffer.js +92 -0
- package/lib/admin/LogRedaction.d.ts +15 -0
- package/lib/admin/LogRedaction.js +72 -0
- package/lib/admin/LogRoutes.d.ts +45 -0
- package/lib/admin/LogRoutes.js +307 -0
- package/lib/admin/MaintenanceMode.d.ts +41 -0
- package/lib/admin/MaintenanceMode.js +74 -0
- package/lib/admin/MaintenanceWindows.d.ts +91 -0
- package/lib/admin/MaintenanceWindows.js +207 -0
- package/lib/admin/MetricsRoutes.d.ts +8 -0
- package/lib/admin/MetricsRoutes.js +209 -0
- package/lib/admin/MetricsSampler.d.ts +124 -0
- package/lib/admin/MetricsSampler.js +211 -0
- package/lib/admin/OneTimeCodes.d.ts +60 -0
- package/lib/admin/OneTimeCodes.js +162 -0
- package/lib/admin/OpenIdConnect.d.ts +146 -0
- package/lib/admin/OpenIdConnect.js +335 -0
- package/lib/admin/Passkeys.d.ts +130 -0
- package/lib/admin/Passkeys.js +432 -0
- package/lib/admin/PlayerRoutes.d.ts +20 -0
- package/lib/admin/PlayerRoutes.js +676 -0
- package/lib/admin/RedisAdminStore.d.ts +114 -0
- package/lib/admin/RedisAdminStore.js +258 -0
- package/lib/admin/RolloutCoordinator.d.ts +99 -0
- package/lib/admin/RolloutCoordinator.js +321 -0
- package/lib/admin/ServerEvents.d.ts +57 -0
- package/lib/admin/ServerEvents.js +89 -0
- package/lib/admin/SessionRoutes.d.ts +113 -0
- package/lib/admin/SessionRoutes.js +386 -0
- package/lib/admin/UserRoutes.d.ts +8 -0
- package/lib/admin/UserRoutes.js +214 -0
- package/lib/cli.d.ts +2 -0
- package/lib/cli.js +221 -0
- package/lib/console/assets/index-CI5N7c-T.js +21 -0
- package/lib/console/assets/index-DPitvzLp.css +1 -0
- package/lib/console/favicon.svg +1 -0
- package/lib/console/index.html +16 -0
- package/lib/discord/DiscordOAuth.d.ts +57 -0
- package/lib/discord/DiscordOAuth.js +127 -0
- package/lib/discord/DiscordSessions.d.ts +79 -0
- package/lib/discord/DiscordSessions.js +135 -0
- package/lib/discord/DiscordSignInConstants.d.ts +54 -0
- package/lib/discord/DiscordSignInConstants.js +55 -0
- package/lib/discord/DiscordSignInRoutes.d.ts +51 -0
- package/lib/discord/DiscordSignInRoutes.js +359 -0
- package/lib/index.d.ts +24 -0
- package/lib/index.js +18 -0
- package/lib/leaderboards/FileLeaderboardRankStore.d.ts +293 -0
- package/lib/leaderboards/FileLeaderboardRankStore.js +808 -0
- package/lib/leaderboards/LeaderboardConstants.d.ts +63 -0
- package/lib/leaderboards/LeaderboardConstants.js +70 -0
- package/lib/leaderboards/LeaderboardError.d.ts +15 -0
- package/lib/leaderboards/LeaderboardError.js +20 -0
- package/lib/leaderboards/LeaderboardIdentity.d.ts +44 -0
- package/lib/leaderboards/LeaderboardIdentity.js +72 -0
- package/lib/leaderboards/LeaderboardPublicApi.d.ts +17 -0
- package/lib/leaderboards/LeaderboardPublicApi.js +389 -0
- package/lib/leaderboards/LeaderboardRankStore.d.ts +296 -0
- package/lib/leaderboards/LeaderboardRankStore.js +18 -0
- package/lib/leaderboards/LeaderboardRules.d.ts +122 -0
- package/lib/leaderboards/LeaderboardRules.js +472 -0
- package/lib/leaderboards/LeaderboardScheduler.d.ts +43 -0
- package/lib/leaderboards/LeaderboardScheduler.js +103 -0
- package/lib/leaderboards/LeaderboardService.d.ts +669 -0
- package/lib/leaderboards/LeaderboardService.js +1667 -0
- package/lib/leaderboards/LeaderboardTransfer.d.ts +35 -0
- package/lib/leaderboards/LeaderboardTransfer.js +580 -0
- package/lib/leaderboards/RedisLeaderboardRankStore.d.ts +282 -0
- package/lib/leaderboards/RedisLeaderboardRankStore.js +691 -0
- package/package.json +64 -4
- package/templates/init/Caddyfile +6 -0
- package/templates/init/DEPLOY.md +233 -0
- package/templates/init/Dockerfile +12 -0
- package/templates/init/app.json +21 -0
- package/templates/init/aws/README.md +118 -0
- package/templates/init/aws/ecs-fargate-alb.yml +207 -0
- package/templates/init/aws/ecs-fargate-nlb-quic.yml +210 -0
- package/templates/init/babylon-game-server.config.mjs +158 -0
- package/templates/init/colyseus-cloud/README.md +133 -0
- package/templates/init/colyseus-cloud/babylon-game-server.config.mjs +36 -0
- package/templates/init/colyseus-cloud/ecosystem.config.cjs +35 -0
- package/templates/init/colyseus-cloud/gitignore +6 -0
- package/templates/init/colyseus-cloud/package.json +15 -0
- package/templates/init/digitalocean-app.yaml +30 -0
- package/templates/init/docker-compose.full.yml +45 -0
- package/templates/init/docker-compose.websocket.yml +41 -0
- package/templates/init/fly.toml +56 -0
- package/templates/init/heroku.yml +11 -0
- package/templates/init/kubernetes/deployment.yaml +71 -0
- package/templates/init/kubernetes/redis.yaml +73 -0
- package/templates/init/kubernetes/service.yaml +24 -0
- package/templates/init/monitoring/grafana-dashboard.json +539 -0
- package/templates/init/monitoring/prometheus-alerts.yml +51 -0
- package/templates/init/monitoring/prometheus-scrape.yml +17 -0
- package/templates/init/railway.json +13 -0
- package/templates/init/render.yaml +19 -0
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
import type { LeaderboardSortOrder } from "../admin/AdminApiTypes.js";
|
|
2
|
+
import type { LeaderboardDurability, LeaderboardPlayerRecord, LeaderboardRankKey, LeaderboardRankStore, LeaderboardWriteRequest, LeaderboardWriteResult, RankedLeaderboardEntry, RemovedLeaderboardEntry } from "./LeaderboardRankStore.js";
|
|
3
|
+
/** Rankings in files (D1, DR §8). */
|
|
4
|
+
export declare class FileLeaderboardRankStore implements LeaderboardRankStore {
|
|
5
|
+
/** Always "file". */
|
|
6
|
+
readonly kind: "file";
|
|
7
|
+
/** The store's folder (<admin.dataDir>/leaderboards). */
|
|
8
|
+
private readonly folder;
|
|
9
|
+
/** Whether the folder survives a redeploy (D20). */
|
|
10
|
+
private readonly isFolderPersistent;
|
|
11
|
+
/** Loaded season files by file key (`<boardId>/<seasonId>`). */
|
|
12
|
+
private readonly seasons;
|
|
13
|
+
/** Season loads in flight, so two callers share one read. */
|
|
14
|
+
private readonly seasonLoads;
|
|
15
|
+
/** Player records. */
|
|
16
|
+
private players;
|
|
17
|
+
/** Player id → rank key texts. */
|
|
18
|
+
private playerKeys;
|
|
19
|
+
/** Dedupe id → remembered result. */
|
|
20
|
+
private dedupe;
|
|
21
|
+
/** Rate bucket → counter (memory only). */
|
|
22
|
+
private readonly rates;
|
|
23
|
+
/** `<sessionName>\n<subject>` → presence (memory only). */
|
|
24
|
+
private readonly presence;
|
|
25
|
+
/** File keys changed since the last flush. */
|
|
26
|
+
private readonly dirtyFiles;
|
|
27
|
+
/** The pending flush timer, or null. */
|
|
28
|
+
private flushTimer;
|
|
29
|
+
/** Pending writes per file key, so a file's writes never interleave. */
|
|
30
|
+
private readonly writeChains;
|
|
31
|
+
/** The latest caller time seen (prunes expired dedupe records on flush). */
|
|
32
|
+
private latestNowMs;
|
|
33
|
+
/**
|
|
34
|
+
* Creates the store; open() loads the shared files.
|
|
35
|
+
* @param folder The store's folder.
|
|
36
|
+
* @param isFolderPersistent Whether the folder survives a redeploy.
|
|
37
|
+
*/
|
|
38
|
+
private constructor();
|
|
39
|
+
/**
|
|
40
|
+
* Opens the store, loading players, player keys and dedupe records (season files load on first use).
|
|
41
|
+
* @param folder The store's folder (created on the first write).
|
|
42
|
+
* @param isFolderPersistent Whether the folder survives a redeploy (the admin store's isPersistent).
|
|
43
|
+
* @returns The store.
|
|
44
|
+
*/
|
|
45
|
+
static open(folder: string, isFolderPersistent: boolean): Promise<FileLeaderboardRankStore>;
|
|
46
|
+
/**
|
|
47
|
+
* Writes one score: dedupe, keep policy (applyKeepPolicy, the Lua's semantics), overflow, ranking and indexes.
|
|
48
|
+
* @param request The write.
|
|
49
|
+
* @returns What the write did.
|
|
50
|
+
*/
|
|
51
|
+
write(request: LeaderboardWriteRequest): Promise<LeaderboardWriteResult>;
|
|
52
|
+
/**
|
|
53
|
+
* Reads a page of a ranking.
|
|
54
|
+
* @param key The ranking.
|
|
55
|
+
* @param offset Zero-based index of the first entry.
|
|
56
|
+
* @param limit Most entries.
|
|
57
|
+
* @returns The ranked entries.
|
|
58
|
+
*/
|
|
59
|
+
readRange(key: LeaderboardRankKey, offset: number, limit: number): Promise<RankedLeaderboardEntry[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Counts the live entries.
|
|
62
|
+
* @param key The ranking.
|
|
63
|
+
* @returns The count.
|
|
64
|
+
*/
|
|
65
|
+
count(key: LeaderboardRankKey): Promise<number>;
|
|
66
|
+
/**
|
|
67
|
+
* Reads one player's live entry and rank.
|
|
68
|
+
* @param key The ranking.
|
|
69
|
+
* @param playerId The player.
|
|
70
|
+
* @returns The entry, or null.
|
|
71
|
+
*/
|
|
72
|
+
readEntry(key: LeaderboardRankKey, playerId: string): Promise<RankedLeaderboardEntry | null>;
|
|
73
|
+
/**
|
|
74
|
+
* Reads the window around a player's entry, clamped to the ranking.
|
|
75
|
+
* @param key The ranking.
|
|
76
|
+
* @param playerId The player.
|
|
77
|
+
* @param window Entries above and below.
|
|
78
|
+
* @returns The entries, or [] when the player has none.
|
|
79
|
+
*/
|
|
80
|
+
readAround(key: LeaderboardRankKey, playerId: string, window: number): Promise<RankedLeaderboardEntry[]>;
|
|
81
|
+
/**
|
|
82
|
+
* Finds entries by display name or player id (case-insensitive), in rank order.
|
|
83
|
+
* @param key The ranking.
|
|
84
|
+
* @param text The text.
|
|
85
|
+
* @param limit Most entries.
|
|
86
|
+
* @returns The matches.
|
|
87
|
+
*/
|
|
88
|
+
searchEntries(key: LeaderboardRankKey, text: string, limit: number): Promise<RankedLeaderboardEntry[]>;
|
|
89
|
+
/**
|
|
90
|
+
* Reads the removed entries, newest removal first.
|
|
91
|
+
* @param key The ranking.
|
|
92
|
+
* @returns The removed entries.
|
|
93
|
+
*/
|
|
94
|
+
readRemoved(key: LeaderboardRankKey): Promise<RemovedLeaderboardEntry[]>;
|
|
95
|
+
/**
|
|
96
|
+
* Moves a live entry to the removed set.
|
|
97
|
+
* @param key The ranking.
|
|
98
|
+
* @param playerId The player.
|
|
99
|
+
* @param reason Why.
|
|
100
|
+
* @param removedBy Who.
|
|
101
|
+
* @param removedAt ISO time.
|
|
102
|
+
* @returns True when there was a live entry.
|
|
103
|
+
*/
|
|
104
|
+
removeEntry(key: LeaderboardRankKey, playerId: string, reason: string, removedBy: string, removedAt: string): Promise<boolean>;
|
|
105
|
+
/**
|
|
106
|
+
* Moves a removed entry back into the ranking.
|
|
107
|
+
* @param key The ranking.
|
|
108
|
+
* @param playerId The player.
|
|
109
|
+
* @param sortOrder The board's sort order.
|
|
110
|
+
* @returns "restored", "missing" or "liveEntryExists".
|
|
111
|
+
*/
|
|
112
|
+
restoreEntry(key: LeaderboardRankKey, playerId: string, sortOrder: LeaderboardSortOrder): Promise<"restored" | "missing" | "liveEntryExists">;
|
|
113
|
+
/**
|
|
114
|
+
* Lists the variant keys of a season, sorted.
|
|
115
|
+
* @param boardId The board.
|
|
116
|
+
* @param seasonId The season.
|
|
117
|
+
* @returns The variant keys.
|
|
118
|
+
*/
|
|
119
|
+
listVariantKeys(boardId: string, seasonId: number): Promise<string[]>;
|
|
120
|
+
/**
|
|
121
|
+
* Reads a board's last accepted write time across its season files.
|
|
122
|
+
* @param boardId The board.
|
|
123
|
+
* @returns ISO time, or null.
|
|
124
|
+
*/
|
|
125
|
+
readLastSubmissionAt(boardId: string): Promise<string | null>;
|
|
126
|
+
/**
|
|
127
|
+
* Empties a season (its file keeps only the last submission time) and unlinks it from its players.
|
|
128
|
+
* @param boardId The board.
|
|
129
|
+
* @param seasonId The season.
|
|
130
|
+
* @returns How many entries were deleted.
|
|
131
|
+
*/
|
|
132
|
+
deleteSeason(boardId: string, seasonId: number): Promise<number>;
|
|
133
|
+
/**
|
|
134
|
+
* Deletes a board's folder after emptying its seasons.
|
|
135
|
+
* @param boardId The board.
|
|
136
|
+
* @param seasonIds Its seasons.
|
|
137
|
+
*/
|
|
138
|
+
deleteBoard(boardId: string, seasonIds: number[]): Promise<void>;
|
|
139
|
+
/**
|
|
140
|
+
* Lists the rankings a player has an entry in.
|
|
141
|
+
* @param playerId The player.
|
|
142
|
+
* @returns The rank keys, sorted by their text.
|
|
143
|
+
*/
|
|
144
|
+
listPlayerRankKeys(playerId: string): Promise<LeaderboardRankKey[]>;
|
|
145
|
+
/**
|
|
146
|
+
* Renames every entry of a player, live and removed.
|
|
147
|
+
* @param playerId The player.
|
|
148
|
+
* @param displayName The new name.
|
|
149
|
+
* @returns How many entries changed.
|
|
150
|
+
*/
|
|
151
|
+
renamePlayerEntries(playerId: string, displayName: string): Promise<number>;
|
|
152
|
+
/**
|
|
153
|
+
* Deletes every entry of a player, live and removed, and the player's rank keys.
|
|
154
|
+
* @param playerId The player.
|
|
155
|
+
* @returns How many entries were deleted.
|
|
156
|
+
*/
|
|
157
|
+
deletePlayerEntries(playerId: string): Promise<number>;
|
|
158
|
+
/**
|
|
159
|
+
* Reads a player.
|
|
160
|
+
* @param playerId The player.
|
|
161
|
+
* @returns A copy of the record, or null.
|
|
162
|
+
*/
|
|
163
|
+
getPlayer(playerId: string): Promise<LeaderboardPlayerRecord | null>;
|
|
164
|
+
/**
|
|
165
|
+
* Writes a player.
|
|
166
|
+
* @param record The record.
|
|
167
|
+
*/
|
|
168
|
+
putPlayer(record: LeaderboardPlayerRecord): Promise<void>;
|
|
169
|
+
/**
|
|
170
|
+
* Deletes a player record.
|
|
171
|
+
* @param playerId The player.
|
|
172
|
+
* @returns True when it existed.
|
|
173
|
+
*/
|
|
174
|
+
deletePlayer(playerId: string): Promise<boolean>;
|
|
175
|
+
/**
|
|
176
|
+
* Finds players by display name or id (case-insensitive).
|
|
177
|
+
* @param text The text ("" matches any).
|
|
178
|
+
* @param limit Most players.
|
|
179
|
+
* @returns Copies of the matching records.
|
|
180
|
+
*/
|
|
181
|
+
searchPlayers(text: string, limit: number): Promise<LeaderboardPlayerRecord[]>;
|
|
182
|
+
/**
|
|
183
|
+
* Counts every player.
|
|
184
|
+
* @returns The count.
|
|
185
|
+
*/
|
|
186
|
+
countPlayers(): Promise<number>;
|
|
187
|
+
/**
|
|
188
|
+
* Counts one use in a fixed window, in memory.
|
|
189
|
+
* @param bucket What is limited.
|
|
190
|
+
* @param limit Most uses per window.
|
|
191
|
+
* @param windowMs The window, in milliseconds.
|
|
192
|
+
* @param nowMs The caller's clock.
|
|
193
|
+
* @returns True while within the limit.
|
|
194
|
+
*/
|
|
195
|
+
consumeRate(bucket: string, limit: number, windowMs: number, nowMs: number): Promise<boolean>;
|
|
196
|
+
/**
|
|
197
|
+
* Records a session join per subject, in memory; an earlier join that still counts wins.
|
|
198
|
+
* @param sessionName The session.
|
|
199
|
+
* @param subjects The subjects.
|
|
200
|
+
* @param joinedAtMs The join time.
|
|
201
|
+
* @param ttlMs How long it counts.
|
|
202
|
+
*/
|
|
203
|
+
recordSessionPresence(sessionName: string, subjects: string[], joinedAtMs: number, ttlMs: number): Promise<void>;
|
|
204
|
+
/**
|
|
205
|
+
* Reads a subject's join time, if it still counts.
|
|
206
|
+
* @param sessionName The session.
|
|
207
|
+
* @param subject The subject.
|
|
208
|
+
* @param nowMs The caller's clock.
|
|
209
|
+
* @returns The join time, or null.
|
|
210
|
+
*/
|
|
211
|
+
readSessionPresence(sessionName: string, subject: string, nowMs: number): Promise<number | null>;
|
|
212
|
+
/**
|
|
213
|
+
* Durability of the folder (D20): durable when the admin store says it persists.
|
|
214
|
+
* @returns The durability and advice.
|
|
215
|
+
*/
|
|
216
|
+
measureDurability(): Promise<LeaderboardDurability>;
|
|
217
|
+
/** Writes every changed file and waits for the writes. */
|
|
218
|
+
close(): Promise<void>;
|
|
219
|
+
/**
|
|
220
|
+
* Applies one write to a loaded season (no dedupe).
|
|
221
|
+
* @param season The season.
|
|
222
|
+
* @param request The write.
|
|
223
|
+
* @returns What the write did.
|
|
224
|
+
*/
|
|
225
|
+
private applyWrite;
|
|
226
|
+
/**
|
|
227
|
+
* Finds a loaded ranking without creating it.
|
|
228
|
+
* @param key The ranking.
|
|
229
|
+
* @returns The ranking, or null.
|
|
230
|
+
*/
|
|
231
|
+
private findRanking;
|
|
232
|
+
/**
|
|
233
|
+
* Loads a season file once (an empty season when it does not exist).
|
|
234
|
+
* @param boardId The board.
|
|
235
|
+
* @param seasonId The season.
|
|
236
|
+
* @returns The season held in memory.
|
|
237
|
+
*/
|
|
238
|
+
private loadSeason;
|
|
239
|
+
/**
|
|
240
|
+
* Reads a season file into memory form.
|
|
241
|
+
* @param fileKey The season's file key.
|
|
242
|
+
* @returns The season.
|
|
243
|
+
*/
|
|
244
|
+
private readSeasonFile;
|
|
245
|
+
/**
|
|
246
|
+
* Lists the season ids that have a file for a board.
|
|
247
|
+
* @param boardId The board.
|
|
248
|
+
* @returns The season ids, plus those loaded in memory.
|
|
249
|
+
*/
|
|
250
|
+
private listSeasonIds;
|
|
251
|
+
/** Loads the players, player keys and dedupe files. */
|
|
252
|
+
private loadSharedFiles;
|
|
253
|
+
/**
|
|
254
|
+
* Adds a rank key to a player's index.
|
|
255
|
+
* @param playerId The player.
|
|
256
|
+
* @param keyText The rank key text.
|
|
257
|
+
*/
|
|
258
|
+
private addPlayerKey;
|
|
259
|
+
/**
|
|
260
|
+
* Removes a rank key from a player's index.
|
|
261
|
+
* @param playerId The player.
|
|
262
|
+
* @param keyText The rank key text.
|
|
263
|
+
*/
|
|
264
|
+
private removePlayerKey;
|
|
265
|
+
/**
|
|
266
|
+
* Marks a file changed and schedules a flush after LEADERBOARD_FILE_FLUSH_DELAY_MS.
|
|
267
|
+
* @param fileKey The file key (a season key or a shared file name).
|
|
268
|
+
*/
|
|
269
|
+
private markDirty;
|
|
270
|
+
/**
|
|
271
|
+
* Writes every changed file, each after its own pending write.
|
|
272
|
+
* @returns Resolves once the writes are queued and done.
|
|
273
|
+
*/
|
|
274
|
+
private flush;
|
|
275
|
+
/**
|
|
276
|
+
* Writes one file from memory (an empty, never-submitted season file is deleted instead).
|
|
277
|
+
* @param fileKey The file key.
|
|
278
|
+
*/
|
|
279
|
+
private writeFileOf;
|
|
280
|
+
/**
|
|
281
|
+
* Runs a task after the pending writes of one file.
|
|
282
|
+
* @param fileKey The file.
|
|
283
|
+
* @param task The task.
|
|
284
|
+
* @returns The task's result.
|
|
285
|
+
*/
|
|
286
|
+
private serialize;
|
|
287
|
+
/**
|
|
288
|
+
* The path of a file key.
|
|
289
|
+
* @param fileKey A season key (`<boardId>/<seasonId>`) or a shared file name.
|
|
290
|
+
* @returns The absolute path.
|
|
291
|
+
*/
|
|
292
|
+
private filePath;
|
|
293
|
+
}
|