theokit 0.71.0 → 0.72.1

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 (139) hide show
  1. package/dist/{actions-virtual-module-2SM6YMTM.js → actions-virtual-module-EAKYEMGF.js} +4 -4
  2. package/dist/{actions-virtual-module-5LRBP6YK.js → actions-virtual-module-OHENNMQG.js} +6 -6
  3. package/dist/adapters/agent-mount.js +3 -3
  4. package/dist/{agent-4FXJXZFD.js → agent-VJTZ4DQ7.js} +2 -2
  5. package/dist/{app-typed-client-LIIPHLO6.js → app-typed-client-ILLQYTXP.js} +6 -6
  6. package/dist/{app-typed-client-JFPV4YLS.js → app-typed-client-LHH77QDB.js} +4 -4
  7. package/dist/{aws-lambda-MUGK4WNZ.js → aws-lambda-7AZNJGWU.js} +6 -4
  8. package/dist/{aws-lambda-MUGK4WNZ.js.map → aws-lambda-7AZNJGWU.js.map} +1 -1
  9. package/dist/{build-KCIH3HI6.js → build-23QF5FNQ.js} +7 -7
  10. package/dist/build-23QF5FNQ.js.map +1 -0
  11. package/dist/{bun-JWZ2UOLJ.js → bun-NKVHOFSJ.js} +6 -4
  12. package/dist/{bun-JWZ2UOLJ.js.map → bun-NKVHOFSJ.js.map} +1 -1
  13. package/dist/{chunk-KOG5K26V.js → chunk-2Z7TANA4.js} +2 -2
  14. package/dist/{chunk-V6VARIR3.js → chunk-4EQEJ4PH.js} +9 -9
  15. package/dist/{chunk-3NAKOWTX.js → chunk-6U67SO5U.js} +3 -3
  16. package/dist/{chunk-IGCOTLQI.js → chunk-C5CAL3DX.js} +136 -5
  17. package/dist/{chunk-IGCOTLQI.js.map → chunk-C5CAL3DX.js.map} +1 -1
  18. package/dist/{chunk-YWWMYEAC.js → chunk-CLSYYO5F.js} +2 -2
  19. package/dist/{chunk-OSBGZYXZ.js → chunk-D2R5SJEL.js} +16 -2
  20. package/dist/chunk-D2R5SJEL.js.map +1 -0
  21. package/dist/{chunk-JMN4COMK.js → chunk-D7STTNQN.js} +3 -3
  22. package/dist/{chunk-DSPEN7ZJ.js → chunk-DKX7LF5Q.js} +4 -4
  23. package/dist/{chunk-5XXXJ6DT.js → chunk-E2RC367T.js} +47 -8
  24. package/dist/chunk-E2RC367T.js.map +1 -0
  25. package/dist/{chunk-3DGIANAN.js → chunk-FJEKQ4FT.js} +1 -1
  26. package/dist/{chunk-3DGIANAN.js.map → chunk-FJEKQ4FT.js.map} +1 -1
  27. package/dist/{chunk-KI4DOTN4.js → chunk-G7U7FQVC.js} +3 -1
  28. package/dist/chunk-G7U7FQVC.js.map +1 -0
  29. package/dist/{chunk-6AGXDYVE.js → chunk-IB5VIXLR.js} +2 -2
  30. package/dist/{chunk-Q4NSUGMS.js → chunk-JJXBRY2U.js} +74 -6
  31. package/dist/chunk-JJXBRY2U.js.map +1 -0
  32. package/dist/{chunk-PGDBSK2L.js → chunk-L6UHMWXU.js} +2 -2
  33. package/dist/{chunk-MS4A7N77.js → chunk-PEL3MJLM.js} +2 -2
  34. package/dist/{chunk-TNI4MARH.js → chunk-SFGGRC35.js} +23 -6
  35. package/dist/chunk-SFGGRC35.js.map +1 -0
  36. package/dist/{chunk-4D4YVXHR.js → chunk-SYIQV4UH.js} +29 -2
  37. package/dist/{chunk-4D4YVXHR.js.map → chunk-SYIQV4UH.js.map} +1 -1
  38. package/dist/{chunk-FFS7IRZF.js → chunk-SZWGXHY3.js} +2 -2
  39. package/dist/{chunk-SX7ZAHNE.js → chunk-WBB3MEEN.js} +16 -2
  40. package/dist/chunk-WBB3MEEN.js.map +1 -0
  41. package/dist/{chunk-TMQ52AZR.js → chunk-X2LFNDJQ.js} +2 -2
  42. package/dist/{chunk-FWEXQ2BR.js → chunk-XLSJWKSP.js} +11 -11
  43. package/dist/{chunk-NZDGV4YJ.js → chunk-YCF3N4JS.js} +2 -2
  44. package/dist/cli/index.js +9 -9
  45. package/dist/{cloudflare-XO43ZIQF.js → cloudflare-4M4XVNUH.js} +5 -3
  46. package/dist/{cloudflare-XO43ZIQF.js.map → cloudflare-4M4XVNUH.js.map} +1 -1
  47. package/dist/{config-support-O4REYSK5.js → config-support-SB5NDQZB.js} +11 -5
  48. package/dist/{config-support-O4REYSK5.js.map → config-support-SB5NDQZB.js.map} +1 -1
  49. package/dist/{deno-deploy-EUQDK2RC.js → deno-deploy-IVACZ62D.js} +11 -5
  50. package/dist/deno-deploy-IVACZ62D.js.map +1 -0
  51. package/dist/{dev-CD4YU5FN.js → dev-JDJWMRLH.js} +9 -9
  52. package/dist/{index-inRdhi59.d.ts → index-CmkWlIDO.d.ts} +3 -1
  53. package/dist/index.d.ts +12 -2
  54. package/dist/index.js +7 -7
  55. package/dist/{info-2H7I55YN.js → info-SUX7QVA3.js} +4 -4
  56. package/dist/{internal-api-TMLSNYMP.js → internal-api-6XNLCNI5.js} +6 -6
  57. package/dist/{internal-api-WAKX6AZW.js → internal-api-VDYOXOT7.js} +4 -4
  58. package/dist/{load-config-VMKOV44Y.js → load-config-52H3EKAA.js} +4 -4
  59. package/dist/{mcp-HS26ZCU4.js → mcp-WJNCTM7M.js} +3 -3
  60. package/dist/{netlify-LEYEQZK6.js → netlify-3HEWV375.js} +6 -4
  61. package/dist/{netlify-LEYEQZK6.js.map → netlify-3HEWV375.js.map} +1 -1
  62. package/dist/{node-OSVPYQ3D.js → node-QUGTW6XV.js} +2 -2
  63. package/dist/{observability-bootstrap-YQKMEYW7.js → observability-bootstrap-FP6LMMJE.js} +3 -3
  64. package/dist/{openapi-N4CXRUNT.js → openapi-Q53YOBIU.js} +4 -4
  65. package/dist/{preview-YDJSRJ2K.js → preview-BARW75PN.js} +3 -3
  66. package/dist/{rate-limit-BdNDZ3vt.d.ts → rate-limit-fULgvzCz.d.ts} +11 -1
  67. package/dist/{rate-limit-store-BEJnhWdw.d.ts → rate-limit-store-n1wD4Yk4.d.ts} +48 -1
  68. package/dist/registry-SDBODRU6.js +23 -0
  69. package/dist/{routes-ECCDRHXZ.js → routes-FDF4SLOB.js} +4 -4
  70. package/dist/{schema-ND7GHPQK.js → schema-LHNWUR4V.js} +3 -3
  71. package/dist/{schemas-QCMSKQDK.js → schemas-2R2J64ZH.js} +2 -2
  72. package/dist/server/auth/index.d.ts +1 -1
  73. package/dist/server/http/index.d.ts +1 -1
  74. package/dist/server/http/index.js +5 -3
  75. package/dist/server/index.d.ts +4 -4
  76. package/dist/server/index.js +15 -7
  77. package/dist/server/index.js.map +1 -1
  78. package/dist/server/rate-limit/index.d.ts +96 -14
  79. package/dist/server/rate-limit/index.js +10 -4
  80. package/dist/server/storage/index.js +1 -1
  81. package/dist/{server-boundary-RX2AFU5U.js → server-boundary-AO6EELRF.js} +4 -4
  82. package/dist/{server-boundary-NZPP33G6.js → server-boundary-E5GFVPLB.js} +6 -6
  83. package/dist/{start-TYXS5I4M.js → start-4JTYXQQJ.js} +14 -11
  84. package/dist/start-4JTYXQQJ.js.map +1 -0
  85. package/dist/{static-7OJNB7D2.js → static-NQPLPAB6.js} +6 -2
  86. package/dist/{static-7OJNB7D2.js.map → static-NQPLPAB6.js.map} +1 -1
  87. package/dist/{theo-cloud-3ET4G5T6.js → theo-cloud-HMFNZ3FS.js} +3 -1
  88. package/dist/{theo-cloud-3ET4G5T6.js.map → theo-cloud-HMFNZ3FS.js.map} +1 -1
  89. package/dist/{vercel-HTAWCNAG.js → vercel-5PMYEEKF.js} +6 -4
  90. package/dist/{vercel-HTAWCNAG.js.map → vercel-5PMYEEKF.js.map} +1 -1
  91. package/dist/vite-plugin/index.d.ts +2 -2
  92. package/dist/vite-plugin/index.js +7 -7
  93. package/dist/{vite-plugin-DDILUFYY.js → vite-plugin-3ON45MQE.js} +8 -8
  94. package/package.json +3 -3
  95. package/dist/build-KCIH3HI6.js.map +0 -1
  96. package/dist/chunk-5XXXJ6DT.js.map +0 -1
  97. package/dist/chunk-KI4DOTN4.js.map +0 -1
  98. package/dist/chunk-OSBGZYXZ.js.map +0 -1
  99. package/dist/chunk-Q4NSUGMS.js.map +0 -1
  100. package/dist/chunk-SX7ZAHNE.js.map +0 -1
  101. package/dist/chunk-TNI4MARH.js.map +0 -1
  102. package/dist/deno-deploy-EUQDK2RC.js.map +0 -1
  103. package/dist/registry-4JHCZ6EF.js +0 -23
  104. package/dist/start-TYXS5I4M.js.map +0 -1
  105. /package/dist/{actions-virtual-module-2SM6YMTM.js.map → actions-virtual-module-EAKYEMGF.js.map} +0 -0
  106. /package/dist/{actions-virtual-module-5LRBP6YK.js.map → actions-virtual-module-OHENNMQG.js.map} +0 -0
  107. /package/dist/{agent-4FXJXZFD.js.map → agent-VJTZ4DQ7.js.map} +0 -0
  108. /package/dist/{app-typed-client-LIIPHLO6.js.map → app-typed-client-ILLQYTXP.js.map} +0 -0
  109. /package/dist/{app-typed-client-JFPV4YLS.js.map → app-typed-client-LHH77QDB.js.map} +0 -0
  110. /package/dist/{chunk-KOG5K26V.js.map → chunk-2Z7TANA4.js.map} +0 -0
  111. /package/dist/{chunk-V6VARIR3.js.map → chunk-4EQEJ4PH.js.map} +0 -0
  112. /package/dist/{chunk-3NAKOWTX.js.map → chunk-6U67SO5U.js.map} +0 -0
  113. /package/dist/{chunk-YWWMYEAC.js.map → chunk-CLSYYO5F.js.map} +0 -0
  114. /package/dist/{chunk-JMN4COMK.js.map → chunk-D7STTNQN.js.map} +0 -0
  115. /package/dist/{chunk-DSPEN7ZJ.js.map → chunk-DKX7LF5Q.js.map} +0 -0
  116. /package/dist/{chunk-6AGXDYVE.js.map → chunk-IB5VIXLR.js.map} +0 -0
  117. /package/dist/{chunk-PGDBSK2L.js.map → chunk-L6UHMWXU.js.map} +0 -0
  118. /package/dist/{chunk-MS4A7N77.js.map → chunk-PEL3MJLM.js.map} +0 -0
  119. /package/dist/{chunk-FFS7IRZF.js.map → chunk-SZWGXHY3.js.map} +0 -0
  120. /package/dist/{chunk-TMQ52AZR.js.map → chunk-X2LFNDJQ.js.map} +0 -0
  121. /package/dist/{chunk-FWEXQ2BR.js.map → chunk-XLSJWKSP.js.map} +0 -0
  122. /package/dist/{chunk-NZDGV4YJ.js.map → chunk-YCF3N4JS.js.map} +0 -0
  123. /package/dist/{dev-CD4YU5FN.js.map → dev-JDJWMRLH.js.map} +0 -0
  124. /package/dist/{info-2H7I55YN.js.map → info-SUX7QVA3.js.map} +0 -0
  125. /package/dist/{internal-api-TMLSNYMP.js.map → internal-api-6XNLCNI5.js.map} +0 -0
  126. /package/dist/{internal-api-WAKX6AZW.js.map → internal-api-VDYOXOT7.js.map} +0 -0
  127. /package/dist/{load-config-VMKOV44Y.js.map → load-config-52H3EKAA.js.map} +0 -0
  128. /package/dist/{mcp-HS26ZCU4.js.map → mcp-WJNCTM7M.js.map} +0 -0
  129. /package/dist/{node-OSVPYQ3D.js.map → node-QUGTW6XV.js.map} +0 -0
  130. /package/dist/{observability-bootstrap-YQKMEYW7.js.map → observability-bootstrap-FP6LMMJE.js.map} +0 -0
  131. /package/dist/{openapi-N4CXRUNT.js.map → openapi-Q53YOBIU.js.map} +0 -0
  132. /package/dist/{preview-YDJSRJ2K.js.map → preview-BARW75PN.js.map} +0 -0
  133. /package/dist/{registry-4JHCZ6EF.js.map → registry-SDBODRU6.js.map} +0 -0
  134. /package/dist/{routes-ECCDRHXZ.js.map → routes-FDF4SLOB.js.map} +0 -0
  135. /package/dist/{schema-ND7GHPQK.js.map → schema-LHNWUR4V.js.map} +0 -0
  136. /package/dist/{schemas-QCMSKQDK.js.map → schemas-2R2J64ZH.js.map} +0 -0
  137. /package/dist/{server-boundary-RX2AFU5U.js.map → server-boundary-AO6EELRF.js.map} +0 -0
  138. /package/dist/{server-boundary-NZPP33G6.js.map → server-boundary-E5GFVPLB.js.map} +0 -0
  139. /package/dist/{vite-plugin-DDILUFYY.js.map → vite-plugin-3ON45MQE.js.map} +0 -0
@@ -21,7 +21,7 @@ import {
21
21
  newSpanId,
22
22
  newTraceId,
23
23
  requestTrace
24
- } from "./chunk-MS4A7N77.js";
24
+ } from "./chunk-PEL3MJLM.js";
25
25
  import {
26
26
  RequestBodyConsumedError,
27
27
  createLogger,
@@ -542,6 +542,24 @@ async function runWebShapedMiddleware(mw, req, res, context) {
542
542
  function isWebShaped(mw) {
543
543
  return WEB_SHAPED_MIDDLEWARE in mw;
544
544
  }
545
+ var warnedUninvocable = /* @__PURE__ */ new Set();
546
+ function describeUninvocable(value) {
547
+ if (value === void 0) return "no default export";
548
+ if (value === null) return "a default export of `null`";
549
+ if (typeof value !== "object") return `a default export of type \`${typeof value}\``;
550
+ const keys = Object.keys(value);
551
+ if (keys.includes("build") && keys.includes("handle")) {
552
+ return "a middleware BUILDER that was never built \u2014 call `.handle(fn).build()` on it";
553
+ }
554
+ return `an object with keys [${keys.join(", ")}]`;
555
+ }
556
+ function reportUninvocableMiddleware(path, value) {
557
+ if (warnedUninvocable.has(path)) return;
558
+ warnedUninvocable.add(path);
559
+ console.warn(
560
+ `[theokit] middleware not run: ${path} exports ${describeUninvocable(value)}. The file-scan runner invokes a function; this export is not one, so it was skipped and the request was answered without it.`
561
+ );
562
+ }
545
563
  async function runScannedMiddleware(mw, req, res, context) {
546
564
  if (isWebShaped(mw)) {
547
565
  const { shortCircuited } = await runWebShapedMiddleware(mw, req, res, context);
@@ -600,7 +618,10 @@ async function runMiddlewareAndContext(req, res, loadModule, serverDir) {
600
618
  for (const mwPath of dirMiddlewares) {
601
619
  const mod = await loadModule(mwPath);
602
620
  const mw = mod.default;
603
- if (typeof mw !== "function") continue;
621
+ if (typeof mw !== "function") {
622
+ reportUninvocableMiddleware(mwPath, mod.default);
623
+ continue;
624
+ }
604
625
  const { aborted } = await runScannedMiddleware(mw, req, res, middlewareCtx);
605
626
  if (aborted) return { ctx: middlewareCtx, aborted: true };
606
627
  }
@@ -611,6 +632,8 @@ async function runMiddlewareAndContext(req, res, loadModule, serverDir) {
611
632
  if (typeof mw === "function") {
612
633
  const { aborted } = await runScannedMiddleware(mw, req, res, middlewareCtx);
613
634
  if (aborted) return { ctx: middlewareCtx, aborted: true };
635
+ } else {
636
+ reportUninvocableMiddleware(singleFilePath, mod.default);
614
637
  }
615
638
  }
616
639
  const factoryCtx = await createServerContext(req, res, loadModule, serverDir);
@@ -1803,6 +1826,13 @@ async function createPluginRunnerFromConfig(plugins) {
1803
1826
  }
1804
1827
 
1805
1828
  // src/server/rate-limit/rate-limit-store.ts
1829
+ function slidingCount(state, windowMs) {
1830
+ const { previousCount } = state;
1831
+ if (previousCount === void 0 || previousCount === 0) return state.count;
1832
+ const windowStart = state.resetAt - windowMs;
1833
+ const throughCurrent = Math.min(1, Math.max(0, (Date.now() - windowStart) / windowMs));
1834
+ return state.count + previousCount * (1 - throughCurrent);
1835
+ }
1806
1836
  var InMemoryStore = class _InMemoryStore {
1807
1837
  store = /* @__PURE__ */ new Map();
1808
1838
  /** Bound the map to prevent unbounded growth from pathological inputs. */
@@ -1838,12 +1868,18 @@ var InMemoryStore = class _InMemoryStore {
1838
1868
  }
1839
1869
  const entry = this.store.get(key);
1840
1870
  if (!entry || now >= entry.resetAt) {
1841
- const fresh = { count: 1, resetAt: now + windowMs };
1871
+ let previousCount = 0;
1872
+ let resetAt = now + windowMs;
1873
+ if (entry !== void 0 && now - entry.resetAt < windowMs) {
1874
+ previousCount = entry.count;
1875
+ resetAt = entry.resetAt + windowMs;
1876
+ }
1877
+ const fresh = { count: 1, resetAt, previousCount };
1842
1878
  this.store.set(key, fresh);
1843
1879
  return { ...fresh };
1844
1880
  }
1845
1881
  entry.count++;
1846
- return { count: entry.count, resetAt: entry.resetAt };
1882
+ return { count: entry.count, resetAt: entry.resetAt, previousCount: entry.previousCount };
1847
1883
  }
1848
1884
  /** Sweep expired entries. Called by the GC timer; safe to call manually. */
1849
1885
  sweepExpired() {
@@ -1899,13 +1935,15 @@ function createRateLimiter(config, opts = {}) {
1899
1935
  };
1900
1936
  }
1901
1937
  function resultFromState(state, config) {
1902
- if (state.count > config.max) {
1903
- const retryAfter = Math.ceil((state.resetAt - Date.now()) / 1e3);
1938
+ const reset = String(Math.ceil(state.resetAt / 1e3));
1939
+ if (slidingCount(state, config.windowMs) > config.max) {
1940
+ const retryAfter = Math.max(0, Math.ceil((state.resetAt - Date.now()) / 1e3));
1904
1941
  return {
1905
1942
  limited: true,
1906
1943
  headers: {
1907
1944
  "X-RateLimit-Limit": String(config.max),
1908
1945
  "X-RateLimit-Remaining": "0",
1946
+ "X-RateLimit-Reset": reset,
1909
1947
  "Retry-After": String(retryAfter)
1910
1948
  }
1911
1949
  };
@@ -1914,7 +1952,8 @@ function resultFromState(state, config) {
1914
1952
  limited: false,
1915
1953
  headers: {
1916
1954
  "X-RateLimit-Limit": String(config.max),
1917
- "X-RateLimit-Remaining": String(Math.max(0, config.max - state.count))
1955
+ "X-RateLimit-Remaining": String(Math.max(0, config.max - state.count)),
1956
+ "X-RateLimit-Reset": reset
1918
1957
  }
1919
1958
  };
1920
1959
  }
@@ -2696,4 +2735,4 @@ export {
2696
2735
  CsrfReadinessStore,
2697
2736
  applySecurityHeaders
2698
2737
  };
2699
- //# sourceMappingURL=chunk-5XXXJ6DT.js.map
2738
+ //# sourceMappingURL=chunk-E2RC367T.js.map