exisjs 0.5.9 → 0.5.11

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 (213) hide show
  1. package/dist/auth/index.d.ts +3 -1
  2. package/dist/auth/index.d.ts.map +1 -1
  3. package/dist/auth/index.js +4 -1
  4. package/dist/auth/index.js.map +1 -1
  5. package/dist/auth/oauth/core.d.ts +96 -0
  6. package/dist/auth/oauth/core.d.ts.map +1 -0
  7. package/dist/auth/oauth/core.js +203 -0
  8. package/dist/auth/oauth/core.js.map +1 -0
  9. package/dist/auth/oauth/index.d.ts +45 -0
  10. package/dist/auth/oauth/index.d.ts.map +1 -0
  11. package/dist/auth/oauth/index.js +64 -0
  12. package/dist/auth/oauth/index.js.map +1 -0
  13. package/dist/auth/oauth/middleware.d.ts +63 -0
  14. package/dist/auth/oauth/middleware.d.ts.map +1 -0
  15. package/dist/auth/oauth/middleware.js +164 -0
  16. package/dist/auth/oauth/middleware.js.map +1 -0
  17. package/dist/auth/oauth/providers/custom.d.ts +41 -0
  18. package/dist/auth/oauth/providers/custom.d.ts.map +1 -0
  19. package/dist/auth/oauth/providers/custom.js +204 -0
  20. package/dist/auth/oauth/providers/custom.js.map +1 -0
  21. package/dist/auth/oauth/providers/discord.d.ts +23 -0
  22. package/dist/auth/oauth/providers/discord.d.ts.map +1 -0
  23. package/dist/auth/oauth/providers/discord.js +130 -0
  24. package/dist/auth/oauth/providers/discord.js.map +1 -0
  25. package/dist/auth/oauth/providers/facebook.d.ts +28 -0
  26. package/dist/auth/oauth/providers/facebook.d.ts.map +1 -0
  27. package/dist/auth/oauth/providers/facebook.js +124 -0
  28. package/dist/auth/oauth/providers/facebook.js.map +1 -0
  29. package/dist/auth/oauth/providers/github.d.ts +25 -0
  30. package/dist/auth/oauth/providers/github.d.ts.map +1 -0
  31. package/dist/auth/oauth/providers/github.js +132 -0
  32. package/dist/auth/oauth/providers/github.js.map +1 -0
  33. package/dist/auth/oauth/providers/google.d.ts +23 -0
  34. package/dist/auth/oauth/providers/google.d.ts.map +1 -0
  35. package/dist/auth/oauth/providers/google.js +134 -0
  36. package/dist/auth/oauth/providers/google.js.map +1 -0
  37. package/dist/auth/oauth/providers/microsoft.d.ts +28 -0
  38. package/dist/auth/oauth/providers/microsoft.d.ts.map +1 -0
  39. package/dist/auth/oauth/providers/microsoft.js +136 -0
  40. package/dist/auth/oauth/providers/microsoft.js.map +1 -0
  41. package/dist/auth/oauth/types.d.ts +158 -0
  42. package/dist/auth/oauth/types.d.ts.map +1 -0
  43. package/dist/auth/oauth/types.js +4 -0
  44. package/dist/auth/oauth/types.js.map +1 -0
  45. package/dist/auth/session.d.ts +4 -1
  46. package/dist/auth/session.d.ts.map +1 -1
  47. package/dist/auth/session.js +33 -5
  48. package/dist/auth/session.js.map +1 -1
  49. package/dist/cache/store.d.ts +11 -3
  50. package/dist/cache/store.d.ts.map +1 -1
  51. package/dist/cache/store.js +87 -19
  52. package/dist/cache/store.js.map +1 -1
  53. package/dist/cli/commands/dev.d.ts.map +1 -1
  54. package/dist/cli/commands/dev.js +4 -6
  55. package/dist/cli/commands/dev.js.map +1 -1
  56. package/dist/database/adapters/mongodb.d.ts +58 -0
  57. package/dist/database/adapters/mongodb.d.ts.map +1 -0
  58. package/dist/database/adapters/mongodb.js +264 -0
  59. package/dist/database/adapters/mongodb.js.map +1 -0
  60. package/dist/database/adapters/mysql.d.ts +27 -0
  61. package/dist/database/adapters/mysql.d.ts.map +1 -0
  62. package/dist/database/adapters/mysql.js +188 -0
  63. package/dist/database/adapters/mysql.js.map +1 -0
  64. package/dist/database/adapters/postgres.d.ts +28 -0
  65. package/dist/database/adapters/postgres.d.ts.map +1 -0
  66. package/dist/database/adapters/postgres.js +174 -0
  67. package/dist/database/adapters/postgres.js.map +1 -0
  68. package/dist/database/adapters/sqlite.d.ts +27 -0
  69. package/dist/database/adapters/sqlite.d.ts.map +1 -0
  70. package/dist/database/adapters/sqlite.js +149 -0
  71. package/dist/database/adapters/sqlite.js.map +1 -0
  72. package/dist/database/index.d.ts +42 -0
  73. package/dist/database/index.d.ts.map +1 -0
  74. package/dist/database/index.js +58 -0
  75. package/dist/database/index.js.map +1 -0
  76. package/dist/database/manager.d.ts +114 -0
  77. package/dist/database/manager.d.ts.map +1 -0
  78. package/dist/database/manager.js +269 -0
  79. package/dist/database/manager.js.map +1 -0
  80. package/dist/database/migration.d.ts +57 -0
  81. package/dist/database/migration.d.ts.map +1 -0
  82. package/dist/database/migration.js +329 -0
  83. package/dist/database/migration.js.map +1 -0
  84. package/dist/database/query-builder.d.ts +89 -0
  85. package/dist/database/query-builder.d.ts.map +1 -0
  86. package/dist/database/query-builder.js +353 -0
  87. package/dist/database/query-builder.js.map +1 -0
  88. package/dist/database/types.d.ts +184 -0
  89. package/dist/database/types.d.ts.map +1 -0
  90. package/dist/database/types.js +4 -0
  91. package/dist/database/types.js.map +1 -0
  92. package/dist/docs/ARCHITECTURE.md +349 -0
  93. package/dist/docs/BENCHMARKS.md +36 -0
  94. package/dist/docs/README.md +34 -0
  95. package/dist/docs/content/README.md +44 -0
  96. package/dist/docs/content/adapters.mdx +199 -0
  97. package/dist/docs/content/cache.mdx +239 -0
  98. package/dist/docs/content/circuit-breaker.mdx +130 -0
  99. package/dist/docs/content/cli/commands.mdx +214 -0
  100. package/dist/docs/content/cli/overview.mdx +92 -0
  101. package/dist/docs/content/cli/usage.mdx +61 -0
  102. package/dist/docs/content/config.mdx +214 -0
  103. package/dist/docs/content/controllers.mdx +241 -0
  104. package/dist/docs/content/cron.mdx +109 -0
  105. package/dist/docs/content/database.mdx +209 -0
  106. package/dist/docs/content/dataloader.mdx +170 -0
  107. package/dist/docs/content/decorators.mdx +204 -0
  108. package/dist/docs/content/errors.mdx +344 -0
  109. package/dist/docs/content/gateways.mdx +376 -0
  110. package/dist/docs/content/installation.mdx +210 -0
  111. package/dist/docs/content/introduction.mdx +96 -0
  112. package/dist/docs/content/middleware.mdx +441 -0
  113. package/dist/docs/content/modules.mdx +144 -0
  114. package/dist/docs/content/oauth.mdx +179 -0
  115. package/dist/docs/content/providers.mdx +147 -0
  116. package/dist/docs/content/queues.mdx +177 -0
  117. package/dist/docs/content/requests.mdx +293 -0
  118. package/dist/docs/content/responses.mdx +271 -0
  119. package/dist/docs/content/routing.mdx +541 -0
  120. package/dist/docs/content/rpc.mdx +146 -0
  121. package/dist/docs/content/security.mdx +294 -0
  122. package/dist/docs/content/sse.mdx +159 -0
  123. package/dist/docs/content/structure.mdx +116 -0
  124. package/dist/docs/content/testing.mdx +139 -0
  125. package/dist/docs/content/validation.mdx +249 -0
  126. package/dist/docs/content/websockets.mdx +289 -0
  127. package/dist/docs/integrations/README.md +23 -0
  128. package/dist/docs/integrations/jwt.mdx +151 -0
  129. package/dist/docs/integrations/mongo.mdx +183 -0
  130. package/dist/docs/integrations/observability.mdx +125 -0
  131. package/dist/docs/integrations/openai.mdx +108 -0
  132. package/dist/docs/integrations/postgres.mdx +190 -0
  133. package/dist/docs/integrations/posthog.mdx +122 -0
  134. package/dist/docs/integrations/redis.mdx +141 -0
  135. package/dist/docs/integrations/resend.mdx +117 -0
  136. package/dist/docs/integrations/s3.mdx +122 -0
  137. package/dist/docs/integrations/swagger.mdx +113 -0
  138. package/dist/docs/reference/README.md +3 -0
  139. package/dist/docs/reference/adapters.mdx +130 -0
  140. package/dist/docs/reference/auth.mdx +183 -0
  141. package/dist/docs/reference/cache.mdx +132 -0
  142. package/dist/docs/reference/circuit-breaker.mdx +71 -0
  143. package/dist/docs/reference/config.mdx +118 -0
  144. package/dist/docs/reference/context.mdx +168 -0
  145. package/dist/docs/reference/dataloader.mdx +91 -0
  146. package/dist/docs/reference/decorators.mdx +293 -0
  147. package/dist/docs/reference/di.mdx +123 -0
  148. package/dist/docs/reference/error.mdx +170 -0
  149. package/dist/docs/reference/exis.mdx +124 -0
  150. package/dist/docs/reference/middleware.mdx +304 -0
  151. package/dist/docs/reference/plugin.mdx +113 -0
  152. package/dist/docs/reference/queue.mdx +155 -0
  153. package/dist/docs/reference/router.mdx +248 -0
  154. package/dist/docs/reference/sanitize.mdx +130 -0
  155. package/dist/docs/reference/storage.mdx +116 -0
  156. package/dist/docs/reference/swagger.mdx +132 -0
  157. package/dist/docs/reference/testing.mdx +145 -0
  158. package/dist/docs/reference/validator.mdx +186 -0
  159. package/dist/index.d.ts +4 -0
  160. package/dist/index.d.ts.map +1 -1
  161. package/dist/index.js +10 -1
  162. package/dist/index.js.map +1 -1
  163. package/dist/middleware/backpressure.d.ts.map +1 -1
  164. package/dist/middleware/backpressure.js +21 -12
  165. package/dist/middleware/backpressure.js.map +1 -1
  166. package/dist/middleware/cache.d.ts +6 -0
  167. package/dist/middleware/cache.d.ts.map +1 -1
  168. package/dist/middleware/cache.js +84 -28
  169. package/dist/middleware/cache.js.map +1 -1
  170. package/dist/middleware/idempotency.d.ts +4 -1
  171. package/dist/middleware/idempotency.d.ts.map +1 -1
  172. package/dist/middleware/idempotency.js +29 -4
  173. package/dist/middleware/idempotency.js.map +1 -1
  174. package/dist/middleware/ip-filter.d.ts.map +1 -1
  175. package/dist/middleware/ip-filter.js +16 -0
  176. package/dist/middleware/ip-filter.js.map +1 -1
  177. package/dist/middleware/rate-limit.d.ts.map +1 -1
  178. package/dist/middleware/rate-limit.js +29 -12
  179. package/dist/middleware/rate-limit.js.map +1 -1
  180. package/dist/queue/drivers/MemoryDriver.d.ts +6 -3
  181. package/dist/queue/drivers/MemoryDriver.d.ts.map +1 -1
  182. package/dist/queue/drivers/MemoryDriver.js +76 -23
  183. package/dist/queue/drivers/MemoryDriver.js.map +1 -1
  184. package/dist/server/bootstrapper.d.ts +3 -0
  185. package/dist/server/bootstrapper.d.ts.map +1 -1
  186. package/dist/server/bootstrapper.js +56 -8
  187. package/dist/server/bootstrapper.js.map +1 -1
  188. package/dist/server/bun-adapter.d.ts +2 -0
  189. package/dist/server/bun-adapter.d.ts.map +1 -1
  190. package/dist/server/bun-adapter.js +23 -12
  191. package/dist/server/bun-adapter.js.map +1 -1
  192. package/dist/server/request-handler.d.ts +0 -2
  193. package/dist/server/request-handler.d.ts.map +1 -1
  194. package/dist/server/request-handler.js +2 -24
  195. package/dist/server/request-handler.js.map +1 -1
  196. package/dist/server/request.d.ts.map +1 -1
  197. package/dist/server/request.js +24 -11
  198. package/dist/server/request.js.map +1 -1
  199. package/dist/server/uws-adapter.d.ts +80 -0
  200. package/dist/server/uws-adapter.d.ts.map +1 -0
  201. package/dist/server/uws-adapter.js +357 -0
  202. package/dist/server/uws-adapter.js.map +1 -0
  203. package/dist/server/ws-orchestrator.d.ts +1 -0
  204. package/dist/server/ws-orchestrator.d.ts.map +1 -1
  205. package/dist/server/ws-orchestrator.js +83 -0
  206. package/dist/server/ws-orchestrator.js.map +1 -1
  207. package/dist/types.d.ts +1 -1
  208. package/dist/types.d.ts.map +1 -1
  209. package/dist/utils/config.js.map +1 -1
  210. package/dist/validator/tex.d.ts +21 -16
  211. package/dist/validator/tex.d.ts.map +1 -1
  212. package/dist/validator/tex.js.map +1 -1
  213. package/package.json +11 -3
@@ -12,7 +12,10 @@ export interface IdempotencyStore {
12
12
  }, ttlMs?: number): Promise<void>;
13
13
  }
14
14
  export declare class MemoryIdempotencyStore implements IdempotencyStore {
15
- private cache;
15
+ private nativeCache;
16
+ private fallbackCache;
17
+ private isFallback;
18
+ constructor();
16
19
  get(key: string): Promise<any>;
17
20
  set(key: string, data: any, ttlMs?: number): Promise<void>;
18
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/middleware/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAIvC,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QACxB,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC/B,IAAI,EAAE,GAAG,CAAA;KACV,GAAG,IAAI,CAAC,CAAA;IACT,GAAG,CACD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,EACxE,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAAA;CACjB;AAED,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,KAAK,CAAmD;IAE1D,GAAG,CAAC,GAAG,EAAE,MAAM;IAUf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,SAAW;CAGnD;AAID,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAwEnE;AAED,uDAAuD;AACvD,eAAO,MAAM,UAAU,mBAAa,CAAA"}
1
+ {"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/middleware/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAIvC,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QACxB,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC/B,IAAI,EAAE,GAAG,CAAA;KACV,GAAG,IAAI,CAAC,CAAA;IACT,GAAG,CACD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,EACxE,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAAA;CACjB;AAED,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAAmD;IACxE,OAAO,CAAC,UAAU,CAAQ;;IAapB,GAAG,CAAC,GAAG,EAAE,MAAM;IAoBf,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,SAAW;CAQnD;AAID,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAwEnE;AAED,uDAAuD;AACvD,eAAO,MAAM,UAAU,mBAAa,CAAA"}
@@ -4,20 +4,45 @@ exports.Idempotent = exports.MemoryIdempotencyStore = void 0;
4
4
  exports.idempotent = idempotent;
5
5
  class MemoryIdempotencyStore {
6
6
  constructor() {
7
- this.cache = new Map();
7
+ this.fallbackCache = new Map();
8
+ this.isFallback = false;
9
+ try {
10
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
11
+ const { NativeMemoryCache } = require('@exisjs/rs');
12
+ // Cap at 10,000 concurrent idempotent requests to prevent memory exhaustion
13
+ this.nativeCache = new NativeMemoryCache(10000);
14
+ }
15
+ catch {
16
+ this.isFallback = true;
17
+ }
8
18
  }
9
19
  async get(key) {
10
- const item = this.cache.get(key);
20
+ if (!this.isFallback) {
21
+ const dataStr = this.nativeCache.get(key);
22
+ if (!dataStr)
23
+ return null;
24
+ try {
25
+ return JSON.parse(dataStr);
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ const item = this.fallbackCache.get(key);
11
32
  if (!item)
12
33
  return null;
13
34
  if (Date.now() > item.expiry) {
14
- this.cache.delete(key);
35
+ this.fallbackCache.delete(key);
15
36
  return null;
16
37
  }
17
38
  return item.data;
18
39
  }
19
40
  async set(key, data, ttlMs = 86400000) {
20
- this.cache.set(key, { data, expiry: Date.now() + ttlMs });
41
+ if (!this.isFallback) {
42
+ this.nativeCache.set(key, JSON.stringify(data), ttlMs);
43
+ return;
44
+ }
45
+ this.fallbackCache.set(key, { data, expiry: Date.now() + ttlMs });
21
46
  }
22
47
  }
23
48
  exports.MemoryIdempotencyStore = MemoryIdempotencyStore;
@@ -1 +1 @@
1
- {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/middleware/idempotency.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/middleware/idempotency.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ip-filter.d.ts","sourceRoot":"","sources":["../../src/middleware/ip-filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAmC,MAAM,UAAU,CAAA;AAGxE,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qFAAqF;IACrF,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAuDD,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAyBzE"}
1
+ {"version":3,"file":"ip-filter.d.ts","sourceRoot":"","sources":["../../src/middleware/ip-filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAmC,MAAM,UAAU,CAAA;AAGxE,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qFAAqF;IACrF,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAuDD,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CA0CzE"}
@@ -62,8 +62,24 @@ function ipFilterMiddleware(options = {}) {
62
62
  const denyRules = options.deny ?? null;
63
63
  const message = options.message ?? 'Access Denied';
64
64
  const trustProxy = options.trustProxy !== false; // default true
65
+ let nativeFilter = null;
66
+ let isFallback = false;
67
+ try {
68
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
69
+ const { NativeIpFilter } = require('@exisjs/rs');
70
+ nativeFilter = new NativeIpFilter(allowRules, denyRules);
71
+ }
72
+ catch {
73
+ isFallback = true;
74
+ }
65
75
  return (req, res, next) => {
66
76
  const ip = resolveIp(req, trustProxy);
77
+ if (!isFallback && nativeFilter) {
78
+ if (!nativeFilter.check(ip)) {
79
+ return next(errors_1.HttpError.forbidden(message));
80
+ }
81
+ return next();
82
+ }
67
83
  // If allowlist is defined, IP MUST match at least one rule
68
84
  if (allowRules !== null) {
69
85
  if (!ipMatchesAny(ip, allowRules)) {
@@ -1 +1 @@
1
- {"version":3,"file":"ip-filter.js","sourceRoot":"","sources":["../../src/middleware/ip-filter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ip-filter.js","sourceRoot":"","sources":["../../src/middleware/ip-filter.ts"],"names":[],"mappings":";;AAmEA,gDA0CC;AA5GD,4CAA2C;AAa3C,uDAAuD;AACvD,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACpC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACxB,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACjC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE;QAAE,OAAO,IAAI,CAAA;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3B,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IACjC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAA;IACvD,OAAO,EAAE,OAAO,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;AAClD,CAAC;AAED,kDAAkD;AAClD,SAAS,OAAO,CAAC,EAAU;IACzB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACnC,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAC5B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG;YAAE,OAAO,IAAI,CAAA;QAC7C,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;IACtB,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,CAAA;AAClB,CAAC;AAED,2DAA2D;AAC3D,SAAS,aAAa,CAAC,EAAU,EAAE,IAAY;IAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAA;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC,CAAA;QACzB,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAA;QAChC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAA;IACnD,CAAC;IACD,OAAO,EAAE,KAAK,IAAI,CAAA;AACpB,CAAC;AAED,SAAS,YAAY,CAAC,EAAU,EAAE,KAAe;IAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAA;AACtD,CAAC;AAED,iFAAiF;AACjF,SAAS,SAAS,CAAC,GAAY,EAAE,UAAmB;IAClD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAC5C,IAAI,SAAS,EAAE,CAAC;YACd,4EAA4E;YAC5E,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACvC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,EAAE,IAAI,WAAW,CAAA;AAC9B,CAAC;AAED,SAAgB,kBAAkB,CAAC,UAA2B,EAAE;IAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAA;IACxC,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAA;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAA;IAClD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,KAAK,KAAK,CAAA,CAAC,eAAe;IAE/D,IAAI,YAAY,GAAQ,IAAI,CAAA;IAC5B,IAAI,UAAU,GAAG,KAAK,CAAA;IACtB,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;QAChD,YAAY,GAAG,IAAI,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,GAAG,IAAI,CAAA;IACnB,CAAC;IAED,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACzD,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QAErC,IAAI,CAAC,UAAU,IAAI,YAAY,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC,kBAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;YAC3C,CAAC;YACD,OAAO,IAAI,EAAE,CAAA;QACf,CAAC;QAED,2DAA2D;QAC3D,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC,kBAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC;QAED,qDAAqD;QACrD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC,kBAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC;QAED,IAAI,EAAE,CAAA;IACR,CAAC,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/middleware/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAA0B,OAAO,EAAE,MAAM,UAAU,CAAA;AAGxE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAA;IACvC,KAAK,CAAC,EAAE,GAAG,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAwEjE"}
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/middleware/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAA0B,OAAO,EAAE,MAAM,UAAU,CAAA;AAGxE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAA;IACvC,KAAK,CAAC,EAAE,GAAG,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAwFjE"}
@@ -15,17 +15,31 @@ function rateLimit(options = {}) {
15
15
  // If the app is behind a reverse proxy, the user should configure the proxy settings on the app instance.
16
16
  return req.ip || 'unknown';
17
17
  });
18
- const hits = new Map();
19
- // Sweep memory cache periodically
20
- const sweepInterval = setInterval(() => {
21
- const now = Date.now();
22
- for (const [key, data] of hits.entries()) {
23
- if (data.resetTime <= now) {
24
- hits.delete(key);
18
+ // Initialize the native rate limiter. Fallback to a JS Map if the native module fails to load in a strange environment.
19
+ let nativeLimiter = null;
20
+ const fallbackHits = new Map();
21
+ try {
22
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
23
+ const { NativeRateLimiter } = require('@exisjs/rs');
24
+ nativeLimiter = new NativeRateLimiter(windowMs);
25
+ // Sweep native memory periodically via background Rust thread
26
+ const sweepInterval = setInterval(() => {
27
+ nativeLimiter.sweep();
28
+ }, windowMs);
29
+ sweepInterval.unref();
30
+ }
31
+ catch {
32
+ // Sweep JS memory fallback
33
+ const sweepInterval = setInterval(() => {
34
+ const now = Date.now();
35
+ for (const [key, data] of fallbackHits.entries()) {
36
+ if (data.resetTime <= now) {
37
+ fallbackHits.delete(key);
38
+ }
25
39
  }
26
- }
27
- }, windowMs);
28
- sweepInterval.unref(); // Don't prevent process from exiting
40
+ }, windowMs);
41
+ sweepInterval.unref();
42
+ }
29
43
  return async (req, res, next) => {
30
44
  try {
31
45
  const key = keyGenerator(req);
@@ -42,13 +56,16 @@ function rateLimit(options = {}) {
42
56
  }
43
57
  currentHits = results[0][1];
44
58
  }
59
+ else if (nativeLimiter) {
60
+ currentHits = nativeLimiter.hit(key);
61
+ }
45
62
  else {
46
- let record = hits.get(key);
63
+ let record = fallbackHits.get(key);
47
64
  if (!record || record.resetTime <= now) {
48
65
  record = { count: 0, resetTime: now + windowMs };
49
66
  }
50
67
  record.count += 1;
51
- hits.set(key, record);
68
+ fallbackHits.set(key, record);
52
69
  currentHits = record.count;
53
70
  }
54
71
  res.set('X-RateLimit-Limit', max.toString());
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/middleware/rate-limit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/middleware/rate-limit.ts"],"names":[],"mappings":";;AAaA,8BAwFC;AApGD,4CAA2C;AAY3C,SAAgB,SAAS,CAAC,UAA4B,EAAE;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAA,CAAC,WAAW;IACtD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,GAAG,CAAA;IAC9B,MAAM,OAAO,GACX,OAAO,CAAC,OAAO,IAAI,4CAA4C,CAAA;IACjE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAA;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAA;IACtC,MAAM,YAAY,GAChB,OAAO,CAAC,YAAY;QACpB,CAAC,CAAC,GAAY,EAAE,EAAE;YAChB,qEAAqE;YACrE,wGAAwG;YACxG,0GAA0G;YAC1G,OAAO,GAAG,CAAC,EAAE,IAAI,SAAS,CAAA;QAC5B,CAAC,CAAC,CAAA;IAEJ,wHAAwH;IACxH,IAAI,aAAa,GAAQ,IAAI,CAAA;IAC7B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAgD,CAAA;IAE5E,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;QACnD,aAAa,GAAG,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAA;QAE/C,8DAA8D;QAC9D,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;YACrC,aAAa,CAAC,KAAK,EAAE,CAAA;QACvB,CAAC,EAAE,QAAQ,CAAC,CAAA;QACZ,aAAa,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,2BAA2B;QAC3B,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACtB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;gBACjD,IAAI,IAAI,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;oBAC1B,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC,EAAE,QAAQ,CAAC,CAAA;QACZ,aAAa,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAED,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC/D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAEtB,IAAI,WAAW,GAAG,CAAC,CAAA;YAEnB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,QAAQ,GAAG,GAAG,MAAM,GAAG,GAAG,EAAE,CAAA;gBAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;gBACnC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACpB,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;gBACjC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;gBAClC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACrC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;gBACvC,CAAC;gBACD,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CAAA;YACvC,CAAC;iBAAM,IAAI,aAAa,EAAE,CAAC;gBACzB,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACtC,CAAC;iBAAM,CAAC;gBACN,IAAI,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAClC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;oBACvC,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,GAAG,QAAQ,EAAE,CAAA;gBAClD,CAAC;gBACD,MAAM,CAAC,KAAK,IAAI,CAAC,CAAA;gBACjB,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;gBAC7B,WAAW,GAAG,MAAM,CAAC,KAAK,CAAA;YAC5B,CAAC;YAED,GAAG,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC5C,GAAG,CAAC,GAAG,CACL,uBAAuB,EACvB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,CAAC,QAAQ,EAAE,CAC1C,CAAA;YAED,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC,IAAI,kBAAS,CAAC,OAAO,EAAE,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAA;YACxE,CAAC;YAED,IAAI,EAAE,CAAA;QACR,CAAC;QAAC,MAAM,CAAC;YACP,0FAA0F;YAC1F,IAAI,EAAE,CAAA;QACR,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
@@ -1,8 +1,11 @@
1
1
  import type { QueueDriver, JobPayload, JobDefinition } from '../types';
2
2
  export declare class MemoryQueueDriver implements QueueDriver {
3
- private pending;
4
- private processing;
5
- private deadLetter;
3
+ private nativeQueue;
4
+ private fallbackPending;
5
+ private fallbackProcessing;
6
+ private fallbackDeadLetter;
7
+ private isFallback;
8
+ constructor();
6
9
  private getList;
7
10
  enqueue(name: string, payload: JobPayload, maxQueue?: number): Promise<string>;
8
11
  poll(jobs: Map<string, JobDefinition>): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryDriver.d.ts","sourceRoot":"","sources":["../../../src/queue/drivers/MemoryDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAQtE,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,UAAU,CAAiC;IAEnD,OAAO,CAAC,OAAO;IAOT,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,UAAU,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAoBZ,IAAI,CACR,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAC/B,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAgCpE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1D,IAAI,CACR,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,IAAI,CAAC;IAmCV,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
1
+ {"version":3,"file":"MemoryDriver.d.ts","sourceRoot":"","sources":["../../../src/queue/drivers/MemoryDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAEtE,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,kBAAkB,CAA2B;IACrD,OAAO,CAAC,kBAAkB,CAA2B;IACrD,OAAO,CAAC,UAAU,CAAQ;;IAgB1B,OAAO,CAAC,OAAO;IAOT,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,UAAU,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAmCZ,IAAI,CACR,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAC/B,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IA6CpE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa1D,IAAI,CACR,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,UAAU,EACnB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,IAAI,CAAC;IAwDV,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7B"}
@@ -3,9 +3,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MemoryQueueDriver = void 0;
4
4
  class MemoryQueueDriver {
5
5
  constructor() {
6
- this.pending = new Map();
7
- this.processing = new Map();
8
- this.deadLetter = new Map();
6
+ this.fallbackPending = new Map();
7
+ this.fallbackProcessing = new Map();
8
+ this.fallbackDeadLetter = new Map();
9
+ this.isFallback = false;
10
+ try {
11
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
12
+ const { NativeMemoryQueue } = require('@exisjs/rs');
13
+ this.nativeQueue = new NativeMemoryQueue();
14
+ }
15
+ catch {
16
+ // Fallback if native module fails to load
17
+ this.isFallback = true;
18
+ this.fallbackPending = new Map();
19
+ this.fallbackProcessing = new Map();
20
+ this.fallbackDeadLetter = new Map();
21
+ }
9
22
  }
10
23
  getList(map, key) {
11
24
  if (!map.has(key)) {
@@ -14,31 +27,50 @@ class MemoryQueueDriver {
14
27
  return map.get(key);
15
28
  }
16
29
  async enqueue(name, payload, maxQueue) {
17
- const pendingList = this.getList(this.pending, name);
30
+ const score = Date.now() + (payload.opts?.delay || 0);
31
+ if (!this.isFallback) {
32
+ try {
33
+ this.nativeQueue.enqueue(name, payload.id, JSON.stringify(payload), score, maxQueue);
34
+ return payload.id;
35
+ }
36
+ catch (err) {
37
+ throw new Error(err.message, { cause: err });
38
+ }
39
+ }
40
+ const pendingList = this.getList(this.fallbackPending, name);
18
41
  if (maxQueue !== undefined && pendingList.length >= maxQueue) {
19
42
  throw new Error(`Queue backpressure activated: maximum queue size (${maxQueue}) reached for job ${name}.`);
20
43
  }
21
- const score = Date.now() + (payload.opts?.delay || 0);
22
44
  pendingList.push({
23
45
  id: payload.id,
24
46
  payloadStr: JSON.stringify(payload),
25
47
  score,
26
48
  });
27
- // Keep it sorted by score
28
49
  pendingList.sort((a, b) => a.score - b.score);
29
50
  return payload.id;
30
51
  }
31
52
  async poll(jobs) {
53
+ if (!this.isFallback) {
54
+ const jobNames = Array.from(jobs.keys());
55
+ const visibilityTimeouts = jobNames.map((name) => jobs.get(name)?.defaultOptions?.visibilityTimeout ?? 30000);
56
+ const result = this.nativeQueue.poll(jobNames, visibilityTimeouts);
57
+ if (result && result.length === 3) {
58
+ return {
59
+ queueKey: result[0],
60
+ jobId: result[1],
61
+ payloadStr: result[2],
62
+ };
63
+ }
64
+ return null;
65
+ }
32
66
  const now = Date.now();
33
67
  for (const name of jobs.keys()) {
34
- const pendingList = this.getList(this.pending, name);
68
+ const pendingList = this.getList(this.fallbackPending, name);
35
69
  if (pendingList.length > 0 && pendingList[0].score <= now) {
36
- // Pop the job
37
70
  const job = pendingList.shift();
38
71
  const jobDef = jobs.get(name);
39
72
  const visibilityTimeout = jobDef?.defaultOptions?.visibilityTimeout ?? 30000;
40
- // Move to processing with new score
41
- const processingList = this.getList(this.processing, name);
73
+ const processingList = this.getList(this.fallbackProcessing, name);
42
74
  processingList.push({
43
75
  id: job.id,
44
76
  payloadStr: job.payloadStr,
@@ -54,14 +86,29 @@ class MemoryQueueDriver {
54
86
  return null;
55
87
  }
56
88
  async acknowledge(jobName, jobId) {
57
- const processingList = this.getList(this.processing, jobName);
89
+ if (!this.isFallback) {
90
+ this.nativeQueue.acknowledge(jobName, jobId);
91
+ return;
92
+ }
93
+ const processingList = this.getList(this.fallbackProcessing, jobName);
58
94
  const index = processingList.findIndex((j) => j.id === jobId);
59
95
  if (index !== -1) {
60
96
  processingList.splice(index, 1);
61
97
  }
62
98
  }
63
99
  async fail(jobDef, jobId, payload, maxAttempts, error) {
64
- const processingList = this.getList(this.processing, jobDef.name);
100
+ if (!this.isFallback) {
101
+ const isDeadLetter = payload.attemptsMade >= maxAttempts;
102
+ const delay = isDeadLetter ? 0 : (payload.opts?.backoff?.delay ?? 0);
103
+ this.nativeQueue.fail(jobDef.name, jobId, JSON.stringify(payload), delay, isDeadLetter);
104
+ if (isDeadLetter && jobDef.onJobFailedPermanently) {
105
+ Promise.resolve(jobDef.onJobFailedPermanently(payload, error)).catch(() => {
106
+ /* noop */
107
+ });
108
+ }
109
+ return;
110
+ }
111
+ const processingList = this.getList(this.fallbackProcessing, jobDef.name);
65
112
  const index = processingList.findIndex((j) => j.id === jobId);
66
113
  if (index !== -1) {
67
114
  processingList.splice(index, 1);
@@ -69,7 +116,7 @@ class MemoryQueueDriver {
69
116
  if (payload.attemptsMade < maxAttempts) {
70
117
  const delay = payload.opts?.backoff?.delay ?? 0;
71
118
  const score = Date.now() + delay;
72
- const pendingList = this.getList(this.pending, jobDef.name);
119
+ const pendingList = this.getList(this.fallbackPending, jobDef.name);
73
120
  pendingList.push({
74
121
  id: jobId,
75
122
  payloadStr: JSON.stringify(payload),
@@ -78,7 +125,7 @@ class MemoryQueueDriver {
78
125
  pendingList.sort((a, b) => a.score - b.score);
79
126
  }
80
127
  else {
81
- const deadLetterList = this.getList(this.deadLetter, jobDef.name);
128
+ const deadLetterList = this.getList(this.fallbackDeadLetter, jobDef.name);
82
129
  deadLetterList.push({
83
130
  id: jobId,
84
131
  payloadStr: JSON.stringify(payload),
@@ -86,23 +133,24 @@ class MemoryQueueDriver {
86
133
  });
87
134
  if (jobDef.onJobFailedPermanently) {
88
135
  Promise.resolve(jobDef.onJobFailedPermanently(payload, error)).catch(() => {
89
- /* ignore */
136
+ /* noop */
90
137
  });
91
138
  }
92
139
  }
93
140
  }
94
141
  async sweep(jobs) {
142
+ if (!this.isFallback) {
143
+ this.nativeQueue.sweep(Array.from(jobs.keys()));
144
+ return;
145
+ }
95
146
  const now = Date.now();
96
147
  for (const name of jobs.keys()) {
97
- const processingList = this.getList(this.processing, name);
98
- const pendingList = this.getList(this.pending, name);
99
- // Find expired
148
+ const processingList = this.getList(this.fallbackProcessing, name);
149
+ const pendingList = this.getList(this.fallbackPending, name);
100
150
  const expired = processingList.filter((j) => j.score <= now);
101
151
  if (expired.length > 0) {
102
- // Remove from processing
103
152
  const remaining = processingList.filter((j) => j.score > now);
104
- this.processing.set(name, remaining);
105
- // Add back to pending
153
+ this.fallbackProcessing.set(name, remaining);
106
154
  for (const job of expired) {
107
155
  pendingList.push({
108
156
  id: job.id,
@@ -115,8 +163,13 @@ class MemoryQueueDriver {
115
163
  }
116
164
  }
117
165
  async close() {
118
- this.pending.clear();
119
- this.processing.clear();
166
+ if (!this.isFallback) {
167
+ this.nativeQueue.close();
168
+ }
169
+ else {
170
+ this.fallbackPending.clear();
171
+ this.fallbackProcessing.clear();
172
+ }
120
173
  }
121
174
  }
122
175
  exports.MemoryQueueDriver = MemoryQueueDriver;
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryDriver.js","sourceRoot":"","sources":["../../../src/queue/drivers/MemoryDriver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MemoryDriver.js","sourceRoot":"","sources":["../../../src/queue/drivers/MemoryDriver.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,9 @@ export declare class ServerBootstrapper {
12
12
  _useBun: boolean;
13
13
  _bunApp: ReturnType<typeof createBunApp> | null;
14
14
  private bunServerInstance;
15
+ _useUws: boolean;
16
+ _uwsApp: any;
17
+ private uwsListenToken;
15
18
  constructor(app: App<any>);
16
19
  getServer(): HttpServer | HttpsServer | Http2SecureServer;
17
20
  private _initServer;
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrapper.d.ts","sourceRoot":"","sources":["../../src/server/bootstrapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAA;AAErD,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,YAAY,CAAA;AAEvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAEhC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAqC;IAEnD,OAAO,UAAQ;IACf,OAAO,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,GAAG,IAAI,CAAO;IAC7D,OAAO,CAAC,iBAAiB,CAAY;gBAEzB,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IA4BlB,SAAS,IAAI,UAAU,GAAG,WAAW,GAAG,iBAAiB;IAIhE,OAAO,CAAC,WAAW;IA+CZ,MAAM,CACX,aAAa,CAAC,EAAE,MAAM,GAAG,aAAa,EACtC,QAAQ,CAAC,EAAE,MAAM,IAAI,GACpB,UAAU,GAAG,WAAW,GAAG,iBAAiB;IAsJlC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqFzC,UAAU,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAKlD,KAAK,CAAC,OAAO,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAmH5C"}
1
+ {"version":3,"file":"bootstrapper.d.ts","sourceRoot":"","sources":["../../src/server/bootstrapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAA;AAErD,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,YAAY,CAAA;AAEvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAEhC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,aAAa,CAAqC;IAEnD,OAAO,UAAQ;IACf,OAAO,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,GAAG,IAAI,CAAO;IAC7D,OAAO,CAAC,iBAAiB,CAAY;IAE9B,OAAO,UAAQ;IACf,OAAO,EAAE,GAAG,CAAO;IAC1B,OAAO,CAAC,cAAc,CAAY;gBAEtB,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IAqClB,SAAS,IAAI,UAAU,GAAG,WAAW,GAAG,iBAAiB;IAIhE,OAAO,CAAC,WAAW;IA+CZ,MAAM,CACX,aAAa,CAAC,EAAE,MAAM,GAAG,aAAa,EACtC,QAAQ,CAAC,EAAE,MAAM,IAAI,GACpB,UAAU,GAAG,WAAW,GAAG,iBAAiB;IAqMlC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqFzC,UAAU,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAKlD,KAAK,CAAC,OAAO,SAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAuH5C"}
@@ -46,26 +46,37 @@ class ServerBootstrapper {
46
46
  this._useBun = false;
47
47
  this._bunApp = null;
48
48
  this.bunServerInstance = null;
49
+ this._useUws = false;
50
+ this._uwsApp = null;
51
+ this.uwsListenToken = null;
49
52
  this.app = app;
50
- // Auto-detect Bun backend
51
- if (app.explicitOptions.server === 'bun' ||
52
- (app.explicitOptions.server !== 'node' &&
53
+ const requestedServer = app.explicitOptions.server;
54
+ if (requestedServer === 'uws') {
55
+ try {
56
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
57
+ require('uWebSockets.js');
58
+ this._useUws = true;
59
+ }
60
+ catch {
61
+ app.log.warn("server: 'uws' was requested, but uWebSockets.js is not available. Falling back to the native Node.js HTTP server.");
62
+ this.server = this._initServer();
63
+ }
64
+ }
65
+ else if (requestedServer === 'bun' ||
66
+ (requestedServer !== 'node' &&
53
67
  typeof Bun !== 'undefined' &&
54
68
  app.options.env !== 'test')) {
55
69
  if (typeof Bun !== 'undefined') {
56
70
  this._useBun = true;
57
- // Don't init Node server - we'll create the Bun app at listen() time
58
71
  }
59
72
  else {
60
- if (app.explicitOptions.server === 'bun') {
73
+ if (requestedServer === 'bun') {
61
74
  app.log.warn("server: 'bun' was requested, but Bun is not available. Falling back to the native Node.js HTTP server.");
62
75
  }
63
- this._useBun = false;
64
76
  this.server = this._initServer();
65
77
  }
66
78
  }
67
79
  else {
68
- this._useBun = false;
69
80
  this.server = this._initServer();
70
81
  }
71
82
  }
@@ -131,6 +142,38 @@ class ServerBootstrapper {
131
142
  port = this.app.options.port;
132
143
  host = this.app.options.host;
133
144
  }
145
+ // --- uWebSockets.js listen path ---
146
+ if (this._useUws) {
147
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
148
+ const { createUwsApp } = require('./uws-adapter');
149
+ this._uwsApp = createUwsApp(this.app.handle.bind(this.app), this.app.wsOrchestrator.handleUwsUpgrade.bind(this.app.wsOrchestrator), this.app.options.ssl);
150
+ this._uwsApp.listen(port, host, async (tokenInfo) => {
151
+ if (!tokenInfo) {
152
+ console.error(`\n\x1b[31m? Port ${port} is already in use (uWS).\x1b[0m`);
153
+ process.exit(1);
154
+ }
155
+ this.uwsListenToken = tokenInfo.token;
156
+ const address = { port: tokenInfo.port, host };
157
+ if (this.app.hotReloader) {
158
+ this.app.hotReloader.stop();
159
+ }
160
+ if (onListen) {
161
+ onListen(address);
162
+ }
163
+ else {
164
+ if (!process.env.__EXIS_DEV_SERVER && !process.env.__EXIS_CLI) {
165
+ const url = `http://${host === '0.0.0.0' ? 'localhost' : host}:${port}`;
166
+ this.app.log.info({ url, env: this.app.options.env, backend: 'uws' }, `Server running at ${url} (uWS)`);
167
+ }
168
+ }
169
+ for (const hook of this.app.hooks.ready) {
170
+ await hook();
171
+ }
172
+ if (callback)
173
+ callback();
174
+ });
175
+ return this.server;
176
+ }
134
177
  // --- Bun listen path ---
135
178
  if (this._useBun) {
136
179
  this._bunApp = (0, bun_adapter_1.createBunApp)(this.app.handle.bind(this.app), this.app.wsOrchestrator.handleBunUpgrade.bind(this.app.wsOrchestrator), port, host, this.app.options.ssl);
@@ -265,7 +308,7 @@ class ServerBootstrapper {
265
308
  const networkHost = host === '0.0.0.0'
266
309
  ? `http://${localIp}:${port}`
267
310
  : 'use --host 0.0.0.0 to expose';
268
- const readyMs = 125;
311
+ const readyMs = Math.round(process.uptime() * 1000);
269
312
  const displayEnv = this.app.options.env || process.env.NODE_ENV || 'development';
270
313
  const workerCount = process.env.__EXIS_CLUSTER_WORKERS;
271
314
  const cluster = await Promise.resolve().then(() => __importStar(require('node:cluster')));
@@ -380,6 +423,11 @@ class ServerBootstrapper {
380
423
  this.bunServerInstance = null;
381
424
  cleanupAndFinish();
382
425
  }
426
+ else if (this._useUws && this._uwsApp && this.uwsListenToken) {
427
+ this._uwsApp.close(this.uwsListenToken);
428
+ this.uwsListenToken = null;
429
+ cleanupAndFinish();
430
+ }
383
431
  else {
384
432
  this.server.close((err) => {
385
433
  if (err)