@chaos-overlords/kernel 0.9.9 → 0.9.10
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/dist/logic/turn-logic.d.ts +10 -0
- package/dist/logic/turn-logic.d.ts.map +1 -1
- package/dist/logic/turn-logic.js +20 -0
- package/dist/logic/turn-logic.js.map +1 -1
- package/dist/ports/index.d.ts +1 -0
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +1 -0
- package/dist/ports/index.js.map +1 -1
- package/dist/ports/rateLimits.d.ts +52 -0
- package/dist/ports/rateLimits.d.ts.map +1 -0
- package/dist/ports/rateLimits.js +2 -0
- package/dist/ports/rateLimits.js.map +1 -0
- package/dist/services/LobbyService.d.ts +15 -1
- package/dist/services/LobbyService.d.ts.map +1 -1
- package/dist/services/LobbyService.js +48 -7
- package/dist/services/LobbyService.js.map +1 -1
- package/dist/services/RateLimiter.d.ts +97 -21
- package/dist/services/RateLimiter.d.ts.map +1 -1
- package/dist/services/RateLimiter.js +161 -17
- package/dist/services/RateLimiter.js.map +1 -1
- package/dist/services/SnapshotService.d.ts +6 -3
- package/dist/services/SnapshotService.d.ts.map +1 -1
- package/dist/services/SnapshotService.js +12 -7
- package/dist/services/SnapshotService.js.map +1 -1
- package/dist/services/TurnService.d.ts +27 -2
- package/dist/services/TurnService.d.ts.map +1 -1
- package/dist/services/TurnService.js +70 -13
- package/dist/services/TurnService.js.map +1 -1
- package/dist/services/deps.d.ts +7 -0
- package/dist/services/deps.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -49,6 +49,16 @@ export type Consensus = {
|
|
|
49
49
|
* majority's state is right even when the host's own client happens to be the correct one.
|
|
50
50
|
*/
|
|
51
51
|
export declare function authoritativeCandidates(players: readonly Player[], reports: readonly TurnReport[]): string[];
|
|
52
|
+
/**
|
|
53
|
+
* The one player who may break a tie between reported states, or null when there is no tie.
|
|
54
|
+
*
|
|
55
|
+
* The host, when the host's own report is one of the tied hashes; otherwise the lowest-numbered
|
|
56
|
+
* human seat whose report is. A tie has no majority to defer to, so somebody has to be named, and
|
|
57
|
+
* naming the host alone left a match of five or six paused for good whenever the host's report was
|
|
58
|
+
* outside the tie (two reports each for two hashes, the host's alone on a third): the host could
|
|
59
|
+
* not claim a hash it never computed and nobody else was allowed to.
|
|
60
|
+
*/
|
|
61
|
+
export declare function tieBreaker(players: readonly Player[], reports: readonly TurnReport[], candidates: readonly string[], hostPlayerId: string): string | null;
|
|
52
62
|
/**
|
|
53
63
|
* Compare the post-turn state hashes the human seats reported.
|
|
54
64
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-logic.d.ts","sourceRoot":"","sources":["../../src/logic/turn-logic.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAA;AAE3B;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,GAC/B,MAAM,EAAE,CAKV;AAED,uGAAuG;AACvG,wBAAgB,eAAe,CAC7B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,GAC5D,OAAO,CAMT;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU,CAAC,GAAG,OAAO,CAGrF;AAED,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAC3D;IACE,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACvD,gFAAgF;IAChF,oBAAoB,EAAE,MAAM,EAAE,CAAA;CAC/B,CAAA;AAEL;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,SAAS,UAAU,EAAE,GAC7B,MAAM,EAAE,CAaV;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,SAAS,CAgCX;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,YAAY,EAAE,MAAM,GACnB,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ3C;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAElF"}
|
|
1
|
+
{"version":3,"file":"turn-logic.d.ts","sourceRoot":"","sources":["../../src/logic/turn-logic.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAA;AAE3B;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,GAC/B,MAAM,EAAE,CAKV;AAED,uGAAuG;AACvG,wBAAgB,eAAe,CAC7B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,GAC5D,OAAO,CAMT;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU,CAAC,GAAG,OAAO,CAGrF;AAED,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAC3D;IACE,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACvD,gFAAgF;IAChF,oBAAoB,EAAE,MAAM,EAAE,CAAA;CAC/B,CAAA;AAEL;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,SAAS,UAAU,EAAE,GAC7B,MAAM,EAAE,CAaV;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,IAAI,CAUf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,SAAS,CAgCX;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,YAAY,EAAE,MAAM,GACnB,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ3C;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAElF"}
|
package/dist/logic/turn-logic.js
CHANGED
|
@@ -62,6 +62,26 @@ export function authoritativeCandidates(players, reports) {
|
|
|
62
62
|
.map(([stateHash]) => stateHash)
|
|
63
63
|
.sort();
|
|
64
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* The one player who may break a tie between reported states, or null when there is no tie.
|
|
67
|
+
*
|
|
68
|
+
* The host, when the host's own report is one of the tied hashes; otherwise the lowest-numbered
|
|
69
|
+
* human seat whose report is. A tie has no majority to defer to, so somebody has to be named, and
|
|
70
|
+
* naming the host alone left a match of five or six paused for good whenever the host's report was
|
|
71
|
+
* outside the tie (two reports each for two hashes, the host's alone on a third): the host could
|
|
72
|
+
* not claim a hash it never computed and nobody else was allowed to.
|
|
73
|
+
*/
|
|
74
|
+
export function tieBreaker(players, reports, candidates, hostPlayerId) {
|
|
75
|
+
if (candidates.length < 2)
|
|
76
|
+
return null;
|
|
77
|
+
const tied = new Set(candidates);
|
|
78
|
+
const holders = new Set(reports.filter((report) => tied.has(report.stateHash)).map((report) => report.playerId));
|
|
79
|
+
const eligible = humanParticipants(players).filter((player) => holders.has(player.id));
|
|
80
|
+
if (eligible.some((player) => player.id === hostPlayerId))
|
|
81
|
+
return hostPlayerId;
|
|
82
|
+
const lowest = [...eligible].sort((a, b) => a.slot - b.slot)[0];
|
|
83
|
+
return lowest?.id ?? null;
|
|
84
|
+
}
|
|
65
85
|
/**
|
|
66
86
|
* Compare the post-turn state hashes the human seats reported.
|
|
67
87
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-logic.js","sourceRoot":"","sources":["../../src/logic/turn-logic.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"turn-logic.js","sourceRoot":"","sources":["../../src/logic/turn-logic.ts"],"names":[],"mappings":"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"}
|
package/dist/ports/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA"}
|
package/dist/ports/index.js
CHANGED
package/dist/ports/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The budget one rate limit enforces: at most `limit` calls per key in a fixed window of
|
|
3
|
+
* `windowMs` that opens on the key's first call.
|
|
4
|
+
*/
|
|
5
|
+
export interface RateLimitPolicy {
|
|
6
|
+
limit: number;
|
|
7
|
+
windowMs: number;
|
|
8
|
+
}
|
|
9
|
+
/** A key's window after a {@link RateLimitStore.consume}. */
|
|
10
|
+
export interface RateLimitWindow {
|
|
11
|
+
/** Whether the call that produced this answer was counted, i.e. the window had room for it. */
|
|
12
|
+
allowed: boolean;
|
|
13
|
+
/** Calls counted in the window, never above the policy's limit. */
|
|
14
|
+
count: number;
|
|
15
|
+
/** When the window opened, in epoch milliseconds. Names the window for a refund. */
|
|
16
|
+
windowStart: number;
|
|
17
|
+
/** When the window rolls, in epoch milliseconds. */
|
|
18
|
+
resetAt: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A fixed-window counter that every instance of a deployment shares.
|
|
22
|
+
*
|
|
23
|
+
* The in-process {@link MemoryRateLimiter} counts what one process or one isolate sees, which is
|
|
24
|
+
* the whole picture for a single self-hosted server and a fraction of it anywhere else: two Node
|
|
25
|
+
* instances behind a load balancer each grant the full budget, and a Cloudflare isolate is one of
|
|
26
|
+
* many. A runtime that runs as more than one instance implements this port in storage every
|
|
27
|
+
* instance reaches (a Postgres table, a Durable Object per key), and the kernel's
|
|
28
|
+
* {@link SharedRateLimiter} keeps the limiter semantics on top of it.
|
|
29
|
+
*
|
|
30
|
+
* Keys arrive already namespaced by limiter, so one store holds every tier. Times are epoch
|
|
31
|
+
* milliseconds from the caller's clock: instances of one deployment agree on the time to well
|
|
32
|
+
* under a second, and a window is a minute or a day.
|
|
33
|
+
*/
|
|
34
|
+
export interface RateLimitStore {
|
|
35
|
+
/**
|
|
36
|
+
* Counts one call against `key` if its window has room, atomically with respect to every other
|
|
37
|
+
* caller. A window that has rolled (its `resetAt` is at or before `now`) is replaced by a fresh
|
|
38
|
+
* one opening at `now`, and the call is counted in that.
|
|
39
|
+
*/
|
|
40
|
+
consume(key: string, policy: RateLimitPolicy, now: number): Promise<RateLimitWindow>;
|
|
41
|
+
/** The live window of `key` at `now`, spending nothing; null when it has rolled or never opened. */
|
|
42
|
+
inspect(key: string, now: number): Promise<{
|
|
43
|
+
count: number;
|
|
44
|
+
resetAt: number;
|
|
45
|
+
} | null>;
|
|
46
|
+
/**
|
|
47
|
+
* Gives back one call counted in the window that opened at `windowStart`. A key whose window has
|
|
48
|
+
* since rolled is left alone, so a late refund never credits a newer window.
|
|
49
|
+
*/
|
|
50
|
+
refund(key: string, windowStart: number): Promise<void>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=rateLimits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimits.d.ts","sourceRoot":"","sources":["../../src/ports/rateLimits.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,6DAA6D;AAC7D,MAAM,WAAW,eAAe;IAC9B,+FAA+F;IAC/F,OAAO,EAAE,OAAO,CAAA;IAChB,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAA;IACb,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAA;IACnB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IACpF,oGAAoG;IACpG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAA;IACrF;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACxD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimits.js","sourceRoot":"","sources":["../../src/ports/rateLimits.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CreateMatchRequest, type JoinMatchRequest, type JoinRunningMatchRequest, type MatchSettings, type MembershipView, type TakeoverVoteRequest, type UpdatePlayerProfileRequest } from '@chaos-overlords/contracts';
|
|
1
|
+
import { type CreateMatchRequest, type JoinMatchRequest, type JoinRunningMatchRequest, type MatchSettings, type MembershipView, type PostChatMessageRequest, type TakeoverVoteRequest, type UpdatePlayerProfileRequest } from '@chaos-overlords/contracts';
|
|
2
2
|
import type { Principal } from './AuthService';
|
|
3
3
|
import type { KernelDeps } from './deps';
|
|
4
4
|
import type { EventPublisher } from './EventPublisher';
|
|
@@ -16,6 +16,7 @@ export declare class LobbyService {
|
|
|
16
16
|
private readonly newId;
|
|
17
17
|
private readonly passwordAttempts;
|
|
18
18
|
private readonly passwordFailures;
|
|
19
|
+
private readonly chatMessages;
|
|
19
20
|
constructor(deps: KernelDeps, publisher: EventPublisher, turns: TurnService, options?: LobbyServiceOptions);
|
|
20
21
|
/**
|
|
21
22
|
* Check a match password, charging two budgets before the hash is computed.
|
|
@@ -53,6 +54,19 @@ export declare class LobbyService {
|
|
|
53
54
|
* every client has generated its city from.
|
|
54
55
|
*/
|
|
55
56
|
updateProfile(principal: Principal, request: UpdatePlayerProfileRequest): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Post a chat message to the lobby, announced to every member as `lobby.chatMessage`.
|
|
59
|
+
*
|
|
60
|
+
* The log is the message's only store, so it is the log that is bounded: a lobby whose log has
|
|
61
|
+
* reached `LIMITS.lobbyChatLogEvents` takes no more chat. The per-player budget is in memory, like
|
|
62
|
+
* every other limiter here, and spares the log from one member's flood long before that. The
|
|
63
|
+
* length check and the publish are separate steps, so posts that arrive together can each pass
|
|
64
|
+
* the check and carry the log a few events past the cap; it bounds the log without being exact.
|
|
65
|
+
* The budget is spent before the length check so a flood never reaches storage. Refused
|
|
66
|
+
* once the match has started, because inside a match the original's Comlink is the channel
|
|
67
|
+
* between players and its rules say who may write to whom.
|
|
68
|
+
*/
|
|
69
|
+
postChat(principal: Principal, request: PostChatMessageRequest): Promise<void>;
|
|
56
70
|
kick(principal: Principal, targetPlayerId: string): Promise<void>;
|
|
57
71
|
/** The player a host or a voter named, refused unless it is a member of the caller's match. */
|
|
58
72
|
private requireTarget;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LobbyService.d.ts","sourceRoot":"","sources":["../../src/services/LobbyService.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAGvB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAE5B,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,0BAA0B,EAChC,MAAM,4BAA4B,CAAA;AAoBnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAItD,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"LobbyService.d.ts","sourceRoot":"","sources":["../../src/services/LobbyService.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { hashPassword, verifyPassword } from '../logic/password';
|
|
|
6
6
|
import { assignSlots } from '../logic/turn-logic';
|
|
7
7
|
import { requireInProgress } from './guards';
|
|
8
8
|
import { MatchQueryService, matchStartedEvent, toPlayerView } from './MatchQueryService';
|
|
9
|
-
import {
|
|
9
|
+
import { memoryRateLimiters } from './RateLimiter';
|
|
10
10
|
import { FIRST_TURN } from './TurnService';
|
|
11
11
|
const JOIN_CODE_LENGTH = LIMITS.joinCodeLength;
|
|
12
12
|
const MIN_PLAYERS_TO_START = LIMITS.minPlayers;
|
|
@@ -43,6 +43,7 @@ const PASSWORD_ATTEMPTS_PER_CALLER = 10;
|
|
|
43
43
|
*/
|
|
44
44
|
const PASSWORD_FAILURES_PER_MATCH = 30;
|
|
45
45
|
const PASSWORD_ATTEMPT_WINDOW_MS = 60_000;
|
|
46
|
+
const CHAT_WINDOW_MS = 60_000;
|
|
46
47
|
/** Match creation, joining, leaving, kicking and the start transition. */
|
|
47
48
|
export class LobbyService {
|
|
48
49
|
deps;
|
|
@@ -52,20 +53,26 @@ export class LobbyService {
|
|
|
52
53
|
newId;
|
|
53
54
|
passwordAttempts;
|
|
54
55
|
passwordFailures;
|
|
56
|
+
chatMessages;
|
|
55
57
|
constructor(deps, publisher, turns, options = {}) {
|
|
56
58
|
this.deps = deps;
|
|
57
59
|
this.publisher = publisher;
|
|
58
60
|
this.turns = turns;
|
|
59
61
|
this.query = new MatchQueryService(deps.storage);
|
|
60
62
|
this.newId = options.newId ?? (() => crypto.randomUUID());
|
|
61
|
-
|
|
63
|
+
const limiters = deps.rateLimits ?? memoryRateLimiters(deps.clock);
|
|
64
|
+
this.passwordAttempts = limiters('passwordAttempts', {
|
|
62
65
|
limit: PASSWORD_ATTEMPTS_PER_CALLER,
|
|
63
66
|
windowMs: PASSWORD_ATTEMPT_WINDOW_MS,
|
|
64
67
|
});
|
|
65
|
-
this.passwordFailures =
|
|
68
|
+
this.passwordFailures = limiters('passwordFailures', {
|
|
66
69
|
limit: PASSWORD_FAILURES_PER_MATCH,
|
|
67
70
|
windowMs: PASSWORD_ATTEMPT_WINDOW_MS,
|
|
68
71
|
});
|
|
72
|
+
this.chatMessages = limiters('chatMessages', {
|
|
73
|
+
limit: LIMITS.chatMessagesPerMinute,
|
|
74
|
+
windowMs: CHAT_WINDOW_MS,
|
|
75
|
+
});
|
|
69
76
|
}
|
|
70
77
|
/**
|
|
71
78
|
* Check a match password, charging two budgets before the hash is computed.
|
|
@@ -89,16 +96,16 @@ export class LobbyService {
|
|
|
89
96
|
throw new UnauthorizedError('This match needs a password', { reason: 'password_required' });
|
|
90
97
|
}
|
|
91
98
|
const callerKey = `${match.id}:${caller ?? 'unattributed'}`;
|
|
92
|
-
const retry = this.passwordAttempts.take(callerKey);
|
|
99
|
+
const retry = await this.passwordAttempts.take(callerKey);
|
|
93
100
|
if (retry !== null)
|
|
94
101
|
throw this.tooManyPasswordAttempts(retry);
|
|
95
|
-
if (this.passwordAttempts.spent(callerKey) > 1) {
|
|
96
|
-
const underAttack = this.passwordFailures.peek(match.id);
|
|
102
|
+
if ((await this.passwordAttempts.spent(callerKey)) > 1) {
|
|
103
|
+
const underAttack = await this.passwordFailures.peek(match.id);
|
|
97
104
|
if (underAttack !== null)
|
|
98
105
|
throw this.tooManyPasswordAttempts(underAttack);
|
|
99
106
|
}
|
|
100
107
|
if (!(await verifyPassword(password, match.passwordHash))) {
|
|
101
|
-
this.passwordFailures.take(match.id);
|
|
108
|
+
await this.passwordFailures.take(match.id);
|
|
102
109
|
throw new UnauthorizedError('Wrong password', { reason: 'wrong_password' });
|
|
103
110
|
}
|
|
104
111
|
}
|
|
@@ -381,6 +388,40 @@ export class LobbyService {
|
|
|
381
388
|
payload: { player: toPlayerView({ ...player, ...profile }, match.hostPlayerId) },
|
|
382
389
|
});
|
|
383
390
|
}
|
|
391
|
+
/**
|
|
392
|
+
* Post a chat message to the lobby, announced to every member as `lobby.chatMessage`.
|
|
393
|
+
*
|
|
394
|
+
* The log is the message's only store, so it is the log that is bounded: a lobby whose log has
|
|
395
|
+
* reached `LIMITS.lobbyChatLogEvents` takes no more chat. The per-player budget is in memory, like
|
|
396
|
+
* every other limiter here, and spares the log from one member's flood long before that. The
|
|
397
|
+
* length check and the publish are separate steps, so posts that arrive together can each pass
|
|
398
|
+
* the check and carry the log a few events past the cap; it bounds the log without being exact.
|
|
399
|
+
* The budget is spent before the length check so a flood never reaches storage. Refused
|
|
400
|
+
* once the match has started, because inside a match the original's Comlink is the channel
|
|
401
|
+
* between players and its rules say who may write to whom.
|
|
402
|
+
*/
|
|
403
|
+
async postChat(principal, request) {
|
|
404
|
+
const { match, player } = principal;
|
|
405
|
+
if (match.status !== 'lobby') {
|
|
406
|
+
throw new ConflictError('Chat is open only in the lobby', { reason: 'match_not_in_lobby' });
|
|
407
|
+
}
|
|
408
|
+
const retryAfterSeconds = await this.chatMessages.take(`${match.id}:${player.id}`);
|
|
409
|
+
if (retryAfterSeconds !== null) {
|
|
410
|
+
throw new RateLimitedError('Too many chat messages', {
|
|
411
|
+
reason: 'rate_limited',
|
|
412
|
+
retryAfterSeconds,
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
if ((await this.deps.storage.events.lastSeq(match.id)) >= LIMITS.lobbyChatLogEvents) {
|
|
416
|
+
throw new ConflictError('This lobby has no room for more chat', {
|
|
417
|
+
reason: 'lobby_log_full',
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
await this.publisher.publish(match.id, {
|
|
421
|
+
type: 'lobby.chatMessage',
|
|
422
|
+
payload: { playerId: player.id, text: request.text },
|
|
423
|
+
});
|
|
424
|
+
}
|
|
384
425
|
async kick(principal, targetPlayerId) {
|
|
385
426
|
const { match, player } = principal;
|
|
386
427
|
requireHost(principal);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LobbyService.js","sourceRoot":"","sources":["../../src/services/LobbyService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LobbyService.js","sourceRoot":"","sources":["../../src/services/LobbyService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,100 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
/** Residency bound; defaults to {@link DEFAULT_MAX_KEYS}. */
|
|
1
|
+
import type { RateLimitPolicy, RateLimitStore, RateLimitWindow } from '../ports/rateLimits';
|
|
2
|
+
import type { Clock, Logger } from '../ports/runtime';
|
|
3
|
+
export interface RateLimiterOptions extends RateLimitPolicy {
|
|
4
|
+
/** Residency bound of the in-process limiter; defaults to {@link DEFAULT_MAX_KEYS}. */
|
|
6
5
|
maxKeys?: number;
|
|
7
6
|
}
|
|
8
7
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* rule, Cloudflare's rate limiting) in front and treats this as the last line.
|
|
8
|
+
* One budget of the server, keyed by caller. Every method is asynchronous because a deployment of
|
|
9
|
+
* more than one instance keeps the counts in shared storage; see {@link RateLimitStore}.
|
|
12
10
|
*/
|
|
13
|
-
export
|
|
11
|
+
export interface RateLimiter {
|
|
12
|
+
/** Returns the retry delay in seconds when over the limit, or null when the call is allowed. */
|
|
13
|
+
take(key: string): Promise<number | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Reserves one unit for work that may be rejected after validation. The returned release function
|
|
16
|
+
* refunds exactly this reservation, once, while its window is still live. A rolled or evicted
|
|
17
|
+
* window is never decremented on behalf of an older request. Null when the budget is spent.
|
|
18
|
+
*/
|
|
19
|
+
reserve(key: string): Promise<(() => Promise<void>) | null>;
|
|
20
|
+
/** What `take` would answer right now, spending nothing. */
|
|
21
|
+
peek(key: string): Promise<number | null>;
|
|
22
|
+
/** How much of `key`'s budget the current window has already spent; 0 once it has rolled. */
|
|
23
|
+
spent(key: string): Promise<number>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Builds the limiter for one named budget. The name keeps budgets apart when they share a store,
|
|
27
|
+
* so two limiters given the same caller key never spend each other's allowance.
|
|
28
|
+
*/
|
|
29
|
+
export type RateLimiterFactory = (name: string, options: RateLimiterOptions) => RateLimiter;
|
|
30
|
+
/** Limiters that count in this process: every call a single process takes, and nothing more. */
|
|
31
|
+
export declare function memoryRateLimiters(clock: Clock): RateLimiterFactory;
|
|
32
|
+
/**
|
|
33
|
+
* Limiters that count in a {@link RateLimitStore} every instance of the deployment shares.
|
|
34
|
+
*
|
|
35
|
+
* A store that fails (the database is unreachable, a Durable Object is overloaded) lets the call
|
|
36
|
+
* through and logs, at most once a minute. The limiters are abuse controls in front of a game, and
|
|
37
|
+
* refusing every player because the counter is down would be the outage the abuse was going to
|
|
38
|
+
* cause; when the failure is shared with the match storage, the request fails there on its own.
|
|
39
|
+
*/
|
|
40
|
+
export declare function sharedRateLimiters(store: RateLimitStore, clock: Clock, logger: Logger): RateLimiterFactory;
|
|
41
|
+
/**
|
|
42
|
+
* What a fixed window answers a call at `now`: the window to keep, and whether the call was
|
|
43
|
+
* counted. A window that has rolled is replaced by one opening at `now`. Every store applies this,
|
|
44
|
+
* so the budgets mean the same thing in a Postgres row, a Durable Object and a test.
|
|
45
|
+
*/
|
|
46
|
+
export declare function consumeWindow(current: {
|
|
47
|
+
windowStart: number;
|
|
48
|
+
resetAt: number;
|
|
49
|
+
count: number;
|
|
50
|
+
} | undefined, policy: RateLimitPolicy, now: number): RateLimitWindow;
|
|
51
|
+
/**
|
|
52
|
+
* A limiter whose windows live in a {@link RateLimitStore}.
|
|
53
|
+
*
|
|
54
|
+
* It keeps the in-process limiter's contract on top of the store's three operations, so a budget
|
|
55
|
+
* answers the same on every runtime. It measures on the wall clock: the windows are compared across
|
|
56
|
+
* instances, and the wall clock is the only one they have in common.
|
|
57
|
+
*/
|
|
58
|
+
export declare class SharedRateLimiter implements RateLimiter {
|
|
59
|
+
private readonly store;
|
|
60
|
+
private readonly clock;
|
|
61
|
+
private readonly name;
|
|
62
|
+
private readonly policy;
|
|
63
|
+
private readonly report;
|
|
64
|
+
constructor(store: RateLimitStore, clock: Clock, options: {
|
|
65
|
+
/** Keeps this budget's keys apart from every other budget in the store. */
|
|
66
|
+
name: string;
|
|
67
|
+
policy: RateLimitPolicy;
|
|
68
|
+
/** Told when the store fails; the call goes through regardless. */
|
|
69
|
+
report: (operation: string, error: unknown) => void;
|
|
70
|
+
});
|
|
71
|
+
take(key: string): Promise<number | null>;
|
|
72
|
+
reserve(key: string): Promise<(() => Promise<void>) | null>;
|
|
73
|
+
peek(key: string): Promise<number | null>;
|
|
74
|
+
spent(key: string): Promise<number>;
|
|
75
|
+
private key;
|
|
76
|
+
private guard;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* A {@link RateLimitStore} in this process: the reference the shared stores are tested against,
|
|
80
|
+
* and the store for a test that needs one without a database. It never forgets a key, so it is no
|
|
81
|
+
* substitute for {@link MemoryRateLimiter} in a server.
|
|
82
|
+
*/
|
|
83
|
+
export declare class MemoryRateLimitStore implements RateLimitStore {
|
|
84
|
+
private readonly windows;
|
|
85
|
+
consume(key: string, policy: RateLimitPolicy, now: number): Promise<RateLimitWindow>;
|
|
86
|
+
inspect(key: string, now: number): Promise<{
|
|
87
|
+
count: number;
|
|
88
|
+
resetAt: number;
|
|
89
|
+
} | null>;
|
|
90
|
+
refund(key: string, windowStart: number): Promise<void>;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Fixed-window counter per key, in memory. It counts what one process sees, which is every call a
|
|
94
|
+
* single self-hosted server takes; a deployment of more than one instance uses
|
|
95
|
+
* {@link sharedRateLimiters} instead.
|
|
96
|
+
*/
|
|
97
|
+
export declare class MemoryRateLimiter implements RateLimiter {
|
|
14
98
|
private readonly clock;
|
|
15
99
|
private readonly options;
|
|
16
100
|
private readonly windows;
|
|
@@ -19,18 +103,10 @@ export declare class RateLimiter {
|
|
|
19
103
|
private lastWall;
|
|
20
104
|
private elapsed;
|
|
21
105
|
constructor(clock: Clock, options: RateLimiterOptions);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
* refunds exactly this reservation, once, while its window is still live. A rolled or evicted
|
|
27
|
-
* window is never decremented on behalf of an older request.
|
|
28
|
-
*/
|
|
29
|
-
reserve(key: string): (() => void) | null;
|
|
30
|
-
/** What `take` would answer right now, spending nothing. */
|
|
31
|
-
peek(key: string): number | null;
|
|
32
|
-
/** How much of `key`'s budget the current window has already spent; 0 once it has rolled. */
|
|
33
|
-
spent(key: string): number;
|
|
106
|
+
take(key: string): Promise<number | null>;
|
|
107
|
+
reserve(key: string): Promise<(() => Promise<void>) | null>;
|
|
108
|
+
peek(key: string): Promise<number | null>;
|
|
109
|
+
spent(key: string): Promise<number>;
|
|
34
110
|
/**
|
|
35
111
|
* Milliseconds on a clock that only moves forward, accumulated from the wall clock's forward steps.
|
|
36
112
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../../src/services/RateLimiter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"RateLimiter.d.ts","sourceRoot":"","sources":["../../src/services/RateLimiter.ts"],"names":[],"mappings":"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"}
|