@chaos-overlords/server 0.9.1 → 0.9.3

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.
Files changed (53) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +4 -1
  3. package/dist/app.js.map +1 -1
  4. package/dist/configEnv.d.ts +22 -0
  5. package/dist/configEnv.d.ts.map +1 -0
  6. package/dist/configEnv.js +46 -0
  7. package/dist/configEnv.js.map +1 -0
  8. package/dist/container.d.ts +27 -1
  9. package/dist/container.d.ts.map +1 -1
  10. package/dist/container.js +16 -1
  11. package/dist/container.js.map +1 -1
  12. package/dist/http/errorHandler.js +5 -0
  13. package/dist/http/errorHandler.js.map +1 -1
  14. package/dist/http/middleware.d.ts +11 -0
  15. package/dist/http/middleware.d.ts.map +1 -1
  16. package/dist/http/middleware.js +28 -9
  17. package/dist/http/middleware.js.map +1 -1
  18. package/dist/http/types.d.ts +9 -4
  19. package/dist/http/types.d.ts.map +1 -1
  20. package/dist/index.d.ts +4 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +4 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/routes/bugReports.d.ts.map +1 -1
  25. package/dist/routes/bugReports.js +17 -11
  26. package/dist/routes/bugReports.js.map +1 -1
  27. package/dist/routes/events.d.ts.map +1 -1
  28. package/dist/routes/events.js +17 -0
  29. package/dist/routes/events.js.map +1 -1
  30. package/dist/routes/lobby.d.ts.map +1 -1
  31. package/dist/routes/lobby.js +10 -1
  32. package/dist/routes/lobby.js.map +1 -1
  33. package/dist/sse/LocalEventHub.d.ts +23 -5
  34. package/dist/sse/LocalEventHub.d.ts.map +1 -1
  35. package/dist/sse/LocalEventHub.js +68 -15
  36. package/dist/sse/LocalEventHub.js.map +1 -1
  37. package/dist/sse/MatchLog.d.ts +6 -0
  38. package/dist/sse/MatchLog.d.ts.map +1 -1
  39. package/dist/sse/MatchLog.js +10 -0
  40. package/dist/sse/MatchLog.js.map +1 -1
  41. package/dist/sse/closeLog.d.ts +12 -0
  42. package/dist/sse/closeLog.d.ts.map +1 -0
  43. package/dist/sse/closeLog.js +21 -0
  44. package/dist/sse/closeLog.js.map +1 -0
  45. package/dist/sse/createSseResponse.d.ts +40 -1
  46. package/dist/sse/createSseResponse.d.ts.map +1 -1
  47. package/dist/sse/createSseResponse.js +79 -8
  48. package/dist/sse/createSseResponse.js.map +1 -1
  49. package/dist/sse/membership.d.ts +11 -0
  50. package/dist/sse/membership.d.ts.map +1 -0
  51. package/dist/sse/membership.js +13 -0
  52. package/dist/sse/membership.js.map +1 -0
  53. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"lobby.js","sourceRoot":"","sources":["../../src/routes/lobby.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lobby.js","sourceRoot":"","sources":["../../src/routes/lobby.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type EventNotifier, type EventRepository, type EventStreamOpener, type PersistedEvent, type StreamCloser } from '@chaos-overlords/kernel';
2
+ import { type SseCloseReason } from './createSseResponse';
2
3
  /**
3
4
  * How many streams may be open at once, and against what.
4
5
  *
@@ -13,6 +14,8 @@ import { type EventNotifier, type EventRepository, type EventStreamOpener, type
13
14
  * predecessor is still being torn down. Reaching it closes that player's oldest stream rather than
14
15
  * refusing the new one, because the new one is the live client and the old one is the corpse.
15
16
  * `perMatch` and `perProcess` are the ceilings a client cannot talk its way past, and they refuse.
17
+ * Lobby streams may use at most one quarter of the process ceiling, so cheaply minted host tokens
18
+ * cannot fill every stream slot needed by running matches.
16
19
  */
17
20
  export interface EventHubLimits {
18
21
  perPlayer: number;
@@ -20,8 +23,10 @@ export interface EventHubLimits {
20
23
  perProcess: number;
21
24
  }
22
25
  export declare const DEFAULT_EVENT_HUB_LIMITS: EventHubLimits;
23
- /** What the hub tells its runtime about, so an operator can find out it happened. */
26
+ /** Runtime hooks for stream diagnostics and membership checks. */
24
27
  export interface EventHubObserver {
28
+ /** A false result or failed lookup ends the stream. */
29
+ revalidate?(matchId: string, playerId: string): Promise<boolean>;
25
30
  /** A stored event a stream had to skip because this build cannot read it. */
26
31
  unreadable?(matchId: string, seq: number): void;
27
32
  /**
@@ -31,6 +36,13 @@ export interface EventHubObserver {
31
36
  * that client is reconnecting in a loop.
32
37
  */
33
38
  abandoned?(matchId: string, playerId: string): void;
39
+ /**
40
+ * A stream ended, with why and how long it had been open.
41
+ *
42
+ * The client cannot tell these apart — its body just ends — so this is where "the connection was
43
+ * lost although the server was up" gets its explanation; see `isUnexpectedClose`.
44
+ */
45
+ closed?(matchId: string, playerId: string, reason: SseCloseReason, openMs: number): void;
34
46
  }
35
47
  /**
36
48
  * In-process fan-out: notifies every open stream of a match within this process. It is both the
@@ -51,6 +63,9 @@ export declare class LocalEventHub implements EventNotifier, EventStreamOpener,
51
63
  */
52
64
  private readonly logs;
53
65
  private open_;
66
+ private lobbyOpen_;
67
+ /** The share of `perProcess` lobby streams may hold; see `makeRoom`. */
68
+ private readonly lobbyCap;
54
69
  constructor(events: EventRepository, heartbeatMs: number, limits?: EventHubLimits, observer?: EventHubObserver);
55
70
  notify(event: PersistedEvent): Promise<void>;
56
71
  /** Wake every stream of a match; used when the notification arrives without the event body. */
@@ -58,9 +73,9 @@ export declare class LocalEventHub implements EventNotifier, EventStreamOpener,
58
73
  /**
59
74
  * End every stream a membership holds.
60
75
  *
61
- * Revoking a token stops the next request; a stream that is already open is never authenticated
62
- * again, so without this a kicked player keeps being handed every sealed set, every desync report
63
- * (which names each player's state hash) and every host change until they choose to disconnect.
76
+ * Revoking a token stops the next request, and an open stream only re-checks its membership on
77
+ * the catch-up heartbeat; until then a kicked player keeps being handed every sealed set, every
78
+ * desync report (which names each player's state hash) and every host change.
64
79
  */
65
80
  close(input: {
66
81
  matchId: string;
@@ -83,11 +98,14 @@ export declare class LocalEventHub implements EventNotifier, EventStreamOpener,
83
98
  playerId: string;
84
99
  afterSeq: number;
85
100
  signal: AbortSignal;
101
+ lobby?: boolean;
86
102
  }): Promise<Response>;
87
103
  private logOf;
88
104
  private subscribe;
105
+ /** Stop charging a stream to the lobby share once its match is running. */
106
+ private releaseLobby;
89
107
  /**
90
- * Enforce the three caps before a stream is built.
108
+ * Enforce the stream caps before a stream is built.
91
109
  *
92
110
  * The caller's own stale streams are closed FIRST, before either ceiling is read. Closing them is
93
111
  * not a concession to the caller, it is bookkeeping: a reconnect whose predecessor has not
@@ -1 +1 @@
1
- {"version":3,"file":"LocalEventHub.d.ts","sourceRoot":"","sources":["../../src/sse/LocalEventHub.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAEnB,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAA;AAIhC;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,wBAAwB,EAAE,cAItC,CAAA;AAED,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,6EAA6E;IAC7E,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/C;;;;;OAKG;IACH,SAAS,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACpD;AAQD;;;GAGG;AACH,qBAAa,aAAc,YAAW,aAAa,EAAE,iBAAiB,EAAE,YAAY;IAahF,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAf3B,yFAAyF;IACzF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IACjE;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA8B;IACnD,OAAO,CAAC,KAAK,CAAI;IAEjB,YACmB,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,cAAyC,EACjD,QAAQ,GAAE,gBAAqB,EAC9C;IAEE,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAMjD;IAED,+FAA+F;IAC/F,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI1B;IAED;;;;;;OAMG;IACG,KAAK,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvE;IAED;;;;;;;OAOG;IACH,QAAQ,IAAI,IAAI,CAOf;IAED,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvC;IAED,uDAAuD;IACvD,IAAI,WAAW,IAAI,MAAM,CAExB;IAEK,IAAI,CAAC,KAAK,EAAE;QAChB,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;QAChB,QAAQ,EAAE,MAAM,CAAA;QAChB,MAAM,EAAE,WAAW,CAAA;KACpB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuBpB;IAED,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,SAAS;IAuBjB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,QAAQ;CAmBjB"}
1
+ {"version":3,"file":"LocalEventHub.d.ts","sourceRoot":"","sources":["../../src/sse/LocalEventHub.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EAEnB,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAA;AAG5B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,wBAAwB,EAAE,cAItC,CAAA;AAED,kEAAkE;AAClE,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAChE,6EAA6E;IAC7E,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/C;;;;;OAKG;IACH,SAAS,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACnD;;;;;OAKG;IACH,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACzF;AASD;;;GAGG;AACH,qBAAa,aAAc,YAAW,aAAa,EAAE,iBAAiB,EAAE,YAAY;IAgBhF,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAlB3B,yFAAyF;IACzF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IACjE;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA8B;IACnD,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,UAAU,CAAI;IACtB,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IAEjC,YACmB,MAAM,EAAE,eAAe,EACvB,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,cAAyC,EACjD,QAAQ,GAAE,gBAAqB,EAGjD;IAEK,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAajD;IAED,+FAA+F;IAC/F,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI1B;IAED;;;;;;OAMG;IACG,KAAK,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvE;IAED;;;;;;;OAOG;IACH,QAAQ,IAAI,IAAI,CAOf;IAED,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvC;IAED,uDAAuD;IACvD,IAAI,WAAW,IAAI,MAAM,CAExB;IAEK,IAAI,CAAC,KAAK,EAAE;QAChB,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;QAChB,QAAQ,EAAE,MAAM,CAAA;QAChB,MAAM,EAAE,WAAW,CAAA;QACnB,KAAK,CAAC,EAAE,OAAO,CAAA;KAChB,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4CpB;IAED,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,SAAS;IAoBjB,2EAA2E;IAC3E,OAAO,CAAC,YAAY;IAMpB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,QAAQ;CA+BjB"}
@@ -1,6 +1,6 @@
1
1
  import { LIMITS } from '@chaos-overlords/contracts';
2
2
  import { RateLimitedError, } from '@chaos-overlords/kernel';
3
- import { abandonedSseResponse, createSseResponse } from './createSseResponse';
3
+ import { abandonedSseResponse, createSseResponse, } from './createSseResponse';
4
4
  import { MatchLog } from './MatchLog';
5
5
  export const DEFAULT_EVENT_HUB_LIMITS = {
6
6
  perPlayer: 3,
@@ -26,13 +26,24 @@ export class LocalEventHub {
26
26
  */
27
27
  logs = new Map();
28
28
  open_ = 0;
29
+ lobbyOpen_ = 0;
30
+ /** The share of `perProcess` lobby streams may hold; see `makeRoom`. */
31
+ lobbyCap;
29
32
  constructor(events, heartbeatMs, limits = DEFAULT_EVENT_HUB_LIMITS, observer = {}) {
30
33
  this.events = events;
31
34
  this.heartbeatMs = heartbeatMs;
32
35
  this.limits = limits;
33
36
  this.observer = observer;
37
+ this.lobbyCap = Math.max(1, Math.floor(limits.perProcess / 4));
34
38
  }
35
39
  async notify(event) {
40
+ // A stream opened in the lobby stays connected when play starts. Release its lobby quota now
41
+ // rather than waiting for a reconnect that may never happen.
42
+ if (event.type === 'match.started') {
43
+ for (const subscription of this.listeners.get(event.matchId) ?? []) {
44
+ this.releaseLobby(subscription);
45
+ }
46
+ }
36
47
  // The notification carries the durable row, so its frame is formatted once here and every
37
48
  // stream one event behind — which is every healthy stream of the match — is served from it
38
49
  // without reading anything. See `MatchLog`.
@@ -49,16 +60,16 @@ export class LocalEventHub {
49
60
  /**
50
61
  * End every stream a membership holds.
51
62
  *
52
- * Revoking a token stops the next request; a stream that is already open is never authenticated
53
- * again, so without this a kicked player keeps being handed every sealed set, every desync report
54
- * (which names each player's state hash) and every host change until they choose to disconnect.
63
+ * Revoking a token stops the next request, and an open stream only re-checks its membership on
64
+ * the catch-up heartbeat; until then a kicked player keeps being handed every sealed set, every
65
+ * desync report (which names each player's state hash) and every host change.
55
66
  */
56
67
  async close(input) {
57
68
  // Snapshot deliberately: `close()` removes the subscription from the set being walked.
58
69
  // oxlint-disable-next-line unicorn/no-useless-spread
59
70
  for (const subscription of [...(this.listeners.get(input.matchId) ?? [])]) {
60
71
  if (subscription.playerId === input.playerId)
61
- subscription.close();
72
+ subscription.close('revoked');
62
73
  }
63
74
  }
64
75
  /**
@@ -75,7 +86,7 @@ export class LocalEventHub {
75
86
  for (const subscriptions of [...this.listeners.values()]) {
76
87
  // oxlint-disable-next-line unicorn/no-useless-spread
77
88
  for (const subscription of [...subscriptions])
78
- subscription.close();
89
+ subscription.close('shutdown');
79
90
  }
80
91
  }
81
92
  connectionCount(matchId) {
@@ -93,17 +104,38 @@ export class LocalEventHub {
93
104
  this.observer.abandoned?.(input.matchId, input.playerId);
94
105
  return abandonedSseResponse();
95
106
  }
96
- this.makeRoom(input.matchId, input.playerId);
107
+ const lobby = input.lobby === true;
108
+ this.makeRoom(input.matchId, input.playerId, lobby);
97
109
  const log = this.logOf(input.matchId);
110
+ let subscription;
111
+ const { revalidate, closed } = this.observer;
112
+ const openedAt = Date.now();
98
113
  return createSseResponse({
99
- page: (afterSeq, force) => log.page(afterSeq, force),
114
+ page: async (afterSeq, force) => {
115
+ const frames = await log.page(afterSeq, force);
116
+ // `lobby` was read when the request authenticated. A match that started in between
117
+ // announced it before this stream subscribed, so the release in `notify` missed it; the
118
+ // stream's own read of the log is where it learns the match is running.
119
+ if (subscription?.lobby && log.started)
120
+ this.releaseLobby(subscription);
121
+ return frames;
122
+ },
100
123
  caughtUp: (lastSeq) => log.caughtUp(lastSeq),
101
- subscribe: (wake, close) => this.subscribe(input.matchId, input.playerId, wake, close),
124
+ subscribe: (wake, close) => {
125
+ subscription = { playerId: input.playerId, lobby: lobby && !log.started, wake, close };
126
+ return this.subscribe(input.matchId, subscription);
127
+ },
102
128
  }, {
103
129
  afterSeq: input.afterSeq,
104
130
  heartbeatMs: this.heartbeatMs,
105
131
  signal: input.signal,
106
132
  onUnreadable: (seq) => this.observer.unreadable?.(input.matchId, seq),
133
+ ...(revalidate ? { revalidate: () => revalidate(input.matchId, input.playerId) } : {}),
134
+ ...(closed
135
+ ? {
136
+ onClose: (reason) => closed(input.matchId, input.playerId, reason, Date.now() - openedAt),
137
+ }
138
+ : {}),
107
139
  });
108
140
  }
109
141
  logOf(matchId) {
@@ -114,16 +146,19 @@ export class LocalEventHub {
114
146
  this.logs.set(matchId, log);
115
147
  return log;
116
148
  }
117
- subscribe(matchId, playerId, wake, close) {
149
+ subscribe(matchId, subscription) {
118
150
  const set = this.listeners.get(matchId) ?? new Set();
119
- const subscription = { playerId, wake, close };
120
151
  set.add(subscription);
121
152
  this.listeners.set(matchId, set);
122
153
  this.open_ += 1;
154
+ if (subscription.lobby)
155
+ this.lobbyOpen_ += 1;
123
156
  return () => {
124
157
  if (!set.delete(subscription))
125
158
  return;
126
159
  this.open_ -= 1;
160
+ // Clears the flag as well, so a page still in flight at close cannot release it twice.
161
+ this.releaseLobby(subscription);
127
162
  if (set.size === 0) {
128
163
  this.listeners.delete(matchId);
129
164
  // Nothing reads this match any more, so its frames are only memory. The next stream of it
@@ -132,8 +167,15 @@ export class LocalEventHub {
132
167
  }
133
168
  };
134
169
  }
170
+ /** Stop charging a stream to the lobby share once its match is running. */
171
+ releaseLobby(subscription) {
172
+ if (!subscription.lobby)
173
+ return;
174
+ subscription.lobby = false;
175
+ this.lobbyOpen_ -= 1;
176
+ }
135
177
  /**
136
- * Enforce the three caps before a stream is built.
178
+ * Enforce the stream caps before a stream is built.
137
179
  *
138
180
  * The caller's own stale streams are closed FIRST, before either ceiling is read. Closing them is
139
181
  * not a concession to the caller, it is bookkeeping: a reconnect whose predecessor has not
@@ -145,12 +187,13 @@ export class LocalEventHub {
145
187
  * `perMatch` and `perProcess` then refuse whatever is still over, which is the case no client can
146
188
  * talk its way past.
147
189
  */
148
- makeRoom(matchId, playerId) {
190
+ makeRoom(matchId, playerId, lobby) {
149
191
  const set = this.listeners.get(matchId);
150
192
  if (set) {
151
193
  const mine = [...set].filter((subscription) => subscription.playerId === playerId);
152
- for (const stale of mine.slice(0, mine.length - this.limits.perPlayer + 1))
153
- stale.close();
194
+ for (const stale of mine.slice(0, mine.length - this.limits.perPlayer + 1)) {
195
+ stale.close('replaced');
196
+ }
154
197
  }
155
198
  if (this.open_ >= this.limits.perProcess) {
156
199
  throw new RateLimitedError('This server is holding as many event streams as it can', {
@@ -158,6 +201,16 @@ export class LocalEventHub {
158
201
  scope: 'process',
159
202
  });
160
203
  }
204
+ // Creating a lobby is unauthenticated. A caller can mint hundreds of host tokens and hold
205
+ // three streams per token, so lobby streams cannot be allowed to occupy the whole process cap.
206
+ // Running matches retain the other three quarters even when a single source spreads creation
207
+ // across many IPv6 /64s and exhausts the lobby pool.
208
+ if (lobby && this.lobbyOpen_ >= this.lobbyCap) {
209
+ throw new RateLimitedError('This server is holding as many lobby streams as it can', {
210
+ reason: 'too_many_streams',
211
+ scope: 'lobby',
212
+ });
213
+ }
161
214
  if ((this.listeners.get(matchId)?.size ?? 0) >= this.limits.perMatch) {
162
215
  throw new RateLimitedError('This match is holding as many event streams as it can', {
163
216
  reason: 'too_many_streams',
@@ -1 +1 @@
1
- {"version":3,"file":"LocalEventHub.js","sourceRoot":"","sources":["../../src/sse/LocalEventHub.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LocalEventHub.js","sourceRoot":"","sources":["../../src/sse/LocalEventHub.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,12 @@ export declare class MatchLog {
44
44
  * every one of its reads goes to the log exactly as before.
45
45
  */
46
46
  private notified;
47
+ /**
48
+ * Whether this process has seen the match's `match.started`, by notification or by reading it.
49
+ * A stream authenticated while the match was still a lobby can subscribe after that notification
50
+ * went out; this is how the hub learns the stream is no longer a lobby stream.
51
+ */
52
+ started: boolean;
47
53
  constructor(matchId: string, events: EventRepository);
48
54
  /**
49
55
  * Remember a published event and its frame.
@@ -1 +1 @@
1
- {"version":3,"file":"MatchLog.d.ts","sourceRoot":"","sources":["../../src/sse/MatchLog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAG9E,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,+EAA+E;IAC/E,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AAcD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,QAAQ;IAgBjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAhBzB,mFAAmF;IACnF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IACpE;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAAI;IAEpB,YACmB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,eAAe,EACtC;IAEJ;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAKlC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEjC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAejE;IAED,OAAO,CAAC,cAAc;YAUR,IAAI;IAalB,OAAO,CAAC,IAAI;CAOb"}
1
+ {"version":3,"file":"MatchLog.d.ts","sourceRoot":"","sources":["../../src/sse/MatchLog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAG9E,8EAA8E;AAC9E,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,+EAA+E;IAC/E,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB;AAcD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,QAAQ;IAsBjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAtBzB,mFAAmF;IACnF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IACpE;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAAI;IACpB;;;;OAIG;IACH,OAAO,UAAQ;IAEf,YACmB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,eAAe,EACtC;IAEJ;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAMlC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEjC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAejE;IAED,OAAO,CAAC,cAAc;YAUR,IAAI;IAclB,OAAO,CAAC,IAAI;CAOb"}
@@ -48,6 +48,12 @@ export class MatchLog {
48
48
  * every one of its reads goes to the log exactly as before.
49
49
  */
50
50
  notified = 0;
51
+ /**
52
+ * Whether this process has seen the match's `match.started`, by notification or by reading it.
53
+ * A stream authenticated while the match was still a lobby can subscribe after that notification
54
+ * went out; this is how the hub learns the stream is no longer a lobby stream.
55
+ */
56
+ started = false;
51
57
  constructor(matchId, events) {
52
58
  this.matchId = matchId;
53
59
  this.events = events;
@@ -61,6 +67,8 @@ export class MatchLog {
61
67
  record(event) {
62
68
  if (event.seq > this.notified)
63
69
  this.notified = event.seq;
70
+ if (event.type === 'match.started')
71
+ this.started = true;
64
72
  if (this.frames.has(event.seq))
65
73
  return;
66
74
  this.frames.set(event.seq, { seq: event.seq, text: tryFormatEvent(event) });
@@ -125,6 +133,8 @@ export class MatchLog {
125
133
  async read(afterSeq) {
126
134
  const rows = await this.events.listAfter(this.matchId, afterSeq, PAGE_SIZE);
127
135
  const page = rows.map((row) => {
136
+ if (row.type === 'match.started')
137
+ this.started = true;
128
138
  const known = this.frames.get(row.seq);
129
139
  if (known)
130
140
  return known;
@@ -1 +1 @@
1
- {"version":3,"file":"MatchLog.js","sourceRoot":"","sources":["../../src/sse/MatchLog.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AASpD;;;;;;GAMG;AACH,MAAM,WAAW,GAAG,GAAG,CAAA;AAEvB,8BAA8B;AAC9B,MAAM,SAAS,GAAG,GAAG,CAAA;AAErB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,QAAQ;IAgBA,OAAO;IACP,MAAM;IAhBzB,mFAAmF;IAClE,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAA;IACtC,QAAQ,GAAG,IAAI,GAAG,EAAiC,CAAA;IACpE;;;;;;;;OAQG;IACK,QAAQ,GAAG,CAAC,CAAA;IAEpB,YACmB,OAAe,EACf,MAAuB;uBADvB,OAAO;sBACP,MAAM;IACtB,CAAC;IAEJ;;;;;OAKG;IACH,MAAM,CAAC,KAAqB;QAC1B,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAA;QACxD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAM;QACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC3E,IAAI,CAAC,IAAI,EAAE,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,OAAe;QACtB,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAA;IACtD,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,KAAK,GAAG,KAAK;QACxC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;YAC9C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,QAAQ,CAAA;YACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,OAAO,EAAE,CAAA;QACxC,CAAC;QACD,8FAA8F;QAC9F,iCAAiC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC1C,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YAC/C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACpC,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,cAAc,CAAC,QAAgB;QACrC,MAAM,IAAI,GAAiB,EAAE,CAAA;QAC7B,KAAK,IAAI,GAAG,GAAG,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAClC,IAAI,CAAC,KAAK;gBAAE,MAAK;YACjB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,QAAgB;QACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;QAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACtC,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAA;YACvB,MAAM,KAAK,GAAe,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAA;YACrE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAC/B,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,IAAI,EAAE,CAAA;QACX,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,IAAI;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,WAAW,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;YACxC,IAAI,MAAM,CAAC,IAAI;gBAAE,OAAM;YACvB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"MatchLog.js","sourceRoot":"","sources":["../../src/sse/MatchLog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Logger } from '@chaos-overlords/kernel';
2
+ import type { EventHubObserver } from './LocalEventHub';
3
+ /**
4
+ * The `closed` observer every runtime wants: one line per ended stream, loud when the server
5
+ * dropped a stream its client was still reading.
6
+ *
7
+ * A client going away is the ordinary end of every stream, so it stays at debug; a stream the
8
+ * server ended for a reason of its own is the one an operator is looking for when a player
9
+ * reports a lost connection on a server that was up.
10
+ */
11
+ export declare function logStreamClosed(logger: Logger): NonNullable<EventHubObserver['closed']>;
12
+ //# sourceMappingURL=closeLog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closeLog.d.ts","sourceRoot":"","sources":["../../src/sse/closeLog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAErD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEvD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAOvF"}
@@ -0,0 +1,21 @@
1
+ import { isUnexpectedClose } from './createSseResponse';
2
+ /**
3
+ * The `closed` observer every runtime wants: one line per ended stream, loud when the server
4
+ * dropped a stream its client was still reading.
5
+ *
6
+ * A client going away is the ordinary end of every stream, so it stays at debug; a stream the
7
+ * server ended for a reason of its own is the one an operator is looking for when a player
8
+ * reports a lost connection on a server that was up.
9
+ */
10
+ export function logStreamClosed(logger) {
11
+ return (matchId, playerId, reason, openMs) => {
12
+ const fields = { matchId, playerId, reason, openMs };
13
+ if (isUnexpectedClose(reason))
14
+ logger.warn('event stream dropped by the server', fields);
15
+ else if (reason === 'client_gone')
16
+ logger.debug('event stream closed by the client', fields);
17
+ else
18
+ logger.info('event stream closed', fields);
19
+ };
20
+ }
21
+ //# sourceMappingURL=closeLog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closeLog.js","sourceRoot":"","sources":["../../src/sse/closeLog.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAGvD;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;QACpD,IAAI,iBAAiB,CAAC,MAAM,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,MAAM,CAAC,CAAA;aACnF,IAAI,MAAM,KAAK,aAAa;YAAE,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,MAAM,CAAC,CAAA;;YACvF,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;IACjD,CAAC,CAAA;AACH,CAAC"}
@@ -22,14 +22,53 @@ export interface EventStreamSource {
22
22
  * it already holds and how a player's stale stream is dropped to make room for their reconnect.
23
23
  * It is safe to call at any time and does nothing once the stream is closed.
24
24
  */
25
- subscribe(wake: () => void, close: () => void): () => void;
25
+ subscribe(wake: () => void, close: (reason: HubCloseReason) => void): () => void;
26
26
  }
27
+ /** Why the hub ended a stream from its side; see `EventStreamSource.subscribe`. */
28
+ export type HubCloseReason =
29
+ /** The player's membership was revoked, so the streams it held were hung up. */
30
+ 'revoked'
31
+ /** The player opened another stream and this, their oldest, made room for it. */
32
+ | 'replaced'
33
+ /** The process is shutting down, or the object holding the stream is. */
34
+ | 'shutdown';
35
+ /**
36
+ * Why a stream ended.
37
+ *
38
+ * The client sees every one of these the same way — the body simply ends — so this is the only
39
+ * record of which it was. A stream the server dropped while the player was still reading it shows
40
+ * up on their screen as a lost connection, and without the reason in the log a membership lookup
41
+ * that failed once on a database hiccup is indistinguishable from a deploy.
42
+ */
43
+ export type SseCloseReason = HubCloseReason
44
+ /** The client went away: the request was aborted, or the consumer cancelled the body. */
45
+ | 'client_gone'
46
+ /** The periodic membership check answered that this player is no longer a member. */
47
+ | 'membership_revoked'
48
+ /** The periodic membership check failed or hung too many times in a row to trust the stream. */
49
+ | 'membership_unverified'
50
+ /** The consumer stopped reading for long enough that the connection is presumed dead. */
51
+ | 'stalled'
52
+ /** Reading the log failed, and the stream was errored rather than closed. */
53
+ | 'read_failed';
54
+ /**
55
+ * Whether a close is one a healthy client should never see: the server dropped a stream that was
56
+ * still being read, for a reason of its own.
57
+ *
58
+ * `client_gone`, `replaced` and `shutdown` are routine, and a revoked membership is the stream
59
+ * doing its job. The rest are worth an operator's attention.
60
+ */
61
+ export declare function isUnexpectedClose(reason: SseCloseReason): boolean;
27
62
  export interface SseOptions {
28
63
  afterSeq: number;
29
64
  heartbeatMs: number;
30
65
  signal: AbortSignal;
31
66
  /** Told the sequence of a stored event this build cannot validate, so it can be logged. */
32
67
  onUnreadable?: (seq: number) => void;
68
+ /** Confirm that the subscription still belongs to an active member. */
69
+ revalidate?: () => Promise<boolean>;
70
+ /** Told once, when the stream ends, why it ended. */
71
+ onClose?: (reason: SseCloseReason) => void;
33
72
  }
34
73
  /**
35
74
  * A server-sent event stream over a persisted, sequence-numbered log.
@@ -1 +1 @@
1
- {"version":3,"file":"createSseResponse.d.ts","sourceRoot":"","sources":["../../src/sse/createSseResponse.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAE7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAC9D;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;IAClC;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CAC3D;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,WAAW,CAAA;IACnB,2FAA2F;IAC3F,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CACrC;AAkCD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,CAiK1F;AASD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,IAAI,QAAQ,CAE/C;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAIzD;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAMnE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAO9D"}
1
+ {"version":3,"file":"createSseResponse.d.ts","sourceRoot":"","sources":["../../src/sse/createSseResponse.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAE7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAC9D;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;IAClC;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CACjF;AAED,mFAAmF;AACnF,MAAM,MAAM,cAAc;AACxB,gFAAgF;AAC9E,SAAS;AACX,iFAAiF;GAC/E,UAAU;AACZ,yEAAyE;GACvE,UAAU,CAAA;AAEd;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GACtB,cAAc;AAChB,yFAAyF;GACvF,aAAa;AACf,qFAAqF;GACnF,oBAAoB;AACtB,gGAAgG;GAC9F,uBAAuB;AACzB,yFAAyF;GACvF,SAAS;AACX,6EAA6E;GAC3E,aAAa,CAAA;AAEjB;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAEjE;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,WAAW,CAAA;IACnB,2FAA2F;IAC3F,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACnC,qDAAqD;IACrD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAA;CAC3C;AA8CD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,CAgN1F;AASD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,IAAI,QAAQ,CAE/C;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAIzD;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAMnE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAO9D"}