bunqueue 2.7.18 → 2.7.19

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 (67) hide show
  1. package/dist/application/backgroundTasks.d.ts.map +1 -1
  2. package/dist/application/backgroundTasks.js +41 -0
  3. package/dist/application/backgroundTasks.js.map +1 -1
  4. package/dist/application/queueManager.d.ts +8 -1
  5. package/dist/application/queueManager.d.ts.map +1 -1
  6. package/dist/application/queueManager.js +37 -23
  7. package/dist/application/queueManager.js.map +1 -1
  8. package/dist/client/tcp/client.d.ts.map +1 -1
  9. package/dist/client/tcp/client.js +11 -8
  10. package/dist/client/tcp/client.js.map +1 -1
  11. package/dist/client/worker/ackBatcher.d.ts.map +1 -1
  12. package/dist/client/worker/ackBatcher.js +18 -8
  13. package/dist/client/worker/ackBatcher.js.map +1 -1
  14. package/dist/client/workflow/compensator.d.ts.map +1 -1
  15. package/dist/client/workflow/compensator.js +10 -2
  16. package/dist/client/workflow/compensator.js.map +1 -1
  17. package/dist/client/workflow/loops.d.ts.map +1 -1
  18. package/dist/client/workflow/loops.js +7 -0
  19. package/dist/client/workflow/loops.js.map +1 -1
  20. package/dist/client/workflow/types.d.ts +4 -0
  21. package/dist/client/workflow/types.d.ts.map +1 -1
  22. package/dist/domain/queue/dlqShard.d.ts.map +1 -1
  23. package/dist/domain/queue/dlqShard.js +6 -0
  24. package/dist/domain/queue/dlqShard.js.map +1 -1
  25. package/dist/infrastructure/backup/s3BackupOperations.d.ts.map +1 -1
  26. package/dist/infrastructure/backup/s3BackupOperations.js +44 -6
  27. package/dist/infrastructure/backup/s3BackupOperations.js.map +1 -1
  28. package/dist/infrastructure/cloud/cloudAgent.d.ts +1 -1
  29. package/dist/infrastructure/cloud/cloudAgent.d.ts.map +1 -1
  30. package/dist/infrastructure/cloud/cloudAgent.js +9 -11
  31. package/dist/infrastructure/cloud/cloudAgent.js.map +1 -1
  32. package/dist/infrastructure/cloud/redact.d.ts +11 -0
  33. package/dist/infrastructure/cloud/redact.d.ts.map +1 -0
  34. package/dist/infrastructure/cloud/redact.js +22 -0
  35. package/dist/infrastructure/cloud/redact.js.map +1 -0
  36. package/dist/infrastructure/cloud/snapshotCollector.d.ts +4 -0
  37. package/dist/infrastructure/cloud/snapshotCollector.d.ts.map +1 -1
  38. package/dist/infrastructure/cloud/snapshotCollector.js +32 -17
  39. package/dist/infrastructure/cloud/snapshotCollector.js.map +1 -1
  40. package/dist/infrastructure/cloud/snapshotHelpers.d.ts +9 -2
  41. package/dist/infrastructure/cloud/snapshotHelpers.d.ts.map +1 -1
  42. package/dist/infrastructure/cloud/snapshotHelpers.js +10 -8
  43. package/dist/infrastructure/cloud/snapshotHelpers.js.map +1 -1
  44. package/dist/infrastructure/persistence/sqlite.d.ts +1 -1
  45. package/dist/infrastructure/persistence/sqlite.d.ts.map +1 -1
  46. package/dist/infrastructure/persistence/sqlite.js +18 -0
  47. package/dist/infrastructure/persistence/sqlite.js.map +1 -1
  48. package/dist/infrastructure/persistence/sqliteSerializer.d.ts +16 -0
  49. package/dist/infrastructure/persistence/sqliteSerializer.d.ts.map +1 -1
  50. package/dist/infrastructure/persistence/sqliteSerializer.js +73 -8
  51. package/dist/infrastructure/persistence/sqliteSerializer.js.map +1 -1
  52. package/dist/infrastructure/scheduler/cronScheduler.d.ts.map +1 -1
  53. package/dist/infrastructure/scheduler/cronScheduler.js +11 -1
  54. package/dist/infrastructure/scheduler/cronScheduler.js.map +1 -1
  55. package/dist/infrastructure/server/protocol.d.ts +4 -0
  56. package/dist/infrastructure/server/protocol.d.ts.map +1 -1
  57. package/dist/infrastructure/server/protocol.js +17 -2
  58. package/dist/infrastructure/server/protocol.js.map +1 -1
  59. package/dist/infrastructure/server/socketWriteQueue.d.ts +67 -0
  60. package/dist/infrastructure/server/socketWriteQueue.d.ts.map +1 -0
  61. package/dist/infrastructure/server/socketWriteQueue.js +127 -0
  62. package/dist/infrastructure/server/socketWriteQueue.js.map +1 -0
  63. package/dist/infrastructure/server/tcp.d.ts +17 -0
  64. package/dist/infrastructure/server/tcp.d.ts.map +1 -1
  65. package/dist/infrastructure/server/tcp.js +104 -10
  66. package/dist/infrastructure/server/tcp.js.map +1 -1
  67. package/package.json +1 -1
@@ -22,17 +22,58 @@ export function unpack(buffer, fallback, context) {
22
22
  return fallback;
23
23
  }
24
24
  }
25
+ /**
26
+ * Symbol marker stamped on a Job whose `depends_on` blob failed to decode.
27
+ *
28
+ * A corrupt dependency list must NOT collapse into `dependsOn: []` (which the
29
+ * recovery path treats as "ready, no deps" -> out-of-order execution). Rather
30
+ * than parking the job behind a magic-string dependency (which could collide
31
+ * with a real user-supplied jobId, and which leaks into waitingDeps forever),
32
+ * we signal corruption with a Symbol-keyed flag that cannot collide with any
33
+ * user data. The recovery path detects this flag and routes the job to the DLQ.
34
+ *
35
+ * A Symbol property is non-enumerable to JSON/msgpack and is never persisted,
36
+ * so it only exists on the in-memory Job for the duration of recovery.
37
+ */
38
+ export const CORRUPT_DEPENDS_ON = Symbol('bunqueue.corruptDependsOn');
39
+ /** True if a Job was recovered with a corrupt `depends_on` blob. */
40
+ export function isCorruptDependsOn(job) {
41
+ return job[CORRUPT_DEPENDS_ON] === true;
42
+ }
43
+ /**
44
+ * Decode a job's `depends_on` blob, distinguishing a genuine decode FAILURE
45
+ * from a legitimately empty list. On decode failure, returns `corrupt: true`
46
+ * (with empty ids) instead of silently swallowing it into a healthy empty array.
47
+ */
48
+ function decodeDependsOn(buffer, context) {
49
+ if (!buffer)
50
+ return { ids: [], corrupt: false };
51
+ try {
52
+ return { ids: msgpackDecode(buffer), corrupt: false };
53
+ }
54
+ catch (err) {
55
+ storageLog.error('Corrupt depends_on blob (routing job to DLQ)', {
56
+ context,
57
+ error: String(err),
58
+ });
59
+ return { ids: [], corrupt: true };
60
+ }
61
+ }
25
62
  /** Convert database row to Job object */
26
63
  export function rowToJob(row) {
27
64
  const jobContext = `rowToJob:${row.id}`;
28
- const dependsOn = row.depends_on
29
- ? unpack(row.depends_on, [], `${jobContext}:dependsOn`)
30
- : [];
65
+ // A corrupt depends_on blob must NOT be silently swallowed into [] (which the
66
+ // recovery path treats as "ready, no deps" -> out-of-order execution).
67
+ // decodeDependsOn() surfaces the corruption via a `corrupt` flag; we then
68
+ // stamp the returned Job with the CORRUPT_DEPENDS_ON symbol so the recovery
69
+ // path can route it to the DLQ instead of enqueuing it as ready.
70
+ const decoded = decodeDependsOn(row.depends_on, `${jobContext}:dependsOn`);
71
+ const dependsOn = decoded.ids;
31
72
  const childrenIds = row.children_ids
32
73
  ? unpack(row.children_ids, [], `${jobContext}:childrenIds`)
33
74
  : [];
34
75
  const tags = row.tags ? unpack(row.tags, [], `${jobContext}:tags`) : [];
35
- return {
76
+ const job = {
36
77
  id: jobId(row.id),
37
78
  queue: row.queue,
38
79
  data: unpack(row.data, {}, `${jobContext}:data`),
@@ -81,6 +122,30 @@ export function rowToJob(row) {
81
122
  ? unpack(row.timeline, [], `${jobContext}:timeline`)
82
123
  : [],
83
124
  };
125
+ // Stamp a collision-proof corruption marker (non-enumerable Symbol, never
126
+ // persisted) so the recovery path routes this job to the DLQ rather than
127
+ // enqueuing it as ready. We keep dependsOn: [] here — the real deps are
128
+ // unrecoverable — but the marker prevents out-of-order execution.
129
+ if (decoded.corrupt) {
130
+ Object.defineProperty(job, CORRUPT_DEPENDS_ON, {
131
+ value: true,
132
+ enumerable: false,
133
+ configurable: true,
134
+ });
135
+ }
136
+ return job;
137
+ }
138
+ /**
139
+ * Brand a decoded id as a JobId, preserving its runtime type.
140
+ *
141
+ * Production ids are UUIDv7 strings (identity). msgpackr faithfully round-trips
142
+ * the original runtime type (including bigint), so we only stringify when the
143
+ * decoded value is genuinely non-string rather than unconditionally coercing —
144
+ * which would otherwise rewrite a recovered job's id and break id equality on
145
+ * the critical-loss -> DLQ -> restart recovery path.
146
+ */
147
+ function brandId(id) {
148
+ return typeof id === 'string' ? jobId(id) : id;
84
149
  }
85
150
  /** Reconstruct DlqEntry from MessagePack-decoded data */
86
151
  export function reconstructDlqEntry(entry) {
@@ -88,10 +153,10 @@ export function reconstructDlqEntry(entry) {
88
153
  ...entry,
89
154
  job: {
90
155
  ...entry.job,
91
- id: jobId(String(entry.job.id)),
92
- dependsOn: entry.job.dependsOn.map((id) => jobId(String(id))),
93
- parentId: entry.job.parentId ? jobId(String(entry.job.parentId)) : null,
94
- childrenIds: entry.job.childrenIds.map((id) => jobId(String(id))),
156
+ id: brandId(entry.job.id),
157
+ dependsOn: entry.job.dependsOn.map((id) => brandId(id)),
158
+ parentId: entry.job.parentId !== null ? brandId(entry.job.parentId) : null,
159
+ childrenIds: entry.job.childrenIds.map((id) => brandId(id)),
95
160
  },
96
161
  };
97
162
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sqliteSerializer.js","sourceRoot":"","sources":["../../../src/infrastructure/persistence/sqliteSerializer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqliteSerializer.js","sourceRoot":"","sources":["../../../src/infrastructure/persistence/sqliteSerializer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cronScheduler.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/scheduler/cronScheduler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,YAAY,EAA4B,MAAM,yBAAyB,CAAC;AACpG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAUvD,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAKD,6BAA6B;AAC7B,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEhF,uCAAuC;AACvC,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAQ9F;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4D;IACrF,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyE;IAClG,iCAAiC;IACjC,OAAO,CAAC,UAAU,CAAK;IACvB,sDAAsD;IACtD,OAAO,CAAC,SAAS,CAA8C;IAC/D,qCAAqC;IACrC,OAAO,CAAC,cAAc,CAA+C;IACrE,uCAAuC;IACvC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,aAAa,CAAyE;IAC9F,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;gBAG7C,OAAO,CAAC,EAAE,mBAAmB;IAKzC;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAIhD;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAIvD;;OAEG;IACH,sBAAsB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI;IAIlE;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI;IAIxF;;;OAGG;IACH,KAAK,IAAI,IAAI;IAab;;OAEG;IACH,IAAI,IAAI,IAAI;IAYZ;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;IAoDjC;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAe7B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAItC;;OAEG;IACH,IAAI,IAAI,OAAO,EAAE;IAIjB;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI;IA4B5B;;;OAGG;IACH,OAAO,CAAC,YAAY;IA6BpB;;;;OAIG;YACW,IAAI;IAwGlB,wDAAwD;YAC1C,WAAW;IA4CzB;;;OAGG;IACH,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;CA4BvE"}
1
+ {"version":3,"file":"cronScheduler.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/scheduler/cronScheduler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,YAAY,EAA4B,MAAM,yBAAyB,CAAC;AACpG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAUvD,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAKD,6BAA6B;AAC7B,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEhF,uCAAuC;AACvC,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAQ9F;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4D;IACrF,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyE;IAClG,iCAAiC;IACjC,OAAO,CAAC,UAAU,CAAK;IACvB,sDAAsD;IACtD,OAAO,CAAC,SAAS,CAA8C;IAC/D,qCAAqC;IACrC,OAAO,CAAC,cAAc,CAA+C;IACrE,uCAAuC;IACvC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,UAAU,CAA6C;IAC/D,OAAO,CAAC,aAAa,CAAyE;IAC9F,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;gBAG7C,OAAO,CAAC,EAAE,mBAAmB;IAKzC;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAIhD;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI;IAIvD;;OAEG;IACH,sBAAsB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI;IAIlE;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI;IAIxF;;;OAGG;IACH,KAAK,IAAI,IAAI;IAab;;OAEG;IACH,IAAI,IAAI,IAAI;IAYZ;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO;IAuDjC;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAkB7B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAItC;;OAEG;IACH,IAAI,IAAI,OAAO,EAAE;IAIjB;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI;IA4B5B;;;OAGG;IACH,OAAO,CAAC,YAAY;IA6BpB;;;;OAIG;YACW,IAAI;IA4GlB,wDAAwD;YAC1C,WAAW;IA4CzB;;;OAGG;IACH,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;CA4BvE"}
@@ -125,6 +125,9 @@ export class CronScheduler {
125
125
  const existing = this.cronJobs.get(cron.name);
126
126
  if (existing) {
127
127
  cron.executions = existing.cron.executions;
128
+ // Reset per-name overlap tracking on upsert: the redefined cron starts
129
+ // fresh and must not be blocked by the previous definition's last fire (H10)
130
+ this.lastFiredAt.delete(cron.name);
128
131
  }
129
132
  // Handle immediately option: set nextRun to now so it fires on next tick
130
133
  // Only on first creation, not on upsert (otherwise it overrides skipMissedOnRestart)
@@ -150,6 +153,9 @@ export class CronScheduler {
150
153
  return false;
151
154
  // Just remove from map - heap entry becomes stale (lazy deletion)
152
155
  this.cronJobs.delete(name);
156
+ // Clear per-name overlap tracking so a future cron re-added with the same
157
+ // name isn't blocked by this cron's stale last-fire timestamp (fixes H10)
158
+ this.lastFiredAt.delete(name);
153
159
  // Reschedule in case removed cron was the next timer target
154
160
  if (this.started) {
155
161
  this.scheduleNext();
@@ -262,13 +268,17 @@ export class CronScheduler {
262
268
  // Calculate new state BEFORE pushing job
263
269
  const newExecutions = cron.executions + 1;
264
270
  const executionTime = Date.now();
271
+ // The slot this fire was scheduled for (anchor for fixed-rate intervals)
272
+ const scheduledRun = cron.nextRun;
265
273
  let newNextRun;
266
274
  if (cron.schedule) {
267
275
  const expanded = expandCronShortcut(cron.schedule);
268
276
  newNextRun = getNextCronRun(expanded, executionTime, cron.timezone ?? undefined);
269
277
  }
270
278
  else if (cron.repeatEvery) {
271
- newNextRun = getNextIntervalRun(cron.repeatEvery, executionTime);
279
+ // Fixed-rate: anchor to the scheduled slot, not wall-clock now, so a
280
+ // slow/late job does not cumulatively drift the schedule forward (M4)
281
+ newNextRun = getNextIntervalRun(cron.repeatEvery, scheduledRun);
272
282
  }
273
283
  else {
274
284
  newNextRun = executionTime;
@@ -1 +1 @@
1
- {"version":3,"file":"cronScheduler.js","sourceRoot":"","sources":["../../../src/infrastructure/scheduler/cronScheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cronScheduler.js","sourceRoot":"","sources":["../../../src/infrastructure/scheduler/cronScheduler.ts"],"names":[],"mappings":"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"}
@@ -60,6 +60,10 @@ export declare class FrameParser {
60
60
  * @throws {FrameSizeError} if frame length exceeds maxFrameSize
61
61
  */
62
62
  addData(data: Uint8Array): Uint8Array[];
63
+ /** Number of bytes currently buffered awaiting a complete frame. */
64
+ get bufferedBytes(): number;
65
+ /** True while a partial (incomplete) frame is buffered. */
66
+ get hasPartialFrame(): boolean;
63
67
  /** Clear the internal buffer */
64
68
  clear(): void;
65
69
  /** Create a framed message */
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/server/protocol.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,KAAK,QAAQ,EAAS,MAAM,6BAA6B,CAAC;AAEnE,uCAAuC;AACvC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAUzD;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAE5D;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAYrD;AAED,0BAA0B;AAC1B,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW7D;AAED,6BAA6B;AAC7B,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAM5D;AAED,qDAAqD;AACrD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/D,MAAM,GAAG,IAAI,CA+Bf;AAED,0CAA0C;AAC1C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAmBlF;AAED,8DAA8D;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,uBAAuB;AACvB,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,sCAAsC;AACtC,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAKvE;AAED,4BAA4B;AAC5B,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,sCAAsC;AACtC,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAM;IAEpB,oDAAoD;IACpD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAgB/B,mCAAmC;IACnC,YAAY,IAAI,MAAM;IAItB,mBAAmB;IACnB,KAAK,IAAI,IAAI;CAGd;AAED,yEAAyE;AACzE,eAAO,MAAM,cAAc,QAAmB,CAAC;AAE/C,mDAAmD;AACnD,qBAAa,cAAe,SAAQ,KAAK;aAErB,aAAa,EAAE,MAAM;aACrB,OAAO,EAAE,MAAM;gBADf,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKlC;AAED,mCAAmC;AACnC,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,YAAY,GAAE,MAAuB;IAIjD;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE;IAuCvC,gCAAgC;IAChC,KAAK,IAAI,IAAI;IAIb,8BAA8B;IAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU;CAU3C"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/server/protocol.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,KAAK,QAAQ,EAAS,MAAM,6BAA6B,CAAC;AAEnE,uCAAuC;AACvC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAUzD;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAE5D;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAYrD;AAED,0BAA0B;AAC1B,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW7D;AAED,6BAA6B;AAC7B,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAM5D;AAED,qDAAqD;AACrD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/D,MAAM,GAAG,IAAI,CA+Bf;AAED,0CAA0C;AAC1C,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAmBlF;AAED,8DAA8D;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,uBAAuB;AACvB,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,sCAAsC;AACtC,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAKvE;AAED,4BAA4B;AAC5B,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,sCAAsC;AACtC,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAM;IAEpB,oDAAoD;IACpD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAgB/B,mCAAmC;IACnC,YAAY,IAAI,MAAM;IAItB,mBAAmB;IACnB,KAAK,IAAI,IAAI;CAGd;AAED,yEAAyE;AACzE,eAAO,MAAM,cAAc,QAAmB,CAAC;AAE/C,mDAAmD;AACnD,qBAAa,cAAe,SAAQ,KAAK;aAErB,aAAa,EAAE,MAAM;aACrB,OAAO,EAAE,MAAM;gBADf,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKlC;AAED,mCAAmC;AACnC,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,YAAY,GAAE,MAAuB;IAIjD;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE;IA8CvC,oEAAoE;IACpE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,2DAA2D;IAC3D,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,gCAAgC;IAChC,KAAK,IAAI,IAAI;IAIb,8BAA8B;IAC9B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU;CAU3C"}
@@ -174,14 +174,21 @@ export class FrameParser {
174
174
  (this.buffer[2] << 8) |
175
175
  this.buffer[3]) >>>
176
176
  0;
177
- // Validate frame size to prevent memory exhaustion DoS
177
+ // Validate frame size to prevent memory exhaustion DoS. A single frame's
178
+ // declared length can never exceed maxFrameSize (64MB), so the partial
179
+ // buffer is bounded by maxFrameSize regardless of how it is segmented
180
+ // across TCP reads. Slowloris (a connection that declares a large frame
181
+ // then never completes it) is handled at the transport layer by an idle
182
+ // read timeout in the server, NOT by dropping legal large partial frames.
178
183
  if (length > this.maxFrameSize) {
179
184
  // Clear buffer to prevent further processing of malicious data
180
185
  this.buffer = new Uint8Array(0);
181
186
  throw new FrameSizeError(length, this.maxFrameSize);
182
187
  }
183
188
  if (this.buffer.length < 4 + length) {
184
- // Not enough data
189
+ // Not enough data for this (legal, < maxFrameSize) frame yet. Keep the
190
+ // partial bytes buffered until the rest of the frame arrives across
191
+ // subsequent TCP segments.
185
192
  break;
186
193
  }
187
194
  // Extract frame
@@ -190,6 +197,14 @@ export class FrameParser {
190
197
  }
191
198
  return frames;
192
199
  }
200
+ /** Number of bytes currently buffered awaiting a complete frame. */
201
+ get bufferedBytes() {
202
+ return this.buffer.length;
203
+ }
204
+ /** True while a partial (incomplete) frame is buffered. */
205
+ get hasPartialFrame() {
206
+ return this.buffer.length > 0;
207
+ }
193
208
  /** Clear the internal buffer */
194
209
  clear() {
195
210
  this.buffer = new Uint8Array(0);
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/infrastructure/server/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/infrastructure/server/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Per-socket write queue
3
+ * =================================================================
4
+ * Bun's `socket.write()` may write FEWER bytes than provided when the kernel
5
+ * send buffer is full (backpressure). The unwritten tail is NOT retained by
6
+ * Bun — the caller is responsible for buffering it and resending once the
7
+ * socket fires `drain`. Ignoring the short count silently drops response
8
+ * bytes, corrupting the length-prefixed frame protocol.
9
+ *
10
+ * This helper buffers any unwritten tail per-socket and preserves ordering:
11
+ * while a pending tail exists, all subsequent writes are appended to the queue
12
+ * (never written ahead of older bytes), and the queue is flushed in order from
13
+ * the `drain` handler.
14
+ */
15
+ import type { Socket } from 'bun';
16
+ /** Minimal write surface a socket must expose for the queue. */
17
+ interface WritableSocket {
18
+ write(data: Uint8Array): number;
19
+ }
20
+ /** Per-socket pending write state. Stored on `socket.data`. */
21
+ export declare class SocketWriteQueue {
22
+ /** Buffered chunks waiting to be (re)written, in order. */
23
+ private pending;
24
+ /** Byte offset into pending[0] already written by a short write. */
25
+ private offset;
26
+ /** Total queued bytes (for bounds / observability). */
27
+ private queuedBytes;
28
+ /** Max queued bytes before the queue reports over-budget (0 = unbounded). */
29
+ private readonly maxBytes;
30
+ /**
31
+ * @param maxBytes Soft cap on buffered bytes. When `bytesQueued` exceeds this,
32
+ * `isOverBudget` becomes true and the owner should drop the connection
33
+ * (bounds write-side memory for a client that stopped reading). 0 disables.
34
+ */
35
+ constructor(maxBytes?: number);
36
+ /**
37
+ * True once the buffered byte count exceeds the configured cap. The owner is
38
+ * expected to terminate the connection and `clear()` the queue.
39
+ */
40
+ get isOverBudget(): boolean;
41
+ /**
42
+ * Enqueue `data` for delivery on `socket`, preserving order.
43
+ * Returns false if the socket appears closed (write threw / returned < 0).
44
+ */
45
+ write(socket: WritableSocket, data: Uint8Array): boolean;
46
+ /**
47
+ * Flush as much of the pending queue as the socket accepts.
48
+ * Call from the socket's `drain` handler. Stops at the first short write,
49
+ * leaving the remainder queued for the next drain.
50
+ */
51
+ flush(socket: WritableSocket): void;
52
+ /** Number of bytes still buffered awaiting drain. */
53
+ get bytesQueued(): number;
54
+ /** Whether there is unwritten data awaiting drain. */
55
+ get hasPending(): boolean;
56
+ /** Drop all buffered data (e.g. on close). */
57
+ clear(): void;
58
+ }
59
+ /**
60
+ * Convenience: write through a socket whose `data` carries a `writeQueue`.
61
+ * Keeps call sites in tcp.ts terse and consistent.
62
+ */
63
+ export declare function queuedWrite<T extends {
64
+ writeQueue: SocketWriteQueue;
65
+ }>(socket: Socket<T>, data: Uint8Array): void;
66
+ export {};
67
+ //# sourceMappingURL=socketWriteQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socketWriteQueue.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/server/socketWriteQueue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAElC,gEAAgE;AAChE,UAAU,cAAc;IACtB,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;CACjC;AAED,+DAA+D;AAC/D,qBAAa,gBAAgB;IAC3B,2DAA2D;IAC3D,OAAO,CAAC,OAAO,CAAoB;IACnC,oEAAoE;IACpE,OAAO,CAAC,MAAM,CAAK;IACnB,uDAAuD;IACvD,OAAO,CAAC,WAAW,CAAK;IACxB,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC;;;;OAIG;gBACS,QAAQ,SAAI;IAIxB;;;OAGG;IACH,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO;IAgCxD;;;;OAIG;IACH,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IA+BnC,qDAAqD;IACrD,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,sDAAsD;IACtD,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,8CAA8C;IAC9C,KAAK,IAAI,IAAI;CAKd;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAE,UAAU,EAAE,gBAAgB,CAAA;CAAE,EACpE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,IAAI,EAAE,UAAU,GACf,IAAI,CAEN"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Per-socket write queue
3
+ * =================================================================
4
+ * Bun's `socket.write()` may write FEWER bytes than provided when the kernel
5
+ * send buffer is full (backpressure). The unwritten tail is NOT retained by
6
+ * Bun — the caller is responsible for buffering it and resending once the
7
+ * socket fires `drain`. Ignoring the short count silently drops response
8
+ * bytes, corrupting the length-prefixed frame protocol.
9
+ *
10
+ * This helper buffers any unwritten tail per-socket and preserves ordering:
11
+ * while a pending tail exists, all subsequent writes are appended to the queue
12
+ * (never written ahead of older bytes), and the queue is flushed in order from
13
+ * the `drain` handler.
14
+ */
15
+ /** Per-socket pending write state. Stored on `socket.data`. */
16
+ export class SocketWriteQueue {
17
+ /** Buffered chunks waiting to be (re)written, in order. */
18
+ pending = [];
19
+ /** Byte offset into pending[0] already written by a short write. */
20
+ offset = 0;
21
+ /** Total queued bytes (for bounds / observability). */
22
+ queuedBytes = 0;
23
+ /** Max queued bytes before the queue reports over-budget (0 = unbounded). */
24
+ maxBytes;
25
+ /**
26
+ * @param maxBytes Soft cap on buffered bytes. When `bytesQueued` exceeds this,
27
+ * `isOverBudget` becomes true and the owner should drop the connection
28
+ * (bounds write-side memory for a client that stopped reading). 0 disables.
29
+ */
30
+ constructor(maxBytes = 0) {
31
+ this.maxBytes = maxBytes > 0 ? maxBytes : 0;
32
+ }
33
+ /**
34
+ * True once the buffered byte count exceeds the configured cap. The owner is
35
+ * expected to terminate the connection and `clear()` the queue.
36
+ */
37
+ get isOverBudget() {
38
+ return this.maxBytes > 0 && this.queuedBytes > this.maxBytes;
39
+ }
40
+ /**
41
+ * Enqueue `data` for delivery on `socket`, preserving order.
42
+ * Returns false if the socket appears closed (write threw / returned < 0).
43
+ */
44
+ write(socket, data) {
45
+ if (data.length === 0)
46
+ return true;
47
+ // If a tail is already pending, do NOT write ahead of it — append and wait
48
+ // for drain to flush in order.
49
+ if (this.pending.length > 0) {
50
+ this.pending.push(data);
51
+ this.queuedBytes += data.length;
52
+ return true;
53
+ }
54
+ let written;
55
+ try {
56
+ written = socket.write(data);
57
+ }
58
+ catch {
59
+ return false;
60
+ }
61
+ if (written < 0) {
62
+ // Socket closed.
63
+ return false;
64
+ }
65
+ if (written < data.length) {
66
+ // Short write: buffer the unwritten tail; flush on drain.
67
+ const tail = data.subarray(written);
68
+ this.pending.push(tail);
69
+ this.queuedBytes += tail.length;
70
+ }
71
+ return true;
72
+ }
73
+ /**
74
+ * Flush as much of the pending queue as the socket accepts.
75
+ * Call from the socket's `drain` handler. Stops at the first short write,
76
+ * leaving the remainder queued for the next drain.
77
+ */
78
+ flush(socket) {
79
+ while (this.pending.length > 0) {
80
+ const chunk = this.pending[0];
81
+ const view = this.offset > 0 ? chunk.subarray(this.offset) : chunk;
82
+ let written;
83
+ try {
84
+ written = socket.write(view);
85
+ }
86
+ catch {
87
+ return;
88
+ }
89
+ if (written <= 0) {
90
+ // Socket not ready / closed; wait for the next drain.
91
+ return;
92
+ }
93
+ if (written < view.length) {
94
+ // Still backpressured: advance offset within the current chunk.
95
+ this.offset += written;
96
+ this.queuedBytes -= written;
97
+ return;
98
+ }
99
+ // Whole chunk flushed.
100
+ this.queuedBytes -= view.length;
101
+ this.pending.shift();
102
+ this.offset = 0;
103
+ }
104
+ }
105
+ /** Number of bytes still buffered awaiting drain. */
106
+ get bytesQueued() {
107
+ return this.queuedBytes;
108
+ }
109
+ /** Whether there is unwritten data awaiting drain. */
110
+ get hasPending() {
111
+ return this.pending.length > 0;
112
+ }
113
+ /** Drop all buffered data (e.g. on close). */
114
+ clear() {
115
+ this.pending = [];
116
+ this.offset = 0;
117
+ this.queuedBytes = 0;
118
+ }
119
+ }
120
+ /**
121
+ * Convenience: write through a socket whose `data` carries a `writeQueue`.
122
+ * Keeps call sites in tcp.ts terse and consistent.
123
+ */
124
+ export function queuedWrite(socket, data) {
125
+ socket.data.writeQueue.write(socket, data);
126
+ }
127
+ //# sourceMappingURL=socketWriteQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socketWriteQueue.js","sourceRoot":"","sources":["../../../src/infrastructure/server/socketWriteQueue.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ import type { QueueManager } from '../../application/queueManager';
8
8
  import { type HandlerContext } from './handler';
9
9
  import { FrameParser, type ConnectionState } from './protocol';
10
10
  import { Semaphore } from '../../shared/semaphore';
11
+ import { SocketWriteQueue } from './socketWriteQueue';
11
12
  /** TCP Server configuration */
12
13
  export interface TcpServerConfig {
13
14
  /** TCP port */
@@ -16,6 +17,18 @@ export interface TcpServerConfig {
16
17
  hostname?: string;
17
18
  /** Auth tokens for authentication */
18
19
  authTokens?: string[];
20
+ /**
21
+ * Slowloris stall timeout (ms): close a connection that started a frame but
22
+ * made no progress completing it within this window. 0 disables. Defaults to
23
+ * TCP_IDLE_TIMEOUT_MS env (60s). Mainly for tests.
24
+ */
25
+ idleTimeoutMs?: number;
26
+ /**
27
+ * Max outbound write-queue bytes before dropping a connection (write-side
28
+ * memory bound). 0 disables. Defaults to TCP_MAX_WRITE_QUEUE_BYTES env (64MB).
29
+ * Mainly for tests.
30
+ */
31
+ maxWriteQueueBytes?: number;
19
32
  }
20
33
  /** Per-connection data */
21
34
  interface ConnectionData {
@@ -24,6 +37,10 @@ interface ConnectionData {
24
37
  ctx: HandlerContext;
25
38
  /** Semaphore for limiting concurrent command processing (pipelining) */
26
39
  semaphore: Semaphore;
40
+ /** Backpressure-aware write queue: buffers unwritten tails, flushes on drain */
41
+ writeQueue: SocketWriteQueue;
42
+ /** Active partial-frame stall timer (slowloris mitigation); null when idle. */
43
+ stallTimer: ReturnType<typeof setTimeout> | null;
27
44
  }
28
45
  /**
29
46
  * Create and start TCP server
@@ -1 +1 @@
1
- {"version":3,"file":"tcp.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/server/tcp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAGnE,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EACL,WAAW,EAGX,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,SAAS,EAAiB,MAAM,wBAAwB,CAAC;AAiClE,+BAA+B;AAC/B,MAAM,WAAW,eAAe;IAC9B,eAAe;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,0BAA0B;AAC1B,UAAU,cAAc;IACtB,KAAK,EAAE,eAAe,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,EAAE,cAAc,CAAC;IACpB,wEAAwE;IACxE,SAAS,EAAE,SAAS,CAAC;CACtB;AAYD;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe;;;IAqI/E,2BAA2B;0BACL,MAAM;IAI5B,mCAAmC;uBAChB,OAAO,GAAG,IAAI;IAOjC,sBAAsB;YACd,IAAI;EAQf;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"tcp.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/server/tcp.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,KAAK,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAGnE,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EACL,WAAW,EAGX,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,SAAS,EAAiB,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AA0DtD,+BAA+B;AAC/B,MAAM,WAAW,eAAe;IAC9B,eAAe;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,0BAA0B;AAC1B,UAAU,cAAc;IACtB,KAAK,EAAE,eAAe,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,EAAE,cAAc,CAAC;IACpB,wEAAwE;IACxE,SAAS,EAAE,SAAS,CAAC;IACrB,gFAAgF;IAChF,UAAU,EAAE,gBAAgB,CAAC;IAC7B,+EAA+E;IAC/E,UAAU,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;CAClD;AAYD;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe;;;IAwM/E,2BAA2B;0BACL,MAAM;IAI5B,mCAAmC;uBAChB,OAAO,GAAG,IAAI;IAejC,sBAAsB;YACd,IAAI;EASf;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC"}