@trigger.dev/core 4.0.2 → 4.0.4

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 (131) hide show
  1. package/dist/commonjs/v3/errors.d.ts +1 -0
  2. package/dist/commonjs/v3/errors.js +35 -2
  3. package/dist/commonjs/v3/errors.js.map +1 -1
  4. package/dist/commonjs/v3/heartbeats/api.d.ts +14 -0
  5. package/dist/commonjs/v3/heartbeats/api.js +58 -0
  6. package/dist/commonjs/v3/heartbeats/api.js.map +1 -0
  7. package/dist/commonjs/v3/heartbeats/manager.d.ts +16 -0
  8. package/dist/commonjs/v3/heartbeats/manager.js +72 -0
  9. package/dist/commonjs/v3/heartbeats/manager.js.map +1 -0
  10. package/dist/commonjs/v3/heartbeats/types.d.ts +7 -0
  11. package/dist/commonjs/v3/heartbeats/types.js +3 -0
  12. package/dist/commonjs/v3/heartbeats/types.js.map +1 -0
  13. package/dist/commonjs/v3/heartbeats-api.d.ts +3 -0
  14. package/dist/commonjs/v3/heartbeats-api.js +9 -0
  15. package/dist/commonjs/v3/heartbeats-api.js.map +1 -0
  16. package/dist/commonjs/v3/index.d.ts +1 -0
  17. package/dist/commonjs/v3/index.js +1 -0
  18. package/dist/commonjs/v3/index.js.map +1 -1
  19. package/dist/commonjs/v3/links.d.ts +1 -0
  20. package/dist/commonjs/v3/links.js +1 -0
  21. package/dist/commonjs/v3/links.js.map +1 -1
  22. package/dist/commonjs/v3/runEngineWorker/index.d.ts +1 -0
  23. package/dist/commonjs/v3/runEngineWorker/index.js +1 -0
  24. package/dist/commonjs/v3/runEngineWorker/index.js.map +1 -1
  25. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.d.ts +71 -0
  26. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.js +316 -0
  27. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.js.map +1 -0
  28. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.test.d.ts +1 -0
  29. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.test.js +589 -0
  30. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPool.test.js.map +1 -0
  31. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPoolMetrics.d.ts +43 -0
  32. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPoolMetrics.js +131 -0
  33. package/dist/commonjs/v3/runEngineWorker/supervisor/consumerPoolMetrics.js.map +1 -0
  34. package/dist/commonjs/v3/runEngineWorker/supervisor/queueConsumer.d.ts +7 -4
  35. package/dist/commonjs/v3/runEngineWorker/supervisor/queueConsumer.js.map +1 -1
  36. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.d.ts +76 -0
  37. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.js +161 -0
  38. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.js.map +1 -0
  39. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.d.ts +1 -0
  40. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.js +293 -0
  41. package/dist/commonjs/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.js.map +1 -0
  42. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.d.ts +67 -0
  43. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.js +153 -0
  44. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.js.map +1 -0
  45. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.test.d.ts +1 -0
  46. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.test.js +235 -0
  47. package/dist/commonjs/v3/runEngineWorker/supervisor/scalingStrategies.test.js.map +1 -0
  48. package/dist/commonjs/v3/runEngineWorker/supervisor/session.d.ts +5 -2
  49. package/dist/commonjs/v3/runEngineWorker/supervisor/session.js +14 -8
  50. package/dist/commonjs/v3/runEngineWorker/supervisor/session.js.map +1 -1
  51. package/dist/commonjs/v3/runEngineWorker/workload/http.d.ts +80 -111
  52. package/dist/commonjs/v3/runEngineWorker/workload/http.js +36 -14
  53. package/dist/commonjs/v3/runEngineWorker/workload/http.js.map +1 -1
  54. package/dist/commonjs/v3/schemas/api.d.ts +139 -0
  55. package/dist/commonjs/v3/schemas/api.js +11 -3
  56. package/dist/commonjs/v3/schemas/api.js.map +1 -1
  57. package/dist/commonjs/v3/utils/globals.d.ts +2 -0
  58. package/dist/commonjs/v3/utils/globals.js.map +1 -1
  59. package/dist/commonjs/v3/utils/ioSerialization.d.ts +1 -0
  60. package/dist/commonjs/v3/utils/ioSerialization.js +92 -3
  61. package/dist/commonjs/v3/utils/ioSerialization.js.map +1 -1
  62. package/dist/commonjs/v3/workers/index.d.ts +1 -0
  63. package/dist/commonjs/v3/workers/index.js +3 -1
  64. package/dist/commonjs/v3/workers/index.js.map +1 -1
  65. package/dist/commonjs/version.js +1 -1
  66. package/dist/esm/v3/errors.d.ts +1 -0
  67. package/dist/esm/v3/errors.js +34 -2
  68. package/dist/esm/v3/errors.js.map +1 -1
  69. package/dist/esm/v3/heartbeats/api.d.ts +14 -0
  70. package/dist/esm/v3/heartbeats/api.js +54 -0
  71. package/dist/esm/v3/heartbeats/api.js.map +1 -0
  72. package/dist/esm/v3/heartbeats/manager.d.ts +16 -0
  73. package/dist/esm/v3/heartbeats/manager.js +68 -0
  74. package/dist/esm/v3/heartbeats/manager.js.map +1 -0
  75. package/dist/esm/v3/heartbeats/types.d.ts +7 -0
  76. package/dist/esm/v3/heartbeats/types.js +2 -0
  77. package/dist/esm/v3/heartbeats/types.js.map +1 -0
  78. package/dist/esm/v3/heartbeats-api.d.ts +3 -0
  79. package/dist/esm/v3/heartbeats-api.js +6 -0
  80. package/dist/esm/v3/heartbeats-api.js.map +1 -0
  81. package/dist/esm/v3/index.d.ts +1 -0
  82. package/dist/esm/v3/index.js +1 -0
  83. package/dist/esm/v3/index.js.map +1 -1
  84. package/dist/esm/v3/links.d.ts +1 -0
  85. package/dist/esm/v3/links.js +1 -0
  86. package/dist/esm/v3/links.js.map +1 -1
  87. package/dist/esm/v3/runEngineWorker/index.d.ts +1 -0
  88. package/dist/esm/v3/runEngineWorker/index.js +1 -0
  89. package/dist/esm/v3/runEngineWorker/index.js.map +1 -1
  90. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.d.ts +71 -0
  91. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.js +312 -0
  92. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.js.map +1 -0
  93. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.test.d.ts +1 -0
  94. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.test.js +587 -0
  95. package/dist/esm/v3/runEngineWorker/supervisor/consumerPool.test.js.map +1 -0
  96. package/dist/esm/v3/runEngineWorker/supervisor/consumerPoolMetrics.d.ts +43 -0
  97. package/dist/esm/v3/runEngineWorker/supervisor/consumerPoolMetrics.js +127 -0
  98. package/dist/esm/v3/runEngineWorker/supervisor/consumerPoolMetrics.js.map +1 -0
  99. package/dist/esm/v3/runEngineWorker/supervisor/queueConsumer.d.ts +7 -4
  100. package/dist/esm/v3/runEngineWorker/supervisor/queueConsumer.js.map +1 -1
  101. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.d.ts +76 -0
  102. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.js +157 -0
  103. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.js.map +1 -0
  104. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.d.ts +1 -0
  105. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.js +291 -0
  106. package/dist/esm/v3/runEngineWorker/supervisor/queueMetricsProcessor.test.js.map +1 -0
  107. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.d.ts +67 -0
  108. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.js +146 -0
  109. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.js.map +1 -0
  110. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.test.d.ts +1 -0
  111. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.test.js +233 -0
  112. package/dist/esm/v3/runEngineWorker/supervisor/scalingStrategies.test.js.map +1 -0
  113. package/dist/esm/v3/runEngineWorker/supervisor/session.d.ts +5 -2
  114. package/dist/esm/v3/runEngineWorker/supervisor/session.js +14 -8
  115. package/dist/esm/v3/runEngineWorker/supervisor/session.js.map +1 -1
  116. package/dist/esm/v3/runEngineWorker/workload/http.d.ts +80 -111
  117. package/dist/esm/v3/runEngineWorker/workload/http.js +37 -15
  118. package/dist/esm/v3/runEngineWorker/workload/http.js.map +1 -1
  119. package/dist/esm/v3/schemas/api.d.ts +139 -0
  120. package/dist/esm/v3/schemas/api.js +8 -0
  121. package/dist/esm/v3/schemas/api.js.map +1 -1
  122. package/dist/esm/v3/utils/globals.d.ts +2 -0
  123. package/dist/esm/v3/utils/globals.js.map +1 -1
  124. package/dist/esm/v3/utils/ioSerialization.d.ts +1 -0
  125. package/dist/esm/v3/utils/ioSerialization.js +92 -3
  126. package/dist/esm/v3/utils/ioSerialization.js.map +1 -1
  127. package/dist/esm/v3/workers/index.d.ts +1 -0
  128. package/dist/esm/v3/workers/index.js +1 -0
  129. package/dist/esm/v3/workers/index.js.map +1 -1
  130. package/dist/esm/version.js +1 -1
  131. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v3/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAE1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,iBAAiB,EACjB,mCAAmC,EACnC,mBAAmB,EACnB,aAAa,GACd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,WAAW,EACX,iBAAiB,EACjB,WAAW,GAEZ,MAAM,4BAA4B,CAAC;AAEpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAGhB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/v3/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAE1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,kCAAkC,CAAC;AACjD,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,iBAAiB,EACjB,mCAAmC,EACnC,mBAAmB,EACnB,aAAa,GACd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,EAC5B,wBAAwB,EACxB,WAAW,EACX,iBAAiB,EACjB,WAAW,GAEZ,MAAM,4BAA4B,CAAC;AAEpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AAEpC,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAGhB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,CAAC"}
@@ -14,6 +14,7 @@ export declare const links: {
14
14
  };
15
15
  troubleshooting: {
16
16
  concurrentWaits: string;
17
+ stalledExecution: string;
17
18
  };
18
19
  concurrency: {
19
20
  recursiveDeadlock: string;
@@ -14,6 +14,7 @@ export const links = {
14
14
  },
15
15
  troubleshooting: {
16
16
  concurrentWaits: "https://trigger.dev/docs/troubleshooting#parallel-waits-are-not-supported",
17
+ stalledExecution: "https://trigger.dev/docs/troubleshooting#task-run-stalled-executing",
17
18
  },
18
19
  concurrency: {
19
20
  recursiveDeadlock: "https://trigger.dev/docs/queue-concurrency#waiting-for-a-subtask-on-the-same-queue",
@@ -1 +1 @@
1
- {"version":3,"file":"links.js","sourceRoot":"","sources":["../../../src/v3/links.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE;QACJ,MAAM,EAAE;YACN,IAAI,EAAE,6CAA6C;YACnD,kBAAkB,EAAE,gEAAgE;YACpF,UAAU,EAAE,wDAAwD;YACpE,MAAM,EAAE,oDAAoD;SAC7D;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,sCAAsC;SAC7C;QACD,OAAO,EAAE;YACP,IAAI,EAAE,yCAAyC;SAChD;QACD,eAAe,EAAE;YACf,eAAe,EAAE,2EAA2E;SAC7F;QACD,WAAW,EAAE;YACX,iBAAiB,EACf,oFAAoF;YACtF,QAAQ,EAAE,qDAAqD;SAChE;QACD,aAAa,EAAE;YACb,mBAAmB,EACjB,0EAA0E;SAC7E;KACF;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,6BAA6B;KACvC;CACF,CAAC"}
1
+ {"version":3,"file":"links.js","sourceRoot":"","sources":["../../../src/v3/links.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE;QACJ,MAAM,EAAE;YACN,IAAI,EAAE,6CAA6C;YACnD,kBAAkB,EAAE,gEAAgE;YACpF,UAAU,EAAE,wDAAwD;YACpE,MAAM,EAAE,oDAAoD;SAC7D;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,sCAAsC;SAC7C;QACD,OAAO,EAAE;YACP,IAAI,EAAE,yCAAyC;SAChD;QACD,eAAe,EAAE;YACf,eAAe,EAAE,2EAA2E;YAC5F,gBAAgB,EAAE,qEAAqE;SACxF;QACD,WAAW,EAAE;YACX,iBAAiB,EACf,oFAAoF;YACtF,QAAQ,EAAE,qDAAqD;SAChE;QACD,aAAa,EAAE;YACb,mBAAmB,EACjB,0EAA0E;SAC7E;KACF;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,6BAA6B;KACvC;CACF,CAAC"}
@@ -2,6 +2,7 @@ export * from "./consts.js";
2
2
  export * from "./supervisor/http.js";
3
3
  export * from "./supervisor/schemas.js";
4
4
  export * from "./supervisor/session.js";
5
+ export * from "./supervisor/consumerPool.js";
5
6
  export * from "./workload/http.js";
6
7
  export * from "./workload/schemas.js";
7
8
  export * from "./types.js";
@@ -2,6 +2,7 @@ export * from "./consts.js";
2
2
  export * from "./supervisor/http.js";
3
3
  export * from "./supervisor/schemas.js";
4
4
  export * from "./supervisor/session.js";
5
+ export * from "./supervisor/consumerPool.js";
5
6
  export * from "./workload/http.js";
6
7
  export * from "./workload/schemas.js";
7
8
  export * from "./types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/v3/runEngineWorker/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/v3/runEngineWorker/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { QueueConsumer, RunQueueConsumerOptions } from "./queueConsumer.js";
2
+ import { ScalingStrategyKind } from "./scalingStrategies.js";
3
+ import type { Registry } from "prom-client";
4
+ export type QueueConsumerFactory = (opts: RunQueueConsumerOptions) => QueueConsumer;
5
+ export type ScalingOptions = {
6
+ strategy?: ScalingStrategyKind;
7
+ minConsumerCount?: number;
8
+ maxConsumerCount?: number;
9
+ scaleUpCooldownMs?: number;
10
+ scaleDownCooldownMs?: number;
11
+ targetRatio?: number;
12
+ ewmaAlpha?: number;
13
+ batchWindowMs?: number;
14
+ disableJitter?: boolean;
15
+ dampingFactor?: number;
16
+ };
17
+ export type ConsumerPoolOptions = {
18
+ consumer: RunQueueConsumerOptions;
19
+ scaling: ScalingOptions;
20
+ consumerFactory?: QueueConsumerFactory;
21
+ metricsRegistry?: Registry;
22
+ };
23
+ type ScalingMetrics = {
24
+ targetConsumerCount: number;
25
+ queueLength?: number;
26
+ smoothedQueueLength: number;
27
+ lastScaleTime: Date;
28
+ lastQueueLengthUpdate: Date;
29
+ };
30
+ export declare class RunQueueConsumerPool {
31
+ private readonly consumerOptions;
32
+ private readonly logger;
33
+ private readonly promMetrics?;
34
+ private readonly minConsumerCount;
35
+ private readonly maxConsumerCount;
36
+ private readonly scalingStrategy;
37
+ private readonly disableJitter;
38
+ private consumers;
39
+ private readonly consumerFactory;
40
+ private isEnabled;
41
+ private isScaling;
42
+ private metrics;
43
+ private readonly metricsProcessor;
44
+ private readonly ewmaAlpha;
45
+ private readonly scaleUpCooldownMs;
46
+ private readonly scaleDownCooldownMs;
47
+ private readonly batchWindowMs;
48
+ constructor(opts: ConsumerPoolOptions);
49
+ start(): Promise<void>;
50
+ stop(): Promise<void>;
51
+ /**
52
+ * Updates the queue length metric and triggers scaling decisions
53
+ * Uses QueueMetricsProcessor for batching and EWMA smoothing
54
+ */
55
+ updateQueueLength(queueLength: number): void;
56
+ private processMetricsBatch;
57
+ private evaluateScaling;
58
+ private calculateTargetConsumerCount;
59
+ private scaleToTarget;
60
+ private addConsumers;
61
+ private removeConsumers;
62
+ /**
63
+ * Get current pool metrics for monitoring
64
+ */
65
+ getMetrics(): Readonly<ScalingMetrics>;
66
+ /**
67
+ * Get current number of consumers in the pool
68
+ */
69
+ get size(): number;
70
+ }
71
+ export {};
@@ -0,0 +1,312 @@
1
+ import { SimpleStructuredLogger } from "../../utils/structuredLogger.js";
2
+ import { RunQueueConsumer } from "./queueConsumer.js";
3
+ import { QueueMetricsProcessor } from "./queueMetricsProcessor.js";
4
+ import { ScalingStrategy, } from "./scalingStrategies.js";
5
+ import { ConsumerPoolMetrics } from "./consumerPoolMetrics.js";
6
+ export class RunQueueConsumerPool {
7
+ consumerOptions;
8
+ logger = new SimpleStructuredLogger("consumer-pool");
9
+ promMetrics;
10
+ minConsumerCount;
11
+ maxConsumerCount;
12
+ scalingStrategy;
13
+ disableJitter;
14
+ consumers = new Map();
15
+ consumerFactory;
16
+ isEnabled = false;
17
+ isScaling = false;
18
+ metrics;
19
+ metricsProcessor;
20
+ // Scaling parameters
21
+ ewmaAlpha;
22
+ scaleUpCooldownMs;
23
+ scaleDownCooldownMs;
24
+ batchWindowMs;
25
+ constructor(opts) {
26
+ this.consumerOptions = opts.consumer;
27
+ // Initialize Prometheus metrics if registry provided
28
+ if (opts.metricsRegistry) {
29
+ this.promMetrics = new ConsumerPoolMetrics({
30
+ register: opts.metricsRegistry,
31
+ });
32
+ }
33
+ this.minConsumerCount = Math.max(1, opts.scaling.minConsumerCount ?? 1);
34
+ this.maxConsumerCount = Math.max(this.minConsumerCount, opts.scaling.maxConsumerCount ?? 10);
35
+ this.scaleUpCooldownMs = opts.scaling.scaleUpCooldownMs ?? 10000; // 10 seconds default
36
+ this.scaleDownCooldownMs = opts.scaling.scaleDownCooldownMs ?? 60000; // 60 seconds default
37
+ this.disableJitter = opts.scaling.disableJitter ?? false;
38
+ // Configure EWMA parameters from options
39
+ this.ewmaAlpha = opts.scaling.ewmaAlpha ?? 0.3;
40
+ this.batchWindowMs = opts.scaling.batchWindowMs ?? 1000;
41
+ // Validate EWMA parameters
42
+ if (this.ewmaAlpha < 0 || this.ewmaAlpha > 1) {
43
+ throw new Error(`ewmaAlpha must be between 0 and 1, got: ${this.ewmaAlpha}`);
44
+ }
45
+ if (this.batchWindowMs <= 0) {
46
+ throw new Error(`batchWindowMs must be positive, got: ${this.batchWindowMs}`);
47
+ }
48
+ // Initialize metrics processor
49
+ this.metricsProcessor = new QueueMetricsProcessor({
50
+ ewmaAlpha: this.ewmaAlpha,
51
+ batchWindowMs: this.batchWindowMs,
52
+ });
53
+ const targetRatio = opts.scaling.targetRatio ?? 1.0;
54
+ const dampingFactor = opts.scaling.dampingFactor;
55
+ // Create scaling strategy with metrics processor injected
56
+ this.scalingStrategy = ScalingStrategy.create(opts.scaling.strategy ?? "none", {
57
+ metricsProcessor: this.metricsProcessor,
58
+ dampingFactor,
59
+ targetRatio,
60
+ minConsumerCount: this.minConsumerCount,
61
+ maxConsumerCount: this.maxConsumerCount,
62
+ });
63
+ // Use provided factory or default to RunQueueConsumer
64
+ this.consumerFactory =
65
+ opts.consumerFactory || ((consumerOpts) => new RunQueueConsumer(consumerOpts));
66
+ this.metrics = {
67
+ targetConsumerCount: this.minConsumerCount,
68
+ queueLength: undefined,
69
+ smoothedQueueLength: 0,
70
+ lastScaleTime: new Date(0),
71
+ lastQueueLengthUpdate: new Date(0),
72
+ };
73
+ this.logger.log("Initialized consumer pool", {
74
+ minConsumerCount: this.minConsumerCount,
75
+ maxConsumerCount: this.maxConsumerCount,
76
+ scalingStrategy: this.scalingStrategy.name,
77
+ mode: this.scalingStrategy.name === "none" ? "static" : "dynamic",
78
+ ewmaAlpha: this.ewmaAlpha,
79
+ batchWindowMs: this.batchWindowMs,
80
+ });
81
+ }
82
+ async start() {
83
+ if (this.isEnabled) {
84
+ return;
85
+ }
86
+ this.isEnabled = true;
87
+ // For 'none' strategy, start with max consumers (static mode)
88
+ // For dynamic strategies, start with minimum
89
+ const initialCount = this.scalingStrategy.name === "none" ? this.maxConsumerCount : this.minConsumerCount;
90
+ // Set initial metrics
91
+ this.metrics.targetConsumerCount = initialCount;
92
+ this.addConsumers(initialCount);
93
+ this.logger.log("Started dynamic consumer pool", {
94
+ initialConsumerCount: this.consumers.size,
95
+ });
96
+ // Initialize Prometheus metrics with initial state
97
+ this.promMetrics?.updateState({
98
+ consumerCount: this.consumers.size,
99
+ queueLength: this.metrics.queueLength,
100
+ smoothedQueueLength: this.metrics.smoothedQueueLength,
101
+ targetConsumerCount: initialCount,
102
+ strategy: this.scalingStrategy.name,
103
+ });
104
+ }
105
+ async stop() {
106
+ if (!this.isEnabled) {
107
+ return;
108
+ }
109
+ this.isEnabled = false;
110
+ // Stop all consumers
111
+ Array.from(this.consumers.values()).forEach((consumer) => consumer.stop());
112
+ this.consumers.clear();
113
+ this.logger.log("Stopped dynamic consumer pool");
114
+ }
115
+ /**
116
+ * Updates the queue length metric and triggers scaling decisions
117
+ * Uses QueueMetricsProcessor for batching and EWMA smoothing
118
+ */
119
+ updateQueueLength(queueLength) {
120
+ // Track queue length update in metrics
121
+ this.promMetrics?.recordQueueLengthUpdate();
122
+ // Skip metrics tracking for static mode
123
+ if (this.scalingStrategy.name === "none") {
124
+ return;
125
+ }
126
+ // Add sample to metrics processor
127
+ this.metricsProcessor.addSample(queueLength);
128
+ // Check if we should process the current batch
129
+ if (this.metricsProcessor.shouldProcessBatch()) {
130
+ this.processMetricsBatch();
131
+ }
132
+ }
133
+ processMetricsBatch() {
134
+ // Process batch using the metrics processor
135
+ const result = this.metricsProcessor.processBatch();
136
+ if (!result) {
137
+ this.logger.debug("No queue length samples in batch window - skipping scaling evaluation");
138
+ return;
139
+ }
140
+ // Update metrics
141
+ this.metrics.queueLength = result.median;
142
+ this.metrics.smoothedQueueLength = result.smoothedValue;
143
+ this.metrics.lastQueueLengthUpdate = new Date();
144
+ this.logger.verbose("Queue metrics batch processed", {
145
+ samples: result.sampleCount,
146
+ median: result.median,
147
+ smoothed: result.smoothedValue,
148
+ currentConsumerCount: this.consumers.size,
149
+ });
150
+ // Make scaling decision
151
+ this.evaluateScaling();
152
+ }
153
+ evaluateScaling() {
154
+ if (!this.isEnabled) {
155
+ return;
156
+ }
157
+ // No scaling in static mode
158
+ if (this.scalingStrategy.name === "none") {
159
+ return;
160
+ }
161
+ // Skip if already scaling
162
+ if (this.isScaling) {
163
+ this.logger.debug("Scaling blocked - operation already in progress", {
164
+ currentCount: this.consumers.size,
165
+ targetCount: this.metrics.targetConsumerCount,
166
+ actualCount: this.consumers.size,
167
+ });
168
+ return;
169
+ }
170
+ const targetCount = this.calculateTargetConsumerCount();
171
+ if (targetCount === this.consumers.size) {
172
+ return;
173
+ }
174
+ const timeSinceLastScale = Date.now() - this.metrics.lastScaleTime.getTime();
175
+ // Add random jitter to avoid thundering herd when multiple replicas exist
176
+ // Works without needing to know replica index or count
177
+ const jitterMs = this.disableJitter ? 0 : Math.random() * 3000; // 0-3 seconds random jitter
178
+ // Check cooldown periods with jitter
179
+ if (targetCount > this.consumers.size) {
180
+ // Scale up
181
+ const effectiveCooldown = this.scaleUpCooldownMs + jitterMs;
182
+ if (timeSinceLastScale < effectiveCooldown) {
183
+ this.logger.debug("Scale up blocked by cooldown", {
184
+ timeSinceLastScale,
185
+ cooldownMs: effectiveCooldown,
186
+ jitterMs,
187
+ remainingMs: effectiveCooldown - timeSinceLastScale,
188
+ });
189
+ this.promMetrics?.recordCooldownApplied("up");
190
+ return;
191
+ }
192
+ }
193
+ else if (targetCount < this.consumers.size) {
194
+ // Scale down
195
+ const effectiveCooldown = this.scaleDownCooldownMs + jitterMs;
196
+ if (timeSinceLastScale < effectiveCooldown) {
197
+ this.logger.debug("Scale down blocked by cooldown", {
198
+ timeSinceLastScale,
199
+ cooldownMs: effectiveCooldown,
200
+ jitterMs,
201
+ remainingMs: effectiveCooldown - timeSinceLastScale,
202
+ });
203
+ this.promMetrics?.recordCooldownApplied("down");
204
+ return;
205
+ }
206
+ }
207
+ this.logger.info("Scaling consumer pool", {
208
+ from: this.consumers.size,
209
+ to: targetCount,
210
+ queueLength: this.metrics.queueLength,
211
+ smoothedQueueLength: this.metrics.smoothedQueueLength,
212
+ strategy: this.scalingStrategy,
213
+ });
214
+ // Set flag before scaling
215
+ this.isScaling = true;
216
+ // Update target metric for visibility
217
+ const previousTarget = this.metrics.targetConsumerCount;
218
+ this.metrics.targetConsumerCount = targetCount;
219
+ try {
220
+ this.scaleToTarget(targetCount);
221
+ }
222
+ catch (error) {
223
+ this.logger.error("Failed to scale consumer pool", { error });
224
+ // Revert target on failure
225
+ this.metrics.targetConsumerCount = previousTarget;
226
+ }
227
+ finally {
228
+ this.isScaling = false;
229
+ }
230
+ }
231
+ calculateTargetConsumerCount() {
232
+ return this.scalingStrategy.calculateTargetCount(this.consumers.size);
233
+ }
234
+ scaleToTarget(targetCount) {
235
+ const actualCurrentCount = this.consumers.size;
236
+ if (targetCount > actualCurrentCount) {
237
+ // Scale up
238
+ const count = targetCount - actualCurrentCount;
239
+ this.addConsumers(count);
240
+ this.promMetrics?.recordScalingOperation("up", this.scalingStrategy.name, count);
241
+ }
242
+ else if (targetCount < actualCurrentCount) {
243
+ // Scale down
244
+ const count = actualCurrentCount - targetCount;
245
+ this.removeConsumers(count);
246
+ this.promMetrics?.recordScalingOperation("down", this.scalingStrategy.name, count);
247
+ }
248
+ this.metrics.lastScaleTime = new Date();
249
+ // Update Prometheus state metrics
250
+ this.promMetrics?.updateState({
251
+ consumerCount: this.consumers.size,
252
+ queueLength: this.metrics.queueLength,
253
+ smoothedQueueLength: this.metrics.smoothedQueueLength,
254
+ targetConsumerCount: targetCount,
255
+ strategy: this.scalingStrategy.name,
256
+ });
257
+ }
258
+ addConsumers(count) {
259
+ const newConsumers = [];
260
+ for (let i = 0; i < count; i++) {
261
+ const consumerId = `consumer-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
262
+ const consumer = this.consumerFactory({
263
+ ...this.consumerOptions,
264
+ onDequeue: async (messages) => {
265
+ // Always update queue length, default to 0 for empty dequeues or missing value
266
+ this.updateQueueLength(messages[0]?.workerQueueLength ?? 0);
267
+ // Forward to the original handler
268
+ await this.consumerOptions.onDequeue(messages);
269
+ },
270
+ });
271
+ this.consumers.set(consumerId, consumer);
272
+ newConsumers.push(consumer);
273
+ }
274
+ // Start all new consumers
275
+ newConsumers.forEach((c) => c.start());
276
+ this.logger.info("Added consumers", {
277
+ count,
278
+ totalConsumers: this.consumers.size,
279
+ });
280
+ }
281
+ removeConsumers(count) {
282
+ const allIds = Array.from(this.consumers.keys());
283
+ const consumerIds = allIds.slice(-count); // Take from the end
284
+ const consumersToStop = [];
285
+ for (const id of consumerIds) {
286
+ const consumer = this.consumers.get(id);
287
+ if (consumer) {
288
+ consumersToStop.push(consumer);
289
+ this.consumers.delete(id);
290
+ }
291
+ }
292
+ // Stop removed consumers
293
+ consumersToStop.forEach((c) => c.stop());
294
+ this.logger.info("Removed consumers", {
295
+ count: consumersToStop.length,
296
+ totalConsumers: this.consumers.size,
297
+ });
298
+ }
299
+ /**
300
+ * Get current pool metrics for monitoring
301
+ */
302
+ getMetrics() {
303
+ return { ...this.metrics };
304
+ }
305
+ /**
306
+ * Get current number of consumers in the pool
307
+ */
308
+ get size() {
309
+ return this.consumers.size;
310
+ }
311
+ }
312
+ //# sourceMappingURL=consumerPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumerPool.js","sourceRoot":"","sources":["../../../../../src/v3/runEngineWorker/supervisor/consumerPool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAiB,gBAAgB,EAA2B,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EACL,eAAe,GAGhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAiC/D,MAAM,OAAO,oBAAoB;IACd,eAAe,CAA0B;IAEzC,MAAM,GAAG,IAAI,sBAAsB,CAAC,eAAe,CAAC,CAAC;IACrD,WAAW,CAAuB;IAElC,gBAAgB,CAAS;IACzB,gBAAgB,CAAS;IACzB,eAAe,CAAkB;IACjC,aAAa,CAAU;IAEhC,SAAS,GAA+B,IAAI,GAAG,EAAE,CAAC;IACzC,eAAe,CAAuB;IAC/C,SAAS,GAAY,KAAK,CAAC;IAC3B,SAAS,GAAY,KAAK,CAAC;IAE3B,OAAO,CAAiB;IACf,gBAAgB,CAAwB;IAEzD,qBAAqB;IACJ,SAAS,CAAS;IAClB,iBAAiB,CAAS;IAC1B,mBAAmB,CAAS;IAC5B,aAAa,CAAS;IAEvC,YAAY,IAAyB;QACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;QAErC,qDAAqD;QACrD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,mBAAmB,CAAC;gBACzC,QAAQ,EAAE,IAAI,CAAC,eAAe;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,KAAK,CAAC,CAAC,qBAAqB;QACvF,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,IAAI,KAAK,CAAC,CAAC,qBAAqB;QAC3F,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC;QAEzD,yCAAyC;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;QAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;QAExD,2BAA2B;QAC3B,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,qBAAqB,CAAC;YAChD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC;QACpD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QAEjD,0DAA0D;QAC1D,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,EAAE;YAC7E,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,aAAa;YACb,WAAW;YACX,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;SACxC,CAAC,CAAC;QAEH,sDAAsD;QACtD,IAAI,CAAC,eAAe;YAClB,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;QAEjF,IAAI,CAAC,OAAO,GAAG;YACb,mBAAmB,EAAE,IAAI,CAAC,gBAAgB;YAC1C,WAAW,EAAE,SAAS;YACtB,mBAAmB,EAAE,CAAC;YACtB,aAAa,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;YAC1B,qBAAqB,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;SACnC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE;YAC3C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI;YAC1C,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACjE,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,8DAA8D;QAC9D,6CAA6C;QAC7C,MAAM,YAAY,GAChB,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAEvF,sBAAsB;QACtB,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG,YAAY,CAAC;QAEhD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAEhC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,+BAA+B,EAAE;YAC/C,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;SAC1C,CAAC,CAAC;QAEH,mDAAmD;QACnD,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC;YAC5B,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;YAClC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;YACrC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB;YACrD,mBAAmB,EAAE,YAAY;YACjC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI;SACpC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,qBAAqB;QACrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAE3E,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAEvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,WAAmB;QACnC,uCAAuC;QACvC,IAAI,CAAC,WAAW,EAAE,uBAAuB,EAAE,CAAC;QAE5C,wCAAwC;QACxC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,kCAAkC;QAClC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAE7C,+CAA+C;QAC/C,IAAI,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAEO,mBAAmB;QACzB,4CAA4C;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;QAEpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;YAC3F,OAAO;QACT,CAAC;QAED,iBAAiB;QACjB,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG,MAAM,CAAC,aAAa,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,qBAAqB,GAAG,IAAI,IAAI,EAAE,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,+BAA+B,EAAE;YACnD,OAAO,EAAE,MAAM,CAAC,WAAW;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,aAAa;YAC9B,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;SAC1C,CAAC,CAAC;QAEH,wBAAwB;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,4BAA4B;QAC5B,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,0BAA0B;QAC1B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,EAAE;gBACnE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;gBACjC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB;gBAC7C,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;aACjC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;QAExD,IAAI,WAAW,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO;QACT,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAE7E,0EAA0E;QAC1E,uDAAuD;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,4BAA4B;QAE5F,qCAAqC;QACrC,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACtC,WAAW;YACX,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;YAC5D,IAAI,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;oBAChD,kBAAkB;oBAClB,UAAU,EAAE,iBAAiB;oBAC7B,QAAQ;oBACR,WAAW,EAAE,iBAAiB,GAAG,kBAAkB;iBACpD,CAAC,CAAC;gBACH,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBAC9C,OAAO;YACT,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAC7C,aAAa;YACb,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;YAC9D,IAAI,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;oBAClD,kBAAkB;oBAClB,UAAU,EAAE,iBAAiB;oBAC7B,QAAQ;oBACR,WAAW,EAAE,iBAAiB,GAAG,kBAAkB;iBACpD,CAAC,CAAC;gBACH,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE;YACxC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;YACzB,EAAE,EAAE,WAAW;YACf,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;YACrC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB;YACrD,QAAQ,EAAE,IAAI,CAAC,eAAe;SAC/B,CAAC,CAAC;QAEH,0BAA0B;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,sCAAsC;QACtC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG,WAAW,CAAC;QAE/C,IAAI,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9D,2BAA2B;YAC3B,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG,cAAc,CAAC;QACpD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,4BAA4B;QAClC,OAAO,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IAEO,aAAa,CAAC,WAAmB;QACvC,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAE/C,IAAI,WAAW,GAAG,kBAAkB,EAAE,CAAC;YACrC,WAAW;YACX,MAAM,KAAK,GAAG,WAAW,GAAG,kBAAkB,CAAC;YAC/C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnF,CAAC;aAAM,IAAI,WAAW,GAAG,kBAAkB,EAAE,CAAC;YAC5C,aAAa;YACb,MAAM,KAAK,GAAG,kBAAkB,GAAG,WAAW,CAAC;YAC/C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrF,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC;QAExC,kCAAkC;QAClC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC;YAC5B,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;YAClC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;YACrC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB;YACrD,mBAAmB,EAAE,WAAW;YAChC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI;SACpC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,KAAa;QAChC,MAAM,YAAY,GAAoB,EAAE,CAAC;QAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,YAAY,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAE3F,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;gBACpC,GAAG,IAAI,CAAC,eAAe;gBACvB,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;oBAC5B,+EAA+E;oBAC/E,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,iBAAiB,IAAI,CAAC,CAAC,CAAC;oBAE5D,kCAAkC;oBAClC,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACjD,CAAC;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACzC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAED,0BAA0B;QAC1B,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAEvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAClC,KAAK;YACL,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;SACpC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,KAAa;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAoB;QAC9D,MAAM,eAAe,GAAoB,EAAE,CAAC;QAE5C,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,QAAQ,EAAE,CAAC;gBACb,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC/B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;YACpC,KAAK,EAAE,eAAe,CAAC,MAAM;YAC7B,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B,CAAC;CACF"}